@internetarchive/collection-browser 0.2.15 → 0.2.16-alpha1
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/dist/index.d.ts +9 -0
- package/dist/index.js.map +1 -0
- package/dist/src/app-root.d.ts +33 -0
- package/dist/src/app-root.js +312 -0
- package/dist/src/app-root.js.map +1 -0
- package/dist/src/assets/img/icons/arrow-left.d.ts +2 -0
- package/dist/src/assets/img/icons/arrow-left.js +10 -0
- package/dist/src/assets/img/icons/arrow-left.js.map +1 -0
- package/dist/src/assets/img/icons/arrow-right.d.ts +2 -0
- package/dist/src/assets/img/icons/arrow-right.js +10 -0
- package/dist/src/assets/img/icons/arrow-right.js.map +1 -0
- package/dist/src/assets/img/icons/chevron.d.ts +2 -0
- package/dist/src/assets/img/icons/chevron.js +4 -0
- package/dist/src/assets/img/icons/chevron.js.map +1 -0
- package/dist/src/assets/img/icons/empty-query.d.ts +2 -0
- package/dist/src/assets/img/icons/empty-query.js +5 -0
- package/dist/src/assets/img/icons/empty-query.js.map +1 -0
- package/dist/src/assets/img/icons/eye-closed.d.ts +2 -0
- package/dist/src/assets/img/icons/eye-closed.js +5 -0
- package/dist/src/assets/img/icons/eye-closed.js.map +1 -0
- package/dist/src/assets/img/icons/eye.d.ts +2 -0
- package/dist/src/assets/img/icons/eye.js +5 -0
- package/dist/src/assets/img/icons/eye.js.map +1 -0
- package/dist/src/assets/img/icons/favorite-filled.d.ts +1 -0
- package/dist/src/assets/img/icons/favorite-filled.js +11 -0
- package/dist/src/assets/img/icons/favorite-filled.js.map +1 -0
- package/dist/src/assets/img/icons/login-required.d.ts +1 -0
- package/dist/src/assets/img/icons/login-required.js +30 -0
- package/dist/src/assets/img/icons/login-required.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -0
- package/dist/src/assets/img/icons/mediatype/account.js +14 -0
- package/dist/src/assets/img/icons/mediatype/account.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/audio.d.ts +1 -0
- package/dist/src/assets/img/icons/mediatype/audio.js +14 -0
- package/dist/src/assets/img/icons/mediatype/audio.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/collection.d.ts +1 -0
- package/dist/src/assets/img/icons/mediatype/collection.js +12 -0
- package/dist/src/assets/img/icons/mediatype/collection.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -0
- package/dist/src/assets/img/icons/mediatype/data.js +15 -0
- package/dist/src/assets/img/icons/mediatype/data.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/etree.d.ts +1 -0
- package/dist/src/assets/img/icons/mediatype/etree.js +14 -0
- package/dist/src/assets/img/icons/mediatype/etree.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/film.d.ts +1 -0
- package/dist/src/assets/img/icons/mediatype/film.js +14 -0
- package/dist/src/assets/img/icons/mediatype/film.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/images.d.ts +1 -0
- package/dist/src/assets/img/icons/mediatype/images.js +13 -0
- package/dist/src/assets/img/icons/mediatype/images.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -0
- package/dist/src/assets/img/icons/mediatype/radio.js +15 -0
- package/dist/src/assets/img/icons/mediatype/radio.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/software.d.ts +1 -0
- package/dist/src/assets/img/icons/mediatype/software.js +13 -0
- package/dist/src/assets/img/icons/mediatype/software.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/texts.d.ts +1 -0
- package/dist/src/assets/img/icons/mediatype/texts.js +13 -0
- package/dist/src/assets/img/icons/mediatype/texts.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/tv.d.ts +1 -0
- package/dist/src/assets/img/icons/mediatype/tv.js +14 -0
- package/dist/src/assets/img/icons/mediatype/tv.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/video.d.ts +1 -0
- package/dist/src/assets/img/icons/mediatype/video.js +14 -0
- package/dist/src/assets/img/icons/mediatype/video.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/web.d.ts +1 -0
- package/dist/src/assets/img/icons/mediatype/web.js +13 -0
- package/dist/src/assets/img/icons/mediatype/web.js.map +1 -0
- package/dist/src/assets/img/icons/null-result.d.ts +2 -0
- package/dist/src/assets/img/icons/null-result.js +5 -0
- package/dist/src/assets/img/icons/null-result.js.map +1 -0
- package/dist/src/assets/img/icons/restricted.d.ts +1 -0
- package/dist/src/assets/img/icons/restricted.js +29 -0
- package/dist/src/assets/img/icons/restricted.js.map +1 -0
- package/dist/src/assets/img/icons/reviews.d.ts +1 -0
- package/dist/src/assets/img/icons/reviews.js +11 -0
- package/dist/src/assets/img/icons/reviews.js.map +1 -0
- package/dist/src/assets/img/icons/upload.d.ts +1 -0
- package/dist/src/assets/img/icons/upload.js +12 -0
- package/dist/src/assets/img/icons/upload.js.map +1 -0
- package/dist/src/assets/img/icons/views.d.ts +1 -0
- package/dist/src/assets/img/icons/views.js +11 -0
- package/dist/src/assets/img/icons/views.js.map +1 -0
- package/dist/src/circular-activity-indicator.d.ts +5 -0
- package/dist/src/circular-activity-indicator.js +66 -0
- package/dist/src/circular-activity-indicator.js.map +1 -0
- package/dist/src/collection-browser.d.ts +216 -0
- package/dist/src/collection-browser.js +1249 -0
- package/dist/src/collection-browser.js.map +1 -0
- package/dist/src/collection-facets/more-facets-content.d.ts +56 -0
- package/dist/src/collection-facets/more-facets-content.js +374 -0
- package/dist/src/collection-facets/more-facets-content.js.map +1 -0
- package/dist/src/collection-facets/more-facets-pagination.d.ts +27 -0
- package/dist/src/collection-facets/more-facets-pagination.js +193 -0
- package/dist/src/collection-facets/more-facets-pagination.js.map +1 -0
- package/dist/src/collection-facets.d.ts +80 -0
- package/dist/src/collection-facets.js +662 -0
- package/dist/src/collection-facets.js.map +1 -0
- package/dist/src/empty-placeholder.d.ts +11 -0
- package/dist/src/empty-placeholder.js +83 -0
- package/dist/src/empty-placeholder.js.map +1 -0
- package/dist/src/language-code-handler/language-code-handler.d.ts +37 -0
- package/dist/src/language-code-handler/language-code-handler.js +27 -0
- package/dist/src/language-code-handler/language-code-handler.js.map +1 -0
- package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -0
- package/dist/src/language-code-handler/language-code-mapping.js +563 -0
- package/dist/src/language-code-handler/language-code-mapping.js.map +1 -0
- package/dist/src/mediatype/mediatype-config.d.ts +3 -0
- package/dist/src/mediatype/mediatype-config.js +86 -0
- package/dist/src/mediatype/mediatype-config.js.map +1 -0
- package/dist/src/models.d.ts +85 -0
- package/dist/src/models.js +62 -0
- package/dist/src/models.js.map +1 -0
- package/dist/src/restoration-state-handler.d.ts +38 -0
- package/dist/src/restoration-state-handler.js +204 -0
- package/dist/src/restoration-state-handler.js.map +1 -0
- package/dist/src/sort-filter-bar/alpha-bar.d.ts +9 -0
- package/dist/src/sort-filter-bar/alpha-bar.js +98 -0
- package/dist/src/sort-filter-bar/alpha-bar.js.map +1 -0
- package/dist/src/sort-filter-bar/img/compact.d.ts +1 -0
- package/dist/src/sort-filter-bar/img/compact.js +5 -0
- package/dist/src/sort-filter-bar/img/compact.js.map +1 -0
- package/dist/src/sort-filter-bar/img/list.d.ts +1 -0
- package/dist/src/sort-filter-bar/img/list.js +5 -0
- package/dist/src/sort-filter-bar/img/list.js.map +1 -0
- package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -0
- package/dist/src/sort-filter-bar/img/sort-triangle.js +5 -0
- package/dist/src/sort-filter-bar/img/sort-triangle.js.map +1 -0
- package/dist/src/sort-filter-bar/img/tile.d.ts +1 -0
- package/dist/src/sort-filter-bar/img/tile.js +5 -0
- package/dist/src/sort-filter-bar/img/tile.js.map +1 -0
- package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +107 -0
- package/dist/src/sort-filter-bar/sort-filter-bar.js +782 -0
- package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -0
- package/dist/src/styles/item-image-styles.d.ts +8 -0
- package/dist/src/styles/item-image-styles.js +102 -0
- package/dist/src/styles/item-image-styles.js.map +1 -0
- package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -0
- package/dist/src/tiles/collection-browser-loading-tile.js +32 -0
- package/dist/src/tiles/collection-browser-loading-tile.js.map +1 -0
- package/dist/src/tiles/grid/account-tile.d.ts +8 -0
- package/dist/src/tiles/grid/account-tile.js +126 -0
- package/dist/src/tiles/grid/account-tile.js.map +1 -0
- package/dist/src/tiles/grid/collection-tile.d.ts +7 -0
- package/dist/src/tiles/grid/collection-tile.js +159 -0
- package/dist/src/tiles/grid/collection-tile.js.map +1 -0
- package/dist/src/tiles/grid/item-tile.d.ts +21 -0
- package/dist/src/tiles/grid/item-tile.js +183 -0
- package/dist/src/tiles/grid/item-tile.js.map +1 -0
- package/dist/src/tiles/grid/tile-stats.d.ts +10 -0
- package/dist/src/tiles/grid/tile-stats.js +134 -0
- package/dist/src/tiles/grid/tile-stats.js.map +1 -0
- package/dist/src/tiles/image-block.d.ts +17 -0
- package/dist/src/tiles/image-block.js +136 -0
- package/dist/src/tiles/image-block.js.map +1 -0
- package/dist/src/tiles/item-image.d.ts +31 -0
- package/dist/src/tiles/item-image.js +118 -0
- package/dist/src/tiles/item-image.js.map +1 -0
- package/dist/src/tiles/list/account-label.d.ts +1 -0
- package/dist/src/tiles/list/account-label.js +7 -0
- package/dist/src/tiles/list/account-label.js.map +1 -0
- package/dist/src/tiles/list/date-label.d.ts +1 -0
- package/dist/src/tiles/list/date-label.js +13 -0
- package/dist/src/tiles/list/date-label.js.map +1 -0
- package/dist/src/tiles/list/tile-list-compact-header.d.ts +12 -0
- package/dist/src/tiles/list/tile-list-compact-header.js +84 -0
- package/dist/src/tiles/list/tile-list-compact-header.js.map +1 -0
- package/dist/src/tiles/list/tile-list-compact.d.ts +20 -0
- package/dist/src/tiles/list/tile-list-compact.js +180 -0
- package/dist/src/tiles/list/tile-list-compact.js.map +1 -0
- package/dist/src/tiles/list/tile-list.d.ts +48 -0
- package/dist/src/tiles/list/tile-list.js +455 -0
- package/dist/src/tiles/list/tile-list.js.map +1 -0
- package/dist/src/tiles/mediatype-icon.d.ts +9 -0
- package/dist/src/tiles/mediatype-icon.js +82 -0
- package/dist/src/tiles/mediatype-icon.js.map +1 -0
- package/dist/src/tiles/overlay/icon-overlay.d.ts +7 -0
- package/dist/src/tiles/overlay/icon-overlay.js +43 -0
- package/dist/src/tiles/overlay/icon-overlay.js.map +1 -0
- package/dist/src/tiles/overlay/text-overlay.d.ts +8 -0
- package/dist/src/tiles/overlay/text-overlay.js +57 -0
- package/dist/src/tiles/overlay/text-overlay.js.map +1 -0
- package/dist/src/tiles/tile-dispatcher.d.ts +36 -0
- package/dist/src/tiles/tile-dispatcher.js +215 -0
- package/dist/src/tiles/tile-dispatcher.js.map +1 -0
- package/dist/src/utils/format-count.d.ts +7 -0
- package/dist/src/utils/format-count.js +76 -0
- package/dist/src/utils/format-count.js.map +1 -0
- package/dist/src/utils/format-date.d.ts +2 -0
- package/dist/src/utils/format-date.js +24 -0
- package/dist/src/utils/format-date.js.map +1 -0
- package/dist/test/collection-browser.test.d.ts +1 -0
- package/dist/test/collection-browser.test.js +82 -0
- package/dist/test/collection-browser.test.js.map +1 -0
- package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -0
- package/dist/test/collection-facets/more-facets-content.test.js +75 -0
- package/dist/test/collection-facets/more-facets-content.test.js.map +1 -0
- package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -0
- package/dist/test/collection-facets/more-facets-pagination.test.js +38 -0
- package/dist/test/collection-facets/more-facets-pagination.test.js.map +1 -0
- package/dist/test/empty-placeholder.test.d.ts +1 -0
- package/dist/test/empty-placeholder.test.js +34 -0
- package/dist/test/empty-placeholder.test.js.map +1 -0
- package/dist/test/icon-overlay.test.d.ts +1 -0
- package/dist/test/icon-overlay.test.js +31 -0
- package/dist/test/icon-overlay.test.js.map +1 -0
- package/dist/test/item-image.test.d.ts +1 -0
- package/dist/test/item-image.test.js +73 -0
- package/dist/test/item-image.test.js.map +1 -0
- package/dist/test/mediatype-config.test.d.ts +1 -0
- package/dist/test/mediatype-config.test.js +17 -0
- package/dist/test/mediatype-config.test.js.map +1 -0
- package/dist/test/mocks/mock-collection-name-cache.d.ts +7 -0
- package/dist/test/mocks/mock-collection-name-cache.js +14 -0
- package/dist/test/mocks/mock-collection-name-cache.js.map +1 -0
- package/dist/test/mocks/mock-search-responses.d.ts +3 -0
- package/dist/test/mocks/mock-search-responses.js +45 -0
- package/dist/test/mocks/mock-search-responses.js.map +1 -0
- package/dist/test/mocks/mock-search-service.d.ts +8 -0
- package/dist/test/mocks/mock-search-service.js +16 -0
- package/dist/test/mocks/mock-search-service.js.map +1 -0
- package/dist/test/sort-filter-bar/sort-filter-bar.test.d.ts +1 -0
- package/dist/test/sort-filter-bar/sort-filter-bar.test.js +122 -0
- package/dist/test/sort-filter-bar/sort-filter-bar.test.js.map +1 -0
- package/dist/test/text-overlay.test.d.ts +1 -0
- package/dist/test/text-overlay.test.js +48 -0
- package/dist/test/text-overlay.test.js.map +1 -0
- package/dist/test/tile-stats.test.d.ts +1 -0
- package/dist/test/tile-stats.test.js +42 -0
- package/dist/test/tile-stats.test.js.map +1 -0
- package/dist/test/tiles/grid/item-tile.test.d.ts +1 -0
- package/dist/test/tiles/grid/item-tile.test.js +96 -0
- package/dist/test/tiles/grid/item-tile.test.js.map +1 -0
- package/dist/test/utils/format-count.test.d.ts +1 -0
- package/dist/test/utils/format-count.test.js +24 -0
- package/dist/test/utils/format-count.test.js.map +1 -0
- package/dist/test/utils/format-date.test.d.ts +1 -0
- package/dist/test/utils/format-date.test.js +18 -0
- package/dist/test/utils/format-date.test.js.map +1 -0
- package/package.json +3 -1
- package/src/app-root.ts +29 -2
- package/src/assets/img/icons/arrow-left.ts +10 -0
- package/src/assets/img/icons/arrow-right.ts +10 -0
- package/src/collection-browser.ts +6 -0
- package/src/collection-facets/more-facets-content.ts +393 -0
- package/src/collection-facets/more-facets-pagination.ts +201 -0
- package/src/collection-facets.ts +117 -1
- package/test/collection-facets/more-facets-content.test.ts +113 -0
- package/test/collection-facets/more-facets-pagination.test.ts +70 -0
- package/test/mocks/mock-search-responses.ts +13 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { css, html, LitElement } from 'lit';
|
|
3
|
+
import { customElement, property } from 'lit/decorators.js';
|
|
4
|
+
let TextOverlay = class TextOverlay extends LitElement {
|
|
5
|
+
constructor() {
|
|
6
|
+
super(...arguments);
|
|
7
|
+
this.loggedIn = false;
|
|
8
|
+
this.loginRequired = false;
|
|
9
|
+
}
|
|
10
|
+
render() {
|
|
11
|
+
return html ` <div class="overlay no-preview">${this.textDisplay}</div> `;
|
|
12
|
+
}
|
|
13
|
+
get textDisplay() {
|
|
14
|
+
return this.loginRequired && !this.loggedIn
|
|
15
|
+
? 'Log in\nto view this item'
|
|
16
|
+
: 'Content may be inappropriate';
|
|
17
|
+
}
|
|
18
|
+
static get styles() {
|
|
19
|
+
return css `
|
|
20
|
+
:host {
|
|
21
|
+
align-items: center;
|
|
22
|
+
display: flex;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.overlay {
|
|
26
|
+
border: 1px solid #2c2c2c;
|
|
27
|
+
border-radius: 1px;
|
|
28
|
+
position: absolute;
|
|
29
|
+
right: 0;
|
|
30
|
+
left: 0;
|
|
31
|
+
width: auto;
|
|
32
|
+
height: auto;
|
|
33
|
+
padding: 5px;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.no-preview {
|
|
37
|
+
background-color: #fffecb;
|
|
38
|
+
color: #2c2c2c;
|
|
39
|
+
font-size: 1.4rem;
|
|
40
|
+
line-height: 2rem;
|
|
41
|
+
text-align: center;
|
|
42
|
+
white-space: pre-wrap; // for the newline character
|
|
43
|
+
}
|
|
44
|
+
`;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
__decorate([
|
|
48
|
+
property({ type: Boolean })
|
|
49
|
+
], TextOverlay.prototype, "loggedIn", void 0);
|
|
50
|
+
__decorate([
|
|
51
|
+
property({ type: Boolean })
|
|
52
|
+
], TextOverlay.prototype, "loginRequired", void 0);
|
|
53
|
+
TextOverlay = __decorate([
|
|
54
|
+
customElement('text-overlay')
|
|
55
|
+
], TextOverlay);
|
|
56
|
+
export { TextOverlay };
|
|
57
|
+
//# sourceMappingURL=text-overlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-overlay.js","sourceRoot":"","sources":["../../../../src/tiles/overlay/text-overlay.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAkB,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG5D,IAAa,WAAW,GAAxB,MAAa,WAAY,SAAQ,UAAU;IAA3C;;QAC+B,aAAQ,GAAG,KAAK,CAAC;QAEjB,kBAAa,GAAG,KAAK,CAAC;IAwCrD,CAAC;IAtCC,MAAM;QACJ,OAAO,IAAI,CAAA,oCAAoC,IAAI,CAAC,WAAW,SAAS,CAAC;IAC3E,CAAC;IAED,IAAY,WAAW;QACrB,OAAO,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,QAAQ;YACzC,CAAC,CAAC,2BAA2B;YAC7B,CAAC,CAAC,8BAA8B,CAAC;IACrC,CAAC;IAED,MAAM,KAAK,MAAM;QACf,OAAO,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;KAyBT,CAAC;IACJ,CAAC;CACF,CAAA;AA1C8B;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;6CAAkB;AAEjB;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;kDAAuB;AAHxC,WAAW;IADvB,aAAa,CAAC,cAAc,CAAC;GACjB,WAAW,CA2CvB;SA3CY,WAAW","sourcesContent":["import { css, CSSResultGroup, html, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\n@customElement('text-overlay')\nexport class TextOverlay extends LitElement {\n @property({ type: Boolean }) loggedIn = false;\n\n @property({ type: Boolean }) loginRequired = false;\n\n render() {\n return html` <div class=\"overlay no-preview\">${this.textDisplay}</div> `;\n }\n\n private get textDisplay() {\n return this.loginRequired && !this.loggedIn\n ? 'Log in\\nto view this item'\n : 'Content may be inappropriate';\n }\n\n static get styles(): CSSResultGroup {\n return css`\n :host {\n align-items: center;\n display: flex;\n }\n\n .overlay {\n border: 1px solid #2c2c2c;\n border-radius: 1px;\n position: absolute;\n right: 0;\n left: 0;\n width: auto;\n height: auto;\n padding: 5px;\n }\n\n .no-preview {\n background-color: #fffecb;\n color: #2c2c2c;\n font-size: 1.4rem;\n line-height: 2rem;\n text-align: center;\n white-space: pre-wrap; // for the newline character\n }\n `;\n }\n}\n"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { LitElement, PropertyValues } from 'lit';
|
|
2
|
+
import type { SharedResizeObserverInterface, SharedResizeObserverResizeHandlerInterface } from '@internetarchive/shared-resize-observer';
|
|
3
|
+
import type { CollectionNameCacheInterface } from '@internetarchive/collection-name-cache';
|
|
4
|
+
import type { SortParam } from '@internetarchive/search-service';
|
|
5
|
+
import type { TileDisplayMode, TileModel } from '../models';
|
|
6
|
+
import './grid/collection-tile';
|
|
7
|
+
import './grid/item-tile';
|
|
8
|
+
import './grid/account-tile';
|
|
9
|
+
import './list/tile-list';
|
|
10
|
+
import './list/tile-list-compact';
|
|
11
|
+
import './list/tile-list-compact-header';
|
|
12
|
+
export declare class TileDispatcher extends LitElement implements SharedResizeObserverResizeHandlerInterface {
|
|
13
|
+
tileDisplayMode?: TileDisplayMode;
|
|
14
|
+
model?: TileModel;
|
|
15
|
+
baseNavigationUrl?: string;
|
|
16
|
+
currentWidth?: number;
|
|
17
|
+
currentHeight?: number;
|
|
18
|
+
resizeObserver?: SharedResizeObserverInterface;
|
|
19
|
+
collectionNameCache?: CollectionNameCacheInterface;
|
|
20
|
+
sortParam: SortParam | null;
|
|
21
|
+
private container;
|
|
22
|
+
mobileBreakpoint?: number;
|
|
23
|
+
baseImageUrl?: string;
|
|
24
|
+
loggedIn: boolean;
|
|
25
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
26
|
+
private get headerTemplate();
|
|
27
|
+
private get tileTemplate();
|
|
28
|
+
private get linkTileTemplate();
|
|
29
|
+
handleResize(entry: ResizeObserverEntry): void;
|
|
30
|
+
disconnectedCallback(): void;
|
|
31
|
+
private stopResizeObservation;
|
|
32
|
+
private startResizeObservation;
|
|
33
|
+
updated(props: PropertyValues): void;
|
|
34
|
+
private get tile();
|
|
35
|
+
static get styles(): import("lit").CSSResult;
|
|
36
|
+
}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { css, html, LitElement, nothing } from 'lit';
|
|
3
|
+
import { customElement, property, query } from 'lit/decorators.js';
|
|
4
|
+
import { ifDefined } from 'lit/directives/if-defined.js';
|
|
5
|
+
import './grid/collection-tile';
|
|
6
|
+
import './grid/item-tile';
|
|
7
|
+
import './grid/account-tile';
|
|
8
|
+
import './list/tile-list';
|
|
9
|
+
import './list/tile-list-compact';
|
|
10
|
+
import './list/tile-list-compact-header';
|
|
11
|
+
let TileDispatcher = class TileDispatcher extends LitElement {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(...arguments);
|
|
14
|
+
this.sortParam = null;
|
|
15
|
+
this.loggedIn = false;
|
|
16
|
+
}
|
|
17
|
+
render() {
|
|
18
|
+
return html `
|
|
19
|
+
<div id="container">
|
|
20
|
+
${this.tileDisplayMode === 'list-header'
|
|
21
|
+
? this.headerTemplate
|
|
22
|
+
: this.tileTemplate}
|
|
23
|
+
</div>
|
|
24
|
+
`;
|
|
25
|
+
}
|
|
26
|
+
get headerTemplate() {
|
|
27
|
+
const { currentWidth, sortParam, mobileBreakpoint } = this;
|
|
28
|
+
return html `
|
|
29
|
+
<tile-list-compact-header
|
|
30
|
+
class="header"
|
|
31
|
+
.currentWidth=${currentWidth}
|
|
32
|
+
.sortParam=${sortParam}
|
|
33
|
+
.mobileBreakpoint=${mobileBreakpoint}
|
|
34
|
+
>
|
|
35
|
+
</tile-list-compact-header>
|
|
36
|
+
`;
|
|
37
|
+
}
|
|
38
|
+
get tileTemplate() {
|
|
39
|
+
return html `
|
|
40
|
+
${this.tileDisplayMode === 'list-detail'
|
|
41
|
+
? this.tile
|
|
42
|
+
: this.linkTileTemplate}
|
|
43
|
+
`;
|
|
44
|
+
}
|
|
45
|
+
get linkTileTemplate() {
|
|
46
|
+
var _a, _b;
|
|
47
|
+
return html `
|
|
48
|
+
<a
|
|
49
|
+
href="${this.baseNavigationUrl}/details/${(_a = this.model) === null || _a === void 0 ? void 0 : _a.identifier}"
|
|
50
|
+
title=${ifDefined((_b = this.model) === null || _b === void 0 ? void 0 : _b.title)}
|
|
51
|
+
>
|
|
52
|
+
${this.tile}
|
|
53
|
+
</a>
|
|
54
|
+
`;
|
|
55
|
+
}
|
|
56
|
+
handleResize(entry) {
|
|
57
|
+
this.currentWidth = entry.contentRect.width;
|
|
58
|
+
this.currentHeight = entry.contentRect.height;
|
|
59
|
+
}
|
|
60
|
+
disconnectedCallback() {
|
|
61
|
+
this.stopResizeObservation(this.resizeObserver);
|
|
62
|
+
}
|
|
63
|
+
stopResizeObservation(observer) {
|
|
64
|
+
observer === null || observer === void 0 ? void 0 : observer.removeObserver({
|
|
65
|
+
handler: this,
|
|
66
|
+
target: this.container,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
startResizeObservation() {
|
|
70
|
+
var _a;
|
|
71
|
+
this.stopResizeObservation(this.resizeObserver);
|
|
72
|
+
(_a = this.resizeObserver) === null || _a === void 0 ? void 0 : _a.addObserver({
|
|
73
|
+
handler: this,
|
|
74
|
+
target: this.container,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
updated(props) {
|
|
78
|
+
if (props.has('resizeObserver')) {
|
|
79
|
+
const previousObserver = props.get('resizeObserver');
|
|
80
|
+
this.stopResizeObservation(previousObserver);
|
|
81
|
+
this.startResizeObservation();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
get tile() {
|
|
85
|
+
const { model, baseNavigationUrl, currentWidth, currentHeight, sortParam, mobileBreakpoint, } = this;
|
|
86
|
+
if (!model)
|
|
87
|
+
return nothing;
|
|
88
|
+
switch (this.tileDisplayMode) {
|
|
89
|
+
case 'grid':
|
|
90
|
+
switch (model.mediatype) {
|
|
91
|
+
case 'collection':
|
|
92
|
+
return html `<collection-tile
|
|
93
|
+
.model=${model}
|
|
94
|
+
.currentWidth=${currentWidth}
|
|
95
|
+
.currentHeight=${currentHeight}
|
|
96
|
+
>
|
|
97
|
+
</collection-tile>`;
|
|
98
|
+
case 'account':
|
|
99
|
+
return html `<account-tile
|
|
100
|
+
.model=${model}
|
|
101
|
+
.currentWidth=${currentWidth}
|
|
102
|
+
.currentHeight=${currentHeight}
|
|
103
|
+
>
|
|
104
|
+
</account-tile>`;
|
|
105
|
+
default:
|
|
106
|
+
return html `<item-tile
|
|
107
|
+
.model=${model}
|
|
108
|
+
.currentWidth=${this.currentWidth}
|
|
109
|
+
.currentHeight=${this.currentHeight}
|
|
110
|
+
.collectionNameCache=${this.collectionNameCache}
|
|
111
|
+
.baseImageUrl=${this.baseImageUrl}
|
|
112
|
+
.sortParam=${sortParam}
|
|
113
|
+
.loggedIn=${this.loggedIn}
|
|
114
|
+
>
|
|
115
|
+
</item-tile>`;
|
|
116
|
+
}
|
|
117
|
+
case 'list-compact':
|
|
118
|
+
return html `<tile-list-compact
|
|
119
|
+
.model=${model}
|
|
120
|
+
.currentWidth=${currentWidth}
|
|
121
|
+
.currentHeight=${currentHeight}
|
|
122
|
+
.baseNavigationUrl=${baseNavigationUrl}
|
|
123
|
+
.sortParam=${sortParam}
|
|
124
|
+
.mobileBreakpoint=${mobileBreakpoint}
|
|
125
|
+
.baseImageUrl=${this.baseImageUrl}
|
|
126
|
+
.loggedIn=${this.loggedIn}
|
|
127
|
+
>
|
|
128
|
+
</tile-list-compact>`;
|
|
129
|
+
case 'list-detail':
|
|
130
|
+
return html `<tile-list
|
|
131
|
+
.model=${model}
|
|
132
|
+
.collectionNameCache=${this.collectionNameCache}
|
|
133
|
+
.currentWidth=${currentWidth}
|
|
134
|
+
.currentHeight=${currentHeight}
|
|
135
|
+
.baseNavigationUrl=${baseNavigationUrl}
|
|
136
|
+
.sortParam=${sortParam}
|
|
137
|
+
.mobileBreakpoint=${mobileBreakpoint}
|
|
138
|
+
.baseImageUrl=${this.baseImageUrl}
|
|
139
|
+
.loggedIn=${this.loggedIn}
|
|
140
|
+
>
|
|
141
|
+
</tile-list>`;
|
|
142
|
+
default:
|
|
143
|
+
return nothing;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
static get styles() {
|
|
147
|
+
return css `
|
|
148
|
+
:host {
|
|
149
|
+
display: block;
|
|
150
|
+
height: 100%;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
#container {
|
|
154
|
+
height: 100%;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
#delete-button {
|
|
158
|
+
float: right;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
a {
|
|
162
|
+
display: block;
|
|
163
|
+
height: 100%;
|
|
164
|
+
color: unset;
|
|
165
|
+
text-decoration: none;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
a :first-child {
|
|
169
|
+
display: block;
|
|
170
|
+
height: 100%;
|
|
171
|
+
}
|
|
172
|
+
`;
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
__decorate([
|
|
176
|
+
property({ type: String })
|
|
177
|
+
], TileDispatcher.prototype, "tileDisplayMode", void 0);
|
|
178
|
+
__decorate([
|
|
179
|
+
property({ type: Object })
|
|
180
|
+
], TileDispatcher.prototype, "model", void 0);
|
|
181
|
+
__decorate([
|
|
182
|
+
property({ type: String })
|
|
183
|
+
], TileDispatcher.prototype, "baseNavigationUrl", void 0);
|
|
184
|
+
__decorate([
|
|
185
|
+
property({ type: Number })
|
|
186
|
+
], TileDispatcher.prototype, "currentWidth", void 0);
|
|
187
|
+
__decorate([
|
|
188
|
+
property({ type: Number })
|
|
189
|
+
], TileDispatcher.prototype, "currentHeight", void 0);
|
|
190
|
+
__decorate([
|
|
191
|
+
property({ type: Object })
|
|
192
|
+
], TileDispatcher.prototype, "resizeObserver", void 0);
|
|
193
|
+
__decorate([
|
|
194
|
+
property({ type: Object })
|
|
195
|
+
], TileDispatcher.prototype, "collectionNameCache", void 0);
|
|
196
|
+
__decorate([
|
|
197
|
+
property({ type: Object })
|
|
198
|
+
], TileDispatcher.prototype, "sortParam", void 0);
|
|
199
|
+
__decorate([
|
|
200
|
+
query('#container')
|
|
201
|
+
], TileDispatcher.prototype, "container", void 0);
|
|
202
|
+
__decorate([
|
|
203
|
+
property({ type: Number })
|
|
204
|
+
], TileDispatcher.prototype, "mobileBreakpoint", void 0);
|
|
205
|
+
__decorate([
|
|
206
|
+
property({ type: String })
|
|
207
|
+
], TileDispatcher.prototype, "baseImageUrl", void 0);
|
|
208
|
+
__decorate([
|
|
209
|
+
property({ type: Boolean })
|
|
210
|
+
], TileDispatcher.prototype, "loggedIn", void 0);
|
|
211
|
+
TileDispatcher = __decorate([
|
|
212
|
+
customElement('tile-dispatcher')
|
|
213
|
+
], TileDispatcher);
|
|
214
|
+
export { TileDispatcher };
|
|
215
|
+
//# sourceMappingURL=tile-dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tile-dispatcher.js","sourceRoot":"","sources":["../../../src/tiles/tile-dispatcher.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAkB,MAAM,KAAK,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAQzD,OAAO,wBAAwB,CAAC;AAChC,OAAO,kBAAkB,CAAC;AAC1B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,0BAA0B,CAAC;AAClC,OAAO,iCAAiC,CAAC;AAGzC,IAAa,cAAc,GAA3B,MAAa,cACX,SAAQ,UAAU;IADpB;;QAmB8B,cAAS,GAAqB,IAAI,CAAC;QAQlC,aAAQ,GAAG,KAAK,CAAC;IAiLhD,CAAC;IA/KC,MAAM;QACJ,OAAO,IAAI,CAAA;;UAEL,IAAI,CAAC,eAAe,KAAK,aAAa;YACtC,CAAC,CAAC,IAAI,CAAC,cAAc;YACrB,CAAC,CAAC,IAAI,CAAC,YAAY;;KAExB,CAAC;IACJ,CAAC;IAED,IAAY,cAAc;QACxB,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC;QAC3D,OAAO,IAAI,CAAA;;;wBAGS,YAAY;qBACf,SAAS;4BACF,gBAAgB;;;KAGvC,CAAC;IACJ,CAAC;IAED,IAAY,YAAY;QACtB,OAAO,IAAI,CAAA;QACP,IAAI,CAAC,eAAe,KAAK,aAAa;YACtC,CAAC,CAAC,IAAI,CAAC,IAAI;YACX,CAAC,CAAC,IAAI,CAAC,gBAAgB;KAC1B,CAAC;IACJ,CAAC;IAED,IAAY,gBAAgB;;QAC1B,OAAO,IAAI,CAAA;;gBAEC,IAAI,CAAC,iBAAiB,YAAY,MAAA,IAAI,CAAC,KAAK,0CAAE,UAAU;gBACxD,SAAS,CAAC,MAAA,IAAI,CAAC,KAAK,0CAAE,KAAK,CAAC;;UAElC,IAAI,CAAC,IAAI;;KAEd,CAAC;IACJ,CAAC;IAED,YAAY,CAAC,KAA0B;QACrC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC;QAC5C,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;IAChD,CAAC;IAED,oBAAoB;QAClB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAClD,CAAC;IAEO,qBAAqB,CAAC,QAAwC;QACpE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,cAAc,CAAC;YACvB,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,IAAI,CAAC,SAAS;SACvB,CAAC,CAAC;IACL,CAAC;IAEO,sBAAsB;;QAC5B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAChD,MAAA,IAAI,CAAC,cAAc,0CAAE,WAAW,CAAC;YAC/B,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,IAAI,CAAC,SAAS;SACvB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,KAAqB;QAC3B,IAAI,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;YAC/B,MAAM,gBAAgB,GAAG,KAAK,CAAC,GAAG,CAChC,gBAAgB,CACgB,CAAC;YACnC,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;YAC7C,IAAI,CAAC,sBAAsB,EAAE,CAAC;SAC/B;IACH,CAAC;IAED,IAAY,IAAI;QACd,MAAM,EACJ,KAAK,EACL,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,SAAS,EACT,gBAAgB,GACjB,GAAG,IAAI,CAAC;QAET,IAAI,CAAC,KAAK;YAAE,OAAO,OAAO,CAAC;QAE3B,QAAQ,IAAI,CAAC,eAAe,EAAE;YAC5B,KAAK,MAAM;gBACT,QAAQ,KAAK,CAAC,SAAS,EAAE;oBACvB,KAAK,YAAY;wBACf,OAAO,IAAI,CAAA;uBACA,KAAK;8BACE,YAAY;+BACX,aAAa;;+BAEb,CAAC;oBACtB,KAAK,SAAS;wBACZ,OAAO,IAAI,CAAA;uBACA,KAAK;8BACE,YAAY;+BACX,aAAa;;4BAEhB,CAAC;oBACnB;wBACE,OAAO,IAAI,CAAA;uBACA,KAAK;8BACE,IAAI,CAAC,YAAY;+BAChB,IAAI,CAAC,aAAa;qCACZ,IAAI,CAAC,mBAAmB;8BAC/B,IAAI,CAAC,YAAY;2BACpB,SAAS;0BACV,IAAI,CAAC,QAAQ;;yBAEd,CAAC;iBACjB;YACH,KAAK,cAAc;gBACjB,OAAO,IAAI,CAAA;mBACA,KAAK;0BACE,YAAY;2BACX,aAAa;+BACT,iBAAiB;uBACzB,SAAS;8BACF,gBAAgB;0BACpB,IAAI,CAAC,YAAY;sBACrB,IAAI,CAAC,QAAQ;;6BAEN,CAAC;YACxB,KAAK,aAAa;gBAChB,OAAO,IAAI,CAAA;mBACA,KAAK;iCACS,IAAI,CAAC,mBAAmB;0BAC/B,YAAY;2BACX,aAAa;+BACT,iBAAiB;uBACzB,SAAS;8BACF,gBAAgB;0BACpB,IAAI,CAAC,YAAY;sBACrB,IAAI,CAAC,QAAQ;;qBAEd,CAAC;YAChB;gBACE,OAAO,OAAO,CAAC;SAClB;IACH,CAAC;IAED,MAAM,KAAK,MAAM;QACf,OAAO,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;KAyBT,CAAC;IACJ,CAAC;CACF,CAAA;AAxM6B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;uDAAmC;AAElC;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;6CAAmB;AAElB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;yDAA4B;AAE3B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;oDAAuB;AAEtB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;qDAAwB;AAEvB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;sDAAgD;AAG3E;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;2DACwB;AAEvB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;iDAAoC;AAE1C;IAApB,KAAK,CAAC,YAAY,CAAC;iDAAoC;AAE5B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wDAA2B;AAE1B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;oDAAuB;AAErB;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gDAAkB;AA3BnC,cAAc;IAD1B,aAAa,CAAC,iBAAiB,CAAC;GACpB,cAAc,CA4M1B;SA5MY,cAAc","sourcesContent":["import { css, html, LitElement, nothing, PropertyValues } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport type {\n SharedResizeObserverInterface,\n SharedResizeObserverResizeHandlerInterface,\n} from '@internetarchive/shared-resize-observer';\nimport type { CollectionNameCacheInterface } from '@internetarchive/collection-name-cache';\nimport type { SortParam } from '@internetarchive/search-service';\nimport type { TileDisplayMode, TileModel } from '../models';\nimport './grid/collection-tile';\nimport './grid/item-tile';\nimport './grid/account-tile';\nimport './list/tile-list';\nimport './list/tile-list-compact';\nimport './list/tile-list-compact-header';\n\n@customElement('tile-dispatcher')\nexport class TileDispatcher\n extends LitElement\n implements SharedResizeObserverResizeHandlerInterface\n{\n @property({ type: String }) tileDisplayMode?: TileDisplayMode;\n\n @property({ type: Object }) model?: TileModel;\n\n @property({ type: String }) baseNavigationUrl?: string;\n\n @property({ type: Number }) currentWidth?: number;\n\n @property({ type: Number }) currentHeight?: number;\n\n @property({ type: Object }) resizeObserver?: SharedResizeObserverInterface;\n\n @property({ type: Object })\n collectionNameCache?: CollectionNameCacheInterface;\n\n @property({ type: Object }) sortParam: SortParam | null = null;\n\n @query('#container') private container!: HTMLDivElement;\n\n @property({ type: Number }) mobileBreakpoint?: number;\n\n @property({ type: String }) baseImageUrl?: string;\n\n @property({ type: Boolean }) loggedIn = false;\n\n render() {\n return html`\n <div id=\"container\">\n ${this.tileDisplayMode === 'list-header'\n ? this.headerTemplate\n : this.tileTemplate}\n </div>\n `;\n }\n\n private get headerTemplate() {\n const { currentWidth, sortParam, mobileBreakpoint } = this;\n return html`\n <tile-list-compact-header\n class=\"header\"\n .currentWidth=${currentWidth}\n .sortParam=${sortParam}\n .mobileBreakpoint=${mobileBreakpoint}\n >\n </tile-list-compact-header>\n `;\n }\n\n private get tileTemplate() {\n return html`\n ${this.tileDisplayMode === 'list-detail'\n ? this.tile\n : this.linkTileTemplate}\n `;\n }\n\n private get linkTileTemplate() {\n return html`\n <a\n href=\"${this.baseNavigationUrl}/details/${this.model?.identifier}\"\n title=${ifDefined(this.model?.title)}\n >\n ${this.tile}\n </a>\n `;\n }\n\n handleResize(entry: ResizeObserverEntry): void {\n this.currentWidth = entry.contentRect.width;\n this.currentHeight = entry.contentRect.height;\n }\n\n disconnectedCallback(): void {\n this.stopResizeObservation(this.resizeObserver);\n }\n\n private stopResizeObservation(observer?: SharedResizeObserverInterface) {\n observer?.removeObserver({\n handler: this,\n target: this.container,\n });\n }\n\n private startResizeObservation() {\n this.stopResizeObservation(this.resizeObserver);\n this.resizeObserver?.addObserver({\n handler: this,\n target: this.container,\n });\n }\n\n updated(props: PropertyValues) {\n if (props.has('resizeObserver')) {\n const previousObserver = props.get(\n 'resizeObserver'\n ) as SharedResizeObserverInterface;\n this.stopResizeObservation(previousObserver);\n this.startResizeObservation();\n }\n }\n\n private get tile() {\n const {\n model,\n baseNavigationUrl,\n currentWidth,\n currentHeight,\n sortParam,\n mobileBreakpoint,\n } = this;\n\n if (!model) return nothing;\n\n switch (this.tileDisplayMode) {\n case 'grid':\n switch (model.mediatype) {\n case 'collection':\n return html`<collection-tile\n .model=${model}\n .currentWidth=${currentWidth}\n .currentHeight=${currentHeight}\n >\n </collection-tile>`;\n case 'account':\n return html`<account-tile\n .model=${model}\n .currentWidth=${currentWidth}\n .currentHeight=${currentHeight}\n >\n </account-tile>`;\n default:\n return html`<item-tile\n .model=${model}\n .currentWidth=${this.currentWidth}\n .currentHeight=${this.currentHeight}\n .collectionNameCache=${this.collectionNameCache}\n .baseImageUrl=${this.baseImageUrl}\n .sortParam=${sortParam}\n .loggedIn=${this.loggedIn}\n >\n </item-tile>`;\n }\n case 'list-compact':\n return html`<tile-list-compact\n .model=${model}\n .currentWidth=${currentWidth}\n .currentHeight=${currentHeight}\n .baseNavigationUrl=${baseNavigationUrl}\n .sortParam=${sortParam}\n .mobileBreakpoint=${mobileBreakpoint}\n .baseImageUrl=${this.baseImageUrl}\n .loggedIn=${this.loggedIn}\n >\n </tile-list-compact>`;\n case 'list-detail':\n return html`<tile-list\n .model=${model}\n .collectionNameCache=${this.collectionNameCache}\n .currentWidth=${currentWidth}\n .currentHeight=${currentHeight}\n .baseNavigationUrl=${baseNavigationUrl}\n .sortParam=${sortParam}\n .mobileBreakpoint=${mobileBreakpoint}\n .baseImageUrl=${this.baseImageUrl}\n .loggedIn=${this.loggedIn}\n >\n </tile-list>`;\n default:\n return nothing;\n }\n }\n\n static get styles() {\n return css`\n :host {\n display: block;\n height: 100%;\n }\n\n #container {\n height: 100%;\n }\n\n #delete-button {\n float: right;\n }\n\n a {\n display: block;\n height: 100%;\n color: unset;\n text-decoration: none;\n }\n\n a :first-child {\n display: block;\n height: 100%;\n }\n `;\n }\n}\n"]}
|
|
@@ -0,0 +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;
|
|
@@ -0,0 +1,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
|
+
function round(number = 0, divisor) {
|
|
27
|
+
const result = number / divisor;
|
|
28
|
+
const roundToOne = result < 10;
|
|
29
|
+
let rounded = 0;
|
|
30
|
+
if (roundToOne) {
|
|
31
|
+
rounded = Math.round((result + Number.EPSILON) * 10) / 10;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
rounded = Math.round(result);
|
|
35
|
+
}
|
|
36
|
+
return rounded;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Return a label for a number and format.
|
|
40
|
+
*/
|
|
41
|
+
function labelize(rounded, divisor, format, locale) {
|
|
42
|
+
switch (divisor) {
|
|
43
|
+
case 1000000000:
|
|
44
|
+
if (format === 'short') {
|
|
45
|
+
return msg(str `${rounded}B`);
|
|
46
|
+
}
|
|
47
|
+
return msg(str `${rounded} billion`);
|
|
48
|
+
case 1000000:
|
|
49
|
+
if (format === 'short') {
|
|
50
|
+
return msg(str `${rounded}M`);
|
|
51
|
+
}
|
|
52
|
+
return msg(str `${rounded} million`);
|
|
53
|
+
case 1000:
|
|
54
|
+
if (format === 'short') {
|
|
55
|
+
return msg(str `${rounded}K`);
|
|
56
|
+
}
|
|
57
|
+
return msg(str `${rounded} thousand`);
|
|
58
|
+
default:
|
|
59
|
+
return new Intl.NumberFormat(locale).format(rounded);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Format a "count" number into short "icon" or longer text string.
|
|
64
|
+
* For positive numbers only.
|
|
65
|
+
*/
|
|
66
|
+
export function formatCount(count, numberFormat = 'long', labelFormat = 'short', locale = 'en-US') {
|
|
67
|
+
// Return blank if undefined
|
|
68
|
+
const number = count !== null && count !== void 0 ? count : -1;
|
|
69
|
+
if (number < 0) {
|
|
70
|
+
return '';
|
|
71
|
+
}
|
|
72
|
+
const divisor = magnitude(number, numberFormat);
|
|
73
|
+
const rounded = round(number, divisor);
|
|
74
|
+
return labelize(rounded, divisor, labelFormat, locale);
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=format-count.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-count.js","sourceRoot":"","sources":["../../../src/utils/format-count.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAUzC;;GAEG;AACH,SAAS,SAAS,CAAC,MAAc,EAAE,YAA0B;IAC3D,IAAI,OAAO,GAAY,CAAC,CAAC;IACzB,IAAI,MAAM,IAAI,UAAa,EAAE;QAC3B,OAAO,GAAG,UAAa,CAAC;KACzB;SAAM,IAAI,MAAM,IAAI,OAAS,EAAE;QAC9B,OAAO,GAAG,OAAS,CAAC;KACrB;SAAM,IAAI,MAAM,IAAI,IAAK,IAAI,YAAY,KAAK,OAAO,EAAE;QACtD,OAAO,GAAG,IAAK,CAAC;KACjB;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,SAAS,KAAK,CAAC,SAAiB,CAAC,EAAE,OAAgB;IACjD,MAAM,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAChC,MAAM,UAAU,GAAG,MAAM,GAAG,EAAE,CAAC;IAC/B,IAAI,OAAO,GAAW,CAAC,CAAC;IACxB,IAAI,UAAU,EAAE;QACd,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;KAC3D;SAAM;QACL,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;KAC9B;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,QAAQ,CACf,OAAe,EACf,OAAgB,EAChB,MAAmB,EACnB,MAAc;IAEd,QAAQ,OAAO,EAAE;QACf,KAAK,UAAa;YAChB,IAAI,MAAM,KAAK,OAAO,EAAE;gBACtB,OAAO,GAAG,CAAC,GAAG,CAAA,GAAG,OAAO,GAAG,CAAC,CAAC;aAC9B;YACD,OAAO,GAAG,CAAC,GAAG,CAAA,GAAG,OAAO,UAAU,CAAC,CAAC;QACtC,KAAK,OAAS;YACZ,IAAI,MAAM,KAAK,OAAO,EAAE;gBACtB,OAAO,GAAG,CAAC,GAAG,CAAA,GAAG,OAAO,GAAG,CAAC,CAAC;aAC9B;YACD,OAAO,GAAG,CAAC,GAAG,CAAA,GAAG,OAAO,UAAU,CAAC,CAAC;QACtC,KAAK,IAAK;YACR,IAAI,MAAM,KAAK,OAAO,EAAE;gBACtB,OAAO,GAAG,CAAC,GAAG,CAAA,GAAG,OAAO,GAAG,CAAC,CAAC;aAC9B;YACD,OAAO,GAAG,CAAC,GAAG,CAAA,GAAG,OAAO,WAAW,CAAC,CAAC;QAEvC;YACE,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KACxD;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,KAAyB,EACzB,eAA6B,MAAM,EACnC,cAA2B,OAAO,EAClC,SAAiB,OAAO;IAExB,4BAA4B;IAC5B,MAAM,MAAM,GAAG,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,CAAC,CAAC,CAAC;IAC3B,IAAI,MAAM,GAAG,CAAC,EAAE;QACd,OAAO,EAAE,CAAC;KACX;IACD,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,OAAO,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AACzD,CAAC","sourcesContent":["/*\n * Replaces Petabox www/common/Util::number_format()\n * For positive numbers only.\n */\nimport { msg, str } from '@lit/localize';\n\nexport type NumberFormat =\n | 'short' // 1.2 [K | thousand]\n | 'long'; // 1,200 [No label for numbers < 1,000,000]\nexport type LabelFormat =\n | 'short' // [1.2]K\n | 'long'; // [1.2] thousand\ntype Divisor = 1_000_000_000 | 1_000_000 | 1_000 | 1;\n\n/**\n * Return the magnitude of a number.\n */\nfunction magnitude(number: number, numberFormat: NumberFormat): Divisor {\n let divisor: Divisor = 1;\n if (number >= 1_000_000_000) {\n divisor = 1_000_000_000;\n } else if (number >= 1_000_000) {\n divisor = 1_000_000;\n } else if (number >= 1_000 && numberFormat === 'short') {\n divisor = 1_000;\n }\n return divisor;\n}\n\n/**\n * Round a number given passed magnitude.\n * Significant digits of value less than 10 get a decimal.\n */\nfunction round(number: number = 0, divisor: Divisor): number {\n const result = number / divisor;\n const roundToOne = result < 10;\n let rounded: number = 0;\n if (roundToOne) {\n rounded = Math.round((result + Number.EPSILON) * 10) / 10;\n } else {\n rounded = Math.round(result);\n }\n return rounded;\n}\n\n/**\n * Return a label for a number and format.\n */\nfunction labelize(\n rounded: number,\n divisor: Divisor,\n format: LabelFormat,\n locale: string\n): string {\n switch (divisor) {\n case 1_000_000_000:\n if (format === 'short') {\n return msg(str`${rounded}B`);\n }\n return msg(str`${rounded} billion`);\n case 1_000_000:\n if (format === 'short') {\n return msg(str`${rounded}M`);\n }\n return msg(str`${rounded} million`);\n case 1_000:\n if (format === 'short') {\n return msg(str`${rounded}K`);\n }\n return msg(str`${rounded} thousand`);\n\n default:\n return new Intl.NumberFormat(locale).format(rounded);\n }\n}\n\n/**\n * Format a \"count\" number into short \"icon\" or longer text string.\n * For positive numbers only.\n */\nexport function formatCount(\n count: number | undefined,\n numberFormat: NumberFormat = 'long',\n labelFormat: LabelFormat = 'short',\n locale: string = 'en-US'\n): string {\n // Return blank if undefined\n const number = count ?? -1;\n if (number < 0) {\n return '';\n }\n const divisor = magnitude(number, numberFormat);\n const rounded = round(number, divisor);\n return labelize(rounded, divisor, labelFormat, locale);\n}\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export function formatDate(date, format = 'short', locale = 'en-US') {
|
|
2
|
+
// Return blank if undefined
|
|
3
|
+
if (!date)
|
|
4
|
+
return '';
|
|
5
|
+
const options = {
|
|
6
|
+
timeZone: 'UTC', // Override browser timezone
|
|
7
|
+
};
|
|
8
|
+
switch (format) {
|
|
9
|
+
case 'short':
|
|
10
|
+
options.month = 'short';
|
|
11
|
+
options.year = 'numeric';
|
|
12
|
+
break;
|
|
13
|
+
case 'long':
|
|
14
|
+
options.year = 'numeric';
|
|
15
|
+
options.month = 'short';
|
|
16
|
+
options.day = '2-digit';
|
|
17
|
+
break;
|
|
18
|
+
default:
|
|
19
|
+
break;
|
|
20
|
+
}
|
|
21
|
+
const dateFormatter = new Intl.DateTimeFormat(locale, options);
|
|
22
|
+
return dateFormatter.format(date);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=format-date.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-date.js","sourceRoot":"","sources":["../../../src/utils/format-date.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,UAAU,CACxB,IAAsB,EACtB,SAAqB,OAAO,EAC5B,SAAiB,OAAO;IAExB,4BAA4B;IAC5B,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAErB,MAAM,OAAO,GAA+B;QAC1C,QAAQ,EAAE,KAAK,EAAE,4BAA4B;KAC9C,CAAC;IACF,QAAQ,MAAM,EAAE;QACd,KAAK,OAAO;YACV,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC;YACxB,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;YACzB,MAAM;QACR,KAAK,MAAM;YACT,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;YACzB,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC;YACxB,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;YACxB,MAAM;QACR;YACE,MAAM;KACT;IAED,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/D,OAAO,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC","sourcesContent":["/*\n * Display date\n * Override browser timezone to always display same date as in data\n */\nexport type DateFormat =\n | 'short' // Dec 2020\n | 'long'; // Dec 20, 2020\n\nexport function formatDate(\n date: Date | undefined,\n format: DateFormat = 'short',\n locale: string = 'en-US'\n): string {\n // Return blank if undefined\n if (!date) return '';\n\n const options: Intl.DateTimeFormatOptions = {\n timeZone: 'UTC', // Override browser timezone\n };\n switch (format) {\n case 'short':\n options.month = 'short';\n options.year = 'numeric';\n break;\n case 'long':\n options.year = 'numeric';\n options.month = 'short';\n options.day = '2-digit';\n break;\n default:\n break;\n }\n\n const dateFormatter = new Intl.DateTimeFormat(locale, options);\n return dateFormatter.format(date);\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import '../src/collection-browser';
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/* eslint-disable import/no-duplicates */
|
|
2
|
+
import { expect, fixture } from '@open-wc/testing';
|
|
3
|
+
import { html } from 'lit';
|
|
4
|
+
import sinon from 'sinon';
|
|
5
|
+
import '../src/collection-browser';
|
|
6
|
+
import { MockSearchService } from './mocks/mock-search-service';
|
|
7
|
+
import { MockCollectionNameCache } from './mocks/mock-collection-name-cache';
|
|
8
|
+
describe('Collection Browser', () => {
|
|
9
|
+
it('should render with a sort bar, facets, and infinite scroller', async () => {
|
|
10
|
+
var _a, _b, _c;
|
|
11
|
+
const el = await fixture(html `<collection-browser></collection-browser>`);
|
|
12
|
+
el.baseQuery = 'hello';
|
|
13
|
+
await el.updateComplete;
|
|
14
|
+
const facets = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('collection-facets');
|
|
15
|
+
const sortBar = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('sort-filter-bar');
|
|
16
|
+
const infiniteScroller = (_c = el.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('infinite-scroller');
|
|
17
|
+
expect(facets).to.exist;
|
|
18
|
+
expect(sortBar).to.exist;
|
|
19
|
+
expect(infiniteScroller).to.exist;
|
|
20
|
+
});
|
|
21
|
+
it('queries the search service when given a base query', async () => {
|
|
22
|
+
var _a;
|
|
23
|
+
const searchService = new MockSearchService();
|
|
24
|
+
const el = await fixture(html `<collection-browser
|
|
25
|
+
.searchService=${searchService}
|
|
26
|
+
></collection-browser>`);
|
|
27
|
+
el.baseQuery = 'collection:foo';
|
|
28
|
+
await el.updateComplete;
|
|
29
|
+
expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('collection:foo');
|
|
30
|
+
});
|
|
31
|
+
it('queries for collection names after a fetch', async () => {
|
|
32
|
+
const searchService = new MockSearchService();
|
|
33
|
+
const collectionNameCache = new MockCollectionNameCache();
|
|
34
|
+
const el = await fixture(html `<collection-browser
|
|
35
|
+
.searchService=${searchService}
|
|
36
|
+
.collectionNameCache=${collectionNameCache}
|
|
37
|
+
></collection-browser>`);
|
|
38
|
+
el.baseQuery = 'blahblah';
|
|
39
|
+
await el.updateComplete;
|
|
40
|
+
expect(collectionNameCache.preloadIdentifiersRequested).to.deep.equal([
|
|
41
|
+
'foo',
|
|
42
|
+
'bar',
|
|
43
|
+
'baz',
|
|
44
|
+
'boop',
|
|
45
|
+
]);
|
|
46
|
+
});
|
|
47
|
+
it('refreshes when certain properties change', async () => {
|
|
48
|
+
var _a;
|
|
49
|
+
const searchService = new MockSearchService();
|
|
50
|
+
const collectionNameCache = new MockCollectionNameCache();
|
|
51
|
+
const el = await fixture(html `<collection-browser
|
|
52
|
+
.searchService=${searchService}
|
|
53
|
+
.collectionNameCache=${collectionNameCache}
|
|
54
|
+
></collection-browser>`);
|
|
55
|
+
const infiniteScrollerRefreshSpy = sinon.spy();
|
|
56
|
+
const infiniteScroller = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('infinite-scroller');
|
|
57
|
+
infiniteScroller.reload = infiniteScrollerRefreshSpy;
|
|
58
|
+
expect(infiniteScrollerRefreshSpy.called).to.be.false;
|
|
59
|
+
expect(infiniteScrollerRefreshSpy.callCount).to.equal(0);
|
|
60
|
+
// testing: `loggedIn`
|
|
61
|
+
el.loggedIn = true;
|
|
62
|
+
await el.updateComplete;
|
|
63
|
+
expect(infiniteScrollerRefreshSpy.called).to.be.true;
|
|
64
|
+
expect(infiniteScrollerRefreshSpy.callCount).to.equal(1);
|
|
65
|
+
el.loggedIn = false;
|
|
66
|
+
await el.updateComplete;
|
|
67
|
+
expect(infiniteScrollerRefreshSpy.callCount).to.equal(2);
|
|
68
|
+
// testing: `displayMode`
|
|
69
|
+
el.displayMode = 'list-compact';
|
|
70
|
+
await el.updateComplete;
|
|
71
|
+
expect(infiniteScrollerRefreshSpy.callCount).to.equal(3);
|
|
72
|
+
// testing: `baseNavigationUrl`
|
|
73
|
+
el.baseNavigationUrl = 'https://funtestsite.com';
|
|
74
|
+
await el.updateComplete;
|
|
75
|
+
expect(infiniteScrollerRefreshSpy.callCount).to.equal(4);
|
|
76
|
+
// testing: `baseImageUrl`
|
|
77
|
+
el.baseImageUrl = 'https://funtestsiteforimages.com';
|
|
78
|
+
await el.updateComplete;
|
|
79
|
+
expect(infiniteScrollerRefreshSpy.callCount).to.equal(5);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
//# sourceMappingURL=collection-browser.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection-browser.test.js","sourceRoot":"","sources":["../../test/collection-browser.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-duplicates */\nimport { expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit';\nimport sinon from 'sinon';\nimport type { InfiniteScroller } from '@internetarchive/infinite-scroller';\nimport type { CollectionBrowser } from '../src/collection-browser';\nimport '../src/collection-browser';\nimport { MockSearchService } from './mocks/mock-search-service';\nimport { MockCollectionNameCache } from './mocks/mock-collection-name-cache';\n\ndescribe('Collection Browser', () => {\n it('should render with a sort bar, facets, and infinite scroller', async () => {\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser></collection-browser>`\n );\n\n el.baseQuery = 'hello';\n await el.updateComplete;\n\n const facets = el.shadowRoot?.querySelector('collection-facets');\n const sortBar = el.shadowRoot?.querySelector('sort-filter-bar');\n const infiniteScroller = el.shadowRoot?.querySelector('infinite-scroller');\n expect(facets).to.exist;\n expect(sortBar).to.exist;\n expect(infiniteScroller).to.exist;\n });\n\n it('queries the search service when given a base query', async () => {\n const searchService = new MockSearchService();\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser\n .searchService=${searchService}\n ></collection-browser>`\n );\n\n el.baseQuery = 'collection:foo';\n await el.updateComplete;\n\n expect(searchService.searchParams?.query).to.equal('collection:foo');\n });\n\n it('queries for collection names after a fetch', async () => {\n const searchService = new MockSearchService();\n const collectionNameCache = new MockCollectionNameCache();\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser\n .searchService=${searchService}\n .collectionNameCache=${collectionNameCache}\n ></collection-browser>`\n );\n\n el.baseQuery = 'blahblah';\n await el.updateComplete;\n\n expect(collectionNameCache.preloadIdentifiersRequested).to.deep.equal([\n 'foo',\n 'bar',\n 'baz',\n 'boop',\n ]);\n });\n it('refreshes when certain properties change', async () => {\n const searchService = new MockSearchService();\n const collectionNameCache = new MockCollectionNameCache();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser\n .searchService=${searchService}\n .collectionNameCache=${collectionNameCache}\n ></collection-browser>`\n );\n const infiniteScrollerRefreshSpy = sinon.spy();\n\n const infiniteScroller = el.shadowRoot?.querySelector('infinite-scroller');\n (infiniteScroller as InfiniteScroller).reload = infiniteScrollerRefreshSpy;\n expect(infiniteScrollerRefreshSpy.called).to.be.false;\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(0);\n\n // testing: `loggedIn`\n el.loggedIn = true;\n await el.updateComplete;\n expect(infiniteScrollerRefreshSpy.called).to.be.true;\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(1);\n\n el.loggedIn = false;\n await el.updateComplete;\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(2);\n\n // testing: `displayMode`\n el.displayMode = 'list-compact';\n await el.updateComplete;\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(3);\n\n // testing: `baseNavigationUrl`\n el.baseNavigationUrl = 'https://funtestsite.com';\n await el.updateComplete;\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(4);\n\n // testing: `baseImageUrl`\n el.baseImageUrl = 'https://funtestsiteforimages.com';\n await el.updateComplete;\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(5);\n });\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import '../../src/collection-facets/more-facets-content';
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/* eslint-disable import/no-duplicates */
|
|
2
|
+
import { expect, fixture, oneEvent } from '@open-wc/testing';
|
|
3
|
+
import { html } from 'lit';
|
|
4
|
+
import '../../src/collection-facets/more-facets-content';
|
|
5
|
+
import { MockSearchService } from '../mocks/mock-search-service';
|
|
6
|
+
describe('More facets content', () => {
|
|
7
|
+
it('should render more facets template', async () => {
|
|
8
|
+
var _a;
|
|
9
|
+
const el = await fixture(html `<more-facets-content></more-facets-content>`);
|
|
10
|
+
el.facetsLoading = false;
|
|
11
|
+
await el.updateComplete;
|
|
12
|
+
expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facets-content')).to.exist;
|
|
13
|
+
});
|
|
14
|
+
it('should render more facets loader template', async () => {
|
|
15
|
+
var _a;
|
|
16
|
+
const el = await fixture(html `<more-facets-content></more-facets-content>`);
|
|
17
|
+
el.facetsLoading = true;
|
|
18
|
+
await el.updateComplete;
|
|
19
|
+
expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facets-loader')).to.exist;
|
|
20
|
+
});
|
|
21
|
+
it('should render more facets empty template', async () => {
|
|
22
|
+
var _a, _b;
|
|
23
|
+
const el = await fixture(html `<more-facets-content></more-facets-content>`);
|
|
24
|
+
el.facetsLoading = false;
|
|
25
|
+
el.paginationSize = 0;
|
|
26
|
+
await el.updateComplete;
|
|
27
|
+
expect((_b = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#more-facets-page')) === null || _b === void 0 ? void 0 : _b.textContent).to.contains('No result found. please try again later.');
|
|
28
|
+
});
|
|
29
|
+
it('should render pagination for more facets', async () => {
|
|
30
|
+
var _a;
|
|
31
|
+
const searchService = new MockSearchService();
|
|
32
|
+
const el = await fixture(html `<more-facets-content
|
|
33
|
+
.searchService=${searchService}
|
|
34
|
+
></more-facets-content>`);
|
|
35
|
+
el.facetKey = 'mediatype';
|
|
36
|
+
el.facetsLoading = false;
|
|
37
|
+
el.paginationSize = 6;
|
|
38
|
+
await el.updateComplete;
|
|
39
|
+
expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll('more-facets-pagination')).to.exist;
|
|
40
|
+
});
|
|
41
|
+
it('query for more facets content using search service', async () => {
|
|
42
|
+
var _a;
|
|
43
|
+
const searchService = new MockSearchService();
|
|
44
|
+
const el = await fixture(html `<more-facets-content
|
|
45
|
+
.searchService=${searchService}
|
|
46
|
+
></more-facets-content>`);
|
|
47
|
+
el.facetKey = 'collection';
|
|
48
|
+
el.fullQuery = 'title:hello';
|
|
49
|
+
await el.updateComplete;
|
|
50
|
+
expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('title:hello');
|
|
51
|
+
});
|
|
52
|
+
it('query for specific facets data', async () => {
|
|
53
|
+
var _a;
|
|
54
|
+
const searchService = new MockSearchService();
|
|
55
|
+
const el = await fixture(html `<more-facets-content
|
|
56
|
+
.searchService=${searchService}
|
|
57
|
+
></more-facets-content>`);
|
|
58
|
+
el.facetKey = 'language';
|
|
59
|
+
el.facetsLoading = false;
|
|
60
|
+
await el.updateComplete;
|
|
61
|
+
expect(el.paginationSize).to.equal(1);
|
|
62
|
+
expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facet-list')).to.exist;
|
|
63
|
+
expect(Object.keys(el.castedBuckets).length).to.equal(7);
|
|
64
|
+
});
|
|
65
|
+
it('page number clicked event', async () => {
|
|
66
|
+
const searchService = new MockSearchService();
|
|
67
|
+
const el = await fixture(html `<more-facets-content
|
|
68
|
+
.searchService=${searchService}
|
|
69
|
+
></more-facets-content>`);
|
|
70
|
+
setTimeout(() => el.dispatchEvent(new CustomEvent('pageNumberClicked', { detail: { page: 15 } })));
|
|
71
|
+
const { detail } = await oneEvent(el, 'pageNumberClicked');
|
|
72
|
+
expect(detail === null || detail === void 0 ? void 0 : detail.page).to.equal(15);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
//# sourceMappingURL=more-facets-content.test.js.map
|