@projektemacher/storymapjs 0.10.7 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG +431 -19
- package/README.md +168 -17
- package/dist/assets/demo-bWnOyfUw.js +1 -0
- package/dist/assets/harness-C3JUv5Ii.js +1 -0
- package/dist/assets/harness-multi-XZNex3tb.js +1 -0
- package/dist/assets/harness-support-CjfZIVeb.js +1 -0
- package/dist/assets/index-wHPqGrBS.js +1 -0
- package/dist/assets/main-DQ32hWBM.js +17 -0
- package/dist/context.json +23 -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 +3 -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 +2112 -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/isSlideshowCollection.html +51 -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/slideshowToStorymapData.html +51 -0
- package/dist/docs/api/functions/slideshowVersion.html +48 -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 +300 -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/MapEvents.html +116 -0
- package/dist/docs/api/interfaces/MapMarkerEvents.html +66 -0
- package/dist/docs/api/interfaces/MarkerEventPayload.html +57 -0
- package/dist/docs/api/interfaces/MediaEvents.html +78 -0
- package/dist/docs/api/interfaces/MenuBarEvents.html +114 -0
- package/dist/docs/api/interfaces/MessageEvents.html +72 -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/SlideBackgroundState.html +66 -0
- package/dist/docs/api/interfaces/SlideEvents.html +78 -0
- package/dist/docs/api/interfaces/SlideNavEvents.html +72 -0
- package/dist/docs/api/interfaces/SlideshowPlayerSettings.html +182 -0
- package/dist/docs/api/interfaces/SlideshowToStorymapResult.html +60 -0
- package/dist/docs/api/interfaces/SlideshowTranslatorOptions.html +65 -0
- package/dist/docs/api/interfaces/SlideshowWarning.html +72 -0
- package/dist/docs/api/interfaces/StoryMapEvents.html +146 -0
- package/dist/docs/api/interfaces/StoryMapMarker.html +763 -0
- package/dist/docs/api/interfaces/StorySliderEvents.html +102 -0
- package/dist/docs/api/interfaces/StorymapBasemap.html +69 -0
- package/dist/docs/api/interfaces/StorymapData.html +77 -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 +137 -0
- package/dist/docs/api/interfaces/StorymapManifestBackground.html +81 -0
- package/dist/docs/api/interfaces/StorymapManifestCanvas.html +188 -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 +734 -0
- package/dist/docs/api/interfaces/StorymapOverlayLayer.html +157 -0
- package/dist/docs/api/interfaces/StorymapSlide.html +186 -0
- package/dist/docs/api/interfaces/StorymapSlideBackground.html +72 -0
- package/dist/docs/api/interfaces/StorymapSlideLocation.html +161 -0
- package/dist/docs/api/interfaces/StorymapSlideMarker.html +103 -0
- package/dist/docs/api/interfaces/StorymapSlideMedia.html +149 -0
- package/dist/docs/api/interfaces/StorymapSlideNarration.html +117 -0
- package/dist/docs/api/interfaces/StorymapSlideText.html +72 -0
- package/dist/docs/api/interfaces/StorymapTilejson.html +105 -0
- package/dist/docs/api/interfaces/SwipableEvents.html +102 -0
- package/dist/docs/api/interfaces/TextEvents.html +66 -0
- package/dist/docs/api/media/es.json +31 -0
- package/dist/docs/api/media/events.md +66 -0
- package/dist/docs/api/media/migration-from-knightlab.md +399 -0
- package/dist/docs/api/media/slideshow.md +109 -0
- package/dist/docs/api/media/storymap-as-iiif-manifest.md +1007 -0
- package/dist/docs/api/modules.html +50 -0
- package/dist/docs/api/types/ContentState.html +70 -0
- package/dist/docs/api/types/FiredEvent.html +43 -0
- package/dist/docs/api/types/ImagereadyKind.html +34 -0
- package/dist/docs/api/types/MediaTypeMatch.html +78 -0
- package/dist/docs/api/types/SwipeDirection.html +36 -0
- package/dist/docs/api/types/TileSourceFactory.html +53 -0
- package/dist/docs/authoring.html +306 -0
- package/dist/docs/events.html +263 -0
- package/dist/docs/iiif.html +738 -69
- package/dist/docs/migration.html +360 -11
- package/dist/docs/readme.html +149 -17
- package/dist/embed/index.html +8 -1
- package/dist/examples/font-css-false.json +33 -0
- 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/layers-control.json +60 -0
- package/dist/examples/map-area-overlays.json +68 -0
- package/dist/examples/map-template-provider.json +36 -0
- package/dist/examples/multi-media.json +71 -0
- package/dist/examples/no-map.json +44 -0
- package/dist/examples-iiif/annotated-image.json +204 -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/font-css-false.json +114 -0
- 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/layers-control.json +226 -0
- package/dist/examples-iiif/map-area-overlays.json +289 -0
- package/dist/examples-iiif/map-template-provider.json +133 -0
- package/dist/examples-iiif/marktwain.json +255 -58
- package/dist/examples-iiif/multi-media.json +237 -0
- 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/examples-slideshow/single.json +79 -0
- package/dist/examples-slideshow/static/pixel.png +0 -0
- package/dist/examples-slideshow/static.json +44 -0
- package/dist/harness-multi.html +17 -0
- package/dist/harness.html +4 -2
- package/dist/index.html +19 -12
- package/dist/js/storymap.d.ts +2669 -307
- package/dist/js/storymap.js +10820 -6196
- package/dist/js/storymap.js.map +1 -1
- package/dist/navplace-properties.json +54 -0
- package/dist/site.css +54 -36
- package/docs/migration-from-knightlab.md +279 -19
- package/docs/storymap-as-iiif-manifest.md +633 -136
- package/package.json +12 -7
- package/schema/storymap.schema.json +733 -80
- 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 +257 -193
- package/src/core/mixins.ts +66 -35
- 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 +206 -25
- package/src/language/locale/.expected-gaps.json +346 -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 +23 -2
- package/src/language/locale/el.json +15 -2
- package/src/language/locale/en.json +17 -3
- 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 +143 -0
- package/src/map/Map.ts +227 -112
- package/src/map/MapMarker.ts +44 -8
- package/src/map/georeference.ts +325 -0
- package/src/map/openlayers/Map.OpenLayers.ts +1601 -263
- package/src/map/openlayers/MapMarker.OpenLayers.ts +348 -24
- package/src/map/openlayers/zoomifyTiles.ts +1 -4
- package/src/map/slideView.ts +149 -0
- package/src/map/types.ts +2 -0
- package/src/media/EmbedUtil.ts +333 -24
- package/src/media/Media.ts +270 -59
- package/src/media/embedId.ts +110 -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 +23 -12
- package/src/media/types/GoogleDoc.ts +3 -4
- package/src/media/types/HtmlMedia.ts +233 -0
- package/src/media/types/IFrame.ts +3 -4
- package/src/media/types/Image.ts +87 -9
- package/src/media/types/Juxtapose.ts +14 -5
- package/src/media/types/SoundCloud.ts +28 -6
- package/src/media/types/Text.ts +46 -21
- package/src/media/types/Twitter.ts +35 -20
- package/src/media/types/Video.ts +9 -79
- package/src/media/types/Vimeo.ts +11 -11
- package/src/media/types/Website.ts +23 -13
- package/src/media/types/Wikipedia.ts +18 -8
- package/src/media/types/YouTube.ts +72 -40
- package/src/scss/Typography.scss +16 -18
- package/src/scss/VCO.StoryMap.scss +208 -12
- package/src/scss/Variables.scss +3 -2
- package/src/scss/core/Mixins.scss +5 -63
- package/src/scss/core/Reset.scss +5 -18
- 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.Map.scss +1 -1
- package/src/scss/map/VCO.MapMarker.scss +114 -8
- package/src/scss/map/openlayers/VCO.Map.OpenLayers.scss +7 -4
- package/src/scss/media/VCO.Media.scss +14 -17
- package/src/scss/media/types/VCO.Media.Blockquote.scss +1 -1
- package/src/scss/media/types/VCO.Media.Text.scss +13 -5
- package/src/scss/media/types/VCO.Media.Twitter.scss +4 -4
- package/src/scss/media/types/VCO.Media.Wikipedia.scss +3 -19
- package/src/scss/site/site.scss +55 -36
- package/src/scss/slider/VCO.Slide.scss +61 -13
- package/src/scss/slider/VCO.SlideNav.scss +34 -24
- package/src/scss/slider/VCO.StorySlider.scss +53 -1
- package/src/scss/snapmap/VCO.SnapMap.scss +3 -3
- package/src/scss/ui/VCO.Consent.scss +63 -13
- package/src/scss/ui/VCO.Layers.scss +119 -0
- package/src/scss/ui/VCO.MenuBar.Button.scss +143 -14
- package/src/scss/ui/VCO.MenuBar.scss +9 -2
- package/src/scss/ui/VCO.Message.scss +16 -5
- package/src/site/site.ts +2 -1
- package/src/slider/Slide.ts +326 -74
- package/src/slider/SlideNav.ts +54 -9
- package/src/slider/StorySlider.ts +352 -60
- package/src/storymap/Consent.ts +429 -82
- package/src/storymap/StoryMap.ts +2163 -340
- package/src/storymap/content-state.ts +180 -0
- package/src/storymap/font-css.ts +72 -0
- package/src/storymap/from-slideshow.ts +785 -0
- package/src/storymap/iiif-shared.ts +228 -0
- package/src/storymap/iiif.ts +1742 -95
- package/src/storymap/to-iiif.ts +1008 -0
- package/src/storymap/validate.ts +80 -7
- package/src/types.ts +591 -29
- package/src/ui/LayersControl.ts +302 -0
- package/src/ui/MenuBar.ts +325 -61
- package/src/ui/Message.ts +44 -2
- package/src/ui/Swipable.ts +170 -85
- 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/VCO.StoryMap.Dark.scss +0 -138
- package/src/scss/Variables.Dark.scss +0 -56
- 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/media/types/Audio.ts
CHANGED
|
@@ -1,87 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import Dom from "../../dom/Dom";
|
|
3
|
-
import { Language } from "../../language/Language";
|
|
1
|
+
import { HtmlMediaBase, type HtmlMediaKind } from "./HtmlMedia";
|
|
4
2
|
|
|
5
|
-
/* Media.
|
|
3
|
+
/* Media.Audio
|
|
4
|
+
An <audio> element with a single <source> child.
|
|
6
5
|
================================================== */
|
|
7
6
|
|
|
8
|
-
export default class Audio extends
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
// Loading Message
|
|
15
|
-
this.message.updateMessage(Language.messages.loading + " " + this.options.media_name);
|
|
16
|
-
|
|
17
|
-
// Create Dom element
|
|
18
|
-
this._el.content_item = Dom.create(
|
|
19
|
-
"audio",
|
|
20
|
-
"vco-media-item vco-media-audio vco-media-shadow",
|
|
21
|
-
this._el.content,
|
|
22
|
-
);
|
|
23
|
-
const media_item = this._el.content_item as HTMLMediaElement;
|
|
24
|
-
media_item.controls = true;
|
|
25
|
-
this._el.source_item = Dom.create("source", "", this._el.content_item);
|
|
26
|
-
const source_item = this._el.source_item as HTMLSourceElement;
|
|
27
|
-
|
|
28
|
-
// Media Loaded Event
|
|
29
|
-
media_item.addEventListener("canplay", () => {
|
|
30
|
-
this.onLoaded();
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
// Load Error Event (the source element fires it, not the media element)
|
|
34
|
-
source_item.addEventListener("error", () => {
|
|
35
|
-
this.loadErrorDisplay(Language.messages.error + " " + this.options.media_name);
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
source_item.src = this.data.url;
|
|
39
|
-
const media_type = this._getType(this.data.url, this.data.mediatype.match_str);
|
|
40
|
-
if (media_type) {
|
|
41
|
-
source_item.type = media_type;
|
|
42
|
-
}
|
|
43
|
-
// append as a text node: re-serializing innerHTML would replace the
|
|
44
|
-
// source element and drop its error listener, leaving the loading
|
|
45
|
-
// message on screen forever
|
|
46
|
-
media_item.appendChild(
|
|
47
|
-
document.createTextNode(
|
|
48
|
-
"Your browser doesn't support HTML5 audio with " + source_item.type,
|
|
49
|
-
),
|
|
50
|
-
);
|
|
51
|
-
this.player_element = media_item;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// Update Media Display
|
|
55
|
-
_updateMediaDisplay() {
|
|
56
|
-
// audio height is CSS-driven; nothing to compute here
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
_stopMedia() {
|
|
60
|
-
if (this.player_element) {
|
|
61
|
-
this.player_element.pause();
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
_getType(url: string, reg: string | RegExp) {
|
|
66
|
-
const ext = url.match(reg);
|
|
67
|
-
let type = "audio/";
|
|
68
|
-
if (!ext) {
|
|
69
|
-
return type;
|
|
70
|
-
}
|
|
71
|
-
switch (ext[1]) {
|
|
72
|
-
case "mp3":
|
|
73
|
-
type += "mpeg";
|
|
74
|
-
break;
|
|
75
|
-
case "wav":
|
|
76
|
-
type += "wav";
|
|
77
|
-
break;
|
|
78
|
-
case "m4a":
|
|
79
|
-
type += "mp4";
|
|
80
|
-
break;
|
|
81
|
-
default:
|
|
82
|
-
type = "";
|
|
83
|
-
break;
|
|
84
|
-
}
|
|
85
|
-
return type;
|
|
7
|
+
export default class Audio extends HtmlMediaBase {
|
|
8
|
+
protected spec() {
|
|
9
|
+
return {
|
|
10
|
+
kind: "audio" as HtmlMediaKind,
|
|
11
|
+
extensions: { mp3: "mpeg", wav: "wav", m4a: "mp4" },
|
|
12
|
+
};
|
|
86
13
|
}
|
|
87
14
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Media } from "../Media";
|
|
2
2
|
import Dom from "../../dom/Dom";
|
|
3
|
-
import { Language } from "../../language/Language";
|
|
4
3
|
import { sanitizeBlockquote } from "../EmbedUtil";
|
|
5
4
|
|
|
6
5
|
/* Media.Blockquote
|
|
@@ -13,7 +12,7 @@ export default class Blockquote extends Media {
|
|
|
13
12
|
================================================== */
|
|
14
13
|
_loadMedia() {
|
|
15
14
|
// Loading Message
|
|
16
|
-
this.
|
|
15
|
+
this.loadingMessage();
|
|
17
16
|
|
|
18
17
|
// Create Dom element
|
|
19
18
|
this._el.content_item = Dom.create(
|
|
@@ -23,7 +22,7 @@ export default class Blockquote extends Media {
|
|
|
23
22
|
);
|
|
24
23
|
|
|
25
24
|
// Get Media ID
|
|
26
|
-
this.media_id = this.
|
|
25
|
+
this.media_id = this._url();
|
|
27
26
|
|
|
28
27
|
// The url field holds user-pasted blockquote markup. Sanitize it
|
|
29
28
|
// instead of injecting the raw markup, which would allow stored
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
+
import { dailymotionId } from "../embedId";
|
|
1
2
|
import { Media } from "../Media";
|
|
2
3
|
import Dom from "../../dom/Dom";
|
|
3
|
-
import { Language } from "../../language/Language";
|
|
4
|
-
import { ratio } from "../../core/Util";
|
|
5
4
|
|
|
6
5
|
/* Media.DailyMotion
|
|
7
6
|
================================================== */
|
|
@@ -13,7 +12,7 @@ export default class DailyMotion extends Media {
|
|
|
13
12
|
================================================== */
|
|
14
13
|
_loadMedia() {
|
|
15
14
|
// Loading Message
|
|
16
|
-
this.
|
|
15
|
+
this.loadingMessage();
|
|
17
16
|
|
|
18
17
|
// Create Dom element
|
|
19
18
|
this._el.content_item = Dom.create(
|
|
@@ -23,13 +22,10 @@ export default class DailyMotion extends Media {
|
|
|
23
22
|
);
|
|
24
23
|
|
|
25
24
|
// Get Media ID
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
: this.data.url.split("embed/")[1];
|
|
29
|
-
if (!id) {
|
|
25
|
+
this.media_id = dailymotionId(this._url()) ?? "";
|
|
26
|
+
if (!this.media_id) {
|
|
30
27
|
throw new Error("Invalid DailyMotion URL");
|
|
31
28
|
}
|
|
32
|
-
this.media_id = id.split(/[?&]/)[0];
|
|
33
29
|
|
|
34
30
|
// API URL
|
|
35
31
|
const api_url =
|
|
@@ -47,8 +43,7 @@ export default class DailyMotion extends Media {
|
|
|
47
43
|
|
|
48
44
|
// Update Media Display
|
|
49
45
|
_updateMediaDisplay() {
|
|
50
|
-
this.
|
|
51
|
-
ratio.r16_9({ w: this._el.content_item.offsetWidth }) + "px";
|
|
46
|
+
this._sizeContentItemTo16x9();
|
|
52
47
|
}
|
|
53
48
|
|
|
54
49
|
_stopMedia() {
|
|
@@ -1,41 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import Dom from "../../dom/Dom";
|
|
3
|
-
import { Language } from "../../language/Language";
|
|
4
|
-
import { validateWebURL } from "../EmbedUtil";
|
|
1
|
+
import { WebsiteBase } from "./Website";
|
|
5
2
|
|
|
6
3
|
/* Media.DocumentCloud
|
|
7
|
-
Embeds a DocumentCloud document viewer (issue #437)
|
|
4
|
+
Embeds a DocumentCloud document viewer (issue #437) — the same iframe
|
|
5
|
+
embed as the website type, with its own CSS class.
|
|
8
6
|
================================================= */
|
|
9
7
|
|
|
10
|
-
export default class DocumentCloud extends
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
_loadMedia() {
|
|
14
|
-
// Loading Message
|
|
15
|
-
this.message.updateMessage(Language.messages.loading + " " + this.options.media_name);
|
|
16
|
-
|
|
17
|
-
// Create Dom element
|
|
18
|
-
this._el.content_item = Dom.create(
|
|
19
|
-
"div",
|
|
20
|
-
"vco-media-item vco-media-iframe vco-media-documentcloud",
|
|
21
|
-
this._el.content,
|
|
22
|
-
);
|
|
23
|
-
|
|
24
|
-
// the canonical document URL renders the standalone viewer; rebuilt
|
|
25
|
-
// from a validated src to keep stored XSS out of the storymap JSON
|
|
26
|
-
const src = validateWebURL(this.data.url);
|
|
27
|
-
if (!src) {
|
|
28
|
-
this.loadErrorDisplay("Invalid URL.");
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
const iframe = document.createElement("iframe");
|
|
32
|
-
iframe.setAttribute("src", src);
|
|
33
|
-
this._el.content_item.appendChild(iframe);
|
|
34
|
-
this.onLoaded();
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// Update Media Display
|
|
38
|
-
_updateMediaDisplay() {
|
|
39
|
-
this._el.content_item.style.height = this.options.height + "px";
|
|
8
|
+
export default class DocumentCloud extends WebsiteBase {
|
|
9
|
+
protected extraClass(): string {
|
|
10
|
+
return "vco-media-documentcloud";
|
|
40
11
|
}
|
|
41
12
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Media } from "../Media";
|
|
2
2
|
import Dom from "../../dom/Dom";
|
|
3
|
-
import { Language } from "../../language/Language";
|
|
4
3
|
|
|
5
4
|
/* Media.Facebook
|
|
6
5
|
Embeds a Facebook post, video or reel via the plugins endpoint
|
|
@@ -12,7 +11,7 @@ export default class Facebook extends Media {
|
|
|
12
11
|
================================================== */
|
|
13
12
|
_loadMedia() {
|
|
14
13
|
// Loading Message
|
|
15
|
-
this.
|
|
14
|
+
this.loadingMessage();
|
|
16
15
|
|
|
17
16
|
// Create Dom element
|
|
18
17
|
this._el.content_item = Dom.create(
|
|
@@ -21,7 +20,7 @@ export default class Facebook extends Media {
|
|
|
21
20
|
this._el.content,
|
|
22
21
|
);
|
|
23
22
|
|
|
24
|
-
const url = this.
|
|
23
|
+
const url = this._url();
|
|
25
24
|
const href = encodeURIComponent(url);
|
|
26
25
|
const embed =
|
|
27
26
|
/\/videos?\//.test(url) || /\/watch/.test(url) || /\/reel\//.test(url)
|
|
@@ -36,6 +35,6 @@ export default class Facebook extends Media {
|
|
|
36
35
|
|
|
37
36
|
// Update Media Display
|
|
38
37
|
_updateMediaDisplay() {
|
|
39
|
-
this.
|
|
38
|
+
this._sizeContentItemToOptionHeight();
|
|
40
39
|
}
|
|
41
40
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { flickrId } from "../embedId";
|
|
1
2
|
import { Media } from "../Media";
|
|
2
3
|
import Dom from "../../dom/Dom";
|
|
3
|
-
import { Language } from "../../language/Language";
|
|
4
4
|
|
|
5
5
|
/* Media.Flickr
|
|
6
6
|
|
|
@@ -8,12 +8,14 @@ import { Language } from "../../language/Language";
|
|
|
8
8
|
|
|
9
9
|
export default class Flickr extends Media {
|
|
10
10
|
declare "media_id": string;
|
|
11
|
+
/** The `load` handler on the image, stored so dispose() can detach it. */
|
|
12
|
+
declare "_onLoad": (() => void) | null;
|
|
11
13
|
|
|
12
14
|
/* Load the media
|
|
13
15
|
================================================== */
|
|
14
16
|
_loadMedia() {
|
|
15
17
|
// Loading Message
|
|
16
|
-
this.
|
|
18
|
+
this.loadingMessage();
|
|
17
19
|
|
|
18
20
|
// Create Dom element
|
|
19
21
|
this._el.content_item = Dom.create(
|
|
@@ -22,10 +24,12 @@ export default class Flickr extends Media {
|
|
|
22
24
|
this._el.content,
|
|
23
25
|
);
|
|
24
26
|
|
|
25
|
-
// Media Loaded Event
|
|
26
|
-
|
|
27
|
+
// Media Loaded Event. The reference is kept so dispose() can detach
|
|
28
|
+
// it: an inline arrow function has no other handle.
|
|
29
|
+
this._onLoad = () => {
|
|
27
30
|
this.onMediaLoaded();
|
|
28
|
-
}
|
|
31
|
+
};
|
|
32
|
+
this._el.content_item.addEventListener("load", this._onLoad);
|
|
29
33
|
|
|
30
34
|
// Get Media ID
|
|
31
35
|
this.establishMediaID();
|
|
@@ -55,18 +59,18 @@ export default class Flickr extends Media {
|
|
|
55
59
|
}
|
|
56
60
|
|
|
57
61
|
establishMediaID() {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
+
// threw a bare string (not an Error) and could assign `undefined` when
|
|
63
|
+
// the URL had the host but no photo segment
|
|
64
|
+
const id = flickrId(this._url());
|
|
65
|
+
if (!id) {
|
|
66
|
+
throw new Error("Invalid Flickr URL");
|
|
62
67
|
}
|
|
63
|
-
|
|
64
|
-
this.media_id = this.data.url.slice(pos).split("/")[1];
|
|
68
|
+
this.media_id = id;
|
|
65
69
|
}
|
|
66
70
|
|
|
67
71
|
createMedia(d: unknown) {
|
|
68
72
|
const data = d as { sizes: { size: { label: string; source: string }[] } };
|
|
69
|
-
const best_size = this.sizes(this.options.height);
|
|
73
|
+
const best_size = this.sizes(Number(this.options.height ?? 0));
|
|
70
74
|
const sizes = data?.sizes?.size;
|
|
71
75
|
if (!sizes || !sizes.length) {
|
|
72
76
|
this.loadErrorDisplay("Photo not found or private.");
|
|
@@ -112,4 +116,11 @@ export default class Flickr extends Media {
|
|
|
112
116
|
|
|
113
117
|
return _size;
|
|
114
118
|
}
|
|
119
|
+
|
|
120
|
+
_disposeMedia(): void {
|
|
121
|
+
if (this._onLoad) {
|
|
122
|
+
this._el.content_item?.removeEventListener("load", this._onLoad);
|
|
123
|
+
this._onLoad = null;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
115
126
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Media } from "../Media";
|
|
2
2
|
import Dom from "../../dom/Dom";
|
|
3
|
-
import { Language } from "../../language/Language";
|
|
4
3
|
import { validateWebURL } from "../EmbedUtil";
|
|
5
4
|
|
|
6
5
|
/* Media.GoogleDoc
|
|
@@ -14,7 +13,7 @@ export default class GoogleDoc extends Media {
|
|
|
14
13
|
================================================== */
|
|
15
14
|
_loadMedia() {
|
|
16
15
|
// Loading Message
|
|
17
|
-
this.
|
|
16
|
+
this.loadingMessage();
|
|
18
17
|
|
|
19
18
|
// Create Dom element
|
|
20
19
|
this._el.content_item = Dom.create(
|
|
@@ -24,7 +23,7 @@ export default class GoogleDoc extends Media {
|
|
|
24
23
|
);
|
|
25
24
|
|
|
26
25
|
// Get Media ID
|
|
27
|
-
this.media_id = this.
|
|
26
|
+
this.media_id = this._url();
|
|
28
27
|
|
|
29
28
|
// Rebuild a clean iframe from a validated src: injecting the raw
|
|
30
29
|
// URL into markup would allow stored XSS via the storymap JSON
|
|
@@ -54,6 +53,6 @@ export default class GoogleDoc extends Media {
|
|
|
54
53
|
|
|
55
54
|
// Update Media Display
|
|
56
55
|
_updateMediaDisplay() {
|
|
57
|
-
this.
|
|
56
|
+
this._sizeContentItemToOptionHeight();
|
|
58
57
|
}
|
|
59
58
|
}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { Media } from "../Media";
|
|
2
|
+
import Dom from "../../dom/Dom";
|
|
3
|
+
import { Language } from "../../language/Language";
|
|
4
|
+
|
|
5
|
+
/* Media.HtmlMedia
|
|
6
|
+
Shared implementation for the <audio> and <video> types. The two differ
|
|
7
|
+
only in the element name, the CSS class, the fallback text and the
|
|
8
|
+
file extension -> MIME map, so all of that is data here.
|
|
9
|
+
================================================== */
|
|
10
|
+
|
|
11
|
+
/** The element this media type plays. */
|
|
12
|
+
export type HtmlMediaKind = "audio" | "video";
|
|
13
|
+
|
|
14
|
+
interface HtmlMediaSpec {
|
|
15
|
+
/** The element to create. */
|
|
16
|
+
kind: HtmlMediaKind;
|
|
17
|
+
/** File extension (lowercase, no dot) -> MIME subtype. */
|
|
18
|
+
extensions: Record<string, string>;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const AUDIO_DEFAULT: HtmlMediaSpec = { kind: "audio", extensions: { mp3: "mpeg" } };
|
|
22
|
+
|
|
23
|
+
/** MIME subtype for a file extension, or "" when it is not recognised. */
|
|
24
|
+
function mimeSubtype(ext: string, spec: HtmlMediaSpec): string {
|
|
25
|
+
return spec.extensions[ext.toLowerCase()] ?? "";
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** The behaviour shared by the audio and video media types. */
|
|
29
|
+
export class HtmlMediaBase extends Media {
|
|
30
|
+
declare "player_element": HTMLMediaElement | null;
|
|
31
|
+
declare "_onCanPlay": (() => void) | null;
|
|
32
|
+
declare "_onEnded": (() => void) | null;
|
|
33
|
+
declare "_onSourceError": (() => void) | null;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The per-kind differences. Overridden by the Audio/Video subclasses; the
|
|
37
|
+
* base value is never used (an HtmlMediaBase is always subclassed).
|
|
38
|
+
*/
|
|
39
|
+
protected spec(): HtmlMediaSpec {
|
|
40
|
+
return AUDIO_DEFAULT;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
_loadMedia() {
|
|
44
|
+
const spec = this.spec();
|
|
45
|
+
this.loadingMessage();
|
|
46
|
+
|
|
47
|
+
const media_item = Dom.create(
|
|
48
|
+
spec.kind,
|
|
49
|
+
`vco-media-item vco-media-${spec.kind} vco-media-shadow`,
|
|
50
|
+
this._el.content,
|
|
51
|
+
) as HTMLMediaElement;
|
|
52
|
+
this._el.content_item = media_item;
|
|
53
|
+
media_item.controls = true;
|
|
54
|
+
const captionText =
|
|
55
|
+
typeof this.data.caption === "string"
|
|
56
|
+
? this.data.caption
|
|
57
|
+
.replace(/<[^>]*>/g, " ")
|
|
58
|
+
.replace(/\s+/g, " ")
|
|
59
|
+
.trim()
|
|
60
|
+
: "";
|
|
61
|
+
const mediaName =
|
|
62
|
+
typeof this.options.media_name === "string" ? this.options.media_name : "";
|
|
63
|
+
media_item.setAttribute(
|
|
64
|
+
"aria-label",
|
|
65
|
+
captionText || mediaName || (spec.kind === "audio" ? "Audio" : "Video"),
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
const source_item = Dom.create("source", "", media_item) as HTMLSourceElement;
|
|
69
|
+
this._el.source_item = source_item;
|
|
70
|
+
|
|
71
|
+
// Media Loaded Event. The references are kept so dispose() can detach
|
|
72
|
+
// them: an inline arrow function has no other handle.
|
|
73
|
+
this._onEnded = null;
|
|
74
|
+
// Playback flags (slideshow audio terms): loop repeats, offset seeks
|
|
75
|
+
// once the metadata is available, play:"auto" starts on load
|
|
76
|
+
// (absent stays click-to-play with controls, as before). Slideshow
|
|
77
|
+
// tours only — internal documents ignore the bag even when present.
|
|
78
|
+
const sourced = (this.options as { slideshow_source?: unknown }).slideshow_source === true;
|
|
79
|
+
const bag = (
|
|
80
|
+
sourced
|
|
81
|
+
? this.data
|
|
82
|
+
: ({} as {
|
|
83
|
+
loop?: boolean;
|
|
84
|
+
offset?: number;
|
|
85
|
+
play?: string;
|
|
86
|
+
})
|
|
87
|
+
) as {
|
|
88
|
+
loop?: boolean;
|
|
89
|
+
offset?: number;
|
|
90
|
+
play?: string;
|
|
91
|
+
};
|
|
92
|
+
media_item.loop = bag.loop === true;
|
|
93
|
+
const offset =
|
|
94
|
+
typeof bag.offset === "number" && Number.isFinite(bag.offset) && bag.offset > 0
|
|
95
|
+
? bag.offset
|
|
96
|
+
: 0;
|
|
97
|
+
const seek = () => {
|
|
98
|
+
if (offset <= 0) return;
|
|
99
|
+
try {
|
|
100
|
+
media_item.currentTime = offset;
|
|
101
|
+
} catch {
|
|
102
|
+
// pre-metadata seek throws in some browsers; canplay retries
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
const autoplay = bag.play === "auto";
|
|
106
|
+
this._onCanPlay = () => {
|
|
107
|
+
seek();
|
|
108
|
+
if (autoplay) {
|
|
109
|
+
void media_item.play()?.catch?.(() => {
|
|
110
|
+
// autoplay policy or missing gesture: controls stay for
|
|
111
|
+
// the visitor, like a click-armed slide
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
this.onLoaded();
|
|
115
|
+
};
|
|
116
|
+
// offset with metadata already present (cached media): seek now too
|
|
117
|
+
if (offset > 0) {
|
|
118
|
+
if (media_item.readyState >= 1) {
|
|
119
|
+
seek();
|
|
120
|
+
} else {
|
|
121
|
+
media_item.addEventListener(
|
|
122
|
+
"loadedmetadata",
|
|
123
|
+
() => {
|
|
124
|
+
seek();
|
|
125
|
+
},
|
|
126
|
+
{ once: true },
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
media_item.addEventListener("canplay", this._onCanPlay);
|
|
131
|
+
|
|
132
|
+
// Load Error Event (the source element fires it, not the media element)
|
|
133
|
+
this._onSourceError = () => {
|
|
134
|
+
this.loadErrorDisplay(Language.messages.error + " " + this.options.media_name);
|
|
135
|
+
};
|
|
136
|
+
source_item.addEventListener("error", this._onSourceError);
|
|
137
|
+
|
|
138
|
+
const url = this._url();
|
|
139
|
+
source_item.src = url;
|
|
140
|
+
const media_type = this._getType(url, spec);
|
|
141
|
+
// An unrecognised extension leaves the type unset so the browser can
|
|
142
|
+
// work it out from the URL — setting a bare "audio/" (as this used to)
|
|
143
|
+
// is not a valid MIME type and makes the source fail outright.
|
|
144
|
+
if (media_type) {
|
|
145
|
+
source_item.type = media_type;
|
|
146
|
+
}
|
|
147
|
+
// Subtitles: a WebVTT track, opt-in via media.subtitles. The element
|
|
148
|
+
// is created before the fallback text node so the fallback stays last.
|
|
149
|
+
if (spec.kind === "video" || spec.kind === "audio") {
|
|
150
|
+
const subtitles = (this.data as { subtitles?: string | null }).subtitles;
|
|
151
|
+
if (typeof subtitles === "string" && subtitles !== "") {
|
|
152
|
+
const track = Dom.create(
|
|
153
|
+
"track",
|
|
154
|
+
"vco-media-track",
|
|
155
|
+
media_item,
|
|
156
|
+
) as HTMLTrackElement;
|
|
157
|
+
track.kind = "subtitles";
|
|
158
|
+
track.srclang = "en";
|
|
159
|
+
track.label = "Subtitles";
|
|
160
|
+
track.src = subtitles;
|
|
161
|
+
track.default = true;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// append as a text node: re-serializing innerHTML would replace the
|
|
166
|
+
// source element and drop its error listener, leaving the loading
|
|
167
|
+
// message on screen forever
|
|
168
|
+
media_item.appendChild(
|
|
169
|
+
document.createTextNode(
|
|
170
|
+
`Your browser doesn't support HTML5 ${spec.kind} with ` + source_item.type,
|
|
171
|
+
),
|
|
172
|
+
);
|
|
173
|
+
|
|
174
|
+
// `ended` is what autoplay_media waits for instead of its timer; the
|
|
175
|
+
// reference is kept so dispose() can detach it, like the two above
|
|
176
|
+
this._onEnded = () => {
|
|
177
|
+
this.fire("media_ended", this.data);
|
|
178
|
+
};
|
|
179
|
+
media_item.addEventListener("ended", this._onEnded);
|
|
180
|
+
|
|
181
|
+
this.player_element = media_item;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// Update Media Display
|
|
185
|
+
_updateMediaDisplay() {
|
|
186
|
+
// the height is CSS-driven; nothing to compute here
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
_stopMedia() {
|
|
190
|
+
this.player_element?.pause();
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Detach the media listeners and release the source, so a disposed audio
|
|
195
|
+
* or video element stops buffering instead of playing into a detached
|
|
196
|
+
* tree. Pausing alone (what `stopMedia()` does per slide change) is not
|
|
197
|
+
* enough for a full teardown.
|
|
198
|
+
*/
|
|
199
|
+
_disposeMedia() {
|
|
200
|
+
if (this._onCanPlay) {
|
|
201
|
+
this.player_element?.removeEventListener("canplay", this._onCanPlay);
|
|
202
|
+
this._onCanPlay = null;
|
|
203
|
+
}
|
|
204
|
+
if (this._onEnded) {
|
|
205
|
+
this.player_element?.removeEventListener("ended", this._onEnded);
|
|
206
|
+
this._onEnded = null;
|
|
207
|
+
}
|
|
208
|
+
if (this._onSourceError) {
|
|
209
|
+
this._el.source_item?.removeEventListener("error", this._onSourceError);
|
|
210
|
+
this._onSourceError = null;
|
|
211
|
+
}
|
|
212
|
+
const el = this.player_element;
|
|
213
|
+
if (el) {
|
|
214
|
+
el.pause();
|
|
215
|
+
// dropping the source stops the network fetch immediately
|
|
216
|
+
el.removeAttribute("src");
|
|
217
|
+
el.load();
|
|
218
|
+
}
|
|
219
|
+
this.player_element = null;
|
|
220
|
+
|
|
221
|
+
this._onCanPlay = null;
|
|
222
|
+
|
|
223
|
+
this._onSourceError = null;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
_getType(url: string, spec: HtmlMediaSpec): string {
|
|
227
|
+
const ext = url.match((this.data.mediatype as { match_str: string | RegExp }).match_str);
|
|
228
|
+
if (!ext) {
|
|
229
|
+
return "";
|
|
230
|
+
}
|
|
231
|
+
return mimeSubtype(ext[1], spec);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Media } from "../Media";
|
|
2
2
|
import Dom from "../../dom/Dom";
|
|
3
|
-
import { Language } from "../../language/Language";
|
|
4
3
|
import { buildIframe } from "../EmbedUtil";
|
|
5
4
|
|
|
6
5
|
/* Media.IFrame
|
|
@@ -13,7 +12,7 @@ export default class IFrame extends Media {
|
|
|
13
12
|
================================================== */
|
|
14
13
|
_loadMedia() {
|
|
15
14
|
// Loading Message
|
|
16
|
-
this.
|
|
15
|
+
this.loadingMessage();
|
|
17
16
|
|
|
18
17
|
// Create Dom element
|
|
19
18
|
this._el.content_item = Dom.create(
|
|
@@ -23,7 +22,7 @@ export default class IFrame extends Media {
|
|
|
23
22
|
);
|
|
24
23
|
|
|
25
24
|
// Get Media ID
|
|
26
|
-
this.media_id = this.
|
|
25
|
+
this.media_id = this._url();
|
|
27
26
|
|
|
28
27
|
// The url field holds a user-pasted embed snippet. Rebuild a
|
|
29
28
|
// clean iframe from its src instead of injecting the raw markup,
|
|
@@ -46,6 +45,6 @@ export default class IFrame extends Media {
|
|
|
46
45
|
|
|
47
46
|
// Update Media Display
|
|
48
47
|
_updateMediaDisplay() {
|
|
49
|
-
this.
|
|
48
|
+
this._sizeContentItemToOptionHeight();
|
|
50
49
|
}
|
|
51
50
|
}
|