@internetarchive/collection-browser 3.2.0 → 3.3.1-alpha1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/.editorconfig +29 -29
  2. package/.github/workflows/ci.yml +27 -27
  3. package/.github/workflows/gh-pages-main.yml +39 -39
  4. package/.github/workflows/npm-publish.yml +39 -39
  5. package/.github/workflows/pr-preview.yml +38 -38
  6. package/.husky/pre-commit +4 -4
  7. package/.prettierignore +1 -1
  8. package/LICENSE +661 -661
  9. package/README.md +83 -83
  10. package/dist/src/collection-browser.d.ts +4 -0
  11. package/dist/src/collection-browser.js +702 -682
  12. package/dist/src/collection-browser.js.map +1 -1
  13. package/dist/src/collection-facets/more-facets-content.js +118 -118
  14. package/dist/src/collection-facets/more-facets-content.js.map +1 -1
  15. package/dist/src/collection-facets.js +266 -266
  16. package/dist/src/collection-facets.js.map +1 -1
  17. package/dist/src/data-source/collection-browser-data-source.js.map +1 -1
  18. package/dist/src/data-source/collection-browser-query-state.js.map +1 -1
  19. package/dist/src/data-source/models.js.map +1 -1
  20. package/dist/src/tiles/base-tile-component.d.ts +7 -0
  21. package/dist/src/tiles/base-tile-component.js +13 -0
  22. package/dist/src/tiles/base-tile-component.js.map +1 -1
  23. package/dist/src/tiles/grid/account-tile.js +37 -36
  24. package/dist/src/tiles/grid/account-tile.js.map +1 -1
  25. package/dist/src/tiles/grid/collection-tile.js +78 -77
  26. package/dist/src/tiles/grid/collection-tile.js.map +1 -1
  27. package/dist/src/tiles/grid/item-tile.d.ts +1 -1
  28. package/dist/src/tiles/grid/item-tile.js +139 -140
  29. package/dist/src/tiles/grid/item-tile.js.map +1 -1
  30. package/dist/src/tiles/list/tile-list-compact.js +100 -98
  31. package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
  32. package/dist/src/tiles/list/tile-list.js +300 -300
  33. package/dist/src/tiles/list/tile-list.js.map +1 -1
  34. package/dist/src/tiles/tile-dispatcher.js +204 -200
  35. package/dist/src/tiles/tile-dispatcher.js.map +1 -1
  36. package/dist/src/utils/format-date.d.ts +15 -1
  37. package/dist/src/utils/format-date.js +8 -3
  38. package/dist/src/utils/format-date.js.map +1 -1
  39. package/dist/test/collection-browser.test.js +189 -189
  40. package/dist/test/collection-browser.test.js.map +1 -1
  41. package/dist/test/tiles/grid/item-tile.test.js +115 -64
  42. package/dist/test/tiles/grid/item-tile.test.js.map +1 -1
  43. package/dist/test/tiles/list/tile-list-compact.test.js +108 -57
  44. package/dist/test/tiles/list/tile-list-compact.test.js.map +1 -1
  45. package/dist/test/tiles/list/tile-list.test.js +164 -113
  46. package/dist/test/tiles/list/tile-list.test.js.map +1 -1
  47. package/dist/test/utils/format-date.test.js +31 -1
  48. package/dist/test/utils/format-date.test.js.map +1 -1
  49. package/eslint.config.mjs +53 -53
  50. package/index.html +24 -24
  51. package/local.archive.org.cert +86 -86
  52. package/local.archive.org.key +27 -27
  53. package/package.json +117 -117
  54. package/renovate.json +6 -6
  55. package/src/collection-browser.ts +2829 -2804
  56. package/src/collection-facets/more-facets-content.ts +639 -639
  57. package/src/collection-facets.ts +995 -995
  58. package/src/data-source/collection-browser-data-source.ts +1401 -1401
  59. package/src/data-source/collection-browser-query-state.ts +65 -65
  60. package/src/data-source/models.ts +43 -43
  61. package/src/tiles/base-tile-component.ts +65 -53
  62. package/src/tiles/grid/account-tile.ts +113 -112
  63. package/src/tiles/grid/collection-tile.ts +163 -162
  64. package/src/tiles/grid/item-tile.ts +340 -339
  65. package/src/tiles/list/tile-list-compact.ts +239 -236
  66. package/src/tiles/list/tile-list.ts +700 -696
  67. package/src/tiles/tile-dispatcher.ts +490 -486
  68. package/src/utils/format-date.ts +62 -42
  69. package/test/collection-browser.test.ts +2403 -2403
  70. package/test/tiles/grid/item-tile.test.ts +520 -464
  71. package/test/tiles/list/tile-list-compact.test.ts +282 -228
  72. package/test/tiles/list/tile-list.test.ts +552 -497
  73. package/test/utils/format-date.test.ts +89 -39
  74. package/tsconfig.json +20 -20
  75. package/web-dev-server.config.mjs +30 -30
  76. package/web-test-runner.config.mjs +41 -41
