1 |
|
---|
2 | function MusicStand(httpdoc,cgiargc,docoid,thisOID,cgiNumPages,cgiGotoPage,
|
---|
3 | cgiPageWidth,cgiPageHeight,cgiScaleFactor)
|
---|
4 | {
|
---|
5 |
|
---|
6 | var httpdocument = httpdoc;
|
---|
7 | var collect = cgiargc;
|
---|
8 | var site = gs.xsltParams.site_name;
|
---|
9 |
|
---|
10 | var docid = docoid;
|
---|
11 | var _cutpos = docid.indexOf(".");
|
---|
12 | var docRoot = (_cutpos>0) ? docid.substr(0,_cutpos) : docid;
|
---|
13 |
|
---|
14 | var assocDir = thisOID;
|
---|
15 |
|
---|
16 | var totalPageCount = cgiNumPages;
|
---|
17 | var speedBreak = 500;
|
---|
18 | var pageXDim = cgiPageWidth;
|
---|
19 | var pageYDim = cgiPageHeight;
|
---|
20 | var scaleFactor = cgiScaleFactor;
|
---|
21 |
|
---|
22 | var topVal = 0;
|
---|
23 | var rightVal = pageXDim;
|
---|
24 | var bottomVal = 0;
|
---|
25 | var leftVal = 0;
|
---|
26 |
|
---|
27 | var pageNum = cgiGotoPage;
|
---|
28 |
|
---|
29 | var pageAnimTimer;
|
---|
30 |
|
---|
31 | var cgiPrefix;
|
---|
32 | var cgiSuffix;
|
---|
33 |
|
---|
34 | var postitBgCol = "rgba(255,200,200,0.7)";
|
---|
35 | var postitSelCol = "rgba(128,0,0,0.7)";
|
---|
36 |
|
---|
37 | var username = null;
|
---|
38 |
|
---|
39 | imageserverURL = function()
|
---|
40 | {
|
---|
41 | //return gsapi.apiURL("image-server.pl");
|
---|
42 | return "cgi-bin/image-server.pl";
|
---|
43 | }
|
---|
44 |
|
---|
45 | this.setStyleColors = function(bg,sel)
|
---|
46 | {
|
---|
47 | postitBgCol = bg;
|
---|
48 | postitSelCol = sel;
|
---|
49 | }
|
---|
50 |
|
---|
51 |
|
---|
52 | this.setUsername = function(cgiUsername)
|
---|
53 | {
|
---|
54 | username = cgiUsername;
|
---|
55 | }
|
---|
56 |
|
---|
57 | this.getUsername = function()
|
---|
58 | {
|
---|
59 | return username;
|
---|
60 | }
|
---|
61 |
|
---|
62 | this.getScaleFactor = function()
|
---|
63 | {
|
---|
64 | return scaleFactor;
|
---|
65 | }
|
---|
66 |
|
---|
67 | this.getPageNum = function()
|
---|
68 | {
|
---|
69 | return pageNum;
|
---|
70 | }
|
---|
71 |
|
---|
72 | this.getDocRoot = function()
|
---|
73 | {
|
---|
74 | return docRoot;
|
---|
75 | }
|
---|
76 |
|
---|
77 | this.getDocOID = function()
|
---|
78 | {
|
---|
79 | return docid;
|
---|
80 | }
|
---|
81 |
|
---|
82 | this.getSpeedBreak = function()
|
---|
83 | {
|
---|
84 | return speedBreak;
|
---|
85 | }
|
---|
86 |
|
---|
87 | this.setSpeedBreak = function(newSpeedBreak)
|
---|
88 | {
|
---|
89 | speedBreak = newSpeedBreak;
|
---|
90 | }
|
---|
91 |
|
---|
92 |
|
---|
93 | this.setPagePrefix = function(p)
|
---|
94 | {
|
---|
95 | cgiPrefix = p;
|
---|
96 | }
|
---|
97 |
|
---|
98 | this.setPageSuffix = function(s)
|
---|
99 | {
|
---|
100 | cgiSuffix = s;
|
---|
101 | }
|
---|
102 |
|
---|
103 |
|
---|
104 | this.docwritePrevPageNum = function()
|
---|
105 | {
|
---|
106 | document.write(pageNum-1);
|
---|
107 | }
|
---|
108 |
|
---|
109 | this.activatePrevPageNum = function()
|
---|
110 | {
|
---|
111 | if (pageNum>1) {
|
---|
112 | displayInline('prevpagespan');
|
---|
113 | }
|
---|
114 | else {
|
---|
115 | displayNone('prevpagespan');
|
---|
116 | }
|
---|
117 | }
|
---|
118 |
|
---|
119 |
|
---|
120 | this.docwriteOptOfPages = function()
|
---|
121 | {
|
---|
122 | if (totalPageCount>1) {
|
---|
123 | document.write(' of ' + totalPageCount + ' pages');
|
---|
124 | }
|
---|
125 | }
|
---|
126 |
|
---|
127 | this.docwriteNextPageNum = function()
|
---|
128 | {
|
---|
129 | document.write(pageNum+1);
|
---|
130 | }
|
---|
131 |
|
---|
132 | this.activateNextPageNum = function()
|
---|
133 | {
|
---|
134 | if (pageNum < totalPageCount) {
|
---|
135 | displayInline('nextpagespan');
|
---|
136 | }
|
---|
137 | else {
|
---|
138 | displayNone('nextpagespan');
|
---|
139 | }
|
---|
140 | }
|
---|
141 |
|
---|
142 | delayedShowStatus = function(mess)
|
---|
143 | {
|
---|
144 | window.status = mess;
|
---|
145 | }
|
---|
146 |
|
---|
147 | this.showStatus = function(mess)
|
---|
148 | {
|
---|
149 | window.status = mess;
|
---|
150 |
|
---|
151 | // NS6 series of browsers set URL after doing event
|
---|
152 | // => have a delayed version that sets the status bar
|
---|
153 | setTimeout("delayedShowStatus('"+mess+"')",10);
|
---|
154 |
|
---|
155 | return true;
|
---|
156 | }
|
---|
157 |
|
---|
158 |
|
---|
159 | pageAnimPrivate = function(direction,pagePrefix,pageSuffix)
|
---|
160 | {
|
---|
161 | var imagediv = (direction>0) ? 'nextpagediv' : 'prevpagediv';
|
---|
162 | var imagelayer = document.getElementById(imagediv)
|
---|
163 | var bleedlayer = document.getElementById('animedgebleed')
|
---|
164 |
|
---|
165 | var deltaY;
|
---|
166 | var deltaTime;
|
---|
167 |
|
---|
168 | if (bottomVal<speedBreak) {
|
---|
169 | deltaY = 2;
|
---|
170 | deltaTime = 10;
|
---|
171 | }
|
---|
172 | else {
|
---|
173 | deltaY = 1;
|
---|
174 | deltaTime = 30;
|
---|
175 | }
|
---|
176 |
|
---|
177 | if(bottomVal < pageYDim) {
|
---|
178 | bottomVal += deltaY;
|
---|
179 | imagelayer.style.clip="rect("+topVal+"px "+rightVal+"px "+bottomVal+"px "+leftVal+"px)"
|
---|
180 | bleedlayer.style.clip="rect("+topVal+"px "+rightVal+"px "+(bottomVal+2)+"px "+leftVal+"px)"
|
---|
181 | var callPageAnim = "pageAnimPrivate("+direction+",'"+pagePrefix+"','"+pageSuffix+"')";
|
---|
182 | pageAnimTimer = setTimeout(callPageAnim,deltaTime)
|
---|
183 | }
|
---|
184 | else {
|
---|
185 |
|
---|
186 | // finished => update the image that is the current page
|
---|
187 | var thisimg = document.getElementById('thispageimg')
|
---|
188 | var nextimg = document.getElementById('nextpageimg')
|
---|
189 | var previmg = document.getElementById('prevpageimg')
|
---|
190 |
|
---|
191 | if (direction>0) {
|
---|
192 | if (pageNum<totalPageCount) {
|
---|
193 | pageNum++;
|
---|
194 | previmg.src = thisimg.src;
|
---|
195 | thisimg.src = nextimg.src;
|
---|
196 |
|
---|
197 | resetValues(); // reset clip rectangles
|
---|
198 |
|
---|
199 | var nextSrc = httpnextanimPrivate(pagePrefix,pageSuffix,pageNum+1);
|
---|
200 | nextimg.src = nextSrc;
|
---|
201 |
|
---|
202 | var nextspan = document.getElementById('nextpagespan');
|
---|
203 |
|
---|
204 | // update page numbers displayed for next and prev
|
---|
205 | var nextval = document.getElementById('nextpageval');
|
---|
206 | if (pageNum<totalPageCount) {
|
---|
207 | nextval.innerHTML = (pageNum+1);
|
---|
208 | displayInline('nextpagespan');
|
---|
209 | }
|
---|
210 | else {
|
---|
211 | nextval.innerHTML = "";
|
---|
212 | displayNone('nextpagespan');
|
---|
213 | }
|
---|
214 |
|
---|
215 | var prevval = document.getElementById('prevpageval');
|
---|
216 | prevval.innerHTML = (pageNum-1);
|
---|
217 |
|
---|
218 | displayInline('prevpagespan');
|
---|
219 | }
|
---|
220 | }
|
---|
221 | else {
|
---|
222 | // previous page
|
---|
223 | if (pageNum>0) {
|
---|
224 | pageNum--;
|
---|
225 | nextimg.src = thisimg.src;
|
---|
226 | thisimg.src = previmg.src;
|
---|
227 |
|
---|
228 | resetValues(); // reset clip rectangles
|
---|
229 |
|
---|
230 | var prevSrc = httpnextanimPrivate(pagePrefix,pageSuffix,pageNum-1);
|
---|
231 | previmg.src = prevSrc;
|
---|
232 |
|
---|
233 | // update page numbers displayed for next and prev
|
---|
234 | var nextval = document.getElementById('nextpageval');
|
---|
235 | nextval.innerHTML = (pageNum+1);
|
---|
236 |
|
---|
237 | displayInline('nextpagespan');
|
---|
238 | //var nextspan = document.getElementById('nextpagespan');
|
---|
239 | //nextspan.style.display = "block";
|
---|
240 |
|
---|
241 | var prevspan = document.getElementById('prevpagespan');
|
---|
242 |
|
---|
243 | var prevval = document.getElementById('prevpageval');
|
---|
244 | if (pageNum>1) {
|
---|
245 | prevval.innerHTML = (pageNum-1);
|
---|
246 | displayInline('prevpagespan');
|
---|
247 | }
|
---|
248 | else {
|
---|
249 | prevval.innerHTML = "";
|
---|
250 | displayNone('prevpagespan');
|
---|
251 | }
|
---|
252 | }
|
---|
253 | }
|
---|
254 |
|
---|
255 | // update docid member variable (pageNum reflect new page value)
|
---|
256 | docid = docRoot + "." + pageNum;
|
---|
257 |
|
---|
258 | /*
|
---|
259 | // remove any existing annotations
|
---|
260 | annotate.clearAnnotations();
|
---|
261 |
|
---|
262 | //var annotateCanvasElem = document.getElementById("annotateCanvas");
|
---|
263 | //annotateCanvasElem.style.display = "none";
|
---|
264 |
|
---|
265 | // load in new ones for this page
|
---|
266 | annotate.loadAnnotations(docid);
|
---|
267 |
|
---|
268 | //annotateCanvasElem.style.display = "block";
|
---|
269 | */
|
---|
270 |
|
---|
271 | // update slide position (pageNum already changed)
|
---|
272 |
|
---|
273 |
|
---|
274 | var username = musicStand.getUsername();
|
---|
275 | var metaval;
|
---|
276 |
|
---|
277 | if (username != null) {
|
---|
278 | // try of user specific one, if it exists
|
---|
279 | var metaname = username + "-sliderposTop";
|
---|
280 | metaval = gsapi.getLiveMetadata(docid,metaname);
|
---|
281 | if (metaval == "") {
|
---|
282 | // fallback to looking up non-user specific one
|
---|
283 | metaval = gsapi.getLiveMetadata(docid,"sliderposTop");
|
---|
284 | }
|
---|
285 | }
|
---|
286 | else {
|
---|
287 | //metaval = gsapi.getLiveMetadata(docid,"sliderposTop");
|
---|
288 | metaval = 700; // ******** hack
|
---|
289 | }
|
---|
290 | var sliderposTop = parseInt(metaval);
|
---|
291 |
|
---|
292 | updateSlider(sliderposTop);
|
---|
293 |
|
---|
294 | }
|
---|
295 | }
|
---|
296 |
|
---|
297 | cancelPageAnimPrivate = function() {
|
---|
298 | clearTimeout(pageAnimTimer);
|
---|
299 | resetValues();
|
---|
300 | }
|
---|
301 |
|
---|
302 | this.cancelPageAnim = function() {
|
---|
303 | cancelPageAnimPrivate();
|
---|
304 | }
|
---|
305 |
|
---|
306 | this.pageAnim = function(direction,pagePrefix,pageSuffix)
|
---|
307 | {
|
---|
308 | pageAnimPrivate(direction,pagePrefix,pageSuffix);
|
---|
309 | }
|
---|
310 |
|
---|
311 | httpnextanimPrivate = function(pagePrefix,pageSuffix,nextPageNum)
|
---|
312 | {
|
---|
313 | var imgserver = imageserverURL();
|
---|
314 |
|
---|
315 | var screenWidth = screen.width;
|
---|
316 | var screenHeight = screen.height;
|
---|
317 |
|
---|
318 | nextPageNum--; // filenames use values one less that pageNum
|
---|
319 |
|
---|
320 | var url = imgserver + "?a=fit-screen"
|
---|
321 | url += "&c="+collect;
|
---|
322 | url += "&site="+site;
|
---|
323 | url += "&pageWidth="+pageXDim;
|
---|
324 | url += "&pageHeight="+pageYDim;
|
---|
325 | url += "&assocDir=" + assocDir;
|
---|
326 | url += "&assocFile=" + pagePrefix;
|
---|
327 |
|
---|
328 |
|
---|
329 | if (totalPageCount>1) {
|
---|
330 | url += "-" + nextPageNum;
|
---|
331 | }
|
---|
332 | url += pageSuffix;
|
---|
333 |
|
---|
334 | if (orientation == "landscape") {
|
---|
335 | url += "&orientation=landscape";
|
---|
336 | }
|
---|
337 |
|
---|
338 | return url;
|
---|
339 | }
|
---|
340 |
|
---|
341 | this.httpnextanim = function(pagePrefix,pageSuffix,nextPageNum)
|
---|
342 | {
|
---|
343 | return httpnextanimPrivate(pagePrefix,pageSuffix,nextPageNum);
|
---|
344 | }
|
---|
345 |
|
---|
346 | nextPageAnimPrivate = function(pagePrefix,pageSuffix)
|
---|
347 | {
|
---|
348 | // set up next page
|
---|
349 |
|
---|
350 | if (pageNum<totalPageCount) {
|
---|
351 | //saveAnnotations();
|
---|
352 | pageAnimPrivate(1,pagePrefix,pageSuffix);
|
---|
353 | }
|
---|
354 | }
|
---|
355 |
|
---|
356 | this.nextPageAnim = function(pagePrefix,pageSuffix)
|
---|
357 | {
|
---|
358 | nextPageAnimPrivate(pagePrefix,pageSuffix);
|
---|
359 | }
|
---|
360 |
|
---|
361 | prevPageAnimPrivate = function(pagePrefix,pageSuffix)
|
---|
362 | {
|
---|
363 | // set up next page
|
---|
364 |
|
---|
365 | if (pageNum>1) {
|
---|
366 | //saveAnnotations();
|
---|
367 | pageAnimPrivate(-1,pagePrefix,pageSuffix);
|
---|
368 | }
|
---|
369 | }
|
---|
370 |
|
---|
371 | this.prevPageAnim = function(pagePrefix,pageSuffix)
|
---|
372 | {
|
---|
373 | prevPageAnimPrivate(pagePrefix,pageSuffix);
|
---|
374 | }
|
---|
375 |
|
---|
376 | this.nextOrPrevPageEventLRMouse = function(evt,pagePrefix,pageSuffix)
|
---|
377 | {
|
---|
378 | if (!evt) var evt = window.event;
|
---|
379 |
|
---|
380 | var rightclick = false;
|
---|
381 | if (evt.which) rightclick = (evt.which == 3);
|
---|
382 | else if (evt.button) rightclick = (evt.button == 2);
|
---|
383 |
|
---|
384 | var leftclick = false;
|
---|
385 | if (evt.which) leftclick = (evt.which == 1);
|
---|
386 | else if (evt.button) leftclick = (evt.button == 1);
|
---|
387 |
|
---|
388 | if (rightclick) {
|
---|
389 | this.nextPageAnim(pagePrefix,pageSuffix);
|
---|
390 | }
|
---|
391 | else if (leftclick) {
|
---|
392 | this.prevPageAnim(pagePrefix,pageSuffix);
|
---|
393 | }
|
---|
394 |
|
---|
395 |
|
---|
396 | return false;
|
---|
397 | }
|
---|
398 |
|
---|
399 |
|
---|
400 | var numClicks = 0;
|
---|
401 | var clicksTimer = null;
|
---|
402 |
|
---|
403 | this.nextOrPrevPageEvent = function(evt,pagePrefix,pageSuffix)
|
---|
404 | //this.pageMenu = function(e)
|
---|
405 | {
|
---|
406 | //var pagePrefix = cgiPrefix;
|
---|
407 | //var pageSuffix = cgiSuffix;
|
---|
408 |
|
---|
409 | if (clicksTimer!=null) {
|
---|
410 | clearTimeout(clicksTimer);
|
---|
411 | }
|
---|
412 |
|
---|
413 | var callPageAction = 'pageAction("'+pagePrefix+'","'+pageSuffix+'")';
|
---|
414 | clicksTimer = setTimeout(callPageAction,1000);
|
---|
415 |
|
---|
416 | numClicks = (numClicks % 3) + 1;
|
---|
417 |
|
---|
418 | var menu = document.getElementById("pagemenu");
|
---|
419 | menu.style.visibility = "visible";
|
---|
420 |
|
---|
421 | for (var i=1; i<=3; i++) {
|
---|
422 | var menuItem = document.getElementById("pagemenu"+i);
|
---|
423 | if (i==numClicks) {
|
---|
424 | menuItem.style.backgroundColor = postitSelCol;
|
---|
425 | }
|
---|
426 | else {
|
---|
427 | menuItem.style.backgroundColor = postitBgCol;
|
---|
428 | }
|
---|
429 | }
|
---|
430 |
|
---|
431 | return false;
|
---|
432 | }
|
---|
433 |
|
---|
434 | pageAction = function(pagePrefix,pageSuffix)
|
---|
435 | {
|
---|
436 | var menu = document.getElementById("pagemenu");
|
---|
437 | menu.style.visibility = "hidden";
|
---|
438 |
|
---|
439 | var keepState = numClicks;
|
---|
440 |
|
---|
441 | clicksTimer = null;
|
---|
442 | numClicks = 0;
|
---|
443 |
|
---|
444 | if (keepState==1) {
|
---|
445 | cancelPageAnimPrivate();
|
---|
446 | }
|
---|
447 | else if (keepState==2) {
|
---|
448 | nextPageAnimPrivate(pagePrefix,pageSuffix);
|
---|
449 | }
|
---|
450 | else if (keepState==3) {
|
---|
451 | prevPageAnimPrivate(pagePrefix,pageSuffix);
|
---|
452 | }
|
---|
453 |
|
---|
454 | }
|
---|
455 |
|
---|
456 | this.hidePageMenu = function(elem,event)
|
---|
457 | {
|
---|
458 | elem.style.visibility="hidden";
|
---|
459 | //de.cursor.setCursorAtXY(mouseX,mouseY);
|
---|
460 | }
|
---|
461 |
|
---|
462 |
|
---|
463 | resetValues = function()
|
---|
464 | {
|
---|
465 | var nextlayer = document.getElementById('nextpagediv')
|
---|
466 | var prevlayer = document.getElementById('prevpagediv')
|
---|
467 | var bleedlayer = document.getElementById('animedgebleed')
|
---|
468 |
|
---|
469 | topVal=0;
|
---|
470 | rightVal=pageXDim;
|
---|
471 | bottomVal=0;
|
---|
472 | leftVal=0
|
---|
473 |
|
---|
474 | var startingClip = "rect("+topVal+"px "+rightVal+"px "+bottomVal+"px "+leftVal+"px)";
|
---|
475 |
|
---|
476 | nextlayer.style.clip=startingClip;
|
---|
477 | prevlayer.style.clip=startingClip;
|
---|
478 | bleedlayer.style.clip=startingClip;
|
---|
479 | }
|
---|
480 | }
|
---|