@internetarchive/collection-browser 3.4.1-alpha-webdev7761.4 → 3.4.1
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/.editorconfig +29 -29
- package/.github/workflows/ci.yml +27 -27
- package/.github/workflows/gh-pages-main.yml +39 -39
- package/.github/workflows/npm-publish.yml +39 -39
- package/.github/workflows/pr-preview.yml +38 -38
- package/.husky/pre-commit +4 -4
- package/.prettierignore +1 -1
- package/LICENSE +661 -661
- package/README.md +83 -83
- package/dist/src/app-root.js +28 -19
- package/dist/src/app-root.js.map +1 -1
- package/dist/src/collection-browser.d.ts +4 -24
- package/dist/src/collection-browser.js +125 -286
- package/dist/src/collection-browser.js.map +1 -1
- package/dist/src/collection-facets/facet-row.js +143 -143
- package/dist/src/collection-facets/facet-row.js.map +1 -1
- package/dist/src/collection-facets/more-facets-content.d.ts +1 -1
- package/dist/src/collection-facets/more-facets-content.js +48 -34
- package/dist/src/collection-facets/more-facets-content.js.map +1 -1
- package/dist/src/collection-facets/more-facets-pagination.js +10 -6
- package/dist/src/collection-facets/more-facets-pagination.js.map +1 -1
- package/dist/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-heuristic.js +21 -16
- package/dist/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-heuristic.js.map +1 -1
- package/dist/src/collection-facets/smart-facets/smart-facet-bar.js +10 -7
- package/dist/src/collection-facets/smart-facets/smart-facet-bar.js.map +1 -1
- package/dist/src/collection-facets/smart-facets/smart-facet-button.js +2 -3
- package/dist/src/collection-facets/smart-facets/smart-facet-button.js.map +1 -1
- package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.js +11 -9
- package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.js.map +1 -1
- package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.js +7 -7
- package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.js.map +1 -1
- package/dist/src/collection-facets/toggle-switch.js +6 -4
- package/dist/src/collection-facets/toggle-switch.js.map +1 -1
- package/dist/src/collection-facets.js +310 -309
- package/dist/src/collection-facets.js.map +1 -1
- package/dist/src/data-source/collection-browser-data-source-interface.d.ts +1 -10
- package/dist/src/data-source/collection-browser-data-source-interface.js.map +1 -1
- package/dist/src/data-source/collection-browser-data-source.d.ts +1 -19
- package/dist/src/data-source/collection-browser-data-source.js +65 -71
- package/dist/src/data-source/collection-browser-data-source.js.map +1 -1
- package/dist/src/data-source/collection-browser-query-state.d.ts +2 -1
- package/dist/src/data-source/collection-browser-query-state.js.map +1 -1
- package/dist/src/data-source/models.d.ts +0 -11
- package/dist/src/data-source/models.js.map +1 -1
- package/dist/src/empty-placeholder.js +18 -19
- package/dist/src/empty-placeholder.js.map +1 -1
- package/dist/src/expanded-date-picker.js +10 -6
- package/dist/src/expanded-date-picker.js.map +1 -1
- package/dist/src/language-code-handler/language-code-handler.js +2 -2
- package/dist/src/language-code-handler/language-code-handler.js.map +1 -1
- package/dist/src/manage/manage-bar.js +15 -9
- package/dist/src/manage/manage-bar.js.map +1 -1
- package/dist/src/manage/remove-items-modal-content.js +2 -2
- package/dist/src/manage/remove-items-modal-content.js.map +1 -1
- package/dist/src/models.d.ts +6 -2
- package/dist/src/models.js +54 -46
- package/dist/src/models.js.map +1 -1
- package/dist/src/restoration-state-handler.d.ts +2 -1
- package/dist/src/restoration-state-handler.js +19 -12
- package/dist/src/restoration-state-handler.js.map +1 -1
- package/dist/src/sort-filter-bar/alpha-bar.js +14 -9
- package/dist/src/sort-filter-bar/alpha-bar.js.map +1 -1
- package/dist/src/sort-filter-bar/sort-filter-bar.js +24 -14
- package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -1
- package/dist/src/tiles/base-tile-component.js +2 -1
- package/dist/src/tiles/base-tile-component.js.map +1 -1
- package/dist/src/tiles/grid/account-tile.js +7 -5
- package/dist/src/tiles/grid/account-tile.js.map +1 -1
- package/dist/src/tiles/grid/collection-tile.js +6 -3
- package/dist/src/tiles/grid/collection-tile.js.map +1 -1
- package/dist/src/tiles/grid/item-tile.js +33 -23
- package/dist/src/tiles/grid/item-tile.js.map +1 -1
- package/dist/src/tiles/grid/search-tile.js +2 -1
- package/dist/src/tiles/grid/search-tile.js.map +1 -1
- package/dist/src/tiles/grid/tile-stats.js +3 -2
- package/dist/src/tiles/grid/tile-stats.js.map +1 -1
- package/dist/src/tiles/hover/hover-pane-controller.js +28 -21
- package/dist/src/tiles/hover/hover-pane-controller.js.map +1 -1
- package/dist/src/tiles/hover/tile-hover-pane.js +4 -3
- package/dist/src/tiles/hover/tile-hover-pane.js.map +1 -1
- package/dist/src/tiles/image-block.js +8 -5
- package/dist/src/tiles/image-block.js.map +1 -1
- package/dist/src/tiles/item-image.js +19 -12
- package/dist/src/tiles/item-image.js.map +1 -1
- package/dist/src/tiles/list/tile-list-compact.js +25 -17
- package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
- package/dist/src/tiles/list/tile-list.js +55 -34
- package/dist/src/tiles/list/tile-list.js.map +1 -1
- package/dist/src/tiles/overlay/icon-overlay.js +2 -1
- package/dist/src/tiles/overlay/icon-overlay.js.map +1 -1
- package/dist/src/tiles/overlay/text-overlay.js +4 -2
- package/dist/src/tiles/overlay/text-overlay.js.map +1 -1
- package/dist/src/tiles/text-snippet-block.js +4 -2
- package/dist/src/tiles/text-snippet-block.js.map +1 -1
- package/dist/src/tiles/tile-dispatcher.js +30 -22
- package/dist/src/tiles/tile-dispatcher.js.map +1 -1
- package/dist/src/tiles/tile-display-value-provider.js +9 -5
- package/dist/src/tiles/tile-display-value-provider.js.map +1 -1
- package/dist/src/tiles/tile-mediatype-icon.js +19 -12
- package/dist/src/tiles/tile-mediatype-icon.js.map +1 -1
- package/dist/src/utils/collapse-repeated-quotes.js +1 -1
- package/dist/src/utils/collapse-repeated-quotes.js.map +1 -1
- package/dist/src/utils/facet-utils.js +5 -3
- package/dist/src/utils/facet-utils.js.map +1 -1
- package/dist/src/utils/format-count.js +10 -10
- package/dist/src/utils/format-count.js.map +1 -1
- package/dist/src/utils/resolve-mediatype.js +3 -2
- package/dist/src/utils/resolve-mediatype.js.map +1 -1
- package/dist/test/collection-browser.test.js +380 -336
- package/dist/test/collection-browser.test.js.map +1 -1
- package/dist/test/collection-facets/facet-row.test.js +52 -37
- package/dist/test/collection-facets/facet-row.test.js.map +1 -1
- package/dist/test/collection-facets/facets-template.test.js +23 -17
- package/dist/test/collection-facets/facets-template.test.js.map +1 -1
- package/dist/test/collection-facets/more-facets-content.test.js +32 -22
- package/dist/test/collection-facets/more-facets-content.test.js.map +1 -1
- package/dist/test/collection-facets/more-facets-pagination.test.js +22 -16
- package/dist/test/collection-facets/more-facets-pagination.test.js.map +1 -1
- package/dist/test/collection-facets/toggle-switch.test.js +19 -22
- package/dist/test/collection-facets/toggle-switch.test.js.map +1 -1
- package/dist/test/collection-facets.test.js +77 -60
- package/dist/test/collection-facets.test.js.map +1 -1
- package/dist/test/empty-placeholder.test.js +17 -11
- package/dist/test/empty-placeholder.test.js.map +1 -1
- package/dist/test/expanded-date-picker.test.js +14 -8
- package/dist/test/expanded-date-picker.test.js.map +1 -1
- package/dist/test/icon-overlay.test.js +6 -7
- package/dist/test/icon-overlay.test.js.map +1 -1
- package/dist/test/image-block.test.js +26 -16
- package/dist/test/image-block.test.js.map +1 -1
- package/dist/test/item-image.test.js +32 -23
- package/dist/test/item-image.test.js.map +1 -1
- package/dist/test/manage/manage-bar.test.js +33 -21
- package/dist/test/manage/manage-bar.test.js.map +1 -1
- package/dist/test/manage/remove-items-modal-content.test.js +15 -10
- package/dist/test/manage/remove-items-modal-content.test.js.map +1 -1
- package/dist/test/mocks/mock-search-service.js +3 -2
- package/dist/test/mocks/mock-search-service.js.map +1 -1
- package/dist/test/restoration-state-handler.test.js +54 -14
- package/dist/test/restoration-state-handler.test.js.map +1 -1
- package/dist/test/review-block.test.js +18 -16
- package/dist/test/review-block.test.js.map +1 -1
- package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js +3 -2
- package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js.map +1 -1
- package/dist/test/sort-filter-bar/alpha-bar.test.js +24 -18
- package/dist/test/sort-filter-bar/alpha-bar.test.js.map +1 -1
- package/dist/test/sort-filter-bar/sort-filter-bar.test.js +180 -178
- package/dist/test/sort-filter-bar/sort-filter-bar.test.js.map +1 -1
- package/dist/test/text-overlay.test.js +15 -16
- package/dist/test/text-overlay.test.js.map +1 -1
- package/dist/test/text-snippet-block.test.js +19 -14
- package/dist/test/text-snippet-block.test.js.map +1 -1
- package/dist/test/tile-stats.test.js +34 -73
- package/dist/test/tile-stats.test.js.map +1 -1
- package/dist/test/tiles/grid/account-tile.test.js +25 -25
- package/dist/test/tiles/grid/account-tile.test.js.map +1 -1
- package/dist/test/tiles/grid/collection-tile.test.js +19 -13
- package/dist/test/tiles/grid/collection-tile.test.js.map +1 -1
- package/dist/test/tiles/grid/item-tile.test.js +91 -64
- package/dist/test/tiles/grid/item-tile.test.js.map +1 -1
- package/dist/test/tiles/grid/search-tile.test.js +13 -9
- package/dist/test/tiles/grid/search-tile.test.js.map +1 -1
- package/dist/test/tiles/hover/hover-pane-controller.test.js +35 -23
- package/dist/test/tiles/hover/hover-pane-controller.test.js.map +1 -1
- package/dist/test/tiles/hover/tile-hover-pane.test.js +16 -12
- package/dist/test/tiles/hover/tile-hover-pane.test.js.map +1 -1
- package/dist/test/tiles/list/tile-list-compact.test.js +48 -34
- package/dist/test/tiles/list/tile-list-compact.test.js.map +1 -1
- package/dist/test/tiles/list/tile-list.test.js +105 -76
- package/dist/test/tiles/list/tile-list.test.js.map +1 -1
- package/dist/test/tiles/tile-dispatcher.test.js +30 -17
- package/dist/test/tiles/tile-dispatcher.test.js.map +1 -1
- package/dist/test/tiles/tile-mediatype-icon.test.js +24 -12
- package/dist/test/tiles/tile-mediatype-icon.test.js.map +1 -1
- package/eslint.config.mjs +53 -53
- package/index.html +24 -24
- package/local.archive.org.cert +86 -86
- package/local.archive.org.key +27 -27
- package/package.json +118 -120
- package/renovate.json +6 -6
- package/src/collection-browser.ts +15 -246
- package/src/collection-facets/facet-row.ts +296 -299
- package/src/collection-facets/more-facets-content.ts +8 -5
- package/src/collection-facets.ts +995 -1010
- package/src/data-source/collection-browser-data-source-interface.ts +333 -345
- package/src/data-source/collection-browser-data-source.ts +1401 -1441
- package/src/data-source/collection-browser-query-state.ts +65 -59
- package/src/data-source/models.ts +43 -56
- package/src/models.ts +870 -866
- package/src/restoration-state-handler.ts +544 -546
- package/test/collection-browser.test.ts +2403 -2413
- package/test/restoration-state-handler.test.ts +510 -480
- package/tsconfig.json +20 -25
- package/vite.config.ts +22 -29
- package/web-dev-server.config.mjs +30 -30
- package/web-test-runner.config.mjs +41 -41
- package/dist/src/combo-box/caret-closed.d.ts +0 -2
- package/dist/src/combo-box/caret-closed.js +0 -7
- package/dist/src/combo-box/caret-closed.js.map +0 -1
- package/dist/src/combo-box/caret-open.d.ts +0 -2
- package/dist/src/combo-box/caret-open.js +0 -7
- package/dist/src/combo-box/caret-open.js.map +0 -1
- package/dist/src/combo-box/clear.d.ts +0 -2
- package/dist/src/combo-box/clear.js +0 -11
- package/dist/src/combo-box/clear.js.map +0 -1
- package/dist/src/combo-box/ia-combo-box.d.ts +0 -422
- package/dist/src/combo-box/ia-combo-box.js +0 -1203
- package/dist/src/combo-box/ia-combo-box.js.map +0 -1
- package/dist/src/combo-box/models.d.ts +0 -75
- package/dist/src/combo-box/models.js +0 -40
- package/dist/src/combo-box/models.js.map +0 -1
- package/src/combo-box/caret-closed.ts +0 -7
- package/src/combo-box/caret-open.ts +0 -7
- package/src/combo-box/clear.ts +0 -11
- package/src/combo-box/ia-combo-box.ts +0 -1288
- package/src/combo-box/models.ts +0 -113
|
@@ -20,6 +20,7 @@ let FacetRow = FacetRow_1 = class FacetRow extends LitElement {
|
|
|
20
20
|
* the display name, and the count.
|
|
21
21
|
*/
|
|
22
22
|
get facetRowTemplate() {
|
|
23
|
+
var _a, _b, _c, _d;
|
|
23
24
|
const { bucket, facetType } = this;
|
|
24
25
|
if (!bucket || !facetType)
|
|
25
26
|
return nothing;
|
|
@@ -31,14 +32,13 @@ let FacetRow = FacetRow_1 = class FacetRow extends LitElement {
|
|
|
31
32
|
// For collections, we render the collection title as a link.
|
|
32
33
|
// For other facet types, we just have a static value to use.
|
|
33
34
|
const bucketTextDisplay = facetType !== 'collection'
|
|
34
|
-
? html `${bucket.displayText
|
|
35
|
-
: html `<a href="/details/${bucket.key}">
|
|
36
|
-
${this.collectionTitles
|
|
35
|
+
? html `${(_a = bucket.displayText) !== null && _a !== void 0 ? _a : bucket.key} ${extraNoteSpan}`
|
|
36
|
+
: html `<a href="/details/${bucket.key}">
|
|
37
|
+
${(_c = (_b = this.collectionTitles) === null || _b === void 0 ? void 0 : _b.get(bucket.key)) !== null && _c !== void 0 ? _c : bucket.key}
|
|
37
38
|
</a> `;
|
|
38
|
-
const bucketCountText = bucket.count > 0 ? bucket.count.toLocaleString() : '';
|
|
39
39
|
const facetHidden = bucket.state === 'hidden';
|
|
40
40
|
const facetSelected = bucket.state === 'selected';
|
|
41
|
-
const titleText = `${facetType}: ${bucket.displayText
|
|
41
|
+
const titleText = `${facetType}: ${(_d = bucket.displayText) !== null && _d !== void 0 ? _d : bucket.key}`;
|
|
42
42
|
const onlyShowText = facetSelected
|
|
43
43
|
? `Show all ${facetType}s`
|
|
44
44
|
: `Only show ${titleText}`;
|
|
@@ -47,56 +47,56 @@ let FacetRow = FacetRow_1 = class FacetRow extends LitElement {
|
|
|
47
47
|
const showHideText = facetHidden ? unhideText : hideText;
|
|
48
48
|
const ariaLabel = `${titleText}, ${bucket.count} results`;
|
|
49
49
|
// Added data-testid for Playwright testing
|
|
50
|
-
return html `
|
|
51
|
-
<div class="facet-row-container">
|
|
52
|
-
<div class="facet-checkboxes">
|
|
53
|
-
<input
|
|
54
|
-
type="checkbox"
|
|
55
|
-
.name=${facetType}
|
|
56
|
-
.value=${bucket.key}
|
|
50
|
+
return html `
|
|
51
|
+
<div class="facet-row-container">
|
|
52
|
+
<div class="facet-checkboxes">
|
|
53
|
+
<input
|
|
54
|
+
type="checkbox"
|
|
55
|
+
.name=${facetType}
|
|
56
|
+
.value=${bucket.key}
|
|
57
57
|
@click=${(e) => {
|
|
58
58
|
this.facetClicked(e, false);
|
|
59
|
-
}}
|
|
60
|
-
.checked=${facetSelected}
|
|
61
|
-
class="select-facet-checkbox"
|
|
62
|
-
title=${onlyShowText}
|
|
63
|
-
id=${showOnlyCheckboxId}
|
|
64
|
-
data-testid=${showOnlyCheckboxId}
|
|
65
|
-
/>
|
|
66
|
-
<div class="hide-facet-container">
|
|
67
|
-
<input
|
|
68
|
-
type="checkbox"
|
|
69
|
-
id=${negativeCheckboxId}
|
|
70
|
-
.name=${facetType}
|
|
71
|
-
.value=${bucket.key}
|
|
59
|
+
}}
|
|
60
|
+
.checked=${facetSelected}
|
|
61
|
+
class="select-facet-checkbox"
|
|
62
|
+
title=${onlyShowText}
|
|
63
|
+
id=${showOnlyCheckboxId}
|
|
64
|
+
data-testid=${showOnlyCheckboxId}
|
|
65
|
+
/>
|
|
66
|
+
<div class="hide-facet-container">
|
|
67
|
+
<input
|
|
68
|
+
type="checkbox"
|
|
69
|
+
id=${negativeCheckboxId}
|
|
70
|
+
.name=${facetType}
|
|
71
|
+
.value=${bucket.key}
|
|
72
72
|
@click=${(e) => {
|
|
73
73
|
this.facetClicked(e, true);
|
|
74
|
-
}}
|
|
75
|
-
.checked=${facetHidden}
|
|
76
|
-
class="hide-facet-checkbox"
|
|
77
|
-
/>
|
|
78
|
-
<label
|
|
79
|
-
for=${negativeCheckboxId}
|
|
80
|
-
class="hide-facet-icon${facetHidden ? ' active' : ''}"
|
|
81
|
-
title=${showHideText}
|
|
82
|
-
data-testid=${negativeCheckboxId}
|
|
83
|
-
>
|
|
84
|
-
<span class="sr-only">${showHideText}</span>
|
|
85
|
-
<span class="eye eye-open">${eyeIcon}</span>
|
|
86
|
-
<span class="eye eye-closed">${eyeClosedIcon}</span>
|
|
87
|
-
</label>
|
|
88
|
-
</div>
|
|
89
|
-
</div>
|
|
90
|
-
<label
|
|
91
|
-
for=${showOnlyCheckboxId}
|
|
92
|
-
class="facet-info-display"
|
|
93
|
-
title=${onlyShowText}
|
|
94
|
-
aria-label=${ariaLabel}
|
|
95
|
-
>
|
|
96
|
-
<div class="facet-title">${bucketTextDisplay}</div>
|
|
97
|
-
<div class="facet-count">${
|
|
98
|
-
</label>
|
|
99
|
-
</div>
|
|
74
|
+
}}
|
|
75
|
+
.checked=${facetHidden}
|
|
76
|
+
class="hide-facet-checkbox"
|
|
77
|
+
/>
|
|
78
|
+
<label
|
|
79
|
+
for=${negativeCheckboxId}
|
|
80
|
+
class="hide-facet-icon${facetHidden ? ' active' : ''}"
|
|
81
|
+
title=${showHideText}
|
|
82
|
+
data-testid=${negativeCheckboxId}
|
|
83
|
+
>
|
|
84
|
+
<span class="sr-only">${showHideText}</span>
|
|
85
|
+
<span class="eye eye-open">${eyeIcon}</span>
|
|
86
|
+
<span class="eye eye-closed">${eyeClosedIcon}</span>
|
|
87
|
+
</label>
|
|
88
|
+
</div>
|
|
89
|
+
</div>
|
|
90
|
+
<label
|
|
91
|
+
for=${showOnlyCheckboxId}
|
|
92
|
+
class="facet-info-display"
|
|
93
|
+
title=${onlyShowText}
|
|
94
|
+
aria-label=${ariaLabel}
|
|
95
|
+
>
|
|
96
|
+
<div class="facet-title">${bucketTextDisplay}</div>
|
|
97
|
+
<div class="facet-count">${bucket.count.toLocaleString()}</div>
|
|
98
|
+
</label>
|
|
99
|
+
</div>
|
|
100
100
|
`;
|
|
101
101
|
}
|
|
102
102
|
//
|
|
@@ -153,98 +153,98 @@ let FacetRow = FacetRow_1 = class FacetRow extends LitElement {
|
|
|
153
153
|
const facetRowBorderTop = css `var(--facet-row-border-top, 1px solid transparent)`;
|
|
154
154
|
const facetRowBorderBottom = css `var(--facet-row-border-bottom, 1px solid transparent)`;
|
|
155
155
|
const checkboxHeight = css `15px`;
|
|
156
|
-
const ownCss = css `
|
|
157
|
-
.facet-checkboxes {
|
|
158
|
-
margin: 0 5px 0 0;
|
|
159
|
-
display: flex;
|
|
160
|
-
height: ${checkboxHeight};
|
|
161
|
-
}
|
|
162
|
-
.facet-checkboxes input:first-child {
|
|
163
|
-
margin-right: 5px;
|
|
164
|
-
}
|
|
165
|
-
.facet-checkboxes input {
|
|
166
|
-
height: ${checkboxHeight};
|
|
167
|
-
width: ${checkboxHeight};
|
|
168
|
-
margin: 0;
|
|
169
|
-
}
|
|
170
|
-
.facet-row-container {
|
|
171
|
-
display: flex;
|
|
172
|
-
font-weight: 500;
|
|
173
|
-
font-size: 1.2rem;
|
|
174
|
-
margin: 0 auto;
|
|
175
|
-
padding: 0.25rem 0;
|
|
176
|
-
height: auto;
|
|
177
|
-
border-top: ${facetRowBorderTop};
|
|
178
|
-
border-bottom: ${facetRowBorderBottom};
|
|
179
|
-
}
|
|
180
|
-
.facet-info-display {
|
|
181
|
-
display: flex;
|
|
182
|
-
flex: 1 1 0%;
|
|
183
|
-
cursor: pointer;
|
|
184
|
-
flex-wrap: wrap;
|
|
185
|
-
}
|
|
186
|
-
.facet-title {
|
|
187
|
-
word-break: break-word;
|
|
188
|
-
display: inline-block;
|
|
189
|
-
flex: 1 1 0%;
|
|
190
|
-
}
|
|
191
|
-
.facet-note {
|
|
192
|
-
color: #bbb;
|
|
193
|
-
}
|
|
194
|
-
.facet-count {
|
|
195
|
-
text-align: right;
|
|
196
|
-
}
|
|
197
|
-
.select-facet-checkbox {
|
|
198
|
-
cursor: pointer;
|
|
199
|
-
display: inline-block;
|
|
200
|
-
}
|
|
201
|
-
.hide-facet-checkbox {
|
|
202
|
-
position: absolute;
|
|
203
|
-
clip: rect(0, 0, 0, 0);
|
|
204
|
-
pointer-events: none;
|
|
205
|
-
}
|
|
206
|
-
.hide-facet-checkbox:focus-visible + .hide-facet-icon {
|
|
207
|
-
outline-style: auto;
|
|
208
|
-
outline-offset: 2px;
|
|
209
|
-
}
|
|
210
|
-
.hide-facet-icon {
|
|
211
|
-
width: ${checkboxHeight};
|
|
212
|
-
height: ${checkboxHeight};
|
|
213
|
-
cursor: pointer;
|
|
214
|
-
display: flex;
|
|
215
|
-
}
|
|
216
|
-
.eye {
|
|
217
|
-
width: ${checkboxHeight};
|
|
218
|
-
height: ${checkboxHeight};
|
|
219
|
-
opacity: 0.3;
|
|
220
|
-
}
|
|
221
|
-
.hide-facet-icon:hover .eye,
|
|
222
|
-
.active .eye {
|
|
223
|
-
opacity: 1;
|
|
224
|
-
}
|
|
225
|
-
.hide-facet-icon:hover .eye-open,
|
|
226
|
-
.hide-facet-icon .eye-closed {
|
|
227
|
-
display: none;
|
|
228
|
-
}
|
|
229
|
-
.hide-facet-icon:hover .eye-closed,
|
|
230
|
-
.hide-facet-icon.active .eye-closed {
|
|
231
|
-
display: inline;
|
|
232
|
-
}
|
|
233
|
-
.hide-facet-icon.active .eye-open {
|
|
234
|
-
display: none;
|
|
235
|
-
}
|
|
236
|
-
.sorting-icon {
|
|
237
|
-
cursor: pointer;
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
a:link,
|
|
241
|
-
a:visited {
|
|
242
|
-
text-decoration: none;
|
|
243
|
-
color: var(--ia-theme-link-color, #4b64ff);
|
|
244
|
-
}
|
|
245
|
-
a:hover {
|
|
246
|
-
text-decoration: underline;
|
|
247
|
-
}
|
|
156
|
+
const ownCss = css `
|
|
157
|
+
.facet-checkboxes {
|
|
158
|
+
margin: 0 5px 0 0;
|
|
159
|
+
display: flex;
|
|
160
|
+
height: ${checkboxHeight};
|
|
161
|
+
}
|
|
162
|
+
.facet-checkboxes input:first-child {
|
|
163
|
+
margin-right: 5px;
|
|
164
|
+
}
|
|
165
|
+
.facet-checkboxes input {
|
|
166
|
+
height: ${checkboxHeight};
|
|
167
|
+
width: ${checkboxHeight};
|
|
168
|
+
margin: 0;
|
|
169
|
+
}
|
|
170
|
+
.facet-row-container {
|
|
171
|
+
display: flex;
|
|
172
|
+
font-weight: 500;
|
|
173
|
+
font-size: 1.2rem;
|
|
174
|
+
margin: 0 auto;
|
|
175
|
+
padding: 0.25rem 0;
|
|
176
|
+
height: auto;
|
|
177
|
+
border-top: ${facetRowBorderTop};
|
|
178
|
+
border-bottom: ${facetRowBorderBottom};
|
|
179
|
+
}
|
|
180
|
+
.facet-info-display {
|
|
181
|
+
display: flex;
|
|
182
|
+
flex: 1 1 0%;
|
|
183
|
+
cursor: pointer;
|
|
184
|
+
flex-wrap: wrap;
|
|
185
|
+
}
|
|
186
|
+
.facet-title {
|
|
187
|
+
word-break: break-word;
|
|
188
|
+
display: inline-block;
|
|
189
|
+
flex: 1 1 0%;
|
|
190
|
+
}
|
|
191
|
+
.facet-note {
|
|
192
|
+
color: #bbb;
|
|
193
|
+
}
|
|
194
|
+
.facet-count {
|
|
195
|
+
text-align: right;
|
|
196
|
+
}
|
|
197
|
+
.select-facet-checkbox {
|
|
198
|
+
cursor: pointer;
|
|
199
|
+
display: inline-block;
|
|
200
|
+
}
|
|
201
|
+
.hide-facet-checkbox {
|
|
202
|
+
position: absolute;
|
|
203
|
+
clip: rect(0, 0, 0, 0);
|
|
204
|
+
pointer-events: none;
|
|
205
|
+
}
|
|
206
|
+
.hide-facet-checkbox:focus-visible + .hide-facet-icon {
|
|
207
|
+
outline-style: auto;
|
|
208
|
+
outline-offset: 2px;
|
|
209
|
+
}
|
|
210
|
+
.hide-facet-icon {
|
|
211
|
+
width: ${checkboxHeight};
|
|
212
|
+
height: ${checkboxHeight};
|
|
213
|
+
cursor: pointer;
|
|
214
|
+
display: flex;
|
|
215
|
+
}
|
|
216
|
+
.eye {
|
|
217
|
+
width: ${checkboxHeight};
|
|
218
|
+
height: ${checkboxHeight};
|
|
219
|
+
opacity: 0.3;
|
|
220
|
+
}
|
|
221
|
+
.hide-facet-icon:hover .eye,
|
|
222
|
+
.active .eye {
|
|
223
|
+
opacity: 1;
|
|
224
|
+
}
|
|
225
|
+
.hide-facet-icon:hover .eye-open,
|
|
226
|
+
.hide-facet-icon .eye-closed {
|
|
227
|
+
display: none;
|
|
228
|
+
}
|
|
229
|
+
.hide-facet-icon:hover .eye-closed,
|
|
230
|
+
.hide-facet-icon.active .eye-closed {
|
|
231
|
+
display: inline;
|
|
232
|
+
}
|
|
233
|
+
.hide-facet-icon.active .eye-open {
|
|
234
|
+
display: none;
|
|
235
|
+
}
|
|
236
|
+
.sorting-icon {
|
|
237
|
+
cursor: pointer;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
a:link,
|
|
241
|
+
a:visited {
|
|
242
|
+
text-decoration: none;
|
|
243
|
+
color: var(--ia-theme-link-color, #4b64ff);
|
|
244
|
+
}
|
|
245
|
+
a:hover {
|
|
246
|
+
text-decoration: underline;
|
|
247
|
+
}
|
|
248
248
|
`;
|
|
249
249
|
return [srOnlyStyle, ownCss];
|
|
250
250
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"facet-row.js","sourceRoot":"","sources":["../../../src/collection-facets/facet-row.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n css,\r\n html,\r\n LitElement,\r\n TemplateResult,\r\n CSSResultGroup,\r\n nothing,\r\n} from 'lit';\r\nimport { customElement, property } from 'lit/decorators.js';\r\nimport eyeIcon from '../assets/img/icons/eye';\r\nimport eyeClosedIcon from '../assets/img/icons/eye-closed';\r\nimport type {\r\n FacetOption,\r\n FacetBucket,\r\n FacetEventDetails,\r\n FacetState,\r\n} from '../models';\r\nimport type { CollectionTitles } from '../data-source/models';\r\nimport { srOnlyStyle } from '../styles/sr-only';\r\n\r\n@customElement('facet-row')\r\nexport class FacetRow extends LitElement {\r\n //\r\n // UI STATE\r\n //\r\n\r\n /** The name of the facet group to which this facet belongs (e.g., \"mediatype\") */\r\n @property({ type: String }) facetType?: FacetOption;\r\n\r\n /** The facet bucket containing details about the state, count, and key for this row */\r\n @property({ type: Object }) bucket?: FacetBucket;\r\n\r\n /** The collection name cache for converting collection identifiers to titles */\r\n @property({ type: Object })\r\n collectionTitles?: CollectionTitles;\r\n\r\n //\r\n // COMPONENT LIFECYCLE METHODS\r\n //\r\n\r\n render() {\r\n return html`${this.facetRowTemplate}`;\r\n }\r\n\r\n //\r\n // TEMPLATE GETTERS\r\n //\r\n\r\n /**\r\n * Template for the full facet row, including the positive/negative checks,\r\n * the display name, and the count.\r\n */\r\n private get facetRowTemplate(): TemplateResult | typeof nothing {\r\n const { bucket, facetType } = this;\r\n if (!bucket || !facetType) return nothing;\r\n\r\n const showOnlyCheckboxId = `${facetType}:${bucket.key}-show-only`;\r\n const negativeCheckboxId = `${facetType}:${bucket.key}-negative`;\r\n\r\n const extraNoteSpan = bucket.extraNote\r\n ? html`<span class=\"facet-note\">${bucket.extraNote}</span>`\r\n : nothing;\r\n\r\n // For collections, we render the collection title as a link.\r\n // For other facet types, we just have a static value to use.\r\n const bucketTextDisplay =\r\n facetType !== 'collection'\r\n ? html`${bucket.displayText ?? bucket.key} ${extraNoteSpan}`\r\n : html`<a href=\"/details/${bucket.key}\">\r\n ${this.collectionTitles?.get(bucket.key) ?? bucket.key}\r\n </a> `;\r\n\r\n const bucketCountText =\r\n bucket.count > 0 ? bucket.count.toLocaleString() : '';\r\n\r\n const facetHidden = bucket.state === 'hidden';\r\n const facetSelected = bucket.state === 'selected';\r\n\r\n const titleText = `${facetType}: ${bucket.displayText ?? bucket.key}`;\r\n const onlyShowText = facetSelected\r\n ? `Show all ${facetType}s`\r\n : `Only show ${titleText}`;\r\n const hideText = `Hide ${titleText}`;\r\n const unhideText = `Unhide ${titleText}`;\r\n const showHideText = facetHidden ? unhideText : hideText;\r\n const ariaLabel = `${titleText}, ${bucket.count} results`;\r\n\r\n // Added data-testid for Playwright testing\r\n return html`\r\n <div class=\"facet-row-container\">\r\n <div class=\"facet-checkboxes\">\r\n <input\r\n type=\"checkbox\"\r\n .name=${facetType}\r\n .value=${bucket.key}\r\n @click=${(e: Event) => {\r\n this.facetClicked(e, false);\r\n }}\r\n .checked=${facetSelected}\r\n class=\"select-facet-checkbox\"\r\n title=${onlyShowText}\r\n id=${showOnlyCheckboxId}\r\n data-testid=${showOnlyCheckboxId}\r\n />\r\n <div class=\"hide-facet-container\">\r\n <input\r\n type=\"checkbox\"\r\n id=${negativeCheckboxId}\r\n .name=${facetType}\r\n .value=${bucket.key}\r\n @click=${(e: Event) => {\r\n this.facetClicked(e, true);\r\n }}\r\n .checked=${facetHidden}\r\n class=\"hide-facet-checkbox\"\r\n />\r\n <label\r\n for=${negativeCheckboxId}\r\n class=\"hide-facet-icon${facetHidden ? ' active' : ''}\"\r\n title=${showHideText}\r\n data-testid=${negativeCheckboxId}\r\n >\r\n <span class=\"sr-only\">${showHideText}</span>\r\n <span class=\"eye eye-open\">${eyeIcon}</span>\r\n <span class=\"eye eye-closed\">${eyeClosedIcon}</span>\r\n </label>\r\n </div>\r\n </div>\r\n <label\r\n for=${showOnlyCheckboxId}\r\n class=\"facet-info-display\"\r\n title=${onlyShowText}\r\n aria-label=${ariaLabel}\r\n >\r\n <div class=\"facet-title\">${bucketTextDisplay}</div>\r\n <div class=\"facet-count\">${bucketCountText}</div>\r\n </label>\r\n </div>\r\n `;\r\n }\r\n\r\n //\r\n // EVENT HANDLERS & DISPATCHERS\r\n //\r\n\r\n /**\r\n * Handler for whenever this facet is clicked & its state changes\r\n */\r\n private facetClicked(e: Event, negative: boolean) {\r\n const { bucket, facetType } = this;\r\n if (!bucket || !facetType) return;\r\n\r\n const target = e.target as HTMLInputElement;\r\n const { checked } = target;\r\n this.bucket = {\r\n ...bucket,\r\n state: FacetRow.getFacetState(checked, negative),\r\n };\r\n\r\n this.dispatchFacetClickEvent({\r\n facetType,\r\n bucket: this.bucket,\r\n negative,\r\n });\r\n }\r\n\r\n /**\r\n * Emits a `facetClick` event with details about this facet & its current state\r\n */\r\n private dispatchFacetClickEvent(detail: FacetEventDetails) {\r\n const event = new CustomEvent<FacetEventDetails>('facetClick', {\r\n detail,\r\n });\r\n this.dispatchEvent(event);\r\n }\r\n\r\n //\r\n // OTHER METHODS\r\n //\r\n\r\n /**\r\n * Returns the composed facet state corresponding to a positive or negative facet's checked state\r\n */\r\n static getFacetState(checked: boolean, negative: boolean): FacetState {\r\n let state: FacetState;\r\n if (checked) {\r\n state = negative ? 'hidden' : 'selected';\r\n } else {\r\n state = 'none';\r\n }\r\n return state;\r\n }\r\n\r\n //\r\n // STYLES\r\n //\r\n\r\n static get styles(): CSSResultGroup {\r\n const facetRowBorderTop = css`var(--facet-row-border-top, 1px solid transparent)`;\r\n const facetRowBorderBottom = css`var(--facet-row-border-bottom, 1px solid transparent)`;\r\n const checkboxHeight = css`15px`;\r\n\r\n const ownCss = css`\r\n .facet-checkboxes {\r\n margin: 0 5px 0 0;\r\n display: flex;\r\n height: ${checkboxHeight};\r\n }\r\n .facet-checkboxes input:first-child {\r\n margin-right: 5px;\r\n }\r\n .facet-checkboxes input {\r\n height: ${checkboxHeight};\r\n width: ${checkboxHeight};\r\n margin: 0;\r\n }\r\n .facet-row-container {\r\n display: flex;\r\n font-weight: 500;\r\n font-size: 1.2rem;\r\n margin: 0 auto;\r\n padding: 0.25rem 0;\r\n height: auto;\r\n border-top: ${facetRowBorderTop};\r\n border-bottom: ${facetRowBorderBottom};\r\n }\r\n .facet-info-display {\r\n display: flex;\r\n flex: 1 1 0%;\r\n cursor: pointer;\r\n flex-wrap: wrap;\r\n }\r\n .facet-title {\r\n word-break: break-word;\r\n display: inline-block;\r\n flex: 1 1 0%;\r\n }\r\n .facet-note {\r\n color: #bbb;\r\n }\r\n .facet-count {\r\n text-align: right;\r\n }\r\n .select-facet-checkbox {\r\n cursor: pointer;\r\n display: inline-block;\r\n }\r\n .hide-facet-checkbox {\r\n position: absolute;\r\n clip: rect(0, 0, 0, 0);\r\n pointer-events: none;\r\n }\r\n .hide-facet-checkbox:focus-visible + .hide-facet-icon {\r\n outline-style: auto;\r\n outline-offset: 2px;\r\n }\r\n .hide-facet-icon {\r\n width: ${checkboxHeight};\r\n height: ${checkboxHeight};\r\n cursor: pointer;\r\n display: flex;\r\n }\r\n .eye {\r\n width: ${checkboxHeight};\r\n height: ${checkboxHeight};\r\n opacity: 0.3;\r\n }\r\n .hide-facet-icon:hover .eye,\r\n .active .eye {\r\n opacity: 1;\r\n }\r\n .hide-facet-icon:hover .eye-open,\r\n .hide-facet-icon .eye-closed {\r\n display: none;\r\n }\r\n .hide-facet-icon:hover .eye-closed,\r\n .hide-facet-icon.active .eye-closed {\r\n display: inline;\r\n }\r\n .hide-facet-icon.active .eye-open {\r\n display: none;\r\n }\r\n .sorting-icon {\r\n cursor: pointer;\r\n }\r\n\r\n a:link,\r\n a:visited {\r\n text-decoration: none;\r\n color: var(--ia-theme-link-color, #4b64ff);\r\n }\r\n a:hover {\r\n text-decoration: underline;\r\n }\r\n `;\r\n\r\n return [srOnlyStyle, ownCss];\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"facet-row.js","sourceRoot":"","sources":["../../../src/collection-facets/facet-row.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n css,\n html,\n LitElement,\n TemplateResult,\n CSSResultGroup,\n nothing,\n} from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport eyeIcon from '../assets/img/icons/eye';\nimport eyeClosedIcon from '../assets/img/icons/eye-closed';\nimport type {\n FacetOption,\n FacetBucket,\n FacetEventDetails,\n FacetState,\n} from '../models';\nimport type { CollectionTitles } from '../data-source/models';\nimport { srOnlyStyle } from '../styles/sr-only';\n\n@customElement('facet-row')\nexport class FacetRow extends LitElement {\n //\n // UI STATE\n //\n\n /** The name of the facet group to which this facet belongs (e.g., \"mediatype\") */\n @property({ type: String }) facetType?: FacetOption;\n\n /** The facet bucket containing details about the state, count, and key for this row */\n @property({ type: Object }) bucket?: FacetBucket;\n\n /** The collection name cache for converting collection identifiers to titles */\n @property({ type: Object })\n collectionTitles?: CollectionTitles;\n\n //\n // COMPONENT LIFECYCLE METHODS\n //\n\n render() {\n return html`${this.facetRowTemplate}`;\n }\n\n //\n // TEMPLATE GETTERS\n //\n\n /**\n * Template for the full facet row, including the positive/negative checks,\n * the display name, and the count.\n */\n private get facetRowTemplate(): TemplateResult | typeof nothing {\n const { bucket, facetType } = this;\n if (!bucket || !facetType) return nothing;\n\n const showOnlyCheckboxId = `${facetType}:${bucket.key}-show-only`;\n const negativeCheckboxId = `${facetType}:${bucket.key}-negative`;\n\n const extraNoteSpan = bucket.extraNote\n ? html`<span class=\"facet-note\">${bucket.extraNote}</span>`\n : nothing;\n\n // For collections, we render the collection title as a link.\n // For other facet types, we just have a static value to use.\n const bucketTextDisplay =\n facetType !== 'collection'\n ? html`${bucket.displayText ?? bucket.key} ${extraNoteSpan}`\n : html`<a href=\"/details/${bucket.key}\">\n ${this.collectionTitles?.get(bucket.key) ?? bucket.key}\n </a> `;\n\n const facetHidden = bucket.state === 'hidden';\n const facetSelected = bucket.state === 'selected';\n\n const titleText = `${facetType}: ${bucket.displayText ?? bucket.key}`;\n const onlyShowText = facetSelected\n ? `Show all ${facetType}s`\n : `Only show ${titleText}`;\n const hideText = `Hide ${titleText}`;\n const unhideText = `Unhide ${titleText}`;\n const showHideText = facetHidden ? unhideText : hideText;\n const ariaLabel = `${titleText}, ${bucket.count} results`;\n\n // Added data-testid for Playwright testing\n return html`\n <div class=\"facet-row-container\">\n <div class=\"facet-checkboxes\">\n <input\n type=\"checkbox\"\n .name=${facetType}\n .value=${bucket.key}\n @click=${(e: Event) => {\n this.facetClicked(e, false);\n }}\n .checked=${facetSelected}\n class=\"select-facet-checkbox\"\n title=${onlyShowText}\n id=${showOnlyCheckboxId}\n data-testid=${showOnlyCheckboxId}\n />\n <div class=\"hide-facet-container\">\n <input\n type=\"checkbox\"\n id=${negativeCheckboxId}\n .name=${facetType}\n .value=${bucket.key}\n @click=${(e: Event) => {\n this.facetClicked(e, true);\n }}\n .checked=${facetHidden}\n class=\"hide-facet-checkbox\"\n />\n <label\n for=${negativeCheckboxId}\n class=\"hide-facet-icon${facetHidden ? ' active' : ''}\"\n title=${showHideText}\n data-testid=${negativeCheckboxId}\n >\n <span class=\"sr-only\">${showHideText}</span>\n <span class=\"eye eye-open\">${eyeIcon}</span>\n <span class=\"eye eye-closed\">${eyeClosedIcon}</span>\n </label>\n </div>\n </div>\n <label\n for=${showOnlyCheckboxId}\n class=\"facet-info-display\"\n title=${onlyShowText}\n aria-label=${ariaLabel}\n >\n <div class=\"facet-title\">${bucketTextDisplay}</div>\n <div class=\"facet-count\">${bucket.count.toLocaleString()}</div>\n </label>\n </div>\n `;\n }\n\n //\n // EVENT HANDLERS & DISPATCHERS\n //\n\n /**\n * Handler for whenever this facet is clicked & its state changes\n */\n private facetClicked(e: Event, negative: boolean) {\n const { bucket, facetType } = this;\n if (!bucket || !facetType) return;\n\n const target = e.target as HTMLInputElement;\n const { checked } = target;\n this.bucket = {\n ...bucket,\n state: FacetRow.getFacetState(checked, negative),\n };\n\n this.dispatchFacetClickEvent({\n facetType,\n bucket: this.bucket,\n negative,\n });\n }\n\n /**\n * Emits a `facetClick` event with details about this facet & its current state\n */\n private dispatchFacetClickEvent(detail: FacetEventDetails) {\n const event = new CustomEvent<FacetEventDetails>('facetClick', {\n detail,\n });\n this.dispatchEvent(event);\n }\n\n //\n // OTHER METHODS\n //\n\n /**\n * Returns the composed facet state corresponding to a positive or negative facet's checked state\n */\n static getFacetState(checked: boolean, negative: boolean): FacetState {\n let state: FacetState;\n if (checked) {\n state = negative ? 'hidden' : 'selected';\n } else {\n state = 'none';\n }\n return state;\n }\n\n //\n // STYLES\n //\n\n static get styles(): CSSResultGroup {\n const facetRowBorderTop = css`var(--facet-row-border-top, 1px solid transparent)`;\n const facetRowBorderBottom = css`var(--facet-row-border-bottom, 1px solid transparent)`;\n const checkboxHeight = css`15px`;\n\n const ownCss = css`\n .facet-checkboxes {\n margin: 0 5px 0 0;\n display: flex;\n height: ${checkboxHeight};\n }\n .facet-checkboxes input:first-child {\n margin-right: 5px;\n }\n .facet-checkboxes input {\n height: ${checkboxHeight};\n width: ${checkboxHeight};\n margin: 0;\n }\n .facet-row-container {\n display: flex;\n font-weight: 500;\n font-size: 1.2rem;\n margin: 0 auto;\n padding: 0.25rem 0;\n height: auto;\n border-top: ${facetRowBorderTop};\n border-bottom: ${facetRowBorderBottom};\n }\n .facet-info-display {\n display: flex;\n flex: 1 1 0%;\n cursor: pointer;\n flex-wrap: wrap;\n }\n .facet-title {\n word-break: break-word;\n display: inline-block;\n flex: 1 1 0%;\n }\n .facet-note {\n color: #bbb;\n }\n .facet-count {\n text-align: right;\n }\n .select-facet-checkbox {\n cursor: pointer;\n display: inline-block;\n }\n .hide-facet-checkbox {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n }\n .hide-facet-checkbox:focus-visible + .hide-facet-icon {\n outline-style: auto;\n outline-offset: 2px;\n }\n .hide-facet-icon {\n width: ${checkboxHeight};\n height: ${checkboxHeight};\n cursor: pointer;\n display: flex;\n }\n .eye {\n width: ${checkboxHeight};\n height: ${checkboxHeight};\n opacity: 0.3;\n }\n .hide-facet-icon:hover .eye,\n .active .eye {\n opacity: 1;\n }\n .hide-facet-icon:hover .eye-open,\n .hide-facet-icon .eye-closed {\n display: none;\n }\n .hide-facet-icon:hover .eye-closed,\n .hide-facet-icon.active .eye-closed {\n display: inline;\n }\n .hide-facet-icon.active .eye-open {\n display: none;\n }\n .sorting-icon {\n cursor: pointer;\n }\n\n a:link,\n a:visited {\n text-decoration: none;\n color: var(--ia-theme-link-color, #4b64ff);\n }\n a:hover {\n text-decoration: underline;\n }\n `;\n\n return [srOnlyStyle, ownCss];\n }\n}\n"]}
|
|
@@ -4,7 +4,7 @@ import type { ModalManagerInterface } from '@internetarchive/modal-manager';
|
|
|
4
4
|
import type { AnalyticsManagerInterface } from '@internetarchive/analytics-manager';
|
|
5
5
|
import { SelectedFacets, FacetOption } from '../models';
|
|
6
6
|
import type { CollectionTitles, PageSpecifierParams, TVChannelAliases } from '../data-source/models';
|
|
7
|
-
import '@internetarchive/ia-
|
|
7
|
+
import '@internetarchive/elements/ia-status-indicator/ia-status-indicator';
|
|
8
8
|
import './more-facets-pagination';
|
|
9
9
|
import './facets-template';
|
|
10
10
|
import './toggle-switch';
|
|
@@ -4,7 +4,7 @@ import { customElement, property, state } from 'lit/decorators.js';
|
|
|
4
4
|
import { AggregationSortType, } from '@internetarchive/search-service';
|
|
5
5
|
import { msg } from '@lit/localize';
|
|
6
6
|
import { facetTitles, suppressedCollections, valueFacetSort, defaultFacetSort, getDefaultSelectedFacets, } from '../models';
|
|
7
|
-
import '@internetarchive/ia-
|
|
7
|
+
import '@internetarchive/elements/ia-status-indicator/ia-status-indicator';
|
|
8
8
|
import './more-facets-pagination';
|
|
9
9
|
import './facets-template';
|
|
10
10
|
import { analyticsActions, analyticsCategories, } from '../utils/analytics-events';
|
|
@@ -70,8 +70,9 @@ let MoreFacetsContent = class MoreFacetsContent extends LitElement {
|
|
|
70
70
|
setupEscapeListeners() {
|
|
71
71
|
if (this.modalManager) {
|
|
72
72
|
document.addEventListener('keydown', (e) => {
|
|
73
|
+
var _a;
|
|
73
74
|
if (e.key === 'Escape') {
|
|
74
|
-
this.modalManager
|
|
75
|
+
(_a = this.modalManager) === null || _a === void 0 ? void 0 : _a.closeModal();
|
|
75
76
|
}
|
|
76
77
|
});
|
|
77
78
|
}
|
|
@@ -83,9 +84,10 @@ let MoreFacetsContent = class MoreFacetsContent extends LitElement {
|
|
|
83
84
|
* Whether facet requests are for the search_results page type (either defaulted or explicitly).
|
|
84
85
|
*/
|
|
85
86
|
get isSearchResultsPage() {
|
|
87
|
+
var _a;
|
|
86
88
|
// Default page type is search_results when none is specified, so we check
|
|
87
89
|
// for undefined as well.
|
|
88
|
-
const pageType = this.pageSpecifierParams
|
|
90
|
+
const pageType = (_a = this.pageSpecifierParams) === null || _a === void 0 ? void 0 : _a.pageType;
|
|
89
91
|
return pageType === undefined || pageType === 'search_results';
|
|
90
92
|
}
|
|
91
93
|
/**
|
|
@@ -93,9 +95,10 @@ let MoreFacetsContent = class MoreFacetsContent extends LitElement {
|
|
|
93
95
|
* - this.aggregations - hold result of search service and being used for further processing.
|
|
94
96
|
*/
|
|
95
97
|
async updateSpecificFacets() {
|
|
98
|
+
var _a, _b, _c, _d, _e, _f;
|
|
96
99
|
if (!this.facetKey)
|
|
97
100
|
return; // Can't fetch facets if we don't know what type of facets we need!
|
|
98
|
-
const trimmedQuery = this.query
|
|
101
|
+
const trimmedQuery = (_a = this.query) === null || _a === void 0 ? void 0 : _a.trim();
|
|
99
102
|
if (!trimmedQuery && this.isSearchResultsPage)
|
|
100
103
|
return; // The search page _requires_ a query
|
|
101
104
|
const aggregations = {
|
|
@@ -111,13 +114,13 @@ let MoreFacetsContent = class MoreFacetsContent extends LitElement {
|
|
|
111
114
|
aggregationsSize,
|
|
112
115
|
rows: 0, // todo - do we want server-side pagination with offset/page/limit flag?
|
|
113
116
|
};
|
|
114
|
-
const results = await this.searchService
|
|
115
|
-
this.aggregations = results
|
|
117
|
+
const results = await ((_b = this.searchService) === null || _b === void 0 ? void 0 : _b.search(params, this.searchType));
|
|
118
|
+
this.aggregations = (_c = results === null || results === void 0 ? void 0 : results.success) === null || _c === void 0 ? void 0 : _c.response.aggregations;
|
|
116
119
|
this.facetsLoading = false;
|
|
117
|
-
const collectionTitles = results
|
|
120
|
+
const collectionTitles = (_e = (_d = results === null || results === void 0 ? void 0 : results.success) === null || _d === void 0 ? void 0 : _d.response) === null || _e === void 0 ? void 0 : _e.collectionTitles;
|
|
118
121
|
if (collectionTitles) {
|
|
119
122
|
for (const [id, title] of Object.entries(collectionTitles)) {
|
|
120
|
-
this.collectionTitles
|
|
123
|
+
(_f = this.collectionTitles) === null || _f === void 0 ? void 0 : _f.set(id, title);
|
|
121
124
|
}
|
|
122
125
|
}
|
|
123
126
|
}
|
|
@@ -125,11 +128,12 @@ let MoreFacetsContent = class MoreFacetsContent extends LitElement {
|
|
|
125
128
|
* Handler for page number changes from the pagination widget.
|
|
126
129
|
*/
|
|
127
130
|
pageNumberClicked(e) {
|
|
128
|
-
|
|
131
|
+
var _a, _b;
|
|
132
|
+
const page = (_a = e === null || e === void 0 ? void 0 : e.detail) === null || _a === void 0 ? void 0 : _a.page;
|
|
129
133
|
if (page) {
|
|
130
134
|
this.pageNumber = Number(page);
|
|
131
135
|
}
|
|
132
|
-
this.analyticsHandler
|
|
136
|
+
(_b = this.analyticsHandler) === null || _b === void 0 ? void 0 : _b.sendEvent({
|
|
133
137
|
category: analyticsCategories.default,
|
|
134
138
|
action: analyticsActions.moreFacetsPageChange,
|
|
135
139
|
label: `${this.pageNumber}`,
|
|
@@ -139,6 +143,7 @@ let MoreFacetsContent = class MoreFacetsContent extends LitElement {
|
|
|
139
143
|
* Combines the selected facets with the aggregations to create a single list of facets
|
|
140
144
|
*/
|
|
141
145
|
get mergedFacets() {
|
|
146
|
+
var _a;
|
|
142
147
|
if (!this.facetKey || !this.selectedFacets)
|
|
143
148
|
return undefined;
|
|
144
149
|
const { selectedFacetGroup, aggregationFacetGroup } = this;
|
|
@@ -146,9 +151,9 @@ let MoreFacetsContent = class MoreFacetsContent extends LitElement {
|
|
|
146
151
|
if (!aggregationFacetGroup)
|
|
147
152
|
return undefined;
|
|
148
153
|
// Start with either the selected group if we have one, or the aggregate group otherwise
|
|
149
|
-
const facetGroup = { ...(selectedFacetGroup
|
|
154
|
+
const facetGroup = { ...(selectedFacetGroup !== null && selectedFacetGroup !== void 0 ? selectedFacetGroup : aggregationFacetGroup) };
|
|
150
155
|
// Attach the counts to the selected buckets
|
|
151
|
-
const bucketsWithCount = selectedFacetGroup
|
|
156
|
+
const bucketsWithCount = (_a = selectedFacetGroup === null || selectedFacetGroup === void 0 ? void 0 : selectedFacetGroup.buckets.map(bucket => {
|
|
152
157
|
const selectedBucket = aggregationFacetGroup.buckets.find(b => b.key === bucket.key);
|
|
153
158
|
return selectedBucket
|
|
154
159
|
? {
|
|
@@ -156,14 +161,14 @@ let MoreFacetsContent = class MoreFacetsContent extends LitElement {
|
|
|
156
161
|
count: selectedBucket.count,
|
|
157
162
|
}
|
|
158
163
|
: bucket;
|
|
159
|
-
})
|
|
164
|
+
})) !== null && _a !== void 0 ? _a : [];
|
|
160
165
|
// Sort the buckets by selection state
|
|
161
166
|
// We do this *prior* to considering unapplied selections, because we want the facets
|
|
162
167
|
// to remain in position when they are selected/unselected, rather than re-sort themselves.
|
|
163
168
|
sortBucketsBySelectionState(bucketsWithCount, this.sortedBy);
|
|
164
169
|
// Append any additional buckets that were not selected
|
|
165
170
|
aggregationFacetGroup.buckets.forEach(bucket => {
|
|
166
|
-
const existingBucket = selectedFacetGroup
|
|
171
|
+
const existingBucket = selectedFacetGroup === null || selectedFacetGroup === void 0 ? void 0 : selectedFacetGroup.buckets.find(b => b.key === bucket.key);
|
|
167
172
|
if (existingBucket)
|
|
168
173
|
return;
|
|
169
174
|
bucketsWithCount.push(bucket);
|
|
@@ -171,7 +176,7 @@ let MoreFacetsContent = class MoreFacetsContent extends LitElement {
|
|
|
171
176
|
// Apply any unapplied selections that appear on this page
|
|
172
177
|
const unappliedBuckets = this.unappliedFacetChanges[this.facetKey];
|
|
173
178
|
for (const [index, bucket] of bucketsWithCount.entries()) {
|
|
174
|
-
const unappliedBucket = unappliedBuckets
|
|
179
|
+
const unappliedBucket = unappliedBuckets === null || unappliedBuckets === void 0 ? void 0 : unappliedBuckets[bucket.key];
|
|
175
180
|
if (unappliedBucket) {
|
|
176
181
|
bucketsWithCount[index] = { ...unappliedBucket };
|
|
177
182
|
}
|
|
@@ -179,8 +184,9 @@ let MoreFacetsContent = class MoreFacetsContent extends LitElement {
|
|
|
179
184
|
// For TV creator facets, uppercase the display text
|
|
180
185
|
if (this.facetKey === 'creator' && this.isTvSearch) {
|
|
181
186
|
bucketsWithCount.forEach(b => {
|
|
182
|
-
|
|
183
|
-
|
|
187
|
+
var _a, _b, _c;
|
|
188
|
+
b.displayText = (_b = ((_a = b.displayText) !== null && _a !== void 0 ? _a : b.key)) === null || _b === void 0 ? void 0 : _b.toLocaleUpperCase();
|
|
189
|
+
const channelLabel = (_c = this.tvChannelAliases) === null || _c === void 0 ? void 0 : _c.get(b.displayText);
|
|
184
190
|
if (channelLabel && channelLabel !== b.displayText) {
|
|
185
191
|
b.extraNote = `(${channelLabel})`;
|
|
186
192
|
}
|
|
@@ -205,8 +211,8 @@ let MoreFacetsContent = class MoreFacetsContent extends LitElement {
|
|
|
205
211
|
return {
|
|
206
212
|
displayText,
|
|
207
213
|
key: value,
|
|
208
|
-
count: data
|
|
209
|
-
state: data
|
|
214
|
+
count: data === null || data === void 0 ? void 0 : data.count,
|
|
215
|
+
state: data === null || data === void 0 ? void 0 : data.state,
|
|
210
216
|
};
|
|
211
217
|
});
|
|
212
218
|
return {
|
|
@@ -230,9 +236,10 @@ let MoreFacetsContent = class MoreFacetsContent extends LitElement {
|
|
|
230
236
|
let sortedBuckets = currentAggregation.getSortedBuckets(this.sortedBy);
|
|
231
237
|
if (this.facetKey === 'collection') {
|
|
232
238
|
// we are not showing fav- collections or certain deemphasized collections in facets
|
|
233
|
-
sortedBuckets = sortedBuckets
|
|
234
|
-
|
|
235
|
-
|
|
239
|
+
sortedBuckets = sortedBuckets === null || sortedBuckets === void 0 ? void 0 : sortedBuckets.filter(bucket => {
|
|
240
|
+
var _a;
|
|
241
|
+
const bucketKey = (_a = bucket === null || bucket === void 0 ? void 0 : bucket.key) === null || _a === void 0 ? void 0 : _a.toString();
|
|
242
|
+
return (!suppressedCollections[bucketKey] && !(bucketKey === null || bucketKey === void 0 ? void 0 : bucketKey.startsWith('fav-')));
|
|
236
243
|
});
|
|
237
244
|
}
|
|
238
245
|
// Construct the array of facet buckets from the aggregation buckets
|
|
@@ -281,18 +288,22 @@ let MoreFacetsContent = class MoreFacetsContent extends LitElement {
|
|
|
281
288
|
`;
|
|
282
289
|
}
|
|
283
290
|
get loaderTemplate() {
|
|
284
|
-
return html
|
|
285
|
-
<ia-
|
|
286
|
-
|
|
291
|
+
return html `
|
|
292
|
+
<ia-status-indicator
|
|
293
|
+
class="facets-loader"
|
|
294
|
+
mode="loading"
|
|
295
|
+
></ia-status-indicator>
|
|
296
|
+
`;
|
|
287
297
|
}
|
|
288
298
|
/**
|
|
289
299
|
* How many pages of facets to show in the modal pagination widget
|
|
290
300
|
*/
|
|
291
301
|
get paginationSize() {
|
|
302
|
+
var _a;
|
|
292
303
|
if (!this.aggregations || !this.facetKey)
|
|
293
304
|
return 0;
|
|
294
305
|
// Calculate the appropriate number of pages to show in the modal pagination widget
|
|
295
|
-
const length = this.aggregations[this.facetKey]
|
|
306
|
+
const length = (_a = this.aggregations[this.facetKey]) === null || _a === void 0 ? void 0 : _a.buckets.length;
|
|
296
307
|
return Math.ceil(length / this.facetsPerPage);
|
|
297
308
|
}
|
|
298
309
|
// render pagination if more then 1 page
|
|
@@ -332,11 +343,12 @@ let MoreFacetsContent = class MoreFacetsContent extends LitElement {
|
|
|
332
343
|
this.dispatchEvent(new CustomEvent('sortedFacets', { detail: this.sortedBy }));
|
|
333
344
|
}
|
|
334
345
|
get modalHeaderTemplate() {
|
|
335
|
-
|
|
346
|
+
var _a, _b, _c;
|
|
347
|
+
const facetSort = (_a = this.sortedBy) !== null && _a !== void 0 ? _a : defaultFacetSort[this.facetKey];
|
|
336
348
|
const defaultSwitchSide = facetSort === AggregationSortType.COUNT ? 'left' : 'right';
|
|
337
349
|
return html `<span class="sr-only">${msg('More facets for:')}</span>
|
|
338
350
|
<span class="title">
|
|
339
|
-
${this.facetGroup
|
|
351
|
+
${(_b = this.facetGroup) === null || _b === void 0 ? void 0 : _b.title}
|
|
340
352
|
|
|
341
353
|
<label class="sort-label">${msg('Sort by:')}</label>
|
|
342
354
|
${this.facetKey
|
|
@@ -345,7 +357,7 @@ let MoreFacetsContent = class MoreFacetsContent extends LitElement {
|
|
|
345
357
|
leftValue=${AggregationSortType.COUNT}
|
|
346
358
|
leftLabel="Count"
|
|
347
359
|
rightValue=${valueFacetSort[this.facetKey]}
|
|
348
|
-
.rightLabel=${this.facetGroup
|
|
360
|
+
.rightLabel=${(_c = this.facetGroup) === null || _c === void 0 ? void 0 : _c.title}
|
|
349
361
|
side=${defaultSwitchSide}
|
|
350
362
|
@change=${(e) => {
|
|
351
363
|
this.sortFacetAggregation(Number(e.detail));
|
|
@@ -368,6 +380,7 @@ let MoreFacetsContent = class MoreFacetsContent extends LitElement {
|
|
|
368
380
|
`;
|
|
369
381
|
}
|
|
370
382
|
applySearchFacetsClicked() {
|
|
383
|
+
var _a, _b;
|
|
371
384
|
const mergedSelections = mergeSelectedFacets(this.selectedFacets, this.unappliedFacetChanges);
|
|
372
385
|
const event = new CustomEvent('facetsChanged', {
|
|
373
386
|
detail: mergedSelections,
|
|
@@ -377,18 +390,19 @@ let MoreFacetsContent = class MoreFacetsContent extends LitElement {
|
|
|
377
390
|
this.dispatchEvent(event);
|
|
378
391
|
// Reset the unapplied changes back to default, now that they have been applied
|
|
379
392
|
this.unappliedFacetChanges = getDefaultSelectedFacets();
|
|
380
|
-
this.modalManager
|
|
381
|
-
this.analyticsHandler
|
|
393
|
+
(_a = this.modalManager) === null || _a === void 0 ? void 0 : _a.closeModal();
|
|
394
|
+
(_b = this.analyticsHandler) === null || _b === void 0 ? void 0 : _b.sendEvent({
|
|
382
395
|
category: analyticsCategories.default,
|
|
383
396
|
action: `${analyticsActions.applyMoreFacetsModal}`,
|
|
384
397
|
label: `${this.facetKey}`,
|
|
385
398
|
});
|
|
386
399
|
}
|
|
387
400
|
cancelClick() {
|
|
401
|
+
var _a, _b;
|
|
388
402
|
// Reset the unapplied changes back to default
|
|
389
403
|
this.unappliedFacetChanges = getDefaultSelectedFacets();
|
|
390
|
-
this.modalManager
|
|
391
|
-
this.analyticsHandler
|
|
404
|
+
(_a = this.modalManager) === null || _a === void 0 ? void 0 : _a.closeModal();
|
|
405
|
+
(_b = this.analyticsHandler) === null || _b === void 0 ? void 0 : _b.sendEvent({
|
|
392
406
|
category: analyticsCategories.default,
|
|
393
407
|
action: analyticsActions.closeMoreFacetsModal,
|
|
394
408
|
label: `${this.facetKey}`,
|
|
@@ -428,8 +442,8 @@ let MoreFacetsContent = class MoreFacetsContent extends LitElement {
|
|
|
428
442
|
padding: 10px;
|
|
429
443
|
}
|
|
430
444
|
.facets-loader {
|
|
445
|
+
--icon-width: 70px;
|
|
431
446
|
margin-bottom: 20px;
|
|
432
|
-
width: 70px;
|
|
433
447
|
display: block;
|
|
434
448
|
margin-left: auto;
|
|
435
449
|
margin-right: auto;
|