@internetarchive/collection-browser 0.3.7 → 0.3.8
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 +26 -26
- package/.github/workflows/gh-pages-main.yml +39 -39
- package/.github/workflows/npm-publish.yml +39 -39
- package/.github/workflows/pr-preview.yml +38 -38
- package/.husky/pre-commit +4 -4
- package/LICENSE +661 -661
- package/README.md +83 -83
- package/dist/index.d.ts +9 -9
- package/dist/index.js +9 -9
- package/dist/src/app-root.d.ts +48 -47
- package/dist/src/app-root.js +271 -250
- 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/empty-query.d.ts +2 -2
- package/dist/src/assets/img/icons/empty-query.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/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/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 +278 -246
- package/dist/src/collection-browser.js +1105 -1031
- package/dist/src/collection-browser.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/facets-template.d.ts +16 -16
- package/dist/src/collection-facets/facets-template.js +125 -125
- package/dist/src/collection-facets/more-facets-content.d.ts +76 -76
- package/dist/src/collection-facets/more-facets-content.js +353 -353
- package/dist/src/collection-facets/more-facets-pagination.d.ts +36 -36
- package/dist/src/collection-facets/more-facets-pagination.js +192 -192
- package/dist/src/collection-facets.d.ts +77 -77
- package/dist/src/collection-facets.js +388 -389
- package/dist/src/collection-facets.js.map +1 -1
- package/dist/src/empty-placeholder.d.ts +11 -11
- package/dist/src/empty-placeholder.js +42 -42
- 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/mediatype/mediatype-config.d.ts +3 -3
- package/dist/src/mediatype/mediatype-config.js +85 -85
- package/dist/src/models.d.ts +103 -103
- package/dist/src/models.js +117 -117
- package/dist/src/restoration-state-handler.d.ts +46 -46
- package/dist/src/restoration-state-handler.js +230 -230
- package/dist/src/sort-filter-bar/alpha-bar.d.ts +9 -9
- package/dist/src/sort-filter-bar/alpha-bar.js +41 -41
- 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-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 +107 -107
- package/dist/src/sort-filter-bar/sort-filter-bar.js +423 -423
- package/dist/src/styles/item-image-styles.d.ts +8 -8
- package/dist/src/styles/item-image-styles.js +9 -9
- 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 +8 -8
- package/dist/src/tiles/grid/account-tile.js +20 -20
- package/dist/src/tiles/grid/collection-tile.d.ts +7 -7
- package/dist/src/tiles/grid/collection-tile.js +23 -23
- package/dist/src/tiles/grid/item-tile.d.ts +24 -24
- package/dist/src/tiles/grid/item-tile.js +87 -87
- package/dist/src/tiles/grid/tile-stats.d.ts +10 -10
- package/dist/src/tiles/grid/tile-stats.js +40 -40
- package/dist/src/tiles/image-block.d.ts +17 -17
- package/dist/src/tiles/image-block.js +69 -69
- package/dist/src/tiles/item-image.d.ts +31 -31
- package/dist/src/tiles/item-image.js +103 -103
- package/dist/src/tiles/list/account-label.d.ts +1 -1
- package/dist/src/tiles/list/account-label.js +6 -6
- package/dist/src/tiles/list/date-label.d.ts +1 -1
- package/dist/src/tiles/list/date-label.js +12 -12
- package/dist/src/tiles/list/tile-list-compact-header.d.ts +12 -12
- package/dist/src/tiles/list/tile-list-compact-header.js +41 -41
- package/dist/src/tiles/list/tile-list-compact.d.ts +21 -21
- package/dist/src/tiles/list/tile-list-compact.js +93 -93
- package/dist/src/tiles/list/tile-list.d.ts +50 -50
- package/dist/src/tiles/list/tile-list.js +275 -272
- 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/overlay/icon-overlay.d.ts +7 -7
- package/dist/src/tiles/overlay/icon-overlay.js +30 -30
- package/dist/src/tiles/overlay/text-overlay.d.ts +8 -8
- package/dist/src/tiles/overlay/text-overlay.js +31 -31
- package/dist/src/tiles/text-snippet-block.d.ts +29 -29
- package/dist/src/tiles/text-snippet-block.js +81 -81
- package/dist/src/tiles/tile-dispatcher.d.ts +36 -36
- package/dist/src/tiles/tile-dispatcher.js +128 -128
- package/dist/src/utils/analytics-events.d.ts +22 -22
- package/dist/src/utils/analytics-events.js +24 -24
- 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 +23 -23
- package/dist/test/collection-browser.test.d.ts +1 -1
- package/dist/test/collection-browser.test.js +583 -444
- package/dist/test/collection-browser.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 +62 -62
- package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -1
- package/dist/test/collection-facets/more-facets-content.test.js +114 -114
- 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.test.d.ts +2 -2
- package/dist/test/collection-facets.test.js +544 -498
- package/dist/test/collection-facets.test.js.map +1 -1
- package/dist/test/empty-placeholder.test.d.ts +1 -1
- package/dist/test/empty-placeholder.test.js +33 -33
- 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 +56 -56
- 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-collection-name-cache.d.ts +7 -7
- package/dist/test/mocks/mock-collection-name-cache.js +13 -13
- package/dist/test/mocks/mock-search-responses.d.ts +10 -8
- package/dist/test/mocks/mock-search-responses.js +271 -198
- package/dist/test/mocks/mock-search-responses.js.map +1 -1
- package/dist/test/mocks/mock-search-service.d.ts +13 -13
- package/dist/test/mocks/mock-search-service.js +36 -32
- 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 +126 -126
- 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 +113 -113
- package/dist/test/text-overlay.test.d.ts +1 -1
- package/dist/test/text-overlay.test.js +41 -41
- 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 +33 -33
- package/dist/test/tiles/grid/item-tile.test.d.ts +1 -1
- package/dist/test/tiles/grid/item-tile.test.js +107 -107
- package/dist/test/tiles/list/tile-list-compact.test.d.ts +1 -1
- package/dist/test/tiles/list/tile-list-compact.test.js +92 -92
- package/dist/test/tiles/list/tile-list.test.d.ts +1 -1
- package/dist/test/tiles/list/tile-list.test.js +96 -67
- package/dist/test/tiles/list/tile-list.test.js.map +1 -1
- 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/index.html +24 -24
- package/local.archive.org.cert +86 -86
- package/local.archive.org.key +27 -27
- package/package.json +3 -3
- package/renovate.json +6 -6
- package/src/app-root.ts +32 -9
- package/src/collection-browser.ts +130 -35
- package/src/collection-facets.ts +2 -3
- package/src/tiles/list/tile-list.ts +6 -2
- package/test/collection-browser.test.ts +207 -0
- package/test/collection-facets.test.ts +67 -0
- package/test/mocks/mock-search-responses.ts +82 -0
- package/test/mocks/mock-search-service.ts +6 -0
- package/test/tiles/list/tile-list.test.ts +40 -0
- package/tsconfig.json +21 -21
- package/web-dev-server.config.mjs +30 -30
- package/web-test-runner.config.mjs +41 -41
package/local.archive.org.cert
CHANGED
|
@@ -1,86 +1,86 @@
|
|
|
1
|
-
Certificate:
|
|
2
|
-
Data:
|
|
3
|
-
Version: 3 (0x2)
|
|
4
|
-
Serial Number: 1 (0x1)
|
|
5
|
-
Signature Algorithm: sha256WithRSAEncryption
|
|
6
|
-
Issuer: CN=devcert
|
|
7
|
-
Validity
|
|
8
|
-
Not Before: Apr 27 16:27:46 2022 GMT
|
|
9
|
-
Not After : Jul 30 16:27:46 2024 GMT
|
|
10
|
-
Subject: CN=local.archive.org
|
|
11
|
-
Subject Public Key Info:
|
|
12
|
-
Public Key Algorithm: rsaEncryption
|
|
13
|
-
Public-Key: (2048 bit)
|
|
14
|
-
Modulus:
|
|
15
|
-
00:a9:54:ca:34:ff:8b:32:02:39:97:61:bd:f5:12:
|
|
16
|
-
5c:4a:d0:87:2e:d6:42:63:72:ea:b4:90:95:cc:4a:
|
|
17
|
-
ef:5a:66:09:9f:1d:08:0d:b2:f4:2e:b3:55:59:9c:
|
|
18
|
-
0f:77:37:1e:d7:a3:5c:b7:3d:81:84:fc:55:af:20:
|
|
19
|
-
e7:3c:bd:9e:2b:2b:9e:d1:95:9d:14:90:70:7c:99:
|
|
20
|
-
78:f1:dd:42:2b:fd:87:b9:09:f0:f6:50:c7:90:41:
|
|
21
|
-
de:e2:ee:dd:a0:4a:4d:de:20:6a:e8:1b:81:7f:d9:
|
|
22
|
-
17:0d:f5:f2:a1:dc:89:d8:e9:89:9c:ff:40:b7:0e:
|
|
23
|
-
bb:16:db:d1:e0:67:5f:24:de:3b:b8:18:b8:a6:dd:
|
|
24
|
-
d5:26:8a:2a:a4:f2:03:b1:a8:15:23:31:c9:65:de:
|
|
25
|
-
9b:5a:b0:f0:4f:ef:77:f1:8b:7b:91:95:a0:61:be:
|
|
26
|
-
1f:64:29:c6:2e:2c:03:1b:f0:91:96:b6:ab:fb:11:
|
|
27
|
-
b7:1c:41:bc:43:6e:1b:6f:28:88:40:bd:a8:47:28:
|
|
28
|
-
9e:a4:64:31:e0:a5:72:db:09:cb:b0:9e:7a:d5:d0:
|
|
29
|
-
7f:15:15:75:d4:d6:78:41:c9:a1:54:73:48:19:4f:
|
|
30
|
-
72:95:a1:31:b3:4c:81:41:13:43:d9:9b:8c:d0:2e:
|
|
31
|
-
29:09:a2:59:6b:15:6d:5c:93:22:03:f5:72:f0:46:
|
|
32
|
-
be:65
|
|
33
|
-
Exponent: 65537 (0x10001)
|
|
34
|
-
X509v3 extensions:
|
|
35
|
-
X509v3 Basic Constraints: critical
|
|
36
|
-
CA:FALSE
|
|
37
|
-
X509v3 Subject Key Identifier:
|
|
38
|
-
E1:20:A8:89:51:79:0C:23:66:20:B7:A5:A4:42:8F:40:7F:7E:C0:CE
|
|
39
|
-
X509v3 Authority Key Identifier:
|
|
40
|
-
keyid:A8:C7:C5:69:35:49:1B:B6:77:E7:2E:16:5B:B0:75:8C:B7:03:5C:04
|
|
41
|
-
DirName:/CN=devcert
|
|
42
|
-
serial:DB:1E:4C:08:75:57:8D:4E
|
|
43
|
-
|
|
44
|
-
X509v3 Key Usage: critical
|
|
45
|
-
Digital Signature, Key Encipherment
|
|
46
|
-
X509v3 Extended Key Usage:
|
|
47
|
-
TLS Web Server Authentication
|
|
48
|
-
X509v3 Subject Alternative Name:
|
|
49
|
-
DNS:local.archive.org, DNS:*.local.archive.org
|
|
50
|
-
Signature Algorithm: sha256WithRSAEncryption
|
|
51
|
-
5a:20:54:0b:6f:c3:35:e6:70:c1:bd:5c:58:e8:cf:7b:73:33:
|
|
52
|
-
38:80:70:c1:1c:60:2a:ea:5c:0c:eb:63:6a:15:48:fe:4d:f6:
|
|
53
|
-
18:89:e1:89:73:40:45:52:7d:bc:3a:d6:0e:d3:65:2c:e7:b9:
|
|
54
|
-
ab:3b:c6:ea:6e:74:74:39:4f:53:3f:bb:59:d9:91:83:db:92:
|
|
55
|
-
96:32:97:25:5f:c2:8d:85:ce:b3:c7:b1:4d:37:b7:bd:81:de:
|
|
56
|
-
f7:9f:34:5b:12:70:21:a8:03:8d:94:ed:d7:41:7f:2a:87:30:
|
|
57
|
-
bd:4f:07:22:b2:9a:06:ab:bc:41:2c:2f:7c:be:e0:a2:90:60:
|
|
58
|
-
21:79:d4:a1:08:26:c1:f4:83:b2:0a:ff:7d:0a:15:dc:ed:d0:
|
|
59
|
-
49:f9:37:ad:fe:68:d7:59:9d:f8:25:4e:10:01:bf:a5:be:ec:
|
|
60
|
-
21:a8:bf:77:6c:ff:d4:b7:d4:11:9c:43:4a:64:e8:31:76:9a:
|
|
61
|
-
01:3a:54:d9:c0:8a:a6:2c:7a:df:0a:c4:26:6e:19:52:26:9d:
|
|
62
|
-
25:b5:b1:db:6f:12:91:92:83:ab:6c:28:52:e1:e4:63:c2:cf:
|
|
63
|
-
45:f7:b4:da:7d:13:66:47:62:90:e6:8d:2c:b8:aa:d4:2b:8c:
|
|
64
|
-
d6:c0:5c:fc:83:e7:1f:71:5f:cb:38:b6:c3:a5:77:7d:97:04:
|
|
65
|
-
87:14:44:83
|
|
66
|
-
-----BEGIN CERTIFICATE-----
|
|
67
|
-
MIIDdjCCAl6gAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdkZXZj
|
|
68
|
-
ZXJ0MB4XDTIyMDQyNzE2Mjc0NloXDTI0MDczMDE2Mjc0NlowHDEaMBgGA1UEAwwR
|
|
69
|
-
bG9jYWwuYXJjaGl2ZS5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
|
|
70
|
-
AQCpVMo0/4syAjmXYb31ElxK0Icu1kJjcuq0kJXMSu9aZgmfHQgNsvQus1VZnA93
|
|
71
|
-
Nx7Xo1y3PYGE/FWvIOc8vZ4rK57RlZ0UkHB8mXjx3UIr/Ye5CfD2UMeQQd7i7t2g
|
|
72
|
-
Sk3eIGroG4F/2RcN9fKh3InY6Ymc/0C3DrsW29HgZ18k3ju4GLim3dUmiiqk8gOx
|
|
73
|
-
qBUjMcll3ptasPBP73fxi3uRlaBhvh9kKcYuLAMb8JGWtqv7EbccQbxDbhtvKIhA
|
|
74
|
-
vahHKJ6kZDHgpXLbCcuwnnrV0H8VFXXU1nhByaFUc0gZT3KVoTGzTIFBE0PZm4zQ
|
|
75
|
-
LikJollrFW1ckyID9XLwRr5lAgMBAAGjgcwwgckwDAYDVR0TAQH/BAIwADAdBgNV
|
|
76
|
-
HQ4EFgQU4SCoiVF5DCNmILelpEKPQH9+wM4wQgYDVR0jBDswOYAUqMfFaTVJG7Z3
|
|
77
|
-
5y4WW7B1jLcDXAShFqQUMBIxEDAOBgNVBAMMB2RldmNlcnSCCQDbHkwIdVeNTjAO
|
|
78
|
-
BgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwMQYDVR0RBCowKIIR
|
|
79
|
-
bG9jYWwuYXJjaGl2ZS5vcmeCEyoubG9jYWwuYXJjaGl2ZS5vcmcwDQYJKoZIhvcN
|
|
80
|
-
AQELBQADggEBAFogVAtvwzXmcMG9XFjoz3tzMziAcMEcYCrqXAzrY2oVSP5N9hiJ
|
|
81
|
-
4YlzQEVSfbw61g7TZSznuas7xupudHQ5T1M/u1nZkYPbkpYylyVfwo2FzrPHsU03
|
|
82
|
-
t72B3vefNFsScCGoA42U7ddBfyqHML1PByKymgarvEEsL3y+4KKQYCF51KEIJsH0
|
|
83
|
-
g7IK/30KFdzt0En5N63+aNdZnfglThABv6W+7CGov3ds/9S31BGcQ0pk6DF2mgE6
|
|
84
|
-
VNnAiqYset8KxCZuGVImnSW1sdtvEpGSg6tsKFLh5GPCz0X3tNp9E2ZHYpDmjSy4
|
|
85
|
-
qtQrjNbAXPyD5x9xX8s4tsOld32XBIcURIM=
|
|
86
|
-
-----END CERTIFICATE-----
|
|
1
|
+
Certificate:
|
|
2
|
+
Data:
|
|
3
|
+
Version: 3 (0x2)
|
|
4
|
+
Serial Number: 1 (0x1)
|
|
5
|
+
Signature Algorithm: sha256WithRSAEncryption
|
|
6
|
+
Issuer: CN=devcert
|
|
7
|
+
Validity
|
|
8
|
+
Not Before: Apr 27 16:27:46 2022 GMT
|
|
9
|
+
Not After : Jul 30 16:27:46 2024 GMT
|
|
10
|
+
Subject: CN=local.archive.org
|
|
11
|
+
Subject Public Key Info:
|
|
12
|
+
Public Key Algorithm: rsaEncryption
|
|
13
|
+
Public-Key: (2048 bit)
|
|
14
|
+
Modulus:
|
|
15
|
+
00:a9:54:ca:34:ff:8b:32:02:39:97:61:bd:f5:12:
|
|
16
|
+
5c:4a:d0:87:2e:d6:42:63:72:ea:b4:90:95:cc:4a:
|
|
17
|
+
ef:5a:66:09:9f:1d:08:0d:b2:f4:2e:b3:55:59:9c:
|
|
18
|
+
0f:77:37:1e:d7:a3:5c:b7:3d:81:84:fc:55:af:20:
|
|
19
|
+
e7:3c:bd:9e:2b:2b:9e:d1:95:9d:14:90:70:7c:99:
|
|
20
|
+
78:f1:dd:42:2b:fd:87:b9:09:f0:f6:50:c7:90:41:
|
|
21
|
+
de:e2:ee:dd:a0:4a:4d:de:20:6a:e8:1b:81:7f:d9:
|
|
22
|
+
17:0d:f5:f2:a1:dc:89:d8:e9:89:9c:ff:40:b7:0e:
|
|
23
|
+
bb:16:db:d1:e0:67:5f:24:de:3b:b8:18:b8:a6:dd:
|
|
24
|
+
d5:26:8a:2a:a4:f2:03:b1:a8:15:23:31:c9:65:de:
|
|
25
|
+
9b:5a:b0:f0:4f:ef:77:f1:8b:7b:91:95:a0:61:be:
|
|
26
|
+
1f:64:29:c6:2e:2c:03:1b:f0:91:96:b6:ab:fb:11:
|
|
27
|
+
b7:1c:41:bc:43:6e:1b:6f:28:88:40:bd:a8:47:28:
|
|
28
|
+
9e:a4:64:31:e0:a5:72:db:09:cb:b0:9e:7a:d5:d0:
|
|
29
|
+
7f:15:15:75:d4:d6:78:41:c9:a1:54:73:48:19:4f:
|
|
30
|
+
72:95:a1:31:b3:4c:81:41:13:43:d9:9b:8c:d0:2e:
|
|
31
|
+
29:09:a2:59:6b:15:6d:5c:93:22:03:f5:72:f0:46:
|
|
32
|
+
be:65
|
|
33
|
+
Exponent: 65537 (0x10001)
|
|
34
|
+
X509v3 extensions:
|
|
35
|
+
X509v3 Basic Constraints: critical
|
|
36
|
+
CA:FALSE
|
|
37
|
+
X509v3 Subject Key Identifier:
|
|
38
|
+
E1:20:A8:89:51:79:0C:23:66:20:B7:A5:A4:42:8F:40:7F:7E:C0:CE
|
|
39
|
+
X509v3 Authority Key Identifier:
|
|
40
|
+
keyid:A8:C7:C5:69:35:49:1B:B6:77:E7:2E:16:5B:B0:75:8C:B7:03:5C:04
|
|
41
|
+
DirName:/CN=devcert
|
|
42
|
+
serial:DB:1E:4C:08:75:57:8D:4E
|
|
43
|
+
|
|
44
|
+
X509v3 Key Usage: critical
|
|
45
|
+
Digital Signature, Key Encipherment
|
|
46
|
+
X509v3 Extended Key Usage:
|
|
47
|
+
TLS Web Server Authentication
|
|
48
|
+
X509v3 Subject Alternative Name:
|
|
49
|
+
DNS:local.archive.org, DNS:*.local.archive.org
|
|
50
|
+
Signature Algorithm: sha256WithRSAEncryption
|
|
51
|
+
5a:20:54:0b:6f:c3:35:e6:70:c1:bd:5c:58:e8:cf:7b:73:33:
|
|
52
|
+
38:80:70:c1:1c:60:2a:ea:5c:0c:eb:63:6a:15:48:fe:4d:f6:
|
|
53
|
+
18:89:e1:89:73:40:45:52:7d:bc:3a:d6:0e:d3:65:2c:e7:b9:
|
|
54
|
+
ab:3b:c6:ea:6e:74:74:39:4f:53:3f:bb:59:d9:91:83:db:92:
|
|
55
|
+
96:32:97:25:5f:c2:8d:85:ce:b3:c7:b1:4d:37:b7:bd:81:de:
|
|
56
|
+
f7:9f:34:5b:12:70:21:a8:03:8d:94:ed:d7:41:7f:2a:87:30:
|
|
57
|
+
bd:4f:07:22:b2:9a:06:ab:bc:41:2c:2f:7c:be:e0:a2:90:60:
|
|
58
|
+
21:79:d4:a1:08:26:c1:f4:83:b2:0a:ff:7d:0a:15:dc:ed:d0:
|
|
59
|
+
49:f9:37:ad:fe:68:d7:59:9d:f8:25:4e:10:01:bf:a5:be:ec:
|
|
60
|
+
21:a8:bf:77:6c:ff:d4:b7:d4:11:9c:43:4a:64:e8:31:76:9a:
|
|
61
|
+
01:3a:54:d9:c0:8a:a6:2c:7a:df:0a:c4:26:6e:19:52:26:9d:
|
|
62
|
+
25:b5:b1:db:6f:12:91:92:83:ab:6c:28:52:e1:e4:63:c2:cf:
|
|
63
|
+
45:f7:b4:da:7d:13:66:47:62:90:e6:8d:2c:b8:aa:d4:2b:8c:
|
|
64
|
+
d6:c0:5c:fc:83:e7:1f:71:5f:cb:38:b6:c3:a5:77:7d:97:04:
|
|
65
|
+
87:14:44:83
|
|
66
|
+
-----BEGIN CERTIFICATE-----
|
|
67
|
+
MIIDdjCCAl6gAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdkZXZj
|
|
68
|
+
ZXJ0MB4XDTIyMDQyNzE2Mjc0NloXDTI0MDczMDE2Mjc0NlowHDEaMBgGA1UEAwwR
|
|
69
|
+
bG9jYWwuYXJjaGl2ZS5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
|
|
70
|
+
AQCpVMo0/4syAjmXYb31ElxK0Icu1kJjcuq0kJXMSu9aZgmfHQgNsvQus1VZnA93
|
|
71
|
+
Nx7Xo1y3PYGE/FWvIOc8vZ4rK57RlZ0UkHB8mXjx3UIr/Ye5CfD2UMeQQd7i7t2g
|
|
72
|
+
Sk3eIGroG4F/2RcN9fKh3InY6Ymc/0C3DrsW29HgZ18k3ju4GLim3dUmiiqk8gOx
|
|
73
|
+
qBUjMcll3ptasPBP73fxi3uRlaBhvh9kKcYuLAMb8JGWtqv7EbccQbxDbhtvKIhA
|
|
74
|
+
vahHKJ6kZDHgpXLbCcuwnnrV0H8VFXXU1nhByaFUc0gZT3KVoTGzTIFBE0PZm4zQ
|
|
75
|
+
LikJollrFW1ckyID9XLwRr5lAgMBAAGjgcwwgckwDAYDVR0TAQH/BAIwADAdBgNV
|
|
76
|
+
HQ4EFgQU4SCoiVF5DCNmILelpEKPQH9+wM4wQgYDVR0jBDswOYAUqMfFaTVJG7Z3
|
|
77
|
+
5y4WW7B1jLcDXAShFqQUMBIxEDAOBgNVBAMMB2RldmNlcnSCCQDbHkwIdVeNTjAO
|
|
78
|
+
BgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwMQYDVR0RBCowKIIR
|
|
79
|
+
bG9jYWwuYXJjaGl2ZS5vcmeCEyoubG9jYWwuYXJjaGl2ZS5vcmcwDQYJKoZIhvcN
|
|
80
|
+
AQELBQADggEBAFogVAtvwzXmcMG9XFjoz3tzMziAcMEcYCrqXAzrY2oVSP5N9hiJ
|
|
81
|
+
4YlzQEVSfbw61g7TZSznuas7xupudHQ5T1M/u1nZkYPbkpYylyVfwo2FzrPHsU03
|
|
82
|
+
t72B3vefNFsScCGoA42U7ddBfyqHML1PByKymgarvEEsL3y+4KKQYCF51KEIJsH0
|
|
83
|
+
g7IK/30KFdzt0En5N63+aNdZnfglThABv6W+7CGov3ds/9S31BGcQ0pk6DF2mgE6
|
|
84
|
+
VNnAiqYset8KxCZuGVImnSW1sdtvEpGSg6tsKFLh5GPCz0X3tNp9E2ZHYpDmjSy4
|
|
85
|
+
qtQrjNbAXPyD5x9xX8s4tsOld32XBIcURIM=
|
|
86
|
+
-----END CERTIFICATE-----
|
package/local.archive.org.key
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
-----BEGIN RSA PRIVATE KEY-----
|
|
2
|
-
MIIEowIBAAKCAQEAqVTKNP+LMgI5l2G99RJcStCHLtZCY3LqtJCVzErvWmYJnx0I
|
|
3
|
-
DbL0LrNVWZwPdzce16Nctz2BhPxVryDnPL2eKyue0ZWdFJBwfJl48d1CK/2HuQnw
|
|
4
|
-
9lDHkEHe4u7doEpN3iBq6BuBf9kXDfXyodyJ2OmJnP9Atw67FtvR4GdfJN47uBi4
|
|
5
|
-
pt3VJooqpPIDsagVIzHJZd6bWrDwT+938Yt7kZWgYb4fZCnGLiwDG/CRlrar+xG3
|
|
6
|
-
HEG8Q24bbyiIQL2oRyiepGQx4KVy2wnLsJ561dB/FRV11NZ4QcmhVHNIGU9ylaEx
|
|
7
|
-
s0yBQRND2ZuM0C4pCaJZaxVtXJMiA/Vy8Ea+ZQIDAQABAoIBAAQgUdEazQyJ61da
|
|
8
|
-
BWP8b41PKYwlonaD7V47C7tvtAdy5xcegPy8eKDOs+y8FdBk4naEv5Sjhg10jK34
|
|
9
|
-
0kmzoTASHwuiZrKClosivkS+jIc/5VfH+zw1WbeVM1Y6VeI7DUy1Y4WGbhBsfNhV
|
|
10
|
-
PvVcx2smvbi6q5wKWtrCvomGW1YtngNBXJBPDWXysaVZdpF+6iWtw0RjWxbKEeMb
|
|
11
|
-
fjZ2sxl7h1EkTXxQR9pfl9WVgl6vRRXp1o+N71M14jp5t95xCyf49YzeEuZmc1Fc
|
|
12
|
-
dD77LNGcxr3kpkcQH5FdDP/spla+lR+JKb78FVqhEdPP3WcJ1qcrAstG2npAfKpj
|
|
13
|
-
MD9AhsECgYEA3BddOjeK9epaGbTZRKgmIOSgGEHo8WbVHqBHhyQKAb8kFVEPn+Hl
|
|
14
|
-
sq2EEQZf0ZJ/HhlVBc0Gj4/2PI8vj1Lzh+QWJnFu+XN/doOm5X62Ctz13qC5oWJp
|
|
15
|
-
foQ9HXcg4GAXhm/o3KUIntLrUwoi/UW8YOSRFXS8RSJtuh1rI5P2jjECgYEAxPVP
|
|
16
|
-
o/9+12Fc2ujdm8cQ1tB1Ab9Z73/vloG/xit0uMp89OqXUHEmtud/WzaIQvNxdaWi
|
|
17
|
-
9/BqAG9Oml51T3cuYPxNDkSmtd2fieq9Nh17dw8zYGMk0cSYeecgvCJOrRIJnebW
|
|
18
|
-
Glyt8vzBb3eD6FzhZoVNOVYareainSP1cwl5YnUCgYAsr2m0OjayeyRT983tDJ7B
|
|
19
|
-
Kun+QtOCv7ghgbVEEOMfO6md0llzwq+aOXSI6Fxn9nBssgP7K4dbeoUqAoBLfzIG
|
|
20
|
-
sx50K6+2YebNLymhirp3NimNS+CkjZCRqVOnOdqo85mTKAGFWtSHOpegwnwcJB59
|
|
21
|
-
Jar3Sj43YygYE4T/Mjlq4QKBgQC8zUcdt2J4xl1Df6xHkuiic0tmdG6a9jHOPex+
|
|
22
|
-
49NM/NYR1Ptd4kmxVXKxFjJCs6jUlQYG1NBYQFrCAcBEf8PWtqSLA+YnOh6gD4R3
|
|
23
|
-
ZoWfGNQwFnoKF4HugU/Q6LYwk7TiR5B/zs30urQWzSOGT9rF8wyW5OJIR2kkZ373
|
|
24
|
-
WmKgrQKBgGaw32CMejz3wBpzOAXsYJcMsVfNCMD4bJ2EbXhYuY8HB8IEEv6wqMsp
|
|
25
|
-
wtXIgHJubfIiA3MlVsfaUkRdtHMHbN+Us1oynu6nByLhYlAMKpOsJFzPVHHwGB/1
|
|
26
|
-
g3WtzfFk5eOoZltJBm5K41zjS7lyr1t05648pT6niy9snu6LaF94
|
|
27
|
-
-----END RSA PRIVATE KEY-----
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
|
2
|
+
MIIEowIBAAKCAQEAqVTKNP+LMgI5l2G99RJcStCHLtZCY3LqtJCVzErvWmYJnx0I
|
|
3
|
+
DbL0LrNVWZwPdzce16Nctz2BhPxVryDnPL2eKyue0ZWdFJBwfJl48d1CK/2HuQnw
|
|
4
|
+
9lDHkEHe4u7doEpN3iBq6BuBf9kXDfXyodyJ2OmJnP9Atw67FtvR4GdfJN47uBi4
|
|
5
|
+
pt3VJooqpPIDsagVIzHJZd6bWrDwT+938Yt7kZWgYb4fZCnGLiwDG/CRlrar+xG3
|
|
6
|
+
HEG8Q24bbyiIQL2oRyiepGQx4KVy2wnLsJ561dB/FRV11NZ4QcmhVHNIGU9ylaEx
|
|
7
|
+
s0yBQRND2ZuM0C4pCaJZaxVtXJMiA/Vy8Ea+ZQIDAQABAoIBAAQgUdEazQyJ61da
|
|
8
|
+
BWP8b41PKYwlonaD7V47C7tvtAdy5xcegPy8eKDOs+y8FdBk4naEv5Sjhg10jK34
|
|
9
|
+
0kmzoTASHwuiZrKClosivkS+jIc/5VfH+zw1WbeVM1Y6VeI7DUy1Y4WGbhBsfNhV
|
|
10
|
+
PvVcx2smvbi6q5wKWtrCvomGW1YtngNBXJBPDWXysaVZdpF+6iWtw0RjWxbKEeMb
|
|
11
|
+
fjZ2sxl7h1EkTXxQR9pfl9WVgl6vRRXp1o+N71M14jp5t95xCyf49YzeEuZmc1Fc
|
|
12
|
+
dD77LNGcxr3kpkcQH5FdDP/spla+lR+JKb78FVqhEdPP3WcJ1qcrAstG2npAfKpj
|
|
13
|
+
MD9AhsECgYEA3BddOjeK9epaGbTZRKgmIOSgGEHo8WbVHqBHhyQKAb8kFVEPn+Hl
|
|
14
|
+
sq2EEQZf0ZJ/HhlVBc0Gj4/2PI8vj1Lzh+QWJnFu+XN/doOm5X62Ctz13qC5oWJp
|
|
15
|
+
foQ9HXcg4GAXhm/o3KUIntLrUwoi/UW8YOSRFXS8RSJtuh1rI5P2jjECgYEAxPVP
|
|
16
|
+
o/9+12Fc2ujdm8cQ1tB1Ab9Z73/vloG/xit0uMp89OqXUHEmtud/WzaIQvNxdaWi
|
|
17
|
+
9/BqAG9Oml51T3cuYPxNDkSmtd2fieq9Nh17dw8zYGMk0cSYeecgvCJOrRIJnebW
|
|
18
|
+
Glyt8vzBb3eD6FzhZoVNOVYareainSP1cwl5YnUCgYAsr2m0OjayeyRT983tDJ7B
|
|
19
|
+
Kun+QtOCv7ghgbVEEOMfO6md0llzwq+aOXSI6Fxn9nBssgP7K4dbeoUqAoBLfzIG
|
|
20
|
+
sx50K6+2YebNLymhirp3NimNS+CkjZCRqVOnOdqo85mTKAGFWtSHOpegwnwcJB59
|
|
21
|
+
Jar3Sj43YygYE4T/Mjlq4QKBgQC8zUcdt2J4xl1Df6xHkuiic0tmdG6a9jHOPex+
|
|
22
|
+
49NM/NYR1Ptd4kmxVXKxFjJCs6jUlQYG1NBYQFrCAcBEf8PWtqSLA+YnOh6gD4R3
|
|
23
|
+
ZoWfGNQwFnoKF4HugU/Q6LYwk7TiR5B/zs30urQWzSOGT9rF8wyW5OJIR2kkZ373
|
|
24
|
+
WmKgrQKBgGaw32CMejz3wBpzOAXsYJcMsVfNCMD4bJ2EbXhYuY8HB8IEEv6wqMsp
|
|
25
|
+
wtXIgHJubfIiA3MlVsfaUkRdtHMHbN+Us1oynu6nByLhYlAMKpOsJFzPVHHwGB/1
|
|
26
|
+
g3WtzfFk5eOoZltJBm5K41zjS7lyr1t05648pT6niy9snu6LaF94
|
|
27
|
+
-----END RSA PRIVATE KEY-----
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"description": "The Internet Archive Collection Browser.",
|
|
4
4
|
"license": "AGPL-3.0-only",
|
|
5
5
|
"author": "Internet Archive",
|
|
6
|
-
"version": "0.3.
|
|
6
|
+
"version": "0.3.8",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"module": "dist/index.js",
|
|
9
9
|
"scripts": {
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"types": "dist/index.d.ts",
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"@internetarchive/analytics-manager": "^0.1.2",
|
|
26
|
-
"@internetarchive/collection-name-cache": "^0.2.
|
|
26
|
+
"@internetarchive/collection-name-cache": "^0.2.2",
|
|
27
27
|
"@internetarchive/feature-feedback": "^0.1.4",
|
|
28
28
|
"@internetarchive/field-parsers": "^0.1.3",
|
|
29
29
|
"@internetarchive/histogram-date-range": "^0.1.7",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"@internetarchive/infinite-scroller": "^0.1.3",
|
|
32
32
|
"@internetarchive/local-cache": "^0.2.1",
|
|
33
33
|
"@internetarchive/modal-manager": "^0.2.7",
|
|
34
|
-
"@internetarchive/search-service": "^0.4.2
|
|
34
|
+
"@internetarchive/search-service": "^0.4.2",
|
|
35
35
|
"@internetarchive/shared-resize-observer": "^0.2.0",
|
|
36
36
|
"@lit/localize": "^0.11.2",
|
|
37
37
|
"dompurify": "^2.3.6",
|
package/renovate.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": [
|
|
3
|
-
"config:base",
|
|
4
|
-
":preserveSemverRanges"
|
|
5
|
-
]
|
|
6
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"extends": [
|
|
3
|
+
"config:base",
|
|
4
|
+
":preserveSemverRanges"
|
|
5
|
+
]
|
|
6
|
+
}
|
package/src/app-root.ts
CHANGED
|
@@ -78,6 +78,7 @@ export class AppRoot extends LitElement {
|
|
|
78
78
|
private initSearchServiceFromUrlParams() {
|
|
79
79
|
const params = new URL(window.location.href).searchParams;
|
|
80
80
|
return new SearchService({
|
|
81
|
+
includeCredentials: false,
|
|
81
82
|
baseUrl: params.get('search_base_url') ?? undefined,
|
|
82
83
|
servicePath: params.get('search_service_path') ?? undefined,
|
|
83
84
|
debuggingEnabled: !!params.get('debugging') ?? undefined,
|
|
@@ -160,15 +161,15 @@ export class AppRoot extends LitElement {
|
|
|
160
161
|
<div id="toggle-controls">
|
|
161
162
|
<button
|
|
162
163
|
@click=${() => {
|
|
163
|
-
const
|
|
164
|
-
this.shadowRoot?.getElementById('cell-
|
|
165
|
-
|
|
166
|
-
const
|
|
167
|
-
this.shadowRoot?.getElementById('
|
|
168
|
-
|
|
164
|
+
const cellControls =
|
|
165
|
+
this.shadowRoot?.getElementById('cell-controls');
|
|
166
|
+
cellControls?.classList.toggle('hidden');
|
|
167
|
+
const checkboxControls =
|
|
168
|
+
this.shadowRoot?.getElementById('checkbox-controls');
|
|
169
|
+
checkboxControls?.classList.toggle('hidden');
|
|
169
170
|
}}
|
|
170
171
|
>
|
|
171
|
-
Toggle
|
|
172
|
+
Toggle Controls
|
|
172
173
|
</button>
|
|
173
174
|
<button
|
|
174
175
|
@click=${() => {
|
|
@@ -189,7 +190,7 @@ export class AppRoot extends LitElement {
|
|
|
189
190
|
>
|
|
190
191
|
</div>
|
|
191
192
|
|
|
192
|
-
<div id="cell-controls"
|
|
193
|
+
<div id="cell-controls">
|
|
193
194
|
<div id="cell-size-control">
|
|
194
195
|
<div>
|
|
195
196
|
<label for="cell-width-slider">Min cell width:</label>
|
|
@@ -282,6 +283,15 @@ export class AppRoot extends LitElement {
|
|
|
282
283
|
/>
|
|
283
284
|
<label for="show-dummy-snippets">Show dummy snippets</label>
|
|
284
285
|
</div>
|
|
286
|
+
<div class="checkbox-control">
|
|
287
|
+
<input
|
|
288
|
+
type="checkbox"
|
|
289
|
+
id="enable-date-picker"
|
|
290
|
+
checked
|
|
291
|
+
@click=${this.datePickerChanged}
|
|
292
|
+
/>
|
|
293
|
+
<label for="enable-date-picker">Enable date picker</label>
|
|
294
|
+
</div>
|
|
285
295
|
</div>
|
|
286
296
|
</div>
|
|
287
297
|
|
|
@@ -409,6 +419,18 @@ export class AppRoot extends LitElement {
|
|
|
409
419
|
this.searchQuery = oldQuery; // Re-apply the original query
|
|
410
420
|
}
|
|
411
421
|
|
|
422
|
+
private datePickerChanged(e: Event) {
|
|
423
|
+
const target = e.target as HTMLInputElement;
|
|
424
|
+
this.collectionBrowser.showHistogramDatePicker = target.checked;
|
|
425
|
+
|
|
426
|
+
// When disabling the date picker from the demo app, also clear any existing date range params
|
|
427
|
+
if (!this.collectionBrowser.showHistogramDatePicker) {
|
|
428
|
+
this.collectionBrowser.minSelectedDate = undefined;
|
|
429
|
+
this.collectionBrowser.maxSelectedDate = undefined;
|
|
430
|
+
this.collectionBrowser.dateRangeQueryClause = undefined;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
|
|
412
434
|
private rowGapChanged(e: Event) {
|
|
413
435
|
const input = e.target as HTMLInputElement;
|
|
414
436
|
this.rowGap = parseFloat(input.value);
|
|
@@ -563,7 +585,8 @@ export class AppRoot extends LitElement {
|
|
|
563
585
|
}
|
|
564
586
|
|
|
565
587
|
.hidden {
|
|
566
|
-
|
|
588
|
+
/* If this class is present, we want the element hidden regardless of specificity */
|
|
589
|
+
display: none !important;
|
|
567
590
|
}
|
|
568
591
|
|
|
569
592
|
#toggle-controls {
|
|
@@ -46,6 +46,7 @@ import {
|
|
|
46
46
|
TileModel,
|
|
47
47
|
CollectionDisplayMode,
|
|
48
48
|
FacetOption,
|
|
49
|
+
FacetBucket,
|
|
49
50
|
} from './models';
|
|
50
51
|
import {
|
|
51
52
|
RestorationStateHandlerInterface,
|
|
@@ -597,6 +598,8 @@ export class CollectionBrowser
|
|
|
597
598
|
}>
|
|
598
599
|
) {
|
|
599
600
|
const { minDate, maxDate } = e.detail;
|
|
601
|
+
|
|
602
|
+
[this.minSelectedDate, this.maxSelectedDate] = [minDate, maxDate];
|
|
600
603
|
this.dateRangeQueryClause = `year:[${minDate} TO ${maxDate}]`;
|
|
601
604
|
|
|
602
605
|
if (this.dateRangeQueryClause) {
|
|
@@ -775,6 +778,11 @@ export class CollectionBrowser
|
|
|
775
778
|
this.pageFetchesInProgress = {};
|
|
776
779
|
this.endOfDataReached = false;
|
|
777
780
|
this.pagesToRender = this.initialPageNumber;
|
|
781
|
+
|
|
782
|
+
// Reset the infinite scroller's item count, so that it
|
|
783
|
+
// shows tile placeholders until the new query's results load in
|
|
784
|
+
this.infiniteScroller?.reload();
|
|
785
|
+
|
|
778
786
|
if (!this.initialQueryChangeHappened && this.initialPageNumber > 1) {
|
|
779
787
|
this.scrollToPage(this.initialPageNumber);
|
|
780
788
|
}
|
|
@@ -790,7 +798,8 @@ export class CollectionBrowser
|
|
|
790
798
|
await Promise.all([
|
|
791
799
|
this.doInitialPageFetch(),
|
|
792
800
|
this.fetchFacets(),
|
|
793
|
-
|
|
801
|
+
// Only fetch histogram data separately if we need it b/c of date filters
|
|
802
|
+
this.shouldRequestYearHistogram && this.fetchFullYearHistogram(),
|
|
794
803
|
]);
|
|
795
804
|
}
|
|
796
805
|
|
|
@@ -858,21 +867,34 @@ export class CollectionBrowser
|
|
|
858
867
|
this.searchResultsLoading = false;
|
|
859
868
|
}
|
|
860
869
|
|
|
870
|
+
/** The full query, including year facets and date range clauses */
|
|
861
871
|
private get fullQuery(): string | undefined {
|
|
862
|
-
|
|
863
|
-
|
|
872
|
+
if (!this.baseQuery) return undefined;
|
|
873
|
+
let fullQuery = this.baseQuery;
|
|
874
|
+
|
|
875
|
+
const { facetQuery, dateRangeQueryClause, sortFilterQueries } = this;
|
|
876
|
+
|
|
877
|
+
if (facetQuery) {
|
|
878
|
+
fullQuery += ` AND ${facetQuery}`;
|
|
879
|
+
}
|
|
864
880
|
if (dateRangeQueryClause) {
|
|
865
|
-
|
|
881
|
+
fullQuery += ` AND ${dateRangeQueryClause}`;
|
|
866
882
|
}
|
|
867
|
-
|
|
883
|
+
if (sortFilterQueries) {
|
|
884
|
+
fullQuery += ` AND ${sortFilterQueries}`;
|
|
885
|
+
}
|
|
886
|
+
return fullQuery;
|
|
868
887
|
}
|
|
869
888
|
|
|
870
|
-
|
|
889
|
+
/** The full query without any year facets or date range clauses */
|
|
890
|
+
private get fullQueryWithoutDates(): string | undefined {
|
|
871
891
|
if (!this.baseQuery) return undefined;
|
|
872
892
|
let fullQuery = this.baseQuery;
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
893
|
+
|
|
894
|
+
const { facetQueryWithoutYear, sortFilterQueries } = this;
|
|
895
|
+
|
|
896
|
+
if (facetQueryWithoutYear) {
|
|
897
|
+
fullQuery += ` AND ${facetQueryWithoutYear}`;
|
|
876
898
|
}
|
|
877
899
|
if (sortFilterQueries) {
|
|
878
900
|
fullQuery += ` AND ${sortFilterQueries}`;
|
|
@@ -887,33 +909,84 @@ export class CollectionBrowser
|
|
|
887
909
|
*/
|
|
888
910
|
private get facetQuery(): string | undefined {
|
|
889
911
|
if (!this.selectedFacets) return undefined;
|
|
890
|
-
const
|
|
912
|
+
const facetClauses = [];
|
|
891
913
|
for (const [facetName, facetValues] of Object.entries(
|
|
892
914
|
this.selectedFacets
|
|
893
915
|
)) {
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
916
|
+
facetClauses.push(this.buildFacetClause(facetName, facetValues));
|
|
917
|
+
}
|
|
918
|
+
return this.joinFacetClauses(facetClauses);
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
/**
|
|
922
|
+
* Generates a query string for the currently selected facets, excluding 'year' facets.
|
|
923
|
+
*
|
|
924
|
+
* Example: `mediatype:("collection" OR "audio" OR -"etree") AND subject:("foo" OR -"bar")`
|
|
925
|
+
*/
|
|
926
|
+
private get facetQueryWithoutYear(): string | undefined {
|
|
927
|
+
if (!this.selectedFacets) return undefined;
|
|
928
|
+
const facetClauses = [];
|
|
929
|
+
for (const [facetName, facetValues] of Object.entries(
|
|
930
|
+
this.selectedFacets
|
|
931
|
+
)) {
|
|
932
|
+
if (facetName !== 'year') {
|
|
933
|
+
facetClauses.push(this.buildFacetClause(facetName, facetValues));
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
return this.joinFacetClauses(facetClauses);
|
|
937
|
+
}
|
|
938
|
+
|
|
939
|
+
/**
|
|
940
|
+
* Builds an OR-joined facet clause for the given facet name and values.
|
|
941
|
+
*
|
|
942
|
+
* E.g., for name `subject` and values
|
|
943
|
+
* `{ foo: { state: 'selected' }, bar: { state: 'hidden' } }`
|
|
944
|
+
* this will produce the clause
|
|
945
|
+
* `subject:("foo" OR -"bar")`.
|
|
946
|
+
*
|
|
947
|
+
* @param facetName The facet type (e.g., 'collection')
|
|
948
|
+
* @param facetValues The facet buckets, mapped by their keys
|
|
949
|
+
*/
|
|
950
|
+
private buildFacetClause(
|
|
951
|
+
facetName: string,
|
|
952
|
+
facetValues: Record<string, FacetBucket>
|
|
953
|
+
): string {
|
|
954
|
+
const facetEntries = Object.entries(facetValues);
|
|
955
|
+
if (facetEntries.length === 0) return '';
|
|
956
|
+
|
|
957
|
+
const facetQueryName =
|
|
958
|
+
facetName === 'lending' ? 'lending___status' : facetName;
|
|
959
|
+
const facetValuesArray: string[] = [];
|
|
960
|
+
|
|
961
|
+
for (const [key, facetData] of facetEntries) {
|
|
962
|
+
const plusMinusPrefix = facetData.state === 'hidden' ? '-' : '';
|
|
963
|
+
|
|
964
|
+
if (facetName === 'language') {
|
|
965
|
+
const languages =
|
|
966
|
+
this.languageCodeHandler.getCodeArrayFromCodeString(key);
|
|
967
|
+
for (const language of languages) {
|
|
968
|
+
facetValuesArray.push(`${plusMinusPrefix}"${language}"`);
|
|
911
969
|
}
|
|
970
|
+
} else {
|
|
971
|
+
facetValuesArray.push(`${plusMinusPrefix}"${key}"`);
|
|
912
972
|
}
|
|
913
|
-
const valueQuery = facetValuesArray.join(` OR `);
|
|
914
|
-
facetQuery.push(`${facetQueryName}:(${valueQuery})`);
|
|
915
973
|
}
|
|
916
|
-
|
|
974
|
+
|
|
975
|
+
const valueQuery = facetValuesArray.join(` OR `);
|
|
976
|
+
return `${facetQueryName}:(${valueQuery})`;
|
|
977
|
+
}
|
|
978
|
+
|
|
979
|
+
/**
|
|
980
|
+
* Takes an array of facet clauses, and combines them into a
|
|
981
|
+
* full AND-joined facet query string. Empty clauses are ignored.
|
|
982
|
+
*/
|
|
983
|
+
private joinFacetClauses(facetClauses: string[]): string | undefined {
|
|
984
|
+
const nonEmptyFacetClauses = facetClauses.filter(
|
|
985
|
+
clause => clause.length > 0
|
|
986
|
+
);
|
|
987
|
+
return nonEmptyFacetClauses.length > 0
|
|
988
|
+
? `(${nonEmptyFacetClauses.join(' AND ')})`
|
|
989
|
+
: undefined;
|
|
917
990
|
}
|
|
918
991
|
|
|
919
992
|
facetsChanged(e: CustomEvent<SelectedFacets>) {
|
|
@@ -962,6 +1035,13 @@ export class CollectionBrowser
|
|
|
962
1035
|
this.facetsLoading = false;
|
|
963
1036
|
|
|
964
1037
|
this.aggregations = results?.success?.response.aggregations;
|
|
1038
|
+
|
|
1039
|
+
// If we're not fetching year histogram data separately, set it from the newly-fetched aggregations
|
|
1040
|
+
if (!this.shouldRequestYearHistogram) {
|
|
1041
|
+
this.fullYearsHistogramAggregation =
|
|
1042
|
+
results?.success?.response?.aggregations?.year_histogram ??
|
|
1043
|
+
results?.success?.response?.aggregations?.['year-histogram']; // Temp fix until PPS FTS key is fixed to use underscore
|
|
1044
|
+
}
|
|
965
1045
|
}
|
|
966
1046
|
|
|
967
1047
|
/**
|
|
@@ -980,7 +1060,7 @@ export class CollectionBrowser
|
|
|
980
1060
|
* If this doesn't change, we don't need to re-fetch the histogram date range
|
|
981
1061
|
*/
|
|
982
1062
|
private get fullQueryNoDateKey() {
|
|
983
|
-
return `${this.
|
|
1063
|
+
return `${this.fullQueryWithoutDates}-${this.searchType}-${this.sortParam?.field}-${this.sortParam?.direction}`;
|
|
984
1064
|
}
|
|
985
1065
|
|
|
986
1066
|
/**
|
|
@@ -993,10 +1073,11 @@ export class CollectionBrowser
|
|
|
993
1073
|
private async fetchFullYearHistogram(): Promise<void> {
|
|
994
1074
|
const { fullQueryNoDateKey } = this;
|
|
995
1075
|
if (
|
|
996
|
-
!this.
|
|
1076
|
+
!this.fullQueryWithoutDates ||
|
|
997
1077
|
fullQueryNoDateKey === this.previousFullQueryNoDate
|
|
998
|
-
)
|
|
1078
|
+
) {
|
|
999
1079
|
return;
|
|
1080
|
+
}
|
|
1000
1081
|
this.previousFullQueryNoDate = fullQueryNoDateKey;
|
|
1001
1082
|
|
|
1002
1083
|
const aggregations = {
|
|
@@ -1004,7 +1085,7 @@ export class CollectionBrowser
|
|
|
1004
1085
|
};
|
|
1005
1086
|
|
|
1006
1087
|
const params = {
|
|
1007
|
-
query: this.
|
|
1088
|
+
query: this.fullQueryWithoutDates,
|
|
1008
1089
|
aggregations,
|
|
1009
1090
|
rows: 0,
|
|
1010
1091
|
};
|
|
@@ -1018,6 +1099,20 @@ export class CollectionBrowser
|
|
|
1018
1099
|
results?.success?.response?.aggregations?.['year-histogram']; // Temp fix until PPS FTS key is fixed to use underscore
|
|
1019
1100
|
}
|
|
1020
1101
|
|
|
1102
|
+
/**
|
|
1103
|
+
* We only want to send a separate request for the year_histogram data
|
|
1104
|
+
* if (a) the date picker component is enabled and (b) there is a year facet or date-range filter applied.
|
|
1105
|
+
*
|
|
1106
|
+
* Otherwise, we should just be using the histogram data supplied by the "normal" facet request.
|
|
1107
|
+
*/
|
|
1108
|
+
private get shouldRequestYearHistogram() {
|
|
1109
|
+
const datePickerEnabled = this.showHistogramDatePicker;
|
|
1110
|
+
const hasDateRange = !!this.dateRangeQueryClause;
|
|
1111
|
+
const hasYearFacet =
|
|
1112
|
+
Object.keys(this.selectedFacets?.year ?? {}).length > 0;
|
|
1113
|
+
return datePickerEnabled && (hasDateRange || hasYearFacet);
|
|
1114
|
+
}
|
|
1115
|
+
|
|
1021
1116
|
private scrollToPage(pageNumber: number) {
|
|
1022
1117
|
const cellIndexToScrollTo = this.pageSize * (pageNumber - 1);
|
|
1023
1118
|
// without this setTimeout, Safari just pauses until the `fetchPage` is complete
|
|
@@ -1195,7 +1290,7 @@ export class CollectionBrowser
|
|
|
1195
1290
|
dateArchived: result.publicdate?.value,
|
|
1196
1291
|
datePublished: result.date?.value,
|
|
1197
1292
|
dateReviewed: result.reviewdate?.value,
|
|
1198
|
-
description: result.description?.
|
|
1293
|
+
description: result.description?.values.join('\n'),
|
|
1199
1294
|
favCount: result.num_favorites?.value ?? 0,
|
|
1200
1295
|
identifier: result.identifier,
|
|
1201
1296
|
issue: result.issue?.value,
|
package/src/collection-facets.ts
CHANGED
|
@@ -113,9 +113,8 @@ export class CollectionFacets extends LitElement {
|
|
|
113
113
|
render() {
|
|
114
114
|
return html`
|
|
115
115
|
<div id="container" class="${this.facetsLoading ? 'loading' : ''}">
|
|
116
|
-
${
|
|
117
|
-
|
|
118
|
-
this.fullYearAggregationLoading
|
|
116
|
+
${this.showHistogramDatePicker &&
|
|
117
|
+
(this.fullYearsHistogramAggregation || this.fullYearAggregationLoading)
|
|
119
118
|
? html`
|
|
120
119
|
<div class="facet-group">
|
|
121
120
|
<h1>Year Published <feature-feedback></feature-feedback></h1>
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
import { ifDefined } from 'lit/directives/if-defined.js';
|
|
10
10
|
import { join } from 'lit/directives/join.js';
|
|
11
11
|
import { map } from 'lit/directives/map.js';
|
|
12
|
+
import { unsafeHTML } from 'lit/directives/unsafe-html.js';
|
|
12
13
|
import { customElement, property, state } from 'lit/decorators.js';
|
|
13
14
|
import DOMPurify from 'dompurify';
|
|
14
15
|
|
|
@@ -295,7 +296,10 @@ export class TileList extends LitElement {
|
|
|
295
296
|
|
|
296
297
|
private get descriptionTemplate() {
|
|
297
298
|
return this.metadataTemplate(
|
|
298
|
-
|
|
299
|
+
// Sanitize away any HTML tags and convert line breaks to spaces.
|
|
300
|
+
unsafeHTML(
|
|
301
|
+
DOMPurify.sanitize(this.model?.description?.replace(/\n/g, ' ') ?? '')
|
|
302
|
+
),
|
|
299
303
|
'',
|
|
300
304
|
'description'
|
|
301
305
|
);
|
|
@@ -340,7 +344,7 @@ export class TileList extends LitElement {
|
|
|
340
344
|
// Note: single ' for href='' to wrap " in query var gets changed back by yarn format
|
|
341
345
|
|
|
342
346
|
// eslint-disable-next-line lit/no-invalid-html
|
|
343
|
-
return html`<a href="${this.baseNavigationUrl}/search
|
|
347
|
+
return html`<a href="${this.baseNavigationUrl}/search?query=${query}">
|
|
344
348
|
${DOMPurify.sanitize(searchTerm)}</a
|
|
345
349
|
>`;
|
|
346
350
|
}
|