@internetarchive/collection-browser 0.1.6 → 0.1.7-alpha-1
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/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/tiles/item-image.d.ts +9 -4
- package/dist/src/tiles/item-image.js +102 -27
- package/dist/src/tiles/item-image.js.map +1 -1
- package/dist/src/tiles/list/tile-list-compact.js +54 -59
- package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
- package/dist/src/tiles/list/tile-list.js +25 -22
- package/dist/src/tiles/list/tile-list.js.map +1 -1
- package/package.json +2 -2
- package/src/assets/img/icons/restricted.ts +29 -0
- package/src/tiles/item-image.ts +107 -29
- package/src/tiles/list/tile-list-compact.ts +45 -50
- package/src/tiles/list/tile-list.ts +22 -21
- package/dist/src/assets/img/icons/mediatype/livemusic.d.ts +0 -1
- package/dist/src/assets/img/icons/mediatype/livemusic.js +0 -7
- package/dist/src/assets/img/icons/mediatype/livemusic.js.map +0 -1
- package/dist/src/assets/img/icons/mediatype/photos.d.ts +0 -1
- package/dist/src/assets/img/icons/mediatype/photos.js +0 -7
- package/dist/src/assets/img/icons/mediatype/photos.js.map +0 -1
- package/dist/src/helpers.d.ts +0 -1
- package/dist/src/helpers.js +0 -20
- package/dist/src/helpers.js.map +0 -1
- package/dist/src/mediatype/mediatype-color.d.ts +0 -3
- package/dist/src/mediatype/mediatype-color.js +0 -15
- package/dist/src/mediatype/mediatype-color.js.map +0 -1
- package/dist/src/mediatype/mediatype-display.d.ts +0 -3
- package/dist/src/mediatype/mediatype-display.js +0 -86
- package/dist/src/mediatype/mediatype-display.js.map +0 -1
- package/dist/src/mediatype/mediatype-icon.d.ts +0 -10
- package/dist/src/mediatype/mediatype-icon.js +0 -105
- package/dist/src/mediatype/mediatype-icon.js.map +0 -1
- package/dist/src/mediatype/mediatype-text.d.ts +0 -3
- package/dist/src/mediatype/mediatype-text.js +0 -17
- package/dist/src/mediatype/mediatype-text.js.map +0 -1
- package/dist/src/mediatype/mediatypeConfig.d.ts +0 -3
- package/dist/src/mediatype/mediatypeConfig.js +0 -86
- package/dist/src/mediatype/mediatypeConfig.js.map +0 -1
- package/dist/src/mediatype-icon.d.ts +0 -9
- package/dist/src/mediatype-icon.js +0 -78
- package/dist/src/mediatype-icon.js.map +0 -1
- package/dist/src/sort-filter-bar/img/grid.d.ts +0 -1
- package/dist/src/sort-filter-bar/img/grid.js +0 -5
- package/dist/src/sort-filter-bar/img/grid.js.map +0 -1
- package/dist/src/tiles/list/tile-list-detail.d.ts +0 -7
- package/dist/src/tiles/list/tile-list-detail.js +0 -28
- package/dist/src/tiles/list/tile-list-detail.js.map +0 -1
- package/dist/src/tiles/loading-tile.d.ts +0 -5
- package/dist/src/tiles/loading-tile.js +0 -32
- package/dist/src/tiles/loading-tile.js.map +0 -1
- package/dist/src/utils/format-string.d.ts +0 -2
- package/dist/src/utils/format-string.js +0 -7
- package/dist/src/utils/format-string.js.map +0 -1
- package/dist/src/waveform-thumbnail.d.ts +0 -7
- package/dist/src/waveform-thumbnail.js +0 -106
- package/dist/src/waveform-thumbnail.js.map +0 -1
- package/dist/src/waveform-view.d.ts +0 -0
- package/dist/src/waveform-view.js +0 -2
- package/dist/src/waveform-view.js.map +0 -1
- package/dist/src/your-webcomponent.d.ts +0 -8
- package/dist/src/your-webcomponent.js +0 -38
- package/dist/src/your-webcomponent.js.map +0 -1
- package/dist/test/mediatype-icon.test.d.ts +0 -0
- package/dist/test/mediatype-icon.test.js +0 -3
- package/dist/test/mediatype-icon.test.js.map +0 -1
- package/dist/test/mediatypeConfig.test.d.ts +0 -1
- package/dist/test/mediatypeConfig.test.js +0 -17
- package/dist/test/mediatypeConfig.test.js.map +0 -1
- package/dist/test/utils/format-string.test.d.ts +0 -1
- package/dist/test/utils/format-string.test.js +0 -17
- package/dist/test/utils/format-string.test.js.map +0 -1
- package/dist/test/your-webcomponent.test.d.ts +0 -1
- package/dist/test/your-webcomponent.test.js +0 -23
- package/dist/test/your-webcomponent.test.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const restrictedIcon: import("lit-html").TemplateResult<2>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { svg } from 'lit';
|
|
2
|
+
export const restrictedIcon = svg `
|
|
3
|
+
<svg
|
|
4
|
+
viewBox="0 0 100 100"
|
|
5
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
6
|
+
>
|
|
7
|
+
<g
|
|
8
|
+
fill="none"
|
|
9
|
+
fill-rule="evenodd"
|
|
10
|
+
>
|
|
11
|
+
<path
|
|
12
|
+
d="m56.4612493 8.80450354 41.8901185 75.94632926c1.7706782 2.8433173 2.1150372 5.2623412 1.0330766 7.2570716-1.0819604 1.9947304-3.26978 2.9920956-6.5634587 2.9920956h-85.69973905c-3.29367873 0-5.46954894-.9973652-6.52761065-2.9920956-1.0580617-1.9947304-.70175345-4.4137543 1.06892476-7.2570716l41.89011844-75.12308969c1.8184757-2.84331737 3.9693609-4.37738627 6.4526556-4.60220671s4.6341799 1.03483527 6.4526556 3.77896714z"
|
|
13
|
+
fill="#000"
|
|
14
|
+
fill-rule="nonzero"
|
|
15
|
+
/>
|
|
16
|
+
<path
|
|
17
|
+
d="m94.0140845 90-44.5547054-79-44.4593791 79z"
|
|
18
|
+
fill="#f8e71c"
|
|
19
|
+
fill-rule="nonzero"
|
|
20
|
+
/>
|
|
21
|
+
<path
|
|
22
|
+
d="m54 69v8h-8v-8zm0-30v10.2515641l-2.0923567 14.7484359h-3.8184713l-2.089172-14.7484359v-10.2515641z"
|
|
23
|
+
fill="#000"
|
|
24
|
+
/>
|
|
25
|
+
</g>
|
|
26
|
+
<title>Content may be inappropriate</title>
|
|
27
|
+
</svg>
|
|
28
|
+
`;
|
|
29
|
+
//# sourceMappingURL=restricted.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restricted.js","sourceRoot":"","sources":["../../../../../src/assets/img/icons/restricted.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BhC,CAAC","sourcesContent":["import { svg } from 'lit';\n\nexport const restrictedIcon = svg`\n <svg\n viewBox=\"0 0 100 100\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g\n fill=\"none\"\n fill-rule=\"evenodd\"\n >\n <path\n d=\"m56.4612493 8.80450354 41.8901185 75.94632926c1.7706782 2.8433173 2.1150372 5.2623412 1.0330766 7.2570716-1.0819604 1.9947304-3.26978 2.9920956-6.5634587 2.9920956h-85.69973905c-3.29367873 0-5.46954894-.9973652-6.52761065-2.9920956-1.0580617-1.9947304-.70175345-4.4137543 1.06892476-7.2570716l41.89011844-75.12308969c1.8184757-2.84331737 3.9693609-4.37738627 6.4526556-4.60220671s4.6341799 1.03483527 6.4526556 3.77896714z\"\n fill=\"#000\"\n fill-rule=\"nonzero\"\n />\n <path\n d=\"m94.0140845 90-44.5547054-79-44.4593791 79z\"\n fill=\"#f8e71c\"\n fill-rule=\"nonzero\"\n />\n <path\n d=\"m54 69v8h-8v-8zm0-30v10.2515641l-2.0923567 14.7484359h-3.8184713l-2.089172-14.7484359v-10.2515641z\"\n fill=\"#000\"\n />\n </g>\n <title>Content may be inappropriate</title>\n </svg>\n`;\n"]}
|
|
@@ -4,22 +4,27 @@ export declare class ItemImage extends LitElement {
|
|
|
4
4
|
model?: TileModel;
|
|
5
5
|
baseImageUrl?: string;
|
|
6
6
|
isListTile: boolean;
|
|
7
|
+
isCompactTile: boolean;
|
|
7
8
|
private isDeemphasize;
|
|
8
9
|
private isWaveform;
|
|
9
10
|
private itemImageWaveform;
|
|
10
11
|
protected updated(changed: PropertyValues): void;
|
|
11
|
-
private
|
|
12
|
+
private setDeemphasize;
|
|
12
13
|
render(): import("lit-html").TemplateResult<1>;
|
|
13
14
|
private get imageSrc();
|
|
14
|
-
private get
|
|
15
|
+
private get itemImageTemplate();
|
|
16
|
+
private get tileImageTemplate();
|
|
17
|
+
private get listImageTemplate();
|
|
15
18
|
private get waveformTemplate();
|
|
19
|
+
private get restrictedIconTemplate();
|
|
16
20
|
private get tileActionTemplate();
|
|
17
21
|
private onLoadItemImageCheck;
|
|
18
22
|
private get imageClass();
|
|
23
|
+
private get listImageClass();
|
|
19
24
|
private get imageBoxClass();
|
|
20
25
|
private get boxWaveformClass();
|
|
21
26
|
private get itemImageWaveformClass();
|
|
22
|
-
private get
|
|
23
|
-
private
|
|
27
|
+
private get hashBasedGradient();
|
|
28
|
+
private hashStrToInt;
|
|
24
29
|
static get styles(): CSSResultGroup;
|
|
25
30
|
}
|
|
@@ -2,22 +2,26 @@ import { __decorate } from "tslib";
|
|
|
2
2
|
import { css, html, nothing, LitElement, } from 'lit';
|
|
3
3
|
import { customElement, property, query, state } from 'lit/decorators.js';
|
|
4
4
|
import { ifDefined } from 'lit/directives/if-defined.js';
|
|
5
|
+
import { restrictedIcon } from '../assets/img/icons/restricted';
|
|
5
6
|
let ItemImage = class ItemImage extends LitElement {
|
|
6
7
|
constructor() {
|
|
7
8
|
super(...arguments);
|
|
8
9
|
this.isListTile = false;
|
|
10
|
+
this.isCompactTile = false;
|
|
9
11
|
this.isDeemphasize = false;
|
|
10
12
|
this.isWaveform = false;
|
|
11
13
|
}
|
|
12
14
|
updated(changed) {
|
|
13
15
|
if (changed.has('model')) {
|
|
14
|
-
this.
|
|
16
|
+
this.setDeemphasize();
|
|
15
17
|
}
|
|
16
18
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
// Don't deemphasize if item is a collection
|
|
20
|
+
setDeemphasize() {
|
|
21
|
+
var _a, _b, _c;
|
|
19
22
|
this.isDeemphasize =
|
|
20
|
-
(
|
|
23
|
+
(_c = (((_a = this.model) === null || _a === void 0 ? void 0 : _a.mediatype) !== 'collection' &&
|
|
24
|
+
((_b = this.model) === null || _b === void 0 ? void 0 : _b.collections.includes('deemphasize')))) !== null && _c !== void 0 ? _c : false;
|
|
21
25
|
}
|
|
22
26
|
render() {
|
|
23
27
|
var _a;
|
|
@@ -25,8 +29,7 @@ let ItemImage = class ItemImage extends LitElement {
|
|
|
25
29
|
<div class=${ifDefined(this.imageBoxClass)}>
|
|
26
30
|
${((_a = this.model) === null || _a === void 0 ? void 0 : _a.mediatype) === 'audio'
|
|
27
31
|
? this.waveformTemplate
|
|
28
|
-
: this.
|
|
29
|
-
${this.tileActionTemplate}
|
|
32
|
+
: this.itemImageTemplate}
|
|
30
33
|
</div>
|
|
31
34
|
`;
|
|
32
35
|
}
|
|
@@ -35,12 +38,27 @@ let ItemImage = class ItemImage extends LitElement {
|
|
|
35
38
|
return `${this.baseImageUrl}/services/img/${(_a = this.model) === null || _a === void 0 ? void 0 : _a.identifier}`;
|
|
36
39
|
}
|
|
37
40
|
// Templates
|
|
38
|
-
get
|
|
41
|
+
get itemImageTemplate() {
|
|
42
|
+
return html `
|
|
43
|
+
${this.isListTile ? this.listImageTemplate : this.tileImageTemplate}
|
|
44
|
+
`;
|
|
45
|
+
}
|
|
46
|
+
get tileImageTemplate() {
|
|
39
47
|
return html `
|
|
40
48
|
<div
|
|
41
49
|
class=${this.imageClass}
|
|
42
50
|
style="background-image:url(${this.imageSrc})"
|
|
43
51
|
></div>
|
|
52
|
+
${this.tileActionTemplate}
|
|
53
|
+
`;
|
|
54
|
+
}
|
|
55
|
+
get listImageTemplate() {
|
|
56
|
+
if (!this.model) {
|
|
57
|
+
return nothing;
|
|
58
|
+
}
|
|
59
|
+
return html `
|
|
60
|
+
<img src="${this.imageSrc}" alt="" class="${this.listImageClass}" />
|
|
61
|
+
${this.restrictedIconTemplate}
|
|
44
62
|
`;
|
|
45
63
|
}
|
|
46
64
|
get waveformTemplate() {
|
|
@@ -50,12 +68,18 @@ let ItemImage = class ItemImage extends LitElement {
|
|
|
50
68
|
<img
|
|
51
69
|
class=${this.itemImageWaveformClass}
|
|
52
70
|
src="${this.imageSrc}"
|
|
53
|
-
alt="${ifDefined((_a = this.model) === null || _a === void 0 ? void 0 : _a.
|
|
71
|
+
alt="${ifDefined((_a = this.model) === null || _a === void 0 ? void 0 : _a.title)}"
|
|
54
72
|
@load=${this.onLoadItemImageCheck}
|
|
55
73
|
/>
|
|
56
74
|
</div>
|
|
57
75
|
`;
|
|
58
76
|
}
|
|
77
|
+
get restrictedIconTemplate() {
|
|
78
|
+
if (!this.isDeemphasize) {
|
|
79
|
+
return nothing;
|
|
80
|
+
}
|
|
81
|
+
return html ` ${restrictedIcon} `;
|
|
82
|
+
}
|
|
59
83
|
get tileActionTemplate() {
|
|
60
84
|
if (!this.isDeemphasize) {
|
|
61
85
|
return nothing;
|
|
@@ -75,24 +99,34 @@ let ItemImage = class ItemImage extends LitElement {
|
|
|
75
99
|
get imageClass() {
|
|
76
100
|
return `item-image ${this.isDeemphasize ? 'deemphasize' : 'default'}`;
|
|
77
101
|
}
|
|
102
|
+
get listImageClass() {
|
|
103
|
+
var _a;
|
|
104
|
+
return `list-image ${(_a = this.model) === null || _a === void 0 ? void 0 : _a.mediatype}${this.isCompactTile ? ' compact' : ''}`;
|
|
105
|
+
}
|
|
78
106
|
get imageBoxClass() {
|
|
79
|
-
|
|
107
|
+
if (this.isListTile) {
|
|
108
|
+
return `list-image-box${this.isDeemphasize ? ' deemphasize' : ''}`;
|
|
109
|
+
}
|
|
110
|
+
if (this.isDeemphasize) {
|
|
111
|
+
return 'item-image-box';
|
|
112
|
+
}
|
|
113
|
+
return undefined;
|
|
80
114
|
}
|
|
81
115
|
get boxWaveformClass() {
|
|
82
|
-
return `item-audio${this.isWaveform ? ` ${this.
|
|
116
|
+
return `item-audio${this.isWaveform ? ` ${this.hashBasedGradient}` : ''}`;
|
|
83
117
|
}
|
|
84
118
|
get itemImageWaveformClass() {
|
|
85
119
|
return `item-image${this.isWaveform ? ' waveform' : ''}`;
|
|
86
120
|
}
|
|
87
|
-
get
|
|
121
|
+
get hashBasedGradient() {
|
|
88
122
|
var _a;
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
gradientInt = this.generateHashCode(this.model.identifier) % 6;
|
|
123
|
+
if (!((_a = this.model) === null || _a === void 0 ? void 0 : _a.identifier)) {
|
|
124
|
+
return 'grad1';
|
|
92
125
|
}
|
|
93
|
-
|
|
126
|
+
const gradient = this.hashStrToInt(this.model.identifier) % 6; // returns 0-5
|
|
127
|
+
return `grad${gradient}`;
|
|
94
128
|
}
|
|
95
|
-
|
|
129
|
+
hashStrToInt(str) {
|
|
96
130
|
return str
|
|
97
131
|
.split('')
|
|
98
132
|
.reduce((acc, char) => acc + char.charCodeAt(0), 0);
|
|
@@ -119,6 +153,37 @@ let ItemImage = class ItemImage extends LitElement {
|
|
|
119
153
|
overflow: visible;
|
|
120
154
|
}
|
|
121
155
|
|
|
156
|
+
.list-image-box.deemphasize {
|
|
157
|
+
border: 1px solid #767676;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.list-image-box {
|
|
161
|
+
width: 100%;
|
|
162
|
+
height: 100%;
|
|
163
|
+
overflow: hidden;
|
|
164
|
+
box-sizing: border-box;
|
|
165
|
+
display: flex;
|
|
166
|
+
position: relative;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.list-image {
|
|
170
|
+
width: 100%;
|
|
171
|
+
height: 100%;
|
|
172
|
+
overflow: hidden;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
img.list-image {
|
|
176
|
+
overflow: hidden;
|
|
177
|
+
object-fit: contain;
|
|
178
|
+
border-radius: var(--border-radius, 0);
|
|
179
|
+
-webkit-border-radius: var(--border-radius, 0);
|
|
180
|
+
-moz-border-radius: var(--border-radius, 0);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
img.list-image.compact {
|
|
184
|
+
object-fit: cover;
|
|
185
|
+
}
|
|
186
|
+
|
|
122
187
|
.waveform {
|
|
123
188
|
mix-blend-mode: screen;
|
|
124
189
|
}
|
|
@@ -128,12 +193,19 @@ let ItemImage = class ItemImage extends LitElement {
|
|
|
128
193
|
filter: drop-shadow(1px 1px 2px rgba(0, 0, 0, 0.8));
|
|
129
194
|
}
|
|
130
195
|
|
|
131
|
-
.deemphasize
|
|
132
|
-
|
|
196
|
+
.deemphasize .list-image,
|
|
197
|
+
.deemphasize.item-image {
|
|
198
|
+
background-size: contain;
|
|
133
199
|
filter: blur(15px);
|
|
134
200
|
z-index: 1;
|
|
135
201
|
}
|
|
136
202
|
|
|
203
|
+
.deemphasize svg {
|
|
204
|
+
padding: 25%;
|
|
205
|
+
z-index: 2;
|
|
206
|
+
position: absolute;
|
|
207
|
+
}
|
|
208
|
+
|
|
137
209
|
.tile-action {
|
|
138
210
|
border: 1px solid currentColor;
|
|
139
211
|
border-radius: 1px;
|
|
@@ -154,6 +226,15 @@ let ItemImage = class ItemImage extends LitElement {
|
|
|
154
226
|
text-align: center;
|
|
155
227
|
}
|
|
156
228
|
|
|
229
|
+
.grad0 {
|
|
230
|
+
background: linear-gradient(
|
|
231
|
+
hsl(340, 80%, 55%),
|
|
232
|
+
hsl(0, 80%, 33%) 35%,
|
|
233
|
+
hsl(0, 80%, 22%) 70%,
|
|
234
|
+
hsl(0, 0%, 0%)
|
|
235
|
+
);
|
|
236
|
+
}
|
|
237
|
+
|
|
157
238
|
.grad1 {
|
|
158
239
|
background: linear-gradient(
|
|
159
240
|
hsl(300, 80%, 55%),
|
|
@@ -198,15 +279,6 @@ let ItemImage = class ItemImage extends LitElement {
|
|
|
198
279
|
hsl(0, 0%, 0%)
|
|
199
280
|
);
|
|
200
281
|
}
|
|
201
|
-
|
|
202
|
-
.grad6 {
|
|
203
|
-
background: linear-gradient(
|
|
204
|
-
hsl(340, 80%, 55%),
|
|
205
|
-
hsl(0, 80%, 33%) 35%,
|
|
206
|
-
hsl(0, 80%, 22%) 70%,
|
|
207
|
-
hsl(0, 0%, 0%)
|
|
208
|
-
);
|
|
209
|
-
}
|
|
210
282
|
`;
|
|
211
283
|
}
|
|
212
284
|
};
|
|
@@ -219,6 +291,9 @@ __decorate([
|
|
|
219
291
|
__decorate([
|
|
220
292
|
property({ type: Boolean })
|
|
221
293
|
], ItemImage.prototype, "isListTile", void 0);
|
|
294
|
+
__decorate([
|
|
295
|
+
property({ type: Boolean })
|
|
296
|
+
], ItemImage.prototype, "isCompactTile", void 0);
|
|
222
297
|
__decorate([
|
|
223
298
|
state()
|
|
224
299
|
], ItemImage.prototype, "isDeemphasize", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"item-image.js","sourceRoot":"","sources":["../../../src/tiles/item-image.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n css,\n CSSResultGroup,\n html,\n nothing,\n PropertyValues,\n LitElement,\n} from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\n\nimport { TileModel } from '../models';\n\n@customElement('item-image')\nexport class ItemImage extends LitElement {\n @property({ type: Object }) model?: TileModel;\n\n @property({ type: String }) baseImageUrl?: string;\n\n @property({ type: Boolean }) isListTile = false;\n\n @state() private isDeemphasize: boolean = false;\n\n @state() private isWaveform: boolean = false;\n\n @query('.item-image') private itemImageWaveform!: HTMLImageElement;\n\n protected updated(changed: PropertyValues): void {\n if (changed.has('model')) {\n this.setDeemphsize();\n }\n }\n\n private setDeemphsize() {\n this.isDeemphasize =\n this.model?.collections.includes('deemphasize') ?? false;\n }\n\n render() {\n return html`\n <div class=${ifDefined(this.imageBoxClass)}>\n ${this.model?.mediatype === 'audio'\n ? this.waveformTemplate\n : this.backgroundImageTemplate}\n ${this.tileActionTemplate}\n </div>\n `;\n }\n\n private get imageSrc() {\n return `${this.baseImageUrl}/services/img/${this.model?.identifier}`;\n }\n\n // Templates\n private get backgroundImageTemplate() {\n return html`\n <div\n class=${this.imageClass}\n style=\"background-image:url(${this.imageSrc})\"\n ></div>\n `;\n }\n\n private get waveformTemplate() {\n return html`\n <div class=${this.boxWaveformClass}>\n <img\n class=${this.itemImageWaveformClass}\n src=\"${this.imageSrc}\"\n alt=\"${ifDefined(this.model?.identifier)}\"\n @load=${this.onLoadItemImageCheck}\n />\n </div>\n `;\n }\n\n private get tileActionTemplate() {\n if (!this.isDeemphasize) {\n return nothing;\n }\n return html`\n <div class=\"tile-action no-preview\">Content may be inappropriate</div>\n `;\n }\n\n private onLoadItemImageCheck() {\n const aspectRatio =\n this.itemImageWaveform.naturalWidth /\n this.itemImageWaveform.naturalHeight;\n if (aspectRatio === 4) {\n this.isWaveform = true;\n }\n }\n\n // Classes\n private get imageClass() {\n return `item-image ${this.isDeemphasize ? 'deemphasize' : 'default'}`;\n }\n\n private get imageBoxClass() {\n return this.isDeemphasize ? 'item-image-box' : undefined;\n }\n\n private get boxWaveformClass() {\n return `item-audio${this.isWaveform ? ` ${this.randomGradient}` : ''}`;\n }\n\n private get itemImageWaveformClass() {\n return `item-image${this.isWaveform ? ' waveform' : ''}`;\n }\n\n private get randomGradient() {\n let gradientInt = 1;\n if (this.model?.identifier) {\n gradientInt = this.generateHashCode(this.model.identifier) % 6;\n }\n return `grad${gradientInt}`;\n }\n\n private generateHashCode(str: string): number {\n return str\n .split('')\n .reduce((acc: number, char: string) => acc + char.charCodeAt(0), 0);\n }\n\n static get styles(): CSSResultGroup {\n return css`\n .item-image-box {\n width: 16rem;\n height: 16rem;\n overflow: hidden;\n position: relative;\n box-shadow: 1px 1px 2px 0px;\n display: flex;\n }\n\n .item-image {\n width: 16rem;\n height: 16rem;\n object-fit: contain;\n background-repeat: no-repeat;\n background-position: center center;\n position: relative;\n -webkit-appearance: none;\n overflow: visible;\n }\n\n .waveform {\n mix-blend-mode: screen;\n }\n\n .default {\n background-size: contain;\n filter: drop-shadow(1px 1px 2px rgba(0, 0, 0, 0.8));\n }\n\n .deemphasize {\n background-size: cover;\n filter: blur(15px);\n z-index: 1;\n }\n\n .tile-action {\n border: 1px solid currentColor;\n border-radius: 1px;\n padding: 5px;\n font-weight: 500;\n width: auto;\n position: absolute;\n z-index: 2;\n display: flex;\n top: 5.5rem;\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 }\n\n .grad1 {\n background: linear-gradient(\n hsl(300, 80%, 55%),\n hsl(330, 80%, 33%) 35%,\n hsl(330, 80%, 22%) 70%,\n hsl(0, 0%, 0%)\n );\n }\n\n .grad2 {\n background: linear-gradient(\n hsl(200, 80%, 55%),\n hsl(230, 80%, 33%) 35%,\n hsl(230, 80%, 22%) 70%,\n hsl(0, 0%, 0%)\n );\n }\n\n .grad3 {\n background: linear-gradient(\n hsl(160, 80%, 55%),\n hsl(190, 80%, 33%) 35%,\n hsl(190, 80%, 22%) 70%,\n hsl(0, 0%, 0%)\n );\n }\n\n .grad4 {\n background: linear-gradient(\n hsl(250, 80%, 55%),\n hsl(280, 80%, 33%) 35%,\n hsl(280, 80%, 22%) 70%,\n hsl(0, 0%, 0%)\n );\n }\n\n .grad5 {\n background: linear-gradient(\n hsl(280, 80%, 55%),\n hsl(310, 80%, 33%) 35%,\n hsl(310, 80%, 22%) 70%,\n hsl(0, 0%, 0%)\n );\n }\n\n .grad6 {\n background: linear-gradient(\n hsl(340, 80%, 55%),\n hsl(0, 80%, 33%) 35%,\n hsl(0, 80%, 22%) 70%,\n hsl(0, 0%, 0%)\n );\n }\n `;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"item-image.js","sourceRoot":"","sources":["../../../src/tiles/item-image.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n css,\n CSSResultGroup,\n html,\n nothing,\n PropertyValues,\n LitElement,\n} from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { restrictedIcon } from '../assets/img/icons/restricted';\nimport { TileModel } from '../models';\n\n@customElement('item-image')\nexport class ItemImage extends LitElement {\n @property({ type: Object }) model?: TileModel;\n\n @property({ type: String }) baseImageUrl?: string;\n\n @property({ type: Boolean }) isListTile = false;\n\n @property({ type: Boolean }) isCompactTile = false;\n\n @state() private isDeemphasize = false;\n\n @state() private isWaveform = false;\n\n @query('.item-image') private itemImageWaveform!: HTMLImageElement;\n\n protected updated(changed: PropertyValues): void {\n if (changed.has('model')) {\n this.setDeemphasize();\n }\n }\n\n // Don't deemphasize if item is a collection\n private setDeemphasize() {\n this.isDeemphasize =\n (this.model?.mediatype !== 'collection' &&\n this.model?.collections.includes('deemphasize')) ??\n false;\n }\n\n render() {\n return html`\n <div class=${ifDefined(this.imageBoxClass)}>\n ${this.model?.mediatype === 'audio'\n ? this.waveformTemplate\n : this.itemImageTemplate}\n </div>\n `;\n }\n\n private get imageSrc() {\n return `${this.baseImageUrl}/services/img/${this.model?.identifier}`;\n }\n\n // Templates\n private get itemImageTemplate() {\n return html`\n ${this.isListTile ? this.listImageTemplate : this.tileImageTemplate}\n `;\n }\n\n private get tileImageTemplate() {\n return html`\n <div\n class=${this.imageClass}\n style=\"background-image:url(${this.imageSrc})\"\n ></div>\n ${this.tileActionTemplate}\n `;\n }\n\n private get listImageTemplate() {\n if (!this.model) {\n return nothing;\n }\n return html`\n <img src=\"${this.imageSrc}\" alt=\"\" class=\"${this.listImageClass}\" />\n ${this.restrictedIconTemplate}\n `;\n }\n\n private get waveformTemplate() {\n return html`\n <div class=${this.boxWaveformClass}>\n <img\n class=${this.itemImageWaveformClass}\n src=\"${this.imageSrc}\"\n alt=\"${ifDefined(this.model?.title)}\"\n @load=${this.onLoadItemImageCheck}\n />\n </div>\n `;\n }\n\n private get restrictedIconTemplate() {\n if (!this.isDeemphasize) {\n return nothing;\n }\n return html` ${restrictedIcon} `;\n }\n\n private get tileActionTemplate() {\n if (!this.isDeemphasize) {\n return nothing;\n }\n return html`\n <div class=\"tile-action no-preview\">Content may be inappropriate</div>\n `;\n }\n\n private onLoadItemImageCheck() {\n const aspectRatio =\n this.itemImageWaveform.naturalWidth /\n this.itemImageWaveform.naturalHeight;\n if (aspectRatio === 4) {\n this.isWaveform = true;\n }\n }\n\n // Classes\n private get imageClass() {\n return `item-image ${this.isDeemphasize ? 'deemphasize' : 'default'}`;\n }\n\n private get listImageClass() {\n return `list-image ${this.model?.mediatype}${\n this.isCompactTile ? ' compact' : ''\n }`;\n }\n\n private get imageBoxClass() {\n if (this.isListTile) {\n return `list-image-box${this.isDeemphasize ? ' deemphasize' : ''}`;\n }\n if (this.isDeemphasize) {\n return 'item-image-box';\n }\n return undefined;\n }\n\n private get boxWaveformClass() {\n return `item-audio${this.isWaveform ? ` ${this.hashBasedGradient}` : ''}`;\n }\n\n private get itemImageWaveformClass() {\n return `item-image${this.isWaveform ? ' waveform' : ''}`;\n }\n\n private get hashBasedGradient() {\n if (!this.model?.identifier) {\n return 'grad1';\n }\n const gradient = this.hashStrToInt(this.model.identifier) % 6; // returns 0-5\n return `grad${gradient}`;\n }\n\n private hashStrToInt(str: string): number {\n return str\n .split('')\n .reduce((acc: number, char: string) => acc + char.charCodeAt(0), 0);\n }\n\n static get styles(): CSSResultGroup {\n return css`\n .item-image-box {\n width: 16rem;\n height: 16rem;\n overflow: hidden;\n position: relative;\n box-shadow: 1px 1px 2px 0px;\n display: flex;\n }\n\n .item-image {\n width: 16rem;\n height: 16rem;\n object-fit: contain;\n background-repeat: no-repeat;\n background-position: center center;\n position: relative;\n -webkit-appearance: none;\n overflow: visible;\n }\n\n .list-image-box.deemphasize {\n border: 1px solid #767676;\n }\n\n .list-image-box {\n width: 100%;\n height: 100%;\n overflow: hidden;\n box-sizing: border-box;\n display: flex;\n position: relative;\n }\n\n .list-image {\n width: 100%;\n height: 100%;\n overflow: hidden;\n }\n\n img.list-image {\n overflow: hidden;\n object-fit: contain;\n border-radius: var(--border-radius, 0);\n -webkit-border-radius: var(--border-radius, 0);\n -moz-border-radius: var(--border-radius, 0);\n }\n\n img.list-image.compact {\n object-fit: cover;\n }\n\n .waveform {\n mix-blend-mode: screen;\n }\n\n .default {\n background-size: contain;\n filter: drop-shadow(1px 1px 2px rgba(0, 0, 0, 0.8));\n }\n\n .deemphasize .list-image,\n .deemphasize.item-image {\n background-size: contain;\n filter: blur(15px);\n z-index: 1;\n }\n\n .deemphasize svg {\n padding: 25%;\n z-index: 2;\n position: absolute;\n }\n\n .tile-action {\n border: 1px solid currentColor;\n border-radius: 1px;\n padding: 5px;\n font-weight: 500;\n width: auto;\n position: absolute;\n z-index: 2;\n display: flex;\n top: 5.5rem;\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 }\n\n .grad0 {\n background: linear-gradient(\n hsl(340, 80%, 55%),\n hsl(0, 80%, 33%) 35%,\n hsl(0, 80%, 22%) 70%,\n hsl(0, 0%, 0%)\n );\n }\n\n .grad1 {\n background: linear-gradient(\n hsl(300, 80%, 55%),\n hsl(330, 80%, 33%) 35%,\n hsl(330, 80%, 22%) 70%,\n hsl(0, 0%, 0%)\n );\n }\n\n .grad2 {\n background: linear-gradient(\n hsl(200, 80%, 55%),\n hsl(230, 80%, 33%) 35%,\n hsl(230, 80%, 22%) 70%,\n hsl(0, 0%, 0%)\n );\n }\n\n .grad3 {\n background: linear-gradient(\n hsl(160, 80%, 55%),\n hsl(190, 80%, 33%) 35%,\n hsl(190, 80%, 22%) 70%,\n hsl(0, 0%, 0%)\n );\n }\n\n .grad4 {\n background: linear-gradient(\n hsl(250, 80%, 55%),\n hsl(280, 80%, 33%) 35%,\n hsl(280, 80%, 22%) 70%,\n hsl(0, 0%, 0%)\n );\n }\n\n .grad5 {\n background: linear-gradient(\n hsl(280, 80%, 55%),\n hsl(310, 80%, 33%) 35%,\n hsl(310, 80%, 22%) 70%,\n hsl(0, 0%, 0%)\n );\n }\n `;\n }\n}\n"]}
|
|
@@ -13,27 +13,29 @@ let TileListCompact = class TileListCompact extends LitElement {
|
|
|
13
13
|
this.sortParam = null;
|
|
14
14
|
}
|
|
15
15
|
render() {
|
|
16
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
16
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
17
17
|
return html `
|
|
18
18
|
<div id="list-line" class="${this.classSize}">
|
|
19
|
-
<div id="thumb"
|
|
20
|
-
|
|
19
|
+
<div id="thumb" class="${ifDefined((_a = this.model) === null || _a === void 0 ? void 0 : _a.mediatype)}">
|
|
20
|
+
${this.imageTemplate}
|
|
21
|
+
</div>
|
|
22
|
+
<div id="title">${DOMPurify.sanitize((_c = (_b = this.model) === null || _b === void 0 ? void 0 : _b.title) !== null && _c !== void 0 ? _c : '')}</div>
|
|
21
23
|
<div id="creator">
|
|
22
|
-
${((
|
|
23
|
-
? accountLabel((
|
|
24
|
-
: DOMPurify.sanitize((
|
|
24
|
+
${((_d = this.model) === null || _d === void 0 ? void 0 : _d.mediatype) === 'account'
|
|
25
|
+
? accountLabel((_e = this.model) === null || _e === void 0 ? void 0 : _e.dateAdded)
|
|
26
|
+
: DOMPurify.sanitize((_g = (_f = this.model) === null || _f === void 0 ? void 0 : _f.creator) !== null && _g !== void 0 ? _g : '')}
|
|
25
27
|
</div>
|
|
26
28
|
<div id="date">${formatDate(this.date, this.formatSize)}</div>
|
|
27
29
|
<div id="icon">
|
|
28
30
|
<mediatype-icon
|
|
29
|
-
.mediatype=${(
|
|
30
|
-
.collections=${(
|
|
31
|
+
.mediatype=${(_h = this.model) === null || _h === void 0 ? void 0 : _h.mediatype}
|
|
32
|
+
.collections=${(_j = this.model) === null || _j === void 0 ? void 0 : _j.collections}
|
|
31
33
|
style="--iconCustomFillColor: ${ifDefined(this.collectionColor)}"
|
|
32
34
|
>
|
|
33
35
|
</mediatype-icon>
|
|
34
36
|
</div>
|
|
35
37
|
<div id="views">
|
|
36
|
-
${formatCount((
|
|
38
|
+
${formatCount((_l = (_k = this.model) === null || _k === void 0 ? void 0 : _k.viewCount) !== null && _l !== void 0 ? _l : 0, this.formatSize)}
|
|
37
39
|
</div>
|
|
38
40
|
</div>
|
|
39
41
|
`;
|
|
@@ -47,15 +49,19 @@ let TileListCompact = class TileListCompact extends LitElement {
|
|
|
47
49
|
return '#4666FF';
|
|
48
50
|
}
|
|
49
51
|
get imageTemplate() {
|
|
50
|
-
var _a
|
|
52
|
+
var _a;
|
|
51
53
|
if (!((_a = this.model) === null || _a === void 0 ? void 0 : _a.identifier)) {
|
|
52
54
|
return nothing;
|
|
53
55
|
}
|
|
54
|
-
return html `
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
return html `
|
|
57
|
+
<item-image
|
|
58
|
+
.model=${this.model}
|
|
59
|
+
.baseImageUrl=${this.baseImageUrl}
|
|
60
|
+
.isListTile=${true}
|
|
61
|
+
.isCompactTile=${true}
|
|
62
|
+
>
|
|
63
|
+
</item-image>
|
|
64
|
+
`;
|
|
59
65
|
}
|
|
60
66
|
/*
|
|
61
67
|
* TODO: fix field names to match model in src/collection-browser.ts
|
|
@@ -101,43 +107,58 @@ let TileListCompact = class TileListCompact extends LitElement {
|
|
|
101
107
|
font-size: 14px;
|
|
102
108
|
}
|
|
103
109
|
|
|
104
|
-
|
|
110
|
+
#list-line {
|
|
111
|
+
display: grid;
|
|
112
|
+
column-gap: 10px;
|
|
113
|
+
border-top: 1px solid #ddd;
|
|
114
|
+
align-items: center;
|
|
115
|
+
line-height: 20px;
|
|
116
|
+
}
|
|
105
117
|
|
|
106
|
-
#
|
|
107
|
-
|
|
118
|
+
#list-line.mobile {
|
|
119
|
+
grid-template-columns: 36px 3fr 2fr 62px 19px;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
#list-line.desktop {
|
|
123
|
+
grid-template-columns: 51px 3fr 2fr 100px 20px 60px;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
#list-line:hover #title {
|
|
127
|
+
text-decoration: underline;
|
|
108
128
|
}
|
|
109
129
|
|
|
110
|
-
|
|
130
|
+
/* fields */
|
|
131
|
+
#thumb {
|
|
111
132
|
object-fit: cover;
|
|
112
133
|
display: block;
|
|
113
134
|
}
|
|
114
135
|
|
|
115
|
-
.mobile #thumb
|
|
136
|
+
.mobile #thumb {
|
|
116
137
|
width: 30px;
|
|
117
138
|
height: 30px;
|
|
139
|
+
padding-top: 2px;
|
|
140
|
+
padding-bottom: 2px;
|
|
141
|
+
padding-left: 4px;
|
|
118
142
|
}
|
|
119
143
|
|
|
120
|
-
.desktop #thumb
|
|
144
|
+
.desktop #thumb {
|
|
121
145
|
width: 45px;
|
|
122
146
|
height: 45px;
|
|
147
|
+
padding-top: 5px;
|
|
148
|
+
padding-bottom: 5px;
|
|
149
|
+
padding-left: 6px;
|
|
123
150
|
}
|
|
124
151
|
|
|
125
|
-
#thumb
|
|
126
|
-
border-radius: 8px;
|
|
127
|
-
-webkit-border-radius: 8px;
|
|
128
|
-
-moz-border-radius: 8px;
|
|
152
|
+
#thumb.collection {
|
|
153
|
+
--border-radius: 8px;
|
|
129
154
|
}
|
|
130
155
|
|
|
131
|
-
.mobile #thumb
|
|
132
|
-
border-radius: 15px;
|
|
133
|
-
-webkit-border-radius: 15px;
|
|
134
|
-
-moz-border-radius: 15px;
|
|
156
|
+
.mobile #thumb.account {
|
|
157
|
+
--border-radius: 15px;
|
|
135
158
|
}
|
|
136
159
|
|
|
137
|
-
.desktop #thumb
|
|
138
|
-
border-radius: 22.5px;
|
|
139
|
-
-webkit-border-radius: 22.5px;
|
|
140
|
-
-moz-border-radius: 22.5px;
|
|
160
|
+
.desktop #thumb.account {
|
|
161
|
+
--border-radius: 22.5px;
|
|
141
162
|
}
|
|
142
163
|
|
|
143
164
|
#title {
|
|
@@ -170,32 +191,6 @@ let TileListCompact = class TileListCompact extends LitElement {
|
|
|
170
191
|
--iconHeight: 20px;
|
|
171
192
|
--iconWidth: 20px;
|
|
172
193
|
}
|
|
173
|
-
|
|
174
|
-
/* list-line */
|
|
175
|
-
|
|
176
|
-
#list-line {
|
|
177
|
-
display: grid;
|
|
178
|
-
column-gap: 10px;
|
|
179
|
-
border-top: 1px solid #ddd;
|
|
180
|
-
align-items: center;
|
|
181
|
-
line-height: 20px;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
#list-line.mobile {
|
|
185
|
-
grid-template-columns: 36px 3fr 2fr 62px 19px;
|
|
186
|
-
padding-top: 2px;
|
|
187
|
-
padding-bottom: 2px;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
#list-line.desktop {
|
|
191
|
-
grid-template-columns: 51px 3fr 2fr 100px 20px 60px;
|
|
192
|
-
padding-top: 5px;
|
|
193
|
-
padding-bottom: 5px;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
#list-line:hover #title {
|
|
197
|
-
text-decoration: underline;
|
|
198
|
-
}
|
|
199
194
|
`;
|
|
200
195
|
}
|
|
201
196
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tile-list-compact.js","sourceRoot":"","sources":["../../../../src/tiles/list/tile-list-compact.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,SAAS,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,WAAW,EAAgB,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,UAAU,EAAc,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,mBAAmB,CAAC;AAG3B,IAAa,eAAe,GAA5B,MAAa,eAAgB,SAAQ,UAAU;IAA/C;;QAS8B,cAAS,GAAqB,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"tile-list-compact.js","sourceRoot":"","sources":["../../../../src/tiles/list/tile-list-compact.ts"],"names":[],"mappings":"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","sourcesContent":["import { css, html, LitElement, nothing } from 'lit';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { customElement, property } from 'lit/decorators.js';\nimport { SortParam } from '@internetarchive/search-service';\nimport DOMPurify from 'dompurify';\nimport { TileModel } from '../../models';\nimport { formatCount, NumberFormat } from '../../utils/format-count';\nimport { formatDate, DateFormat } from '../../utils/format-date';\nimport { accountLabel } from './account-label';\nimport '../mediatype-icon';\n\n@customElement('tile-list-compact')\nexport class TileListCompact extends LitElement {\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 }) sortParam: SortParam | null = null;\n\n @property({ type: Number }) mobileBreakpoint?: number;\n\n @property({ type: String }) baseImageUrl?: string;\n\n render() {\n return html`\n <div id=\"list-line\" class=\"${this.classSize}\">\n <div id=\"thumb\" class=\"${ifDefined(this.model?.mediatype)}\">\n ${this.imageTemplate}\n </div>\n <div id=\"title\">${DOMPurify.sanitize(this.model?.title ?? '')}</div>\n <div id=\"creator\">\n ${this.model?.mediatype === 'account'\n ? accountLabel(this.model?.dateAdded)\n : DOMPurify.sanitize(this.model?.creator ?? '')}\n </div>\n <div id=\"date\">${formatDate(this.date, this.formatSize)}</div>\n <div id=\"icon\">\n <mediatype-icon\n .mediatype=${this.model?.mediatype}\n .collections=${this.model?.collections}\n style=\"--iconCustomFillColor: ${ifDefined(this.collectionColor)}\"\n >\n </mediatype-icon>\n </div>\n <div id=\"views\">\n ${formatCount(this.model?.viewCount ?? 0, this.formatSize)}\n </div>\n </div>\n `;\n }\n\n // Only in list, not tile\n private get collectionColor() {\n if (this.model?.mediatype !== 'collection') {\n return undefined;\n }\n return '#4666FF';\n }\n\n private get imageTemplate() {\n if (!this.model?.identifier) {\n return nothing;\n }\n return html`\n <item-image\n .model=${this.model}\n .baseImageUrl=${this.baseImageUrl}\n .isListTile=${true}\n .isCompactTile=${true}\n >\n </item-image>\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 #list-line {\n display: grid;\n column-gap: 10px;\n border-top: 1px solid #ddd;\n align-items: center;\n line-height: 20px;\n }\n\n #list-line.mobile {\n grid-template-columns: 36px 3fr 2fr 62px 19px;\n }\n\n #list-line.desktop {\n grid-template-columns: 51px 3fr 2fr 100px 20px 60px;\n }\n\n #list-line:hover #title {\n text-decoration: underline;\n }\n\n /* fields */\n #thumb {\n object-fit: cover;\n display: block;\n }\n\n .mobile #thumb {\n width: 30px;\n height: 30px;\n padding-top: 2px;\n padding-bottom: 2px;\n padding-left: 4px;\n }\n\n .desktop #thumb {\n width: 45px;\n height: 45px;\n padding-top: 5px;\n padding-bottom: 5px;\n padding-left: 6px;\n }\n\n #thumb.collection {\n --border-radius: 8px;\n }\n\n .mobile #thumb.account {\n --border-radius: 15px;\n }\n\n .desktop #thumb.account {\n --border-radius: 22.5px;\n }\n\n #title {\n color: #4b64ff;\n text-decoration: none;\n }\n\n #title,\n #creator {\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }\n\n #views {\n text-align: right;\n padding-right: 8px;\n }\n\n .mobile #views {\n display: none;\n }\n\n .mobile mediatype-icon {\n --iconHeight: 14px;\n --iconWidth: 14px;\n }\n\n .desktop #icon {\n --iconHeight: 20px;\n --iconWidth: 20px;\n }\n `;\n }\n}\n"]}
|