@projektemacher/storymapjs 0.10.8 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/CHANGELOG +81 -0
  2. package/README.md +129 -12
  3. package/dist/assets/{demo-DBpeF31K.js → demo-bWnOyfUw.js} +1 -1
  4. package/dist/assets/harness-C3JUv5Ii.js +1 -0
  5. package/dist/assets/{harness-multi-CYHgI0a9.js → harness-multi-XZNex3tb.js} +1 -1
  6. package/dist/assets/{harness-support-Do7sIp2j.js → harness-support-CjfZIVeb.js} +1 -1
  7. package/dist/assets/main-DQ32hWBM.js +17 -0
  8. package/dist/context.json +13 -2
  9. package/dist/css/storymap.css +1 -1
  10. package/dist/demo.html +3 -2
  11. package/dist/docs/api/assets/navigation.js +1 -1
  12. package/dist/docs/api/assets/search.js +1 -1
  13. package/dist/docs/api/classes/StoryMap.html +777 -269
  14. package/dist/docs/api/functions/MediaType.html +1 -1
  15. package/dist/docs/api/functions/isPresentation3Collection.html +1 -1
  16. package/dist/docs/api/functions/isPresentation3Manifest.html +1 -1
  17. package/dist/docs/api/functions/isSlideshowCollection.html +51 -0
  18. package/dist/docs/api/functions/loadCSS.html +1 -1
  19. package/dist/docs/api/functions/manifestToStorymapData.html +1 -1
  20. package/dist/docs/api/functions/setLanguage.html +1 -1
  21. package/dist/docs/api/functions/slideshowToStorymapData.html +51 -0
  22. package/dist/docs/api/functions/slideshowVersion.html +48 -0
  23. package/dist/docs/api/functions/storymapToManifest.html +1 -1
  24. package/dist/docs/api/functions/validateStorymap.html +1 -1
  25. package/dist/docs/api/functions/validateStorymapAndReport.html +1 -1
  26. package/dist/docs/api/index.html +115 -12
  27. package/dist/docs/api/interfaces/AnimationHandle.html +2 -2
  28. package/dist/docs/api/interfaces/ImagereadyPayload.html +4 -4
  29. package/dist/docs/api/interfaces/LanguageEntry.html +6 -6
  30. package/dist/docs/api/interfaces/LatLngLiteral.html +4 -4
  31. package/dist/docs/api/interfaces/LoadOptions.html +2 -2
  32. package/dist/docs/api/interfaces/MapEvents.html +116 -0
  33. package/dist/docs/api/interfaces/MapMarkerEvents.html +66 -0
  34. package/dist/docs/api/interfaces/MarkerEventPayload.html +57 -0
  35. package/dist/docs/api/interfaces/MediaEvents.html +78 -0
  36. package/dist/docs/api/interfaces/MenuBarEvents.html +114 -0
  37. package/dist/docs/api/interfaces/MessageEvents.html +72 -0
  38. package/dist/docs/api/interfaces/OlLayer.html +1 -1
  39. package/dist/docs/api/interfaces/OlMap.html +1 -1
  40. package/dist/docs/api/interfaces/OlSource.html +1 -1
  41. package/dist/docs/api/interfaces/OlTileLayer.html +1 -1
  42. package/dist/docs/api/interfaces/OlVectorLayer.html +1 -1
  43. package/dist/docs/api/interfaces/OlView.html +1 -1
  44. package/dist/docs/api/interfaces/SlideBackgroundState.html +66 -0
  45. package/dist/docs/api/interfaces/SlideEvents.html +78 -0
  46. package/dist/docs/api/interfaces/SlideNavEvents.html +72 -0
  47. package/dist/docs/api/interfaces/SlideshowPlayerSettings.html +182 -0
  48. package/dist/docs/api/interfaces/SlideshowToStorymapResult.html +60 -0
  49. package/dist/docs/api/interfaces/SlideshowTranslatorOptions.html +65 -0
  50. package/dist/docs/api/interfaces/SlideshowWarning.html +72 -0
  51. package/dist/docs/api/interfaces/StoryMapEvents.html +146 -0
  52. package/dist/docs/api/interfaces/StoryMapMarker.html +763 -0
  53. package/dist/docs/api/interfaces/StorySliderEvents.html +102 -0
  54. package/dist/docs/api/interfaces/StorymapBasemap.html +69 -0
  55. package/dist/docs/api/interfaces/StorymapData.html +12 -6
  56. package/dist/docs/api/interfaces/StorymapDataWrapper.html +2 -2
  57. package/dist/docs/api/interfaces/StorymapDocument.html +2 -2
  58. package/dist/docs/api/interfaces/StorymapError.html +3 -3
  59. package/dist/docs/api/interfaces/StorymapGeoreference.html +5 -5
  60. package/dist/docs/api/interfaces/StorymapGeoreferenceBody.html +4 -4
  61. package/dist/docs/api/interfaces/StorymapGroundControlPoint.html +4 -4
  62. package/dist/docs/api/interfaces/StorymapLanguageMap.html +2 -2
  63. package/dist/docs/api/interfaces/StorymapManifest.html +12 -12
  64. package/dist/docs/api/interfaces/StorymapManifestAnnotation.html +43 -11
  65. package/dist/docs/api/interfaces/StorymapManifestBackground.html +6 -6
  66. package/dist/docs/api/interfaces/StorymapManifestCanvas.html +65 -17
  67. package/dist/docs/api/interfaces/StorymapManifestContentResource.html +8 -8
  68. package/dist/docs/api/interfaces/StorymapManifestFeatureCollection.html +4 -4
  69. package/dist/docs/api/interfaces/StorymapManifestGeoreferencing.html +7 -7
  70. package/dist/docs/api/interfaces/StorymapManifestImageService.html +4 -4
  71. package/dist/docs/api/interfaces/StorymapManifestRange.html +5 -5
  72. package/dist/docs/api/interfaces/StorymapManifestService.html +4 -4
  73. package/dist/docs/api/interfaces/StorymapManifestSpecificResource.html +4 -4
  74. package/dist/docs/api/interfaces/StorymapManifestStatement.html +3 -3
  75. package/dist/docs/api/interfaces/StorymapMapOptions.html +5 -5
  76. package/dist/docs/api/interfaces/StorymapOptions.html +277 -75
  77. package/dist/docs/api/interfaces/StorymapOverlayLayer.html +42 -11
  78. package/dist/docs/api/interfaces/StorymapSlide.html +70 -16
  79. package/dist/docs/api/interfaces/StorymapSlideBackground.html +4 -4
  80. package/dist/docs/api/interfaces/StorymapSlideLocation.html +58 -14
  81. package/dist/docs/api/interfaces/StorymapSlideMarker.html +8 -9
  82. package/dist/docs/api/interfaces/StorymapSlideMedia.html +49 -10
  83. package/dist/docs/api/interfaces/StorymapSlideNarration.html +61 -9
  84. package/dist/docs/api/interfaces/StorymapSlideText.html +4 -4
  85. package/dist/docs/api/interfaces/StorymapTilejson.html +8 -8
  86. package/dist/docs/api/interfaces/SwipableEvents.html +102 -0
  87. package/dist/docs/api/interfaces/TextEvents.html +66 -0
  88. package/dist/docs/api/media/events.md +66 -0
  89. package/dist/docs/api/media/migration-from-knightlab.md +89 -49
  90. package/dist/docs/api/media/slideshow.md +109 -0
  91. package/dist/docs/api/media/storymap-as-iiif-manifest.md +1007 -0
  92. package/dist/docs/api/modules.html +6 -6
  93. package/dist/docs/api/types/ContentState.html +3 -3
  94. package/dist/docs/api/types/FiredEvent.html +43 -0
  95. package/dist/docs/api/types/ImagereadyKind.html +1 -1
  96. package/dist/docs/api/types/MediaTypeMatch.html +5 -5
  97. package/dist/docs/api/types/SwipeDirection.html +36 -0
  98. package/dist/docs/api/types/TileSourceFactory.html +1 -1
  99. package/dist/docs/authoring.html +20 -7
  100. package/dist/docs/events.html +263 -0
  101. package/dist/docs/iiif.html +136 -22
  102. package/dist/docs/migration.html +66 -19
  103. package/dist/docs/readme.html +113 -12
  104. package/dist/embed/index.html +7 -0
  105. package/dist/examples/font-css-false.json +33 -0
  106. package/dist/examples/issue-image-region.json +1 -1
  107. package/dist/examples/layers-control.json +60 -0
  108. package/dist/examples/map-template-provider.json +36 -0
  109. package/dist/examples/multi-media.json +71 -0
  110. package/dist/examples-iiif/annotated-image.json +16 -0
  111. package/dist/examples-iiif/font-css-false.json +114 -0
  112. package/dist/examples-iiif/issue-image-region.json +1 -1
  113. package/dist/examples-iiif/layers-control.json +226 -0
  114. package/dist/examples-iiif/map-template-provider.json +133 -0
  115. package/dist/examples-iiif/multi-media.json +237 -0
  116. package/dist/examples-slideshow/single.json +79 -0
  117. package/dist/examples-slideshow/static/pixel.png +0 -0
  118. package/dist/examples-slideshow/static.json +44 -0
  119. package/dist/harness-multi.html +3 -3
  120. package/dist/harness.html +4 -3
  121. package/dist/index.html +3 -2
  122. package/dist/js/storymap.d.ts +1326 -289
  123. package/dist/js/storymap.js +6690 -4784
  124. package/dist/js/storymap.js.map +1 -1
  125. package/dist/navplace-properties.json +14 -0
  126. package/dist/site.css +54 -36
  127. package/docs/migration-from-knightlab.md +89 -49
  128. package/docs/storymap-as-iiif-manifest.md +199 -126
  129. package/package.json +4 -2
  130. package/schema/storymap.schema.json +334 -34
  131. package/src/core/Util.ts +3 -1
  132. package/src/core/mixins.ts +42 -28
  133. package/src/language/Language.ts +7 -0
  134. package/src/language/locale/.expected-gaps.json +287 -27
  135. package/src/language/locale/de.json +11 -1
  136. package/src/language/locale/en.json +11 -1
  137. package/src/main.ts +51 -0
  138. package/src/map/Map.ts +44 -6
  139. package/src/map/MapMarker.ts +16 -3
  140. package/src/map/openlayers/Map.OpenLayers.ts +787 -62
  141. package/src/map/openlayers/MapMarker.OpenLayers.ts +113 -13
  142. package/src/map/slideView.ts +149 -0
  143. package/src/map/types.ts +2 -0
  144. package/src/media/EmbedUtil.ts +27 -2
  145. package/src/media/Media.ts +27 -4
  146. package/src/media/embedId.ts +6 -0
  147. package/src/media/types/Flickr.ts +14 -3
  148. package/src/media/types/HtmlMedia.ts +66 -0
  149. package/src/media/types/Image.ts +15 -3
  150. package/src/media/types/SoundCloud.ts +1 -1
  151. package/src/media/types/Text.ts +27 -8
  152. package/src/media/types/Twitter.ts +9 -7
  153. package/src/media/types/Vimeo.ts +1 -1
  154. package/src/media/types/YouTube.ts +2 -2
  155. package/src/scss/Typography.scss +15 -15
  156. package/src/scss/VCO.StoryMap.scss +173 -8
  157. package/src/scss/core/Reset.scss +5 -18
  158. package/src/scss/map/VCO.Map.scss +1 -1
  159. package/src/scss/map/VCO.MapMarker.scss +20 -9
  160. package/src/scss/map/openlayers/VCO.Map.OpenLayers.scss +7 -4
  161. package/src/scss/media/VCO.Media.scss +7 -7
  162. package/src/scss/media/types/VCO.Media.Blockquote.scss +1 -1
  163. package/src/scss/media/types/VCO.Media.Text.scss +5 -5
  164. package/src/scss/media/types/VCO.Media.Twitter.scss +4 -4
  165. package/src/scss/media/types/VCO.Media.Wikipedia.scss +2 -19
  166. package/src/scss/site/site.scss +55 -36
  167. package/src/scss/slider/VCO.Slide.scss +49 -11
  168. package/src/scss/slider/VCO.SlideNav.scss +23 -7
  169. package/src/scss/slider/VCO.StorySlider.scss +50 -0
  170. package/src/scss/snapmap/VCO.SnapMap.scss +3 -3
  171. package/src/scss/ui/VCO.Consent.scss +20 -14
  172. package/src/scss/ui/VCO.Layers.scss +119 -0
  173. package/src/scss/ui/VCO.MenuBar.Button.scss +140 -19
  174. package/src/scss/ui/VCO.MenuBar.scss +9 -2
  175. package/src/scss/ui/VCO.Message.scss +14 -0
  176. package/src/slider/Slide.ts +232 -74
  177. package/src/slider/SlideNav.ts +15 -4
  178. package/src/slider/StorySlider.ts +203 -22
  179. package/src/storymap/Consent.ts +22 -0
  180. package/src/storymap/StoryMap.ts +944 -131
  181. package/src/storymap/content-state.ts +3 -8
  182. package/src/storymap/font-css.ts +72 -0
  183. package/src/storymap/from-slideshow.ts +785 -0
  184. package/src/storymap/iiif-shared.ts +228 -0
  185. package/src/storymap/iiif.ts +289 -100
  186. package/src/storymap/to-iiif.ts +131 -44
  187. package/src/types.ts +382 -17
  188. package/src/ui/LayersControl.ts +302 -0
  189. package/src/ui/MenuBar.ts +232 -21
  190. package/src/ui/Message.ts +36 -3
  191. package/src/ui/Swipable.ts +25 -7
  192. package/dist/assets/harness-Cr0rYpvt.js +0 -1
  193. package/dist/assets/main-DXalctuR.js +0 -17
  194. package/src/scss/VCO.StoryMap.Dark.scss +0 -150
  195. package/src/scss/Variables.Dark.scss +0 -57
