annotate poster/os9/ui/google/slides.js @ 8:7fd82a802a66

add os9
author anatofuz
date Fri, 19 Apr 2019 18:23:10 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
1 /*
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
2 Google HTML5 slides template
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
3
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
4 Authors: Luke Mahé (code)
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
5 Marcin Wichary (code and design)
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
6
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
7 Dominic Mazzoni (browser compatibility)
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
8 Charles Chen (ChromeVox support)
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
9
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
10 URL: http://code.google.com/p/html5slides/
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
11
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
12
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
13 var PERMANENT_URL_PREFIX = 'http://html5slides.googlecode.com/svn/trunk/';
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
14 */
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
15 var PERMANENT_URL_PREFIX = './ui/google/';
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
16 var SLIDE_CLASSES = ['far-past', 'past', 'current', 'next', 'far-next'];
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
17
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
18 var PM_TOUCH_SENSITIVITY = 15;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
19
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
20 var curSlide;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
21
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
22 /* ---------------------------------------------------------------------- */
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
23 /* classList polyfill by Eli Grey
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
24 * (http://purl.eligrey.com/github/classList.js/blob/master/classList.js) */
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
25
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
26 if (typeof document !== "undefined" && !("classList" in document.createElement("a"))) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
27
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
28 (function (view) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
29
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
30 var
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
31 classListProp = "classList"
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
32 , protoProp = "prototype"
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
33 , elemCtrProto = (view.HTMLElement || view.Element)[protoProp]
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
34 , objCtr = Object
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
35 strTrim = String[protoProp].trim || function () {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
36 return this.replace(/^\s+|\s+$/g, "");
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
37 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
38 , arrIndexOf = Array[protoProp].indexOf || function (item) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
39 for (var i = 0, len = this.length; i < len; i++) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
40 if (i in this && this[i] === item) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
41 return i;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
42 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
43 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
44 return -1;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
45 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
46 // Vendors: please allow content code to instantiate DOMExceptions
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
47 , DOMEx = function (type, message) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
48 this.name = type;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
49 this.code = DOMException[type];
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
50 this.message = message;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
51 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
52 , checkTokenAndGetIndex = function (classList, token) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
53 if (token === "") {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
54 throw new DOMEx(
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
55 "SYNTAX_ERR"
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
56 , "An invalid or illegal string was specified"
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
57 );
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
58 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
59 if (/\s/.test(token)) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
60 throw new DOMEx(
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
61 "INVALID_CHARACTER_ERR"
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
62 , "String contains an invalid character"
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
63 );
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
64 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
65 return arrIndexOf.call(classList, token);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
66 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
67 , ClassList = function (elem) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
68 var
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
69 trimmedClasses = strTrim.call(elem.className)
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
70 , classes = trimmedClasses ? trimmedClasses.split(/\s+/) : []
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
71 ;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
72 for (var i = 0, len = classes.length; i < len; i++) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
73 this.push(classes[i]);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
74 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
75 this._updateClassName = function () {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
76 elem.className = this.toString();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
77 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
78 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
79 , classListProto = ClassList[protoProp] = []
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
80 , classListGetter = function () {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
81 return new ClassList(this);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
82 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
83 ;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
84 // Most DOMException implementations don't allow calling DOMException's toString()
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
85 // on non-DOMExceptions. Error's toString() is sufficient here.
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
86 DOMEx[protoProp] = Error[protoProp];
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
87 classListProto.item = function (i) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
88 return this[i] || null;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
89 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
90 classListProto.contains = function (token) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
91 token += "";
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
92 return checkTokenAndGetIndex(this, token) !== -1;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
93 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
94 classListProto.add = function (token) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
95 token += "";
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
96 if (checkTokenAndGetIndex(this, token) === -1) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
97 this.push(token);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
98 this._updateClassName();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
99 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
100 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
101 classListProto.remove = function (token) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
102 token += "";
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
103 var index = checkTokenAndGetIndex(this, token);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
104 if (index !== -1) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
105 this.splice(index, 1);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
106 this._updateClassName();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
107 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
108 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
109 classListProto.toggle = function (token) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
110 token += "";
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
111 if (checkTokenAndGetIndex(this, token) === -1) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
112 this.add(token);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
113 } else {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
114 this.remove(token);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
115 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
116 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
117 classListProto.toString = function () {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
118 return this.join(" ");
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
119 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
120
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
121 if (objCtr.defineProperty) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
122 var classListPropDesc = {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
123 get: classListGetter
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
124 , enumerable: true
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
125 , configurable: true
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
126 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
127 try {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
128 objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
129 } catch (ex) { // IE 8 doesn't support enumerable:true
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
130 if (ex.number === -0x7FF5EC54) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
131 classListPropDesc.enumerable = false;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
132 objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
133 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
134 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
135 } else if (objCtr[protoProp].__defineGetter__) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
136 elemCtrProto.__defineGetter__(classListProp, classListGetter);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
137 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
138
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
139 }(self));
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
140
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
141 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
142 /* ---------------------------------------------------------------------- */
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
143
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
144 /* Slide movement */
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
145
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
146 function getSlideEl(no) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
147 if ((no < 0) || (no >= slideEls.length)) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
148 return null;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
149 } else {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
150 return slideEls[no];
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
151 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
152 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
153
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
154 function updateSlideClass(slideNo, className) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
155 var el = getSlideEl(slideNo);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
156
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
157 if (!el) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
158 return;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
159 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
160
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
161 if (className) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
162 el.classList.add(className);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
163 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
164
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
165 for (var i in SLIDE_CLASSES) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
166 if (className != SLIDE_CLASSES[i]) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
167 el.classList.remove(SLIDE_CLASSES[i]);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
168 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
169 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
170 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
171
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
172 function updateSlides() {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
173 for (var i = 0; i < slideEls.length; i++) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
174 switch (i) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
175 case curSlide - 2:
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
176 updateSlideClass(i, 'far-past');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
177 break;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
178 case curSlide - 1:
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
179 updateSlideClass(i, 'past');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
180 break;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
181 case curSlide:
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
182 updateSlideClass(i, 'current');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
183 break;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
184 case curSlide + 1:
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
185 updateSlideClass(i, 'next');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
186 break;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
187 case curSlide + 2:
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
188 updateSlideClass(i, 'far-next');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
189 break;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
190 default:
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
191 updateSlideClass(i);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
192 break;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
193 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
194 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
195
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
196 triggerLeaveEvent(curSlide - 1);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
197 triggerEnterEvent(curSlide);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
198
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
199 window.setTimeout(function() {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
200 // Hide after the slide
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
201 disableSlideFrames(curSlide - 2);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
202 }, 301);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
203
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
204 enableSlideFrames(curSlide - 1);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
205 enableSlideFrames(curSlide + 2);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
206
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
207 if (isChromeVoxActive()) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
208 speakAndSyncToNode(slideEls[curSlide]);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
209 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
210
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
211 updateHash();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
212 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
213
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
214 function buildNextItem() {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
215 var toBuild = slideEls[curSlide].querySelectorAll('.to-build');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
216
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
217 if (!toBuild.length) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
218 return false;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
219 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
220
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
221 toBuild[0].classList.remove('to-build', '');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
222
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
223 if (isChromeVoxActive()) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
224 speakAndSyncToNode(toBuild[0]);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
225 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
226
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
227 return true;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
228 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
229
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
230 function prevSlide() {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
231 if (curSlide > 0) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
232 curSlide--;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
233
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
234 updateSlides();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
235 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
236 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
237
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
238 function nextSlide() {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
239 if (buildNextItem()) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
240 return;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
241 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
242
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
243 if (curSlide < slideEls.length - 1) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
244 curSlide++;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
245
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
246 updateSlides();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
247 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
248 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
249
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
250 /* Slide events */
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
251
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
252 function triggerEnterEvent(no) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
253 var el = getSlideEl(no);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
254 if (!el) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
255 return;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
256 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
257
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
258 var onEnter = el.getAttribute('onslideenter');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
259 if (onEnter) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
260 new Function(onEnter).call(el);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
261 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
262
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
263 var evt = document.createEvent('Event');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
264 evt.initEvent('slideenter', true, true);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
265 evt.slideNumber = no + 1; // Make it readable
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
266
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
267 el.dispatchEvent(evt);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
268 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
269
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
270 function triggerLeaveEvent(no) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
271 var el = getSlideEl(no);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
272 if (!el) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
273 return;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
274 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
275
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
276 var onLeave = el.getAttribute('onslideleave');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
277 if (onLeave) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
278 new Function(onLeave).call(el);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
279 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
280
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
281 var evt = document.createEvent('Event');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
282 evt.initEvent('slideleave', true, true);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
283 evt.slideNumber = no + 1; // Make it readable
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
284
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
285 el.dispatchEvent(evt);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
286 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
287
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
288 /* Touch events */
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
289
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
290 function handleTouchStart(event) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
291 if (event.touches.length == 1) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
292 touchDX = 0;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
293 touchDY = 0;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
294
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
295 touchStartX = event.touches[0].pageX;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
296 touchStartY = event.touches[0].pageY;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
297
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
298 document.body.addEventListener('touchmove', handleTouchMove, true);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
299 document.body.addEventListener('touchend', handleTouchEnd, true);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
300 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
301 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
302
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
303 function handleTouchMove(event) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
304 if (event.touches.length > 1) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
305 cancelTouch();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
306 } else {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
307 touchDX = event.touches[0].pageX - touchStartX;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
308 touchDY = event.touches[0].pageY - touchStartY;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
309 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
310 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
311
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
312 function handleTouchEnd(event) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
313 var dx = Math.abs(touchDX);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
314 var dy = Math.abs(touchDY);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
315
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
316 if ((dx > PM_TOUCH_SENSITIVITY) && (dy < (dx * 2 / 3))) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
317 if (touchDX > 0) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
318 prevSlide();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
319 } else {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
320 nextSlide();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
321 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
322 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
323
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
324 cancelTouch();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
325 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
326
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
327 function cancelTouch() {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
328 document.body.removeEventListener('touchmove', handleTouchMove, true);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
329 document.body.removeEventListener('touchend', handleTouchEnd, true);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
330 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
331
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
332 /* Preloading frames */
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
333
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
334 function disableSlideFrames(no) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
335 var el = getSlideEl(no);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
336 if (!el) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
337 return;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
338 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
339
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
340 var frames = el.getElementsByTagName('iframe');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
341 for (var i = 0, frame; frame = frames[i]; i++) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
342 disableFrame(frame);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
343 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
344 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
345
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
346 function enableSlideFrames(no) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
347 var el = getSlideEl(no);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
348 if (!el) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
349 return;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
350 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
351
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
352 var frames = el.getElementsByTagName('iframe');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
353 for (var i = 0, frame; frame = frames[i]; i++) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
354 enableFrame(frame);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
355 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
356 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
357
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
358 function disableFrame(frame) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
359 frame.src = 'about:blank';
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
360 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
361
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
362 function enableFrame(frame) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
363 var src = frame._src;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
364
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
365 if (frame.src != src && src != 'about:blank') {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
366 frame.src = src;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
367 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
368 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
369
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
370 function setupFrames() {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
371 var frames = document.querySelectorAll('iframe');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
372 for (var i = 0, frame; frame = frames[i]; i++) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
373 frame._src = frame.src;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
374 disableFrame(frame);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
375 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
376
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
377 enableSlideFrames(curSlide);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
378 enableSlideFrames(curSlide + 1);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
379 enableSlideFrames(curSlide + 2);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
380 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
381
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
382 function setupInteraction() {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
383 /* Clicking and tapping */
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
384
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
385 var el = document.createElement('div');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
386 el.className = 'slide-area';
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
387 el.id = 'prev-slide-area';
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
388 el.addEventListener('click', prevSlide, false);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
389 document.querySelector('section.slides').appendChild(el);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
390
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
391 var el = document.createElement('div');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
392 el.className = 'slide-area';
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
393 el.id = 'next-slide-area';
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
394 el.addEventListener('click', nextSlide, false);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
395 document.querySelector('section.slides').appendChild(el);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
396
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
397 /* Swiping */
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
398
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
399 document.body.addEventListener('touchstart', handleTouchStart, false);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
400 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
401
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
402 /* ChromeVox support */
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
403
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
404 function isChromeVoxActive() {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
405 if (typeof(cvox) == 'undefined') {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
406 return false;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
407 } else {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
408 return true;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
409 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
410 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
411
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
412 function speakAndSyncToNode(node) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
413 if (!isChromeVoxActive()) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
414 return;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
415 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
416
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
417 cvox.ChromeVox.navigationManager.switchToStrategy(
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
418 cvox.ChromeVoxNavigationManager.STRATEGIES.LINEARDOM, 0, true);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
419 cvox.ChromeVox.navigationManager.syncToNode(node);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
420 cvox.ChromeVoxUserCommands.finishNavCommand('');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
421 var target = node;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
422 while (target.firstChild) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
423 target = target.firstChild;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
424 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
425 cvox.ChromeVox.navigationManager.syncToNode(target);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
426 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
427
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
428 function speakNextItem() {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
429 if (!isChromeVoxActive()) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
430 return;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
431 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
432
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
433 cvox.ChromeVox.navigationManager.switchToStrategy(
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
434 cvox.ChromeVoxNavigationManager.STRATEGIES.LINEARDOM, 0, true);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
435 cvox.ChromeVox.navigationManager.next(true);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
436 if (!cvox.DomUtil.isDescendantOfNode(
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
437 cvox.ChromeVox.navigationManager.getCurrentNode(), slideEls[curSlide])){
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
438 var target = slideEls[curSlide];
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
439 while (target.firstChild) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
440 target = target.firstChild;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
441 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
442 cvox.ChromeVox.navigationManager.syncToNode(target);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
443 cvox.ChromeVox.navigationManager.next(true);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
444 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
445 cvox.ChromeVoxUserCommands.finishNavCommand('');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
446 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
447
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
448 function speakPrevItem() {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
449 if (!isChromeVoxActive()) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
450 return;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
451 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
452
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
453 cvox.ChromeVox.navigationManager.switchToStrategy(
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
454 cvox.ChromeVoxNavigationManager.STRATEGIES.LINEARDOM, 0, true);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
455 cvox.ChromeVox.navigationManager.previous(true);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
456 if (!cvox.DomUtil.isDescendantOfNode(
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
457 cvox.ChromeVox.navigationManager.getCurrentNode(), slideEls[curSlide])){
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
458 var target = slideEls[curSlide];
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
459 while (target.lastChild){
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
460 target = target.lastChild;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
461 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
462 cvox.ChromeVox.navigationManager.syncToNode(target);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
463 cvox.ChromeVox.navigationManager.previous(true);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
464 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
465 cvox.ChromeVoxUserCommands.finishNavCommand('');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
466 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
467
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
468 /* Hash functions */
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
469
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
470 function getCurSlideFromHash() {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
471 var slideNo = parseInt(location.hash.substr(1));
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
472
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
473 if (slideNo) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
474 curSlide = slideNo - 1;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
475 } else {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
476 curSlide = 0;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
477 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
478 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
479
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
480 function updateHash() {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
481 location.replace('#' + (curSlide + 1));
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
482 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
483
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
484 /* Event listeners */
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
485
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
486 function handleBodyKeyDown(event) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
487 switch (event.keyCode) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
488 case 39: // right arrow
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
489 case 13: // Enter
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
490 case 32: // space
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
491 case 34: // PgDn
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
492 nextSlide();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
493 event.preventDefault();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
494 break;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
495
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
496 case 37: // left arrow
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
497 case 8: // Backspace
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
498 case 33: // PgUp
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
499 prevSlide();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
500 event.preventDefault();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
501 break;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
502
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
503 case 40: // down arrow
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
504 if (isChromeVoxActive()) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
505 speakNextItem();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
506 } else {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
507 nextSlide();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
508 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
509 event.preventDefault();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
510 break;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
511
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
512 case 38: // up arrow
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
513 if (isChromeVoxActive()) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
514 speakPrevItem();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
515 } else {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
516 prevSlide();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
517 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
518 event.preventDefault();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
519 break;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
520 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
521 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
522
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
523 function addEventListeners() {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
524 document.addEventListener('keydown', handleBodyKeyDown, false);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
525 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
526
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
527 /* Initialization */
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
528
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
529 function addPrettify() {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
530 var els = document.querySelectorAll('pre');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
531 for (var i = 0, el; el = els[i]; i++) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
532 if (!el.classList.contains('noprettyprint')) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
533 el.classList.add('prettyprint');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
534 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
535 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
536
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
537 var el = document.createElement('script');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
538 el.type = 'text/javascript';
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
539 el.src = PERMANENT_URL_PREFIX + 'prettify.js';
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
540 el.onload = function() {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
541 prettyPrint();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
542 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
543 document.body.appendChild(el);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
544 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
545
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
546 function addFontStyle() {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
547 var el = document.createElement('link');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
548 el.rel = 'stylesheet';
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
549 el.type = 'text/css';
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
550 el.href = 'http://fonts.googleapis.com/css?family=' +
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
551 'Open+Sans:regular,semibold,italic,italicsemibold|Droid+Sans+Mono';
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
552
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
553 document.body.appendChild(el);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
554 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
555
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
556 function addGeneralStyle() {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
557 var el = document.createElement('link');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
558 el.rel = 'stylesheet';
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
559 el.type = 'text/css';
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
560 el.href = PERMANENT_URL_PREFIX + 'styles.css';
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
561 document.body.appendChild(el);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
562
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
563 var el = document.createElement('meta');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
564 el.name = 'viewport';
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
565 el.content = 'width=1100,height=750';
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
566 document.querySelector('head').appendChild(el);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
567
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
568 var el = document.createElement('meta');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
569 el.name = 'apple-mobile-web-app-capable';
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
570 el.content = 'yes';
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
571 document.querySelector('head').appendChild(el);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
572 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
573
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
574 function makeBuildLists() {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
575 for (var i = curSlide, slide; slide = slideEls[i]; i++) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
576 var items = slide.querySelectorAll('.build > *');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
577 for (var j = 0, item; item = items[j]; j++) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
578 if (item.classList) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
579 item.classList.add('to-build');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
580 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
581 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
582 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
583 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
584
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
585 function handleDomLoaded() {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
586 slideEls = document.querySelectorAll('section.slides > article');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
587
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
588 setupFrames();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
589
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
590 addFontStyle();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
591 addGeneralStyle();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
592 addPrettify();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
593 addEventListeners();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
594
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
595 updateSlides();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
596
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
597 setupInteraction();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
598 makeBuildLists();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
599
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
600 document.body.classList.add('loaded');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
601 };
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
602
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
603 function initialize() {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
604 getCurSlideFromHash();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
605
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
606 if (window['_DEBUG']) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
607 PERMANENT_URL_PREFIX = '../';
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
608 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
609
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
610 if (window['_DCL']) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
611 handleDomLoaded();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
612 } else {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
613 document.addEventListener('DOMContentLoaded', handleDomLoaded, false);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
614 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
615 }
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
616
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
617 // If ?debug exists then load the script relative instead of absolute
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
618 if (!window['_DEBUG'] && document.location.href.indexOf('?debug') !== -1) {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
619 document.addEventListener('DOMContentLoaded', function() {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
620 // Avoid missing the DomContentLoaded event
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
621 window['_DCL'] = true
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
622 }, false);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
623
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
624 window['_DEBUG'] = true;
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
625 var script = document.createElement('script');
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
626 script.type = 'text/javascript';
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
627 script.src = '../slides.js';
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
628 var s = document.getElementsByTagName('script')[0];
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
629 s.parentNode.insertBefore(script, s);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
630
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
631 // Remove this script
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
632 s.parentNode.removeChild(s);
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
633 } else {
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
634 initialize();
7fd82a802a66 add os9
anatofuz
parents:
diff changeset
635 }