annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 /*!
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 Deck JS - deck.status
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 Copyright (c) 2011 Caleb Troughton
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 Dual licensed under the MIT license and GPL license.
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 https://github.com/imakewebthings/deck.js/blob/master/MIT-license.txt
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 https://github.com/imakewebthings/deck.js/blob/master/GPL-license.txt
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 */
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 /*
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 This module adds a (current)/(total) style status indicator to the deck.
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 */
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 (function($, deck, undefined) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 var $d = $(document),
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 updateCurrent = function(e, from, to) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 var opts = $[deck]('getOptions');
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 $(opts.selectors.statusCurrent).text(opts.countNested ?
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 to + 1 :
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 $[deck]('getSlide', to).data('rootSlide')
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 );
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 };
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 /*
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 Extends defaults/options.
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 options.selectors.statusCurrent
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 The element matching this selector displays the current slide number.
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 options.selectors.statusTotal
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 The element matching this selector displays the total number of slides.
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 options.countNested
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 If false, only top level slides will be counted in the current and
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 total numbers.
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 */
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 $.extend(true, $[deck].defaults, {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 selectors: {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 statusCurrent: '.deck-status-current',
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 statusTotal: '.deck-status-total'
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 },
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 countNested: true
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 });
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 $d.bind('deck.init', function() {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 var opts = $[deck]('getOptions'),
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 slides = $[deck]('getSlides'),
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 $current = $[deck]('getSlide'),
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 ndx;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 // Set total slides once
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 if (opts.countNested) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 $(opts.selectors.statusTotal).text(slides.length);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 else {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 /* Determine root slides by checking each slide's ancestor tree for
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 any of the slide classes. */
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 var rootIndex = 1,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 slideTest = $.map([
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 opts.classes.before,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 opts.classes.previous,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 opts.classes.current,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 opts.classes.next,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 opts.classes.after
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 ], function(el, i) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 return '.' + el;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 }).join(', ');
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
69
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 /* Store the 'real' root slide number for use during slide changes. */
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 $.each(slides, function(i, $el) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 var $parentSlides = $el.parentsUntil(opts.selectors.container, slideTest);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
73
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 $el.data('rootSlide', $parentSlides.length ?
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 $parentSlides.last().data('rootSlide') :
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 rootIndex++
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 );
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 });
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
79
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 $(opts.selectors.statusTotal).text(rootIndex - 1);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
82
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 // Find where we started in the deck and set initial state
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 $.each(slides, function(i, $el) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 if ($el === $current) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 ndx = i;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 return false;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 });
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 updateCurrent(null, ndx, ndx);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 })
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 /* Update current slide number with each change event */
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 .bind('deck.change', updateCurrent);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 })(jQuery, 'deck');
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
95