fragment sorting tweaks, sort attribute is now called data-fragment-index (#342)
This commit is contained in:
parent
25f26bdc15
commit
2e8e73a847
3 changed files with 53 additions and 37 deletions
10
README.md
10
README.md
|
@ -270,6 +270,16 @@ Multiple fragments can be applied to the same element sequentially by wrapping i
|
|||
</section>
|
||||
```
|
||||
|
||||
The display order of fragments can be controlled using the ```data-fragment-index``` attribute.
|
||||
|
||||
```html
|
||||
<section>
|
||||
<p class="fragment" data-fragment-index="3">Appears last</p>
|
||||
<p class="fragment" data-fragment-index="1">Appears first</p>
|
||||
<p class="fragment" data-fragment-index="2">Appears second</p>
|
||||
</section>
|
||||
```
|
||||
|
||||
### Fragment events
|
||||
|
||||
When a slide fragment is either shown or hidden reveal.js will dispatch an event.
|
||||
|
|
76
js/reveal.js
76
js/reveal.js
|
@ -142,31 +142,6 @@ var Reveal = (function(){
|
|||
threshold: 80
|
||||
};
|
||||
|
||||
/**
|
||||
* Return a sorted fragments list, ordered by an increasing "fragment-pos" attribute.
|
||||
*
|
||||
* Fragments will be revealed in the order that they are returned by
|
||||
* this function, so you can use "fragment-pos" attributes to control
|
||||
* the order of fragment appearance.
|
||||
*
|
||||
* To maintain a sensible default fragment order, fragments are presumed
|
||||
* to be passed in document order. This function adds a "fragment-pos"
|
||||
* attribute to each node if such an attribute is not already present,
|
||||
* and sets that attribute to an integer value which is the position of
|
||||
* the fragment within the fragments list.
|
||||
*
|
||||
*/
|
||||
function sort_fragments( fragments ) {
|
||||
var a = toArray(fragments)
|
||||
a.forEach( function (el, idx) {
|
||||
if (!el.hasAttribute('fragment-pos')) {
|
||||
el.setAttribute('fragment-pos', idx) }})
|
||||
a.sort(function(l, r) {
|
||||
return l.getAttribute( 'fragment-pos' )
|
||||
- r.getAttribute( 'fragment-pos') })
|
||||
return a
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts up the presentation if the client is capable.
|
||||
*/
|
||||
|
@ -597,6 +572,38 @@ var Reveal = (function(){
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a sorted fragments list, ordered by an increasing
|
||||
* "data-fragment-index" attribute.
|
||||
*
|
||||
* Fragments will be revealed in the order that they are returned by
|
||||
* this function, so you can use the index attributes to control the
|
||||
* order of fragment appearance.
|
||||
*
|
||||
* To maintain a sensible default fragment order, fragments are presumed
|
||||
* to be passed in document order. This function adds a "fragment-index"
|
||||
* attribute to each node if such an attribute is not already present,
|
||||
* and sets that attribute to an integer value which is the position of
|
||||
* the fragment within the fragments list.
|
||||
*/
|
||||
function sortFragments( fragments ) {
|
||||
|
||||
var a = toArray( fragments );
|
||||
|
||||
a.forEach( function( el, idx ) {
|
||||
if( !el.hasAttribute( 'data-fragment-index' ) ) {
|
||||
el.setAttribute( 'data-fragment-index', idx );
|
||||
}
|
||||
} );
|
||||
|
||||
a.sort( function( l, r ) {
|
||||
return l.getAttribute( 'data-fragment-index' ) - r.getAttribute( 'data-fragment-index');
|
||||
} );
|
||||
|
||||
return a
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies JavaScript-controlled layout rules to the
|
||||
* presentation.
|
||||
|
@ -1046,8 +1053,7 @@ var Reveal = (function(){
|
|||
|
||||
// Show fragment, if specified
|
||||
if( typeof f !== 'undefined' ) {
|
||||
var fragments = currentSlide.querySelectorAll( '.fragment' );
|
||||
fragments = sort_fragments(fragments)
|
||||
var fragments = sortFragments( currentSlide.querySelectorAll( '.fragment' ) );
|
||||
|
||||
toArray( fragments ).forEach( function( fragment, indexf ) {
|
||||
if( indexf < f ) {
|
||||
|
@ -1418,8 +1424,8 @@ var Reveal = (function(){
|
|||
|
||||
// Vertical slides:
|
||||
if( document.querySelector( VERTICAL_SLIDES_SELECTOR + '.present' ) ) {
|
||||
var verticalFragments = document.querySelectorAll( VERTICAL_SLIDES_SELECTOR + '.present .fragment:not(.visible)' );
|
||||
verticalFragments = sort_fragments(verticalFragments)
|
||||
var verticalFragments = sortFragments( document.querySelectorAll( VERTICAL_SLIDES_SELECTOR + '.present .fragment:not(.visible)' ) );
|
||||
|
||||
if( verticalFragments.length ) {
|
||||
verticalFragments[0].classList.add( 'visible' );
|
||||
|
||||
|
@ -1430,8 +1436,8 @@ var Reveal = (function(){
|
|||
}
|
||||
// Horizontal slides:
|
||||
else {
|
||||
var horizontalFragments = document.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR + '.present .fragment:not(.visible)' );
|
||||
horizontalFragments = sort_fragments(horizontalFragments)
|
||||
var horizontalFragments = sortFragments( document.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR + '.present .fragment:not(.visible)' ) );
|
||||
|
||||
if( horizontalFragments.length ) {
|
||||
horizontalFragments[0].classList.add( 'visible' );
|
||||
|
||||
|
@ -1455,8 +1461,8 @@ var Reveal = (function(){
|
|||
|
||||
// Vertical slides:
|
||||
if( document.querySelector( VERTICAL_SLIDES_SELECTOR + '.present' ) ) {
|
||||
var verticalFragments = document.querySelectorAll( VERTICAL_SLIDES_SELECTOR + '.present .fragment.visible' );
|
||||
verticalFragments = sort_fragments(verticalFragments)
|
||||
var verticalFragments = sortFragments( document.querySelectorAll( VERTICAL_SLIDES_SELECTOR + '.present .fragment.visible' ) );
|
||||
|
||||
if( verticalFragments.length ) {
|
||||
verticalFragments[ verticalFragments.length - 1 ].classList.remove( 'visible' );
|
||||
|
||||
|
@ -1467,8 +1473,8 @@ var Reveal = (function(){
|
|||
}
|
||||
// Horizontal slides:
|
||||
else {
|
||||
var horizontalFragments = document.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR + '.present .fragment.visible' );
|
||||
horizontalFragments = sort_fragments(horizontalFragments)
|
||||
var horizontalFragments = sortFragments( document.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR + '.present .fragment.visible' ) );
|
||||
|
||||
if( horizontalFragments.length ) {
|
||||
horizontalFragments[ horizontalFragments.length - 1 ].classList.remove( 'visible' );
|
||||
|
||||
|
|
4
js/reveal.min.js
vendored
4
js/reveal.min.js
vendored
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue