summary refs log tree commit diff stats
path: root/geschichte/js/controllers/fragments.js
diff options
context:
space:
mode:
Diffstat (limited to 'geschichte/js/controllers/fragments.js')
-rw-r--r--geschichte/js/controllers/fragments.js376
1 files changed, 0 insertions, 376 deletions
diff --git a/geschichte/js/controllers/fragments.js b/geschichte/js/controllers/fragments.js
deleted file mode 100644
index 796c168..0000000
--- a/geschichte/js/controllers/fragments.js
+++ /dev/null
@@ -1,376 +0,0 @@
-import { extend, queryAll } from '../utils/util.js'
-
-/**
- * Handles sorting and navigation of slide fragments.
- * Fragments are elements within a slide that are
- * revealed/animated incrementally.
- */
-export default class Fragments {
-
-	constructor( Reveal ) {
-
-		this.Reveal = Reveal;
-
-	}
-
-	/**
-	 * Called when the reveal.js config is updated.
-	 */
-	configure( config, oldConfig ) {
-
-		if( config.fragments === false ) {
-			this.disable();
-		}
-		else if( oldConfig.fragments === false ) {
-			this.enable();
-		}
-
-	}
-
-	/**
-	 * If fragments are disabled in the deck, they should all be
-	 * visible rather than stepped through.
-	 */
-	disable() {
-
-		queryAll( this.Reveal.getSlidesElement(), '.fragment' ).forEach( element => {
-			element.classList.add( 'visible' );
-			element.classList.remove( 'current-fragment' );
-		} );
-
-	}
-
-	/**
-	 * Reverse of #disable(). Only called if fragments have
-	 * previously been disabled.
-	 */
-	enable() {
-
-		queryAll( this.Reveal.getSlidesElement(), '.fragment' ).forEach( element => {
-			element.classList.remove( 'visible' );
-			element.classList.remove( 'current-fragment' );
-		} );
-
-	}
-
-	/**
-	 * Returns an object describing the available fragment
-	 * directions.
-	 *
-	 * @return {{prev: boolean, next: boolean}}
-	 */
-	availableRoutes() {
-
-		let currentSlide = this.Reveal.getCurrentSlide();
-		if( currentSlide && this.Reveal.getConfig().fragments ) {
-			let fragments = currentSlide.querySelectorAll( '.fragment:not(.disabled)' );
-			let hiddenFragments = currentSlide.querySelectorAll( '.fragment:not(.disabled):not(.visible)' );
-
-			return {
-				prev: fragments.length - hiddenFragments.length > 0,
-				next: !!hiddenFragments.length
-			};
-		}
-		else {
-			return { prev: false, next: false };
-		}
-
-	}
-
-	/**
-	 * 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.
-	 *
-	 * @param {object[]|*} fragments
-	 * @param {boolean} grouped If true the returned array will contain
-	 * nested arrays for all fragments with the same index
-	 * @return {object[]} sorted Sorted array of fragments
-	 */
-	sort( fragments, grouped = false ) {
-
-		fragments = Array.from( fragments );
-
-		let ordered = [],
-			unordered = [],
-			sorted = [];
-
-		// Group ordered and unordered elements
-		fragments.forEach( fragment => {
-			if( fragment.hasAttribute( 'data-fragment-index' ) ) {
-				let index = parseInt( fragment.getAttribute( 'data-fragment-index' ), 10 );
-
-				if( !ordered[index] ) {
-					ordered[index] = [];
-				}
-
-				ordered[index].push( fragment );
-			}
-			else {
-				unordered.push( [ fragment ] );
-			}
-		} );
-
-		// Append fragments without explicit indices in their
-		// DOM order
-		ordered = ordered.concat( unordered );
-
-		// Manually count the index up per group to ensure there
-		// are no gaps
-		let index = 0;
-
-		// Push all fragments in their sorted order to an array,
-		// this flattens the groups
-		ordered.forEach( group => {
-			group.forEach( fragment => {
-				sorted.push( fragment );
-				fragment.setAttribute( 'data-fragment-index', index );
-			} );
-
-			index ++;
-		} );
-
-		return grouped === true ? ordered : sorted;
-
-	}
-
-	/**
-	 * Sorts and formats all of fragments in the
-	 * presentation.
-	 */
-	sortAll() {
-
-		this.Reveal.getHorizontalSlides().forEach( horizontalSlide => {
-
-			let verticalSlides = queryAll( horizontalSlide, 'section' );
-			verticalSlides.forEach( ( verticalSlide, y ) => {
-
-				this.sort( verticalSlide.querySelectorAll( '.fragment' ) );
-
-			}, this );
-
-			if( verticalSlides.length === 0 ) this.sort( horizontalSlide.querySelectorAll( '.fragment' ) );
-
-		} );
-
-	}
-
-	/**
-	 * Refreshes the fragments on the current slide so that they
-	 * have the appropriate classes (.visible + .current-fragment).
-	 *
-	 * @param {number} [index] The index of the current fragment
-	 * @param {array} [fragments] Array containing all fragments
-	 * in the current slide
-	 *
-	 * @return {{shown: array, hidden: array}}
-	 */
-	update( index, fragments ) {
-
-		let changedFragments = {
-			shown: [],
-			hidden: []
-		};
-
-		let currentSlide = this.Reveal.getCurrentSlide();
-		if( currentSlide && this.Reveal.getConfig().fragments ) {
-
-			fragments = fragments || this.sort( currentSlide.querySelectorAll( '.fragment' ) );
-
-			if( fragments.length ) {
-
-				let maxIndex = 0;
-
-				if( typeof index !== 'number' ) {
-					let currentFragment = this.sort( currentSlide.querySelectorAll( '.fragment.visible' ) ).pop();
-					if( currentFragment ) {
-						index = parseInt( currentFragment.getAttribute( 'data-fragment-index' ) || 0, 10 );
-					}
-				}
-
-				Array.from( fragments ).forEach( ( el, i ) => {
-
-					if( el.hasAttribute( 'data-fragment-index' ) ) {
-						i = parseInt( el.getAttribute( 'data-fragment-index' ), 10 );
-					}
-
-					maxIndex = Math.max( maxIndex, i );
-
-					// Visible fragments
-					if( i <= index ) {
-						let wasVisible = el.classList.contains( 'visible' )
-						el.classList.add( 'visible' );
-						el.classList.remove( 'current-fragment' );
-
-						if( i === index ) {
-							// Announce the fragments one by one to the Screen Reader
-							this.Reveal.announceStatus( this.Reveal.getStatusText( el ) );
-
-							el.classList.add( 'current-fragment' );
-							this.Reveal.slideContent.startEmbeddedContent( el );
-						}
-
-						if( !wasVisible ) {
-							changedFragments.shown.push( el )
-							this.Reveal.dispatchEvent({
-								target: el,
-								type: 'visible',
-								bubbles: false
-							});
-						}
-					}
-					// Hidden fragments
-					else {
-						let wasVisible = el.classList.contains( 'visible' )
-						el.classList.remove( 'visible' );
-						el.classList.remove( 'current-fragment' );
-
-						if( wasVisible ) {
-							this.Reveal.slideContent.stopEmbeddedContent( el );
-							changedFragments.hidden.push( el );
-							this.Reveal.dispatchEvent({
-								target: el,
-								type: 'hidden',
-								bubbles: false
-							});
-						}
-					}
-
-				} );
-
-				// 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 );
-
-			}
-
-		}
-
-		return changedFragments;
-
-	}
-
-	/**
-	 * Formats the fragments on the given slide so that they have
-	 * valid indices. Call this if fragments are changed in the DOM
-	 * after reveal.js has already initialized.
-	 *
-	 * @param {HTMLElement} slide
-	 * @return {Array} a list of the HTML fragments that were synced
-	 */
-	sync( slide = this.Reveal.getCurrentSlide() ) {
-
-		return this.sort( slide.querySelectorAll( '.fragment' ) );
-
-	}
-
-	/**
-	 * Navigate to the specified slide fragment.
-	 *
-	 * @param {?number} index The index of the fragment that
-	 * should be shown, -1 means all are invisible
-	 * @param {number} offset Integer offset to apply to the
-	 * fragment index
-	 *
-	 * @return {boolean} true if a change was made in any
-	 * fragments visibility as part of this call
-	 */
-	goto( index, offset = 0 ) {
-
-		let currentSlide = this.Reveal.getCurrentSlide();
-		if( currentSlide && this.Reveal.getConfig().fragments ) {
-
-			let fragments = this.sort( currentSlide.querySelectorAll( '.fragment:not(.disabled)' ) );
-			if( fragments.length ) {
-
-				// If no index is specified, find the current
-				if( typeof index !== 'number' ) {
-					let lastVisibleFragment = this.sort( currentSlide.querySelectorAll( '.fragment:not(.disabled).visible' ) ).pop();
-
-					if( lastVisibleFragment ) {
-						index = parseInt( lastVisibleFragment.getAttribute( 'data-fragment-index' ) || 0, 10 );
-					}
-					else {
-						index = -1;
-					}
-				}
-
-				// Apply the offset if there is one
-				index += offset;
-
-				let changedFragments = this.update( index, fragments );
-
-				if( changedFragments.hidden.length ) {
-					this.Reveal.dispatchEvent({
-						type: 'fragmenthidden',
-						data: {
-							fragment: changedFragments.hidden[0],
-							fragments: changedFragments.hidden
-						}
-					});
-				}
-
-				if( changedFragments.shown.length ) {
-					this.Reveal.dispatchEvent({
-						type: 'fragmentshown',
-						data: {
-							fragment: changedFragments.shown[0],
-							fragments: changedFragments.shown
-						}
-					});
-				}
-
-				this.Reveal.controls.update();
-				this.Reveal.progress.update();
-
-				if( this.Reveal.getConfig().fragmentInURL ) {
-					this.Reveal.location.writeURL();
-				}
-
-				return !!( changedFragments.shown.length || changedFragments.hidden.length );
-
-			}
-
-		}
-
-		return false;
-
-	}
-
-	/**
-	 * Navigate to the next slide fragment.
-	 *
-	 * @return {boolean} true if there was a next fragment,
-	 * false otherwise
-	 */
-	next() {
-
-		return this.goto( null, 1 );
-
-	}
-
-	/**
-	 * Navigate to the previous slide fragment.
-	 *
-	 * @return {boolean} true if there was a previous fragment,
-	 * false otherwise
-	 */
-	prev() {
-
-		return this.goto( null, -1 );
-
-	}
-
-}
\ No newline at end of file