diff deck.js/extensions/status/deck.status.js @ 0:dd1c78c6398f

add having slides
author taiki <taiki@cr.ie.u-ryukyu.ac.jp>
date Mon, 25 Mar 2013 05:14:03 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deck.js/extensions/status/deck.status.js	Mon Mar 25 05:14:03 2013 +0900
@@ -0,0 +1,95 @@
+/*!
+Deck JS - deck.status
+Copyright (c) 2011 Caleb Troughton
+Dual licensed under the MIT license and GPL license.
+https://github.com/imakewebthings/deck.js/blob/master/MIT-license.txt
+https://github.com/imakewebthings/deck.js/blob/master/GPL-license.txt
+*/
+
+/*
+This module adds a (current)/(total) style status indicator to the deck.
+*/
+(function($, deck, undefined) {
+	var $d = $(document),
+	
+	updateCurrent = function(e, from, to) {
+		var opts = $[deck]('getOptions');
+		
+		$(opts.selectors.statusCurrent).text(opts.countNested ?
+			to + 1 :
+			$[deck]('getSlide', to).data('rootSlide')
+		);
+	};
+	
+	/*
+	Extends defaults/options.
+	
+	options.selectors.statusCurrent
+		The element matching this selector displays the current slide number.
+		
+	options.selectors.statusTotal
+		The element matching this selector displays the total number of slides.
+		
+	options.countNested
+		If false, only top level slides will be counted in the current and
+		total numbers.
+	*/
+	$.extend(true, $[deck].defaults, {
+		selectors: {
+			statusCurrent: '.deck-status-current',
+			statusTotal: '.deck-status-total'
+		},
+		
+		countNested: true
+	});
+	
+	$d.bind('deck.init', function() {
+		var opts = $[deck]('getOptions'),
+		slides = $[deck]('getSlides'),
+		$current = $[deck]('getSlide'),
+		ndx;
+		
+		// Set total slides once
+		if (opts.countNested) {
+			$(opts.selectors.statusTotal).text(slides.length);
+		}
+		else {
+			/* Determine root slides by checking each slide's ancestor tree for
+			any of the slide classes. */
+			var rootIndex = 1,
+			slideTest = $.map([
+				opts.classes.before,
+				opts.classes.previous,
+				opts.classes.current,
+				opts.classes.next,
+				opts.classes.after
+			], function(el, i) {
+				return '.' + el;
+			}).join(', ');
+			
+			/* Store the 'real' root slide number for use during slide changes. */
+			$.each(slides, function(i, $el) {
+				var $parentSlides = $el.parentsUntil(opts.selectors.container, slideTest);
+
+				$el.data('rootSlide', $parentSlides.length ?
+					$parentSlides.last().data('rootSlide') :
+					rootIndex++
+				);
+			});
+			
+			$(opts.selectors.statusTotal).text(rootIndex - 1);
+		}
+		
+		// Find where we started in the deck and set initial state
+		$.each(slides, function(i, $el) {
+			if ($el === $current) {
+				ndx = i;
+				return false;
+			}
+		});
+		updateCurrent(null, ndx, ndx);
+	})
+	/* Update current slide number with each change event */
+	.bind('deck.change', updateCurrent);
+})(jQuery, 'deck');
+