@icij/murmur-next 4.0.0 → 4.0.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 (273) hide show
  1. package/README.md +15 -19
  2. package/dist/lib/components/AccordionStep.vue.d.ts +79 -0
  3. package/dist/lib/components/AccordionWrapper.vue.d.ts +33 -0
  4. package/dist/lib/components/ActiveTextTruncate.vue.d.ts +101 -0
  5. package/dist/lib/components/AdvancedLinkForm.vue.d.ts +168 -0
  6. package/dist/lib/components/Brand.vue.d.ts +55 -0
  7. package/dist/lib/components/BrandExpansion.vue.d.ts +105 -0
  8. package/dist/lib/components/ConfirmButton.vue.d.ts +158 -0
  9. package/dist/lib/components/ContentPlaceholder.vue.d.ts +44 -0
  10. package/dist/lib/components/CustomPagination.vue.d.ts +130 -0
  11. package/dist/lib/components/DigitsInput.vue.d.ts +66 -0
  12. package/dist/lib/components/DonateForm.vue.d.ts +46 -0
  13. package/dist/lib/components/EmbedForm.vue.d.ts +121 -0
  14. package/dist/lib/components/EmbeddableFooter.vue.d.ts +103 -0
  15. package/dist/lib/components/FollowUsPopover.vue.d.ts +16 -0
  16. package/dist/lib/components/GenericFooter.vue.d.ts +47 -0
  17. package/dist/lib/components/GenericHeader.vue.d.ts +928 -0
  18. package/dist/lib/components/HapticCopy.vue.d.ts +156 -0
  19. package/dist/lib/components/ImddbHeader.vue.d.ts +960 -0
  20. package/dist/lib/components/OrdinalLegend.vue.d.ts +87 -0
  21. package/dist/lib/components/RangePicker.vue.d.ts +196 -0
  22. package/dist/lib/components/ResponsiveIframe.vue.d.ts +45 -0
  23. package/dist/lib/components/ScaleLegend.vue.d.ts +101 -0
  24. package/dist/lib/components/SecretInput.vue.d.ts +99 -0
  25. package/dist/lib/components/SelectableDropdown.vue.d.ts +210 -0
  26. package/dist/lib/components/SharingOptions.vue.d.ts +153 -0
  27. package/dist/lib/components/SharingOptionsLink.vue.d.ts +200 -0
  28. package/dist/lib/components/SignUpForm.vue.d.ts +141 -0
  29. package/dist/lib/components/SlideUpDown.vue.d.ts +74 -0
  30. package/dist/lib/components/TexturedDeck.vue.d.ts +89 -0
  31. package/dist/lib/components/TinyPagination.vue.d.ts +188 -0
  32. package/dist/lib/composables/chart.d.ts +48 -0
  33. package/dist/lib/composables/resizeObserver.d.ts +22 -0
  34. package/dist/lib/composables/sendEmail.d.ts +6 -0
  35. package/dist/lib/config.d.ts +19 -0
  36. package/dist/lib/config.default.d.ts +34 -0
  37. package/dist/lib/datavisualisations/BarChart.vue.d.ts +234 -0
  38. package/dist/lib/datavisualisations/ColumnChart.vue.d.ts +404 -0
  39. package/dist/lib/datavisualisations/LineChart.vue.d.ts +200 -0
  40. package/dist/lib/datavisualisations/StackedBarChart.vue.d.ts +342 -0
  41. package/dist/lib/datavisualisations/StackedColumnChart.vue.d.ts +412 -0
  42. package/dist/lib/enums.d.ts +32 -0
  43. package/dist/lib/i18n.d.ts +4 -0
  44. package/dist/lib/keys.d.ts +2 -0
  45. package/dist/lib/main.d.ts +52 -0
  46. package/dist/lib/maps/ChoroplethMap.vue.d.ts +460 -0
  47. package/dist/lib/maps/ChoroplethMapAnnotation.vue.d.ts +188 -0
  48. package/dist/lib/maps/SymbolMap.vue.d.ts +276 -0
  49. package/dist/lib/murmur.css +1 -0
  50. package/dist/lib/murmur.js +44661 -0
  51. package/dist/lib/murmur.js.map +1 -0
  52. package/dist/lib/murmur.umd.cjs +837 -0
  53. package/dist/lib/murmur.umd.cjs.map +1 -0
  54. package/dist/lib/types.d.ts +44 -0
  55. package/dist/lib/utils/animation.d.ts +8 -0
  56. package/dist/lib/utils/assets.d.ts +2 -0
  57. package/dist/lib/utils/clipboard.d.ts +2 -0
  58. package/dist/lib/utils/iframe-resizer.d.ts +10 -0
  59. package/dist/lib/utils/placeholder.d.ts +12 -0
  60. package/dist/lib/utils/placeholderTypes.d.ts +18 -0
  61. package/dist/lib/utils/strings.d.ts +1 -0
  62. package/package.json +15 -1
  63. package/.github/workflows/deploy-github-pages.yaml +0 -50
  64. package/.storybook/app.scss +0 -14
  65. package/.storybook/doc_variables.scss +0 -20
  66. package/.storybook/main.ts +0 -35
  67. package/.storybook/preview-head.html +0 -2
  68. package/.storybook/preview.ts +0 -32
  69. package/deploy.js +0 -15
  70. package/docs/components/ApiTable.vue +0 -171
  71. package/docs/components/App.vue +0 -146
  72. package/docs/components/CollapsibleBlock.vue +0 -122
  73. package/docs/components/DocsHeader.vue +0 -68
  74. package/docs/components/DocsMenu.vue +0 -201
  75. package/docs/components/DocsMenuSection.vue +0 -109
  76. package/docs/components/EditLink.vue +0 -49
  77. package/docs/components/OutboundLink.vue +0 -13
  78. package/docs/components/PalettePresenter.vue +0 -96
  79. package/docs/components/RepositoryLink.vue +0 -28
  80. package/docs/components/SampleCard.vue +0 -119
  81. package/docs/main.js +0 -42
  82. package/docs/pages/components/accordion/doc.md +0 -96
  83. package/docs/pages/components/active-text-truncate/doc.md +0 -44
  84. package/docs/pages/components/advanced-link-form/doc.md +0 -105
  85. package/docs/pages/components/brand/doc.md +0 -30
  86. package/docs/pages/components/brand-expansion/doc.md +0 -70
  87. package/docs/pages/components/confirm-button/doc.md +0 -91
  88. package/docs/pages/components/content-placeholder/doc.md +0 -16
  89. package/docs/pages/components/custom-pagination/doc.md +0 -61
  90. package/docs/pages/components/digits-input/doc.md +0 -28
  91. package/docs/pages/components/donate-form/doc.md +0 -20
  92. package/docs/pages/components/embed-form/doc.md +0 -22
  93. package/docs/pages/components/embeddable-footer/doc.md +0 -60
  94. package/docs/pages/components/follow-us-popover/doc.md +0 -5
  95. package/docs/pages/components/generic-footer/doc.md +0 -21
  96. package/docs/pages/components/generic-header/doc.md +0 -24
  97. package/docs/pages/components/haptic-copy/doc.md +0 -27
  98. package/docs/pages/components/imddb-header/doc.md +0 -23
  99. package/docs/pages/components/ordinal-legend/doc.md +0 -44
  100. package/docs/pages/components/range-picker/doc.md +0 -86
  101. package/docs/pages/components/responsive-iframe/doc.md +0 -13
  102. package/docs/pages/components/scale-legend/doc.md +0 -65
  103. package/docs/pages/components/secret-input/doc.md +0 -12
  104. package/docs/pages/components/selectable-dropdown/doc.md +0 -156
  105. package/docs/pages/components/sharing-options/doc.md +0 -13
  106. package/docs/pages/components/sharing-options-link/doc.md +0 -36
  107. package/docs/pages/components/sign-up-form/doc.md +0 -13
  108. package/docs/pages/components/slide-up-down/doc.md +0 -28
  109. package/docs/pages/components/textured-deck/doc.md +0 -78
  110. package/docs/pages/components/tiny-pagination/doc.md +0 -92
  111. package/docs/pages/datavisualisation/bars/doc.md +0 -110
  112. package/docs/pages/datavisualisation/columns/doc.md +0 -165
  113. package/docs/pages/datavisualisation/lines/doc.md +0 -139
  114. package/docs/pages/datavisualisation/stacked-bar/doc.md +0 -160
  115. package/docs/pages/datavisualisation/stacked-column/doc.md +0 -191
  116. package/docs/pages/getting-started/about-icij/doc.md +0 -13
  117. package/docs/pages/getting-started/custom-bootstrap/doc.md +0 -36
  118. package/docs/pages/getting-started/installation-guide/doc.md +0 -59
  119. package/docs/pages/getting-started/internationalization/doc.md +0 -74
  120. package/docs/pages/maps/choropleth-map/doc.md +0 -420
  121. package/docs/pages/maps/choropleth-map-annotation/doc.md +0 -373
  122. package/docs/pages/maps/symbol-map/doc.md +0 -203
  123. package/docs/pages/structure/breakpoints/doc.md +0 -3
  124. package/docs/pages/structure/grid/doc.md +0 -3
  125. package/docs/pages/utilities/assets/doc.md +0 -138
  126. package/docs/pages/utilities/config/doc.md +0 -52
  127. package/docs/pages/utilities/iframes/doc.md +0 -3
  128. package/docs/pages/visual/colors/doc.md +0 -31
  129. package/docs/pages/visual/iconography/doc.md +0 -56
  130. package/docs/pages/visual/states/doc.md +0 -77
  131. package/docs/pages/visual/themes/doc.md +0 -3
  132. package/docs/pages/visual/typography/doc.md +0 -71
  133. package/docs/routes.js +0 -25
  134. package/docs/store/index.js +0 -21
  135. package/docs/styles/app.scss +0 -36
  136. package/docs/styles/variables.scss +0 -20
  137. package/loaders/highlight-loader.js +0 -13
  138. package/loaders/markdown-loader.js +0 -91
  139. package/loaders/metadata-loader.js +0 -18
  140. package/loaders/sass-extract-loader.js +0 -14
  141. package/loaders/vue-docgen-loader.js +0 -14
  142. package/plugins/MdPluginTypes.ts +0 -10
  143. package/plugins/docs.ts +0 -50
  144. package/plugins/front-matter.ts +0 -36
  145. package/plugins/highlight.ts +0 -27
  146. package/plugins/markdown-it/api-table.ts +0 -25
  147. package/plugins/markdown-it/sample-card.ts +0 -31
  148. package/plugins/plugin-delete.ts +0 -47
  149. package/plugins/plugin-docgen.ts +0 -23
  150. package/plugins/sass-vars.ts +0 -25
  151. package/plugins/vue-docgen.ts +0 -29
  152. package/public/android-chrome-192x192.png +0 -0
  153. package/public/android-chrome-512x512.png +0 -0
  154. package/public/apple-touch-icon.png +0 -0
  155. package/public/assets/img/arrow-bottom.svg +0 -3
  156. package/public/assets/img/texture-brick-black.jpg +0 -0
  157. package/public/assets/img/texture-brick.jpg +0 -0
  158. package/public/assets/img/texture-carbon-black.jpg +0 -0
  159. package/public/assets/img/texture-carbon.jpg +0 -0
  160. package/public/assets/img/texture-crack-black.jpg +0 -0
  161. package/public/assets/img/texture-crack.jpg +0 -0
  162. package/public/assets/img/texture-rock-black.jpg +0 -0
  163. package/public/assets/img/texture-rock.jpg +0 -0
  164. package/public/assets/img/texture-sand-black.jpg +0 -0
  165. package/public/assets/img/texture-sand.jpg +0 -0
  166. package/public/assets/img/texture-silk-black.jpg +0 -0
  167. package/public/assets/img/texture-silk.jpg +0 -0
  168. package/public/assets/topojson/france-departments.json +0 -1
  169. package/public/assets/topojson/paris-arrondissements.json +0 -1
  170. package/public/assets/topojson/world-countries-sans-antarctica.json +0 -1
  171. package/public/favicon-16x16.png +0 -0
  172. package/public/favicon-32x32.png +0 -0
  173. package/public/favicon.ico +0 -0
  174. package/public/site.webmanifest +0 -1
  175. package/stories/assets/code-brackets.svg +0 -1
  176. package/stories/assets/colors.svg +0 -1
  177. package/stories/assets/comments.svg +0 -1
  178. package/stories/assets/direction.svg +0 -1
  179. package/stories/assets/flow.svg +0 -1
  180. package/stories/assets/plugin.svg +0 -1
  181. package/stories/assets/repo.svg +0 -1
  182. package/stories/assets/stackalt.svg +0 -1
  183. package/stories/getting-started/about-icij.mdx +0 -14
  184. package/stories/getting-started/custom-bootstrap.mdx +0 -23
  185. package/stories/getting-started/installation-guide.mdx +0 -62
  186. package/stories/getting-started/internationalization.mdx +0 -63
  187. package/stories/murmur/components/AccordionStep.stories.ts +0 -33
  188. package/stories/murmur/components/AccordionWrapper.stories.ts +0 -69
  189. package/stories/murmur/components/ActiveTextTruncate.stories.ts +0 -32
  190. package/stories/murmur/components/AdvancedLinkForm.stories.ts +0 -77
  191. package/stories/murmur/components/Brand.stories.ts +0 -30
  192. package/stories/murmur/components/BrandExpansion.stories.ts +0 -41
  193. package/stories/murmur/components/ConfirmButton.stories.ts +0 -40
  194. package/stories/murmur/components/ContentPlaceholder.stories.ts +0 -41
  195. package/stories/murmur/components/CustomPagination.stories.ts +0 -42
  196. package/stories/murmur/components/DigitsInput.stories.ts +0 -29
  197. package/stories/murmur/components/DonateForm.stories.ts +0 -29
  198. package/stories/murmur/components/EmbedForm.stories.ts +0 -35
  199. package/stories/murmur/components/EmbeddableFooter.stories.ts +0 -59
  200. package/stories/murmur/components/FollowUsPopover.stories.ts +0 -24
  201. package/stories/murmur/components/GenericFooter.stories.ts +0 -27
  202. package/stories/murmur/components/GenericHeader.stories.ts +0 -27
  203. package/stories/murmur/components/HapticCopy.stories.ts +0 -40
  204. package/stories/murmur/components/ImddbHeader.stories.ts +0 -27
  205. package/stories/murmur/components/OrdinalLegend.stories.ts +0 -49
  206. package/stories/murmur/components/RangePicker.stories.ts +0 -98
  207. package/stories/murmur/components/ResponsiveIframe.stories.ts +0 -24
  208. package/stories/murmur/components/ScaleLegend.stories.ts +0 -65
  209. package/stories/murmur/components/SecretInput.stories.ts +0 -60
  210. package/stories/murmur/components/SelectableDropdown.stories.ts +0 -143
  211. package/stories/murmur/components/SharingOptions.stories.ts +0 -32
  212. package/stories/murmur/components/SharingOptionsLink.stories.ts +0 -53
  213. package/stories/murmur/components/SignUpForm.stories.ts +0 -51
  214. package/stories/murmur/components/SlideUpDown.stories.ts +0 -32
  215. package/stories/murmur/components/TexturedDeck.stories.ts +0 -83
  216. package/stories/murmur/components/TinyPagination.stories.ts +0 -65
  217. package/stories/murmur/datavisualisations/BarChart.stories.ts +0 -54
  218. package/stories/murmur/datavisualisations/ColumnChart.stories.ts +0 -88
  219. package/stories/murmur/datavisualisations/LineChart.stories.ts +0 -139
  220. package/stories/murmur/datavisualisations/StackedBarChart.stories.ts +0 -199
  221. package/stories/murmur/datavisualisations/StackedColumnChart.stories.ts +0 -136
  222. package/stories/murmur/decorators.ts +0 -108
  223. package/stories/murmur/maps/ChoroplethMap.stories.ts +0 -440
  224. package/stories/murmur/maps/ChoroplethMapAnnotation.stories.ts +0 -26
  225. package/stories/murmur/maps/SymbolMap.stories.ts +0 -24
  226. package/stories/murmur/utils.ts +0 -7
  227. package/tests/unit/components/AccordionStep.spec.ts +0 -157
  228. package/tests/unit/components/AccordionWrapper.spec.ts +0 -57
  229. package/tests/unit/components/ActiveTextTruncate.spec.js +0 -30
  230. package/tests/unit/components/AdvancedLinkForm.spec.js +0 -124
  231. package/tests/unit/components/Brand.spec.js +0 -50
  232. package/tests/unit/components/ContentPlaceholder.spec.js +0 -29
  233. package/tests/unit/components/CustomPagination.spec.js +0 -72
  234. package/tests/unit/components/DigitsInput.spec.ts +0 -157
  235. package/tests/unit/components/DonateForm.spec.js +0 -149
  236. package/tests/unit/components/EmbedForm.spec.js +0 -108
  237. package/tests/unit/components/EmbeddableFooter.spec.js +0 -11
  238. package/tests/unit/components/Fa.spec.js +0 -18
  239. package/tests/unit/components/FollowUsPopover.spec.js +0 -29
  240. package/tests/unit/components/GenericFooter.spec.js +0 -29
  241. package/tests/unit/components/GenericHeader.spec.js +0 -104
  242. package/tests/unit/components/HapticCopy.spec.js +0 -123
  243. package/tests/unit/components/ImddbHeader.spec.js +0 -96
  244. package/tests/unit/components/OrdinalLegend.spec.js +0 -120
  245. package/tests/unit/components/RangePicker.spec.ts +0 -87
  246. package/tests/unit/components/ResponsiveIframe.spec.js +0 -20
  247. package/tests/unit/components/ScaleLegend.spec.js +0 -139
  248. package/tests/unit/components/SecretInput.spec.js +0 -81
  249. package/tests/unit/components/SelectableDropdown.spec.js +0 -160
  250. package/tests/unit/components/SharingOptions.spec.js +0 -125
  251. package/tests/unit/components/SharingOptionsLink.spec.js +0 -184
  252. package/tests/unit/components/SignUpForm.spec.js +0 -145
  253. package/tests/unit/components/SlideUpDown.spec.js +0 -59
  254. package/tests/unit/components/TinyPagination.spec.js +0 -46
  255. package/tests/unit/config.spec.js +0 -136
  256. package/tests/unit/datavisualisations/BarChart.spec.js +0 -63
  257. package/tests/unit/datavisualisations/ColumnChart.spec.js +0 -344
  258. package/tests/unit/datavisualisations/LineChart.spec.js +0 -155
  259. package/tests/unit/datavisualisations/StackedBarChart.spec.js +0 -294
  260. package/tests/unit/datavisualisations/StackedColumnChart.spec.js +0 -443
  261. package/tests/unit/i18n.spec.ts +0 -19
  262. package/tests/unit/main.spec.js +0 -82
  263. package/tests/unit/maps/ChoroplethMap.spec.js +0 -214
  264. package/tests/unit/maps/ChoroplethMapAnnotation.spec.ts +0 -186
  265. package/tests/unit/maps/SymbolMap.spec.js +0 -92
  266. package/tests/unit/require.spec.js +0 -22
  267. package/tests/unit/setup.js +0 -13
  268. package/tests/unit/utils/assets.spec.js +0 -61
  269. package/tests/unit/utils/clipboard.spec.js +0 -18
  270. package/tests/unit/utils/iframe-resizer.spec.js +0 -71
  271. package/tsconfig.json +0 -35
  272. package/vite.config.ts +0 -79
  273. package/vitest.config.ts +0 -19
