@internetarchive/collection-browser 0.4.8 → 0.4.9-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/.editorconfig +29 -29
  2. package/.github/workflows/ci.yml +26 -26
  3. package/.github/workflows/gh-pages-main.yml +39 -39
  4. package/.github/workflows/npm-publish.yml +39 -39
  5. package/.github/workflows/pr-preview.yml +38 -38
  6. package/.husky/pre-commit +4 -4
  7. package/LICENSE +661 -661
  8. package/README.md +83 -83
  9. package/dist/index.d.ts +9 -9
  10. package/dist/index.js +9 -9
  11. package/dist/src/app-root.d.ts +50 -50
  12. package/dist/src/app-root.js +278 -278
  13. package/dist/src/assets/img/icons/arrow-left.d.ts +2 -2
  14. package/dist/src/assets/img/icons/arrow-left.js +2 -2
  15. package/dist/src/assets/img/icons/arrow-right.d.ts +2 -2
  16. package/dist/src/assets/img/icons/arrow-right.js +2 -2
  17. package/dist/src/assets/img/icons/chevron.d.ts +2 -2
  18. package/dist/src/assets/img/icons/chevron.js +2 -2
  19. package/dist/src/assets/img/icons/empty-query.d.ts +2 -2
  20. package/dist/src/assets/img/icons/empty-query.js +2 -2
  21. package/dist/src/assets/img/icons/eye-closed.d.ts +2 -2
  22. package/dist/src/assets/img/icons/eye-closed.js +2 -2
  23. package/dist/src/assets/img/icons/eye.d.ts +2 -2
  24. package/dist/src/assets/img/icons/eye.js +2 -2
  25. package/dist/src/assets/img/icons/favorite-filled.d.ts +1 -1
  26. package/dist/src/assets/img/icons/favorite-filled.js +2 -2
  27. package/dist/src/assets/img/icons/login-required.d.ts +1 -1
  28. package/dist/src/assets/img/icons/login-required.js +2 -2
  29. package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -1
  30. package/dist/src/assets/img/icons/mediatype/account.js +2 -2
  31. package/dist/src/assets/img/icons/mediatype/audio.d.ts +1 -1
  32. package/dist/src/assets/img/icons/mediatype/audio.js +2 -2
  33. package/dist/src/assets/img/icons/mediatype/collection.d.ts +1 -1
  34. package/dist/src/assets/img/icons/mediatype/collection.js +2 -2
  35. package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -1
  36. package/dist/src/assets/img/icons/mediatype/data.js +2 -2
  37. package/dist/src/assets/img/icons/mediatype/etree.d.ts +1 -1
  38. package/dist/src/assets/img/icons/mediatype/etree.js +2 -2
  39. package/dist/src/assets/img/icons/mediatype/film.d.ts +1 -1
  40. package/dist/src/assets/img/icons/mediatype/film.js +2 -2
  41. package/dist/src/assets/img/icons/mediatype/images.d.ts +1 -1
  42. package/dist/src/assets/img/icons/mediatype/images.js +2 -2
  43. package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -1
  44. package/dist/src/assets/img/icons/mediatype/radio.js +2 -2
  45. package/dist/src/assets/img/icons/mediatype/software.d.ts +1 -1
  46. package/dist/src/assets/img/icons/mediatype/software.js +2 -2
  47. package/dist/src/assets/img/icons/mediatype/texts.d.ts +1 -1
  48. package/dist/src/assets/img/icons/mediatype/texts.js +2 -2
  49. package/dist/src/assets/img/icons/mediatype/tv.d.ts +1 -1
  50. package/dist/src/assets/img/icons/mediatype/tv.js +2 -2
  51. package/dist/src/assets/img/icons/mediatype/video.d.ts +1 -1
  52. package/dist/src/assets/img/icons/mediatype/video.js +2 -2
  53. package/dist/src/assets/img/icons/mediatype/web.d.ts +1 -1
  54. package/dist/src/assets/img/icons/mediatype/web.js +2 -2
  55. package/dist/src/assets/img/icons/null-result.d.ts +2 -2
  56. package/dist/src/assets/img/icons/null-result.js +2 -2
  57. package/dist/src/assets/img/icons/restricted.d.ts +1 -1
  58. package/dist/src/assets/img/icons/restricted.js +2 -2
  59. package/dist/src/assets/img/icons/reviews.d.ts +1 -1
  60. package/dist/src/assets/img/icons/reviews.js +2 -2
  61. package/dist/src/assets/img/icons/upload.d.ts +1 -1
  62. package/dist/src/assets/img/icons/upload.js +2 -2
  63. package/dist/src/assets/img/icons/views.d.ts +1 -1
  64. package/dist/src/assets/img/icons/views.js +2 -2
  65. package/dist/src/circular-activity-indicator.d.ts +5 -5
  66. package/dist/src/circular-activity-indicator.js +17 -17
  67. package/dist/src/collection-browser.d.ts +281 -277
  68. package/dist/src/collection-browser.js +1200 -1194
  69. package/dist/src/collection-browser.js.map +1 -1
  70. package/dist/src/collection-facets/facet-tombstone-row.d.ts +5 -5
  71. package/dist/src/collection-facets/facet-tombstone-row.js +15 -15
  72. package/dist/src/collection-facets/facets-template.d.ts +16 -16
  73. package/dist/src/collection-facets/facets-template.js +125 -125
  74. package/dist/src/collection-facets/more-facets-content.d.ts +77 -77
  75. package/dist/src/collection-facets/more-facets-content.js +357 -357
  76. package/dist/src/collection-facets/more-facets-pagination.d.ts +36 -36
  77. package/dist/src/collection-facets/more-facets-pagination.js +192 -192
  78. package/dist/src/collection-facets.d.ts +83 -77
  79. package/dist/src/collection-facets.js +402 -384
  80. package/dist/src/collection-facets.js.map +1 -1
  81. package/dist/src/empty-placeholder.d.ts +11 -11
  82. package/dist/src/empty-placeholder.js +42 -42
  83. package/dist/src/language-code-handler/language-code-handler.d.ts +37 -37
  84. package/dist/src/language-code-handler/language-code-handler.js +26 -26
  85. package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -1
  86. package/dist/src/language-code-handler/language-code-mapping.js +562 -562
  87. package/dist/src/mediatype/mediatype-config.d.ts +3 -3
  88. package/dist/src/mediatype/mediatype-config.js +85 -85
  89. package/dist/src/models.d.ts +114 -114
  90. package/dist/src/models.js +125 -125
  91. package/dist/src/restoration-state-handler.d.ts +45 -45
  92. package/dist/src/restoration-state-handler.js +230 -230
  93. package/dist/src/sort-filter-bar/alpha-bar.d.ts +12 -12
  94. package/dist/src/sort-filter-bar/alpha-bar.js +52 -52
  95. package/dist/src/sort-filter-bar/img/compact.d.ts +1 -1
  96. package/dist/src/sort-filter-bar/img/compact.js +2 -2
  97. package/dist/src/sort-filter-bar/img/list.d.ts +1 -1
  98. package/dist/src/sort-filter-bar/img/list.js +2 -2
  99. package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -1
  100. package/dist/src/sort-filter-bar/img/sort-triangle.js +2 -2
  101. package/dist/src/sort-filter-bar/img/tile.d.ts +1 -1
  102. package/dist/src/sort-filter-bar/img/tile.js +2 -2
  103. package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +108 -108
  104. package/dist/src/sort-filter-bar/sort-filter-bar.js +438 -438
  105. package/dist/src/styles/item-image-styles.d.ts +8 -8
  106. package/dist/src/styles/item-image-styles.js +9 -9
  107. package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -5
  108. package/dist/src/tiles/collection-browser-loading-tile.js +15 -15
  109. package/dist/src/tiles/grid/account-tile.d.ts +17 -17
  110. package/dist/src/tiles/grid/account-tile.js +46 -46
  111. package/dist/src/tiles/grid/collection-tile.d.ts +14 -14
  112. package/dist/src/tiles/grid/collection-tile.js +53 -53
  113. package/dist/src/tiles/grid/item-tile.d.ts +29 -29
  114. package/dist/src/tiles/grid/item-tile.js +108 -108
  115. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.d.ts +1 -1
  116. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js +7 -7
  117. package/dist/src/tiles/grid/tile-stats.d.ts +10 -10
  118. package/dist/src/tiles/grid/tile-stats.js +40 -40
  119. package/dist/src/tiles/hover/hover-pane-controller.d.ts +197 -197
  120. package/dist/src/tiles/hover/hover-pane-controller.js +331 -331
  121. package/dist/src/tiles/hover/tile-hover-pane.d.ts +15 -15
  122. package/dist/src/tiles/hover/tile-hover-pane.js +38 -38
  123. package/dist/src/tiles/image-block.d.ts +17 -17
  124. package/dist/src/tiles/image-block.js +72 -72
  125. package/dist/src/tiles/item-image.d.ts +35 -35
  126. package/dist/src/tiles/item-image.js +117 -117
  127. package/dist/src/tiles/list/account-label.d.ts +1 -1
  128. package/dist/src/tiles/list/account-label.js +6 -6
  129. package/dist/src/tiles/list/date-label.d.ts +1 -1
  130. package/dist/src/tiles/list/date-label.js +12 -12
  131. package/dist/src/tiles/list/tile-list-compact-header.d.ts +12 -12
  132. package/dist/src/tiles/list/tile-list-compact-header.js +41 -41
  133. package/dist/src/tiles/list/tile-list-compact.d.ts +21 -21
  134. package/dist/src/tiles/list/tile-list-compact.js +99 -99
  135. package/dist/src/tiles/list/tile-list.d.ts +55 -55
  136. package/dist/src/tiles/list/tile-list.js +297 -297
  137. package/dist/src/tiles/mediatype-icon.d.ts +9 -9
  138. package/dist/src/tiles/mediatype-icon.js +47 -47
  139. package/dist/src/tiles/overlay/icon-overlay.d.ts +10 -10
  140. package/dist/src/tiles/overlay/icon-overlay.js +40 -40
  141. package/dist/src/tiles/overlay/icon-text-overlay.d.ts +9 -9
  142. package/dist/src/tiles/overlay/icon-text-overlay.js +38 -38
  143. package/dist/src/tiles/overlay/text-overlay.d.ts +10 -10
  144. package/dist/src/tiles/overlay/text-overlay.js +42 -42
  145. package/dist/src/tiles/text-snippet-block.d.ts +27 -27
  146. package/dist/src/tiles/text-snippet-block.js +73 -73
  147. package/dist/src/tiles/tile-dispatcher.d.ts +55 -55
  148. package/dist/src/tiles/tile-dispatcher.js +176 -176
  149. package/dist/src/utils/analytics-events.d.ts +22 -22
  150. package/dist/src/utils/analytics-events.js +24 -24
  151. package/dist/src/utils/format-count.d.ts +7 -7
  152. package/dist/src/utils/format-count.js +76 -76
  153. package/dist/src/utils/format-date.d.ts +2 -2
  154. package/dist/src/utils/format-date.js +23 -23
  155. package/dist/src/utils/format-unit-size.d.ts +2 -2
  156. package/dist/src/utils/format-unit-size.js +33 -33
  157. package/dist/test/collection-browser.test.d.ts +1 -1
  158. package/dist/test/collection-browser.test.js +584 -584
  159. package/dist/test/collection-facets/facets-template.test.d.ts +1 -1
  160. package/dist/test/collection-facets/facets-template.test.js +62 -62
  161. package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -1
  162. package/dist/test/collection-facets/more-facets-content.test.js +114 -114
  163. package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -1
  164. package/dist/test/collection-facets/more-facets-pagination.test.js +117 -117
  165. package/dist/test/collection-facets.test.d.ts +2 -2
  166. package/dist/test/collection-facets.test.js +508 -508
  167. package/dist/test/empty-placeholder.test.d.ts +1 -1
  168. package/dist/test/empty-placeholder.test.js +33 -33
  169. package/dist/test/icon-overlay.test.d.ts +1 -1
  170. package/dist/test/icon-overlay.test.js +24 -24
  171. package/dist/test/image-block.test.d.ts +1 -1
  172. package/dist/test/image-block.test.js +48 -48
  173. package/dist/test/item-image.test.d.ts +1 -1
  174. package/dist/test/item-image.test.js +84 -84
  175. package/dist/test/mediatype-config.test.d.ts +1 -1
  176. package/dist/test/mediatype-config.test.js +16 -16
  177. package/dist/test/mocks/mock-analytics-handler.d.ts +10 -10
  178. package/dist/test/mocks/mock-analytics-handler.js +15 -15
  179. package/dist/test/mocks/mock-collection-name-cache.d.ts +7 -7
  180. package/dist/test/mocks/mock-collection-name-cache.js +13 -13
  181. package/dist/test/mocks/mock-search-responses.d.ts +12 -12
  182. package/dist/test/mocks/mock-search-responses.js +341 -341
  183. package/dist/test/mocks/mock-search-service.d.ts +13 -13
  184. package/dist/test/mocks/mock-search-service.js +40 -40
  185. package/dist/test/restoration-state-handler.test.d.ts +1 -1
  186. package/dist/test/restoration-state-handler.test.js +125 -125
  187. package/dist/test/sort-filter-bar/alpha-bar.test.d.ts +1 -1
  188. package/dist/test/sort-filter-bar/alpha-bar.test.js +43 -43
  189. package/dist/test/sort-filter-bar/sort-filter-bar.test.d.ts +1 -1
  190. package/dist/test/sort-filter-bar/sort-filter-bar.test.js +197 -197
  191. package/dist/test/text-overlay.test.d.ts +1 -1
  192. package/dist/test/text-overlay.test.js +48 -48
  193. package/dist/test/text-snippet-block.test.d.ts +1 -1
  194. package/dist/test/text-snippet-block.test.js +57 -57
  195. package/dist/test/tile-stats.test.d.ts +1 -1
  196. package/dist/test/tile-stats.test.js +33 -33
  197. package/dist/test/tiles/grid/account-tile.test.d.ts +1 -1
  198. package/dist/test/tiles/grid/account-tile.test.js +60 -60
  199. package/dist/test/tiles/grid/collection-tile.test.d.ts +1 -1
  200. package/dist/test/tiles/grid/collection-tile.test.js +57 -57
  201. package/dist/test/tiles/grid/item-tile.test.d.ts +1 -1
  202. package/dist/test/tiles/grid/item-tile.test.js +142 -142
  203. package/dist/test/tiles/hover/hover-pane-controller.test.d.ts +1 -1
  204. package/dist/test/tiles/hover/hover-pane-controller.test.js +257 -257
  205. package/dist/test/tiles/hover/tile-hover-pane.test.d.ts +1 -1
  206. package/dist/test/tiles/hover/tile-hover-pane.test.js +13 -13
  207. package/dist/test/tiles/list/tile-list-compact.test.d.ts +1 -1
  208. package/dist/test/tiles/list/tile-list-compact.test.js +92 -92
  209. package/dist/test/tiles/list/tile-list.test.d.ts +1 -1
  210. package/dist/test/tiles/list/tile-list.test.js +163 -163
  211. package/dist/test/utils/format-count.test.d.ts +1 -1
  212. package/dist/test/utils/format-count.test.js +23 -23
  213. package/dist/test/utils/format-date.test.d.ts +1 -1
  214. package/dist/test/utils/format-date.test.js +17 -17
  215. package/dist/test/utils/format-unit-size.test.d.ts +1 -1
  216. package/dist/test/utils/format-unit-size.test.js +17 -17
  217. package/local.archive.org.cert +86 -86
  218. package/local.archive.org.key +27 -27
  219. package/package.json +1 -1
  220. package/renovate.json +6 -6
  221. package/src/collection-browser.ts +7 -0
  222. package/src/collection-facets.ts +22 -1
  223. package/tsconfig.json +21 -21
  224. package/web-dev-server.config.mjs +30 -30
  225. package/web-test-runner.config.mjs +41 -41
