@internetarchive/collection-browser 4.4.0 → 4.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.js.map +1 -1
  3. package/dist/src/app-root.d.ts +8 -0
  4. package/dist/src/app-root.js +26 -0
  5. package/dist/src/app-root.js.map +1 -1
  6. package/dist/src/collection-browser.d.ts +8 -0
  7. package/dist/src/collection-browser.js +19 -1
  8. package/dist/src/collection-browser.js.map +1 -1
  9. package/dist/src/collection-facets/facet-row.d.ts +6 -0
  10. package/dist/src/collection-facets/facet-row.js +158 -140
  11. package/dist/src/collection-facets/facet-row.js.map +1 -1
  12. package/dist/src/collection-facets/facets-template.js +25 -23
  13. package/dist/src/collection-facets/facets-template.js.map +1 -1
  14. package/dist/src/data-source/collection-browser-data-source.js.map +1 -1
  15. package/dist/src/styles/tile-action-styles.d.ts +14 -0
  16. package/dist/src/styles/tile-action-styles.js +59 -0
  17. package/dist/src/styles/tile-action-styles.js.map +1 -0
  18. package/dist/src/tiles/base-tile-component.d.ts +17 -1
  19. package/dist/src/tiles/base-tile-component.js +50 -1
  20. package/dist/src/tiles/base-tile-component.js.map +1 -1
  21. package/dist/src/tiles/grid/item-tile.js +139 -138
  22. package/dist/src/tiles/grid/item-tile.js.map +1 -1
  23. package/dist/src/tiles/item-image.js +28 -28
  24. package/dist/src/tiles/item-image.js.map +1 -1
  25. package/dist/src/tiles/list/tile-list-compact-header.js +71 -46
  26. package/dist/src/tiles/list/tile-list-compact-header.js.map +1 -1
  27. package/dist/src/tiles/list/tile-list-compact.d.ts +1 -1
  28. package/dist/src/tiles/list/tile-list-compact.js +138 -100
  29. package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
  30. package/dist/src/tiles/list/tile-list.d.ts +1 -1
  31. package/dist/src/tiles/list/tile-list.js +316 -298
  32. package/dist/src/tiles/list/tile-list.js.map +1 -1
  33. package/dist/src/tiles/models.d.ts +11 -0
  34. package/dist/src/tiles/models.js.map +1 -1
  35. package/dist/src/tiles/tile-dispatcher.d.ts +14 -0
  36. package/dist/src/tiles/tile-dispatcher.js +319 -216
  37. package/dist/src/tiles/tile-dispatcher.js.map +1 -1
  38. package/dist/src/tiles/tile-display-value-provider.js +2 -1
  39. package/dist/src/tiles/tile-display-value-provider.js.map +1 -1
  40. package/dist/test/collection-facets/facet-row.test.js +55 -23
  41. package/dist/test/collection-facets/facet-row.test.js.map +1 -1
  42. package/dist/test/tiles/grid/item-tile.test.js +79 -79
  43. package/dist/test/tiles/grid/item-tile.test.js.map +1 -1
  44. package/dist/test/tiles/list/tile-list.test.js +136 -136
  45. package/dist/test/tiles/list/tile-list.test.js.map +1 -1
  46. package/dist/test/tiles/tile-dispatcher.test.js +101 -87
  47. package/dist/test/tiles/tile-dispatcher.test.js.map +1 -1
  48. package/index.ts +29 -28
  49. package/package.json +2 -2
  50. package/src/app-root.ts +30 -0
  51. package/src/collection-browser.ts +16 -1
  52. package/src/collection-facets/facet-row.ts +309 -299
  53. package/src/collection-facets/facets-template.ts +85 -83
  54. package/src/data-source/collection-browser-data-source.ts +1465 -1465
  55. package/src/styles/tile-action-styles.ts +59 -0
  56. package/src/tiles/base-tile-component.ts +124 -65
  57. package/src/tiles/grid/item-tile.ts +347 -346
  58. package/src/tiles/item-image.ts +214 -214
  59. package/src/tiles/list/tile-list-compact-header.ts +112 -86
  60. package/src/tiles/list/tile-list-compact.ts +278 -239
  61. package/src/tiles/list/tile-list.ts +718 -700
  62. package/src/tiles/models.ts +21 -8
  63. package/src/tiles/tile-dispatcher.ts +637 -527
  64. package/src/tiles/tile-display-value-provider.ts +133 -134
  65. package/test/collection-facets/facet-row.test.ts +421 -375
  66. package/test/tiles/grid/item-tile.test.ts +520 -520
  67. package/test/tiles/list/tile-list.test.ts +576 -576
  68. package/test/tiles/tile-dispatcher.test.ts +320 -300
