source: main/trunk/model-sites-dev/mozarts-laptop/collect/digital-music-stand/script/musicstand-main.js@ 30461

Last change on this file since 30461 was 30461, checked in by davidb, 8 years ago

Goto form added in. More careful control of padding of elmements. Post-it mouse events restricted to be on 'thispage'. More careful conversion of CGI params to be numeric in JavaScript, where needed.

  • Property svn:executable set to *
File size: 8.6 KB
Line 
1
2var cgiGotoPage;
3if (gs.cgiParams["gp"]) {
4 cgiGotoPage = Number(gs.cgiParams["gp"]);
5}
6else {
7 cgiGotoPage = 1;
8}
9
10var expeditee;
11if (gs.cgiParams["expeditee"] == "1") {
12 expeditee = true;
13}
14else {
15 expeditee = false;
16}
17
18
19var musicStand
20 = new MusicStand(httpdocument, gs.cgiParams["c"], gs.cgiParams["d"], gs.documentMetadata["assocfilepath"],
21 Number(gs.cgiParams["numPages"]), cgiGotoPage,
22 Number(gs.cgiParams["pageWidth"]), Number(gs.cgiParams["pageHeight"]),
23 Number(gs.cgiParams["scaleFactor"]));
24
25musicStand.setStyleColors(gs.variables["postitBgCol"],gs.variables["postitSelCol"]);
26
27musicStand.setPagePrefix(gs.cgiParams["pagePrefix"]);
28musicStand.setPageSuffix(gs.cgiParams["pageSuffix"]);
29
30var annotate = new Annotate(gs.variables.httpCollectionImages);
31
32if (gs.userInformation && gs.userInformation.username) {
33 musicStand.setUsername(gs.username);
34 annotate.setUsername(gs.username);
35}
36
37// de.events.addLoadHandler(function()
38
39$(window).load(function(){
40 try {
41 bodyLoaded();
42 }
43 catch(err) {
44 alert("musicstand-main.js: Failed to initialise: " + err.message);
45 }
46});
47
48
49function getElementsByClass(searchClassPrefix,node,tag) {
50
51 var classElements = new Array();
52 if ( node == null )
53 node = document;
54 if ( tag == null )
55 tag = '*';
56
57 if (node.getElementsByTagName) {
58 var els = node.getElementsByTagName(tag);
59
60 var elsLen = els.length;
61 var pattern = new RegExp('(^|\\s)'+searchClassPrefix);
62 for (var i = 0, j = 0; i < elsLen; i++) {
63 if ( pattern.test(els[i].className) ) {
64 classElements[j] = els[i];
65 j++;
66 }
67 }
68 }
69 return classElements;
70}
71
72
73
74var dotsTimer = null;
75var dotsDelta = 200;
76
77function dotsAnim(numDots)
78{
79 var dots = [ "", ".", "..", "..." ];
80
81 var dotSpan = document.getElementById('loadingdots');
82 dotSpan.innerHTML = "loading " + dots[numDots];
83
84 var nextNumDots = (numDots+1) %4;
85 dotsTimer = setTimeout("dotsAnim("+nextNumDots+")",dotsDelta);
86}
87
88
89function bodyLoaded()
90{
91 // load page 1
92 var thisPageImg = document.getElementById("thispageimg");
93
94 var thisPageUrl = musicStand.httpnextanim(gs.cgiParams["pagePrefix"],gs.cgiParams["pageSuffix"],musicStand.getPageNum());
95
96 var thisImg = document.createElement('img');
97 thisImg.onload = function (evt) {
98 var annotateCanvasElem = document.getElementById("annotateCanvas");
99 annotateCanvasElem.style.display = "none";
100
101 annotate.loadAnnotations(musicStand.getDocOID());
102
103 var thisLoading = document.getElementById("loading");
104 thisLoading.style.display = "none";
105 if (dotsTimer != null) {
106 clearTimeout(dotsTimer);
107 }
108 thisPageImg.src = thisImg.src;
109
110 annotateCanvasElem.style.display = "block";
111 }
112
113 //alert("**** thisPageUrl = " + thisPageUrl);
114
115 thisImg.src = thisPageUrl;
116 // thisPageImg.src = thisPageUrl;
117
118 // setup page 2 as next page
119 var nextPageImg = document.getElementById("nextpageimg");
120 var nextPageUrl = musicStand.httpnextanim(gs.cgiParams["pagePrefix"],gs.cgiParams["pageSuffix"],musicStand.getPageNum()+1);
121
122 //var nextImg = document.createElement('img');
123 ////nextImg.onload = function (evt) {
124 ////nextPageImg.onload = function (evt) {
125 ////
126 ////}
127 nextPageImg.src = nextPageUrl;
128
129 if (musicStand.getPageNum()>1) {
130 // setup previous page, as page-1
131 var prevPageImg = document.getElementById("prevpageimg");
132 var prevPageUrl = musicStand.httpprevanim(gs.cgiParams["pagePrefix"],gs.cgiParams["pageSuffix"],musicStand.getPageNum()-1);
133
134 //var prevImg = document.createElement('img');
135 prevPageImg.src = prevPageUrl;
136 }
137
138 // some browsers clear clip rectangle with new image => set it to what we need
139 var nextpagediv = document.getElementById("nextpagediv");
140 nextpagediv.style.clip = "rect(0px, "+gs.cgiParams["pageWidth"]+"px, "+gs.cgiParams["pageHeight"]+"px, "+gs.cgiParams["pageWidth"]+"px)";
141
142 var prevpagediv = document.getElementById("prevpagediv");
143 prevpagediv.style.clip = "rect(0px, "+gs.cgiParams["pageWidth"]+"px, "+gs.cgiParams["pageHeight"]+"px, "+gs.cgiParams["pageWidth"]+"px)";
144
145 var animedgebleed = document.getElementById("animedgebleed");
146 animedgebleed.style.clip = "rect(0px, "+gs.cgiParams["pageWidth"]+"px, "+gs.cgiParams["pageHeight"]+"px, "+gs.cgiParams["pageWidth"]+"px)";
147
148 // no previous page to set up
149
150 // start loading dots
151 dotsTimer = setTimeout("dotsAnim(0)",dotsDelta);
152
153
154 var thispage = document.getElementById("thispage");
155
156 //YAHOO.util.Event.addListener("thispage", 'mouseover', trackMouse);
157 // YAHOO.util.Event.addListener(document, 'mousemove', trackMouse);
158
159 //de.events.addMouseMoveHandler(trackMouse);
160 de.events.addHandler(document,"mousemove",trackMouse);
161
162 // de.events.prependMouseUpHandler(musicStand.pageMenu);
163
164 //YAHOO.util.Event.addListener(document, 'keydown', keyPress);
165
166 //de.events.prependKeyPressHandler(keyPress);
167 //de.events.addHandler(document,"keypress",keyPress);
168 de.events.addHandler(document,"keystroke",keyPress);
169
170 //de.events.addHandler(thispage,"keystroke",keyPress);
171
172 //thispage.addEventListener("keydown", keyPress);
173 //thispage.addEventListener("keypress", keyPress);
174
175
176 //var gotoNavBar = document.getElementById("gotoNavBar");
177 //gotoNavBar.addEventListener("keydown", keyPress);
178 //gotoNavBar.addEventListener("keypress", keyPress);
179
180 //$('#gotoNavBar').bind('keydown',keyPress);
181 //$('#gotoNavBar').focus();
182
183
184 //YAHOO.util.Event.addListener("thispage", 'keydown', keyPress);
185
186}
187
188
189var sliderMoving = false;
190
191var prevOnMouseMove = null;
192var prevOnMouseUp = null;
193
194function dragSlider(evt)
195{
196 evt = evt || window.event;
197
198 evt.returnValue = false;
199 if (evt.preventDefault) evt.preventDefault();
200
201 sliderMoving = true;
202 moveSlider(evt);
203
204 prevOnMouseMove = document.onmousemove;
205 prevOnMouseUp = document.onmouseup;
206
207 document.onmousemove = moveSlider;
208 document.onmouseup = releaseSlider;
209}
210
211
212
213function moveSlider(evt)
214{
215 if (!sliderMoving) return;
216
217 evt = evt || window.event;
218
219 evt.returnValue = false;
220 if (evt.preventDefault) evt.preventDefault();
221
222 var mousePos = getMouseCoords(evt);
223
224 var sliderContainer = document.getElementById('slidercontainer');
225 var sliderContainerYTop = getAbsoluteTop(sliderContainer);
226 var sliderContainerHeight = getRectHeight(sliderContainer) -1;
227
228 var slider = document.getElementById('sliderpos');
229 var sliderHeight = getRectHeight(slider);
230
231 var halfSliderHeight = sliderHeight/2;
232 var newSliderTop = (mousePos.y - sliderContainerYTop) - halfSliderHeight;
233
234 if ((newSliderTop >= 0)
235 && (newSliderTop < (sliderContainerHeight-halfSliderHeight))) {
236 slider.style.top = newSliderTop + "px";
237 var speedBreak = newSliderTop;
238 musicStand.setSpeedBreak(speedBreak);
239
240 var trackabove = document.getElementById('slidertrackabove');
241 trackabove.style.height = speedBreak + "px";
242
243 var trackbelow = document.getElementById('slidertrackbelow');
244 trackbelow.style.top = speedBreak + "px";
245 trackbelow.style.height = (Number(gs.cgiParams["pageHeight"]) - speedBreak) + "px";
246
247 }
248
249}
250
251
252function releaseSlider(evt)
253{
254 if (!sliderMoving) return;
255
256 document.onmousemove = prevOnMouseMove;
257 document.onmouseup = prevOnMouseUp;
258
259 sliderMoving = false;
260
261 var slider = document.getElementById('sliderpos');
262 var sliderposTop = parseInt(slider.style.top);
263
264 if (sliderposTop>0) {
265 sliderposTop /= musicStand.getScaleFactor();
266 }
267
268
269 var docid = musicStand.getDocRoot() + "." + musicStand.getPageNum();
270
271 var username = musicStand.getUsername();
272 var metaname = (username!=null) ? username + "-sliderposTop" : "sliderposTop";
273 //gsapi.setLiveMetadata(docid,metaname,sliderposTop);
274 //alert("Need to set slider");
275}
276
277
278function updateSlider(sliderposTop)
279{
280 if (sliderposTop>0) {
281 sliderposTop *= musicStand.getScaleFactor();
282
283 }
284 var speedBreak = sliderposTop;
285 musicStand.setSpeedBreak(speedBreak);
286
287 var sliderpos = document.getElementById('sliderpos');
288 sliderpos.style.top = speedBreak + "px";
289 sliderpos.style.left = "-8px";
290
291 var trackabove = document.getElementById('slidertrackabove');
292 trackabove.style.height = speedBreak + "px";
293
294 var trackbelow = document.getElementById('slidertrackbelow');
295 trackbelow.style.top = speedBreak + "px";
296 trackbelow.style.height = (Number(gs.cgiParams["pageHeight"]) - speedBreak) + "px";
297}
298
Note: See TracBrowser for help on using the repository browser.