annotate presen/slidy.js @ 7:a2e7c1716ad2

fix resume
author aaa
date Sat, 13 Feb 2010 14:58:37 +0900
parents afa29ac9f050
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
afa29ac9f050 add presen
aaa
parents:
diff changeset
1 /* slidy.js
afa29ac9f050 add presen
aaa
parents:
diff changeset
2
afa29ac9f050 add presen
aaa
parents:
diff changeset
3 Copyright (c) 2005-2009 W3C (MIT, ERCIM, Keio), All Rights Reserved.
afa29ac9f050 add presen
aaa
parents:
diff changeset
4 W3C liability, trademark, document use and software licensing
afa29ac9f050 add presen
aaa
parents:
diff changeset
5 rules apply, see:
afa29ac9f050 add presen
aaa
parents:
diff changeset
6
afa29ac9f050 add presen
aaa
parents:
diff changeset
7 http://www.w3.org/Consortium/Legal/copyright-documents
afa29ac9f050 add presen
aaa
parents:
diff changeset
8 http://www.w3.org/Consortium/Legal/copyright-software
afa29ac9f050 add presen
aaa
parents:
diff changeset
9 */
afa29ac9f050 add presen
aaa
parents:
diff changeset
10
afa29ac9f050 add presen
aaa
parents:
diff changeset
11 var ns_pos = (typeof window.pageYOffset!='undefined');
afa29ac9f050 add presen
aaa
parents:
diff changeset
12 var khtml = ((navigator.userAgent).indexOf("KHTML") >= 0 ? true : false);
afa29ac9f050 add presen
aaa
parents:
diff changeset
13 var opera = ((navigator.userAgent).indexOf("Opera") >= 0 ? true : false);
afa29ac9f050 add presen
aaa
parents:
diff changeset
14 var ie = (typeof document.all != "undefined" && !opera);
afa29ac9f050 add presen
aaa
parents:
diff changeset
15 var ie7 = (!ns_pos && navigator.userAgent.indexOf("MSIE 7") != -1);
afa29ac9f050 add presen
aaa
parents:
diff changeset
16 var ie8 = (!ns_pos && navigator.userAgent.indexOf("MSIE 8") != -1);
afa29ac9f050 add presen
aaa
parents:
diff changeset
17 var slidy_started = false;
afa29ac9f050 add presen
aaa
parents:
diff changeset
18
afa29ac9f050 add presen
aaa
parents:
diff changeset
19 if (ie && !ie8)
afa29ac9f050 add presen
aaa
parents:
diff changeset
20 document.write("<iframe id='historyFrame' src='javascript:\"<html"+"></"+"html>\"' height='1' width='1' style='position:absolute;left:-800px'></iframe>");
afa29ac9f050 add presen
aaa
parents:
diff changeset
21
afa29ac9f050 add presen
aaa
parents:
diff changeset
22 // IE only event handlers to ensure all slides are printed
afa29ac9f050 add presen
aaa
parents:
diff changeset
23 // I don't yet know how to emulate these for other browsers
afa29ac9f050 add presen
aaa
parents:
diff changeset
24 if (typeof beforePrint != 'undefined')
afa29ac9f050 add presen
aaa
parents:
diff changeset
25 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
26 window.onbeforeprint = beforePrint;
afa29ac9f050 add presen
aaa
parents:
diff changeset
27 window.onafterprint = afterPrint;
afa29ac9f050 add presen
aaa
parents:
diff changeset
28 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
29
afa29ac9f050 add presen
aaa
parents:
diff changeset
30 // to avoid a clash with other scripts or onload attribute on <body>
afa29ac9f050 add presen
aaa
parents:
diff changeset
31 // we use something smarter than window.onload
afa29ac9f050 add presen
aaa
parents:
diff changeset
32 //window.onload = startup;
afa29ac9f050 add presen
aaa
parents:
diff changeset
33
afa29ac9f050 add presen
aaa
parents:
diff changeset
34
afa29ac9f050 add presen
aaa
parents:
diff changeset
35 if (ie)
afa29ac9f050 add presen
aaa
parents:
diff changeset
36 setTimeout(ieSlidyInit, 100);
afa29ac9f050 add presen
aaa
parents:
diff changeset
37 else if (document.addEventListener)
afa29ac9f050 add presen
aaa
parents:
diff changeset
38 document.addEventListener("DOMContentLoaded", startup, false);
afa29ac9f050 add presen
aaa
parents:
diff changeset
39
afa29ac9f050 add presen
aaa
parents:
diff changeset
40 function ieSlidyInit()
afa29ac9f050 add presen
aaa
parents:
diff changeset
41 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
42 if (//document.readyState == "interactive" ||
afa29ac9f050 add presen
aaa
parents:
diff changeset
43 document.readyState == "complete" ||
afa29ac9f050 add presen
aaa
parents:
diff changeset
44 document.readyState == "loaded")
afa29ac9f050 add presen
aaa
parents:
diff changeset
45 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
46 startup();
afa29ac9f050 add presen
aaa
parents:
diff changeset
47 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
48 else
afa29ac9f050 add presen
aaa
parents:
diff changeset
49 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
50 setTimeout(ieSlidyInit, 100);
afa29ac9f050 add presen
aaa
parents:
diff changeset
51 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
52 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
53
afa29ac9f050 add presen
aaa
parents:
diff changeset
54 setTimeout(hideSlides, 50);
afa29ac9f050 add presen
aaa
parents:
diff changeset
55
afa29ac9f050 add presen
aaa
parents:
diff changeset
56 function hideSlides()
afa29ac9f050 add presen
aaa
parents:
diff changeset
57 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
58 if (document.body)
afa29ac9f050 add presen
aaa
parents:
diff changeset
59 document.body.style.visibility = "hidden";
afa29ac9f050 add presen
aaa
parents:
diff changeset
60 else
afa29ac9f050 add presen
aaa
parents:
diff changeset
61 setTimeout(hideSlides, 50);
afa29ac9f050 add presen
aaa
parents:
diff changeset
62 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
63
afa29ac9f050 add presen
aaa
parents:
diff changeset
64 var slidenum = 0; // integer slide count: 0, 1, 2, ...
afa29ac9f050 add presen
aaa
parents:
diff changeset
65 var slides; // set to array of slide div's
afa29ac9f050 add presen
aaa
parents:
diff changeset
66 var slideNumElement; // element containing slide number
afa29ac9f050 add presen
aaa
parents:
diff changeset
67 var notes; // set to array of handout div's
afa29ac9f050 add presen
aaa
parents:
diff changeset
68 var backgrounds; // set to array of background div's
afa29ac9f050 add presen
aaa
parents:
diff changeset
69 var toolbar; // element containing toolbar
afa29ac9f050 add presen
aaa
parents:
diff changeset
70 var title; // document title
afa29ac9f050 add presen
aaa
parents:
diff changeset
71 var lastShown = null; // last incrementally shown item
afa29ac9f050 add presen
aaa
parents:
diff changeset
72 var eos = null; // span element for end of slide indicator
afa29ac9f050 add presen
aaa
parents:
diff changeset
73 var toc = null; // table of contents
afa29ac9f050 add presen
aaa
parents:
diff changeset
74 var outline = null; // outline element with the focus
afa29ac9f050 add presen
aaa
parents:
diff changeset
75 var selectedTextLen; // length of drag selection on document
afa29ac9f050 add presen
aaa
parents:
diff changeset
76
afa29ac9f050 add presen
aaa
parents:
diff changeset
77 var viewAll = 0; // 1 to view all slides + handouts
afa29ac9f050 add presen
aaa
parents:
diff changeset
78 var wantToolbar = 1; // 0 if toolbar isn't wanted
afa29ac9f050 add presen
aaa
parents:
diff changeset
79 var mouseClickEnabled = true; // enables left click for next slide
afa29ac9f050 add presen
aaa
parents:
diff changeset
80 var scrollhack = 0; // IE work around for position: fixed
afa29ac9f050 add presen
aaa
parents:
diff changeset
81
afa29ac9f050 add presen
aaa
parents:
diff changeset
82 var helpAnchor; // used for keyboard focus hack in showToolbar()
afa29ac9f050 add presen
aaa
parents:
diff changeset
83 var helpPage = "http://www.w3.org/Talks/Tools/Slidy/help.html";
afa29ac9f050 add presen
aaa
parents:
diff changeset
84 var helpText = "Navigate with mouse click, space bar, Cursor Left/Right, " +
afa29ac9f050 add presen
aaa
parents:
diff changeset
85 "or Pg Up and Pg Dn. Use S and B to change font size.";
afa29ac9f050 add presen
aaa
parents:
diff changeset
86
afa29ac9f050 add presen
aaa
parents:
diff changeset
87 var sizeIndex = 0;
afa29ac9f050 add presen
aaa
parents:
diff changeset
88 var sizeAdjustment = 0;
afa29ac9f050 add presen
aaa
parents:
diff changeset
89 var sizes = new Array("10pt", "12pt", "14pt", "16pt", "18pt", "20pt",
afa29ac9f050 add presen
aaa
parents:
diff changeset
90 "22pt", "24pt", "26pt", "28pt", "30pt", "32pt");
afa29ac9f050 add presen
aaa
parents:
diff changeset
91 var okayForIncremental = incrementalElementList();
afa29ac9f050 add presen
aaa
parents:
diff changeset
92
afa29ac9f050 add presen
aaa
parents:
diff changeset
93 // needed for efficient resizing
afa29ac9f050 add presen
aaa
parents:
diff changeset
94 var lastWidth = 0;
afa29ac9f050 add presen
aaa
parents:
diff changeset
95 var lastHeight = 0;
afa29ac9f050 add presen
aaa
parents:
diff changeset
96
afa29ac9f050 add presen
aaa
parents:
diff changeset
97 // Needed for cross browser support for relative width/height on
afa29ac9f050 add presen
aaa
parents:
diff changeset
98 // object elements. The work around is to save width/height attributes
afa29ac9f050 add presen
aaa
parents:
diff changeset
99 // and then to recompute absolute width/height dimensions on resizing
afa29ac9f050 add presen
aaa
parents:
diff changeset
100 var objects;
afa29ac9f050 add presen
aaa
parents:
diff changeset
101
afa29ac9f050 add presen
aaa
parents:
diff changeset
102 // updated to language specified by html file
afa29ac9f050 add presen
aaa
parents:
diff changeset
103 var lang = "en";
afa29ac9f050 add presen
aaa
parents:
diff changeset
104
afa29ac9f050 add presen
aaa
parents:
diff changeset
105 //var localize = {};
afa29ac9f050 add presen
aaa
parents:
diff changeset
106
afa29ac9f050 add presen
aaa
parents:
diff changeset
107 // for each language there is an associative array
afa29ac9f050 add presen
aaa
parents:
diff changeset
108 var strings_es = {
afa29ac9f050 add presen
aaa
parents:
diff changeset
109 "slide":"pág.",
afa29ac9f050 add presen
aaa
parents:
diff changeset
110 "help?":"Ayuda",
afa29ac9f050 add presen
aaa
parents:
diff changeset
111 "contents?":"Índice",
afa29ac9f050 add presen
aaa
parents:
diff changeset
112 "table of contents":"tabla de contenidos",
afa29ac9f050 add presen
aaa
parents:
diff changeset
113 "Table of Contents":"Tabla de Contenidos",
afa29ac9f050 add presen
aaa
parents:
diff changeset
114 "restart presentation":"Reiniciar presentación",
afa29ac9f050 add presen
aaa
parents:
diff changeset
115 "restart?":"Inicio"
afa29ac9f050 add presen
aaa
parents:
diff changeset
116 };
afa29ac9f050 add presen
aaa
parents:
diff changeset
117
afa29ac9f050 add presen
aaa
parents:
diff changeset
118 strings_es[helpText] =
afa29ac9f050 add presen
aaa
parents:
diff changeset
119 "Utilice el ratón, barra espaciadora, teclas Izda/Dcha, " +
afa29ac9f050 add presen
aaa
parents:
diff changeset
120 "o Re pág y Av pág. Use S y B para cambiar el tamaño de fuente.";
afa29ac9f050 add presen
aaa
parents:
diff changeset
121
afa29ac9f050 add presen
aaa
parents:
diff changeset
122 var strings_ca = {
afa29ac9f050 add presen
aaa
parents:
diff changeset
123 "slide":"pàg..",
afa29ac9f050 add presen
aaa
parents:
diff changeset
124 "help?":"Ajuda",
afa29ac9f050 add presen
aaa
parents:
diff changeset
125 "contents?":"Índex",
afa29ac9f050 add presen
aaa
parents:
diff changeset
126 "table of contents":"taula de continguts",
afa29ac9f050 add presen
aaa
parents:
diff changeset
127 "Table of Contents":"Taula de Continguts",
afa29ac9f050 add presen
aaa
parents:
diff changeset
128 "restart presentation":"Reiniciar presentació",
afa29ac9f050 add presen
aaa
parents:
diff changeset
129 "restart?":"Inici"
afa29ac9f050 add presen
aaa
parents:
diff changeset
130 };
afa29ac9f050 add presen
aaa
parents:
diff changeset
131
afa29ac9f050 add presen
aaa
parents:
diff changeset
132 strings_ca[helpText] =
afa29ac9f050 add presen
aaa
parents:
diff changeset
133 "Utilitzi el ratolí, barra espaiadora, tecles Esq./Dta. " +
afa29ac9f050 add presen
aaa
parents:
diff changeset
134 "o Re pàg y Av pàg. Usi S i B per canviar grandària de font.";
afa29ac9f050 add presen
aaa
parents:
diff changeset
135
afa29ac9f050 add presen
aaa
parents:
diff changeset
136 var strings_nl = {
afa29ac9f050 add presen
aaa
parents:
diff changeset
137 "slide":"pagina",
afa29ac9f050 add presen
aaa
parents:
diff changeset
138 "help?":"Help?",
afa29ac9f050 add presen
aaa
parents:
diff changeset
139 "contents?":"Inhoud?",
afa29ac9f050 add presen
aaa
parents:
diff changeset
140 "table of contents":"inhoudsopgave",
afa29ac9f050 add presen
aaa
parents:
diff changeset
141 "Table of Contents":"Inhoudsopgave",
afa29ac9f050 add presen
aaa
parents:
diff changeset
142 "restart presentation":"herstart presentatie",
afa29ac9f050 add presen
aaa
parents:
diff changeset
143 "restart?":"Herstart?"
afa29ac9f050 add presen
aaa
parents:
diff changeset
144 };
afa29ac9f050 add presen
aaa
parents:
diff changeset
145
afa29ac9f050 add presen
aaa
parents:
diff changeset
146 strings_nl[helpText] =
afa29ac9f050 add presen
aaa
parents:
diff changeset
147 "Navigeer d.m.v. het muis, spatiebar, Links/Rechts toetsen, " +
afa29ac9f050 add presen
aaa
parents:
diff changeset
148 "of PgUp en PgDn. Gebruik S en B om de karaktergrootte te veranderen.";
afa29ac9f050 add presen
aaa
parents:
diff changeset
149
afa29ac9f050 add presen
aaa
parents:
diff changeset
150 var strings_de = {
afa29ac9f050 add presen
aaa
parents:
diff changeset
151 "slide":"Seite",
afa29ac9f050 add presen
aaa
parents:
diff changeset
152 "help?":"Hilfe",
afa29ac9f050 add presen
aaa
parents:
diff changeset
153 "contents?":"Übersicht",
afa29ac9f050 add presen
aaa
parents:
diff changeset
154 "table of contents":"Inhaltsverzeichnis",
afa29ac9f050 add presen
aaa
parents:
diff changeset
155 "Table of Contents":"Inhaltsverzeichnis",
afa29ac9f050 add presen
aaa
parents:
diff changeset
156 "restart presentation":"Präsentation neu starten",
afa29ac9f050 add presen
aaa
parents:
diff changeset
157 "restart?":"Neustart"
afa29ac9f050 add presen
aaa
parents:
diff changeset
158 };
afa29ac9f050 add presen
aaa
parents:
diff changeset
159
afa29ac9f050 add presen
aaa
parents:
diff changeset
160 strings_de[helpText] =
afa29ac9f050 add presen
aaa
parents:
diff changeset
161 "Benutzen Sie die Maus, Leerschlag, die Cursortasten links/rechts oder " +
afa29ac9f050 add presen
aaa
parents:
diff changeset
162 "Page up/Page Down zum Wechseln der Seiten und S und B für die Schriftgrösse.";
afa29ac9f050 add presen
aaa
parents:
diff changeset
163
afa29ac9f050 add presen
aaa
parents:
diff changeset
164 var strings_pl = {
afa29ac9f050 add presen
aaa
parents:
diff changeset
165 "slide":"slajd",
afa29ac9f050 add presen
aaa
parents:
diff changeset
166 "help?":"pomoc?",
afa29ac9f050 add presen
aaa
parents:
diff changeset
167 "contents?":"spis treści?",
afa29ac9f050 add presen
aaa
parents:
diff changeset
168 "table of contents":"spis treści",
afa29ac9f050 add presen
aaa
parents:
diff changeset
169 "Table of Contents":"Spis Treści",
afa29ac9f050 add presen
aaa
parents:
diff changeset
170 "restart presentation":"Restartuj prezentację",
afa29ac9f050 add presen
aaa
parents:
diff changeset
171 "restart?":"restart?"
afa29ac9f050 add presen
aaa
parents:
diff changeset
172 };
afa29ac9f050 add presen
aaa
parents:
diff changeset
173
afa29ac9f050 add presen
aaa
parents:
diff changeset
174 strings_pl[helpText] =
afa29ac9f050 add presen
aaa
parents:
diff changeset
175 "Zmieniaj slajdy klikając myszą, naciskając spację, strzałki lewo/prawo" +
afa29ac9f050 add presen
aaa
parents:
diff changeset
176 "lub PgUp / PgDn. Użyj klawiszy S i B, aby zmienić rozmiar czczionki.";
afa29ac9f050 add presen
aaa
parents:
diff changeset
177
afa29ac9f050 add presen
aaa
parents:
diff changeset
178 var strings_fr = {
afa29ac9f050 add presen
aaa
parents:
diff changeset
179 "slide":"page",
afa29ac9f050 add presen
aaa
parents:
diff changeset
180 "help?":"Aide",
afa29ac9f050 add presen
aaa
parents:
diff changeset
181 "contents?":"Index",
afa29ac9f050 add presen
aaa
parents:
diff changeset
182 "table of contents":"table des matières",
afa29ac9f050 add presen
aaa
parents:
diff changeset
183 "Table of Contents":"Table des matières",
afa29ac9f050 add presen
aaa
parents:
diff changeset
184 "restart presentation":"Recommencer l'exposé",
afa29ac9f050 add presen
aaa
parents:
diff changeset
185 "restart?":"Début"
afa29ac9f050 add presen
aaa
parents:
diff changeset
186 };
afa29ac9f050 add presen
aaa
parents:
diff changeset
187
afa29ac9f050 add presen
aaa
parents:
diff changeset
188 strings_fr[helpText] =
afa29ac9f050 add presen
aaa
parents:
diff changeset
189 "Naviguez avec la souris, la barre d'espace, les flèches " +
afa29ac9f050 add presen
aaa
parents:
diff changeset
190 "gauche/droite ou les touches Pg Up, Pg Dn. Utilisez " +
afa29ac9f050 add presen
aaa
parents:
diff changeset
191 "les touches S et B pour modifier la taille de la police.";
afa29ac9f050 add presen
aaa
parents:
diff changeset
192
afa29ac9f050 add presen
aaa
parents:
diff changeset
193 var strings_hu = {
afa29ac9f050 add presen
aaa
parents:
diff changeset
194 "slide":"oldal",
afa29ac9f050 add presen
aaa
parents:
diff changeset
195 "help?":"segítség",
afa29ac9f050 add presen
aaa
parents:
diff changeset
196 "contents?":"tartalom",
afa29ac9f050 add presen
aaa
parents:
diff changeset
197 "table of contents":"tartalomjegyzék",
afa29ac9f050 add presen
aaa
parents:
diff changeset
198 "Table of Contents":"Tartalomjegyzék",
afa29ac9f050 add presen
aaa
parents:
diff changeset
199 "restart presentation":"bemutató újraindítása",
afa29ac9f050 add presen
aaa
parents:
diff changeset
200 "restart?":"újraindítás"
afa29ac9f050 add presen
aaa
parents:
diff changeset
201 };
afa29ac9f050 add presen
aaa
parents:
diff changeset
202
afa29ac9f050 add presen
aaa
parents:
diff changeset
203 strings_hu[helpText] =
afa29ac9f050 add presen
aaa
parents:
diff changeset
204 "Az oldalak közti lépkedéshez kattintson az egérrel, vagy " +
afa29ac9f050 add presen
aaa
parents:
diff changeset
205 "használja a szóköz, a bal, vagy a jobb nyíl, illetve a Page Down, " +
afa29ac9f050 add presen
aaa
parents:
diff changeset
206 "Page Up billentyűket. Az S és a B billentyűkkel változtathatja " +
afa29ac9f050 add presen
aaa
parents:
diff changeset
207 "a szöveg méretét.";
afa29ac9f050 add presen
aaa
parents:
diff changeset
208
afa29ac9f050 add presen
aaa
parents:
diff changeset
209 var strings_it = {
afa29ac9f050 add presen
aaa
parents:
diff changeset
210 "slide":"pag.",
afa29ac9f050 add presen
aaa
parents:
diff changeset
211 "help?":"Aiuto",
afa29ac9f050 add presen
aaa
parents:
diff changeset
212 "contents?":"Indice",
afa29ac9f050 add presen
aaa
parents:
diff changeset
213 "table of contents":"indice",
afa29ac9f050 add presen
aaa
parents:
diff changeset
214 "Table of Contents":"Indice",
afa29ac9f050 add presen
aaa
parents:
diff changeset
215 "restart presentation":"Ricominciare la presentazione",
afa29ac9f050 add presen
aaa
parents:
diff changeset
216 "restart?":"Inizio"
afa29ac9f050 add presen
aaa
parents:
diff changeset
217 };
afa29ac9f050 add presen
aaa
parents:
diff changeset
218
afa29ac9f050 add presen
aaa
parents:
diff changeset
219 strings_it[helpText] =
afa29ac9f050 add presen
aaa
parents:
diff changeset
220 "Navigare con mouse, barra spazio, frecce sinistra/destra o " +
afa29ac9f050 add presen
aaa
parents:
diff changeset
221 "PgUp e PgDn. Usare S e B per cambiare la dimensione dei caratteri.";
afa29ac9f050 add presen
aaa
parents:
diff changeset
222
afa29ac9f050 add presen
aaa
parents:
diff changeset
223 var strings_el = {
afa29ac9f050 add presen
aaa
parents:
diff changeset
224 "slide":"σελίδα",
afa29ac9f050 add presen
aaa
parents:
diff changeset
225 "help?":"βοήθεια;",
afa29ac9f050 add presen
aaa
parents:
diff changeset
226 "contents?":"περιεχόμενα;",
afa29ac9f050 add presen
aaa
parents:
diff changeset
227 "table of contents":"πίνακας περιεχομένων",
afa29ac9f050 add presen
aaa
parents:
diff changeset
228 "Table of Contents":"Πίνακας Περιεχομένων",
afa29ac9f050 add presen
aaa
parents:
diff changeset
229 "restart presentation":"επανεκκίνηση παρουσίασης",
afa29ac9f050 add presen
aaa
parents:
diff changeset
230 "restart?":"επανεκκίνηση;"
afa29ac9f050 add presen
aaa
parents:
diff changeset
231 };
afa29ac9f050 add presen
aaa
parents:
diff changeset
232
afa29ac9f050 add presen
aaa
parents:
diff changeset
233 strings_el[helpText] =
afa29ac9f050 add presen
aaa
parents:
diff changeset
234 "Πλοηγηθείτε με το κλίκ του ποντικιού, το space, τα βέλη αριστερά/δεξιά, " +
afa29ac9f050 add presen
aaa
parents:
diff changeset
235 "ή Page Up και Page Down. Χρησιμοποιήστε τα πλήκτρα S και B για να αλλάξετε " +
afa29ac9f050 add presen
aaa
parents:
diff changeset
236 "το μέγεθος της γραμματοσειράς.";
afa29ac9f050 add presen
aaa
parents:
diff changeset
237
afa29ac9f050 add presen
aaa
parents:
diff changeset
238 var strings_ja = {
afa29ac9f050 add presen
aaa
parents:
diff changeset
239 "slide":"スライド",
afa29ac9f050 add presen
aaa
parents:
diff changeset
240 "help?":"ヘルプ",
afa29ac9f050 add presen
aaa
parents:
diff changeset
241 "contents?":"目次",
afa29ac9f050 add presen
aaa
parents:
diff changeset
242 "table of contents":"目次を表示",
afa29ac9f050 add presen
aaa
parents:
diff changeset
243 "Table of Contents":"目次",
afa29ac9f050 add presen
aaa
parents:
diff changeset
244 "restart presentation":"最初から再生",
afa29ac9f050 add presen
aaa
parents:
diff changeset
245 "restart?":"最初から"
afa29ac9f050 add presen
aaa
parents:
diff changeset
246 };
afa29ac9f050 add presen
aaa
parents:
diff changeset
247
afa29ac9f050 add presen
aaa
parents:
diff changeset
248 strings_ja[helpText] =
afa29ac9f050 add presen
aaa
parents:
diff changeset
249 "マウス左クリック ・ スペース ・ 左右キー " +
afa29ac9f050 add presen
aaa
parents:
diff changeset
250 "または Page Up ・ Page Downで操作, S ・ Bでフォントサイズ変更";
afa29ac9f050 add presen
aaa
parents:
diff changeset
251
afa29ac9f050 add presen
aaa
parents:
diff changeset
252 var strings_zh = {
afa29ac9f050 add presen
aaa
parents:
diff changeset
253 "slide":"幻灯片",
afa29ac9f050 add presen
aaa
parents:
diff changeset
254 "help?":"帮助?",
afa29ac9f050 add presen
aaa
parents:
diff changeset
255 "contents?":"内容?",
afa29ac9f050 add presen
aaa
parents:
diff changeset
256 "table of contents":"目录",
afa29ac9f050 add presen
aaa
parents:
diff changeset
257 "Table of Contents":"目录",
afa29ac9f050 add presen
aaa
parents:
diff changeset
258 "restart presentation":"重新启动展示",
afa29ac9f050 add presen
aaa
parents:
diff changeset
259 "restart?":"重新启动?"
afa29ac9f050 add presen
aaa
parents:
diff changeset
260 };
afa29ac9f050 add presen
aaa
parents:
diff changeset
261
afa29ac9f050 add presen
aaa
parents:
diff changeset
262 strings_zh[helpText] =
afa29ac9f050 add presen
aaa
parents:
diff changeset
263 "用鼠标点击, 空格条, 左右箭头, Pg Up 和 Pg Dn 导航. " +
afa29ac9f050 add presen
aaa
parents:
diff changeset
264 "用 S, B 改变字体大小.";
afa29ac9f050 add presen
aaa
parents:
diff changeset
265
afa29ac9f050 add presen
aaa
parents:
diff changeset
266 var strings_ru = {
afa29ac9f050 add presen
aaa
parents:
diff changeset
267 "slide":"слайд",
afa29ac9f050 add presen
aaa
parents:
diff changeset
268 "help?":"помощь?",
afa29ac9f050 add presen
aaa
parents:
diff changeset
269 "contents?":"содержание?",
afa29ac9f050 add presen
aaa
parents:
diff changeset
270 "table of contents":"оглавление",
afa29ac9f050 add presen
aaa
parents:
diff changeset
271 "Table of Contents":"Оглавление",
afa29ac9f050 add presen
aaa
parents:
diff changeset
272 "restart presentation":"перезапустить презентацию",
afa29ac9f050 add presen
aaa
parents:
diff changeset
273 "restart?":"перезапуск?"
afa29ac9f050 add presen
aaa
parents:
diff changeset
274 };
afa29ac9f050 add presen
aaa
parents:
diff changeset
275
afa29ac9f050 add presen
aaa
parents:
diff changeset
276 strings_ru[helpText] =
afa29ac9f050 add presen
aaa
parents:
diff changeset
277 "Перемещайтесь кликая мышкой, используя клавишу пробел, стрелки" +
afa29ac9f050 add presen
aaa
parents:
diff changeset
278 "влево/вправо или Pg Up и Pg Dn. Клавиши S и B меняют размер шрифта.";
afa29ac9f050 add presen
aaa
parents:
diff changeset
279
afa29ac9f050 add presen
aaa
parents:
diff changeset
280 var strings_sv = {
afa29ac9f050 add presen
aaa
parents:
diff changeset
281 "slide":"sida",
afa29ac9f050 add presen
aaa
parents:
diff changeset
282 "help?":"hjälp",
afa29ac9f050 add presen
aaa
parents:
diff changeset
283 "contents?":"innehåll",
afa29ac9f050 add presen
aaa
parents:
diff changeset
284 "table of contents":"innehållsförteckning",
afa29ac9f050 add presen
aaa
parents:
diff changeset
285 "Table of Contents":"Innehållsförteckning",
afa29ac9f050 add presen
aaa
parents:
diff changeset
286 "restart presentation":"visa presentationen från början",
afa29ac9f050 add presen
aaa
parents:
diff changeset
287 "restart?":"börja om"
afa29ac9f050 add presen
aaa
parents:
diff changeset
288 };
afa29ac9f050 add presen
aaa
parents:
diff changeset
289
afa29ac9f050 add presen
aaa
parents:
diff changeset
290 strings_sv[helpText] =
afa29ac9f050 add presen
aaa
parents:
diff changeset
291 "Bläddra med ett klick med vänstra musknappen, mellanslagstangenten, " +
afa29ac9f050 add presen
aaa
parents:
diff changeset
292 "vänster- och högerpiltangenterna eller tangenterna Pg Up, Pg Dn. " +
afa29ac9f050 add presen
aaa
parents:
diff changeset
293 "Använd tangenterna S och B för att ändra textens storlek.";
afa29ac9f050 add presen
aaa
parents:
diff changeset
294
afa29ac9f050 add presen
aaa
parents:
diff changeset
295 // each such language array is declared in the localize array
afa29ac9f050 add presen
aaa
parents:
diff changeset
296 // used indirectly as in help.innerHTML = "help".localize();
afa29ac9f050 add presen
aaa
parents:
diff changeset
297 var localize = {
afa29ac9f050 add presen
aaa
parents:
diff changeset
298 "es":strings_es,
afa29ac9f050 add presen
aaa
parents:
diff changeset
299 "ca":strings_ca,
afa29ac9f050 add presen
aaa
parents:
diff changeset
300 "nl":strings_nl,
afa29ac9f050 add presen
aaa
parents:
diff changeset
301 "de":strings_de,
afa29ac9f050 add presen
aaa
parents:
diff changeset
302 "pl":strings_pl,
afa29ac9f050 add presen
aaa
parents:
diff changeset
303 "fr":strings_fr,
afa29ac9f050 add presen
aaa
parents:
diff changeset
304 "hu":strings_hu,
afa29ac9f050 add presen
aaa
parents:
diff changeset
305 "it":strings_it,
afa29ac9f050 add presen
aaa
parents:
diff changeset
306 "el":strings_el,
afa29ac9f050 add presen
aaa
parents:
diff changeset
307 "jp":strings_ja,
afa29ac9f050 add presen
aaa
parents:
diff changeset
308 "zh":strings_zh,
afa29ac9f050 add presen
aaa
parents:
diff changeset
309 "ru":strings_ru,
afa29ac9f050 add presen
aaa
parents:
diff changeset
310 "sv":strings_sv
afa29ac9f050 add presen
aaa
parents:
diff changeset
311 };
afa29ac9f050 add presen
aaa
parents:
diff changeset
312
afa29ac9f050 add presen
aaa
parents:
diff changeset
313 /* general initialization */
afa29ac9f050 add presen
aaa
parents:
diff changeset
314 function startup()
afa29ac9f050 add presen
aaa
parents:
diff changeset
315 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
316 if (slidy_started)
afa29ac9f050 add presen
aaa
parents:
diff changeset
317 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
318 alert("already started");
afa29ac9f050 add presen
aaa
parents:
diff changeset
319 return;
afa29ac9f050 add presen
aaa
parents:
diff changeset
320 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
321 slidy_started = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
322
afa29ac9f050 add presen
aaa
parents:
diff changeset
323 // find human language from html element
afa29ac9f050 add presen
aaa
parents:
diff changeset
324 // for use in localizing strings
afa29ac9f050 add presen
aaa
parents:
diff changeset
325 lang = document.body.parentNode.getAttribute("lang");
afa29ac9f050 add presen
aaa
parents:
diff changeset
326
afa29ac9f050 add presen
aaa
parents:
diff changeset
327 if (!lang)
afa29ac9f050 add presen
aaa
parents:
diff changeset
328 lang = document.body.parentNode.getAttribute("xml:lang");
afa29ac9f050 add presen
aaa
parents:
diff changeset
329
afa29ac9f050 add presen
aaa
parents:
diff changeset
330 if (!lang)
afa29ac9f050 add presen
aaa
parents:
diff changeset
331 lang = "en";
afa29ac9f050 add presen
aaa
parents:
diff changeset
332
afa29ac9f050 add presen
aaa
parents:
diff changeset
333 document.body.style.visibility = "visible";
afa29ac9f050 add presen
aaa
parents:
diff changeset
334 title = document.title;
afa29ac9f050 add presen
aaa
parents:
diff changeset
335 toolbar = addToolbar();
afa29ac9f050 add presen
aaa
parents:
diff changeset
336 wrapImplicitSlides();
afa29ac9f050 add presen
aaa
parents:
diff changeset
337 slides = collectSlides();
afa29ac9f050 add presen
aaa
parents:
diff changeset
338 notes = collectNotes();
afa29ac9f050 add presen
aaa
parents:
diff changeset
339 objects = document.body.getElementsByTagName("object");
afa29ac9f050 add presen
aaa
parents:
diff changeset
340 backgrounds = collectBackgrounds();
afa29ac9f050 add presen
aaa
parents:
diff changeset
341 patchAnchors();
afa29ac9f050 add presen
aaa
parents:
diff changeset
342
afa29ac9f050 add presen
aaa
parents:
diff changeset
343 slidenum = findSlideNumber(location.href);
afa29ac9f050 add presen
aaa
parents:
diff changeset
344 window.offscreenbuffering = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
345 sizeAdjustment = findSizeAdjust();
afa29ac9f050 add presen
aaa
parents:
diff changeset
346 hideImageToolbar(); // suppress IE image toolbar popup
afa29ac9f050 add presen
aaa
parents:
diff changeset
347 initOutliner(); // activate fold/unfold support
afa29ac9f050 add presen
aaa
parents:
diff changeset
348
afa29ac9f050 add presen
aaa
parents:
diff changeset
349 if (slides.length > 0)
afa29ac9f050 add presen
aaa
parents:
diff changeset
350 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
351 var slide = slides[slidenum];
afa29ac9f050 add presen
aaa
parents:
diff changeset
352 slide.style.position = "absolute";
afa29ac9f050 add presen
aaa
parents:
diff changeset
353
afa29ac9f050 add presen
aaa
parents:
diff changeset
354 if (slidenum > 0)
afa29ac9f050 add presen
aaa
parents:
diff changeset
355 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
356 setVisibilityAllIncremental("visible");
afa29ac9f050 add presen
aaa
parents:
diff changeset
357 lastShown = previousIncrementalItem(null);
afa29ac9f050 add presen
aaa
parents:
diff changeset
358 setEosStatus(true);
afa29ac9f050 add presen
aaa
parents:
diff changeset
359 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
360 else
afa29ac9f050 add presen
aaa
parents:
diff changeset
361 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
362 lastShown = null;
afa29ac9f050 add presen
aaa
parents:
diff changeset
363 setVisibilityAllIncremental("hidden");
afa29ac9f050 add presen
aaa
parents:
diff changeset
364 setEosStatus(!nextIncrementalItem(lastShown));
afa29ac9f050 add presen
aaa
parents:
diff changeset
365 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
366
afa29ac9f050 add presen
aaa
parents:
diff changeset
367 setLocation();
afa29ac9f050 add presen
aaa
parents:
diff changeset
368 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
369
afa29ac9f050 add presen
aaa
parents:
diff changeset
370 toc = tableOfContents();
afa29ac9f050 add presen
aaa
parents:
diff changeset
371 hideTableOfContents();
afa29ac9f050 add presen
aaa
parents:
diff changeset
372
afa29ac9f050 add presen
aaa
parents:
diff changeset
373 // bind event handlers
afa29ac9f050 add presen
aaa
parents:
diff changeset
374 document.onclick = mouseButtonClick;
afa29ac9f050 add presen
aaa
parents:
diff changeset
375 document.onmouseup = mouseButtonUp;
afa29ac9f050 add presen
aaa
parents:
diff changeset
376 document.onkeydown = keyDown;
afa29ac9f050 add presen
aaa
parents:
diff changeset
377 window.onresize = resized;
afa29ac9f050 add presen
aaa
parents:
diff changeset
378 window.onscroll = scrolled;
afa29ac9f050 add presen
aaa
parents:
diff changeset
379 window.onunload = unloaded;
afa29ac9f050 add presen
aaa
parents:
diff changeset
380 singleSlideView();
afa29ac9f050 add presen
aaa
parents:
diff changeset
381
afa29ac9f050 add presen
aaa
parents:
diff changeset
382
afa29ac9f050 add presen
aaa
parents:
diff changeset
383 setLocation();
afa29ac9f050 add presen
aaa
parents:
diff changeset
384 resized();
afa29ac9f050 add presen
aaa
parents:
diff changeset
385
afa29ac9f050 add presen
aaa
parents:
diff changeset
386 if (ie7)
afa29ac9f050 add presen
aaa
parents:
diff changeset
387 setTimeout("ieHack()", 100);
afa29ac9f050 add presen
aaa
parents:
diff changeset
388
afa29ac9f050 add presen
aaa
parents:
diff changeset
389 showToolbar();
afa29ac9f050 add presen
aaa
parents:
diff changeset
390 setInterval("checkLocation()", 200); // for back button detection
afa29ac9f050 add presen
aaa
parents:
diff changeset
391 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
392
afa29ac9f050 add presen
aaa
parents:
diff changeset
393 // add localize method to all strings for use
afa29ac9f050 add presen
aaa
parents:
diff changeset
394 // as in help.innerHTML = "help".localize();
afa29ac9f050 add presen
aaa
parents:
diff changeset
395 String.prototype.localize = function()
afa29ac9f050 add presen
aaa
parents:
diff changeset
396 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
397 if (this == "")
afa29ac9f050 add presen
aaa
parents:
diff changeset
398 return this;
afa29ac9f050 add presen
aaa
parents:
diff changeset
399
afa29ac9f050 add presen
aaa
parents:
diff changeset
400 // try full language code, e.g. en-US
afa29ac9f050 add presen
aaa
parents:
diff changeset
401 var s, lookup = localize[lang];
afa29ac9f050 add presen
aaa
parents:
diff changeset
402
afa29ac9f050 add presen
aaa
parents:
diff changeset
403 if (lookup)
afa29ac9f050 add presen
aaa
parents:
diff changeset
404 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
405 s = lookup[this];
afa29ac9f050 add presen
aaa
parents:
diff changeset
406
afa29ac9f050 add presen
aaa
parents:
diff changeset
407 if (s)
afa29ac9f050 add presen
aaa
parents:
diff changeset
408 return s;
afa29ac9f050 add presen
aaa
parents:
diff changeset
409 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
410
afa29ac9f050 add presen
aaa
parents:
diff changeset
411 // try en if undefined for en-US
afa29ac9f050 add presen
aaa
parents:
diff changeset
412 var lg = lang.split("-");
afa29ac9f050 add presen
aaa
parents:
diff changeset
413
afa29ac9f050 add presen
aaa
parents:
diff changeset
414 if (lg.length > 1)
afa29ac9f050 add presen
aaa
parents:
diff changeset
415 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
416 lookup = localize[lg[0]];
afa29ac9f050 add presen
aaa
parents:
diff changeset
417
afa29ac9f050 add presen
aaa
parents:
diff changeset
418 if (lookup)
afa29ac9f050 add presen
aaa
parents:
diff changeset
419 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
420 s = lookup[this];
afa29ac9f050 add presen
aaa
parents:
diff changeset
421
afa29ac9f050 add presen
aaa
parents:
diff changeset
422 if (s)
afa29ac9f050 add presen
aaa
parents:
diff changeset
423 return s;
afa29ac9f050 add presen
aaa
parents:
diff changeset
424 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
425 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
426
afa29ac9f050 add presen
aaa
parents:
diff changeset
427 // otherwise string as is
afa29ac9f050 add presen
aaa
parents:
diff changeset
428 return this;
afa29ac9f050 add presen
aaa
parents:
diff changeset
429 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
430
afa29ac9f050 add presen
aaa
parents:
diff changeset
431 // suppress IE's image toolbar pop up
afa29ac9f050 add presen
aaa
parents:
diff changeset
432 function hideImageToolbar()
afa29ac9f050 add presen
aaa
parents:
diff changeset
433 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
434 if (!ns_pos)
afa29ac9f050 add presen
aaa
parents:
diff changeset
435 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
436 var images = document.getElementsByTagName("IMG");
afa29ac9f050 add presen
aaa
parents:
diff changeset
437
afa29ac9f050 add presen
aaa
parents:
diff changeset
438 for (var i = 0; i < images.length; ++i)
afa29ac9f050 add presen
aaa
parents:
diff changeset
439 images[i].setAttribute("galleryimg", "no");
afa29ac9f050 add presen
aaa
parents:
diff changeset
440 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
441 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
442
afa29ac9f050 add presen
aaa
parents:
diff changeset
443 // hack to persuade IE to compute correct document height
afa29ac9f050 add presen
aaa
parents:
diff changeset
444 // as needed for simulating fixed positioning of toolbar
afa29ac9f050 add presen
aaa
parents:
diff changeset
445 function ieHack()
afa29ac9f050 add presen
aaa
parents:
diff changeset
446 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
447 window.resizeBy(0,-1);
afa29ac9f050 add presen
aaa
parents:
diff changeset
448 window.resizeBy(0, 1);
afa29ac9f050 add presen
aaa
parents:
diff changeset
449 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
450
afa29ac9f050 add presen
aaa
parents:
diff changeset
451 function unloaded(e)
afa29ac9f050 add presen
aaa
parents:
diff changeset
452 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
453 //alert("unloaded");
afa29ac9f050 add presen
aaa
parents:
diff changeset
454 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
455
afa29ac9f050 add presen
aaa
parents:
diff changeset
456 // Firefox reload SVG bug work around
afa29ac9f050 add presen
aaa
parents:
diff changeset
457 function reload(e)
afa29ac9f050 add presen
aaa
parents:
diff changeset
458 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
459 if (!e)
afa29ac9f050 add presen
aaa
parents:
diff changeset
460 var e = window.event;
afa29ac9f050 add presen
aaa
parents:
diff changeset
461
afa29ac9f050 add presen
aaa
parents:
diff changeset
462 hideBackgrounds();
afa29ac9f050 add presen
aaa
parents:
diff changeset
463 setTimeout("document.reload();", 100);
afa29ac9f050 add presen
aaa
parents:
diff changeset
464
afa29ac9f050 add presen
aaa
parents:
diff changeset
465 stopPropagation(e);
afa29ac9f050 add presen
aaa
parents:
diff changeset
466 e.cancel = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
467 e.returnValue = false;
afa29ac9f050 add presen
aaa
parents:
diff changeset
468
afa29ac9f050 add presen
aaa
parents:
diff changeset
469 return false;
afa29ac9f050 add presen
aaa
parents:
diff changeset
470 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
471
afa29ac9f050 add presen
aaa
parents:
diff changeset
472 // Safari and Konqueror don't yet support getComputedStyle()
afa29ac9f050 add presen
aaa
parents:
diff changeset
473 // and they always reload page when location.href is updated
afa29ac9f050 add presen
aaa
parents:
diff changeset
474 function isKHTML()
afa29ac9f050 add presen
aaa
parents:
diff changeset
475 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
476 var agent = navigator.userAgent;
afa29ac9f050 add presen
aaa
parents:
diff changeset
477 return (agent.indexOf("KHTML") >= 0 ? true : false);
afa29ac9f050 add presen
aaa
parents:
diff changeset
478 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
479
afa29ac9f050 add presen
aaa
parents:
diff changeset
480 function resized()
afa29ac9f050 add presen
aaa
parents:
diff changeset
481 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
482 var width = 0;
afa29ac9f050 add presen
aaa
parents:
diff changeset
483
afa29ac9f050 add presen
aaa
parents:
diff changeset
484 if ( typeof( window.innerWidth ) == 'number' )
afa29ac9f050 add presen
aaa
parents:
diff changeset
485 width = window.innerWidth; // Non IE browser
afa29ac9f050 add presen
aaa
parents:
diff changeset
486 else if (document.documentElement && document.documentElement.clientWidth)
afa29ac9f050 add presen
aaa
parents:
diff changeset
487 width = document.documentElement.clientWidth; // IE6
afa29ac9f050 add presen
aaa
parents:
diff changeset
488 else if (document.body && document.body.clientWidth)
afa29ac9f050 add presen
aaa
parents:
diff changeset
489 width = document.body.clientWidth; // IE4
afa29ac9f050 add presen
aaa
parents:
diff changeset
490
afa29ac9f050 add presen
aaa
parents:
diff changeset
491 var height = 0;
afa29ac9f050 add presen
aaa
parents:
diff changeset
492
afa29ac9f050 add presen
aaa
parents:
diff changeset
493 if ( typeof( window.innerHeight ) == 'number' )
afa29ac9f050 add presen
aaa
parents:
diff changeset
494 height = window.innerHeight; // Non IE browser
afa29ac9f050 add presen
aaa
parents:
diff changeset
495 else if (document.documentElement && document.documentElement.clientHeight)
afa29ac9f050 add presen
aaa
parents:
diff changeset
496 height = document.documentElement.clientHeight; // IE6
afa29ac9f050 add presen
aaa
parents:
diff changeset
497 else if (document.body && document.body.clientHeight)
afa29ac9f050 add presen
aaa
parents:
diff changeset
498 height = document.body.clientHeight; // IE4
afa29ac9f050 add presen
aaa
parents:
diff changeset
499
afa29ac9f050 add presen
aaa
parents:
diff changeset
500 if (height && (width/height > 1.05*1024/768))
afa29ac9f050 add presen
aaa
parents:
diff changeset
501 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
502 width = height * 1024.0/768;
afa29ac9f050 add presen
aaa
parents:
diff changeset
503 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
504
afa29ac9f050 add presen
aaa
parents:
diff changeset
505 // IE fires onresize even when only font size is changed!
afa29ac9f050 add presen
aaa
parents:
diff changeset
506 // so we do a check to avoid blocking < and > actions
afa29ac9f050 add presen
aaa
parents:
diff changeset
507 if (width != lastWidth || height != lastHeight)
afa29ac9f050 add presen
aaa
parents:
diff changeset
508 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
509 if (width >= 1100)
afa29ac9f050 add presen
aaa
parents:
diff changeset
510 sizeIndex = 5; // 4
afa29ac9f050 add presen
aaa
parents:
diff changeset
511 else if (width >= 1000)
afa29ac9f050 add presen
aaa
parents:
diff changeset
512 sizeIndex = 4; // 3
afa29ac9f050 add presen
aaa
parents:
diff changeset
513 else if (width >= 800)
afa29ac9f050 add presen
aaa
parents:
diff changeset
514 sizeIndex = 3; // 2
afa29ac9f050 add presen
aaa
parents:
diff changeset
515 else if (width >= 600)
afa29ac9f050 add presen
aaa
parents:
diff changeset
516 sizeIndex = 2; // 1
afa29ac9f050 add presen
aaa
parents:
diff changeset
517 else if (width)
afa29ac9f050 add presen
aaa
parents:
diff changeset
518 sizeIndex = 0;
afa29ac9f050 add presen
aaa
parents:
diff changeset
519
afa29ac9f050 add presen
aaa
parents:
diff changeset
520 // add in font size adjustment from meta element e.g.
afa29ac9f050 add presen
aaa
parents:
diff changeset
521 // <meta name="font-size-adjustment" content="-2" />
afa29ac9f050 add presen
aaa
parents:
diff changeset
522 // useful when slides have too much content ;-)
afa29ac9f050 add presen
aaa
parents:
diff changeset
523
afa29ac9f050 add presen
aaa
parents:
diff changeset
524 if (0 <= sizeIndex + sizeAdjustment &&
afa29ac9f050 add presen
aaa
parents:
diff changeset
525 sizeIndex + sizeAdjustment < sizes.length)
afa29ac9f050 add presen
aaa
parents:
diff changeset
526 sizeIndex = sizeIndex + sizeAdjustment;
afa29ac9f050 add presen
aaa
parents:
diff changeset
527
afa29ac9f050 add presen
aaa
parents:
diff changeset
528 // enables cross browser use of relative width/height
afa29ac9f050 add presen
aaa
parents:
diff changeset
529 // on object elements for use with SVG and Flash media
afa29ac9f050 add presen
aaa
parents:
diff changeset
530 adjustObjectDimensions(width, height);
afa29ac9f050 add presen
aaa
parents:
diff changeset
531
afa29ac9f050 add presen
aaa
parents:
diff changeset
532 document.body.style.fontSize = sizes[sizeIndex];
afa29ac9f050 add presen
aaa
parents:
diff changeset
533
afa29ac9f050 add presen
aaa
parents:
diff changeset
534 lastWidth = width;
afa29ac9f050 add presen
aaa
parents:
diff changeset
535 lastHeight = height;
afa29ac9f050 add presen
aaa
parents:
diff changeset
536
afa29ac9f050 add presen
aaa
parents:
diff changeset
537 // force reflow to work around Mozilla bug
afa29ac9f050 add presen
aaa
parents:
diff changeset
538 //if (ns_pos)
afa29ac9f050 add presen
aaa
parents:
diff changeset
539 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
540 var slide = slides[slidenum];
afa29ac9f050 add presen
aaa
parents:
diff changeset
541 hideSlide(slide);
afa29ac9f050 add presen
aaa
parents:
diff changeset
542 showSlide(slide);
afa29ac9f050 add presen
aaa
parents:
diff changeset
543 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
544
afa29ac9f050 add presen
aaa
parents:
diff changeset
545 // force correct positioning of toolbar
afa29ac9f050 add presen
aaa
parents:
diff changeset
546 refreshToolbar(200);
afa29ac9f050 add presen
aaa
parents:
diff changeset
547 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
548 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
549
afa29ac9f050 add presen
aaa
parents:
diff changeset
550 function scrolled()
afa29ac9f050 add presen
aaa
parents:
diff changeset
551 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
552 if (toolbar && !ns_pos && !ie7)
afa29ac9f050 add presen
aaa
parents:
diff changeset
553 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
554 hackoffset = scrollXOffset();
afa29ac9f050 add presen
aaa
parents:
diff changeset
555 // hide toolbar
afa29ac9f050 add presen
aaa
parents:
diff changeset
556 toolbar.style.display = "none";
afa29ac9f050 add presen
aaa
parents:
diff changeset
557
afa29ac9f050 add presen
aaa
parents:
diff changeset
558 // make it reappear later
afa29ac9f050 add presen
aaa
parents:
diff changeset
559 if (scrollhack == 0 && !viewAll)
afa29ac9f050 add presen
aaa
parents:
diff changeset
560 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
561 setTimeout(showToolbar, 1000);
afa29ac9f050 add presen
aaa
parents:
diff changeset
562 scrollhack = 1;
afa29ac9f050 add presen
aaa
parents:
diff changeset
563 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
564 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
565 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
566
afa29ac9f050 add presen
aaa
parents:
diff changeset
567 // used to ensure IE refreshes toolbar in correct position
afa29ac9f050 add presen
aaa
parents:
diff changeset
568 function refreshToolbar(interval)
afa29ac9f050 add presen
aaa
parents:
diff changeset
569 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
570 if (!ns_pos && !ie7)
afa29ac9f050 add presen
aaa
parents:
diff changeset
571 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
572 hideToolbar();
afa29ac9f050 add presen
aaa
parents:
diff changeset
573 setTimeout(showToolbar, interval);
afa29ac9f050 add presen
aaa
parents:
diff changeset
574 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
575 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
576
afa29ac9f050 add presen
aaa
parents:
diff changeset
577 // restores toolbar after short delay
afa29ac9f050 add presen
aaa
parents:
diff changeset
578 function showToolbar()
afa29ac9f050 add presen
aaa
parents:
diff changeset
579 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
580 if (wantToolbar)
afa29ac9f050 add presen
aaa
parents:
diff changeset
581 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
582 if (!ns_pos)
afa29ac9f050 add presen
aaa
parents:
diff changeset
583 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
584 // adjust position to allow for scrolling
afa29ac9f050 add presen
aaa
parents:
diff changeset
585 var xoffset = scrollXOffset();
afa29ac9f050 add presen
aaa
parents:
diff changeset
586 toolbar.style.left = xoffset;
afa29ac9f050 add presen
aaa
parents:
diff changeset
587 toolbar.style.right = xoffset;
afa29ac9f050 add presen
aaa
parents:
diff changeset
588
afa29ac9f050 add presen
aaa
parents:
diff changeset
589 // determine vertical scroll offset
afa29ac9f050 add presen
aaa
parents:
diff changeset
590 //var yoffset = scrollYOffset();
afa29ac9f050 add presen
aaa
parents:
diff changeset
591
afa29ac9f050 add presen
aaa
parents:
diff changeset
592 // bottom is doc height - window height - scroll offset
afa29ac9f050 add presen
aaa
parents:
diff changeset
593 //var bottom = documentHeight() - lastHeight - yoffset
afa29ac9f050 add presen
aaa
parents:
diff changeset
594
afa29ac9f050 add presen
aaa
parents:
diff changeset
595 //if (yoffset > 0 || documentHeight() > lastHeight)
afa29ac9f050 add presen
aaa
parents:
diff changeset
596 // bottom += 16; // allow for height of scrollbar
afa29ac9f050 add presen
aaa
parents:
diff changeset
597
afa29ac9f050 add presen
aaa
parents:
diff changeset
598 toolbar.style.bottom = 0; //bottom;
afa29ac9f050 add presen
aaa
parents:
diff changeset
599 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
600
afa29ac9f050 add presen
aaa
parents:
diff changeset
601 toolbar.style.display = "block";
afa29ac9f050 add presen
aaa
parents:
diff changeset
602 toolbar.style.visibility = "visible";
afa29ac9f050 add presen
aaa
parents:
diff changeset
603 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
604
afa29ac9f050 add presen
aaa
parents:
diff changeset
605 scrollhack = 0;
afa29ac9f050 add presen
aaa
parents:
diff changeset
606
afa29ac9f050 add presen
aaa
parents:
diff changeset
607
afa29ac9f050 add presen
aaa
parents:
diff changeset
608 // set the keyboard focus to the help link on the
afa29ac9f050 add presen
aaa
parents:
diff changeset
609 // toolbar to ensure that document has the focus
afa29ac9f050 add presen
aaa
parents:
diff changeset
610 // IE doesn't always work with window.focus()
afa29ac9f050 add presen
aaa
parents:
diff changeset
611 // and this hack has benefit of Enter for help
afa29ac9f050 add presen
aaa
parents:
diff changeset
612
afa29ac9f050 add presen
aaa
parents:
diff changeset
613 try
afa29ac9f050 add presen
aaa
parents:
diff changeset
614 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
615 if (!opera)
afa29ac9f050 add presen
aaa
parents:
diff changeset
616 helpAnchor.focus();
afa29ac9f050 add presen
aaa
parents:
diff changeset
617 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
618 catch (e)
afa29ac9f050 add presen
aaa
parents:
diff changeset
619 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
620 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
621 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
622
afa29ac9f050 add presen
aaa
parents:
diff changeset
623 function hideToolbar()
afa29ac9f050 add presen
aaa
parents:
diff changeset
624 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
625 toolbar.style.display = "none";
afa29ac9f050 add presen
aaa
parents:
diff changeset
626 toolbar.style.visibility = "hidden";
afa29ac9f050 add presen
aaa
parents:
diff changeset
627 window.focus();
afa29ac9f050 add presen
aaa
parents:
diff changeset
628 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
629
afa29ac9f050 add presen
aaa
parents:
diff changeset
630 // invoked via F key
afa29ac9f050 add presen
aaa
parents:
diff changeset
631 function toggleToolbar()
afa29ac9f050 add presen
aaa
parents:
diff changeset
632 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
633 if (!viewAll)
afa29ac9f050 add presen
aaa
parents:
diff changeset
634 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
635 if (toolbar.style.display == "none")
afa29ac9f050 add presen
aaa
parents:
diff changeset
636 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
637 toolbar.style.display = "block";
afa29ac9f050 add presen
aaa
parents:
diff changeset
638 toolbar.style.visibility = "visible";
afa29ac9f050 add presen
aaa
parents:
diff changeset
639 wantToolbar = 1;
afa29ac9f050 add presen
aaa
parents:
diff changeset
640 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
641 else
afa29ac9f050 add presen
aaa
parents:
diff changeset
642 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
643 toolbar.style.display = "none";
afa29ac9f050 add presen
aaa
parents:
diff changeset
644 toolbar.style.visibility = "hidden";
afa29ac9f050 add presen
aaa
parents:
diff changeset
645 wantToolbar = 0;
afa29ac9f050 add presen
aaa
parents:
diff changeset
646 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
647 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
648 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
649
afa29ac9f050 add presen
aaa
parents:
diff changeset
650 function scrollXOffset()
afa29ac9f050 add presen
aaa
parents:
diff changeset
651 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
652 if (window.pageXOffset)
afa29ac9f050 add presen
aaa
parents:
diff changeset
653 return self.pageXOffset;
afa29ac9f050 add presen
aaa
parents:
diff changeset
654
afa29ac9f050 add presen
aaa
parents:
diff changeset
655 if (document.documentElement &&
afa29ac9f050 add presen
aaa
parents:
diff changeset
656 document.documentElement.scrollLeft)
afa29ac9f050 add presen
aaa
parents:
diff changeset
657 return document.documentElement.scrollLeft;
afa29ac9f050 add presen
aaa
parents:
diff changeset
658
afa29ac9f050 add presen
aaa
parents:
diff changeset
659 if (document.body)
afa29ac9f050 add presen
aaa
parents:
diff changeset
660 return document.body.scrollLeft;
afa29ac9f050 add presen
aaa
parents:
diff changeset
661
afa29ac9f050 add presen
aaa
parents:
diff changeset
662 return 0;
afa29ac9f050 add presen
aaa
parents:
diff changeset
663 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
664
afa29ac9f050 add presen
aaa
parents:
diff changeset
665
afa29ac9f050 add presen
aaa
parents:
diff changeset
666 function scrollYOffset()
afa29ac9f050 add presen
aaa
parents:
diff changeset
667 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
668 if (window.pageYOffset)
afa29ac9f050 add presen
aaa
parents:
diff changeset
669 return self.pageYOffset;
afa29ac9f050 add presen
aaa
parents:
diff changeset
670
afa29ac9f050 add presen
aaa
parents:
diff changeset
671 if (document.documentElement &&
afa29ac9f050 add presen
aaa
parents:
diff changeset
672 document.documentElement.scrollTop)
afa29ac9f050 add presen
aaa
parents:
diff changeset
673 return document.documentElement.scrollTop;
afa29ac9f050 add presen
aaa
parents:
diff changeset
674
afa29ac9f050 add presen
aaa
parents:
diff changeset
675 if (document.body)
afa29ac9f050 add presen
aaa
parents:
diff changeset
676 return document.body.scrollTop;
afa29ac9f050 add presen
aaa
parents:
diff changeset
677
afa29ac9f050 add presen
aaa
parents:
diff changeset
678 return 0;
afa29ac9f050 add presen
aaa
parents:
diff changeset
679 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
680
afa29ac9f050 add presen
aaa
parents:
diff changeset
681 // looking for a way to determine height of slide content
afa29ac9f050 add presen
aaa
parents:
diff changeset
682 // the slide itself is set to the height of the window
afa29ac9f050 add presen
aaa
parents:
diff changeset
683 function optimizeFontSize()
afa29ac9f050 add presen
aaa
parents:
diff changeset
684 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
685 var slide = slides[slidenum];
afa29ac9f050 add presen
aaa
parents:
diff changeset
686
afa29ac9f050 add presen
aaa
parents:
diff changeset
687 //var dh = documentHeight(); //getDocHeight(document);
afa29ac9f050 add presen
aaa
parents:
diff changeset
688 var dh = slide.scrollHeight;
afa29ac9f050 add presen
aaa
parents:
diff changeset
689 var wh = getWindowHeight();
afa29ac9f050 add presen
aaa
parents:
diff changeset
690 var u = 100 * dh / wh;
afa29ac9f050 add presen
aaa
parents:
diff changeset
691
afa29ac9f050 add presen
aaa
parents:
diff changeset
692 alert("window utilization = " + u + "% (doc "
afa29ac9f050 add presen
aaa
parents:
diff changeset
693 + dh + " win " + wh + ")");
afa29ac9f050 add presen
aaa
parents:
diff changeset
694 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
695
afa29ac9f050 add presen
aaa
parents:
diff changeset
696 function getDocHeight(doc) // from document object
afa29ac9f050 add presen
aaa
parents:
diff changeset
697 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
698 if (!doc)
afa29ac9f050 add presen
aaa
parents:
diff changeset
699 doc = document;
afa29ac9f050 add presen
aaa
parents:
diff changeset
700
afa29ac9f050 add presen
aaa
parents:
diff changeset
701 if (doc && doc.body && doc.body.offsetHeight)
afa29ac9f050 add presen
aaa
parents:
diff changeset
702 return doc.body.offsetHeight; // ns/gecko syntax
afa29ac9f050 add presen
aaa
parents:
diff changeset
703
afa29ac9f050 add presen
aaa
parents:
diff changeset
704 if (doc && doc.body && doc.body.scrollHeight)
afa29ac9f050 add presen
aaa
parents:
diff changeset
705 return doc.body.scrollHeight;
afa29ac9f050 add presen
aaa
parents:
diff changeset
706
afa29ac9f050 add presen
aaa
parents:
diff changeset
707 alert("couldn't determine document height");
afa29ac9f050 add presen
aaa
parents:
diff changeset
708 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
709
afa29ac9f050 add presen
aaa
parents:
diff changeset
710 function getWindowHeight()
afa29ac9f050 add presen
aaa
parents:
diff changeset
711 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
712 if ( typeof( window.innerHeight ) == 'number' )
afa29ac9f050 add presen
aaa
parents:
diff changeset
713 return window.innerHeight; // Non IE browser
afa29ac9f050 add presen
aaa
parents:
diff changeset
714
afa29ac9f050 add presen
aaa
parents:
diff changeset
715 if (document.documentElement && document.documentElement.clientHeight)
afa29ac9f050 add presen
aaa
parents:
diff changeset
716 return document.documentElement.clientHeight; // IE6
afa29ac9f050 add presen
aaa
parents:
diff changeset
717
afa29ac9f050 add presen
aaa
parents:
diff changeset
718 if (document.body && document.body.clientHeight)
afa29ac9f050 add presen
aaa
parents:
diff changeset
719 return document.body.clientHeight; // IE4
afa29ac9f050 add presen
aaa
parents:
diff changeset
720 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
721
afa29ac9f050 add presen
aaa
parents:
diff changeset
722
afa29ac9f050 add presen
aaa
parents:
diff changeset
723
afa29ac9f050 add presen
aaa
parents:
diff changeset
724 function documentHeight()
afa29ac9f050 add presen
aaa
parents:
diff changeset
725 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
726 var sh, oh;
afa29ac9f050 add presen
aaa
parents:
diff changeset
727
afa29ac9f050 add presen
aaa
parents:
diff changeset
728 sh = document.body.scrollHeight;
afa29ac9f050 add presen
aaa
parents:
diff changeset
729 oh = document.body.offsetHeight;
afa29ac9f050 add presen
aaa
parents:
diff changeset
730
afa29ac9f050 add presen
aaa
parents:
diff changeset
731 if (sh && oh)
afa29ac9f050 add presen
aaa
parents:
diff changeset
732 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
733 return (sh > oh ? sh : oh);
afa29ac9f050 add presen
aaa
parents:
diff changeset
734 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
735
afa29ac9f050 add presen
aaa
parents:
diff changeset
736 // no idea!
afa29ac9f050 add presen
aaa
parents:
diff changeset
737 return 0;
afa29ac9f050 add presen
aaa
parents:
diff changeset
738 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
739
afa29ac9f050 add presen
aaa
parents:
diff changeset
740 function smaller()
afa29ac9f050 add presen
aaa
parents:
diff changeset
741 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
742 if (sizeIndex > 0)
afa29ac9f050 add presen
aaa
parents:
diff changeset
743 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
744 --sizeIndex;
afa29ac9f050 add presen
aaa
parents:
diff changeset
745 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
746
afa29ac9f050 add presen
aaa
parents:
diff changeset
747 toolbar.style.display = "none";
afa29ac9f050 add presen
aaa
parents:
diff changeset
748 document.body.style.fontSize = sizes[sizeIndex];
afa29ac9f050 add presen
aaa
parents:
diff changeset
749 var slide = slides[slidenum];
afa29ac9f050 add presen
aaa
parents:
diff changeset
750 hideSlide(slide);
afa29ac9f050 add presen
aaa
parents:
diff changeset
751 showSlide(slide);
afa29ac9f050 add presen
aaa
parents:
diff changeset
752 setTimeout(showToolbar, 300);
afa29ac9f050 add presen
aaa
parents:
diff changeset
753 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
754
afa29ac9f050 add presen
aaa
parents:
diff changeset
755 function bigger()
afa29ac9f050 add presen
aaa
parents:
diff changeset
756 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
757 if (sizeIndex < sizes.length - 1)
afa29ac9f050 add presen
aaa
parents:
diff changeset
758 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
759 ++sizeIndex;
afa29ac9f050 add presen
aaa
parents:
diff changeset
760 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
761
afa29ac9f050 add presen
aaa
parents:
diff changeset
762 toolbar.style.display = "none";
afa29ac9f050 add presen
aaa
parents:
diff changeset
763 document.body.style.fontSize = sizes[sizeIndex];
afa29ac9f050 add presen
aaa
parents:
diff changeset
764 var slide = slides[slidenum];
afa29ac9f050 add presen
aaa
parents:
diff changeset
765 hideSlide(slide);
afa29ac9f050 add presen
aaa
parents:
diff changeset
766 showSlide(slide);
afa29ac9f050 add presen
aaa
parents:
diff changeset
767 setTimeout(showToolbar, 300);
afa29ac9f050 add presen
aaa
parents:
diff changeset
768 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
769
afa29ac9f050 add presen
aaa
parents:
diff changeset
770 // enables cross browser use of relative width/height
afa29ac9f050 add presen
aaa
parents:
diff changeset
771 // on object elements for use with SVG and Flash media
afa29ac9f050 add presen
aaa
parents:
diff changeset
772 // with thanks to Ivan Herman for the suggestion
afa29ac9f050 add presen
aaa
parents:
diff changeset
773 function adjustObjectDimensions(width, height)
afa29ac9f050 add presen
aaa
parents:
diff changeset
774 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
775 for( var i = 0; i < objects.length; i++ )
afa29ac9f050 add presen
aaa
parents:
diff changeset
776 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
777 var obj = objects[i];
afa29ac9f050 add presen
aaa
parents:
diff changeset
778 var mimeType = obj.getAttribute("type");
afa29ac9f050 add presen
aaa
parents:
diff changeset
779
afa29ac9f050 add presen
aaa
parents:
diff changeset
780 if (mimeType == "image/svg+xml" || mimeType == "application/x-shockwave-flash")
afa29ac9f050 add presen
aaa
parents:
diff changeset
781 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
782 if ( !obj.initialWidth )
afa29ac9f050 add presen
aaa
parents:
diff changeset
783 obj.initialWidth = obj.getAttribute("width");
afa29ac9f050 add presen
aaa
parents:
diff changeset
784
afa29ac9f050 add presen
aaa
parents:
diff changeset
785 if ( !obj.initialHeight )
afa29ac9f050 add presen
aaa
parents:
diff changeset
786 obj.initialHeight = obj.getAttribute("height");
afa29ac9f050 add presen
aaa
parents:
diff changeset
787
afa29ac9f050 add presen
aaa
parents:
diff changeset
788 if ( obj.initialWidth && obj.initialWidth.charAt(obj.initialWidth.length-1) == "%" )
afa29ac9f050 add presen
aaa
parents:
diff changeset
789 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
790 var w = parseInt(obj.initialWidth.slice(0, obj.initialWidth.length-1));
afa29ac9f050 add presen
aaa
parents:
diff changeset
791 var newW = width * (w/100.0);
afa29ac9f050 add presen
aaa
parents:
diff changeset
792 obj.setAttribute("width",newW);
afa29ac9f050 add presen
aaa
parents:
diff changeset
793 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
794
afa29ac9f050 add presen
aaa
parents:
diff changeset
795 if ( obj.initialHeight && obj.initialHeight.charAt(obj.initialHeight.length-1) == "%" )
afa29ac9f050 add presen
aaa
parents:
diff changeset
796 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
797 var h = parseInt(obj.initialHeight.slice(0, obj.initialHeight.length-1));
afa29ac9f050 add presen
aaa
parents:
diff changeset
798 var newH = height * (h/100.0);
afa29ac9f050 add presen
aaa
parents:
diff changeset
799 obj.setAttribute("height", newH);
afa29ac9f050 add presen
aaa
parents:
diff changeset
800 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
801 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
802 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
803 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
804
afa29ac9f050 add presen
aaa
parents:
diff changeset
805 function cancel(event)
afa29ac9f050 add presen
aaa
parents:
diff changeset
806 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
807 if (event)
afa29ac9f050 add presen
aaa
parents:
diff changeset
808 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
809 event.cancel = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
810 event.returnValue = false;
afa29ac9f050 add presen
aaa
parents:
diff changeset
811
afa29ac9f050 add presen
aaa
parents:
diff changeset
812 if (event.preventDefault)
afa29ac9f050 add presen
aaa
parents:
diff changeset
813 event.preventDefault();
afa29ac9f050 add presen
aaa
parents:
diff changeset
814 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
815
afa29ac9f050 add presen
aaa
parents:
diff changeset
816 return false;
afa29ac9f050 add presen
aaa
parents:
diff changeset
817 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
818
afa29ac9f050 add presen
aaa
parents:
diff changeset
819 // See e.g. http://www.quirksmode.org/js/events/keys.html for keycodes
afa29ac9f050 add presen
aaa
parents:
diff changeset
820 function keyDown(event)
afa29ac9f050 add presen
aaa
parents:
diff changeset
821 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
822 var key;
afa29ac9f050 add presen
aaa
parents:
diff changeset
823
afa29ac9f050 add presen
aaa
parents:
diff changeset
824 if (!event)
afa29ac9f050 add presen
aaa
parents:
diff changeset
825 var event = window.event;
afa29ac9f050 add presen
aaa
parents:
diff changeset
826
afa29ac9f050 add presen
aaa
parents:
diff changeset
827 // kludge around NS/IE differences
afa29ac9f050 add presen
aaa
parents:
diff changeset
828 if (window.event)
afa29ac9f050 add presen
aaa
parents:
diff changeset
829 key = window.event.keyCode;
afa29ac9f050 add presen
aaa
parents:
diff changeset
830 else if (event.which)
afa29ac9f050 add presen
aaa
parents:
diff changeset
831 key = event.which;
afa29ac9f050 add presen
aaa
parents:
diff changeset
832 else
afa29ac9f050 add presen
aaa
parents:
diff changeset
833 return true; // Yikes! unknown browser
afa29ac9f050 add presen
aaa
parents:
diff changeset
834
afa29ac9f050 add presen
aaa
parents:
diff changeset
835 // ignore event if key value is zero
afa29ac9f050 add presen
aaa
parents:
diff changeset
836 // as for alt on Opera and Konqueror
afa29ac9f050 add presen
aaa
parents:
diff changeset
837 if (!key)
afa29ac9f050 add presen
aaa
parents:
diff changeset
838 return true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
839
afa29ac9f050 add presen
aaa
parents:
diff changeset
840 // check for concurrent control/command/alt key
afa29ac9f050 add presen
aaa
parents:
diff changeset
841 // but are these only present on mouse events?
afa29ac9f050 add presen
aaa
parents:
diff changeset
842
afa29ac9f050 add presen
aaa
parents:
diff changeset
843 if (event.ctrlKey || event.altKey || event.metaKey)
afa29ac9f050 add presen
aaa
parents:
diff changeset
844 return true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
845
afa29ac9f050 add presen
aaa
parents:
diff changeset
846 // dismiss table of contents if visible
afa29ac9f050 add presen
aaa
parents:
diff changeset
847 if (isShownToc() && key != 9 && key != 16 && key != 38 && key != 40)
afa29ac9f050 add presen
aaa
parents:
diff changeset
848 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
849 hideTableOfContents();
afa29ac9f050 add presen
aaa
parents:
diff changeset
850
afa29ac9f050 add presen
aaa
parents:
diff changeset
851 if (key == 27 || key == 84 || key == 67)
afa29ac9f050 add presen
aaa
parents:
diff changeset
852 return cancel(event);
afa29ac9f050 add presen
aaa
parents:
diff changeset
853 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
854
afa29ac9f050 add presen
aaa
parents:
diff changeset
855 if (key == 34) // Page Down
afa29ac9f050 add presen
aaa
parents:
diff changeset
856 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
857 if (viewAll)
afa29ac9f050 add presen
aaa
parents:
diff changeset
858 return true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
859
afa29ac9f050 add presen
aaa
parents:
diff changeset
860 nextSlide(false);
afa29ac9f050 add presen
aaa
parents:
diff changeset
861 return cancel(event);
afa29ac9f050 add presen
aaa
parents:
diff changeset
862 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
863 else if (key == 33) // Page Up
afa29ac9f050 add presen
aaa
parents:
diff changeset
864 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
865 if (viewAll)
afa29ac9f050 add presen
aaa
parents:
diff changeset
866 return true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
867
afa29ac9f050 add presen
aaa
parents:
diff changeset
868 previousSlide(false);
afa29ac9f050 add presen
aaa
parents:
diff changeset
869 return cancel(event);
afa29ac9f050 add presen
aaa
parents:
diff changeset
870 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
871 else if (key == 32) // space bar
afa29ac9f050 add presen
aaa
parents:
diff changeset
872 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
873 nextSlide(true);
afa29ac9f050 add presen
aaa
parents:
diff changeset
874 return cancel(event);
afa29ac9f050 add presen
aaa
parents:
diff changeset
875 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
876 else if (key == 37) // Left arrow
afa29ac9f050 add presen
aaa
parents:
diff changeset
877 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
878 previousSlide(!event.shiftKey);
afa29ac9f050 add presen
aaa
parents:
diff changeset
879 return cancel(event);
afa29ac9f050 add presen
aaa
parents:
diff changeset
880 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
881 else if (key == 36) // Home
afa29ac9f050 add presen
aaa
parents:
diff changeset
882 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
883 firstSlide();
afa29ac9f050 add presen
aaa
parents:
diff changeset
884 return cancel(event);
afa29ac9f050 add presen
aaa
parents:
diff changeset
885 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
886 else if (key == 35) // End
afa29ac9f050 add presen
aaa
parents:
diff changeset
887 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
888 lastSlide();
afa29ac9f050 add presen
aaa
parents:
diff changeset
889 return cancel(event);
afa29ac9f050 add presen
aaa
parents:
diff changeset
890 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
891 else if (key == 39) // Right arrow
afa29ac9f050 add presen
aaa
parents:
diff changeset
892 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
893 nextSlide(!event.shiftKey);
afa29ac9f050 add presen
aaa
parents:
diff changeset
894 return cancel(event);
afa29ac9f050 add presen
aaa
parents:
diff changeset
895 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
896 else if (key == 13) // Enter
afa29ac9f050 add presen
aaa
parents:
diff changeset
897 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
898 if (outline)
afa29ac9f050 add presen
aaa
parents:
diff changeset
899 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
900 if (outline.visible)
afa29ac9f050 add presen
aaa
parents:
diff changeset
901 fold(outline);
afa29ac9f050 add presen
aaa
parents:
diff changeset
902 else
afa29ac9f050 add presen
aaa
parents:
diff changeset
903 unfold(outline);
afa29ac9f050 add presen
aaa
parents:
diff changeset
904
afa29ac9f050 add presen
aaa
parents:
diff changeset
905 return cancel(event);
afa29ac9f050 add presen
aaa
parents:
diff changeset
906 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
907 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
908 else if (key == 188) // < for smaller fonts
afa29ac9f050 add presen
aaa
parents:
diff changeset
909 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
910 smaller();
afa29ac9f050 add presen
aaa
parents:
diff changeset
911 return cancel(event);
afa29ac9f050 add presen
aaa
parents:
diff changeset
912 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
913 else if (key == 190) // > for larger fonts
afa29ac9f050 add presen
aaa
parents:
diff changeset
914 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
915 bigger();
afa29ac9f050 add presen
aaa
parents:
diff changeset
916 return cancel(event);
afa29ac9f050 add presen
aaa
parents:
diff changeset
917 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
918 else if (key == 189 || key == 109) // - for smaller fonts
afa29ac9f050 add presen
aaa
parents:
diff changeset
919 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
920 smaller();
afa29ac9f050 add presen
aaa
parents:
diff changeset
921 return cancel(event);
afa29ac9f050 add presen
aaa
parents:
diff changeset
922 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
923 else if (key == 187 || key == 191 || key == 107) // = + for larger fonts
afa29ac9f050 add presen
aaa
parents:
diff changeset
924 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
925 bigger();
afa29ac9f050 add presen
aaa
parents:
diff changeset
926 return cancel(event);
afa29ac9f050 add presen
aaa
parents:
diff changeset
927 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
928 else if (key == 83) // S for smaller fonts
afa29ac9f050 add presen
aaa
parents:
diff changeset
929 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
930 smaller();
afa29ac9f050 add presen
aaa
parents:
diff changeset
931 return cancel(event);
afa29ac9f050 add presen
aaa
parents:
diff changeset
932 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
933 else if (key == 66) // B for larger fonts
afa29ac9f050 add presen
aaa
parents:
diff changeset
934 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
935 bigger();
afa29ac9f050 add presen
aaa
parents:
diff changeset
936 return cancel(event);
afa29ac9f050 add presen
aaa
parents:
diff changeset
937 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
938 else if (key == 90) // Z for last slide
afa29ac9f050 add presen
aaa
parents:
diff changeset
939 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
940 lastSlide();
afa29ac9f050 add presen
aaa
parents:
diff changeset
941 return cancel(event);
afa29ac9f050 add presen
aaa
parents:
diff changeset
942 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
943 else if (key == 70) // F for toggle toolbar
afa29ac9f050 add presen
aaa
parents:
diff changeset
944 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
945 toggleToolbar();
afa29ac9f050 add presen
aaa
parents:
diff changeset
946 return cancel(event);
afa29ac9f050 add presen
aaa
parents:
diff changeset
947 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
948 else if (key == 65) // A for toggle view single/all slides
afa29ac9f050 add presen
aaa
parents:
diff changeset
949 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
950 toggleView();
afa29ac9f050 add presen
aaa
parents:
diff changeset
951 return cancel(event);
afa29ac9f050 add presen
aaa
parents:
diff changeset
952 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
953 else if (key == 75) // toggle action of left click for next page
afa29ac9f050 add presen
aaa
parents:
diff changeset
954 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
955 mouseClickEnabled = !mouseClickEnabled;
afa29ac9f050 add presen
aaa
parents:
diff changeset
956 alert((mouseClickEnabled ? "enabled" : "disabled") + " mouse click advance");
afa29ac9f050 add presen
aaa
parents:
diff changeset
957 return cancel(event);
afa29ac9f050 add presen
aaa
parents:
diff changeset
958 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
959 else if (key == 84 || key == 67) // T or C for table of contents
afa29ac9f050 add presen
aaa
parents:
diff changeset
960 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
961 if (toc)
afa29ac9f050 add presen
aaa
parents:
diff changeset
962 showTableOfContents();
afa29ac9f050 add presen
aaa
parents:
diff changeset
963
afa29ac9f050 add presen
aaa
parents:
diff changeset
964 return cancel(event);
afa29ac9f050 add presen
aaa
parents:
diff changeset
965 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
966 else if (key == 72) // H for help
afa29ac9f050 add presen
aaa
parents:
diff changeset
967 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
968 window.location = helpPage;
afa29ac9f050 add presen
aaa
parents:
diff changeset
969 return cancel(event);
afa29ac9f050 add presen
aaa
parents:
diff changeset
970 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
971
afa29ac9f050 add presen
aaa
parents:
diff changeset
972 //else if (key == 93) // Windows menu key
afa29ac9f050 add presen
aaa
parents:
diff changeset
973 //alert("lastShown is " + lastShown);
afa29ac9f050 add presen
aaa
parents:
diff changeset
974 //else alert("key code is "+ key);
afa29ac9f050 add presen
aaa
parents:
diff changeset
975
afa29ac9f050 add presen
aaa
parents:
diff changeset
976
afa29ac9f050 add presen
aaa
parents:
diff changeset
977 return true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
978 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
979
afa29ac9f050 add presen
aaa
parents:
diff changeset
980 // make note of length of selected text
afa29ac9f050 add presen
aaa
parents:
diff changeset
981 // as this evaluates to zero in click event
afa29ac9f050 add presen
aaa
parents:
diff changeset
982 function mouseButtonUp(e)
afa29ac9f050 add presen
aaa
parents:
diff changeset
983 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
984 selectedTextLen = getSelectedText().length;
afa29ac9f050 add presen
aaa
parents:
diff changeset
985 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
986
afa29ac9f050 add presen
aaa
parents:
diff changeset
987 // right mouse button click is reserved for context menus
afa29ac9f050 add presen
aaa
parents:
diff changeset
988 // it is more reliable to detect rightclick than leftclick
afa29ac9f050 add presen
aaa
parents:
diff changeset
989 function mouseButtonClick(e)
afa29ac9f050 add presen
aaa
parents:
diff changeset
990 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
991 var rightclick = false;
afa29ac9f050 add presen
aaa
parents:
diff changeset
992 var leftclick = false;
afa29ac9f050 add presen
aaa
parents:
diff changeset
993 var middleclick = false;
afa29ac9f050 add presen
aaa
parents:
diff changeset
994 var target;
afa29ac9f050 add presen
aaa
parents:
diff changeset
995
afa29ac9f050 add presen
aaa
parents:
diff changeset
996 if (!e)
afa29ac9f050 add presen
aaa
parents:
diff changeset
997 var e = window.event;
afa29ac9f050 add presen
aaa
parents:
diff changeset
998
afa29ac9f050 add presen
aaa
parents:
diff changeset
999 if (e.target)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1000 target = e.target;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1001 else if (e.srcElement)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1002 target = e.srcElement;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1003
afa29ac9f050 add presen
aaa
parents:
diff changeset
1004 // work around Safari bug
afa29ac9f050 add presen
aaa
parents:
diff changeset
1005 if (target.nodeType == 3)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1006 target = target.parentNode;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1007
afa29ac9f050 add presen
aaa
parents:
diff changeset
1008 if (e.which) // all browsers except IE
afa29ac9f050 add presen
aaa
parents:
diff changeset
1009 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1010 leftclick = (e.which == 1);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1011 middleclick = (e.which == 2);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1012 rightclick = (e.which == 3);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1013 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1014 else if (e.button)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1015 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1016 // Konqueror gives 1 for left, 4 for middle
afa29ac9f050 add presen
aaa
parents:
diff changeset
1017 // IE6 gives 0 for left and not 1 as I expected
afa29ac9f050 add presen
aaa
parents:
diff changeset
1018
afa29ac9f050 add presen
aaa
parents:
diff changeset
1019 if (e.button == 4)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1020 middleclick = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1021
afa29ac9f050 add presen
aaa
parents:
diff changeset
1022 // all browsers agree on 2 for right button
afa29ac9f050 add presen
aaa
parents:
diff changeset
1023 rightclick = (e.button == 2);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1024 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1025 else leftclick = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1026
afa29ac9f050 add presen
aaa
parents:
diff changeset
1027 //alert("selected text length = "+selectedTextLen);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1028
afa29ac9f050 add presen
aaa
parents:
diff changeset
1029 if (selectedTextLen > 0)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1030 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1031 stopPropagation(e);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1032 e.cancel = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1033 e.returnValue = false;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1034 return false;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1035 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1036
afa29ac9f050 add presen
aaa
parents:
diff changeset
1037 // dismiss table of contents
afa29ac9f050 add presen
aaa
parents:
diff changeset
1038 hideTableOfContents();
afa29ac9f050 add presen
aaa
parents:
diff changeset
1039
afa29ac9f050 add presen
aaa
parents:
diff changeset
1040 // check if target is something that probably want's clicks
afa29ac9f050 add presen
aaa
parents:
diff changeset
1041 // e.g. embed, object, input, textarea, select, option
afa29ac9f050 add presen
aaa
parents:
diff changeset
1042
afa29ac9f050 add presen
aaa
parents:
diff changeset
1043 if (mouseClickEnabled && leftclick &&
afa29ac9f050 add presen
aaa
parents:
diff changeset
1044 target.nodeName != "EMBED" &&
afa29ac9f050 add presen
aaa
parents:
diff changeset
1045 target.nodeName != "OBJECT" &&
afa29ac9f050 add presen
aaa
parents:
diff changeset
1046 target.nodeName != "VIDEO" &&
afa29ac9f050 add presen
aaa
parents:
diff changeset
1047 target.nodeName != "INPUT" &&
afa29ac9f050 add presen
aaa
parents:
diff changeset
1048 target.nodeName != "TEXTAREA" &&
afa29ac9f050 add presen
aaa
parents:
diff changeset
1049 target.nodeName != "SELECT" &&
afa29ac9f050 add presen
aaa
parents:
diff changeset
1050 target.nodeName != "OPTION")
afa29ac9f050 add presen
aaa
parents:
diff changeset
1051 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1052 nextSlide(true);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1053 stopPropagation(e);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1054 e.cancel = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1055 e.returnValue = false;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1056 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1057 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1058
afa29ac9f050 add presen
aaa
parents:
diff changeset
1059 function previousSlide(incremental)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1060 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1061 if (!viewAll)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1062 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1063 var slide;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1064
afa29ac9f050 add presen
aaa
parents:
diff changeset
1065 if ((incremental || slidenum == 0) && lastShown != null)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1066 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1067 lastShown = hidePreviousItem(lastShown);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1068 setEosStatus(false);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1069 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1070 else if (slidenum > 0)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1071 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1072 slide = slides[slidenum];
afa29ac9f050 add presen
aaa
parents:
diff changeset
1073 hideSlide(slide);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1074
afa29ac9f050 add presen
aaa
parents:
diff changeset
1075 slidenum = slidenum - 1;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1076 slide = slides[slidenum];
afa29ac9f050 add presen
aaa
parents:
diff changeset
1077 setVisibilityAllIncremental("visible");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1078 lastShown = previousIncrementalItem(null);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1079 setEosStatus(true);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1080 showSlide(slide);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1081 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1082
afa29ac9f050 add presen
aaa
parents:
diff changeset
1083 setLocation();
afa29ac9f050 add presen
aaa
parents:
diff changeset
1084
afa29ac9f050 add presen
aaa
parents:
diff changeset
1085 if (!ns_pos)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1086 refreshToolbar(200);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1087 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1088 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1089
afa29ac9f050 add presen
aaa
parents:
diff changeset
1090 function nextSlide(incremental)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1091 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1092 if (!viewAll)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1093 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1094 var slide, last = lastShown;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1095
afa29ac9f050 add presen
aaa
parents:
diff changeset
1096 if (incremental || slidenum == slides.length - 1)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1097 lastShown = revealNextItem(lastShown);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1098
afa29ac9f050 add presen
aaa
parents:
diff changeset
1099 if ((!incremental || lastShown == null) && slidenum < slides.length - 1)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1100 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1101 slide = slides[slidenum];
afa29ac9f050 add presen
aaa
parents:
diff changeset
1102 hideSlide(slide);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1103
afa29ac9f050 add presen
aaa
parents:
diff changeset
1104 slidenum = slidenum + 1;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1105 slide = slides[slidenum];
afa29ac9f050 add presen
aaa
parents:
diff changeset
1106 lastShown = null;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1107 setVisibilityAllIncremental("hidden");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1108 showSlide(slide);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1109 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1110 else if (!lastShown)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1111 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1112 if (last && incremental)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1113 lastShown = last;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1114 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1115
afa29ac9f050 add presen
aaa
parents:
diff changeset
1116 setLocation();
afa29ac9f050 add presen
aaa
parents:
diff changeset
1117
afa29ac9f050 add presen
aaa
parents:
diff changeset
1118 setEosStatus(!nextIncrementalItem(lastShown));
afa29ac9f050 add presen
aaa
parents:
diff changeset
1119
afa29ac9f050 add presen
aaa
parents:
diff changeset
1120 if (!ns_pos)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1121 refreshToolbar(200);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1122 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1123 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1124
afa29ac9f050 add presen
aaa
parents:
diff changeset
1125 // to first slide with nothing revealed
afa29ac9f050 add presen
aaa
parents:
diff changeset
1126 // i.e. state at start of presentation
afa29ac9f050 add presen
aaa
parents:
diff changeset
1127 function firstSlide()
afa29ac9f050 add presen
aaa
parents:
diff changeset
1128 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1129 if (!viewAll)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1130 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1131 var slide;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1132
afa29ac9f050 add presen
aaa
parents:
diff changeset
1133 if (slidenum != 0)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1134 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1135 slide = slides[slidenum];
afa29ac9f050 add presen
aaa
parents:
diff changeset
1136 hideSlide(slide);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1137
afa29ac9f050 add presen
aaa
parents:
diff changeset
1138 slidenum = 0;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1139 slide = slides[slidenum];
afa29ac9f050 add presen
aaa
parents:
diff changeset
1140 lastShown = null;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1141 setVisibilityAllIncremental("hidden");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1142 showSlide(slide);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1143 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1144
afa29ac9f050 add presen
aaa
parents:
diff changeset
1145 setEosStatus(!nextIncrementalItem(lastShown));
afa29ac9f050 add presen
aaa
parents:
diff changeset
1146 setLocation();
afa29ac9f050 add presen
aaa
parents:
diff changeset
1147 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1148 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1149
afa29ac9f050 add presen
aaa
parents:
diff changeset
1150
afa29ac9f050 add presen
aaa
parents:
diff changeset
1151 // to last slide with everything revealed
afa29ac9f050 add presen
aaa
parents:
diff changeset
1152 // i.e. state at end of presentation
afa29ac9f050 add presen
aaa
parents:
diff changeset
1153 function lastSlide()
afa29ac9f050 add presen
aaa
parents:
diff changeset
1154 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1155 if (!viewAll)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1156 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1157 var slide;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1158
afa29ac9f050 add presen
aaa
parents:
diff changeset
1159 lastShown = null; //revealNextItem(lastShown);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1160
afa29ac9f050 add presen
aaa
parents:
diff changeset
1161 if (lastShown == null && slidenum < slides.length - 1)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1162 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1163 slide = slides[slidenum];
afa29ac9f050 add presen
aaa
parents:
diff changeset
1164 hideSlide(slide);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1165 slidenum = slides.length - 1;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1166 slide = slides[slidenum];
afa29ac9f050 add presen
aaa
parents:
diff changeset
1167 setVisibilityAllIncremental("visible");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1168 lastShown = previousIncrementalItem(null);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1169
afa29ac9f050 add presen
aaa
parents:
diff changeset
1170 showSlide(slide);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1171 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1172 else
afa29ac9f050 add presen
aaa
parents:
diff changeset
1173 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1174 setVisibilityAllIncremental("visible");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1175 lastShown = previousIncrementalItem(null);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1176 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1177
afa29ac9f050 add presen
aaa
parents:
diff changeset
1178 setEosStatus(true);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1179 setLocation();
afa29ac9f050 add presen
aaa
parents:
diff changeset
1180 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1181 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1182
afa29ac9f050 add presen
aaa
parents:
diff changeset
1183 // first slide is 0
afa29ac9f050 add presen
aaa
parents:
diff changeset
1184 function gotoSlide(num)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1185 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1186 //alert("going to slide " + (num+1));
afa29ac9f050 add presen
aaa
parents:
diff changeset
1187 var slide = slides[slidenum];
afa29ac9f050 add presen
aaa
parents:
diff changeset
1188 hideSlide(slide);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1189 slidenum = num;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1190 slide = slides[slidenum];
afa29ac9f050 add presen
aaa
parents:
diff changeset
1191 lastShown = null;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1192 setVisibilityAllIncremental("hidden");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1193 setEosStatus(!nextIncrementalItem(lastShown));
afa29ac9f050 add presen
aaa
parents:
diff changeset
1194 document.title = title + " (" + (slidenum+1) + ")";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1195 showSlide(slide);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1196 showSlideNumber();
afa29ac9f050 add presen
aaa
parents:
diff changeset
1197 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1198
afa29ac9f050 add presen
aaa
parents:
diff changeset
1199 function setEosStatus(state)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1200 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1201 if (eos)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1202 eos.style.color = (state ? "rgb(240,240,240)" : "red");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1203 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1204
afa29ac9f050 add presen
aaa
parents:
diff changeset
1205 function showSlide(slide)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1206 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1207 syncBackground(slide);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1208 window.scrollTo(0,0);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1209 slide.style.visibility = "visible";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1210 slide.style.display = "block";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1211 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1212
afa29ac9f050 add presen
aaa
parents:
diff changeset
1213 function hideSlide(slide)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1214 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1215 slide.style.visibility = "hidden";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1216 slide.style.display = "none";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1217 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1218
afa29ac9f050 add presen
aaa
parents:
diff changeset
1219 function beforePrint()
afa29ac9f050 add presen
aaa
parents:
diff changeset
1220 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1221 showAllSlides();
afa29ac9f050 add presen
aaa
parents:
diff changeset
1222 hideToolbar();
afa29ac9f050 add presen
aaa
parents:
diff changeset
1223 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1224
afa29ac9f050 add presen
aaa
parents:
diff changeset
1225 function afterPrint()
afa29ac9f050 add presen
aaa
parents:
diff changeset
1226 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1227 if (!viewAll)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1228 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1229 singleSlideView();
afa29ac9f050 add presen
aaa
parents:
diff changeset
1230 showToolbar();
afa29ac9f050 add presen
aaa
parents:
diff changeset
1231 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1232 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1233
afa29ac9f050 add presen
aaa
parents:
diff changeset
1234 function printSlides()
afa29ac9f050 add presen
aaa
parents:
diff changeset
1235 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1236 beforePrint();
afa29ac9f050 add presen
aaa
parents:
diff changeset
1237 window.print();
afa29ac9f050 add presen
aaa
parents:
diff changeset
1238 afterPrint();
afa29ac9f050 add presen
aaa
parents:
diff changeset
1239 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1240
afa29ac9f050 add presen
aaa
parents:
diff changeset
1241 function toggleView()
afa29ac9f050 add presen
aaa
parents:
diff changeset
1242 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1243 if (viewAll)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1244 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1245 singleSlideView();
afa29ac9f050 add presen
aaa
parents:
diff changeset
1246 showToolbar();
afa29ac9f050 add presen
aaa
parents:
diff changeset
1247 viewAll = 0;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1248 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1249 else
afa29ac9f050 add presen
aaa
parents:
diff changeset
1250 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1251 showAllSlides();
afa29ac9f050 add presen
aaa
parents:
diff changeset
1252 hideToolbar();
afa29ac9f050 add presen
aaa
parents:
diff changeset
1253 viewAll = 1;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1254 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1255 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1256
afa29ac9f050 add presen
aaa
parents:
diff changeset
1257 // prepare for printing
afa29ac9f050 add presen
aaa
parents:
diff changeset
1258 function showAllSlides()
afa29ac9f050 add presen
aaa
parents:
diff changeset
1259 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1260 var slide;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1261
afa29ac9f050 add presen
aaa
parents:
diff changeset
1262 for (var i = 0; i < slides.length; ++i)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1263 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1264 slide = slides[i];
afa29ac9f050 add presen
aaa
parents:
diff changeset
1265
afa29ac9f050 add presen
aaa
parents:
diff changeset
1266 slide.style.position = "relative";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1267 slide.style.borderTopStyle = "solid";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1268 slide.style.borderTopWidth = "thin";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1269 slide.style.borderTopColor = "black";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1270
afa29ac9f050 add presen
aaa
parents:
diff changeset
1271 try {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1272 if (i == 0)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1273 slide.style.pageBreakBefore = "avoid";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1274 else
afa29ac9f050 add presen
aaa
parents:
diff changeset
1275 slide.style.pageBreakBefore = "always";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1276 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1277 catch (e)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1278 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1279 //do nothing
afa29ac9f050 add presen
aaa
parents:
diff changeset
1280 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1281
afa29ac9f050 add presen
aaa
parents:
diff changeset
1282 setVisibilityAllIncremental("visible");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1283 showSlide(slide);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1284 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1285
afa29ac9f050 add presen
aaa
parents:
diff changeset
1286 var note;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1287
afa29ac9f050 add presen
aaa
parents:
diff changeset
1288 for (var i = 0; i < notes.length; ++i)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1289 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1290 showSlide(notes[i]);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1291 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1292
afa29ac9f050 add presen
aaa
parents:
diff changeset
1293 // no easy way to render background under each slide
afa29ac9f050 add presen
aaa
parents:
diff changeset
1294 // without duplicating the background divs for each slide
afa29ac9f050 add presen
aaa
parents:
diff changeset
1295 // therefore hide backgrounds to avoid messing up slides
afa29ac9f050 add presen
aaa
parents:
diff changeset
1296 hideBackgrounds();
afa29ac9f050 add presen
aaa
parents:
diff changeset
1297 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1298
afa29ac9f050 add presen
aaa
parents:
diff changeset
1299 // restore after printing
afa29ac9f050 add presen
aaa
parents:
diff changeset
1300 function singleSlideView()
afa29ac9f050 add presen
aaa
parents:
diff changeset
1301 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1302 var slide;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1303
afa29ac9f050 add presen
aaa
parents:
diff changeset
1304 for (var i = 0; i < slides.length; ++i)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1305 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1306 slide = slides[i];
afa29ac9f050 add presen
aaa
parents:
diff changeset
1307
afa29ac9f050 add presen
aaa
parents:
diff changeset
1308 slide.style.position = "absolute";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1309
afa29ac9f050 add presen
aaa
parents:
diff changeset
1310 if (i == slidenum)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1311 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1312 slide.style.borderStyle = "none";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1313 showSlide(slide);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1314 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1315 else
afa29ac9f050 add presen
aaa
parents:
diff changeset
1316 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1317 slide.style.borderStyle = "none";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1318 hideSlide(slide);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1319 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1320 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1321
afa29ac9f050 add presen
aaa
parents:
diff changeset
1322 setVisibilityAllIncremental("visible");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1323 lastShown = previousIncrementalItem(null);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1324
afa29ac9f050 add presen
aaa
parents:
diff changeset
1325 var note;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1326
afa29ac9f050 add presen
aaa
parents:
diff changeset
1327 for (var i = 0; i < notes.length; ++i)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1328 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1329 hideSlide(notes[i]);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1330 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1331 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1332
afa29ac9f050 add presen
aaa
parents:
diff changeset
1333 // the string str is a whitespace separated list of tokens
afa29ac9f050 add presen
aaa
parents:
diff changeset
1334 // test if str contains a particular token, e.g. "slide"
afa29ac9f050 add presen
aaa
parents:
diff changeset
1335 function hasToken(str, token)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1336 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1337 if (str)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1338 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1339 // define pattern as regular expression
afa29ac9f050 add presen
aaa
parents:
diff changeset
1340 var pattern = /\w+/g;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1341
afa29ac9f050 add presen
aaa
parents:
diff changeset
1342 // check for matches
afa29ac9f050 add presen
aaa
parents:
diff changeset
1343 // place result in array
afa29ac9f050 add presen
aaa
parents:
diff changeset
1344 var result = str.match(pattern);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1345
afa29ac9f050 add presen
aaa
parents:
diff changeset
1346 // now check if desired token is present
afa29ac9f050 add presen
aaa
parents:
diff changeset
1347 for (var i = 0; i < result.length; i++)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1348 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1349 if (result[i] == token)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1350 return true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1351 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1352 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1353
afa29ac9f050 add presen
aaa
parents:
diff changeset
1354 return false;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1355 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1356
afa29ac9f050 add presen
aaa
parents:
diff changeset
1357 function getClassList(element)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1358 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1359 if (typeof element.className != 'undefined')
afa29ac9f050 add presen
aaa
parents:
diff changeset
1360 return element.className;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1361
afa29ac9f050 add presen
aaa
parents:
diff changeset
1362 var clsname = (ns_pos||ie8) ? "class" : "className";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1363 return element.getAttribute(clsname);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1364 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1365
afa29ac9f050 add presen
aaa
parents:
diff changeset
1366 function hasClass(element, name)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1367 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1368 var regexp = new RegExp("(^| )" + name + "\W*");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1369
afa29ac9f050 add presen
aaa
parents:
diff changeset
1370 if (typeof element.className != 'undefined')
afa29ac9f050 add presen
aaa
parents:
diff changeset
1371 return regexp.test(element.className);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1372
afa29ac9f050 add presen
aaa
parents:
diff changeset
1373 var clsname = (ns_pos||ie8) ? "class" : "className";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1374 return regexp.test(element.getAttribute(clsname));
afa29ac9f050 add presen
aaa
parents:
diff changeset
1375 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1376
afa29ac9f050 add presen
aaa
parents:
diff changeset
1377 function removeClass(element, name)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1378 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1379 var regexp = new RegExp("(^| )" + name + "\W*");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1380 var clsval = "";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1381
afa29ac9f050 add presen
aaa
parents:
diff changeset
1382 if (typeof element.className != 'undefined')
afa29ac9f050 add presen
aaa
parents:
diff changeset
1383 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1384 clsval = element.className;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1385
afa29ac9f050 add presen
aaa
parents:
diff changeset
1386 if (clsval)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1387 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1388 clsval = clsval.replace(regexp, "");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1389 element.className = clsval;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1390 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1391 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1392 else
afa29ac9f050 add presen
aaa
parents:
diff changeset
1393 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1394 var clsname = (ns_pos||ie8) ? "class" : "className";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1395 clsval = element.getAttribute(clsname);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1396
afa29ac9f050 add presen
aaa
parents:
diff changeset
1397 if (clsval)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1398 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1399 clsval = clsval.replace(regexp, "");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1400 element.setAttribute(clsname, clsval);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1401 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1402 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1403 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1404
afa29ac9f050 add presen
aaa
parents:
diff changeset
1405 function addClass(element, name)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1406 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1407 if (!hasClass(element, name))
afa29ac9f050 add presen
aaa
parents:
diff changeset
1408 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1409 if (typeof element.className != 'undefined')
afa29ac9f050 add presen
aaa
parents:
diff changeset
1410 element.className += " " + name;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1411 else
afa29ac9f050 add presen
aaa
parents:
diff changeset
1412 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1413 var clsname = (ns_pos||ie8) ? "class" : "className";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1414 var clsval = element.getAttribute(clsname);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1415 clsval = clsval ? clsval + " " + name : name;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1416 element.setAttribute(clsname, clsval);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1417 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1418 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1419 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1420
afa29ac9f050 add presen
aaa
parents:
diff changeset
1421 // wysiwyg editors make it hard to use div elements
afa29ac9f050 add presen
aaa
parents:
diff changeset
1422 // e.g. amaya loses the div when you copy and paste
afa29ac9f050 add presen
aaa
parents:
diff changeset
1423 // this function wraps div elements around implicit
afa29ac9f050 add presen
aaa
parents:
diff changeset
1424 // slides which start with an h1 element and continue
afa29ac9f050 add presen
aaa
parents:
diff changeset
1425 // up to the next heading or div element
afa29ac9f050 add presen
aaa
parents:
diff changeset
1426 function wrapImplicitSlides()
afa29ac9f050 add presen
aaa
parents:
diff changeset
1427 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1428 var i, heading, node, next, div;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1429 var headings = document.getElementsByTagName("h1");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1430
afa29ac9f050 add presen
aaa
parents:
diff changeset
1431 if (!headings)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1432 return;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1433
afa29ac9f050 add presen
aaa
parents:
diff changeset
1434 for (i = 0; i < headings.length; ++i)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1435 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1436 heading = headings[i];
afa29ac9f050 add presen
aaa
parents:
diff changeset
1437
afa29ac9f050 add presen
aaa
parents:
diff changeset
1438 if (heading.parentNode != document.body)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1439 continue;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1440
afa29ac9f050 add presen
aaa
parents:
diff changeset
1441 node = heading.nextSibling;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1442
afa29ac9f050 add presen
aaa
parents:
diff changeset
1443 div = document.createElement("div");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1444 addClass(div, "slide");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1445 document.body.replaceChild(div, heading);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1446 div.appendChild(heading);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1447
afa29ac9f050 add presen
aaa
parents:
diff changeset
1448 while (node)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1449 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1450 if (node.nodeType == 1 && // an element
afa29ac9f050 add presen
aaa
parents:
diff changeset
1451 (node.nodeName == "H1" ||
afa29ac9f050 add presen
aaa
parents:
diff changeset
1452 node.nodeName == "h1" ||
afa29ac9f050 add presen
aaa
parents:
diff changeset
1453 node.nodeName == "DIV" ||
afa29ac9f050 add presen
aaa
parents:
diff changeset
1454 node.nodeName == "div"))
afa29ac9f050 add presen
aaa
parents:
diff changeset
1455 break;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1456
afa29ac9f050 add presen
aaa
parents:
diff changeset
1457 next = node.nextSibling;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1458 node = document.body.removeChild(node);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1459 div.appendChild(node);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1460 node = next;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1461 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1462 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1463 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1464
afa29ac9f050 add presen
aaa
parents:
diff changeset
1465 // return new array of all slides
afa29ac9f050 add presen
aaa
parents:
diff changeset
1466 function collectSlides()
afa29ac9f050 add presen
aaa
parents:
diff changeset
1467 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1468 var slides = new Array();
afa29ac9f050 add presen
aaa
parents:
diff changeset
1469 var divs = document.body.getElementsByTagName("div");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1470
afa29ac9f050 add presen
aaa
parents:
diff changeset
1471 for (var i = 0; i < divs.length; ++i)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1472 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1473 div = divs.item(i);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1474
afa29ac9f050 add presen
aaa
parents:
diff changeset
1475 if (hasClass(div, "slide"))
afa29ac9f050 add presen
aaa
parents:
diff changeset
1476 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1477 // add slide to collection
afa29ac9f050 add presen
aaa
parents:
diff changeset
1478 slides[slides.length] = div;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1479
afa29ac9f050 add presen
aaa
parents:
diff changeset
1480 // hide each slide as it is found
afa29ac9f050 add presen
aaa
parents:
diff changeset
1481 div.style.display = "none";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1482 div.style.visibility = "hidden";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1483
afa29ac9f050 add presen
aaa
parents:
diff changeset
1484 // add dummy <br/> at end for scrolling hack
afa29ac9f050 add presen
aaa
parents:
diff changeset
1485 var node1 = document.createElement("br");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1486 div.appendChild(node1);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1487 var node2 = document.createElement("br");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1488 div.appendChild(node2);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1489 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1490 else if (hasClass(div, "background"))
afa29ac9f050 add presen
aaa
parents:
diff changeset
1491 { // work around for Firefox SVG reload bug
afa29ac9f050 add presen
aaa
parents:
diff changeset
1492 // which otherwise replaces 1st SVG graphic with 2nd
afa29ac9f050 add presen
aaa
parents:
diff changeset
1493 div.style.display = "block";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1494 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1495 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1496
afa29ac9f050 add presen
aaa
parents:
diff changeset
1497 return slides;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1498 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1499
afa29ac9f050 add presen
aaa
parents:
diff changeset
1500 // return new array of all <div class="handout">
afa29ac9f050 add presen
aaa
parents:
diff changeset
1501 function collectNotes()
afa29ac9f050 add presen
aaa
parents:
diff changeset
1502 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1503 var notes = new Array();
afa29ac9f050 add presen
aaa
parents:
diff changeset
1504 var divs = document.body.getElementsByTagName("div");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1505
afa29ac9f050 add presen
aaa
parents:
diff changeset
1506 for (var i = 0; i < divs.length; ++i)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1507 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1508 div = divs.item(i);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1509
afa29ac9f050 add presen
aaa
parents:
diff changeset
1510 if (hasClass(div, "handout"))
afa29ac9f050 add presen
aaa
parents:
diff changeset
1511 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1512 // add slide to collection
afa29ac9f050 add presen
aaa
parents:
diff changeset
1513 notes[notes.length] = div;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1514
afa29ac9f050 add presen
aaa
parents:
diff changeset
1515 // hide handout notes as they are found
afa29ac9f050 add presen
aaa
parents:
diff changeset
1516 div.style.display = "none";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1517 div.style.visibility = "hidden";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1518 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1519 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1520
afa29ac9f050 add presen
aaa
parents:
diff changeset
1521 return notes;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1522 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1523
afa29ac9f050 add presen
aaa
parents:
diff changeset
1524 // return new array of all <div class="background">
afa29ac9f050 add presen
aaa
parents:
diff changeset
1525 // including named backgrounds e.g. class="background titlepage"
afa29ac9f050 add presen
aaa
parents:
diff changeset
1526 function collectBackgrounds()
afa29ac9f050 add presen
aaa
parents:
diff changeset
1527 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1528 var backgrounds = new Array();
afa29ac9f050 add presen
aaa
parents:
diff changeset
1529 var divs = document.body.getElementsByTagName("div");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1530
afa29ac9f050 add presen
aaa
parents:
diff changeset
1531 for (var i = 0; i < divs.length; ++i)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1532 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1533 div = divs.item(i);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1534
afa29ac9f050 add presen
aaa
parents:
diff changeset
1535 if (hasClass(div, "background"))
afa29ac9f050 add presen
aaa
parents:
diff changeset
1536 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1537 // add slide to collection
afa29ac9f050 add presen
aaa
parents:
diff changeset
1538 backgrounds[backgrounds.length] = div;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1539
afa29ac9f050 add presen
aaa
parents:
diff changeset
1540 // hide named backgrounds as they are found
afa29ac9f050 add presen
aaa
parents:
diff changeset
1541 // e.g. class="background epilog"
afa29ac9f050 add presen
aaa
parents:
diff changeset
1542 if (getClassList(div) != "background")
afa29ac9f050 add presen
aaa
parents:
diff changeset
1543 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1544 div.style.display = "none";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1545 div.style.visibility = "hidden";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1546 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1547 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1548 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1549
afa29ac9f050 add presen
aaa
parents:
diff changeset
1550 return backgrounds;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1551 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1552
afa29ac9f050 add presen
aaa
parents:
diff changeset
1553 // show just the backgrounds pertinent to this slide
afa29ac9f050 add presen
aaa
parents:
diff changeset
1554 function syncBackground(slide)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1555 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1556 var background;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1557 var bgColor;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1558
afa29ac9f050 add presen
aaa
parents:
diff changeset
1559 if (slide.currentStyle)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1560 bgColor = slide.currentStyle["backgroundColor"];
afa29ac9f050 add presen
aaa
parents:
diff changeset
1561 else if (document.defaultView)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1562 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1563 var styles = document.defaultView.getComputedStyle(slide,null);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1564
afa29ac9f050 add presen
aaa
parents:
diff changeset
1565 if (styles)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1566 bgColor = styles.getPropertyValue("background-color");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1567 else // broken implementation probably due Safari or Konqueror
afa29ac9f050 add presen
aaa
parents:
diff changeset
1568 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1569 //alert("defective implementation of getComputedStyle()");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1570 bgColor = "transparent";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1571 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1572 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1573 else
afa29ac9f050 add presen
aaa
parents:
diff changeset
1574 bgColor == "transparent";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1575
afa29ac9f050 add presen
aaa
parents:
diff changeset
1576 if (bgColor == "transparent")
afa29ac9f050 add presen
aaa
parents:
diff changeset
1577 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1578 var slideClass = getClassList(slide);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1579
afa29ac9f050 add presen
aaa
parents:
diff changeset
1580 for (var i = 0; i < backgrounds.length; i++)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1581 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1582 background = backgrounds[i];
afa29ac9f050 add presen
aaa
parents:
diff changeset
1583
afa29ac9f050 add presen
aaa
parents:
diff changeset
1584 var bgClass = getClassList(background);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1585
afa29ac9f050 add presen
aaa
parents:
diff changeset
1586 if (matchingBackground(slideClass, bgClass))
afa29ac9f050 add presen
aaa
parents:
diff changeset
1587 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1588 background.style.display = "block";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1589 background.style.visibility = "visible";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1590 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1591 else
afa29ac9f050 add presen
aaa
parents:
diff changeset
1592 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1593 background.style.display = "none";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1594 background.style.visibility = "hidden";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1595 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1596 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1597 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1598 else // forcibly hide all backgrounds
afa29ac9f050 add presen
aaa
parents:
diff changeset
1599 hideBackgrounds();
afa29ac9f050 add presen
aaa
parents:
diff changeset
1600 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1601
afa29ac9f050 add presen
aaa
parents:
diff changeset
1602 function hideBackgrounds()
afa29ac9f050 add presen
aaa
parents:
diff changeset
1603 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1604 for (var i = 0; i < backgrounds.length; i++)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1605 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1606 background = backgrounds[i];
afa29ac9f050 add presen
aaa
parents:
diff changeset
1607 background.style.display = "none";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1608 background.style.visibility = "hidden";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1609 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1610 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1611
afa29ac9f050 add presen
aaa
parents:
diff changeset
1612 // compare classes for slide and background
afa29ac9f050 add presen
aaa
parents:
diff changeset
1613 function matchingBackground(slideClass, bgClass)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1614 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1615 if (bgClass == "background")
afa29ac9f050 add presen
aaa
parents:
diff changeset
1616 return true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1617
afa29ac9f050 add presen
aaa
parents:
diff changeset
1618 // define pattern as regular expression
afa29ac9f050 add presen
aaa
parents:
diff changeset
1619 var pattern = /\w+/g;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1620
afa29ac9f050 add presen
aaa
parents:
diff changeset
1621 // check for matches and place result in array
afa29ac9f050 add presen
aaa
parents:
diff changeset
1622 var result = slideClass.match(pattern);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1623
afa29ac9f050 add presen
aaa
parents:
diff changeset
1624 // now check if desired name is present for background
afa29ac9f050 add presen
aaa
parents:
diff changeset
1625 for (var i = 0; i < result.length; i++)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1626 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1627 if (hasToken(bgClass, result[i]))
afa29ac9f050 add presen
aaa
parents:
diff changeset
1628 return true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1629 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1630
afa29ac9f050 add presen
aaa
parents:
diff changeset
1631 return false;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1632 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1633
afa29ac9f050 add presen
aaa
parents:
diff changeset
1634 // left to right traversal of root's content
afa29ac9f050 add presen
aaa
parents:
diff changeset
1635 function nextNode(root, node)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1636 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1637 if (node == null)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1638 return root.firstChild;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1639
afa29ac9f050 add presen
aaa
parents:
diff changeset
1640 if (node.firstChild)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1641 return node.firstChild;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1642
afa29ac9f050 add presen
aaa
parents:
diff changeset
1643 if (node.nextSibling)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1644 return node.nextSibling;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1645
afa29ac9f050 add presen
aaa
parents:
diff changeset
1646 for (;;)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1647 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1648 node = node.parentNode;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1649
afa29ac9f050 add presen
aaa
parents:
diff changeset
1650 if (!node || node == root)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1651 break;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1652
afa29ac9f050 add presen
aaa
parents:
diff changeset
1653 if (node && node.nextSibling)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1654 return node.nextSibling;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1655 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1656
afa29ac9f050 add presen
aaa
parents:
diff changeset
1657 return null;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1658 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1659
afa29ac9f050 add presen
aaa
parents:
diff changeset
1660 // right to left traversal of root's content
afa29ac9f050 add presen
aaa
parents:
diff changeset
1661 function previousNode(root, node)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1662 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1663 if (node == null)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1664 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1665 node = root.lastChild;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1666
afa29ac9f050 add presen
aaa
parents:
diff changeset
1667 if (node)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1668 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1669 while (node.lastChild)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1670 node = node.lastChild;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1671 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1672
afa29ac9f050 add presen
aaa
parents:
diff changeset
1673 return node;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1674 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1675
afa29ac9f050 add presen
aaa
parents:
diff changeset
1676 if (node.previousSibling)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1677 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1678 node = node.previousSibling;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1679
afa29ac9f050 add presen
aaa
parents:
diff changeset
1680 while (node.lastChild)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1681 node = node.lastChild;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1682
afa29ac9f050 add presen
aaa
parents:
diff changeset
1683 return node;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1684 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1685
afa29ac9f050 add presen
aaa
parents:
diff changeset
1686 if (node.parentNode != root)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1687 return node.parentNode;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1688
afa29ac9f050 add presen
aaa
parents:
diff changeset
1689 return null;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1690 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1691
afa29ac9f050 add presen
aaa
parents:
diff changeset
1692 // HTML elements that can be used with class="incremental"
afa29ac9f050 add presen
aaa
parents:
diff changeset
1693 // note that you can also put the class on containers like
afa29ac9f050 add presen
aaa
parents:
diff changeset
1694 // up, ol, dl, and div to make their contents appear
afa29ac9f050 add presen
aaa
parents:
diff changeset
1695 // incrementally. Upper case is used since this is what
afa29ac9f050 add presen
aaa
parents:
diff changeset
1696 // browsers report for HTML node names (text/html).
afa29ac9f050 add presen
aaa
parents:
diff changeset
1697 function incrementalElementList()
afa29ac9f050 add presen
aaa
parents:
diff changeset
1698 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1699 var inclist = new Array();
afa29ac9f050 add presen
aaa
parents:
diff changeset
1700 inclist["P"] = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1701 inclist["PRE"] = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1702 inclist["LI"] = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1703 inclist["BLOCKQUOTE"] = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1704 inclist["DT"] = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1705 inclist["DD"] = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1706 inclist["H2"] = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1707 inclist["H3"] = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1708 inclist["H4"] = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1709 inclist["H5"] = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1710 inclist["H6"] = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1711 inclist["SPAN"] = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1712 inclist["ADDRESS"] = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1713 inclist["TABLE"] = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1714 inclist["TR"] = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1715 inclist["TH"] = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1716 inclist["TD"] = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1717 inclist["IMG"] = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1718 inclist["OBJECT"] = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1719 return inclist;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1720 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1721
afa29ac9f050 add presen
aaa
parents:
diff changeset
1722 function nextIncrementalItem(node)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1723 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1724 var slide = slides[slidenum];
afa29ac9f050 add presen
aaa
parents:
diff changeset
1725
afa29ac9f050 add presen
aaa
parents:
diff changeset
1726 for (;;)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1727 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1728 node = nextNode(slide, node);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1729
afa29ac9f050 add presen
aaa
parents:
diff changeset
1730 if (node == null || node.parentNode == null)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1731 break;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1732
afa29ac9f050 add presen
aaa
parents:
diff changeset
1733 if (node.nodeType == 1) // ELEMENT
afa29ac9f050 add presen
aaa
parents:
diff changeset
1734 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1735 if (node.nodeName == "BR")
afa29ac9f050 add presen
aaa
parents:
diff changeset
1736 continue;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1737
afa29ac9f050 add presen
aaa
parents:
diff changeset
1738 if (hasClass(node, "incremental")
afa29ac9f050 add presen
aaa
parents:
diff changeset
1739 && okayForIncremental[node.nodeName])
afa29ac9f050 add presen
aaa
parents:
diff changeset
1740 return node;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1741
afa29ac9f050 add presen
aaa
parents:
diff changeset
1742 if (hasClass(node.parentNode, "incremental")
afa29ac9f050 add presen
aaa
parents:
diff changeset
1743 && !hasClass(node, "non-incremental"))
afa29ac9f050 add presen
aaa
parents:
diff changeset
1744 return node;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1745 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1746 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1747
afa29ac9f050 add presen
aaa
parents:
diff changeset
1748 return node;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1749 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1750
afa29ac9f050 add presen
aaa
parents:
diff changeset
1751 function previousIncrementalItem(node)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1752 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1753 var slide = slides[slidenum];
afa29ac9f050 add presen
aaa
parents:
diff changeset
1754
afa29ac9f050 add presen
aaa
parents:
diff changeset
1755 for (;;)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1756 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1757 node = previousNode(slide, node);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1758
afa29ac9f050 add presen
aaa
parents:
diff changeset
1759 if (node == null || node.parentNode == null)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1760 break;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1761
afa29ac9f050 add presen
aaa
parents:
diff changeset
1762 if (node.nodeType == 1)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1763 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1764 if (node.nodeName == "BR")
afa29ac9f050 add presen
aaa
parents:
diff changeset
1765 continue;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1766
afa29ac9f050 add presen
aaa
parents:
diff changeset
1767 if (hasClass(node, "incremental")
afa29ac9f050 add presen
aaa
parents:
diff changeset
1768 && okayForIncremental[node.nodeName])
afa29ac9f050 add presen
aaa
parents:
diff changeset
1769 return node;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1770
afa29ac9f050 add presen
aaa
parents:
diff changeset
1771 if (hasClass(node.parentNode, "incremental")
afa29ac9f050 add presen
aaa
parents:
diff changeset
1772 && !hasClass(node, "non-incremental"))
afa29ac9f050 add presen
aaa
parents:
diff changeset
1773 return node;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1774 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1775 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1776
afa29ac9f050 add presen
aaa
parents:
diff changeset
1777 return node;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1778 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1779
afa29ac9f050 add presen
aaa
parents:
diff changeset
1780 // set visibility for all elements on current slide with
afa29ac9f050 add presen
aaa
parents:
diff changeset
1781 // a parent element with attribute class="incremental"
afa29ac9f050 add presen
aaa
parents:
diff changeset
1782 function setVisibilityAllIncremental(value)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1783 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1784 var node = nextIncrementalItem(null);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1785
afa29ac9f050 add presen
aaa
parents:
diff changeset
1786 while (node)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1787 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1788 node.style.visibility = value;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1789 node = nextIncrementalItem(node);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1790 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1791 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1792
afa29ac9f050 add presen
aaa
parents:
diff changeset
1793 // reveal the next hidden item on the slide
afa29ac9f050 add presen
aaa
parents:
diff changeset
1794 // node is null or the node that was last revealed
afa29ac9f050 add presen
aaa
parents:
diff changeset
1795 function revealNextItem(node)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1796 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1797 node = nextIncrementalItem(node);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1798
afa29ac9f050 add presen
aaa
parents:
diff changeset
1799 if (node && node.nodeType == 1) // an element
afa29ac9f050 add presen
aaa
parents:
diff changeset
1800 node.style.visibility = "visible";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1801
afa29ac9f050 add presen
aaa
parents:
diff changeset
1802 return node;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1803 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1804
afa29ac9f050 add presen
aaa
parents:
diff changeset
1805
afa29ac9f050 add presen
aaa
parents:
diff changeset
1806 // exact inverse of revealNextItem(node)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1807 function hidePreviousItem(node)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1808 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1809 if (node && node.nodeType == 1) // an element
afa29ac9f050 add presen
aaa
parents:
diff changeset
1810 node.style.visibility = "hidden";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1811
afa29ac9f050 add presen
aaa
parents:
diff changeset
1812 return previousIncrementalItem(node);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1813 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1814
afa29ac9f050 add presen
aaa
parents:
diff changeset
1815
afa29ac9f050 add presen
aaa
parents:
diff changeset
1816 /* set click handlers on all anchors */
afa29ac9f050 add presen
aaa
parents:
diff changeset
1817 function patchAnchors()
afa29ac9f050 add presen
aaa
parents:
diff changeset
1818 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1819 var anchors = document.body.getElementsByTagName("a");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1820
afa29ac9f050 add presen
aaa
parents:
diff changeset
1821 for (var i = 0; i < anchors.length; ++i)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1822 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1823 anchors[i].onclick = clickedAnchor;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1824 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1825 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1826
afa29ac9f050 add presen
aaa
parents:
diff changeset
1827 function clickedAnchor(e)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1828 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1829 if (!e)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1830 var e = window.event;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1831
afa29ac9f050 add presen
aaa
parents:
diff changeset
1832 // compare this.href with location.href
afa29ac9f050 add presen
aaa
parents:
diff changeset
1833 // for link to another slide in this doc
afa29ac9f050 add presen
aaa
parents:
diff changeset
1834
afa29ac9f050 add presen
aaa
parents:
diff changeset
1835 if (pageAddress(this.href) == pageAddress(location.href))
afa29ac9f050 add presen
aaa
parents:
diff changeset
1836 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1837 // yes, so find new slide number
afa29ac9f050 add presen
aaa
parents:
diff changeset
1838 var newslidenum = findSlideNumber(this.href);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1839
afa29ac9f050 add presen
aaa
parents:
diff changeset
1840 if (newslidenum != slidenum)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1841 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1842 slide = slides[slidenum];
afa29ac9f050 add presen
aaa
parents:
diff changeset
1843 hideSlide(slide);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1844 slidenum = newslidenum;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1845 slide = slides[slidenum];
afa29ac9f050 add presen
aaa
parents:
diff changeset
1846 showSlide(slide);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1847 setLocation();
afa29ac9f050 add presen
aaa
parents:
diff changeset
1848 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1849 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1850 else if (this.target == null)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1851 location.href = this.href;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1852
afa29ac9f050 add presen
aaa
parents:
diff changeset
1853 this.blur();
afa29ac9f050 add presen
aaa
parents:
diff changeset
1854 stopPropagation(e);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1855 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1856
afa29ac9f050 add presen
aaa
parents:
diff changeset
1857 function pageAddress(uri)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1858 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1859 var i = uri.indexOf("#");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1860
afa29ac9f050 add presen
aaa
parents:
diff changeset
1861 if (i < 0)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1862 i = uri.indexOf("%23");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1863
afa29ac9f050 add presen
aaa
parents:
diff changeset
1864 // check if anchor is entire page
afa29ac9f050 add presen
aaa
parents:
diff changeset
1865
afa29ac9f050 add presen
aaa
parents:
diff changeset
1866 if (i < 0)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1867 return uri; // yes
afa29ac9f050 add presen
aaa
parents:
diff changeset
1868
afa29ac9f050 add presen
aaa
parents:
diff changeset
1869 return uri.substr(0, i);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1870 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1871
afa29ac9f050 add presen
aaa
parents:
diff changeset
1872 function showSlideNumber()
afa29ac9f050 add presen
aaa
parents:
diff changeset
1873 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1874 slideNumElement.innerHTML = "slide".localize() + " " +
afa29ac9f050 add presen
aaa
parents:
diff changeset
1875 (slidenum + 1) + "/" + slides.length;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1876 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1877
afa29ac9f050 add presen
aaa
parents:
diff changeset
1878 // every 200mS check if the location has been changed as a
afa29ac9f050 add presen
aaa
parents:
diff changeset
1879 // result of the user activating the Back button/menu item
afa29ac9f050 add presen
aaa
parents:
diff changeset
1880 // doesn't work for Opera < 9.5
afa29ac9f050 add presen
aaa
parents:
diff changeset
1881 function checkLocation()
afa29ac9f050 add presen
aaa
parents:
diff changeset
1882 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1883 var hash = location.hash;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1884
afa29ac9f050 add presen
aaa
parents:
diff changeset
1885 if (slidenum > 0 && (hash == "" || hash == "#"))
afa29ac9f050 add presen
aaa
parents:
diff changeset
1886 gotoSlide(0);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1887 else if (hash.length > 2 && hash != "#("+(slidenum+1)+")")
afa29ac9f050 add presen
aaa
parents:
diff changeset
1888 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1889 var num = parseInt(location.hash.substr(2));
afa29ac9f050 add presen
aaa
parents:
diff changeset
1890
afa29ac9f050 add presen
aaa
parents:
diff changeset
1891 if (!isNaN(num))
afa29ac9f050 add presen
aaa
parents:
diff changeset
1892 gotoSlide(num-1);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1893 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1894 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1895
afa29ac9f050 add presen
aaa
parents:
diff changeset
1896 // this doesn't push location onto history stack for IE
afa29ac9f050 add presen
aaa
parents:
diff changeset
1897 // for which a hidden iframe hack is needed: load page into
afa29ac9f050 add presen
aaa
parents:
diff changeset
1898 // the iframe with script that set's parent's location.hash
afa29ac9f050 add presen
aaa
parents:
diff changeset
1899 // but that won't work for standalone use unless we can
afa29ac9f050 add presen
aaa
parents:
diff changeset
1900 // create the page dynamically via a javascript: URL
afa29ac9f050 add presen
aaa
parents:
diff changeset
1901 function setLocation()
afa29ac9f050 add presen
aaa
parents:
diff changeset
1902 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1903 var uri = pageAddress(location.href);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1904 var hash = "#(" + (slidenum+1) + ")";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1905
afa29ac9f050 add presen
aaa
parents:
diff changeset
1906 if (slidenum >= 0)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1907 uri = uri + hash;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1908
afa29ac9f050 add presen
aaa
parents:
diff changeset
1909 if (ie && !ie8)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1910 pushHash(hash);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1911
afa29ac9f050 add presen
aaa
parents:
diff changeset
1912 if (uri != location.href /*&& !khtml */)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1913 location.href = uri;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1914
afa29ac9f050 add presen
aaa
parents:
diff changeset
1915 if (khtml)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1916 hash = "(" + (slidenum+1) + ")";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1917
afa29ac9f050 add presen
aaa
parents:
diff changeset
1918 if (!ie && location.hash != hash && location.hash != "")
afa29ac9f050 add presen
aaa
parents:
diff changeset
1919 location.hash = hash;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1920
afa29ac9f050 add presen
aaa
parents:
diff changeset
1921 document.title = title + " (" + (slidenum+1) + ")";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1922 showSlideNumber();
afa29ac9f050 add presen
aaa
parents:
diff changeset
1923 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1924
afa29ac9f050 add presen
aaa
parents:
diff changeset
1925 // only used for IE6 and IE7
afa29ac9f050 add presen
aaa
parents:
diff changeset
1926 function onFrameLoaded(hash)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1927 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1928 location.hash = hash;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1929 var uri = pageAddress(location.href);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1930 location.href = uri + hash;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1931 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1932
afa29ac9f050 add presen
aaa
parents:
diff changeset
1933 // history hack with thanks to Bertrand Le Roy
afa29ac9f050 add presen
aaa
parents:
diff changeset
1934 function pushHash(hash)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1935 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1936 if (hash == "") hash = "#(1)";
afa29ac9f050 add presen
aaa
parents:
diff changeset
1937 window.location.hash = hash;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1938 var doc = document.getElementById("historyFrame").contentWindow.document;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1939 doc.open("javascript:'<html></html>'");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1940 doc.write("<html><head><script type=\"text/javascript\">parent.onFrameLoaded('"+
afa29ac9f050 add presen
aaa
parents:
diff changeset
1941 (hash) + "');</script></head><body>hello mum</body></html>");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1942 doc.close();
afa29ac9f050 add presen
aaa
parents:
diff changeset
1943 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1944
afa29ac9f050 add presen
aaa
parents:
diff changeset
1945 // find current slide based upon location
afa29ac9f050 add presen
aaa
parents:
diff changeset
1946 // first find target anchor and then look
afa29ac9f050 add presen
aaa
parents:
diff changeset
1947 // for associated div element enclosing it
afa29ac9f050 add presen
aaa
parents:
diff changeset
1948 // finally map that to slide number
afa29ac9f050 add presen
aaa
parents:
diff changeset
1949 function findSlideNumber(uri)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1950 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1951 // first get anchor from page location
afa29ac9f050 add presen
aaa
parents:
diff changeset
1952
afa29ac9f050 add presen
aaa
parents:
diff changeset
1953 var i = uri.indexOf("#");
afa29ac9f050 add presen
aaa
parents:
diff changeset
1954
afa29ac9f050 add presen
aaa
parents:
diff changeset
1955 // check if anchor is entire page
afa29ac9f050 add presen
aaa
parents:
diff changeset
1956
afa29ac9f050 add presen
aaa
parents:
diff changeset
1957 if (i < 0)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1958 return 0; // yes
afa29ac9f050 add presen
aaa
parents:
diff changeset
1959
afa29ac9f050 add presen
aaa
parents:
diff changeset
1960 var anchor = unescape(uri.substr(i+1));
afa29ac9f050 add presen
aaa
parents:
diff changeset
1961
afa29ac9f050 add presen
aaa
parents:
diff changeset
1962 // now use anchor as XML ID to find target
afa29ac9f050 add presen
aaa
parents:
diff changeset
1963 var target = document.getElementById(anchor);
afa29ac9f050 add presen
aaa
parents:
diff changeset
1964
afa29ac9f050 add presen
aaa
parents:
diff changeset
1965 if (!target)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1966 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1967 // does anchor look like "(2)" for slide 2 ??
afa29ac9f050 add presen
aaa
parents:
diff changeset
1968 // where first slide is (1)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1969 var re = /\((\d)+\)/;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1970
afa29ac9f050 add presen
aaa
parents:
diff changeset
1971 if (anchor.match(re))
afa29ac9f050 add presen
aaa
parents:
diff changeset
1972 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1973 var num = parseInt(anchor.substring(1, anchor.length-1));
afa29ac9f050 add presen
aaa
parents:
diff changeset
1974
afa29ac9f050 add presen
aaa
parents:
diff changeset
1975 if (num > slides.length)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1976 num = 1;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1977
afa29ac9f050 add presen
aaa
parents:
diff changeset
1978 if (--num < 0)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1979 num = 0;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1980
afa29ac9f050 add presen
aaa
parents:
diff changeset
1981 return num;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1982 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1983
afa29ac9f050 add presen
aaa
parents:
diff changeset
1984 // accept [2] for backwards compatibility
afa29ac9f050 add presen
aaa
parents:
diff changeset
1985 re = /\[(\d)+\]/;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1986
afa29ac9f050 add presen
aaa
parents:
diff changeset
1987 if (anchor.match(re))
afa29ac9f050 add presen
aaa
parents:
diff changeset
1988 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
1989 var num = parseInt(anchor.substring(1, anchor.length-1));
afa29ac9f050 add presen
aaa
parents:
diff changeset
1990
afa29ac9f050 add presen
aaa
parents:
diff changeset
1991 if (num > slides.length)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1992 num = 1;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1993
afa29ac9f050 add presen
aaa
parents:
diff changeset
1994 if (--num < 0)
afa29ac9f050 add presen
aaa
parents:
diff changeset
1995 num = 0;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1996
afa29ac9f050 add presen
aaa
parents:
diff changeset
1997 return num;
afa29ac9f050 add presen
aaa
parents:
diff changeset
1998 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
1999
afa29ac9f050 add presen
aaa
parents:
diff changeset
2000 // oh dear unknown anchor
afa29ac9f050 add presen
aaa
parents:
diff changeset
2001 return 0;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2002 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2003
afa29ac9f050 add presen
aaa
parents:
diff changeset
2004 // search for enclosing slide
afa29ac9f050 add presen
aaa
parents:
diff changeset
2005
afa29ac9f050 add presen
aaa
parents:
diff changeset
2006 while (true)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2007 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2008 // browser coerces html elements to uppercase!
afa29ac9f050 add presen
aaa
parents:
diff changeset
2009 if (target.nodeName.toLowerCase() == "div" &&
afa29ac9f050 add presen
aaa
parents:
diff changeset
2010 hasClass(target, "slide"))
afa29ac9f050 add presen
aaa
parents:
diff changeset
2011 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2012 // found the slide element
afa29ac9f050 add presen
aaa
parents:
diff changeset
2013 break;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2014 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2015
afa29ac9f050 add presen
aaa
parents:
diff changeset
2016 // otherwise try parent element if any
afa29ac9f050 add presen
aaa
parents:
diff changeset
2017
afa29ac9f050 add presen
aaa
parents:
diff changeset
2018 target = target.parentNode;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2019
afa29ac9f050 add presen
aaa
parents:
diff changeset
2020 if (!target)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2021 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2022 return 0; // no luck!
afa29ac9f050 add presen
aaa
parents:
diff changeset
2023 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2024 };
afa29ac9f050 add presen
aaa
parents:
diff changeset
2025
afa29ac9f050 add presen
aaa
parents:
diff changeset
2026 for (i = 0; i < slides.length; ++i)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2027 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2028 if (slides[i] == target)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2029 return i; // success
afa29ac9f050 add presen
aaa
parents:
diff changeset
2030 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2031
afa29ac9f050 add presen
aaa
parents:
diff changeset
2032 // oh dear still no luck
afa29ac9f050 add presen
aaa
parents:
diff changeset
2033 return 0;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2034 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2035
afa29ac9f050 add presen
aaa
parents:
diff changeset
2036 // find slide name from first h1 element
afa29ac9f050 add presen
aaa
parents:
diff changeset
2037 // default to document title + slide number
afa29ac9f050 add presen
aaa
parents:
diff changeset
2038 function slideName(index)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2039 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2040 var name = null;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2041 var slide = slides[index];
afa29ac9f050 add presen
aaa
parents:
diff changeset
2042
afa29ac9f050 add presen
aaa
parents:
diff changeset
2043 var heading = findHeading(slide);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2044
afa29ac9f050 add presen
aaa
parents:
diff changeset
2045 if (heading)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2046 name = extractText(heading);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2047
afa29ac9f050 add presen
aaa
parents:
diff changeset
2048 if (!name)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2049 name = title + "(" + (index + 1) + ")";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2050
afa29ac9f050 add presen
aaa
parents:
diff changeset
2051 name.replace(/\&/g, "&amp;");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2052 name.replace(/\</g, "&lt;");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2053 name.replace(/\>/g, "&gt;");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2054
afa29ac9f050 add presen
aaa
parents:
diff changeset
2055 return name;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2056 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2057
afa29ac9f050 add presen
aaa
parents:
diff changeset
2058 // find first h1 element in DOM tree
afa29ac9f050 add presen
aaa
parents:
diff changeset
2059 function findHeading(node)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2060 { if (!node || node.nodeType != 1)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2061 return null;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2062
afa29ac9f050 add presen
aaa
parents:
diff changeset
2063 if (node.nodeName == "H1" || node.nodeName == "h1")
afa29ac9f050 add presen
aaa
parents:
diff changeset
2064 return node;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2065
afa29ac9f050 add presen
aaa
parents:
diff changeset
2066 var child = node.firstChild;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2067
afa29ac9f050 add presen
aaa
parents:
diff changeset
2068 while (child)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2069 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2070 node = findHeading(child);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2071
afa29ac9f050 add presen
aaa
parents:
diff changeset
2072 if (node)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2073 return node;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2074
afa29ac9f050 add presen
aaa
parents:
diff changeset
2075 child = child.nextSibling;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2076 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2077
afa29ac9f050 add presen
aaa
parents:
diff changeset
2078 return null;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2079 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2080
afa29ac9f050 add presen
aaa
parents:
diff changeset
2081 // recursively extract text from DOM tree
afa29ac9f050 add presen
aaa
parents:
diff changeset
2082 function extractText(node)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2083 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2084 if (!node)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2085 return "";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2086
afa29ac9f050 add presen
aaa
parents:
diff changeset
2087 // text nodes
afa29ac9f050 add presen
aaa
parents:
diff changeset
2088 if (node.nodeType == 3)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2089 return node.nodeValue;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2090
afa29ac9f050 add presen
aaa
parents:
diff changeset
2091 // elements
afa29ac9f050 add presen
aaa
parents:
diff changeset
2092 if (node.nodeType == 1)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2093 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2094 node = node.firstChild;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2095 var text = "";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2096
afa29ac9f050 add presen
aaa
parents:
diff changeset
2097 while (node)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2098 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2099 text = text + extractText(node);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2100 node = node.nextSibling;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2101 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2102
afa29ac9f050 add presen
aaa
parents:
diff changeset
2103 return text;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2104 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2105
afa29ac9f050 add presen
aaa
parents:
diff changeset
2106 return "";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2107 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2108
afa29ac9f050 add presen
aaa
parents:
diff changeset
2109
afa29ac9f050 add presen
aaa
parents:
diff changeset
2110 // find copyright text from meta element
afa29ac9f050 add presen
aaa
parents:
diff changeset
2111 function findCopyright()
afa29ac9f050 add presen
aaa
parents:
diff changeset
2112 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2113 var name, content;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2114 var meta = document.getElementsByTagName("meta");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2115
afa29ac9f050 add presen
aaa
parents:
diff changeset
2116 for (var i = 0; i < meta.length; ++i)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2117 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2118 name = meta[i].getAttribute("name");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2119 content = meta[i].getAttribute("content");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2120
afa29ac9f050 add presen
aaa
parents:
diff changeset
2121 if (name == "copyright")
afa29ac9f050 add presen
aaa
parents:
diff changeset
2122 return content;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2123 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2124
afa29ac9f050 add presen
aaa
parents:
diff changeset
2125 return null;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2126 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2127
afa29ac9f050 add presen
aaa
parents:
diff changeset
2128 function findSizeAdjust()
afa29ac9f050 add presen
aaa
parents:
diff changeset
2129 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2130 var name, content, offset;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2131 var meta = document.getElementsByTagName("meta");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2132
afa29ac9f050 add presen
aaa
parents:
diff changeset
2133 for (var i = 0; i < meta.length; ++i)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2134 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2135 name = meta[i].getAttribute("name");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2136 content = meta[i].getAttribute("content");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2137
afa29ac9f050 add presen
aaa
parents:
diff changeset
2138 if (name == "font-size-adjustment")
afa29ac9f050 add presen
aaa
parents:
diff changeset
2139 return 1 * content;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2140 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2141
afa29ac9f050 add presen
aaa
parents:
diff changeset
2142 return 1;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2143 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2144
afa29ac9f050 add presen
aaa
parents:
diff changeset
2145 function addToolbar()
afa29ac9f050 add presen
aaa
parents:
diff changeset
2146 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2147 var slideCounter, page;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2148
afa29ac9f050 add presen
aaa
parents:
diff changeset
2149 var toolbar = createElement("div");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2150 toolbar.setAttribute("class", "toolbar");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2151
afa29ac9f050 add presen
aaa
parents:
diff changeset
2152 if (ns_pos) // a reasonably behaved browser
afa29ac9f050 add presen
aaa
parents:
diff changeset
2153 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2154 var right = document.createElement("div");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2155 right.setAttribute("style", "float: right; text-align: right");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2156
afa29ac9f050 add presen
aaa
parents:
diff changeset
2157 slideCounter = document.createElement("div")
afa29ac9f050 add presen
aaa
parents:
diff changeset
2158 slideCounter.innerHTML = "slide".localize() + " n/m";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2159 right.appendChild(slideCounter);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2160 toolbar.appendChild(right);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2161
afa29ac9f050 add presen
aaa
parents:
diff changeset
2162 var left = document.createElement("div");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2163 left.setAttribute("style", "text-align: left");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2164
afa29ac9f050 add presen
aaa
parents:
diff changeset
2165 // global end of slide indicator
afa29ac9f050 add presen
aaa
parents:
diff changeset
2166 eos = document.createElement("span");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2167 eos.innerHTML = "* ";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2168 left.appendChild(eos);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2169
afa29ac9f050 add presen
aaa
parents:
diff changeset
2170 var help = document.createElement("a");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2171 help.setAttribute("href", helpPage);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2172 help.setAttribute("title", helpText.localize());
afa29ac9f050 add presen
aaa
parents:
diff changeset
2173 help.innerHTML = "help?".localize();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2174 left.appendChild(help);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2175 helpAnchor = help; // save for focus hack
afa29ac9f050 add presen
aaa
parents:
diff changeset
2176
afa29ac9f050 add presen
aaa
parents:
diff changeset
2177 var gap1 = document.createTextNode(" ");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2178 left.appendChild(gap1);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2179
afa29ac9f050 add presen
aaa
parents:
diff changeset
2180 var contents = document.createElement("a");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2181 contents.setAttribute("href", "javascript:toggleTableOfContents()");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2182 contents.setAttribute("title", "table of contents".localize());
afa29ac9f050 add presen
aaa
parents:
diff changeset
2183 contents.innerHTML = "contents?".localize();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2184 left.appendChild(contents);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2185
afa29ac9f050 add presen
aaa
parents:
diff changeset
2186 var gap2 = document.createTextNode(" ");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2187 left.appendChild(gap2);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2188
afa29ac9f050 add presen
aaa
parents:
diff changeset
2189 var start = document.createElement("a");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2190 start.setAttribute("href", "javascript:firstSlide()");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2191 start.setAttribute("title", "restart presentation".localize());
afa29ac9f050 add presen
aaa
parents:
diff changeset
2192 start.innerHTML = "restart?".localize();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2193 // start.setAttribute("href", "javascript:printSlides()");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2194 // start.setAttribute("title", "print all slides".localize());
afa29ac9f050 add presen
aaa
parents:
diff changeset
2195 // start.innerHTML = "print!".localize();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2196 left.appendChild(start);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2197
afa29ac9f050 add presen
aaa
parents:
diff changeset
2198 var copyright = findCopyright();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2199
afa29ac9f050 add presen
aaa
parents:
diff changeset
2200 if (copyright)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2201 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2202 var span = document.createElement("span");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2203 span.innerHTML = copyright;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2204 span.style.color = "black";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2205 span.style.marginLeft = "4em";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2206 left.appendChild(span);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2207 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2208
afa29ac9f050 add presen
aaa
parents:
diff changeset
2209 toolbar.appendChild(left);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2210 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2211 else // IE so need to work around its poor CSS support
afa29ac9f050 add presen
aaa
parents:
diff changeset
2212 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2213 toolbar.style.position = (ie7 ? "fixed" : "absolute");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2214 toolbar.style.zIndex = "200";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2215 toolbar.style.width = "99.9%";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2216 toolbar.style.height = "1.2em";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2217 toolbar.style.top = "auto";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2218 toolbar.style.bottom = "0";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2219 toolbar.style.left = "0";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2220 toolbar.style.right = "0";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2221 toolbar.style.textAlign = "left";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2222 toolbar.style.fontSize = "60%";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2223 toolbar.style.color = "red";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2224 toolbar.borderWidth = 0;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2225 toolbar.style.background = "rgb(240,240,240)";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2226
afa29ac9f050 add presen
aaa
parents:
diff changeset
2227 // would like to have help text left aligned
afa29ac9f050 add presen
aaa
parents:
diff changeset
2228 // and page counter right aligned, floating
afa29ac9f050 add presen
aaa
parents:
diff changeset
2229 // div's don't work, so instead use nested
afa29ac9f050 add presen
aaa
parents:
diff changeset
2230 // absolutely positioned div's.
afa29ac9f050 add presen
aaa
parents:
diff changeset
2231
afa29ac9f050 add presen
aaa
parents:
diff changeset
2232 var sp = document.createElement("span");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2233 sp.innerHTML = "&nbsp;&nbsp;*&nbsp;";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2234 toolbar.appendChild(sp);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2235 eos = sp; // end of slide indicator
afa29ac9f050 add presen
aaa
parents:
diff changeset
2236
afa29ac9f050 add presen
aaa
parents:
diff changeset
2237 var help = document.createElement("a");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2238 help.setAttribute("href", helpPage);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2239 help.setAttribute("title", helpText.localize());
afa29ac9f050 add presen
aaa
parents:
diff changeset
2240 help.innerHTML = "help?".localize();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2241 toolbar.appendChild(help);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2242 helpAnchor = help; // save for focus hack
afa29ac9f050 add presen
aaa
parents:
diff changeset
2243
afa29ac9f050 add presen
aaa
parents:
diff changeset
2244 var gap1 = document.createTextNode(" ");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2245 toolbar.appendChild(gap1);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2246
afa29ac9f050 add presen
aaa
parents:
diff changeset
2247 var contents = document.createElement("a");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2248 contents.setAttribute("href", "javascript:toggleTableOfContents()");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2249 contents.setAttribute("title", "table of contents".localize());
afa29ac9f050 add presen
aaa
parents:
diff changeset
2250 contents.innerHTML = "contents?".localize();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2251 toolbar.appendChild(contents);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2252
afa29ac9f050 add presen
aaa
parents:
diff changeset
2253 var gap2 = document.createTextNode(" ");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2254 toolbar.appendChild(gap2);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2255
afa29ac9f050 add presen
aaa
parents:
diff changeset
2256 var start = document.createElement("a");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2257 start.setAttribute("href", "javascript:firstSlide()");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2258 start.setAttribute("title", "restart presentation".localize());
afa29ac9f050 add presen
aaa
parents:
diff changeset
2259 start.innerHTML = "restart?".localize();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2260 // start.setAttribute("href", "javascript:printSlides()");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2261 // start.setAttribute("title", "print all slides".localize());
afa29ac9f050 add presen
aaa
parents:
diff changeset
2262 // start.innerHTML = "print!".localize();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2263 toolbar.appendChild(start);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2264
afa29ac9f050 add presen
aaa
parents:
diff changeset
2265 var copyright = findCopyright();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2266
afa29ac9f050 add presen
aaa
parents:
diff changeset
2267 if (copyright)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2268 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2269 var span = document.createElement("span");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2270 span.innerHTML = copyright;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2271 span.style.color = "black";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2272 span.style.marginLeft = "2em";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2273 toolbar.appendChild(span);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2274 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2275
afa29ac9f050 add presen
aaa
parents:
diff changeset
2276 slideCounter = document.createElement("div")
afa29ac9f050 add presen
aaa
parents:
diff changeset
2277 slideCounter.style.position = "absolute";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2278 slideCounter.style.width = "auto"; //"20%";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2279 slideCounter.style.height = "1.2em";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2280 slideCounter.style.top = "auto";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2281 slideCounter.style.bottom = 0;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2282 slideCounter.style.right = "0";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2283 slideCounter.style.textAlign = "right";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2284 slideCounter.style.color = "red";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2285 slideCounter.style.background = "rgb(240,240,240)";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2286
afa29ac9f050 add presen
aaa
parents:
diff changeset
2287 slideCounter.innerHTML = "slide".localize() + " n/m";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2288 toolbar.appendChild(slideCounter);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2289 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2290
afa29ac9f050 add presen
aaa
parents:
diff changeset
2291 // ensure that click isn't passed through to the page
afa29ac9f050 add presen
aaa
parents:
diff changeset
2292 toolbar.onclick = stopPropagation;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2293 document.body.appendChild(toolbar);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2294 slideNumElement = slideCounter;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2295 setEosStatus(false);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2296
afa29ac9f050 add presen
aaa
parents:
diff changeset
2297 return toolbar;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2298 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2299
afa29ac9f050 add presen
aaa
parents:
diff changeset
2300 function isShownToc()
afa29ac9f050 add presen
aaa
parents:
diff changeset
2301 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2302 if (toc && toc.style.visible == "visible")
afa29ac9f050 add presen
aaa
parents:
diff changeset
2303 return true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2304
afa29ac9f050 add presen
aaa
parents:
diff changeset
2305 return false;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2306 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2307
afa29ac9f050 add presen
aaa
parents:
diff changeset
2308 function showTableOfContents()
afa29ac9f050 add presen
aaa
parents:
diff changeset
2309 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2310 if (toc)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2311 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2312 if (toc.style.visibility != "visible")
afa29ac9f050 add presen
aaa
parents:
diff changeset
2313 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2314 toc.style.visibility = "visible";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2315 toc.style.display = "block";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2316 toc.focus();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2317
afa29ac9f050 add presen
aaa
parents:
diff changeset
2318 if (ie7 && slidenum == 0)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2319 setTimeout("ieHack()", 100);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2320 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2321 else
afa29ac9f050 add presen
aaa
parents:
diff changeset
2322 hideTableOfContents();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2323 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2324 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2325
afa29ac9f050 add presen
aaa
parents:
diff changeset
2326 function hideTableOfContents()
afa29ac9f050 add presen
aaa
parents:
diff changeset
2327 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2328 if (toc && toc.style.visibility != "hidden")
afa29ac9f050 add presen
aaa
parents:
diff changeset
2329 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2330 toc.style.visibility = "hidden";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2331 toc.style.display = "none";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2332
afa29ac9f050 add presen
aaa
parents:
diff changeset
2333 try
afa29ac9f050 add presen
aaa
parents:
diff changeset
2334 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2335 if (!opera)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2336 helpAnchor.focus();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2337 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2338 catch (e)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2339 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2340 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2341 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2342 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2343
afa29ac9f050 add presen
aaa
parents:
diff changeset
2344 function toggleTableOfContents()
afa29ac9f050 add presen
aaa
parents:
diff changeset
2345 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2346 if (toc)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2347 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2348 if (toc.style.visible != "visible")
afa29ac9f050 add presen
aaa
parents:
diff changeset
2349 showTableOfContents();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2350 else
afa29ac9f050 add presen
aaa
parents:
diff changeset
2351 hideTableOfContents();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2352 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2353 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2354
afa29ac9f050 add presen
aaa
parents:
diff changeset
2355 // called on clicking toc entry
afa29ac9f050 add presen
aaa
parents:
diff changeset
2356 function gotoEntry(e)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2357 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2358 var target;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2359
afa29ac9f050 add presen
aaa
parents:
diff changeset
2360 if (!e)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2361 var e = window.event;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2362
afa29ac9f050 add presen
aaa
parents:
diff changeset
2363 if (e.target)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2364 target = e.target;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2365 else if (e.srcElement)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2366 target = e.srcElement;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2367
afa29ac9f050 add presen
aaa
parents:
diff changeset
2368 // work around Safari bug
afa29ac9f050 add presen
aaa
parents:
diff changeset
2369 if (target.nodeType == 3)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2370 target = target.parentNode;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2371
afa29ac9f050 add presen
aaa
parents:
diff changeset
2372 if (target && target.nodeType == 1)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2373 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2374 var uri = target.getAttribute("href");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2375
afa29ac9f050 add presen
aaa
parents:
diff changeset
2376 if (uri)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2377 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2378 //alert("going to " + uri);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2379 var slide = slides[slidenum];
afa29ac9f050 add presen
aaa
parents:
diff changeset
2380 hideSlide(slide);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2381 slidenum = findSlideNumber(uri);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2382 slide = slides[slidenum];
afa29ac9f050 add presen
aaa
parents:
diff changeset
2383 lastShown = null;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2384 setLocation();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2385 setVisibilityAllIncremental("hidden");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2386 setEosStatus(!nextIncrementalItem(lastShown));
afa29ac9f050 add presen
aaa
parents:
diff changeset
2387 showSlide(slide);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2388 //target.focus();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2389
afa29ac9f050 add presen
aaa
parents:
diff changeset
2390 try
afa29ac9f050 add presen
aaa
parents:
diff changeset
2391 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2392 if (!opera)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2393 helpAnchor.focus();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2394 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2395 catch (e)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2396 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2397 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2398 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2399 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2400
afa29ac9f050 add presen
aaa
parents:
diff changeset
2401 hideTableOfContents(e);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2402 if (ie7) ieHack();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2403 stopPropagation(e);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2404 return cancel(e);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2405 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2406
afa29ac9f050 add presen
aaa
parents:
diff changeset
2407 // called onkeydown for toc entry
afa29ac9f050 add presen
aaa
parents:
diff changeset
2408 function gotoTocEntry(event)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2409 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2410 var key;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2411
afa29ac9f050 add presen
aaa
parents:
diff changeset
2412 if (!event)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2413 var event = window.event;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2414
afa29ac9f050 add presen
aaa
parents:
diff changeset
2415 // kludge around NS/IE differences
afa29ac9f050 add presen
aaa
parents:
diff changeset
2416 if (window.event)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2417 key = window.event.keyCode;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2418 else if (event.which)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2419 key = event.which;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2420 else
afa29ac9f050 add presen
aaa
parents:
diff changeset
2421 return true; // Yikes! unknown browser
afa29ac9f050 add presen
aaa
parents:
diff changeset
2422
afa29ac9f050 add presen
aaa
parents:
diff changeset
2423 // ignore event if key value is zero
afa29ac9f050 add presen
aaa
parents:
diff changeset
2424 // as for alt on Opera and Konqueror
afa29ac9f050 add presen
aaa
parents:
diff changeset
2425 if (!key)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2426 return true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2427
afa29ac9f050 add presen
aaa
parents:
diff changeset
2428 // check for concurrent control/command/alt key
afa29ac9f050 add presen
aaa
parents:
diff changeset
2429 // but are these only present on mouse events?
afa29ac9f050 add presen
aaa
parents:
diff changeset
2430
afa29ac9f050 add presen
aaa
parents:
diff changeset
2431 if (event.ctrlKey || event.altKey)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2432 return true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2433
afa29ac9f050 add presen
aaa
parents:
diff changeset
2434 if (key == 13)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2435 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2436 var uri = this.getAttribute("href");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2437
afa29ac9f050 add presen
aaa
parents:
diff changeset
2438 if (uri)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2439 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2440 //alert("going to " + uri);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2441 var slide = slides[slidenum];
afa29ac9f050 add presen
aaa
parents:
diff changeset
2442 hideSlide(slide);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2443 slidenum = findSlideNumber(uri);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2444 slide = slides[slidenum];
afa29ac9f050 add presen
aaa
parents:
diff changeset
2445 lastShown = null;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2446 setLocation();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2447 setVisibilityAllIncremental("hidden");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2448 setEosStatus(!nextIncrementalItem(lastShown));
afa29ac9f050 add presen
aaa
parents:
diff changeset
2449 showSlide(slide);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2450 //target.focus();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2451
afa29ac9f050 add presen
aaa
parents:
diff changeset
2452 try
afa29ac9f050 add presen
aaa
parents:
diff changeset
2453 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2454 if (!opera)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2455 helpAnchor.focus();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2456 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2457 catch (e)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2458 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2459 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2460 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2461
afa29ac9f050 add presen
aaa
parents:
diff changeset
2462 hideTableOfContents();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2463 if (ie7) ieHack();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2464 return cancel(event);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2465 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2466
afa29ac9f050 add presen
aaa
parents:
diff changeset
2467 if (key == 40 && this.next)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2468 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2469 this.next.focus();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2470 return cancel(event);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2471 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2472
afa29ac9f050 add presen
aaa
parents:
diff changeset
2473 if (key == 38 && this.previous)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2474 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2475 this.previous.focus();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2476 return cancel(event);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2477 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2478
afa29ac9f050 add presen
aaa
parents:
diff changeset
2479 return true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2480 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2481
afa29ac9f050 add presen
aaa
parents:
diff changeset
2482 function isTitleSlide(slide)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2483 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2484 return hasClass(slide, "title");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2485 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2486
afa29ac9f050 add presen
aaa
parents:
diff changeset
2487 // create div element with links to each slide
afa29ac9f050 add presen
aaa
parents:
diff changeset
2488 function tableOfContents()
afa29ac9f050 add presen
aaa
parents:
diff changeset
2489 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2490 var toc = document.createElement("div");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2491 addClass(toc, "toc");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2492 //toc.setAttribute("tabindex", "0");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2493
afa29ac9f050 add presen
aaa
parents:
diff changeset
2494 var heading = document.createElement("div");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2495 addClass(heading, "toc-heading");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2496 heading.innerHTML = "Table of Contents".localize();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2497
afa29ac9f050 add presen
aaa
parents:
diff changeset
2498 heading.style.textAlign = "center";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2499 heading.style.width = "100%";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2500 heading.style.margin = "0";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2501 heading.style.marginBottom = "1em";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2502 heading.style.borderBottomStyle = "solid";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2503 heading.style.borderBottomColor = "rgb(180,180,180)";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2504 heading.style.borderBottomWidth = "1px";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2505
afa29ac9f050 add presen
aaa
parents:
diff changeset
2506 toc.appendChild(heading);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2507 var previous = null;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2508
afa29ac9f050 add presen
aaa
parents:
diff changeset
2509 for (var i = 0; i < slides.length; ++i)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2510 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2511 var title = hasClass(slides[i], "title");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2512 var num = document.createTextNode((i + 1) + ". ");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2513
afa29ac9f050 add presen
aaa
parents:
diff changeset
2514 toc.appendChild(num);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2515
afa29ac9f050 add presen
aaa
parents:
diff changeset
2516 var a = document.createElement("a");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2517 a.setAttribute("href", "#(" + (i+1) + ")");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2518
afa29ac9f050 add presen
aaa
parents:
diff changeset
2519 if (title)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2520 addClass(a, "titleslide");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2521
afa29ac9f050 add presen
aaa
parents:
diff changeset
2522 var name = document.createTextNode(slideName(i));
afa29ac9f050 add presen
aaa
parents:
diff changeset
2523 a.appendChild(name);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2524 a.onclick = gotoEntry;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2525 a.onkeydown = gotoTocEntry;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2526 a.previous = previous;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2527
afa29ac9f050 add presen
aaa
parents:
diff changeset
2528 if (previous)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2529 previous.next = a;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2530
afa29ac9f050 add presen
aaa
parents:
diff changeset
2531 toc.appendChild(a);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2532
afa29ac9f050 add presen
aaa
parents:
diff changeset
2533 if (i == 0)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2534 toc.first = a;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2535
afa29ac9f050 add presen
aaa
parents:
diff changeset
2536 if (i < slides.length - 1)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2537 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2538 var br = document.createElement("br");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2539 toc.appendChild(br);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2540 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2541
afa29ac9f050 add presen
aaa
parents:
diff changeset
2542 previous = a;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2543 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2544
afa29ac9f050 add presen
aaa
parents:
diff changeset
2545 toc.focus = function () {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2546 if (this.first)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2547 this.first.focus();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2548 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2549
afa29ac9f050 add presen
aaa
parents:
diff changeset
2550 toc.onmouseup = mouseButtonUp;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2551
afa29ac9f050 add presen
aaa
parents:
diff changeset
2552 toc.onclick = function (e) {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2553 e||(e=window.event);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2554
afa29ac9f050 add presen
aaa
parents:
diff changeset
2555 if (selectedTextLen <= 0)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2556 hideTableOfContents();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2557
afa29ac9f050 add presen
aaa
parents:
diff changeset
2558 stopPropagation(e);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2559
afa29ac9f050 add presen
aaa
parents:
diff changeset
2560 if (e.cancel != undefined)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2561 e.cancel = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2562
afa29ac9f050 add presen
aaa
parents:
diff changeset
2563 if (e.returnValue != undefined)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2564 e.returnValue = false;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2565
afa29ac9f050 add presen
aaa
parents:
diff changeset
2566 return false;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2567 };
afa29ac9f050 add presen
aaa
parents:
diff changeset
2568
afa29ac9f050 add presen
aaa
parents:
diff changeset
2569 toc.style.position = "absolute";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2570 toc.style.zIndex = "300";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2571 toc.style.width = "60%";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2572 toc.style.maxWidth = "30em";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2573 toc.style.height = "30em";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2574 toc.style.overflow = "auto";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2575 toc.style.top = "auto";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2576 toc.style.right = "auto";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2577 toc.style.left = "4em";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2578 toc.style.bottom = "4em";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2579 toc.style.padding = "1em";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2580 toc.style.background = "rgb(240,240,240)";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2581 toc.style.borderStyle = "solid";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2582 toc.style.borderWidth = "2px";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2583 toc.style.fontSize = "60%";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2584
afa29ac9f050 add presen
aaa
parents:
diff changeset
2585 document.body.insertBefore(toc, document.body.firstChild);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2586 return toc;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2587 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2588
afa29ac9f050 add presen
aaa
parents:
diff changeset
2589 function replaceByNonBreakingSpace(str)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2590 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2591 for (var i = 0; i < str.length; ++i)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2592 str[i] = 160;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2593 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2594
afa29ac9f050 add presen
aaa
parents:
diff changeset
2595
afa29ac9f050 add presen
aaa
parents:
diff changeset
2596 function initOutliner()
afa29ac9f050 add presen
aaa
parents:
diff changeset
2597 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2598 var items = document.getElementsByTagName("LI");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2599
afa29ac9f050 add presen
aaa
parents:
diff changeset
2600 for (var i = 0; i < items.length; ++i)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2601 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2602 var target = items[i];
afa29ac9f050 add presen
aaa
parents:
diff changeset
2603
afa29ac9f050 add presen
aaa
parents:
diff changeset
2604 if (!hasClass(target.parentNode, "outline"))
afa29ac9f050 add presen
aaa
parents:
diff changeset
2605 continue;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2606
afa29ac9f050 add presen
aaa
parents:
diff changeset
2607 target.onclick = outlineClick;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2608
afa29ac9f050 add presen
aaa
parents:
diff changeset
2609 if (!ns_pos)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2610 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2611 target.onmouseover = hoverOutline;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2612 target.onmouseout = unhoverOutline;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2613 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2614
afa29ac9f050 add presen
aaa
parents:
diff changeset
2615 if (foldable(target))
afa29ac9f050 add presen
aaa
parents:
diff changeset
2616 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2617 target.foldable = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2618 target.onfocus = function () {outline = this;};
afa29ac9f050 add presen
aaa
parents:
diff changeset
2619 target.onblur = function () {outline = null;};
afa29ac9f050 add presen
aaa
parents:
diff changeset
2620
afa29ac9f050 add presen
aaa
parents:
diff changeset
2621 if (!target.getAttribute("tabindex"))
afa29ac9f050 add presen
aaa
parents:
diff changeset
2622 target.setAttribute("tabindex", "0");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2623
afa29ac9f050 add presen
aaa
parents:
diff changeset
2624 if (hasClass(target, "expand"))
afa29ac9f050 add presen
aaa
parents:
diff changeset
2625 unfold(target);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2626 else
afa29ac9f050 add presen
aaa
parents:
diff changeset
2627 fold(target);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2628 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2629 else
afa29ac9f050 add presen
aaa
parents:
diff changeset
2630 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2631 addClass(target, "nofold");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2632 target.visible = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2633 target.foldable = false;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2634 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2635 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2636 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2637
afa29ac9f050 add presen
aaa
parents:
diff changeset
2638 function foldable(item)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2639 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2640 if (!item || item.nodeType != 1)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2641 return false;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2642
afa29ac9f050 add presen
aaa
parents:
diff changeset
2643 var node = item.firstChild;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2644
afa29ac9f050 add presen
aaa
parents:
diff changeset
2645 while (node)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2646 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2647 if (node.nodeType == 1 && isBlock(node))
afa29ac9f050 add presen
aaa
parents:
diff changeset
2648 return true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2649
afa29ac9f050 add presen
aaa
parents:
diff changeset
2650 node = node.nextSibling;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2651 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2652
afa29ac9f050 add presen
aaa
parents:
diff changeset
2653 return false;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2654 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2655
afa29ac9f050 add presen
aaa
parents:
diff changeset
2656 function fold(item)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2657 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2658 if (item)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2659 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2660 removeClass(item, "unfolded");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2661 addClass(item, "folded");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2662 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2663
afa29ac9f050 add presen
aaa
parents:
diff changeset
2664 var node = item ? item.firstChild : null;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2665
afa29ac9f050 add presen
aaa
parents:
diff changeset
2666 while (node)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2667 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2668 if (node.nodeType == 1 && isBlock(node)) // element
afa29ac9f050 add presen
aaa
parents:
diff changeset
2669 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2670 // note that getElementStyle won't work for Safari 1.3
afa29ac9f050 add presen
aaa
parents:
diff changeset
2671 node.display = getElementStyle(node, "display", "display");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2672 node.style.display = "none";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2673 node.style.visibility = "hidden";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2674 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2675
afa29ac9f050 add presen
aaa
parents:
diff changeset
2676 node = node.nextSibling;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2677 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2678
afa29ac9f050 add presen
aaa
parents:
diff changeset
2679 item.visible = false;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2680 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2681
afa29ac9f050 add presen
aaa
parents:
diff changeset
2682 function unfold(item)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2683 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2684 if (item)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2685 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2686 addClass(item, "unfolded");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2687 removeClass(item, "folded");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2688 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2689
afa29ac9f050 add presen
aaa
parents:
diff changeset
2690 var node = item ? item.firstChild : null;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2691
afa29ac9f050 add presen
aaa
parents:
diff changeset
2692 while (node)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2693 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2694 if (node.nodeType == 1 && isBlock(node)) // element
afa29ac9f050 add presen
aaa
parents:
diff changeset
2695 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2696 // with fallback for Safari, see above
afa29ac9f050 add presen
aaa
parents:
diff changeset
2697 node.style.display = (node.display ? node.display : "block");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2698 node.style.visibility = "visible";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2699 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2700
afa29ac9f050 add presen
aaa
parents:
diff changeset
2701 node = node.nextSibling;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2702 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2703
afa29ac9f050 add presen
aaa
parents:
diff changeset
2704 item.visible = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2705 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2706
afa29ac9f050 add presen
aaa
parents:
diff changeset
2707 function outlineClick(e)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2708 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2709 var rightclick = false;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2710 var target;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2711
afa29ac9f050 add presen
aaa
parents:
diff changeset
2712 if (!e)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2713 var e = window.event;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2714
afa29ac9f050 add presen
aaa
parents:
diff changeset
2715 if (e.target)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2716 target = e.target;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2717 else if (e.srcElement)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2718 target = e.srcElement;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2719
afa29ac9f050 add presen
aaa
parents:
diff changeset
2720 // work around Safari bug
afa29ac9f050 add presen
aaa
parents:
diff changeset
2721 if (target.nodeType == 3)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2722 target = target.parentNode;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2723
afa29ac9f050 add presen
aaa
parents:
diff changeset
2724 while (target && target.visible == undefined)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2725 target = target.parentNode;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2726
afa29ac9f050 add presen
aaa
parents:
diff changeset
2727 if (!target)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2728 return true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2729
afa29ac9f050 add presen
aaa
parents:
diff changeset
2730 if (e.which)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2731 rightclick = (e.which == 3);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2732 else if (e.button)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2733 rightclick = (e.button == 2);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2734
afa29ac9f050 add presen
aaa
parents:
diff changeset
2735 if (!rightclick && target.visible != undefined)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2736 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2737 if (target.foldable)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2738 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2739 if (target.visible)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2740 fold(target);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2741 else
afa29ac9f050 add presen
aaa
parents:
diff changeset
2742 unfold(target);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2743 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2744
afa29ac9f050 add presen
aaa
parents:
diff changeset
2745 stopPropagation(e);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2746 e.cancel = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2747 e.returnValue = false;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2748 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2749
afa29ac9f050 add presen
aaa
parents:
diff changeset
2750 return false;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2751 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2752
afa29ac9f050 add presen
aaa
parents:
diff changeset
2753 function hoverOutline(e)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2754 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2755 var target;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2756
afa29ac9f050 add presen
aaa
parents:
diff changeset
2757 if (!e)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2758 var e = window.event;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2759
afa29ac9f050 add presen
aaa
parents:
diff changeset
2760 if (e.target)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2761 target = e.target;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2762 else if (e.srcElement)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2763 target = e.srcElement;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2764
afa29ac9f050 add presen
aaa
parents:
diff changeset
2765 // work around Safari bug
afa29ac9f050 add presen
aaa
parents:
diff changeset
2766 if (target.nodeType == 3)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2767 target = target.parentNode;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2768
afa29ac9f050 add presen
aaa
parents:
diff changeset
2769 while (target && target.visible == undefined)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2770 target = target.parentNode;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2771
afa29ac9f050 add presen
aaa
parents:
diff changeset
2772 if (target && target.foldable)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2773 target.style.cursor = "pointer";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2774
afa29ac9f050 add presen
aaa
parents:
diff changeset
2775 return true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2776 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2777
afa29ac9f050 add presen
aaa
parents:
diff changeset
2778 function unhoverOutline(e)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2779 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2780 var target;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2781
afa29ac9f050 add presen
aaa
parents:
diff changeset
2782 if (!e)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2783 var e = window.event;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2784
afa29ac9f050 add presen
aaa
parents:
diff changeset
2785 if (e.target)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2786 target = e.target;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2787 else if (e.srcElement)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2788 target = e.srcElement;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2789
afa29ac9f050 add presen
aaa
parents:
diff changeset
2790 // work around Safari bug
afa29ac9f050 add presen
aaa
parents:
diff changeset
2791 if (target.nodeType == 3)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2792 target = target.parentNode;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2793
afa29ac9f050 add presen
aaa
parents:
diff changeset
2794 while (target && target.visible == undefined)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2795 target = target.parentNode;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2796
afa29ac9f050 add presen
aaa
parents:
diff changeset
2797 if (target)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2798 target.style.cursor = "default";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2799
afa29ac9f050 add presen
aaa
parents:
diff changeset
2800 return true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2801 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2802
afa29ac9f050 add presen
aaa
parents:
diff changeset
2803
afa29ac9f050 add presen
aaa
parents:
diff changeset
2804 function stopPropagation(e)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2805 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2806 if (window.event)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2807 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2808 window.event.cancelBubble = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2809 //window.event.returnValue = false;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2810 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2811 else if (e)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2812 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2813 e.cancelBubble = true;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2814 e.stopPropagation();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2815 //e.preventDefault();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2816 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2817 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2818
afa29ac9f050 add presen
aaa
parents:
diff changeset
2819 /* can't rely on display since we set that to none to hide things */
afa29ac9f050 add presen
aaa
parents:
diff changeset
2820 function isBlock(elem)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2821 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2822 var tag = elem.nodeName;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2823
afa29ac9f050 add presen
aaa
parents:
diff changeset
2824 return tag == "OL" || tag == "UL" || tag == "P" ||
afa29ac9f050 add presen
aaa
parents:
diff changeset
2825 tag == "LI" || tag == "TABLE" || tag == "PRE" ||
afa29ac9f050 add presen
aaa
parents:
diff changeset
2826 tag == "H1" || tag == "H2" || tag == "H3" ||
afa29ac9f050 add presen
aaa
parents:
diff changeset
2827 tag == "H4" || tag == "H5" || tag == "H6" ||
afa29ac9f050 add presen
aaa
parents:
diff changeset
2828 tag == "BLOCKQUOTE" || tag == "ADDRESS";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2829 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2830
afa29ac9f050 add presen
aaa
parents:
diff changeset
2831 function getElementStyle(elem, IEStyleProp, CSSStyleProp)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2832 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2833 if (elem.currentStyle)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2834 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2835 return elem.currentStyle[IEStyleProp];
afa29ac9f050 add presen
aaa
parents:
diff changeset
2836 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2837 else if (window.getComputedStyle)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2838 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2839 var compStyle = window.getComputedStyle(elem, "");
afa29ac9f050 add presen
aaa
parents:
diff changeset
2840 return compStyle.getPropertyValue(CSSStyleProp);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2841 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2842 return "";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2843 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2844
afa29ac9f050 add presen
aaa
parents:
diff changeset
2845 // works with text/html and text/xhtml+xml with thanks to Simon Willison
afa29ac9f050 add presen
aaa
parents:
diff changeset
2846 function createElement(element)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2847 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2848 if (typeof document.createElementNS != 'undefined')
afa29ac9f050 add presen
aaa
parents:
diff changeset
2849 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2850 return document.createElementNS('http://www.w3.org/1999/xhtml', element);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2851 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2852
afa29ac9f050 add presen
aaa
parents:
diff changeset
2853 if (typeof document.createElement != 'undefined')
afa29ac9f050 add presen
aaa
parents:
diff changeset
2854 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2855 return document.createElement(element);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2856 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2857
afa29ac9f050 add presen
aaa
parents:
diff changeset
2858 return false;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2859 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2860
afa29ac9f050 add presen
aaa
parents:
diff changeset
2861 // designed to work with both text/html and text/xhtml+xml
afa29ac9f050 add presen
aaa
parents:
diff changeset
2862 function getElementsByTagName(name)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2863 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2864 if (typeof document.getElementsByTagNameNS != 'undefined')
afa29ac9f050 add presen
aaa
parents:
diff changeset
2865 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2866 return document.getElementsByTagNameNS('http://www.w3.org/1999/xhtml', name);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2867 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2868
afa29ac9f050 add presen
aaa
parents:
diff changeset
2869 if (typeof document.getElementsByTagName != 'undefined')
afa29ac9f050 add presen
aaa
parents:
diff changeset
2870 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2871 return document.getElementsByTagName(name);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2872 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2873
afa29ac9f050 add presen
aaa
parents:
diff changeset
2874 return null;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2875 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2876
afa29ac9f050 add presen
aaa
parents:
diff changeset
2877 /*
afa29ac9f050 add presen
aaa
parents:
diff changeset
2878 // clean alternative to innerHTML method, but on IE6
afa29ac9f050 add presen
aaa
parents:
diff changeset
2879 // it doesn't work with named entities like &nbsp;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2880 // which need to be replaced by numeric entities
afa29ac9f050 add presen
aaa
parents:
diff changeset
2881 function insertText(element, text)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2882 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2883 try
afa29ac9f050 add presen
aaa
parents:
diff changeset
2884 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2885 element.textContent = text; // DOM3 only
afa29ac9f050 add presen
aaa
parents:
diff changeset
2886 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2887 catch (e)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2888 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2889 if (element.firstChild)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2890 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2891 // remove current children
afa29ac9f050 add presen
aaa
parents:
diff changeset
2892 while (element.firstChild)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2893 element.removeChild(element.firstChild);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2894 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2895
afa29ac9f050 add presen
aaa
parents:
diff changeset
2896 element.appendChild(document.createTextNode(text));
afa29ac9f050 add presen
aaa
parents:
diff changeset
2897 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2898 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2899
afa29ac9f050 add presen
aaa
parents:
diff changeset
2900 // as above, but as method of all element nodes
afa29ac9f050 add presen
aaa
parents:
diff changeset
2901 // doesn't work in IE6 which doesn't allow you to
afa29ac9f050 add presen
aaa
parents:
diff changeset
2902 // add methods to the HTMLElement prototype
afa29ac9f050 add presen
aaa
parents:
diff changeset
2903 if (HTMLElement != undefined)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2904 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2905 HTMLElement.prototype.insertText = function(text) {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2906 var element = this;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2907
afa29ac9f050 add presen
aaa
parents:
diff changeset
2908 try
afa29ac9f050 add presen
aaa
parents:
diff changeset
2909 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2910 element.textContent = text; // DOM3 only
afa29ac9f050 add presen
aaa
parents:
diff changeset
2911 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2912 catch (e)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2913 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2914 if (element.firstChild)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2915 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2916 // remove current children
afa29ac9f050 add presen
aaa
parents:
diff changeset
2917 while (element.firstChild)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2918 element.removeChild(element.firstChild);
afa29ac9f050 add presen
aaa
parents:
diff changeset
2919 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2920
afa29ac9f050 add presen
aaa
parents:
diff changeset
2921 element.appendChild(document.createTextNode(text));
afa29ac9f050 add presen
aaa
parents:
diff changeset
2922 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2923 };
afa29ac9f050 add presen
aaa
parents:
diff changeset
2924 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2925 */
afa29ac9f050 add presen
aaa
parents:
diff changeset
2926
afa29ac9f050 add presen
aaa
parents:
diff changeset
2927 function getSelectedText()
afa29ac9f050 add presen
aaa
parents:
diff changeset
2928 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2929 try
afa29ac9f050 add presen
aaa
parents:
diff changeset
2930 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2931 if (window.getSelection)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2932 return window.getSelection().toString();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2933
afa29ac9f050 add presen
aaa
parents:
diff changeset
2934 if (document.getSelection)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2935 return document.getSelection().toString();
afa29ac9f050 add presen
aaa
parents:
diff changeset
2936
afa29ac9f050 add presen
aaa
parents:
diff changeset
2937 if (document.selection)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2938 return document.selection.createRange().text;
afa29ac9f050 add presen
aaa
parents:
diff changeset
2939 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2940 catch (e)
afa29ac9f050 add presen
aaa
parents:
diff changeset
2941 {
afa29ac9f050 add presen
aaa
parents:
diff changeset
2942 return "";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2943 }
afa29ac9f050 add presen
aaa
parents:
diff changeset
2944 return "";
afa29ac9f050 add presen
aaa
parents:
diff changeset
2945 }