@projektemacher/storymapjs 0.10.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 (326) hide show
  1. package/CHANGELOG +121 -0
  2. package/LICENSE +365 -0
  3. package/README.md +128 -0
  4. package/dist/assets/demo-DYodj6d7.js +1 -0
  5. package/dist/assets/harness-UkbbPmC4.js +1 -0
  6. package/dist/assets/index-DDsPBPZA.js +1 -0
  7. package/dist/assets/main-BDSRsIiB.js +17 -0
  8. package/dist/assets/main-Bzm6THVj.css +1 -0
  9. package/dist/assets/modulepreload-polyfill-P2Xu9kJm.js +1 -0
  10. package/dist/context.json +35 -0
  11. package/dist/css/fonts/files/abril-fatface-latin-400-normal.woff2 +0 -0
  12. package/dist/css/fonts/files/abril-fatface-latin-ext-400-normal.woff2 +0 -0
  13. package/dist/css/fonts/files/amatic-sc-latin-400-normal.woff2 +0 -0
  14. package/dist/css/fonts/files/amatic-sc-latin-700-normal.woff2 +0 -0
  15. package/dist/css/fonts/files/amatic-sc-latin-ext-400-normal.woff2 +0 -0
  16. package/dist/css/fonts/files/amatic-sc-latin-ext-700-normal.woff2 +0 -0
  17. package/dist/css/fonts/files/average-sans-latin-400-normal.woff2 +0 -0
  18. package/dist/css/fonts/files/average-sans-latin-ext-400-normal.woff2 +0 -0
  19. package/dist/css/fonts/files/bitter-latin-100-italic.woff2 +0 -0
  20. package/dist/css/fonts/files/bitter-latin-100-normal.woff2 +0 -0
  21. package/dist/css/fonts/files/bitter-latin-200-italic.woff2 +0 -0
  22. package/dist/css/fonts/files/bitter-latin-200-normal.woff2 +0 -0
  23. package/dist/css/fonts/files/bitter-latin-300-italic.woff2 +0 -0
  24. package/dist/css/fonts/files/bitter-latin-300-normal.woff2 +0 -0
  25. package/dist/css/fonts/files/bitter-latin-400-italic.woff2 +0 -0
  26. package/dist/css/fonts/files/bitter-latin-400-normal.woff2 +0 -0
  27. package/dist/css/fonts/files/bitter-latin-500-italic.woff2 +0 -0
  28. package/dist/css/fonts/files/bitter-latin-500-normal.woff2 +0 -0
  29. package/dist/css/fonts/files/bitter-latin-600-italic.woff2 +0 -0
  30. package/dist/css/fonts/files/bitter-latin-600-normal.woff2 +0 -0
  31. package/dist/css/fonts/files/bitter-latin-700-italic.woff2 +0 -0
  32. package/dist/css/fonts/files/bitter-latin-700-normal.woff2 +0 -0
  33. package/dist/css/fonts/files/bitter-latin-800-italic.woff2 +0 -0
  34. package/dist/css/fonts/files/bitter-latin-800-normal.woff2 +0 -0
  35. package/dist/css/fonts/files/bitter-latin-900-italic.woff2 +0 -0
  36. package/dist/css/fonts/files/bitter-latin-900-normal.woff2 +0 -0
  37. package/dist/css/fonts/files/bitter-latin-ext-100-italic.woff2 +0 -0
  38. package/dist/css/fonts/files/bitter-latin-ext-100-normal.woff2 +0 -0
  39. package/dist/css/fonts/files/bitter-latin-ext-200-italic.woff2 +0 -0
  40. package/dist/css/fonts/files/bitter-latin-ext-200-normal.woff2 +0 -0
  41. package/dist/css/fonts/files/bitter-latin-ext-300-italic.woff2 +0 -0
  42. package/dist/css/fonts/files/bitter-latin-ext-300-normal.woff2 +0 -0
  43. package/dist/css/fonts/files/bitter-latin-ext-400-italic.woff2 +0 -0
  44. package/dist/css/fonts/files/bitter-latin-ext-400-normal.woff2 +0 -0
  45. package/dist/css/fonts/files/bitter-latin-ext-500-italic.woff2 +0 -0
  46. package/dist/css/fonts/files/bitter-latin-ext-500-normal.woff2 +0 -0
  47. package/dist/css/fonts/files/bitter-latin-ext-600-italic.woff2 +0 -0
  48. package/dist/css/fonts/files/bitter-latin-ext-600-normal.woff2 +0 -0
  49. package/dist/css/fonts/files/bitter-latin-ext-700-italic.woff2 +0 -0
  50. package/dist/css/fonts/files/bitter-latin-ext-700-normal.woff2 +0 -0
  51. package/dist/css/fonts/files/bitter-latin-ext-800-italic.woff2 +0 -0
  52. package/dist/css/fonts/files/bitter-latin-ext-800-normal.woff2 +0 -0
  53. package/dist/css/fonts/files/bitter-latin-ext-900-italic.woff2 +0 -0
  54. package/dist/css/fonts/files/bitter-latin-ext-900-normal.woff2 +0 -0
  55. package/dist/css/fonts/files/bitter-latin-ext-wght-italic.woff2 +0 -0
  56. package/dist/css/fonts/files/bitter-latin-ext-wght-normal.woff2 +0 -0
  57. package/dist/css/fonts/files/bitter-latin-wght-italic.woff2 +0 -0
  58. package/dist/css/fonts/files/bitter-latin-wght-normal.woff2 +0 -0
  59. package/dist/css/fonts/files/clicker-script-latin-400-normal.woff2 +0 -0
  60. package/dist/css/fonts/files/clicker-script-latin-ext-400-normal.woff2 +0 -0
  61. package/dist/css/fonts/files/dancing-script-latin-ext-wght-normal.woff2 +0 -0
  62. package/dist/css/fonts/files/dancing-script-latin-wght-normal.woff2 +0 -0
  63. package/dist/css/fonts/files/eb-garamond-latin-ext-wght-italic.woff2 +0 -0
  64. package/dist/css/fonts/files/eb-garamond-latin-ext-wght-normal.woff2 +0 -0
  65. package/dist/css/fonts/files/eb-garamond-latin-wght-italic.woff2 +0 -0
  66. package/dist/css/fonts/files/eb-garamond-latin-wght-normal.woff2 +0 -0
  67. package/dist/css/fonts/files/fauna-one-latin-400-normal.woff2 +0 -0
  68. package/dist/css/fonts/files/fauna-one-latin-ext-400-normal.woff2 +0 -0
  69. package/dist/css/fonts/files/gentium-book-plus-latin-400-italic.woff2 +0 -0
  70. package/dist/css/fonts/files/gentium-book-plus-latin-400-normal.woff2 +0 -0
  71. package/dist/css/fonts/files/gentium-book-plus-latin-700-italic.woff2 +0 -0
  72. package/dist/css/fonts/files/gentium-book-plus-latin-700-normal.woff2 +0 -0
  73. package/dist/css/fonts/files/gentium-book-plus-latin-ext-400-italic.woff2 +0 -0
  74. package/dist/css/fonts/files/gentium-book-plus-latin-ext-400-normal.woff2 +0 -0
  75. package/dist/css/fonts/files/gentium-book-plus-latin-ext-700-italic.woff2 +0 -0
  76. package/dist/css/fonts/files/gentium-book-plus-latin-ext-700-normal.woff2 +0 -0
  77. package/dist/css/fonts/files/lato-latin-100-italic.woff2 +0 -0
  78. package/dist/css/fonts/files/lato-latin-100-normal.woff2 +0 -0
  79. package/dist/css/fonts/files/lato-latin-300-italic.woff2 +0 -0
  80. package/dist/css/fonts/files/lato-latin-300-normal.woff2 +0 -0
  81. package/dist/css/fonts/files/lato-latin-400-italic.woff2 +0 -0
  82. package/dist/css/fonts/files/lato-latin-400-normal.woff2 +0 -0
  83. package/dist/css/fonts/files/lato-latin-700-italic.woff2 +0 -0
  84. package/dist/css/fonts/files/lato-latin-700-normal.woff2 +0 -0
  85. package/dist/css/fonts/files/lato-latin-900-italic.woff2 +0 -0
  86. package/dist/css/fonts/files/lato-latin-900-normal.woff2 +0 -0
  87. package/dist/css/fonts/files/lato-latin-ext-100-italic.woff2 +0 -0
  88. package/dist/css/fonts/files/lato-latin-ext-100-normal.woff2 +0 -0
  89. package/dist/css/fonts/files/lato-latin-ext-300-italic.woff2 +0 -0
  90. package/dist/css/fonts/files/lato-latin-ext-300-normal.woff2 +0 -0
  91. package/dist/css/fonts/files/lato-latin-ext-400-italic.woff2 +0 -0
  92. package/dist/css/fonts/files/lato-latin-ext-400-normal.woff2 +0 -0
  93. package/dist/css/fonts/files/lato-latin-ext-700-italic.woff2 +0 -0
  94. package/dist/css/fonts/files/lato-latin-ext-700-normal.woff2 +0 -0
  95. package/dist/css/fonts/files/lato-latin-ext-900-italic.woff2 +0 -0
  96. package/dist/css/fonts/files/lato-latin-ext-900-normal.woff2 +0 -0
  97. package/dist/css/fonts/files/megrim-latin-400-normal.woff2 +0 -0
  98. package/dist/css/fonts/files/megrim-latin-ext-400-normal.woff2 +0 -0
  99. package/dist/css/fonts/files/old-standard-tt-latin-400-italic.woff2 +0 -0
  100. package/dist/css/fonts/files/old-standard-tt-latin-400-normal.woff2 +0 -0
  101. package/dist/css/fonts/files/old-standard-tt-latin-700-normal.woff2 +0 -0
  102. package/dist/css/fonts/files/old-standard-tt-latin-ext-400-italic.woff2 +0 -0
  103. package/dist/css/fonts/files/old-standard-tt-latin-ext-400-normal.woff2 +0 -0
  104. package/dist/css/fonts/files/old-standard-tt-latin-ext-700-normal.woff2 +0 -0
  105. package/dist/css/fonts/files/open-sans-latin-ext-wght-italic.woff2 +0 -0
  106. package/dist/css/fonts/files/open-sans-latin-ext-wght-normal.woff2 +0 -0
  107. package/dist/css/fonts/files/open-sans-latin-wght-italic.woff2 +0 -0
  108. package/dist/css/fonts/files/open-sans-latin-wght-normal.woff2 +0 -0
  109. package/dist/css/fonts/files/playfair-display-latin-ext-wght-italic.woff2 +0 -0
  110. package/dist/css/fonts/files/playfair-display-latin-ext-wght-normal.woff2 +0 -0
  111. package/dist/css/fonts/files/playfair-display-latin-wght-italic.woff2 +0 -0
  112. package/dist/css/fonts/files/playfair-display-latin-wght-normal.woff2 +0 -0
  113. package/dist/css/fonts/files/playfair-display-sc-latin-400-italic.woff2 +0 -0
  114. package/dist/css/fonts/files/playfair-display-sc-latin-400-normal.woff2 +0 -0
  115. package/dist/css/fonts/files/playfair-display-sc-latin-700-italic.woff2 +0 -0
  116. package/dist/css/fonts/files/playfair-display-sc-latin-700-normal.woff2 +0 -0
  117. package/dist/css/fonts/files/playfair-display-sc-latin-900-italic.woff2 +0 -0
  118. package/dist/css/fonts/files/playfair-display-sc-latin-900-normal.woff2 +0 -0
  119. package/dist/css/fonts/files/playfair-display-sc-latin-ext-400-italic.woff2 +0 -0
  120. package/dist/css/fonts/files/playfair-display-sc-latin-ext-400-normal.woff2 +0 -0
  121. package/dist/css/fonts/files/playfair-display-sc-latin-ext-700-italic.woff2 +0 -0
  122. package/dist/css/fonts/files/playfair-display-sc-latin-ext-700-normal.woff2 +0 -0
  123. package/dist/css/fonts/files/playfair-display-sc-latin-ext-900-italic.woff2 +0 -0
  124. package/dist/css/fonts/files/playfair-display-sc-latin-ext-900-normal.woff2 +0 -0
  125. package/dist/css/fonts/files/pt-sans-latin-400-italic.woff2 +0 -0
  126. package/dist/css/fonts/files/pt-sans-latin-400-normal.woff2 +0 -0
  127. package/dist/css/fonts/files/pt-sans-latin-700-italic.woff2 +0 -0
  128. package/dist/css/fonts/files/pt-sans-latin-700-normal.woff2 +0 -0
  129. package/dist/css/fonts/files/pt-sans-latin-ext-400-italic.woff2 +0 -0
  130. package/dist/css/fonts/files/pt-sans-latin-ext-400-normal.woff2 +0 -0
  131. package/dist/css/fonts/files/pt-sans-latin-ext-700-italic.woff2 +0 -0
  132. package/dist/css/fonts/files/pt-sans-latin-ext-700-normal.woff2 +0 -0
  133. package/dist/css/fonts/files/pt-sans-narrow-latin-400-normal.woff2 +0 -0
  134. package/dist/css/fonts/files/pt-sans-narrow-latin-700-normal.woff2 +0 -0
  135. package/dist/css/fonts/files/pt-sans-narrow-latin-ext-400-normal.woff2 +0 -0
  136. package/dist/css/fonts/files/pt-sans-narrow-latin-ext-700-normal.woff2 +0 -0
  137. package/dist/css/fonts/files/pt-serif-latin-400-italic.woff2 +0 -0
  138. package/dist/css/fonts/files/pt-serif-latin-400-normal.woff2 +0 -0
  139. package/dist/css/fonts/files/pt-serif-latin-700-italic.woff2 +0 -0
  140. package/dist/css/fonts/files/pt-serif-latin-700-normal.woff2 +0 -0
  141. package/dist/css/fonts/files/pt-serif-latin-ext-400-italic.woff2 +0 -0
  142. package/dist/css/fonts/files/pt-serif-latin-ext-400-normal.woff2 +0 -0
  143. package/dist/css/fonts/files/pt-serif-latin-ext-700-italic.woff2 +0 -0
  144. package/dist/css/fonts/files/pt-serif-latin-ext-700-normal.woff2 +0 -0
  145. package/dist/css/fonts/files/raleway-latin-ext-wght-italic.woff2 +0 -0
  146. package/dist/css/fonts/files/raleway-latin-ext-wght-normal.woff2 +0 -0
  147. package/dist/css/fonts/files/raleway-latin-wght-italic.woff2 +0 -0
  148. package/dist/css/fonts/files/raleway-latin-wght-normal.woff2 +0 -0
  149. package/dist/css/fonts/files/roboto-slab-latin-ext-wght-normal.woff2 +0 -0
  150. package/dist/css/fonts/files/roboto-slab-latin-wght-normal.woff2 +0 -0
  151. package/dist/css/fonts/files/rufina-latin-400-normal.woff2 +0 -0
  152. package/dist/css/fonts/files/rufina-latin-700-normal.woff2 +0 -0
  153. package/dist/css/fonts/files/rufina-latin-ext-400-normal.woff2 +0 -0
  154. package/dist/css/fonts/files/rufina-latin-ext-700-normal.woff2 +0 -0
  155. package/dist/css/fonts/files/ubuntu-latin-300-italic.woff2 +0 -0
  156. package/dist/css/fonts/files/ubuntu-latin-300-normal.woff2 +0 -0
  157. package/dist/css/fonts/files/ubuntu-latin-400-italic.woff2 +0 -0
  158. package/dist/css/fonts/files/ubuntu-latin-400-normal.woff2 +0 -0
  159. package/dist/css/fonts/files/ubuntu-latin-500-italic.woff2 +0 -0
  160. package/dist/css/fonts/files/ubuntu-latin-500-normal.woff2 +0 -0
  161. package/dist/css/fonts/files/ubuntu-latin-700-italic.woff2 +0 -0
  162. package/dist/css/fonts/files/ubuntu-latin-700-normal.woff2 +0 -0
  163. package/dist/css/fonts/files/ubuntu-latin-ext-300-italic.woff2 +0 -0
  164. package/dist/css/fonts/files/ubuntu-latin-ext-300-normal.woff2 +0 -0
  165. package/dist/css/fonts/files/ubuntu-latin-ext-400-italic.woff2 +0 -0
  166. package/dist/css/fonts/files/ubuntu-latin-ext-400-normal.woff2 +0 -0
  167. package/dist/css/fonts/files/ubuntu-latin-ext-500-italic.woff2 +0 -0
  168. package/dist/css/fonts/files/ubuntu-latin-ext-500-normal.woff2 +0 -0
  169. package/dist/css/fonts/files/ubuntu-latin-ext-700-italic.woff2 +0 -0
  170. package/dist/css/fonts/files/ubuntu-latin-ext-700-normal.woff2 +0 -0
  171. package/dist/css/fonts/files/unica-one-latin-400-normal.woff2 +0 -0
  172. package/dist/css/fonts/files/unica-one-latin-ext-400-normal.woff2 +0 -0
  173. package/dist/css/fonts/files/vollkorn-latin-ext-wght-italic.woff2 +0 -0
  174. package/dist/css/fonts/files/vollkorn-latin-ext-wght-normal.woff2 +0 -0
  175. package/dist/css/fonts/files/vollkorn-latin-wght-italic.woff2 +0 -0
  176. package/dist/css/fonts/files/vollkorn-latin-wght-normal.woff2 +0 -0
  177. package/dist/css/fonts/font.abril-droidsans.css +108 -0
  178. package/dist/css/fonts/font.amatic-andika.css +126 -0
  179. package/dist/css/fonts/font.bitter-raleway.css +162 -0
  180. package/dist/css/fonts/font.clicker-garamond.css +149 -0
  181. package/dist/css/fonts/font.dancing-ledger.css +108 -0
  182. package/dist/css/fonts/font.default.css +278 -0
  183. package/dist/css/fonts/font.fjalla-average.css +113 -0
  184. package/dist/css/fonts/font.georgia-helvetica.css +88 -0
  185. package/dist/css/fonts/font.knightlab.css +467 -0
  186. package/dist/css/fonts/font.lustria-lato.css +275 -0
  187. package/dist/css/fonts/font.medula-lato.css +270 -0
  188. package/dist/css/fonts/font.oldstandard.css +160 -0
  189. package/dist/css/fonts/font.opensans-gentiumbook.css +167 -0
  190. package/dist/css/fonts/font.playfair-faunaone.css +145 -0
  191. package/dist/css/fonts/font.playfair.css +234 -0
  192. package/dist/css/fonts/font.pt.css +271 -0
  193. package/dist/css/fonts/font.roboto-megrim.css +108 -0
  194. package/dist/css/fonts/font.rufina-sintony.css +126 -0
  195. package/dist/css/fonts/font.ubuntu.css +237 -0
  196. package/dist/css/fonts/font.unicaone-vollkorn.css +144 -0
  197. package/dist/css/icons/README.md +4 -0
  198. package/dist/css/icons/emoji.png +0 -0
  199. package/dist/css/icons/emoji@2x.png +0 -0
  200. package/dist/css/icons/vco-icons.eot +0 -0
  201. package/dist/css/icons/vco-icons.svg +63 -0
  202. package/dist/css/icons/vco-icons.ttf +0 -0
  203. package/dist/css/icons/vco-icons.woff +0 -0
  204. package/dist/css/icons/vco-icons.woff2 +0 -0
  205. package/dist/css/storymap.css +2 -0
  206. package/dist/demo.html +17 -0
  207. package/dist/demo.json +479 -0
  208. package/dist/docs/api/.nojekyll +1 -0
  209. package/dist/docs/api/assets/custom.css +47 -0
  210. package/dist/docs/api/assets/hierarchy.js +1 -0
  211. package/dist/docs/api/assets/highlight.css +22 -0
  212. package/dist/docs/api/assets/icons.js +18 -0
  213. package/dist/docs/api/assets/icons.svg +1 -0
  214. package/dist/docs/api/assets/main.js +60 -0
  215. package/dist/docs/api/assets/navigation.js +1 -0
  216. package/dist/docs/api/assets/search.js +1 -0
  217. package/dist/docs/api/assets/style.css +1648 -0
  218. package/dist/docs/api/classes/StoryMap.html +799 -0
  219. package/dist/docs/api/functions/MediaType.html +51 -0
  220. package/dist/docs/api/functions/loadCSS.html +64 -0
  221. package/dist/docs/api/functions/setLanguage.html +53 -0
  222. package/dist/docs/api/functions/validateStorymap.html +53 -0
  223. package/dist/docs/api/functions/validateStorymapAndReport.html +54 -0
  224. package/dist/docs/api/hierarchy.html +28 -0
  225. package/dist/docs/api/index.html +127 -0
  226. package/dist/docs/api/modules.html +42 -0
  227. package/dist/docs/iiif.html +912 -0
  228. package/dist/docs/migration.html +264 -0
  229. package/dist/docs/readme.html +178 -0
  230. package/dist/embed/index.html +95 -0
  231. package/dist/examples/assets/placeholder-city.jpg +0 -0
  232. package/dist/examples/assets/placeholder-landscape.jpg +0 -0
  233. package/dist/examples/assets/placeholder-portrait.jpg +0 -0
  234. package/dist/examples/assets/tone.mp3 +0 -0
  235. package/dist/examples/bob-boilen.json +123 -0
  236. package/dist/examples/courbet.json +32 -0
  237. package/dist/examples/empty.json +5 -0
  238. package/dist/examples/flickr-drewvigal.json +341 -0
  239. package/dist/examples/flickr-zach.wise.json +341 -0
  240. package/dist/examples/iiif-wellcome.json +28 -0
  241. package/dist/examples/instagram-chenpamela.json +592 -0
  242. package/dist/examples/instagram_brentfoster.json +565 -0
  243. package/dist/examples/instagram_couch.json +402 -0
  244. package/dist/examples/instagram_joegermuska.json +687 -0
  245. package/dist/examples/instagram_matteich.json +341 -0
  246. package/dist/examples/instagram_mirandamulligan.json +402 -0
  247. package/dist/examples/instagram_raymondmccrea.json +341 -0
  248. package/dist/examples/instagram_test.json +341 -0
  249. package/dist/examples/issue-134-no-lines.json +78 -0
  250. package/dist/examples/issue-177-color-vars.json +44 -0
  251. package/dist/examples/issue-211-rtl.json +44 -0
  252. package/dist/examples/issue-272-facebook.json +47 -0
  253. package/dist/examples/issue-305-start-at-slide.json +95 -0
  254. package/dist/examples/issue-341-distance.json +44 -0
  255. package/dist/examples/issue-360-juxtapose.json +35 -0
  256. package/dist/examples/issue-368-null-fields.json +60 -0
  257. package/dist/examples/issue-375-code-lists.json +35 -0
  258. package/dist/examples/issue-381-dateline.json +77 -0
  259. package/dist/examples/issue-425-many-slides.json +2723 -0
  260. package/dist/examples/issue-428-background.json +62 -0
  261. package/dist/examples/issue-435-googlemaps.json +35 -0
  262. package/dist/examples/issue-437-documentcloud.json +35 -0
  263. package/dist/examples/issue-451-webp.json +35 -0
  264. package/dist/examples/issue-455-audio.json +35 -0
  265. package/dist/examples/issue-480-shorts.json +35 -0
  266. package/dist/examples/issue-506-marker-sync.json +77 -0
  267. package/dist/examples/jansteen.json +1 -0
  268. package/dist/examples/katrina.json +161 -0
  269. package/dist/examples/marktwain.json +341 -0
  270. package/dist/examples/population.json +463 -0
  271. package/dist/examples/president.json +454 -0
  272. package/dist/examples/seurat.json +248 -0
  273. package/dist/examples-iiif/bob-boilen.json +341 -0
  274. package/dist/examples-iiif/courbet.json +80 -0
  275. package/dist/examples-iiif/empty.json +29 -0
  276. package/dist/examples-iiif/flickr-drewvigal.json +1189 -0
  277. package/dist/examples-iiif/flickr-zach.wise.json +1074 -0
  278. package/dist/examples-iiif/iiif-wellcome.json +97 -0
  279. package/dist/examples-iiif/instagram-chenpamela.json +1716 -0
  280. package/dist/examples-iiif/instagram_brentfoster.json +1804 -0
  281. package/dist/examples-iiif/instagram_couch.json +1166 -0
  282. package/dist/examples-iiif/instagram_joegermuska.json +1946 -0
  283. package/dist/examples-iiif/instagram_matteich.json +1190 -0
  284. package/dist/examples-iiif/instagram_mirandamulligan.json +1171 -0
  285. package/dist/examples-iiif/instagram_raymondmccrea.json +1165 -0
  286. package/dist/examples-iiif/instagram_test.json +1185 -0
  287. package/dist/examples-iiif/issue-134-no-lines.json +245 -0
  288. package/dist/examples-iiif/issue-177-color-vars.json +182 -0
  289. package/dist/examples-iiif/issue-211-rtl.json +182 -0
  290. package/dist/examples-iiif/issue-272-facebook.json +146 -0
  291. package/dist/examples-iiif/issue-305-start-at-slide.json +300 -0
  292. package/dist/examples-iiif/issue-341-distance.json +182 -0
  293. package/dist/examples-iiif/issue-360-juxtapose.json +112 -0
  294. package/dist/examples-iiif/issue-368-null-fields.json +202 -0
  295. package/dist/examples-iiif/issue-375-code-lists.json +111 -0
  296. package/dist/examples-iiif/issue-381-dateline.json +244 -0
  297. package/dist/examples-iiif/issue-425-many-slides.json +8476 -0
  298. package/dist/examples-iiif/issue-428-background.json +191 -0
  299. package/dist/examples-iiif/issue-435-googlemaps.json +111 -0
  300. package/dist/examples-iiif/issue-437-documentcloud.json +112 -0
  301. package/dist/examples-iiif/issue-451-webp.json +111 -0
  302. package/dist/examples-iiif/issue-455-audio.json +111 -0
  303. package/dist/examples-iiif/issue-480-shorts.json +110 -0
  304. package/dist/examples-iiif/issue-506-marker-sync.json +244 -0
  305. package/dist/examples-iiif/jansteen.json +509 -0
  306. package/dist/examples-iiif/katrina.json +499 -0
  307. package/dist/examples-iiif/marktwain.json +929 -0
  308. package/dist/examples-iiif/population.json +1464 -0
  309. package/dist/examples-iiif/president.json +1351 -0
  310. package/dist/examples-iiif/seurat.json +870 -0
  311. package/dist/football.json +344 -0
  312. package/dist/harness.html +15 -0
  313. package/dist/index.html +410 -0
  314. package/dist/js/storymap.js +25787 -0
  315. package/dist/js/storymap.js.map +1 -0
  316. package/dist/site.css +592 -0
  317. package/dist/thumbs/bosch-garden.jpg +0 -0
  318. package/dist/thumbs/iiif-wellcome.jpg +0 -0
  319. package/dist/thumbs/katrina.jpg +0 -0
  320. package/dist/thumbs/marktwain.jpg +0 -0
  321. package/dist/thumbs/population.jpg +0 -0
  322. package/dist/thumbs/president.jpg +0 -0
  323. package/dist/thumbs/seurat.jpg +0 -0
  324. package/dist/thumbs/southern-literary-trail.jpg +0 -0
  325. package/package.json +105 -0
  326. package/schema/storymap.schema.json +192 -0
