source: main/trunk/greenstone3/web/interfaces/oran/js/document_scripts.js@ 25177

Last change on this file since 25177 was 25177, checked in by sjm84, 12 years ago

Some major upgrades to the document view

  • Property svn:executable set to *
File size: 18.7 KB
Line 
1/********************
2* EXPANSION SCRIPTS *
3********************/
4
5function toggleSection(sectionID)
6{
7 var docElem = document.getElementById("doc" + sectionID);
8 var tocElem = document.getElementById("toc" + sectionID);
9
10 var tocToggleElem = document.getElementById("ttoggle" + sectionID);
11 var docToggleElem = document.getElementById("dtoggle" + sectionID);
12
13 if(docElem.style.display == "none")
14 {
15 docElem.style.display = "block";
16 docToggleElem.setAttribute("src", gs.imageURLs.collapse);
17
18 if(tocToggleElem)
19 {
20 tocToggleElem.setAttribute("src", gs.imageURLs.collapse);
21 }
22
23 if(tocElem)
24 {
25 tocElem.style.display = "block";
26 }
27 }
28 else
29 {
30 docElem.style.display = "none";
31
32 //Use the page image if this is a leaf node and the chapter image if it not
33 docToggleElem.setAttribute("src", gs.imageURLs.expand);
34
35 if(tocToggleElem)
36 {
37 tocToggleElem.setAttribute("src", gs.imageURLs.expand);
38 }
39
40 if(tocElem)
41 {
42 tocElem.style.display = "none";
43 }
44 }
45}
46
47function isExpanded(sectionID)
48{
49 var docElem = document.getElementById("doc" + sectionID);
50 if(docElem.style.display == "block")
51 {
52 return true;
53 }
54 return false;
55}
56
57function isParentOf(parent, child)
58{
59 if(child.indexOf(parent) != -1 && child.length > parent.length && child[parent.length] == '.')
60 {
61 return true;
62 }
63 return false;
64}
65
66function minimizeSidebar()
67{
68 var coverImage = document.getElementById("coverImage");
69 var toc = document.getElementById("contentsArea");
70 var maxLink = document.getElementById("sidebarMaximizeButton");
71 var minLink = document.getElementById("sidebarMinimizeButton");
72
73 if(coverImage)
74 {
75 coverImage.style.display = "none";
76 }
77
78 if(toc)
79 {
80 toc.style.display = "none";
81 }
82
83 maxLink.style.display = "block";
84 minLink.style.display = "none";
85}
86
87function maximizeSidebar()
88{
89 var coverImage = document.getElementById("coverImage");
90 var toc = document.getElementById("contentsArea");
91 var maxLink = document.getElementById("sidebarMaximizeButton");
92 var minLink = document.getElementById("sidebarMinimizeButton");
93
94 if(coverImage)
95 {
96 coverImage.style.display = "block";
97 }
98
99 if(toc)
100 {
101 toc.style.display = "block";
102 }
103
104 maxLink.style.display = "none";
105 minLink.style.display = "block";
106}
107
108/**********************
109* PAGED-IMAGE SCRIPTS *
110**********************/
111
112function changePage(href)
113{
114 var ajax = new gs.functions.ajaxRequest();
115 ajax.open("GET", href + "&excerptid=gs-document");
116 ajax.onreadystatechange = function()
117 {
118 if(ajax.readyState == 4 && ajax.status == 200)
119 {
120 var contentElem = document.getElementById("gs-document");
121 contentElem.innerHTML = ajax.responseText;
122 }
123 }
124 ajax.send();
125}
126
127function changeView()
128{
129 var viewList = document.getElementById("viewSelection");
130 var currentVal = viewList.value;
131
132 var view;
133 if(currentVal == "Image view")
134 {
135 setImageVisible(true);
136 setTextVisible(false);
137 view = "image";
138 }
139 else if(currentVal == "Text view")
140 {
141 setImageVisible(false);
142 setTextVisible(true);
143 view = "text";
144 }
145 else
146 {
147 setImageVisible(true);
148 setTextVisible(true);
149 view = "";
150 }
151
152 var ajax = gs.functions.ajaxRequest();
153 ajax.open("GET", gs.xsltParams.library_name + "?a=d&view=" + view + "&c=" + gs.cgiParams.c);
154 ajax.send();
155}
156
157function setImageVisible(visible)
158{
159 var divs = document.getElementsByTagName("DIV");
160 var images = new Array();
161 for (var i = 0; i < divs.length; i++)
162 {
163 if(divs[i].id && divs[i].id.search(/^image/) != -1)
164 {
165 images.push(divs[i]);
166 }
167 }
168
169 for(var i = 0; i < images.length; i++)
170 {
171 var image = images[i];
172 if(visible)
173 {
174 image.style.display = "block";
175 }
176 else
177 {
178 image.style.display = "none";
179 }
180 }
181}
182
183function setTextVisible(visible)
184{
185 var divs = document.getElementsByTagName("DIV");
186 var textDivs = new Array();
187 for (var i = 0; i < divs.length; i++)
188 {
189 if(divs[i].id && divs[i].id.search(/^text/) != -1)
190 {
191 textDivs.push(divs[i]);
192 }
193 }
194
195 for(var i = 0; i < textDivs.length; i++)
196 {
197 var text = textDivs[i];
198 if(visible)
199 {
200 text.style.display = "block";
201 }
202 else
203 {
204 text.style.display = "none";
205 }
206 }
207}
208
209function retrieveTableOfContents()
210{
211 var ajax = gs.functions.ajaxRequest();
212
213 ajax.open("GET", gs.xsltParams.library_name + "?a=d&ed=1&c=" + gs.cgiParams.c + "&d=" + gs.cgiParams.d + "&excerptid=tableOfContents");
214 ajax.onreadystatechange = function()
215 {
216 if(ajax.readyState == 4 && ajax.status == 200)
217 {
218 document.getElementById("contentsArea").innerHTML = document.getElementById("contentsArea").innerHTML + ajax.responseText;
219 replaceLinksWithSlider();
220 var loading = document.getElementById("tocLoadingImage");
221 loading.parentNode.removeChild(loading);
222 }
223 else if(ajax.readyState == 4)
224 {
225 var loading = document.getElementById("tocLoadingImage");
226 loading.parentNode.removeChild(loading);
227 }
228 }
229 ajax.send();
230}
231
232function replaceLinksWithSlider()
233{
234 var tableOfContents = document.getElementById("tableOfContents");
235 var liElems = tableOfContents.getElementsByTagName("LI");
236
237 var leafSections = new Array();
238 for (var i = 0; i < liElems.length; i++)
239 {
240 var section = liElems[i];
241 var add = true;
242 for(var j = 0; j < leafSections.length; j++)
243 {
244 if(leafSections[j] == undefined){continue;}
245
246 var leaf = leafSections[j];
247 if(leaf.getAttribute("id").search(section.getAttribute("id")) != -1)
248 {
249 add = false;
250 }
251
252 if(section.getAttribute("id").search(leaf.getAttribute("id")) != -1)
253 {
254 delete leafSections[j];
255 }
256 }
257
258 if(add)
259 {
260 leafSections.push(section);
261 }
262 }
263
264 for(var i = 0 ; i < leafSections.length; i++)
265 {
266 if(leafSections[i] == undefined){continue;}
267 leafSections[i].style.display = "none";
268 var links = leafSections[i].getElementsByTagName("A");
269 var widget = new SliderWidget(links);
270 leafSections[i].parentNode.insertBefore(widget.getElem(), leafSections[i]);
271 }
272}
273
274function SliderWidget(_links)
275{
276 //****************
277 //MEMBER VARIABLES
278 //****************
279
280 //The container for the widget
281 var _mainDiv = document.createElement("DIV");
282 _mainDiv.setAttribute("class", "ui-widget-content pageSlider");
283
284 //The table of images
285 var _linkTable = document.createElement("TABLE");
286 _mainDiv.appendChild(_linkTable);
287 _linkTable.style.width = (75 * _links.length) + "px";
288
289 //The image row of the table
290 var _linkRow = document.createElement("TR");
291 _linkTable.appendChild(_linkRow);
292
293 //The label row
294 var _numberRow = document.createElement("TR");
295 _linkTable.appendChild(_numberRow);
296
297 //****************
298 //PUBLIC FUNCTIONS
299 //****************
300
301 //Function that returns the widget element
302 this.getElem = function()
303 {
304 return _mainDiv;
305 }
306
307 //*****************
308 //PRIVATE FUNCTIONS
309 //*****************
310
311 var getImage = function(page)
312 {
313 var ajax = gs.functions.ajaxRequest();
314
315 var href = page.getAttribute("href");
316 var template = '';
317 template += '<xsl:template match="/">';
318 template += '<html>';
319 template += '<img>';
320 template += '<xsl:attribute name="src">';
321 template += "<xsl:value-of disable-output-escaping=\"yes\" select=\"/page/pageResponse/collection/metadataList/metadata[@name = 'httpPath']\"/>";
322 template += '<xsl:text>/index/assoc/</xsl:text>';
323 template += "<xsl:value-of disable-output-escaping=\"yes\" select=\"/page/pageResponse/document/metadataList/metadata[@name = 'assocfilepath']\"/>";
324 template += '<xsl:text>/</xsl:text>';
325 template += "<xsl:value-of disable-output-escaping=\"yes\" select=\"/page/pageResponse/document/documentNode/metadataList/metadata[@name = 'Thumb']\"/>";
326 template += '</xsl:attribute>';
327 template += '</img>';
328 template += '</html>';
329 template += '</xsl:template>';
330 ajax.open("GET", href + "&ilt=" + template.replace(" ", "%20"));
331 ajax.onreadystatechange = function()
332 {
333 if(ajax.readyState == 4 && ajax.status == 200)
334 {
335 var text = ajax.responseText;
336 var hrefStart = text.indexOf("src=\"") + 5;
337 if(hrefStart == -1)
338 {
339 page.isLoading = false;
340 page.noImage = true;
341 page.image.setAttribute("src", gs.imageURLs.blank);
342 return;
343 }
344 var hrefEnd = text.indexOf("\"", hrefStart);
345 var href = text.substring(hrefStart, hrefEnd);
346 console.log(href);
347 var image = document.createElement("IMG");
348 $(image).load(function()
349 {
350 page.link.innerHTML = "";
351 page.link.appendChild(image);
352 page.isLoading = false;
353 page.imageLoaded = true;
354 });
355 $(image).error(function()
356 {
357 page.isLoading = false;
358 page.noImage = true;
359 image.setAttribute("src", gs.imageURLs.blank);
360 });
361 image.setAttribute("src", href);
362 }
363 else if (ajax.readyState == 4 && !page.failed)
364 {
365 page.failed = true;
366 getImage(page);
367 }
368 }
369 ajax.send();
370 }
371
372 var startCheckFunction = function()
373 {
374 var checkFunction = function()
375 {
376 var widgetLeft = _mainDiv.scrollLeft;
377 var widgetRight = _mainDiv.clientWidth + _mainDiv.scrollLeft;
378
379 var visiblePages = new Array();
380 for(var i = 0; i < _links.length; i++)
381 {
382 var current = _links[i].cell;
383 var currentLeft = current.offsetLeft;
384 var currentRight = currentLeft + current.clientWidth;
385 if(currentRight > widgetLeft && currentLeft < widgetRight)
386 {
387 visiblePages.push(_links[i]);
388 }
389 }
390
391 for(var i = 0; i < visiblePages.length; i++)
392 {
393 var page = visiblePages[i];
394 if(!page || page.imageLoaded || page.noImage || page.isLoading)
395 {
396 continue;
397 }
398
399 page.isLoading = true;
400 getImage(page);
401 }
402 }
403 setInterval(checkFunction, 1000);
404 }
405
406 //***********
407 //CONSTRUCTOR
408 //***********
409
410 for(var i = 0; i < _links.length; i++)
411 {
412 var col = document.createElement("TD");
413 _linkRow.appendChild(col);
414 col.setAttribute("class", "pageSliderCol");
415 _links[i].cell = col;
416
417 var link = document.createElement("A");
418 col.appendChild(link);
419 _links[i].link = link;
420 var href = _links[i].getAttribute("href");
421 link.setAttribute("href", "javascript:changePage(\"" + href + "\");");
422
423 var image = document.createElement("IMG");
424 link.appendChild(image);
425 image.setAttribute("src", gs.imageURLs.loading);
426 _links[i].image = image;
427
428 var spacer = document.createElement("TD");
429 _linkRow.appendChild(spacer);
430 spacer.setAttribute("class", "pageSliderSpacer");
431
432 var num = document.createElement("TD");
433 _numberRow.appendChild(num);
434 num.innerHTML = "Page " + (i + 1);
435 num.style.textAlign = "center";
436
437 var spacer = document.createElement("TD");
438 _numberRow.appendChild(spacer);
439 spacer.setAttribute("class", "pageSliderSpacer");
440 }
441
442 startCheckFunction();
443}
444
445/***********************
446* HIGHLIGHTING SCRIPTS *
447***********************/
448function addHighlight()
449{
450 var spans = document.getElementsByTagName("span");
451 for(var i = 0; i < spans.length; i++)
452 {
453 var currentSpan = spans[i];
454 if(currentSpan.getAttribute("class") == "noTermHighlight")
455 {
456 currentSpan.setAttribute("class", "termHighlight");
457 }
458 }
459
460 var option = document.getElementById("highlightOption");
461 option.setAttribute("onclick", "removeHighlight();");
462}
463
464function removeHighlight()
465{
466 var spans = document.getElementsByTagName("span");
467 for(var i = 0; i < spans.length; i++)
468 {
469 var currentSpan = spans[i];
470 if(currentSpan.getAttribute("class") == "termHighlight")
471 {
472 currentSpan.setAttribute("class", "noTermHighlight");
473 }
474 }
475
476 var option = document.getElementById("highlightOption");
477 option.setAttribute("onclick", "addHighlight();");
478}
479
480/**************************
481* REALISTIC BOOKS SCRIPTS *
482**************************/
483
484function bookInit()
485{
486 loadBook();
487 hideText();
488 showBook();
489 swapLinkJavascript(false);
490}
491
492function hideText()
493{
494 var textDiv = document.getElementById("gs-document-text");
495 textDiv.style.visibility = "hidden";
496}
497
498function showText()
499{
500 var textDiv = document.getElementById("gs-document-text");
501 textDiv.style.visibility = "visible";
502}
503
504function hideBook()
505{
506 var bookDiv = document.getElementById("bookdiv");
507 bookDiv.style.visibility = "hidden";
508 bookDiv.style.height = "0px";
509
510 var bookObject = document.getElementById("bookObject");
511 bookObject.style.visibility = "hidden";
512 bookObject.style.height = "0px";
513
514 var bookEmbed = document.getElementById("bookEmbed");
515 bookEmbed.style.visibility = "hidden";
516 bookEmbed.style.height = "0px";
517}
518
519function showBook()
520{
521 var bookDiv = document.getElementById("bookdiv");
522 bookDiv.style.visibility = "visible";
523 bookDiv.style.height = "600px";
524
525 var bookObject = document.getElementById("bookObject");
526 bookObject.style.visibility = "visible";
527 bookObject.style.height = "600px";
528
529 var bookEmbed = document.getElementById("bookEmbed");
530 bookEmbed.style.visibility = "visible";
531 bookEmbed.style.height = "600px";
532}
533
534function swapLinkJavascript(rbOn)
535{
536 var option = document.getElementById("rbOption");
537 if(rbOn)
538 {
539 option.setAttribute("onclick", "hideText(); showBook(); swapLinkJavascript(false);");
540 }
541 else
542 {
543 option.setAttribute("onclick", "hideBook(); showText(); swapLinkJavascript(true);");
544 }
545}
546
547//Helper function to create param elements
548function createParam(name, value)
549{
550 var param = document.createElement("PARAM");
551 param.setAttribute("name", name);
552 param.setAttribute("value", value);
553 return param;
554}
555
556function loadBook()
557{
558 var doc_url = document.URL;
559 doc_url = doc_url.replace(/(&|\?)book=[a-z]+/gi,'');
560 doc_url += '&book=flashxml';
561
562 var img_cover = gs.collectionMetadata.httpPath + '/index/assoc/' + gs.documentMetadata.assocfilepath + '/cover.jpg';
563
564 var flash_plug_html = ""
565 flash_plug_html += '<OBJECT align="middle" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" \n';
566 flash_plug_html += ' height="600px" id="bookObject" swLiveConnect="true" \n';
567 flash_plug_html += ' codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" \n';
568 flash_plug_html += ' width="70%">\n';
569 flash_plug_html += ' <PARAM name="allowScriptAccess" value="always" />\n';
570 flash_plug_html += ' <PARAM name="movie" value="Book.swf';
571 flash_plug_html += '?src_image=' + escape(img_cover);
572 flash_plug_html += '&doc_url=' + escape(doc_url);
573 flash_plug_html += '" />\n';
574 flash_plug_html += ' <PARAM name="quality" value="high" />\n';
575 flash_plug_html += ' <PARAM name="bgcolor" value="#FFFFFF" />\n';
576 flash_plug_html += ' <EMBED align="middle" \n';
577 flash_plug_html += ' allowScriptAccess="always" swLiveConnect="true" \n';
578 flash_plug_html += ' bgcolor="#FFFFFF" height="600px" name="Book" \n';
579 flash_plug_html += ' pluginspage="http://www.macromedia.com/go/getflashplayer" \n';
580 flash_plug_html += ' quality="high" id="bookEmbed"\n';
581 flash_plug_html += ' src="Book.swf';
582 flash_plug_html += '?src_image=' + escape(img_cover);
583 flash_plug_html += '&doc_url=' + escape(doc_url);
584 flash_plug_html += '"\n';
585 flash_plug_html += ' type="application/x-shockwave-flash" width="70%" />\n';
586 flash_plug_html += '</OBJECT>\n';
587 var flash_div = document.getElementById("bookdiv");
588 flash_div.innerHTML = flash_plug_html;
589}
590
591function addEditMetadataLink(cell)
592{
593 var id = cell.getAttribute("id").substring(6);
594 var metaTable = document.getElementById("meta" + id);
595
596 var row = cell.parentNode;
597 var newCell = document.createElement("TD");
598 newCell.setAttribute("style", "font-size:0.7em; padding:0px 10px");
599
600 var linkSpan = document.createElement("SPAN");
601 linkSpan.setAttribute("class", "ui-state-default ui-corner-all");
602 linkSpan.setAttribute("style", "padding: 2px; float:left;");
603
604 var linkLabel = document.createElement("SPAN");
605 linkLabel.innerHTML = "edit metadata";
606 var linkIcon = document.createElement("SPAN");
607 linkIcon.setAttribute("class", "ui-icon ui-icon-folder-collapsed");
608
609 var uList = document.createElement("UL");
610 var labelItem = document.createElement("LI");
611 var iconItem = document.createElement("LI");
612 uList.appendChild(iconItem);
613 uList.appendChild(labelItem);
614 labelItem.appendChild(linkLabel);
615 iconItem.appendChild(linkIcon);
616
617 uList.setAttribute("style", "outline: 0 none; margin:0px; padding:0px;");
618 labelItem.setAttribute("style", "float:left; list-style:none outside none;");
619 iconItem.setAttribute("style", "float:left; list-style:none outside none;");
620
621 var newLink = document.createElement("A");
622 newLink.setAttribute("href", "javascript:;");
623 newLink.onclick = function()
624 {
625 if(metaTable.style.display == "none")
626 {
627 linkLabel.innerHTML = "hide metadata";
628 linkIcon.setAttribute("class", "ui-icon ui-icon-folder-open");
629 metaTable.style.display = "block";
630 metaTable.metaNameField.style.display = "inline";
631 metaTable.addRowButton.style.display = "inline";
632 }
633 else
634 {
635 linkLabel.innerHTML = "edit metadata";
636 linkIcon.setAttribute("class", "ui-icon ui-icon-folder-collapsed");
637 metaTable.style.display = "none";
638 metaTable.metaNameField.style.display = "none";
639 metaTable.addRowButton.style.display = "none";
640 }
641 }
642 newLink.appendChild(uList);
643 linkSpan.appendChild(newLink);
644 newCell.appendChild(linkSpan);
645 row.appendChild(newCell);
646
647 addFunctionalityToTable(metaTable);
648 metaTable.metaNameField.style.display = "none";
649 metaTable.addRowButton.style.display = "none";
650}
651
652function readyPageForEditing()
653{
654 var textDivs = gs.functions.getElementsByClassName("sectionText");
655 for(var i = 0; i < textDivs.length; i++)
656 {
657 de.doc.registerEditSection(textDivs[i]);
658 }
659
660 var editBar = document.getElementById("editBarLeft");
661 var saveButton = document.createElement("BUTTON");
662 saveButton.onclick = save;
663 saveButton.innerHTML = "Save changes";
664 saveButton.setAttribute("id", "saveButton");
665 editBar.appendChild(saveButton);
666
667 var visibleMetadataList = document.createElement("SELECT");
668 var allOption = document.createElement("OPTION");
669 allOption.innerHTML = "All";
670 visibleMetadataList.appendChild(allOption);
671 visibleMetadataList.setAttribute("id", "metadataSetList");
672 var metadataListLabel = document.createElement("SPAN");
673 metadataListLabel.setAttribute("style", "margin-left:20px;");
674 metadataListLabel.innerHTML = "Visible metadata: ";
675 editBar.appendChild(metadataListLabel);
676 editBar.appendChild(visibleMetadataList);
677
678 var statusBarDiv = document.createElement("DIV");
679 editBar.appendChild(statusBarDiv);
680 _statusBar = new StatusBar(statusBarDiv);
681
682 var titleDivs = gs.functions.getElementsByClassName("sectionTitle");
683 for(var i = 0; i < titleDivs.length; i++)
684 {
685 addEditMetadataLink(titleDivs[i]);
686 }
687
688 _baseURL = gs.xsltParams.library_name;
689}
Note: See TracBrowser for help on using the repository browser.