1
0
mirror of https://github.com/hakimel/reveal.js.git synced 2025-08-13 18:14:33 +02:00

update reveal.js

This commit is contained in:
Hakim El Hattab
2020-01-31 11:07:04 +01:00
parent 9b03d0c9c9
commit 96eee575a1
7 changed files with 181 additions and 108 deletions

View File

@@ -3,7 +3,7 @@
* http://revealjs.com
* MIT licensed
*
* Copyright (C) 2019 Hakim El Hattab, http://hakim.se
* Copyright (C) 2020 Hakim El Hattab, http://hakim.se
*/
/*********************************************
* GLOBAL STYLES
@@ -77,29 +77,29 @@ body {
text-decoration: line-through; }
.reveal .slides section .fragment.fade-up {
-webkit-transform: translate(0, 20%);
transform: translate(0, 20%); }
-webkit-transform: translate(0, 40px);
transform: translate(0, 40px); }
.reveal .slides section .fragment.fade-up.visible {
-webkit-transform: translate(0, 0);
transform: translate(0, 0); }
.reveal .slides section .fragment.fade-down {
-webkit-transform: translate(0, -20%);
transform: translate(0, -20%); }
-webkit-transform: translate(0, -40px);
transform: translate(0, -40px); }
.reveal .slides section .fragment.fade-down.visible {
-webkit-transform: translate(0, 0);
transform: translate(0, 0); }
.reveal .slides section .fragment.fade-right {
-webkit-transform: translate(-20%, 0);
transform: translate(-20%, 0); }
-webkit-transform: translate(-40px, 0);
transform: translate(-40px, 0); }
.reveal .slides section .fragment.fade-right.visible {
-webkit-transform: translate(0, 0);
transform: translate(0, 0); }
.reveal .slides section .fragment.fade-left {
-webkit-transform: translate(20%, 0);
transform: translate(20%, 0); }
-webkit-transform: translate(40px, 0);
transform: translate(40px, 0); }
.reveal .slides section .fragment.fade-left.visible {
-webkit-transform: translate(0, 0);
transform: translate(0, 0); }

4
css/reveal.min.css vendored

File diff suppressed because one or more lines are too long

View File

@@ -3,7 +3,7 @@
* http://revealjs.com
* MIT licensed
*
* Copyright (C) 2019 Hakim El Hattab, http://hakim.se
* Copyright (C) 2020 Hakim El Hattab, http://hakim.se
*/
@@ -102,7 +102,7 @@ body {
}
.reveal .slides section .fragment.fade-up {
transform: translate(0, 20%);
transform: translate(0, 40px);
&.visible {
transform: translate(0, 0);
@@ -110,7 +110,7 @@ body {
}
.reveal .slides section .fragment.fade-down {
transform: translate(0, -20%);
transform: translate(0, -40px);
&.visible {
transform: translate(0, 0);
@@ -118,7 +118,7 @@ body {
}
.reveal .slides section .fragment.fade-right {
transform: translate(-20%, 0);
transform: translate(-40px, 0);
&.visible {
transform: translate(0, 0);
@@ -126,7 +126,7 @@ body {
}
.reveal .slides section .fragment.fade-left {
transform: translate(20%, 0);
transform: translate(40px, 0);
&.visible {
transform: translate(0, 0);

View File

@@ -4,7 +4,7 @@ Themes are written using Sass to keep things modular and reduce the need for rep
## Creating a Theme
To create your own theme, start by duplicating a ```.scss``` file in [/css/theme/source](https://github.com/hakimel/reveal.js/blob/master/css/theme/source). It will be automatically compiled by Grunt from Sass to CSS (see the [Gruntfile](https://github.com/hakimel/reveal.js/blob/master/Gruntfile.js)) when you run `npm run build -- css-themes`.
To create your own theme, start by duplicating a ```.scss``` file in [/css/theme/source](https://github.com/hakimel/reveal.js/blob/master/css/theme/source). It will be automatically compiled by Grunt from Sass to CSS (see the [Gruntfile](https://github.com/hakimel/reveal.js/blob/master/gruntfile.js)) when you run `npm run build -- css-themes`.
Each theme file does four things in the following order:

View File

@@ -3,7 +3,7 @@
* http://revealjs.com
* MIT licensed
*
* Copyright (C) 2019 Hakim El Hattab, http://hakim.se
* Copyright (C) 2020 Hakim El Hattab, http://hakim.se
*/
(function( root, factory ) {
if( typeof define === 'function' && define.amd ) {
@@ -26,14 +26,18 @@
var Reveal;
// The reveal.js version
var VERSION = '3.8.0';
var VERSION = '3.9.1';
var SLIDES_SELECTOR = '.slides section',
HORIZONTAL_SLIDES_SELECTOR = '.slides>section',
VERTICAL_SLIDES_SELECTOR = '.slides>section.present>section',
HOME_SLIDE_SELECTOR = '.slides>section:first-of-type',
UA = navigator.userAgent,
// Methods that may not be invoked via the postMessage API
POST_MESSAGE_METHOD_BLACKLIST = /registerPlugin|registerKeyboardShortcut|addKeyBinding|addEventListener/,
// Configuration defaults, can be overridden at initialization time
config = {
@@ -77,9 +81,9 @@
// - "c/t": Flattened slide number / total slides
//
// Alternatively, you can provide a function that returns the slide
// number for the current slide. The function needs to return an array
// with one string [slideNumber] or three strings [n1,delimiter,n2].
// See #formatSlideNumber().
// number for the current slide. The function should take in a slide
// object and return an array with one string [slideNumber] or
// three strings [n1,delimiter,n2]. See #formatSlideNumber().
slideNumber: false,
// Can be used to limit the contexts in which the slide number appears
@@ -270,6 +274,11 @@
// Number of slides away from the current that are visible
viewDistance: 3,
// Number of slides away from the current that are visible on mobile
// devices. It is advisable to set this to a lower number than
// viewDistance in order to save resources.
mobileViewDistance: 2,
// The display mode that will be used to show slides
display: 'block',
@@ -447,7 +456,8 @@
*/
function checkCapabilities() {
isMobileDevice = /(iphone|ipod|ipad|android)/gi.test( UA );
isMobileDevice = /(iphone|ipod|ipad|android)/gi.test( UA ) ||
( navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1 ); // iPadOS
isChrome = /chrome/i.test( UA ) && !/edge/i.test( UA );
var testElement = document.createElement( 'div' );
@@ -849,17 +859,10 @@
// Make sure stretch elements fit on slide
layoutSlideContents( slideWidth, slideHeight );
// Add each slide's index as attributes on itself, we need these
// indices to generate slide numbers below
toArray( dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ) ).forEach( function( hslide, h ) {
hslide.setAttribute( 'data-index-h', h );
if( hslide.classList.contains( 'stack' ) ) {
toArray( hslide.querySelectorAll( 'section' ) ).forEach( function( vslide, v ) {
vslide.setAttribute( 'data-index-h', h );
vslide.setAttribute( 'data-index-v', v );
} );
}
// Compute slide numbers now, before we start duplicating slides
var doingSlideNumbers = config.slideNumber && /all|print/i.test( config.showSlideNumber );
toArray( dom.wrapper.querySelectorAll( SLIDES_SELECTOR ) ).forEach( function( slide ) {
slide.setAttribute( 'data-slide-number', getSlideNumber( slide ) );
} );
// Slide and slide background layout
@@ -930,14 +933,11 @@
}
// Inject slide numbers if `slideNumbers` are enabled
if( config.slideNumber && /all|print/i.test( config.showSlideNumber ) ) {
var slideNumberH = parseInt( slide.getAttribute( 'data-index-h' ), 10 ) + 1,
slideNumberV = parseInt( slide.getAttribute( 'data-index-v' ), 10 ) + 1;
if( doingSlideNumbers ) {
var numberElement = document.createElement( 'div' );
numberElement.classList.add( 'slide-number' );
numberElement.classList.add( 'slide-number-pdf' );
numberElement.innerHTML = formatSlideNumber( slideNumberH, '.', slideNumberV );
numberElement.innerHTML = slide.getAttribute( 'data-slide-number' );
page.appendChild( numberElement );
}
@@ -1278,11 +1278,20 @@
// Check if the requested method can be found
if( data.method && typeof Reveal[data.method] === 'function' ) {
if( POST_MESSAGE_METHOD_BLACKLIST.test( data.method ) === false ) {
var result = Reveal[data.method].apply( Reveal, data.args );
// Dispatch a postMessage event with the returned value from
// our method invocation for getter functions
dispatchPostMessage( 'callback', { method: data.method, result: result } );
}
else {
console.warn( 'reveal.js: "'+ data.method +'" is is blacklisted from the postMessage API' );
}
}
}
}, false );
@@ -2651,34 +2660,37 @@
}
/**
* Return a hash URL that will resolve to the current slide location.
* Return a hash URL that will resolve to the given slide location.
*
* @param {HTMLElement} [slide=currentSlide] The slide to link to
*/
function locationHash() {
function locationHash( slide ) {
var url = '/';
// Attempt to create a named link based on the slide's ID
var id = currentSlide ? currentSlide.getAttribute( 'id' ) : null;
var s = slide || currentSlide;
var id = s ? s.getAttribute( 'id' ) : null;
if( id ) {
id = encodeURIComponent( id );
}
var indexf;
if( config.fragmentInURL ) {
indexf = getIndices().f;
var index = getIndices( slide );
if( !config.fragmentInURL ) {
index.f = undefined;
}
// If the current slide has an ID, use that as a named link,
// but we don't support named links with a fragment index
if( typeof id === 'string' && id.length && indexf === undefined ) {
if( typeof id === 'string' && id.length && index.f === undefined ) {
url = '/' + id;
}
// Otherwise use the /h/v index
else {
var hashIndexBase = config.hashOneBasedIndex ? 1 : 0;
if( indexh > 0 || indexv > 0 || indexf !== undefined ) url += indexh + hashIndexBase;
if( indexv > 0 || indexf !== undefined ) url += '/' + (indexv + hashIndexBase );
if( indexf !== undefined ) url += '/' + indexf;
if( index.h > 0 || index.v > 0 || index.f !== undefined ) url += index.h + hashIndexBase;
if( index.v > 0 || index.f !== undefined ) url += '/' + (index.v + hashIndexBase );
if( index.f !== undefined ) url += '/' + index.f;
}
return url;
@@ -3283,9 +3295,10 @@
// be visible
var viewDistance = isOverview() ? 10 : config.viewDistance;
// Limit view distance on weaker devices
// Shorten the view distance on devices that typically have
// less resources
if( isMobileDevice ) {
viewDistance = isOverview() ? 6 : 2;
viewDistance = isOverview() ? 6 : config.mobileViewDistance;
}
// All slides need to be visible when exporting to PDF
@@ -3421,14 +3434,26 @@
// Update slide number if enabled
if( config.slideNumber && dom.slideNumber ) {
dom.slideNumber.innerHTML = getSlideNumber();
}
}
/**
* Returns the HTML string corresponding to the current slide number,
* including formatting.
*/
function getSlideNumber( slide ) {
var value;
var format = 'h.v';
if( slide === undefined ) {
slide = currentSlide;
}
if ( typeof config.slideNumber === 'function' ) {
value = config.slideNumber();
}
else {
value = config.slideNumber( slide );
} else {
// Check if a custom number format is available
if( typeof config.slideNumber === 'string' ) {
format = config.slideNumber;
@@ -3443,23 +3468,21 @@
value = [];
switch( format ) {
case 'c':
value.push( getSlidePastCount() + 1 );
value.push( getSlidePastCount( slide ) + 1 );
break;
case 'c/t':
value.push( getSlidePastCount() + 1, '/', getTotalSlides() );
break;
case 'h/v':
value.push( indexh + 1 );
if( isVerticalSlide() ) value.push( '/', indexv + 1 );
value.push( getSlidePastCount( slide ) + 1, '/', getTotalSlides() );
break;
default:
value.push( indexh + 1 );
if( isVerticalSlide() ) value.push( '.', indexv + 1 );
var indices = getIndices( slide );
value.push( indices.h + 1 );
var sep = format === 'h/v' ? '/' : '.';
if( isVerticalSlide( slide ) ) value.push( sep, indices.v + 1 );
}
}
dom.slideNumber.innerHTML = formatSlideNumber( value[0], value[1], value[2] );
}
var url = '#' + locationHash( slide );
return formatSlideNumber( value[0], value[1], value[2], url );
}
@@ -3470,11 +3493,14 @@
* @param {number} a Current slide
* @param {string} delimiter Character to separate slide numbers
* @param {(number|*)} b Total slides
* @param {HTMLElement} [url='#'+locationHash()] The url to link to
* @return {string} HTML string fragment
*/
function formatSlideNumber( a, delimiter, b ) {
function formatSlideNumber( a, delimiter, b, url ) {
var url = '#' + locationHash();
if( url === undefined ) {
url = '#' + locationHash();
}
if( typeof b === 'number' && !isNaN( b ) ) {
return '<a href="' + url + '">' +
'<span class="slide-number-a">'+ a +'</span>' +
@@ -3855,6 +3881,7 @@
iframe.setAttribute( 'allowfullscreen', '' );
iframe.setAttribute( 'mozallowfullscreen', '' );
iframe.setAttribute( 'webkitallowfullscreen', '' );
iframe.setAttribute( 'allow', 'autoplay' );
iframe.setAttribute( 'data-src', backgroundIframe );
@@ -4224,9 +4251,15 @@
* Returns the number of past slides. This can be used as a global
* flattened index for slides.
*
* @param {HTMLElement} [slide=currentSlide] The slide we're counting before
*
* @return {number} Past slide count
*/
function getSlidePastCount() {
function getSlidePastCount( slide ) {
if( slide === undefined ) {
slide = currentSlide;
}
var horizontalSlides = toArray( dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ) );
@@ -4242,7 +4275,7 @@
for( var j = 0; j < verticalSlides.length; j++ ) {
// Stop as soon as we arrive at the present
if( verticalSlides[j].classList.contains( 'present' ) ) {
if( verticalSlides[j] === slide ) {
break mainLoop;
}
@@ -4251,7 +4284,7 @@
}
// Stop as soon as we arrive at the present
if( horizontalSlide.classList.contains( 'present' ) ) {
if( horizontalSlide === slide ) {
break;
}
@@ -4743,6 +4776,8 @@
if( fragments.length ) {
var maxIndex = 0;
if( typeof index !== 'number' ) {
var currentFragment = sortFragments( currentSlide.querySelectorAll( '.fragment.visible' ) ).pop();
if( currentFragment ) {
@@ -4756,6 +4791,8 @@
i = parseInt( el.getAttribute( 'data-fragment-index' ), 10 );
}
maxIndex = Math.max( maxIndex, i );
// Visible fragments
if( i <= index ) {
if( !el.classList.contains( 'visible' ) ) changedFragments.shown.push( el );
@@ -4779,6 +4816,13 @@
} );
// Write the current fragment index to the slide <section>.
// This can be used by end users to apply styles based on
// the current fragment index.
index = typeof index === 'number' ? index : -1;
index = Math.max( Math.min( index, maxIndex ), -1 );
currentSlide.setAttribute( 'data-fragment', index );
}
}
@@ -5436,20 +5480,50 @@
if( deltaX > touch.threshold && Math.abs( deltaX ) > Math.abs( deltaY ) ) {
touch.captured = true;
if( config.navigationMode === 'linear' ) {
if( config.rtl ) {
navigateNext();
}
else {
navigatePrev();
}
}
else {
navigateLeft();
}
}
else if( deltaX < -touch.threshold && Math.abs( deltaX ) > Math.abs( deltaY ) ) {
touch.captured = true;
if( config.navigationMode === 'linear' ) {
if( config.rtl ) {
navigatePrev();
}
else {
navigateNext();
}
}
else {
navigateRight();
}
}
else if( deltaY > touch.threshold ) {
touch.captured = true;
if( config.navigationMode === 'linear' ) {
navigatePrev();
}
else {
navigateUp();
}
}
else if( deltaY < -touch.threshold ) {
touch.captured = true;
if( config.navigationMode === 'linear' ) {
navigateNext();
}
else {
navigateDown();
}
}
// If we're embedded, only block touch events if they have
// triggered an action

6
js/reveal.min.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long