@@ -1 +1 @@
1
- {"version":3,"file":"tile-list.js","sourceRoot":"","sources":["../../../../src/tiles/list/tile-list.ts"],"names":[],"mappings":"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","sourcesContent":["import { css, html, nothing, PropertyValues, TemplateResult } from 'lit';\r\nimport { ifDefined } from 'lit/directives/if-defined.js';\r\nimport { join } from 'lit/directives/join.js';\r\nimport { map } from 'lit/directives/map.js';\r\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\r\nimport { customElement, property, state } from 'lit/decorators.js';\r\nimport { msg, str } from '@lit/localize';\r\nimport DOMPurify from 'dompurify';\r\n\r\nimport type { SortParam } from '@internetarchive/search-service';\r\nimport { suppressedCollections } from '../../models';\r\nimport type { CollectionTitles } from '../../data-source/models';\r\nimport { BaseTileComponent } from '../base-tile-component';\r\n\r\nimport { formatCount, NumberFormat } from '../../utils/format-count';\r\nimport { formatDate, DateFormat } from '../../utils/format-date';\r\nimport { isFirstMillisecondOfUTCYear } from '../../utils/local-date-from-utc';\r\n\r\nimport '../image-block';\r\nimport '../review-block';\r\nimport '../text-snippet-block';\r\nimport '../tile-mediatype-icon';\r\n\r\n@customElement('tile-list')\r\nexport class TileList extends BaseTileComponent {\r\n /*\r\n * Reactive properties inherited from BaseTileComponent:\r\n * - model?: TileModel;\r\n * - currentWidth?: number;\r\n * - currentHeight?: number;\r\n * - baseNavigationUrl?: string;\r\n * - baseImageUrl?: string;\r\n * - collectionPagePath?: string;\r\n * - sortParam: SortParam | null = null;\r\n * - defaultSortParam: SortParam | null = null;\r\n * - creatorFilter?: string;\r\n * - mobileBreakpoint?: number;\r\n * - loggedIn = false;\r\n * - suppressBlurring = false;\r\n */\r\n\r\n @property({ type: Object })\r\n collectionTitles?: CollectionTitles;\r\n\r\n @state() private collectionLinks: (TemplateResult | typeof nothing)[] = [];\r\n\r\n render() {\r\n return html`\r\n <div id=\"list-line\" class=\"${this.classSize}\">\r\n ${this.classSize === 'mobile'\r\n ? this.mobileTemplate\r\n : this.desktopTemplate}\r\n </div>\r\n `;\r\n }\r\n\r\n /**\r\n * Templates\r\n */\r\n private get mobileTemplate() {\r\n return html`\r\n <div id=\"list-line-top\">\r\n <div id=\"list-line-left\">${this.imageBlockTemplate}</div>\r\n <div id=\"list-line-right\">\r\n <div id=\"title-line\">\r\n <div id=\"title\">${this.titleTemplate}</div>\r\n ${this.iconRightTemplate}\r\n </div>\r\n </div>\r\n </div>\r\n <div id=\"list-line-bottom\">${this.detailsTemplate}</div>\r\n `;\r\n }\r\n\r\n private get desktopTemplate() {\r\n return html`\r\n <div id=\"list-line-left\">${this.imageBlockTemplate}</div>\r\n <div id=\"list-line-right\">\r\n <div id=\"title-line\">\r\n <div id=\"title\">${this.titleTemplate}</div>\r\n ${this.iconRightTemplate}\r\n </div>\r\n ${this.detailsTemplate}\r\n </div>\r\n `;\r\n }\r\n\r\n private get imageBlockTemplate() {\r\n if (!this.model) return nothing;\r\n\r\n const isCollection = this.model.mediatype === 'collection';\r\n const href = this.displayValueProvider.itemPageUrl(\r\n this.model.identifier,\r\n isCollection,\r\n );\r\n\r\n return html`<a\r\n id=\"image-link\"\r\n title=${msg(str`View ${this.model?.title}`)}\r\n href=${href}\r\n >\r\n <image-block\r\n .model=${this.model}\r\n .baseImageUrl=${this.baseImageUrl}\r\n .isCompactTile=${false}\r\n .isListTile=${true}\r\n .viewSize=${this.classSize}\r\n .loggedIn=${this.loggedIn}\r\n .suppressBlurring=${this.suppressBlurring}\r\n >\r\n </image-block>\r\n </a> `;\r\n }\r\n\r\n private get detailsTemplate() {\r\n return html`\r\n ${this.itemLineTemplate} ${this.creatorTemplate}\r\n <div id=\"dates-line\">\r\n ${this.datePublishedTemplate} ${this.dateSortByTemplate}\r\n ${this.webArchivesCaptureDatesTemplate}\r\n </div>\r\n <div id=\"views-line\">\r\n ${this.viewsTemplate} ${this.ratingTemplate} ${this.reviewsTemplate}\r\n </div>\r\n ${this.topicsTemplate} ${this.collectionsTemplate}\r\n ${this.descriptionTemplate} ${this.textSnippetsTemplate}\r\n ${this.reviewBlockTemplate}\r\n `;\r\n }\r\n\r\n // Data templates\r\n private get iconRightTemplate() {\r\n return html`\r\n <a\r\n id=\"icon-right\"\r\n href=${this.mediatypeURL}\r\n title=${msg(str`See more: ${this.model?.mediatype}`)}\r\n >\r\n <tile-mediatype-icon .model=${this.model}> </tile-mediatype-icon>\r\n </a>\r\n `;\r\n }\r\n\r\n private get titleTemplate() {\r\n if (!this.model?.title) {\r\n return nothing;\r\n }\r\n\r\n // If the model has a server-specified href, use it\r\n // Otherwise construct a details link using the identifier\r\n return this.model?.href\r\n ? html`<a href=\"${this.baseNavigationUrl}${this.model.href}\"\r\n >${this.model.title ?? this.model.identifier}</a\r\n >`\r\n : this.detailsLink(\r\n this.model.identifier,\r\n this.model.title,\r\n this.model.mediatype === 'collection',\r\n );\r\n }\r\n\r\n private get itemLineTemplate() {\r\n const source = this.sourceTemplate;\r\n const volume = this.volumeTemplate;\r\n const issue = this.issueTemplate;\r\n if (!source && !volume && !issue) {\r\n return nothing;\r\n }\r\n return html` <div id=\"item-line\">${source} ${volume} ${issue}</div> `;\r\n }\r\n\r\n private get sourceTemplate() {\r\n if (!this.model?.source) {\r\n return nothing;\r\n }\r\n return html`\r\n <div id=\"source\" class=\"metadata\">\r\n ${this.labelTemplate(msg('Source'))}\r\n ${this.searchLink('source', this.model.source)}\r\n </div>\r\n `;\r\n }\r\n\r\n private get volumeTemplate() {\r\n return this.metadataTemplate(this.model?.volume, msg('Volume'));\r\n }\r\n\r\n private get issueTemplate() {\r\n return this.metadataTemplate(this.model?.issue, msg('Issue'));\r\n }\r\n\r\n private get creatorTemplate() {\r\n // \"Archivist since\" if account\r\n if (this.model?.mediatype === 'account') {\r\n return html`\r\n <div id=\"creator\" class=\"metadata\">\r\n <span class=\"label\"\r\n >${this.displayValueProvider.accountLabel ?? nothing}</span\r\n >\r\n </div>\r\n `;\r\n }\r\n // \"Creator\" if not account tile\r\n if (!this.model?.creators || this.model.creators.length === 0) {\r\n return nothing;\r\n }\r\n return html`\r\n <div id=\"creator\" class=\"metadata\">\r\n ${this.labelTemplate(msg('By'))}\r\n ${join(\r\n map(this.model.creators, id => this.searchLink('creator', id)),\r\n ', ',\r\n )}\r\n </div>\r\n `;\r\n }\r\n\r\n private get datePublishedTemplate() {\r\n // If we're showing a date published of Jan 1 at midnight, only show the year.\r\n // This is because items with only a year for their publication date are normalized to\r\n // Jan 1 at midnight timestamps in the search engine documents.\r\n const date: Date | undefined = this.model?.datePublished;\r\n let format: DateFormat = 'long';\r\n if (isFirstMillisecondOfUTCYear(date)) {\r\n format = 'year-only';\r\n }\r\n\r\n return this.metadataTemplate(formatDate(date, format), msg('Published'));\r\n }\r\n\r\n // Show date label/value when sorted by date type\r\n // Except datePublished which is always shown\r\n private get dateSortByTemplate() {\r\n if (\r\n this.effectiveSort &&\r\n (this.effectiveSort.field === 'addeddate' ||\r\n this.effectiveSort.field === 'reviewdate' ||\r\n this.effectiveSort.field === 'publicdate')\r\n ) {\r\n return this.metadataTemplate(\r\n formatDate(this.date, 'long'),\r\n this.displayValueProvider.dateLabel,\r\n );\r\n }\r\n return nothing;\r\n }\r\n\r\n private get viewsTemplate() {\r\n const viewCount =\r\n this.effectiveSort?.field === 'week'\r\n ? this.model?.weeklyViewCount // weekly views\r\n : this.model?.viewCount; // all-time views\r\n if (viewCount == null) return nothing;\r\n\r\n // when its a search-tile, we don't have any stats to show\r\n if (this.model?.mediatype === 'search') {\r\n return this.metadataTemplate('(Favorited search query)', '');\r\n }\r\n\r\n return this.metadataTemplate(\r\n `${formatCount(viewCount, this.formatSize)}`,\r\n msg('Views'),\r\n );\r\n }\r\n\r\n private get ratingTemplate() {\r\n return this.metadataTemplate(this.model?.averageRating, msg('Avg Rating'));\r\n }\r\n\r\n private get reviewsTemplate() {\r\n return this.metadataTemplate(this.model?.commentCount, msg('Reviews'));\r\n }\r\n\r\n private get topicsTemplate() {\r\n if (!this.model?.subjects || this.model.subjects.length === 0) {\r\n return nothing;\r\n }\r\n return html`\r\n <div id=\"topics\" class=\"metadata\">\r\n ${this.labelTemplate(msg('Topics'))}\r\n ${join(\r\n map(this.model.subjects, id => this.searchLink('subject', id)),\r\n ', ',\r\n )}\r\n </div>\r\n `;\r\n }\r\n\r\n private get collectionsTemplate() {\r\n if (!this.collectionLinks || this.collectionLinks.length === 0) {\r\n return nothing;\r\n }\r\n return html`\r\n <div id=\"collections\" class=\"metadata\">\r\n ${this.labelTemplate(msg('Collections'))}\r\n ${join(this.collectionLinks, ', ')}\r\n </div>\r\n `;\r\n }\r\n\r\n private get descriptionTemplate() {\r\n return this.metadataTemplate(\r\n // Sanitize away any HTML tags and convert line breaks to spaces.\r\n unsafeHTML(\r\n DOMPurify.sanitize(this.model?.description?.replace(/\\n/g, ' ') ?? ''),\r\n ),\r\n '',\r\n 'description',\r\n );\r\n }\r\n\r\n private get reviewBlockTemplate(): TemplateResult | typeof nothing {\r\n if (!this.model?.review) return nothing;\r\n\r\n const { reviewtitle, reviewbody, stars } = this.model.review;\r\n return html`\r\n <review-block\r\n viewsize=\"list\"\r\n title=${ifDefined(reviewtitle)}\r\n body=${ifDefined(reviewbody)}\r\n starRating=${ifDefined(stars)}\r\n >\r\n </review-block>\r\n `;\r\n }\r\n\r\n private get textSnippetsTemplate(): TemplateResult | typeof nothing {\r\n if (!this.hasSnippets) return nothing;\r\n\r\n return html`<text-snippet-block\r\n viewsize=\"list\"\r\n .snippets=${this.model?.snippets}\r\n ></text-snippet-block>`;\r\n }\r\n\r\n private get hasSnippets(): boolean {\r\n return !!this.model?.snippets?.length;\r\n }\r\n\r\n private get webArchivesCaptureDatesTemplate():\r\n | TemplateResult\r\n | typeof nothing {\r\n if (!this.model?.captureDates || !this.model.title) return nothing;\r\n\r\n return html`\r\n <ul class=\"capture-dates\">\r\n ${map(\r\n this.model.captureDates,\r\n date =>\r\n html`<li>\r\n ${this.displayValueProvider.webArchivesCaptureLink(\r\n this.model!.title,\r\n date,\r\n )}\r\n </li>`,\r\n )}\r\n </ul>\r\n `;\r\n }\r\n\r\n // Utility functions\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private metadataTemplate(text: any, label = '', id?: string) {\r\n if (!text) return nothing;\r\n return html`\r\n <div id=${ifDefined(id)} class=\"metadata\">\r\n ${this.labelTemplate(label)} ${text}\r\n </div>\r\n `;\r\n }\r\n\r\n private labelTemplate(label: string) {\r\n return html` ${label\r\n ? html`<span class=\"label\">${label}: </span>`\r\n : nothing}`;\r\n }\r\n\r\n private searchLink(field: string, searchTerm: string) {\r\n if (!field || !searchTerm) {\r\n return nothing;\r\n }\r\n const query = encodeURIComponent(`${field}:\"${searchTerm}\"`);\r\n // No whitespace after closing tag\r\n // Note: single ' for href='' to wrap \" in query var gets changed back by yarn format\r\n return html`<a\r\n href=\"${this.baseNavigationUrl}/search?query=${query}\"\r\n rel=\"nofollow\"\r\n >\r\n ${DOMPurify.sanitize(searchTerm)}</a\r\n >`;\r\n }\r\n\r\n private detailsLink(\r\n identifier?: string,\r\n text?: string,\r\n isCollection = false,\r\n ): TemplateResult | typeof nothing {\r\n if (!identifier) return nothing;\r\n\r\n const linkText = text ?? identifier;\r\n const linkHref = this.displayValueProvider.itemPageUrl(\r\n identifier,\r\n isCollection,\r\n );\r\n\r\n return html`<a href=${linkHref}> ${DOMPurify.sanitize(linkText)} </a>`;\r\n }\r\n\r\n /** The URL of this item's mediatype collection, if defined. */\r\n private get mediatypeURL(): string | typeof nothing {\r\n // NB: baseNavigationUrl can be an empty string\r\n if (this.baseNavigationUrl === undefined || !this.model?.mediatype)\r\n return nothing;\r\n\r\n // Need special handling for certain mediatypes that don't have a top-level collection page\r\n switch (this.model.mediatype) {\r\n case 'collection':\r\n return `${this.baseNavigationUrl}/search?query=mediatype:collection&sort=-downloads`;\r\n case 'account':\r\n return nothing;\r\n default:\r\n return this.displayValueProvider.itemPageUrl(\r\n this.model.mediatype,\r\n true,\r\n );\r\n }\r\n }\r\n\r\n protected updated(changed: PropertyValues): void {\r\n if (changed.has('model') || changed.has('collectionTitles')) {\r\n this.buildCollectionLinks();\r\n }\r\n }\r\n\r\n private async buildCollectionLinks() {\r\n if (!this.model?.collections || this.model.collections.length === 0) {\r\n return;\r\n }\r\n\r\n // Note: quirk of Lit: need to replace collectionLinks array,\r\n // otherwise it will not re-render. Can't simply alter the array.\r\n this.collectionLinks = [];\r\n const newCollectionLinks: (TemplateResult | typeof nothing)[] = [];\r\n for (const collection of this.model.collections) {\r\n // Don't include favorites or collections that are meant to be suppressed\r\n if (\r\n !suppressedCollections[collection] &&\r\n !collection.startsWith('fav-')\r\n ) {\r\n newCollectionLinks.push(\r\n this.detailsLink(\r\n collection,\r\n this.collectionTitles?.get(collection) ?? collection,\r\n true,\r\n ),\r\n );\r\n }\r\n }\r\n this.collectionLinks = newCollectionLinks;\r\n }\r\n\r\n /*\r\n * TODO: fix field names to match model in src/collection-browser.ts\r\n * private get dateSortSelector()\r\n * @see src/models.ts\r\n */\r\n private get date(): Date | undefined {\r\n switch (this.effectiveSort?.field) {\r\n case 'date':\r\n return this.model?.datePublished;\r\n case 'reviewdate':\r\n return this.model?.dateReviewed;\r\n case 'addeddate':\r\n return this.model?.dateAdded;\r\n default:\r\n return this.model?.dateArchived; // publicdate\r\n }\r\n }\r\n\r\n /**\r\n * Returns the active sort param if one is set, or the default sort param otherwise.\r\n */\r\n private get effectiveSort(): SortParam | null {\r\n return this.sortParam ?? this.defaultSortParam;\r\n }\r\n\r\n private get classSize(): string {\r\n if (\r\n this.mobileBreakpoint &&\r\n this.currentWidth &&\r\n this.currentWidth < this.mobileBreakpoint\r\n ) {\r\n return 'mobile';\r\n }\r\n return 'desktop';\r\n }\r\n\r\n private get formatSize(): NumberFormat {\r\n if (\r\n this.mobileBreakpoint &&\r\n this.currentWidth &&\r\n this.currentWidth < this.mobileBreakpoint\r\n ) {\r\n return 'short';\r\n }\r\n return 'long';\r\n }\r\n\r\n static get styles() {\r\n return css`\r\n html {\r\n font-size: unset;\r\n }\r\n\r\n div {\r\n font-size: 14px;\r\n }\r\n\r\n div a {\r\n text-decoration: none;\r\n }\r\n\r\n div a:link {\r\n color: var(--ia-theme-link-color, #4b64ff);\r\n }\r\n\r\n .label {\r\n font-weight: bold;\r\n }\r\n\r\n #list-line.mobile {\r\n --infiniteScrollerRowGap: 20px;\r\n --infiniteScrollerRowHeight: auto;\r\n }\r\n\r\n #list-line.desktop {\r\n --infiniteScrollerRowGap: 30px;\r\n --infiniteScrollerRowHeight: auto;\r\n }\r\n\r\n /* fields */\r\n #icon-right {\r\n width: 20px;\r\n padding-top: 5px;\r\n --iconHeight: 20px;\r\n --iconWidth: 20px;\r\n --iconTextAlign: right;\r\n margin-top: -8px;\r\n text-align: right;\r\n }\r\n\r\n #title {\r\n color: #4b64ff;\r\n text-decoration: none;\r\n font-size: 22px;\r\n font-weight: bold;\r\n /* align top of text with image */\r\n line-height: 25px;\r\n margin-top: -4px;\r\n padding-bottom: 2px;\r\n flex-grow: 1;\r\n\r\n display: -webkit-box;\r\n -webkit-box-orient: vertical;\r\n -webkit-line-clamp: 3;\r\n overflow: hidden;\r\n overflow-wrap: anywhere;\r\n }\r\n\r\n .metadata {\r\n line-height: 20px;\r\n }\r\n\r\n #description,\r\n #creator,\r\n #topics,\r\n #source {\r\n text-align: left;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n -webkit-box-orient: vertical;\r\n display: -webkit-box;\r\n word-break: break-word;\r\n -webkit-line-clamp: 3; /* number of lines to show */\r\n line-clamp: 3;\r\n\r\n /*\r\n * Safari doesn't always respect the line-clamping rules above,\r\n * so we add this to ensure these fields still get truncated\r\n */\r\n max-height: 60px;\r\n }\r\n\r\n #collections {\r\n display: -webkit-box;\r\n -webkit-box-orient: vertical;\r\n -webkit-line-clamp: 3;\r\n overflow: hidden;\r\n overflow-wrap: anywhere;\r\n }\r\n\r\n #collections > a {\r\n display: inline-block;\r\n }\r\n\r\n #icon {\r\n padding-top: 5px;\r\n }\r\n\r\n #description {\r\n padding-top: 10px;\r\n }\r\n\r\n /* Top level container */\r\n #list-line {\r\n display: flex;\r\n }\r\n\r\n #list-line.mobile {\r\n flex-direction: column;\r\n }\r\n\r\n #list-line.desktop {\r\n column-gap: 10px;\r\n }\r\n\r\n #list-line-top {\r\n display: flex;\r\n column-gap: 7px;\r\n }\r\n\r\n #list-line-bottom {\r\n padding-top: 4px;\r\n }\r\n\r\n #list-line-right,\r\n #list-line-top,\r\n #list-line-bottom {\r\n width: 100%;\r\n }\r\n\r\n /*\r\n * If the container becomes very tiny, don't let the thumbnail side take\r\n * up too much space. Shouldn't make a difference on ordinary viewport sizes.\r\n */\r\n #list-line-left {\r\n max-width: 25%;\r\n\r\n display: flex;\r\n flex-direction: column;\r\n row-gap: 5px;\r\n }\r\n\r\n div a:hover {\r\n text-decoration: underline;\r\n }\r\n\r\n /* Lines containing multiple div as row */\r\n #item-line,\r\n #dates-line,\r\n #views-line,\r\n #title-line {\r\n display: flex;\r\n flex-direction: row;\r\n column-gap: 10px;\r\n }\r\n\r\n /*\r\n * With the exception of the title line, allow these to wrap if\r\n * the space becomes too small to accommodate them together.\r\n *\r\n * The title line is excluded because it contains the mediatype icon\r\n * which we don't want to wrap.\r\n */\r\n #item-line,\r\n #dates-line,\r\n #views-line {\r\n flex-wrap: wrap;\r\n }\r\n\r\n .capture-dates {\r\n margin: 0;\r\n padding: 0;\r\n list-style-type: none;\r\n }\r\n\r\n .capture-dates a:link {\r\n text-decoration: none;\r\n color: var(--ia-theme-link-color, #4b64ff);\r\n }\r\n .capture-dates a:hover {\r\n text-decoration: underline;\r\n }\r\n `;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"tile-list.js","sourceRoot":"","sources":["../../../../src/tiles/list/tile-list.ts"],"names":[],"mappings":"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","sourcesContent":["import { css, html, nothing, PropertyValues, TemplateResult } 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 { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { msg, str } from '@lit/localize';\nimport DOMPurify from 'dompurify';\n\nimport type { SortParam } from '@internetarchive/search-service';\nimport { suppressedCollections } from '../../models';\nimport type { CollectionTitles } from '../../data-source/models';\nimport { BaseTileComponent } from '../base-tile-component';\n\nimport { formatCount, NumberFormat } from '../../utils/format-count';\nimport type { DateFormat } from '../../utils/format-date';\nimport { isFirstMillisecondOfUTCYear } from '../../utils/local-date-from-utc';\n\nimport '../image-block';\nimport '../review-block';\nimport '../text-snippet-block';\nimport '../tile-mediatype-icon';\n\n@customElement('tile-list')\nexport class TileList extends BaseTileComponent {\n /*\n * Reactive properties inherited from BaseTileComponent:\n * - model?: TileModel;\n * - currentWidth?: number;\n * - currentHeight?: number;\n * - baseNavigationUrl?: string;\n * - baseImageUrl?: string;\n * - collectionPagePath?: string;\n * - sortParam: SortParam | null = null;\n * - defaultSortParam: SortParam | null = null;\n * - creatorFilter?: string;\n * - mobileBreakpoint?: number;\n * - loggedIn = false;\n * - suppressBlurring = false;\n * - useLocalTime = false;\n */\n\n @property({ type: Object })\n collectionTitles?: CollectionTitles;\n\n @state() private collectionLinks: (TemplateResult | typeof nothing)[] = [];\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 /**\n * Templates\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 if (!this.model) return nothing;\n\n const isCollection = this.model.mediatype === 'collection';\n const href = this.displayValueProvider.itemPageUrl(\n this.model.identifier,\n isCollection,\n );\n\n return html`<a\n id=\"image-link\"\n title=${msg(str`View ${this.model?.title}`)}\n href=${href}\n >\n <image-block\n .model=${this.model}\n .baseImageUrl=${this.baseImageUrl}\n .isCompactTile=${false}\n .isListTile=${true}\n .viewSize=${this.classSize}\n .loggedIn=${this.loggedIn}\n .suppressBlurring=${this.suppressBlurring}\n >\n </image-block>\n </a> `;\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 ${this.webArchivesCaptureDatesTemplate}\n </div>\n <div id=\"views-line\">\n ${this.viewsTemplate} ${this.ratingTemplate} ${this.reviewsTemplate}\n </div>\n ${this.topicsTemplate} ${this.collectionsTemplate}\n ${this.descriptionTemplate} ${this.textSnippetsTemplate}\n ${this.reviewBlockTemplate}\n `;\n }\n\n // Data templates\n private get iconRightTemplate() {\n return html`\n <a\n id=\"icon-right\"\n href=${this.mediatypeURL}\n title=${msg(str`See more: ${this.model?.mediatype}`)}\n >\n <tile-mediatype-icon .model=${this.model}> </tile-mediatype-icon>\n </a>\n `;\n }\n\n private get titleTemplate() {\n if (!this.model?.title) {\n return nothing;\n }\n\n // If the model has a server-specified href, use it\n // Otherwise construct a details link using the identifier\n return this.model?.href\n ? html`<a href=\"${this.baseNavigationUrl}${this.model.href}\"\n >${this.model.title ?? this.model.identifier}</a\n >`\n : this.detailsLink(\n this.model.identifier,\n this.model.title,\n this.model.mediatype === 'collection',\n );\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(msg('Source'))}\n ${this.searchLink('source', this.model.source)}\n </div>\n `;\n }\n\n private get volumeTemplate() {\n return this.metadataTemplate(this.model?.volume, msg('Volume'));\n }\n\n private get issueTemplate() {\n return this.metadataTemplate(this.model?.issue, msg('Issue'));\n }\n\n private get creatorTemplate() {\n // \"Archivist since\" if account\n if (this.model?.mediatype === 'account') {\n return html`\n <div id=\"creator\" class=\"metadata\">\n <span class=\"label\"\n >${this.displayValueProvider.accountLabel ?? nothing}</span\n >\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(msg('By'))}\n ${join(\n map(this.model.creators, id => this.searchLink('creator', id)),\n ', ',\n )}\n </div>\n `;\n }\n\n private get datePublishedTemplate() {\n // If we're showing a date published of Jan 1 at midnight, only show the year.\n // This is because items with only a year for their publication date are normalized to\n // Jan 1 at midnight timestamps in the search engine documents.\n const date: Date | undefined = this.model?.datePublished;\n let format: DateFormat = 'long';\n if (isFirstMillisecondOfUTCYear(date)) {\n format = 'year-only';\n }\n\n return this.metadataTemplate(\n this.getFormattedDate(date, format),\n msg('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.effectiveSort &&\n (this.effectiveSort.field === 'addeddate' ||\n this.effectiveSort.field === 'reviewdate' ||\n this.effectiveSort.field === 'publicdate')\n ) {\n return this.metadataTemplate(\n this.getFormattedDate(this.date, 'long'),\n this.displayValueProvider.dateLabel,\n );\n }\n return nothing;\n }\n\n private get viewsTemplate() {\n const viewCount =\n this.effectiveSort?.field === 'week'\n ? this.model?.weeklyViewCount // weekly views\n : this.model?.viewCount; // all-time views\n if (viewCount == null) return nothing;\n\n // when its a search-tile, we don't have any stats to show\n if (this.model?.mediatype === 'search') {\n return this.metadataTemplate('(Favorited search query)', '');\n }\n\n return this.metadataTemplate(\n `${formatCount(viewCount, this.formatSize)}`,\n msg('Views'),\n );\n }\n\n private get ratingTemplate() {\n return this.metadataTemplate(this.model?.averageRating, msg('Avg Rating'));\n }\n\n private get reviewsTemplate() {\n return this.metadataTemplate(this.model?.commentCount, msg('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(msg('Topics'))}\n ${join(\n map(this.model.subjects, id => this.searchLink('subject', id)),\n ', ',\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(msg('Collections'))}\n ${join(this.collectionLinks, ', ')}\n </div>\n `;\n }\n\n private get descriptionTemplate() {\n return this.metadataTemplate(\n // Sanitize away any HTML tags and convert line breaks to spaces.\n unsafeHTML(\n DOMPurify.sanitize(this.model?.description?.replace(/\\n/g, ' ') ?? ''),\n ),\n '',\n 'description',\n );\n }\n\n private get reviewBlockTemplate(): TemplateResult | typeof nothing {\n if (!this.model?.review) return nothing;\n\n const { reviewtitle, reviewbody, stars } = this.model.review;\n return html`\n <review-block\n viewsize=\"list\"\n title=${ifDefined(reviewtitle)}\n body=${ifDefined(reviewbody)}\n starRating=${ifDefined(stars)}\n >\n </review-block>\n `;\n }\n\n private get textSnippetsTemplate(): TemplateResult | typeof nothing {\n if (!this.hasSnippets) return nothing;\n\n return html`<text-snippet-block\n viewsize=\"list\"\n .snippets=${this.model?.snippets}\n ></text-snippet-block>`;\n }\n\n private get hasSnippets(): boolean {\n return !!this.model?.snippets?.length;\n }\n\n private get webArchivesCaptureDatesTemplate():\n | TemplateResult\n | typeof nothing {\n if (!this.model?.captureDates || !this.model.title) return nothing;\n\n return html`\n <ul class=\"capture-dates\">\n ${map(\n this.model.captureDates,\n date =>\n html`<li>\n ${this.displayValueProvider.webArchivesCaptureLink(\n this.model!.title,\n date,\n )}\n </li>`,\n )}\n </ul>\n `;\n }\n\n // Utility functions\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\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 return html`<a\n href=\"${this.baseNavigationUrl}/search?query=${query}\"\n rel=\"nofollow\"\n >\n ${DOMPurify.sanitize(searchTerm)}</a\n >`;\n }\n\n private detailsLink(\n identifier?: string,\n text?: string,\n isCollection = false,\n ): TemplateResult | typeof nothing {\n if (!identifier) return nothing;\n\n const linkText = text ?? identifier;\n const linkHref = this.displayValueProvider.itemPageUrl(\n identifier,\n isCollection,\n );\n\n return html`<a href=${linkHref}> ${DOMPurify.sanitize(linkText)} </a>`;\n }\n\n /** The URL of this item's mediatype collection, if defined. */\n private get mediatypeURL(): string | typeof nothing {\n // NB: baseNavigationUrl can be an empty string\n if (this.baseNavigationUrl === undefined || !this.model?.mediatype)\n return nothing;\n\n // Need special handling for certain mediatypes that don't have a top-level collection page\n switch (this.model.mediatype) {\n case 'collection':\n return `${this.baseNavigationUrl}/search?query=mediatype:collection&sort=-downloads`;\n case 'account':\n return nothing;\n default:\n return this.displayValueProvider.itemPageUrl(\n this.model.mediatype,\n true,\n );\n }\n }\n\n protected updated(changed: PropertyValues): void {\n if (changed.has('model') || changed.has('collectionTitles')) {\n this.buildCollectionLinks();\n }\n }\n\n private async buildCollectionLinks() {\n if (!this.model?.collections || this.model.collections.length === 0) {\n return;\n }\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 newCollectionLinks: (TemplateResult | typeof nothing)[] = [];\n for (const collection of this.model.collections) {\n // Don't include favorites or collections that are meant to be suppressed\n if (\n !suppressedCollections[collection] &&\n !collection.startsWith('fav-')\n ) {\n newCollectionLinks.push(\n this.detailsLink(\n collection,\n this.collectionTitles?.get(collection) ?? collection,\n true,\n ),\n );\n }\n }\n this.collectionLinks = newCollectionLinks;\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.effectiveSort?.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 /**\n * Returns the active sort param if one is set, or the default sort param otherwise.\n */\n private get effectiveSort(): SortParam | null {\n return this.sortParam ?? this.defaultSortParam;\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(): 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 div a:link {\n color: var(--ia-theme-link-color, #4b64ff);\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 display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 3;\n overflow: hidden;\n overflow-wrap: anywhere;\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 * Safari doesn't always respect the line-clamping rules above,\n * so we add this to ensure these fields still get truncated\n */\n max-height: 60px;\n }\n\n #collections {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 3;\n overflow: hidden;\n overflow-wrap: anywhere;\n }\n\n #collections > a {\n display: inline-block;\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 /*\n * If the container becomes very tiny, don't let the thumbnail side take\n * up too much space. Shouldn't make a difference on ordinary viewport sizes.\n */\n #list-line-left {\n max-width: 25%;\n\n display: flex;\n flex-direction: column;\n row-gap: 5px;\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 column-gap: 10px;\n }\n\n /*\n * With the exception of the title line, allow these to wrap if\n * the space becomes too small to accommodate them together.\n *\n * The title line is excluded because it contains the mediatype icon\n * which we don't want to wrap.\n */\n #item-line,\n #dates-line,\n #views-line {\n flex-wrap: wrap;\n }\n\n .capture-dates {\n margin: 0;\n padding: 0;\n list-style-type: none;\n }\n\n .capture-dates a:link {\n text-decoration: none;\n color: var(--ia-theme-link-color, #4b64ff);\n }\n .capture-dates a:hover {\n text-decoration: underline;\n }\n `;\n }\n}\n"]}
@@ -30,6 +30,7 @@ let TileDispatcher = TileDispatcher_1 = class TileDispatcher extends BaseTileCom
30
30
  * - mobileBreakpoint?: number;
31
31
  * - loggedIn = false;
32
32
  * - suppressTileBlurring = false;
33
+ * - useLocalTime = false;
33
34
  */
34
35
  super(...arguments);
35
36
  this.isManageView = false;
@@ -44,13 +45,13 @@ let TileDispatcher = TileDispatcher_1 = class TileDispatcher extends BaseTileCom
44
45
  var _a, _b;
45
46
  const isGridMode = this.tileDisplayMode === 'grid';
46
47
  const hoverPaneTemplate = (_b = (_a = this.hoverPaneController) === null || _a === void 0 ? void 0 : _a.getTemplate()) !== null && _b !== void 0 ? _b : nothing;
47
- return html `
48
- <div id="container" class=${isGridMode ? 'hoverable' : nothing}>
48
+ return html `
49
+ <div id="container" class=${isGridMode ? 'hoverable' : nothing}>
49
50
  ${this.tileDisplayMode === 'list-header'
50
51
  ? this.headerTemplate
51
- : this.tileTemplate}
52
- ${this.manageCheckTemplate} ${hoverPaneTemplate}
53
- </div>
52
+ : this.tileTemplate}
53
+ ${this.manageCheckTemplate} ${hoverPaneTemplate}
54
+ </div>
54
55
  `;
55
56
  }
56
57
  firstUpdated() {
@@ -63,37 +64,37 @@ let TileDispatcher = TileDispatcher_1 = class TileDispatcher extends BaseTileCom
63
64
  }
64
65
  get headerTemplate() {
65
66
  const { currentWidth, sortParam, defaultSortParam, mobileBreakpoint } = this;
66
- return html `
67
- <tile-list-compact-header
68
- class="header"
69
- .currentWidth=${currentWidth}
70
- .sortParam=${sortParam !== null && sortParam !== void 0 ? sortParam : defaultSortParam}
71
- .mobileBreakpoint=${mobileBreakpoint}
72
- >
73
- </tile-list-compact-header>
67
+ return html `
68
+ <tile-list-compact-header
69
+ class="header"
70
+ .currentWidth=${currentWidth}
71
+ .sortParam=${sortParam !== null && sortParam !== void 0 ? sortParam : defaultSortParam}
72
+ .mobileBreakpoint=${mobileBreakpoint}
73
+ >
74
+ </tile-list-compact-header>
74
75
  `;
75
76
  }
76
77
  get tileTemplate() {
77
- return html `
78
+ return html `
78
79
  ${this.tileDisplayMode === 'list-detail'
79
80
  ? this.tile
80
- : this.linkTileTemplate}
81
+ : this.linkTileTemplate}
81
82
  `;
82
83
  }
83
84
  get linkTileTemplate() {
84
85
  var _a, _b, _c;
85
- return html `
86
- <a
87
- href=${this.linkTileHref}
88
- aria-label=${(_b = (_a = this.model) === null || _a === void 0 ? void 0 : _a.title) !== null && _b !== void 0 ? _b : 'Untitled item'}
86
+ return html `
87
+ <a
88
+ href=${this.linkTileHref}
89
+ aria-label=${(_b = (_a = this.model) === null || _a === void 0 ? void 0 : _a.title) !== null && _b !== void 0 ? _b : 'Untitled item'}
89
90
  title=${this.shouldPrepareHoverPane
90
91
  ? nothing // Don't show title tooltips when we have the tile info popups
91
- : ifDefined((_c = this.model) === null || _c === void 0 ? void 0 : _c.title)}
92
- @click=${this.handleLinkClicked}
93
- @contextmenu=${this.handleLinkContextMenu}
94
- >
95
- ${this.tile}
96
- </a>
92
+ : ifDefined((_c = this.model) === null || _c === void 0 ? void 0 : _c.title)}
93
+ @click=${this.handleLinkClicked}
94
+ @contextmenu=${this.handleLinkContextMenu}
95
+ >
96
+ ${this.tile}
97
+ </a>
97
98
  `;
98
99
  }
99
100
  get linkTileHref() {
@@ -111,15 +112,15 @@ let TileDispatcher = TileDispatcher_1 = class TileDispatcher extends BaseTileCom
111
112
  var _a;
112
113
  if (!this.isManageView || this.tileDisplayMode !== 'grid')
113
114
  return nothing;
114
- return html `
115
- <div class="manage-check">
116
- <input
117
- type="checkbox"
118
- title=${this.manageCheckTitle}
119
- .checked=${(_a = this.model) === null || _a === void 0 ? void 0 : _a.checked}
120
- @change=${this.handleLinkClicked}
121
- />
122
- </div>
115
+ return html `
116
+ <div class="manage-check">
117
+ <input
118
+ type="checkbox"
119
+ title=${this.manageCheckTitle}
120
+ .checked=${(_a = this.model) === null || _a === void 0 ? void 0 : _a.checked}
121
+ @change=${this.handleLinkClicked}
122
+ />
123
+ </div>
123
124
  `;
124
125
  }
125
126
  /**
@@ -211,189 +212,192 @@ let TileDispatcher = TileDispatcher_1 = class TileDispatcher extends BaseTileCom
211
212
  case 'grid':
212
213
  switch (model.mediatype) {
213
214
  case 'collection':
214
- return html `<collection-tile
215
- .model=${model}
216
- .collectionPagePath=${collectionPagePath}
217
- .baseImageUrl=${this.baseImageUrl}
218
- .currentWidth=${currentWidth}
219
- .currentHeight=${currentHeight}
220
- .creatorFilter=${creatorFilter}
221
- .suppressBlurring=${this.suppressBlurring}
222
- .isManageView=${this.isManageView}
223
- ?showInfoButton=${!this.isHoverEnabled}
224
- @infoButtonPressed=${this.tileInfoButtonPressed}
225
- >
215
+ return html `<collection-tile
216
+ .model=${model}
217
+ .collectionPagePath=${collectionPagePath}
218
+ .baseImageUrl=${this.baseImageUrl}
219
+ .currentWidth=${currentWidth}
220
+ .currentHeight=${currentHeight}
221
+ .creatorFilter=${creatorFilter}
222
+ .suppressBlurring=${this.suppressBlurring}
223
+ .isManageView=${this.isManageView}
224
+ ?showInfoButton=${!this.isHoverEnabled}
225
+ @infoButtonPressed=${this.tileInfoButtonPressed}
226
+ >
226
227
  </collection-tile>`;
227
228
  case 'account':
228
- return html `<account-tile
229
- .model=${model}
230
- .collectionPagePath=${collectionPagePath}
231
- .baseImageUrl=${this.baseImageUrl}
232
- .currentWidth=${currentWidth}
233
- .currentHeight=${currentHeight}
234
- .creatorFilter=${creatorFilter}
235
- .suppressBlurring=${this.suppressBlurring}
236
- .isManageView=${this.isManageView}
237
- ?showInfoButton=${!this.isHoverEnabled}
238
- @infoButtonPressed=${this.tileInfoButtonPressed}
239
- >
229
+ return html `<account-tile
230
+ .model=${model}
231
+ .collectionPagePath=${collectionPagePath}
232
+ .baseImageUrl=${this.baseImageUrl}
233
+ .currentWidth=${currentWidth}
234
+ .currentHeight=${currentHeight}
235
+ .creatorFilter=${creatorFilter}
236
+ .suppressBlurring=${this.suppressBlurring}
237
+ .isManageView=${this.isManageView}
238
+ ?showInfoButton=${!this.isHoverEnabled}
239
+ @infoButtonPressed=${this.tileInfoButtonPressed}
240
+ >
240
241
  </account-tile>`;
241
242
  case 'search':
242
- return html `<search-tile
243
- .model=${model}
244
- .collectionPagePath=${collectionPagePath}
245
- .baseImageUrl=${this.baseImageUrl}
246
- .currentWidth=${currentWidth}
247
- .currentHeight=${currentHeight}
248
- .creatorFilter=${creatorFilter}
249
- .suppressBlurring=${this.suppressBlurring}
250
- .isManageView=${this.isManageView}
251
- ?showInfoButton=${false}
252
- @infoButtonPressed=${this.tileInfoButtonPressed}
253
- >
243
+ return html `<search-tile
244
+ .model=${model}
245
+ .collectionPagePath=${collectionPagePath}
246
+ .baseImageUrl=${this.baseImageUrl}
247
+ .currentWidth=${currentWidth}
248
+ .currentHeight=${currentHeight}
249
+ .creatorFilter=${creatorFilter}
250
+ .suppressBlurring=${this.suppressBlurring}
251
+ .isManageView=${this.isManageView}
252
+ ?showInfoButton=${false}
253
+ @infoButtonPressed=${this.tileInfoButtonPressed}
254
+ >
254
255
  </search-tile>`;
255
256
  default:
256
- return html `<item-tile
257
- .model=${model}
258
- .collectionPagePath=${collectionPagePath}
259
- .currentWidth=${this.currentWidth}
260
- .currentHeight=${this.currentHeight}
261
- .baseImageUrl=${this.baseImageUrl}
262
- .sortParam=${sortParam}
263
- .defaultSortParam=${defaultSortParam}
264
- .creatorFilter=${creatorFilter}
265
- .loggedIn=${this.loggedIn}
266
- .suppressBlurring=${this.suppressBlurring}
267
- .isManageView=${this.isManageView}
268
- .simpleLayoutType=${this.simpleLayoutType}
269
- ?showTvClips=${this.showTvClips}
270
- ?showInfoButton=${!this.isHoverEnabled}
271
- @infoButtonPressed=${this.tileInfoButtonPressed}
272
- >
257
+ return html `<item-tile
258
+ .model=${model}
259
+ .collectionPagePath=${collectionPagePath}
260
+ .currentWidth=${this.currentWidth}
261
+ .currentHeight=${this.currentHeight}
262
+ .baseImageUrl=${this.baseImageUrl}
263
+ .sortParam=${sortParam}
264
+ .defaultSortParam=${defaultSortParam}
265
+ .creatorFilter=${creatorFilter}
266
+ .loggedIn=${this.loggedIn}
267
+ .suppressBlurring=${this.suppressBlurring}
268
+ .isManageView=${this.isManageView}
269
+ .simpleLayoutType=${this.simpleLayoutType}
270
+ ?showTvClips=${this.showTvClips}
271
+ ?showInfoButton=${!this.isHoverEnabled}
272
+ ?useLocalTime=${this.useLocalTime}
273
+ @infoButtonPressed=${this.tileInfoButtonPressed}
274
+ >
273
275
  </item-tile>`;
274
276
  }
275
277
  case 'list-compact':
276
- return html `<tile-list-compact
277
- .model=${model}
278
- .collectionPagePath=${collectionPagePath}
279
- .currentWidth=${currentWidth}
280
- .currentHeight=${currentHeight}
281
- .baseNavigationUrl=${baseNavigationUrl}
282
- .sortParam=${sortParam}
283
- .defaultSortParam=${defaultSortParam}
284
- .creatorFilter=${creatorFilter}
285
- .mobileBreakpoint=${mobileBreakpoint}
286
- .baseImageUrl=${this.baseImageUrl}
287
- .loggedIn=${this.loggedIn}
288
- .suppressBlurring=${this.suppressBlurring}
289
- >
278
+ return html `<tile-list-compact
279
+ .model=${model}
280
+ .collectionPagePath=${collectionPagePath}
281
+ .currentWidth=${currentWidth}
282
+ .currentHeight=${currentHeight}
283
+ .baseNavigationUrl=${baseNavigationUrl}
284
+ .sortParam=${sortParam}
285
+ .defaultSortParam=${defaultSortParam}
286
+ .creatorFilter=${creatorFilter}
287
+ .mobileBreakpoint=${mobileBreakpoint}
288
+ .baseImageUrl=${this.baseImageUrl}
289
+ .loggedIn=${this.loggedIn}
290
+ .suppressBlurring=${this.suppressBlurring}
291
+ ?useLocalTime=${this.useLocalTime}
292
+ >
290
293
  </tile-list-compact>`;
291
294
  case 'list-detail':
292
- return html `<tile-list
293
- .model=${model}
294
- .collectionPagePath=${collectionPagePath}
295
- .collectionTitles=${this.collectionTitles}
296
- .currentWidth=${currentWidth}
297
- .currentHeight=${currentHeight}
298
- .baseNavigationUrl=${baseNavigationUrl}
299
- .sortParam=${sortParam}
300
- .defaultSortParam=${defaultSortParam}
301
- .creatorFilter=${creatorFilter}
302
- .mobileBreakpoint=${mobileBreakpoint}
303
- .baseImageUrl=${this.baseImageUrl}
304
- .loggedIn=${this.loggedIn}
305
- .suppressBlurring=${this.suppressBlurring}
306
- >
295
+ return html `<tile-list
296
+ .model=${model}
297
+ .collectionPagePath=${collectionPagePath}
298
+ .collectionTitles=${this.collectionTitles}
299
+ .currentWidth=${currentWidth}
300
+ .currentHeight=${currentHeight}
301
+ .baseNavigationUrl=${baseNavigationUrl}
302
+ .sortParam=${sortParam}
303
+ .defaultSortParam=${defaultSortParam}
304
+ .creatorFilter=${creatorFilter}
305
+ .mobileBreakpoint=${mobileBreakpoint}
306
+ .baseImageUrl=${this.baseImageUrl}
307
+ .loggedIn=${this.loggedIn}
308
+ .suppressBlurring=${this.suppressBlurring}
309
+ ?useLocalTime=${this.useLocalTime}
310
+ >
307
311
  </tile-list>`;
308
312
  default:
309
313
  return nothing;
310
314
  }
311
315
  }
312
316
  static get styles() {
313
- return css `
314
- :host {
315
- display: block;
316
- height: 100%;
317
- }
318
-
319
- collection-tile {
320
- --tileBorderColor: #555555;
321
- --tileBackgroundColor: #666666;
322
- --imageBlockBackgroundColor: #666666;
323
- }
324
-
325
- account-tile {
326
- --tileBorderColor: #dddddd;
327
- --imageBlockBackgroundColor: #fcf5e6;
328
- }
329
-
330
- item-tile {
331
- --tileBorderColor: #dddddd;
332
- --imageBlockBackgroundColor: #f1f1f4;
333
- }
334
-
335
- search-tile {
336
- --tileBorderColor: #555555;
337
- --tileBackgroundColor: #666666;
338
- --imageBlockBackgroundColor: #666666;
339
- --iconFillColor: #2c2c2c;
340
- }
341
-
342
- #container {
343
- position: relative;
344
- height: 100%;
345
- border-radius: 4px;
346
- }
347
-
348
- #container.hoverable:hover {
349
- box-shadow: var(--tileHoverBoxShadow, 0 0 6px 2px rgba(8, 8, 32, 0.8));
350
- transition: box-shadow 0.1s ease;
351
- }
352
-
353
- a {
354
- display: block;
355
- height: 100%;
356
- color: unset;
357
- text-decoration: none;
358
- transition: transform 0.05s ease;
359
- }
360
-
361
- a :first-child {
362
- display: block;
363
- height: 100%;
364
- }
365
-
366
- .manage-check {
367
- position: absolute;
368
- right: 0;
369
- top: 0;
370
- border: 5px solid #2c2c2c;
371
- border-radius: 3px;
372
- background-color: #2c2c2c;
373
- z-index: 1;
374
- }
375
-
376
- .manage-check > input[type='checkbox'] {
377
- display: block;
378
- margin: 0;
379
- }
380
-
381
- #touch-backdrop {
382
- position: fixed;
383
- width: 100vw;
384
- height: 100vh;
385
- top: 0;
386
- left: 0;
387
- z-index: 2;
388
- background: transparent;
389
- }
390
-
391
- tile-hover-pane {
392
- position: absolute;
393
- top: 0;
394
- left: -9999px;
395
- z-index: 2;
396
- }
317
+ return css `
318
+ :host {
319
+ display: block;
320
+ height: 100%;
321
+ }
322
+
323
+ collection-tile {
324
+ --tileBorderColor: #555555;
325
+ --tileBackgroundColor: #666666;
326
+ --imageBlockBackgroundColor: #666666;
327
+ }
328
+
329
+ account-tile {
330
+ --tileBorderColor: #dddddd;
331
+ --imageBlockBackgroundColor: #fcf5e6;
332
+ }
333
+
334
+ item-tile {
335
+ --tileBorderColor: #dddddd;
336
+ --imageBlockBackgroundColor: #f1f1f4;
337
+ }
338
+
339
+ search-tile {
340
+ --tileBorderColor: #555555;
341
+ --tileBackgroundColor: #666666;
342
+ --imageBlockBackgroundColor: #666666;
343
+ --iconFillColor: #2c2c2c;
344
+ }
345
+
346
+ #container {
347
+ position: relative;
348
+ height: 100%;
349
+ border-radius: 4px;
350
+ }
351
+
352
+ #container.hoverable:hover {
353
+ box-shadow: var(--tileHoverBoxShadow, 0 0 6px 2px rgba(8, 8, 32, 0.8));
354
+ transition: box-shadow 0.1s ease;
355
+ }
356
+
357
+ a {
358
+ display: block;
359
+ height: 100%;
360
+ color: unset;
361
+ text-decoration: none;
362
+ transition: transform 0.05s ease;
363
+ }
364
+
365
+ a :first-child {
366
+ display: block;
367
+ height: 100%;
368
+ }
369
+
370
+ .manage-check {
371
+ position: absolute;
372
+ right: 0;
373
+ top: 0;
374
+ border: 5px solid #2c2c2c;
375
+ border-radius: 3px;
376
+ background-color: #2c2c2c;
377
+ z-index: 1;
378
+ }
379
+
380
+ .manage-check > input[type='checkbox'] {
381
+ display: block;
382
+ margin: 0;
383
+ }
384
+
385
+ #touch-backdrop {
386
+ position: fixed;
387
+ width: 100vw;
388
+ height: 100vh;
389
+ top: 0;
390
+ left: 0;
391
+ z-index: 2;
392
+ background: transparent;
393
+ }
394
+
395
+ tile-hover-pane {
396
+ position: absolute;
397
+ top: 0;
398
+ left: -9999px;
399
+ z-index: 2;
400
+ }
397
401
  `;
398
402
  }
399
403
  };