annotate presen/s6/js/jquery.slideshow.controls.js @ 10:86f6bb9be40a

add
author mir3636
date Wed, 15 Feb 2017 18:20:07 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10
mir3636
parents:
diff changeset
1 /***********
mir3636
parents:
diff changeset
2 *
mir3636
parents:
diff changeset
3 * control addon:
mir3636
parents:
diff changeset
4 *
mir3636
parents:
diff changeset
5 * adds toggle, prev slide, next slide links/buttons and jump list
mir3636
parents:
diff changeset
6 * - use key-c to toggle controls (in projection mode)
mir3636
parents:
diff changeset
7 *
mir3636
parents:
diff changeset
8 * layout structure:
mir3636
parents:
diff changeset
9 *
mir3636
parents:
diff changeset
10 * .layout
mir3636
parents:
diff changeset
11 * > #controls (holding navigation controls)
mir3636
parents:
diff changeset
12 * > #navLinks
mir3636
parents:
diff changeset
13 * > #toggle
mir3636
parents:
diff changeset
14 * > #navList
mir3636
parents:
diff changeset
15 * > #jumplist
mir3636
parents:
diff changeset
16 */
mir3636
parents:
diff changeset
17
mir3636
parents:
diff changeset
18
mir3636
parents:
diff changeset
19 Slideshow.ctrlInit = function()
mir3636
parents:
diff changeset
20 {
mir3636
parents:
diff changeset
21 this.debug( 'calling ctrlInit()' );
mir3636
parents:
diff changeset
22
mir3636
parents:
diff changeset
23 var self = this; // NOTE: jquery binds this in .each,.click, etc to element
mir3636
parents:
diff changeset
24
mir3636
parents:
diff changeset
25 // todo: make layout into an id (not class?)
mir3636
parents:
diff changeset
26 // do we need or allow more than one element?
mir3636
parents:
diff changeset
27
mir3636
parents:
diff changeset
28 // if no div.layout exists, create one
mir3636
parents:
diff changeset
29 if( $( '.layout' ).length == 0 )
mir3636
parents:
diff changeset
30 $( 'body' ).append( "<div class='layout'></div>");
mir3636
parents:
diff changeset
31
mir3636
parents:
diff changeset
32 $( '.layout' ).append( "<div id='controls'>" );
mir3636
parents:
diff changeset
33
mir3636
parents:
diff changeset
34 var $controls = $( '#controls' )
mir3636
parents:
diff changeset
35
mir3636
parents:
diff changeset
36 $controls.html( '<div id="navLinks">'
mir3636
parents:
diff changeset
37 + '<a accesskey="t" id="toggle" href="#">&#216;<\/a>'
mir3636
parents:
diff changeset
38 + '<a accesskey="z" id="prev" href="#">&laquo;<\/a>'
mir3636
parents:
diff changeset
39 + '<a accesskey="x" id="next" href="#">&raquo;<\/a>'
mir3636
parents:
diff changeset
40 + '<div id="navList"><select id="jumplist" /><\/div>'
mir3636
parents:
diff changeset
41 + '<\/div>' );
mir3636
parents:
diff changeset
42
mir3636
parents:
diff changeset
43 $controls.hover( function() { self.ctrlShow(); }, function() { self.ctrlHide(); });
mir3636
parents:
diff changeset
44 $('#toggle').click( function() { self.toggle(); } );
mir3636
parents:
diff changeset
45 $('#prev').click( function() { self.go(-1); } );
mir3636
parents:
diff changeset
46 $('#next').click( function() { self.go(1); } );
mir3636
parents:
diff changeset
47
mir3636
parents:
diff changeset
48 $('#jumplist').change( function() { self.goTo( parseInt( $( '#jumplist' ).val() )); } );
mir3636
parents:
diff changeset
49
mir3636
parents:
diff changeset
50 this.ctrlPopulateJumpList();
mir3636
parents:
diff changeset
51 }
mir3636
parents:
diff changeset
52
mir3636
parents:
diff changeset
53
mir3636
parents:
diff changeset
54 Slideshow.ctrlDebugOn = function()
mir3636
parents:
diff changeset
55 {
mir3636
parents:
diff changeset
56 this.debug( 'calling ctrlDebugOn()' );
mir3636
parents:
diff changeset
57 $( '#controls' ).addClass( 'debug' );
mir3636
parents:
diff changeset
58 }
mir3636
parents:
diff changeset
59
mir3636
parents:
diff changeset
60 Slideshow.ctrlDebugOff = function()
mir3636
parents:
diff changeset
61 {
mir3636
parents:
diff changeset
62 this.debug( 'calling ctrlDebugOff()' );
mir3636
parents:
diff changeset
63 $( '#controls' ).removeClass( 'debug' );
mir3636
parents:
diff changeset
64 }
mir3636
parents:
diff changeset
65
mir3636
parents:
diff changeset
66 Slideshow.ctrlKeys = function( event, key )
mir3636
parents:
diff changeset
67 {
mir3636
parents:
diff changeset
68 this.debug( 'calling ctrlKeys()' );
mir3636
parents:
diff changeset
69
mir3636
parents:
diff changeset
70 switch( key.which ) {
mir3636
parents:
diff changeset
71 case 67: // c
mir3636
parents:
diff changeset
72 this.ctrlToggle();
mir3636
parents:
diff changeset
73 break;
mir3636
parents:
diff changeset
74 }
mir3636
parents:
diff changeset
75 }
mir3636
parents:
diff changeset
76
mir3636
parents:
diff changeset
77 Slideshow.ctrlChange = function()
mir3636
parents:
diff changeset
78 {
mir3636
parents:
diff changeset
79 this.debug( 'calling ctrlChange()' );
mir3636
parents:
diff changeset
80 this.ctrlUpdateJumpList();
mir3636
parents:
diff changeset
81 }
mir3636
parents:
diff changeset
82
mir3636
parents:
diff changeset
83 // -----------------------------------------------------
mir3636
parents:
diff changeset
84
mir3636
parents:
diff changeset
85 Slideshow.ctrlPopulateJumpList = function()
mir3636
parents:
diff changeset
86 {
mir3636
parents:
diff changeset
87 var self = this; // NOTE: jquery binds this in .each to element
mir3636
parents:
diff changeset
88
mir3636
parents:
diff changeset
89 var list = $('#jumplist').get(0);
mir3636
parents:
diff changeset
90
mir3636
parents:
diff changeset
91 this.$slides.each( function(i) {
mir3636
parents:
diff changeset
92 var text = "-"; // untitled slide
mir3636
parents:
diff changeset
93
mir3636
parents:
diff changeset
94 // todo: use titleSelector if user set??
mir3636
parents:
diff changeset
95 // $(this).find( self.settings.titleSelector ).text();
mir3636
parents:
diff changeset
96
mir3636
parents:
diff changeset
97 var $h1 = $( 'h1', this );
mir3636
parents:
diff changeset
98 if( $h1.length > 0 )
mir3636
parents:
diff changeset
99 {
mir3636
parents:
diff changeset
100 text = $h1.first().text();
mir3636
parents:
diff changeset
101 }
mir3636
parents:
diff changeset
102 else // try h2
mir3636
parents:
diff changeset
103 {
mir3636
parents:
diff changeset
104 var $h2 = $( 'h2', this );
mir3636
parents:
diff changeset
105 if( $h2.length > 0 )
mir3636
parents:
diff changeset
106 {
mir3636
parents:
diff changeset
107 text = $h2.first().text();
mir3636
parents:
diff changeset
108 }
mir3636
parents:
diff changeset
109 else // try h3
mir3636
parents:
diff changeset
110 {
mir3636
parents:
diff changeset
111 var $h3 = $( 'h3', this );
mir3636
parents:
diff changeset
112 if( $h3.length > 0 )
mir3636
parents:
diff changeset
113 {
mir3636
parents:
diff changeset
114 text = $h3.first().text();
mir3636
parents:
diff changeset
115 }
mir3636
parents:
diff changeset
116 }
mir3636
parents:
diff changeset
117 }
mir3636
parents:
diff changeset
118
mir3636
parents:
diff changeset
119 list.options[list.length] = new Option( (i+1)+' : '+ text, (i+1) );
mir3636
parents:
diff changeset
120 });
mir3636
parents:
diff changeset
121 }
mir3636
parents:
diff changeset
122
mir3636
parents:
diff changeset
123 Slideshow.ctrlUpdateJumpList = function()
mir3636
parents:
diff changeset
124 {
mir3636
parents:
diff changeset
125 $('#jumplist').get(0).selectedIndex = (this.snum-1);
mir3636
parents:
diff changeset
126 }
mir3636
parents:
diff changeset
127
mir3636
parents:
diff changeset
128 Slideshow.ctrlShow = function()
mir3636
parents:
diff changeset
129 {
mir3636
parents:
diff changeset
130 $( '#navLinks' ).css( 'visibility', 'visible' );
mir3636
parents:
diff changeset
131 }
mir3636
parents:
diff changeset
132
mir3636
parents:
diff changeset
133 Slideshow.ctrlHide = function()
mir3636
parents:
diff changeset
134 {
mir3636
parents:
diff changeset
135 $( '#navLinks' ).css( 'visibility', 'hidden' );
mir3636
parents:
diff changeset
136 }
mir3636
parents:
diff changeset
137
mir3636
parents:
diff changeset
138 Slideshow.ctrlToggle = function()
mir3636
parents:
diff changeset
139 {
mir3636
parents:
diff changeset
140 // toggle control panel
mir3636
parents:
diff changeset
141 var $navLinks = $( '#navLinks' );
mir3636
parents:
diff changeset
142
mir3636
parents:
diff changeset
143 if( $navLinks.css( 'visibility' ) != 'visible' )
mir3636
parents:
diff changeset
144 $navLinks.css( 'visibility', 'visible' );
mir3636
parents:
diff changeset
145 else
mir3636
parents:
diff changeset
146 $navLinks.css( 'visibility', 'hidden' );
mir3636
parents:
diff changeset
147 }
mir3636
parents:
diff changeset
148
mir3636
parents:
diff changeset
149
mir3636
parents:
diff changeset
150 // ------------------------------------------------
mir3636
parents:
diff changeset
151
mir3636
parents:
diff changeset
152 Slideshow.ctrlAddEvents = function()
mir3636
parents:
diff changeset
153 {
mir3636
parents:
diff changeset
154 $( document ).on( 'slideshow.init', $.proxy( Slideshow.ctrlInit, this ));
mir3636
parents:
diff changeset
155 $( document ).on( 'slideshow.debug.on', $.proxy( Slideshow.ctrlDebugOn, this ));
mir3636
parents:
diff changeset
156 $( document ).on( 'slideshow.debug.off', $.proxy( Slideshow.ctrlDebugOff, this ));
mir3636
parents:
diff changeset
157 $( document ).on( 'slideshow.keys', $.proxy( Slideshow.ctrlKeys, this ));
mir3636
parents:
diff changeset
158 $( document ).on( 'slideshow.change', $.proxy( Slideshow.ctrlChange, this ));
mir3636
parents:
diff changeset
159 }
mir3636
parents:
diff changeset
160
mir3636
parents:
diff changeset
161 Slideshow.ctrlAddStyles = function() {
mir3636
parents:
diff changeset
162 this.debug( 'add builtin controls css via inline style elements' );
mir3636
parents:
diff changeset
163
mir3636
parents:
diff changeset
164 var styleProjection =
mir3636
parents:
diff changeset
165 "<style media='screen,projection'> \n"+
mir3636
parents:
diff changeset
166 " \n"+
mir3636
parents:
diff changeset
167 " #controls.debug { background: #BBD; } \n"+
mir3636
parents:
diff changeset
168 " \n"+
mir3636
parents:
diff changeset
169 " #controls { position: fixed; \n"+
mir3636
parents:
diff changeset
170 " left: 60%; bottom: 0; \n"+
mir3636
parents:
diff changeset
171 " width: 40%; \n"+
mir3636
parents:
diff changeset
172 " z-index: 100; \n"+
mir3636
parents:
diff changeset
173 " text-align: right; \n"+
mir3636
parents:
diff changeset
174 " font-weight: bold; \n"+
mir3636
parents:
diff changeset
175 " font-size: 120%; \n"+
mir3636
parents:
diff changeset
176 " } \n"+
mir3636
parents:
diff changeset
177 " \n"+
mir3636
parents:
diff changeset
178 " #controls :focus { outline: 1px dotted white;} \n"+
mir3636
parents:
diff changeset
179 " \n"+
mir3636
parents:
diff changeset
180 " #controls #navLinks { text-align: right; margin: 0; visibility: hidden; } \n"+
mir3636
parents:
diff changeset
181
mir3636
parents:
diff changeset
182 " \n"+
mir3636
parents:
diff changeset
183 " #controls #navLinks a { padding: 0; margin: 0 0.5em; cursor: pointer; border: none; } \n"+
mir3636
parents:
diff changeset
184 " \n"+
mir3636
parents:
diff changeset
185 " #controls #navLinks :link, \n"+
mir3636
parents:
diff changeset
186 " #controls #navLinks :visited {text-decoration: none; } \n"+
mir3636
parents:
diff changeset
187 " \n"+
mir3636
parents:
diff changeset
188 " #controls #navList #jumplist { background: white; color: black; } \n"+
mir3636
parents:
diff changeset
189 "</style>";
mir3636
parents:
diff changeset
190
mir3636
parents:
diff changeset
191 var styleScreen =
mir3636
parents:
diff changeset
192 "<style media='screen'> \n"+
mir3636
parents:
diff changeset
193 "/********* \n"+
mir3636
parents:
diff changeset
194 " * make toggle button visible and reposition to upper right corner \n"+
mir3636
parents:
diff changeset
195 " * note: toogle button is nested inside #controls > #navLinks > #toogle \n"+
mir3636
parents:
diff changeset
196 " */ \n"+
mir3636
parents:
diff changeset
197 " \n"+
mir3636
parents:
diff changeset
198 " #controls, \n"+
mir3636
parents:
diff changeset
199 " #navLinks, \n"+
mir3636
parents:
diff changeset
200 " #toggle { display: block; \n"+
mir3636
parents:
diff changeset
201 " visibility: visible; \n"+
mir3636
parents:
diff changeset
202 " margin: 0; padding: 0; \n"+
mir3636
parents:
diff changeset
203 " } \n"+
mir3636
parents:
diff changeset
204 " \n"+
mir3636
parents:
diff changeset
205 " #toggle { position: fixed; \n"+
mir3636
parents:
diff changeset
206 " top: 0; right: 0; \n"+
mir3636
parents:
diff changeset
207 " padding: 0.5em; \n"+
mir3636
parents:
diff changeset
208 " border-left: 1px solid; \n"+
mir3636
parents:
diff changeset
209 " border-bottom: 1px solid; \n"+
mir3636
parents:
diff changeset
210 " background: white; \n"+
mir3636
parents:
diff changeset
211 " } \n"+
mir3636
parents:
diff changeset
212 "</style>";
mir3636
parents:
diff changeset
213
mir3636
parents:
diff changeset
214 $( 'head' ).append( styleProjection );
mir3636
parents:
diff changeset
215 $( 'head' ).append( styleScreen );
mir3636
parents:
diff changeset
216 }
mir3636
parents:
diff changeset
217
mir3636
parents:
diff changeset
218 Slideshow.ctrlAddStyles();
mir3636
parents:
diff changeset
219 Slideshow.ctrlAddEvents();