package/CHANGELOG ADDED
@@ -0,0 +1,121 @@
1
+ 1.0.0 (unreleased)
2
+ ------------------------
3
+ Viewer-only restructure of the repository:
4
+ - Removed the editor Flask backend, CDN staging and all legacy build artifacts
5
+ - Replaced webpack with Vite (dev/build/preview), default Vite project layout
6
+ - Converted the source to strict TypeScript (target ES2022, noImplicitAny, no explicit any)
7
+ - Replaced Leaflet with OpenLayers; IIIF Image API replaces Zoomify (breaking: map_type "zoomify" is gone, use "iiif")
8
+ - Converted Less to SASS with zero deprecation warnings (@use only, no @import, no vendor prefixes, no postcss-scss)
9
+ - Fonts bundled via @fontsource + @fontsource-utils/scss mixins (woff2, latin subsets); no runtime font CDN requests
10
+ - New exchange format: IIIF Presentation API 3.0 manifests (docs/storymap-as-iiif-manifest.md) with navPlace geo +
11
+ a storymap: extension; all example fixtures converted and validated against the official IIIF validator;
12
+ StoryMap reads both legacy JSON and Presentation 3 manifests
13
+ - JSON Schema for storymap data: runtime validation with console error reporting + CLI validator
14
+ - ESLint (all rules enabled, TS mixins per the handbook replace runtime classMixin), Stylelint (zero disabled
15
+ rules), Prettier, GitHub Actions for CI (lint/typecheck/validate/tests/build/e2e) and release packaging
16
+ - Dropped code for pre-2022 browsers: XHR -> fetch, removed vendor detection, engine workarounds, pollers,
17
+ minEmoji sprite polyfill and Knight Lab tracking
18
+ - Bug fixes: null-offset crashes, IIIF source races, unique-id generation, swipe direction check, empty-block cleanup
19
+
20
+ 0.9.5 (2025-11-05)
21
+ * Implement basic Audio and Video media types
22
+
23
+ 0.9.4 (2023-12-08)
24
+ * Forcibly change `stamen:` map_types to `osm:standard` or `ch-watercolor`
25
+ * #491 set script path in code
26
+
27
+ 0.9.3 (2023-11-02)
28
+ * Use osm:standard as default since stamen:toner-lite no longer free
29
+
30
+ 0.9.2 (2023-10-06)
31
+ * Minor bug-fixes in advance of launching authoring tool update.
32
+
33
+ 0.9.1 (2023-10-02)
34
+ * Hard-code preserving undefined map type as toner-lite, temporarily.
35
+
36
+ 0.9.0 (2023-10-02)
37
+ * Changes in map types as Stamen basemaps move to Stadia.
38
+
39
+ 0.8.4 (2021-04-01)
40
+ * Fixes regression of retina device handling
41
+
42
+ 0.8.3 (2021-03-31)
43
+ * Fixes regression of touch handling on mobile
44
+
45
+ 0.8.2 (2021-03-29)
46
+ * Reinstate dynamic minimap
47
+ * Allow user to revert from Gigapixel to standard map types
48
+ * Autoextract width and height info from zoomify ImageProperties
49
+ * Better error handling for invalid edit links
50
+
51
+ 0.8.1 (2021-03-25)
52
+ * Re-organizes code and build to use webpack
53
+
54
+ 0.7.6 (2020-11-03)
55
+ * Improve Portuguese translation (thanks Marcio Costa Strumiello)
56
+
57
+ 0.7.5 (2020-06-18)
58
+ * Completely fix regression added in 0.7.3 ugh
59
+
60
+ 0.7.4 (2020-06-18)
61
+ * Fix regression added in 0.7.3
62
+
63
+ 0.7.3 (2020-06-18)
64
+ * Improve handling for markers on Null Island (fixes #444)
65
+
66
+ 0.7.2 (2020-03-11)
67
+ * Update Flickr API key
68
+
69
+ 0.7.1 (2019-11-01)
70
+ * Implement support for lat/lon coordinate specification
71
+ * Fix to editor copy function
72
+ * Add Slovak translation (thanks @martin-havala)
73
+ * Improve Spanish translation (thanks @doxrealm)
74
+
75
+ 0.7.0 (2019-07-19)
76
+ * PR #416 adds woff2 font to fix nav arrows on MS Edge
77
+ * Update Mapbox wordmark in attribution
78
+
79
+ 0.6.9 (2018-09-14)
80
+ * Implement support for new-style mapbox style URLs (should have gone with #400)
81
+
82
+ 0.6.8 (2018-07-20)
83
+ * PR #394 Fixes anchor button in editor for Chrome
84
+ * PR #395 Adds localized mock S3 storage for development
85
+ * PR #399 Fixes null slide entries
86
+ * PR #400 Updates for changes to mapbox
87
+ * PR #401 Fixes content link button for Chrome
88
+ * PR #384 Updates zh-tw translation
89
+ * PR #340 Fixes null locations in data
90
+ * PR #402 Fixes image distortion in editor preview
91
+
92
+ 0.6.7 (2017-12-21)
93
+ * PR #361/366 Adds Turkish translation
94
+
95
+ 0.6.6 (2017-09-08)
96
+ * PR #377 Adds Turkish translation
97
+
98
+ 0.6.4 (207-04-06)
99
+ * PR #357 Fixes #351 YouTube link obscured by nav button
100
+
101
+ 0.6.2 (2016-12-13)
102
+ * PR #333 Adds zoomify analytics
103
+
104
+ 0.6.1 (2016-10-14)
105
+ ------------------------
106
+ * PR #302 Media fixes including pause of video types when navigating away from slide
107
+ * PR #303 Adds custom map marker upload in editor
108
+ * PR #312 Adds Greek translation to StoryMap editor
109
+
110
+ ## 1.0.0 (unreleased)
111
+
112
+ Viewer-only restructure of the repository:
113
+ - Removed the editor Flask backend, staging and legacy build artifacts
114
+ - Replaced webpack with Vite (dev/build/preview), default project layout
115
+ - Converted the source to strict TypeScript (target ES2022)
116
+ - Replaced Leaflet with OpenLayers; IIIF Image API replaces Zoomify (breaking)
117
+ - Converted Less to SASS; fonts bundled from npm (@fontsource) instead of runtime CDN requests
118
+ - Added a JSON Schema for storymap data, runtime validation with console reporting, and a CLI validator
119
+ - Added ESLint + Stylelint and GitHub Actions for linting/tests and release packaging
120
+ - Playwright e2e suite over all examples, Vitest for units
121
+ - Dropped code paths for pre-2022 browsers (legacy vendor prefixes, IE/old-engine fallbacks)
package/LICENSE ADDED
@@ -0,0 +1,365 @@
1
+ This Source Code Form is subject to the terms of the Mozilla Public
2
+ License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ file, You can obtain one at http://mozilla.org/MPL/2.0/.
4
+
5
+ Mozilla Public License Version 2.0
6
+ ==================================
7
+
8
+ 1. Definitions
9
+ --------------
10
+
11
+ 1.1. "Contributor"
12
+ means each individual or legal entity that creates, contributes to
13
+ the creation of, or owns Covered Software.
14
+
15
+ 1.2. "Contributor Version"
16
+ means the combination of the Contributions of others (if any) used
17
+ by a Contributor and that particular Contributor's Contribution.
18
+
19
+ 1.3. "Contribution"
20
+ means Covered Software of a particular Contributor.
21
+
22
+ 1.4. "Covered Software"
23
+ means Source Code Form to which the initial Contributor has attached
24
+ the notice in Exhibit A, the Executable Form of such Source Code
25
+ Form, and Modifications of such Source Code Form, in each case
26
+ including portions thereof.
27
+
28
+ 1.5. "Incompatible With Secondary Licenses"
29
+ means
30
+
31
+ (a) that the initial Contributor has attached the notice described
32
+ in Exhibit B to the Covered Software; or
33
+
34
+ (b) that the Covered Software was made available under the terms of
35
+ version 1.1 or earlier of the License, but not also under the
36
+ terms of a Secondary License.
37
+
38
+ 1.6. "Executable Form"
39
+ means any form of the work other than Source Code Form.
40
+
41
+ 1.7. "Larger Work"
42
+ means a work that combines Covered Software with other material, in
43
+ a separate file or files, that is not Covered Software.
44
+
45
+ 1.8. "License"
46
+ means this document.
47
+
48
+ 1.9. "Licensable"
49
+ means having the right to grant, to the maximum extent possible,
50
+ whether at the time of the initial grant or subsequently, any and
51
+ all of the rights conveyed by this License.
52
+
53
+ 1.10. "Modifications"
54
+ means any of the following:
55
+
56
+ (a) any file in Source Code Form that results from an addition to,
57
+ deletion from, or modification of the contents of Covered
58
+ Software; or
59
+
60
+ (b) any new file in Source Code Form that contains any Covered
61
+ Software.
62
+
63
+ 1.11. "Patent Claims" of a Contributor
64
+ means any patent claim(s), including without limitation, method,
65
+ process, and apparatus claims, in any patent Licensable by such
66
+ Contributor that would be infringed, but for the grant of the
67
+ License, by the making, using, selling, offering for sale, having
68
+ made, import, or transfer of either its Contributions or its
69
+ Contributor Version.
70
+
71
+ 1.12. "Secondary License"
72
+ means either the GNU General Public License, Version 2.0, the GNU
73
+ Lesser General Public License, Version 2.1, the GNU Affero General
74
+ Public License, Version 3.0, or any later versions of those
75
+ licenses.
76
+
77
+ 1.13. "Source Code Form"
78
+ means the form of the work preferred for making modifications.
79
+
80
+ 1.14. "You" (or "Your")
81
+ means an individual or a legal entity exercising rights under this
82
+ License. For legal entities, "You" includes any entity that
83
+ controls, is controlled by, or is under common control with You. For
84
+ purposes of this definition, "control" means (a) the power, direct
85
+ or indirect, to cause the direction or management of such entity,
86
+ whether by contract or otherwise, or (b) ownership of more than
87
+ fifty percent (50%) of the outstanding shares or beneficial
88
+ ownership of such entity.
89
+
90
+ 2. License Grants and Conditions
91
+ --------------------------------
92
+
93
+ 2.1. Grants
94
+
95
+ Each Contributor hereby grants You a world-wide, royalty-free,
96
+ non-exclusive license:
97
+
98
+ (a) under intellectual property rights (other than patent or trademark)
99
+ Licensable by such Contributor to use, reproduce, make available,
100
+ modify, display, perform, distribute, and otherwise exploit its
101
+ Contributions, either on an unmodified basis, with Modifications, or
102
+ as part of a Larger Work; and
103
+
104
+ (b) under Patent Claims of such Contributor to make, use, sell, offer
105
+ for sale, have made, import, and otherwise transfer either its
106
+ Contributions or its Contributor Version.
107
+
108
+ 2.2. Effective Date
109
+
110
+ The licenses granted in Section 2.1 with respect to any Contribution
111
+ become effective for each Contribution on the date the Contributor first
112
+ distributes such Contribution.
113
+
114
+ 2.3. Limitations on Grant Scope
115
+
116
+ The licenses granted in this Section 2 are the only rights granted under
117
+ this License. No additional rights or licenses will be implied from the
118
+ distribution or licensing of Covered Software under this License.
119
+ Notwithstanding Section 2.1(b) above, no patent license is granted by a
120
+ Contributor:
121
+
122
+ (a) for any code that a Contributor has removed from Covered Software;
123
+ or
124
+
125
+ (b) for infringements caused by: (i) Your and any other third party's
126
+ modifications of Covered Software, or (ii) the combination of its
127
+ Contributions with other software (except as part of its Contributor
128
+ Version); or
129
+
130
+ (c) under Patent Claims infringed by Covered Software in the absence of
131
+ its Contributions.
132
+
133
+ This License does not grant any rights in the trademarks, service marks,
134
+ or logos of any Contributor (except as may be necessary to comply with
135
+ the notice requirements in Section 3.4).
136
+
137
+ 2.4. Subsequent Licenses
138
+
139
+ No Contributor makes additional grants as a result of Your choice to
140
+ distribute the Covered Software under a subsequent version of this
141
+ License (see Section 10.2) or under the terms of a Secondary License (if
142
+ permitted under the terms of Section 3.3).
143
+
144
+ 2.5. Representation
145
+
146
+ Each Contributor represents that the Contributor believes its
147
+ Contributions are its original creation(s) or it has sufficient rights
148
+ to grant the rights to its Contributions conveyed by this License.
149
+
150
+ 2.6. Fair Use
151
+
152
+ This License is not intended to limit any rights You have under
153
+ applicable copyright doctrines of fair use, fair dealing, or other
154
+ equivalents.
155
+
156
+ 2.7. Conditions
157
+
158
+ Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
159
+ in Section 2.1.
160
+
161
+ 3. Responsibilities
162
+ -------------------
163
+
164
+ 3.1. Distribution of Source Form
165
+
166
+ All distribution of Covered Software in Source Code Form, including any
167
+ Modifications that You create or to which You contribute, must be under
168
+ the terms of this License. You must inform recipients that the Source
169
+ Code Form of the Covered Software is governed by the terms of this
170
+ License, and how they can obtain a copy of this License. You may not
171
+ attempt to alter or restrict the recipients' rights in the Source Code
172
+ Form.
173
+
174
+ 3.2. Distribution of Executable Form
175
+
176
+ If You distribute Covered Software in Executable Form then:
177
+
178
+ (a) such Covered Software must also be made available in Source Code
179
+ Form, as described in Section 3.1, and You must inform recipients of
180
+ the Executable Form how they can obtain a copy of such Source Code
181
+ Form by reasonable means in a timely manner, at a charge no more
182
+ than the cost of distribution to the recipient; and
183
+
184
+ (b) You may distribute such Executable Form under the terms of this
185
+ License, or sublicense it under different terms, provided that the
186
+ license for the Executable Form does not attempt to limit or alter
187
+ the recipients' rights in the Source Code Form under this License.
188
+
189
+ 3.3. Distribution of a Larger Work
190
+
191
+ You may create and distribute a Larger Work under terms of Your choice,
192
+ provided that You also comply with the requirements of this License for
193
+ the Covered Software. If the Larger Work is a combination of Covered
194
+ Software with a work governed by one or more Secondary Licenses, and the
195
+ Covered Software is not Incompatible With Secondary Licenses, this
196
+ License permits You to additionally distribute such Covered Software
197
+ under the terms of such Secondary License(s), so that the recipient of
198
+ the Larger Work may, at their option, further distribute the Covered
199
+ Software under the terms of either this License or such Secondary
200
+ License(s).
201
+
202
+ 3.4. Notices
203
+
204
+ You may not remove or alter the substance of any license notices
205
+ (including copyright notices, patent notices, disclaimers of warranty,
206
+ or limitations of liability) contained within the Source Code Form of
207
+ the Covered Software, except that You may alter any license notices to
208
+ the extent required to remedy known factual inaccuracies.
209
+
210
+ 3.5. Application of Additional Terms
211
+
212
+ You may choose to offer, and to charge a fee for, warranty, support,
213
+ indemnity or liability obligations to one or more recipients of Covered
214
+ Software. However, You may do so only on Your own behalf, and not on
215
+ behalf of any Contributor. You must make it absolutely clear that any
216
+ such warranty, support, indemnity, or liability obligation is offered by
217
+ You alone, and You hereby agree to indemnify every Contributor for any
218
+ liability incurred by such Contributor as a result of warranty, support,
219
+ indemnity or liability terms You offer. You may include additional
220
+ disclaimers of warranty and limitations of liability specific to any
221
+ jurisdiction.
222
+
223
+ 4. Inability to Comply Due to Statute or Regulation
224
+ ---------------------------------------------------
225
+
226
+ If it is impossible for You to comply with any of the terms of this
227
+ License with respect to some or all of the Covered Software due to
228
+ statute, judicial order, or regulation then You must: (a) comply with
229
+ the terms of this License to the maximum extent possible; and (b)
230
+ describe the limitations and the code they affect. Such description must
231
+ be placed in a text file included with all distributions of the Covered
232
+ Software under this License. Except to the extent prohibited by statute
233
+ or regulation, such description must be sufficiently detailed for a
234
+ recipient of ordinary skill to be able to understand it.
235
+
236
+ 5. Termination
237
+ --------------
238
+
239
+ 5.1. The rights granted under this License will terminate automatically
240
+ if You fail to comply with any of its terms. However, if You become
241
+ compliant, then the rights granted under this License from a particular
242
+ Contributor are reinstated (a) provisionally, unless and until such
243
+ Contributor explicitly and finally terminates Your grants, and (b) on an
244
+ ongoing basis, if such Contributor fails to notify You of the
245
+ non-compliance by some reasonable means prior to 60 days after You have
246
+ come back into compliance. Moreover, Your grants from a particular
247
+ Contributor are reinstated on an ongoing basis if such Contributor
248
+ notifies You of the non-compliance by some reasonable means, this is the
249
+ first time You have received notice of non-compliance with this License
250
+ from such Contributor, and You become compliant prior to 30 days after
251
+ Your receipt of the notice.
252
+
253
+ 5.2. If You initiate litigation against any entity by asserting a patent
254
+ infringement claim (excluding declaratory judgment actions,
255
+ counter-claims, and cross-claims) alleging that a Contributor Version
256
+ directly or indirectly infringes any patent, then the rights granted to
257
+ You by any and all Contributors for the Covered Software under Section
258
+ 2.1 of this License shall terminate.
259
+
260
+ 5.3. In the event of termination under Sections 5.1 or 5.2 above, all
261
+ end user license agreements (excluding distributors and resellers) which
262
+ have been validly granted by You or Your distributors under this License
263
+ prior to termination shall survive termination.
264
+
265
+ ************************************************************************
266
+ * *
267
+ * 6. Disclaimer of Warranty *
268
+ * ------------------------- *
269
+ * *
270
+ * Covered Software is provided under this License on an "as is" *
271
+ * basis, without warranty of any kind, either expressed, implied, or *
272
+ * statutory, including, without limitation, warranties that the *
273
+ * Covered Software is free of defects, merchantable, fit for a *
274
+ * particular purpose or non-infringing. The entire risk as to the *
275
+ * quality and performance of the Covered Software is with You. *
276
+ * Should any Covered Software prove defective in any respect, You *
277
+ * (not any Contributor) assume the cost of any necessary servicing, *
278
+ * repair, or correction. This disclaimer of warranty constitutes an *
279
+ * essential part of this License. No use of any Covered Software is *
280
+ * authorized under this License except under this disclaimer. *
281
+ * *
282
+ ************************************************************************
283
+
284
+ ************************************************************************
285
+ * *
286
+ * 7. Limitation of Liability *
287
+ * -------------------------- *
288
+ * *
289
+ * Under no circumstances and under no legal theory, whether tort *
290
+ * (including negligence), contract, or otherwise, shall any *
291
+ * Contributor, or anyone who distributes Covered Software as *
292
+ * permitted above, be liable to You for any direct, indirect, *
293
+ * special, incidental, or consequential damages of any character *
294
+ * including, without limitation, damages for lost profits, loss of *
295
+ * goodwill, work stoppage, computer failure or malfunction, or any *
296
+ * and all other commercial damages or losses, even if such party *
297
+ * shall have been informed of the possibility of such damages. This *
298
+ * limitation of liability shall not apply to liability for death or *
299
+ * personal injury resulting from such party's negligence to the *
300
+ * extent applicable law prohibits such limitation. Some *
301
+ * jurisdictions do not allow the exclusion or limitation of *
302
+ * incidental or consequential damages, so this exclusion and *
303
+ * limitation may not apply to You. *
304
+ * *
305
+ ************************************************************************
306
+
307
+ 8. Litigation
308
+ -------------
309
+
310
+ Any litigation relating to this License may be brought only in the
311
+ courts of a jurisdiction where the defendant maintains its principal
312
+ place of business and such litigation shall be governed by laws of that
313
+ jurisdiction, without reference to its conflict-of-law provisions.
314
+ Nothing in this Section shall prevent a party's ability to bring
315
+ cross-claims or counter-claims.
316
+
317
+ 9. Miscellaneous
318
+ ----------------
319
+
320
+ This License represents the complete agreement concerning the subject
321
+ matter hereof. If any provision of this License is held to be
322
+ unenforceable, such provision shall be reformed only to the extent
323
+ necessary to make it enforceable. Any law or regulation which provides
324
+ that the language of a contract shall be construed against the drafter
325
+ shall not be used to construe this License against a Contributor.
326
+
327
+ 10. Versions of the License
328
+ ---------------------------
329
+
330
+ 10.1. New Versions
331
+
332
+ Mozilla Foundation is the license steward. Except as provided in Section
333
+ 10.3, no one other than the license steward has the right to modify or
334
+ publish new versions of this License. Each version will be given a
335
+ distinguishing version number.
336
+
337
+ 10.2. Effect of New Versions
338
+
339
+ You may distribute the Covered Software under the terms of the version
340
+ of the License under which You originally received the Covered Software,
341
+ or under the terms of any subsequent version published by the license
342
+ steward.
343
+
344
+ 10.3. Modified Versions
345
+
346
+ If you create software not governed by this License, and you want to
347
+ create a new license for such software, you may create and use a
348
+ modified version of this License if you rename the license and remove
349
+ any references to the name of the license steward (except to note that
350
+ such modified license differs from this License).
351
+
352
+ 10.4. Distributing Source Code Form that is Incompatible With Secondary
353
+ Licenses
354
+
355
+ If You choose to distribute Source Code Form that is Incompatible With
356
+ Secondary Licenses under the terms of this version of the License, the
357
+ notice described in Exhibit B of this License must be attached.
358
+
359
+
360
+ -------------------------------------------
361
+
362
+ Map tiles by [Stamen Design](http://stamen.com "Stamen Design"), under
363
+ [CC BY 3.0](http://creativecommons.org/licenses/by/3.0 "CC BY 3.0").
364
+ Data by [OpenStreetMap](http://openstreetmap.org "OpenStreetMap"),
365
+ under [CC BY SA](http://creativecommons.org/licenses/by-sa/3.0 "CC BY SA").
package/README.md ADDED
@@ -0,0 +1,128 @@
1
+ # StoryMapJS: Maps that tell stories.
2
+
3
+ > **Important:** this is an **unofficial, unapproved fork** of the original
4
+ > [NUKnightLab/StoryMapJS](https://github.com/NUKnightLab/StoryMapJS)
5
+ > repository. It is a proof of concept for an AI-based renovation of the
6
+ > codebase, built using the model **GLM 5.3 Flash**. It is not endorsed by,
7
+ > affiliated with, or supported by Northwestern University Knight Lab.
8
+
9
+ This fork is a **viewer-only library**: it renders existing StoryMap JSON
10
+ files (or IIIF Presentation manifests) with TypeScript + Vite + OpenLayers.
11
+ There is no authoring tool — create your storymap JSON by hand or with your
12
+ own code, and see `docs/` for the migration notes from the original
13
+ Knight Lab release.
14
+
15
+ ## Development
16
+
17
+ See docs/DEVELOPMENT.md to get setup for local development of StoryMapJS. This
18
+ repository is the viewer library only (TypeScript + Vite + OpenLayers);
19
+ StoryMap JSON is validated against the schema in `schema/` on load and via
20
+ `npm run validate`.
21
+
22
+ ## Contributing language translations
23
+
24
+ StoryMap ships locale files for dozens of languages under
25
+ `src/language/locale/` (for example
26
+ [`es.json`](src/language/locale/es.json)). To add or improve a translation,
27
+ copy an existing file and edit the quoted strings — please _don't_ change the
28
+ "keys" (the unquoted strings). The file name is the language code, e.g.
29
+ `es.json` (codes like `zh-cn.json` and `zh-tw.json` are also supported — the
30
+ value of the storymap's `language` option must match the file name).
31
+
32
+ ## IIIF images
33
+
34
+ Large images served over the IIIF Image API are rendered so when set to be map_as_image the entire image is shown. When set as cartography the zoom will set so that all the markers fit.
35
+
36
+ Points are set to only display on mouseover in image mode, but you can set map_as_image to false in the config options to always show the points. The points are hidden when the intent is an image so that nothing obstructs the image the viewer is looking at. Looking at a painting is hard with a bunch of points on it.
37
+
38
+ ## Map Options
39
+
40
+ To disable connecting lines on maps set `map_as_image: true` in the storymap
41
+ options (the default `false` renders cartography).
42
+
43
+ The menubar buttons can be disabled individually:
44
+
45
+ show_overview: false, // map overview button
46
+ show_back_to_start: false, // back to the beginning button
47
+ fullscreen: false, // fullscreen toggle
48
+
49
+ (true is the default; setting the option to false hides the button.)
50
+
51
+ More config options available to do what you want with the line:
52
+
53
+ line_follows_path: true, // Map history path follows default line, if false it will connect previous and current only
54
+ line_color: "#c34528",
55
+ line_color_inactive: "#CCC",
56
+ line_join: "miter",
57
+ line_weight: 3,
58
+ line_opacity: 0.80,
59
+ line_dash: "5,5",
60
+ show_lines: true,
61
+ show_history_line: true,
62
+
63
+ To disable zoom calculation/edit zoom level set calculate_zoom to false in the config options.
64
+
65
+ Images can now be used in place of map pins.
66
+ Use `image` inside the location object and include a url to use, together with
67
+ `use_custom_marker: true` in the location object (or set `use_custom_markers:
68
+ true` globally in the storymap options). Same goes for custom icons except you
69
+ need `icon` inside the location object.
70
+
71
+ ### Limit the map to a bounding box
72
+
73
+ Set `map_bbox` to `[west, south, east, north]` (lon/lat) to constrain the map —
74
+ nothing outside of the box can be visible:
75
+
76
+ map_bbox: [-11, 34, 32, 71], // or null (the default) to leave the map unconstrained
77
+
78
+ For image-space (IIIF) maps the coordinates are raw image pixels. When the
79
+ slide content panel is opaque (a solid background that hides the map behind it),
80
+ the initial fit accounts for the covered area so the story stays inside the
81
+ visible region.
82
+
83
+ ## Custom HTML in slide content
84
+
85
+ Slide text is rendered as HTML: the `text` (and `headline`) fields accept
86
+ arbitrary markup. If the text contains no `<p>` tag, it is wrapped in one
87
+ automatically; otherwise it is used as-is. This means you can use links,
88
+ images, lists, emphasis and spans in your slides, e.g.:
89
+
90
+ {
91
+ "headline": "1920: An American in the Making",
92
+ "text": "Immigrants arriving at <a href=\"https://example.org\">Ellis Island</a>.<br><span class='vco-note'>Photograph: Library of Congress.</span>"
93
+ }
94
+
95
+ The `vco-note` span renders as a small grey note, like the built-in credits.
96
+
97
+ **Caution:** the text is rendered raw — it is not sanitized. Only load
98
+ storymaps from sources you trust.
99
+
100
+ ## GDPR consent for external services
101
+
102
+ Set the `consent_required` option to `true` to ask for permission before
103
+ anything is loaded from external services (media embeds such as YouTube,
104
+ Twitter or SoundCloud, map tiles, and external font CSS):
105
+
106
+ {
107
+ "consent_required": true,
108
+ ...
109
+ }
110
+
111
+ Each service asks with an Allow/Deny panel; answering one panel resolves every
112
+ pending panel of the same service. If a decision was already stored in the
113
+ cookie, the panel is skipped entirely. Denied services show a placeholder
114
+ instead of the media, and the map renders without tiles until they are
115
+ allowed. Decisions are stored in a cookie (`storymapjs-consent`) for 90
116
+ days — clearing cookies asks again.
117
+
118
+ ## Troubleshooting
119
+
120
+ If a storymap fails to render, open the browser console: the viewer logs
121
+ fetch and validation errors (e.g. "could not load storymap data from ...").
122
+ The `error` event also fires for programmatic consumers.
123
+
124
+ ## Bundled credentials
125
+
126
+ The viewer ships no credentials. Mapbox/Stadia tiles need a token passed via
127
+ `map_access_token`, and `flickr.com/photos` API URLs need `api_key_flickr`
128
+ (both settable in the storymap options).
@@ -0,0 +1 @@
1
+ import{t as e}from"./main-BDSRsIiB.js";import"./modulepreload-polyfill-P2Xu9kJm.js";function t(e){document.title=`StoryMapJS: `+e.title}window.storymap=new e(`storymap-embed`,`./demo.json`,{},{title:t});
@@ -0,0 +1 @@
1
+ import{t as e}from"./main-BDSRsIiB.js";import"./modulepreload-polyfill-P2Xu9kJm.js";window.__smErrors=[],window.__smReady=!1,window.addEventListener(`error`,e=>{window.__smErrors.push(String(e.message||e))});var t=new URLSearchParams(window.location.search),n=t.get(`manifest`),r=t.get(`url`),i=n===null?t.get(`example`):n,a=n===null?`/examples/`:`/examples-iiif/`,o={};if(t.get(`options`))try{o=JSON.parse(t.get(`options`))}catch(e){window.__smErrors.push(`harness: bad options param: `+e)}var s=r??a+i+`.json`;fetch(s).then(e=>e.json()).then(t=>{window.__sm=new e(`storymap-embed`,t,o,{}),window.__smReady=!0}).catch(e=>{window.__smErrors.push(`harness: `+(e&&e.message?e.message:String(e))),window.__smReady=!0});
@@ -0,0 +1 @@
1
+ import"./modulepreload-polyfill-P2Xu9kJm.js";var e=[{id:`katrina`,title:`Hurricane Katrina`,kind:`Map`},{id:`population`,title:`US Population Shifts`,kind:`Map`},{id:`marktwain`,title:`Mark Twain's Travels`,kind:`Map`},{id:`seurat`,title:`A Sunday on La Grande Jatte`,kind:`Gigapixel`},{id:`iiif-wellcome`,title:`Wellcome Collection (IIIF)`,kind:`IIIF`},{id:`president`,title:`A Month in the Life of President Obama`,kind:`Map`},{url:`https://s3.amazonaws.com/uploads.knightlab.com/storymapjs/a1a349b51799ee49e96bed10cc235e7f/garden-of-earthly-delights/published.json`,thumb:`bosch-garden`,title:`The Garden of Earthly Delights – Hieronymus Bosch`,kind:`Knight Lab example`},{url:`https://uploads.knightlab.com/storymapjs/3df56e350378e51781746bfb2a2ea428/test/published.json`,thumb:`southern-literary-trail`,title:`Southern Literary Trail`,kind:`Georgia Humanities`}];function t(e){let t=e.url??`examples/`+e.id+`.json`,n=e.thumb??e.id??``,r=document.createElement(`a`);r.className=`card`,r.href=`./embed/index.html?url=${encodeURIComponent(t)}`;let i=document.createElement(`span`);i.className=`header-image`;let a=document.createElement(`span`);a.className=`header-image-background bw`,a.style.backgroundImage=`url('./thumbs/${n}.jpg'), linear-gradient(135deg, #b8b8b8, #646464)`,a.setAttribute(`role`,`img`),a.setAttribute(`aria-label`,e.title),i.append(a);let o=document.createElement(`article`);o.className=`card-content`;let s=document.createElement(`h3`);s.textContent=e.title,o.append(s);let c=document.createElement(`footer`);return c.textContent=e.kind,r.append(i,o,c),r}var n=document.getElementById(`examples-cards`);if(n){n.classList.add(`cards-link`);for(let r of e)n.append(t(r))}var r=document.getElementById(`demo-frame`);if(r){let e=()=>{r.style.height=window.innerHeight-20+`px`};e(),window.addEventListener(`resize`,e)}