@internetarchive/collection-browser 2.7.12 → 2.7.13-alpha2
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 +3 -3
- package/.github/workflows/gh-pages-main.yml +2 -2
- package/.github/workflows/pr-preview.yml +2 -2
- package/.husky/pre-commit +4 -4
- package/.prettierignore +1 -0
- package/LICENSE +661 -661
- package/README.md +83 -83
- package/dist/index.d.ts +13 -13
- package/dist/index.js +11 -13
- package/dist/index.js.map +1 -1
- package/dist/src/app-root.d.ts +109 -107
- package/dist/src/app-root.js +541 -531
- package/dist/src/app-root.js.map +1 -1
- package/dist/src/assets/img/icons/arrow-left.d.ts +2 -2
- package/dist/src/assets/img/icons/arrow-left.js +2 -2
- package/dist/src/assets/img/icons/arrow-right.d.ts +2 -2
- package/dist/src/assets/img/icons/arrow-right.js +2 -2
- package/dist/src/assets/img/icons/chevron.d.ts +2 -2
- package/dist/src/assets/img/icons/chevron.js +2 -2
- package/dist/src/assets/img/icons/contract.d.ts +2 -2
- package/dist/src/assets/img/icons/contract.js +2 -2
- package/dist/src/assets/img/icons/empty-query.d.ts +2 -2
- package/dist/src/assets/img/icons/empty-query.js +2 -2
- package/dist/src/assets/img/icons/expand.d.ts +2 -2
- package/dist/src/assets/img/icons/expand.js +2 -2
- package/dist/src/assets/img/icons/eye-closed.d.ts +2 -2
- package/dist/src/assets/img/icons/eye-closed.js +2 -2
- package/dist/src/assets/img/icons/eye.d.ts +2 -2
- package/dist/src/assets/img/icons/eye.js +2 -2
- package/dist/src/assets/img/icons/favorite-filled.d.ts +1 -1
- package/dist/src/assets/img/icons/favorite-filled.js +2 -2
- package/dist/src/assets/img/icons/favorite-unfilled.d.ts +1 -1
- package/dist/src/assets/img/icons/favorite-unfilled.js +2 -2
- package/dist/src/assets/img/icons/filter.d.ts +2 -2
- package/dist/src/assets/img/icons/filter.js +2 -2
- package/dist/src/assets/img/icons/login-required.d.ts +1 -1
- package/dist/src/assets/img/icons/login-required.js +2 -2
- package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/account.js +2 -2
- package/dist/src/assets/img/icons/mediatype/audio.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/audio.js +2 -2
- package/dist/src/assets/img/icons/mediatype/collection.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/collection.js +2 -2
- package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/data.js +2 -2
- package/dist/src/assets/img/icons/mediatype/etree.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/etree.js +2 -2
- package/dist/src/assets/img/icons/mediatype/film.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/film.js +2 -2
- package/dist/src/assets/img/icons/mediatype/images.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/images.js +2 -2
- package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/radio.js +2 -2
- package/dist/src/assets/img/icons/mediatype/search.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/search.js +2 -2
- package/dist/src/assets/img/icons/mediatype/software.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/software.js +2 -2
- package/dist/src/assets/img/icons/mediatype/texts.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/texts.js +2 -2
- package/dist/src/assets/img/icons/mediatype/tv.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/tv.js +2 -2
- package/dist/src/assets/img/icons/mediatype/video.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/video.js +2 -2
- package/dist/src/assets/img/icons/mediatype/web.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/web.js +2 -2
- package/dist/src/assets/img/icons/null-result.d.ts +2 -2
- package/dist/src/assets/img/icons/null-result.js +2 -2
- package/dist/src/assets/img/icons/restricted.d.ts +1 -1
- package/dist/src/assets/img/icons/restricted.js +2 -2
- package/dist/src/assets/img/icons/reviews.d.ts +1 -1
- package/dist/src/assets/img/icons/reviews.js +2 -2
- package/dist/src/assets/img/icons/upload.d.ts +1 -1
- package/dist/src/assets/img/icons/upload.js +2 -2
- package/dist/src/assets/img/icons/views.d.ts +1 -1
- package/dist/src/assets/img/icons/views.js +2 -2
- package/dist/src/circular-activity-indicator.d.ts +5 -5
- package/dist/src/circular-activity-indicator.js +17 -17
- package/dist/src/circular-activity-indicator.js.map +1 -1
- package/dist/src/collection-browser.d.ts +607 -606
- package/dist/src/collection-browser.js +1683 -1677
- package/dist/src/collection-browser.js.map +1 -1
- package/dist/src/collection-facets/facet-row.d.ts +30 -30
- package/dist/src/collection-facets/facet-row.js +118 -118
- package/dist/src/collection-facets/facet-row.js.map +1 -1
- package/dist/src/collection-facets/facet-tombstone-row.d.ts +5 -5
- package/dist/src/collection-facets/facet-tombstone-row.js +15 -15
- package/dist/src/collection-facets/facet-tombstone-row.js.map +1 -1
- package/dist/src/collection-facets/facets-template.d.ts +13 -13
- package/dist/src/collection-facets/facets-template.js +49 -49
- package/dist/src/collection-facets/facets-template.js.map +1 -1
- package/dist/src/collection-facets/more-facets-content.d.ts +106 -106
- package/dist/src/collection-facets/more-facets-content.js +406 -408
- package/dist/src/collection-facets/more-facets-content.js.map +1 -1
- package/dist/src/collection-facets/more-facets-pagination.d.ts +36 -36
- package/dist/src/collection-facets/more-facets-pagination.js +197 -196
- package/dist/src/collection-facets/more-facets-pagination.js.map +1 -1
- package/dist/src/collection-facets/smart-facets/dedupe.d.ts +10 -10
- package/dist/src/collection-facets/smart-facets/dedupe.js +33 -33
- package/dist/src/collection-facets/smart-facets/dedupe.js.map +1 -1
- package/dist/src/collection-facets/smart-facets/heuristics/browser-language-heuristic.d.ts +5 -5
- package/dist/src/collection-facets/smart-facets/heuristics/browser-language-heuristic.js +23 -23
- package/dist/src/collection-facets/smart-facets/heuristics/query-keywords-heuristic.d.ts +5 -5
- package/dist/src/collection-facets/smart-facets/heuristics/query-keywords-heuristic.js +44 -44
- package/dist/src/collection-facets/smart-facets/heuristics/query-keywords-heuristic.js.map +1 -1
- package/dist/src/collection-facets/smart-facets/heuristics/wikidata-heuristic.d.ts +5 -5
- package/dist/src/collection-facets/smart-facets/heuristics/wikidata-heuristic.js +172 -172
- package/dist/src/collection-facets/smart-facets/heuristics/wikidata-heuristic.js.map +1 -1
- package/dist/src/collection-facets/smart-facets/models.d.ts +26 -26
- package/dist/src/collection-facets/smart-facets/models.js +1 -1
- package/dist/src/collection-facets/smart-facets/smart-facet-bar.d.ts +31 -31
- package/dist/src/collection-facets/smart-facets/smart-facet-bar.js +237 -240
- package/dist/src/collection-facets/smart-facets/smart-facet-bar.js.map +1 -1
- package/dist/src/collection-facets/smart-facets/smart-facet-button.d.ts +11 -11
- package/dist/src/collection-facets/smart-facets/smart-facet-button.js +86 -86
- package/dist/src/collection-facets/smart-facets/smart-facet-button.js.map +1 -1
- package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.d.ts +16 -16
- package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.js +100 -100
- package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.js.map +1 -1
- package/dist/src/collection-facets/smart-facets/smart-facet-equals.d.ts +2 -2
- package/dist/src/collection-facets/smart-facets/smart-facet-equals.js +12 -12
- package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.d.ts +5 -5
- package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.js +15 -15
- package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.js.map +1 -1
- package/dist/src/collection-facets/toggle-switch.d.ts +41 -41
- package/dist/src/collection-facets/toggle-switch.js +94 -94
- package/dist/src/collection-facets/toggle-switch.js.map +1 -1
- package/dist/src/collection-facets.d.ts +103 -103
- package/dist/src/collection-facets.js +521 -522
- package/dist/src/collection-facets.js.map +1 -1
- package/dist/src/data-source/collection-browser-data-source-interface.d.ts +245 -245
- package/dist/src/data-source/collection-browser-data-source-interface.js +1 -1
- 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 +377 -377
- package/dist/src/data-source/collection-browser-data-source.js +1003 -1001
- package/dist/src/data-source/collection-browser-data-source.js.map +1 -1
- package/dist/src/data-source/collection-browser-query-state.d.ts +44 -44
- package/dist/src/data-source/collection-browser-query-state.js +1 -1
- package/dist/src/data-source/models.d.ts +28 -28
- package/dist/src/data-source/models.js +8 -8
- package/dist/src/empty-placeholder.d.ts +23 -23
- package/dist/src/empty-placeholder.js +87 -88
- package/dist/src/empty-placeholder.js.map +1 -1
- package/dist/src/expanded-date-picker.d.ts +43 -43
- package/dist/src/expanded-date-picker.js +109 -109
- package/dist/src/expanded-date-picker.js.map +1 -1
- package/dist/src/language-code-handler/language-code-handler.d.ts +37 -37
- package/dist/src/language-code-handler/language-code-handler.js +26 -26
- package/dist/src/language-code-handler/language-code-handler.js.map +1 -1
- package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -1
- package/dist/src/language-code-handler/language-code-mapping.js +562 -562
- package/dist/src/language-code-handler/language-code-mapping.js.map +1 -1
- package/dist/src/manage/manage-bar.d.ts +58 -58
- package/dist/src/manage/manage-bar.js +175 -175
- package/dist/src/manage/manage-bar.js.map +1 -1
- package/dist/src/manage/remove-items-modal-content.d.ts +9 -9
- package/dist/src/manage/remove-items-modal-content.js +34 -34
- package/dist/src/manage/remove-items-modal-content.js.map +1 -1
- package/dist/src/mediatype/mediatype-config.d.ts +3 -3
- package/dist/src/mediatype/mediatype-config.js +92 -91
- package/dist/src/mediatype/mediatype-config.js.map +1 -1
- package/dist/src/models.d.ts +228 -228
- package/dist/src/models.js +401 -401
- package/dist/src/models.js.map +1 -1
- package/dist/src/restoration-state-handler.d.ts +70 -70
- package/dist/src/restoration-state-handler.js +362 -363
- package/dist/src/restoration-state-handler.js.map +1 -1
- package/dist/src/sort-filter-bar/alpha-bar-tooltip.d.ts +6 -6
- package/dist/src/sort-filter-bar/alpha-bar-tooltip.js +24 -24
- package/dist/src/sort-filter-bar/alpha-bar-tooltip.js.map +1 -1
- package/dist/src/sort-filter-bar/alpha-bar.d.ts +21 -21
- package/dist/src/sort-filter-bar/alpha-bar.js +136 -136
- package/dist/src/sort-filter-bar/alpha-bar.js.map +1 -1
- package/dist/src/sort-filter-bar/img/compact.d.ts +1 -1
- package/dist/src/sort-filter-bar/img/compact.js +2 -2
- package/dist/src/sort-filter-bar/img/list.d.ts +1 -1
- package/dist/src/sort-filter-bar/img/list.js +2 -2
- package/dist/src/sort-filter-bar/img/sort-toggle-disabled.d.ts +1 -1
- package/dist/src/sort-filter-bar/img/sort-toggle-disabled.js +2 -2
- package/dist/src/sort-filter-bar/img/sort-toggle-down.d.ts +1 -1
- package/dist/src/sort-filter-bar/img/sort-toggle-down.js +2 -2
- package/dist/src/sort-filter-bar/img/sort-toggle-up.d.ts +1 -1
- package/dist/src/sort-filter-bar/img/sort-toggle-up.js +2 -2
- package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -1
- package/dist/src/sort-filter-bar/img/sort-triangle.js +2 -2
- package/dist/src/sort-filter-bar/img/tile.d.ts +1 -1
- package/dist/src/sort-filter-bar/img/tile.js +2 -2
- package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +223 -223
- package/dist/src/sort-filter-bar/sort-filter-bar.js +696 -697
- package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -1
- package/dist/src/styles/ia-button.d.ts +2 -2
- package/dist/src/styles/ia-button.js +17 -17
- package/dist/src/styles/item-image-styles.d.ts +8 -8
- package/dist/src/styles/item-image-styles.js +9 -9
- package/dist/src/styles/sr-only.d.ts +1 -1
- package/dist/src/styles/sr-only.js +2 -2
- package/dist/src/tiles/base-tile-component.d.ts +19 -19
- package/dist/src/tiles/base-tile-component.js +64 -64
- package/dist/src/tiles/base-tile-component.js.map +1 -1
- package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -5
- package/dist/src/tiles/collection-browser-loading-tile.js +15 -15
- package/dist/src/tiles/collection-browser-loading-tile.js.map +1 -1
- package/dist/src/tiles/grid/account-tile.d.ts +18 -18
- package/dist/src/tiles/grid/account-tile.js +72 -72
- package/dist/src/tiles/grid/account-tile.js.map +1 -1
- package/dist/src/tiles/grid/collection-tile.d.ts +15 -15
- package/dist/src/tiles/grid/collection-tile.js +80 -80
- package/dist/src/tiles/grid/collection-tile.js.map +1 -1
- package/dist/src/tiles/grid/item-tile.d.ts +34 -34
- package/dist/src/tiles/grid/item-tile.js +159 -160
- package/dist/src/tiles/grid/item-tile.js.map +1 -1
- package/dist/src/tiles/grid/search-tile.d.ts +10 -10
- package/dist/src/tiles/grid/search-tile.js +51 -51
- package/dist/src/tiles/grid/search-tile.js.map +1 -1
- package/dist/src/tiles/grid/styles/tile-grid-shared-styles.d.ts +1 -1
- package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js +8 -8
- package/dist/src/tiles/grid/tile-stats.d.ts +11 -11
- package/dist/src/tiles/grid/tile-stats.js +54 -54
- package/dist/src/tiles/grid/tile-stats.js.map +1 -1
- package/dist/src/tiles/hover/hover-pane-controller.d.ts +219 -219
- package/dist/src/tiles/hover/hover-pane-controller.js +352 -352
- package/dist/src/tiles/hover/hover-pane-controller.js.map +1 -1
- package/dist/src/tiles/hover/tile-hover-pane.d.ts +18 -18
- package/dist/src/tiles/hover/tile-hover-pane.js +72 -70
- package/dist/src/tiles/hover/tile-hover-pane.js.map +1 -1
- package/dist/src/tiles/image-block.d.ts +18 -18
- package/dist/src/tiles/image-block.js +89 -89
- package/dist/src/tiles/image-block.js.map +1 -1
- package/dist/src/tiles/item-image.d.ts +39 -39
- package/dist/src/tiles/item-image.js +154 -154
- package/dist/src/tiles/item-image.js.map +1 -1
- package/dist/src/tiles/list/tile-list-compact-header.d.ts +6 -6
- package/dist/src/tiles/list/tile-list-compact-header.js +38 -38
- package/dist/src/tiles/list/tile-list-compact-header.js.map +1 -1
- package/dist/src/tiles/list/tile-list-compact.d.ts +19 -19
- package/dist/src/tiles/list/tile-list-compact.js +122 -122
- package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
- package/dist/src/tiles/list/tile-list.d.ts +54 -54
- package/dist/src/tiles/list/tile-list.js +324 -326
- package/dist/src/tiles/list/tile-list.js.map +1 -1
- package/dist/src/tiles/mediatype-icon.d.ts +9 -9
- package/dist/src/tiles/mediatype-icon.js +47 -47
- package/dist/src/tiles/mediatype-icon.js.map +1 -1
- package/dist/src/tiles/overlay/icon-overlay.d.ts +8 -8
- package/dist/src/tiles/overlay/icon-overlay.js +25 -25
- package/dist/src/tiles/overlay/icon-overlay.js.map +1 -1
- package/dist/src/tiles/overlay/text-overlay.d.ts +9 -9
- package/dist/src/tiles/overlay/text-overlay.js +31 -31
- package/dist/src/tiles/overlay/text-overlay.js.map +1 -1
- package/dist/src/tiles/review-block.d.ts +12 -12
- package/dist/src/tiles/review-block.js +56 -56
- package/dist/src/tiles/review-block.js.map +1 -1
- package/dist/src/tiles/text-snippet-block.d.ts +27 -27
- package/dist/src/tiles/text-snippet-block.js +73 -73
- package/dist/src/tiles/text-snippet-block.js.map +1 -1
- package/dist/src/tiles/tile-dispatcher.d.ts +64 -64
- package/dist/src/tiles/tile-dispatcher.js +230 -230
- package/dist/src/tiles/tile-dispatcher.js.map +1 -1
- package/dist/src/tiles/tile-display-value-provider.d.ts +47 -47
- package/dist/src/tiles/tile-display-value-provider.js +94 -94
- package/dist/src/tiles/tile-display-value-provider.js.map +1 -1
- package/dist/src/utils/analytics-events.d.ts +28 -28
- package/dist/src/utils/analytics-events.js +30 -30
- package/dist/src/utils/array-equals.d.ts +4 -4
- package/dist/src/utils/array-equals.js +10 -10
- package/dist/src/utils/collapse-repeated-quotes.d.ts +11 -11
- package/dist/src/utils/collapse-repeated-quotes.js +13 -13
- package/dist/src/utils/facet-utils.d.ts +83 -83
- package/dist/src/utils/facet-utils.js +145 -145
- package/dist/src/utils/facet-utils.js.map +1 -1
- package/dist/src/utils/format-count.d.ts +7 -7
- package/dist/src/utils/format-count.js +75 -76
- package/dist/src/utils/format-count.js.map +1 -1
- package/dist/src/utils/format-date.d.ts +2 -2
- package/dist/src/utils/format-date.js +27 -27
- package/dist/src/utils/format-date.js.map +1 -1
- package/dist/src/utils/format-unit-size.d.ts +2 -2
- package/dist/src/utils/format-unit-size.js +33 -33
- package/dist/src/utils/format-unit-size.js.map +1 -1
- package/dist/src/utils/local-date-from-utc.d.ts +9 -9
- package/dist/src/utils/local-date-from-utc.js +15 -15
- package/dist/src/utils/log.d.ts +7 -7
- package/dist/src/utils/log.js +13 -15
- package/dist/src/utils/log.js.map +1 -1
- package/dist/src/utils/resolve-mediatype.d.ts +8 -8
- package/dist/src/utils/resolve-mediatype.js +23 -23
- package/dist/src/utils/resolve-mediatype.js.map +1 -1
- package/dist/src/utils/sha1.d.ts +2 -2
- package/dist/src/utils/sha1.js +8 -8
- package/dist/test/collection-browser.test.d.ts +1 -1
- package/dist/test/collection-browser.test.js +1309 -1308
- package/dist/test/collection-browser.test.js.map +1 -1
- package/dist/test/collection-facets/facet-row.test.d.ts +1 -1
- package/dist/test/collection-facets/facet-row.test.js +230 -227
- package/dist/test/collection-facets/facet-row.test.js.map +1 -1
- package/dist/test/collection-facets/facets-template.test.d.ts +1 -1
- package/dist/test/collection-facets/facets-template.test.js +91 -91
- package/dist/test/collection-facets/facets-template.test.js.map +1 -1
- package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -1
- package/dist/test/collection-facets/more-facets-content.test.js +140 -141
- package/dist/test/collection-facets/more-facets-content.test.js.map +1 -1
- package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -1
- package/dist/test/collection-facets/more-facets-pagination.test.js +116 -117
- package/dist/test/collection-facets/more-facets-pagination.test.js.map +1 -1
- package/dist/test/collection-facets/toggle-switch.test.d.ts +1 -1
- package/dist/test/collection-facets/toggle-switch.test.js +82 -73
- package/dist/test/collection-facets/toggle-switch.test.js.map +1 -1
- package/dist/test/collection-facets.test.d.ts +2 -2
- package/dist/test/collection-facets.test.js +692 -692
- package/dist/test/collection-facets.test.js.map +1 -1
- package/dist/test/data-source/collection-browser-data-source.test.d.ts +1 -1
- package/dist/test/data-source/collection-browser-data-source.test.js +89 -89
- package/dist/test/data-source/collection-browser-data-source.test.js.map +1 -1
- package/dist/test/empty-placeholder.test.d.ts +1 -1
- package/dist/test/empty-placeholder.test.js +62 -63
- package/dist/test/empty-placeholder.test.js.map +1 -1
- package/dist/test/expanded-date-picker.test.d.ts +1 -1
- package/dist/test/expanded-date-picker.test.js +97 -96
- package/dist/test/expanded-date-picker.test.js.map +1 -1
- package/dist/test/icon-overlay.test.d.ts +1 -1
- package/dist/test/icon-overlay.test.js +23 -24
- package/dist/test/icon-overlay.test.js.map +1 -1
- package/dist/test/image-block.test.d.ts +1 -1
- package/dist/test/image-block.test.js +106 -107
- package/dist/test/image-block.test.js.map +1 -1
- package/dist/test/item-image.test.d.ts +1 -1
- package/dist/test/item-image.test.js +84 -85
- package/dist/test/item-image.test.js.map +1 -1
- package/dist/test/manage/manage-bar.test.d.ts +2 -2
- package/dist/test/manage/manage-bar.test.js +100 -101
- package/dist/test/manage/manage-bar.test.js.map +1 -1
- package/dist/test/manage/remove-items-modal-content.test.d.ts +1 -1
- package/dist/test/manage/remove-items-modal-content.test.js +44 -45
- package/dist/test/manage/remove-items-modal-content.test.js.map +1 -1
- package/dist/test/mediatype-config.test.d.ts +1 -1
- package/dist/test/mediatype-config.test.js +16 -16
- package/dist/test/mocks/mock-analytics-handler.d.ts +10 -10
- package/dist/test/mocks/mock-analytics-handler.js +15 -15
- package/dist/test/mocks/mock-search-responses.d.ts +25 -25
- package/dist/test/mocks/mock-search-responses.js +942 -942
- package/dist/test/mocks/mock-search-responses.js.map +1 -1
- package/dist/test/mocks/mock-search-service.d.ts +15 -15
- package/dist/test/mocks/mock-search-service.js +54 -54
- package/dist/test/mocks/mock-search-service.js.map +1 -1
- package/dist/test/restoration-state-handler.test.d.ts +1 -1
- package/dist/test/restoration-state-handler.test.js +270 -270
- package/dist/test/restoration-state-handler.test.js.map +1 -1
- package/dist/test/review-block.test.d.ts +1 -1
- package/dist/test/review-block.test.js +43 -44
- package/dist/test/review-block.test.js.map +1 -1
- package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.d.ts +1 -1
- package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js +12 -12
- package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js.map +1 -1
- package/dist/test/sort-filter-bar/alpha-bar.test.d.ts +1 -1
- package/dist/test/sort-filter-bar/alpha-bar.test.js +73 -73
- package/dist/test/sort-filter-bar/alpha-bar.test.js.map +1 -1
- package/dist/test/sort-filter-bar/sort-filter-bar.test.d.ts +1 -1
- package/dist/test/sort-filter-bar/sort-filter-bar.test.js +425 -426
- package/dist/test/sort-filter-bar/sort-filter-bar.test.js.map +1 -1
- package/dist/test/text-overlay.test.d.ts +1 -1
- package/dist/test/text-overlay.test.js +37 -38
- package/dist/test/text-overlay.test.js.map +1 -1
- package/dist/test/text-snippet-block.test.d.ts +1 -1
- package/dist/test/text-snippet-block.test.js +56 -57
- package/dist/test/text-snippet-block.test.js.map +1 -1
- package/dist/test/tile-stats.test.d.ts +1 -1
- package/dist/test/tile-stats.test.js +98 -99
- package/dist/test/tile-stats.test.js.map +1 -1
- package/dist/test/tiles/grid/account-tile.test.d.ts +1 -1
- package/dist/test/tiles/grid/account-tile.test.js +75 -76
- package/dist/test/tiles/grid/account-tile.test.js.map +1 -1
- package/dist/test/tiles/grid/collection-tile.test.d.ts +1 -1
- package/dist/test/tiles/grid/collection-tile.test.js +72 -73
- package/dist/test/tiles/grid/collection-tile.test.js.map +1 -1
- package/dist/test/tiles/grid/item-tile.test.d.ts +1 -1
- package/dist/test/tiles/grid/item-tile.test.js +311 -312
- package/dist/test/tiles/grid/item-tile.test.js.map +1 -1
- package/dist/test/tiles/grid/search-tile.test.d.ts +1 -1
- package/dist/test/tiles/grid/search-tile.test.js +50 -51
- package/dist/test/tiles/grid/search-tile.test.js.map +1 -1
- package/dist/test/tiles/hover/hover-pane-controller.test.d.ts +1 -1
- package/dist/test/tiles/hover/hover-pane-controller.test.js +259 -259
- package/dist/test/tiles/hover/hover-pane-controller.test.js.map +1 -1
- package/dist/test/tiles/hover/tile-hover-pane.test.d.ts +1 -1
- package/dist/test/tiles/hover/tile-hover-pane.test.js +56 -56
- package/dist/test/tiles/hover/tile-hover-pane.test.js.map +1 -1
- package/dist/test/tiles/list/tile-list-compact.test.d.ts +1 -1
- package/dist/test/tiles/list/tile-list-compact.test.js +142 -143
- package/dist/test/tiles/list/tile-list-compact.test.js.map +1 -1
- package/dist/test/tiles/list/tile-list.test.d.ts +1 -1
- package/dist/test/tiles/list/tile-list.test.js +296 -297
- package/dist/test/tiles/list/tile-list.test.js.map +1 -1
- package/dist/test/tiles/tile-dispatcher.test.d.ts +1 -1
- package/dist/test/tiles/tile-dispatcher.test.js +100 -100
- package/dist/test/tiles/tile-dispatcher.test.js.map +1 -1
- package/dist/test/tiles/tile-display-value-provider.test.d.ts +1 -1
- package/dist/test/tiles/tile-display-value-provider.test.js +141 -141
- package/dist/test/utils/array-equals.test.d.ts +1 -1
- package/dist/test/utils/array-equals.test.js +26 -26
- package/dist/test/utils/format-count.test.d.ts +1 -1
- package/dist/test/utils/format-count.test.js +23 -23
- package/dist/test/utils/format-count.test.js.map +1 -1
- package/dist/test/utils/format-date.test.d.ts +1 -1
- package/dist/test/utils/format-date.test.js +30 -30
- package/dist/test/utils/format-date.test.js.map +1 -1
- package/dist/test/utils/format-unit-size.test.d.ts +1 -1
- package/dist/test/utils/format-unit-size.test.js +17 -17
- package/dist/test/utils/local-date-from-utc.test.d.ts +1 -1
- package/dist/test/utils/local-date-from-utc.test.js +26 -26
- package/dist/test/utils/local-date-from-utc.test.js.map +1 -1
- package/eslint.config.mjs +53 -0
- package/index.html +0 -3
- package/local.archive.org.cert +86 -86
- package/local.archive.org.key +27 -27
- package/package.json +41 -39
- package/renovate.json +6 -6
- package/src/app-root.ts +33 -23
- package/src/collection-browser.ts +44 -42
- package/src/collection-facets/facets-template.ts +7 -6
- package/src/collection-facets/more-facets-content.ts +11 -13
- package/src/collection-facets/more-facets-pagination.ts +3 -2
- package/src/collection-facets/smart-facets/dedupe.ts +2 -2
- package/src/collection-facets/smart-facets/heuristics/query-keywords-heuristic.ts +1 -1
- package/src/collection-facets/smart-facets/heuristics/wikidata-heuristic.ts +6 -6
- package/src/collection-facets/smart-facets/smart-facet-bar.ts +6 -8
- package/src/collection-facets/smart-facets/smart-facet-button.ts +5 -3
- package/src/collection-facets/smart-facets/smart-facet-dropdown.ts +4 -4
- package/src/collection-facets/smart-facets/smart-facet-heuristics.ts +1 -1
- package/src/collection-facets/toggle-switch.ts +2 -2
- package/src/collection-facets.ts +18 -19
- package/src/data-source/collection-browser-data-source-interface.ts +5 -1
- package/src/data-source/collection-browser-data-source.ts +42 -35
- package/src/empty-placeholder.ts +19 -16
- package/src/expanded-date-picker.ts +1 -1
- package/src/language-code-handler/language-code-handler.ts +1 -1
- package/src/manage/manage-bar.ts +23 -20
- package/src/manage/remove-items-modal-content.ts +2 -2
- package/src/mediatype/mediatype-config.ts +1 -0
- package/src/models.ts +3 -3
- package/src/restoration-state-handler.ts +14 -15
- package/src/sort-filter-bar/alpha-bar.ts +16 -17
- package/src/sort-filter-bar/sort-filter-bar.ts +14 -15
- package/src/tiles/grid/account-tile.ts +1 -1
- package/src/tiles/grid/collection-tile.ts +1 -1
- package/src/tiles/grid/item-tile.ts +9 -9
- package/src/tiles/grid/tile-stats.ts +4 -4
- package/src/tiles/hover/hover-pane-controller.ts +1 -1
- package/src/tiles/hover/tile-hover-pane.ts +4 -2
- package/src/tiles/item-image.ts +1 -1
- package/src/tiles/list/tile-list-compact.ts +2 -2
- package/src/tiles/list/tile-list.ts +22 -24
- package/src/tiles/tile-dispatcher.ts +5 -5
- package/src/tiles/tile-display-value-provider.ts +4 -4
- package/src/utils/facet-utils.ts +6 -6
- package/src/utils/format-count.ts +2 -3
- package/src/utils/format-date.ts +1 -1
- package/src/utils/format-unit-size.ts +1 -1
- package/src/utils/log.ts +1 -3
- package/test/collection-browser.test.ts +125 -124
- package/test/collection-facets/facet-row.test.ts +31 -28
- package/test/collection-facets/facets-template.test.ts +9 -9
- package/test/collection-facets/more-facets-content.test.ts +14 -15
- package/test/collection-facets/more-facets-pagination.test.ts +18 -19
- package/test/collection-facets/toggle-switch.test.ts +28 -18
- package/test/collection-facets.test.ts +46 -39
- package/test/data-source/collection-browser-data-source.test.ts +2 -2
- package/test/empty-placeholder.test.ts +6 -7
- package/test/expanded-date-picker.test.ts +25 -20
- package/test/icon-overlay.test.ts +0 -1
- package/test/image-block.test.ts +6 -7
- package/test/item-image.test.ts +0 -1
- package/test/manage/manage-bar.test.ts +19 -16
- package/test/manage/remove-items-modal-content.test.ts +4 -5
- package/test/mocks/mock-search-responses.ts +2 -1
- package/test/mocks/mock-search-service.ts +1 -1
- package/test/restoration-state-handler.test.ts +12 -12
- package/test/review-block.test.ts +1 -2
- package/test/sort-filter-bar/alpha-bar-tooltip.test.ts +1 -1
- package/test/sort-filter-bar/alpha-bar.test.ts +5 -5
- package/test/sort-filter-bar/sort-filter-bar.test.ts +38 -39
- package/test/text-overlay.test.ts +0 -1
- package/test/text-snippet-block.test.ts +5 -6
- package/test/tile-stats.test.ts +26 -35
- package/test/tiles/grid/account-tile.test.ts +2 -3
- package/test/tiles/grid/collection-tile.test.ts +3 -4
- package/test/tiles/grid/item-tile.test.ts +13 -14
- package/test/tiles/grid/search-tile.test.ts +1 -2
- package/test/tiles/hover/hover-pane-controller.test.ts +15 -15
- package/test/tiles/hover/tile-hover-pane.test.ts +5 -5
- package/test/tiles/list/tile-list-compact.test.ts +1 -2
- package/test/tiles/list/tile-list.test.ts +10 -11
- package/test/tiles/tile-dispatcher.test.ts +5 -5
- package/test/utils/format-count.test.ts +1 -1
- package/test/utils/format-date.test.ts +1 -1
- package/test/utils/local-date-from-utc.test.ts +1 -1
- package/tsconfig.json +0 -1
- package/web-dev-server.config.mjs +30 -30
- package/web-test-runner.config.mjs +41 -41
|
@@ -1,81 +1,81 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
|
-
import { LitElement, html, css, nothing, } from 'lit';
|
|
3
|
-
import { customElement, property, query, state } from 'lit/decorators.js';
|
|
4
|
-
import { msg } from '@lit/localize';
|
|
5
|
-
import '@internetarchive/ia-dropdown';
|
|
6
|
-
import { SORT_OPTIONS, SortField, } from '../models';
|
|
7
|
-
import './alpha-bar';
|
|
8
|
-
import { sortUpIcon } from './img/sort-toggle-up';
|
|
9
|
-
import { sortDownIcon } from './img/sort-toggle-down';
|
|
10
|
-
import { sortDisabledIcon } from './img/sort-toggle-disabled';
|
|
11
|
-
import { tileIcon } from './img/tile';
|
|
12
|
-
import { listIcon } from './img/list';
|
|
13
|
-
import { compactIcon } from './img/compact';
|
|
14
|
-
import { srOnlyStyle } from '../styles/sr-only';
|
|
15
|
-
let SortFilterBar = class SortFilterBar extends LitElement {
|
|
16
|
-
constructor() {
|
|
17
|
-
super(...arguments);
|
|
18
|
-
/** The default sort direction to use if none is set */
|
|
19
|
-
this.defaultSortDirection = null;
|
|
20
|
-
/** The default sort field to use if none is set */
|
|
21
|
-
this.defaultSortField = SortField.relevance;
|
|
22
|
-
/** The current sort direction (asc/desc), or null if none is set */
|
|
23
|
-
this.sortDirection = null;
|
|
24
|
-
/** The field currently being sorted on (e.g., 'title'). Defaults to relevance. */
|
|
25
|
-
this.selectedSort = SortField.default;
|
|
26
|
-
/** The currently selected title letter filter, or null if none is set */
|
|
27
|
-
this.selectedTitleFilter = null;
|
|
28
|
-
/** The currently selected creator letter filter, or null if none is set */
|
|
29
|
-
this.selectedCreatorFilter = null;
|
|
30
|
-
/** Whether to show the Relevance sort option (default `true`) */
|
|
31
|
-
this.showRelevance = true;
|
|
32
|
-
/** Whether to show the Date Favorited sort option instead of Date Published/Archived/Reviewed (default `false`) */
|
|
33
|
-
this.showDateFavorited = false;
|
|
34
|
-
/** Whether to replace the default sort options with a slot for customization (default `false`) */
|
|
35
|
-
this.enableSortOptionsSlot = false;
|
|
36
|
-
/** Whether to suppress showing the three display mode options on the right of the bar (default `false`) */
|
|
37
|
-
this.suppressDisplayModes = false;
|
|
38
|
-
/**
|
|
39
|
-
* The Views sort option that was most recently selected (or the default, if none has been selected yet)
|
|
40
|
-
*/
|
|
41
|
-
this.lastSelectedViewSort = SortField.weeklyview;
|
|
42
|
-
/**
|
|
43
|
-
* The Date sort option that was most recently selected (or the default, if none has been selected yet)
|
|
44
|
-
*/
|
|
45
|
-
this.lastSelectedDateSort = this.defaultDateSortField;
|
|
46
|
-
/**
|
|
47
|
-
* Which of the alphabet bars (title/creator) should be shown, or null if one
|
|
48
|
-
* should not currently be rendered.
|
|
49
|
-
*/
|
|
50
|
-
this.alphaSelectorVisible = null;
|
|
51
|
-
/**
|
|
52
|
-
* Whether the transparent backdrop to catch clicks outside the dropdown menu
|
|
53
|
-
* should be rendered.
|
|
54
|
-
*/
|
|
55
|
-
this.dropdownBackdropVisible = false;
|
|
56
|
-
/**
|
|
57
|
-
* The width of the desktop view sort option container, updated upon each resize.
|
|
58
|
-
* Used for dynamically determining whether to use desktop or mobile view.
|
|
59
|
-
*/
|
|
60
|
-
this.desktopSortContainerWidth = 0;
|
|
61
|
-
/**
|
|
62
|
-
* The width of the full sort bar, updated upon each resize.
|
|
63
|
-
* Used for dynamically determining whether to use desktop or mobile view.
|
|
64
|
-
*/
|
|
65
|
-
this.selectorBarContainerWidth = 0;
|
|
66
|
-
this.boundSortBarSelectorEscapeListener = (e) => {
|
|
67
|
-
if (e.key === 'Escape') {
|
|
68
|
-
this.closeDropdowns();
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
render() {
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { LitElement, html, css, nothing, } from 'lit';
|
|
3
|
+
import { customElement, property, query, state } from 'lit/decorators.js';
|
|
4
|
+
import { msg } from '@lit/localize';
|
|
5
|
+
import '@internetarchive/ia-dropdown';
|
|
6
|
+
import { SORT_OPTIONS, SortField, } from '../models';
|
|
7
|
+
import './alpha-bar';
|
|
8
|
+
import { sortUpIcon } from './img/sort-toggle-up';
|
|
9
|
+
import { sortDownIcon } from './img/sort-toggle-down';
|
|
10
|
+
import { sortDisabledIcon } from './img/sort-toggle-disabled';
|
|
11
|
+
import { tileIcon } from './img/tile';
|
|
12
|
+
import { listIcon } from './img/list';
|
|
13
|
+
import { compactIcon } from './img/compact';
|
|
14
|
+
import { srOnlyStyle } from '../styles/sr-only';
|
|
15
|
+
let SortFilterBar = class SortFilterBar extends LitElement {
|
|
16
|
+
constructor() {
|
|
17
|
+
super(...arguments);
|
|
18
|
+
/** The default sort direction to use if none is set */
|
|
19
|
+
this.defaultSortDirection = null;
|
|
20
|
+
/** The default sort field to use if none is set */
|
|
21
|
+
this.defaultSortField = SortField.relevance;
|
|
22
|
+
/** The current sort direction (asc/desc), or null if none is set */
|
|
23
|
+
this.sortDirection = null;
|
|
24
|
+
/** The field currently being sorted on (e.g., 'title'). Defaults to relevance. */
|
|
25
|
+
this.selectedSort = SortField.default;
|
|
26
|
+
/** The currently selected title letter filter, or null if none is set */
|
|
27
|
+
this.selectedTitleFilter = null;
|
|
28
|
+
/** The currently selected creator letter filter, or null if none is set */
|
|
29
|
+
this.selectedCreatorFilter = null;
|
|
30
|
+
/** Whether to show the Relevance sort option (default `true`) */
|
|
31
|
+
this.showRelevance = true;
|
|
32
|
+
/** Whether to show the Date Favorited sort option instead of Date Published/Archived/Reviewed (default `false`) */
|
|
33
|
+
this.showDateFavorited = false;
|
|
34
|
+
/** Whether to replace the default sort options with a slot for customization (default `false`) */
|
|
35
|
+
this.enableSortOptionsSlot = false;
|
|
36
|
+
/** Whether to suppress showing the three display mode options on the right of the bar (default `false`) */
|
|
37
|
+
this.suppressDisplayModes = false;
|
|
38
|
+
/**
|
|
39
|
+
* The Views sort option that was most recently selected (or the default, if none has been selected yet)
|
|
40
|
+
*/
|
|
41
|
+
this.lastSelectedViewSort = SortField.weeklyview;
|
|
42
|
+
/**
|
|
43
|
+
* The Date sort option that was most recently selected (or the default, if none has been selected yet)
|
|
44
|
+
*/
|
|
45
|
+
this.lastSelectedDateSort = this.defaultDateSortField;
|
|
46
|
+
/**
|
|
47
|
+
* Which of the alphabet bars (title/creator) should be shown, or null if one
|
|
48
|
+
* should not currently be rendered.
|
|
49
|
+
*/
|
|
50
|
+
this.alphaSelectorVisible = null;
|
|
51
|
+
/**
|
|
52
|
+
* Whether the transparent backdrop to catch clicks outside the dropdown menu
|
|
53
|
+
* should be rendered.
|
|
54
|
+
*/
|
|
55
|
+
this.dropdownBackdropVisible = false;
|
|
56
|
+
/**
|
|
57
|
+
* The width of the desktop view sort option container, updated upon each resize.
|
|
58
|
+
* Used for dynamically determining whether to use desktop or mobile view.
|
|
59
|
+
*/
|
|
60
|
+
this.desktopSortContainerWidth = 0;
|
|
61
|
+
/**
|
|
62
|
+
* The width of the full sort bar, updated upon each resize.
|
|
63
|
+
* Used for dynamically determining whether to use desktop or mobile view.
|
|
64
|
+
*/
|
|
65
|
+
this.selectorBarContainerWidth = 0;
|
|
66
|
+
this.boundSortBarSelectorEscapeListener = (e) => {
|
|
67
|
+
if (e.key === 'Escape') {
|
|
68
|
+
this.closeDropdowns();
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
render() {
|
|
73
73
|
return html `
|
|
74
74
|
<div id="container">
|
|
75
75
|
<section id="sort-bar" aria-label="Sorting options">
|
|
76
76
|
<slot name="sort-options-left"></slot>
|
|
77
77
|
<div id="sort-options">
|
|
78
|
-
${!this.enableSortOptionsSlot
|
|
78
|
+
${!this.enableSortOptionsSlot
|
|
79
79
|
? html `
|
|
80
80
|
<div class="sort-direction-container">
|
|
81
81
|
${this.sortDirectionSelectorTemplate}
|
|
@@ -85,13 +85,13 @@ let SortFilterBar = class SortFilterBar extends LitElement {
|
|
|
85
85
|
${this.mobileSortSelectorTemplate}
|
|
86
86
|
${this.desktopSortSelectorTemplate}
|
|
87
87
|
</div>
|
|
88
|
-
`
|
|
88
|
+
`
|
|
89
89
|
: html `<slot name="sort-options"></slot>`}
|
|
90
90
|
</div>
|
|
91
91
|
<slot name="sort-options-right"></slot>
|
|
92
92
|
|
|
93
|
-
${this.suppressDisplayModes
|
|
94
|
-
? nothing
|
|
93
|
+
${this.suppressDisplayModes
|
|
94
|
+
? nothing
|
|
95
95
|
: html `<div id="display-style-selector">
|
|
96
96
|
${this.displayOptionTemplate}
|
|
97
97
|
</div>`}
|
|
@@ -100,139 +100,139 @@ let SortFilterBar = class SortFilterBar extends LitElement {
|
|
|
100
100
|
${this.dropdownBackdropVisible ? this.dropdownBackdrop : nothing}
|
|
101
101
|
${this.alphaBarTemplate}
|
|
102
102
|
</div>
|
|
103
|
-
`;
|
|
104
|
-
}
|
|
105
|
-
willUpdate(changed) {
|
|
106
|
-
if (changed.has('selectedSort') || changed.has('defaultSortField')) {
|
|
107
|
-
// If the sort is changed from its default without a direction set,
|
|
108
|
-
// we adopt the default sort direction for that sort type.
|
|
109
|
-
if (this.selectedSort &&
|
|
110
|
-
this.selectedSort !== SortField.default &&
|
|
111
|
-
this.sortDirection === null) {
|
|
112
|
-
const sortOption = SORT_OPTIONS[this.finalizedSortField];
|
|
113
|
-
this.sortDirection = sortOption.defaultSortDirection;
|
|
114
|
-
}
|
|
115
|
-
if (this.viewOptionSelected) {
|
|
116
|
-
this.lastSelectedViewSort = this.finalizedSortField;
|
|
117
|
-
}
|
|
118
|
-
else if (this.dateOptionSelected) {
|
|
119
|
-
this.lastSelectedDateSort = this.finalizedSortField;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
// If we change which dropdown options are available, ensure the correct default becomes selected.
|
|
123
|
-
// Currently, Date Favorited is the only dropdown option whose presence/absence can change.
|
|
124
|
-
if (changed.has('showDateFavorited') &&
|
|
125
|
-
changed.get('showDateFavorited') !== this.showDateFavorited) {
|
|
126
|
-
this.lastSelectedDateSort = this.defaultDateSortField;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
updated(changed) {
|
|
130
|
-
if (changed.has('displayMode')) {
|
|
131
|
-
this.displayModeChanged();
|
|
132
|
-
}
|
|
133
|
-
if (changed.has('selectedTitleFilter') && this.selectedTitleFilter) {
|
|
134
|
-
this.alphaSelectorVisible = 'title';
|
|
135
|
-
}
|
|
136
|
-
if (changed.has('selectedCreatorFilter') && this.selectedCreatorFilter) {
|
|
137
|
-
this.alphaSelectorVisible = 'creator';
|
|
138
|
-
}
|
|
139
|
-
if (changed.has('dropdownBackdropVisible')) {
|
|
140
|
-
this.setupEscapeListeners();
|
|
141
|
-
}
|
|
142
|
-
if (changed.has('resizeObserver') || changed.has('enableSortOptionsSlot')) {
|
|
143
|
-
const oldObserver = changed.get('resizeObserver');
|
|
144
|
-
if (oldObserver)
|
|
145
|
-
this.disconnectResizeObserver(oldObserver);
|
|
146
|
-
this.setupResizeObserver();
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
setupEscapeListeners() {
|
|
150
|
-
if (this.dropdownBackdropVisible) {
|
|
151
|
-
document.addEventListener('keydown', this.boundSortBarSelectorEscapeListener);
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
document.removeEventListener('keydown', this.boundSortBarSelectorEscapeListener);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
connectedCallback() {
|
|
158
|
-
var _a;
|
|
159
|
-
(_a = super.connectedCallback) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
160
|
-
this.setupResizeObserver();
|
|
161
|
-
}
|
|
162
|
-
disconnectedCallback() {
|
|
163
|
-
if (this.resizeObserver) {
|
|
164
|
-
this.disconnectResizeObserver(this.resizeObserver);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
disconnectResizeObserver(resizeObserver) {
|
|
168
|
-
if (this.sortSelectorContainer) {
|
|
169
|
-
resizeObserver.removeObserver({
|
|
170
|
-
target: this.sortSelectorContainer,
|
|
171
|
-
handler: this,
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
if (this.desktopSortContainer) {
|
|
175
|
-
resizeObserver.removeObserver({
|
|
176
|
-
target: this.desktopSortContainer,
|
|
177
|
-
handler: this,
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
setupResizeObserver() {
|
|
182
|
-
if (!this.resizeObserver)
|
|
183
|
-
return;
|
|
184
|
-
if (this.sortSelectorContainer) {
|
|
185
|
-
this.resizeObserver.addObserver({
|
|
186
|
-
target: this.sortSelectorContainer,
|
|
187
|
-
handler: this,
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
if (this.desktopSortContainer) {
|
|
191
|
-
this.resizeObserver.addObserver({
|
|
192
|
-
target: this.desktopSortContainer,
|
|
193
|
-
handler: this,
|
|
194
|
-
});
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
handleResize(entry) {
|
|
198
|
-
if (entry.target === this.desktopSortContainer) {
|
|
199
|
-
this.desktopSortContainerWidth = entry.contentRect.width;
|
|
200
|
-
}
|
|
201
|
-
else if (entry.target === this.sortSelectorContainer) {
|
|
202
|
-
this.selectorBarContainerWidth = entry.contentRect.width;
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* Whether to show the mobile sort bar because there is not enough space
|
|
207
|
-
* for the desktop sort bar.
|
|
208
|
-
*/
|
|
209
|
-
get mobileSelectorVisible() {
|
|
210
|
-
return this.selectorBarContainerWidth - 10 < this.desktopSortContainerWidth;
|
|
211
|
-
}
|
|
212
|
-
/**
|
|
213
|
-
* Template to render the alphabet bar, or `nothing` if it should not be rendered
|
|
214
|
-
* for the current sort
|
|
215
|
-
*/
|
|
216
|
-
get alphaBarTemplate() {
|
|
217
|
-
if (!['title', 'creator'].includes(this.selectedSort))
|
|
218
|
-
return nothing;
|
|
219
|
-
if (this.alphaSelectorVisible === null) {
|
|
220
|
-
if (this.selectedSort === 'creator')
|
|
221
|
-
return this.creatorSelectorBar;
|
|
222
|
-
if (this.selectedSort === 'title')
|
|
223
|
-
return this.titleSelectorBar;
|
|
224
|
-
}
|
|
225
|
-
else {
|
|
226
|
-
return this.alphaSelectorVisible === 'creator'
|
|
227
|
-
? this.creatorSelectorBar
|
|
228
|
-
: this.titleSelectorBar;
|
|
229
|
-
}
|
|
230
|
-
return nothing;
|
|
231
|
-
}
|
|
232
|
-
/** Template to render the sort direction toggle button */
|
|
233
|
-
get sortDirectionSelectorTemplate() {
|
|
234
|
-
const oppositeSortDirectionReadable = this.sortDirection === 'asc' ? 'descending' : 'ascending';
|
|
235
|
-
const srLabel = `Change to ${oppositeSortDirectionReadable} sort`;
|
|
103
|
+
`;
|
|
104
|
+
}
|
|
105
|
+
willUpdate(changed) {
|
|
106
|
+
if (changed.has('selectedSort') || changed.has('defaultSortField')) {
|
|
107
|
+
// If the sort is changed from its default without a direction set,
|
|
108
|
+
// we adopt the default sort direction for that sort type.
|
|
109
|
+
if (this.selectedSort &&
|
|
110
|
+
this.selectedSort !== SortField.default &&
|
|
111
|
+
this.sortDirection === null) {
|
|
112
|
+
const sortOption = SORT_OPTIONS[this.finalizedSortField];
|
|
113
|
+
this.sortDirection = sortOption.defaultSortDirection;
|
|
114
|
+
}
|
|
115
|
+
if (this.viewOptionSelected) {
|
|
116
|
+
this.lastSelectedViewSort = this.finalizedSortField;
|
|
117
|
+
}
|
|
118
|
+
else if (this.dateOptionSelected) {
|
|
119
|
+
this.lastSelectedDateSort = this.finalizedSortField;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// If we change which dropdown options are available, ensure the correct default becomes selected.
|
|
123
|
+
// Currently, Date Favorited is the only dropdown option whose presence/absence can change.
|
|
124
|
+
if (changed.has('showDateFavorited') &&
|
|
125
|
+
changed.get('showDateFavorited') !== this.showDateFavorited) {
|
|
126
|
+
this.lastSelectedDateSort = this.defaultDateSortField;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
updated(changed) {
|
|
130
|
+
if (changed.has('displayMode')) {
|
|
131
|
+
this.displayModeChanged();
|
|
132
|
+
}
|
|
133
|
+
if (changed.has('selectedTitleFilter') && this.selectedTitleFilter) {
|
|
134
|
+
this.alphaSelectorVisible = 'title';
|
|
135
|
+
}
|
|
136
|
+
if (changed.has('selectedCreatorFilter') && this.selectedCreatorFilter) {
|
|
137
|
+
this.alphaSelectorVisible = 'creator';
|
|
138
|
+
}
|
|
139
|
+
if (changed.has('dropdownBackdropVisible')) {
|
|
140
|
+
this.setupEscapeListeners();
|
|
141
|
+
}
|
|
142
|
+
if (changed.has('resizeObserver') || changed.has('enableSortOptionsSlot')) {
|
|
143
|
+
const oldObserver = changed.get('resizeObserver');
|
|
144
|
+
if (oldObserver)
|
|
145
|
+
this.disconnectResizeObserver(oldObserver);
|
|
146
|
+
this.setupResizeObserver();
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
setupEscapeListeners() {
|
|
150
|
+
if (this.dropdownBackdropVisible) {
|
|
151
|
+
document.addEventListener('keydown', this.boundSortBarSelectorEscapeListener);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
document.removeEventListener('keydown', this.boundSortBarSelectorEscapeListener);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
connectedCallback() {
|
|
158
|
+
var _a;
|
|
159
|
+
(_a = super.connectedCallback) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
160
|
+
this.setupResizeObserver();
|
|
161
|
+
}
|
|
162
|
+
disconnectedCallback() {
|
|
163
|
+
if (this.resizeObserver) {
|
|
164
|
+
this.disconnectResizeObserver(this.resizeObserver);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
disconnectResizeObserver(resizeObserver) {
|
|
168
|
+
if (this.sortSelectorContainer) {
|
|
169
|
+
resizeObserver.removeObserver({
|
|
170
|
+
target: this.sortSelectorContainer,
|
|
171
|
+
handler: this,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
if (this.desktopSortContainer) {
|
|
175
|
+
resizeObserver.removeObserver({
|
|
176
|
+
target: this.desktopSortContainer,
|
|
177
|
+
handler: this,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
setupResizeObserver() {
|
|
182
|
+
if (!this.resizeObserver)
|
|
183
|
+
return;
|
|
184
|
+
if (this.sortSelectorContainer) {
|
|
185
|
+
this.resizeObserver.addObserver({
|
|
186
|
+
target: this.sortSelectorContainer,
|
|
187
|
+
handler: this,
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
if (this.desktopSortContainer) {
|
|
191
|
+
this.resizeObserver.addObserver({
|
|
192
|
+
target: this.desktopSortContainer,
|
|
193
|
+
handler: this,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
handleResize(entry) {
|
|
198
|
+
if (entry.target === this.desktopSortContainer) {
|
|
199
|
+
this.desktopSortContainerWidth = entry.contentRect.width;
|
|
200
|
+
}
|
|
201
|
+
else if (entry.target === this.sortSelectorContainer) {
|
|
202
|
+
this.selectorBarContainerWidth = entry.contentRect.width;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Whether to show the mobile sort bar because there is not enough space
|
|
207
|
+
* for the desktop sort bar.
|
|
208
|
+
*/
|
|
209
|
+
get mobileSelectorVisible() {
|
|
210
|
+
return this.selectorBarContainerWidth - 10 < this.desktopSortContainerWidth;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Template to render the alphabet bar, or `nothing` if it should not be rendered
|
|
214
|
+
* for the current sort
|
|
215
|
+
*/
|
|
216
|
+
get alphaBarTemplate() {
|
|
217
|
+
if (!['title', 'creator'].includes(this.selectedSort))
|
|
218
|
+
return nothing;
|
|
219
|
+
if (this.alphaSelectorVisible === null) {
|
|
220
|
+
if (this.selectedSort === 'creator')
|
|
221
|
+
return this.creatorSelectorBar;
|
|
222
|
+
if (this.selectedSort === 'title')
|
|
223
|
+
return this.titleSelectorBar;
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
return this.alphaSelectorVisible === 'creator'
|
|
227
|
+
? this.creatorSelectorBar
|
|
228
|
+
: this.titleSelectorBar;
|
|
229
|
+
}
|
|
230
|
+
return nothing;
|
|
231
|
+
}
|
|
232
|
+
/** Template to render the sort direction toggle button */
|
|
233
|
+
get sortDirectionSelectorTemplate() {
|
|
234
|
+
const oppositeSortDirectionReadable = this.sortDirection === 'asc' ? 'descending' : 'ascending';
|
|
235
|
+
const srLabel = `Change to ${oppositeSortDirectionReadable} sort`;
|
|
236
236
|
return html `
|
|
237
237
|
<button
|
|
238
238
|
class="sort-direction-selector"
|
|
@@ -242,148 +242,147 @@ let SortFilterBar = class SortFilterBar extends LitElement {
|
|
|
242
242
|
<span class="sr-only">${srLabel}</span>
|
|
243
243
|
${this.sortDirectionIcon}
|
|
244
244
|
</button>
|
|
245
|
-
`;
|
|
246
|
-
}
|
|
247
|
-
/** Template to render the sort direction button's icon in the correct current state */
|
|
248
|
-
get sortDirectionIcon() {
|
|
249
|
-
// Show a fully disabled icon for sort options without direction support
|
|
250
|
-
if (!this.canChangeSortDirection) {
|
|
251
|
-
return html `<div class="sort-direction-icon">${sortDisabledIcon}</div>`;
|
|
252
|
-
}
|
|
253
|
-
// For all other sorts, show the ascending/descending direction
|
|
245
|
+
`;
|
|
246
|
+
}
|
|
247
|
+
/** Template to render the sort direction button's icon in the correct current state */
|
|
248
|
+
get sortDirectionIcon() {
|
|
249
|
+
// Show a fully disabled icon for sort options without direction support
|
|
250
|
+
if (!this.canChangeSortDirection) {
|
|
251
|
+
return html `<div class="sort-direction-icon">${sortDisabledIcon}</div>`;
|
|
252
|
+
}
|
|
253
|
+
// For all other sorts, show the ascending/descending direction
|
|
254
254
|
return html `
|
|
255
255
|
<div class="sort-direction-icon">
|
|
256
256
|
${this.finalizedSortDirection === 'asc' ? sortUpIcon : sortDownIcon}
|
|
257
257
|
</div>
|
|
258
|
-
`;
|
|
259
|
-
}
|
|
260
|
-
/** The template to render all the sort options in desktop view */
|
|
261
|
-
get desktopSortSelectorTemplate() {
|
|
258
|
+
`;
|
|
259
|
+
}
|
|
260
|
+
/** The template to render all the sort options in desktop view */
|
|
261
|
+
get desktopSortSelectorTemplate() {
|
|
262
262
|
return html `
|
|
263
263
|
<div
|
|
264
264
|
id="desktop-sort-container"
|
|
265
265
|
class=${this.mobileSelectorVisible ? 'hidden' : 'visible'}
|
|
266
266
|
>
|
|
267
267
|
<ul id="desktop-sort-selector">
|
|
268
|
-
${this.showRelevance
|
|
268
|
+
${this.showRelevance
|
|
269
269
|
? html `<li>
|
|
270
|
-
${this.getSortDisplayOption(SortField.relevance, {
|
|
271
|
-
onClick: () => {
|
|
272
|
-
this.dropdownBackdropVisible = false;
|
|
273
|
-
if (this.finalizedSortField !== SortField.relevance) {
|
|
274
|
-
this.clearAlphaBarFilters();
|
|
275
|
-
this.setSelectedSort(SortField.relevance);
|
|
276
|
-
}
|
|
277
|
-
},
|
|
270
|
+
${this.getSortDisplayOption(SortField.relevance, {
|
|
271
|
+
onClick: () => {
|
|
272
|
+
this.dropdownBackdropVisible = false;
|
|
273
|
+
if (this.finalizedSortField !== SortField.relevance) {
|
|
274
|
+
this.clearAlphaBarFilters();
|
|
275
|
+
this.setSelectedSort(SortField.relevance);
|
|
276
|
+
}
|
|
277
|
+
},
|
|
278
278
|
})}
|
|
279
|
-
</li>`
|
|
279
|
+
</li>`
|
|
280
280
|
: nothing}
|
|
281
281
|
<li>${this.viewsDropdownTemplate}</li>
|
|
282
282
|
<li>
|
|
283
|
-
${this.getSortDisplayOption(SortField.title, {
|
|
284
|
-
onClick: () => {
|
|
285
|
-
this.dropdownBackdropVisible = false;
|
|
286
|
-
if (this.finalizedSortField !== SortField.title) {
|
|
287
|
-
this.alphaSelectorVisible = 'title';
|
|
288
|
-
this.selectedCreatorFilter = null;
|
|
289
|
-
this.setSelectedSort(SortField.title);
|
|
290
|
-
this.emitCreatorLetterChangedEvent();
|
|
291
|
-
}
|
|
292
|
-
},
|
|
283
|
+
${this.getSortDisplayOption(SortField.title, {
|
|
284
|
+
onClick: () => {
|
|
285
|
+
this.dropdownBackdropVisible = false;
|
|
286
|
+
if (this.finalizedSortField !== SortField.title) {
|
|
287
|
+
this.alphaSelectorVisible = 'title';
|
|
288
|
+
this.selectedCreatorFilter = null;
|
|
289
|
+
this.setSelectedSort(SortField.title);
|
|
290
|
+
this.emitCreatorLetterChangedEvent();
|
|
291
|
+
}
|
|
292
|
+
},
|
|
293
293
|
})}
|
|
294
294
|
</li>
|
|
295
295
|
<li>${this.dateDropdownTemplate}</li>
|
|
296
296
|
<li>
|
|
297
|
-
${this.getSortDisplayOption(SortField.creator, {
|
|
298
|
-
onClick: () => {
|
|
299
|
-
this.dropdownBackdropVisible = false;
|
|
300
|
-
if (this.finalizedSortField !== SortField.creator) {
|
|
301
|
-
this.alphaSelectorVisible = 'creator';
|
|
302
|
-
this.selectedTitleFilter = null;
|
|
303
|
-
this.setSelectedSort(SortField.creator);
|
|
304
|
-
this.emitTitleLetterChangedEvent();
|
|
305
|
-
}
|
|
306
|
-
},
|
|
297
|
+
${this.getSortDisplayOption(SortField.creator, {
|
|
298
|
+
onClick: () => {
|
|
299
|
+
this.dropdownBackdropVisible = false;
|
|
300
|
+
if (this.finalizedSortField !== SortField.creator) {
|
|
301
|
+
this.alphaSelectorVisible = 'creator';
|
|
302
|
+
this.selectedTitleFilter = null;
|
|
303
|
+
this.setSelectedSort(SortField.creator);
|
|
304
|
+
this.emitTitleLetterChangedEvent();
|
|
305
|
+
}
|
|
306
|
+
},
|
|
307
307
|
})}
|
|
308
308
|
</li>
|
|
309
309
|
</ul>
|
|
310
310
|
</div>
|
|
311
|
-
`;
|
|
312
|
-
}
|
|
313
|
-
/** The template to render all the sort options in mobile view */
|
|
314
|
-
get mobileSortSelectorTemplate() {
|
|
315
|
-
const displayedOptions = Object.values(SORT_OPTIONS)
|
|
316
|
-
.filter(opt => opt.shownInSortBar)
|
|
317
|
-
.filter(opt => this.showRelevance || opt.field !== SortField.relevance)
|
|
318
|
-
.filter(opt => this.showDateFavorited || opt.field !== SortField.datefavorited);
|
|
311
|
+
`;
|
|
312
|
+
}
|
|
313
|
+
/** The template to render all the sort options in mobile view */
|
|
314
|
+
get mobileSortSelectorTemplate() {
|
|
315
|
+
const displayedOptions = Object.values(SORT_OPTIONS)
|
|
316
|
+
.filter(opt => opt.shownInSortBar)
|
|
317
|
+
.filter(opt => this.showRelevance || opt.field !== SortField.relevance)
|
|
318
|
+
.filter(opt => this.showDateFavorited || opt.field !== SortField.datefavorited);
|
|
319
319
|
return html `
|
|
320
320
|
<div
|
|
321
321
|
id="mobile-sort-container"
|
|
322
322
|
class=${this.mobileSelectorVisible ? 'visible' : 'hidden'}
|
|
323
323
|
>
|
|
324
|
-
${this.getSortDropdown({
|
|
325
|
-
displayName: html `${SORT_OPTIONS[this.finalizedSortField]
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
this.
|
|
334
|
-
|
|
335
|
-
},
|
|
324
|
+
${this.getSortDropdown({
|
|
325
|
+
displayName: html `${SORT_OPTIONS[this.finalizedSortField].displayName}`,
|
|
326
|
+
id: 'mobile-dropdown',
|
|
327
|
+
selected: true,
|
|
328
|
+
dropdownOptions: displayedOptions.map(opt => this.getDropdownOption(opt.field)),
|
|
329
|
+
selectedOption: this.finalizedSortField,
|
|
330
|
+
onOptionSelected: this.mobileSortChanged,
|
|
331
|
+
onDropdownClick: () => {
|
|
332
|
+
this.dropdownBackdropVisible = this.mobileDropdown.open;
|
|
333
|
+
this.mobileDropdown.classList.toggle('open', this.mobileDropdown.open);
|
|
334
|
+
},
|
|
336
335
|
})}
|
|
337
336
|
</div>
|
|
338
|
-
`;
|
|
339
|
-
}
|
|
340
|
-
/**
|
|
341
|
-
* This generates each of the non-dropdown sort option links.
|
|
342
|
-
*
|
|
343
|
-
* It manages the display value and the selected state of the option.
|
|
344
|
-
*
|
|
345
|
-
* @param sortField
|
|
346
|
-
* @param options {
|
|
347
|
-
* onClick?: (e: Event) => void; If this is provided, it will also be called when the option is clicked.
|
|
348
|
-
* displayName?: TemplateResult; The name to display for the option. Defaults to the sortField display name.
|
|
349
|
-
* selected?: boolean; true if the option is selected. Defaults to the selectedSort === sortField.
|
|
350
|
-
* }
|
|
351
|
-
* @returns
|
|
352
|
-
*/
|
|
353
|
-
getSortDisplayOption(sortField, options) {
|
|
354
|
-
var _a, _b;
|
|
355
|
-
const isSelected = (_a = options === null || options === void 0 ? void 0 : options.selected) !== null && _a !== void 0 ? _a : this.finalizedSortField === sortField;
|
|
356
|
-
const displayName = (_b = options === null || options === void 0 ? void 0 : options.displayName) !== null && _b !== void 0 ? _b : SORT_OPTIONS[sortField].displayName;
|
|
337
|
+
`;
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* This generates each of the non-dropdown sort option links.
|
|
341
|
+
*
|
|
342
|
+
* It manages the display value and the selected state of the option.
|
|
343
|
+
*
|
|
344
|
+
* @param sortField
|
|
345
|
+
* @param options {
|
|
346
|
+
* onClick?: (e: Event) => void; If this is provided, it will also be called when the option is clicked.
|
|
347
|
+
* displayName?: TemplateResult; The name to display for the option. Defaults to the sortField display name.
|
|
348
|
+
* selected?: boolean; true if the option is selected. Defaults to the selectedSort === sortField.
|
|
349
|
+
* }
|
|
350
|
+
* @returns
|
|
351
|
+
*/
|
|
352
|
+
getSortDisplayOption(sortField, options) {
|
|
353
|
+
var _a, _b;
|
|
354
|
+
const isSelected = (_a = options === null || options === void 0 ? void 0 : options.selected) !== null && _a !== void 0 ? _a : this.finalizedSortField === sortField;
|
|
355
|
+
const displayName = (_b = options === null || options === void 0 ? void 0 : options.displayName) !== null && _b !== void 0 ? _b : SORT_OPTIONS[sortField].displayName;
|
|
357
356
|
return html `
|
|
358
357
|
<button
|
|
359
358
|
class=${isSelected ? 'selected' : nothing}
|
|
360
359
|
data-title="${displayName}"
|
|
361
|
-
@click=${(e) => {
|
|
362
|
-
var _a;
|
|
363
|
-
e.preventDefault();
|
|
364
|
-
(_a = options === null || options === void 0 ? void 0 : options.onClick) === null || _a === void 0 ? void 0 : _a.call(options, e);
|
|
360
|
+
@click=${(e) => {
|
|
361
|
+
var _a;
|
|
362
|
+
e.preventDefault();
|
|
363
|
+
(_a = options === null || options === void 0 ? void 0 : options.onClick) === null || _a === void 0 ? void 0 : _a.call(options, e);
|
|
365
364
|
}}
|
|
366
365
|
>
|
|
367
366
|
${displayName}
|
|
368
367
|
</button>
|
|
369
|
-
`;
|
|
370
|
-
}
|
|
371
|
-
/**
|
|
372
|
-
* Generates a dropdown component containing multiple grouped sort options.
|
|
373
|
-
*
|
|
374
|
-
* @param options.displayName The name to use for the dropdown's visible label
|
|
375
|
-
* @param options.id The id to apply to the dropdown element
|
|
376
|
-
* @param options.dropdownOptions An array of option objects used to populate the dropdown
|
|
377
|
-
* @param options.selectedOption The id of the option that should be initially selected
|
|
378
|
-
* @param options.selected A boolean indicating whether this dropdown should use its
|
|
379
|
-
* selected appearance
|
|
380
|
-
* @param options.onOptionSelected A handler for optionSelected events coming from the dropdown
|
|
381
|
-
* @param options.onDropdownClick A handler for click events on the dropdown
|
|
382
|
-
* @param options.onLabelInteraction A handler for click events and Enter/Space keydown events
|
|
383
|
-
* on the dropdown's label
|
|
384
|
-
*/
|
|
385
|
-
getSortDropdown(options) {
|
|
386
|
-
var _a, _b, _c, _d, _e;
|
|
368
|
+
`;
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Generates a dropdown component containing multiple grouped sort options.
|
|
372
|
+
*
|
|
373
|
+
* @param options.displayName The name to use for the dropdown's visible label
|
|
374
|
+
* @param options.id The id to apply to the dropdown element
|
|
375
|
+
* @param options.dropdownOptions An array of option objects used to populate the dropdown
|
|
376
|
+
* @param options.selectedOption The id of the option that should be initially selected
|
|
377
|
+
* @param options.selected A boolean indicating whether this dropdown should use its
|
|
378
|
+
* selected appearance
|
|
379
|
+
* @param options.onOptionSelected A handler for optionSelected events coming from the dropdown
|
|
380
|
+
* @param options.onDropdownClick A handler for click events on the dropdown
|
|
381
|
+
* @param options.onLabelInteraction A handler for click events and Enter/Space keydown events
|
|
382
|
+
* on the dropdown's label
|
|
383
|
+
*/
|
|
384
|
+
getSortDropdown(options) {
|
|
385
|
+
var _a, _b, _c, _d, _e;
|
|
387
386
|
return html `
|
|
388
387
|
<ia-dropdown
|
|
389
388
|
id=${(_a = options.id) !== null && _a !== void 0 ? _a : nothing}
|
|
@@ -402,129 +401,129 @@ let SortFilterBar = class SortFilterBar extends LitElement {
|
|
|
402
401
|
slot="dropdown-label"
|
|
403
402
|
data-title="${options.displayName.values}"
|
|
404
403
|
@click=${(_e = options.onLabelInteraction) !== null && _e !== void 0 ? _e : nothing}
|
|
405
|
-
@keydown=${options.onLabelInteraction
|
|
406
|
-
? (e) => {
|
|
407
|
-
var _a;
|
|
408
|
-
if (e.key === 'Enter' || e.key === ' ') {
|
|
409
|
-
(_a = options.onLabelInteraction) === null || _a === void 0 ? void 0 : _a.call(options, e);
|
|
410
|
-
}
|
|
411
|
-
}
|
|
404
|
+
@keydown=${options.onLabelInteraction
|
|
405
|
+
? (e) => {
|
|
406
|
+
var _a;
|
|
407
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
408
|
+
(_a = options.onLabelInteraction) === null || _a === void 0 ? void 0 : _a.call(options, e);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
412
411
|
: nothing}
|
|
413
412
|
>
|
|
414
413
|
${options.displayName}
|
|
415
414
|
</span>
|
|
416
415
|
</ia-dropdown>
|
|
417
|
-
`;
|
|
418
|
-
}
|
|
419
|
-
/** Generates a single dropdown option object for the given sort field */
|
|
420
|
-
getDropdownOption(sortField) {
|
|
421
|
-
return {
|
|
422
|
-
id: sortField,
|
|
423
|
-
selectedHandler: () => {
|
|
424
|
-
this.selectDropdownSortField(sortField);
|
|
425
|
-
},
|
|
416
|
+
`;
|
|
417
|
+
}
|
|
418
|
+
/** Generates a single dropdown option object for the given sort field */
|
|
419
|
+
getDropdownOption(sortField) {
|
|
420
|
+
return {
|
|
421
|
+
id: sortField,
|
|
422
|
+
selectedHandler: () => {
|
|
423
|
+
this.selectDropdownSortField(sortField);
|
|
424
|
+
},
|
|
426
425
|
label: html `
|
|
427
426
|
<span class="dropdown-option-label">
|
|
428
427
|
${SORT_OPTIONS[sortField].displayName}
|
|
429
428
|
</span>
|
|
430
|
-
`,
|
|
431
|
-
};
|
|
432
|
-
}
|
|
433
|
-
/** Handler for when any sort dropdown option is selected */
|
|
434
|
-
dropdownOptionSelected(e) {
|
|
435
|
-
this.dropdownBackdropVisible = false;
|
|
436
|
-
this.clearAlphaBarFilters();
|
|
437
|
-
const sortField = e.detail.option.id;
|
|
438
|
-
this.setSelectedSort(sortField);
|
|
439
|
-
if (this.viewOptionSelected) {
|
|
440
|
-
this.lastSelectedViewSort = sortField;
|
|
441
|
-
}
|
|
442
|
-
else if (this.dateOptionSelected) {
|
|
443
|
-
this.lastSelectedDateSort = sortField;
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
/** The template to render for the views dropdown */
|
|
447
|
-
get viewsDropdownTemplate() {
|
|
448
|
-
return this.getSortDropdown({
|
|
449
|
-
displayName: html `${this.viewSortDisplayName}`,
|
|
450
|
-
id: 'views-dropdown',
|
|
451
|
-
selected: this.viewOptionSelected,
|
|
452
|
-
dropdownOptions: [
|
|
453
|
-
this.getDropdownOption(SortField.weeklyview),
|
|
454
|
-
this.getDropdownOption(SortField.alltimeview),
|
|
455
|
-
],
|
|
456
|
-
selectedOption: this.viewOptionSelected ? this.finalizedSortField : '',
|
|
457
|
-
onOptionSelected: this.dropdownOptionSelected,
|
|
458
|
-
onDropdownClick: () => {
|
|
459
|
-
this.dateDropdown.open = false;
|
|
460
|
-
this.dropdownBackdropVisible = this.viewsDropdown.open;
|
|
461
|
-
this.viewsDropdown.classList.toggle('open', this.viewsDropdown.open);
|
|
462
|
-
},
|
|
463
|
-
onLabelInteraction: (e) => {
|
|
464
|
-
if (!this.viewsDropdown.open && !this.viewOptionSelected) {
|
|
465
|
-
e.stopPropagation();
|
|
466
|
-
this.clearAlphaBarFilters();
|
|
467
|
-
this.setSelectedSort(this.lastSelectedViewSort);
|
|
468
|
-
}
|
|
469
|
-
},
|
|
470
|
-
});
|
|
471
|
-
}
|
|
472
|
-
/** The template to render for the date dropdown */
|
|
473
|
-
get dateDropdownTemplate() {
|
|
474
|
-
return this.getSortDropdown({
|
|
475
|
-
displayName: html `${this.dateSortDisplayName}`,
|
|
476
|
-
id: 'date-dropdown',
|
|
477
|
-
selected: this.dateOptionSelected,
|
|
478
|
-
dropdownOptions: [
|
|
479
|
-
...(this.showDateFavorited
|
|
480
|
-
? [this.getDropdownOption(SortField.datefavorited)]
|
|
481
|
-
: []),
|
|
482
|
-
this.getDropdownOption(SortField.date),
|
|
483
|
-
this.getDropdownOption(SortField.datearchived),
|
|
484
|
-
this.getDropdownOption(SortField.datereviewed),
|
|
485
|
-
this.getDropdownOption(SortField.dateadded),
|
|
486
|
-
],
|
|
487
|
-
selectedOption: this.dateOptionSelected ? this.finalizedSortField : '',
|
|
488
|
-
onOptionSelected: this.dropdownOptionSelected,
|
|
489
|
-
onDropdownClick: () => {
|
|
490
|
-
this.viewsDropdown.open = false;
|
|
491
|
-
this.dropdownBackdropVisible = this.dateDropdown.open;
|
|
492
|
-
this.dateDropdown.classList.toggle('open', this.dateDropdown.open);
|
|
493
|
-
},
|
|
494
|
-
onLabelInteraction: (e) => {
|
|
495
|
-
if (!this.dateDropdown.open && !this.dateOptionSelected) {
|
|
496
|
-
e.stopPropagation();
|
|
497
|
-
this.clearAlphaBarFilters();
|
|
498
|
-
this.setSelectedSort(this.lastSelectedDateSort);
|
|
499
|
-
}
|
|
500
|
-
},
|
|
501
|
-
});
|
|
502
|
-
}
|
|
503
|
-
/** Handler for when a new mobile sort dropdown option is selected */
|
|
504
|
-
mobileSortChanged(e) {
|
|
505
|
-
this.dropdownBackdropVisible = false;
|
|
506
|
-
const sortField = e.detail.option.id;
|
|
507
|
-
this.setSelectedSort(sortField);
|
|
508
|
-
this.alphaSelectorVisible = null;
|
|
509
|
-
if (sortField !== 'title' && this.selectedTitleFilter) {
|
|
510
|
-
this.selectedTitleFilter = null;
|
|
511
|
-
this.emitTitleLetterChangedEvent();
|
|
512
|
-
}
|
|
513
|
-
if (sortField !== 'creator' && this.selectedCreatorFilter) {
|
|
514
|
-
this.selectedCreatorFilter = null;
|
|
515
|
-
this.emitCreatorLetterChangedEvent();
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
/** Template for rendering the three display mode options */
|
|
519
|
-
/** Added data-testid for Playwright testing * */
|
|
520
|
-
get displayOptionTemplate() {
|
|
429
|
+
`,
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
/** Handler for when any sort dropdown option is selected */
|
|
433
|
+
dropdownOptionSelected(e) {
|
|
434
|
+
this.dropdownBackdropVisible = false;
|
|
435
|
+
this.clearAlphaBarFilters();
|
|
436
|
+
const sortField = e.detail.option.id;
|
|
437
|
+
this.setSelectedSort(sortField);
|
|
438
|
+
if (this.viewOptionSelected) {
|
|
439
|
+
this.lastSelectedViewSort = sortField;
|
|
440
|
+
}
|
|
441
|
+
else if (this.dateOptionSelected) {
|
|
442
|
+
this.lastSelectedDateSort = sortField;
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
/** The template to render for the views dropdown */
|
|
446
|
+
get viewsDropdownTemplate() {
|
|
447
|
+
return this.getSortDropdown({
|
|
448
|
+
displayName: html `${this.viewSortDisplayName}`,
|
|
449
|
+
id: 'views-dropdown',
|
|
450
|
+
selected: this.viewOptionSelected,
|
|
451
|
+
dropdownOptions: [
|
|
452
|
+
this.getDropdownOption(SortField.weeklyview),
|
|
453
|
+
this.getDropdownOption(SortField.alltimeview),
|
|
454
|
+
],
|
|
455
|
+
selectedOption: this.viewOptionSelected ? this.finalizedSortField : '',
|
|
456
|
+
onOptionSelected: this.dropdownOptionSelected,
|
|
457
|
+
onDropdownClick: () => {
|
|
458
|
+
this.dateDropdown.open = false;
|
|
459
|
+
this.dropdownBackdropVisible = this.viewsDropdown.open;
|
|
460
|
+
this.viewsDropdown.classList.toggle('open', this.viewsDropdown.open);
|
|
461
|
+
},
|
|
462
|
+
onLabelInteraction: (e) => {
|
|
463
|
+
if (!this.viewsDropdown.open && !this.viewOptionSelected) {
|
|
464
|
+
e.stopPropagation();
|
|
465
|
+
this.clearAlphaBarFilters();
|
|
466
|
+
this.setSelectedSort(this.lastSelectedViewSort);
|
|
467
|
+
}
|
|
468
|
+
},
|
|
469
|
+
});
|
|
470
|
+
}
|
|
471
|
+
/** The template to render for the date dropdown */
|
|
472
|
+
get dateDropdownTemplate() {
|
|
473
|
+
return this.getSortDropdown({
|
|
474
|
+
displayName: html `${this.dateSortDisplayName}`,
|
|
475
|
+
id: 'date-dropdown',
|
|
476
|
+
selected: this.dateOptionSelected,
|
|
477
|
+
dropdownOptions: [
|
|
478
|
+
...(this.showDateFavorited
|
|
479
|
+
? [this.getDropdownOption(SortField.datefavorited)]
|
|
480
|
+
: []),
|
|
481
|
+
this.getDropdownOption(SortField.date),
|
|
482
|
+
this.getDropdownOption(SortField.datearchived),
|
|
483
|
+
this.getDropdownOption(SortField.datereviewed),
|
|
484
|
+
this.getDropdownOption(SortField.dateadded),
|
|
485
|
+
],
|
|
486
|
+
selectedOption: this.dateOptionSelected ? this.finalizedSortField : '',
|
|
487
|
+
onOptionSelected: this.dropdownOptionSelected,
|
|
488
|
+
onDropdownClick: () => {
|
|
489
|
+
this.viewsDropdown.open = false;
|
|
490
|
+
this.dropdownBackdropVisible = this.dateDropdown.open;
|
|
491
|
+
this.dateDropdown.classList.toggle('open', this.dateDropdown.open);
|
|
492
|
+
},
|
|
493
|
+
onLabelInteraction: (e) => {
|
|
494
|
+
if (!this.dateDropdown.open && !this.dateOptionSelected) {
|
|
495
|
+
e.stopPropagation();
|
|
496
|
+
this.clearAlphaBarFilters();
|
|
497
|
+
this.setSelectedSort(this.lastSelectedDateSort);
|
|
498
|
+
}
|
|
499
|
+
},
|
|
500
|
+
});
|
|
501
|
+
}
|
|
502
|
+
/** Handler for when a new mobile sort dropdown option is selected */
|
|
503
|
+
mobileSortChanged(e) {
|
|
504
|
+
this.dropdownBackdropVisible = false;
|
|
505
|
+
const sortField = e.detail.option.id;
|
|
506
|
+
this.setSelectedSort(sortField);
|
|
507
|
+
this.alphaSelectorVisible = null;
|
|
508
|
+
if (sortField !== 'title' && this.selectedTitleFilter) {
|
|
509
|
+
this.selectedTitleFilter = null;
|
|
510
|
+
this.emitTitleLetterChangedEvent();
|
|
511
|
+
}
|
|
512
|
+
if (sortField !== 'creator' && this.selectedCreatorFilter) {
|
|
513
|
+
this.selectedCreatorFilter = null;
|
|
514
|
+
this.emitCreatorLetterChangedEvent();
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
/** Template for rendering the three display mode options */
|
|
518
|
+
/** Added data-testid for Playwright testing * */
|
|
519
|
+
get displayOptionTemplate() {
|
|
521
520
|
return html `
|
|
522
521
|
<ul>
|
|
523
522
|
<li>
|
|
524
523
|
<button
|
|
525
524
|
id="grid-button"
|
|
526
|
-
@click=${() => {
|
|
527
|
-
this.displayMode = 'grid';
|
|
525
|
+
@click=${() => {
|
|
526
|
+
this.displayMode = 'grid';
|
|
528
527
|
}}
|
|
529
528
|
class=${this.displayMode === 'grid' ? 'active' : ''}
|
|
530
529
|
title="Tile view"
|
|
@@ -536,8 +535,8 @@ let SortFilterBar = class SortFilterBar extends LitElement {
|
|
|
536
535
|
<li>
|
|
537
536
|
<button
|
|
538
537
|
id="list-detail-button"
|
|
539
|
-
@click=${() => {
|
|
540
|
-
this.displayMode = 'list-detail';
|
|
538
|
+
@click=${() => {
|
|
539
|
+
this.displayMode = 'list-detail';
|
|
541
540
|
}}
|
|
542
541
|
class=${this.displayMode === 'list-detail' ? 'active' : ''}
|
|
543
542
|
title="List view"
|
|
@@ -549,8 +548,8 @@ let SortFilterBar = class SortFilterBar extends LitElement {
|
|
|
549
548
|
<li>
|
|
550
549
|
<button
|
|
551
550
|
id="list-compact-button"
|
|
552
|
-
@click=${() => {
|
|
553
|
-
this.displayMode = 'list-compact';
|
|
551
|
+
@click=${() => {
|
|
552
|
+
this.displayMode = 'list-compact';
|
|
554
553
|
}}
|
|
555
554
|
class=${this.displayMode === 'list-compact' ? 'active' : ''}
|
|
556
555
|
title="Compact list view"
|
|
@@ -560,213 +559,213 @@ let SortFilterBar = class SortFilterBar extends LitElement {
|
|
|
560
559
|
</button>
|
|
561
560
|
</li>
|
|
562
561
|
</ul>
|
|
563
|
-
`;
|
|
564
|
-
}
|
|
565
|
-
/**
|
|
566
|
-
* Template for rendering the transparent backdrop to capture clicks outside the
|
|
567
|
-
* dropdown menu while it is open.
|
|
568
|
-
*/
|
|
569
|
-
get dropdownBackdrop() {
|
|
562
|
+
`;
|
|
563
|
+
}
|
|
564
|
+
/**
|
|
565
|
+
* Template for rendering the transparent backdrop to capture clicks outside the
|
|
566
|
+
* dropdown menu while it is open.
|
|
567
|
+
*/
|
|
568
|
+
get dropdownBackdrop() {
|
|
570
569
|
return html `
|
|
571
570
|
<div
|
|
572
571
|
id="sort-selector-backdrop"
|
|
573
572
|
@keyup=${this.closeDropdowns}
|
|
574
573
|
@click=${this.closeDropdowns}
|
|
575
574
|
></div>
|
|
576
|
-
`;
|
|
577
|
-
}
|
|
578
|
-
/** Closes all of the sorting dropdown components' menus */
|
|
579
|
-
closeDropdowns() {
|
|
580
|
-
this.dropdownBackdropVisible = false;
|
|
581
|
-
const allDropdowns = [
|
|
582
|
-
this.viewsDropdown,
|
|
583
|
-
this.dateDropdown,
|
|
584
|
-
this.mobileDropdown,
|
|
585
|
-
];
|
|
586
|
-
for (const dropdown of allDropdowns) {
|
|
587
|
-
dropdown.open = false;
|
|
588
|
-
dropdown.classList.remove('open');
|
|
589
|
-
}
|
|
590
|
-
}
|
|
591
|
-
selectDropdownSortField(sortField) {
|
|
592
|
-
// When a dropdown sort option is selected, we additionally need to clear the backdrop
|
|
593
|
-
this.dropdownBackdropVisible = false;
|
|
594
|
-
this.setSelectedSort(sortField);
|
|
595
|
-
}
|
|
596
|
-
clearAlphaBarFilters() {
|
|
597
|
-
this.alphaSelectorVisible = null;
|
|
598
|
-
this.selectedTitleFilter = null;
|
|
599
|
-
this.selectedCreatorFilter = null;
|
|
600
|
-
this.emitTitleLetterChangedEvent();
|
|
601
|
-
this.emitCreatorLetterChangedEvent();
|
|
602
|
-
}
|
|
603
|
-
setSortDirection(sortDirection) {
|
|
604
|
-
this.sortDirection = sortDirection;
|
|
605
|
-
this.emitSortChangedEvent();
|
|
606
|
-
}
|
|
607
|
-
/** Toggles the current sort direction between 'asc' and 'desc' */
|
|
608
|
-
toggleSortDirection() {
|
|
609
|
-
this.setSortDirection(this.finalizedSortDirection === 'desc' ? 'asc' : 'desc');
|
|
610
|
-
}
|
|
611
|
-
handleSortDirectionClicked() {
|
|
612
|
-
if (!this.sortDirection &&
|
|
613
|
-
this.defaultSortField &&
|
|
614
|
-
this.defaultSortDirection) {
|
|
615
|
-
// When the sort direction is merely defaulted (not set by the user), clicking
|
|
616
|
-
// the toggled button should "promote" the default sort to an explicitly-set one
|
|
617
|
-
// and then toggle it as usual.
|
|
618
|
-
this.selectedSort = this.defaultSortField;
|
|
619
|
-
this.sortDirection = this.defaultSortDirection;
|
|
620
|
-
}
|
|
621
|
-
this.toggleSortDirection();
|
|
622
|
-
}
|
|
623
|
-
setSelectedSort(sort) {
|
|
624
|
-
this.selectedSort = sort;
|
|
625
|
-
// Apply this field's default sort direction
|
|
626
|
-
const sortOption = SORT_OPTIONS[sort];
|
|
627
|
-
this.sortDirection = sortOption.defaultSortDirection;
|
|
628
|
-
this.emitSortChangedEvent();
|
|
629
|
-
}
|
|
630
|
-
/** The current sort field, or the default one if no explicit sort is set */
|
|
631
|
-
get finalizedSortField() {
|
|
632
|
-
return this.selectedSort === SortField.default
|
|
633
|
-
? this.defaultSortField
|
|
634
|
-
: this.selectedSort;
|
|
635
|
-
}
|
|
636
|
-
/** The current sort direction, or the default one if no explicit direction is set */
|
|
637
|
-
get finalizedSortDirection() {
|
|
638
|
-
return this.sortDirection === null
|
|
639
|
-
? this.defaultSortDirection
|
|
640
|
-
: this.sortDirection;
|
|
641
|
-
}
|
|
642
|
-
/** Whether the sort direction button should be enabled for the current sort */
|
|
643
|
-
get canChangeSortDirection() {
|
|
644
|
-
return SORT_OPTIONS[this.finalizedSortField].canSetDirection;
|
|
645
|
-
}
|
|
646
|
-
/**
|
|
647
|
-
* There are four date sort options.
|
|
648
|
-
*
|
|
649
|
-
* This checks to see if the current sort is one of them.
|
|
650
|
-
*
|
|
651
|
-
* @readonly
|
|
652
|
-
* @private
|
|
653
|
-
* @type {boolean}
|
|
654
|
-
* @memberof SortFilterBar
|
|
655
|
-
*/
|
|
656
|
-
get dateOptionSelected() {
|
|
657
|
-
const dateSortFields = [
|
|
658
|
-
SortField.datefavorited,
|
|
659
|
-
SortField.datearchived,
|
|
660
|
-
SortField.date,
|
|
661
|
-
SortField.datereviewed,
|
|
662
|
-
SortField.dateadded,
|
|
663
|
-
];
|
|
664
|
-
return dateSortFields.includes(this.finalizedSortField);
|
|
665
|
-
}
|
|
666
|
-
/**
|
|
667
|
-
* There are two view sort options.
|
|
668
|
-
*
|
|
669
|
-
* This checks to see if the current sort is one of them.
|
|
670
|
-
*
|
|
671
|
-
* @readonly
|
|
672
|
-
* @private
|
|
673
|
-
* @type {boolean}
|
|
674
|
-
* @memberof SortFilterBar
|
|
675
|
-
*/
|
|
676
|
-
get viewOptionSelected() {
|
|
677
|
-
const viewSortFields = [
|
|
678
|
-
SortField.alltimeview,
|
|
679
|
-
SortField.weeklyview,
|
|
680
|
-
];
|
|
681
|
-
return viewSortFields.includes(this.finalizedSortField);
|
|
682
|
-
}
|
|
683
|
-
/**
|
|
684
|
-
* The default field for the date sort dropdown.
|
|
685
|
-
* This is Date Favorited when that option is available, or Date Published otherwise.
|
|
686
|
-
*/
|
|
687
|
-
get defaultDateSortField() {
|
|
688
|
-
return this.showDateFavorited ? SortField.datefavorited : SortField.date;
|
|
689
|
-
}
|
|
690
|
-
/**
|
|
691
|
-
* The display name of the last selected date field
|
|
692
|
-
*
|
|
693
|
-
* @readonly
|
|
694
|
-
* @private
|
|
695
|
-
* @type {string}
|
|
696
|
-
* @memberof SortFilterBar
|
|
697
|
-
*/
|
|
698
|
-
get dateSortDisplayName() {
|
|
699
|
-
return SORT_OPTIONS[this.lastSelectedDateSort].displayName;
|
|
700
|
-
}
|
|
701
|
-
/**
|
|
702
|
-
* The display name of the last selected view field
|
|
703
|
-
*
|
|
704
|
-
* @readonly
|
|
705
|
-
* @private
|
|
706
|
-
* @type {string}
|
|
707
|
-
* @memberof SortFilterBar
|
|
708
|
-
*/
|
|
709
|
-
get viewSortDisplayName() {
|
|
710
|
-
return SORT_OPTIONS[this.lastSelectedViewSort].displayName;
|
|
711
|
-
}
|
|
712
|
-
get titleSelectorBar() {
|
|
713
|
-
var _a;
|
|
575
|
+
`;
|
|
576
|
+
}
|
|
577
|
+
/** Closes all of the sorting dropdown components' menus */
|
|
578
|
+
closeDropdowns() {
|
|
579
|
+
this.dropdownBackdropVisible = false;
|
|
580
|
+
const allDropdowns = [
|
|
581
|
+
this.viewsDropdown,
|
|
582
|
+
this.dateDropdown,
|
|
583
|
+
this.mobileDropdown,
|
|
584
|
+
];
|
|
585
|
+
for (const dropdown of allDropdowns) {
|
|
586
|
+
dropdown.open = false;
|
|
587
|
+
dropdown.classList.remove('open');
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
selectDropdownSortField(sortField) {
|
|
591
|
+
// When a dropdown sort option is selected, we additionally need to clear the backdrop
|
|
592
|
+
this.dropdownBackdropVisible = false;
|
|
593
|
+
this.setSelectedSort(sortField);
|
|
594
|
+
}
|
|
595
|
+
clearAlphaBarFilters() {
|
|
596
|
+
this.alphaSelectorVisible = null;
|
|
597
|
+
this.selectedTitleFilter = null;
|
|
598
|
+
this.selectedCreatorFilter = null;
|
|
599
|
+
this.emitTitleLetterChangedEvent();
|
|
600
|
+
this.emitCreatorLetterChangedEvent();
|
|
601
|
+
}
|
|
602
|
+
setSortDirection(sortDirection) {
|
|
603
|
+
this.sortDirection = sortDirection;
|
|
604
|
+
this.emitSortChangedEvent();
|
|
605
|
+
}
|
|
606
|
+
/** Toggles the current sort direction between 'asc' and 'desc' */
|
|
607
|
+
toggleSortDirection() {
|
|
608
|
+
this.setSortDirection(this.finalizedSortDirection === 'desc' ? 'asc' : 'desc');
|
|
609
|
+
}
|
|
610
|
+
handleSortDirectionClicked() {
|
|
611
|
+
if (!this.sortDirection &&
|
|
612
|
+
this.defaultSortField &&
|
|
613
|
+
this.defaultSortDirection) {
|
|
614
|
+
// When the sort direction is merely defaulted (not set by the user), clicking
|
|
615
|
+
// the toggled button should "promote" the default sort to an explicitly-set one
|
|
616
|
+
// and then toggle it as usual.
|
|
617
|
+
this.selectedSort = this.defaultSortField;
|
|
618
|
+
this.sortDirection = this.defaultSortDirection;
|
|
619
|
+
}
|
|
620
|
+
this.toggleSortDirection();
|
|
621
|
+
}
|
|
622
|
+
setSelectedSort(sort) {
|
|
623
|
+
this.selectedSort = sort;
|
|
624
|
+
// Apply this field's default sort direction
|
|
625
|
+
const sortOption = SORT_OPTIONS[sort];
|
|
626
|
+
this.sortDirection = sortOption.defaultSortDirection;
|
|
627
|
+
this.emitSortChangedEvent();
|
|
628
|
+
}
|
|
629
|
+
/** The current sort field, or the default one if no explicit sort is set */
|
|
630
|
+
get finalizedSortField() {
|
|
631
|
+
return this.selectedSort === SortField.default
|
|
632
|
+
? this.defaultSortField
|
|
633
|
+
: this.selectedSort;
|
|
634
|
+
}
|
|
635
|
+
/** The current sort direction, or the default one if no explicit direction is set */
|
|
636
|
+
get finalizedSortDirection() {
|
|
637
|
+
return this.sortDirection === null
|
|
638
|
+
? this.defaultSortDirection
|
|
639
|
+
: this.sortDirection;
|
|
640
|
+
}
|
|
641
|
+
/** Whether the sort direction button should be enabled for the current sort */
|
|
642
|
+
get canChangeSortDirection() {
|
|
643
|
+
return SORT_OPTIONS[this.finalizedSortField].canSetDirection;
|
|
644
|
+
}
|
|
645
|
+
/**
|
|
646
|
+
* There are four date sort options.
|
|
647
|
+
*
|
|
648
|
+
* This checks to see if the current sort is one of them.
|
|
649
|
+
*
|
|
650
|
+
* @readonly
|
|
651
|
+
* @private
|
|
652
|
+
* @type {boolean}
|
|
653
|
+
* @memberof SortFilterBar
|
|
654
|
+
*/
|
|
655
|
+
get dateOptionSelected() {
|
|
656
|
+
const dateSortFields = [
|
|
657
|
+
SortField.datefavorited,
|
|
658
|
+
SortField.datearchived,
|
|
659
|
+
SortField.date,
|
|
660
|
+
SortField.datereviewed,
|
|
661
|
+
SortField.dateadded,
|
|
662
|
+
];
|
|
663
|
+
return dateSortFields.includes(this.finalizedSortField);
|
|
664
|
+
}
|
|
665
|
+
/**
|
|
666
|
+
* There are two view sort options.
|
|
667
|
+
*
|
|
668
|
+
* This checks to see if the current sort is one of them.
|
|
669
|
+
*
|
|
670
|
+
* @readonly
|
|
671
|
+
* @private
|
|
672
|
+
* @type {boolean}
|
|
673
|
+
* @memberof SortFilterBar
|
|
674
|
+
*/
|
|
675
|
+
get viewOptionSelected() {
|
|
676
|
+
const viewSortFields = [
|
|
677
|
+
SortField.alltimeview,
|
|
678
|
+
SortField.weeklyview,
|
|
679
|
+
];
|
|
680
|
+
return viewSortFields.includes(this.finalizedSortField);
|
|
681
|
+
}
|
|
682
|
+
/**
|
|
683
|
+
* The default field for the date sort dropdown.
|
|
684
|
+
* This is Date Favorited when that option is available, or Date Published otherwise.
|
|
685
|
+
*/
|
|
686
|
+
get defaultDateSortField() {
|
|
687
|
+
return this.showDateFavorited ? SortField.datefavorited : SortField.date;
|
|
688
|
+
}
|
|
689
|
+
/**
|
|
690
|
+
* The display name of the last selected date field
|
|
691
|
+
*
|
|
692
|
+
* @readonly
|
|
693
|
+
* @private
|
|
694
|
+
* @type {string}
|
|
695
|
+
* @memberof SortFilterBar
|
|
696
|
+
*/
|
|
697
|
+
get dateSortDisplayName() {
|
|
698
|
+
return SORT_OPTIONS[this.lastSelectedDateSort].displayName;
|
|
699
|
+
}
|
|
700
|
+
/**
|
|
701
|
+
* The display name of the last selected view field
|
|
702
|
+
*
|
|
703
|
+
* @readonly
|
|
704
|
+
* @private
|
|
705
|
+
* @type {string}
|
|
706
|
+
* @memberof SortFilterBar
|
|
707
|
+
*/
|
|
708
|
+
get viewSortDisplayName() {
|
|
709
|
+
return SORT_OPTIONS[this.lastSelectedViewSort].displayName;
|
|
710
|
+
}
|
|
711
|
+
get titleSelectorBar() {
|
|
712
|
+
var _a;
|
|
714
713
|
return html ` <alpha-bar
|
|
715
714
|
.selectedLetter=${this.selectedTitleFilter}
|
|
716
715
|
.letterCounts=${(_a = this.prefixFilterCountMap) === null || _a === void 0 ? void 0 : _a.title}
|
|
717
716
|
ariaLandmarkLabel="Filter by title letter"
|
|
718
717
|
@letterChanged=${this.titleLetterChanged}
|
|
719
|
-
></alpha-bar>`;
|
|
720
|
-
}
|
|
721
|
-
get creatorSelectorBar() {
|
|
722
|
-
var _a;
|
|
718
|
+
></alpha-bar>`;
|
|
719
|
+
}
|
|
720
|
+
get creatorSelectorBar() {
|
|
721
|
+
var _a;
|
|
723
722
|
return html ` <alpha-bar
|
|
724
723
|
.selectedLetter=${this.selectedCreatorFilter}
|
|
725
724
|
.letterCounts=${(_a = this.prefixFilterCountMap) === null || _a === void 0 ? void 0 : _a.creator}
|
|
726
725
|
ariaLandmarkLabel="Filter by creator letter"
|
|
727
726
|
@letterChanged=${this.creatorLetterChanged}
|
|
728
|
-
></alpha-bar>`;
|
|
729
|
-
}
|
|
730
|
-
titleLetterChanged(e) {
|
|
731
|
-
var _a;
|
|
732
|
-
this.selectedTitleFilter = (_a = e.detail.selectedLetter) !== null && _a !== void 0 ? _a : null;
|
|
733
|
-
this.emitTitleLetterChangedEvent();
|
|
734
|
-
}
|
|
735
|
-
creatorLetterChanged(e) {
|
|
736
|
-
var _a;
|
|
737
|
-
this.selectedCreatorFilter = (_a = e.detail.selectedLetter) !== null && _a !== void 0 ? _a : null;
|
|
738
|
-
this.emitCreatorLetterChangedEvent();
|
|
739
|
-
}
|
|
740
|
-
emitTitleLetterChangedEvent() {
|
|
741
|
-
const event = new CustomEvent('titleLetterChanged', {
|
|
742
|
-
detail: { selectedLetter: this.selectedTitleFilter },
|
|
743
|
-
});
|
|
744
|
-
this.dispatchEvent(event);
|
|
745
|
-
}
|
|
746
|
-
emitCreatorLetterChangedEvent() {
|
|
747
|
-
const event = new CustomEvent('creatorLetterChanged', {
|
|
748
|
-
detail: { selectedLetter: this.selectedCreatorFilter },
|
|
749
|
-
});
|
|
750
|
-
this.dispatchEvent(event);
|
|
751
|
-
}
|
|
752
|
-
displayModeChanged() {
|
|
753
|
-
const event = new CustomEvent('displayModeChanged', {
|
|
754
|
-
detail: { displayMode: this.displayMode },
|
|
755
|
-
});
|
|
756
|
-
this.dispatchEvent(event);
|
|
757
|
-
}
|
|
758
|
-
emitSortChangedEvent() {
|
|
759
|
-
const event = new CustomEvent('sortChanged', {
|
|
760
|
-
detail: {
|
|
761
|
-
selectedSort: this.selectedSort,
|
|
762
|
-
sortDirection: this.sortDirection,
|
|
763
|
-
},
|
|
764
|
-
});
|
|
765
|
-
this.dispatchEvent(event);
|
|
766
|
-
}
|
|
767
|
-
static get styles() {
|
|
768
|
-
return [
|
|
769
|
-
srOnlyStyle,
|
|
727
|
+
></alpha-bar>`;
|
|
728
|
+
}
|
|
729
|
+
titleLetterChanged(e) {
|
|
730
|
+
var _a;
|
|
731
|
+
this.selectedTitleFilter = (_a = e.detail.selectedLetter) !== null && _a !== void 0 ? _a : null;
|
|
732
|
+
this.emitTitleLetterChangedEvent();
|
|
733
|
+
}
|
|
734
|
+
creatorLetterChanged(e) {
|
|
735
|
+
var _a;
|
|
736
|
+
this.selectedCreatorFilter = (_a = e.detail.selectedLetter) !== null && _a !== void 0 ? _a : null;
|
|
737
|
+
this.emitCreatorLetterChangedEvent();
|
|
738
|
+
}
|
|
739
|
+
emitTitleLetterChangedEvent() {
|
|
740
|
+
const event = new CustomEvent('titleLetterChanged', {
|
|
741
|
+
detail: { selectedLetter: this.selectedTitleFilter },
|
|
742
|
+
});
|
|
743
|
+
this.dispatchEvent(event);
|
|
744
|
+
}
|
|
745
|
+
emitCreatorLetterChangedEvent() {
|
|
746
|
+
const event = new CustomEvent('creatorLetterChanged', {
|
|
747
|
+
detail: { selectedLetter: this.selectedCreatorFilter },
|
|
748
|
+
});
|
|
749
|
+
this.dispatchEvent(event);
|
|
750
|
+
}
|
|
751
|
+
displayModeChanged() {
|
|
752
|
+
const event = new CustomEvent('displayModeChanged', {
|
|
753
|
+
detail: { displayMode: this.displayMode },
|
|
754
|
+
});
|
|
755
|
+
this.dispatchEvent(event);
|
|
756
|
+
}
|
|
757
|
+
emitSortChangedEvent() {
|
|
758
|
+
const event = new CustomEvent('sortChanged', {
|
|
759
|
+
detail: {
|
|
760
|
+
selectedSort: this.selectedSort,
|
|
761
|
+
sortDirection: this.sortDirection,
|
|
762
|
+
},
|
|
763
|
+
});
|
|
764
|
+
this.dispatchEvent(event);
|
|
765
|
+
}
|
|
766
|
+
static get styles() {
|
|
767
|
+
return [
|
|
768
|
+
srOnlyStyle,
|
|
770
769
|
css `
|
|
771
770
|
#container {
|
|
772
771
|
position: relative;
|
|
@@ -997,84 +996,84 @@ let SortFilterBar = class SortFilterBar extends LitElement {
|
|
|
997
996
|
white-space: nowrap;
|
|
998
997
|
user-select: none;
|
|
999
998
|
}
|
|
1000
|
-
`,
|
|
1001
|
-
];
|
|
1002
|
-
}
|
|
1003
|
-
};
|
|
1004
|
-
__decorate([
|
|
1005
|
-
property({ type: String })
|
|
1006
|
-
], SortFilterBar.prototype, "displayMode", void 0);
|
|
1007
|
-
__decorate([
|
|
1008
|
-
property({ type: String })
|
|
1009
|
-
], SortFilterBar.prototype, "defaultSortDirection", void 0);
|
|
1010
|
-
__decorate([
|
|
1011
|
-
property({ type: String })
|
|
1012
|
-
], SortFilterBar.prototype, "defaultSortField", void 0);
|
|
1013
|
-
__decorate([
|
|
1014
|
-
property({ type: String })
|
|
1015
|
-
], SortFilterBar.prototype, "sortDirection", void 0);
|
|
1016
|
-
__decorate([
|
|
1017
|
-
property({ type: String })
|
|
1018
|
-
], SortFilterBar.prototype, "selectedSort", void 0);
|
|
1019
|
-
__decorate([
|
|
1020
|
-
property({ type: String })
|
|
1021
|
-
], SortFilterBar.prototype, "selectedTitleFilter", void 0);
|
|
1022
|
-
__decorate([
|
|
1023
|
-
property({ type: String })
|
|
1024
|
-
], SortFilterBar.prototype, "selectedCreatorFilter", void 0);
|
|
1025
|
-
__decorate([
|
|
1026
|
-
property({ type: Boolean })
|
|
1027
|
-
], SortFilterBar.prototype, "showRelevance", void 0);
|
|
1028
|
-
__decorate([
|
|
1029
|
-
property({ type: Boolean })
|
|
1030
|
-
], SortFilterBar.prototype, "showDateFavorited", void 0);
|
|
1031
|
-
__decorate([
|
|
1032
|
-
property({ type: Boolean, reflect: true })
|
|
1033
|
-
], SortFilterBar.prototype, "enableSortOptionsSlot", void 0);
|
|
1034
|
-
__decorate([
|
|
1035
|
-
property({ type: Boolean, reflect: true })
|
|
1036
|
-
], SortFilterBar.prototype, "suppressDisplayModes", void 0);
|
|
1037
|
-
__decorate([
|
|
1038
|
-
property({ type: Object })
|
|
1039
|
-
], SortFilterBar.prototype, "prefixFilterCountMap", void 0);
|
|
1040
|
-
__decorate([
|
|
1041
|
-
property({ type: Object })
|
|
1042
|
-
], SortFilterBar.prototype, "resizeObserver", void 0);
|
|
1043
|
-
__decorate([
|
|
1044
|
-
state()
|
|
1045
|
-
], SortFilterBar.prototype, "lastSelectedViewSort", void 0);
|
|
1046
|
-
__decorate([
|
|
1047
|
-
state()
|
|
1048
|
-
], SortFilterBar.prototype, "lastSelectedDateSort", void 0);
|
|
1049
|
-
__decorate([
|
|
1050
|
-
state()
|
|
1051
|
-
], SortFilterBar.prototype, "alphaSelectorVisible", void 0);
|
|
1052
|
-
__decorate([
|
|
1053
|
-
state()
|
|
1054
|
-
], SortFilterBar.prototype, "dropdownBackdropVisible", void 0);
|
|
1055
|
-
__decorate([
|
|
1056
|
-
state()
|
|
1057
|
-
], SortFilterBar.prototype, "desktopSortContainerWidth", void 0);
|
|
1058
|
-
__decorate([
|
|
1059
|
-
state()
|
|
1060
|
-
], SortFilterBar.prototype, "selectorBarContainerWidth", void 0);
|
|
1061
|
-
__decorate([
|
|
1062
|
-
query('#desktop-sort-container')
|
|
1063
|
-
], SortFilterBar.prototype, "desktopSortContainer", void 0);
|
|
1064
|
-
__decorate([
|
|
1065
|
-
query('#sort-selector-container')
|
|
1066
|
-
], SortFilterBar.prototype, "sortSelectorContainer", void 0);
|
|
1067
|
-
__decorate([
|
|
1068
|
-
query('#views-dropdown')
|
|
1069
|
-
], SortFilterBar.prototype, "viewsDropdown", void 0);
|
|
1070
|
-
__decorate([
|
|
1071
|
-
query('#date-dropdown')
|
|
1072
|
-
], SortFilterBar.prototype, "dateDropdown", void 0);
|
|
1073
|
-
__decorate([
|
|
1074
|
-
query('#mobile-dropdown')
|
|
1075
|
-
], SortFilterBar.prototype, "mobileDropdown", void 0);
|
|
1076
|
-
SortFilterBar = __decorate([
|
|
1077
|
-
customElement('sort-filter-bar')
|
|
1078
|
-
], SortFilterBar);
|
|
1079
|
-
export { SortFilterBar };
|
|
999
|
+
`,
|
|
1000
|
+
];
|
|
1001
|
+
}
|
|
1002
|
+
};
|
|
1003
|
+
__decorate([
|
|
1004
|
+
property({ type: String })
|
|
1005
|
+
], SortFilterBar.prototype, "displayMode", void 0);
|
|
1006
|
+
__decorate([
|
|
1007
|
+
property({ type: String })
|
|
1008
|
+
], SortFilterBar.prototype, "defaultSortDirection", void 0);
|
|
1009
|
+
__decorate([
|
|
1010
|
+
property({ type: String })
|
|
1011
|
+
], SortFilterBar.prototype, "defaultSortField", void 0);
|
|
1012
|
+
__decorate([
|
|
1013
|
+
property({ type: String })
|
|
1014
|
+
], SortFilterBar.prototype, "sortDirection", void 0);
|
|
1015
|
+
__decorate([
|
|
1016
|
+
property({ type: String })
|
|
1017
|
+
], SortFilterBar.prototype, "selectedSort", void 0);
|
|
1018
|
+
__decorate([
|
|
1019
|
+
property({ type: String })
|
|
1020
|
+
], SortFilterBar.prototype, "selectedTitleFilter", void 0);
|
|
1021
|
+
__decorate([
|
|
1022
|
+
property({ type: String })
|
|
1023
|
+
], SortFilterBar.prototype, "selectedCreatorFilter", void 0);
|
|
1024
|
+
__decorate([
|
|
1025
|
+
property({ type: Boolean })
|
|
1026
|
+
], SortFilterBar.prototype, "showRelevance", void 0);
|
|
1027
|
+
__decorate([
|
|
1028
|
+
property({ type: Boolean })
|
|
1029
|
+
], SortFilterBar.prototype, "showDateFavorited", void 0);
|
|
1030
|
+
__decorate([
|
|
1031
|
+
property({ type: Boolean, reflect: true })
|
|
1032
|
+
], SortFilterBar.prototype, "enableSortOptionsSlot", void 0);
|
|
1033
|
+
__decorate([
|
|
1034
|
+
property({ type: Boolean, reflect: true })
|
|
1035
|
+
], SortFilterBar.prototype, "suppressDisplayModes", void 0);
|
|
1036
|
+
__decorate([
|
|
1037
|
+
property({ type: Object })
|
|
1038
|
+
], SortFilterBar.prototype, "prefixFilterCountMap", void 0);
|
|
1039
|
+
__decorate([
|
|
1040
|
+
property({ type: Object })
|
|
1041
|
+
], SortFilterBar.prototype, "resizeObserver", void 0);
|
|
1042
|
+
__decorate([
|
|
1043
|
+
state()
|
|
1044
|
+
], SortFilterBar.prototype, "lastSelectedViewSort", void 0);
|
|
1045
|
+
__decorate([
|
|
1046
|
+
state()
|
|
1047
|
+
], SortFilterBar.prototype, "lastSelectedDateSort", void 0);
|
|
1048
|
+
__decorate([
|
|
1049
|
+
state()
|
|
1050
|
+
], SortFilterBar.prototype, "alphaSelectorVisible", void 0);
|
|
1051
|
+
__decorate([
|
|
1052
|
+
state()
|
|
1053
|
+
], SortFilterBar.prototype, "dropdownBackdropVisible", void 0);
|
|
1054
|
+
__decorate([
|
|
1055
|
+
state()
|
|
1056
|
+
], SortFilterBar.prototype, "desktopSortContainerWidth", void 0);
|
|
1057
|
+
__decorate([
|
|
1058
|
+
state()
|
|
1059
|
+
], SortFilterBar.prototype, "selectorBarContainerWidth", void 0);
|
|
1060
|
+
__decorate([
|
|
1061
|
+
query('#desktop-sort-container')
|
|
1062
|
+
], SortFilterBar.prototype, "desktopSortContainer", void 0);
|
|
1063
|
+
__decorate([
|
|
1064
|
+
query('#sort-selector-container')
|
|
1065
|
+
], SortFilterBar.prototype, "sortSelectorContainer", void 0);
|
|
1066
|
+
__decorate([
|
|
1067
|
+
query('#views-dropdown')
|
|
1068
|
+
], SortFilterBar.prototype, "viewsDropdown", void 0);
|
|
1069
|
+
__decorate([
|
|
1070
|
+
query('#date-dropdown')
|
|
1071
|
+
], SortFilterBar.prototype, "dateDropdown", void 0);
|
|
1072
|
+
__decorate([
|
|
1073
|
+
query('#mobile-dropdown')
|
|
1074
|
+
], SortFilterBar.prototype, "mobileDropdown", void 0);
|
|
1075
|
+
SortFilterBar = __decorate([
|
|
1076
|
+
customElement('sort-filter-bar')
|
|
1077
|
+
], SortFilterBar);
|
|
1078
|
+
export { SortFilterBar };
|
|
1080
1079
|
//# sourceMappingURL=sort-filter-bar.js.map
|