@internetarchive/collection-browser 0.2.13 → 0.2.15-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/dist/index.d.ts +9 -0
  2. package/dist/index.js.map +1 -0
  3. package/dist/src/app-root.d.ts +32 -0
  4. package/dist/src/app-root.js +285 -0
  5. package/dist/src/app-root.js.map +1 -0
  6. package/dist/src/assets/img/icons/chevron.d.ts +2 -0
  7. package/dist/src/assets/img/icons/chevron.js +4 -0
  8. package/dist/src/assets/img/icons/chevron.js.map +1 -0
  9. package/dist/src/assets/img/icons/empty-query.d.ts +2 -0
  10. package/dist/src/assets/img/icons/empty-query.js +5 -0
  11. package/dist/src/assets/img/icons/empty-query.js.map +1 -0
  12. package/dist/src/assets/img/icons/eye-closed.d.ts +2 -0
  13. package/dist/src/assets/img/icons/eye-closed.js +5 -0
  14. package/dist/src/assets/img/icons/eye-closed.js.map +1 -0
  15. package/dist/src/assets/img/icons/eye.d.ts +2 -0
  16. package/dist/src/assets/img/icons/eye.js +5 -0
  17. package/dist/src/assets/img/icons/eye.js.map +1 -0
  18. package/dist/src/assets/img/icons/favorite-filled.d.ts +1 -0
  19. package/dist/src/assets/img/icons/favorite-filled.js +11 -0
  20. package/dist/src/assets/img/icons/favorite-filled.js.map +1 -0
  21. package/dist/src/assets/img/icons/login-required.d.ts +1 -0
  22. package/dist/src/assets/img/icons/login-required.js +30 -0
  23. package/dist/src/assets/img/icons/login-required.js.map +1 -0
  24. package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -0
  25. package/dist/src/assets/img/icons/mediatype/account.js +14 -0
  26. package/dist/src/assets/img/icons/mediatype/account.js.map +1 -0
  27. package/dist/src/assets/img/icons/mediatype/audio.d.ts +1 -0
  28. package/dist/src/assets/img/icons/mediatype/audio.js +14 -0
  29. package/dist/src/assets/img/icons/mediatype/audio.js.map +1 -0
  30. package/dist/src/assets/img/icons/mediatype/collection.d.ts +1 -0
  31. package/dist/src/assets/img/icons/mediatype/collection.js +12 -0
  32. package/dist/src/assets/img/icons/mediatype/collection.js.map +1 -0
  33. package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -0
  34. package/dist/src/assets/img/icons/mediatype/data.js +15 -0
  35. package/dist/src/assets/img/icons/mediatype/data.js.map +1 -0
  36. package/dist/src/assets/img/icons/mediatype/etree.d.ts +1 -0
  37. package/dist/src/assets/img/icons/mediatype/etree.js +14 -0
  38. package/dist/src/assets/img/icons/mediatype/etree.js.map +1 -0
  39. package/dist/src/assets/img/icons/mediatype/film.d.ts +1 -0
  40. package/dist/src/assets/img/icons/mediatype/film.js +14 -0
  41. package/dist/src/assets/img/icons/mediatype/film.js.map +1 -0
  42. package/dist/src/assets/img/icons/mediatype/images.d.ts +1 -0
  43. package/dist/src/assets/img/icons/mediatype/images.js +13 -0
  44. package/dist/src/assets/img/icons/mediatype/images.js.map +1 -0
  45. package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -0
  46. package/dist/src/assets/img/icons/mediatype/radio.js +15 -0
  47. package/dist/src/assets/img/icons/mediatype/radio.js.map +1 -0
  48. package/dist/src/assets/img/icons/mediatype/software.d.ts +1 -0
  49. package/dist/src/assets/img/icons/mediatype/software.js +13 -0
  50. package/dist/src/assets/img/icons/mediatype/software.js.map +1 -0
  51. package/dist/src/assets/img/icons/mediatype/texts.d.ts +1 -0
  52. package/dist/src/assets/img/icons/mediatype/texts.js +13 -0
  53. package/dist/src/assets/img/icons/mediatype/texts.js.map +1 -0
  54. package/dist/src/assets/img/icons/mediatype/tv.d.ts +1 -0
  55. package/dist/src/assets/img/icons/mediatype/tv.js +14 -0
  56. package/dist/src/assets/img/icons/mediatype/tv.js.map +1 -0
  57. package/dist/src/assets/img/icons/mediatype/video.d.ts +1 -0
  58. package/dist/src/assets/img/icons/mediatype/video.js +14 -0
  59. package/dist/src/assets/img/icons/mediatype/video.js.map +1 -0
  60. package/dist/src/assets/img/icons/mediatype/web.d.ts +1 -0
  61. package/dist/src/assets/img/icons/mediatype/web.js +13 -0
  62. package/dist/src/assets/img/icons/mediatype/web.js.map +1 -0
  63. package/dist/src/assets/img/icons/null-result.d.ts +2 -0
  64. package/dist/src/assets/img/icons/null-result.js +5 -0
  65. package/dist/src/assets/img/icons/null-result.js.map +1 -0
  66. package/dist/src/assets/img/icons/restricted.d.ts +1 -0
  67. package/dist/src/assets/img/icons/restricted.js +29 -0
  68. package/dist/src/assets/img/icons/restricted.js.map +1 -0
  69. package/dist/src/assets/img/icons/reviews.d.ts +1 -0
  70. package/dist/src/assets/img/icons/reviews.js +11 -0
  71. package/dist/src/assets/img/icons/reviews.js.map +1 -0
  72. package/dist/src/assets/img/icons/upload.d.ts +1 -0
  73. package/dist/src/assets/img/icons/upload.js +12 -0
  74. package/dist/src/assets/img/icons/upload.js.map +1 -0
  75. package/dist/src/assets/img/icons/views.d.ts +1 -0
  76. package/dist/src/assets/img/icons/views.js +11 -0
  77. package/dist/src/assets/img/icons/views.js.map +1 -0
  78. package/dist/src/circular-activity-indicator.d.ts +5 -0
  79. package/dist/src/circular-activity-indicator.js +66 -0
  80. package/dist/src/circular-activity-indicator.js.map +1 -0
  81. package/dist/src/collection-browser.d.ts +214 -0
  82. package/dist/src/collection-browser.js +1253 -0
  83. package/dist/src/collection-browser.js.map +1 -0
  84. package/dist/src/collection-facets.d.ts +63 -0
  85. package/dist/src/collection-facets.js +560 -0
  86. package/dist/src/collection-facets.js.map +1 -0
  87. package/dist/src/empty-placeholder.d.ts +11 -0
  88. package/dist/src/empty-placeholder.js +83 -0
  89. package/dist/src/empty-placeholder.js.map +1 -0
  90. package/dist/src/language-code-handler/language-code-handler.d.ts +37 -0
  91. package/dist/src/language-code-handler/language-code-handler.js +27 -0
  92. package/dist/src/language-code-handler/language-code-handler.js.map +1 -0
  93. package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -0
  94. package/dist/src/language-code-handler/language-code-mapping.js +563 -0
  95. package/dist/src/language-code-handler/language-code-mapping.js.map +1 -0
  96. package/dist/src/mediatype/mediatype-config.d.ts +3 -0
  97. package/dist/src/mediatype/mediatype-config.js +86 -0
  98. package/dist/src/mediatype/mediatype-config.js.map +1 -0
  99. package/dist/src/models.d.ts +84 -0
  100. package/dist/src/models.js +58 -0
  101. package/dist/src/models.js.map +1 -0
  102. package/dist/src/restoration-state-handler.d.ts +38 -0
  103. package/dist/src/restoration-state-handler.js +204 -0
  104. package/dist/src/restoration-state-handler.js.map +1 -0
  105. package/dist/src/sort-filter-bar/alpha-bar.d.ts +9 -0
  106. package/dist/src/sort-filter-bar/alpha-bar.js +98 -0
  107. package/dist/src/sort-filter-bar/alpha-bar.js.map +1 -0
  108. package/dist/src/sort-filter-bar/img/compact.d.ts +1 -0
  109. package/dist/src/sort-filter-bar/img/compact.js +5 -0
  110. package/dist/src/sort-filter-bar/img/compact.js.map +1 -0
  111. package/dist/src/sort-filter-bar/img/list.d.ts +1 -0
  112. package/dist/src/sort-filter-bar/img/list.js +5 -0
  113. package/dist/src/sort-filter-bar/img/list.js.map +1 -0
  114. package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -0
  115. package/dist/src/sort-filter-bar/img/sort-triangle.js +5 -0
  116. package/dist/src/sort-filter-bar/img/sort-triangle.js.map +1 -0
  117. package/dist/src/sort-filter-bar/img/tile.d.ts +1 -0
  118. package/dist/src/sort-filter-bar/img/tile.js +5 -0
  119. package/dist/src/sort-filter-bar/img/tile.js.map +1 -0
  120. package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +85 -0
  121. package/dist/src/sort-filter-bar/sort-filter-bar.js +698 -0
  122. package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -0
  123. package/dist/src/styles/item-image-styles.d.ts +8 -0
  124. package/dist/src/styles/item-image-styles.js +102 -0
  125. package/dist/src/styles/item-image-styles.js.map +1 -0
  126. package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -0
  127. package/dist/src/tiles/collection-browser-loading-tile.js +32 -0
  128. package/dist/src/tiles/collection-browser-loading-tile.js.map +1 -0
  129. package/dist/src/tiles/grid/account-tile.d.ts +8 -0
  130. package/dist/src/tiles/grid/account-tile.js +126 -0
  131. package/dist/src/tiles/grid/account-tile.js.map +1 -0
  132. package/dist/src/tiles/grid/collection-tile.d.ts +7 -0
  133. package/dist/src/tiles/grid/collection-tile.js +159 -0
  134. package/dist/src/tiles/grid/collection-tile.js.map +1 -0
  135. package/dist/src/tiles/grid/item-tile.d.ts +21 -0
  136. package/dist/src/tiles/grid/item-tile.js +183 -0
  137. package/dist/src/tiles/grid/item-tile.js.map +1 -0
  138. package/dist/src/tiles/grid/tile-stats.d.ts +10 -0
  139. package/dist/src/tiles/grid/tile-stats.js +134 -0
  140. package/dist/src/tiles/grid/tile-stats.js.map +1 -0
  141. package/dist/src/tiles/image-block.d.ts +17 -0
  142. package/dist/src/tiles/image-block.js +136 -0
  143. package/dist/src/tiles/image-block.js.map +1 -0
  144. package/dist/src/tiles/item-image.d.ts +31 -0
  145. package/dist/src/tiles/item-image.js +118 -0
  146. package/dist/src/tiles/item-image.js.map +1 -0
  147. package/dist/src/tiles/list/account-label.d.ts +1 -0
  148. package/dist/src/tiles/list/account-label.js +7 -0
  149. package/dist/src/tiles/list/account-label.js.map +1 -0
  150. package/dist/src/tiles/list/date-label.d.ts +1 -0
  151. package/dist/src/tiles/list/date-label.js +13 -0
  152. package/dist/src/tiles/list/date-label.js.map +1 -0
  153. package/dist/src/tiles/list/tile-list-compact-header.d.ts +12 -0
  154. package/dist/src/tiles/list/tile-list-compact-header.js +84 -0
  155. package/dist/src/tiles/list/tile-list-compact-header.js.map +1 -0
  156. package/dist/src/tiles/list/tile-list-compact.d.ts +20 -0
  157. package/dist/src/tiles/list/tile-list-compact.js +180 -0
  158. package/dist/src/tiles/list/tile-list-compact.js.map +1 -0
  159. package/dist/src/tiles/list/tile-list.d.ts +48 -0
  160. package/dist/src/tiles/list/tile-list.js +455 -0
  161. package/dist/src/tiles/list/tile-list.js.map +1 -0
  162. package/dist/src/tiles/mediatype-icon.d.ts +9 -0
  163. package/dist/src/tiles/mediatype-icon.js +82 -0
  164. package/dist/src/tiles/mediatype-icon.js.map +1 -0
  165. package/dist/src/tiles/overlay/icon-overlay.d.ts +7 -0
  166. package/dist/src/tiles/overlay/icon-overlay.js +43 -0
  167. package/dist/src/tiles/overlay/icon-overlay.js.map +1 -0
  168. package/dist/src/tiles/overlay/text-overlay.d.ts +8 -0
  169. package/dist/src/tiles/overlay/text-overlay.js +57 -0
  170. package/dist/src/tiles/overlay/text-overlay.js.map +1 -0
  171. package/dist/src/tiles/tile-dispatcher.d.ts +36 -0
  172. package/dist/src/tiles/tile-dispatcher.js +215 -0
  173. package/dist/src/tiles/tile-dispatcher.js.map +1 -0
  174. package/dist/src/utils/format-count.d.ts +7 -0
  175. package/dist/src/utils/format-count.js +76 -0
  176. package/dist/src/utils/format-count.js.map +1 -0
  177. package/dist/src/utils/format-date.d.ts +2 -0
  178. package/dist/src/utils/format-date.js +24 -0
  179. package/dist/src/utils/format-date.js.map +1 -0
  180. package/dist/test/collection-browser.test.d.ts +1 -0
  181. package/dist/test/collection-browser.test.js +47 -0
  182. package/dist/test/collection-browser.test.js.map +1 -0
  183. package/dist/test/empty-placeholder.test.d.ts +1 -0
  184. package/dist/test/empty-placeholder.test.js +34 -0
  185. package/dist/test/empty-placeholder.test.js.map +1 -0
  186. package/dist/test/icon-overlay.test.d.ts +1 -0
  187. package/dist/test/icon-overlay.test.js +31 -0
  188. package/dist/test/icon-overlay.test.js.map +1 -0
  189. package/dist/test/item-image.test.d.ts +1 -0
  190. package/dist/test/item-image.test.js +73 -0
  191. package/dist/test/item-image.test.js.map +1 -0
  192. package/dist/test/mediatype-config.test.d.ts +1 -0
  193. package/dist/test/mediatype-config.test.js +17 -0
  194. package/dist/test/mediatype-config.test.js.map +1 -0
  195. package/dist/test/mocks/mock-collection-name-cache.d.ts +7 -0
  196. package/dist/test/mocks/mock-collection-name-cache.js +14 -0
  197. package/dist/test/mocks/mock-collection-name-cache.js.map +1 -0
  198. package/dist/test/mocks/mock-search-responses.d.ts +3 -0
  199. package/dist/test/mocks/mock-search-responses.js +32 -0
  200. package/dist/test/mocks/mock-search-responses.js.map +1 -0
  201. package/dist/test/mocks/mock-search-service.d.ts +8 -0
  202. package/dist/test/mocks/mock-search-service.js +16 -0
  203. package/dist/test/mocks/mock-search-service.js.map +1 -0
  204. package/dist/test/text-overlay.test.d.ts +1 -0
  205. package/dist/test/text-overlay.test.js +48 -0
  206. package/dist/test/text-overlay.test.js.map +1 -0
  207. package/dist/test/tile-stats.test.d.ts +1 -0
  208. package/dist/test/tile-stats.test.js +42 -0
  209. package/dist/test/tile-stats.test.js.map +1 -0
  210. package/dist/test/tiles/grid/item-tile.test.d.ts +1 -0
  211. package/dist/test/tiles/grid/item-tile.test.js +96 -0
  212. package/dist/test/tiles/grid/item-tile.test.js.map +1 -0
  213. package/dist/test/utils/format-count.test.d.ts +1 -0
  214. package/dist/test/utils/format-count.test.js +24 -0
  215. package/dist/test/utils/format-count.test.js.map +1 -0
  216. package/dist/test/utils/format-date.test.d.ts +1 -0
  217. package/dist/test/utils/format-date.test.js +18 -0
  218. package/dist/test/utils/format-date.test.js.map +1 -0
  219. package/package.json +1 -1
  220. package/src/collection-browser.ts +12 -0
  221. package/tsconfig.json +1 -1
  222. package/types/dompurify.d.ts +1 -0
