@internetarchive/collection-browser 0.2.12 → 0.2.14-alpha1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. package/dist/index.d.ts +9 -0
  2. package/dist/index.js +1 -0
  3. package/dist/index.js.map +1 -0
  4. package/dist/src/app-root.d.ts +33 -0
  5. package/dist/src/app-root.js +311 -0
  6. package/dist/src/app-root.js.map +1 -0
  7. package/dist/src/assets/img/icons/arrow-left.d.ts +2 -0
  8. package/dist/src/assets/img/icons/arrow-left.js +10 -0
  9. package/dist/src/assets/img/icons/arrow-left.js.map +1 -0
  10. package/dist/src/assets/img/icons/arrow-right.d.ts +2 -0
  11. package/dist/src/assets/img/icons/arrow-right.js +10 -0
  12. package/dist/src/assets/img/icons/arrow-right.js.map +1 -0
  13. package/dist/src/assets/img/icons/chevron.d.ts +2 -0
  14. package/dist/src/assets/img/icons/chevron.js +4 -0
  15. package/dist/src/assets/img/icons/chevron.js.map +1 -0
  16. package/dist/src/assets/img/icons/empty-query.d.ts +2 -0
  17. package/dist/src/assets/img/icons/empty-query.js +5 -0
  18. package/dist/src/assets/img/icons/empty-query.js.map +1 -0
  19. package/dist/src/assets/img/icons/eye-closed.d.ts +2 -0
  20. package/dist/src/assets/img/icons/eye-closed.js +5 -0
  21. package/dist/src/assets/img/icons/eye-closed.js.map +1 -0
  22. package/dist/src/assets/img/icons/eye.d.ts +2 -0
  23. package/dist/src/assets/img/icons/eye.js +5 -0
  24. package/dist/src/assets/img/icons/eye.js.map +1 -0
  25. package/dist/src/assets/img/icons/favorite-filled.d.ts +1 -0
  26. package/dist/src/assets/img/icons/favorite-filled.js +11 -0
  27. package/dist/src/assets/img/icons/favorite-filled.js.map +1 -0
  28. package/dist/src/assets/img/icons/login-required.d.ts +1 -0
  29. package/dist/src/assets/img/icons/login-required.js +30 -0
  30. package/dist/src/assets/img/icons/login-required.js.map +1 -0
  31. package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -0
  32. package/dist/src/assets/img/icons/mediatype/account.js +14 -0
  33. package/dist/src/assets/img/icons/mediatype/account.js.map +1 -0
  34. package/dist/src/assets/img/icons/mediatype/audio.d.ts +1 -0
  35. package/dist/src/assets/img/icons/mediatype/audio.js +14 -0
  36. package/dist/src/assets/img/icons/mediatype/audio.js.map +1 -0
  37. package/dist/src/assets/img/icons/mediatype/collection.d.ts +1 -0
  38. package/dist/src/assets/img/icons/mediatype/collection.js +12 -0
  39. package/dist/src/assets/img/icons/mediatype/collection.js.map +1 -0
  40. package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -0
  41. package/dist/src/assets/img/icons/mediatype/data.js +15 -0
  42. package/dist/src/assets/img/icons/mediatype/data.js.map +1 -0
  43. package/dist/src/assets/img/icons/mediatype/etree.d.ts +1 -0
  44. package/dist/src/assets/img/icons/mediatype/etree.js +14 -0
  45. package/dist/src/assets/img/icons/mediatype/etree.js.map +1 -0
  46. package/dist/src/assets/img/icons/mediatype/film.d.ts +1 -0
  47. package/dist/src/assets/img/icons/mediatype/film.js +14 -0
  48. package/dist/src/assets/img/icons/mediatype/film.js.map +1 -0
  49. package/dist/src/assets/img/icons/mediatype/images.d.ts +1 -0
  50. package/dist/src/assets/img/icons/mediatype/images.js +13 -0
  51. package/dist/src/assets/img/icons/mediatype/images.js.map +1 -0
  52. package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -0
  53. package/dist/src/assets/img/icons/mediatype/radio.js +15 -0
  54. package/dist/src/assets/img/icons/mediatype/radio.js.map +1 -0
  55. package/dist/src/assets/img/icons/mediatype/software.d.ts +1 -0
  56. package/dist/src/assets/img/icons/mediatype/software.js +13 -0
  57. package/dist/src/assets/img/icons/mediatype/software.js.map +1 -0
  58. package/dist/src/assets/img/icons/mediatype/texts.d.ts +1 -0
  59. package/dist/src/assets/img/icons/mediatype/texts.js +13 -0
  60. package/dist/src/assets/img/icons/mediatype/texts.js.map +1 -0
  61. package/dist/src/assets/img/icons/mediatype/tv.d.ts +1 -0
  62. package/dist/src/assets/img/icons/mediatype/tv.js +14 -0
  63. package/dist/src/assets/img/icons/mediatype/tv.js.map +1 -0
  64. package/dist/src/assets/img/icons/mediatype/video.d.ts +1 -0
  65. package/dist/src/assets/img/icons/mediatype/video.js +14 -0
  66. package/dist/src/assets/img/icons/mediatype/video.js.map +1 -0
  67. package/dist/src/assets/img/icons/mediatype/web.d.ts +1 -0
  68. package/dist/src/assets/img/icons/mediatype/web.js +13 -0
  69. package/dist/src/assets/img/icons/mediatype/web.js.map +1 -0
  70. package/dist/src/assets/img/icons/null-result.d.ts +2 -0
  71. package/dist/src/assets/img/icons/null-result.js +5 -0
  72. package/dist/src/assets/img/icons/null-result.js.map +1 -0
  73. package/dist/src/assets/img/icons/restricted.d.ts +1 -0
  74. package/dist/src/assets/img/icons/restricted.js +29 -0
  75. package/dist/src/assets/img/icons/restricted.js.map +1 -0
  76. package/dist/src/assets/img/icons/reviews.d.ts +1 -0
  77. package/dist/src/assets/img/icons/reviews.js +11 -0
  78. package/dist/src/assets/img/icons/reviews.js.map +1 -0
  79. package/dist/src/assets/img/icons/upload.d.ts +1 -0
  80. package/dist/src/assets/img/icons/upload.js +12 -0
  81. package/dist/src/assets/img/icons/upload.js.map +1 -0
  82. package/dist/src/assets/img/icons/views.d.ts +1 -0
  83. package/dist/src/assets/img/icons/views.js +11 -0
  84. package/dist/src/assets/img/icons/views.js.map +1 -0
  85. package/dist/src/circular-activity-indicator.d.ts +5 -0
  86. package/dist/src/circular-activity-indicator.js +66 -0
  87. package/dist/src/circular-activity-indicator.js.map +1 -0
  88. package/dist/src/collection-browser.d.ts +216 -0
  89. package/dist/src/collection-browser.js +1248 -0
  90. package/dist/src/collection-browser.js.map +1 -0
  91. package/dist/src/collection-facets/more-facets-content.d.ts +50 -0
  92. package/dist/src/collection-facets/more-facets-content.js +354 -0
  93. package/dist/src/collection-facets/more-facets-content.js.map +1 -0
  94. package/dist/src/collection-facets/more-facets-pagination.d.ts +27 -0
  95. package/dist/src/collection-facets/more-facets-pagination.js +193 -0
  96. package/dist/src/collection-facets/more-facets-pagination.js.map +1 -0
  97. package/dist/src/collection-facets.d.ts +80 -0
  98. package/dist/src/collection-facets.js +662 -0
  99. package/dist/src/collection-facets.js.map +1 -0
  100. package/dist/src/empty-placeholder.d.ts +11 -0
  101. package/dist/src/empty-placeholder.js +83 -0
  102. package/dist/src/empty-placeholder.js.map +1 -0
  103. package/dist/src/language-code-handler/language-code-handler.d.ts +37 -0
  104. package/dist/src/language-code-handler/language-code-handler.js +27 -0
  105. package/dist/src/language-code-handler/language-code-handler.js.map +1 -0
  106. package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -0
  107. package/dist/src/language-code-handler/language-code-mapping.js +563 -0
  108. package/dist/src/language-code-handler/language-code-mapping.js.map +1 -0
  109. package/dist/src/mediatype/mediatype-config.d.ts +3 -0
  110. package/dist/src/mediatype/mediatype-config.js +86 -0
  111. package/dist/src/mediatype/mediatype-config.js.map +1 -0
  112. package/dist/src/models.d.ts +84 -0
  113. package/dist/src/models.js +58 -0
  114. package/dist/src/models.js.map +1 -0
  115. package/dist/src/restoration-state-handler.d.ts +38 -0
  116. package/dist/src/restoration-state-handler.js +204 -0
  117. package/dist/src/restoration-state-handler.js.map +1 -0
  118. package/dist/src/sort-filter-bar/alpha-bar.d.ts +9 -0
  119. package/dist/src/sort-filter-bar/alpha-bar.js +98 -0
  120. package/dist/src/sort-filter-bar/alpha-bar.js.map +1 -0
  121. package/dist/src/sort-filter-bar/img/compact.d.ts +1 -0
  122. package/dist/src/sort-filter-bar/img/compact.js +5 -0
  123. package/dist/src/sort-filter-bar/img/compact.js.map +1 -0
  124. package/dist/src/sort-filter-bar/img/list.d.ts +1 -0
  125. package/dist/src/sort-filter-bar/img/list.js +5 -0
  126. package/dist/src/sort-filter-bar/img/list.js.map +1 -0
  127. package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -0
  128. package/dist/src/sort-filter-bar/img/sort-triangle.js +5 -0
  129. package/dist/src/sort-filter-bar/img/sort-triangle.js.map +1 -0
  130. package/dist/src/sort-filter-bar/img/tile.d.ts +1 -0
  131. package/dist/src/sort-filter-bar/img/tile.js +5 -0
  132. package/dist/src/sort-filter-bar/img/tile.js.map +1 -0
  133. package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +85 -0
  134. package/dist/src/sort-filter-bar/sort-filter-bar.js +698 -0
  135. package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -0
  136. package/dist/src/styles/item-image-styles.d.ts +8 -0
  137. package/dist/src/styles/item-image-styles.js +102 -0
  138. package/dist/src/styles/item-image-styles.js.map +1 -0
  139. package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -0
  140. package/dist/src/tiles/collection-browser-loading-tile.js +32 -0
  141. package/dist/src/tiles/collection-browser-loading-tile.js.map +1 -0
  142. package/dist/src/tiles/grid/account-tile.d.ts +8 -0
  143. package/dist/src/tiles/grid/account-tile.js +126 -0
  144. package/dist/src/tiles/grid/account-tile.js.map +1 -0
  145. package/dist/src/tiles/grid/collection-tile.d.ts +7 -0
  146. package/dist/src/tiles/grid/collection-tile.js +159 -0
  147. package/dist/src/tiles/grid/collection-tile.js.map +1 -0
  148. package/dist/src/tiles/grid/item-tile.d.ts +21 -0
  149. package/dist/src/tiles/grid/item-tile.js +183 -0
  150. package/dist/src/tiles/grid/item-tile.js.map +1 -0
  151. package/dist/src/tiles/grid/tile-stats.d.ts +10 -0
  152. package/dist/src/tiles/grid/tile-stats.js +134 -0
  153. package/dist/src/tiles/grid/tile-stats.js.map +1 -0
  154. package/dist/src/tiles/image-block.d.ts +17 -0
  155. package/dist/src/tiles/image-block.js +136 -0
  156. package/dist/src/tiles/image-block.js.map +1 -0
  157. package/dist/src/tiles/item-image.d.ts +31 -0
  158. package/dist/src/tiles/item-image.js +118 -0
  159. package/dist/src/tiles/item-image.js.map +1 -0
  160. package/dist/src/tiles/list/account-label.d.ts +1 -0
  161. package/dist/src/tiles/list/account-label.js +7 -0
  162. package/dist/src/tiles/list/account-label.js.map +1 -0
  163. package/dist/src/tiles/list/date-label.d.ts +1 -0
  164. package/dist/src/tiles/list/date-label.js +13 -0
  165. package/dist/src/tiles/list/date-label.js.map +1 -0
  166. package/dist/src/tiles/list/tile-list-compact-header.d.ts +12 -0
  167. package/dist/src/tiles/list/tile-list-compact-header.js +84 -0
  168. package/dist/src/tiles/list/tile-list-compact-header.js.map +1 -0
  169. package/dist/src/tiles/list/tile-list-compact.d.ts +20 -0
  170. package/dist/src/tiles/list/tile-list-compact.js +180 -0
  171. package/dist/src/tiles/list/tile-list-compact.js.map +1 -0
  172. package/dist/src/tiles/list/tile-list.d.ts +48 -0
  173. package/dist/src/tiles/list/tile-list.js +455 -0
  174. package/dist/src/tiles/list/tile-list.js.map +1 -0
  175. package/dist/src/tiles/mediatype-icon.d.ts +9 -0
  176. package/dist/src/tiles/mediatype-icon.js +82 -0
  177. package/dist/src/tiles/mediatype-icon.js.map +1 -0
  178. package/dist/src/tiles/overlay/icon-overlay.d.ts +7 -0
  179. package/dist/src/tiles/overlay/icon-overlay.js +43 -0
  180. package/dist/src/tiles/overlay/icon-overlay.js.map +1 -0
  181. package/dist/src/tiles/overlay/text-overlay.d.ts +8 -0
  182. package/dist/src/tiles/overlay/text-overlay.js +57 -0
  183. package/dist/src/tiles/overlay/text-overlay.js.map +1 -0
  184. package/dist/src/tiles/tile-dispatcher.d.ts +36 -0
  185. package/dist/src/tiles/tile-dispatcher.js +215 -0
  186. package/dist/src/tiles/tile-dispatcher.js.map +1 -0
  187. package/dist/src/utils/format-count.d.ts +7 -0
  188. package/dist/src/utils/format-count.js +76 -0
  189. package/dist/src/utils/format-count.js.map +1 -0
  190. package/dist/src/utils/format-date.d.ts +2 -0
  191. package/dist/src/utils/format-date.js +24 -0
  192. package/dist/src/utils/format-date.js.map +1 -0
  193. package/dist/test/collection-browser.test.d.ts +1 -0
  194. package/dist/test/collection-browser.test.js +47 -0
  195. package/dist/test/collection-browser.test.js.map +1 -0
  196. package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -0
  197. package/dist/test/collection-facets/more-facets-content.test.js +75 -0
  198. package/dist/test/collection-facets/more-facets-content.test.js.map +1 -0
  199. package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -0
  200. package/dist/test/collection-facets/more-facets-pagination.test.js +38 -0
  201. package/dist/test/collection-facets/more-facets-pagination.test.js.map +1 -0
  202. package/dist/test/empty-placeholder.test.d.ts +1 -0
  203. package/dist/test/empty-placeholder.test.js +34 -0
  204. package/dist/test/empty-placeholder.test.js.map +1 -0
  205. package/dist/test/icon-overlay.test.d.ts +1 -0
  206. package/dist/test/icon-overlay.test.js +31 -0
  207. package/dist/test/icon-overlay.test.js.map +1 -0
  208. package/dist/test/item-image.test.d.ts +1 -0
  209. package/dist/test/item-image.test.js +73 -0
  210. package/dist/test/item-image.test.js.map +1 -0
  211. package/dist/test/mediatype-config.test.d.ts +1 -0
  212. package/dist/test/mediatype-config.test.js +17 -0
  213. package/dist/test/mediatype-config.test.js.map +1 -0
  214. package/dist/test/mocks/mock-collection-name-cache.d.ts +7 -0
  215. package/dist/test/mocks/mock-collection-name-cache.js +14 -0
  216. package/dist/test/mocks/mock-collection-name-cache.js.map +1 -0
  217. package/dist/test/mocks/mock-search-responses.d.ts +3 -0
  218. package/dist/test/mocks/mock-search-responses.js +45 -0
  219. package/dist/test/mocks/mock-search-responses.js.map +1 -0
  220. package/dist/test/mocks/mock-search-service.d.ts +8 -0
  221. package/dist/test/mocks/mock-search-service.js +16 -0
  222. package/dist/test/mocks/mock-search-service.js.map +1 -0
  223. package/dist/test/text-overlay.test.d.ts +1 -0
  224. package/dist/test/text-overlay.test.js +48 -0
  225. package/dist/test/text-overlay.test.js.map +1 -0
  226. package/dist/test/tile-stats.test.d.ts +1 -0
  227. package/dist/test/tile-stats.test.js +42 -0
  228. package/dist/test/tile-stats.test.js.map +1 -0
  229. package/dist/test/tiles/grid/item-tile.test.d.ts +1 -0
  230. package/dist/test/tiles/grid/item-tile.test.js +96 -0
  231. package/dist/test/tiles/grid/item-tile.test.js.map +1 -0
  232. package/dist/test/utils/format-count.test.d.ts +1 -0
  233. package/dist/test/utils/format-count.test.js +24 -0
  234. package/dist/test/utils/format-count.test.js.map +1 -0
  235. package/dist/test/utils/format-date.test.d.ts +1 -0
  236. package/dist/test/utils/format-date.test.js +18 -0
  237. package/dist/test/utils/format-date.test.js.map +1 -0
  238. package/package.json +5 -2
  239. package/src/app-root.ts +28 -2
  240. package/src/assets/img/icons/arrow-left.ts +10 -0
  241. package/src/assets/img/icons/arrow-right.ts +10 -0
  242. package/src/collection-browser.ts +8 -2
  243. package/src/collection-facets/more-facets-content.ts +371 -0
  244. package/src/collection-facets/more-facets-pagination.ts +201 -0
  245. package/src/collection-facets.ts +119 -3
  246. package/src/restoration-state-handler.ts +1 -1
  247. package/src/sort-filter-bar/sort-filter-bar.ts +1 -1
  248. package/src/tiles/grid/account-tile.ts +1 -1
  249. package/src/tiles/grid/collection-tile.ts +1 -1
  250. package/src/tiles/grid/item-tile.ts +2 -2
  251. package/src/tiles/image-block.ts +1 -1
  252. package/src/tiles/item-image.ts +1 -1
  253. package/src/tiles/list/tile-list-compact-header.ts +2 -2
  254. package/src/tiles/list/tile-list-compact.ts +2 -2
  255. package/src/tiles/list/tile-list.ts +4 -4
  256. package/src/tiles/tile-dispatcher.ts +2 -2
  257. package/test/collection-browser.test.ts +1 -1
  258. package/test/collection-facets/more-facets-content.test.ts +113 -0
  259. package/test/collection-facets/more-facets-pagination.test.ts +70 -0
  260. package/test/empty-placeholder.test.ts +2 -1
  261. package/test/icon-overlay.test.ts +1 -1
  262. package/test/item-image.test.ts +2 -2
  263. package/test/mocks/mock-collection-name-cache.ts +1 -1
  264. package/test/mocks/mock-search-responses.ts +14 -1
  265. package/test/mocks/mock-search-service.ts +2 -2
  266. package/test/text-overlay.test.ts +1 -1
  267. package/test/tile-stats.test.ts +1 -1
  268. package/test/tiles/grid/item-tile.test.ts +1 -1
  269. package/tsconfig.json +3 -2
  270. package/types/dompurify.d.ts +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection-facets.js","sourceRoot":"","sources":["../../src/collection-facets.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-duplicates */\nimport {\n css,\n html,\n LitElement,\n PropertyValues,\n nothing,\n TemplateResult,\n} from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { repeat } from 'lit/directives/repeat.js';\nimport type {\n Aggregation,\n Bucket,\n SearchServiceInterface,\n} from '@internetarchive/search-service';\nimport '@internetarchive/histogram-date-range';\nimport '@internetarchive/feature-feedback';\nimport '@internetarchive/collection-name-cache';\nimport type { CollectionNameCacheInterface } from '@internetarchive/collection-name-cache';\nimport {\n ModalConfig,\n ModalManagerInterface,\n} from '@internetarchive/modal-manager';\nimport eyeIcon from './assets/img/icons/eye';\nimport eyeClosedIcon from './assets/img/icons/eye-closed';\nimport chevronIcon from './assets/img/icons/chevron';\nimport {\n FacetOption,\n SelectedFacets,\n FacetGroup,\n FacetBucket,\n defaultSelectedFacets,\n} from './models';\nimport type { LanguageCodeHandlerInterface } from './language-code-handler/language-code-handler';\nimport './collection-facets/more-facets-content';\n\nconst facetDisplayOrder: FacetOption[] = [\n 'mediatype',\n 'year',\n 'subject',\n 'collection',\n 'creator',\n 'language',\n];\n\nconst aggregationToFacetOption: Record<string, FacetOption> = {\n subjectSorter: 'subject',\n mediatypeSorter: 'mediatype',\n languageSorter: 'language',\n creatorSorter: 'creator',\n collection: 'collection',\n year: 'year',\n};\n\nconst facetTitles: Record<FacetOption, string> = {\n subject: 'Subject',\n mediatype: 'Media Type',\n language: 'Language',\n creator: 'Creator',\n collection: 'Collection',\n year: 'Year',\n};\n\n@customElement('collection-facets')\nexport class CollectionFacets extends LitElement {\n @property({ type: Object }) searchService?: SearchServiceInterface;\n\n @property({ type: Object }) aggregations?: Record<string, Aggregation>;\n\n @property({ type: Object }) fullYearsHistogramAggregation?: Aggregation;\n\n @property({ type: String }) minSelectedDate?: string;\n\n @property({ type: String }) maxSelectedDate?: string;\n\n @property({ type: Boolean }) facetsLoading = false;\n\n @property({ type: Boolean }) fullYearAggregationLoading = false;\n\n @property({ type: Object }) selectedFacets?: SelectedFacets;\n\n @property({ type: Boolean }) collapsableFacets = false;\n\n @property({ type: Boolean }) showHistogramDatePicker = false;\n\n @property({ type: String }) fullQuery?: string;\n\n @property({ type: Object }) modalManager?: ModalManagerInterface;\n\n @property({ type: Object })\n languageCodeHandler?: LanguageCodeHandlerInterface;\n\n @property({ type: Object })\n collectionNameCache?: CollectionNameCacheInterface;\n\n @state() openFacets: Record<FacetOption, boolean> = {\n subject: false,\n mediatype: false,\n language: false,\n creator: false,\n collection: false,\n year: false,\n };\n\n /**\n * If listed facets on page more then this number,\n * - show the more link button just below the facets group\n */\n private moreLinkEligibilityCount = 5;\n\n render() {\n return html`\n <div id=\"container\" class=\"${this.facetsLoading ? 'loading' : ''}\">\n ${this.showHistogramDatePicker && this.fullYearsHistogramAggregation\n ? html`\n <div class=\"facet-group\">\n <h1>Year Published <feature-feedback></feature-feedback></h1>\n ${this.histogramTemplate}\n </div>\n `\n : nothing}\n ${this.mergedFacets.map(facetGroup =>\n this.getFacetGroupTemplate(facetGroup)\n )}\n </div>\n `;\n }\n\n updated(changed: PropertyValues) {\n if (changed.has('selectedFacets')) {\n this.dispatchFacetsChangedEvent();\n }\n }\n\n // TODO: want to fire analytics?\n private dispatchFacetsChangedEvent() {\n const event = new CustomEvent<SelectedFacets>('facetsChanged', {\n detail: this.selectedFacets,\n });\n this.dispatchEvent(event);\n }\n\n private get currentYearsHistogramAggregation(): Aggregation | undefined {\n return this.aggregations?.year_histogram;\n }\n\n private get histogramTemplate() {\n const { fullYearsHistogramAggregation } = this;\n return html`\n <histogram-date-range\n .minDate=${fullYearsHistogramAggregation?.first_bucket_key}\n .maxDate=${fullYearsHistogramAggregation?.last_bucket_key}\n .minSelectedDate=${this.minSelectedDate}\n .maxSelectedDate=${this.maxSelectedDate}\n .updateDelay=${100}\n missingDataMessage=\"...\"\n .width=${180}\n .bins=${fullYearsHistogramAggregation?.buckets as number[]}\n @histogramDateRangeUpdated=${this.histogramDateRangeUpdated}\n ></histogram-date-range>\n `;\n }\n\n private histogramDateRangeUpdated(\n e: CustomEvent<{\n minDate: string;\n maxDate: string;\n }>\n ) {\n const { minDate, maxDate } = e.detail;\n const event = new CustomEvent('histogramDateRangeUpdated', {\n detail: { minDate, maxDate },\n });\n this.dispatchEvent(event);\n }\n\n /**\n * Combines the selected facets with the aggregations to create a single list of facets\n */\n private get mergedFacets(): FacetGroup[] {\n const facetGroups: FacetGroup[] = [];\n\n facetDisplayOrder.forEach(facetKey => {\n const selectedFacetGroup = this.selectedFacetGroups.find(\n group => group.key === facetKey\n );\n const aggregateFacetGroup = this.aggregationFacetGroups.find(\n group => group.key === facetKey\n );\n\n // if the user selected a facet, but it's not in the aggregation, we add it as-is\n if (selectedFacetGroup && !aggregateFacetGroup) {\n facetGroups.push(selectedFacetGroup);\n return;\n }\n\n // if we don't have an aggregate facet group, don't add this to the list\n if (!aggregateFacetGroup) return;\n\n // start with either the selected group if we have one, or the aggregate group\n const facetGroup = selectedFacetGroup ?? aggregateFacetGroup;\n\n // attach the counts to the selected buckets\n const bucketsWithCount =\n selectedFacetGroup?.buckets.map(bucket => {\n const selectedBucket = aggregateFacetGroup.buckets.find(\n b => b.key === bucket.key\n );\n return selectedBucket\n ? {\n ...bucket,\n count: selectedBucket.count,\n }\n : bucket;\n }) ?? [];\n\n // append any additional buckets that were not selected\n aggregateFacetGroup.buckets.forEach(bucket => {\n const existingBucket = bucketsWithCount.find(b => b.key === bucket.key);\n if (existingBucket) return;\n bucketsWithCount.push(bucket);\n });\n facetGroup.buckets = bucketsWithCount.splice(0, 5);\n\n facetGroups.push(facetGroup);\n });\n\n return facetGroups;\n }\n\n /**\n * Converts the selected facets to a `FacetGroup` array,\n * which is easier to work with\n */\n private get selectedFacetGroups(): FacetGroup[] {\n if (!this.selectedFacets) return [];\n\n const facetGroups: FacetGroup[] = Object.entries(this.selectedFacets).map(\n ([key, selectedFacets]) => {\n const option = key as FacetOption;\n const title = facetTitles[option];\n\n const buckets: FacetBucket[] = Object.entries(selectedFacets).map(\n ([value, facetState]) => {\n let displayText = value;\n // for selected languages, we store the language code instead of the\n // display name, so look up the name from the mapping\n if (option === 'language') {\n displayText =\n this.languageCodeHandler?.getLanguageNameFromCodeString(\n value\n ) ?? value;\n }\n return {\n displayText,\n key: value,\n count: 0,\n state: facetState,\n };\n }\n );\n\n return {\n title,\n key: option,\n buckets,\n };\n }\n );\n\n return facetGroups;\n }\n\n /**\n * Converts the raw `aggregations` to `FacetGroups`, which are easier to use\n */\n private get aggregationFacetGroups(): FacetGroup[] {\n const facetGroups: FacetGroup[] = [];\n Object.entries(this.aggregations ?? []).forEach(([key, buckets]) => {\n // the year_histogram data is in a different format so can't be handled here\n if (key === 'year_histogram') return;\n const option = this.getFacetOptionFromKey(key);\n const title = facetTitles[option];\n const castedBuckets = buckets.buckets as Bucket[];\n const facetBuckets: FacetBucket[] = castedBuckets.map(bucket => {\n let bucketKey = bucket.key;\n // for languages, we need to search by language code instead of the\n // display name, which is what we get from the search engine result\n if (option === 'language') {\n // const languageCodeKey = languageToCodeMap[bucket.key];\n bucketKey =\n this.languageCodeHandler?.getCodeStringFromLanguageName(\n `${bucket.key}`\n ) ?? bucket.key;\n // bucketKey = languageCodeKey ?? bucket.key;\n }\n return {\n displayText: `${bucket.key}`,\n key: `${bucketKey}`,\n count: bucket.doc_count,\n state: 'none',\n };\n });\n const group: FacetGroup = {\n title,\n key: option,\n buckets: facetBuckets,\n };\n facetGroups.push(group);\n });\n return facetGroups;\n }\n\n /**\n * Generate the template for a facet group with a header and the collapsible\n * chevron for the mobile view\n */\n private getFacetGroupTemplate(\n facetGroup: FacetGroup\n ): TemplateResult | typeof nothing {\n if (facetGroup.buckets.length === 0) return nothing;\n const { key } = facetGroup;\n const isOpen = this.openFacets[key];\n const collapser = html`\n <span class=\"collapser ${isOpen ? 'open' : ''}\"> ${chevronIcon} </span>\n `;\n\n return html`\n <div class=\"facet-group ${this.collapsableFacets ? 'mobile' : ''}\">\n <h1\n @click=${() => {\n const newOpenFacets = { ...this.openFacets };\n newOpenFacets[key] = !isOpen;\n this.openFacets = newOpenFacets;\n }}\n @keyup=${() => {\n const newOpenFacets = { ...this.openFacets };\n newOpenFacets[key] = !isOpen;\n this.openFacets = newOpenFacets;\n }}\n >\n ${this.collapsableFacets ? collapser : nothing} ${facetGroup.title}\n </h1>\n <div class=\"facet-group-content ${isOpen ? 'open' : ''}\">\n ${this.getFacetTemplate(facetGroup)}\n ${this.searchMoreFacetsLink(facetGroup)}\n </div>\n </div>\n `;\n }\n\n /**\n * Generate the More... link button just below the facets group\n *\n * TODO: want to fire analytics?\n */\n private searchMoreFacetsLink(\n facetGroup: FacetGroup\n ): TemplateResult | typeof nothing {\n // don't render More... link if you facets is < this.moreLinkEligibilityCount\n if (Object.keys(facetGroup.buckets).length < this.moreLinkEligibilityCount)\n return nothing;\n\n return html`<button\n class=\"more-link\"\n @click=${() => {\n this.showMoreFacetsModal(facetGroup);\n }}\n >\n More...\n </button>`;\n }\n\n async showMoreFacetsModal(facetGroup: FacetGroup): Promise<void> {\n const facetAggrKey = Object.keys(aggregationToFacetOption).find(\n value => aggregationToFacetOption[value] === facetGroup.key\n );\n\n // TODO - lets move sr-only style into modal-manager component as well\n const headline = html`\n <span\n style=\"display:block;text-align:left;font-size:1.8rem;padding:0 10px;\"\n >\n <span\n style=\"position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip: rect(0,0,0,0);border:0;\"\n >More facets for:\n </span>\n ${facetTitles[facetGroup.key]}\n <img\n src=\"https://archive.org/images/filter-count.png\"\n style=\"height: 1.5rem;vertical-align: baseline;\"\n alt=\"\"\n />\n </span>\n `;\n\n const message = html`\n <more-facets-content\n @facetsChanged=${(e: CustomEvent) => {\n const event = new CustomEvent<SelectedFacets>('facetsChanged', {\n detail: e.detail,\n bubbles: true,\n composed: true,\n });\n this.dispatchEvent(event);\n }}\n .facetKey=${facetGroup.key}\n .facetAggregationKey=${facetAggrKey}\n .fullQuery=${this.fullQuery}\n .modalManager=${this.modalManager}\n .searchService=${this.searchService}\n .collectionNameCache=${this.collectionNameCache}\n .languageCodeHandler=${this.languageCodeHandler}\n .selectedFacets=${this.selectedFacets}\n >\n </more-facets-content>\n `;\n\n const config = new ModalConfig({\n bodyColor: '#fff',\n headerColor: '#194880',\n showHeaderLogo: false,\n closeOnBackdropClick: true, // TODO: want to fire analytics\n title: html`Select filters`,\n headline,\n message,\n });\n this.modalManager?.classList.add('more-search-facets');\n this.modalManager?.showModal({ config });\n }\n\n /**\n * Generate the list template for each bucket in a facet group\n */\n private getFacetTemplate(facetGroup: FacetGroup): TemplateResult {\n const bucketsNoFavorites = facetGroup.buckets.filter(\n bucket => bucket.key.startsWith('fav-') === false\n );\n const bucketsMaxSix = bucketsNoFavorites.slice(0, 6);\n\n return html`\n <ul class=\"facet-list\">\n ${repeat(\n bucketsMaxSix,\n bucket => `${facetGroup.key}:${bucket.key}`,\n bucket => {\n const showOnlyCheckboxId = `${facetGroup.key}:${bucket.key}-show-only`;\n const negativeCheckboxId = `${facetGroup.key}:${bucket.key}-negative`;\n\n // for collections, we need to asynchronously load the collection name\n // so we use the `async-collection-name` widget and for the rest, we have\n // a static value to use\n const bucketTextDisplay =\n facetGroup.key !== 'collection'\n ? html`${bucket.displayText ?? bucket.key}`\n : html`\n <async-collection-name\n .collectionNameCache=${this.collectionNameCache}\n .identifier=${bucket.key}\n placeholder=\"-\"\n ></async-collection-name>\n `;\n\n const facetHidden = bucket.state === 'hidden';\n const facetSelected = bucket.state === 'selected';\n\n const titleText = `${facetGroup.key}: ${\n bucket.displayText ?? bucket.key\n }`;\n const onlyShowText = facetSelected\n ? `Show all ${facetGroup.key}s`\n : `Only show ${titleText}`;\n const hideText = `Hide ${titleText}`;\n const unhideText = `Unhide ${titleText}`;\n const showHideText = facetHidden ? unhideText : hideText;\n\n return html`\n <li>\n <div class=\"facet-row\">\n <div class=\"facet-checkbox\">\n <input\n type=\"checkbox\"\n .name=${facetGroup.key}\n .value=${bucket.key}\n @click=${(e: Event) => {\n this.facetClicked(e, bucket, false);\n }}\n .checked=${facetSelected}\n class=\"select-facet-checkbox\"\n title=${onlyShowText}\n id=${showOnlyCheckboxId}\n />\n <input\n type=\"checkbox\"\n id=${negativeCheckboxId}\n .name=${facetGroup.key}\n .value=${bucket.key}\n @click=${(e: Event) => {\n this.facetClicked(e, bucket, true);\n }}\n .checked=${facetHidden}\n class=\"hide-facet-checkbox\"\n />\n <label\n for=${negativeCheckboxId}\n class=\"hide-facet-icon${facetHidden ? ' active' : ''}\"\n title=${showHideText}\n >\n <span class=\"eye\">${eyeIcon}</span>\n <span class=\"eye-closed\">${eyeClosedIcon}</span>\n </label>\n </div>\n\n <label\n for=${showOnlyCheckboxId}\n class=\"facet-info-display\"\n title=${onlyShowText}\n >\n <div class=\"facet-title\">${bucketTextDisplay}</div>\n <div class=\"facet-count\">${bucket.count}</div>\n </label>\n </div>\n </li>\n `;\n }\n )}\n </ul>\n `;\n }\n\n private facetClicked(e: Event, bucket: FacetBucket, negative: boolean) {\n const target = e.target as HTMLInputElement;\n const { checked, name, value } = target;\n if (checked) {\n this.facetChecked(name as FacetOption, value, negative);\n } else {\n this.facetUnchecked(name as FacetOption, value);\n }\n }\n\n private facetChecked(key: FacetOption, value: string, negative: boolean) {\n const { selectedFacets } = this;\n let newFacets: SelectedFacets;\n if (selectedFacets) {\n newFacets = {\n ...selectedFacets,\n };\n } else {\n newFacets = defaultSelectedFacets;\n }\n newFacets[key][value] = negative ? 'hidden' : 'selected';\n this.selectedFacets = newFacets;\n }\n\n private facetUnchecked(key: FacetOption, value: string) {\n const { selectedFacets } = this;\n let newFacets: SelectedFacets;\n if (selectedFacets) {\n newFacets = {\n ...selectedFacets,\n };\n } else {\n newFacets = defaultSelectedFacets;\n }\n delete newFacets[key][value];\n this.selectedFacets = newFacets;\n }\n\n /**\n * Parse the aggregate key title into the human readable title\n *\n * Example: user_aggs__terms__field:mediatypeSorter__size:6 => Media Type\n *\n * @param key\n * @returns\n */\n private getFacetOptionFromKey(key: string): FacetOption {\n const parts = key.split('__');\n const fieldNamePart = parts[2];\n const fieldName = fieldNamePart.split(':')[1];\n const facetMatch = Object.entries(aggregationToFacetOption).find(([key2]) =>\n fieldName.includes(key2)\n );\n const option = facetMatch?.[1];\n if (!option) throw new Error(`Could not find facet option for key: ${key}`);\n return option;\n }\n\n static get styles() {\n return css`\n #container.loading {\n opacity: 0.5;\n }\n\n .collapser {\n display: inline-block;\n cursor: pointer;\n width: 10px;\n height: 10px;\n }\n\n .collapser svg {\n transition: transform 0.2s ease-in-out;\n }\n\n .collapser.open svg {\n transform: rotate(90deg);\n }\n\n .facet-group {\n margin-bottom: 2rem;\n }\n\n .facet-group h1 {\n margin-bottom: 0.7rem;\n }\n\n .facet-group.mobile h1 {\n cursor: pointer;\n }\n\n .facet-group-content {\n transition: max-height 0.2s ease-in-out;\n }\n\n .facet-group.mobile .facet-group-content {\n max-height: 0;\n overflow: hidden;\n }\n\n .facet-group.mobile .facet-group-content.open {\n max-height: 2000px;\n }\n\n h1 {\n font-size: 1.4rem;\n font-weight: 200;\n border-bottom: 1px solid rgb(232, 232, 232);\n padding-bottom: 3px;\n margin: 0;\n }\n\n ul.facet-list {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n ul.facet-list li {\n margin-bottom: 0.2rem;\n }\n\n .facet-checkbox {\n margin-right: 0.5rem;\n display: flex;\n align-items: center;\n }\n\n .facet-row {\n display: flex;\n align-items: start;\n font-weight: 500;\n font-size: 1.2rem;\n }\n\n .facet-info-display {\n display: flex;\n flex: 1;\n cursor: pointer;\n }\n\n .facet-title {\n flex: 1;\n }\n\n .facet-count {\n margin-left: 0.5rem;\n }\n\n .select-facet-checkbox {\n cursor: pointer;\n margin-right: 5px;\n }\n\n .hide-facet-checkbox {\n display: none;\n }\n\n .hide-facet-icon {\n width: 15px;\n height: 15px;\n cursor: pointer;\n opacity: 0.3;\n }\n .hide-facet-icon:hover,\n .active {\n opacity: 1;\n }\n .hide-facet-icon:hover .eye,\n .hide-facet-icon .eye-closed {\n display: none;\n }\n .hide-facet-icon:hover .eye-closed,\n .hide-facet-icon.active .eye-closed {\n display: inline;\n }\n .hide-facet-icon.active .eye {\n display: none;\n }\n\n .more-link {\n font-size: 1.2rem;\n text-decoration: none;\n padding: 0px 4px;\n background: white;\n border: 0;\n color: blue;\n cursor: pointer;\n }\n .sorting-icon {\n cursor: pointer;\n }\n `;\n }\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import { LitElement, CSSResultGroup, nothing } from 'lit';
2
+ export declare type PlaceholderType = 'empty-query' | 'null-result' | null;
3
+ export declare class EmptyPlaceholder extends LitElement {
4
+ placeholderType: PlaceholderType;
5
+ isMobileView?: false;
6
+ render(): import("lit-html").TemplateResult<1> | typeof nothing;
7
+ private get placeholderTemplate();
8
+ private get emptyQueryTemplate();
9
+ private get nullResultTemplate();
10
+ static get styles(): CSSResultGroup;
11
+ }
@@ -0,0 +1,83 @@
1
+ import { __decorate } from "tslib";
2
+ import { css, html, LitElement, nothing } from 'lit';
3
+ import { customElement, property } from 'lit/decorators.js';
4
+ import { choose } from 'lit/directives/choose.js';
5
+ import emptyQueryIcon from './assets/img/icons/empty-query';
6
+ import nullResultIcon from './assets/img/icons/null-result';
7
+ let EmptyPlaceholder = class EmptyPlaceholder extends LitElement {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.placeholderType = null;
11
+ }
12
+ render() {
13
+ return this.placeholderType ? html `${this.placeholderTemplate}` : nothing;
14
+ }
15
+ get placeholderTemplate() {
16
+ return html `
17
+ <div
18
+ class="placeholder ${this.placeholderType} ${this.isMobileView
19
+ ? 'mobile'
20
+ : 'desktop'}"
21
+ >
22
+ ${choose(this.placeholderType, [
23
+ ['empty-query', () => this.emptyQueryTemplate],
24
+ ['null-result', () => this.nullResultTemplate],
25
+ ])}
26
+ </div>
27
+ `;
28
+ }
29
+ get emptyQueryTemplate() {
30
+ return html `
31
+ <h2 class="title">
32
+ To begin searching, enter a search term in the box above and hit "Go".
33
+ </h2>
34
+ <div>${emptyQueryIcon}</div>
35
+ `;
36
+ }
37
+ get nullResultTemplate() {
38
+ return html `
39
+ <h2 class="title">
40
+ Your search did not match any items in the Archive. Try different
41
+ keywords or a more general search.
42
+ </h2>
43
+ <div>${nullResultIcon}</div>
44
+ `;
45
+ }
46
+ static get styles() {
47
+ return css `
48
+ :host {
49
+ text-align: center;
50
+ width: 100%;
51
+ }
52
+
53
+ .placeholder {
54
+ display: block;
55
+ }
56
+
57
+ .desktop svg {
58
+ max-height: 40rem;
59
+ }
60
+ .desktop .title {
61
+ margin: 4rem 0;
62
+ }
63
+
64
+ .mobile svg {
65
+ max-height: 20rem;
66
+ }
67
+ .mobile .title {
68
+ margin: 2rem 0.5;
69
+ }
70
+ `;
71
+ }
72
+ };
73
+ __decorate([
74
+ property({ type: String })
75
+ ], EmptyPlaceholder.prototype, "placeholderType", void 0);
76
+ __decorate([
77
+ property({ type: Boolean })
78
+ ], EmptyPlaceholder.prototype, "isMobileView", void 0);
79
+ EmptyPlaceholder = __decorate([
80
+ customElement('empty-placeholder')
81
+ ], EmptyPlaceholder);
82
+ export { EmptyPlaceholder };
83
+ //# sourceMappingURL=empty-placeholder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"empty-placeholder.js","sourceRoot":"","sources":["../../src/empty-placeholder.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAkB,OAAO,EAAE,MAAM,KAAK,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,OAAO,cAAc,MAAM,gCAAgC,CAAC;AAC5D,OAAO,cAAc,MAAM,gCAAgC,CAAC;AAI5D,IAAa,gBAAgB,GAA7B,MAAa,gBAAiB,SAAQ,UAAU;IAAhD;;QAC8B,oBAAe,GAAoB,IAAI,CAAC;IAoEtE,CAAC;IAhEC,MAAM;QACJ,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAA,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IAC5E,CAAC;IAED,IAAY,mBAAmB;QAC7B,OAAO,IAAI,CAAA;;6BAEc,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,YAAY;YAC5D,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,SAAS;;UAEX,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE;YAC7B,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC;YAC9C,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC;SAC/C,CAAC;;KAEL,CAAC;IACJ,CAAC;IAED,IAAY,kBAAkB;QAC5B,OAAO,IAAI,CAAA;;;;aAIF,cAAc;KACtB,CAAC;IACJ,CAAC;IAED,IAAY,kBAAkB;QAC5B,OAAO,IAAI,CAAA;;;;;aAKF,cAAc;KACtB,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,MAAM;QACf,OAAO,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;KAuBT,CAAC;IACJ,CAAC;CACF,CAAA;AApE6B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;yDAAyC;AAEvC;IAA5B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;sDAAsB;AAHvC,gBAAgB;IAD5B,aAAa,CAAC,mBAAmB,CAAC;GACtB,gBAAgB,CAqE5B;SArEY,gBAAgB","sourcesContent":["import { css, html, LitElement, CSSResultGroup, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { choose } from 'lit/directives/choose.js';\n\nimport emptyQueryIcon from './assets/img/icons/empty-query';\nimport nullResultIcon from './assets/img/icons/null-result';\n\nexport type PlaceholderType = 'empty-query' | 'null-result' | null;\n@customElement('empty-placeholder')\nexport class EmptyPlaceholder extends LitElement {\n @property({ type: String }) placeholderType: PlaceholderType = null;\n\n @property({ type: Boolean }) isMobileView?: false;\n\n render() {\n return this.placeholderType ? html`${this.placeholderTemplate}` : nothing;\n }\n\n private get placeholderTemplate() {\n return html`\n <div\n class=\"placeholder ${this.placeholderType} ${this.isMobileView\n ? 'mobile'\n : 'desktop'}\"\n >\n ${choose(this.placeholderType, [\n ['empty-query', () => this.emptyQueryTemplate],\n ['null-result', () => this.nullResultTemplate],\n ])}\n </div>\n `;\n }\n\n private get emptyQueryTemplate() {\n return html`\n <h2 class=\"title\">\n To begin searching, enter a search term in the box above and hit \"Go\".\n </h2>\n <div>${emptyQueryIcon}</div>\n `;\n }\n\n private get nullResultTemplate() {\n return html`\n <h2 class=\"title\">\n Your search did not match any items in the Archive. Try different\n keywords or a more general search.\n </h2>\n <div>${nullResultIcon}</div>\n `;\n }\n\n static get styles(): CSSResultGroup {\n return css`\n :host {\n text-align: center;\n width: 100%;\n }\n\n .placeholder {\n display: block;\n }\n\n .desktop svg {\n max-height: 40rem;\n }\n .desktop .title {\n margin: 4rem 0;\n }\n\n .mobile svg {\n max-height: 20rem;\n }\n .mobile .title {\n margin: 2rem 0.5;\n }\n `;\n }\n}\n"]}
@@ -0,0 +1,37 @@
1
+ export interface LanguageCodeHandlerInterface {
2
+ /**
3
+ * This takes a list of codes in the format `en-us|en|en-gb` and
4
+ * returns the first language code in the list.
5
+ *
6
+ * The codes in the string should always represent the same language name.
7
+ * eg `en-us`, `en-gb`, and `en` should always be "English"
8
+ *
9
+ * @param languageCodes
10
+ */
11
+ getLanguageNameFromCodeString(languageCodes: string): string;
12
+ /**
13
+ * This creates a serialized string of language codes for the given language.
14
+ *
15
+ * eg. `English` becomes `en-us|en|en-gb|.....`
16
+ *
17
+ * @param languageName
18
+ */
19
+ getCodeStringFromLanguageName(languageName: string): string;
20
+ /**
21
+ * Get an array of langauge codes from a serialized string.
22
+ *
23
+ * eg. `en-us|en|en-gb` becomes `['en-us', 'en', 'en-gb']`
24
+ *
25
+ * @param languageCodes
26
+ */
27
+ getCodeArrayFromCodeString(languageCodes: string): string[];
28
+ }
29
+ export declare class LanguageCodeHandler implements LanguageCodeHandlerInterface {
30
+ private delimeter;
31
+ /** @inheritdoc */
32
+ getLanguageNameFromCodeString(languageCodes: string): string;
33
+ /** @inheritdoc */
34
+ getCodeStringFromLanguageName(languageName: string): string;
35
+ /** @inheritdoc */
36
+ getCodeArrayFromCodeString(languageCodes: string): string[];
37
+ }
@@ -0,0 +1,27 @@
1
+ import { codeToLanguageMap } from './language-code-mapping';
2
+ export class LanguageCodeHandler {
3
+ constructor() {
4
+ this.delimeter = '|';
5
+ }
6
+ /** @inheritdoc */
7
+ getLanguageNameFromCodeString(languageCodes) {
8
+ const split = this.getCodeArrayFromCodeString(languageCodes);
9
+ if (split.length === 0)
10
+ return '';
11
+ const languageCode = split[0];
12
+ const languageName = codeToLanguageMap[languageCode];
13
+ return languageName !== null && languageName !== void 0 ? languageName : languageCodes;
14
+ }
15
+ /** @inheritdoc */
16
+ getCodeStringFromLanguageName(languageName) {
17
+ const languageCodes = Object.keys(codeToLanguageMap).filter(code => codeToLanguageMap[code] === languageName);
18
+ const stringifiedCodes = languageCodes === null || languageCodes === void 0 ? void 0 : languageCodes.join(this.delimeter);
19
+ return stringifiedCodes;
20
+ }
21
+ /** @inheritdoc */
22
+ getCodeArrayFromCodeString(languageCodes) {
23
+ const split = languageCodes.split(this.delimeter);
24
+ return split;
25
+ }
26
+ }
27
+ //# sourceMappingURL=language-code-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-code-handler.js","sourceRoot":"","sources":["../../../src/language-code-handler/language-code-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAqC5D,MAAM,OAAO,mBAAmB;IAAhC;QACU,cAAS,GAAG,GAAG,CAAC;IAyB1B,CAAC;IAvBC,kBAAkB;IAClB,6BAA6B,CAAC,aAAqB;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,0BAA0B,CAAC,aAAa,CAAC,CAAC;QAC7D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAClC,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,YAAY,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;QACrD,OAAO,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,aAAa,CAAC;IACvC,CAAC;IAED,kBAAkB;IAClB,6BAA6B,CAAC,YAAoB;QAChD,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,CACzD,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,YAAY,CACjD,CAAC;QACF,MAAM,gBAAgB,GAAG,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7D,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,kBAAkB;IAClB,0BAA0B,CAAC,aAAqB;QAC9C,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClD,OAAO,KAAK,CAAC;IACf,CAAC;CACF","sourcesContent":["import { codeToLanguageMap } from './language-code-mapping';\n\n// To serialize the list of potential language codes, we store\n// the string in the format `en-us|en|en-gb` with `|` being the separator.\n// This allows us to generate a query of `language:(en-us OR en OR en-gb)`\n// when we deserialize the string.\nexport interface LanguageCodeHandlerInterface {\n /**\n * This takes a list of codes in the format `en-us|en|en-gb` and\n * returns the first language code in the list.\n *\n * The codes in the string should always represent the same language name.\n * eg `en-us`, `en-gb`, and `en` should always be \"English\"\n *\n * @param languageCodes\n */\n getLanguageNameFromCodeString(languageCodes: string): string;\n\n /**\n * This creates a serialized string of language codes for the given language.\n *\n * eg. `English` becomes `en-us|en|en-gb|.....`\n *\n * @param languageName\n */\n getCodeStringFromLanguageName(languageName: string): string;\n\n /**\n * Get an array of langauge codes from a serialized string.\n *\n * eg. `en-us|en|en-gb` becomes `['en-us', 'en', 'en-gb']`\n *\n * @param languageCodes\n */\n getCodeArrayFromCodeString(languageCodes: string): string[];\n}\n\nexport class LanguageCodeHandler implements LanguageCodeHandlerInterface {\n private delimeter = '|';\n\n /** @inheritdoc */\n getLanguageNameFromCodeString(languageCodes: string): string {\n const split = this.getCodeArrayFromCodeString(languageCodes);\n if (split.length === 0) return '';\n const languageCode = split[0];\n const languageName = codeToLanguageMap[languageCode];\n return languageName ?? languageCodes;\n }\n\n /** @inheritdoc */\n getCodeStringFromLanguageName(languageName: string): string {\n const languageCodes = Object.keys(codeToLanguageMap).filter(\n code => codeToLanguageMap[code] === languageName\n );\n const stringifiedCodes = languageCodes?.join(this.delimeter);\n return stringifiedCodes;\n }\n\n /** @inheritdoc */\n getCodeArrayFromCodeString(languageCodes: string): string[] {\n const split = languageCodes.split(this.delimeter);\n return split;\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ export declare const codeToLanguageMap: Record<string, string>;