@@ -1,13 +1,70 @@
1
1
  {
2
- "be": ["messages.consent_service_narration"],
3
- "bg": ["messages.consent_service_narration"],
4
- "cs": ["messages.consent_service_narration"],
2
+ "be": [
3
+ "buttons.audio_badge",
4
+ "buttons.autoplay_pause",
5
+ "buttons.autoplay_play",
6
+ "buttons.layers",
7
+ "buttons.layers_basemaps",
8
+ "buttons.layers_overlays",
9
+ "media.iframe_title",
10
+ "messages.consent_service_narration",
11
+ "messages.skip_link"
12
+ ],
13
+ "bg": [
14
+ "buttons.audio_badge",
15
+ "buttons.autoplay_pause",
16
+ "buttons.autoplay_play",
17
+ "buttons.layers",
18
+ "buttons.layers_basemaps",
19
+ "buttons.layers_overlays",
20
+ "media.iframe_title",
21
+ "messages.consent_service_narration",
22
+ "messages.skip_link"
23
+ ],
24
+ "cs": [
25
+ "buttons.audio_badge",
26
+ "buttons.autoplay_pause",
27
+ "buttons.autoplay_play",
28
+ "buttons.layers",
29
+ "buttons.layers_basemaps",
30
+ "buttons.layers_overlays",
31
+ "media.iframe_title",
32
+ "messages.consent_service_narration",
33
+ "messages.skip_link"
34
+ ],
5
35
  "de": ["messages.consent_service_narration"],
6
- "el": ["messages.consent_service_narration"],
7
- "es": ["messages.consent_service_narration"],
36
+ "el": [
37
+ "buttons.audio_badge",
38
+ "buttons.autoplay_pause",
39
+ "buttons.autoplay_play",
40
+ "buttons.layers",
41
+ "buttons.layers_basemaps",
42
+ "buttons.layers_overlays",
43
+ "media.iframe_title",
44
+ "messages.consent_service_narration",
45
+ "messages.skip_link"
46
+ ],
47
+ "es": [
48
+ "buttons.audio_badge",
49
+ "buttons.autoplay_pause",
50
+ "buttons.autoplay_play",
51
+ "buttons.layers",
52
+ "buttons.layers_basemaps",
53
+ "buttons.layers_overlays",
54
+ "media.iframe_title",
55
+ "messages.consent_service_narration",
56
+ "messages.skip_link"
57
+ ],
8
58
  "et": [
59
+ "buttons.audio_badge",
60
+ "buttons.autoplay_pause",
61
+ "buttons.autoplay_play",
9
62
  "buttons.exit_fullscreen",
10
63
  "buttons.fullscreen",
64
+ "buttons.layers",
65
+ "buttons.layers_basemaps",
66
+ "buttons.layers_overlays",
67
+ "media.iframe_title",
11
68
  "messages.consent_allow",
12
69
  "messages.consent_blocked",
13
70
  "messages.consent_deny",
@@ -15,14 +72,52 @@
15
72
  "messages.consent_service_fonts",
16
73
  "messages.consent_service_narration",
17
74
  "messages.consent_service_tiles",
18
- "messages.error"
75
+ "messages.error",
76
+ "messages.skip_link"
77
+ ],
78
+ "fr": [
79
+ "buttons.audio_badge",
80
+ "buttons.autoplay_pause",
81
+ "buttons.autoplay_play",
82
+ "buttons.layers",
83
+ "buttons.layers_basemaps",
84
+ "buttons.layers_overlays",
85
+ "media.iframe_title",
86
+ "messages.consent_service_narration",
87
+ "messages.skip_link"
88
+ ],
89
+ "he": [
90
+ "buttons.audio_badge",
91
+ "buttons.autoplay_pause",
92
+ "buttons.autoplay_play",
93
+ "buttons.layers",
94
+ "buttons.layers_basemaps",
95
+ "buttons.layers_overlays",
96
+ "media.iframe_title",
97
+ "messages.consent_service_narration",
98
+ "messages.skip_link"
99
+ ],
100
+ "hu": [
101
+ "buttons.audio_badge",
102
+ "buttons.autoplay_pause",
103
+ "buttons.autoplay_play",
104
+ "buttons.layers",
105
+ "buttons.layers_basemaps",
106
+ "buttons.layers_overlays",
107
+ "media.iframe_title",
108
+ "messages.consent_service_narration",
109
+ "messages.skip_link"
19
110
  ],
20
- "fr": ["messages.consent_service_narration"],
21
- "he": ["messages.consent_service_narration"],
22
- "hu": ["messages.consent_service_narration"],
23
111
  "is": [
112
+ "buttons.audio_badge",
113
+ "buttons.autoplay_pause",
114
+ "buttons.autoplay_play",
24
115
  "buttons.exit_fullscreen",
25
116
  "buttons.fullscreen",
117
+ "buttons.layers",
118
+ "buttons.layers_basemaps",
119
+ "buttons.layers_overlays",
120
+ "media.iframe_title",
26
121
  "messages.consent_allow",
27
122
  "messages.consent_blocked",
28
123
  "messages.consent_deny",
@@ -30,15 +125,63 @@
30
125
  "messages.consent_service_fonts",
31
126
  "messages.consent_service_narration",
32
127
  "messages.consent_service_tiles",
33
- "messages.error"
128
+ "messages.error",
129
+ "messages.skip_link"
130
+ ],
131
+ "it": [
132
+ "buttons.audio_badge",
133
+ "buttons.autoplay_pause",
134
+ "buttons.autoplay_play",
135
+ "buttons.layers",
136
+ "buttons.layers_basemaps",
137
+ "buttons.layers_overlays",
138
+ "media.iframe_title",
139
+ "messages.consent_service_narration",
140
+ "messages.skip_link"
141
+ ],
142
+ "jp": [
143
+ "buttons.audio_badge",
144
+ "buttons.autoplay_pause",
145
+ "buttons.autoplay_play",
146
+ "buttons.layers",
147
+ "buttons.layers_basemaps",
148
+ "buttons.layers_overlays",
149
+ "media.iframe_title",
150
+ "messages.consent_service_narration",
151
+ "messages.skip_link"
152
+ ],
153
+ "ko": [
154
+ "buttons.audio_badge",
155
+ "buttons.autoplay_pause",
156
+ "buttons.autoplay_play",
157
+ "buttons.layers",
158
+ "buttons.layers_basemaps",
159
+ "buttons.layers_overlays",
160
+ "media.iframe_title",
161
+ "messages.consent_service_narration",
162
+ "messages.skip_link"
163
+ ],
164
+ "nl": [
165
+ "buttons.audio_badge",
166
+ "buttons.autoplay_pause",
167
+ "buttons.autoplay_play",
168
+ "buttons.layers",
169
+ "buttons.layers_basemaps",
170
+ "buttons.layers_overlays",
171
+ "media.iframe_title",
172
+ "messages.consent_service_narration",
173
+ "messages.skip_link"
34
174
  ],
35
- "it": ["messages.consent_service_narration"],
36
- "jp": ["messages.consent_service_narration"],
37
- "ko": ["messages.consent_service_narration"],
38
- "nl": ["messages.consent_service_narration"],
39
175
  "nn": [
176
+ "buttons.audio_badge",
177
+ "buttons.autoplay_pause",
178
+ "buttons.autoplay_play",
40
179
  "buttons.exit_fullscreen",
41
180
  "buttons.fullscreen",
181
+ "buttons.layers",
182
+ "buttons.layers_basemaps",
183
+ "buttons.layers_overlays",
184
+ "media.iframe_title",
42
185
  "messages.consent_allow",
43
186
  "messages.consent_blocked",
44
187
  "messages.consent_deny",
@@ -46,17 +189,75 @@
46
189
  "messages.consent_service_fonts",
47
190
  "messages.consent_service_narration",
48
191
  "messages.consent_service_tiles",
49
- "messages.error"
192
+ "messages.error",
193
+ "messages.skip_link"
194
+ ],
195
+ "no": [
196
+ "buttons.audio_badge",
197
+ "buttons.autoplay_pause",
198
+ "buttons.autoplay_play",
199
+ "buttons.layers",
200
+ "buttons.layers_basemaps",
201
+ "buttons.layers_overlays",
202
+ "media.iframe_title",
203
+ "messages.consent_service_narration",
204
+ "messages.skip_link"
205
+ ],
206
+ "pl": [
207
+ "buttons.audio_badge",
208
+ "buttons.autoplay_pause",
209
+ "buttons.autoplay_play",
210
+ "buttons.layers",
211
+ "buttons.layers_basemaps",
212
+ "buttons.layers_overlays",
213
+ "media.iframe_title",
214
+ "messages.consent_service_narration",
215
+ "messages.skip_link"
216
+ ],
217
+ "pt": [
218
+ "buttons.audio_badge",
219
+ "buttons.autoplay_pause",
220
+ "buttons.autoplay_play",
221
+ "buttons.layers",
222
+ "buttons.layers_basemaps",
223
+ "buttons.layers_overlays",
224
+ "media.iframe_title",
225
+ "messages.consent_service_narration",
226
+ "messages.skip_link"
227
+ ],
228
+ "ru": [
229
+ "buttons.audio_badge",
230
+ "buttons.autoplay_pause",
231
+ "buttons.autoplay_play",
232
+ "buttons.layers",
233
+ "buttons.layers_basemaps",
234
+ "buttons.layers_overlays",
235
+ "media.iframe_title",
236
+ "messages.consent_service_narration",
237
+ "messages.skip_link"
238
+ ],
239
+ "sk": [
240
+ "buttons.audio_badge",
241
+ "buttons.autoplay_pause",
242
+ "buttons.autoplay_play",
243
+ "buttons.layers",
244
+ "buttons.layers_basemaps",
245
+ "buttons.layers_overlays",
246
+ "media.iframe_title",
247
+ "messages.consent_service_narration",
248
+ "messages.skip_link"
50
249
  ],
51
- "no": ["messages.consent_service_narration"],
52
- "pl": ["messages.consent_service_narration"],
53
- "pt": ["messages.consent_service_narration"],
54
- "ru": ["messages.consent_service_narration"],
55
- "sk": ["messages.consent_service_narration"],
56
250
  "sr": [
251
+ "buttons.audio_badge",
252
+ "buttons.autoplay_pause",
253
+ "buttons.autoplay_play",
57
254
  "buttons.exit_fullscreen",
58
255
  "buttons.fullscreen",
256
+ "buttons.layers",
257
+ "buttons.layers_basemaps",
258
+ "buttons.layers_overlays",
59
259
  "buttons.overview",
260
+ "media.iframe_title",
60
261
  "messages.consent_allow",
61
262
  "messages.consent_blocked",
62
263
  "messages.consent_deny",
@@ -64,14 +265,52 @@
64
265
  "messages.consent_service_fonts",
65
266
  "messages.consent_service_narration",
66
267
  "messages.consent_service_tiles",
67
- "messages.error"
268
+ "messages.error",
269
+ "messages.skip_link"
270
+ ],
271
+ "sv": [
272
+ "buttons.audio_badge",
273
+ "buttons.autoplay_pause",
274
+ "buttons.autoplay_play",
275
+ "buttons.layers",
276
+ "buttons.layers_basemaps",
277
+ "buttons.layers_overlays",
278
+ "media.iframe_title",
279
+ "messages.consent_service_narration",
280
+ "messages.skip_link"
281
+ ],
282
+ "tr": [
283
+ "buttons.audio_badge",
284
+ "buttons.autoplay_pause",
285
+ "buttons.autoplay_play",
286
+ "buttons.layers",
287
+ "buttons.layers_basemaps",
288
+ "buttons.layers_overlays",
289
+ "media.iframe_title",
290
+ "messages.consent_service_narration",
291
+ "messages.skip_link"
292
+ ],
293
+ "uk": [
294
+ "buttons.audio_badge",
295
+ "buttons.autoplay_pause",
296
+ "buttons.autoplay_play",
297
+ "buttons.layers",
298
+ "buttons.layers_basemaps",
299
+ "buttons.layers_overlays",
300
+ "media.iframe_title",
301
+ "messages.consent_service_narration",
302
+ "messages.skip_link"
68
303
  ],
69
- "sv": ["messages.consent_service_narration"],
70
- "tr": ["messages.consent_service_narration"],
71
- "uk": ["messages.consent_service_narration"],
72
304
  "ur": [
305
+ "buttons.audio_badge",
306
+ "buttons.autoplay_pause",
307
+ "buttons.autoplay_play",
73
308
  "buttons.exit_fullscreen",
74
309
  "buttons.fullscreen",
310
+ "buttons.layers",
311
+ "buttons.layers_basemaps",
312
+ "buttons.layers_overlays",
313
+ "media.iframe_title",
75
314
  "messages.consent_allow",
76
315
  "messages.consent_blocked",
77
316
  "messages.consent_deny",
@@ -79,8 +318,29 @@
79
318
  "messages.consent_service_fonts",
80
319
  "messages.consent_service_narration",
81
320
  "messages.consent_service_tiles",
82
- "messages.error"
321
+ "messages.error",
322
+ "messages.skip_link"
83
323
  ],
84
- "zh-cn": ["messages.consent_service_narration"],
85
- "zh-tw": ["messages.consent_service_narration"]
324
+ "zh-cn": [
325
+ "buttons.audio_badge",
326
+ "buttons.autoplay_pause",
327
+ "buttons.autoplay_play",
328
+ "buttons.layers",
329
+ "buttons.layers_basemaps",
330
+ "buttons.layers_overlays",
331
+ "media.iframe_title",
332
+ "messages.consent_service_narration",
333
+ "messages.skip_link"
334
+ ],
335
+ "zh-tw": [
336
+ "buttons.audio_badge",
337
+ "buttons.autoplay_pause",
338
+ "buttons.autoplay_play",
339
+ "buttons.layers",
340
+ "buttons.layers_basemaps",
341
+ "buttons.layers_overlays",
342
+ "media.iframe_title",
343
+ "messages.consent_service_narration",
344
+ "messages.skip_link"
345
+ ]
86
346
  }
