@projektemacher/storymapjs 0.10.7 → 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 +350 -19
- 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 +84 -0
- 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 +313 -11
- package/dist/docs/readme.html +40 -9
- package/dist/embed/index.html +1 -1
- 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 +16 -10
- package/dist/js/storymap.d.ts +1439 -114
- package/dist/js/storymap.js +24654 -21936
- package/dist/js/storymap.js.map +1 -1
- package/dist/navplace-properties.json +40 -0
- package/docs/migration-from-knightlab.md +229 -9
- package/docs/storymap-as-iiif-manifest.md +559 -135
- package/package.json +11 -8
- package/schema/storymap.schema.json +431 -78
- package/src/animation/easings.ts +8 -1
- package/src/animation/tween.ts +186 -0
- package/src/core/Browser.ts +6 -5
- package/src/core/Load.ts +54 -2
- package/src/core/Util.ts +255 -193
- package/src/core/mixins.ts +24 -7
- package/src/core/viewers.ts +94 -0
- package/src/dom/DomEvent.ts +27 -8
- package/src/globals.d.ts +8 -0
- package/src/language/Language.ts +199 -25
- package/src/language/locale/.expected-gaps.json +86 -0
- package/src/language/locale/be.json +15 -2
- package/src/language/locale/bg.json +15 -2
- package/src/language/locale/cs.json +15 -2
- package/src/language/locale/de.json +12 -1
- package/src/language/locale/el.json +15 -2
- package/src/language/locale/en.json +6 -2
- package/src/language/locale/es.json +15 -2
- package/src/language/locale/et.json +5 -1
- package/src/language/locale/fr.json +15 -2
- package/src/language/locale/he.json +16 -3
- package/src/language/locale/hu.json +15 -2
- package/src/language/locale/is.json +5 -1
- package/src/language/locale/it.json +15 -2
- package/src/language/locale/jp.json +15 -2
- package/src/language/locale/ko.json +15 -2
- package/src/language/locale/nl.json +15 -2
- package/src/language/locale/nn.json +5 -1
- package/src/language/locale/no.json +15 -2
- package/src/language/locale/pl.json +15 -2
- package/src/language/locale/pt.json +15 -2
- package/src/language/locale/ru.json +15 -2
- package/src/language/locale/sk.json +15 -2
- package/src/language/locale/sr.json +5 -1
- package/src/language/locale/sv.json +15 -2
- package/src/language/locale/tr.json +15 -2
- package/src/language/locale/uk.json +15 -2
- package/src/language/locale/ur.json +5 -1
- package/src/language/locale/zh-cn.json +15 -2
- package/src/language/locale/zh-tw.json +15 -2
- package/src/main.ts +92 -0
- package/src/map/Map.ts +183 -106
- package/src/map/MapMarker.ts +28 -5
- package/src/map/georeference.ts +325 -0
- package/src/map/openlayers/Map.OpenLayers.ts +850 -237
- package/src/map/openlayers/MapMarker.OpenLayers.ts +248 -24
- package/src/map/openlayers/zoomifyTiles.ts +1 -4
- package/src/media/EmbedUtil.ts +308 -24
- package/src/media/Media.ts +243 -55
- package/src/media/embedId.ts +104 -0
- package/src/media/types/Audio.ts +9 -82
- package/src/media/types/Blockquote.ts +2 -3
- package/src/media/types/DailyMotion.ts +5 -10
- package/src/media/types/DocumentCloud.ts +6 -35
- package/src/media/types/Facebook.ts +3 -4
- package/src/media/types/Flickr.ts +9 -9
- package/src/media/types/GoogleDoc.ts +3 -4
- package/src/media/types/HtmlMedia.ts +167 -0
- package/src/media/types/IFrame.ts +3 -4
- package/src/media/types/Image.ts +72 -6
- package/src/media/types/Juxtapose.ts +14 -5
- package/src/media/types/SoundCloud.ts +28 -6
- package/src/media/types/Text.ts +19 -13
- package/src/media/types/Twitter.ts +27 -14
- package/src/media/types/Video.ts +9 -79
- package/src/media/types/Vimeo.ts +10 -10
- package/src/media/types/Website.ts +23 -13
- package/src/media/types/Wikipedia.ts +18 -8
- package/src/media/types/YouTube.ts +71 -39
- package/src/scss/Typography.scss +1 -3
- package/src/scss/VCO.StoryMap.Dark.scss +18 -6
- package/src/scss/VCO.StoryMap.scss +37 -6
- package/src/scss/Variables.Dark.scss +3 -2
- package/src/scss/Variables.scss +3 -2
- package/src/scss/core/Mixins.scss +5 -63
- package/src/scss/fonts/font.amatic-andika.scss +3 -0
- package/src/scss/fonts/font.bitter-raleway.scss +6 -0
- package/src/scss/fonts/font.cairo.scss +79 -0
- package/src/scss/fonts/font.clicker-garamond.scss +5 -0
- package/src/scss/fonts/font.dancing-ledger.scss +1 -0
- package/src/scss/fonts/font.knightlab.scss +14 -0
- package/src/scss/fonts/font.oldstandard.scss +6 -0
- package/src/scss/fonts/font.opensans-gentiumbook.scss +5 -0
- package/src/scss/fonts/font.playfair-faunaone.scss +2 -0
- package/src/scss/fonts/font.playfair.scss +4 -0
- package/src/scss/fonts/font.pt.scss +6 -0
- package/src/scss/fonts/font.ubuntu.scss +4 -0
- package/src/scss/fonts/font.unicaone-vollkorn.scss +5 -0
- package/src/scss/map/VCO.MapMarker.scss +98 -3
- package/src/scss/media/VCO.Media.scss +7 -10
- package/src/scss/media/types/VCO.Media.Text.scss +8 -0
- package/src/scss/media/types/VCO.Media.Wikipedia.scss +2 -1
- package/src/scss/slider/VCO.Slide.scss +13 -3
- package/src/scss/slider/VCO.SlideNav.scss +11 -17
- package/src/scss/slider/VCO.StorySlider.scss +4 -2
- package/src/scss/ui/VCO.Consent.scss +44 -0
- package/src/scss/ui/VCO.MenuBar.Button.scss +8 -0
- package/src/scss/ui/VCO.Message.scss +2 -5
- package/src/site/site.ts +2 -1
- package/src/slider/Slide.ts +121 -27
- package/src/slider/SlideNav.ts +39 -5
- package/src/slider/StorySlider.ts +153 -42
- package/src/storymap/Consent.ts +407 -82
- package/src/storymap/StoryMap.ts +1192 -182
- package/src/storymap/content-state.ts +185 -0
- package/src/storymap/iiif.ts +1526 -68
- package/src/storymap/to-iiif.ts +921 -0
- package/src/storymap/validate.ts +80 -7
- package/src/types.ts +223 -26
- package/src/ui/MenuBar.ts +98 -45
- package/src/ui/Message.ts +9 -0
- package/src/ui/Swipable.ts +145 -78
- package/dist/assets/demo-D6cTmzn6.js +0 -1
- package/dist/assets/harness-BPFlzutp.js +0 -1
- package/dist/assets/index-DDsPBPZA.js +0 -1
- package/dist/assets/main-Y-MYUSJ4.js +0 -17
- package/src/animation/morpheus.d.ts +0 -41
- package/src/scss/media/types/VCO.Media.Instagram.scss +0 -7
- package/src/scss/media/types/VCO.Media.Profile.scss +0 -5
- package/src/ui/Draggable.ts +0 -374
package/src/dom/DomEvent.ts
CHANGED
|
@@ -16,6 +16,21 @@ export type LegacyEvent = Event & {
|
|
|
16
16
|
pageY?: number;
|
|
17
17
|
};
|
|
18
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
|
+
|
|
19
34
|
const DomEvent = {
|
|
20
35
|
addListener: function (
|
|
21
36
|
obj: DomEventTarget,
|
|
@@ -28,7 +43,7 @@ const DomEvent = {
|
|
|
28
43
|
};
|
|
29
44
|
|
|
30
45
|
obj.addEventListener(type, handler, false);
|
|
31
|
-
(obj as unknown as Record<string, unknown>)[
|
|
46
|
+
(obj as unknown as Record<string, unknown>)[handlerKey(obj, type, fn)] = handler;
|
|
32
47
|
},
|
|
33
48
|
|
|
34
49
|
removeListener: function (
|
|
@@ -37,15 +52,19 @@ const DomEvent = {
|
|
|
37
52
|
fn: (e: Event) => void,
|
|
38
53
|
context?: unknown,
|
|
39
54
|
): void {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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;
|
|
44
66
|
return;
|
|
45
67
|
}
|
|
46
|
-
|
|
47
|
-
obj.removeEventListener(type, handler as EventListener, false);
|
|
48
|
-
(obj as unknown as Record<string, unknown>)[key] = null;
|
|
49
68
|
},
|
|
50
69
|
|
|
51
70
|
preventDefault: function (e: Event): void {
|
package/src/globals.d.ts
CHANGED
|
@@ -11,6 +11,14 @@ declare global {
|
|
|
11
11
|
const SC: {
|
|
12
12
|
Widget: (el: HTMLElement) => { pause(): void };
|
|
13
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;
|
|
14
22
|
}
|
|
15
23
|
|
|
16
24
|
export {};
|
package/src/language/Language.ts
CHANGED
|
@@ -1,3 +1,40 @@
|
|
|
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.
|
|
1
38
|
import be from "./locale/be.json";
|
|
2
39
|
import bg from "./locale/bg.json";
|
|
3
40
|
import cs from "./locale/cs.json";
|
|
@@ -28,14 +65,6 @@ import ur from "./locale/ur.json";
|
|
|
28
65
|
import zhCn from "./locale/zh-cn.json";
|
|
29
66
|
import zhTw from "./locale/zh-tw.json";
|
|
30
67
|
|
|
31
|
-
interface LanguageEntry {
|
|
32
|
-
buttons?: Record<string, string>;
|
|
33
|
-
messages?: Record<string, string>;
|
|
34
|
-
[key: string]: unknown;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// Static locale map: the bundler-agnostic form of what `import.meta.glob`
|
|
38
|
-
// with `{ eager: true }` desugars to (works in vite dev and rollup builds).
|
|
39
68
|
const localeModules: Record<string, { default?: unknown }> = {
|
|
40
69
|
"./locale/be.json": { default: be },
|
|
41
70
|
"./locale/bg.json": { default: bg },
|
|
@@ -68,40 +97,185 @@ const localeModules: Record<string, { default?: unknown }> = {
|
|
|
68
97
|
"./locale/zh-tw.json": { default: zhTw },
|
|
69
98
|
};
|
|
70
99
|
|
|
100
|
+
/** The locale every other language falls back to, per key. */
|
|
71
101
|
const EN: Record<string, unknown> =
|
|
72
102
|
(localeModules["./locale/en.json"]?.default as Record<string, unknown> | undefined) || {};
|
|
73
103
|
|
|
74
|
-
|
|
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
|
+
};
|
|
75
112
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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".`,
|
|
80
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
|
|
81
202
|
for (const k in EN) {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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);
|
|
89
224
|
} else {
|
|
90
|
-
|
|
225
|
+
target[k] = structuredClone(entry[k]);
|
|
91
226
|
}
|
|
92
227
|
}
|
|
93
|
-
return lang;
|
|
94
228
|
}
|
|
95
229
|
|
|
96
230
|
/**
|
|
97
|
-
* Switch the active UI language.
|
|
231
|
+
* Switch the active UI language. Synchronous: the viewer resolves its labels
|
|
232
|
+
* while it is being constructed.
|
|
98
233
|
*
|
|
99
234
|
* @param code - A locale code for which a locale file exists (e.g. `"en"`).
|
|
100
235
|
* @returns The language entry that is now active.
|
|
101
236
|
*/
|
|
102
237
|
function setLanguage(code: string): LanguageEntry {
|
|
103
|
-
|
|
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
|
+
};
|
|
104
247
|
return Language;
|
|
105
248
|
}
|
|
106
249
|
|
|
107
|
-
|
|
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
|
+
}
|
|
@@ -4,7 +4,18 @@
|
|
|
4
4
|
"messages": {
|
|
5
5
|
"loading": "Загрузка",
|
|
6
6
|
"wikipedia": "Вікіпедыя",
|
|
7
|
-
"start": "Start Exploring"
|
|
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": "веб-шрыфтаў"
|
|
8
19
|
},
|
|
9
20
|
"buttons": {
|
|
10
21
|
"map_overview": "Прагляд мапы",
|
|
@@ -12,7 +23,9 @@
|
|
|
12
23
|
"backtostart": "Вярнуцца ў пачатак",
|
|
13
24
|
"collapse_toggle": "Схаваць мапу",
|
|
14
25
|
"uncollapse_toggle": "Паказаць мапу",
|
|
15
|
-
"swipe_to_navigate": "Swipe to Navigate<br><span class='vco-button'>OK</span>"
|
|
26
|
+
"swipe_to_navigate": "Swipe to Navigate<br><span class='vco-button'>OK</span>",
|
|
27
|
+
"fullscreen": "Поўны экран",
|
|
28
|
+
"exit_fullscreen": "Выхад з поўнаэкранага рэжыму"
|
|
16
29
|
},
|
|
17
30
|
"direction": "ltr"
|
|
18
31
|
}
|
|
@@ -4,7 +4,18 @@
|
|
|
4
4
|
"messages": {
|
|
5
5
|
"loading": "Зареждане",
|
|
6
6
|
"wikipedia": "От Уикипедия, свободната енциклопедия",
|
|
7
|
-
"start": "Започнете да разглеждате"
|
|
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": "уеб шрифтове"
|
|
8
19
|
},
|
|
9
20
|
"buttons": {
|
|
10
21
|
"map_overview": "Преглед на картата",
|
|
@@ -12,7 +23,9 @@
|
|
|
12
23
|
"backtostart": "Към началото",
|
|
13
24
|
"collapse_toggle": "Скриване на картата",
|
|
14
25
|
"uncollapse_toggle": "Показване на картата",
|
|
15
|
-
"swipe_to_navigate": "Swipe to Navigate<br><span class='vco-button'>OK</span>"
|
|
26
|
+
"swipe_to_navigate": "Swipe to Navigate<br><span class='vco-button'>OK</span>",
|
|
27
|
+
"fullscreen": "Цял екран",
|
|
28
|
+
"exit_fullscreen": "Изход от цял екран"
|
|
16
29
|
},
|
|
17
30
|
"direction": "ltr"
|
|
18
31
|
}
|
|
@@ -4,7 +4,18 @@
|
|
|
4
4
|
"messages": {
|
|
5
5
|
"loading": "Nahrávání",
|
|
6
6
|
"wikipedia": "Z Wikipedie, svobodné encyklopedie",
|
|
7
|
-
"start": "Prozkoumat"
|
|
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"
|
|
8
19
|
},
|
|
9
20
|
"buttons": {
|
|
10
21
|
"map_overview": "Přehledová mapa",
|
|
@@ -12,7 +23,9 @@
|
|
|
12
23
|
"backtostart": "Zpět na začátek",
|
|
13
24
|
"collapse_toggle": "Skrýt mapu",
|
|
14
25
|
"uncollapse_toggle": "Zobrazit mapu",
|
|
15
|
-
"swipe_to_navigate": "Swipe to Navigate<br><span class='vco-button'>OK</span>"
|
|
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"
|
|
16
29
|
},
|
|
17
30
|
"direction": "ltr"
|
|
18
31
|
}
|
|
@@ -4,7 +4,18 @@
|
|
|
4
4
|
"messages": {
|
|
5
5
|
"loading": "Daten werden geladen",
|
|
6
6
|
"wikipedia": "von Wikipedia, der freien Enzyklopädie",
|
|
7
|
-
"start": "Explore"
|
|
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"
|
|
8
19
|
},
|
|
9
20
|
"buttons": {
|
|
10
21
|
"map_overview": "Kartenübersicht",
|
|
@@ -4,7 +4,18 @@
|
|
|
4
4
|
"messages": {
|
|
5
5
|
"loading": "Φόρτωση",
|
|
6
6
|
"wikipedia": "Από την Wikipedia, την ελεύθερη εγκυκλοπαίδεια",
|
|
7
|
-
"start": "Έναρξη περιήγησης"
|
|
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": "διαδικτυακές γραμματοσειρές"
|
|
8
19
|
},
|
|
9
20
|
"buttons": {
|
|
10
21
|
"map_overview": "Επισκόπηση χάρτη",
|
|
@@ -12,7 +23,9 @@
|
|
|
12
23
|
"backtostart": "Επιστροφή στην αρχή",
|
|
13
24
|
"collapse_toggle": "Απόκρυψη χάρτη",
|
|
14
25
|
"uncollapse_toggle": "Εμφάνιση χάρτη",
|
|
15
|
-
"swipe_to_navigate": "Κτυπήστε ελαφρά για περιήγηση<br><span class='vco-button'>OK</span>"
|
|
26
|
+
"swipe_to_navigate": "Κτυπήστε ελαφρά για περιήγηση<br><span class='vco-button'>OK</span>",
|
|
27
|
+
"fullscreen": "Πλήρης οθόνη",
|
|
28
|
+
"exit_fullscreen": "Έξοδος από πλήρη οθόνη"
|
|
16
29
|
},
|
|
17
30
|
"direction": "ltr"
|
|
18
31
|
}
|
|
@@ -6,13 +6,17 @@
|
|
|
6
6
|
"loading": "Loading",
|
|
7
7
|
"wikipedia": "From Wikipedia, the free encyclopedia",
|
|
8
8
|
"start": "Start Exploring",
|
|
9
|
-
"consent_title": "External content",
|
|
10
9
|
"consent_message": "Load content from {service}?",
|
|
11
10
|
"consent_allow": "Allow",
|
|
12
11
|
"consent_deny": "Deny",
|
|
13
12
|
"consent_blocked": "Content from {service} is blocked.",
|
|
14
13
|
"consent_service_tiles": "map tiles",
|
|
15
|
-
"consent_service_fonts": "web fonts"
|
|
14
|
+
"consent_service_fonts": "web fonts",
|
|
15
|
+
"consent_service_narration": "slide narration",
|
|
16
|
+
"consent_start_title": "External content",
|
|
17
|
+
"consent_start_message": "This story loads content from external services. Choose which ones are allowed.",
|
|
18
|
+
"consent_allow_all": "Allow all",
|
|
19
|
+
"consent_decline_all": "Decline all"
|
|
16
20
|
},
|
|
17
21
|
"buttons": {
|
|
18
22
|
"map_overview": "Map Overview",
|
|
@@ -4,7 +4,18 @@
|
|
|
4
4
|
"messages": {
|
|
5
5
|
"loading": "cargando",
|
|
6
6
|
"wikipedia": "de Wikipedia, la enciclopedia libre",
|
|
7
|
-
"start": "Explore"
|
|
7
|
+
"start": "Explore",
|
|
8
|
+
"error": "Error de carga",
|
|
9
|
+
"consent_start_title": "Contenido externo",
|
|
10
|
+
"consent_start_message": "Esta historia carga contenido de servicios externos. Elija cuáles se permiten.",
|
|
11
|
+
"consent_allow_all": "Permitir todo",
|
|
12
|
+
"consent_decline_all": "Denegar todo",
|
|
13
|
+
"consent_message": "¿Cargar contenido de {service}?",
|
|
14
|
+
"consent_allow": "Permitir",
|
|
15
|
+
"consent_deny": "Denegar",
|
|
16
|
+
"consent_blocked": "El contenido de {service} está bloqueado.",
|
|
17
|
+
"consent_service_tiles": "teselas de mapa",
|
|
18
|
+
"consent_service_fonts": "fuentes web"
|
|
8
19
|
},
|
|
9
20
|
"buttons": {
|
|
10
21
|
"map_overview": "vista general del mapa",
|
|
@@ -12,7 +23,9 @@
|
|
|
12
23
|
"backtostart": "volver al comienzo",
|
|
13
24
|
"collapse_toggle": "ocultar mapa",
|
|
14
25
|
"uncollapse_toggle": "mostrar mapa",
|
|
15
|
-
"swipe_to_navigate": "Deslizar para navegar<br><span class='vco-button'>Entendido</span>"
|
|
26
|
+
"swipe_to_navigate": "Deslizar para navegar<br><span class='vco-button'>Entendido</span>",
|
|
27
|
+
"fullscreen": "pantalla completa",
|
|
28
|
+
"exit_fullscreen": "salir de pantalla completa"
|
|
16
29
|
},
|
|
17
30
|
"direction": "ltr"
|
|
18
31
|
}
|
|
@@ -4,7 +4,11 @@
|
|
|
4
4
|
"messages": {
|
|
5
5
|
"loading": "Laadib",
|
|
6
6
|
"wikipedia": "Vikipeedia, vaba entsüklopeedia",
|
|
7
|
-
"start": "Uuri"
|
|
7
|
+
"start": "Uuri",
|
|
8
|
+
"consent_start_title": "Väline sisu",
|
|
9
|
+
"consent_start_message": "See lugu laadib sisu välistest teenustest. Valige, millised on lubatud.",
|
|
10
|
+
"consent_allow_all": "Luba kõik",
|
|
11
|
+
"consent_decline_all": "Keela kõik"
|
|
8
12
|
},
|
|
9
13
|
"buttons": {
|
|
10
14
|
"map_overview": "Kaardi ülevaade",
|