@@ -1,36 +1,36 @@
1
- import { CSSResultGroup, LitElement, TemplateResult } from 'lit';
2
- export declare class MoreFacetsPagination extends LitElement {
3
- /**
4
- * Total number of pages
5
- */
6
- size: number;
7
- /**
8
- * Number of pages can be moved in back/forward
9
- */
10
- step: number;
11
- currentPage: number;
12
- pages?: number[];
13
- firstUpdated(): void;
14
- updated(changed: Map<string, any>): void;
15
- /** creates `this.pages` array that notes which pages to draw
16
- * - `0` is elipses marker
17
- * - rule: selected page is centered between -2/+2 pages
18
- * - outlier: first page selected, show _1_ 2 3 ... N
19
- * - outlier: second page selected, show 1 _2_ 3 4 ... N
20
- * - outlier: last page selected, show 1 ... N-2 N-1 _N_
21
- * - outlier: if page count = 7, & selected is either [2, 3, 4, 5, 6], show all pages
22
- */
23
- observePageCount(): void;
24
- private createFirstNode;
25
- private createMiddelNode;
26
- private createLastNode;
27
- private get getEllipsisTemplate();
28
- emitPageClick(): void;
29
- private onRewind;
30
- private onForward;
31
- private onChange;
32
- private getPageTemplate;
33
- private get getPagesTemplate();
34
- render(): TemplateResult<1>;
35
- static get styles(): CSSResultGroup;
36
- }
1
+ import { CSSResultGroup, LitElement, TemplateResult } from 'lit';
2
+ export declare class MoreFacetsPagination extends LitElement {
3
+ /**
4
+ * Total number of pages
5
+ */
6
+ size: number;
7
+ /**
8
+ * Number of pages can be moved in back/forward
9
+ */
10
+ step: number;
11
+ currentPage: number;
12
+ pages?: number[];
13
+ firstUpdated(): void;
14
+ updated(changed: Map<string, any>): void;
15
+ /** creates `this.pages` array that notes which pages to draw
16
+ * - `0` is elipses marker
17
+ * - rule: selected page is centered between -2/+2 pages
18
+ * - outlier: first page selected, show _1_ 2 3 ... N
19
+ * - outlier: second page selected, show 1 _2_ 3 4 ... N
20
+ * - outlier: last page selected, show 1 ... N-2 N-1 _N_
21
+ * - outlier: if page count = 7, & selected is either [2, 3, 4, 5, 6], show all pages
22
+ */
23
+ observePageCount(): void;
24
+ private createFirstNode;
25
+ private createMiddelNode;
26
+ private createLastNode;
27
+ private get getEllipsisTemplate();
28
+ emitPageClick(): void;
29
+ private onRewind;
30
+ private onForward;
31
+ private onChange;
32
+ private getPageTemplate;
33
+ private get getPagesTemplate();
34
+ render(): TemplateResult<1>;
35
+ static get styles(): CSSResultGroup;
36
+ }
@@ -1,161 +1,161 @@
1
- import { __decorate } from "tslib";
2
- import { css, html, LitElement, nothing, } from 'lit';
3
- import { customElement, property, state } from 'lit/decorators.js';
4
- import arrowLeftIcon from '../assets/img/icons/arrow-left';
5
- import arrowRightIcon from '../assets/img/icons/arrow-right';
6
- let MoreFacetsPagination = class MoreFacetsPagination extends LitElement {
7
- constructor() {
8
- super(...arguments);
9
- /**
10
- * Number of pages can be moved in back/forward
11
- */
12
- this.step = 2;
13
- this.currentPage = 1;
14
- this.pages = [];
15
- }
16
- firstUpdated() {
17
- this.observePageCount();
18
- }
19
- updated(changed) {
20
- if (changed.has('size')) {
21
- this.observePageCount();
22
- }
23
- if (changed.has('currentPage')) {
24
- this.observePageCount();
25
- this.emitPageClick();
26
- }
27
- }
28
- /** creates `this.pages` array that notes which pages to draw
29
- * - `0` is elipses marker
30
- * - rule: selected page is centered between -2/+2 pages
31
- * - outlier: first page selected, show _1_ 2 3 ... N
32
- * - outlier: second page selected, show 1 _2_ 3 4 ... N
33
- * - outlier: last page selected, show 1 ... N-2 N-1 _N_
34
- * - outlier: if page count = 7, & selected is either [2, 3, 4, 5, 6], show all pages
35
- */
36
- observePageCount() {
37
- this.pages = []; /* `0` is elipses marker */
38
- const paginatorMaxPagesToShow = 7;
39
- const atMinThreshold = this.size <= paginatorMaxPagesToShow;
40
- /** Display outliers */
41
- if (this.size <= 5) {
42
- // display all pages
43
- this.pages = [...Array(this.size).keys()].map(i => i + 1);
44
- return;
45
- }
46
- if (this.size === paginatorMaxPagesToShow) {
47
- // edge: 7 pages
48
- if (this.currentPage === 2) {
49
- this.pages = [1, 2, 3, 4, 0, this.size];
50
- return;
51
- }
52
- if (this.currentPage === this.size - 1) {
53
- this.pages = [1, 0, 4, 5, this.size - 1, this.size];
54
- return;
55
- }
56
- }
57
- if (this.currentPage === 1) {
58
- // first page
59
- this.pages = [1, 2, 3, 0, this.size];
60
- return;
61
- }
62
- if (this.currentPage === this.size) {
63
- // last page
64
- this.pages = [1, 0, this.size - 2, this.size - 1, this.size];
65
- return;
66
- }
67
- if (this.currentPage === this.size - 1) {
68
- // second last page
69
- this.pages = [
70
- 1,
71
- 0,
72
- this.size - 3,
73
- this.size - 2,
74
- this.size - 1,
75
- this.size,
76
- ];
77
- return;
78
- }
79
- if (atMinThreshold &&
80
- this.currentPage > 1 &&
81
- this.currentPage < paginatorMaxPagesToShow) {
82
- this.pages = [...Array(this.size).keys()].map(i => i + 1);
83
- return;
84
- }
85
- /* The rest here calculates the range to display in "page window" */
86
- let startPage = this.currentPage - this.step;
87
- let endPage = this.currentPage + this.step;
88
- if (startPage <= 0) {
89
- endPage += -startPage + 1;
90
- startPage = 1;
91
- }
92
- if (endPage >= this.size) {
93
- startPage = Math.max(startPage - (endPage - this.size), 1);
94
- endPage = this.size;
95
- }
96
- if (startPage === 2) {
97
- endPage -= 1;
98
- }
99
- if (endPage === this.size - 1) {
100
- startPage += 1;
101
- }
102
- // create first page node
103
- this.createFirstNode(startPage);
104
- // create middle pages node
105
- this.createMiddelNode(startPage, endPage);
106
- // create last page node
107
- this.createLastNode(endPage);
108
- }
109
- createFirstNode(startPage) {
110
- var _a, _b;
111
- if (startPage > 1) {
112
- (_a = this.pages) === null || _a === void 0 ? void 0 : _a.push(1);
113
- }
114
- if (startPage > 2) {
115
- (_b = this.pages) === null || _b === void 0 ? void 0 : _b.push(0); // let's asssume 0 is for ellipsis template
116
- }
117
- }
118
- createMiddelNode(startPage, endPage) {
119
- var _a;
120
- for (let page = startPage; page <= endPage; page += 1) {
121
- (_a = this.pages) === null || _a === void 0 ? void 0 : _a.push(page);
122
- }
123
- }
124
- createLastNode(endPage) {
125
- var _a, _b;
126
- if (endPage < this.size - 1) {
127
- (_a = this.pages) === null || _a === void 0 ? void 0 : _a.push(0); // let's asssume 0 is for ellipsis template
128
- }
129
- if (endPage < this.size) {
130
- (_b = this.pages) === null || _b === void 0 ? void 0 : _b.push(this.size);
131
- }
132
- }
133
- get getEllipsisTemplate() {
134
- return html `<i class="ellipses">...</i>`;
135
- }
136
- emitPageClick() {
137
- this.dispatchEvent(new CustomEvent('pageNumberClicked', {
138
- detail: { page: this.currentPage },
139
- bubbles: true,
140
- composed: true,
141
- }));
142
- }
143
- onRewind() {
144
- this.currentPage -= 1;
145
- if (this.currentPage < 1) {
146
- this.currentPage = 1;
147
- }
148
- }
149
- onForward() {
150
- this.currentPage += 1;
151
- if (this.currentPage > this.size) {
152
- this.currentPage = this.size;
153
- }
154
- }
155
- onChange(page) {
156
- this.currentPage = page;
157
- }
158
- getPageTemplate(page) {
1
+ import { __decorate } from "tslib";
2
+ import { css, html, LitElement, nothing, } from 'lit';
3
+ import { customElement, property, state } from 'lit/decorators.js';
4
+ import arrowLeftIcon from '../assets/img/icons/arrow-left';
5
+ import arrowRightIcon from '../assets/img/icons/arrow-right';
6
+ let MoreFacetsPagination = class MoreFacetsPagination extends LitElement {
7
+ constructor() {
8
+ super(...arguments);
9
+ /**
10
+ * Number of pages can be moved in back/forward
11
+ */
12
+ this.step = 2;
13
+ this.currentPage = 1;
14
+ this.pages = [];
15
+ }
16
+ firstUpdated() {
17
+ this.observePageCount();
18
+ }
19
+ updated(changed) {
20
+ if (changed.has('size')) {
21
+ this.observePageCount();
22
+ }
23
+ if (changed.has('currentPage')) {
24
+ this.observePageCount();
25
+ this.emitPageClick();
26
+ }
27
+ }
28
+ /** creates `this.pages` array that notes which pages to draw
29
+ * - `0` is elipses marker
30
+ * - rule: selected page is centered between -2/+2 pages
31
+ * - outlier: first page selected, show _1_ 2 3 ... N
32
+ * - outlier: second page selected, show 1 _2_ 3 4 ... N
33
+ * - outlier: last page selected, show 1 ... N-2 N-1 _N_
34
+ * - outlier: if page count = 7, & selected is either [2, 3, 4, 5, 6], show all pages
35
+ */
36
+ observePageCount() {
37
+ this.pages = []; /* `0` is elipses marker */
38
+ const paginatorMaxPagesToShow = 7;
39
+ const atMinThreshold = this.size <= paginatorMaxPagesToShow;
40
+ /** Display outliers */
41
+ if (this.size <= 5) {
42
+ // display all pages
43
+ this.pages = [...Array(this.size).keys()].map(i => i + 1);
44
+ return;
45
+ }
46
+ if (this.size === paginatorMaxPagesToShow) {
47
+ // edge: 7 pages
48
+ if (this.currentPage === 2) {
49
+ this.pages = [1, 2, 3, 4, 0, this.size];
50
+ return;
51
+ }
52
+ if (this.currentPage === this.size - 1) {
53
+ this.pages = [1, 0, 4, 5, this.size - 1, this.size];
54
+ return;
55
+ }
56
+ }
57
+ if (this.currentPage === 1) {
58
+ // first page
59
+ this.pages = [1, 2, 3, 0, this.size];
60
+ return;
61
+ }
62
+ if (this.currentPage === this.size) {
63
+ // last page
64
+ this.pages = [1, 0, this.size - 2, this.size - 1, this.size];
65
+ return;
66
+ }
67
+ if (this.currentPage === this.size - 1) {
68
+ // second last page
69
+ this.pages = [
70
+ 1,
71
+ 0,
72
+ this.size - 3,
73
+ this.size - 2,
74
+ this.size - 1,
75
+ this.size,
76
+ ];
77
+ return;
78
+ }
79
+ if (atMinThreshold &&
80
+ this.currentPage > 1 &&
81
+ this.currentPage < paginatorMaxPagesToShow) {
82
+ this.pages = [...Array(this.size).keys()].map(i => i + 1);
83
+ return;
84
+ }
85
+ /* The rest here calculates the range to display in "page window" */
86
+ let startPage = this.currentPage - this.step;
87
+ let endPage = this.currentPage + this.step;
88
+ if (startPage <= 0) {
89
+ endPage += -startPage + 1;
90
+ startPage = 1;
91
+ }
92
+ if (endPage >= this.size) {
93
+ startPage = Math.max(startPage - (endPage - this.size), 1);
94
+ endPage = this.size;
95
+ }
96
+ if (startPage === 2) {
97
+ endPage -= 1;
98
+ }
99
+ if (endPage === this.size - 1) {
100
+ startPage += 1;
101
+ }
102
+ // create first page node
103
+ this.createFirstNode(startPage);
104
+ // create middle pages node
105
+ this.createMiddelNode(startPage, endPage);
106
+ // create last page node
107
+ this.createLastNode(endPage);
108
+ }
109
+ createFirstNode(startPage) {
110
+ var _a, _b;
111
+ if (startPage > 1) {
112
+ (_a = this.pages) === null || _a === void 0 ? void 0 : _a.push(1);
113
+ }
114
+ if (startPage > 2) {
115
+ (_b = this.pages) === null || _b === void 0 ? void 0 : _b.push(0); // let's asssume 0 is for ellipsis template
116
+ }
117
+ }
118
+ createMiddelNode(startPage, endPage) {
119
+ var _a;
120
+ for (let page = startPage; page <= endPage; page += 1) {
121
+ (_a = this.pages) === null || _a === void 0 ? void 0 : _a.push(page);
122
+ }
123
+ }
124
+ createLastNode(endPage) {
125
+ var _a, _b;
126
+ if (endPage < this.size - 1) {
127
+ (_a = this.pages) === null || _a === void 0 ? void 0 : _a.push(0); // let's asssume 0 is for ellipsis template
128
+ }
129
+ if (endPage < this.size) {
130
+ (_b = this.pages) === null || _b === void 0 ? void 0 : _b.push(this.size);
131
+ }
132
+ }
133
+ get getEllipsisTemplate() {
134
+ return html `<i class="ellipses">...</i>`;
135
+ }
136
+ emitPageClick() {
137
+ this.dispatchEvent(new CustomEvent('pageNumberClicked', {
138
+ detail: { page: this.currentPage },
139
+ bubbles: true,
140
+ composed: true,
141
+ }));
142
+ }
143
+ onRewind() {
144
+ this.currentPage -= 1;
145
+ if (this.currentPage < 1) {
146
+ this.currentPage = 1;
147
+ }
148
+ }
149
+ onForward() {
150
+ this.currentPage += 1;
151
+ if (this.currentPage > this.size) {
152
+ this.currentPage = this.size;
153
+ }
154
+ }
155
+ onChange(page) {
156
+ this.currentPage = page;
157
+ }
158
+ getPageTemplate(page) {
159
159
  return html `
160
160
  <button
161
161
  @click=${() => this.onChange(page)}
@@ -164,20 +164,20 @@ let MoreFacetsPagination = class MoreFacetsPagination extends LitElement {
164
164
  >
165
165
  ${page}
166
166
  </button>
167
- `;
168
- }
169
- get getPagesTemplate() {
170
- var _a;
171
- if (!this.pages || !this.pages.length) {
172
- return nothing;
173
- }
167
+ `;
168
+ }
169
+ get getPagesTemplate() {
170
+ var _a;
171
+ if (!this.pages || !this.pages.length) {
172
+ return nothing;
173
+ }
174
174
  return html `
175
- ${(_a = this.pages) === null || _a === void 0 ? void 0 : _a.map(page => html `${page !== 0
176
- ? this.getPageTemplate(page)
175
+ ${(_a = this.pages) === null || _a === void 0 ? void 0 : _a.map(page => html `${page !== 0
176
+ ? this.getPageTemplate(page)
177
177
  : this.getEllipsisTemplate}`)}
178
- `;
179
- }
180
- render() {
178
+ `;
179
+ }
180
+ render() {
181
181
  return html `
182
182
  <div class="facets-pagination">
183
183
  <button class="arrow-icon rewind" @click=${this.onRewind}>
@@ -190,9 +190,9 @@ let MoreFacetsPagination = class MoreFacetsPagination extends LitElement {
190
190
  ${arrowRightIcon}
191
191
  </button>
192
192
  </div>
193
- `;
194
- }
195
- static get styles() {
193
+ `;
194
+ }
195
+ static get styles() {
196
196
  return css `
197
197
  .facets-pagination {
198
198
  user-select: none;
@@ -245,23 +245,23 @@ let MoreFacetsPagination = class MoreFacetsPagination extends LitElement {
245
245
  clip: rect(0, 0, 0, 0);
246
246
  border: 0;
247
247
  }
248
- `;
249
- }
250
- };
251
- __decorate([
252
- property({ type: Number })
253
- ], MoreFacetsPagination.prototype, "size", void 0);
254
- __decorate([
255
- property({ type: Number })
256
- ], MoreFacetsPagination.prototype, "step", void 0);
257
- __decorate([
258
- property({ type: Number })
259
- ], MoreFacetsPagination.prototype, "currentPage", void 0);
260
- __decorate([
261
- state()
262
- ], MoreFacetsPagination.prototype, "pages", void 0);
263
- MoreFacetsPagination = __decorate([
264
- customElement('more-facets-pagination')
265
- ], MoreFacetsPagination);
266
- export { MoreFacetsPagination };
248
+ `;
249
+ }
250
+ };
251
+ __decorate([
252
+ property({ type: Number })
253
+ ], MoreFacetsPagination.prototype, "size", void 0);
254
+ __decorate([
255
+ property({ type: Number })
256
+ ], MoreFacetsPagination.prototype, "step", void 0);
257
+ __decorate([
258
+ property({ type: Number })
259
+ ], MoreFacetsPagination.prototype, "currentPage", void 0);
260
+ __decorate([
261
+ state()
262
+ ], MoreFacetsPagination.prototype, "pages", void 0);
263
+ MoreFacetsPagination = __decorate([
264
+ customElement('more-facets-pagination')
265
+ ], MoreFacetsPagination);
266
+ export { MoreFacetsPagination };
267
267
  //# sourceMappingURL=more-facets-pagination.js.map
@@ -1,77 +1,83 @@
1
- import { LitElement, PropertyValues, TemplateResult } from 'lit';
2
- import type { Aggregation, FilterMap, SearchServiceInterface, SearchType } from '@internetarchive/search-service';
3
- import '@internetarchive/histogram-date-range';
4
- import '@internetarchive/feature-feedback';
5
- import '@internetarchive/collection-name-cache';
6
- import type { CollectionNameCacheInterface } from '@internetarchive/collection-name-cache';
7
- import { ModalManagerInterface } from '@internetarchive/modal-manager';
8
- import type { AnalyticsManagerInterface } from '@internetarchive/analytics-manager';
9
- import { FacetOption, SelectedFacets, FacetGroup } from './models';
10
- import type { LanguageCodeHandlerInterface } from './language-code-handler/language-code-handler';
11
- import './collection-facets/more-facets-content';
12
- import './collection-facets/facets-template';
13
- import './collection-facets/facet-tombstone-row';
14
- export declare class CollectionFacets extends LitElement {
15
- searchService?: SearchServiceInterface;
16
- searchType?: SearchType;
17
- aggregations?: Record<string, Aggregation>;
18
- fullYearsHistogramAggregation?: Aggregation;
19
- minSelectedDate?: string;
20
- maxSelectedDate?: string;
21
- moreLinksVisible: boolean;
22
- facetsLoading: boolean;
23
- fullYearAggregationLoading: boolean;
24
- selectedFacets?: SelectedFacets;
25
- collapsableFacets: boolean;
26
- showHistogramDatePicker: boolean;
27
- query?: string;
28
- filterMap?: FilterMap;
29
- modalManager?: ModalManagerInterface;
30
- analyticsHandler?: AnalyticsManagerInterface;
31
- languageCodeHandler?: LanguageCodeHandlerInterface;
32
- collectionNameCache?: CollectionNameCacheInterface;
33
- /** Fires when a facet is clicked */
34
- onFacetClick?: (name: FacetOption, facetChecked: boolean, negative: boolean) => void;
35
- openFacets: Record<FacetOption, boolean>;
36
- /**
37
- * render number of facet items
38
- */
39
- private allowedFacetCount;
40
- render(): TemplateResult<1>;
41
- updated(changed: PropertyValues): void;
42
- private dispatchFacetsChangedEvent;
43
- private get currentYearsHistogramAggregation();
44
- private get histogramTemplate();
45
- private histogramDateRangeUpdated;
46
- /**
47
- * Combines the selected facets with the aggregations to create a single list of facets
48
- */
49
- private get mergedFacets();
50
- /**
51
- * Converts the selected facets to a `FacetGroup` array,
52
- * which is easier to work with
53
- */
54
- private get selectedFacetGroups();
55
- /**
56
- * Converts the raw `aggregations` to `FacetGroups`, which are easier to use
57
- */
58
- private get aggregationFacetGroups();
59
- /**
60
- * Generate the template for a facet group with a header and the collapsible
61
- * chevron for the mobile view
62
- */
63
- private getFacetGroupTemplate;
64
- private getTombstoneFacetGroupTemplate;
65
- /**
66
- * Generate the More... link button just below the facets group
67
- *
68
- * TODO: want to fire analytics?
69
- */
70
- private searchMoreFacetsLink;
71
- showMoreFacetsModal(facetGroup: FacetGroup, sortedBy: string): Promise<void>;
72
- /**
73
- * Generate the list template for each bucket in a facet group
74
- */
75
- private getFacetTemplate;
76
- static get styles(): import("lit").CSSResult;
77
- }
1
+ import { LitElement, PropertyValues, TemplateResult } from 'lit';
2
+ import type { Aggregation, FilterMap, SearchServiceInterface, SearchType } from '@internetarchive/search-service';
3
+ import '@internetarchive/histogram-date-range';
4
+ import '@internetarchive/feature-feedback';
5
+ import '@internetarchive/collection-name-cache';
6
+ import type { CollectionNameCacheInterface } from '@internetarchive/collection-name-cache';
7
+ import { ModalManagerInterface } from '@internetarchive/modal-manager';
8
+ import type { FeatureFeedbackServiceInterface } from '@internetarchive/feature-feedback';
9
+ import type { RecaptchaManagerInterface } from '@internetarchive/recaptcha-manager';
10
+ import type { AnalyticsManagerInterface } from '@internetarchive/analytics-manager';
11
+ import type { SharedResizeObserverInterface } from '@internetarchive/shared-resize-observer';
12
+ import { FacetOption, SelectedFacets, FacetGroup } from './models';
13
+ import type { LanguageCodeHandlerInterface } from './language-code-handler/language-code-handler';
14
+ import './collection-facets/more-facets-content';
15
+ import './collection-facets/facets-template';
16
+ import './collection-facets/facet-tombstone-row';
17
+ export declare class CollectionFacets extends LitElement {
18
+ searchService?: SearchServiceInterface;
19
+ searchType?: SearchType;
20
+ aggregations?: Record<string, Aggregation>;
21
+ fullYearsHistogramAggregation?: Aggregation;
22
+ minSelectedDate?: string;
23
+ maxSelectedDate?: string;
24
+ moreLinksVisible: boolean;
25
+ facetsLoading: boolean;
26
+ fullYearAggregationLoading: boolean;
27
+ selectedFacets?: SelectedFacets;
28
+ collapsableFacets: boolean;
29
+ showHistogramDatePicker: boolean;
30
+ query?: string;
31
+ filterMap?: FilterMap;
32
+ modalManager?: ModalManagerInterface;
33
+ resizeObserver?: SharedResizeObserverInterface;
34
+ featureFeedbackService?: FeatureFeedbackServiceInterface;
35
+ recaptchaManager?: RecaptchaManagerInterface;
36
+ analyticsHandler?: AnalyticsManagerInterface;
37
+ languageCodeHandler?: LanguageCodeHandlerInterface;
38
+ collectionNameCache?: CollectionNameCacheInterface;
39
+ /** Fires when a facet is clicked */
40
+ onFacetClick?: (name: FacetOption, facetChecked: boolean, negative: boolean) => void;
41
+ openFacets: Record<FacetOption, boolean>;
42
+ /**
43
+ * render number of facet items
44
+ */
45
+ private allowedFacetCount;
46
+ render(): TemplateResult<1>;
47
+ updated(changed: PropertyValues): void;
48
+ private dispatchFacetsChangedEvent;
49
+ private get currentYearsHistogramAggregation();
50
+ private get histogramTemplate();
51
+ private histogramDateRangeUpdated;
52
+ /**
53
+ * Combines the selected facets with the aggregations to create a single list of facets
54
+ */
55
+ private get mergedFacets();
56
+ /**
57
+ * Converts the selected facets to a `FacetGroup` array,
58
+ * which is easier to work with
59
+ */
60
+ private get selectedFacetGroups();
61
+ /**
62
+ * Converts the raw `aggregations` to `FacetGroups`, which are easier to use
63
+ */
64
+ private get aggregationFacetGroups();
65
+ /**
66
+ * Generate the template for a facet group with a header and the collapsible
67
+ * chevron for the mobile view
68
+ */
69
+ private getFacetGroupTemplate;
70
+ private getTombstoneFacetGroupTemplate;
71
+ /**
72
+ * Generate the More... link button just below the facets group
73
+ *
74
+ * TODO: want to fire analytics?
75
+ */
76
+ private searchMoreFacetsLink;
77
+ showMoreFacetsModal(facetGroup: FacetGroup, sortedBy: string): Promise<void>;
78
+ /**
79
+ * Generate the list template for each bucket in a facet group
80
+ */
81
+ private getFacetTemplate;
82
+ static get styles(): import("lit").CSSResult;
83
+ }