@@ -3,6 +3,7 @@
3
3
  "lang": "de",
4
4
  "messages": {
5
5
  "loading": "Daten werden geladen",
6
+ "skip_link": "Zum Story-Inhalt springen",
6
7
  "wikipedia": "von Wikipedia, der freien Enzyklopädie",
7
8
  "start": "Explore",
8
9
  "consent_start_title": "Externe Inhalte",
@@ -25,7 +26,16 @@
25
26
  "uncollapse_toggle": "Karte anzeigen",
26
27
  "swipe_to_navigate": "Swipe to Navigate<br><span class='vco-button'>OK</span>",
27
28
  "fullscreen": "Vollbild",
28
- "exit_fullscreen": "Vollbild beenden"
29
+ "exit_fullscreen": "Vollbild beenden",
30
+ "layers": "Ebenen",
31
+ "layers_basemaps": "Grundkarten",
32
+ "layers_overlays": "Overlays",
33
+ "autoplay_pause": "Autoplay pausieren",
34
+ "autoplay_play": "Autoplay fortsetzen",
35
+ "audio_badge": "Enthält Audio"
36
+ },
37
+ "media": {
38
+ "iframe_title": "Eingebettetes Medium"
29
39
  },
30
40
  "direction": "ltr"
31
41
  }
