@internetarchive/collection-browser 0.4.4-alpha → 0.4.4
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/app-root.js +17 -2
- package/dist/src/app-root.js.map +1 -1
- package/dist/src/collection-browser.d.ts +2 -40
- package/dist/src/collection-browser.js +45 -118
- package/dist/src/collection-browser.js.map +1 -1
- package/dist/src/sort-filter-bar/sort-filter-bar.js +11 -1
- package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -1
- package/dist/src/styles/item-image-styles.js +5 -1
- package/dist/src/styles/item-image-styles.js.map +1 -1
- package/dist/src/tiles/grid/item-tile.js +15 -2
- package/dist/src/tiles/grid/item-tile.js.map +1 -1
- package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js +6 -6
- package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js.map +1 -1
- package/dist/src/tiles/grid/tile-stats.js +15 -7
- package/dist/src/tiles/grid/tile-stats.js.map +1 -1
- package/dist/src/tiles/hover/hover-pane-controller.d.ts +197 -0
- package/dist/src/tiles/hover/hover-pane-controller.js +349 -0
- package/dist/src/tiles/hover/hover-pane-controller.js.map +1 -0
- package/dist/src/tiles/hover/tile-hover-pane.d.ts +15 -0
- package/dist/src/tiles/hover/tile-hover-pane.js +88 -0
- package/dist/src/tiles/hover/tile-hover-pane.js.map +1 -0
- package/dist/src/tiles/image-block.js +4 -0
- package/dist/src/tiles/image-block.js.map +1 -1
- package/dist/src/tiles/list/date-label.js +3 -3
- package/dist/src/tiles/list/date-label.js.map +1 -1
- package/dist/src/tiles/list/tile-list-compact-header.js +4 -3
- package/dist/src/tiles/list/tile-list-compact-header.js.map +1 -1
- package/dist/src/tiles/list/tile-list-compact.js +15 -5
- package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
- package/dist/src/tiles/list/tile-list.d.ts +2 -0
- package/dist/src/tiles/list/tile-list.js +63 -5
- package/dist/src/tiles/list/tile-list.js.map +1 -1
- package/dist/src/tiles/text-snippet-block.js +4 -4
- package/dist/src/tiles/text-snippet-block.js.map +1 -1
- package/dist/src/tiles/tile-dispatcher.d.ts +21 -2
- package/dist/src/tiles/tile-dispatcher.js +79 -9
- package/dist/src/tiles/tile-dispatcher.js.map +1 -1
- package/dist/test/collection-browser.test.js +6 -72
- package/dist/test/collection-browser.test.js.map +1 -1
- package/dist/test/sort-filter-bar/sort-filter-bar.test.js +64 -0
- package/dist/test/sort-filter-bar/sort-filter-bar.test.js.map +1 -1
- package/dist/test/tiles/grid/account-tile.test.js +1 -1
- package/dist/test/tiles/grid/account-tile.test.js.map +1 -1
- package/dist/test/tiles/hover/hover-pane-controller.test.d.ts +1 -0
- package/dist/test/tiles/hover/hover-pane-controller.test.js +279 -0
- package/dist/test/tiles/hover/hover-pane-controller.test.js.map +1 -0
- package/dist/test/tiles/hover/tile-hover-pane.test.d.ts +1 -0
- package/dist/test/tiles/hover/tile-hover-pane.test.js +14 -0
- package/dist/test/tiles/hover/tile-hover-pane.test.js.map +1 -0
- package/dist/test/tiles/list/tile-list.test.js +46 -1
- package/dist/test/tiles/list/tile-list.test.js.map +1 -1
- package/index.html +1 -0
- package/package.json +2 -2
- package/src/app-root.ts +17 -2
- package/src/collection-browser.ts +42 -140
- package/src/sort-filter-bar/sort-filter-bar.ts +12 -1
- package/src/styles/item-image-styles.ts +5 -1
- package/src/tiles/grid/item-tile.ts +15 -2
- package/src/tiles/grid/styles/tile-grid-shared-styles.ts +6 -6
- package/src/tiles/grid/tile-stats.ts +15 -7
- package/src/tiles/hover/hover-pane-controller.ts +469 -0
- package/src/tiles/hover/tile-hover-pane.ts +79 -0
- package/src/tiles/image-block.ts +4 -0
- package/src/tiles/list/date-label.ts +3 -3
- package/src/tiles/list/tile-list-compact-header.ts +4 -3
- package/src/tiles/list/tile-list-compact.ts +15 -5
- package/src/tiles/list/tile-list.ts +67 -5
- package/src/tiles/text-snippet-block.ts +4 -4
- package/src/tiles/tile-dispatcher.ts +95 -7
- package/test/collection-browser.test.ts +7 -101
- package/test/sort-filter-bar/sort-filter-bar.test.ts +89 -0
- package/test/tiles/grid/account-tile.test.ts +1 -1
- package/test/tiles/hover/hover-pane-controller.test.ts +349 -0
- package/test/tiles/hover/tile-hover-pane.test.ts +19 -0
- package/test/tiles/list/tile-list.test.ts +58 -1
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
nothing,
|
|
9
9
|
} from 'lit';
|
|
10
10
|
import { customElement, property, query, state } from 'lit/decorators.js';
|
|
11
|
-
import {
|
|
11
|
+
import { classMap } from 'lit/directives/class-map.js';
|
|
12
12
|
|
|
13
13
|
import type { AnalyticsManagerInterface } from '@internetarchive/analytics-manager';
|
|
14
14
|
import type {
|
|
@@ -272,7 +272,7 @@ export class CollectionBrowser
|
|
|
272
272
|
goToPage(pageNumber: number) {
|
|
273
273
|
this.initialPageNumber = pageNumber;
|
|
274
274
|
this.pagesToRender = pageNumber;
|
|
275
|
-
this.scrollToPage(pageNumber);
|
|
275
|
+
return this.scrollToPage(pageNumber);
|
|
276
276
|
}
|
|
277
277
|
|
|
278
278
|
clearFilters() {
|
|
@@ -328,6 +328,7 @@ export class CollectionBrowser
|
|
|
328
328
|
.placeholderType=${this.placeholderType}
|
|
329
329
|
?isMobileView=${this.mobileView}
|
|
330
330
|
></empty-placeholder>
|
|
331
|
+
${this.infiniteScrollerTemplate}
|
|
331
332
|
`;
|
|
332
333
|
}
|
|
333
334
|
|
|
@@ -371,7 +372,8 @@ export class CollectionBrowser
|
|
|
371
372
|
|
|
372
373
|
private get infiniteScrollerTemplate() {
|
|
373
374
|
return html`<infinite-scroller
|
|
374
|
-
class
|
|
375
|
+
class=${this.infiniteScrollerClasses}
|
|
376
|
+
itemCount=${this.placeholderType ? 0 : nothing}
|
|
375
377
|
.cellProvider=${this}
|
|
376
378
|
.placeholderCellTemplate=${this.placeholderCellTemplate}
|
|
377
379
|
@scrollThresholdReached=${this.scrollThresholdReached}
|
|
@@ -379,6 +381,13 @@ export class CollectionBrowser
|
|
|
379
381
|
></infinite-scroller>`;
|
|
380
382
|
}
|
|
381
383
|
|
|
384
|
+
private get infiniteScrollerClasses() {
|
|
385
|
+
return classMap({
|
|
386
|
+
[this.displayMode ?? '']: !!this.displayMode,
|
|
387
|
+
hidden: !!this.placeholderType,
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
|
|
382
391
|
private get sortFilterBarTemplate() {
|
|
383
392
|
return html`
|
|
384
393
|
<sort-filter-bar
|
|
@@ -514,10 +523,6 @@ export class CollectionBrowser
|
|
|
514
523
|
this.selectedCreatorFilter = e.detail.selectedLetter;
|
|
515
524
|
}
|
|
516
525
|
|
|
517
|
-
private get facetDataLoading(): boolean {
|
|
518
|
-
return this.facetsLoading || this.fullYearAggregationLoading;
|
|
519
|
-
}
|
|
520
|
-
|
|
521
526
|
private get mobileFacetsTemplate() {
|
|
522
527
|
return html`
|
|
523
528
|
<div id="mobile-filter-collapse">
|
|
@@ -560,8 +565,8 @@ export class CollectionBrowser
|
|
|
560
565
|
.filterMap=${this.filterMap}
|
|
561
566
|
.modalManager=${this.modalManager}
|
|
562
567
|
?collapsableFacets=${this.mobileView}
|
|
563
|
-
?facetsLoading=${this.
|
|
564
|
-
?fullYearAggregationLoading=${this.
|
|
568
|
+
?facetsLoading=${this.facetsLoading}
|
|
569
|
+
?fullYearAggregationLoading=${this.facetsLoading}
|
|
565
570
|
.onFacetClick=${this.facetClickHandler}
|
|
566
571
|
.analyticsHandler=${this.analyticsHandler}
|
|
567
572
|
>
|
|
@@ -812,12 +817,7 @@ export class CollectionBrowser
|
|
|
812
817
|
this.historyPopOccurred = false;
|
|
813
818
|
}
|
|
814
819
|
|
|
815
|
-
await Promise.all([
|
|
816
|
-
this.doInitialPageFetch(),
|
|
817
|
-
this.fetchFacets(),
|
|
818
|
-
// Only fetch histogram data separately if we need it b/c of date filters
|
|
819
|
-
this.shouldRequestYearHistogram && this.fetchFullYearHistogram(),
|
|
820
|
-
]);
|
|
820
|
+
await Promise.all([this.doInitialPageFetch(), this.fetchFacets()]);
|
|
821
821
|
}
|
|
822
822
|
|
|
823
823
|
private setupStateRestorationObserver() {
|
|
@@ -995,22 +995,6 @@ export class CollectionBrowser
|
|
|
995
995
|
return fullQuery;
|
|
996
996
|
}
|
|
997
997
|
|
|
998
|
-
/** The full query without any year facets or date range clauses */
|
|
999
|
-
private get fullQueryWithoutDates(): string | undefined {
|
|
1000
|
-
if (!this.baseQuery) return undefined;
|
|
1001
|
-
let fullQuery = this.baseQuery;
|
|
1002
|
-
|
|
1003
|
-
const { facetQueryWithoutYear, sortFilterQueries } = this;
|
|
1004
|
-
|
|
1005
|
-
if (facetQueryWithoutYear) {
|
|
1006
|
-
fullQuery += ` AND ${facetQueryWithoutYear}`;
|
|
1007
|
-
}
|
|
1008
|
-
if (sortFilterQueries) {
|
|
1009
|
-
fullQuery += ` AND ${sortFilterQueries}`;
|
|
1010
|
-
}
|
|
1011
|
-
return fullQuery;
|
|
1012
|
-
}
|
|
1013
|
-
|
|
1014
998
|
/**
|
|
1015
999
|
* Generates a query string for the given facets
|
|
1016
1000
|
*
|
|
@@ -1027,24 +1011,6 @@ export class CollectionBrowser
|
|
|
1027
1011
|
return this.joinFacetClauses(facetClauses);
|
|
1028
1012
|
}
|
|
1029
1013
|
|
|
1030
|
-
/**
|
|
1031
|
-
* Generates a query string for the currently selected facets, excluding 'year' facets.
|
|
1032
|
-
*
|
|
1033
|
-
* Example: `mediatype:("collection" OR "audio" OR -"etree") AND subject:("foo" OR -"bar")`
|
|
1034
|
-
*/
|
|
1035
|
-
private get facetQueryWithoutYear(): string | undefined {
|
|
1036
|
-
if (!this.selectedFacets) return undefined;
|
|
1037
|
-
const facetClauses = [];
|
|
1038
|
-
for (const [facetName, facetValues] of Object.entries(
|
|
1039
|
-
this.selectedFacets
|
|
1040
|
-
)) {
|
|
1041
|
-
if (facetName !== 'year') {
|
|
1042
|
-
facetClauses.push(this.buildFacetClause(facetName, facetValues));
|
|
1043
|
-
}
|
|
1044
|
-
}
|
|
1045
|
-
return this.joinFacetClauses(facetClauses);
|
|
1046
|
-
}
|
|
1047
|
-
|
|
1048
1014
|
/**
|
|
1049
1015
|
* Builds an OR-joined facet clause for the given facet name and values.
|
|
1050
1016
|
*
|
|
@@ -1174,99 +1140,30 @@ export class CollectionBrowser
|
|
|
1174
1140
|
|
|
1175
1141
|
this.aggregations = results?.success?.response.aggregations;
|
|
1176
1142
|
|
|
1177
|
-
// If we're not fetching year histogram data separately, set it from the newly-fetched aggregations
|
|
1178
|
-
if (!this.shouldRequestYearHistogram) {
|
|
1179
|
-
this.fullYearsHistogramAggregation =
|
|
1180
|
-
results?.success?.response?.aggregations?.year_histogram ??
|
|
1181
|
-
results?.success?.response?.aggregations?.['year-histogram']; // Temp fix until PPS FTS key is fixed to use underscore
|
|
1182
|
-
}
|
|
1183
|
-
}
|
|
1184
|
-
|
|
1185
|
-
/**
|
|
1186
|
-
* If we haven't changed the query, we don't need to fetch the full year histogram
|
|
1187
|
-
*
|
|
1188
|
-
* @private
|
|
1189
|
-
* @type {string}
|
|
1190
|
-
* @memberof CollectionBrowser
|
|
1191
|
-
*/
|
|
1192
|
-
private previousFullQueryNoDate?: string;
|
|
1193
|
-
|
|
1194
|
-
/**
|
|
1195
|
-
* The query key is a string that uniquely identifies the current query
|
|
1196
|
-
* without the date range.
|
|
1197
|
-
*
|
|
1198
|
-
* If this doesn't change, we don't need to re-fetch the histogram date range
|
|
1199
|
-
*/
|
|
1200
|
-
private get fullQueryNoDateKey() {
|
|
1201
|
-
return `${this.fullQueryWithoutDates}-${this.searchType}-${this.sortParam?.field}-${this.sortParam?.direction}`;
|
|
1202
|
-
}
|
|
1203
|
-
|
|
1204
|
-
/**
|
|
1205
|
-
* This method is similar to fetching the facets above,
|
|
1206
|
-
* but only fetching the year histogram. There is a subtle difference
|
|
1207
|
-
* in how you have to fetch the year histogram where you can't use the
|
|
1208
|
-
* advanced JSON syntax like the other aggregations. It's a special
|
|
1209
|
-
* case that @ximm put it place.
|
|
1210
|
-
*/
|
|
1211
|
-
private async fetchFullYearHistogram(): Promise<void> {
|
|
1212
|
-
const { fullQueryNoDateKey } = this;
|
|
1213
|
-
if (
|
|
1214
|
-
!this.fullQueryWithoutDates ||
|
|
1215
|
-
fullQueryNoDateKey === this.previousFullQueryNoDate
|
|
1216
|
-
) {
|
|
1217
|
-
return;
|
|
1218
|
-
}
|
|
1219
|
-
this.previousFullQueryNoDate = fullQueryNoDateKey;
|
|
1220
|
-
|
|
1221
|
-
const aggregations = {
|
|
1222
|
-
simpleParams: ['year'],
|
|
1223
|
-
};
|
|
1224
|
-
|
|
1225
|
-
const params = {
|
|
1226
|
-
query: this.fullQueryWithoutDates,
|
|
1227
|
-
aggregations,
|
|
1228
|
-
rows: 0,
|
|
1229
|
-
};
|
|
1230
|
-
|
|
1231
|
-
this.fullYearAggregationLoading = true;
|
|
1232
|
-
const results = await this.searchService?.search(params, this.searchType);
|
|
1233
|
-
this.fullYearAggregationLoading = false;
|
|
1234
|
-
|
|
1235
1143
|
this.fullYearsHistogramAggregation =
|
|
1236
1144
|
results?.success?.response?.aggregations?.year_histogram ??
|
|
1237
1145
|
results?.success?.response?.aggregations?.['year-histogram']; // Temp fix until PPS FTS key is fixed to use underscore
|
|
1238
1146
|
}
|
|
1239
1147
|
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
*/
|
|
1246
|
-
private get shouldRequestYearHistogram() {
|
|
1247
|
-
const datePickerEnabled = this.showHistogramDatePicker;
|
|
1248
|
-
const hasDateRange = !!this.dateRangeQueryClause;
|
|
1249
|
-
const hasYearFacet =
|
|
1250
|
-
Object.keys(this.selectedFacets?.year ?? {}).length > 0;
|
|
1251
|
-
return datePickerEnabled && (hasDateRange || hasYearFacet);
|
|
1252
|
-
}
|
|
1253
|
-
|
|
1254
|
-
private scrollToPage(pageNumber: number) {
|
|
1255
|
-
const cellIndexToScrollTo = this.pageSize * (pageNumber - 1);
|
|
1256
|
-
// without this setTimeout, Safari just pauses until the `fetchPage` is complete
|
|
1257
|
-
// then scrolls to the cell
|
|
1258
|
-
setTimeout(() => {
|
|
1259
|
-
this.isScrollingToCell = true;
|
|
1260
|
-
this.infiniteScroller.scrollToCell(cellIndexToScrollTo, true);
|
|
1261
|
-
// This timeout is to give the scroll animation time to finish
|
|
1262
|
-
// then updating the infinite scroller once we're done scrolling
|
|
1263
|
-
// There's no scroll animation completion callback so we're
|
|
1264
|
-
// giving it 0.5s to finish.
|
|
1148
|
+
private scrollToPage(pageNumber: number): Promise<void> {
|
|
1149
|
+
return new Promise(resolve => {
|
|
1150
|
+
const cellIndexToScrollTo = this.pageSize * (pageNumber - 1);
|
|
1151
|
+
// without this setTimeout, Safari just pauses until the `fetchPage` is complete
|
|
1152
|
+
// then scrolls to the cell
|
|
1265
1153
|
setTimeout(() => {
|
|
1266
|
-
this.isScrollingToCell =
|
|
1267
|
-
this.infiniteScroller
|
|
1268
|
-
|
|
1269
|
-
|
|
1154
|
+
this.isScrollingToCell = true;
|
|
1155
|
+
this.infiniteScroller?.scrollToCell(cellIndexToScrollTo, true);
|
|
1156
|
+
// This timeout is to give the scroll animation time to finish
|
|
1157
|
+
// then updating the infinite scroller once we're done scrolling
|
|
1158
|
+
// There's no scroll animation completion callback so we're
|
|
1159
|
+
// giving it 0.5s to finish.
|
|
1160
|
+
setTimeout(() => {
|
|
1161
|
+
this.isScrollingToCell = false;
|
|
1162
|
+
this.infiniteScroller?.reload();
|
|
1163
|
+
resolve();
|
|
1164
|
+
}, 500);
|
|
1165
|
+
}, 0);
|
|
1166
|
+
});
|
|
1270
1167
|
}
|
|
1271
1168
|
|
|
1272
1169
|
/**
|
|
@@ -1363,7 +1260,9 @@ export class CollectionBrowser
|
|
|
1363
1260
|
// temporary estimates based on pages rendered so far).
|
|
1364
1261
|
if (results.length < this.pageSize) {
|
|
1365
1262
|
this.endOfDataReached = true;
|
|
1366
|
-
this.infiniteScroller
|
|
1263
|
+
if (this.infiniteScroller) {
|
|
1264
|
+
this.infiniteScroller.itemCount = this.totalResults;
|
|
1265
|
+
}
|
|
1367
1266
|
}
|
|
1368
1267
|
this.pageFetchesInProgress[pageFetchQueryKey]?.delete(pageNumber);
|
|
1369
1268
|
this.searchResultsLoading = false;
|
|
@@ -1465,7 +1364,7 @@ export class CollectionBrowser
|
|
|
1465
1364
|
const visiblePages = this.currentVisiblePageNumbers;
|
|
1466
1365
|
const needsReload = visiblePages.includes(pageNumber);
|
|
1467
1366
|
if (needsReload) {
|
|
1468
|
-
this.infiniteScroller
|
|
1367
|
+
this.infiniteScroller?.reload();
|
|
1469
1368
|
}
|
|
1470
1369
|
}
|
|
1471
1370
|
|
|
@@ -1590,6 +1489,7 @@ export class CollectionBrowser
|
|
|
1590
1489
|
.sortParam=${this.sortParam}
|
|
1591
1490
|
.mobileBreakpoint=${this.mobileBreakpoint}
|
|
1592
1491
|
.loggedIn=${this.loggedIn}
|
|
1492
|
+
?enableHoverPane=${true}
|
|
1593
1493
|
@resultSelected=${(e: CustomEvent) => this.resultSelected(e)}
|
|
1594
1494
|
>
|
|
1595
1495
|
</tile-dispatcher>
|
|
@@ -1659,13 +1559,11 @@ export class CollectionBrowser
|
|
|
1659
1559
|
position: relative;
|
|
1660
1560
|
border-left: 1px solid rgb(232, 232, 232);
|
|
1661
1561
|
padding-left: 1rem;
|
|
1662
|
-
margin-bottom: 1.5rem; // add space in the bottom of infinite scroller
|
|
1663
1562
|
}
|
|
1664
1563
|
|
|
1665
1564
|
.mobile #right-column {
|
|
1666
1565
|
border-left: none;
|
|
1667
1566
|
padding: 0;
|
|
1668
|
-
margin-bottom: 1.5rem;
|
|
1669
1567
|
}
|
|
1670
1568
|
|
|
1671
1569
|
#left-column {
|
|
@@ -1806,5 +1704,9 @@ export class CollectionBrowser
|
|
|
1806
1704
|
);
|
|
1807
1705
|
--infiniteScrollerCellMaxWidth: var(--collectionBrowserCellMaxWidth, 1fr);
|
|
1808
1706
|
}
|
|
1707
|
+
|
|
1708
|
+
infinite-scroller.hidden {
|
|
1709
|
+
display: none;
|
|
1710
|
+
}
|
|
1809
1711
|
`;
|
|
1810
1712
|
}
|
|
@@ -380,7 +380,18 @@ export class SortFilterBar
|
|
|
380
380
|
|
|
381
381
|
private mobileSortChanged(e: Event) {
|
|
382
382
|
const target = e.target as HTMLSelectElement;
|
|
383
|
-
|
|
383
|
+
const sortField = target.value as SortField;
|
|
384
|
+
this.setSelectedSort(sortField);
|
|
385
|
+
|
|
386
|
+
this.alphaSelectorVisible = null;
|
|
387
|
+
if (sortField !== 'title' && this.selectedTitleFilter) {
|
|
388
|
+
this.selectedTitleFilter = null;
|
|
389
|
+
this.emitTitleLetterChangedEvent();
|
|
390
|
+
}
|
|
391
|
+
if (sortField !== 'creator' && this.selectedCreatorFilter) {
|
|
392
|
+
this.selectedCreatorFilter = null;
|
|
393
|
+
this.emitCreatorLetterChangedEvent();
|
|
394
|
+
}
|
|
384
395
|
}
|
|
385
396
|
|
|
386
397
|
private get displayOptionTemplate() {
|
|
@@ -16,6 +16,10 @@ export const baseItemImageStyles = css`
|
|
|
16
16
|
position: relative;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
.list-box img {
|
|
20
|
+
border-radius: 0;
|
|
21
|
+
}
|
|
22
|
+
|
|
19
23
|
.contain {
|
|
20
24
|
object-fit: contain;
|
|
21
25
|
object-position: center;
|
|
@@ -40,7 +44,7 @@ export const baseItemImageStyles = css`
|
|
|
40
44
|
height: 160px;
|
|
41
45
|
}
|
|
42
46
|
|
|
43
|
-
.collection-image {
|
|
47
|
+
:not(.list-box) > .collection-image {
|
|
44
48
|
object-fit: cover;
|
|
45
49
|
border-radius: 8px;
|
|
46
50
|
width: 100%;
|
|
@@ -83,7 +83,6 @@ export class ItemTile extends LitElement {
|
|
|
83
83
|
private get imageBlockTemplate(): TemplateResult {
|
|
84
84
|
return html`
|
|
85
85
|
<image-block
|
|
86
|
-
class=${this.hasSnippets ? 'has-snippets' : nothing}
|
|
87
86
|
.model=${this.model}
|
|
88
87
|
.baseImageUrl=${this.baseImageUrl}
|
|
89
88
|
.loggedIn=${this.loggedIn}
|
|
@@ -174,7 +173,21 @@ export class ItemTile extends LitElement {
|
|
|
174
173
|
|
|
175
174
|
text-snippet-block {
|
|
176
175
|
--containerLeftMargin: 5px;
|
|
177
|
-
--containerTopMargin:
|
|
176
|
+
--containerTopMargin: 5px;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* iOS Safari long-press on tiles (to bring up hover pane)
|
|
181
|
+
* gets messy without this
|
|
182
|
+
*/
|
|
183
|
+
@media screen and (pointer: coarse) and (hover: none) {
|
|
184
|
+
.container {
|
|
185
|
+
-webkit-touch-callout: none;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.truncated {
|
|
189
|
+
-webkit-touch-callout: default;
|
|
190
|
+
}
|
|
178
191
|
}
|
|
179
192
|
`,
|
|
180
193
|
];
|
|
@@ -13,6 +13,7 @@ export const baseTileStyles = css`
|
|
|
13
13
|
border: 1px #2c2c2c;
|
|
14
14
|
border-radius: ${tileCornerRadius};
|
|
15
15
|
box-shadow: 1px 1px 2px 0;
|
|
16
|
+
box-sizing: border-box;
|
|
16
17
|
height: 100%;
|
|
17
18
|
display: flex;
|
|
18
19
|
flex-direction: column;
|
|
@@ -21,7 +22,6 @@ export const baseTileStyles = css`
|
|
|
21
22
|
|
|
22
23
|
image-block {
|
|
23
24
|
display: block;
|
|
24
|
-
margin-bottom: 5px;
|
|
25
25
|
position: relative;
|
|
26
26
|
text-align: center;
|
|
27
27
|
}
|
|
@@ -35,14 +35,14 @@ export const baseTileStyles = css`
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
.item-info {
|
|
38
|
+
display: flex;
|
|
39
|
+
flex-direction: column;
|
|
40
|
+
row-gap: 5px;
|
|
38
41
|
flex-grow: 1;
|
|
39
42
|
}
|
|
40
43
|
|
|
41
44
|
#title {
|
|
42
|
-
|
|
43
|
-
padding-left: 5px;
|
|
44
|
-
padding-right: 5px;
|
|
45
|
-
margin-bottom: 10px;
|
|
45
|
+
padding: 0 5px;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
.created-by,
|
|
@@ -52,7 +52,7 @@ export const baseTileStyles = css`
|
|
|
52
52
|
display: flex;
|
|
53
53
|
justify-content: left;
|
|
54
54
|
align-items: flex-end; /* Important to start text from bottom */
|
|
55
|
-
padding: 0 5px
|
|
55
|
+
padding: 0 5px;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
.truncated {
|
|
@@ -63,7 +63,7 @@ export class TileStats extends LitElement {
|
|
|
63
63
|
${formattedFavCount}
|
|
64
64
|
</p>
|
|
65
65
|
</li>
|
|
66
|
-
<li class="col" title="${formattedReviewCount} reviews">
|
|
66
|
+
<li class="col reviews" title="${formattedReviewCount} reviews">
|
|
67
67
|
${reviewsIcon}
|
|
68
68
|
<p class="status-text">
|
|
69
69
|
<span class="sr-only">Reviews:</span>
|
|
@@ -92,25 +92,33 @@ export class TileStats extends LitElement {
|
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
svg {
|
|
95
|
-
height:
|
|
96
|
-
width:
|
|
95
|
+
height: 13px;
|
|
96
|
+
width: 13px;
|
|
97
97
|
display: block;
|
|
98
98
|
margin: auto;
|
|
99
99
|
pointer-events: none;
|
|
100
100
|
}
|
|
101
101
|
|
|
102
|
+
/* Make the reviews icon slightly smaller/lower, for even visual weight */
|
|
103
|
+
.reviews svg {
|
|
104
|
+
height: 11px;
|
|
105
|
+
width: 11px;
|
|
106
|
+
margin-top: 2px;
|
|
107
|
+
}
|
|
108
|
+
|
|
102
109
|
.item-stats {
|
|
103
|
-
height:
|
|
110
|
+
height: 30px;
|
|
104
111
|
padding-left: 5px;
|
|
105
112
|
padding-right: 5px;
|
|
106
113
|
font-family: 'Helvetica Neue', ui-sans-serif, system-ui, sans-serif;
|
|
114
|
+
text-align: center;
|
|
107
115
|
}
|
|
108
116
|
|
|
109
117
|
#stats-row {
|
|
110
118
|
display: flex;
|
|
119
|
+
justify-content: space-between;
|
|
111
120
|
flex-wrap: wrap;
|
|
112
121
|
width: 100%;
|
|
113
|
-
padding-top: 5px;
|
|
114
122
|
padding-bottom: 5px;
|
|
115
123
|
}
|
|
116
124
|
|
|
@@ -126,7 +134,7 @@ export class TileStats extends LitElement {
|
|
|
126
134
|
}
|
|
127
135
|
|
|
128
136
|
.col {
|
|
129
|
-
width:
|
|
137
|
+
min-width: 15px;
|
|
130
138
|
height: 25px;
|
|
131
139
|
}
|
|
132
140
|
|
|
@@ -134,7 +142,7 @@ export class TileStats extends LitElement {
|
|
|
134
142
|
font-size: 14px;
|
|
135
143
|
height: 15px;
|
|
136
144
|
color: #2c2c2c;
|
|
137
|
-
line-height:
|
|
145
|
+
line-height: 17px;
|
|
138
146
|
margin: auto;
|
|
139
147
|
display: block;
|
|
140
148
|
text-align: center;
|