@internetarchive/collection-browser 2.3.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +29 -29
- package/.husky/pre-commit +4 -4
- package/LICENSE +661 -661
- package/README.md +83 -83
- package/dist/index.d.ts +12 -12
- package/dist/index.js +12 -12
- package/dist/src/app-root.d.ts +91 -91
- package/dist/src/app-root.js +487 -487
- 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/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/collection-browser.d.ts +466 -466
- package/dist/src/collection-browser.js +1475 -1475
- package/dist/src/collection-facets/facet-row.d.ts +30 -30
- package/dist/src/collection-facets/facet-row.js +114 -114
- 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/facets-template.d.ts +17 -17
- package/dist/src/collection-facets/facets-template.js +114 -114
- package/dist/src/collection-facets/more-facets-content.d.ts +74 -74
- package/dist/src/collection-facets/more-facets-content.js +360 -360
- package/dist/src/collection-facets/more-facets-pagination.d.ts +36 -36
- package/dist/src/collection-facets/more-facets-pagination.js +196 -196
- 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.d.ts +103 -103
- package/dist/src/collection-facets.js +510 -510
- package/dist/src/data-source/collection-browser-data-source-interface.d.ts +241 -241
- package/dist/src/data-source/collection-browser-data-source-interface.js +1 -1
- package/dist/src/data-source/collection-browser-data-source.d.ts +378 -378
- package/dist/src/data-source/collection-browser-data-source.js +985 -985
- package/dist/src/data-source/collection-browser-query-state.d.ts +43 -43
- 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 +74 -74
- package/dist/src/expanded-date-picker.d.ts +43 -43
- package/dist/src/expanded-date-picker.js +109 -109
- 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-mapping.d.ts +1 -1
- package/dist/src/language-code-handler/language-code-mapping.js +562 -562
- package/dist/src/manage/manage-bar.d.ts +30 -30
- package/dist/src/manage/manage-bar.js +61 -61
- package/dist/src/mediatype/mediatype-config.d.ts +3 -3
- package/dist/src/mediatype/mediatype-config.js +91 -91
- package/dist/src/models.d.ts +209 -209
- package/dist/src/models.js +381 -381
- package/dist/src/restoration-state-handler.d.ts +70 -70
- package/dist/src/restoration-state-handler.js +357 -357
- 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.d.ts +21 -21
- package/dist/src/sort-filter-bar/alpha-bar.js +128 -128
- 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 +222 -222
- package/dist/src/sort-filter-bar/sort-filter-bar.js +696 -696
- package/dist/src/styles/ia-button.d.ts +2 -2
- package/dist/src/styles/ia-button.js +16 -16
- 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 +63 -63
- 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/grid/account-tile.d.ts +18 -18
- package/dist/src/tiles/grid/account-tile.js +72 -72
- 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/item-tile.d.ts +30 -30
- package/dist/src/tiles/grid/item-tile.js +149 -149
- 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/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 +53 -53
- package/dist/src/tiles/hover/hover-pane-controller.d.ts +219 -219
- package/dist/src/tiles/hover/hover-pane-controller.js +354 -352
- package/dist/src/tiles/hover/hover-pane-controller.js.map +1 -1
- package/dist/src/tiles/hover/tile-hover-pane.d.ts +18 -15
- package/dist/src/tiles/hover/tile-hover-pane.js +127 -47
- package/dist/src/tiles/hover/tile-hover-pane.js.map +1 -1
- package/dist/src/tiles/image-block.d.ts +17 -17
- package/dist/src/tiles/image-block.js +74 -74
- 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/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.d.ts +15 -15
- package/dist/src/tiles/list/tile-list-compact.js +114 -114
- package/dist/src/tiles/list/tile-list.d.ts +50 -50
- package/dist/src/tiles/list/tile-list.js +315 -315
- package/dist/src/tiles/mediatype-icon.d.ts +9 -9
- package/dist/src/tiles/mediatype-icon.js +47 -47
- package/dist/src/tiles/overlay/icon-overlay.d.ts +10 -10
- package/dist/src/tiles/overlay/icon-overlay.js +40 -40
- package/dist/src/tiles/overlay/icon-text-overlay.d.ts +9 -9
- package/dist/src/tiles/overlay/icon-text-overlay.js +38 -38
- package/dist/src/tiles/overlay/text-overlay.d.ts +10 -10
- package/dist/src/tiles/overlay/text-overlay.js +42 -42
- package/dist/src/tiles/review-block.d.ts +12 -12
- package/dist/src/tiles/review-block.js +56 -56
- 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/tile-dispatcher.d.ts +64 -64
- package/dist/src/tiles/tile-dispatcher.js +229 -229
- 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/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/format-count.d.ts +7 -7
- package/dist/src/utils/format-count.js +76 -76
- package/dist/src/utils/format-date.d.ts +2 -2
- package/dist/src/utils/format-date.js +25 -25
- 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/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 +15 -15
- package/dist/src/utils/resolve-mediatype.d.ts +8 -8
- package/dist/src/utils/resolve-mediatype.js +23 -23
- 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 +1293 -1293
- package/dist/test/collection-facets/facet-row.test.d.ts +1 -1
- package/dist/test/collection-facets/facet-row.test.js +203 -203
- package/dist/test/collection-facets/facets-template.test.d.ts +1 -1
- package/dist/test/collection-facets/facets-template.test.js +105 -105
- package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -1
- package/dist/test/collection-facets/more-facets-content.test.js +139 -139
- package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -1
- package/dist/test/collection-facets/more-facets-pagination.test.js +117 -117
- package/dist/test/collection-facets/toggle-switch.test.d.ts +1 -1
- package/dist/test/collection-facets/toggle-switch.test.js +73 -73
- package/dist/test/collection-facets.test.d.ts +2 -2
- package/dist/test/collection-facets.test.js +652 -652
- 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/empty-placeholder.test.d.ts +1 -1
- package/dist/test/empty-placeholder.test.js +63 -63
- package/dist/test/expanded-date-picker.test.d.ts +1 -1
- package/dist/test/expanded-date-picker.test.js +95 -95
- package/dist/test/icon-overlay.test.d.ts +1 -1
- package/dist/test/icon-overlay.test.js +24 -24
- package/dist/test/image-block.test.d.ts +1 -1
- package/dist/test/image-block.test.js +48 -48
- package/dist/test/item-image.test.d.ts +1 -1
- package/dist/test/item-image.test.js +85 -85
- package/dist/test/manage/manage-bar.test.d.ts +1 -1
- package/dist/test/manage/manage-bar.test.js +81 -81
- 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 +24 -24
- package/dist/test/mocks/mock-search-responses.js +860 -860
- package/dist/test/mocks/mock-search-service.d.ts +15 -15
- package/dist/test/mocks/mock-search-service.js +53 -53
- package/dist/test/restoration-state-handler.test.d.ts +1 -1
- package/dist/test/restoration-state-handler.test.js +270 -270
- package/dist/test/review-block.test.d.ts +1 -1
- package/dist/test/review-block.test.js +44 -44
- 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.test.d.ts +1 -1
- package/dist/test/sort-filter-bar/alpha-bar.test.js +73 -73
- 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 +426 -426
- package/dist/test/text-overlay.test.d.ts +1 -1
- package/dist/test/text-overlay.test.js +48 -48
- package/dist/test/text-snippet-block.test.d.ts +1 -1
- package/dist/test/text-snippet-block.test.js +57 -57
- package/dist/test/tile-stats.test.d.ts +1 -1
- package/dist/test/tile-stats.test.js +81 -81
- package/dist/test/tiles/grid/account-tile.test.d.ts +1 -1
- package/dist/test/tiles/grid/account-tile.test.js +76 -76
- package/dist/test/tiles/grid/collection-tile.test.d.ts +1 -1
- package/dist/test/tiles/grid/collection-tile.test.js +73 -73
- package/dist/test/tiles/grid/item-tile.test.d.ts +1 -1
- package/dist/test/tiles/grid/item-tile.test.js +312 -312
- package/dist/test/tiles/grid/search-tile.test.d.ts +1 -1
- package/dist/test/tiles/grid/search-tile.test.js +51 -51
- 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/tile-hover-pane.test.d.ts +1 -1
- package/dist/test/tiles/hover/tile-hover-pane.test.js +56 -13
- 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 +143 -143
- package/dist/test/tiles/list/tile-list.test.d.ts +1 -1
- package/dist/test/tiles/list/tile-list.test.js +297 -297
- 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-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-date.test.d.ts +1 -1
- package/dist/test/utils/format-date.test.js +17 -17
- 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/local.archive.org.cert +86 -86
- package/local.archive.org.key +27 -27
- package/package.json +1 -1
- package/renovate.json +6 -6
- package/src/tiles/hover/hover-pane-controller.ts +2 -0
- package/src/tiles/hover/tile-hover-pane.ts +100 -11
- package/src/tiles/image-block.ts +1 -1
- package/test/tiles/hover/tile-hover-pane.test.ts +61 -0
- package/tsconfig.json +21 -21
- package/web-dev-server.config.mjs +30 -30
- package/web-test-runner.config.mjs +41 -41
|
@@ -1,95 +1,95 @@
|
|
|
1
|
-
import { html, nothing } from 'lit';
|
|
2
|
-
import { msg, str } from '@lit/localize';
|
|
3
|
-
import { formatDate } from '../utils/format-date';
|
|
4
|
-
/**
|
|
5
|
-
* A class encapsulating shared logic for converting model values into display values
|
|
6
|
-
* across different types of tiles.
|
|
7
|
-
*/
|
|
8
|
-
export class TileDisplayValueProvider {
|
|
9
|
-
constructor(options = {}) {
|
|
10
|
-
var _a;
|
|
11
|
-
this.model = options.model;
|
|
12
|
-
this.baseNavigationUrl = options.baseNavigationUrl;
|
|
13
|
-
this.collectionPagePath = (_a = options.collectionPagePath) !== null && _a !== void 0 ? _a : '/details/';
|
|
14
|
-
this.sortParam = options.sortParam;
|
|
15
|
-
this.creatorFilter = options.creatorFilter;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Examines the creator(s) for the given tile model, returning
|
|
19
|
-
* the first creator whose name matches the provided filter
|
|
20
|
-
* (or simply the first creator overall if no filter is provided).
|
|
21
|
-
*/
|
|
22
|
-
get firstCreatorMatchingFilter() {
|
|
23
|
-
var _a, _b;
|
|
24
|
-
let matchingCreator;
|
|
25
|
-
// If we're filtering by creator initial and have multiple creators, we want
|
|
26
|
-
// to surface the first creator who matches the filter.
|
|
27
|
-
if (this.creatorFilter && ((_a = this.model) === null || _a === void 0 ? void 0 : _a.creators.length)) {
|
|
28
|
-
const firstLetter = this.creatorFilter; // This is just to satisfy tsc
|
|
29
|
-
matchingCreator = this.model.creators.find(creator =>
|
|
30
|
-
// Decompose combining characters first, so that e.g., filtering on E matches É too.
|
|
31
|
-
// Then remove anything that isn't strictly alphabetic, since our filters currently
|
|
32
|
-
// only handle A-Z. The first such letter (if one exists) is what needs to match.
|
|
33
|
-
creator
|
|
34
|
-
.normalize('NFD')
|
|
35
|
-
.replace(/[^A-Z]+/gi, '')
|
|
36
|
-
.toUpperCase()
|
|
37
|
-
.startsWith(firstLetter));
|
|
38
|
-
}
|
|
39
|
-
return matchingCreator !== null && matchingCreator !== void 0 ? matchingCreator : (_b = this.model) === null || _b === void 0 ? void 0 : _b.creator;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* The label indicating what year an account item was created.
|
|
43
|
-
* E.g., "Archivist since 2015"
|
|
44
|
-
*/
|
|
45
|
-
get accountLabel() {
|
|
46
|
-
var _a;
|
|
47
|
-
return ((_a = this.model) === null || _a === void 0 ? void 0 : _a.dateAdded)
|
|
48
|
-
? msg(str `Archivist since ${this.model.dateAdded.getFullYear()}`)
|
|
49
|
-
: '';
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* The readable label for the current sort if it is a type of date sort,
|
|
53
|
-
* or the empty string otherwise.
|
|
54
|
-
*/
|
|
55
|
-
get dateLabel() {
|
|
56
|
-
var _a;
|
|
57
|
-
switch ((_a = this.sortParam) === null || _a === void 0 ? void 0 : _a.field) {
|
|
58
|
-
case 'publicdate':
|
|
59
|
-
return msg('Archived');
|
|
60
|
-
case 'reviewdate':
|
|
61
|
-
return msg('Reviewed');
|
|
62
|
-
case 'addeddate':
|
|
63
|
-
return msg('Added');
|
|
64
|
-
case 'date':
|
|
65
|
-
return msg('Published');
|
|
66
|
-
default:
|
|
67
|
-
return '';
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Produces a URL pointing at the item page for the given identifier,
|
|
72
|
-
* using the current base URL and the correct path based on whether the
|
|
73
|
-
* item is specified to be a collection (default false).
|
|
74
|
-
*/
|
|
75
|
-
itemPageUrl(identifier, isCollection = false) {
|
|
76
|
-
if (!identifier || this.baseNavigationUrl == null)
|
|
77
|
-
return nothing;
|
|
78
|
-
const basePath = isCollection ? this.collectionPagePath : '/details/';
|
|
79
|
-
return `${this.baseNavigationUrl}${basePath}${identifier}`;
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Produces a template for a link to a single web capture of the given URL and date
|
|
83
|
-
*/
|
|
84
|
-
webArchivesCaptureLink(url, date) {
|
|
85
|
-
// Convert the date into the format used to identify wayback captures (e.g., '20150102124550')
|
|
86
|
-
const captureDateStr = date
|
|
87
|
-
.toISOString()
|
|
88
|
-
.replace(/[TZ:-]/g, '')
|
|
89
|
-
.replace(/\..*/, '');
|
|
90
|
-
const captureHref = `https://web.archive.org/web/${captureDateStr}/${encodeURIComponent(url)}`;
|
|
91
|
-
const captureText = formatDate(date, 'long');
|
|
92
|
-
return html ` <a href=${captureHref}> ${captureText} </a> `;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
1
|
+
import { html, nothing } from 'lit';
|
|
2
|
+
import { msg, str } from '@lit/localize';
|
|
3
|
+
import { formatDate } from '../utils/format-date';
|
|
4
|
+
/**
|
|
5
|
+
* A class encapsulating shared logic for converting model values into display values
|
|
6
|
+
* across different types of tiles.
|
|
7
|
+
*/
|
|
8
|
+
export class TileDisplayValueProvider {
|
|
9
|
+
constructor(options = {}) {
|
|
10
|
+
var _a;
|
|
11
|
+
this.model = options.model;
|
|
12
|
+
this.baseNavigationUrl = options.baseNavigationUrl;
|
|
13
|
+
this.collectionPagePath = (_a = options.collectionPagePath) !== null && _a !== void 0 ? _a : '/details/';
|
|
14
|
+
this.sortParam = options.sortParam;
|
|
15
|
+
this.creatorFilter = options.creatorFilter;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Examines the creator(s) for the given tile model, returning
|
|
19
|
+
* the first creator whose name matches the provided filter
|
|
20
|
+
* (or simply the first creator overall if no filter is provided).
|
|
21
|
+
*/
|
|
22
|
+
get firstCreatorMatchingFilter() {
|
|
23
|
+
var _a, _b;
|
|
24
|
+
let matchingCreator;
|
|
25
|
+
// If we're filtering by creator initial and have multiple creators, we want
|
|
26
|
+
// to surface the first creator who matches the filter.
|
|
27
|
+
if (this.creatorFilter && ((_a = this.model) === null || _a === void 0 ? void 0 : _a.creators.length)) {
|
|
28
|
+
const firstLetter = this.creatorFilter; // This is just to satisfy tsc
|
|
29
|
+
matchingCreator = this.model.creators.find(creator =>
|
|
30
|
+
// Decompose combining characters first, so that e.g., filtering on E matches É too.
|
|
31
|
+
// Then remove anything that isn't strictly alphabetic, since our filters currently
|
|
32
|
+
// only handle A-Z. The first such letter (if one exists) is what needs to match.
|
|
33
|
+
creator
|
|
34
|
+
.normalize('NFD')
|
|
35
|
+
.replace(/[^A-Z]+/gi, '')
|
|
36
|
+
.toUpperCase()
|
|
37
|
+
.startsWith(firstLetter));
|
|
38
|
+
}
|
|
39
|
+
return matchingCreator !== null && matchingCreator !== void 0 ? matchingCreator : (_b = this.model) === null || _b === void 0 ? void 0 : _b.creator;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The label indicating what year an account item was created.
|
|
43
|
+
* E.g., "Archivist since 2015"
|
|
44
|
+
*/
|
|
45
|
+
get accountLabel() {
|
|
46
|
+
var _a;
|
|
47
|
+
return ((_a = this.model) === null || _a === void 0 ? void 0 : _a.dateAdded)
|
|
48
|
+
? msg(str `Archivist since ${this.model.dateAdded.getFullYear()}`)
|
|
49
|
+
: '';
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The readable label for the current sort if it is a type of date sort,
|
|
53
|
+
* or the empty string otherwise.
|
|
54
|
+
*/
|
|
55
|
+
get dateLabel() {
|
|
56
|
+
var _a;
|
|
57
|
+
switch ((_a = this.sortParam) === null || _a === void 0 ? void 0 : _a.field) {
|
|
58
|
+
case 'publicdate':
|
|
59
|
+
return msg('Archived');
|
|
60
|
+
case 'reviewdate':
|
|
61
|
+
return msg('Reviewed');
|
|
62
|
+
case 'addeddate':
|
|
63
|
+
return msg('Added');
|
|
64
|
+
case 'date':
|
|
65
|
+
return msg('Published');
|
|
66
|
+
default:
|
|
67
|
+
return '';
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Produces a URL pointing at the item page for the given identifier,
|
|
72
|
+
* using the current base URL and the correct path based on whether the
|
|
73
|
+
* item is specified to be a collection (default false).
|
|
74
|
+
*/
|
|
75
|
+
itemPageUrl(identifier, isCollection = false) {
|
|
76
|
+
if (!identifier || this.baseNavigationUrl == null)
|
|
77
|
+
return nothing;
|
|
78
|
+
const basePath = isCollection ? this.collectionPagePath : '/details/';
|
|
79
|
+
return `${this.baseNavigationUrl}${basePath}${identifier}`;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Produces a template for a link to a single web capture of the given URL and date
|
|
83
|
+
*/
|
|
84
|
+
webArchivesCaptureLink(url, date) {
|
|
85
|
+
// Convert the date into the format used to identify wayback captures (e.g., '20150102124550')
|
|
86
|
+
const captureDateStr = date
|
|
87
|
+
.toISOString()
|
|
88
|
+
.replace(/[TZ:-]/g, '')
|
|
89
|
+
.replace(/\..*/, '');
|
|
90
|
+
const captureHref = `https://web.archive.org/web/${captureDateStr}/${encodeURIComponent(url)}`;
|
|
91
|
+
const captureText = formatDate(date, 'long');
|
|
92
|
+
return html ` <a href=${captureHref}> ${captureText} </a> `;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
95
|
//# sourceMappingURL=tile-display-value-provider.js.map
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Analytics categories and events. Used when building actions in
|
|
3
|
-
*/
|
|
4
|
-
export declare enum analyticsCategories {
|
|
5
|
-
default = "collection-browser"
|
|
6
|
-
}
|
|
7
|
-
export declare enum analyticsActions {
|
|
8
|
-
sortBy = "sortBy",
|
|
9
|
-
filterByCreator = "filterByCreator",
|
|
10
|
-
filterByTitle = "filterByTitle",
|
|
11
|
-
displayMode = "displayMode",
|
|
12
|
-
loadDesktopView = "loadDesktopView",
|
|
13
|
-
loadMobileView = "loadMobileView",
|
|
14
|
-
facetSelected = "facetSelected",
|
|
15
|
-
facetDeselected = "facetDeselected",
|
|
16
|
-
facetNegativeSelected = "facetNegativeSelected",
|
|
17
|
-
facetNegativeDeselected = "facetNegativeDeselected",
|
|
18
|
-
mobileFacetsToggled = "mobileFacetsToggled",
|
|
19
|
-
partOfCollectionClicked = "partOfCollectionClicked",
|
|
20
|
-
histogramChanged = "histogramChanged",
|
|
21
|
-
histogramChangedFromModal = "histogramChangedFromModal",
|
|
22
|
-
histogramExpanded = "histogramExpanded",
|
|
23
|
-
resultSelected = "resultSelected",
|
|
24
|
-
moreFacetsPageChange = "moreFacetsPageChange",
|
|
25
|
-
showMoreFacetsModal = "showMoreFacetsModal",
|
|
26
|
-
closeMoreFacetsModal = "closeMoreFacetsModal",
|
|
27
|
-
applyMoreFacetsModal = "applyMoreFacetsModal"
|
|
28
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Analytics categories and events. Used when building actions in
|
|
3
|
+
*/
|
|
4
|
+
export declare enum analyticsCategories {
|
|
5
|
+
default = "collection-browser"
|
|
6
|
+
}
|
|
7
|
+
export declare enum analyticsActions {
|
|
8
|
+
sortBy = "sortBy",
|
|
9
|
+
filterByCreator = "filterByCreator",
|
|
10
|
+
filterByTitle = "filterByTitle",
|
|
11
|
+
displayMode = "displayMode",
|
|
12
|
+
loadDesktopView = "loadDesktopView",
|
|
13
|
+
loadMobileView = "loadMobileView",
|
|
14
|
+
facetSelected = "facetSelected",
|
|
15
|
+
facetDeselected = "facetDeselected",
|
|
16
|
+
facetNegativeSelected = "facetNegativeSelected",
|
|
17
|
+
facetNegativeDeselected = "facetNegativeDeselected",
|
|
18
|
+
mobileFacetsToggled = "mobileFacetsToggled",
|
|
19
|
+
partOfCollectionClicked = "partOfCollectionClicked",
|
|
20
|
+
histogramChanged = "histogramChanged",
|
|
21
|
+
histogramChangedFromModal = "histogramChangedFromModal",
|
|
22
|
+
histogramExpanded = "histogramExpanded",
|
|
23
|
+
resultSelected = "resultSelected",
|
|
24
|
+
moreFacetsPageChange = "moreFacetsPageChange",
|
|
25
|
+
showMoreFacetsModal = "showMoreFacetsModal",
|
|
26
|
+
closeMoreFacetsModal = "closeMoreFacetsModal",
|
|
27
|
+
applyMoreFacetsModal = "applyMoreFacetsModal"
|
|
28
|
+
}
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Analytics categories and events. Used when building actions in
|
|
3
|
-
*/
|
|
4
|
-
export var analyticsCategories;
|
|
5
|
-
(function (analyticsCategories) {
|
|
6
|
-
analyticsCategories["default"] = "collection-browser";
|
|
7
|
-
})(analyticsCategories || (analyticsCategories = {}));
|
|
8
|
-
export var analyticsActions;
|
|
9
|
-
(function (analyticsActions) {
|
|
10
|
-
analyticsActions["sortBy"] = "sortBy";
|
|
11
|
-
analyticsActions["filterByCreator"] = "filterByCreator";
|
|
12
|
-
analyticsActions["filterByTitle"] = "filterByTitle";
|
|
13
|
-
analyticsActions["displayMode"] = "displayMode";
|
|
14
|
-
analyticsActions["loadDesktopView"] = "loadDesktopView";
|
|
15
|
-
analyticsActions["loadMobileView"] = "loadMobileView";
|
|
16
|
-
analyticsActions["facetSelected"] = "facetSelected";
|
|
17
|
-
analyticsActions["facetDeselected"] = "facetDeselected";
|
|
18
|
-
analyticsActions["facetNegativeSelected"] = "facetNegativeSelected";
|
|
19
|
-
analyticsActions["facetNegativeDeselected"] = "facetNegativeDeselected";
|
|
20
|
-
analyticsActions["mobileFacetsToggled"] = "mobileFacetsToggled";
|
|
21
|
-
analyticsActions["partOfCollectionClicked"] = "partOfCollectionClicked";
|
|
22
|
-
analyticsActions["histogramChanged"] = "histogramChanged";
|
|
23
|
-
analyticsActions["histogramChangedFromModal"] = "histogramChangedFromModal";
|
|
24
|
-
analyticsActions["histogramExpanded"] = "histogramExpanded";
|
|
25
|
-
analyticsActions["resultSelected"] = "resultSelected";
|
|
26
|
-
analyticsActions["moreFacetsPageChange"] = "moreFacetsPageChange";
|
|
27
|
-
analyticsActions["showMoreFacetsModal"] = "showMoreFacetsModal";
|
|
28
|
-
analyticsActions["closeMoreFacetsModal"] = "closeMoreFacetsModal";
|
|
29
|
-
analyticsActions["applyMoreFacetsModal"] = "applyMoreFacetsModal";
|
|
30
|
-
})(analyticsActions || (analyticsActions = {}));
|
|
1
|
+
/**
|
|
2
|
+
* Analytics categories and events. Used when building actions in
|
|
3
|
+
*/
|
|
4
|
+
export var analyticsCategories;
|
|
5
|
+
(function (analyticsCategories) {
|
|
6
|
+
analyticsCategories["default"] = "collection-browser";
|
|
7
|
+
})(analyticsCategories || (analyticsCategories = {}));
|
|
8
|
+
export var analyticsActions;
|
|
9
|
+
(function (analyticsActions) {
|
|
10
|
+
analyticsActions["sortBy"] = "sortBy";
|
|
11
|
+
analyticsActions["filterByCreator"] = "filterByCreator";
|
|
12
|
+
analyticsActions["filterByTitle"] = "filterByTitle";
|
|
13
|
+
analyticsActions["displayMode"] = "displayMode";
|
|
14
|
+
analyticsActions["loadDesktopView"] = "loadDesktopView";
|
|
15
|
+
analyticsActions["loadMobileView"] = "loadMobileView";
|
|
16
|
+
analyticsActions["facetSelected"] = "facetSelected";
|
|
17
|
+
analyticsActions["facetDeselected"] = "facetDeselected";
|
|
18
|
+
analyticsActions["facetNegativeSelected"] = "facetNegativeSelected";
|
|
19
|
+
analyticsActions["facetNegativeDeselected"] = "facetNegativeDeselected";
|
|
20
|
+
analyticsActions["mobileFacetsToggled"] = "mobileFacetsToggled";
|
|
21
|
+
analyticsActions["partOfCollectionClicked"] = "partOfCollectionClicked";
|
|
22
|
+
analyticsActions["histogramChanged"] = "histogramChanged";
|
|
23
|
+
analyticsActions["histogramChangedFromModal"] = "histogramChangedFromModal";
|
|
24
|
+
analyticsActions["histogramExpanded"] = "histogramExpanded";
|
|
25
|
+
analyticsActions["resultSelected"] = "resultSelected";
|
|
26
|
+
analyticsActions["moreFacetsPageChange"] = "moreFacetsPageChange";
|
|
27
|
+
analyticsActions["showMoreFacetsModal"] = "showMoreFacetsModal";
|
|
28
|
+
analyticsActions["closeMoreFacetsModal"] = "closeMoreFacetsModal";
|
|
29
|
+
analyticsActions["applyMoreFacetsModal"] = "applyMoreFacetsModal";
|
|
30
|
+
})(analyticsActions || (analyticsActions = {}));
|
|
31
31
|
//# sourceMappingURL=analytics-events.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Determines whether two arrays have the same (shallow) contents in the same order
|
|
3
|
-
*/
|
|
4
|
-
export declare function arrayEquals(arr1: unknown[], arr2: unknown[]): boolean;
|
|
1
|
+
/**
|
|
2
|
+
* Determines whether two arrays have the same (shallow) contents in the same order
|
|
3
|
+
*/
|
|
4
|
+
export declare function arrayEquals(arr1: unknown[], arr2: unknown[]): boolean;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Determines whether two arrays have the same (shallow) contents in the same order
|
|
3
|
-
*/
|
|
4
|
-
export function arrayEquals(arr1, arr2) {
|
|
5
|
-
if (arr1 === arr2)
|
|
6
|
-
return true;
|
|
7
|
-
if (arr1.length !== arr2.length)
|
|
8
|
-
return false;
|
|
9
|
-
return arr1.every((val, i) => val === arr2[i]);
|
|
10
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Determines whether two arrays have the same (shallow) contents in the same order
|
|
3
|
+
*/
|
|
4
|
+
export function arrayEquals(arr1, arr2) {
|
|
5
|
+
if (arr1 === arr2)
|
|
6
|
+
return true;
|
|
7
|
+
if (arr1.length !== arr2.length)
|
|
8
|
+
return false;
|
|
9
|
+
return arr1.every((val, i) => val === arr2[i]);
|
|
10
|
+
}
|
|
11
11
|
//# sourceMappingURL=array-equals.js.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Returns the input string, but removing one set of quotes from all instances of
|
|
3
|
-
* ""clauses wrapped in two sets of quotes"". This assumes the quotes are already
|
|
4
|
-
* URL-encoded.
|
|
5
|
-
*
|
|
6
|
-
* This should be a temporary measure to address the fact that the __href__ field
|
|
7
|
-
* sometimes acquires extra quotation marks during query rewriting. Once there is a
|
|
8
|
-
* full Lucene parser in place that handles quoted queries correctly, this can likely
|
|
9
|
-
* be removed.
|
|
10
|
-
*/
|
|
11
|
-
export declare function collapseRepeatedQuotes(str?: string): string | undefined;
|
|
1
|
+
/**
|
|
2
|
+
* Returns the input string, but removing one set of quotes from all instances of
|
|
3
|
+
* ""clauses wrapped in two sets of quotes"". This assumes the quotes are already
|
|
4
|
+
* URL-encoded.
|
|
5
|
+
*
|
|
6
|
+
* This should be a temporary measure to address the fact that the __href__ field
|
|
7
|
+
* sometimes acquires extra quotation marks during query rewriting. Once there is a
|
|
8
|
+
* full Lucene parser in place that handles quoted queries correctly, this can likely
|
|
9
|
+
* be removed.
|
|
10
|
+
*/
|
|
11
|
+
export declare function collapseRepeatedQuotes(str?: string): string | undefined;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Returns the input string, but removing one set of quotes from all instances of
|
|
3
|
-
* ""clauses wrapped in two sets of quotes"". This assumes the quotes are already
|
|
4
|
-
* URL-encoded.
|
|
5
|
-
*
|
|
6
|
-
* This should be a temporary measure to address the fact that the __href__ field
|
|
7
|
-
* sometimes acquires extra quotation marks during query rewriting. Once there is a
|
|
8
|
-
* full Lucene parser in place that handles quoted queries correctly, this can likely
|
|
9
|
-
* be removed.
|
|
10
|
-
*/
|
|
11
|
-
export function collapseRepeatedQuotes(str) {
|
|
12
|
-
return str === null || str === void 0 ? void 0 : str.replace(/%22%22(?!%22%22)(.+?)%22%22/g, '%22$1%22');
|
|
13
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Returns the input string, but removing one set of quotes from all instances of
|
|
3
|
+
* ""clauses wrapped in two sets of quotes"". This assumes the quotes are already
|
|
4
|
+
* URL-encoded.
|
|
5
|
+
*
|
|
6
|
+
* This should be a temporary measure to address the fact that the __href__ field
|
|
7
|
+
* sometimes acquires extra quotation marks during query rewriting. Once there is a
|
|
8
|
+
* full Lucene parser in place that handles quoted queries correctly, this can likely
|
|
9
|
+
* be removed.
|
|
10
|
+
*/
|
|
11
|
+
export function collapseRepeatedQuotes(str) {
|
|
12
|
+
return str === null || str === void 0 ? void 0 : str.replace(/%22%22(?!%22%22)(.+?)%22%22/g, '%22$1%22');
|
|
13
|
+
}
|
|
14
14
|
//# sourceMappingURL=collapse-repeated-quotes.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export declare type NumberFormat = 'short' | 'long';
|
|
2
|
-
export declare type LabelFormat = 'short' | 'long';
|
|
3
|
-
/**
|
|
4
|
-
* Format a "count" number into short "icon" or longer text string.
|
|
5
|
-
* For positive numbers only.
|
|
6
|
-
*/
|
|
7
|
-
export declare function formatCount(count: number | undefined, numberFormat?: NumberFormat, labelFormat?: LabelFormat, locale?: string): string;
|
|
1
|
+
export declare type NumberFormat = 'short' | 'long';
|
|
2
|
+
export declare type LabelFormat = 'short' | 'long';
|
|
3
|
+
/**
|
|
4
|
+
* Format a "count" number into short "icon" or longer text string.
|
|
5
|
+
* For positive numbers only.
|
|
6
|
+
*/
|
|
7
|
+
export declare function formatCount(count: number | undefined, numberFormat?: NumberFormat, labelFormat?: LabelFormat, locale?: string): string;
|
|
@@ -1,77 +1,77 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Replaces Petabox www/common/Util::number_format()
|
|
3
|
-
* For positive numbers only.
|
|
4
|
-
*/
|
|
5
|
-
import { msg, str } from '@lit/localize';
|
|
6
|
-
/**
|
|
7
|
-
* Return the magnitude of a number.
|
|
8
|
-
*/
|
|
9
|
-
function magnitude(number, numberFormat) {
|
|
10
|
-
let divisor = 1;
|
|
11
|
-
if (number >= 1000000000) {
|
|
12
|
-
divisor = 1000000000;
|
|
13
|
-
}
|
|
14
|
-
else if (number >= 1000000) {
|
|
15
|
-
divisor = 1000000;
|
|
16
|
-
}
|
|
17
|
-
else if (number >= 1000 && numberFormat === 'short') {
|
|
18
|
-
divisor = 1000;
|
|
19
|
-
}
|
|
20
|
-
return divisor;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Round a number given passed magnitude.
|
|
24
|
-
* Significant digits of value less than 10 get a decimal.
|
|
25
|
-
*/
|
|
26
|
-
// eslint-disable-next-line default-param-last
|
|
27
|
-
function round(number = 0, divisor) {
|
|
28
|
-
const result = number / divisor;
|
|
29
|
-
const roundToOne = result < 10;
|
|
30
|
-
let rounded = 0;
|
|
31
|
-
if (roundToOne) {
|
|
32
|
-
rounded = Math.round((result + Number.EPSILON) * 10) / 10;
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
rounded = Math.round(result);
|
|
36
|
-
}
|
|
37
|
-
return rounded;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Return a label for a number and format.
|
|
41
|
-
*/
|
|
42
|
-
function labelize(rounded, divisor, format, locale) {
|
|
43
|
-
switch (divisor) {
|
|
44
|
-
case 1000000000:
|
|
45
|
-
if (format === 'short') {
|
|
46
|
-
return msg(str `${rounded}B`);
|
|
47
|
-
}
|
|
48
|
-
return msg(str `${rounded} billion`);
|
|
49
|
-
case 1000000:
|
|
50
|
-
if (format === 'short') {
|
|
51
|
-
return msg(str `${rounded}M`);
|
|
52
|
-
}
|
|
53
|
-
return msg(str `${rounded} million`);
|
|
54
|
-
case 1000:
|
|
55
|
-
if (format === 'short') {
|
|
56
|
-
return msg(str `${rounded}K`);
|
|
57
|
-
}
|
|
58
|
-
return msg(str `${rounded} thousand`);
|
|
59
|
-
default:
|
|
60
|
-
return new Intl.NumberFormat(locale).format(rounded);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Format a "count" number into short "icon" or longer text string.
|
|
65
|
-
* For positive numbers only.
|
|
66
|
-
*/
|
|
67
|
-
export function formatCount(count, numberFormat = 'long', labelFormat = 'short', locale = 'en-US') {
|
|
68
|
-
// Return blank if undefined
|
|
69
|
-
const number = count !== null && count !== void 0 ? count : -1;
|
|
70
|
-
if (number < 0) {
|
|
71
|
-
return '';
|
|
72
|
-
}
|
|
73
|
-
const divisor = magnitude(number, numberFormat);
|
|
74
|
-
const rounded = round(number, divisor);
|
|
75
|
-
return labelize(rounded, divisor, labelFormat, locale);
|
|
76
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
* Replaces Petabox www/common/Util::number_format()
|
|
3
|
+
* For positive numbers only.
|
|
4
|
+
*/
|
|
5
|
+
import { msg, str } from '@lit/localize';
|
|
6
|
+
/**
|
|
7
|
+
* Return the magnitude of a number.
|
|
8
|
+
*/
|
|
9
|
+
function magnitude(number, numberFormat) {
|
|
10
|
+
let divisor = 1;
|
|
11
|
+
if (number >= 1000000000) {
|
|
12
|
+
divisor = 1000000000;
|
|
13
|
+
}
|
|
14
|
+
else if (number >= 1000000) {
|
|
15
|
+
divisor = 1000000;
|
|
16
|
+
}
|
|
17
|
+
else if (number >= 1000 && numberFormat === 'short') {
|
|
18
|
+
divisor = 1000;
|
|
19
|
+
}
|
|
20
|
+
return divisor;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Round a number given passed magnitude.
|
|
24
|
+
* Significant digits of value less than 10 get a decimal.
|
|
25
|
+
*/
|
|
26
|
+
// eslint-disable-next-line default-param-last
|
|
27
|
+
function round(number = 0, divisor) {
|
|
28
|
+
const result = number / divisor;
|
|
29
|
+
const roundToOne = result < 10;
|
|
30
|
+
let rounded = 0;
|
|
31
|
+
if (roundToOne) {
|
|
32
|
+
rounded = Math.round((result + Number.EPSILON) * 10) / 10;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
rounded = Math.round(result);
|
|
36
|
+
}
|
|
37
|
+
return rounded;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Return a label for a number and format.
|
|
41
|
+
*/
|
|
42
|
+
function labelize(rounded, divisor, format, locale) {
|
|
43
|
+
switch (divisor) {
|
|
44
|
+
case 1000000000:
|
|
45
|
+
if (format === 'short') {
|
|
46
|
+
return msg(str `${rounded}B`);
|
|
47
|
+
}
|
|
48
|
+
return msg(str `${rounded} billion`);
|
|
49
|
+
case 1000000:
|
|
50
|
+
if (format === 'short') {
|
|
51
|
+
return msg(str `${rounded}M`);
|
|
52
|
+
}
|
|
53
|
+
return msg(str `${rounded} million`);
|
|
54
|
+
case 1000:
|
|
55
|
+
if (format === 'short') {
|
|
56
|
+
return msg(str `${rounded}K`);
|
|
57
|
+
}
|
|
58
|
+
return msg(str `${rounded} thousand`);
|
|
59
|
+
default:
|
|
60
|
+
return new Intl.NumberFormat(locale).format(rounded);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Format a "count" number into short "icon" or longer text string.
|
|
65
|
+
* For positive numbers only.
|
|
66
|
+
*/
|
|
67
|
+
export function formatCount(count, numberFormat = 'long', labelFormat = 'short', locale = 'en-US') {
|
|
68
|
+
// Return blank if undefined
|
|
69
|
+
const number = count !== null && count !== void 0 ? count : -1;
|
|
70
|
+
if (number < 0) {
|
|
71
|
+
return '';
|
|
72
|
+
}
|
|
73
|
+
const divisor = magnitude(number, numberFormat);
|
|
74
|
+
const rounded = round(number, divisor);
|
|
75
|
+
return labelize(rounded, divisor, labelFormat, locale);
|
|
76
|
+
}
|
|
77
77
|
//# sourceMappingURL=format-count.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare type DateFormat = 'year-only' | 'short' | 'long';
|
|
2
|
-
export declare function formatDate(date: Date | undefined, format?: DateFormat, locale?: string): string;
|
|
1
|
+
export declare type DateFormat = 'year-only' | 'short' | 'long';
|
|
2
|
+
export declare function formatDate(date: Date | undefined, format?: DateFormat, locale?: string): string;
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
export function formatDate(date, format = 'short', locale = 'en-US') {
|
|
2
|
-
// Return blank if undefined
|
|
3
|
-
if (!date)
|
|
4
|
-
return '';
|
|
5
|
-
// the date is already in UTC timezone so we should not add timeZone here again.
|
|
6
|
-
const options = {};
|
|
7
|
-
switch (format) {
|
|
8
|
-
case 'year-only':
|
|
9
|
-
options.year = 'numeric';
|
|
10
|
-
break;
|
|
11
|
-
case 'short':
|
|
12
|
-
options.month = 'short';
|
|
13
|
-
options.year = 'numeric';
|
|
14
|
-
break;
|
|
15
|
-
case 'long':
|
|
16
|
-
options.year = 'numeric';
|
|
17
|
-
options.month = 'short';
|
|
18
|
-
options.day = '2-digit';
|
|
19
|
-
break;
|
|
20
|
-
default:
|
|
21
|
-
break;
|
|
22
|
-
}
|
|
23
|
-
const dateFormatter = new Intl.DateTimeFormat(locale, options);
|
|
24
|
-
return dateFormatter.format(date);
|
|
25
|
-
}
|
|
1
|
+
export function formatDate(date, format = 'short', locale = 'en-US') {
|
|
2
|
+
// Return blank if undefined
|
|
3
|
+
if (!date)
|
|
4
|
+
return '';
|
|
5
|
+
// the date is already in UTC timezone so we should not add timeZone here again.
|
|
6
|
+
const options = {};
|
|
7
|
+
switch (format) {
|
|
8
|
+
case 'year-only':
|
|
9
|
+
options.year = 'numeric';
|
|
10
|
+
break;
|
|
11
|
+
case 'short':
|
|
12
|
+
options.month = 'short';
|
|
13
|
+
options.year = 'numeric';
|
|
14
|
+
break;
|
|
15
|
+
case 'long':
|
|
16
|
+
options.year = 'numeric';
|
|
17
|
+
options.month = 'short';
|
|
18
|
+
options.day = '2-digit';
|
|
19
|
+
break;
|
|
20
|
+
default:
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
const dateFormatter = new Intl.DateTimeFormat(locale, options);
|
|
24
|
+
return dateFormatter.format(date);
|
|
25
|
+
}
|
|
26
26
|
//# sourceMappingURL=format-date.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { nothing } from 'lit';
|
|
2
|
-
export declare function formatUnitSize(size: number | undefined, nDecimals: number, separator?: string): string | typeof nothing;
|
|
1
|
+
import { nothing } from 'lit';
|
|
2
|
+
export declare function formatUnitSize(size: number | undefined, nDecimals: number, separator?: string): string | typeof nothing;
|