@@ -4,6 +4,7 @@
4
4
  "messages": {
5
5
  "error": "Error loading",
6
6
  "loading": "Loading",
7
+ "skip_link": "Skip to story content",
7
8
  "wikipedia": "From Wikipedia, the free encyclopedia",
8
9
  "start": "Start Exploring",
9
10
  "consent_message": "Load content from {service}?",
@@ -26,7 +27,16 @@
26
27
  "uncollapse_toggle": "Show Map",
27
28
  "swipe_to_navigate": "Swipe to Navigate<br><span class='vco-button'>OK</span>",
28
29
  "fullscreen": "Full Screen",
29
- "exit_fullscreen": "Exit Full Screen"
30
+ "exit_fullscreen": "Exit Full Screen",
31
+ "layers": "Layers",
32
+ "layers_basemaps": "Basemaps",
33
+ "layers_overlays": "Overlays",
34
+ "autoplay_pause": "Pause autoplay",
35
+ "autoplay_play": "Resume autoplay",
36
+ "audio_badge": "Has audio"
37
+ },
38
+ "media": {
39
+ "iframe_title": "Embedded media"
30
40
  },
31
41
  "direction": "ltr"
32
42
  }
package/src/main.ts CHANGED
@@ -103,6 +103,23 @@ export {
103
103
  */
104
104
  export { storymapToManifest } from "./storymap/to-iiif";
105
105
 
106
+ /**
107
+ * Read a slideshow tour (W3C AnnotationCollection + extension) as storymap
108
+ * data — the counterpart of `manifestToStorymapData()` for that format.
109
+ * Pure, so the same document always produces the same story.
110
+ */
111
+ export {
112
+ isSlideshowCollection,
113
+ slideshowVersion,
114
+ slideshowToStorymapData,
115
+ } from "./storymap/from-slideshow";
116
+ export type {
117
+ SlideshowPlayerSettings,
118
+ SlideshowTranslatorOptions,
119
+ SlideshowToStorymapResult,
120
+ SlideshowWarning,
121
+ } from "./storymap/from-slideshow";
122
+
106
123
  /**
107
124
  * The manifest shape `storymapToManifest()` produces, for a host that wants to
108
125
  * consume or further annotate the result.
@@ -136,6 +153,40 @@ export type { default as OlVectorLayer } from "ol/layer/Vector";
136
153
  export type { default as OlSource } from "ol/source/Source";
137
154
  export type { default as OlProjection } from "ol/proj/Projection";
138
155
 
156
+ /**
157
+ * What a listener receives: the event payload plus the framework's `type`
158
+ * and `target` fields.
159
+ */
160
+ export type { FiredEvent } from "./core/mixins";
161
+
162
+ /** The swipe directions a `Swipable` reports. */
163
+ export type { SwipeDirection } from "./ui/Swipable";
164
+
165
+ /**
166
+ * Per-emitter event maps (`event name → payload`), for typed subscriptions:
167
+ * `storymap.on("change", (e) => ...)` now infers `e` instead of `unknown`.
168
+ *
169
+ * @remarks Each map lists exactly the events its emitter fires.
170
+ */
171
+ export type { StoryMapEvents } from "./storymap/StoryMap";
172
+ export type { StorySliderEvents } from "./slider/StorySlider";
173
+ export type { StorymapBasemap } from "./types";
174
+ export type { SlideEvents, SlideBackgroundState } from "./slider/Slide";
175
+ export type { SlideNavEvents } from "./slider/SlideNav";
176
+ export type { MediaEvents } from "./media/Media";
177
+ export type { TextEvents } from "./media/types/Text";
178
+ export type { MapEvents } from "./map/Map";
179
+ export type { MapMarkerEvents, MarkerEventPayload } from "./map/MapMarker";
180
+ export type { MenuBarEvents } from "./ui/MenuBar";
181
+ export type { MessageEvents } from "./ui/Message";
182
+ export type { SwipableEvents } from "./ui/Swipable";
183
+
184
+ /**
185
+ * A map marker as returned by `storymap.getMarker(n)` / `getMarkers()` —
186
+ * the handle for `openPopup()` / `closePopup()` / `popupOpen`.
187
+ */
188
+ export type { default as StoryMapMarker } from "./map/openlayers/MapMarker.OpenLayers";
189
+
139
190
  /**
140
191
  * Payload of the `imageready` event, fired when an image source is actually
141
192
  * attached — the only outward signal that the imagery is really on the map.
package/src/map/Map.ts CHANGED
@@ -7,6 +7,8 @@ import type { Tile as TileLayer, Vector as VectorLayer } from "ol/layer";
7
7
  import type Layer from "ol/layer/Layer";
8
8
  import type OverviewMap from "ol/control/OverviewMap";
9
9
  import type MapMarker from "./MapMarker";
10
+ import type { MarkerEventPayload } from "./MapMarker";
11
+ import type { ImagereadyPayload } from "./openlayers/Map.OpenLayers";
10
12
  import type { LinePoint, ViewToOptions } from "./types";
11
13
  import type {
12
14
  AnimationHandle,
@@ -26,6 +28,21 @@ import type {
26
28
 
27
29
  ================================================ */
28
30
 
31
+ export interface MapEvents {
32
+ change: { current_marker: number };
33
+ loaded: StorymapData;
34
+ added: StorymapData;
35
+ removed: StorymapData;
36
+ markerAdded: MapMarker;
37
+ markerRemoved: MapMarker;
38
+ markerclick: MarkerEventPayload;
39
+ popupopen: MarkerEventPayload;
40
+ popupclose: MarkerEventPayload;
41
+ imageready: ImagereadyPayload;
42
+ /** Deferred tile layers attached after a tile consent grant. */
43
+ tilesallowed: undefined;
44
+ }
45
+
29
46
  /** Wheel/scroll zoom bookkeeping (handles cleared via clearTimeout). */
30
47
  interface ScrollState {
31
48
  start_time: number | null;
@@ -49,6 +66,8 @@ class MapBase {
49
66
  declare "_line": VectorLayer | null;
50
67
  declare "_line_active": VectorLayer | null;
51
68
  declare "current_marker": number;
69
+ /** The wheel handler on the map element, stored for dispose(). */
70
+ declare "_onWheelBound": ((e: WheelEvent) => void) | null;
52
71
  declare "bounds_array": number[][] | null;
53
72
  declare "_tile_layer": Layer | null;
54
73
  declare "_tile_layer_mini": Layer | null;
@@ -60,7 +79,7 @@ class MapBase {
60
79
  declare "timer": ReturnType<typeof setTimeout> | null;
61
80
  declare "touch_scale": number;
62
81
  declare "scroll": ScrollState;
63
- declare "fire": EventedInstance["fire"];
82
+ declare "fire": EventedInstance<MapEvents>["fire"];
64
83
  constructor(
65
84
  elem: string | HTMLElement,
66
85
  data?: Partial<StorymapData>,
@@ -214,6 +233,10 @@ class MapBase {
214
233
  // Check to see if it's an overview
215
234
  if (marker.data.type && marker.data.type === "overview") {
216
235
  this._markerOverview();
236
+ // overview stops are navigable like any other: report the
237
+ // change exactly as the branches below do, or a click on an
238
+ // overview pin moves the map without ever moving the story
239
+ this._onMarkerChange();
217
240
  } else {
218
241
  // Make marker active
219
242
  marker.active(true);
@@ -662,6 +685,18 @@ class MapBase {
662
685
  if (this.current_marker !== e.marker_number) {
663
686
  this.goTo(e.marker_number, false);
664
687
  }
688
+ // Re-fired (after navigation) so hosts can tell a marker click
689
+ // apart from programmatic navigation: `change` alone does not say
690
+ // *how* the story moved.
691
+ this.fire("markerclick", { marker_number: e.marker_number });
692
+ }
693
+
694
+ _onMarkerPopupOpen(e: { marker_number: number }): void {
695
+ this.fire("popupopen", { marker_number: e.marker_number });
696
+ }
697
+
698
+ _onMarkerPopupClose(e: { marker_number: number }): void {
699
+ this.fire("popupclose", { marker_number: e.marker_number });
665
700
  }
666
701
 
667
702
  _onMapLoaded(e?: unknown): void {
@@ -777,15 +812,18 @@ class MapBase {
777
812
  _afterCreateMarkers(): void {}
778
813
 
779
814
  _initEvents(): void {
780
- this._el.map.addEventListener("wheel", (e) => {
815
+ // stored so the engine's dispose() can detach it (an inline arrow
816
+ // would have no other handle)
817
+ this._onWheelBound = (e: WheelEvent) => {
781
818
  this._onWheel(e);
782
- });
783
-
784
- //this.on("wheel", this._onWheel, this);
819
+ };
820
+ this._el.map.addEventListener("wheel", this._onWheelBound);
785
821
  }
786
822
  }
787
823
 
788
- export default class Map extends DomMixed(Evented(MapBase)) {
824
+ const EventedMapBase = Evented<MapEvents, typeof MapBase>(MapBase);
825
+
826
+ export default class Map extends DomMixed<MapEvents, typeof EventedMapBase>(EventedMapBase) {
789
827
  constructor(...args: ConstructorParameters<typeof MapBase>) {
790
828
  super(...args);
791
829
  }
@@ -11,7 +11,18 @@ import type {
11
11
  /* MapMarker
12
12
  Creates a marker. Takes a data object and
13
13
  populates the marker with content.
14
- ================================================= */
14
+ ================================================== */
15
+
16
+ /** A marker event payload: the marker by slide index. */
17
+ export interface MarkerEventPayload {
18
+ marker_number: number;
19
+ }
20
+
21
+ export interface MapMarkerEvents {
22
+ markerclick: MarkerEventPayload;
23
+ popupopen: MarkerEventPayload;
24
+ popupclose: MarkerEventPayload;
25
+ }
15
26
 
16
27
  class MapMarkerBase {
17
28
  declare "_el": Record<string, HTMLElement>;
@@ -26,7 +37,7 @@ class MapMarkerBase {
26
37
  declare "data": MapMarkerData;
27
38
  declare "options": StorymapOptions;
28
39
  declare "animator": AnimationHandle | null;
29
- declare "fire": EventedInstance["fire"];
40
+ declare "fire": EventedInstance<MapMarkerEvents>["fire"];
30
41
 
31
42
  /* Constructor
32
43
  ================================================== */
@@ -163,7 +174,9 @@ class MapMarkerBase {
163
174
  _updateDisplay(width: number, height: number, animate?: boolean): void {}
164
175
  }
165
176
 
166
- export default class MapMarker extends Evented(MapMarkerBase) {
177
+ export default class MapMarker extends Evented<MapMarkerEvents, typeof MapMarkerBase>(
178
+ MapMarkerBase,
179
+ ) {
167
180
  constructor(...args: ConstructorParameters<typeof MapMarkerBase>) {
168
181
  super(...args);
169
182
  }