@internetarchive/collection-browser 0.3.2-alpha.4 → 0.3.2
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 +43 -43
- package/dist/src/app-root.js +233 -233
- 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 +247 -247
- package/dist/src/collection-browser.js +1419 -1418
- package/dist/src/collection-browser.js.map +1 -1
- 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 +74 -74
- package/dist/src/collection-facets/more-facets-content.js +330 -330
- 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 +73 -73
- package/dist/src/collection-facets.js +507 -507
- 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 +97 -97
- package/dist/src/models.js +100 -100
- package/dist/src/restoration-state-handler.d.ts +45 -45
- package/dist/src/restoration-state-handler.js +220 -220
- 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 +35 -35
- package/dist/src/tiles/image-block.d.ts +17 -17
- package/dist/src/tiles/image-block.js +69 -73
- package/dist/src/tiles/image-block.js.map +1 -1
- 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 +20 -20
- package/dist/src/tiles/list/tile-list-compact.js +88 -87
- package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
- package/dist/src/tiles/list/tile-list.d.ts +50 -50
- package/dist/src/tiles/list/tile-list.js +265 -264
- 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 -31
- package/dist/src/tiles/overlay/icon-overlay.js.map +1 -1
- 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 +18 -18
- package/dist/src/utils/analytics-events.js +20 -20
- 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 +333 -318
- 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 +91 -91
- 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 +423 -423
- 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 -0
- package/dist/test/image-block.test.js +79 -0
- package/dist/test/image-block.test.js.map +1 -0
- 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 +5 -5
- package/dist/test/mocks/mock-search-responses.js +103 -103
- package/dist/test/mocks/mock-search-service.d.ts +13 -13
- package/dist/test/mocks/mock-search-service.js +25 -25
- package/dist/test/restoration-state-handler.test.d.ts +1 -1
- package/dist/test/restoration-state-handler.test.js +117 -117
- 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 -0
- package/dist/test/tiles/list/tile-list-compact.test.js +31 -0
- package/dist/test/tiles/list/tile-list-compact.test.js.map +1 -0
- package/dist/test/tiles/list/tile-list.test.d.ts +1 -1
- package/dist/test/tiles/list/tile-list.test.js +36 -36
- 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 +115 -115
- package/renovate.json +6 -6
- package/src/collection-browser.ts +1547 -1547
- package/src/collection-facets.ts +582 -582
- package/src/tiles/image-block.ts +7 -10
- package/src/tiles/list/tile-list-compact.ts +1 -0
- package/src/tiles/list/tile-list.ts +1 -0
- package/src/tiles/overlay/icon-overlay.ts +3 -4
- package/test/collection-browser.test.ts +24 -1
- package/test/collection-facets.test.ts +556 -556
- package/test/image-block.test.ts +86 -0
- package/test/tiles/list/tile-list-compact.test.ts +38 -0
- package/tsconfig.json +21 -21
- package/web-dev-server.config.mjs +30 -30
- package/web-test-runner.config.mjs +41 -41
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
|
-
import { css, html, LitElement, nothing, } from 'lit';
|
|
3
|
-
import { ifDefined } from 'lit/directives/if-defined.js';
|
|
4
|
-
import { join } from 'lit/directives/join.js';
|
|
5
|
-
import { map } from 'lit/directives/map.js';
|
|
6
|
-
import { customElement, property, state } from 'lit/decorators.js';
|
|
7
|
-
import DOMPurify from 'dompurify';
|
|
8
|
-
import { dateLabel } from './date-label';
|
|
9
|
-
import { accountLabel } from './account-label';
|
|
10
|
-
import { formatCount } from '../../utils/format-count';
|
|
11
|
-
import { formatDate } from '../../utils/format-date';
|
|
12
|
-
import '../image-block';
|
|
13
|
-
import '../mediatype-icon';
|
|
14
|
-
let TileList = class TileList extends LitElement {
|
|
15
|
-
constructor() {
|
|
16
|
-
super(...arguments);
|
|
17
|
-
this.sortParam = null;
|
|
18
|
-
this.collectionLinks = [];
|
|
19
|
-
this.loggedIn = false;
|
|
20
|
-
}
|
|
21
|
-
updated(changed) {
|
|
22
|
-
if (changed.has('model')) {
|
|
23
|
-
this.fetchCollectionNames();
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
async fetchCollectionNames() {
|
|
27
|
-
var _a, _b;
|
|
28
|
-
if (!((_a = this.model) === null || _a === void 0 ? void 0 : _a.collections) ||
|
|
29
|
-
this.model.collections.length === 0 ||
|
|
30
|
-
!this.collectionNameCache) {
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
// Note: quirk of Lit: need to replace collectionLinks array,
|
|
34
|
-
// otherwise it will not re-render. Can't simply alter the array.
|
|
35
|
-
this.collectionLinks = [];
|
|
36
|
-
const newCollellectionLinks = [];
|
|
37
|
-
const promises = [];
|
|
38
|
-
for (const collection of this.model.collections) {
|
|
39
|
-
promises.push((_b = this.collectionNameCache) === null || _b === void 0 ? void 0 : _b.collectionNameFor(collection).then(name => {
|
|
40
|
-
newCollellectionLinks.push(this.detailsLink(collection, name !== null && name !== void 0 ? name : collection));
|
|
41
|
-
}));
|
|
42
|
-
}
|
|
43
|
-
await Promise.all(promises);
|
|
44
|
-
this.collectionLinks = newCollellectionLinks;
|
|
45
|
-
}
|
|
46
|
-
render() {
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { css, html, LitElement, nothing, } from 'lit';
|
|
3
|
+
import { ifDefined } from 'lit/directives/if-defined.js';
|
|
4
|
+
import { join } from 'lit/directives/join.js';
|
|
5
|
+
import { map } from 'lit/directives/map.js';
|
|
6
|
+
import { customElement, property, state } from 'lit/decorators.js';
|
|
7
|
+
import DOMPurify from 'dompurify';
|
|
8
|
+
import { dateLabel } from './date-label';
|
|
9
|
+
import { accountLabel } from './account-label';
|
|
10
|
+
import { formatCount } from '../../utils/format-count';
|
|
11
|
+
import { formatDate } from '../../utils/format-date';
|
|
12
|
+
import '../image-block';
|
|
13
|
+
import '../mediatype-icon';
|
|
14
|
+
let TileList = class TileList extends LitElement {
|
|
15
|
+
constructor() {
|
|
16
|
+
super(...arguments);
|
|
17
|
+
this.sortParam = null;
|
|
18
|
+
this.collectionLinks = [];
|
|
19
|
+
this.loggedIn = false;
|
|
20
|
+
}
|
|
21
|
+
updated(changed) {
|
|
22
|
+
if (changed.has('model')) {
|
|
23
|
+
this.fetchCollectionNames();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
async fetchCollectionNames() {
|
|
27
|
+
var _a, _b;
|
|
28
|
+
if (!((_a = this.model) === null || _a === void 0 ? void 0 : _a.collections) ||
|
|
29
|
+
this.model.collections.length === 0 ||
|
|
30
|
+
!this.collectionNameCache) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
// Note: quirk of Lit: need to replace collectionLinks array,
|
|
34
|
+
// otherwise it will not re-render. Can't simply alter the array.
|
|
35
|
+
this.collectionLinks = [];
|
|
36
|
+
const newCollellectionLinks = [];
|
|
37
|
+
const promises = [];
|
|
38
|
+
for (const collection of this.model.collections) {
|
|
39
|
+
promises.push((_b = this.collectionNameCache) === null || _b === void 0 ? void 0 : _b.collectionNameFor(collection).then(name => {
|
|
40
|
+
newCollellectionLinks.push(this.detailsLink(collection, name !== null && name !== void 0 ? name : collection));
|
|
41
|
+
}));
|
|
42
|
+
}
|
|
43
|
+
await Promise.all(promises);
|
|
44
|
+
this.collectionLinks = newCollellectionLinks;
|
|
45
|
+
}
|
|
46
|
+
render() {
|
|
47
47
|
return html `
|
|
48
48
|
<div id="list-line" class="${this.classSize}">
|
|
49
|
-
${this.classSize === 'mobile'
|
|
50
|
-
? this.mobileTemplate
|
|
49
|
+
${this.classSize === 'mobile'
|
|
50
|
+
? this.mobileTemplate
|
|
51
51
|
: this.desktopTemplate}
|
|
52
52
|
</div>
|
|
53
|
-
`;
|
|
54
|
-
}
|
|
55
|
-
get mobileTemplate() {
|
|
53
|
+
`;
|
|
54
|
+
}
|
|
55
|
+
get mobileTemplate() {
|
|
56
56
|
return html `
|
|
57
57
|
<div id="list-line-top">
|
|
58
58
|
<div id="list-line-left">${this.imageBlockTemplate}</div>
|
|
@@ -64,9 +64,9 @@ let TileList = class TileList extends LitElement {
|
|
|
64
64
|
</div>
|
|
65
65
|
</div>
|
|
66
66
|
<div id="list-line-bottom">${this.detailsTemplate}</div>
|
|
67
|
-
`;
|
|
68
|
-
}
|
|
69
|
-
get desktopTemplate() {
|
|
67
|
+
`;
|
|
68
|
+
}
|
|
69
|
+
get desktopTemplate() {
|
|
70
70
|
return html `
|
|
71
71
|
<div id="list-line-left">${this.imageBlockTemplate}</div>
|
|
72
72
|
<div id="list-line-right">
|
|
@@ -76,9 +76,9 @@ let TileList = class TileList extends LitElement {
|
|
|
76
76
|
</div>
|
|
77
77
|
${this.detailsTemplate}
|
|
78
78
|
</div>
|
|
79
|
-
`;
|
|
80
|
-
}
|
|
81
|
-
get imageBlockTemplate() {
|
|
79
|
+
`;
|
|
80
|
+
}
|
|
81
|
+
get imageBlockTemplate() {
|
|
82
82
|
return html `
|
|
83
83
|
<image-block
|
|
84
84
|
.model=${this.model}
|
|
@@ -86,11 +86,12 @@ let TileList = class TileList extends LitElement {
|
|
|
86
86
|
.isCompactTile=${false}
|
|
87
87
|
.isListTile=${true}
|
|
88
88
|
.viewSize=${this.classSize}
|
|
89
|
+
.loggedIn=${this.loggedIn}
|
|
89
90
|
>
|
|
90
91
|
</image-block>
|
|
91
|
-
`;
|
|
92
|
-
}
|
|
93
|
-
get detailsTemplate() {
|
|
92
|
+
`;
|
|
93
|
+
}
|
|
94
|
+
get detailsTemplate() {
|
|
94
95
|
return html `
|
|
95
96
|
${this.itemLineTemplate} ${this.creatorTemplate}
|
|
96
97
|
<div id="dates-line">
|
|
@@ -101,11 +102,11 @@ let TileList = class TileList extends LitElement {
|
|
|
101
102
|
</div>
|
|
102
103
|
${this.topicsTemplate} ${this.collectionsTemplate}
|
|
103
104
|
${this.descriptionTemplate} ${this.textSnippetsTemplate}
|
|
104
|
-
`;
|
|
105
|
-
}
|
|
106
|
-
// Data templates
|
|
107
|
-
get iconRightTemplate() {
|
|
108
|
-
var _a, _b;
|
|
105
|
+
`;
|
|
106
|
+
}
|
|
107
|
+
// Data templates
|
|
108
|
+
get iconRightTemplate() {
|
|
109
|
+
var _a, _b;
|
|
109
110
|
return html `
|
|
110
111
|
<div id="icon-right">
|
|
111
112
|
<mediatype-icon
|
|
@@ -114,204 +115,204 @@ let TileList = class TileList extends LitElement {
|
|
|
114
115
|
>
|
|
115
116
|
</mediatype-icon>
|
|
116
117
|
</div>
|
|
117
|
-
`;
|
|
118
|
-
}
|
|
119
|
-
get titleTemplate() {
|
|
120
|
-
var _a;
|
|
121
|
-
if (!((_a = this.model) === null || _a === void 0 ? void 0 : _a.title)) {
|
|
122
|
-
return nothing;
|
|
123
|
-
}
|
|
124
|
-
return html ` ${this.detailsLink(this.model.identifier, this.model.title)} `;
|
|
125
|
-
}
|
|
126
|
-
get itemLineTemplate() {
|
|
127
|
-
const source = this.sourceTemplate;
|
|
128
|
-
const volume = this.volumeTemplate;
|
|
129
|
-
const issue = this.issueTemplate;
|
|
130
|
-
if (!source && !volume && !issue) {
|
|
131
|
-
return nothing;
|
|
132
|
-
}
|
|
133
|
-
return html ` <div id="item-line">${source} ${volume} ${issue}</div> `;
|
|
134
|
-
}
|
|
135
|
-
get sourceTemplate() {
|
|
136
|
-
var _a;
|
|
137
|
-
if (!((_a = this.model) === null || _a === void 0 ? void 0 : _a.source)) {
|
|
138
|
-
return nothing;
|
|
139
|
-
}
|
|
118
|
+
`;
|
|
119
|
+
}
|
|
120
|
+
get titleTemplate() {
|
|
121
|
+
var _a;
|
|
122
|
+
if (!((_a = this.model) === null || _a === void 0 ? void 0 : _a.title)) {
|
|
123
|
+
return nothing;
|
|
124
|
+
}
|
|
125
|
+
return html ` ${this.detailsLink(this.model.identifier, this.model.title)} `;
|
|
126
|
+
}
|
|
127
|
+
get itemLineTemplate() {
|
|
128
|
+
const source = this.sourceTemplate;
|
|
129
|
+
const volume = this.volumeTemplate;
|
|
130
|
+
const issue = this.issueTemplate;
|
|
131
|
+
if (!source && !volume && !issue) {
|
|
132
|
+
return nothing;
|
|
133
|
+
}
|
|
134
|
+
return html ` <div id="item-line">${source} ${volume} ${issue}</div> `;
|
|
135
|
+
}
|
|
136
|
+
get sourceTemplate() {
|
|
137
|
+
var _a;
|
|
138
|
+
if (!((_a = this.model) === null || _a === void 0 ? void 0 : _a.source)) {
|
|
139
|
+
return nothing;
|
|
140
|
+
}
|
|
140
141
|
return html `
|
|
141
142
|
<div id="source" class="metadata">
|
|
142
143
|
${this.labelTemplate('Source')}
|
|
143
144
|
${this.searchLink('source', this.model.source)}
|
|
144
145
|
</div>
|
|
145
|
-
`;
|
|
146
|
-
}
|
|
147
|
-
get volumeTemplate() {
|
|
148
|
-
var _a;
|
|
149
|
-
return this.metadataTemplate((_a = this.model) === null || _a === void 0 ? void 0 : _a.volume, 'Volume');
|
|
150
|
-
}
|
|
151
|
-
get issueTemplate() {
|
|
152
|
-
var _a;
|
|
153
|
-
return this.metadataTemplate((_a = this.model) === null || _a === void 0 ? void 0 : _a.issue, 'Issue');
|
|
154
|
-
}
|
|
155
|
-
get creatorTemplate() {
|
|
156
|
-
var _a, _b, _c;
|
|
157
|
-
// "Achivist since" if account
|
|
158
|
-
if (((_a = this.model) === null || _a === void 0 ? void 0 : _a.mediatype) === 'account') {
|
|
146
|
+
`;
|
|
147
|
+
}
|
|
148
|
+
get volumeTemplate() {
|
|
149
|
+
var _a;
|
|
150
|
+
return this.metadataTemplate((_a = this.model) === null || _a === void 0 ? void 0 : _a.volume, 'Volume');
|
|
151
|
+
}
|
|
152
|
+
get issueTemplate() {
|
|
153
|
+
var _a;
|
|
154
|
+
return this.metadataTemplate((_a = this.model) === null || _a === void 0 ? void 0 : _a.issue, 'Issue');
|
|
155
|
+
}
|
|
156
|
+
get creatorTemplate() {
|
|
157
|
+
var _a, _b, _c;
|
|
158
|
+
// "Achivist since" if account
|
|
159
|
+
if (((_a = this.model) === null || _a === void 0 ? void 0 : _a.mediatype) === 'account') {
|
|
159
160
|
return html `
|
|
160
161
|
<div id="creator" class="metadata">
|
|
161
162
|
<span class="label"> ${accountLabel((_b = this.model) === null || _b === void 0 ? void 0 : _b.dateAdded)} </span>
|
|
162
163
|
</div>
|
|
163
|
-
`;
|
|
164
|
-
}
|
|
165
|
-
// "Creator" if not account tile
|
|
166
|
-
if (!((_c = this.model) === null || _c === void 0 ? void 0 : _c.creators) || this.model.creators.length === 0) {
|
|
167
|
-
return nothing;
|
|
168
|
-
}
|
|
164
|
+
`;
|
|
165
|
+
}
|
|
166
|
+
// "Creator" if not account tile
|
|
167
|
+
if (!((_c = this.model) === null || _c === void 0 ? void 0 : _c.creators) || this.model.creators.length === 0) {
|
|
168
|
+
return nothing;
|
|
169
|
+
}
|
|
169
170
|
return html `
|
|
170
171
|
<div id="creator" class="metadata">
|
|
171
172
|
${this.labelTemplate('By')}
|
|
172
173
|
${join(map(this.model.creators, id => this.searchLink('creator', id)), html `, `)}
|
|
173
174
|
</div>
|
|
174
|
-
`;
|
|
175
|
-
}
|
|
176
|
-
get datePublishedTemplate() {
|
|
177
|
-
var _a;
|
|
178
|
-
return this.metadataTemplate(formatDate((_a = this.model) === null || _a === void 0 ? void 0 : _a.datePublished, 'long'), 'Published');
|
|
179
|
-
}
|
|
180
|
-
// Show date label/value when sorted by date type
|
|
181
|
-
// Except datePublished which is always shown
|
|
182
|
-
get dateSortByTemplate() {
|
|
183
|
-
if (this.sortParam &&
|
|
184
|
-
(this.sortParam.field === 'addeddate' ||
|
|
185
|
-
this.sortParam.field === 'reviewdate' ||
|
|
186
|
-
this.sortParam.field === 'publicdate')) {
|
|
187
|
-
return this.metadataTemplate(formatDate(this.date, 'long'), dateLabel(this.sortParam.field));
|
|
188
|
-
}
|
|
189
|
-
return nothing;
|
|
190
|
-
}
|
|
191
|
-
get viewsTemplate() {
|
|
192
|
-
var _a, _b;
|
|
193
|
-
return this.metadataTemplate(`${formatCount((_b = (_a = this.model) === null || _a === void 0 ? void 0 : _a.viewCount) !== null && _b !== void 0 ? _b : 0, this.formatSize)}`, 'Views');
|
|
194
|
-
}
|
|
195
|
-
get ratingTemplate() {
|
|
196
|
-
var _a;
|
|
197
|
-
return this.metadataTemplate((_a = this.model) === null || _a === void 0 ? void 0 : _a.averageRating, 'Avg Rating');
|
|
198
|
-
}
|
|
199
|
-
get reviewsTemplate() {
|
|
200
|
-
var _a;
|
|
201
|
-
return this.metadataTemplate((_a = this.model) === null || _a === void 0 ? void 0 : _a.commentCount, 'Reviews');
|
|
202
|
-
}
|
|
203
|
-
get topicsTemplate() {
|
|
204
|
-
var _a;
|
|
205
|
-
if (!((_a = this.model) === null || _a === void 0 ? void 0 : _a.subjects) || this.model.subjects.length === 0) {
|
|
206
|
-
return nothing;
|
|
207
|
-
}
|
|
175
|
+
`;
|
|
176
|
+
}
|
|
177
|
+
get datePublishedTemplate() {
|
|
178
|
+
var _a;
|
|
179
|
+
return this.metadataTemplate(formatDate((_a = this.model) === null || _a === void 0 ? void 0 : _a.datePublished, 'long'), 'Published');
|
|
180
|
+
}
|
|
181
|
+
// Show date label/value when sorted by date type
|
|
182
|
+
// Except datePublished which is always shown
|
|
183
|
+
get dateSortByTemplate() {
|
|
184
|
+
if (this.sortParam &&
|
|
185
|
+
(this.sortParam.field === 'addeddate' ||
|
|
186
|
+
this.sortParam.field === 'reviewdate' ||
|
|
187
|
+
this.sortParam.field === 'publicdate')) {
|
|
188
|
+
return this.metadataTemplate(formatDate(this.date, 'long'), dateLabel(this.sortParam.field));
|
|
189
|
+
}
|
|
190
|
+
return nothing;
|
|
191
|
+
}
|
|
192
|
+
get viewsTemplate() {
|
|
193
|
+
var _a, _b;
|
|
194
|
+
return this.metadataTemplate(`${formatCount((_b = (_a = this.model) === null || _a === void 0 ? void 0 : _a.viewCount) !== null && _b !== void 0 ? _b : 0, this.formatSize)}`, 'Views');
|
|
195
|
+
}
|
|
196
|
+
get ratingTemplate() {
|
|
197
|
+
var _a;
|
|
198
|
+
return this.metadataTemplate((_a = this.model) === null || _a === void 0 ? void 0 : _a.averageRating, 'Avg Rating');
|
|
199
|
+
}
|
|
200
|
+
get reviewsTemplate() {
|
|
201
|
+
var _a;
|
|
202
|
+
return this.metadataTemplate((_a = this.model) === null || _a === void 0 ? void 0 : _a.commentCount, 'Reviews');
|
|
203
|
+
}
|
|
204
|
+
get topicsTemplate() {
|
|
205
|
+
var _a;
|
|
206
|
+
if (!((_a = this.model) === null || _a === void 0 ? void 0 : _a.subjects) || this.model.subjects.length === 0) {
|
|
207
|
+
return nothing;
|
|
208
|
+
}
|
|
208
209
|
return html `
|
|
209
210
|
<div id="topics" class="metadata">
|
|
210
211
|
${this.labelTemplate('Topics')}
|
|
211
212
|
${join(map(this.model.subjects, id => this.searchLink('subject', id)), html `, `)}
|
|
212
213
|
</div>
|
|
213
|
-
`;
|
|
214
|
-
}
|
|
215
|
-
get collectionsTemplate() {
|
|
216
|
-
if (!this.collectionLinks || this.collectionLinks.length === 0) {
|
|
217
|
-
return nothing;
|
|
218
|
-
}
|
|
214
|
+
`;
|
|
215
|
+
}
|
|
216
|
+
get collectionsTemplate() {
|
|
217
|
+
if (!this.collectionLinks || this.collectionLinks.length === 0) {
|
|
218
|
+
return nothing;
|
|
219
|
+
}
|
|
219
220
|
return html `
|
|
220
221
|
<div id="collections" class="metadata">
|
|
221
222
|
${this.labelTemplate('Collections')}
|
|
222
223
|
${join(this.collectionLinks, html `, `)}
|
|
223
224
|
</div>
|
|
224
|
-
`;
|
|
225
|
-
}
|
|
226
|
-
get descriptionTemplate() {
|
|
227
|
-
var _a, _b;
|
|
228
|
-
return this.metadataTemplate(DOMPurify.sanitize((_b = (_a = this.model) === null || _a === void 0 ? void 0 : _a.description) !== null && _b !== void 0 ? _b : ''), '', 'description');
|
|
229
|
-
}
|
|
230
|
-
get textSnippetsTemplate() {
|
|
231
|
-
var _a;
|
|
232
|
-
if (!this.hasSnippets)
|
|
233
|
-
return nothing;
|
|
225
|
+
`;
|
|
226
|
+
}
|
|
227
|
+
get descriptionTemplate() {
|
|
228
|
+
var _a, _b;
|
|
229
|
+
return this.metadataTemplate(DOMPurify.sanitize((_b = (_a = this.model) === null || _a === void 0 ? void 0 : _a.description) !== null && _b !== void 0 ? _b : ''), '', 'description');
|
|
230
|
+
}
|
|
231
|
+
get textSnippetsTemplate() {
|
|
232
|
+
var _a;
|
|
233
|
+
if (!this.hasSnippets)
|
|
234
|
+
return nothing;
|
|
234
235
|
return html `<text-snippet-block
|
|
235
236
|
viewsize="list"
|
|
236
237
|
.snippets=${(_a = this.model) === null || _a === void 0 ? void 0 : _a.snippets}
|
|
237
|
-
></text-snippet-block>`;
|
|
238
|
-
}
|
|
239
|
-
get hasSnippets() {
|
|
240
|
-
var _a, _b;
|
|
241
|
-
return !!((_b = (_a = this.model) === null || _a === void 0 ? void 0 : _a.snippets) === null || _b === void 0 ? void 0 : _b.length);
|
|
242
|
-
}
|
|
243
|
-
// Utility functions
|
|
244
|
-
// eslint-disable-next-line default-param-last
|
|
245
|
-
metadataTemplate(text, label = '', id) {
|
|
246
|
-
if (!text)
|
|
247
|
-
return nothing;
|
|
238
|
+
></text-snippet-block>`;
|
|
239
|
+
}
|
|
240
|
+
get hasSnippets() {
|
|
241
|
+
var _a, _b;
|
|
242
|
+
return !!((_b = (_a = this.model) === null || _a === void 0 ? void 0 : _a.snippets) === null || _b === void 0 ? void 0 : _b.length);
|
|
243
|
+
}
|
|
244
|
+
// Utility functions
|
|
245
|
+
// eslint-disable-next-line default-param-last
|
|
246
|
+
metadataTemplate(text, label = '', id) {
|
|
247
|
+
if (!text)
|
|
248
|
+
return nothing;
|
|
248
249
|
return html `
|
|
249
250
|
<div id=${ifDefined(id)} class="metadata">
|
|
250
251
|
${this.labelTemplate(label)} ${text}
|
|
251
252
|
</div>
|
|
252
|
-
`;
|
|
253
|
-
}
|
|
254
|
-
labelTemplate(label) {
|
|
255
|
-
return html ` ${label
|
|
256
|
-
? html `<span class="label">${label}: </span>`
|
|
257
|
-
: nothing}`;
|
|
258
|
-
}
|
|
259
|
-
searchLink(field, searchTerm) {
|
|
260
|
-
if (!field || !searchTerm) {
|
|
261
|
-
return nothing;
|
|
262
|
-
}
|
|
263
|
-
const query = encodeURIComponent(`${field}:"${searchTerm}"`);
|
|
264
|
-
// No whitespace after closing tag
|
|
265
|
-
// Note: single ' for href='' to wrap " in query var gets changed back by yarn format
|
|
266
|
-
// eslint-disable-next-line lit/no-invalid-html
|
|
253
|
+
`;
|
|
254
|
+
}
|
|
255
|
+
labelTemplate(label) {
|
|
256
|
+
return html ` ${label
|
|
257
|
+
? html `<span class="label">${label}: </span>`
|
|
258
|
+
: nothing}`;
|
|
259
|
+
}
|
|
260
|
+
searchLink(field, searchTerm) {
|
|
261
|
+
if (!field || !searchTerm) {
|
|
262
|
+
return nothing;
|
|
263
|
+
}
|
|
264
|
+
const query = encodeURIComponent(`${field}:"${searchTerm}"`);
|
|
265
|
+
// No whitespace after closing tag
|
|
266
|
+
// Note: single ' for href='' to wrap " in query var gets changed back by yarn format
|
|
267
|
+
// eslint-disable-next-line lit/no-invalid-html
|
|
267
268
|
return html `<a href="${this.baseNavigationUrl}/search.php?query=${query}">
|
|
268
269
|
${DOMPurify.sanitize(searchTerm)}</a
|
|
269
|
-
>`;
|
|
270
|
-
}
|
|
271
|
-
detailsLink(identifier, text) {
|
|
272
|
-
const linkText = text !== null && text !== void 0 ? text : identifier;
|
|
273
|
-
// No whitespace after closing tag
|
|
274
|
-
// identifiers (all ASCII in their creation) should be safe to use in href, but sanitize anyway
|
|
270
|
+
>`;
|
|
271
|
+
}
|
|
272
|
+
detailsLink(identifier, text) {
|
|
273
|
+
const linkText = text !== null && text !== void 0 ? text : identifier;
|
|
274
|
+
// No whitespace after closing tag
|
|
275
|
+
// identifiers (all ASCII in their creation) should be safe to use in href, but sanitize anyway
|
|
275
276
|
return html `<a
|
|
276
277
|
href="${this.baseNavigationUrl}/details/${encodeURI(identifier)}"
|
|
277
278
|
>${DOMPurify.sanitize(linkText)}</a
|
|
278
|
-
>`;
|
|
279
|
-
}
|
|
280
|
-
/*
|
|
281
|
-
* TODO: fix field names to match model in src/collection-browser.ts
|
|
282
|
-
* private get dateSortSelector()
|
|
283
|
-
* @see src/models.ts
|
|
284
|
-
*/
|
|
285
|
-
get date() {
|
|
286
|
-
var _a, _b, _c, _d, _e;
|
|
287
|
-
switch ((_a = this.sortParam) === null || _a === void 0 ? void 0 : _a.field) {
|
|
288
|
-
case 'date':
|
|
289
|
-
return (_b = this.model) === null || _b === void 0 ? void 0 : _b.datePublished;
|
|
290
|
-
case 'reviewdate':
|
|
291
|
-
return (_c = this.model) === null || _c === void 0 ? void 0 : _c.dateReviewed;
|
|
292
|
-
case 'addeddate':
|
|
293
|
-
return (_d = this.model) === null || _d === void 0 ? void 0 : _d.dateAdded;
|
|
294
|
-
default:
|
|
295
|
-
return (_e = this.model) === null || _e === void 0 ? void 0 : _e.dateArchived; // publicdate
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
get classSize() {
|
|
299
|
-
if (this.mobileBreakpoint &&
|
|
300
|
-
this.currentWidth &&
|
|
301
|
-
this.currentWidth < this.mobileBreakpoint) {
|
|
302
|
-
return 'mobile';
|
|
303
|
-
}
|
|
304
|
-
return 'desktop';
|
|
305
|
-
}
|
|
306
|
-
get formatSize() {
|
|
307
|
-
if (this.mobileBreakpoint &&
|
|
308
|
-
this.currentWidth &&
|
|
309
|
-
this.currentWidth < this.mobileBreakpoint) {
|
|
310
|
-
return 'short';
|
|
311
|
-
}
|
|
312
|
-
return 'long';
|
|
313
|
-
}
|
|
314
|
-
static get styles() {
|
|
279
|
+
>`;
|
|
280
|
+
}
|
|
281
|
+
/*
|
|
282
|
+
* TODO: fix field names to match model in src/collection-browser.ts
|
|
283
|
+
* private get dateSortSelector()
|
|
284
|
+
* @see src/models.ts
|
|
285
|
+
*/
|
|
286
|
+
get date() {
|
|
287
|
+
var _a, _b, _c, _d, _e;
|
|
288
|
+
switch ((_a = this.sortParam) === null || _a === void 0 ? void 0 : _a.field) {
|
|
289
|
+
case 'date':
|
|
290
|
+
return (_b = this.model) === null || _b === void 0 ? void 0 : _b.datePublished;
|
|
291
|
+
case 'reviewdate':
|
|
292
|
+
return (_c = this.model) === null || _c === void 0 ? void 0 : _c.dateReviewed;
|
|
293
|
+
case 'addeddate':
|
|
294
|
+
return (_d = this.model) === null || _d === void 0 ? void 0 : _d.dateAdded;
|
|
295
|
+
default:
|
|
296
|
+
return (_e = this.model) === null || _e === void 0 ? void 0 : _e.dateArchived; // publicdate
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
get classSize() {
|
|
300
|
+
if (this.mobileBreakpoint &&
|
|
301
|
+
this.currentWidth &&
|
|
302
|
+
this.currentWidth < this.mobileBreakpoint) {
|
|
303
|
+
return 'mobile';
|
|
304
|
+
}
|
|
305
|
+
return 'desktop';
|
|
306
|
+
}
|
|
307
|
+
get formatSize() {
|
|
308
|
+
if (this.mobileBreakpoint &&
|
|
309
|
+
this.currentWidth &&
|
|
310
|
+
this.currentWidth < this.mobileBreakpoint) {
|
|
311
|
+
return 'short';
|
|
312
|
+
}
|
|
313
|
+
return 'long';
|
|
314
|
+
}
|
|
315
|
+
static get styles() {
|
|
315
316
|
return css `
|
|
316
317
|
html {
|
|
317
318
|
font-size: unset;
|
|
@@ -429,41 +430,41 @@ let TileList = class TileList extends LitElement {
|
|
|
429
430
|
flex-direction: row;
|
|
430
431
|
gap: 10px;
|
|
431
432
|
}
|
|
432
|
-
`;
|
|
433
|
-
}
|
|
434
|
-
};
|
|
435
|
-
__decorate([
|
|
436
|
-
property({ type: Object })
|
|
437
|
-
], TileList.prototype, "model", void 0);
|
|
438
|
-
__decorate([
|
|
439
|
-
property({ type: String })
|
|
440
|
-
], TileList.prototype, "baseNavigationUrl", void 0);
|
|
441
|
-
__decorate([
|
|
442
|
-
property({ type: Object })
|
|
443
|
-
], TileList.prototype, "collectionNameCache", void 0);
|
|
444
|
-
__decorate([
|
|
445
|
-
property({ type: Number })
|
|
446
|
-
], TileList.prototype, "currentWidth", void 0);
|
|
447
|
-
__decorate([
|
|
448
|
-
property({ type: Number })
|
|
449
|
-
], TileList.prototype, "currentHeight", void 0);
|
|
450
|
-
__decorate([
|
|
451
|
-
property({ type: Object })
|
|
452
|
-
], TileList.prototype, "sortParam", void 0);
|
|
453
|
-
__decorate([
|
|
454
|
-
property({ type: Number })
|
|
455
|
-
], TileList.prototype, "mobileBreakpoint", void 0);
|
|
456
|
-
__decorate([
|
|
457
|
-
state()
|
|
458
|
-
], TileList.prototype, "collectionLinks", void 0);
|
|
459
|
-
__decorate([
|
|
460
|
-
property({ type: String })
|
|
461
|
-
], TileList.prototype, "baseImageUrl", void 0);
|
|
462
|
-
__decorate([
|
|
463
|
-
property({ type: Boolean })
|
|
464
|
-
], TileList.prototype, "loggedIn", void 0);
|
|
465
|
-
TileList = __decorate([
|
|
466
|
-
customElement('tile-list')
|
|
467
|
-
], TileList);
|
|
468
|
-
export { TileList };
|
|
433
|
+
`;
|
|
434
|
+
}
|
|
435
|
+
};
|
|
436
|
+
__decorate([
|
|
437
|
+
property({ type: Object })
|
|
438
|
+
], TileList.prototype, "model", void 0);
|
|
439
|
+
__decorate([
|
|
440
|
+
property({ type: String })
|
|
441
|
+
], TileList.prototype, "baseNavigationUrl", void 0);
|
|
442
|
+
__decorate([
|
|
443
|
+
property({ type: Object })
|
|
444
|
+
], TileList.prototype, "collectionNameCache", void 0);
|
|
445
|
+
__decorate([
|
|
446
|
+
property({ type: Number })
|
|
447
|
+
], TileList.prototype, "currentWidth", void 0);
|
|
448
|
+
__decorate([
|
|
449
|
+
property({ type: Number })
|
|
450
|
+
], TileList.prototype, "currentHeight", void 0);
|
|
451
|
+
__decorate([
|
|
452
|
+
property({ type: Object })
|
|
453
|
+
], TileList.prototype, "sortParam", void 0);
|
|
454
|
+
__decorate([
|
|
455
|
+
property({ type: Number })
|
|
456
|
+
], TileList.prototype, "mobileBreakpoint", void 0);
|
|
457
|
+
__decorate([
|
|
458
|
+
state()
|
|
459
|
+
], TileList.prototype, "collectionLinks", void 0);
|
|
460
|
+
__decorate([
|
|
461
|
+
property({ type: String })
|
|
462
|
+
], TileList.prototype, "baseImageUrl", void 0);
|
|
463
|
+
__decorate([
|
|
464
|
+
property({ type: Boolean })
|
|
465
|
+
], TileList.prototype, "loggedIn", void 0);
|
|
466
|
+
TileList = __decorate([
|
|
467
|
+
customElement('tile-list')
|
|
468
|
+
], TileList);
|
|
469
|
+
export { TileList };
|
|
469
470
|
//# sourceMappingURL=tile-list.js.map
|