瀏覽代碼

fix polyfills, add ie11 support

Hakim El Hattab 5 年之前
父節點
當前提交
e6244a57b5

文件差異過大導致無法顯示
+ 0 - 0
dist/reveal.esm.js


文件差異過大導致無法顯示
+ 0 - 0
dist/reveal.js


+ 40 - 29
gulpfile.js

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

+ 3 - 3
js/controllers/autoanimate.js

@@ -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'
 
 // 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
 			// each individual text property instead
-			if( pair.from.matches( textNodes ) ) {
+			if( matchesSelector( pair.from, textNodes ) ) {
 				pair.options = { scale: false };
 			}
 			// 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
 				// to prevent its content from being squished

+ 4 - 1
js/reveal.js

@@ -1489,7 +1489,10 @@ export default function( revealElement, options ) {
 
 				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
 				element.setAttribute( 'hidden', '' );

+ 22 - 6
js/utils/util.js

@@ -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
  * selector.
@@ -102,13 +123,8 @@ export const closestParent = ( target, selector ) => {
 
 	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( matchesMethod && matchesMethod.call( parent, selector ) ) {
+		if( matchesSelector( parent, selector ) ) {
 			return parent;
 		}
 

+ 41 - 72
package-lock.json

@@ -1,6 +1,6 @@
 {
   "name": "reveal.js",
-  "version": "4.0.0-rc.1",
+  "version": "4.0.1",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
@@ -1065,10 +1065,20 @@
         "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": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-11.1.0.tgz",
-      "integrity": "sha512-Ycr12N3ZPN96Fw2STurD21jMqzKwL9QuFhms3SD7KKRK7oaXUsBU9Zt0jL/rOPHiPYisI21/rXGO3jr9BnLHUA==",
+      "version": "12.0.0",
+      "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-12.0.0.tgz",
+      "integrity": "sha512-8+mDQt1QUmN+4Y9D3yCG8AJNewuTSLYPJVzKKUZ+lGeQrI+bV12Tc5HCyt2WdlnG6ihIL/DPbKRJlB40DX40mw==",
       "dev": true,
       "requires": {
         "@rollup/pluginutils": "^3.0.8",
@@ -1081,72 +1091,29 @@
       }
     },
     "@rollup/plugin-node-resolve": {
-      "version": "7.1.3",
-      "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz",
-      "integrity": "sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q==",
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-8.0.0.tgz",
+      "integrity": "sha512-5poJCChrkVggXXND/sQ7yNqwjUNT4fP31gpRWCnSNnlXuUXTCMHT33xZrTGxgjm5Rl18MHj7iEzlCT8rYWwQSA==",
       "dev": true,
       "requires": {
         "@rollup/pluginutils": "^3.0.8",
         "@types/resolve": "0.0.8",
         "builtin-modules": "^3.1.0",
+        "deep-freeze": "^0.0.1",
+        "deepmerge": "^4.2.2",
         "is-module": "^1.0.0",
         "resolve": "^1.14.2"
       }
     },
     "@rollup/pluginutils": {
-      "version": "3.0.9",
-      "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.0.9.tgz",
-      "integrity": "sha512-TLZavlfPAZYI7v33wQh4mTP6zojne14yok3DNSLcjoG/Hirxfkonn6icP5rrNWRn8nZsirJBFFpijVOJzkUHDg==",
+      "version": "3.0.10",
+      "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.0.10.tgz",
+      "integrity": "sha512-d44M7t+PjmMrASHbhgpSbVgtL6EFyX7J4mYxwQ/c5eoaE6N2VgCgEcWVzNnwycIloti+/MpwFr8qfw+nRw00sw==",
       "dev": true,
       "requires": {
         "@types/estree": "0.0.39",
         "estree-walker": "^1.0.1",
-        "micromatch": "^4.0.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"
-          }
-        }
+        "picomatch": "^2.2.2"
       }
     },
     "@types/color-name": {
@@ -1168,9 +1135,9 @@
       "dev": true
     },
     "@types/node": {
-      "version": "13.13.4",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.4.tgz",
-      "integrity": "sha512-x26ur3dSXgv5AwKS0lNfbjpCakGIduWU1DU91Zz58ONRWrIKGunmZBNv4P7N+e27sJkiGDsw/3fT4AtsqQBrBA==",
+      "version": "14.0.5",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.5.tgz",
+      "integrity": "sha512-90hiq6/VqtQgX8Sp0EzeIsv3r+ellbGj4URKj5j30tLlZvRUpnAe9YbYnjl3pJM93GyXU0tghHhvXHq+5rnCKA==",
       "dev": true
     },
     "@types/resolve": {
@@ -2278,12 +2245,24 @@
       "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
       "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": {
       "version": "0.1.3",
       "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
       "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
       "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": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz",
@@ -6448,9 +6427,9 @@
       }
     },
     "rollup": {
-      "version": "2.10.4",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.10.4.tgz",
-      "integrity": "sha512-aYvoYjeu9DwrUTEfRlHiugW1eoHz7EGxETaOISpw+zkH9oOaQLO85eG+14ky4vyYgi3mUofbpWJgb+yLBE0PKw==",
+      "version": "2.10.9",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.10.9.tgz",
+      "integrity": "sha512-dY/EbjiWC17ZCUSyk14hkxATAMAShkMsD43XmZGWjLrgFj15M3Dw2kEkA9ns64BiLFm9PKN6vTQw8neHwK74eg==",
       "dev": true,
       "requires": {
         "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": {
       "version": "5.3.0",
       "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.0.tgz",

+ 4 - 4
package.json

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

文件差異過大導致無法顯示
+ 0 - 0
plugin/highlight/highlight.esm.js


文件差異過大導致無法顯示
+ 0 - 0
plugin/highlight/highlight.js


文件差異過大導致無法顯示
+ 0 - 0
plugin/markdown/markdown.esm.js


文件差異過大導致無法顯示
+ 0 - 0
plugin/markdown/markdown.js


文件差異過大導致無法顯示
+ 0 - 0
plugin/notes/notes.esm.js


文件差異過大導致無法顯示
+ 0 - 0
plugin/notes/notes.js


+ 1 - 1
plugin/notes/plugin.js

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

文件差異過大導致無法顯示
+ 0 - 6
plugin/search/search.esm.js


文件差異過大導致無法顯示
+ 0 - 6
plugin/search/search.js


部分文件因文件數量過多而無法顯示