@projektemacher/storymapjs 0.10.6 → 0.10.8
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.
- package/CHANGELOG +358 -16
- package/README.md +43 -9
- package/dist/assets/demo-DBpeF31K.js +1 -0
- package/dist/assets/harness-Cr0rYpvt.js +1 -0
- package/dist/assets/harness-multi-CYHgI0a9.js +1 -0
- package/dist/assets/harness-support-Do7sIp2j.js +1 -0
- package/dist/assets/index-wHPqGrBS.js +1 -0
- package/dist/assets/main-DXalctuR.js +17 -0
- package/dist/context.json +12 -9
- package/dist/css/fonts/files/amatic-sc-cyrillic-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/amatic-sc-cyrillic-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/amatic-sc-hebrew-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/amatic-sc-hebrew-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/amatic-sc-vietnamese-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/amatic-sc-vietnamese-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-100-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-100-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-200-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-200-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-300-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-300-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-500-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-500-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-600-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-600-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-800-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-800-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-900-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-900-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-100-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-100-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-200-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-200-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-300-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-300-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-500-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-500-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-600-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-600-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-800-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-800-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-900-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-900-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-ext-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-cyrillic-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-100-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-100-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-200-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-200-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-300-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-300-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-500-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-500-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-600-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-600-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-800-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-800-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-900-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-900-normal.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/bitter-vietnamese-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-arabic-200-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-arabic-300-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-arabic-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-arabic-500-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-arabic-600-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-arabic-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-arabic-800-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-arabic-900-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-200-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-300-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-500-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-600-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-800-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-900-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-ext-200-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-ext-300-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-ext-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-ext-500-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-ext-600-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-ext-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-ext-800-normal.woff2 +0 -0
- package/dist/css/fonts/files/cairo-latin-ext-900-normal.woff2 +0 -0
- package/dist/css/fonts/files/dancing-script-vietnamese-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/eb-garamond-cyrillic-ext-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/eb-garamond-cyrillic-ext-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/eb-garamond-cyrillic-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/eb-garamond-cyrillic-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/eb-garamond-greek-ext-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/eb-garamond-greek-ext-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/eb-garamond-greek-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/eb-garamond-greek-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/eb-garamond-vietnamese-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/eb-garamond-vietnamese-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-cyrillic-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-cyrillic-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-cyrillic-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-cyrillic-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-cyrillic-ext-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-cyrillic-ext-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-cyrillic-ext-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-cyrillic-ext-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-greek-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-greek-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-greek-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-greek-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-greek-ext-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-greek-ext-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-greek-ext-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-greek-ext-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-vietnamese-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-vietnamese-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-vietnamese-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/gentium-book-plus-vietnamese-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/old-standard-tt-cyrillic-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/old-standard-tt-cyrillic-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/old-standard-tt-cyrillic-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/old-standard-tt-cyrillic-ext-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/old-standard-tt-cyrillic-ext-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/old-standard-tt-cyrillic-ext-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/old-standard-tt-vietnamese-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/old-standard-tt-vietnamese-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/old-standard-tt-vietnamese-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/open-sans-cyrillic-ext-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/open-sans-cyrillic-ext-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/open-sans-cyrillic-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/open-sans-cyrillic-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/open-sans-greek-ext-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/open-sans-greek-ext-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/open-sans-greek-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/open-sans-greek-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/open-sans-hebrew-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/open-sans-hebrew-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/open-sans-vietnamese-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/open-sans-vietnamese-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-cyrillic-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-cyrillic-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-sc-cyrillic-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-sc-cyrillic-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-sc-cyrillic-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-sc-cyrillic-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-sc-cyrillic-900-italic.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-sc-cyrillic-900-normal.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-sc-vietnamese-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-sc-vietnamese-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-sc-vietnamese-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-sc-vietnamese-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-sc-vietnamese-900-italic.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-sc-vietnamese-900-normal.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-vietnamese-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/playfair-display-vietnamese-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/pt-sans-cyrillic-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/pt-sans-cyrillic-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/pt-sans-cyrillic-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/pt-sans-cyrillic-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/pt-sans-cyrillic-ext-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/pt-sans-cyrillic-ext-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/pt-sans-cyrillic-ext-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/pt-sans-cyrillic-ext-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/pt-sans-narrow-cyrillic-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/pt-sans-narrow-cyrillic-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/pt-sans-narrow-cyrillic-ext-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/pt-sans-narrow-cyrillic-ext-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/pt-serif-cyrillic-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/pt-serif-cyrillic-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/pt-serif-cyrillic-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/pt-serif-cyrillic-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/pt-serif-cyrillic-ext-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/pt-serif-cyrillic-ext-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/pt-serif-cyrillic-ext-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/pt-serif-cyrillic-ext-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/raleway-cyrillic-ext-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/raleway-cyrillic-ext-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/raleway-cyrillic-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/raleway-cyrillic-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/raleway-vietnamese-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/raleway-vietnamese-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/roboto-slab-cyrillic-ext-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/roboto-slab-cyrillic-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/roboto-slab-greek-ext-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/roboto-slab-greek-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/roboto-slab-vietnamese-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-300-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-300-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-500-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-500-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-ext-300-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-ext-300-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-ext-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-ext-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-ext-500-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-ext-500-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-ext-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-cyrillic-ext-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-300-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-300-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-500-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-500-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-ext-300-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-ext-300-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-ext-400-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-ext-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-ext-500-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-ext-500-normal.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-ext-700-italic.woff2 +0 -0
- package/dist/css/fonts/files/ubuntu-greek-ext-700-normal.woff2 +0 -0
- package/dist/css/fonts/files/unica-one-vietnamese-400-normal.woff2 +0 -0
- package/dist/css/fonts/files/vollkorn-cyrillic-ext-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/vollkorn-cyrillic-ext-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/vollkorn-cyrillic-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/vollkorn-cyrillic-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/vollkorn-greek-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/vollkorn-greek-wght-normal.woff2 +0 -0
- package/dist/css/fonts/files/vollkorn-vietnamese-wght-italic.woff2 +0 -0
- package/dist/css/fonts/files/vollkorn-vietnamese-wght-normal.woff2 +0 -0
- package/dist/css/fonts/font.abril-droidsans.css +3 -0
- package/dist/css/fonts/font.amatic-andika.css +57 -0
- package/dist/css/fonts/font.bitter-raleway.css +111 -0
- package/dist/css/fonts/font.cairo.css +312 -0
- package/dist/css/fonts/font.clicker-garamond.css +93 -0
- package/dist/css/fonts/font.dancing-ledger.css +12 -0
- package/dist/css/fonts/font.default.css +183 -0
- package/dist/css/fonts/font.fjalla-average.css +3 -0
- package/dist/css/fonts/font.georgia-helvetica.css +3 -0
- package/dist/css/fonts/font.knightlab.css +642 -0
- package/dist/css/fonts/font.lustria-lato.css +3 -0
- package/dist/css/fonts/font.medula-lato.css +3 -0
- package/dist/css/fonts/font.oldstandard.css +101 -21
- package/dist/css/fonts/font.opensans-gentiumbook.css +183 -0
- package/dist/css/fonts/font.playfair-faunaone.css +39 -0
- package/dist/css/fonts/font.playfair.css +147 -0
- package/dist/css/fonts/font.pt.css +183 -0
- package/dist/css/fonts/font.roboto-megrim.css +3 -0
- package/dist/css/fonts/font.rufina-sintony.css +3 -0
- package/dist/css/fonts/font.ubuntu.css +291 -0
- package/dist/css/fonts/font.unicaone-vollkorn.css +84 -0
- package/dist/css/storymap.css +1 -1
- package/dist/demo.html +2 -2
- package/dist/docs/api/.nojekyll +1 -0
- package/dist/docs/api/assets/custom.css +47 -0
- package/dist/docs/api/assets/hierarchy.js +1 -0
- package/dist/docs/api/assets/highlight.css +57 -0
- package/dist/docs/api/assets/icons.js +18 -0
- package/dist/docs/api/assets/icons.svg +1 -0
- package/dist/docs/api/assets/main.js +60 -0
- package/dist/docs/api/assets/navigation.js +1 -0
- package/dist/docs/api/assets/search.js +1 -0
- package/dist/docs/api/assets/style.css +1648 -0
- package/dist/docs/api/classes/StoryMap.html +1604 -0
- package/dist/docs/api/functions/MediaType.html +51 -0
- package/dist/docs/api/functions/isPresentation3Collection.html +47 -0
- package/dist/docs/api/functions/isPresentation3Manifest.html +53 -0
- package/dist/docs/api/functions/loadCSS.html +63 -0
- package/dist/docs/api/functions/manifestToStorymapData.html +49 -0
- package/dist/docs/api/functions/setLanguage.html +54 -0
- package/dist/docs/api/functions/storymapToManifest.html +57 -0
- package/dist/docs/api/functions/validateStorymap.html +53 -0
- package/dist/docs/api/functions/validateStorymapAndReport.html +54 -0
- package/dist/docs/api/hierarchy.html +28 -0
- package/dist/docs/api/index.html +197 -0
- package/dist/docs/api/interfaces/AnimationHandle.html +60 -0
- package/dist/docs/api/interfaces/ImagereadyPayload.html +71 -0
- package/dist/docs/api/interfaces/LanguageEntry.html +102 -0
- package/dist/docs/api/interfaces/LatLngLiteral.html +73 -0
- package/dist/docs/api/interfaces/LoadOptions.html +59 -0
- package/dist/docs/api/interfaces/OlLayer.html +1400 -0
- package/dist/docs/api/interfaces/OlMap.html +1656 -0
- package/dist/docs/api/interfaces/OlProjection.html +332 -0
- package/dist/docs/api/interfaces/OlSource.html +784 -0
- package/dist/docs/api/interfaces/OlTileLayer.html +1497 -0
- package/dist/docs/api/interfaces/OlVectorLayer.html +1559 -0
- package/dist/docs/api/interfaces/OlView.html +1958 -0
- package/dist/docs/api/interfaces/StorymapData.html +71 -0
- package/dist/docs/api/interfaces/StorymapDataWrapper.html +60 -0
- package/dist/docs/api/interfaces/StorymapDocument.html +68 -0
- package/dist/docs/api/interfaces/StorymapError.html +63 -0
- package/dist/docs/api/interfaces/StorymapGeoreference.html +93 -0
- package/dist/docs/api/interfaces/StorymapGeoreferenceBody.html +74 -0
- package/dist/docs/api/interfaces/StorymapGroundControlPoint.html +69 -0
- package/dist/docs/api/interfaces/StorymapLanguageMap.html +57 -0
- package/dist/docs/api/interfaces/StorymapManifest.html +118 -0
- package/dist/docs/api/interfaces/StorymapManifestAnnotation.html +105 -0
- package/dist/docs/api/interfaces/StorymapManifestBackground.html +81 -0
- package/dist/docs/api/interfaces/StorymapManifestCanvas.html +140 -0
- package/dist/docs/api/interfaces/StorymapManifestContentResource.html +97 -0
- package/dist/docs/api/interfaces/StorymapManifestFeatureCollection.html +82 -0
- package/dist/docs/api/interfaces/StorymapManifestGeoreferencing.html +87 -0
- package/dist/docs/api/interfaces/StorymapManifestImageService.html +69 -0
- package/dist/docs/api/interfaces/StorymapManifestRange.html +75 -0
- package/dist/docs/api/interfaces/StorymapManifestService.html +77 -0
- package/dist/docs/api/interfaces/StorymapManifestSpecificResource.html +69 -0
- package/dist/docs/api/interfaces/StorymapManifestStatement.html +63 -0
- package/dist/docs/api/interfaces/StorymapMapOptions.html +92 -0
- package/dist/docs/api/interfaces/StorymapOptions.html +532 -0
- package/dist/docs/api/interfaces/StorymapOverlayLayer.html +126 -0
- package/dist/docs/api/interfaces/StorymapSlide.html +132 -0
- package/dist/docs/api/interfaces/StorymapSlideBackground.html +72 -0
- package/dist/docs/api/interfaces/StorymapSlideLocation.html +117 -0
- package/dist/docs/api/interfaces/StorymapSlideMarker.html +104 -0
- package/dist/docs/api/interfaces/StorymapSlideMedia.html +110 -0
- package/dist/docs/api/interfaces/StorymapSlideNarration.html +65 -0
- package/dist/docs/api/interfaces/StorymapSlideText.html +72 -0
- package/dist/docs/api/interfaces/StorymapTilejson.html +105 -0
- package/dist/docs/api/media/es.json +31 -0
- package/dist/docs/api/media/migration-from-knightlab.md +359 -0
- package/dist/docs/api/modules.html +50 -0
- package/dist/docs/api/types/ContentState.html +70 -0
- package/dist/docs/api/types/ImagereadyKind.html +34 -0
- package/dist/docs/api/types/MediaTypeMatch.html +78 -0
- package/dist/docs/api/types/TileSourceFactory.html +53 -0
- package/dist/docs/authoring.html +293 -0
- package/dist/docs/iiif.html +617 -62
- package/dist/docs/migration.html +314 -12
- package/dist/docs/readme.html +40 -9
- package/dist/embed/index.html +130 -5
- package/dist/examples/issue-242-nonlatin.json +55 -0
- package/dist/examples/issue-305-start-at-slide-data.json +96 -0
- package/dist/examples/issue-358-iframe.json +57 -0
- package/dist/examples/issue-iiif-geo.json +32 -0
- package/dist/examples/issue-image-alt.json +23 -0
- package/dist/examples/issue-image-region.json +42 -0
- package/dist/examples/issue-image-srcset.json +24 -0
- package/dist/examples/map-area-overlays.json +68 -0
- package/dist/examples/no-map.json +44 -0
- package/dist/examples-iiif/annotated-image.json +188 -0
- package/dist/examples-iiif/bob-boilen.json +11 -5
- package/dist/examples-iiif/courbet.json +9 -6
- package/dist/examples-iiif/empty.json +8 -4
- package/dist/examples-iiif/flickr-drewvigal.json +248 -24
- package/dist/examples-iiif/flickr-zach.wise.json +8 -4
- package/dist/examples-iiif/georeferenced-layer-unsupported.json +153 -0
- package/dist/examples-iiif/georeferenced-layer.json +318 -0
- package/dist/examples-iiif/iiif-wellcome.json +9 -6
- package/dist/examples-iiif/instagram-chenpamela.json +381 -36
- package/dist/examples-iiif/instagram_brentfoster.json +429 -40
- package/dist/examples-iiif/instagram_couch.json +261 -26
- package/dist/examples-iiif/instagram_joegermuska.json +441 -41
- package/dist/examples-iiif/instagram_matteich.json +261 -26
- package/dist/examples-iiif/instagram_mirandamulligan.json +261 -26
- package/dist/examples-iiif/instagram_raymondmccrea.json +261 -26
- package/dist/examples-iiif/instagram_test.json +261 -26
- package/dist/examples-iiif/issue-134-no-lines.json +9 -5
- package/dist/examples-iiif/issue-177-color-vars.json +9 -5
- package/dist/examples-iiif/issue-211-rtl.json +9 -5
- package/dist/examples-iiif/issue-242-nonlatin.json +239 -0
- package/dist/examples-iiif/issue-272-facebook.json +9 -5
- package/dist/examples-iiif/issue-305-start-at-slide-data.json +305 -0
- package/dist/examples-iiif/issue-305-start-at-slide.json +9 -5
- package/dist/examples-iiif/issue-341-distance.json +9 -5
- package/dist/examples-iiif/issue-358-iframe.json +190 -0
- package/dist/examples-iiif/issue-360-juxtapose.json +22 -7
- package/dist/examples-iiif/issue-368-null-fields.json +9 -5
- package/dist/examples-iiif/issue-375-code-lists.json +9 -5
- package/dist/examples-iiif/issue-381-dateline.json +9 -5
- package/dist/examples-iiif/issue-405-custom-icon.json +203 -0
- package/dist/examples-iiif/issue-425-many-slides.json +9 -5
- package/dist/examples-iiif/issue-428-background.json +20 -8
- package/dist/examples-iiif/issue-435-googlemaps.json +9 -5
- package/dist/examples-iiif/issue-437-documentcloud.json +22 -7
- package/dist/examples-iiif/issue-451-webp.json +9 -5
- package/dist/examples-iiif/issue-455-audio.json +9 -5
- package/dist/examples-iiif/issue-480-shorts.json +9 -5
- package/dist/examples-iiif/issue-506-marker-sync.json +9 -5
- package/dist/examples-iiif/issue-iiif-geo.json +200 -0
- package/dist/examples-iiif/issue-image-alt.json +90 -0
- package/dist/examples-iiif/issue-image-region.json +203 -0
- package/dist/examples-iiif/issue-image-srcset.json +87 -0
- package/dist/examples-iiif/jansteen.json +9 -6
- package/dist/examples-iiif/katrina.json +197 -41
- package/dist/examples-iiif/map-area-overlays.json +289 -0
- package/dist/examples-iiif/marktwain.json +255 -58
- package/dist/examples-iiif/no-map.json +148 -0
- package/dist/examples-iiif/population.json +440 -76
- package/dist/examples-iiif/president.json +456 -83
- package/dist/examples-iiif/scroll-hint.json +190 -0
- package/dist/examples-iiif/seurat.json +113 -22
- package/dist/examples-iiif/zoomify-clamp.json +153 -0
- package/dist/harness-multi.html +17 -0
- package/dist/harness.html +3 -2
- package/dist/index.html +33 -10
- package/dist/js/storymap.d.ts +1558 -114
- package/dist/js/storymap.js +10113 -6490
- package/dist/js/storymap.js.map +1 -1
- package/dist/navplace-properties.json +40 -0
- package/docs/migration-from-knightlab.md +359 -0
- package/docs/storymap-as-iiif-manifest.md +934 -0
- package/package.json +16 -10
- package/schema/storymap.schema.json +431 -78
- package/src/animation/easings.ts +25 -0
- package/src/animation/tween.ts +186 -0
- package/src/core/Browser.ts +20 -0
- package/src/core/Load.ts +232 -0
- package/src/core/Util.ts +416 -0
- package/src/core/mixins.ts +188 -0
- package/src/core/viewers.ts +94 -0
- package/src/dom/Dom.ts +31 -0
- package/src/dom/DomEvent.ts +80 -0
- package/src/globals.d.ts +24 -0
- package/src/language/Language.ts +281 -0
- package/src/language/locale/.expected-gaps.json +86 -0
- package/src/language/locale/be.json +31 -0
- package/src/language/locale/bg.json +31 -0
- package/src/language/locale/cs.json +31 -0
- package/src/language/locale/de.json +31 -0
- package/src/language/locale/el.json +31 -0
- package/src/language/locale/en.json +32 -0
- package/src/language/locale/es.json +31 -0
- package/src/language/locale/et.json +22 -0
- package/src/language/locale/fr.json +31 -0
- package/src/language/locale/he.json +31 -0
- package/src/language/locale/hu.json +31 -0
- package/src/language/locale/is.json +22 -0
- package/src/language/locale/it.json +31 -0
- package/src/language/locale/jp.json +31 -0
- package/src/language/locale/ko.json +31 -0
- package/src/language/locale/nl.json +31 -0
- package/src/language/locale/nn.json +22 -0
- package/src/language/locale/no.json +31 -0
- package/src/language/locale/pl.json +31 -0
- package/src/language/locale/pt.json +31 -0
- package/src/language/locale/ru.json +31 -0
- package/src/language/locale/sk.json +31 -0
- package/src/language/locale/sr.json +21 -0
- package/src/language/locale/sv.json +31 -0
- package/src/language/locale/tr.json +31 -0
- package/src/language/locale/uk.json +31 -0
- package/src/language/locale/ur.json +22 -0
- package/src/language/locale/zh-cn.json +31 -0
- package/src/language/locale/zh-tw.json +31 -0
- package/src/main.ts +143 -0
- package/src/map/Map.ts +794 -0
- package/src/map/MapMarker.ts +172 -0
- package/src/map/georeference.ts +325 -0
- package/src/map/openlayers/Map.OpenLayers.ts +2492 -0
- package/src/map/openlayers/MapMarker.OpenLayers.ts +400 -0
- package/src/map/openlayers/zoomifyTiles.ts +25 -0
- package/src/map/types.ts +17 -0
- package/src/media/EmbedUtil.ts +452 -0
- package/src/media/Media.ts +597 -0
- package/src/media/MediaType.ts +163 -0
- package/src/media/embedId.ts +104 -0
- package/src/media/types/Audio.ts +14 -0
- package/src/media/types/Blockquote.ts +39 -0
- package/src/media/types/DailyMotion.ts +53 -0
- package/src/media/types/DocumentCloud.ts +12 -0
- package/src/media/types/Facebook.ts +40 -0
- package/src/media/types/Flickr.ts +115 -0
- package/src/media/types/GoogleDoc.ts +58 -0
- package/src/media/types/HtmlMedia.ts +167 -0
- package/src/media/types/IFrame.ts +50 -0
- package/src/media/types/Image.ts +115 -0
- package/src/media/types/Juxtapose.ts +41 -0
- package/src/media/types/SoundCloud.ts +99 -0
- package/src/media/types/Text.ts +178 -0
- package/src/media/types/Twitter.ts +109 -0
- package/src/media/types/Video.ts +14 -0
- package/src/media/types/Vimeo.ts +65 -0
- package/src/media/types/Website.ts +46 -0
- package/src/media/types/Wikipedia.ts +134 -0
- package/src/media/types/YouTube.ts +224 -0
- package/src/scss/Typography.scss +235 -0
- package/src/scss/VCO.StoryMap.Dark.scss +150 -0
- package/src/scss/VCO.StoryMap.scss +195 -0
- package/src/scss/Variables.Dark.scss +57 -0
- package/src/scss/Variables.scss +48 -0
- package/src/scss/core/Mixins.scss +54 -0
- package/src/scss/core/Reset.scss +206 -0
- package/src/scss/fonts/_font.base.scss +113 -0
- package/src/scss/fonts/font.abril-droidsans.scss +75 -0
- package/src/scss/fonts/font.amatic-andika.scss +76 -0
- package/src/scss/fonts/font.bitter-raleway.scss +92 -0
- package/src/scss/fonts/font.cairo.scss +79 -0
- package/src/scss/fonts/font.clicker-garamond.scss +97 -0
- package/src/scss/fonts/font.dancing-ledger.scss +75 -0
- package/src/scss/fonts/font.default.scss +9 -0
- package/src/scss/fonts/font.fjalla-average.scss +80 -0
- package/src/scss/fonts/font.georgia-helvetica.scss +58 -0
- package/src/scss/fonts/font.knightlab.scss +111 -0
- package/src/scss/fonts/font.lustria-lato.scss +80 -0
- package/src/scss/fonts/font.medula-lato.scss +73 -0
- package/src/scss/fonts/font.oldstandard.scss +94 -0
- package/src/scss/fonts/font.opensans-gentiumbook.scss +85 -0
- package/src/scss/fonts/font.playfair-faunaone.scss +88 -0
- package/src/scss/fonts/font.playfair.scss +89 -0
- package/src/scss/fonts/font.pt.scss +96 -0
- package/src/scss/fonts/font.roboto-megrim.scss +73 -0
- package/src/scss/fonts/font.rufina-sintony.scss +73 -0
- package/src/scss/fonts/font.ubuntu.scss +82 -0
- package/src/scss/fonts/font.unicaone-vollkorn.scss +90 -0
- package/src/scss/icons/Icons.scss +239 -0
- package/src/scss/map/VCO.ImageMarker.scss +23 -0
- package/src/scss/map/VCO.Map.scss +21 -0
- package/src/scss/map/VCO.MapMarker.scss +242 -0
- package/src/scss/map/openlayers/VCO.Map.OpenLayers.scss +126 -0
- package/src/scss/media/VCO.Media.scss +219 -0
- package/src/scss/media/types/VCO.Media.Blockquote.scss +76 -0
- package/src/scss/media/types/VCO.Media.IFrame.scss +11 -0
- package/src/scss/media/types/VCO.Media.Image.scss +13 -0
- package/src/scss/media/types/VCO.Media.Text.scss +98 -0
- package/src/scss/media/types/VCO.Media.Twitter.scss +87 -0
- package/src/scss/media/types/VCO.Media.Wikipedia.scss +65 -0
- package/src/scss/site/site.scss +748 -0
- package/src/scss/slider/VCO.Slide.scss +457 -0
- package/src/scss/slider/VCO.SlideNav.scss +332 -0
- package/src/scss/slider/VCO.StorySlider.scss +66 -0
- package/src/scss/snapmap/VCO.SnapMap.scss +103 -0
- package/src/scss/ui/VCO.Consent.scss +121 -0
- package/src/scss/ui/VCO.MenuBar.Button.scss +107 -0
- package/src/scss/ui/VCO.MenuBar.scss +20 -0
- package/src/scss/ui/VCO.Message.scss +101 -0
- package/src/site/site.ts +88 -0
- package/src/slider/Slide.ts +554 -0
- package/src/slider/SlideNav.ts +246 -0
- package/src/slider/StorySlider.ts +833 -0
- package/src/storymap/Consent.ts +471 -0
- package/src/storymap/StoryMap.ts +2118 -0
- package/src/storymap/content-state.ts +185 -0
- package/src/storymap/iiif.ts +1844 -0
- package/src/storymap/to-iiif.ts +921 -0
- package/src/storymap/validate.ts +257 -0
- package/src/types.ts +494 -0
- package/src/ui/MenuBar.ts +376 -0
- package/src/ui/Message.ts +127 -0
- package/src/ui/Swipable.ts +455 -0
- package/dist/assets/demo-CVQ7kFek.js +0 -1
- package/dist/assets/harness-C-VZV-ou.js +0 -1
- package/dist/assets/index-DDsPBPZA.js +0 -1
- package/dist/assets/main-DwbXrrYn.js +0 -17
package/src/dom/Dom.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/* Dom
|
|
2
|
+
Utilities for working with the DOM
|
|
3
|
+
================================================= */
|
|
4
|
+
|
|
5
|
+
export default class Dom {
|
|
6
|
+
static get(id: string | HTMLElement): HTMLElement | null {
|
|
7
|
+
return typeof id === "string" ? document.getElementById(id) : id;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
static create(tagName: string, className: string, container?: HTMLElement): HTMLElement {
|
|
11
|
+
const el = document.createElement(tagName);
|
|
12
|
+
el.className = className;
|
|
13
|
+
if (container) {
|
|
14
|
+
container.appendChild(el);
|
|
15
|
+
}
|
|
16
|
+
return el;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
static getPosition(el: HTMLElement | null): { x: number; y: number } {
|
|
20
|
+
const pos = {
|
|
21
|
+
x: 0,
|
|
22
|
+
y: 0,
|
|
23
|
+
};
|
|
24
|
+
while (el && !isNaN(el.offsetLeft) && !isNaN(el.offsetTop)) {
|
|
25
|
+
pos.x += el.offsetLeft;
|
|
26
|
+
pos.y += el.offsetTop;
|
|
27
|
+
el = el.offsetParent as HTMLElement | null;
|
|
28
|
+
}
|
|
29
|
+
return pos;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { stamp } from "../core/Util";
|
|
2
|
+
|
|
3
|
+
/* DomEvent
|
|
4
|
+
Inspired by Leaflet
|
|
5
|
+
DomEvent contains functions for working with DOM events.
|
|
6
|
+
================================================== */
|
|
7
|
+
|
|
8
|
+
/** Elements/objects DomEvent listeners can be attached to. */
|
|
9
|
+
type DomEventTarget = HTMLElement | Window | Document;
|
|
10
|
+
|
|
11
|
+
/** Legacy drag handlers historically mixed mouse and touch event surfaces. */
|
|
12
|
+
export type LegacyEvent = Event & {
|
|
13
|
+
originalEvent?: TouchEvent;
|
|
14
|
+
targetTouches?: TouchList;
|
|
15
|
+
pageX?: number;
|
|
16
|
+
pageY?: number;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The wrapper is remembered on the target so `removeListener` can find it
|
|
21
|
+
* again. Keyed by a per-registration counter rather than only by the stamped
|
|
22
|
+
* function: registering the same function twice for the same event used to
|
|
23
|
+
* overwrite the key, leaving the first listener permanently unremovable.
|
|
24
|
+
*/
|
|
25
|
+
const registrationCounts = new WeakMap<object, number>();
|
|
26
|
+
|
|
27
|
+
function handlerKey(obj: DomEventTarget, type: string, fn: (e: Event) => void): string {
|
|
28
|
+
const target = obj as object;
|
|
29
|
+
const next = (registrationCounts.get(target) ?? 0) + 1;
|
|
30
|
+
registrationCounts.set(target, next);
|
|
31
|
+
return "_vco_" + type + stamp(fn) + "_" + next;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const DomEvent = {
|
|
35
|
+
addListener: function (
|
|
36
|
+
obj: DomEventTarget,
|
|
37
|
+
type: string,
|
|
38
|
+
fn: (e: Event) => void,
|
|
39
|
+
context?: unknown,
|
|
40
|
+
): void {
|
|
41
|
+
const handler = function (e: Event) {
|
|
42
|
+
return (fn as (this: unknown, e: Event) => void).call(context || obj, e);
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
obj.addEventListener(type, handler, false);
|
|
46
|
+
(obj as unknown as Record<string, unknown>)[handlerKey(obj, type, fn)] = handler;
|
|
47
|
+
},
|
|
48
|
+
|
|
49
|
+
removeListener: function (
|
|
50
|
+
obj: DomEventTarget,
|
|
51
|
+
type: string,
|
|
52
|
+
fn: (e: Event) => void,
|
|
53
|
+
context?: unknown,
|
|
54
|
+
): void {
|
|
55
|
+
// The most recent registration for this (type, fn) pair is the one the
|
|
56
|
+
// caller means; walk the counter back to find it.
|
|
57
|
+
const target = obj as unknown as Record<string, unknown>;
|
|
58
|
+
for (let n = registrationCounts.get(obj as object) ?? 0; n > 0; n--) {
|
|
59
|
+
const key = "_vco_" + type + stamp(fn) + "_" + n;
|
|
60
|
+
const handler = target[key];
|
|
61
|
+
if (!handler) {
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
obj.removeEventListener(type, handler as EventListener, false);
|
|
65
|
+
target[key] = null;
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
preventDefault: function (e: Event): void {
|
|
71
|
+
if (e.preventDefault) {
|
|
72
|
+
e.preventDefault();
|
|
73
|
+
} else {
|
|
74
|
+
e.returnValue = false;
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
export { DomEvent };
|
|
80
|
+
export type { DomEventTarget };
|
package/src/globals.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Externally loaded script globals (YouTube/SoundCloud player APIs).
|
|
2
|
+
// Everything the library or the test harness touches on window is typed
|
|
3
|
+
// at its usage site instead.
|
|
4
|
+
|
|
5
|
+
declare global {
|
|
6
|
+
// Externally loaded script globals
|
|
7
|
+
const YT: {
|
|
8
|
+
Player: new (el: HTMLElement | string, opts: unknown) => unknown;
|
|
9
|
+
PlayerState: Record<string, number>;
|
|
10
|
+
};
|
|
11
|
+
const SC: {
|
|
12
|
+
Widget: (el: HTMLElement) => { pause(): void };
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The library version, substituted from package.json by the Vite lib build
|
|
17
|
+
* (see the `define` in vite.config.ts). Hard-coded here only so the
|
|
18
|
+
* source type-checks; a dev-server run without the define falls back to
|
|
19
|
+
* "unknown" at runtime via the typeof guard in StoryMap.
|
|
20
|
+
*/
|
|
21
|
+
const __STORYMAP_VERSION__: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI strings for the active locale.
|
|
3
|
+
*
|
|
4
|
+
* English is the fallback for every missing key (see `getLanguage`), so
|
|
5
|
+
* `messages` and `buttons` are guaranteed to be fully populated once a
|
|
6
|
+
* language has been set — they are typed as required here rather than as
|
|
7
|
+
* `Record<string, string> | undefined` so call sites do not need a null
|
|
8
|
+
* check on every one of the ~30 `Language.messages.*` reads.
|
|
9
|
+
*
|
|
10
|
+
* The locale JSON files themselves are *not* complete: only `en.json` defines
|
|
11
|
+
* every key, and 28 of the 29 bundled locales are missing 8-10 of them
|
|
12
|
+
* (the per-service consent strings and the fullscreen button labels). The
|
|
13
|
+
* runtime falls back to English per key, so this is a translation gap rather
|
|
14
|
+
* than a defect — `npm run check:locales` reports it.
|
|
15
|
+
*/
|
|
16
|
+
export interface LanguageEntry {
|
|
17
|
+
/** Display name of the language, e.g. "Deutsch". */
|
|
18
|
+
name?: string;
|
|
19
|
+
/** BCP 47 code, e.g. "de". */
|
|
20
|
+
lang?: string;
|
|
21
|
+
/** Writing direction; drives the `vco-rtl` layout. */
|
|
22
|
+
direction?: "ltr" | "rtl";
|
|
23
|
+
messages: Record<string, string>;
|
|
24
|
+
buttons: Record<string, string>;
|
|
25
|
+
[key: string]: unknown;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// The locales are imported statically rather than through `import.meta.glob`
|
|
29
|
+
// on purpose. The viewer reads `Language.messages.*` while it is being
|
|
30
|
+
// constructed — the consent dialog, the RTL class, the swipe hint icon and
|
|
31
|
+
// every button label are all decided synchronously inside `new StoryMap()` —
|
|
32
|
+
// so a locale that has not finished fetching yet would silently render in
|
|
33
|
+
// English. The saving from splitting them is ~6 kB gzip, which is not worth
|
|
34
|
+
// making the language load order-dependent.
|
|
35
|
+
//
|
|
36
|
+
// English remains the fallback for every key a translation is missing (see
|
|
37
|
+
// `getLanguage`), and `npm run check:locales` reports those gaps.
|
|
38
|
+
import be from "./locale/be.json";
|
|
39
|
+
import bg from "./locale/bg.json";
|
|
40
|
+
import cs from "./locale/cs.json";
|
|
41
|
+
import de from "./locale/de.json";
|
|
42
|
+
import el from "./locale/el.json";
|
|
43
|
+
import en from "./locale/en.json";
|
|
44
|
+
import es from "./locale/es.json";
|
|
45
|
+
import et from "./locale/et.json";
|
|
46
|
+
import fr from "./locale/fr.json";
|
|
47
|
+
import he from "./locale/he.json";
|
|
48
|
+
import hu from "./locale/hu.json";
|
|
49
|
+
import isLocale from "./locale/is.json";
|
|
50
|
+
import it from "./locale/it.json";
|
|
51
|
+
import jp from "./locale/jp.json";
|
|
52
|
+
import ko from "./locale/ko.json";
|
|
53
|
+
import nl from "./locale/nl.json";
|
|
54
|
+
import nn from "./locale/nn.json";
|
|
55
|
+
import no from "./locale/no.json";
|
|
56
|
+
import pl from "./locale/pl.json";
|
|
57
|
+
import pt from "./locale/pt.json";
|
|
58
|
+
import ru from "./locale/ru.json";
|
|
59
|
+
import sk from "./locale/sk.json";
|
|
60
|
+
import sr from "./locale/sr.json";
|
|
61
|
+
import sv from "./locale/sv.json";
|
|
62
|
+
import tr from "./locale/tr.json";
|
|
63
|
+
import uk from "./locale/uk.json";
|
|
64
|
+
import ur from "./locale/ur.json";
|
|
65
|
+
import zhCn from "./locale/zh-cn.json";
|
|
66
|
+
import zhTw from "./locale/zh-tw.json";
|
|
67
|
+
|
|
68
|
+
const localeModules: Record<string, { default?: unknown }> = {
|
|
69
|
+
"./locale/be.json": { default: be },
|
|
70
|
+
"./locale/bg.json": { default: bg },
|
|
71
|
+
"./locale/cs.json": { default: cs },
|
|
72
|
+
"./locale/de.json": { default: de },
|
|
73
|
+
"./locale/el.json": { default: el },
|
|
74
|
+
"./locale/en.json": { default: en },
|
|
75
|
+
"./locale/es.json": { default: es },
|
|
76
|
+
"./locale/et.json": { default: et },
|
|
77
|
+
"./locale/fr.json": { default: fr },
|
|
78
|
+
"./locale/he.json": { default: he },
|
|
79
|
+
"./locale/hu.json": { default: hu },
|
|
80
|
+
"./locale/is.json": { default: isLocale },
|
|
81
|
+
"./locale/it.json": { default: it },
|
|
82
|
+
"./locale/jp.json": { default: jp },
|
|
83
|
+
"./locale/ko.json": { default: ko },
|
|
84
|
+
"./locale/nl.json": { default: nl },
|
|
85
|
+
"./locale/nn.json": { default: nn },
|
|
86
|
+
"./locale/no.json": { default: no },
|
|
87
|
+
"./locale/pl.json": { default: pl },
|
|
88
|
+
"./locale/pt.json": { default: pt },
|
|
89
|
+
"./locale/ru.json": { default: ru },
|
|
90
|
+
"./locale/sk.json": { default: sk },
|
|
91
|
+
"./locale/sr.json": { default: sr },
|
|
92
|
+
"./locale/sv.json": { default: sv },
|
|
93
|
+
"./locale/tr.json": { default: tr },
|
|
94
|
+
"./locale/uk.json": { default: uk },
|
|
95
|
+
"./locale/ur.json": { default: ur },
|
|
96
|
+
"./locale/zh-cn.json": { default: zhCn },
|
|
97
|
+
"./locale/zh-tw.json": { default: zhTw },
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
/** The locale every other language falls back to, per key. */
|
|
101
|
+
const EN: Record<string, unknown> =
|
|
102
|
+
(localeModules["./locale/en.json"]?.default as Record<string, unknown> | undefined) || {};
|
|
103
|
+
|
|
104
|
+
/** The strings the viewer reads before (or without) a `setLanguage` call. */
|
|
105
|
+
const FALLBACK: LanguageEntry = {
|
|
106
|
+
name: "English",
|
|
107
|
+
lang: "en",
|
|
108
|
+
direction: "ltr",
|
|
109
|
+
messages: (EN.messages as Record<string, string>) ?? {},
|
|
110
|
+
buttons: (EN.buttons as Record<string, string>) ?? {},
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
let Language: LanguageEntry = FALLBACK;
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* The locale code last passed to `setLanguage`, defaulting to the fallback.
|
|
117
|
+
*
|
|
118
|
+
* Deliberately not derived from `Language.lang`: every bundled locale's `lang`
|
|
119
|
+
* happens to equal its file name today, but a locale like `pt-BR` would make
|
|
120
|
+
* the claim comparison below judge two different identifiers for one locale.
|
|
121
|
+
* Tracking what the caller passed keeps every comparison on one vocabulary.
|
|
122
|
+
*/
|
|
123
|
+
let activeLanguageCode = "en";
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Which live viewer owns the page-wide locale.
|
|
127
|
+
*
|
|
128
|
+
* `Language` above is a single module-level binding, and every label read in
|
|
129
|
+
* the viewer goes through it (MenuBar, Message, StorySlider, Consent, Media,
|
|
130
|
+
* ...). That is deliberate — the strings are read synchronously while a viewer
|
|
131
|
+
* is constructed — but it means two viewers on one page cannot show different
|
|
132
|
+
* languages: whichever called `setLanguage` last would win, and the other
|
|
133
|
+
* would silently keep repainting its chrome in the wrong language.
|
|
134
|
+
*
|
|
135
|
+
* Rather than thread a resolved entry down the options chain, the viewer
|
|
136
|
+
* claims the locale it needs and we fail loudly on a conflict. The claim is
|
|
137
|
+
* refcounted, so tearing down one of two viewers set in the same language
|
|
138
|
+
* does not release the page.
|
|
139
|
+
*/
|
|
140
|
+
const languageHolders = new Map<symbol, string>();
|
|
141
|
+
|
|
142
|
+
/** Why a claim was rejected, for the thrown error. */
|
|
143
|
+
function languageConflict(claimed: string, requested: string): Error {
|
|
144
|
+
const err = new Error(
|
|
145
|
+
`StoryMapJS: two viewers on this page asked for different languages ` +
|
|
146
|
+
`("${claimed}" and "${requested}"), but the UI strings are a single ` +
|
|
147
|
+
`page-wide setting — the last one set would win and the other viewer ` +
|
|
148
|
+
`would keep rendering its chrome in the wrong language. Pass the same ` +
|
|
149
|
+
`language to every viewer on the page, or call refreshLanguage() on ` +
|
|
150
|
+
`the surviving viewer. See docs/DEVELOPMENT.md, ` +
|
|
151
|
+
`"Multiple instances on one page".`,
|
|
152
|
+
);
|
|
153
|
+
// the data may carry its own `language`, and a URL-loaded document claims
|
|
154
|
+
// asynchronously, where the constructor cannot throw — the name lets the
|
|
155
|
+
// async load path report the real cause instead of "could not load data"
|
|
156
|
+
err.name = "StoryMapLanguageConflict";
|
|
157
|
+
return err;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/** True for the error {@link claimLanguage} throws on a conflicting locale. */
|
|
161
|
+
function isLanguageConflict(err: unknown): boolean {
|
|
162
|
+
return err instanceof Error && err.name === "StoryMapLanguageConflict";
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Claim the page-wide locale for a viewer.
|
|
167
|
+
*
|
|
168
|
+
* @param code - The locale code the viewer is about to render.
|
|
169
|
+
* @param holder - Per-viewer identity; pass the same one to `releaseLanguage`.
|
|
170
|
+
* @throws If a live holder already claimed a different locale.
|
|
171
|
+
*/
|
|
172
|
+
function claimLanguage(code: string, holder: symbol): void {
|
|
173
|
+
for (const [existingHolder, existingCode] of languageHolders) {
|
|
174
|
+
if (existingHolder !== holder && existingCode !== code) {
|
|
175
|
+
throw languageConflict(existingCode, code);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
languageHolders.set(holder, code);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Release a viewer's claim. The page-wide locale is only released once the
|
|
183
|
+
* last holder is gone, so a disposed viewer does not free the locale a
|
|
184
|
+
* sibling is still rendering in.
|
|
185
|
+
*
|
|
186
|
+
* @param holder - The identity passed to `claimLanguage`.
|
|
187
|
+
*/
|
|
188
|
+
function releaseLanguage(holder: symbol): void {
|
|
189
|
+
languageHolders.delete(holder);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/** The locale currently claimed by a live viewer, or null if there is none. */
|
|
193
|
+
function claimedLanguage(): string | null {
|
|
194
|
+
const codes = new Set(languageHolders.values());
|
|
195
|
+
return codes.size > 0 ? [...codes][0] : null;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
function getLanguage(code: string): Record<string, unknown> {
|
|
199
|
+
const lang: Record<string, unknown> = {};
|
|
200
|
+
// start from a deep copy of the English defaults, then layer this locale
|
|
201
|
+
// on top: a key the translation is missing keeps its English value
|
|
202
|
+
for (const k in EN) {
|
|
203
|
+
lang[k] = structuredClone(EN[k]);
|
|
204
|
+
}
|
|
205
|
+
const entry = (localeModules[`./locale/${code}.json`]?.default ?? {}) as Record<
|
|
206
|
+
string,
|
|
207
|
+
unknown
|
|
208
|
+
>;
|
|
209
|
+
applyLanguage(lang, entry);
|
|
210
|
+
return lang;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/** Merge `entry` over `target`, per key, never mutating the English defaults. */
|
|
214
|
+
function applyLanguage(target: Record<string, unknown>, entry: Record<string, unknown>): void {
|
|
215
|
+
for (const k in entry) {
|
|
216
|
+
if (!entry[k]) {
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
if (typeof EN[k] === "object" && EN[k] !== null && typeof entry[k] === "object") {
|
|
220
|
+
// fresh object: never mutate the shared English default,
|
|
221
|
+
// otherwise one setLanguage() call would poison every later
|
|
222
|
+
// lookup (and every other language falling back to English)
|
|
223
|
+
target[k] = Object.assign({}, EN[k] as object, entry[k] as object);
|
|
224
|
+
} else {
|
|
225
|
+
target[k] = structuredClone(entry[k]);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Switch the active UI language. Synchronous: the viewer resolves its labels
|
|
232
|
+
* while it is being constructed.
|
|
233
|
+
*
|
|
234
|
+
* @param code - A locale code for which a locale file exists (e.g. `"en"`).
|
|
235
|
+
* @returns The language entry that is now active.
|
|
236
|
+
*/
|
|
237
|
+
function setLanguage(code: string): LanguageEntry {
|
|
238
|
+
// recorded before the merge, and unconditionally: a rejected *claim* never
|
|
239
|
+
// reaches here, so a throw cannot leave the page locale half-switched
|
|
240
|
+
activeLanguageCode = code;
|
|
241
|
+
const merged = getLanguage(code);
|
|
242
|
+
Language = {
|
|
243
|
+
...(merged as Omit<LanguageEntry, "messages" | "buttons">),
|
|
244
|
+
messages: (merged.messages as Record<string, string>) ?? FALLBACK.messages,
|
|
245
|
+
buttons: (merged.buttons as Record<string, string>) ?? FALLBACK.buttons,
|
|
246
|
+
};
|
|
247
|
+
return Language;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* The locale code the page is currently set to.
|
|
252
|
+
*
|
|
253
|
+
* A viewer that was not given a `language` adopts this instead of claiming the
|
|
254
|
+
* hardcoded `"en"` default, so a host that called `setLanguage("de")` and then
|
|
255
|
+
* constructed a viewer gets German rather than a conflict with a sibling.
|
|
256
|
+
*/
|
|
257
|
+
function currentLanguageCode(): string {
|
|
258
|
+
return activeLanguageCode;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/** The active locale's BCP 47 code, for `Intl` formatting. */
|
|
262
|
+
function currentLocale(): string {
|
|
263
|
+
return typeof Language.lang === "string" && Language.lang !== "" ? Language.lang : "en";
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/** True when the active language is written right-to-left. */
|
|
267
|
+
function isRtl(): boolean {
|
|
268
|
+
return Language.direction === "rtl";
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
export {
|
|
272
|
+
setLanguage,
|
|
273
|
+
Language,
|
|
274
|
+
currentLocale,
|
|
275
|
+
isRtl,
|
|
276
|
+
currentLanguageCode,
|
|
277
|
+
claimLanguage,
|
|
278
|
+
releaseLanguage,
|
|
279
|
+
claimedLanguage,
|
|
280
|
+
isLanguageConflict,
|
|
281
|
+
};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
{
|
|
2
|
+
"be": ["messages.consent_service_narration"],
|
|
3
|
+
"bg": ["messages.consent_service_narration"],
|
|
4
|
+
"cs": ["messages.consent_service_narration"],
|
|
5
|
+
"de": ["messages.consent_service_narration"],
|
|
6
|
+
"el": ["messages.consent_service_narration"],
|
|
7
|
+
"es": ["messages.consent_service_narration"],
|
|
8
|
+
"et": [
|
|
9
|
+
"buttons.exit_fullscreen",
|
|
10
|
+
"buttons.fullscreen",
|
|
11
|
+
"messages.consent_allow",
|
|
12
|
+
"messages.consent_blocked",
|
|
13
|
+
"messages.consent_deny",
|
|
14
|
+
"messages.consent_message",
|
|
15
|
+
"messages.consent_service_fonts",
|
|
16
|
+
"messages.consent_service_narration",
|
|
17
|
+
"messages.consent_service_tiles",
|
|
18
|
+
"messages.error"
|
|
19
|
+
],
|
|
20
|
+
"fr": ["messages.consent_service_narration"],
|
|
21
|
+
"he": ["messages.consent_service_narration"],
|
|
22
|
+
"hu": ["messages.consent_service_narration"],
|
|
23
|
+
"is": [
|
|
24
|
+
"buttons.exit_fullscreen",
|
|
25
|
+
"buttons.fullscreen",
|
|
26
|
+
"messages.consent_allow",
|
|
27
|
+
"messages.consent_blocked",
|
|
28
|
+
"messages.consent_deny",
|
|
29
|
+
"messages.consent_message",
|
|
30
|
+
"messages.consent_service_fonts",
|
|
31
|
+
"messages.consent_service_narration",
|
|
32
|
+
"messages.consent_service_tiles",
|
|
33
|
+
"messages.error"
|
|
34
|
+
],
|
|
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
|
+
"nn": [
|
|
40
|
+
"buttons.exit_fullscreen",
|
|
41
|
+
"buttons.fullscreen",
|
|
42
|
+
"messages.consent_allow",
|
|
43
|
+
"messages.consent_blocked",
|
|
44
|
+
"messages.consent_deny",
|
|
45
|
+
"messages.consent_message",
|
|
46
|
+
"messages.consent_service_fonts",
|
|
47
|
+
"messages.consent_service_narration",
|
|
48
|
+
"messages.consent_service_tiles",
|
|
49
|
+
"messages.error"
|
|
50
|
+
],
|
|
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
|
+
"sr": [
|
|
57
|
+
"buttons.exit_fullscreen",
|
|
58
|
+
"buttons.fullscreen",
|
|
59
|
+
"buttons.overview",
|
|
60
|
+
"messages.consent_allow",
|
|
61
|
+
"messages.consent_blocked",
|
|
62
|
+
"messages.consent_deny",
|
|
63
|
+
"messages.consent_message",
|
|
64
|
+
"messages.consent_service_fonts",
|
|
65
|
+
"messages.consent_service_narration",
|
|
66
|
+
"messages.consent_service_tiles",
|
|
67
|
+
"messages.error"
|
|
68
|
+
],
|
|
69
|
+
"sv": ["messages.consent_service_narration"],
|
|
70
|
+
"tr": ["messages.consent_service_narration"],
|
|
71
|
+
"uk": ["messages.consent_service_narration"],
|
|
72
|
+
"ur": [
|
|
73
|
+
"buttons.exit_fullscreen",
|
|
74
|
+
"buttons.fullscreen",
|
|
75
|
+
"messages.consent_allow",
|
|
76
|
+
"messages.consent_blocked",
|
|
77
|
+
"messages.consent_deny",
|
|
78
|
+
"messages.consent_message",
|
|
79
|
+
"messages.consent_service_fonts",
|
|
80
|
+
"messages.consent_service_narration",
|
|
81
|
+
"messages.consent_service_tiles",
|
|
82
|
+
"messages.error"
|
|
83
|
+
],
|
|
84
|
+
"zh-cn": ["messages.consent_service_narration"],
|
|
85
|
+
"zh-tw": ["messages.consent_service_narration"]
|
|
86
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Беларуская",
|
|
3
|
+
"lang": "be",
|
|
4
|
+
"messages": {
|
|
5
|
+
"loading": "Загрузка",
|
|
6
|
+
"wikipedia": "Вікіпедыя",
|
|
7
|
+
"start": "Start Exploring",
|
|
8
|
+
"error": "Памылка загрузкі",
|
|
9
|
+
"consent_start_title": "Знешні кантэнт",
|
|
10
|
+
"consent_start_message": "Гэтая гісторыя загружае кантэнт з знешніх сэрвісаў. Выберыце, якія дазволены.",
|
|
11
|
+
"consent_allow_all": "Дазволіць усе",
|
|
12
|
+
"consent_decline_all": "Адхіліць усе",
|
|
13
|
+
"consent_message": "Загрузіць змесціва з {service}?",
|
|
14
|
+
"consent_allow": "Дазволіць",
|
|
15
|
+
"consent_deny": "Адмовіць",
|
|
16
|
+
"consent_blocked": "Змесціва з {service} заблакіравана.",
|
|
17
|
+
"consent_service_tiles": "тайлаў карты",
|
|
18
|
+
"consent_service_fonts": "веб-шрыфтаў"
|
|
19
|
+
},
|
|
20
|
+
"buttons": {
|
|
21
|
+
"map_overview": "Прагляд мапы",
|
|
22
|
+
"overview": "Прагляд",
|
|
23
|
+
"backtostart": "Вярнуцца ў пачатак",
|
|
24
|
+
"collapse_toggle": "Схаваць мапу",
|
|
25
|
+
"uncollapse_toggle": "Паказаць мапу",
|
|
26
|
+
"swipe_to_navigate": "Swipe to Navigate<br><span class='vco-button'>OK</span>",
|
|
27
|
+
"fullscreen": "Поўны экран",
|
|
28
|
+
"exit_fullscreen": "Выхад з поўнаэкранага рэжыму"
|
|
29
|
+
},
|
|
30
|
+
"direction": "ltr"
|
|
31
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Български",
|
|
3
|
+
"lang": "bg",
|
|
4
|
+
"messages": {
|
|
5
|
+
"loading": "Зареждане",
|
|
6
|
+
"wikipedia": "От Уикипедия, свободната енциклопедия",
|
|
7
|
+
"start": "Започнете да разглеждате",
|
|
8
|
+
"error": "Грешка при зареждане",
|
|
9
|
+
"consent_start_title": "Външно съдържание",
|
|
10
|
+
"consent_start_message": "Тази история зарежда съдържание от външни услуги. Изберете кои са разрешени.",
|
|
11
|
+
"consent_allow_all": "Разреши всички",
|
|
12
|
+
"consent_decline_all": "Отхвърли всички",
|
|
13
|
+
"consent_message": "Да се зареди съдържание от {service}?",
|
|
14
|
+
"consent_allow": "Разреши",
|
|
15
|
+
"consent_deny": "Откажи",
|
|
16
|
+
"consent_blocked": "Съдържанието от {service} е блокирано.",
|
|
17
|
+
"consent_service_tiles": "тайли на картата",
|
|
18
|
+
"consent_service_fonts": "уеб шрифтове"
|
|
19
|
+
},
|
|
20
|
+
"buttons": {
|
|
21
|
+
"map_overview": "Преглед на картата",
|
|
22
|
+
"overview": "Преглед",
|
|
23
|
+
"backtostart": "Към началото",
|
|
24
|
+
"collapse_toggle": "Скриване на картата",
|
|
25
|
+
"uncollapse_toggle": "Показване на картата",
|
|
26
|
+
"swipe_to_navigate": "Swipe to Navigate<br><span class='vco-button'>OK</span>",
|
|
27
|
+
"fullscreen": "Цял екран",
|
|
28
|
+
"exit_fullscreen": "Изход от цял екран"
|
|
29
|
+
},
|
|
30
|
+
"direction": "ltr"
|
|
31
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Čeština",
|
|
3
|
+
"lang": "cs",
|
|
4
|
+
"messages": {
|
|
5
|
+
"loading": "Nahrávání",
|
|
6
|
+
"wikipedia": "Z Wikipedie, svobodné encyklopedie",
|
|
7
|
+
"start": "Prozkoumat",
|
|
8
|
+
"error": "Chyba při načítání",
|
|
9
|
+
"consent_start_title": "Externí obsah",
|
|
10
|
+
"consent_start_message": "Tento příběh načítá obsah z externích služeb. Zvolte, které jsou povoleny.",
|
|
11
|
+
"consent_allow_all": "Povolit vše",
|
|
12
|
+
"consent_decline_all": "Odmítnout vše",
|
|
13
|
+
"consent_message": "Načíst obsah z {service}?",
|
|
14
|
+
"consent_allow": "Povolit",
|
|
15
|
+
"consent_deny": "Odmítnout",
|
|
16
|
+
"consent_blocked": "Obsah z {service} je zablokován.",
|
|
17
|
+
"consent_service_tiles": "mapových dlaždic",
|
|
18
|
+
"consent_service_fonts": "webových písem"
|
|
19
|
+
},
|
|
20
|
+
"buttons": {
|
|
21
|
+
"map_overview": "Přehledová mapa",
|
|
22
|
+
"overview": "Přehled",
|
|
23
|
+
"backtostart": "Zpět na začátek",
|
|
24
|
+
"collapse_toggle": "Skrýt mapu",
|
|
25
|
+
"uncollapse_toggle": "Zobrazit mapu",
|
|
26
|
+
"swipe_to_navigate": "Swipe to Navigate<br><span class='vco-button'>OK</span>",
|
|
27
|
+
"fullscreen": "Celá obrazovka",
|
|
28
|
+
"exit_fullscreen": "Ukončit celou obrazovku"
|
|
29
|
+
},
|
|
30
|
+
"direction": "ltr"
|
|
31
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Deutsch",
|
|
3
|
+
"lang": "de",
|
|
4
|
+
"messages": {
|
|
5
|
+
"loading": "Daten werden geladen",
|
|
6
|
+
"wikipedia": "von Wikipedia, der freien Enzyklopädie",
|
|
7
|
+
"start": "Explore",
|
|
8
|
+
"consent_start_title": "Externe Inhalte",
|
|
9
|
+
"consent_start_message": "Diese Story lädt Inhalte von externen Diensten. Wählen Sie, welche erlaubt sind.",
|
|
10
|
+
"consent_allow_all": "Alle erlauben",
|
|
11
|
+
"consent_decline_all": "Alle ablehnen",
|
|
12
|
+
"error": "Fehler beim Laden",
|
|
13
|
+
"consent_message": "Inhalte von {service} laden?",
|
|
14
|
+
"consent_allow": "Erlauben",
|
|
15
|
+
"consent_deny": "Ablehnen",
|
|
16
|
+
"consent_blocked": "Inhalte von {service} sind blockiert.",
|
|
17
|
+
"consent_service_tiles": "Kartenkacheln",
|
|
18
|
+
"consent_service_fonts": "Web-Schriften"
|
|
19
|
+
},
|
|
20
|
+
"buttons": {
|
|
21
|
+
"map_overview": "Kartenübersicht",
|
|
22
|
+
"overview": "Kartenübersicht",
|
|
23
|
+
"backtostart": "Zurück zum Anfang",
|
|
24
|
+
"collapse_toggle": "Karte ausblenden",
|
|
25
|
+
"uncollapse_toggle": "Karte anzeigen",
|
|
26
|
+
"swipe_to_navigate": "Swipe to Navigate<br><span class='vco-button'>OK</span>",
|
|
27
|
+
"fullscreen": "Vollbild",
|
|
28
|
+
"exit_fullscreen": "Vollbild beenden"
|
|
29
|
+
},
|
|
30
|
+
"direction": "ltr"
|
|
31
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Ελληνικά",
|
|
3
|
+
"lang": "el",
|
|
4
|
+
"messages": {
|
|
5
|
+
"loading": "Φόρτωση",
|
|
6
|
+
"wikipedia": "Από την Wikipedia, την ελεύθερη εγκυκλοπαίδεια",
|
|
7
|
+
"start": "Έναρξη περιήγησης",
|
|
8
|
+
"error": "Σφάλμα φόρτωσης",
|
|
9
|
+
"consent_start_title": "Εξωτερικό περιεχόμενο",
|
|
10
|
+
"consent_start_message": "Αυτή η ιστορία φορτώνει περιεχόμενο από εξωτερικές υπηρεσίες. Επιλέξτε ποιες επιτρέπονται.",
|
|
11
|
+
"consent_allow_all": "Να επιτρέπονται όλα",
|
|
12
|
+
"consent_decline_all": "Να απορρίπτονται όλα",
|
|
13
|
+
"consent_message": "Φόρτωση περιεχομένου από {service};",
|
|
14
|
+
"consent_allow": "Επίτρεψη",
|
|
15
|
+
"consent_deny": "Απόρριψη",
|
|
16
|
+
"consent_blocked": "Το περιεχόμενο από {service} είναι αποκλεισμένο.",
|
|
17
|
+
"consent_service_tiles": "πλακίδια χάρτη",
|
|
18
|
+
"consent_service_fonts": "διαδικτυακές γραμματοσειρές"
|
|
19
|
+
},
|
|
20
|
+
"buttons": {
|
|
21
|
+
"map_overview": "Επισκόπηση χάρτη",
|
|
22
|
+
"overview": "Επισκόπηση",
|
|
23
|
+
"backtostart": "Επιστροφή στην αρχή",
|
|
24
|
+
"collapse_toggle": "Απόκρυψη χάρτη",
|
|
25
|
+
"uncollapse_toggle": "Εμφάνιση χάρτη",
|
|
26
|
+
"swipe_to_navigate": "Κτυπήστε ελαφρά για περιήγηση<br><span class='vco-button'>OK</span>",
|
|
27
|
+
"fullscreen": "Πλήρης οθόνη",
|
|
28
|
+
"exit_fullscreen": "Έξοδος από πλήρη οθόνη"
|
|
29
|
+
},
|
|
30
|
+
"direction": "ltr"
|
|
31
|
+
}
|