@@ -1 +1 @@
1
- {"version":3,"file":"tile-list.test.js","sourceRoot":"","sources":["../../../../test/tiles/list/tile-list.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit';\nimport type { TileList } from '../../../src/tiles/list/tile-list';\n\nimport '../../../src/tiles/list/tile-list';\nimport type { TileModel } from '../../../src/models';\n\ndescribe('List Tile', () => {\n it('should render initial component', async () => {\n const el = await fixture<TileList>(\n html`<tile-list .model=${{}}></tile-list>`,\n );\n\n const listContainer = el.shadowRoot?.querySelector('#list-line');\n const itemTitle = el.shadowRoot?.querySelector('#title');\n const imageBlock = el.shadowRoot?.querySelector('image-block');\n\n expect(listContainer).to.exist;\n expect(itemTitle).to.exist;\n expect(imageBlock).to.exist;\n });\n\n it('should render the mobile template if below mobile breakpoint', async () => {\n const el = await fixture<TileList>(html`\n <tile-list .mobileBreakpoint=${500} .currentWidth=${400}> </tile-list>\n `);\n\n const listContainer = el.shadowRoot?.getElementById('list-line');\n const topLine = el.shadowRoot?.getElementById('list-line-top');\n const bottomLine = el.shadowRoot?.getElementById('list-line-bottom');\n\n expect(listContainer).to.exist;\n expect(listContainer?.classList.contains('mobile')).to.be.true;\n expect(topLine).to.exist;\n expect(bottomLine).to.exist;\n });\n\n it('should render title link with model href if provided', async () => {\n const el = await fixture<TileList>(html`\n <tile-list\n .baseNavigationUrl=${''}\n .model=${{ title: 'foo', href: '/foo/bar' }}\n ></tile-list>\n `);\n\n const title = el.shadowRoot?.querySelector('#title > a');\n\n expect(title).to.exist;\n expect(title?.getAttribute('href')).to.equal('/foo/bar');\n });\n\n it('should add title to image link if provided', async () => {\n const el = await fixture<TileList>(html`\n <tile-list\n .baseNavigationUrl=${''}\n .model=${{ title: 'foo', href: '/foo/bar' }}\n ></tile-list>\n `);\n\n const imageLink = el.shadowRoot?.querySelector('#image-link');\n\n expect(imageLink).to.exist;\n expect(imageLink?.getAttribute('title')).to.equal('View foo');\n });\n\n it('should render with creator element but not dates', async () => {\n const el = await fixture<TileList>(html`\n <tile-list .model=${{ creators: ['someone'] }}></tile-list>\n `);\n\n const creator = el.shadowRoot?.querySelector('#creator');\n const datesLine = el.shadowRoot?.querySelector('#dates-line');\n\n expect(creator).to.exist;\n expect(datesLine?.children.length).to.equal(0);\n });\n\n it('should render with snippet block when it has snippets', async () => {\n const el = await fixture<TileList>(html`\n <tile-list .model=${{ snippets: ['some {{{snippet}}} text'] }}>\n </tile-list>\n `);\n\n const snippetBlock = el.shadowRoot?.querySelector('text-snippet-block');\n\n expect(snippetBlock).to.exist;\n });\n\n it('should not render snippet block when no snippets are present', async () => {\n const el = await fixture<TileList>(html`<tile-list></tile-list>`);\n\n const snippetBlock = el.shadowRoot?.querySelector('text-snippet-block');\n\n expect(snippetBlock).to.not.exist;\n });\n\n it('should not render suppressed collections', async () => {\n const el = await fixture<TileList>(html`\n <tile-list\n .model=${{ collections: ['deemphasize', 'community', 'foo'] }}\n .baseNavigationUrl=${'base'}\n >\n </tile-list>\n `);\n\n const collectionsRow = el.shadowRoot?.getElementById('collections');\n expect(collectionsRow).to.exist;\n\n const collectionLinks = collectionsRow?.querySelectorAll('a[href]');\n expect(collectionLinks?.length).to.equal(1);\n expect(collectionLinks?.item(0).getAttribute('href')).to.equal(\n 'base/details/foo',\n );\n });\n\n it('should not render fav- collections', async () => {\n const el = await fixture<TileList>(html`\n <tile-list\n .model=${{ collections: ['fav-foo', 'bar'] }}\n .baseNavigationUrl=${'base'}\n >\n </tile-list>\n `);\n\n const collectionsRow = el.shadowRoot?.getElementById('collections');\n expect(collectionsRow).to.exist;\n\n const collectionLinks = collectionsRow?.querySelectorAll('a[href]');\n expect(collectionLinks?.length).to.equal(1);\n expect(collectionLinks?.item(0).getAttribute('href')).to.equal(\n 'base/details/bar',\n );\n });\n\n it('should render weekly views when sorting by week', async () => {\n const el = await fixture<TileList>(html`\n <tile-list\n .model=${{ viewCount: 50, weeklyViewCount: 10 }}\n .sortParam=${{ field: 'week', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n const viewsRow = el.shadowRoot?.getElementById('views-line');\n expect(viewsRow).to.exist;\n expect(viewsRow?.textContent?.trim()).to.equal('Weekly views: 10');\n });\n\n it('should render all-time views when sorting by non-week field', async () => {\n const el = await fixture<TileList>(html`\n <tile-list\n .model=${{ viewCount: 50, weeklyViewCount: 10 }}\n .sortParam=${{ field: 'downloads', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n const viewsRow = el.shadowRoot?.getElementById('views-line');\n expect(viewsRow).to.exist;\n expect(viewsRow?.textContent?.trim()).to.equal('All-time views: 50');\n });\n\n it('should render all-time views with no sort param', async () => {\n const el = await fixture<TileList>(html`\n <tile-list .model=${{ viewCount: 50, weeklyViewCount: 10 }}> </tile-list>\n `);\n\n const viewsRow = el.shadowRoot?.getElementById('views-line');\n expect(viewsRow).to.exist;\n expect(viewsRow?.textContent?.trim()).to.equal('All-time views: 50');\n });\n\n it('should render published date when sorting by it', async () => {\n const model: Partial<TileModel> = {\n dateAdded: new Date(2010, 0, 2),\n dateArchived: new Date(2011, 0, 2),\n datePublished: new Date(2012, 0, 2),\n dateReviewed: new Date(2013, 0, 2),\n };\n\n const el = await fixture<TileList>(html`\n <tile-list\n .model=${model}\n .sortParam=${{ field: 'date', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n const dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n expect(dateRow?.textContent?.trim()).to.contain('Published: Jan 02, 2012');\n });\n\n it('should render added date when sorting by it', async () => {\n const model: Partial<TileModel> = {\n dateAdded: new Date(2010, 0, 2),\n dateArchived: new Date(2011, 0, 2),\n datePublished: new Date(2012, 0, 2),\n dateReviewed: new Date(2013, 0, 2),\n };\n\n const el = await fixture<TileList>(html`\n <tile-list\n .model=${model}\n .sortParam=${{ field: 'addeddate', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n const dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n expect(dateRow?.textContent?.trim()).to.contain('Added: Jan 02, 2010');\n });\n\n it('should render archived date when sorting by it', async () => {\n const model: Partial<TileModel> = {\n dateAdded: new Date(2010, 0, 2),\n dateArchived: new Date(2011, 0, 2),\n datePublished: new Date(2012, 0, 2),\n dateReviewed: new Date(2013, 0, 2),\n };\n\n const el = await fixture<TileList>(html`\n <tile-list\n .model=${model}\n .sortParam=${{ field: 'publicdate', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n const dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n expect(dateRow?.textContent?.trim()).to.contain('Archived: Jan 02, 2011');\n });\n\n it('should render reviewed date when sorting by it', async () => {\n const model: Partial<TileModel> = {\n dateAdded: new Date(2010, 0, 2),\n dateArchived: new Date(2011, 0, 2),\n datePublished: new Date(2012, 0, 2),\n dateReviewed: new Date(2013, 0, 2),\n };\n\n const el = await fixture<TileList>(html`\n <tile-list\n .model=${model}\n .sortParam=${{ field: 'reviewdate', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n const dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n expect(dateRow?.textContent?.trim()).to.contain('Reviewed: Jan 02, 2013');\n });\n\n it('should only show the year for a date published of Jan 1 at midnight UTC', async () => {\n const model: Partial<TileModel> = {\n datePublished: new Date('2012-01-01T00:00:00Z'),\n };\n\n const el = await fixture<TileList>(html`\n <tile-list\n .model=${model}\n .sortParam=${{ field: 'date', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n const dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n expect(dateRow?.textContent?.trim()).to.contain('Published: 2012');\n });\n\n it('should show full date added/archived/reviewed, even on Jan 1 at midnight UTC', async () => {\n const model: Partial<TileModel> = {\n dateAdded: new Date(2010, 0, 1, 0, 0, 0, 0),\n dateArchived: new Date(2011, 0, 1, 0, 0, 0, 0),\n datePublished: new Date(2012, 0, 1, 0, 0, 0, 0),\n dateReviewed: new Date(2013, 0, 1, 0, 0, 0, 0),\n };\n\n const el = await fixture<TileList>(html`\n <tile-list\n .model=${model}\n .sortParam=${{ field: 'addeddate', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n let dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n expect(dateRow?.textContent?.trim()).to.contain('Added: Jan 01, 2010');\n\n el.sortParam = { field: 'publicdate', direction: 'desc' };\n await el.updateComplete;\n dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n expect(dateRow?.textContent?.trim()).to.contain('Archived: Jan 01, 2011');\n\n el.sortParam = { field: 'reviewdate', direction: 'desc' };\n await el.updateComplete;\n dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n expect(dateRow?.textContent?.trim()).to.contain('Reviewed: Jan 01, 2013');\n });\n\n it('should display dates in UTC time zone by default', async () => {\n const model: Partial<TileModel> = {\n datePublished: new Date('2012-02-15T00:00:00Z'),\n };\n\n const el = await fixture<TileList>(html`\n <tile-list\n .model=${model}\n .sortParam=${{ field: 'date', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n const dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n expect(dateRow?.textContent?.trim()).to.contain('Published: Feb 15, 2012');\n });\n\n it('should display dates in local time when useLocalTime option is true', async () => {\n // Expected behavior depends on the time zone offset where the testing occurs\n const offset = new Date().getTimezoneOffset();\n let datePublished, expected;\n if (offset > 0) {\n // Positive local time zone offsets have earlier local dates than UTC\n datePublished = new Date('2012-02-15T00:00:00Z');\n expected = 'Published: Feb 14, 2012';\n } else if (offset < 0) {\n // Negative local time zone offsets have later local dates than UTC\n datePublished = new Date('2012-02-15T23:59:59Z');\n expected = 'Published: Feb 16, 2012';\n } else {\n // Local time may just be UTC itself\n datePublished = new Date('2012-02-15T00:00:00Z');\n expected = 'Published: Feb 15, 2012';\n }\n\n const model: Partial<TileModel> = {\n datePublished,\n };\n\n const el = await fixture<TileList>(html`\n <tile-list\n useLocalTime\n .model=${model}\n .sortParam=${{ field: 'date', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n const dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n\n expect(dateRow?.textContent?.trim()).to.contain(expected);\n });\n\n it('should render links to /search pages (not search.php) for subject, creator, and source', async () => {\n const model: Partial<TileModel> = {\n subjects: ['foo'],\n creators: ['bar'],\n source: 'baz',\n };\n\n const el = await fixture<TileList>(html`\n <tile-list .model=${model}></tile-list>\n `);\n\n const subjectLink = el.shadowRoot?.querySelector('#topics a[href]');\n expect(subjectLink).to.exist;\n expect(subjectLink?.getAttribute('href')).to.equal(\n `/search?query=${encodeURIComponent('subject:\"foo\"')}`,\n );\n\n const creatorLink = el.shadowRoot?.querySelector('#creator a[href]');\n expect(creatorLink).to.exist;\n expect(creatorLink?.getAttribute('href')).to.equal(\n `/search?query=${encodeURIComponent('creator:\"bar\"')}`,\n );\n\n const sourceLink = el.shadowRoot?.querySelector('#source a[href]');\n expect(sourceLink).to.exist;\n expect(sourceLink?.getAttribute('href')).to.equal(\n `/search?query=${encodeURIComponent('source:\"baz\"')}`,\n );\n });\n\n it('should render multi-line descriptions with spaces b/w lines', async () => {\n const el = await fixture<TileList>(html`\n <tile-list .model=${{ description: 'line1\\nline2' }}> </tile-list>\n `);\n\n const descriptionBlock = el.shadowRoot?.getElementById('description');\n expect(descriptionBlock).to.exist;\n expect(descriptionBlock?.textContent?.trim()).to.equal('line1 line2'); // line break replaced by space\n });\n\n it('should render mediatype icon as link to corresponding mediatype collection details', async () => {\n const model: Partial<TileModel> = {\n mediatype: 'texts',\n };\n\n const el = await fixture<TileList>(html`\n <tile-list\n .baseNavigationUrl=${'https://archive.org'}\n .model=${model}\n ></tile-list>\n `);\n\n const mediatypeLink = el.shadowRoot?.querySelector('a#icon-right');\n expect(mediatypeLink).to.exist;\n expect(mediatypeLink?.getAttribute('href')).to.equal(\n `https://archive.org/details/texts`,\n );\n expect(mediatypeLink?.getAttribute('title')).to.equal('See more: texts');\n });\n\n it('should render mediatype icon as link even with empty baseNavigationUrl', async () => {\n const model: Partial<TileModel> = {\n mediatype: 'texts',\n };\n\n const el = await fixture<TileList>(html`\n <tile-list .baseNavigationUrl=${''} .model=${model}></tile-list>\n `);\n\n const mediatypeLink = el.shadowRoot?.querySelector('a#icon-right');\n expect(mediatypeLink).to.exist;\n expect(mediatypeLink?.getAttribute('href')).to.equal(`/details/texts`);\n });\n\n it('should render collection mediatype icon as link to search page', async () => {\n const model: Partial<TileModel> = {\n mediatype: 'collection',\n };\n\n const el = await fixture<TileList>(html`\n <tile-list\n .baseNavigationUrl=${'https://archive.org'}\n .model=${model}\n ></tile-list>\n `);\n\n const mediatypeLink = el.shadowRoot?.querySelector('a#icon-right');\n expect(mediatypeLink).to.exist;\n expect(mediatypeLink?.getAttribute('href')).to.equal(\n `https://archive.org/search?query=mediatype:collection&sort=-downloads`,\n );\n });\n\n it('should not render account mediatype icon as link', async () => {\n const model: Partial<TileModel> = {\n mediatype: 'account',\n };\n\n const el = await fixture<TileList>(html`\n <tile-list\n .baseNavigationUrl=${'https://archive.org'}\n .model=${model}\n ></tile-list>\n `);\n\n const mediatypeLink = el.shadowRoot?.querySelector('a#icon-right');\n expect(mediatypeLink).to.exist;\n expect(mediatypeLink?.getAttribute('href')).not.to.exist;\n });\n\n it('should render date added for accounts', async () => {\n const el = await fixture<TileList>(html`\n <tile-list\n .model=${{\n mediatype: 'account',\n dateAdded: new Date('2015-05-05T00:00:00'),\n }}\n >\n </tile-list>\n `);\n\n const creatorBlock = el.shadowRoot?.getElementById('creator');\n expect(creatorBlock).to.exist;\n expect(creatorBlock?.textContent?.trim()).to.equal('Archivist since 2015');\n });\n\n it('should render web capture date links if present', async () => {\n const captureDates = [\n new Date('2010-01-02T12:34:56Z'),\n new Date('2011-02-03T12:43:21Z'),\n ];\n\n const el = await fixture<TileList>(html`\n <tile-list\n .model=${{\n identifier: 'foo',\n title: 'https://example.com/',\n captureDates,\n }}\n ></tile-list>\n `);\n\n const captureDatesUl = el.shadowRoot?.querySelector('.capture-dates');\n expect(captureDatesUl, 'capture dates container').to.exist;\n expect(captureDatesUl?.children.length).to.equal(2);\n\n const firstDateLink = captureDatesUl?.children[0]?.querySelector('a[href]');\n expect(firstDateLink, 'first date link').to.exist;\n expect(firstDateLink?.getAttribute('href')).to.equal(\n 'https://web.archive.org/web/20100102123456/https%3A%2F%2Fexample.com%2F',\n );\n expect(firstDateLink?.textContent?.trim()).to.equal('Jan 02, 2010');\n\n const secondDateLink =\n captureDatesUl?.children[1]?.querySelector('a[href]');\n expect(secondDateLink, 'second date link').to.exist;\n expect(secondDateLink?.getAttribute('href')).to.equal(\n 'https://web.archive.org/web/20110203124321/https%3A%2F%2Fexample.com%2F',\n );\n expect(secondDateLink?.textContent?.trim()).to.equal('Feb 03, 2011');\n });\n\n it('should not render web captures if no title is present', async () => {\n const captureDates = [\n new Date('2010-01-02T12:34:56Z'),\n new Date('2011-02-03T12:43:21Z'),\n ];\n\n const el = await fixture<TileList>(html`\n <tile-list\n .model=${{\n identifier: 'foo',\n captureDates,\n }}\n ></tile-list>\n `);\n\n const captureDatesUl = el.shadowRoot?.querySelector('.capture-dates');\n expect(captureDatesUl).not.to.exist;\n });\n\n it('should render review snippet if present', async () => {\n const review = {\n title: 'Foo',\n body: 'foo bar baz',\n stars: 3,\n };\n\n const el = await fixture<TileList>(html`\n <tile-list\n .model=${{\n identifier: 'foo',\n review,\n }}\n ></tile-list>\n `);\n\n const reviewBlock = el.shadowRoot?.querySelector('review-block');\n expect(reviewBlock).to.exist;\n });\n\n it('should not render review snippet block when no review is present', async () => {\n const el = await fixture<TileList>(html`\n <tile-list\n .model=${{\n identifier: 'foo',\n }}\n ></tile-list>\n `);\n\n const reviewBlock = el.shadowRoot?.querySelector('review-block');\n expect(reviewBlock).not.to.exist;\n });\n});\n"]}
1
+ {"version":3,"file":"tile-list.test.js","sourceRoot":"","sources":["../../../../test/tiles/list/tile-list.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, fixture } from '@open-wc/testing';\r\nimport { html } from 'lit';\r\nimport type { TileList } from '../../../src/tiles/list/tile-list';\r\n\r\nimport '../../../src/tiles/list/tile-list';\r\nimport type { TileModel } from '../../../src/models';\r\n\r\ndescribe('List Tile', () => {\r\n it('should render initial component', async () => {\r\n const el = await fixture<TileList>(\r\n html`<tile-list .model=${{}}></tile-list>`,\r\n );\r\n\r\n const listContainer = el.shadowRoot?.querySelector('#list-line');\r\n const itemTitle = el.shadowRoot?.querySelector('#title');\r\n const imageBlock = el.shadowRoot?.querySelector('image-block');\r\n\r\n expect(listContainer).to.exist;\r\n expect(itemTitle).to.exist;\r\n expect(imageBlock).to.exist;\r\n });\r\n\r\n it('should render the mobile template if below mobile breakpoint', async () => {\r\n const el = await fixture<TileList>(html`\r\n <tile-list .mobileBreakpoint=${500} .currentWidth=${400}> </tile-list>\r\n `);\r\n\r\n const listContainer = el.shadowRoot?.getElementById('list-line');\r\n const topLine = el.shadowRoot?.getElementById('list-line-top');\r\n const bottomLine = el.shadowRoot?.getElementById('list-line-bottom');\r\n\r\n expect(listContainer).to.exist;\r\n expect(listContainer?.classList.contains('mobile')).to.be.true;\r\n expect(topLine).to.exist;\r\n expect(bottomLine).to.exist;\r\n });\r\n\r\n it('should render title link with model href if provided', async () => {\r\n const el = await fixture<TileList>(html`\r\n <tile-list\r\n .baseNavigationUrl=${''}\r\n .model=${{ title: 'foo', href: '/foo/bar' }}\r\n ></tile-list>\r\n `);\r\n\r\n const title = el.shadowRoot?.querySelector('#title > a');\r\n\r\n expect(title).to.exist;\r\n expect(title?.getAttribute('href')).to.equal('/foo/bar');\r\n });\r\n\r\n it('should add title to image link if provided', async () => {\r\n const el = await fixture<TileList>(html`\r\n <tile-list\r\n .baseNavigationUrl=${''}\r\n .model=${{ title: 'foo', href: '/foo/bar' }}\r\n ></tile-list>\r\n `);\r\n\r\n const imageLink = el.shadowRoot?.querySelector('#image-link');\r\n\r\n expect(imageLink).to.exist;\r\n expect(imageLink?.getAttribute('title')).to.equal('View foo');\r\n });\r\n\r\n it('should render with creator element but not dates', async () => {\r\n const el = await fixture<TileList>(html`\r\n <tile-list .model=${{ creators: ['someone'] }}></tile-list>\r\n `);\r\n\r\n const creator = el.shadowRoot?.querySelector('#creator');\r\n const datesLine = el.shadowRoot?.querySelector('#dates-line');\r\n\r\n expect(creator).to.exist;\r\n expect(datesLine?.children.length).to.equal(0);\r\n });\r\n\r\n it('should render with snippet block when it has snippets', async () => {\r\n const el = await fixture<TileList>(html`\r\n <tile-list .model=${{ snippets: ['some {{{snippet}}} text'] }}>\r\n </tile-list>\r\n `);\r\n\r\n const snippetBlock = el.shadowRoot?.querySelector('text-snippet-block');\r\n\r\n expect(snippetBlock).to.exist;\r\n });\r\n\r\n it('should not render snippet block when no snippets are present', async () => {\r\n const el = await fixture<TileList>(html`<tile-list></tile-list>`);\r\n\r\n const snippetBlock = el.shadowRoot?.querySelector('text-snippet-block');\r\n\r\n expect(snippetBlock).to.not.exist;\r\n });\r\n\r\n it('should not render suppressed collections', async () => {\r\n const el = await fixture<TileList>(html`\r\n <tile-list\r\n .model=${{ collections: ['deemphasize', 'community', 'foo'] }}\r\n .baseNavigationUrl=${'base'}\r\n >\r\n </tile-list>\r\n `);\r\n\r\n const collectionsRow = el.shadowRoot?.getElementById('collections');\r\n expect(collectionsRow).to.exist;\r\n\r\n const collectionLinks = collectionsRow?.querySelectorAll('a[href]');\r\n expect(collectionLinks?.length).to.equal(1);\r\n expect(collectionLinks?.item(0).getAttribute('href')).to.equal(\r\n 'base/details/foo',\r\n );\r\n });\r\n\r\n it('should not render fav- collections', async () => {\r\n const el = await fixture<TileList>(html`\r\n <tile-list\r\n .model=${{ collections: ['fav-foo', 'bar'] }}\r\n .baseNavigationUrl=${'base'}\r\n >\r\n </tile-list>\r\n `);\r\n\r\n const collectionsRow = el.shadowRoot?.getElementById('collections');\r\n expect(collectionsRow).to.exist;\r\n\r\n const collectionLinks = collectionsRow?.querySelectorAll('a[href]');\r\n expect(collectionLinks?.length).to.equal(1);\r\n expect(collectionLinks?.item(0).getAttribute('href')).to.equal(\r\n 'base/details/bar',\r\n );\r\n });\r\n\r\n it('should render weekly views when sorting by week', async () => {\r\n const el = await fixture<TileList>(html`\r\n <tile-list\r\n .model=${{ viewCount: 50, weeklyViewCount: 10 }}\r\n .sortParam=${{ field: 'week', direction: 'desc' }}\r\n >\r\n </tile-list>\r\n `);\r\n\r\n const viewsRow = el.shadowRoot?.getElementById('views-line');\r\n expect(viewsRow).to.exist;\r\n expect(viewsRow?.textContent?.trim()).to.equal('Weekly views: 10');\r\n });\r\n\r\n it('should render all-time views when sorting by non-week field', async () => {\r\n const el = await fixture<TileList>(html`\r\n <tile-list\r\n .model=${{ viewCount: 50, weeklyViewCount: 10 }}\r\n .sortParam=${{ field: 'downloads', direction: 'desc' }}\r\n >\r\n </tile-list>\r\n `);\r\n\r\n const viewsRow = el.shadowRoot?.getElementById('views-line');\r\n expect(viewsRow).to.exist;\r\n expect(viewsRow?.textContent?.trim()).to.equal('All-time views: 50');\r\n });\r\n\r\n it('should render all-time views with no sort param', async () => {\r\n const el = await fixture<TileList>(html`\r\n <tile-list .model=${{ viewCount: 50, weeklyViewCount: 10 }}> </tile-list>\r\n `);\r\n\r\n const viewsRow = el.shadowRoot?.getElementById('views-line');\r\n expect(viewsRow).to.exist;\r\n expect(viewsRow?.textContent?.trim()).to.equal('All-time views: 50');\r\n });\r\n\r\n it('should render published date when sorting by it', async () => {\r\n const model: Partial<TileModel> = {\r\n dateAdded: new Date(2010, 0, 2),\r\n dateArchived: new Date(2011, 0, 2),\r\n datePublished: new Date(2012, 0, 2),\r\n dateReviewed: new Date(2013, 0, 2),\r\n };\r\n\r\n const el = await fixture<TileList>(html`\r\n <tile-list\r\n .model=${model}\r\n .sortParam=${{ field: 'date', direction: 'desc' }}\r\n >\r\n </tile-list>\r\n `);\r\n\r\n const dateRow = el.shadowRoot?.getElementById('dates-line');\r\n expect(dateRow).to.exist;\r\n expect(dateRow?.textContent?.trim()).to.contain('Published: Jan 02, 2012');\r\n });\r\n\r\n it('should render added date when sorting by it', async () => {\r\n const model: Partial<TileModel> = {\r\n dateAdded: new Date(2010, 0, 2),\r\n dateArchived: new Date(2011, 0, 2),\r\n datePublished: new Date(2012, 0, 2),\r\n dateReviewed: new Date(2013, 0, 2),\r\n };\r\n\r\n const el = await fixture<TileList>(html`\r\n <tile-list\r\n .model=${model}\r\n .sortParam=${{ field: 'addeddate', direction: 'desc' }}\r\n >\r\n </tile-list>\r\n `);\r\n\r\n const dateRow = el.shadowRoot?.getElementById('dates-line');\r\n expect(dateRow).to.exist;\r\n expect(dateRow?.textContent?.trim()).to.contain('Added: Jan 02, 2010');\r\n });\r\n\r\n it('should render archived date when sorting by it', async () => {\r\n const model: Partial<TileModel> = {\r\n dateAdded: new Date(2010, 0, 2),\r\n dateArchived: new Date(2011, 0, 2),\r\n datePublished: new Date(2012, 0, 2),\r\n dateReviewed: new Date(2013, 0, 2),\r\n };\r\n\r\n const el = await fixture<TileList>(html`\r\n <tile-list\r\n .model=${model}\r\n .sortParam=${{ field: 'publicdate', direction: 'desc' }}\r\n >\r\n </tile-list>\r\n `);\r\n\r\n const dateRow = el.shadowRoot?.getElementById('dates-line');\r\n expect(dateRow).to.exist;\r\n expect(dateRow?.textContent?.trim()).to.contain('Archived: Jan 02, 2011');\r\n });\r\n\r\n it('should render reviewed date when sorting by it', async () => {\r\n const model: Partial<TileModel> = {\r\n dateAdded: new Date(2010, 0, 2),\r\n dateArchived: new Date(2011, 0, 2),\r\n datePublished: new Date(2012, 0, 2),\r\n dateReviewed: new Date(2013, 0, 2),\r\n };\r\n\r\n const el = await fixture<TileList>(html`\r\n <tile-list\r\n .model=${model}\r\n .sortParam=${{ field: 'reviewdate', direction: 'desc' }}\r\n >\r\n </tile-list>\r\n `);\r\n\r\n const dateRow = el.shadowRoot?.getElementById('dates-line');\r\n expect(dateRow).to.exist;\r\n expect(dateRow?.textContent?.trim()).to.contain('Reviewed: Jan 02, 2013');\r\n });\r\n\r\n it('should only show the year for a date published of Jan 1 at midnight UTC', async () => {\r\n const model: Partial<TileModel> = {\r\n datePublished: new Date('2012-01-01T00:00:00Z'),\r\n };\r\n\r\n const el = await fixture<TileList>(html`\r\n <tile-list\r\n .model=${model}\r\n .sortParam=${{ field: 'date', direction: 'desc' }}\r\n >\r\n </tile-list>\r\n `);\r\n\r\n const dateRow = el.shadowRoot?.getElementById('dates-line');\r\n expect(dateRow).to.exist;\r\n expect(dateRow?.textContent?.trim()).to.contain('Published: 2012');\r\n });\r\n\r\n it('should show full date added/archived/reviewed, even on Jan 1 at midnight UTC', async () => {\r\n const model: Partial<TileModel> = {\r\n dateAdded: new Date(2010, 0, 1, 0, 0, 0, 0),\r\n dateArchived: new Date(2011, 0, 1, 0, 0, 0, 0),\r\n datePublished: new Date(2012, 0, 1, 0, 0, 0, 0),\r\n dateReviewed: new Date(2013, 0, 1, 0, 0, 0, 0),\r\n };\r\n\r\n const el = await fixture<TileList>(html`\r\n <tile-list\r\n .model=${model}\r\n .sortParam=${{ field: 'addeddate', direction: 'desc' }}\r\n >\r\n </tile-list>\r\n `);\r\n\r\n let dateRow = el.shadowRoot?.getElementById('dates-line');\r\n expect(dateRow).to.exist;\r\n expect(dateRow?.textContent?.trim()).to.contain('Added: Jan 01, 2010');\r\n\r\n el.sortParam = { field: 'publicdate', direction: 'desc' };\r\n await el.updateComplete;\r\n dateRow = el.shadowRoot?.getElementById('dates-line');\r\n expect(dateRow).to.exist;\r\n expect(dateRow?.textContent?.trim()).to.contain('Archived: Jan 01, 2011');\r\n\r\n el.sortParam = { field: 'reviewdate', direction: 'desc' };\r\n await el.updateComplete;\r\n dateRow = el.shadowRoot?.getElementById('dates-line');\r\n expect(dateRow).to.exist;\r\n expect(dateRow?.textContent?.trim()).to.contain('Reviewed: Jan 01, 2013');\r\n });\r\n\r\n it('should display dates in UTC time zone by default', async () => {\r\n const model: Partial<TileModel> = {\r\n datePublished: new Date('2012-02-15T00:00:00Z'),\r\n };\r\n\r\n const el = await fixture<TileList>(html`\r\n <tile-list\r\n .model=${model}\r\n .sortParam=${{ field: 'date', direction: 'desc' }}\r\n >\r\n </tile-list>\r\n `);\r\n\r\n const dateRow = el.shadowRoot?.getElementById('dates-line');\r\n expect(dateRow).to.exist;\r\n expect(dateRow?.textContent?.trim()).to.contain('Published: Feb 15, 2012');\r\n });\r\n\r\n it('should display dates in local time when useLocalTime option is true', async () => {\r\n // Expected behavior depends on the time zone offset where the testing occurs\r\n const offset = new Date().getTimezoneOffset();\r\n let datePublished, expected;\r\n if (offset > 0) {\r\n // Positive local time zone offsets have earlier local dates than UTC\r\n datePublished = new Date('2012-02-15T00:00:00Z');\r\n expected = 'Published: Feb 14, 2012';\r\n } else if (offset < 0) {\r\n // Negative local time zone offsets have later local dates than UTC\r\n datePublished = new Date('2012-02-15T23:59:59Z');\r\n expected = 'Published: Feb 16, 2012';\r\n } else {\r\n // Local time may just be UTC itself\r\n datePublished = new Date('2012-02-15T00:00:00Z');\r\n expected = 'Published: Feb 15, 2012';\r\n }\r\n\r\n const model: Partial<TileModel> = {\r\n datePublished,\r\n };\r\n\r\n const el = await fixture<TileList>(html`\r\n <tile-list\r\n useLocalTime\r\n .model=${model}\r\n .sortParam=${{ field: 'date', direction: 'desc' }}\r\n >\r\n </tile-list>\r\n `);\r\n\r\n const dateRow = el.shadowRoot?.getElementById('dates-line');\r\n expect(dateRow).to.exist;\r\n\r\n expect(dateRow?.textContent?.trim()).to.contain(expected);\r\n });\r\n\r\n it('should render links to /search pages (not search.php) for subject, creator, and source', async () => {\r\n const model: Partial<TileModel> = {\r\n subjects: ['foo'],\r\n creators: ['bar'],\r\n source: 'baz',\r\n };\r\n\r\n const el = await fixture<TileList>(html`\r\n <tile-list .model=${model}></tile-list>\r\n `);\r\n\r\n const subjectLink = el.shadowRoot?.querySelector('#topics a[href]');\r\n expect(subjectLink).to.exist;\r\n expect(subjectLink?.getAttribute('href')).to.equal(\r\n `/search?query=${encodeURIComponent('subject:\"foo\"')}`,\r\n );\r\n\r\n const creatorLink = el.shadowRoot?.querySelector('#creator a[href]');\r\n expect(creatorLink).to.exist;\r\n expect(creatorLink?.getAttribute('href')).to.equal(\r\n `/search?query=${encodeURIComponent('creator:\"bar\"')}`,\r\n );\r\n\r\n const sourceLink = el.shadowRoot?.querySelector('#source a[href]');\r\n expect(sourceLink).to.exist;\r\n expect(sourceLink?.getAttribute('href')).to.equal(\r\n `/search?query=${encodeURIComponent('source:\"baz\"')}`,\r\n );\r\n });\r\n\r\n it('should render multi-line descriptions with spaces b/w lines', async () => {\r\n const el = await fixture<TileList>(html`\r\n <tile-list .model=${{ description: 'line1\\nline2' }}> </tile-list>\r\n `);\r\n\r\n const descriptionBlock = el.shadowRoot?.getElementById('description');\r\n expect(descriptionBlock).to.exist;\r\n expect(descriptionBlock?.textContent?.trim()).to.equal('line1 line2'); // line break replaced by space\r\n });\r\n\r\n it('should render mediatype icon as link to corresponding mediatype collection details', async () => {\r\n const model: Partial<TileModel> = {\r\n mediatype: 'texts',\r\n };\r\n\r\n const el = await fixture<TileList>(html`\r\n <tile-list\r\n .baseNavigationUrl=${'https://archive.org'}\r\n .model=${model}\r\n ></tile-list>\r\n `);\r\n\r\n const mediatypeLink = el.shadowRoot?.querySelector('a#icon-right');\r\n expect(mediatypeLink).to.exist;\r\n expect(mediatypeLink?.getAttribute('href')).to.equal(\r\n `https://archive.org/details/texts`,\r\n );\r\n expect(mediatypeLink?.getAttribute('title')).to.equal('See more: texts');\r\n });\r\n\r\n it('should render mediatype icon as link even with empty baseNavigationUrl', async () => {\r\n const model: Partial<TileModel> = {\r\n mediatype: 'texts',\r\n };\r\n\r\n const el = await fixture<TileList>(html`\r\n <tile-list .baseNavigationUrl=${''} .model=${model}></tile-list>\r\n `);\r\n\r\n const mediatypeLink = el.shadowRoot?.querySelector('a#icon-right');\r\n expect(mediatypeLink).to.exist;\r\n expect(mediatypeLink?.getAttribute('href')).to.equal(`/details/texts`);\r\n });\r\n\r\n it('should render collection mediatype icon as link to search page', async () => {\r\n const model: Partial<TileModel> = {\r\n mediatype: 'collection',\r\n };\r\n\r\n const el = await fixture<TileList>(html`\r\n <tile-list\r\n .baseNavigationUrl=${'https://archive.org'}\r\n .model=${model}\r\n ></tile-list>\r\n `);\r\n\r\n const mediatypeLink = el.shadowRoot?.querySelector('a#icon-right');\r\n expect(mediatypeLink).to.exist;\r\n expect(mediatypeLink?.getAttribute('href')).to.equal(\r\n `https://archive.org/search?query=mediatype:collection&sort=-downloads`,\r\n );\r\n });\r\n\r\n it('should not render account mediatype icon as link', async () => {\r\n const model: Partial<TileModel> = {\r\n mediatype: 'account',\r\n };\r\n\r\n const el = await fixture<TileList>(html`\r\n <tile-list\r\n .baseNavigationUrl=${'https://archive.org'}\r\n .model=${model}\r\n ></tile-list>\r\n `);\r\n\r\n const mediatypeLink = el.shadowRoot?.querySelector('a#icon-right');\r\n expect(mediatypeLink).to.exist;\r\n expect(mediatypeLink?.getAttribute('href')).not.to.exist;\r\n });\r\n\r\n it('should render date added for accounts', async () => {\r\n const el = await fixture<TileList>(html`\r\n <tile-list\r\n .model=${{\r\n mediatype: 'account',\r\n dateAdded: new Date('2015-05-05T00:00:00'),\r\n }}\r\n >\r\n </tile-list>\r\n `);\r\n\r\n const creatorBlock = el.shadowRoot?.getElementById('creator');\r\n expect(creatorBlock).to.exist;\r\n expect(creatorBlock?.textContent?.trim()).to.equal('Archivist since 2015');\r\n });\r\n\r\n it('should render web capture date links if present', async () => {\r\n const captureDates = [\r\n new Date('2010-01-02T12:34:56Z'),\r\n new Date('2011-02-03T12:43:21Z'),\r\n ];\r\n\r\n const el = await fixture<TileList>(html`\r\n <tile-list\r\n .model=${{\r\n identifier: 'foo',\r\n title: 'https://example.com/',\r\n captureDates,\r\n }}\r\n ></tile-list>\r\n `);\r\n\r\n const captureDatesUl = el.shadowRoot?.querySelector('.capture-dates');\r\n expect(captureDatesUl, 'capture dates container').to.exist;\r\n expect(captureDatesUl?.children.length).to.equal(2);\r\n\r\n const firstDateLink = captureDatesUl?.children[0]?.querySelector('a[href]');\r\n expect(firstDateLink, 'first date link').to.exist;\r\n expect(firstDateLink?.getAttribute('href')).to.equal(\r\n 'https://web.archive.org/web/20100102123456/https://example.com/',\r\n );\r\n expect(firstDateLink?.textContent?.trim()).to.equal('Jan 02, 2010');\r\n\r\n const secondDateLink =\r\n captureDatesUl?.children[1]?.querySelector('a[href]');\r\n expect(secondDateLink, 'second date link').to.exist;\r\n expect(secondDateLink?.getAttribute('href')).to.equal(\r\n 'https://web.archive.org/web/20110203124321/https://example.com/',\r\n );\r\n expect(secondDateLink?.textContent?.trim()).to.equal('Feb 03, 2011');\r\n });\r\n\r\n it('should not render web captures if no title is present', async () => {\r\n const captureDates = [\r\n new Date('2010-01-02T12:34:56Z'),\r\n new Date('2011-02-03T12:43:21Z'),\r\n ];\r\n\r\n const el = await fixture<TileList>(html`\r\n <tile-list\r\n .model=${{\r\n identifier: 'foo',\r\n captureDates,\r\n }}\r\n ></tile-list>\r\n `);\r\n\r\n const captureDatesUl = el.shadowRoot?.querySelector('.capture-dates');\r\n expect(captureDatesUl).not.to.exist;\r\n });\r\n\r\n it('should render review snippet if present', async () => {\r\n const review = {\r\n title: 'Foo',\r\n body: 'foo bar baz',\r\n stars: 3,\r\n };\r\n\r\n const el = await fixture<TileList>(html`\r\n <tile-list\r\n .model=${{\r\n identifier: 'foo',\r\n review,\r\n }}\r\n ></tile-list>\r\n `);\r\n\r\n const reviewBlock = el.shadowRoot?.querySelector('review-block');\r\n expect(reviewBlock).to.exist;\r\n });\r\n\r\n it('should not render review snippet block when no review is present', async () => {\r\n const el = await fixture<TileList>(html`\r\n <tile-list\r\n .model=${{\r\n identifier: 'foo',\r\n }}\r\n ></tile-list>\r\n `);\r\n\r\n const reviewBlock = el.shadowRoot?.querySelector('review-block');\r\n expect(reviewBlock).not.to.exist;\r\n });\r\n});\r\n"]}
@@ -5,61 +5,61 @@ import '../../src/tiles/tile-dispatcher';
5
5
  import { TileHoverPane } from '../../src/tiles/hover/tile-hover-pane';
