@internetarchive/collection-browser 0.2.21 → 0.2.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/app-root.d.ts +1 -0
- package/dist/src/app-root.js +34 -4
- package/dist/src/app-root.js.map +1 -1
- package/dist/src/assets/img/icons/arrow-left.d.ts +2 -0
- package/dist/src/assets/img/icons/arrow-left.js +10 -0
- package/dist/src/assets/img/icons/arrow-left.js.map +1 -0
- package/dist/src/assets/img/icons/arrow-right.d.ts +2 -0
- package/dist/src/assets/img/icons/arrow-right.js +10 -0
- package/dist/src/assets/img/icons/arrow-right.js.map +1 -0
- package/dist/src/collection-browser.d.ts +2 -0
- package/dist/src/collection-browser.js +10 -2
- package/dist/src/collection-browser.js.map +1 -1
- package/dist/src/collection-facets/facets-template.d.ts +16 -0
- package/dist/src/collection-facets/facets-template.js +266 -0
- package/dist/src/collection-facets/facets-template.js.map +1 -0
- package/dist/src/collection-facets/facets-util.d.ts +10 -0
- package/dist/src/collection-facets/facets-util.js +20 -0
- package/dist/src/collection-facets/facets-util.js.map +1 -0
- package/dist/src/collection-facets/more-facets-content.d.ts +83 -0
- package/dist/src/collection-facets/more-facets-content.js +475 -0
- package/dist/src/collection-facets/more-facets-content.js.map +1 -0
- package/dist/src/collection-facets/more-facets-pagination.d.ts +36 -0
- package/dist/src/collection-facets/more-facets-pagination.js +267 -0
- package/dist/src/collection-facets/more-facets-pagination.js.map +1 -0
- package/dist/src/collection-facets.d.ts +19 -5
- package/dist/src/collection-facets.js +138 -239
- package/dist/src/collection-facets.js.map +1 -1
- package/dist/src/models.d.ts +4 -1
- package/dist/src/models.js +24 -0
- package/dist/src/models.js.map +1 -1
- package/dist/src/restoration-state-handler.js +5 -6
- package/dist/src/restoration-state-handler.js.map +1 -1
- package/dist/src/tiles/collection-browser-loading-tile.js +2 -5
- package/dist/src/tiles/collection-browser-loading-tile.js.map +1 -1
- package/dist/test/collection-browser.test.js +5 -3
- package/dist/test/collection-browser.test.js.map +1 -1
- package/dist/test/collection-facets/facets-template.test.d.ts +1 -0
- package/dist/test/collection-facets/facets-template.test.js +75 -0
- package/dist/test/collection-facets/facets-template.test.js.map +1 -0
- package/dist/test/collection-facets/facets-util.test.d.ts +1 -0
- package/dist/test/collection-facets/facets-util.test.js +13 -0
- package/dist/test/collection-facets/facets-util.test.js.map +1 -0
- package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -0
- package/dist/test/collection-facets/more-facets-content.test.js +104 -0
- package/dist/test/collection-facets/more-facets-content.test.js.map +1 -0
- package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -0
- package/dist/test/collection-facets/more-facets-pagination.test.js +133 -0
- package/dist/test/collection-facets/more-facets-pagination.test.js.map +1 -0
- package/dist/test/collection-facets.test.d.ts +1 -0
- package/dist/test/collection-facets.test.js +98 -33
- package/dist/test/collection-facets.test.js.map +1 -1
- package/package.json +11 -4
- package/src/app-root.ts +34 -4
- package/src/assets/img/icons/arrow-left.ts +10 -0
- package/src/assets/img/icons/arrow-right.ts +10 -0
- package/src/collection-browser.ts +9 -2
- package/src/collection-facets/facets-template.ts +284 -0
- package/src/collection-facets/facets-util.ts +22 -0
- package/src/collection-facets/more-facets-content.ts +529 -0
- package/src/collection-facets/more-facets-pagination.ts +297 -0
- package/src/collection-facets.ts +175 -261
- package/src/models.ts +28 -1
- package/src/restoration-state-handler.ts +7 -6
- package/src/tiles/collection-browser-loading-tile.ts +2 -5
- package/test/collection-browser.test.ts +6 -3
- package/test/collection-facets/facets-template.test.ts +103 -0
- package/test/collection-facets/facets-util.test.ts +18 -0
- package/test/collection-facets/more-facets-content.test.ts +146 -0
- package/test/collection-facets/more-facets-pagination.test.ts +202 -0
- package/test/collection-facets.test.ts +127 -44
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/* eslint-disable import/no-duplicates */
|
|
2
|
+
import { expect, fixture, oneEvent } from '@open-wc/testing';
|
|
3
|
+
import { html } from 'lit';
|
|
4
|
+
import sinon from 'sinon';
|
|
5
|
+
import '../../src/collection-facets/more-facets-pagination';
|
|
6
|
+
afterEach(() => {
|
|
7
|
+
sinon.restore();
|
|
8
|
+
});
|
|
9
|
+
describe('More facets pagination', () => {
|
|
10
|
+
describe('5 pages or less', () => {
|
|
11
|
+
it('shows all pages', async () => {
|
|
12
|
+
var _a;
|
|
13
|
+
const el = await fixture(html `<more-facets-pagination .size=${5}></more-facets-pagination>`);
|
|
14
|
+
await el.updateComplete;
|
|
15
|
+
const pageButtons = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll('button[data-page]');
|
|
16
|
+
expect(pageButtons.length).to.greaterThan(0);
|
|
17
|
+
pageButtons.forEach((button, index) => {
|
|
18
|
+
expect(button.textContent).to.contain(index + 1);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
it('should render pagination template', async () => {
|
|
23
|
+
var _a, _b;
|
|
24
|
+
const el = await fixture(html `<more-facets-pagination .size=${10}></more-facets-pagination>`);
|
|
25
|
+
await el.updateComplete;
|
|
26
|
+
expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facets-pagination')).to.exist;
|
|
27
|
+
expect((_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('.arrow-icon')).to.exist;
|
|
28
|
+
});
|
|
29
|
+
it('should render page numbers', async () => {
|
|
30
|
+
var _a;
|
|
31
|
+
const el = await fixture(html `<more-facets-pagination .size=${3}></more-facets-pagination>`);
|
|
32
|
+
await el.updateComplete;
|
|
33
|
+
const pageNumberElement = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.page-numbers');
|
|
34
|
+
expect(pageNumberElement).to.exist;
|
|
35
|
+
expect(pageNumberElement === null || pageNumberElement === void 0 ? void 0 : pageNumberElement.querySelectorAll('button').length).to.equal(3);
|
|
36
|
+
});
|
|
37
|
+
it('check current page and total pages', async () => {
|
|
38
|
+
var _a, _b;
|
|
39
|
+
const el = await fixture(html `<more-facets-pagination
|
|
40
|
+
.size=${4}
|
|
41
|
+
.currentPage=${2}
|
|
42
|
+
></more-facets-pagination>`);
|
|
43
|
+
await el.updateComplete;
|
|
44
|
+
const pageNumberElement = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.page-numbers');
|
|
45
|
+
expect(pageNumberElement).to.exist;
|
|
46
|
+
expect(pageNumberElement === null || pageNumberElement === void 0 ? void 0 : pageNumberElement.querySelectorAll('button')[1].classList.contains('current')).to.be.true;
|
|
47
|
+
expect((_b = el.pages) === null || _b === void 0 ? void 0 : _b.length).to.equal(4);
|
|
48
|
+
});
|
|
49
|
+
it('get page numbers based of size and currentPage', async () => {
|
|
50
|
+
var _a;
|
|
51
|
+
const el = await fixture(html `<more-facets-pagination
|
|
52
|
+
.size=${4}
|
|
53
|
+
.currentPage=${2}
|
|
54
|
+
></more-facets-pagination>`);
|
|
55
|
+
await el.updateComplete;
|
|
56
|
+
expect((_a = el.pages) === null || _a === void 0 ? void 0 : _a.length).to.equal(4);
|
|
57
|
+
});
|
|
58
|
+
describe('Selecting a page', () => {
|
|
59
|
+
it('fires event', async () => {
|
|
60
|
+
const el = await fixture(html `<more-facets-pagination></more-facets-pagination>`);
|
|
61
|
+
await el.updateComplete;
|
|
62
|
+
setTimeout(() => el.dispatchEvent(new CustomEvent('pageNumberClicked', { detail: { page: 15 } })));
|
|
63
|
+
const { detail } = await oneEvent(el, 'pageNumberClicked');
|
|
64
|
+
expect(detail === null || detail === void 0 ? void 0 : detail.page).to.equal(15);
|
|
65
|
+
});
|
|
66
|
+
it('sets off side effects with `onChange`', async () => {
|
|
67
|
+
var _a;
|
|
68
|
+
const el = await fixture(html `<more-facets-pagination
|
|
69
|
+
.size=${'10'}
|
|
70
|
+
.currentPage=${2}
|
|
71
|
+
></more-facets-pagination>`);
|
|
72
|
+
expect(el.currentPage).to.equal(2); // confirm current page
|
|
73
|
+
const fake1 = sinon.fake();
|
|
74
|
+
const fake2 = sinon.fake();
|
|
75
|
+
el.observePageCount = fake1;
|
|
76
|
+
el.emitPageClick = fake2;
|
|
77
|
+
// select first page button
|
|
78
|
+
const pageButton = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.page-numbers > button');
|
|
79
|
+
// confirm button isn't selected
|
|
80
|
+
expect(pageButton.classList.contains('current')).to.be.false;
|
|
81
|
+
pageButton.click();
|
|
82
|
+
await el.updateComplete;
|
|
83
|
+
expect(fake1.callCount).to.equal(1);
|
|
84
|
+
expect(fake2.callCount).to.equal(1);
|
|
85
|
+
expect(el.currentPage).to.equal(1); // brings us back to currentPage
|
|
86
|
+
// confirm button is selected
|
|
87
|
+
expect(pageButton.classList.contains('current')).to.be.true;
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
describe('Using Arrows', () => {
|
|
91
|
+
it('going backwards', async () => {
|
|
92
|
+
var _a, _b;
|
|
93
|
+
const el = await fixture(html `<more-facets-pagination
|
|
94
|
+
.size=${'10'}
|
|
95
|
+
.currentPage=${2}
|
|
96
|
+
></more-facets-pagination>`);
|
|
97
|
+
expect(el.currentPage).to.equal(2); // confirm current page
|
|
98
|
+
const fake1 = sinon.fake();
|
|
99
|
+
const fake2 = sinon.fake();
|
|
100
|
+
el.observePageCount = fake1;
|
|
101
|
+
el.emitPageClick = fake2;
|
|
102
|
+
// select first page button
|
|
103
|
+
const rewindButton = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facets-pagination > button.rewind');
|
|
104
|
+
rewindButton.click();
|
|
105
|
+
await el.updateComplete;
|
|
106
|
+
expect(fake1.callCount).to.equal(1);
|
|
107
|
+
expect(fake2.callCount).to.equal(1);
|
|
108
|
+
expect(el.currentPage).to.equal(1); // brings us back 1 page
|
|
109
|
+
// confirm button is selected
|
|
110
|
+
expect(((_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('.page-numbers > button[data-page="1"]')).classList.contains('current')).to.be.true;
|
|
111
|
+
});
|
|
112
|
+
it('going forwards', async () => {
|
|
113
|
+
var _a;
|
|
114
|
+
const el = await fixture(html `<more-facets-pagination
|
|
115
|
+
.size=${'10'}
|
|
116
|
+
.currentPage=${5}
|
|
117
|
+
></more-facets-pagination>`);
|
|
118
|
+
expect(el.currentPage).to.equal(5); // confirm current page
|
|
119
|
+
const fake1 = sinon.fake();
|
|
120
|
+
const fake2 = sinon.fake();
|
|
121
|
+
el.observePageCount = fake1;
|
|
122
|
+
el.emitPageClick = fake2;
|
|
123
|
+
// select first page button
|
|
124
|
+
const forwardButton = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facets-pagination > button.forward');
|
|
125
|
+
forwardButton.click();
|
|
126
|
+
await el.updateComplete;
|
|
127
|
+
expect(fake1.callCount).to.equal(1);
|
|
128
|
+
expect(fake2.callCount).to.equal(1);
|
|
129
|
+
expect(el.currentPage).to.equal(6); // brings us forward 1 page
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
//# sourceMappingURL=more-facets-pagination.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"more-facets-pagination.test.js","sourceRoot":"","sources":["../../../test/collection-facets/more-facets-pagination.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-duplicates */\nimport { expect, fixture, oneEvent } from '@open-wc/testing';\nimport { html } from 'lit';\nimport sinon from 'sinon';\nimport '../../src/collection-facets/more-facets-pagination';\nimport type { MoreFacetsPagination } from '../../src/collection-facets/more-facets-pagination';\n\nafterEach(() => {\n sinon.restore();\n});\n\ndescribe('More facets pagination', () => {\n describe('5 pages or less', () => {\n it('shows all pages', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination .size=${5}></more-facets-pagination>`\n );\n\n await el.updateComplete;\n\n const pageButtons = el.shadowRoot?.querySelectorAll(\n 'button[data-page]'\n ) as NodeList;\n expect(pageButtons.length).to.greaterThan(0);\n\n pageButtons.forEach((button, index) => {\n expect(button.textContent).to.contain(index + 1);\n });\n });\n });\n\n it('should render pagination template', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination .size=${10}></more-facets-pagination>`\n );\n\n await el.updateComplete;\n\n expect(el.shadowRoot?.querySelector('.facets-pagination')).to.exist;\n expect(el.shadowRoot?.querySelector('.arrow-icon')).to.exist;\n });\n\n it('should render page numbers', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination .size=${3}></more-facets-pagination>`\n );\n\n await el.updateComplete;\n\n const pageNumberElement = el.shadowRoot?.querySelector('.page-numbers');\n expect(pageNumberElement).to.exist;\n expect(pageNumberElement?.querySelectorAll('button').length).to.equal(3);\n });\n\n it('check current page and total pages', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination\n .size=${4}\n .currentPage=${2}\n ></more-facets-pagination>`\n );\n\n await el.updateComplete;\n\n const pageNumberElement = el.shadowRoot?.querySelector('.page-numbers');\n expect(pageNumberElement).to.exist;\n expect(\n pageNumberElement\n ?.querySelectorAll('button')[1]\n .classList.contains('current')\n ).to.be.true;\n expect(el.pages?.length).to.equal(4);\n });\n\n it('get page numbers based of size and currentPage', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination\n .size=${4}\n .currentPage=${2}\n ></more-facets-pagination>`\n );\n\n await el.updateComplete;\n\n expect(el.pages?.length).to.equal(4);\n });\n\n describe('Selecting a page', () => {\n it('fires event', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination></more-facets-pagination>`\n );\n\n await el.updateComplete;\n\n setTimeout(() =>\n el.dispatchEvent(\n new CustomEvent('pageNumberClicked', { detail: { page: 15 } })\n )\n );\n const { detail } = await oneEvent(el, 'pageNumberClicked');\n expect(detail?.page).to.equal(15);\n });\n it('sets off side effects with `onChange`', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination\n .size=${'10'}\n .currentPage=${2}\n ></more-facets-pagination>`\n );\n\n expect(el.currentPage).to.equal(2); // confirm current page\n\n const fake1 = sinon.fake();\n const fake2 = sinon.fake();\n el.observePageCount = fake1;\n el.emitPageClick = fake2;\n\n // select first page button\n const pageButton = el.shadowRoot?.querySelector(\n '.page-numbers > button'\n ) as HTMLButtonElement;\n // confirm button isn't selected\n expect(pageButton.classList.contains('current')).to.be.false;\n pageButton.click();\n\n await el.updateComplete;\n\n expect(fake1.callCount).to.equal(1);\n expect(fake2.callCount).to.equal(1);\n expect(el.currentPage).to.equal(1); // brings us back to currentPage\n // confirm button is selected\n expect(pageButton.classList.contains('current')).to.be.true;\n });\n });\n\n describe('Using Arrows', () => {\n it('going backwards', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination\n .size=${'10'}\n .currentPage=${2}\n ></more-facets-pagination>`\n );\n\n expect(el.currentPage).to.equal(2); // confirm current page\n\n const fake1 = sinon.fake();\n const fake2 = sinon.fake();\n el.observePageCount = fake1;\n el.emitPageClick = fake2;\n\n // select first page button\n const rewindButton = el.shadowRoot?.querySelector(\n '.facets-pagination > button.rewind'\n ) as HTMLButtonElement;\n rewindButton.click();\n\n await el.updateComplete;\n\n expect(fake1.callCount).to.equal(1);\n expect(fake2.callCount).to.equal(1);\n expect(el.currentPage).to.equal(1); // brings us back 1 page\n // confirm button is selected\n expect(\n (\n el.shadowRoot?.querySelector(\n '.page-numbers > button[data-page=\"1\"]'\n ) as HTMLButtonElement\n ).classList.contains('current')\n ).to.be.true;\n });\n\n it('going forwards', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination\n .size=${'10'}\n .currentPage=${5}\n ></more-facets-pagination>`\n );\n\n expect(el.currentPage).to.equal(5); // confirm current page\n\n const fake1 = sinon.fake();\n const fake2 = sinon.fake();\n el.observePageCount = fake1;\n el.emitPageClick = fake2;\n\n // select first page button\n const forwardButton = el.shadowRoot?.querySelector(\n '.facets-pagination > button.forward'\n ) as HTMLButtonElement;\n forwardButton.click();\n\n await el.updateComplete;\n\n expect(fake1.callCount).to.equal(1);\n expect(fake2.callCount).to.equal(1);\n expect(el.currentPage).to.equal(6); // brings us forward 1 page\n });\n });\n});\n"]}
|
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
/* eslint-disable import/no-duplicates */
|
|
2
2
|
import { expect, fixture } from '@open-wc/testing';
|
|
3
|
+
import sinon from 'sinon';
|
|
3
4
|
import { html } from 'lit';
|
|
5
|
+
import { ModalManager, } from '@internetarchive/modal-manager';
|
|
6
|
+
import '@internetarchive/modal-manager';
|
|
4
7
|
import '../src/collection-facets';
|
|
5
8
|
describe('Collection Facets', () => {
|
|
9
|
+
it('has loader', async () => {
|
|
10
|
+
var _a, _b, _c, _d;
|
|
11
|
+
const el = await fixture(html `<collection-facets ?facetsLoading=${true}></collection-facets>`);
|
|
12
|
+
expect((_b = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#container')) === null || _b === void 0 ? void 0 : _b.classList.contains('loading')).to.be.true;
|
|
13
|
+
el.facetsLoading = false;
|
|
14
|
+
await el.updateComplete;
|
|
15
|
+
expect((_d = (_c = el.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('#container')) === null || _d === void 0 ? void 0 : _d.classList.contains('loading')).to.be.false;
|
|
16
|
+
});
|
|
6
17
|
it('renders aggregations as facets', async () => {
|
|
7
|
-
var _a, _b, _c;
|
|
18
|
+
var _a, _b, _c, _d, _e;
|
|
8
19
|
const el = await fixture(html `<collection-facets></collection-facets>`);
|
|
9
20
|
const aggs = {
|
|
10
21
|
'user_aggs__terms__field:subjectSorter__size:1': {
|
|
@@ -23,8 +34,9 @@ describe('Collection Facets', () => {
|
|
|
23
34
|
const titleFacetGroup = facetGroups === null || facetGroups === void 0 ? void 0 : facetGroups[0];
|
|
24
35
|
const facetGroupHeader = titleFacetGroup === null || titleFacetGroup === void 0 ? void 0 : titleFacetGroup.querySelector('h1');
|
|
25
36
|
expect((_b = facetGroupHeader === null || facetGroupHeader === void 0 ? void 0 : facetGroupHeader.textContent) === null || _b === void 0 ? void 0 : _b.trim()).to.equal('Subject');
|
|
26
|
-
const titleFacetRow = titleFacetGroup === null || titleFacetGroup === void 0 ? void 0 : titleFacetGroup.querySelector('.facet-row');
|
|
27
|
-
|
|
37
|
+
const titleFacetRow = (_d = (_c = titleFacetGroup === null || titleFacetGroup === void 0 ? void 0 : titleFacetGroup.querySelector('facets-template')) === null || _c === void 0 ? void 0 : _c.shadowRoot) === null || _d === void 0 ? void 0 : _d.querySelector('.facet-row');
|
|
38
|
+
console.log(titleFacetGroup === null || titleFacetGroup === void 0 ? void 0 : titleFacetGroup.querySelector('facets-template'));
|
|
39
|
+
expect((_e = titleFacetRow === null || titleFacetRow === void 0 ? void 0 : titleFacetRow.textContent) === null || _e === void 0 ? void 0 : _e.trim()).to.satisfy((text) => /^foo\s*5$/.test(text));
|
|
28
40
|
});
|
|
29
41
|
it('renders multiple aggregation types', async () => {
|
|
30
42
|
var _a;
|
|
@@ -53,7 +65,7 @@ describe('Collection Facets', () => {
|
|
|
53
65
|
expect(facetGroups === null || facetGroups === void 0 ? void 0 : facetGroups.length).to.equal(2);
|
|
54
66
|
});
|
|
55
67
|
it('renders collection facets as links', async () => {
|
|
56
|
-
var _a, _b;
|
|
68
|
+
var _a, _b, _c, _d;
|
|
57
69
|
const el = await fixture(html `<collection-facets></collection-facets>`);
|
|
58
70
|
const aggs = {
|
|
59
71
|
'user_aggs__terms__field:collection__size:1': {
|
|
@@ -67,12 +79,12 @@ describe('Collection Facets', () => {
|
|
|
67
79
|
};
|
|
68
80
|
el.aggregations = aggs;
|
|
69
81
|
await el.updateComplete;
|
|
70
|
-
const collectionName = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('async-collection-name');
|
|
82
|
+
const collectionName = (_c = (_b = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('facets-template')) === null || _b === void 0 ? void 0 : _b.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('async-collection-name');
|
|
71
83
|
expect(collectionName === null || collectionName === void 0 ? void 0 : collectionName.parentElement).to.be.instanceOf(HTMLAnchorElement);
|
|
72
|
-
expect((
|
|
84
|
+
expect((_d = collectionName === null || collectionName === void 0 ? void 0 : collectionName.parentElement) === null || _d === void 0 ? void 0 : _d.getAttribute('href')).to.equal('/details/foo');
|
|
73
85
|
});
|
|
74
86
|
it('renders non-collection facets without links', async () => {
|
|
75
|
-
var _a;
|
|
87
|
+
var _a, _b, _c;
|
|
76
88
|
const el = await fixture(html `<collection-facets></collection-facets>`);
|
|
77
89
|
const aggs = {
|
|
78
90
|
'user_aggs__terms__field:subjectSorter__size:1': {
|
|
@@ -86,34 +98,87 @@ describe('Collection Facets', () => {
|
|
|
86
98
|
};
|
|
87
99
|
el.aggregations = aggs;
|
|
88
100
|
await el.updateComplete;
|
|
89
|
-
const collectionName = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('async-collection-name');
|
|
101
|
+
const collectionName = (_c = (_b = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('facets-template')) === null || _b === void 0 ? void 0 : _b.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('async-collection-name');
|
|
90
102
|
expect(collectionName === null || collectionName === void 0 ? void 0 : collectionName.parentElement).to.not.be.instanceOf(HTMLAnchorElement);
|
|
91
103
|
});
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
104
|
+
describe('More Facets', () => {
|
|
105
|
+
it('Does not render < allowedFacetCount', async () => {
|
|
106
|
+
var _a;
|
|
107
|
+
const el = await fixture(html `<collection-facets></collection-facets>`);
|
|
108
|
+
const aggs = {
|
|
109
|
+
'user_aggs__terms__field:subjectSorter__size:1': {
|
|
110
|
+
buckets: [
|
|
111
|
+
{
|
|
112
|
+
key: 'foo',
|
|
113
|
+
doc_count: 5,
|
|
114
|
+
},
|
|
115
|
+
],
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
el.aggregations = aggs;
|
|
119
|
+
await el.updateComplete;
|
|
120
|
+
const moreLink = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.more-link');
|
|
121
|
+
expect(moreLink).to.be.null;
|
|
122
|
+
});
|
|
123
|
+
it('Render More Facets', async () => {
|
|
124
|
+
var _a, _b;
|
|
125
|
+
const el = await fixture(html `<collection-facets
|
|
126
|
+
.modalManager=${new ModalManager()}
|
|
127
|
+
></collection-facets>`);
|
|
128
|
+
const aggs = {
|
|
129
|
+
'user_aggs__terms__field:subjectSorter__size:1': {
|
|
130
|
+
buckets: [
|
|
131
|
+
{
|
|
132
|
+
key: 'foo',
|
|
133
|
+
doc_count: 5,
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
key: 'fi',
|
|
137
|
+
doc_count: 5,
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
key: 'fum',
|
|
141
|
+
doc_count: 5,
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
key: 'flee',
|
|
145
|
+
doc_count: 5,
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
key: 'wheee',
|
|
149
|
+
doc_count: 5,
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
key: 'whooo',
|
|
153
|
+
doc_count: 5,
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
key: 'boop',
|
|
157
|
+
doc_count: 5,
|
|
158
|
+
},
|
|
159
|
+
],
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
el.aggregations = aggs;
|
|
163
|
+
await el.updateComplete;
|
|
164
|
+
let eventCaught = false;
|
|
165
|
+
let eventFacet = '';
|
|
166
|
+
el.addEventListener('showMoreFacets', e => {
|
|
167
|
+
eventFacet = e.detail;
|
|
168
|
+
eventCaught = true;
|
|
169
|
+
});
|
|
170
|
+
const moreLink = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.more-link');
|
|
171
|
+
expect(moreLink).to.exist; // has link
|
|
172
|
+
const showModalSpy = sinon.spy(el.modalManager, 'showModal');
|
|
173
|
+
// let's pop up modal
|
|
174
|
+
moreLink === null || moreLink === void 0 ? void 0 : moreLink.click();
|
|
175
|
+
await el.updateComplete;
|
|
176
|
+
expect(showModalSpy.callCount).to.equal(1);
|
|
177
|
+
expect((_b = el.modalManager) === null || _b === void 0 ? void 0 : _b.classList.contains('more-search-facets')).to.be
|
|
178
|
+
.true;
|
|
179
|
+
expect(eventCaught).to.be.true;
|
|
180
|
+
expect(eventFacet).to.equal('subject');
|
|
181
|
+
});
|
|
117
182
|
});
|
|
118
183
|
});
|
|
119
184
|
//# sourceMappingURL=collection-facets.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection-facets.test.js","sourceRoot":"","sources":["../../test/collection-facets.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-duplicates */\nimport { expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit';\nimport type { Aggregation } from '@internetarchive/search-service';\nimport type { CollectionFacets } from '../src/collection-facets';\nimport '../src/collection-facets';\n\ndescribe('Collection Facets', () => {\n it('renders aggregations as facets', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n 'user_aggs__terms__field:subjectSorter__size:1': {\n buckets: [\n {\n key: 'foo',\n doc_count: 5,\n },\n ],\n },\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n\n const facetGroups = el.shadowRoot?.querySelectorAll('.facet-group');\n expect(facetGroups?.length).to.equal(1);\n\n const titleFacetGroup = facetGroups?.[0];\n const facetGroupHeader = titleFacetGroup?.querySelector('h1');\n expect(facetGroupHeader?.textContent?.trim()).to.equal('Subject');\n\n const titleFacetRow = titleFacetGroup?.querySelector('.facet-row');\n expect(titleFacetRow?.textContent?.trim()).to.satisfy((text: string) =>\n /^foo\\s*5$/.test(text)\n );\n });\n\n it('renders multiple aggregation types', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n 'user_aggs__terms__field:subjectSorter__size:1': {\n buckets: [\n {\n key: 'foo',\n doc_count: 5,\n },\n ],\n },\n 'user_aggs__terms__field:mediatypeSorter__size:1': {\n buckets: [\n {\n key: 'bar',\n doc_count: 10,\n },\n ],\n },\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n\n const facetGroups = el.shadowRoot?.querySelectorAll('.facet-group');\n expect(facetGroups?.length).to.equal(2);\n });\n\n it('renders collection facets as links', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n 'user_aggs__terms__field:collection__size:1': {\n buckets: [\n {\n key: 'foo',\n doc_count: 5,\n },\n ],\n },\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n\n const collectionName = el.shadowRoot?.querySelector(\n 'async-collection-name'\n );\n expect(collectionName?.parentElement).to.be.instanceOf(HTMLAnchorElement);\n expect(collectionName?.parentElement?.getAttribute('href')).to.equal(\n '/details/foo'\n );\n });\n\n it('renders non-collection facets without links', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n 'user_aggs__terms__field:subjectSorter__size:1': {\n buckets: [\n {\n key: 'foo',\n doc_count: 5,\n },\n ],\n },\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n\n const collectionName = el.shadowRoot?.querySelector(\n 'async-collection-name'\n );\n expect(collectionName?.parentElement).to.not.be.instanceOf(\n HTMLAnchorElement\n );\n });\n\n it('toggles selected facets on click', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n 'user_aggs__terms__field:subjectSorter__size:1': {\n buckets: [\n {\n key: 'foo',\n doc_count: 5,\n },\n ],\n },\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n\n const checkbox = el.shadowRoot?.querySelector(\n '.select-facet-checkbox'\n ) as HTMLInputElement;\n expect(checkbox.checked).to.be.false;\n\n // Select the facet\n checkbox?.click();\n await el.updateComplete;\n\n expect(el.selectedFacets?.subject.foo).to.equal('selected');\n\n // Unselect the facet\n checkbox?.click();\n await el.updateComplete;\n\n expect(el.selectedFacets?.subject.foo).to.be.undefined;\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"collection-facets.test.js","sourceRoot":"","sources":["../../test/collection-facets.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-duplicates */\nimport { expect, fixture } from '@open-wc/testing';\nimport sinon from 'sinon';\nimport { html } from 'lit';\nimport type { Aggregation } from '@internetarchive/search-service';\nimport {\n ModalManager,\n ModalManagerInterface,\n} from '@internetarchive/modal-manager';\nimport type { CollectionFacets } from '../src/collection-facets';\nimport '@internetarchive/modal-manager';\nimport '../src/collection-facets';\nimport type { FacetOption } from '../src/models';\n\ndescribe('Collection Facets', () => {\n it('has loader', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets ?facetsLoading=${true}></collection-facets>`\n );\n\n expect(\n el.shadowRoot?.querySelector('#container')?.classList.contains('loading')\n ).to.be.true;\n\n el.facetsLoading = false;\n await el.updateComplete;\n\n expect(\n el.shadowRoot?.querySelector('#container')?.classList.contains('loading')\n ).to.be.false;\n });\n it('renders aggregations as facets', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n 'user_aggs__terms__field:subjectSorter__size:1': {\n buckets: [\n {\n key: 'foo',\n doc_count: 5,\n },\n ],\n },\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n const facetGroups = el.shadowRoot?.querySelectorAll('.facet-group');\n expect(facetGroups?.length).to.equal(1);\n\n const titleFacetGroup = facetGroups?.[0];\n const facetGroupHeader = titleFacetGroup?.querySelector('h1');\n expect(facetGroupHeader?.textContent?.trim()).to.equal('Subject');\n const titleFacetRow = titleFacetGroup\n ?.querySelector('facets-template')\n ?.shadowRoot?.querySelector('.facet-row');\n console.log(titleFacetGroup?.querySelector('facets-template'));\n expect(titleFacetRow?.textContent?.trim()).to.satisfy((text: string) =>\n /^foo\\s*5$/.test(text)\n );\n });\n\n it('renders multiple aggregation types', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n 'user_aggs__terms__field:subjectSorter__size:1': {\n buckets: [\n {\n key: 'foo',\n doc_count: 5,\n },\n ],\n },\n 'user_aggs__terms__field:mediatypeSorter__size:1': {\n buckets: [\n {\n key: 'bar',\n doc_count: 10,\n },\n ],\n },\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n\n const facetGroups = el.shadowRoot?.querySelectorAll('.facet-group');\n expect(facetGroups?.length).to.equal(2);\n });\n\n it('renders collection facets as links', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n 'user_aggs__terms__field:collection__size:1': {\n buckets: [\n {\n key: 'foo',\n doc_count: 5,\n },\n ],\n },\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n\n const collectionName = el.shadowRoot\n ?.querySelector('facets-template')\n ?.shadowRoot?.querySelector('async-collection-name');\n expect(collectionName?.parentElement).to.be.instanceOf(HTMLAnchorElement);\n expect(collectionName?.parentElement?.getAttribute('href')).to.equal(\n '/details/foo'\n );\n });\n\n it('renders non-collection facets without links', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n 'user_aggs__terms__field:subjectSorter__size:1': {\n buckets: [\n {\n key: 'foo',\n doc_count: 5,\n },\n ],\n },\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n\n const collectionName = el.shadowRoot\n ?.querySelector('facets-template')\n ?.shadowRoot?.querySelector('async-collection-name');\n expect(collectionName?.parentElement).to.not.be.instanceOf(\n HTMLAnchorElement\n );\n });\n\n describe('More Facets', () => {\n it('Does not render < allowedFacetCount', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n 'user_aggs__terms__field:subjectSorter__size:1': {\n buckets: [\n {\n key: 'foo',\n doc_count: 5,\n },\n ],\n },\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n\n const moreLink = el.shadowRoot?.querySelector('.more-link');\n expect(moreLink).to.be.null;\n });\n it('Render More Facets', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets\n .modalManager=${new ModalManager()}\n ></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n 'user_aggs__terms__field:subjectSorter__size:1': {\n buckets: [\n {\n key: 'foo',\n doc_count: 5,\n },\n {\n key: 'fi',\n doc_count: 5,\n },\n {\n key: 'fum',\n doc_count: 5,\n },\n {\n key: 'flee',\n doc_count: 5,\n },\n {\n key: 'wheee',\n doc_count: 5,\n },\n {\n key: 'whooo',\n doc_count: 5,\n },\n {\n key: 'boop',\n doc_count: 5,\n },\n ],\n },\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n\n let eventCaught = false;\n let eventFacet = '';\n el.addEventListener('showMoreFacets', e => {\n eventFacet = (e as CustomEvent).detail;\n eventCaught = true;\n });\n\n const moreLink = el.shadowRoot?.querySelector(\n '.more-link'\n ) as HTMLButtonElement;\n expect(moreLink).to.exist; // has link\n\n const showModalSpy = sinon.spy(\n el.modalManager as ModalManagerInterface,\n 'showModal'\n );\n // let's pop up modal\n moreLink?.click();\n await el.updateComplete;\n\n expect(showModalSpy.callCount).to.equal(1);\n expect(el.modalManager?.classList.contains('more-search-facets')).to.be\n .true;\n expect(eventCaught).to.be.true;\n expect(eventFacet).to.equal('subject' as FacetOption);\n });\n });\n});\n"]}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"description": "The Internet Archive Collection Browser.",
|
|
4
4
|
"license": "AGPL-3.0-only",
|
|
5
5
|
"author": "Internet Archive",
|
|
6
|
-
"version": "0.2.
|
|
6
|
+
"version": "0.2.22",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"module": "dist/index.js",
|
|
9
9
|
"scripts": {
|
|
@@ -22,23 +22,26 @@
|
|
|
22
22
|
},
|
|
23
23
|
"types": "dist/index.d.ts",
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@internetarchive/collection-name-cache": "^0.1.5",
|
|
26
25
|
"@internetarchive/analytics-manager": "^0.1.2",
|
|
26
|
+
"@internetarchive/collection-name-cache": "^0.1.5",
|
|
27
27
|
"@internetarchive/feature-feedback": "^0.1.4",
|
|
28
28
|
"@internetarchive/field-parsers": "^0.1.3",
|
|
29
29
|
"@internetarchive/histogram-date-range": "^0.1.7",
|
|
30
|
+
"@internetarchive/ia-activity-indicator": "^0.0.3",
|
|
30
31
|
"@internetarchive/infinite-scroller": "^0.1.3",
|
|
31
32
|
"@internetarchive/local-cache": "^0.2.1",
|
|
33
|
+
"@internetarchive/modal-manager": "^0.2.7",
|
|
32
34
|
"@internetarchive/search-service": "^0.3.5",
|
|
33
35
|
"@internetarchive/shared-resize-observer": "^0.2.0",
|
|
34
36
|
"@lit/localize": "^0.11.2",
|
|
35
37
|
"dompurify": "^2.3.6",
|
|
38
|
+
"eslint-plugin-lit": "^1.6.1",
|
|
36
39
|
"lit": "^2.2.2",
|
|
37
40
|
"typescript-cookie": "^1.0.3"
|
|
38
41
|
},
|
|
39
42
|
"devDependencies": {
|
|
40
43
|
"@internetarchive/result-type": "^0.0.1",
|
|
41
|
-
"@open-wc/eslint-config": "^
|
|
44
|
+
"@open-wc/eslint-config": "^8.0.2",
|
|
42
45
|
"@open-wc/testing": "^3.0.3",
|
|
43
46
|
"@types/dompurify": "^2.3.3",
|
|
44
47
|
"@typescript-eslint/eslint-plugin": "^5.3.1",
|
|
@@ -48,8 +51,10 @@
|
|
|
48
51
|
"concurrently": "^6.3.0",
|
|
49
52
|
"eslint": "^8.2.0",
|
|
50
53
|
"eslint-config-prettier": "^8.3.0",
|
|
54
|
+
"eslint-plugin-html": "^7.1.0",
|
|
51
55
|
"eslint-plugin-import": "^2.25.3",
|
|
52
56
|
"eslint-plugin-lit-a11y": "^2.2.0",
|
|
57
|
+
"eslint-plugin-no-only-tests": "^3.0.0",
|
|
53
58
|
"eslint-plugin-wc": "^1.3.2",
|
|
54
59
|
"gh-pages": "^4.0.0",
|
|
55
60
|
"husky": "^7.0.0",
|
|
@@ -91,7 +96,9 @@
|
|
|
91
96
|
"js": "never",
|
|
92
97
|
"ts": "never"
|
|
93
98
|
}
|
|
94
|
-
]
|
|
99
|
+
],
|
|
100
|
+
"no-unsafe-optional-chaining": "warn",
|
|
101
|
+
"default-param-last": "warn"
|
|
95
102
|
}
|
|
96
103
|
},
|
|
97
104
|
"prettier": {
|
package/src/app-root.ts
CHANGED
|
@@ -9,6 +9,7 @@ import { customElement, property, query, state } from 'lit/decorators.js';
|
|
|
9
9
|
import { SharedResizeObserver } from '@internetarchive/shared-resize-observer';
|
|
10
10
|
import { CollectionNameCache } from '@internetarchive/collection-name-cache';
|
|
11
11
|
|
|
12
|
+
import type { ModalManagerInterface } from '@internetarchive/modal-manager';
|
|
12
13
|
import type { AnalyticsManagerInterface } from '@internetarchive/analytics-manager';
|
|
13
14
|
import type { CollectionBrowser } from '../src/collection-browser';
|
|
14
15
|
|
|
@@ -49,6 +50,8 @@ export class AppRoot extends LitElement {
|
|
|
49
50
|
|
|
50
51
|
@query('collection-browser') private collectionBrowser!: CollectionBrowser;
|
|
51
52
|
|
|
53
|
+
@query('modal-manager') private modalManager!: ModalManagerInterface;
|
|
54
|
+
|
|
52
55
|
private analyticsManager = new AnalyticsManager();
|
|
53
56
|
|
|
54
57
|
private analyticsHandler: AnalyticsManagerInterface = {
|
|
@@ -120,7 +123,7 @@ export class AppRoot extends LitElement {
|
|
|
120
123
|
>
|
|
121
124
|
Last Event Captured
|
|
122
125
|
</button>
|
|
123
|
-
<pre id="latest-event-details">
|
|
126
|
+
<pre id="latest-event-details" class="hidden">
|
|
124
127
|
${JSON.stringify(this.latestAction, null, 2)}
|
|
125
128
|
</pre
|
|
126
129
|
>
|
|
@@ -219,12 +222,14 @@ export class AppRoot extends LitElement {
|
|
|
219
222
|
.collectionNameCache=${this.collectionNameCache}
|
|
220
223
|
.showHistogramDatePicker=${true}
|
|
221
224
|
.loggedIn=${this.loggedIn}
|
|
225
|
+
.modalManager=${this.modalManager}
|
|
222
226
|
.analyticsHandler=${this.analyticsHandler}
|
|
223
227
|
@visiblePageChanged=${this.visiblePageChanged}
|
|
224
228
|
@baseQueryChanged=${this.baseQueryChanged}
|
|
225
229
|
>
|
|
226
230
|
</collection-browser>
|
|
227
231
|
</div>
|
|
232
|
+
<modal-manager></modal-manager>
|
|
228
233
|
`;
|
|
229
234
|
}
|
|
230
235
|
|
|
@@ -293,7 +298,9 @@ export class AppRoot extends LitElement {
|
|
|
293
298
|
this.searchQuery = ''; // Should just reset to the placeholder
|
|
294
299
|
await this.updateComplete;
|
|
295
300
|
// For unclear reasons, Safari refuses to re-apply the old query until the next tick, hence:
|
|
296
|
-
await new Promise(res =>
|
|
301
|
+
await new Promise(res => {
|
|
302
|
+
setTimeout(res, 0);
|
|
303
|
+
});
|
|
297
304
|
this.searchQuery = oldQuery; // Re-apply the original query
|
|
298
305
|
}
|
|
299
306
|
|
|
@@ -346,16 +353,39 @@ export class AppRoot extends LitElement {
|
|
|
346
353
|
static styles = css`
|
|
347
354
|
:host {
|
|
348
355
|
display: block;
|
|
356
|
+
--primaryButtonBGColor: #194880;
|
|
349
357
|
--ia-theme-link-color: #4b64ff;
|
|
350
358
|
}
|
|
351
359
|
|
|
360
|
+
/* add the following styles to ensure proper modal visibility */
|
|
361
|
+
body.modal-manager-open {
|
|
362
|
+
overflow: hidden;
|
|
363
|
+
}
|
|
364
|
+
modal-manager {
|
|
365
|
+
display: none;
|
|
366
|
+
}
|
|
367
|
+
modal-manager[mode='open'] {
|
|
368
|
+
display: block;
|
|
369
|
+
}
|
|
370
|
+
modal-manager.more-search-facets {
|
|
371
|
+
--modalWidth: 85rem;
|
|
372
|
+
--modalBorder: 2px solid var(--primaryButtonBGColor, #194880);
|
|
373
|
+
--modalTitleLineHeight: 4rem;
|
|
374
|
+
--modalTitleFontSize: 1.8rem;
|
|
375
|
+
--modalCornerRadius: 0;
|
|
376
|
+
--modalBottomPadding: 0;
|
|
377
|
+
--modalBottomMargin: 0;
|
|
378
|
+
--modalScrollOffset: 0;
|
|
379
|
+
--modalCornerRadius: 0.5rem;
|
|
380
|
+
}
|
|
381
|
+
|
|
352
382
|
input,
|
|
353
383
|
button {
|
|
354
384
|
font-size: 1.6rem;
|
|
355
385
|
}
|
|
356
386
|
|
|
357
387
|
collection-browser {
|
|
358
|
-
margin-top:
|
|
388
|
+
margin-top: 20rem;
|
|
359
389
|
}
|
|
360
390
|
|
|
361
391
|
#base-query-field {
|
|
@@ -366,7 +396,7 @@ export class AppRoot extends LitElement {
|
|
|
366
396
|
position: fixed;
|
|
367
397
|
top: 0;
|
|
368
398
|
left: 0;
|
|
369
|
-
z-index:
|
|
399
|
+
z-index: 1;
|
|
370
400
|
-webkit-backdrop-filter: blur(10px);
|
|
371
401
|
backdrop-filter: blur(10px);
|
|
372
402
|
padding: 0.5rem 1rem;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { svg } from 'lit';
|
|
2
|
+
|
|
3
|
+
export default svg`
|
|
4
|
+
<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
|
|
5
|
+
<path
|
|
6
|
+
d="m20.1116715 50.0035012-.1116715-.1085359 43.1159942-46.61088155c2.401537-2.18938917 4.6902018-3.28408375 6.8659943-3.28408375s4.1642651.63837733 5.9654178 1.91513199c1.8011528 1.27675467 3.1520173 2.97248092 4.0525937 5.08717877l-39.4020173 42.99768924 39.4020173 42.9976892c-.9005764 2.1146979-2.2514409 3.8104241-4.0525937 5.0871788-1.8011527 1.2767547-3.7896253 1.915132-5.9654178 1.915132-2.1013449 0-4.3900096-1.0573489-6.8659943-3.1720468l-43.1159942-46.7194174z"
|
|
7
|
+
/>
|
|
8
|
+
<title>Go left icon</title>
|
|
9
|
+
</svg>
|
|
10
|
+
`;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { svg } from 'lit';
|
|
2
|
+
|
|
3
|
+
export default svg`
|
|
4
|
+
<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
|
|
5
|
+
<path
|
|
6
|
+
d="m79.8883285 50.0035012.1116715-.1085359-43.1159942-46.61088155c-2.401537-2.18938917-4.6902018-3.28408375-6.8659943-3.28408375s-4.1642651.63837733-5.9654178 1.91513199c-1.8011528 1.27675467-3.1520173 2.97248092-4.0525937 5.08717877l39.4020173 42.99768924-39.4020173 42.9976892c.9005764 2.1146979 2.2514409 3.8104241 4.0525937 5.0871788 1.8011527 1.2767547 3.7896253 1.915132 5.9654178 1.915132 2.1013449 0 4.3900096-1.0573489 6.8659943-3.1720468l43.1159942-46.7194174z"
|
|
7
|
+
/>
|
|
8
|
+
<title>Go right icon</title>
|
|
9
|
+
</svg>
|
|
10
|
+
`;
|
|
@@ -29,6 +29,7 @@ import type {
|
|
|
29
29
|
} from '@internetarchive/shared-resize-observer';
|
|
30
30
|
import '@internetarchive/infinite-scroller';
|
|
31
31
|
import type { CollectionNameCacheInterface } from '@internetarchive/collection-name-cache';
|
|
32
|
+
import type { ModalManagerInterface } from '@internetarchive/modal-manager';
|
|
32
33
|
import './tiles/tile-dispatcher';
|
|
33
34
|
import './tiles/collection-browser-loading-tile';
|
|
34
35
|
import './sort-filter-bar/sort-filter-bar';
|
|
@@ -127,6 +128,8 @@ export class CollectionBrowser
|
|
|
127
128
|
|
|
128
129
|
@property({ type: Boolean }) loggedIn = false;
|
|
129
130
|
|
|
131
|
+
@property({ type: Object }) modalManager?: ModalManagerInterface = undefined;
|
|
132
|
+
|
|
130
133
|
/**
|
|
131
134
|
* If item management UI active
|
|
132
135
|
*/
|
|
@@ -507,6 +510,7 @@ export class CollectionBrowser
|
|
|
507
510
|
<collection-facets
|
|
508
511
|
@facetsChanged=${this.facetsChanged}
|
|
509
512
|
@histogramDateRangeUpdated=${this.histogramDateRangeUpdated}
|
|
513
|
+
.searchService=${this.searchService}
|
|
510
514
|
.aggregations=${this.aggregations}
|
|
511
515
|
.fullYearsHistogramAggregation=${this.fullYearsHistogramAggregation}
|
|
512
516
|
.minSelectedDate=${this.minSelectedDate}
|
|
@@ -515,6 +519,8 @@ export class CollectionBrowser
|
|
|
515
519
|
.collectionNameCache=${this.collectionNameCache}
|
|
516
520
|
.languageCodeHandler=${this.languageCodeHandler}
|
|
517
521
|
.showHistogramDatePicker=${this.showHistogramDatePicker}
|
|
522
|
+
.fullQuery=${this.fullQuery}
|
|
523
|
+
.modalManager=${this.modalManager}
|
|
518
524
|
?collapsableFacets=${this.mobileView}
|
|
519
525
|
?facetsLoading=${this.facetDataLoading}
|
|
520
526
|
?fullYearAggregationLoading=${this.fullYearAggregationLoading}
|
|
@@ -853,8 +859,8 @@ export class CollectionBrowser
|
|
|
853
859
|
// eslint-disable-next-line no-continue
|
|
854
860
|
if (facetEntries.length === 0) continue;
|
|
855
861
|
const facetValuesArray: string[] = [];
|
|
856
|
-
for (const [key,
|
|
857
|
-
const plusMinusPrefix =
|
|
862
|
+
for (const [key, facetData] of facetEntries) {
|
|
863
|
+
const plusMinusPrefix = facetData.state === 'hidden' ? '-' : '';
|
|
858
864
|
|
|
859
865
|
if (facetName === 'language') {
|
|
860
866
|
const languages =
|
|
@@ -1351,6 +1357,7 @@ export class CollectionBrowser
|
|
|
1351
1357
|
|
|
1352
1358
|
#left-column {
|
|
1353
1359
|
width: 18rem;
|
|
1360
|
+
min-width: 18rem; /* Prevents Safari from shrinking col at first draw */
|
|
1354
1361
|
padding-right: 12px;
|
|
1355
1362
|
padding-right: 1rem;
|
|
1356
1363
|
}
|