@@ -1,214 +0,0 @@
1
- import { promises as fs } from 'fs'
2
- import { join, resolve } from 'path'
3
- import { zipObjectDeep } from 'lodash'
4
- import { shallowMount,flushPromises } from '@vue/test-utils'
5
- import ChoroplethMap from '@/maps/ChoroplethMap.vue'
6
-
7
- vi.mock('d3', async () => {
8
- return {
9
- ...(await vi.importActual('d3')),
10
- json: async url => {
11
- const pathname = url.split('https://icij.github.io/murmur/').pop()
12
- const abspath = resolve(__dirname, join('../../../public', pathname))
13
- const raw = await fs.readFile(abspath, 'UTF-8')
14
- return JSON.parse(raw)
15
- },
16
- zoom() {
17
- const zoom = {
18
- scaleExtent: () => zoom,
19
- translateExtent: () => zoom,
20
- transform: () => null,
21
- on: () => zoom
22
- }
23
- return zoom
24
- }
25
- }
26
- })
27
-
28
- describe('ChoroplethMap.vue', () => {
29
-
30
- describe('a map of the world', () => {
31
-
32
- let wrapper
33
-
34
- beforeEach(async () => {
35
- const propsData = {
36
- data: {
37
- FRA: 100,
38
- SRB: 150,
39
- KGZ: 200
40
- },
41
- }
42
- wrapper = shallowMount(ChoroplethMap, { propsData, global:{renderDefaultStub:true} })
43
- wrapper.vm.$refs.resizable.style.width = '500px'
44
- await wrapper.vm.loadTopojson()
45
- await wrapper.vm.$nextTick()
46
- })
47
-
48
- it('is a Vue instance', () => {
49
- expect(wrapper.vm).toBeTruthy()
50
- })
51
-
52
- it('has a feature for KGZ with the end color of the scale', () => {
53
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-kgz')
54
- const color = window.getComputedStyle(feature.wrapperElement).color
55
- expect(color).toBe('rgb(133, 35, 8)')
56
- })
57
-
58
- it('has a feature for SRV with the middle color of the scale', () => {
59
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-srb')
60
- const color = window.getComputedStyle(feature.element).color
61
- expect(color).toBe('rgb(194, 145, 132)')
62
- })
63
-
64
- it('has a feature for FRA with the start color of the scale', () => {
65
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-fra')
66
- const color = window.getComputedStyle(feature.element).color
67
- expect(color).toBe('rgb(255, 255, 255)')
68
- })
69
-
70
- it('activates the cursor when mouse is over a feature', () => {
71
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-kgz')
72
- feature.element.dispatchEvent(new Event('mouseover'))
73
- expect(wrapper.vm.featureCursor).toBe('KGZ')
74
- })
75
-
76
- it('changes the cursor when mouse is over another feature', () => {
77
- wrapper.vm.updateFeatureCursor('KGZ')
78
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-fra')
79
- feature.element.dispatchEvent(new Event('mouseover'))
80
- expect(wrapper.vm.featureCursor).toBe('FRA')
81
- })
82
-
83
- it('deactivates the cursor when mouse leaves a feature', () => {
84
- wrapper.vm.updateFeatureCursor('KGZ')
85
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-kgz')
86
- feature.element.dispatchEvent(new Event('mouseleave'))
87
- expect(wrapper.vm.featureCursor).toBeNull()
88
- })
89
-
90
- it('doesnt actve the cursor when mouse is over a feature without data', () => {
91
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-usa')
92
- feature.element.dispatchEvent(new Event('mouseover'))
93
- expect(wrapper.vm.featureCursor).toBeNull()
94
- })
95
-
96
- it('set a class to the component when a cursor is active', async () => {
97
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-kgz')
98
- feature.element.dispatchEvent(new Event('mouseover'))
99
- await wrapper.vm.$nextTick()
100
- expect(wrapper.classes('choropleth-map--has-cursor')).toBeTruthy()
101
- })
102
-
103
- it('remove the class to the component when a cursor is removed', async () => {
104
- wrapper.vm.updateFeatureCursor('KGZ')
105
- await wrapper.vm.$nextTick()
106
- expect(wrapper.classes('choropleth-map--has-cursor')).toBeTruthy()
107
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-kgz')
108
- feature.element.dispatchEvent(new Event('mouseleave'))
109
- await wrapper.vm.$nextTick()
110
- expect(wrapper.classes('choropleth-map--has-cursor')).toBeFalsy()
111
- })
112
- })
113
-
114
-
115
- describe('a clickable map of france with data on 3 departments', () => {
116
-
117
- let wrapper
118
-
119
- beforeEach(async () => {
120
- const propsData = {
121
- topojsonUrl: '/assets/topojson/france-departments.json',
122
- topojsonObjects: 'departements',
123
- topojsonObjectsPath: 'properties.code',
124
- clickable: true,
125
- transitionDuration: 0,
126
- data: {
127
- "01": 100,
128
- "02": 150,
129
- "03": 200
130
- }
131
- }
132
- wrapper = shallowMount(ChoroplethMap, { propsData })
133
- wrapper.vm.$refs.resizable.style.width = '500px'
134
- await wrapper.vm.loadTopojson()
135
- await wrapper.vm.$nextTick()
136
- // Since JSDOM badly lack SVG support, we need to mock
137
- // some low level attributes such as size of the SVG element.
138
- wrapper.vm.setMapNodeSize({
139
- width:zipObjectDeep(['baseVal.width.value'], [500]),
140
- height:zipObjectDeep(['baseVal.height.value'], [300])
141
- })
142
- })
143
-
144
- it('is a Vue instance', () => {
145
- expect(wrapper.vm).toBeTruthy()
146
- })
147
-
148
- it('has a feature for 01 with the start color of the scale', () => {
149
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-01')
150
- const color = window.getComputedStyle(feature.element).color
151
- expect(color).toBe('rgb(255, 255, 255)')
152
- })
153
-
154
- it('has a feature for 02 with the middle color of the scale', () => {
155
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-02')
156
- const color = window.getComputedStyle(feature.element).color
157
- expect(color).toBe('rgb(194, 145, 132)')
158
- })
159
-
160
- it('has a feature for 03 with the end color of the scale', () => {
161
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-03')
162
- const color = window.getComputedStyle(feature.element).color
163
- expect(color).toBe('rgb(133, 35, 8)')
164
- })
165
-
166
- it('zooms on the map when a feature is clicked', async () => {
167
-
168
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-03')
169
- await feature.trigger('click')
170
-
171
- const zoomed = wrapper.emitted("zoomed");
172
-
173
- expect(zoomed).toHaveLength(1)
174
- expect(zoomed[0][0]).toMatchObject({"properties": {
175
- "code": "03",
176
- "nom": "Allier",
177
- }})
178
- })
179
-
180
- it('adds a class to a feature upon click', async () => {
181
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-03')
182
- await feature.trigger('click')
183
- const updatedFeature = wrapper.find('.choropleth-map__main__features__item--identifier-03')
184
- expect(updatedFeature.classes('choropleth-map__main__features__item--zoomed')).toBeTruthy()
185
- expect(wrapper.emitted("zoomed")).toHaveLength(1)
186
- })
187
-
188
- it('removes a class from a feature on the second click', async () => {
189
-
190
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-03')
191
- await feature.trigger('click')
192
- await feature.trigger('click')
193
-
194
-
195
- expect(wrapper.emitted("click")).toHaveLength(2)
196
- expect(wrapper.emitted("zoomed")).toHaveLength(1)
197
- expect(feature.classes('choropleth-map__main__features__item--zoomed')).toBeFalsy()
198
- })
199
-
200
- it('adds a class to the map upon click on a feature', async () => {
201
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-03')
202
- await feature.trigger('click')
203
- expect(wrapper.classes('choropleth-map--has-zoom')).toBeTruthy()
204
- })
205
-
206
- it('removes a class from the map on the second click', async () => {
207
- const feature = wrapper.find('.choropleth-map__main__features__item--identifier-03')
208
- await feature.trigger('click')
209
- await feature.trigger('click')
210
- await wrapper.vm.$nextTick()
211
- expect(wrapper.classes('choropleth-map--has-zoom')).toBeFalsy()
212
- })
213
- })
214
- })
@@ -1,186 +0,0 @@
1
- import {describe, expect, it} from 'vitest'
2
- import {shallowMount} from '@vue/test-utils'
3
-
4
- import {default as ChoroplethMapAnnotation, PLACEMENTS} from '@/maps/ChoroplethMapAnnotation.vue'
5
- import type {ParentMap, ParentMapProvide} from "@/types.js";
6
- import {ParentKey} from "@/keys.js";
7
- import {computed} from 'vue';
8
- import {geoRobinson} from 'd3-geo-projection'
9
- import {GeoProjection} from 'd3-geo';
10
-
11
-
12
- describe('ChoroplethMapAnnotation', () => {
13
-
14
- const generateParentMock = ({rX = 0, rY = 0, width = 500, height = 500, k = 1}) => (
15
- {
16
- rotatingMapProjection: computed((): GeoProjection | Function => {
17
- if (rX && rY) {
18
- return () => [rX, rY]
19
- }
20
- return geoRobinson()
21
- }),
22
- mapTransform: computed(() => ({k, x: 0, y: 0, rotateX: 0, rotateY: 0})),
23
- mapRect: computed(() => new DOMRect(0, 0, width, height))
24
- }
25
- )
26
-
27
- it('renders with default props', () => {
28
- const mockParentMap: ParentMap = generateParentMock({})
29
- const provide: ParentMapProvide = {[ParentKey]: mockParentMap}
30
- const wrapper = shallowMount(ChoroplethMapAnnotation, {
31
- propsData: {
32
- latitude: 0,
33
- longitude: 0
34
- },
35
- global: {provide}
36
- })
37
-
38
- expect(wrapper.exists()).toBe(true)
39
- })
40
-
41
- it('computes position correctly', () => {
42
- const mockParentMap: ParentMap = generateParentMock({rX: 100, rY: 200, k: 1, width: 500, height: 500})
43
- const provide: ParentMapProvide = {[ParentKey]: mockParentMap}
44
- const wrapper = shallowMount(ChoroplethMapAnnotation, {
45
- propsData: {
46
- latitude: 10,
47
- longitude: 20
48
- },
49
- global: {provide}
50
- })
51
-
52
- expect(wrapper.vm.x).toEqual(100)
53
- expect(wrapper.vm.y).toEqual(200)
54
- })
55
-
56
- describe('placements', () => {
57
- const mockParentMap: ParentMap = generateParentMock({})
58
- const provide: ParentMapProvide = {[ParentKey]: mockParentMap}
59
- const testPlacement = (placement, expectedResults) => {
60
- it(`computes placement correctly for ${placement}`, () => {
61
- const wrapper = shallowMount(ChoroplethMapAnnotation, {
62
- propsData: {
63
- latitude: 0,
64
- longitude: 0,
65
- placement
66
- },
67
- global: {provide}
68
- })
69
-
70
- expect(wrapper.vm.isRight).toBe(!!expectedResults.isRight)
71
- expect(wrapper.vm.isLeft).toBe(!!expectedResults.isLeft)
72
- expect(wrapper.vm.isTop).toBe(!!expectedResults.isTop)
73
- expect(wrapper.vm.isBottom).toBe(!!expectedResults.isBottom)
74
- expect(wrapper.vm.isCenter).toBe(!!expectedResults.isCenter)
75
- })
76
- }
77
-
78
- testPlacement(PLACEMENTS.TOP, {isTop: true})
79
- testPlacement(PLACEMENTS.TOPLEFT, {isLeft: true, isTop: true})
80
- testPlacement(PLACEMENTS.TOPRIGHT, {isRight: true, isTop: true})
81
- testPlacement(PLACEMENTS.RIGHT, {isRight: true})
82
- testPlacement(PLACEMENTS.RIGHTTOP, {isRight: true, isTop: true})
83
- testPlacement(PLACEMENTS.RIGHTBOTTOM, {isRight: true, isBottom: true})
84
- testPlacement(PLACEMENTS.BOTTOM, {isBottom: true})
85
- testPlacement(PLACEMENTS.BOTTOMLEFT, {isLeft: true, isBottom: true})
86
- testPlacement(PLACEMENTS.BOTTOMRIGHT, {isRight: true, isBottom: true})
87
- testPlacement(PLACEMENTS.LEFT, {isLeft: true})
88
- testPlacement(PLACEMENTS.LEFTTOP, {isLeft: true, isTop: true})
89
- testPlacement(PLACEMENTS.LEFTBOTTOM, {isLeft: true, isBottom: true})
90
- testPlacement(null, {isCenter: true})
91
- })
92
-
93
- describe('wrapperTransformOrigin', () => {
94
- const mockParentMap: ParentMap = generateParentMock({})
95
- const provide: ParentMapProvide = {[ParentKey]: mockParentMap}
96
- const testTransformOrigin = (placement: string, expectedX: string, expectedY: string) => {
97
- it(`computes wrapperTransformOrigin correctly for ${placement}`, () => {
98
- const wrapper = shallowMount(ChoroplethMapAnnotation, {
99
- propsData: {
100
- latitude: 0,
101
- longitude: 0,
102
- placement
103
- },
104
- global: {provide}
105
- })
106
-
107
- expect(wrapper.vm.wrapperTransformOriginX).toBe(expectedX)
108
- expect(wrapper.vm.wrapperTransformOriginY).toBe(expectedY)
109
- expect(wrapper.vm.wrapperTransformOrigin).toBe(`${expectedX} ${expectedY}`)
110
- })
111
- }
112
-
113
- testTransformOrigin(PLACEMENTS.TOP, 'center', 'bottom')
114
- testTransformOrigin(PLACEMENTS.TOPLEFT, 'right', 'bottom')
115
- testTransformOrigin(PLACEMENTS.TOPRIGHT, 'left', 'bottom')
116
- testTransformOrigin(PLACEMENTS.RIGHT, 'left', 'center')
117
- testTransformOrigin(PLACEMENTS.RIGHTTOP, 'left', 'bottom')
118
- testTransformOrigin(PLACEMENTS.RIGHTBOTTOM, 'left', 'top')
119
- testTransformOrigin(PLACEMENTS.BOTTOM, 'center', 'top')
120
- testTransformOrigin(PLACEMENTS.BOTTOMLEFT, 'right', 'top')
121
- testTransformOrigin(PLACEMENTS.BOTTOMRIGHT, 'left', 'top')
122
- testTransformOrigin(PLACEMENTS.LEFT, 'right', 'center')
123
- testTransformOrigin(PLACEMENTS.LEFTTOP, 'right', 'bottom')
124
- testTransformOrigin(PLACEMENTS.LEFTBOTTOM, 'right', 'top')
125
- })
126
-
127
- describe('transform', () => {
128
-
129
- const mockParentMap: ParentMap = generateParentMock({rX: 100, rY: 200, k: 1, width: 500, height: 500})
130
- const provide: ParentMapProvide = {[ParentKey]: mockParentMap}
131
- const mountComponentWithProps = (propsData: any) => {
132
- return shallowMount(ChoroplethMapAnnotation, {
133
- propsData,
134
- global: {provide}
135
- })
136
- }
137
-
138
- const testCases = [
139
- {placement: PLACEMENTS.TOP, height: 150, width: 150, translateX: -75, translateY: -150},
140
- {placement: PLACEMENTS.BOTTOM, height: 100, width: 200, translateX: -100, translateY: 0},
141
- {placement: PLACEMENTS.LEFT, height: 200, width: 100, translateX: -100, translateY: -100},
142
- {placement: PLACEMENTS.RIGHT, height: 150, width: 250, translateX: 0, translateY: -75}
143
- ]
144
-
145
- testCases.forEach(({placement, height, width, translateX, translateY}) => {
146
- it(`computes transform correctly for placement ${placement} with height ${height} and width ${width}`, () => {
147
- const wrapper = mountComponentWithProps({latitude: 0, longitude: 0, height, width, placement})
148
-
149
- expect(wrapper.vm.translateX).toBe(translateX)
150
- expect(wrapper.vm.translateY).toBe(translateY)
151
- expect(wrapper.vm.transform).toBe(`translate(${translateX}, ${translateY})`)
152
- })
153
- })
154
- })
155
-
156
- describe('isVisible', () => {
157
- it('is visible when within geoDistanceThreshold', () => {
158
-
159
- const mockParentMap: ParentMap = generateParentMock({})
160
- const provide: ParentMapProvide = {[ParentKey]: mockParentMap}
161
- const wrapper = shallowMount(ChoroplethMapAnnotation, {
162
- propsData: {
163
- latitude: 10,
164
- longitude: 0
165
- },
166
- global: {provide}
167
- })
168
-
169
- expect(wrapper.vm.isVisible).toBeTruthy()
170
- })
171
-
172
- it('is not visible when outside geoDistanceThreshold', () => {
173
-
174
- const mockParentMap: ParentMap = generateParentMock({rX: 500, rY: 0})
175
- const provide: ParentMapProvide = {[ParentKey]: mockParentMap}
176
- const wrapper = shallowMount(ChoroplethMapAnnotation, {
177
- propsData: {
178
- latitude: 0,
179
- longitude: 90,
180
- },
181
- global: {provide}
182
- })
183
- expect(wrapper.vm.isVisible).toBeFalsy()
184
- })
185
- })
186
- })
@@ -1,92 +0,0 @@
1
- import { promises as fs } from 'fs'
2
- import { join, resolve } from 'path'
3
- import { shallowMount,flushPromises } from '@vue/test-utils'
4
- import SymbolMap from '@/maps/SymbolMap.vue'
5
-
6
- vi.mock('d3', async () => {
7
- return {
8
- ...await vi.importActual('d3'),
9
- json: async url => {
10
- const pathname = url.split('https://icij.github.io/murmur/').pop()
11
- const abspath = resolve(__dirname, join('../../../public', pathname))
12
- const raw = await fs.readFile(abspath, 'UTF-8')
13
- return JSON.parse(raw)
14
- }
15
- }
16
- })
17
-
18
- describe('SymbolMap.vue', () => {
19
-
20
- describe('a map of the world', () => {
21
-
22
- let wrapper
23
-
24
- beforeEach(async () => {
25
- const propsData = {
26
- hideTooltip: true,
27
- data: [
28
- { id: 1, latitude: 48.859116, longitude: 2.331839, color: '#6e40aa', category: 'TECH', label: 'Paris, France' },
29
- { id: 2, latitude: -34.035875, longitude: 151.194191, color: '#ff5e63', category: 'FINANCE', label: 'Sydney, Australia' },
30
- { id: 3, latitude: 38.9072, longitude: -77.0369, color: '#aff05b', category: 'EDITO', label: 'Washington DC, USA' }
31
- ]
32
- }
33
- wrapper = shallowMount(SymbolMap, { propsData })
34
- wrapper.vm.$refs.el.style.width = '500px'
35
- await wrapper.vm.loadTopojson()
36
- await wrapper.vm.$nextTick()
37
- })
38
-
39
- it('is a Vue instance', () => {
40
- expect(wrapper.vm).toBeTruthy()
41
- })
42
-
43
- it('has a marker in the tech category', () => {
44
- const feature = wrapper.find('.symbol-map__main__markers__item--category-tech path')
45
- const { nodeValue: fill } = feature.wrapperElement.getAttributeNode('fill')
46
- expect(fill).toBe('#6e40aa')
47
- })
48
-
49
- it('activates the cursor when mouse is over a marker', async () => {
50
- const feature = wrapper.find('.symbol-map__main__markers__item--category-tech path')
51
- await feature.trigger("mouseover")
52
- expect(wrapper.vm.markerCursor).toBe(1)
53
- })
54
-
55
- it('has a marker in the finance category', () => {
56
- const feature = wrapper.find('.symbol-map__main__markers__item--category-finance path')
57
- const { nodeValue: fill } = feature.element.getAttributeNode('fill')
58
- expect(fill).toBe('#ff5e63')
59
- })
60
-
61
- it('activates the cursor when mouse is over a marker', async () => {
62
- const feature = wrapper.find('.symbol-map__main__markers__item--category-finance path')
63
- await feature.trigger("mouseover")
64
- expect(wrapper.vm.markerCursor).toBe(2)
65
- })
66
-
67
- it('deactivates the cursor when mouse leaves a marker', async () => {
68
- const feature = wrapper.find('.symbol-map__main__markers__item--category-edito path')
69
- await feature.trigger("mouseover")
70
- expect(wrapper.vm.markerCursor).toBe(3)
71
-
72
- await feature.trigger("mouseleave")
73
- expect(wrapper.vm.markerCursor).toBe(null)
74
- })
75
-
76
- it('set a class to the component when a cursor is active', async () => {
77
- const feature = wrapper.find('.symbol-map__main__markers__item--category-tech path')
78
- await feature.trigger("mouseover")
79
- expect(wrapper.classes('symbol-map--has-cursor')).toBeTruthy()
80
- })
81
-
82
- it('remove the class to the component when a cursor is removed', async () => {
83
- const feature = wrapper.find('.symbol-map__main__markers__item--category-finance path')
84
- await feature.trigger("mouseover")
85
- expect(wrapper.vm.markerCursor).toBe(2)
86
-
87
- expect(wrapper.classes('symbol-map--has-cursor')).toBeTruthy()
88
- await feature.trigger("mouseleave")
89
- expect(wrapper.classes('symbol-map--has-cursor')).toBeFalsy()
90
- })
91
- })
92
- })
@@ -1,22 +0,0 @@
1
- import Murmur from '@/main'
2
-
3
- describe('the library bundle', () => {
4
-
5
- it('should have a list of component', () => {
6
- expect(Murmur.components).toHaveProperty('Brand')
7
- expect(Murmur.components).toHaveProperty('ContentPlaceholder')
8
- expect(Murmur.components).toHaveProperty('DonateForm')
9
- expect(Murmur.components).toHaveProperty('EmbeddableFooter')
10
- expect(Murmur.components).toHaveProperty('EmbedForm')
11
- expect(Murmur.components).toHaveProperty('FollowUsPopover')
12
- expect(Murmur.components).toHaveProperty('Fa')
13
- expect(Murmur.components).toHaveProperty('GenericFooter')
14
- expect(Murmur.components).toHaveProperty('GenericHeader')
15
- expect(Murmur.components).toHaveProperty('ImddbHeader')
16
- expect(Murmur.components).toHaveProperty('ResponsiveIframe')
17
- expect(Murmur.components).toHaveProperty('SharingOptions')
18
- expect(Murmur.components).toHaveProperty('SignUpForm')
19
- expect(Murmur.components).toHaveProperty('SlideUpDown')
20
- })
21
-
22
- })
@@ -1,13 +0,0 @@
1
- import { config } from '@vue/test-utils';
2
- import {i18n} from "../../lib/i18n";
3
- import createBootstrap from "bootstrap-vue-next";
4
-
5
- // @ts-expect-error type
6
- config.global.plugins = [i18n,createBootstrap()];
7
- // @ts-expect-error type
8
- Object.defineProperty(document, 'fonts', {
9
- value: { ready: Promise.resolve({}) },
10
- })
11
- global.HTMLCanvasElement.prototype.getContext = () => null;
12
- global.HTMLCanvasElement.prototype.toDataURL = () => null;
13
- global.URL.createObjectURL = () => "";
@@ -1,61 +0,0 @@
1
- import { injectAsset, injectAssets } from '@/utils/assets'
2
-
3
- describe('assets.js', () => {
4
-
5
- it('should define a script form Pym with a specify id', () => {
6
- expect(window.pym).toBeUndefined()
7
- injectAsset("https://pym.nprapps.org/pym.v1.min.js", "pym-js")
8
- expect(document.querySelectorAll('#pym-js').length).toBe(1)
9
- })
10
-
11
- it('should define a script form Pym with a specify id only once', () => {
12
- expect(window.pym).toBeUndefined()
13
- injectAsset("https://pym.nprapps.org/pym.v1.min.js", "pym-js")
14
- injectAsset("https://pym.nprapps.org/pym.v1.min.js", "pym-js")
15
- expect(document.querySelectorAll('#pym-js').length).toBe(1)
16
- })
17
-
18
- it('should define a script form Pym once', () => {
19
- expect(window.pym).toBeUndefined()
20
- injectAsset("https://pym.nprapps.org/pym.v1.min.js")
21
- expect(document.querySelectorAll('script[src="https://pym.nprapps.org/pym.v1.min.js"]').length).toBe(1)
22
- injectAsset("https://pym.nprapps.org/pym.v1.min.js")
23
- expect(document.querySelectorAll('script[src="https://pym.nprapps.org/pym.v1.min.js"]').length).toBe(1)
24
- })
25
-
26
- it('should define a script form Pym once, even if we pass an array with duplicates', () => {
27
- injectAssets([
28
- "https://pym.nprapps.org/pym.v1.min.js",
29
- "https://pym.nprapps.org/pym.v1.min.js"
30
- ])
31
- expect(document.querySelectorAll('script[src="https://pym.nprapps.org/pym.v1.min.js"]').length).toBe(1)
32
- })
33
-
34
- it('should define two scripts', () => {
35
- injectAssets([
36
- "https://pym.nprapps.org/pym.v1.min.js",
37
- "https://pym.nprapps.org/pym.v1.js"
38
- ])
39
-
40
- expect(document.querySelectorAll('script[src^="https://pym.nprapps.org/pym.v1"]').length).toBe(2)
41
- })
42
-
43
- it('should define two stylesheets', () => {
44
- injectAssets([
45
- "https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css",
46
- "https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.css"
47
- ])
48
-
49
- expect(document.querySelectorAll('link[rel=stylesheet]').length).toBe(2)
50
- })
51
-
52
- it('should define two stylesheets, even with duplicates', () => {
53
- injectAssets([
54
- "https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css",
55
- "https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.css",
56
- "https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.css"
57
- ])
58
-
59
- expect(document.querySelectorAll('link[rel=stylesheet]').length).toBe(2)
60
- })
61
- })
@@ -1,18 +0,0 @@
1
- import noop from 'lodash/noop'
2
- import { copyText } from '@/utils/clipboard'
3
-
4
- describe('clipboard.js', () => {
5
-
6
- it('should return a Promise', () => {
7
- const promise = copyText('uwu').catch(noop)
8
- expect(promise).toBeInstanceOf(Promise)
9
- })
10
-
11
- it('should reject the promise', async () => {
12
- try {
13
- await copyText('uwu')
14
- } catch(error) {
15
- expect(error.text).toBe('uwu')
16
- }
17
- })
18
- })
@@ -1,71 +0,0 @@
1
- import startsWith from 'lodash/startsWith'
2
- import IframeResizer from '@/utils/iframe-resizer'
3
-
4
- describe('iframe-resizer.ts', () => {
5
-
6
- it('should define a `create` static method', () => {
7
- expect(IframeResizer.create).toBeDefined()
8
- })
9
-
10
- it('should create an IframeResizer instance from a singleton', () => {
11
- const first = IframeResizer.create()
12
- const second = IframeResizer.create()
13
- expect(first).toEqual(second)
14
- })
15
-
16
- it('should return a promise from the `sendHeight` method', () => {
17
- const resizer = IframeResizer.create()
18
- expect(resizer.sendHeight()).toBeInstanceOf(Promise)
19
- })
20
-
21
- it('should define a `template` static method', () => {
22
- expect(IframeResizer.template).toBeDefined()
23
- })
24
-
25
- it('should return a script tag as template', () => {
26
- expect(startsWith(IframeResizer.template(), '<script ')).toBeTruthy()
27
- })
28
-
29
- it('should return a script tag as template with a custom id', () => {
30
- const template = IframeResizer.template(window.location.href, 'uwu')
31
- expect(startsWith(template, '<script ')).toBeTruthy()
32
- expect(template.includes('id="uwu"')).toBeTruthy()
33
- })
34
-
35
- it('should define a `deletePymParams` static method', () => {
36
- expect(IframeResizer.deletePymParams).toBeDefined()
37
- })
38
-
39
- it('should delete Pym\'s params from the given location', () => {
40
- const url = 'https://projects.icij.org/?initialWidth=720&childId=example-graphic'
41
- expect(IframeResizer.deletePymParams(url)).toBe('https://projects.icij.org/')
42
- })
43
-
44
- it('should delete Pym\'s params from the other given location', () => {
45
- const url = 'https://projects.icij.org/test/?initialWidth=720'
46
- expect(IframeResizer.deletePymParams(url)).toBe('https://projects.icij.org/test/')
47
- })
48
-
49
- it('shouldn\'t delete Pym\'s params from given location because there is none', () => {
50
- const url = 'https://projects.icij.org/test/?initial=720'
51
- expect(IframeResizer.deletePymParams(url)).toBe(url)
52
- })
53
-
54
- it('should define a `isEmbedded` static method', () => {
55
- expect(IframeResizer.isEmbedded).toBeDefined()
56
- })
57
-
58
- it('should say the current location is not embedded', () => {
59
- expect(IframeResizer.isEmbedded()).toBeFalsy()
60
- })
61
-
62
- it('should say the given location is not embedded', () => {
63
- const url = 'https://projects.icij.org/'
64
- expect(IframeResizer.isEmbedded(url)).toBeFalsy()
65
- })
66
-
67
- it('should say the given location is embedded', () => {
68
- const url = 'https://projects.icij.org/?initialWidth=720&childId=example-graphic'
69
- expect(IframeResizer.isEmbedded(url)).toBeFalsy()
70
- })
71
- })