fix polyfills, add ie11 support

master
Hakim El Hattab 2020-05-26 09:46:50 +02:00
parent b074050a6d
commit e6244a57b5
17 changed files with 129 additions and 142 deletions

2
dist/reveal.esm.js vendored

File diff suppressed because one or more lines are too long

2
dist/reveal.js vendored

File diff suppressed because one or more lines are too long

View File

@ -7,9 +7,9 @@ const qunit = require('node-qunit-puppeteer')
const {rollup} = require('rollup') const {rollup} = require('rollup')
const {terser} = require('rollup-plugin-terser') const {terser} = require('rollup-plugin-terser')
const babel = require('rollup-plugin-babel') const babel = require('@rollup/plugin-babel').default
const commonjs = require('@rollup/plugin-commonjs') const commonjs = require('@rollup/plugin-commonjs')
const resolve = require('@rollup/plugin-node-resolve') const resolve = require('@rollup/plugin-node-resolve').default
const gulp = require('gulp') const gulp = require('gulp')
const tap = require('gulp-tap') const tap = require('gulp-tap')
@ -36,42 +36,35 @@ const banner = `/*!
process.setMaxListeners(20); process.setMaxListeners(20);
const babelConfig = { const babelConfig = {
exclude: 'node_modules/**', babelHelpers: 'bundled',
ignore: ['node_modules'],
compact: false, compact: false,
extensions: ['.js', '.html'], extensions: ['.js', '.html'],
plugins: ['transform-html-import-to-string'], plugins: [
'transform-html-import-to-string'
],
presets: [[ presets: [[
'@babel/preset-env', '@babel/preset-env',
{ {
corejs: 3, corejs: 3,
useBuiltIns: 'entry', useBuiltIns: 'usage',
modules: false modules: false
} }
]] ]]
}; };
const rollupConfig = { // Our ES module bundle only targets newer browsers with
plugins: [ // module support. Browsers are targeted explicitly instead
babel( babelConfig ), // of using the "esmodule: true" target since that leads to
resolve(), // polyfilling older browsers and a larger bundle.
commonjs(),
terser()
]
};
// Our ES module bundle only needs to support modern
// browser features
const babelConfigESM = JSON.parse( JSON.stringify( babelConfig ) ); const babelConfigESM = JSON.parse( JSON.stringify( babelConfig ) );
babelConfigESM.presets[0][1].targets = { esmodules: true }; babelConfigESM.presets[0][1].targets = { browsers: [
'last 2 Chrome versions', 'not Chrome < 60',
const rollupConfigESM = { 'last 2 Safari versions', 'not Safari < 10.1',
plugins: [ 'last 2 iOS versions', 'not iOS < 10.3',
babel( babelConfigESM ), 'last 2 Firefox versions', 'not Firefox < 60',
resolve(), 'last 2 Edge versions', 'not Edge < 16',
commonjs(), ] };
terser()
]
};
let rollupCache; let rollupCache;
@ -81,7 +74,12 @@ gulp.task('js-es5', () => {
return rollup({ return rollup({
cache: rollupCache, cache: rollupCache,
input: 'js/index.js', input: 'js/index.js',
...rollupConfig plugins: [
resolve(),
commonjs(),
babel( babelConfig ),
terser()
]
}).then( bundle => { }).then( bundle => {
rollupCache = bundle.cache; rollupCache = bundle.cache;
return bundle.write({ return bundle.write({
@ -99,7 +97,12 @@ gulp.task('js-es6', () => {
return rollup({ return rollup({
cache: rollupCache, cache: rollupCache,
input: 'js/index.js', input: 'js/index.js',
...rollupConfigESM plugins: [
resolve(),
commonjs(),
babel( babelConfigESM ),
terser()
]
}).then( bundle => { }).then( bundle => {
rollupCache = bundle.cache; rollupCache = bundle.cache;
return bundle.write({ return bundle.write({
@ -125,7 +128,15 @@ gulp.task('plugins', () => {
].map( plugin => { ].map( plugin => {
return rollup({ return rollup({
input: plugin.input, input: plugin.input,
...rollupConfig plugins: [
resolve(),
commonjs(),
babel({
...babelConfig,
ignore: [/node_modules\/(?!(highlight\.js|marked)\/).*/],
}),
terser()
]
}).then( bundle => { }).then( bundle => {
bundle.write({ bundle.write({
file: plugin.output + '.esm.js', file: plugin.output + '.esm.js',

View File

@ -1,4 +1,4 @@
import { queryAll, extend, createStyleSheet } from '../utils/util.js' import { queryAll, extend, createStyleSheet, matchesSelector } from '../utils/util.js'
import { FRAGMENT_STYLE_REGEX } from '../utils/constants.js' import { FRAGMENT_STYLE_REGEX } from '../utils/constants.js'
// Counter used to generate unique IDs for auto-animated elements // Counter used to generate unique IDs for auto-animated elements
@ -463,11 +463,11 @@ export default class AutoAnimate {
// Disable scale transformations on text nodes, we transiition // Disable scale transformations on text nodes, we transiition
// each individual text property instead // each individual text property instead
if( pair.from.matches( textNodes ) ) { if( matchesSelector( pair.from, textNodes ) ) {
pair.options = { scale: false }; pair.options = { scale: false };
} }
// Animate individual lines of code // Animate individual lines of code
else if( pair.from.matches( codeNodes ) ) { else if( matchesSelector( pair.from, codeNodes ) ) {
// Transition the code block's width and height instead of scaling // Transition the code block's width and height instead of scaling
// to prevent its content from being squished // to prevent its content from being squished

View File

@ -1489,7 +1489,10 @@ export default function( revealElement, options ) {
let reverse = config.rtl && !isVerticalSlide( element ); let reverse = config.rtl && !isVerticalSlide( element );
element.classList.remove( 'past', 'present', 'future' ); // Avoid .remove() with multiple args for IE11 support
element.classList.remove( 'past' );
element.classList.remove( 'present' );
element.classList.remove( 'future' );
// http://www.w3.org/html/wg/drafts/html/master/editing.html#the-hidden-attribute // http://www.w3.org/html/wg/drafts/html/master/editing.html#the-hidden-attribute
element.setAttribute( 'hidden', '' ); element.setAttribute( 'hidden', '' );

View File

@ -85,6 +85,27 @@ export const transformElement = ( element, transform ) => {
} }
/**
* Element.matches with IE support.
*
* @param {HTMLElement} target The element to match
* @param {String} selector The CSS selector to match
* the element against
*
* @return {Boolean}
*/
export const matchesSelector = ( target, selector ) => {
// There's some overhead doing this each time, we don't
// want to rewrite the element prototype but should still
// be enough to feature detect once at startup...
let matchesMethod = parent.matches || parent.matchesSelector || parent.msMatchesSelector;
// If we find a match, we're all set
return !!( matchesMethod && matchesMethod.call( target, selector ) );
}
/** /**
* Find the closest parent that matches the given * Find the closest parent that matches the given
* selector. * selector.
@ -102,13 +123,8 @@ export const closestParent = ( target, selector ) => {
while( parent ) { while( parent ) {
// There's some overhead doing this each time, we don't
// want to rewrite the element prototype but should still
// be enough to feature detect once at startup...
let matchesMethod = parent.matches || parent.matchesSelector || parent.msMatchesSelector;
// If we find a match, we're all set // If we find a match, we're all set
if( matchesMethod && matchesMethod.call( parent, selector ) ) { if( matchesSelector( parent, selector ) ) {
return parent; return parent;
} }

113
package-lock.json generated
View File

@ -1,6 +1,6 @@
{ {
"name": "reveal.js", "name": "reveal.js",
"version": "4.0.0-rc.1", "version": "4.0.1",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
@ -1065,10 +1065,20 @@
"to-fast-properties": "^2.0.0" "to-fast-properties": "^2.0.0"
} }
}, },
"@rollup/plugin-babel": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.0.2.tgz",
"integrity": "sha512-GiL7jL+FGppzQ1Sn4y2ER4UYXlgXFFEt+sHm4WJEzQwI76Yf9oy2QDqIvcon6xApZWlik3L8fezRGC6Mj2vRXg==",
"dev": true,
"requires": {
"@babel/helper-module-imports": "^7.7.4",
"@rollup/pluginutils": "^3.0.8"
}
},
"@rollup/plugin-commonjs": { "@rollup/plugin-commonjs": {
"version": "11.1.0", "version": "12.0.0",
"resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-11.1.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-12.0.0.tgz",
"integrity": "sha512-Ycr12N3ZPN96Fw2STurD21jMqzKwL9QuFhms3SD7KKRK7oaXUsBU9Zt0jL/rOPHiPYisI21/rXGO3jr9BnLHUA==", "integrity": "sha512-8+mDQt1QUmN+4Y9D3yCG8AJNewuTSLYPJVzKKUZ+lGeQrI+bV12Tc5HCyt2WdlnG6ihIL/DPbKRJlB40DX40mw==",
"dev": true, "dev": true,
"requires": { "requires": {
"@rollup/pluginutils": "^3.0.8", "@rollup/pluginutils": "^3.0.8",
@ -1081,72 +1091,29 @@
} }
}, },
"@rollup/plugin-node-resolve": { "@rollup/plugin-node-resolve": {
"version": "7.1.3", "version": "8.0.0",
"resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-8.0.0.tgz",
"integrity": "sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q==", "integrity": "sha512-5poJCChrkVggXXND/sQ7yNqwjUNT4fP31gpRWCnSNnlXuUXTCMHT33xZrTGxgjm5Rl18MHj7iEzlCT8rYWwQSA==",
"dev": true, "dev": true,
"requires": { "requires": {
"@rollup/pluginutils": "^3.0.8", "@rollup/pluginutils": "^3.0.8",
"@types/resolve": "0.0.8", "@types/resolve": "0.0.8",
"builtin-modules": "^3.1.0", "builtin-modules": "^3.1.0",
"deep-freeze": "^0.0.1",
"deepmerge": "^4.2.2",
"is-module": "^1.0.0", "is-module": "^1.0.0",
"resolve": "^1.14.2" "resolve": "^1.14.2"
} }
}, },
"@rollup/pluginutils": { "@rollup/pluginutils": {
"version": "3.0.9", "version": "3.0.10",
"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.0.9.tgz", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.0.10.tgz",
"integrity": "sha512-TLZavlfPAZYI7v33wQh4mTP6zojne14yok3DNSLcjoG/Hirxfkonn6icP5rrNWRn8nZsirJBFFpijVOJzkUHDg==", "integrity": "sha512-d44M7t+PjmMrASHbhgpSbVgtL6EFyX7J4mYxwQ/c5eoaE6N2VgCgEcWVzNnwycIloti+/MpwFr8qfw+nRw00sw==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/estree": "0.0.39", "@types/estree": "0.0.39",
"estree-walker": "^1.0.1", "estree-walker": "^1.0.1",
"micromatch": "^4.0.2" "picomatch": "^2.2.2"
},
"dependencies": {
"braces": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
"requires": {
"fill-range": "^7.0.1"
}
},
"fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dev": true,
"requires": {
"to-regex-range": "^5.0.1"
}
},
"is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true
},
"micromatch": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
"integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
"dev": true,
"requires": {
"braces": "^3.0.1",
"picomatch": "^2.0.5"
}
},
"to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"requires": {
"is-number": "^7.0.0"
}
}
} }
}, },
"@types/color-name": { "@types/color-name": {
@ -1168,9 +1135,9 @@
"dev": true "dev": true
}, },
"@types/node": { "@types/node": {
"version": "13.13.4", "version": "14.0.5",
"resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.4.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.5.tgz",
"integrity": "sha512-x26ur3dSXgv5AwKS0lNfbjpCakGIduWU1DU91Zz58ONRWrIKGunmZBNv4P7N+e27sJkiGDsw/3fT4AtsqQBrBA==", "integrity": "sha512-90hiq6/VqtQgX8Sp0EzeIsv3r+ellbGj4URKj5j30tLlZvRUpnAe9YbYnjl3pJM93GyXU0tghHhvXHq+5rnCKA==",
"dev": true "dev": true
}, },
"@types/resolve": { "@types/resolve": {
@ -2278,12 +2245,24 @@
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
"dev": true "dev": true
}, },
"deep-freeze": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz",
"integrity": "sha1-OgsABd4YZygZ39OM0x+RF5yJPoQ=",
"dev": true
},
"deep-is": { "deep-is": {
"version": "0.1.3", "version": "0.1.3",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
"integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
"dev": true "dev": true
}, },
"deepmerge": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
"integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
"dev": true
},
"default-compare": { "default-compare": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz",
@ -6448,9 +6427,9 @@
} }
}, },
"rollup": { "rollup": {
"version": "2.10.4", "version": "2.10.9",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.10.4.tgz", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.10.9.tgz",
"integrity": "sha512-aYvoYjeu9DwrUTEfRlHiugW1eoHz7EGxETaOISpw+zkH9oOaQLO85eG+14ky4vyYgi3mUofbpWJgb+yLBE0PKw==", "integrity": "sha512-dY/EbjiWC17ZCUSyk14hkxATAMAShkMsD43XmZGWjLrgFj15M3Dw2kEkA9ns64BiLFm9PKN6vTQw8neHwK74eg==",
"dev": true, "dev": true,
"requires": { "requires": {
"fsevents": "~2.1.2" "fsevents": "~2.1.2"
@ -6465,16 +6444,6 @@
} }
} }
}, },
"rollup-plugin-babel": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz",
"integrity": "sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==",
"dev": true,
"requires": {
"@babel/helper-module-imports": "^7.0.0",
"rollup-pluginutils": "^2.8.1"
}
},
"rollup-plugin-terser": { "rollup-plugin-terser": {
"version": "5.3.0", "version": "5.3.0",
"resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.0.tgz", "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.0.tgz",

View File

@ -32,8 +32,9 @@
"devDependencies": { "devDependencies": {
"@babel/core": "^7.9.6", "@babel/core": "^7.9.6",
"@babel/preset-env": "^7.9.6", "@babel/preset-env": "^7.9.6",
"@rollup/plugin-commonjs": "^11.1.0", "@rollup/plugin-babel": "^5.0.2",
"@rollup/plugin-node-resolve": "^7.1.3", "@rollup/plugin-commonjs": "^12.0.0",
"@rollup/plugin-node-resolve": "^8.0.0",
"babel-eslint": "^10.1.0", "babel-eslint": "^10.1.0",
"babel-plugin-transform-html-import-to-string": "0.0.1", "babel-plugin-transform-html-import-to-string": "0.0.1",
"colors": "^1.4.0", "colors": "^1.4.0",
@ -52,8 +53,7 @@
"marked": "^1.1.0", "marked": "^1.1.0",
"node-qunit-puppeteer": "^2.0.1", "node-qunit-puppeteer": "^2.0.1",
"qunit": "^2.10.0", "qunit": "^2.10.0",
"rollup": "^2.10.4", "rollup": "^2.10.9",
"rollup-plugin-babel": "^4.4.0",
"rollup-plugin-terser": "^5.3.0", "rollup-plugin-terser": "^5.3.0",
"yargs": "^15.1.0" "yargs": "^15.1.0"
}, },

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
import speakerViewHTML from './speaker-view.html'; import speakerViewHTML from './speaker-view.html';
import marked from 'marked' import marked from 'marked';
/** /**
* Handles opening of and synchronization with the reveal.js * Handles opening of and synchronization with the reveal.js

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long