@@ -0,0 +1,455 @@
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
+ return html `
48
+ <div id="list-line" class="${this.classSize}">
49
+ ${this.classSize === 'mobile'
50
+ ? this.mobileTemplate
51
+ : this.desktopTemplate}
52
+ </div>
53
+ `;
54
+ }
55
+ get mobileTemplate() {
56
+ return html `
57
+ <div id="list-line-top">
58
+ <div id="list-line-left">${this.imageBlockTemplate}</div>
59
+ <div id="list-line-right">
60
+ <div id="title-line">
61
+ <div id="title">${this.titleTemplate}</div>
62
+ ${this.iconRightTemplate}
63
+ </div>
64
+ </div>
65
+ </div>
66
+ <div id="list-line-bottom">${this.detailsTemplate}</div>
67
+ `;
68
+ }
69
+ get desktopTemplate() {
70
+ return html `
71
+ <div id="list-line-left">${this.imageBlockTemplate}</div>
72
+ <div id="list-line-right">
73
+ <div id="title-line">
74
+ <div id="title">${this.titleTemplate}</div>
75
+ ${this.iconRightTemplate}
76
+ </div>
77
+ ${this.detailsTemplate}
78
+ </div>
79
+ `;
80
+ }
81
+ get imageBlockTemplate() {
82
+ return html `
83
+ <image-block
84
+ .model=${this.model}
85
+ .baseImageUrl=${this.baseImageUrl}
86
+ .isCompactTile=${false}
87
+ .isListTile=${true}
88
+ .viewSize=${this.classSize}
89
+ >
90
+ </image-block>
91
+ `;
92
+ }
93
+ get detailsTemplate() {
94
+ return html `
95
+ ${this.itemLineTemplate} ${this.creatorTemplate}
96
+ <div id="dates-line">
97
+ ${this.datePublishedTemplate} ${this.dateSortByTemplate}
98
+ </div>
99
+ <div id="views-line">
100
+ ${this.viewsTemplate} ${this.ratingTemplate} ${this.reviewsTemplate}
101
+ </div>
102
+ ${this.topicsTemplate} ${this.collectionsTemplate}
103
+ ${this.descriptionTemplate}
104
+ `;
105
+ }
106
+ // Data templates
107
+ get iconRightTemplate() {
108
+ var _a, _b;
109
+ return html `
110
+ <div id="icon-right">
111
+ <mediatype-icon
112
+ .mediatype=${(_a = this.model) === null || _a === void 0 ? void 0 : _a.mediatype}
113
+ .collections=${(_b = this.model) === null || _b === void 0 ? void 0 : _b.collections}
114
+ >
115
+ </mediatype-icon>
116
+ </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
+ }
140
+ return html `
141
+ <div id="source" class="metadata">
142
+ ${this.labelTemplate('Source')}
143
+ ${this.searchLink('source', this.model.source)}
144
+ </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') {
159
+ return html `
160
+ <div id="creator" class="metadata">
161
+ <span class="label"> ${accountLabel((_b = this.model) === null || _b === void 0 ? void 0 : _b.dateAdded)} </span>
162
+ </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
+ }
169
+ return html `
170
+ <div id="creator" class="metadata">
171
+ ${this.labelTemplate('By')}
172
+ ${join(map(this.model.creators, id => this.searchLink('creator', id)), html `, `)}
173
+ </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
+ }
208
+ return html `
209
+ <div id="topics" class="metadata">
210
+ ${this.labelTemplate('Topics')}
211
+ ${join(map(this.model.subjects, id => this.searchLink('subject', id)), html `, `)}
212
+ </div>
213
+ `;
214
+ }
215
+ get collectionsTemplate() {
216
+ if (!this.collectionLinks || this.collectionLinks.length === 0) {
217
+ return nothing;
218
+ }
219
+ return html `
220
+ <div id="collections" class="metadata">
221
+ ${this.labelTemplate('Collections')}
222
+ ${join(this.collectionLinks, html `, `)}
223
+ </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
+ // Utility functions
231
+ metadataTemplate(text, label = '', id) {
232
+ if (!text)
233
+ return nothing;
234
+ return html `
235
+ <div id=${ifDefined(id)} class="metadata">
236
+ ${this.labelTemplate(label)} ${text}
237
+ </div>
238
+ `;
239
+ }
240
+ labelTemplate(label) {
241
+ return html ` ${label
242
+ ? html `<span class="label">${label}: </span>`
243
+ : nothing}`;
244
+ }
245
+ searchLink(field, searchTerm) {
246
+ if (!field || !searchTerm) {
247
+ return nothing;
248
+ }
249
+ const query = encodeURIComponent(`${field}:"${searchTerm}"`);
250
+ // No whitespace after closing tag
251
+ // Note: single ' for href='' to wrap " in query var gets changed back by yarn format
252
+ // eslint-disable-next-line lit/no-invalid-html
253
+ return html `<a href="${this.baseNavigationUrl}/search.php?query=${query}">
254
+ ${DOMPurify.sanitize(searchTerm)}</a
255
+ >`;
256
+ }
257
+ detailsLink(identifier, text) {
258
+ const linkText = text !== null && text !== void 0 ? text : identifier;
259
+ // No whitespace after closing tag
260
+ // identifiers (all ASCII in their creation) should be safe to use in href, but sanitize anyway
261
+ return html `<a
262
+ href="${this.baseNavigationUrl}/details/${encodeURI(identifier)}"
263
+ >${DOMPurify.sanitize(linkText)}</a
264
+ >`;
265
+ }
266
+ /*
267
+ * TODO: fix field names to match model in src/collection-browser.ts
268
+ * private get dateSortSelector()
269
+ * @see src/models.ts
270
+ */
271
+ get date() {
272
+ var _a, _b, _c, _d, _e;
273
+ switch ((_a = this.sortParam) === null || _a === void 0 ? void 0 : _a.field) {
274
+ case 'date':
275
+ return (_b = this.model) === null || _b === void 0 ? void 0 : _b.datePublished;
276
+ case 'reviewdate':
277
+ return (_c = this.model) === null || _c === void 0 ? void 0 : _c.dateReviewed;
278
+ case 'addeddate':
279
+ return (_d = this.model) === null || _d === void 0 ? void 0 : _d.dateAdded;
280
+ default:
281
+ return (_e = this.model) === null || _e === void 0 ? void 0 : _e.dateArchived; // publicdate
282
+ }
283
+ }
284
+ get classSize() {
285
+ if (this.mobileBreakpoint &&
286
+ this.currentWidth &&
287
+ this.currentWidth < this.mobileBreakpoint) {
288
+ return 'mobile';
289
+ }
290
+ return 'desktop';
291
+ }
292
+ get formatSize() {
293
+ if (this.mobileBreakpoint &&
294
+ this.currentWidth &&
295
+ this.currentWidth < this.mobileBreakpoint) {
296
+ return 'short';
297
+ }
298
+ return 'long';
299
+ }
300
+ static get styles() {
301
+ return css `
302
+ html {
303
+ font-size: unset;
304
+ }
305
+
306
+ div {
307
+ font-size: 14px;
308
+ }
309
+
310
+ div a {
311
+ text-decoration: none;
312
+ }
313
+
314
+ .label {
315
+ font-weight: bold;
316
+ }
317
+
318
+ #list-line.mobile {
319
+ --infiniteScrollerRowGap: 20px;
320
+ --infiniteScrollerRowHeight: auto;
321
+ }
322
+
323
+ #list-line.desktop {
324
+ --infiniteScrollerRowGap: 30px;
325
+ --infiniteScrollerRowHeight: auto;
326
+ }
327
+
328
+ /* fields */
329
+ #icon-right {
330
+ width: 20px;
331
+ padding-top: 5px;
332
+ --iconHeight: 20px;
333
+ --iconWidth: 20px;
334
+ --iconTextAlign: right;
335
+ margin-top: -8px;
336
+ text-align: right;
337
+ }
338
+
339
+ #title {
340
+ color: #4b64ff;
341
+ text-decoration: none;
342
+ font-size: 22px;
343
+ font-weight: bold;
344
+ /* align top of text with image */
345
+ line-height: 25px;
346
+ margin-top: -4px;
347
+ padding-bottom: 2px;
348
+ flex-grow: 1;
349
+ }
350
+
351
+ .metadata {
352
+ line-height: 20px;
353
+ }
354
+
355
+ #description,
356
+ #creator,
357
+ #topics,
358
+ #source {
359
+ text-align: left;
360
+ overflow: hidden;
361
+ text-overflow: ellipsis;
362
+ -webkit-box-orient: vertical;
363
+ display: -webkit-box;
364
+ word-break: break-word;
365
+ -webkit-line-clamp: 3; /* number of lines to show */
366
+ line-clamp: 3;
367
+ }
368
+
369
+ #icon {
370
+ padding-top: 5px;
371
+ }
372
+
373
+ #description {
374
+ padding-top: 10px;
375
+ }
376
+
377
+ /* Top level container */
378
+ #list-line {
379
+ display: flex;
380
+ }
381
+
382
+ #list-line.mobile {
383
+ flex-direction: column;
384
+ }
385
+
386
+ #list-line.desktop {
387
+ column-gap: 10px;
388
+ }
389
+
390
+ #list-line-top {
391
+ display: flex;
392
+ column-gap: 7px;
393
+ }
394
+
395
+ #list-line-bottom {
396
+ padding-top: 4px;
397
+ }
398
+
399
+ #list-line-right,
400
+ #list-line-top,
401
+ #list-line-bottom {
402
+ width: 100%;
403
+ }
404
+
405
+ div a:hover {
406
+ text-decoration: underline;
407
+ }
408
+
409
+ /* Lines containing multiple div as row */
410
+ #item-line,
411
+ #dates-line,
412
+ #views-line,
413
+ #title-line {
414
+ display: flex;
415
+ flex-direction: row;
416
+ gap: 10px;
417
+ }
418
+ `;
419
+ }
420
+ };
421
+ __decorate([
422
+ property({ type: Object })
423
+ ], TileList.prototype, "model", void 0);
424
+ __decorate([
425
+ property({ type: String })
426
+ ], TileList.prototype, "baseNavigationUrl", void 0);
427
+ __decorate([
428
+ property({ type: Object })
429
+ ], TileList.prototype, "collectionNameCache", void 0);
430
+ __decorate([
431
+ property({ type: Number })
432
+ ], TileList.prototype, "currentWidth", void 0);
433
+ __decorate([
434
+ property({ type: Number })
435
+ ], TileList.prototype, "currentHeight", void 0);
436
+ __decorate([
437
+ property({ type: Object })
438
+ ], TileList.prototype, "sortParam", void 0);
439
+ __decorate([
440
+ property({ type: Number })
441
+ ], TileList.prototype, "mobileBreakpoint", void 0);
442
+ __decorate([
443
+ state()
444
+ ], TileList.prototype, "collectionLinks", void 0);
445
+ __decorate([
446
+ property({ type: String })
447
+ ], TileList.prototype, "baseImageUrl", void 0);
448
+ __decorate([
449
+ property({ type: Boolean })
450
+ ], TileList.prototype, "loggedIn", void 0);
451
+ TileList = __decorate([
452
+ customElement('tile-list')
453
+ ], TileList);
454
+ export { TileList };
455
+ //# sourceMappingURL=tile-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tile-list.js","sourceRoot":"","sources":["../../../../src/tiles/list/tile-list.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n css,\n html,\n LitElement,\n nothing,\n PropertyValues,\n TemplateResult,\n} from 'lit';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { join } from 'lit/directives/join.js';\nimport { map } from 'lit/directives/map.js';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport DOMPurify from 'dompurify';\n\nimport type { CollectionNameCacheInterface } from '@internetarchive/collection-name-cache';\nimport type { SortParam } from '@internetarchive/search-service';\nimport type { TileModel } from '../../models';\n\nimport { dateLabel } from './date-label';\nimport { accountLabel } from './account-label';\nimport { formatCount, NumberFormat } from '../../utils/format-count';\nimport { formatDate, DateFormat } from '../../utils/format-date';\n\nimport '../image-block';\nimport '../mediatype-icon';\n\n@customElement('tile-list')\nexport class TileList extends LitElement {\n @property({ type: Object }) model?: TileModel;\n\n @property({ type: String }) baseNavigationUrl?: string;\n\n @property({ type: Object })\n collectionNameCache?: CollectionNameCacheInterface;\n\n @property({ type: Number }) currentWidth?: number;\n\n @property({ type: Number }) currentHeight?: number;\n\n @property({ type: Object }) sortParam: SortParam | null = null;\n\n @property({ type: Number }) mobileBreakpoint?: number;\n\n @state() private collectionLinks: TemplateResult[] = [];\n\n @property({ type: String }) baseImageUrl?: string;\n\n @property({ type: Boolean }) loggedIn = false;\n\n protected updated(changed: PropertyValues): void {\n if (changed.has('model')) {\n this.fetchCollectionNames();\n }\n }\n\n private async fetchCollectionNames() {\n if (\n !this.model?.collections ||\n this.model.collections.length === 0 ||\n !this.collectionNameCache\n ) {\n return;\n }\n // Note: quirk of Lit: need to replace collectionLinks array,\n // otherwise it will not re-render. Can't simply alter the array.\n this.collectionLinks = [];\n const newCollellectionLinks: TemplateResult[] = [];\n const promises: Promise<void>[] = [];\n for (const collection of this.model.collections) {\n promises.push(\n this.collectionNameCache?.collectionNameFor(collection).then(name => {\n newCollellectionLinks.push(\n this.detailsLink(collection, name ?? collection)\n );\n })\n );\n }\n await Promise.all(promises);\n this.collectionLinks = newCollellectionLinks;\n }\n\n render() {\n return html`\n <div id=\"list-line\" class=\"${this.classSize}\">\n ${this.classSize === 'mobile'\n ? this.mobileTemplate\n : this.desktopTemplate}\n </div>\n `;\n }\n\n private get mobileTemplate() {\n return html`\n <div id=\"list-line-top\">\n <div id=\"list-line-left\">${this.imageBlockTemplate}</div>\n <div id=\"list-line-right\">\n <div id=\"title-line\">\n <div id=\"title\">${this.titleTemplate}</div>\n ${this.iconRightTemplate}\n </div>\n </div>\n </div>\n <div id=\"list-line-bottom\">${this.detailsTemplate}</div>\n `;\n }\n\n private get desktopTemplate() {\n return html`\n <div id=\"list-line-left\">${this.imageBlockTemplate}</div>\n <div id=\"list-line-right\">\n <div id=\"title-line\">\n <div id=\"title\">${this.titleTemplate}</div>\n ${this.iconRightTemplate}\n </div>\n ${this.detailsTemplate}\n </div>\n `;\n }\n\n private get imageBlockTemplate() {\n return html`\n <image-block\n .model=${this.model}\n .baseImageUrl=${this.baseImageUrl}\n .isCompactTile=${false}\n .isListTile=${true}\n .viewSize=${this.classSize}\n >\n </image-block>\n `;\n }\n\n private get detailsTemplate() {\n return html`\n ${this.itemLineTemplate} ${this.creatorTemplate}\n <div id=\"dates-line\">\n ${this.datePublishedTemplate} ${this.dateSortByTemplate}\n </div>\n <div id=\"views-line\">\n ${this.viewsTemplate} ${this.ratingTemplate} ${this.reviewsTemplate}\n </div>\n ${this.topicsTemplate} ${this.collectionsTemplate}\n ${this.descriptionTemplate}\n `;\n }\n\n // Data templates\n private get iconRightTemplate() {\n return html`\n <div id=\"icon-right\">\n <mediatype-icon\n .mediatype=${this.model?.mediatype}\n .collections=${this.model?.collections}\n >\n </mediatype-icon>\n </div>\n `;\n }\n\n private get titleTemplate() {\n if (!this.model?.title) {\n return nothing;\n }\n return html` ${this.detailsLink(this.model.identifier, this.model.title)} `;\n }\n\n private get itemLineTemplate() {\n const source = this.sourceTemplate;\n const volume = this.volumeTemplate;\n const issue = this.issueTemplate;\n if (!source && !volume && !issue) {\n return nothing;\n }\n return html` <div id=\"item-line\">${source} ${volume} ${issue}</div> `;\n }\n\n private get sourceTemplate() {\n if (!this.model?.source) {\n return nothing;\n }\n return html`\n <div id=\"source\" class=\"metadata\">\n ${this.labelTemplate('Source')}\n ${this.searchLink('source', this.model.source)}\n </div>\n `;\n }\n\n private get volumeTemplate() {\n return this.metadataTemplate(this.model?.volume, 'Volume');\n }\n\n private get issueTemplate() {\n return this.metadataTemplate(this.model?.issue, 'Issue');\n }\n\n private get creatorTemplate() {\n // \"Achivist since\" if account\n if (this.model?.mediatype === 'account') {\n return html`\n <div id=\"creator\" class=\"metadata\">\n <span class=\"label\"> ${accountLabel(this.model?.dateAdded)} </span>\n </div>\n `;\n }\n // \"Creator\" if not account tile\n if (!this.model?.creators || this.model.creators.length === 0) {\n return nothing;\n }\n return html`\n <div id=\"creator\" class=\"metadata\">\n ${this.labelTemplate('By')}\n ${join(\n map(this.model.creators, id => this.searchLink('creator', id)),\n html`, `\n )}\n </div>\n `;\n }\n\n private get datePublishedTemplate() {\n return this.metadataTemplate(\n formatDate(this.model?.datePublished, 'long'),\n 'Published'\n );\n }\n\n // Show date label/value when sorted by date type\n // Except datePublished which is always shown\n private get dateSortByTemplate() {\n if (\n this.sortParam &&\n (this.sortParam.field === 'addeddate' ||\n this.sortParam.field === 'reviewdate' ||\n this.sortParam.field === 'publicdate')\n ) {\n return this.metadataTemplate(\n formatDate(this.date, 'long'),\n dateLabel(this.sortParam.field)\n );\n }\n return nothing;\n }\n\n private get viewsTemplate() {\n return this.metadataTemplate(\n `${formatCount(this.model?.viewCount ?? 0, this.formatSize)}`,\n 'Views'\n );\n }\n\n private get ratingTemplate() {\n return this.metadataTemplate(this.model?.averageRating, 'Avg Rating');\n }\n\n private get reviewsTemplate() {\n return this.metadataTemplate(this.model?.commentCount, 'Reviews');\n }\n\n private get topicsTemplate() {\n if (!this.model?.subjects || this.model.subjects.length === 0) {\n return nothing;\n }\n return html`\n <div id=\"topics\" class=\"metadata\">\n ${this.labelTemplate('Topics')}\n ${join(\n map(this.model.subjects, id => this.searchLink('subject', id)),\n html`, `\n )}\n </div>\n `;\n }\n\n private get collectionsTemplate() {\n if (!this.collectionLinks || this.collectionLinks.length === 0) {\n return nothing;\n }\n return html`\n <div id=\"collections\" class=\"metadata\">\n ${this.labelTemplate('Collections')}\n ${join(this.collectionLinks, html`, `)}\n </div>\n `;\n }\n\n private get descriptionTemplate() {\n return this.metadataTemplate(\n DOMPurify.sanitize(this.model?.description ?? ''),\n '',\n 'description'\n );\n }\n\n // Utility functions\n private metadataTemplate(text: any, label = '', id?: string) {\n if (!text) return nothing;\n return html`\n <div id=${ifDefined(id)} class=\"metadata\">\n ${this.labelTemplate(label)} ${text}\n </div>\n `;\n }\n\n private labelTemplate(label: string) {\n return html` ${label\n ? html`<span class=\"label\">${label}: </span>`\n : nothing}`;\n }\n\n private searchLink(field: string, searchTerm: string) {\n if (!field || !searchTerm) {\n return nothing;\n }\n const query = encodeURIComponent(`${field}:\"${searchTerm}\"`);\n // No whitespace after closing tag\n // Note: single ' for href='' to wrap \" in query var gets changed back by yarn format\n\n // eslint-disable-next-line lit/no-invalid-html\n return html`<a href=\"${this.baseNavigationUrl}/search.php?query=${query}\">\n ${DOMPurify.sanitize(searchTerm)}</a\n >`;\n }\n\n private detailsLink(identifier: string, text?: string): TemplateResult {\n const linkText = text ?? identifier;\n // No whitespace after closing tag\n // identifiers (all ASCII in their creation) should be safe to use in href, but sanitize anyway\n return html`<a\n href=\"${this.baseNavigationUrl}/details/${encodeURI(identifier)}\"\n >${DOMPurify.sanitize(linkText)}</a\n >`;\n }\n\n /*\n * TODO: fix field names to match model in src/collection-browser.ts\n * private get dateSortSelector()\n * @see src/models.ts\n */\n private get date(): Date | undefined {\n switch (this.sortParam?.field) {\n case 'date':\n return this.model?.datePublished;\n case 'reviewdate':\n return this.model?.dateReviewed;\n case 'addeddate':\n return this.model?.dateAdded;\n default:\n return this.model?.dateArchived; // publicdate\n }\n }\n\n private get classSize(): string {\n if (\n this.mobileBreakpoint &&\n this.currentWidth &&\n this.currentWidth < this.mobileBreakpoint\n ) {\n return 'mobile';\n }\n return 'desktop';\n }\n\n private get formatSize(): DateFormat | NumberFormat {\n if (\n this.mobileBreakpoint &&\n this.currentWidth &&\n this.currentWidth < this.mobileBreakpoint\n ) {\n return 'short';\n }\n return 'long';\n }\n\n static get styles() {\n return css`\n html {\n font-size: unset;\n }\n\n div {\n font-size: 14px;\n }\n\n div a {\n text-decoration: none;\n }\n\n .label {\n font-weight: bold;\n }\n\n #list-line.mobile {\n --infiniteScrollerRowGap: 20px;\n --infiniteScrollerRowHeight: auto;\n }\n\n #list-line.desktop {\n --infiniteScrollerRowGap: 30px;\n --infiniteScrollerRowHeight: auto;\n }\n\n /* fields */\n #icon-right {\n width: 20px;\n padding-top: 5px;\n --iconHeight: 20px;\n --iconWidth: 20px;\n --iconTextAlign: right;\n margin-top: -8px;\n text-align: right;\n }\n\n #title {\n color: #4b64ff;\n text-decoration: none;\n font-size: 22px;\n font-weight: bold;\n /* align top of text with image */\n line-height: 25px;\n margin-top: -4px;\n padding-bottom: 2px;\n flex-grow: 1;\n }\n\n .metadata {\n line-height: 20px;\n }\n\n #description,\n #creator,\n #topics,\n #source {\n text-align: left;\n overflow: hidden;\n text-overflow: ellipsis;\n -webkit-box-orient: vertical;\n display: -webkit-box;\n word-break: break-word;\n -webkit-line-clamp: 3; /* number of lines to show */\n line-clamp: 3;\n }\n\n #icon {\n padding-top: 5px;\n }\n\n #description {\n padding-top: 10px;\n }\n\n /* Top level container */\n #list-line {\n display: flex;\n }\n\n #list-line.mobile {\n flex-direction: column;\n }\n\n #list-line.desktop {\n column-gap: 10px;\n }\n\n #list-line-top {\n display: flex;\n column-gap: 7px;\n }\n\n #list-line-bottom {\n padding-top: 4px;\n }\n\n #list-line-right,\n #list-line-top,\n #list-line-bottom {\n width: 100%;\n }\n\n div a:hover {\n text-decoration: underline;\n }\n\n /* Lines containing multiple div as row */\n #item-line,\n #dates-line,\n #views-line,\n #title-line {\n display: flex;\n flex-direction: row;\n gap: 10px;\n }\n `;\n }\n}\n"]}
@@ -0,0 +1,9 @@
1
+ import { CSSResultGroup, LitElement } from 'lit';
2
+ export declare class MediatypeIcon extends LitElement {
3
+ mediatype: string | undefined;
4
+ collections: string[] | undefined;
5
+ showText: boolean;
6
+ private get displayMediatype();
7
+ render(): import("lit-html").TemplateResult<1>;
8
+ static get styles(): CSSResultGroup;
9
+ }
@@ -0,0 +1,82 @@
1
+ import { __decorate } from "tslib";
2
+ import { css, html, LitElement } from 'lit';
3
+ import { customElement, property } from 'lit/decorators.js';
4
+ import { mediatypeConfig } from '../mediatype/mediatype-config';
5
+ let MediatypeIcon = class MediatypeIcon extends LitElement {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.showText = false;
9
+ }
10
+ get displayMediatype() {
11
+ var _a, _b;
12
+ const tvIdentifier = ['tvnews', 'tvarchive', 'television'];
13
+ const radioIdentifier = ['radio', 'radioprogram'];
14
+ if (this.mediatype === 'movies' &&
15
+ ((_a = this.collections) === null || _a === void 0 ? void 0 : _a.some(id => tvIdentifier.indexOf(id) >= 0))) {
16
+ return 'tv';
17
+ }
18
+ if (this.mediatype === 'audio' &&
19
+ ((_b = this.collections) === null || _b === void 0 ? void 0 : _b.some(id => radioIdentifier.indexOf(id) >= 0))) {
20
+ return 'radio';
21
+ }
22
+ return this.mediatype || '';
23
+ }
24
+ render() {
25
+ const config = mediatypeConfig[this.displayMediatype];
26
+ if (!config) {
27
+ return html ``;
28
+ }
29
+ return html `
30
+ <div
31
+ id="icon"
32
+ class="${this.showText ? 'show-text' : 'hide-text'}"
33
+ style="--iconFillColor: ${config.color}"
34
+ >
35
+ ${config.icon}
36
+ <p class="status-text">${config.text}</p>
37
+ </div>
38
+ `;
39
+ }
40
+ static get styles() {
41
+ return css `
42
+ #icon {
43
+ height: var(--iconHeight, 25px);
44
+ }
45
+
46
+ .status-text {
47
+ font-size: 14px;
48
+ color: #2c2c2c;
49
+ margin: auto;
50
+ display: block;
51
+ text-align: var(--iconTextAlign, center);
52
+ }
53
+
54
+ #icon.hide-text p {
55
+ display: none;
56
+ }
57
+
58
+ svg {
59
+ height: var(--iconHeight, 10px);
60
+ width: var(--iconWidth, 10px);
61
+ }
62
+
63
+ .fill-color {
64
+ fill: var(--iconFillColor, '#000000');
65
+ }
66
+ `;
67
+ }
68
+ };
69
+ __decorate([
70
+ property({ type: String })
71
+ ], MediatypeIcon.prototype, "mediatype", void 0);
72
+ __decorate([
73
+ property({ type: Array })
74
+ ], MediatypeIcon.prototype, "collections", void 0);
75
+ __decorate([
76
+ property({ type: Boolean })
77
+ ], MediatypeIcon.prototype, "showText", void 0);
78
+ MediatypeIcon = __decorate([
79
+ customElement('mediatype-icon')
80
+ ], MediatypeIcon);
81
+ export { MediatypeIcon };
82
+ //# sourceMappingURL=mediatype-icon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mediatype-icon.js","sourceRoot":"","sources":["../../../src/tiles/mediatype-icon.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;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAGhE,IAAa,aAAa,GAA1B,MAAa,aAAc,SAAQ,UAAU;IAA7C;;QAK+B,aAAQ,GAAG,KAAK,CAAC;IAmEhD,CAAC;IAjEC,IAAY,gBAAgB;;QAC1B,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QAC3D,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAElD,IACE,IAAI,CAAC,SAAS,KAAK,QAAQ;aAC3B,MAAA,IAAI,CAAC,WAAW,0CAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA,EAC3D;YACA,OAAO,IAAI,CAAC;SACb;QACD,IACE,IAAI,CAAC,SAAS,KAAK,OAAO;aAC1B,MAAA,IAAI,CAAC,WAAW,0CAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA,EAC9D;YACA,OAAO,OAAO,CAAC;SAChB;QACD,OAAO,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,MAAM;QACJ,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,IAAI,CAAA,EAAE,CAAC;SACf;QAED,OAAO,IAAI,CAAA;;;iBAGE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW;kCACxB,MAAM,CAAC,KAAK;;UAEpC,MAAM,CAAC,IAAI;iCACY,MAAM,CAAC,IAAI;;KAEvC,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,MAAM;QACf,OAAO,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;KAyBT,CAAC;IACJ,CAAC;CACF,CAAA;AAvE6B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;gDAA+B;AAE/B;IAA1B,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;kDAAmC;AAEhC;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;+CAAkB;AALnC,aAAa;IADzB,aAAa,CAAC,gBAAgB,CAAC;GACnB,aAAa,CAwEzB;SAxEY,aAAa","sourcesContent":["import { css, CSSResultGroup, html, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { mediatypeConfig } from '../mediatype/mediatype-config';\n\n@customElement('mediatype-icon')\nexport class MediatypeIcon extends LitElement {\n @property({ type: String }) mediatype: string | undefined;\n\n @property({ type: Array }) collections: string[] | undefined;\n\n @property({ type: Boolean }) showText = false;\n\n private get displayMediatype(): string {\n const tvIdentifier = ['tvnews', 'tvarchive', 'television'];\n const radioIdentifier = ['radio', 'radioprogram'];\n\n if (\n this.mediatype === 'movies' &&\n this.collections?.some(id => tvIdentifier.indexOf(id) >= 0)\n ) {\n return 'tv';\n }\n if (\n this.mediatype === 'audio' &&\n this.collections?.some(id => radioIdentifier.indexOf(id) >= 0)\n ) {\n return 'radio';\n }\n return this.mediatype || '';\n }\n\n render() {\n const config = mediatypeConfig[this.displayMediatype];\n if (!config) {\n return html``;\n }\n\n return html`\n <div\n id=\"icon\"\n class=\"${this.showText ? 'show-text' : 'hide-text'}\"\n style=\"--iconFillColor: ${config.color}\"\n >\n ${config.icon}\n <p class=\"status-text\">${config.text}</p>\n </div>\n `;\n }\n\n static get styles(): CSSResultGroup {\n return css`\n #icon {\n height: var(--iconHeight, 25px);\n }\n\n .status-text {\n font-size: 14px;\n color: #2c2c2c;\n margin: auto;\n display: block;\n text-align: var(--iconTextAlign, center);\n }\n\n #icon.hide-text p {\n display: none;\n }\n\n svg {\n height: var(--iconHeight, 10px);\n width: var(--iconWidth, 10px);\n }\n\n .fill-color {\n fill: var(--iconFillColor, '#000000');\n }\n `;\n }\n}\n"]}
@@ -0,0 +1,7 @@
1
+ import { CSSResultGroup, LitElement } from 'lit';
2
+ export declare class IconOverlay extends LitElement {
3
+ loggedIn: boolean;
4
+ loginRequired: boolean;
5
+ render(): import("lit-html").TemplateResult<1>;
6
+ static get styles(): CSSResultGroup;
7
+ }
@@ -0,0 +1,43 @@
1
+ import { __decorate } from "tslib";
2
+ import { css, html, LitElement } from 'lit';
3
+ import { customElement, property } from 'lit/decorators.js';
4
+ import { restrictedIcon } from '../../assets/img/icons/restricted';
5
+ import { loginRequiredIcon } from '../../assets/img/icons/login-required';
6
+ let IconOverlay = class IconOverlay extends LitElement {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.loggedIn = false;
10
+ this.loginRequired = false;
11
+ }
12
+ render() {
13
+ if (this.loginRequired && !this.loggedIn) {
14
+ return html `${loginRequiredIcon} `;
15
+ }
16
+ return html `${restrictedIcon}`;
17
+ }
18
+ static get styles() {
19
+ return css `
20
+ :host {
21
+ position: absolute;
22
+ top: 50%;
23
+ left: 50%;
24
+ transform: translate(-50%, -50%);
25
+ -ms-transform: translate(-50%, -50%);
26
+ width: 50%;
27
+ height: 50%;
28
+ z-index: 2;
29
+ }
30
+ `;
31
+ }
32
+ };
33
+ __decorate([
34
+ property({ type: Boolean })
35
+ ], IconOverlay.prototype, "loggedIn", void 0);
36
+ __decorate([
37
+ property({ type: Boolean })
38
+ ], IconOverlay.prototype, "loginRequired", void 0);
39
+ IconOverlay = __decorate([
40
+ customElement('icon-overlay')
41
+ ], IconOverlay);
42
+ export { IconOverlay };
43
+ //# sourceMappingURL=icon-overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon-overlay.js","sourceRoot":"","sources":["../../../../src/tiles/overlay/icon-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;AAE5D,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAG1E,IAAa,WAAW,GAAxB,MAAa,WAAY,SAAQ,UAAU;IAA3C;;QAC+B,aAAQ,GAAG,KAAK,CAAC;QAEjB,kBAAa,GAAG,KAAK,CAAC;IAuBrD,CAAC;IArBC,MAAM;QACJ,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACxC,OAAO,IAAI,CAAA,GAAG,iBAAiB,GAAG,CAAC;SACpC;QACD,OAAO,IAAI,CAAA,GAAG,cAAc,EAAE,CAAC;IACjC,CAAC;IAED,MAAM,KAAK,MAAM;QACf,OAAO,GAAG,CAAA;;;;;;;;;;;KAWT,CAAC;IACJ,CAAC;CACF,CAAA;AAzB8B;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,CA0BvB;SA1BY,WAAW","sourcesContent":["import { css, CSSResultGroup, html, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { restrictedIcon } from '../../assets/img/icons/restricted';\nimport { loginRequiredIcon } from '../../assets/img/icons/login-required';\n\n@customElement('icon-overlay')\nexport class IconOverlay extends LitElement {\n @property({ type: Boolean }) loggedIn = false;\n\n @property({ type: Boolean }) loginRequired = false;\n\n render() {\n if (this.loginRequired && !this.loggedIn) {\n return html`${loginRequiredIcon} `;\n }\n return html`${restrictedIcon}`;\n }\n\n static get styles(): CSSResultGroup {\n return css`\n :host {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n -ms-transform: translate(-50%, -50%);\n width: 50%;\n height: 50%;\n z-index: 2;\n }\n `;\n }\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import { CSSResultGroup, LitElement } from 'lit';
2
+ export declare class TextOverlay extends LitElement {
3
+ loggedIn: boolean;
4
+ loginRequired: boolean;
5
+ render(): import("lit-html").TemplateResult<1>;
6
+ private get textDisplay();
7
+ static get styles(): CSSResultGroup;
8
+ }