6
6
  describe('Tile Dispatcher', () => {
7
7
  it('should render item-tile for grid mode by default', async () => {
8
- const el = await fixture(html `
9
- <tile-dispatcher
10
- .tileDisplayMode=${'grid'}
11
- .model=${{ mediatype: 'texts' }}
12
- >
13
- </tile-dispatcher>
8
+ const el = await fixture(html `
9
+ <tile-dispatcher
10
+ .tileDisplayMode=${'grid'}
11
+ .model=${{ mediatype: 'texts' }}
12
+ >
13
+ </tile-dispatcher>
14
14
  `);
15
15
  const itemTile = el.shadowRoot?.querySelector('item-tile');
16
16
  expect(itemTile).to.exist;
17
17
  });
18
18
  it('should render collection-tile for grid mode and collection mediatype', async () => {
19
- const el = await fixture(html `
20
- <tile-dispatcher
21
- .tileDisplayMode=${'grid'}
22
- .model=${{ mediatype: 'collection' }}
23
- >
24
- </tile-dispatcher>
19
+ const el = await fixture(html `
20
+ <tile-dispatcher
21
+ .tileDisplayMode=${'grid'}
22
+ .model=${{ mediatype: 'collection' }}
23
+ >
24
+ </tile-dispatcher>
25
25
  `);
26
26
  const collectionTile = el.shadowRoot?.querySelector('collection-tile');
27
27
  expect(collectionTile).to.exist;
28
28
  });
29
29
  it('should render account-tile for grid mode and account mediatype', async () => {
30
- const el = await fixture(html `
31
- <tile-dispatcher
32
- .tileDisplayMode=${'grid'}
33
- .model=${{ mediatype: 'account' }}
34
- >
35
- </tile-dispatcher>
30
+ const el = await fixture(html `
31
+ <tile-dispatcher
32
+ .tileDisplayMode=${'grid'}
33
+ .model=${{ mediatype: 'account' }}
34
+ >
35
+ </tile-dispatcher>
36
36
  `);
37
37
  const accountTile = el.shadowRoot?.querySelector('account-tile');
38
38
  expect(accountTile).to.exist;
39
39
  });
40
40
  it('should render search-tile for grid mode and search mediatype', async () => {
41
- const el = await fixture(html `
42
- <tile-dispatcher
43
- .tileDisplayMode=${'grid'}
44
- .model=${{ mediatype: 'search' }}
45
- >
46
- </tile-dispatcher>
41
+ const el = await fixture(html `
42
+ <tile-dispatcher
43
+ .tileDisplayMode=${'grid'}
44
+ .model=${{ mediatype: 'search' }}
45
+ >
46
+ </tile-dispatcher>
47
47
  `);
48
48
  const searchTile = el.shadowRoot?.querySelector('search-tile');
49
49
  expect(searchTile).to.exist;
50
50
  });
51
51
  it('should render tile-list for extended list mode', async () => {
52
- const el = await fixture(html `
53
- <tile-dispatcher .tileDisplayMode=${'list-detail'} .model=${{}}>
54
- </tile-dispatcher>
52
+ const el = await fixture(html `
53
+ <tile-dispatcher .tileDisplayMode=${'list-detail'} .model=${{}}>
54
+ </tile-dispatcher>
55
55
  `);
56
56
  const listTile = el.shadowRoot?.querySelector('tile-list');
57
57
  expect(listTile).to.exist;
58
58
  });
59
59
  it('should render tile-list-compact for compact list mode', async () => {
60
- const el = await fixture(html `
61
- <tile-dispatcher .tileDisplayMode=${'list-compact'} .model=${{}}>
62
- </tile-dispatcher>
60
+ const el = await fixture(html `
61
+ <tile-dispatcher .tileDisplayMode=${'list-compact'} .model=${{}}>
62
+ </tile-dispatcher>
63
63
  `);
64
64
  const compactListTile = el.shadowRoot?.querySelector('tile-list-compact');
65
65
  expect(compactListTile).to.exist;
@@ -68,13 +68,13 @@ describe('Tile Dispatcher', () => {
68
68
  const oldWindowOpen = window.open;
69
69
  const spy = sinon.spy();
70
70
  window.open = spy;
71
- const el = await fixture(html `
72
- <tile-dispatcher
73
- isManageView
74
- .model=${{ identifier: 'foo', href: '/foo' }}
75
- .baseNavigationUrl=${''}
76
- >
77
- </tile-dispatcher>
71
+ const el = await fixture(html `
72
+ <tile-dispatcher
73
+ isManageView
74
+ .model=${{ identifier: 'foo', href: '/foo' }}
75
+ .baseNavigationUrl=${''}
76
+ >
77
+ </tile-dispatcher>
78
78
  `);
79
79
  const tileLink = el.shadowRoot?.querySelector('a[href]');
80
80
  expect(tileLink).to.exist;
@@ -85,13 +85,27 @@ describe('Tile Dispatcher', () => {
85
85
  expect(spy.args[0][1]).to.equal('_blank');
86
86
  window.open = oldWindowOpen;
87
87
  });
88
+ it('should use model href as link href', async () => {
89
+ const el = await fixture(html `
90
+ <tile-dispatcher
91
+ .model=${{
92
+ identifier: 'foo',
93
+ href: 'https://web.archive.org/web/20180613065659/http://www.sankei.com/',
94
+ }}
95
+ .baseNavigationUrl=${''}
96
+ ></tile-dispatcher>
97
+ `);
98
+ const tileLink = el.shadowRoot?.querySelector('a[href]');
99
+ expect(tileLink).to.exist;
100
+ expect(tileLink.getAttribute('href')).to.equal('https://web.archive.org/web/20180613065659/http://www.sankei.com/');
101
+ });
88
102
  it('should toggle model checked state when manage check clicked', async () => {
89
- const el = await fixture(html `
90
- <tile-dispatcher
91
- isManageView
92
- .model=${{ identifier: 'foo', href: '/foo' }}
93
- .tileDisplayMode=${'grid'}
94
- ></tile-dispatcher>
103
+ const el = await fixture(html `
104
+ <tile-dispatcher
105
+ isManageView
106
+ .model=${{ identifier: 'foo', href: '/foo' }}
107
+ .tileDisplayMode=${'grid'}
108
+ ></tile-dispatcher>
95
109
  `);
96
110
  const manageCheck = el.shadowRoot?.querySelector('.manage-check > input[type="checkbox"]');
97
111
  manageCheck.click();
@@ -102,14 +116,14 @@ describe('Tile Dispatcher', () => {
102
116
  expect(el.model?.checked).to.be.false;
103
117
  });
104
118
  it('should return hover pane props', async () => {
105
- const el = await fixture(html `
106
- <tile-dispatcher .model=${{ identifier: 'foo' }}> </tile-dispatcher>
119
+ const el = await fixture(html `
120
+ <tile-dispatcher .model=${{ identifier: 'foo' }}> </tile-dispatcher>
107
121
  `);
108
122
  expect(el.getHoverPaneProps()).to.satisfy((props) => props?.model?.identifier === 'foo');
109
123
  });
110
124
  it('should focus the tile link when requested', async () => {
111
- const el = await fixture(html `
112
- <tile-dispatcher .tileDisplayMode=${'grid'}> </tile-dispatcher>
125
+ const el = await fixture(html `
126
+ <tile-dispatcher .tileDisplayMode=${'grid'}> </tile-dispatcher>
113
127
  `);
114
128
  const tileLink = el.shadowRoot?.querySelector('.tile-link');
115
129
  expect(tileLink).to.exist;
@@ -118,8 +132,8 @@ describe('Tile Dispatcher', () => {
118
132
  expect(spyFocus.callCount).to.equal(1);
119
133
  });
120
134
  it('should blur the tile link when requested', async () => {
121
- const el = await fixture(html `
122
- <tile-dispatcher .tileDisplayMode=${'grid'}> </tile-dispatcher>
135
+ const el = await fixture(html `
136
+ <tile-dispatcher .tileDisplayMode=${'grid'}> </tile-dispatcher>
123
137
  `);
124
138
  const tileLink = el.shadowRoot?.querySelector('.tile-link');
125
139
  expect(tileLink).to.exist;
@@ -138,13 +152,13 @@ describe('Tile Dispatcher', () => {
138
152
  window.matchMedia = oldMatchMedia;
139
153
  });
140
154
  it('should toggle hover pane when tile info button is pressed', async () => {
141
- const el = await fixture(html `
142
- <tile-dispatcher
143
- .tileDisplayMode=${'grid'}
144
- .model=${{ mediatype: 'texts' }}
145
- .enableHoverPane=${true}
146
- >
147
- </tile-dispatcher>
155
+ const el = await fixture(html `
156
+ <tile-dispatcher
157
+ .tileDisplayMode=${'grid'}
158
+ .model=${{ mediatype: 'texts' }}
159
+ .enableHoverPane=${true}
160
+ >
161
+ </tile-dispatcher>
148
162
  `);
149
163
  const itemTile = el.shadowRoot?.querySelector('item-tile');
150
164
  expect(itemTile).to.exist;
@@ -160,13 +174,13 @@ describe('Tile Dispatcher', () => {
160
174
  expect(el.getHoverPane()).not.to.exist;
161
175
  });
162
176
  it('should not show info button when hover pane is not enabled', async () => {
163
- const el = await fixture(html `
164
- <tile-dispatcher
165
- .tileDisplayMode=${'grid'}
166
- .model=${{ mediatype: 'texts' }}
167
- .enableHoverPane=${false}
168
- >
169
- </tile-dispatcher>
177
+ const el = await fixture(html `
178
+ <tile-dispatcher
179
+ .tileDisplayMode=${'grid'}
180
+ .model=${{ mediatype: 'texts' }}
181
+ .enableHoverPane=${false}
182
+ >
183
+ </tile-dispatcher>
170
184
  `);
171
185
  const itemTile = el.shadowRoot?.querySelector('item-tile');
172
186
  expect(itemTile).to.exist;
@@ -176,54 +190,54 @@ describe('Tile Dispatcher', () => {
176
190
  });
177
191
  describe('Accessibility', () => {
178
192
  it('should have proper aria-label on tile link', async () => {
179
- const el = await fixture(html `
180
- <tile-dispatcher
181
- .tileDisplayMode=${'grid'}
193
+ const el = await fixture(html `
194
+ <tile-dispatcher
195
+ .tileDisplayMode=${'grid'}
182
196
  .model=${{
183
197
  title: 'Example Title',
184
198
  mediatype: 'texts',
185
- }}
186
- >
187
- </tile-dispatcher>
199
+ }}
200
+ >
201
+ </tile-dispatcher>
188
202
  `);
189
203
  const tileLink = el.shadowRoot?.querySelector('.tile-link');
190
204
  expect(tileLink).to.exist;
191
205
  expect(tileLink.getAttribute('aria-label')).to.equal('Example Title');
192
206
  });
193
207
  it('should fallback to untitled aria-label on tile link when no title', async () => {
194
- const el = await fixture(html `
195
- <tile-dispatcher
196
- .tileDisplayMode=${'grid'}
208
+ const el = await fixture(html `
209
+ <tile-dispatcher
210
+ .tileDisplayMode=${'grid'}
197
211
  .model=${{
198
212
  mediatype: 'texts',
199
- }}
200
- >
201
- </tile-dispatcher>
213
+ }}
214
+ >
215
+ </tile-dispatcher>
202
216
  `);
203
217
  const tileLink = el.shadowRoot?.querySelector('.tile-link');
204
218
  expect(tileLink).to.exist;
205
219
  expect(tileLink.getAttribute('aria-label')).to.equal('Untitled item');
206
220
  });
207
221
  it('should have no accessibility violations in grid mode', async () => {
208
- const el = await fixture(html `
209
- <tile-dispatcher
210
- .tileDisplayMode=${'grid'}
222
+ const el = await fixture(html `
223
+ <tile-dispatcher
224
+ .tileDisplayMode=${'grid'}
211
225
  .model=${{
212
226
  title: 'Example Title',
213
227
  mediatype: 'texts',
214
- }}
215
- >
216
- </tile-dispatcher>
228
+ }}
229
+ >
230
+ </tile-dispatcher>
217
231
  `);
218
232
  await expect(el).to.be.accessible();
219
233
  });
220
234
  it('should have no accessibility violations in list mode', async () => {
221
- const el = await fixture(html `
222
- <tile-dispatcher
223
- .tileDisplayMode=${'list-detail'}
224
- .model=${{ mediatype: 'texts' }}
225
- >
226
- </tile-dispatcher>
235
+ const el = await fixture(html `
236
+ <tile-dispatcher
237
+ .tileDisplayMode=${'list-detail'}
238
+ .model=${{ mediatype: 'texts' }}
239
+ >
240
+ </tile-dispatcher>
227
241
  `);
228
242
  await expect(el).to.be.accessible();
229
243
  });
@@ -1 +1 @@
1
- {"version":3,"file":"tile-dispatcher.test.js","sourceRoot":"","sources":["../../../test/tiles/tile-dispatcher.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { aTimeout, expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit';\nimport sinon from 'sinon';\nimport type { TileDispatcher } from '../../src/tiles/tile-dispatcher';\n\nimport '../../src/tiles/tile-dispatcher';\nimport type { ItemTile } from '../../src/tiles/grid/item-tile';\nimport { TileHoverPane } from '../../src/tiles/hover/tile-hover-pane';\nimport type { HoverPaneProperties } from '../../src/tiles/hover/hover-pane-controller';\n\ndescribe('Tile Dispatcher', () => {\n it('should render item-tile for grid mode by default', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'grid'}\n .model=${{ mediatype: 'texts' }}\n >\n </tile-dispatcher>\n `);\n\n const itemTile = el.shadowRoot?.querySelector('item-tile');\n expect(itemTile).to.exist;\n });\n\n it('should render collection-tile for grid mode and collection mediatype', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'grid'}\n .model=${{ mediatype: 'collection' }}\n >\n </tile-dispatcher>\n `);\n\n const collectionTile = el.shadowRoot?.querySelector('collection-tile');\n expect(collectionTile).to.exist;\n });\n\n it('should render account-tile for grid mode and account mediatype', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'grid'}\n .model=${{ mediatype: 'account' }}\n >\n </tile-dispatcher>\n `);\n\n const accountTile = el.shadowRoot?.querySelector('account-tile');\n expect(accountTile).to.exist;\n });\n\n it('should render search-tile for grid mode and search mediatype', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'grid'}\n .model=${{ mediatype: 'search' }}\n >\n </tile-dispatcher>\n `);\n\n const searchTile = el.shadowRoot?.querySelector('search-tile');\n expect(searchTile).to.exist;\n });\n\n it('should render tile-list for extended list mode', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher .tileDisplayMode=${'list-detail'} .model=${{}}>\n </tile-dispatcher>\n `);\n\n const listTile = el.shadowRoot?.querySelector('tile-list');\n expect(listTile).to.exist;\n });\n\n it('should render tile-list-compact for compact list mode', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher .tileDisplayMode=${'list-compact'} .model=${{}}>\n </tile-dispatcher>\n `);\n\n const compactListTile = el.shadowRoot?.querySelector('tile-list-compact');\n expect(compactListTile).to.exist;\n });\n\n it('should open item in new tab when right-clicked in manage mode', async () => {\n const oldWindowOpen = window.open;\n const spy = sinon.spy();\n window.open = spy;\n\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n isManageView\n .model=${{ identifier: 'foo', href: '/foo' }}\n .baseNavigationUrl=${''}\n >\n </tile-dispatcher>\n `);\n\n const tileLink = el.shadowRoot?.querySelector(\n 'a[href]',\n ) as HTMLAnchorElement;\n expect(tileLink).to.exist;\n\n tileLink.dispatchEvent(new Event('contextmenu'));\n await el.updateComplete;\n\n expect(spy.callCount).to.equal(1);\n expect(spy.args[0][0]).to.equal('/foo');\n expect(spy.args[0][1]).to.equal('_blank');\n\n window.open = oldWindowOpen;\n });\n\n it('should toggle model checked state when manage check clicked', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n isManageView\n .model=${{ identifier: 'foo', href: '/foo' }}\n .tileDisplayMode=${'grid'}\n ></tile-dispatcher>\n `);\n\n const manageCheck = el.shadowRoot?.querySelector(\n '.manage-check > input[type=\"checkbox\"]',\n ) as HTMLButtonElement;\n\n manageCheck.click();\n await el.updateComplete;\n expect(el.model?.checked).to.be.true;\n\n manageCheck.click();\n await el.updateComplete;\n expect(el.model?.checked).to.be.false;\n });\n\n it('should return hover pane props', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher .model=${{ identifier: 'foo' }}> </tile-dispatcher>\n `);\n\n expect(el.getHoverPaneProps()).to.satisfy(\n (props: HoverPaneProperties) => props?.model?.identifier === 'foo',\n );\n });\n\n it('should focus the tile link when requested', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher .tileDisplayMode=${'grid'}> </tile-dispatcher>\n `);\n\n const tileLink = el.shadowRoot?.querySelector(\n '.tile-link',\n ) as HTMLAnchorElement;\n expect(tileLink).to.exist;\n\n const spyFocus = sinon.spy(tileLink, 'focus');\n el.acquireFocus();\n expect(spyFocus.callCount).to.equal(1);\n });\n\n it('should blur the tile link when requested', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher .tileDisplayMode=${'grid'}> </tile-dispatcher>\n `);\n\n const tileLink = el.shadowRoot?.querySelector(\n '.tile-link',\n ) as HTMLAnchorElement;\n expect(tileLink).to.exist;\n\n const spyBlur = sinon.spy(tileLink, 'blur');\n el.releaseFocus();\n expect(spyBlur.callCount).to.equal(1);\n });\n\n describe('Hover pane info button behavior', () => {\n let oldMatchMedia: typeof window.matchMedia;\n\n before(() => {\n oldMatchMedia = window.matchMedia;\n // Pretend that there is no hover-capable input device\n window.matchMedia = () => ({ matches: false }) as MediaQueryList;\n });\n\n after(() => {\n window.matchMedia = oldMatchMedia;\n });\n\n it('should toggle hover pane when tile info button is pressed', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'grid'}\n .model=${{ mediatype: 'texts' }}\n .enableHoverPane=${true}\n >\n </tile-dispatcher>\n `);\n\n const itemTile = el.shadowRoot?.querySelector('item-tile') as ItemTile;\n expect(itemTile).to.exist;\n\n const infoButton = itemTile.shadowRoot?.querySelector(\n '.info-button',\n ) as HTMLButtonElement;\n expect(infoButton).to.exist;\n\n infoButton.click();\n await aTimeout(500);\n await el.updateComplete;\n expect(el.getHoverPane()).to.be.instanceOf(TileHoverPane);\n\n infoButton.click();\n await aTimeout(500);\n await el.updateComplete;\n expect(el.getHoverPane()).not.to.exist;\n });\n\n it('should not show info button when hover pane is not enabled', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'grid'}\n .model=${{ mediatype: 'texts' }}\n .enableHoverPane=${false}\n >\n </tile-dispatcher>\n `);\n\n const itemTile = el.shadowRoot?.querySelector('item-tile') as ItemTile;\n expect(itemTile).to.exist;\n\n const infoButton = itemTile.shadowRoot?.querySelector('.info-button');\n expect(infoButton).to.not.exist;\n });\n });\n\n describe('Accessibility', () => {\n it('should have proper aria-label on tile link', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'grid'}\n .model=${{\n title: 'Example Title',\n mediatype: 'texts',\n }}\n >\n </tile-dispatcher>\n `);\n\n const tileLink = el.shadowRoot?.querySelector(\n '.tile-link',\n ) as HTMLAnchorElement;\n expect(tileLink).to.exist;\n expect(tileLink.getAttribute('aria-label')).to.equal('Example Title');\n });\n\n it('should fallback to untitled aria-label on tile link when no title', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'grid'}\n .model=${{\n mediatype: 'texts',\n }}\n >\n </tile-dispatcher>\n `);\n\n const tileLink = el.shadowRoot?.querySelector(\n '.tile-link',\n ) as HTMLAnchorElement;\n expect(tileLink).to.exist;\n expect(tileLink.getAttribute('aria-label')).to.equal('Untitled item');\n });\n\n it('should have no accessibility violations in grid mode', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'grid'}\n .model=${{\n title: 'Example Title',\n mediatype: 'texts',\n }}\n >\n </tile-dispatcher>\n `);\n\n await expect(el).to.be.accessible();\n });\n\n it('should have no accessibility violations in list mode', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'list-detail'}\n .model=${{ mediatype: 'texts' }}\n >\n </tile-dispatcher>\n `);\n\n await expect(el).to.be.accessible();\n });\n });\n});\n"]}
1
+ {"version":3,"file":"tile-dispatcher.test.js","sourceRoot":"","sources":["../../../test/tiles/tile-dispatcher.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { aTimeout, expect, fixture } from '@open-wc/testing';\r\nimport { html } from 'lit';\r\nimport sinon from 'sinon';\r\nimport type { TileDispatcher } from '../../src/tiles/tile-dispatcher';\r\n\r\nimport '../../src/tiles/tile-dispatcher';\r\nimport type { ItemTile } from '../../src/tiles/grid/item-tile';\r\nimport { TileHoverPane } from '../../src/tiles/hover/tile-hover-pane';\r\nimport type { HoverPaneProperties } from '../../src/tiles/hover/hover-pane-controller';\r\n\r\ndescribe('Tile Dispatcher', () => {\r\n it('should render item-tile for grid mode by default', async () => {\r\n const el = await fixture<TileDispatcher>(html`\r\n <tile-dispatcher\r\n .tileDisplayMode=${'grid'}\r\n .model=${{ mediatype: 'texts' }}\r\n >\r\n </tile-dispatcher>\r\n `);\r\n\r\n const itemTile = el.shadowRoot?.querySelector('item-tile');\r\n expect(itemTile).to.exist;\r\n });\r\n\r\n it('should render collection-tile for grid mode and collection mediatype', async () => {\r\n const el = await fixture<TileDispatcher>(html`\r\n <tile-dispatcher\r\n .tileDisplayMode=${'grid'}\r\n .model=${{ mediatype: 'collection' }}\r\n >\r\n </tile-dispatcher>\r\n `);\r\n\r\n const collectionTile = el.shadowRoot?.querySelector('collection-tile');\r\n expect(collectionTile).to.exist;\r\n });\r\n\r\n it('should render account-tile for grid mode and account mediatype', async () => {\r\n const el = await fixture<TileDispatcher>(html`\r\n <tile-dispatcher\r\n .tileDisplayMode=${'grid'}\r\n .model=${{ mediatype: 'account' }}\r\n >\r\n </tile-dispatcher>\r\n `);\r\n\r\n const accountTile = el.shadowRoot?.querySelector('account-tile');\r\n expect(accountTile).to.exist;\r\n });\r\n\r\n it('should render search-tile for grid mode and search mediatype', async () => {\r\n const el = await fixture<TileDispatcher>(html`\r\n <tile-dispatcher\r\n .tileDisplayMode=${'grid'}\r\n .model=${{ mediatype: 'search' }}\r\n >\r\n </tile-dispatcher>\r\n `);\r\n\r\n const searchTile = el.shadowRoot?.querySelector('search-tile');\r\n expect(searchTile).to.exist;\r\n });\r\n\r\n it('should render tile-list for extended list mode', async () => {\r\n const el = await fixture<TileDispatcher>(html`\r\n <tile-dispatcher .tileDisplayMode=${'list-detail'} .model=${{}}>\r\n </tile-dispatcher>\r\n `);\r\n\r\n const listTile = el.shadowRoot?.querySelector('tile-list');\r\n expect(listTile).to.exist;\r\n });\r\n\r\n it('should render tile-list-compact for compact list mode', async () => {\r\n const el = await fixture<TileDispatcher>(html`\r\n <tile-dispatcher .tileDisplayMode=${'list-compact'} .model=${{}}>\r\n </tile-dispatcher>\r\n `);\r\n\r\n const compactListTile = el.shadowRoot?.querySelector('tile-list-compact');\r\n expect(compactListTile).to.exist;\r\n });\r\n\r\n it('should open item in new tab when right-clicked in manage mode', async () => {\r\n const oldWindowOpen = window.open;\r\n const spy = sinon.spy();\r\n window.open = spy;\r\n\r\n const el = await fixture<TileDispatcher>(html`\r\n <tile-dispatcher\r\n isManageView\r\n .model=${{ identifier: 'foo', href: '/foo' }}\r\n .baseNavigationUrl=${''}\r\n >\r\n </tile-dispatcher>\r\n `);\r\n\r\n const tileLink = el.shadowRoot?.querySelector(\r\n 'a[href]',\r\n ) as HTMLAnchorElement;\r\n expect(tileLink).to.exist;\r\n\r\n tileLink.dispatchEvent(new Event('contextmenu'));\r\n await el.updateComplete;\r\n\r\n expect(spy.callCount).to.equal(1);\r\n expect(spy.args[0][0]).to.equal('/foo');\r\n expect(spy.args[0][1]).to.equal('_blank');\r\n\r\n window.open = oldWindowOpen;\r\n });\r\n\r\n it('should use model href as link href', async () => {\r\n const el = await fixture<TileDispatcher>(html`\r\n <tile-dispatcher\r\n .model=${{\r\n identifier: 'foo',\r\n href: 'https://web.archive.org/web/20180613065659/http://www.sankei.com/',\r\n }}\r\n .baseNavigationUrl=${''}\r\n ></tile-dispatcher>\r\n `);\r\n\r\n const tileLink = el.shadowRoot?.querySelector(\r\n 'a[href]',\r\n ) as HTMLAnchorElement;\r\n expect(tileLink).to.exist;\r\n expect(tileLink.getAttribute('href')).to.equal(\r\n 'https://web.archive.org/web/20180613065659/http://www.sankei.com/',\r\n );\r\n });\r\n\r\n it('should toggle model checked state when manage check clicked', async () => {\r\n const el = await fixture<TileDispatcher>(html`\r\n <tile-dispatcher\r\n isManageView\r\n .model=${{ identifier: 'foo', href: '/foo' }}\r\n .tileDisplayMode=${'grid'}\r\n ></tile-dispatcher>\r\n `);\r\n\r\n const manageCheck = el.shadowRoot?.querySelector(\r\n '.manage-check > input[type=\"checkbox\"]',\r\n ) as HTMLButtonElement;\r\n\r\n manageCheck.click();\r\n await el.updateComplete;\r\n expect(el.model?.checked).to.be.true;\r\n\r\n manageCheck.click();\r\n await el.updateComplete;\r\n expect(el.model?.checked).to.be.false;\r\n });\r\n\r\n it('should return hover pane props', async () => {\r\n const el = await fixture<TileDispatcher>(html`\r\n <tile-dispatcher .model=${{ identifier: 'foo' }}> </tile-dispatcher>\r\n `);\r\n\r\n expect(el.getHoverPaneProps()).to.satisfy(\r\n (props: HoverPaneProperties) => props?.model?.identifier === 'foo',\r\n );\r\n });\r\n\r\n it('should focus the tile link when requested', async () => {\r\n const el = await fixture<TileDispatcher>(html`\r\n <tile-dispatcher .tileDisplayMode=${'grid'}> </tile-dispatcher>\r\n `);\r\n\r\n const tileLink = el.shadowRoot?.querySelector(\r\n '.tile-link',\r\n ) as HTMLAnchorElement;\r\n expect(tileLink).to.exist;\r\n\r\n const spyFocus = sinon.spy(tileLink, 'focus');\r\n el.acquireFocus();\r\n expect(spyFocus.callCount).to.equal(1);\r\n });\r\n\r\n it('should blur the tile link when requested', async () => {\r\n const el = await fixture<TileDispatcher>(html`\r\n <tile-dispatcher .tileDisplayMode=${'grid'}> </tile-dispatcher>\r\n `);\r\n\r\n const tileLink = el.shadowRoot?.querySelector(\r\n '.tile-link',\r\n ) as HTMLAnchorElement;\r\n expect(tileLink).to.exist;\r\n\r\n const spyBlur = sinon.spy(tileLink, 'blur');\r\n el.releaseFocus();\r\n expect(spyBlur.callCount).to.equal(1);\r\n });\r\n\r\n describe('Hover pane info button behavior', () => {\r\n let oldMatchMedia: typeof window.matchMedia;\r\n\r\n before(() => {\r\n oldMatchMedia = window.matchMedia;\r\n // Pretend that there is no hover-capable input device\r\n window.matchMedia = () => ({ matches: false }) as MediaQueryList;\r\n });\r\n\r\n after(() => {\r\n window.matchMedia = oldMatchMedia;\r\n });\r\n\r\n it('should toggle hover pane when tile info button is pressed', async () => {\r\n const el = await fixture<TileDispatcher>(html`\r\n <tile-dispatcher\r\n .tileDisplayMode=${'grid'}\r\n .model=${{ mediatype: 'texts' }}\r\n .enableHoverPane=${true}\r\n >\r\n </tile-dispatcher>\r\n `);\r\n\r\n const itemTile = el.shadowRoot?.querySelector('item-tile') as ItemTile;\r\n expect(itemTile).to.exist;\r\n\r\n const infoButton = itemTile.shadowRoot?.querySelector(\r\n '.info-button',\r\n ) as HTMLButtonElement;\r\n expect(infoButton).to.exist;\r\n\r\n infoButton.click();\r\n await aTimeout(500);\r\n await el.updateComplete;\r\n expect(el.getHoverPane()).to.be.instanceOf(TileHoverPane);\r\n\r\n infoButton.click();\r\n await aTimeout(500);\r\n await el.updateComplete;\r\n expect(el.getHoverPane()).not.to.exist;\r\n });\r\n\r\n it('should not show info button when hover pane is not enabled', async () => {\r\n const el = await fixture<TileDispatcher>(html`\r\n <tile-dispatcher\r\n .tileDisplayMode=${'grid'}\r\n .model=${{ mediatype: 'texts' }}\r\n .enableHoverPane=${false}\r\n >\r\n </tile-dispatcher>\r\n `);\r\n\r\n const itemTile = el.shadowRoot?.querySelector('item-tile') as ItemTile;\r\n expect(itemTile).to.exist;\r\n\r\n const infoButton = itemTile.shadowRoot?.querySelector('.info-button');\r\n expect(infoButton).to.not.exist;\r\n });\r\n });\r\n\r\n describe('Accessibility', () => {\r\n it('should have proper aria-label on tile link', async () => {\r\n const el = await fixture<TileDispatcher>(html`\r\n <tile-dispatcher\r\n .tileDisplayMode=${'grid'}\r\n .model=${{\r\n title: 'Example Title',\r\n mediatype: 'texts',\r\n }}\r\n >\r\n </tile-dispatcher>\r\n `);\r\n\r\n const tileLink = el.shadowRoot?.querySelector(\r\n '.tile-link',\r\n ) as HTMLAnchorElement;\r\n expect(tileLink).to.exist;\r\n expect(tileLink.getAttribute('aria-label')).to.equal('Example Title');\r\n });\r\n\r\n it('should fallback to untitled aria-label on tile link when no title', async () => {\r\n const el = await fixture<TileDispatcher>(html`\r\n <tile-dispatcher\r\n .tileDisplayMode=${'grid'}\r\n .model=${{\r\n mediatype: 'texts',\r\n }}\r\n >\r\n </tile-dispatcher>\r\n `);\r\n\r\n const tileLink = el.shadowRoot?.querySelector(\r\n '.tile-link',\r\n ) as HTMLAnchorElement;\r\n expect(tileLink).to.exist;\r\n expect(tileLink.getAttribute('aria-label')).to.equal('Untitled item');\r\n });\r\n\r\n it('should have no accessibility violations in grid mode', async () => {\r\n const el = await fixture<TileDispatcher>(html`\r\n <tile-dispatcher\r\n .tileDisplayMode=${'grid'}\r\n .model=${{\r\n title: 'Example Title',\r\n mediatype: 'texts',\r\n }}\r\n >\r\n </tile-dispatcher>\r\n `);\r\n\r\n await expect(el).to.be.accessible();\r\n });\r\n\r\n it('should have no accessibility violations in list mode', async () => {\r\n const el = await fixture<TileDispatcher>(html`\r\n <tile-dispatcher\r\n .tileDisplayMode=${'list-detail'}\r\n .model=${{ mediatype: 'texts' }}\r\n >\r\n </tile-dispatcher>\r\n `);\r\n\r\n await expect(el).to.be.accessible();\r\n });\r\n });\r\n});\r\n"]}