fragment sorting tweaks, sort attribute is now called data-fragment-index (#342)
This commit is contained in:
		
							
								
								
									
										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
											
										
									
								
							
		Reference in New Issue
	
	Block a user