source: main/trunk/greenstone3/web/interfaces/default/js/document_scripts.js@ 25921

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

Minimising the TOC no longer minimises the cover image

  • Property svn:executable set to *
File size: 32.0 KB
Line 
1var _imageZoomEnabled = false;
2var _linkCellMap = new Array();
3var _onCells = new Array();
4
5/********************
6* EXPANSION SCRIPTS *
7********************/
8
9function getTextForSection(sectionID, callback)
10{
11 if(!callback)
12 {
13 console.log("Cannot get text as the callback function is not defined");
14 }
15
16 var template = "";
17 template += '<xsl:template match="/">';
18 template += '<text>';
19 template += '<xsl:for-each select="/page/pageResponse/document//documentNode[@nodeID = \'' + sectionID + '\']">';
20 template += '<xsl:call-template name="sectionImage"/>';
21 template += '<div id="text' + sectionID + '">';
22 template += '<xsl:call-template name="documentNodeText"/>';
23 template += '</div>';
24 template += '</xsl:for-each>';
25 template += '</text>';
26 template += '</xsl:template>';
27
28 var hlCheckBox = document.getElementById("highlightOption");
29
30 var hl = "";
31 if(hlCheckBox)
32 {
33 if(hlCheckBox.checked)
34 {
35 hl = "on";
36 }
37 else
38 {
39 hl = "off";
40 }
41 }
42
43 var ajax = gs.functions.ajaxRequest();
44 ajax.open("GET", gs.xsltParams.library_name + "/collection/" + gs.cgiParams.c + "/document/" + sectionID + "?hl=" + hl + "&p.s=TextQuery&ilt=" + template.replace(" ", "%20"), true);
45 ajax.onreadystatechange = function()
46 {
47 if(ajax.readyState == 4 && ajax.status == 200)
48 {
49 var response = ajax.responseText;
50
51 if(response)
52 {
53 var textStart = response.indexOf(">", response.indexOf(">") + 1) + 1;
54 var textEnd = response.lastIndexOf("<");
55
56 if(textStart == 0 || textEnd == -1 || textEnd <= textStart)
57 {
58 callback("");
59 }
60
61 var text = response.substring(textStart, textEnd);
62 callback(text);
63 }
64 else
65 {
66 callback(null);
67 }
68 }
69 else if(ajax.readyState == 4)
70 {
71 callback(null);
72 }
73 }
74 ajax.send();
75}
76
77function getSubSectionsForSection(sectionID, callback)
78{
79 if(!callback)
80 {
81 console.log("Cannot get sub sections as the callback function is not defined");
82 }
83
84 var template = "";
85 template += '<xsl:template match="/">';
86 template += '<sections>';
87 template += '<xsl:for-each select="/page/pageResponse/document//documentNode[@nodeID = \'' + sectionID + '\']/documentNode">';
88 template += '<xsl:call-template name="wrapDocumentNodes"/>';
89 template += '</xsl:for-each>';
90 template += '</sections>';
91 template += '</xsl:template>';
92
93 var ajax = gs.functions.ajaxRequest();
94 ajax.open("GET", gs.xsltParams.library_name + "/collection/" + gs.cgiParams.c + "/document/" + sectionID + "?ilt=" + template.replace(" ", "%20"), true);
95 ajax.onreadystatechange = function()
96 {
97 if(ajax.readyState == 4 && ajax.status == 200)
98 {
99 var response = ajax.responseText;
100
101 if(response)
102 {
103 var sectionsStart = response.indexOf(">", response.indexOf(">") + 1) + 1;
104 var sectionsEnd = response.lastIndexOf("<");
105
106 if(sectionsStart == 0 || sectionsEnd == -1 || sectionsEnd <= sectionsStart)
107 {
108 callback(" ");
109 return;
110 }
111
112 var sections = response.substring(sectionsStart, sectionsEnd);
113 callback(sections);
114 }
115 else
116 {
117 callback(null);
118 }
119 }
120 else if(ajax.readyState == 4)
121 {
122 callback(null);
123 }
124 }
125 ajax.send();
126}
127
128function toggleSection(sectionID, callback, tocDisabled)
129{
130 var docElem = document.getElementById("doc" + sectionID);
131 var tocElem = document.getElementById("toc" + sectionID);
132
133 var tocToggleElem = document.getElementById("ttoggle" + sectionID);
134 var docToggleElem = document.getElementById("dtoggle" + sectionID);
135
136 if(docElem.style.display == "none")
137 {
138 if(tocToggleElem && !tocDisabled)
139 {
140 tocToggleElem.setAttribute("src", gs.imageURLs.collapse);
141 }
142
143 if(tocElem && !tocDisabled)
144 {
145 tocElem.style.display = "block";
146 }
147
148 if(gs.functions.hasClass(docElem, "noText"))
149 {
150 getTextForSection(sectionID, function(text)
151 {
152 if(text)
153 {
154 var nodeID = sectionID.replace(/\./g, "_");
155 if(text.search("wrap" + nodeID) != -1)
156 {
157 document.getElementById("zoomOptions").style.display = "table-row";
158 }
159 getSubSectionsForSection(sectionID, function(sections)
160 {
161 if(sections)
162 {
163 var textElem = document.getElementById("doc" + sectionID);
164 $(textElem).html(text + sections);
165
166 docElem.setAttribute("class", docElem.getAttribute("class").replace(/\bnoText\b/g, ""));
167 docElem.style.display = "block";
168 docToggleElem.setAttribute("src", gs.imageURLs.collapse);
169
170 if(callback)
171 {
172 callback(true);
173 }
174
175 if(document.getElementById("viewSelection"))
176 {
177 changeView();
178 }
179 }
180 else
181 {
182 docToggleElem.setAttribute("src", gs.imageURLs.expand);
183 if(callback)
184 {
185 callback(false);
186 }
187 }
188 });
189 }
190 else
191 {
192 docToggleElem.setAttribute("src", gs.imageURLs.expand);
193 if(callback)
194 {
195 callback(false);
196 }
197 }
198 });
199
200 docToggleElem.setAttribute("src", gs.imageURLs.loading);
201 }
202 else
203 {
204 docToggleElem.setAttribute("src", gs.imageURLs.collapse);
205 docElem.style.display = "block";
206
207 if(callback)
208 {
209 callback(true);
210 }
211 }
212 }
213 else
214 {
215 docElem.style.display = "none";
216
217 //Use the page image if this is a leaf node and the chapter image if it not
218 docToggleElem.setAttribute("src", gs.imageURLs.expand);
219
220 if(tocToggleElem)
221 {
222 tocToggleElem.setAttribute("src", gs.imageURLs.expand);
223 }
224
225 if(tocElem)
226 {
227 tocElem.style.display = "none";
228 }
229
230 if(callback)
231 {
232 callback(true);
233 }
234 }
235}
236
237function scrollToTop()
238{
239 $('html, body').stop().animate({scrollTop: 0}, 1000);
240}
241
242function focusSection(sectionID, level, tocDisabled)
243{
244 if(!level)
245 {
246 level = 0;
247 }
248
249 var parts = sectionID.split(".");
250 if(level >= parts.length)
251 {
252 var topVal = $(document.getElementById("doc" + sectionID)).offset().top - 50;
253 $('html, body').stop().animate({scrollTop: topVal}, 1000);
254 return;
255 }
256
257 var idToExpand = "";
258 for(var i = 0; i < level + 1; i++)
259 {
260 if(i > 0)
261 {
262 idToExpand += ".";
263 }
264
265 idToExpand += parts[i];
266 }
267
268 if(!isExpanded(idToExpand))
269 {
270 toggleSection(idToExpand, function(success)
271 {
272 if(success)
273 {
274 focusSection(sectionID, level + 1, tocDisabled);
275 }
276 }, tocDisabled);
277 }
278 else
279 {
280 focusSection(sectionID, level + 1, tocDisabled);
281 }
282}
283
284function expandOrCollapseAll(expand)
285{
286 var divs = document.getElementsByTagName("DIV");
287 var startCounter = 0;
288 var endCounter = 0;
289
290 for(var i = 0; i < divs.length; i++)
291 {
292 if(divs[i].getAttribute("id") && divs[i].getAttribute("id").search(/^doc/) != -1)
293 {
294 var id = divs[i].getAttribute("id").replace(/^doc(.*)/, "$1");
295 if(isExpanded(id) != expand)
296 {
297 //Don't collapse the top level
298 if(!expand && id.indexOf(".") == -1)
299 {
300 continue;
301 }
302 startCounter++;
303
304 var toggleFunction = function(tid)
305 {
306 toggleSection(tid, function(success)
307 {
308 if(success)
309 {
310 endCounter++;
311 }
312 else
313 {
314 setTimeout(function(){toggleFunction(tid)}, 500);
315 }
316 });
317 }
318 toggleFunction(id);
319 }
320 }
321 }
322
323 if(startCounter != 0)
324 {
325 var checkFunction = function()
326 {
327 if(startCounter == endCounter)
328 {
329 expandOrCollapseAll(expand);
330 }
331 else
332 {
333 setTimeout(checkFunction, 500);
334 }
335 }
336 checkFunction();
337 }
338}
339
340function loadTopLevelPage(callbackFunction)
341{
342 var ajax = gs.functions.ajaxRequest();
343
344 var url = gs.xsltParams.library_name + "?a=d&dt=hierarchy&c=" + gs.cgiParams.c + "&excerptid=gs-document";
345 if(gs.cgiParams.d && gs.cgiParams.d.length > 0)
346 {
347 url += "&d=" + gs.cgiParams.d.replace(/([^.]*)\..*/, "$1");
348 }
349 else if(gs.cgiParams.href && gs.cgiParams.href.length > 0)
350 {
351 url += "&d=&alb=1&rl=1&href=" + gs.cgiParams.href;
352 }
353
354 ajax.open("GET", url, true);
355 ajax.onreadystatechange = function()
356 {
357 if(ajax.readyState == 4 && ajax.status == 200)
358 {
359 var response = ajax.responseText;
360
361 if(response)
362 {
363 var targetElem = document.getElementById("gs-document");
364 var docStart = response.indexOf(">") + 1;
365 var docEnd = response.lastIndexOf("<");
366 var doc = response.substring(docStart, docEnd);
367 targetElem.innerHTML = doc;
368
369 if(callbackFunction)
370 {
371 callbackFunction();
372 }
373 }
374 }
375 else if(ajax.readyState == 4)
376 {
377 var targetElem = document.getElementById("gs-document");
378 targetElem.innerHTML = targetElem.innerHTML + "<br/> <br/> FAILED TO LOAD PAGE";
379 }
380 };
381 ajax.send();
382}
383
384function retrieveFullTableOfContents()
385{
386 var ajax = gs.functions.ajaxRequest();
387
388 var url = gs.xsltParams.library_name + "/collection/" + gs.cgiParams.c + "?excerptid=tableOfContents&ed=1";
389 if(gs.cgiParams.d && gs.cgiParams.d.length > 0)
390 {
391 url += "&a=d&d=" + gs.cgiParams.d;
392 }
393 else if(gs.cgiParams.href && gs.cgiParams.href.length > 0)
394 {
395 url += "&a=d&d=&alb=1&rl=1&href=" + gs.cgiParams.href;
396 }
397
398 ajax.open("GET", url, true);
399 ajax.onreadystatechange = function()
400 {
401 if(ajax.readyState == 4 && ajax.status == 200)
402 {
403 var newTOCElem = ajax.responseText;
404 var tocStart = newTOCElem.indexOf(">") + 1;
405 var tocEnd = newTOCElem.lastIndexOf("<");
406
407 var newTOC = newTOCElem.substring(tocStart, tocEnd);
408
409 //Add the "Expand document"/"Collapse document" links
410 newTOC = "<table style=\"width:100%; text-align:center;\"><tr><td><a href=\"javascript:expandOrCollapseAll(true);\">Expand document</a></td><td><a href=\"javascript:expandOrCollapseAll(false);\">Collapse document</a></td></tr></table>" + newTOC;
411
412 //Collapse the TOC
413 newTOC = newTOC.replace(/display:block/g, "display:none");
414 newTOC = newTOC.replace(/display:none/, "display:block");
415 newTOC = newTOC.replace(/images\/collapse/g, "images/expand");
416
417 var tocElem = document.getElementById("tableOfContents");
418 tocElem.innerHTML = newTOC;
419
420 gs.variables.tocLoaded = true;
421 }
422 else if(ajax.readyState == 4)
423 {
424 var loading = document.getElementById("tocLoadingImage");
425 loading.parentNode.removeChild(loading);
426 console.log("Error Loading TOC");
427 }
428 }
429 ajax.send();
430}
431
432function isExpanded(sectionID)
433{
434 var docElem = document.getElementById("doc" + sectionID);
435 if(docElem.style.display == "block")
436 {
437 return true;
438 }
439 return false;
440}
441
442function isParentOf(parent, child)
443{
444 if(child.indexOf(parent) != -1 && child.length > parent.length && child[parent.length] == '.')
445 {
446 return true;
447 }
448 return false;
449}
450
451function minimizeSidebar()
452{
453 var toc = document.getElementById("contentsArea");
454 var maxLink = document.getElementById("sidebarMaximizeButton");
455 var minLink = document.getElementById("sidebarMinimizeButton");
456
457 if(toc)
458 {
459 toc.style.display = "none";
460 }
461
462 maxLink.style.display = "block";
463 minLink.style.display = "none";
464}
465
466function maximizeSidebar()
467{
468 var coverImage = document.getElementById("coverImage");
469 var toc = document.getElementById("contentsArea");
470 var maxLink = document.getElementById("sidebarMaximizeButton");
471 var minLink = document.getElementById("sidebarMinimizeButton");
472
473 if(coverImage)
474 {
475 coverImage.style.display = "block";
476 }
477
478 if(toc)
479 {
480 toc.style.display = "block";
481 }
482
483 maxLink.style.display = "none";
484 minLink.style.display = "block";
485}
486
487/**********************
488* PAGED-IMAGE SCRIPTS *
489**********************/
490
491function changeView()
492{
493 var viewList = document.getElementById("viewSelection");
494 var currentVal = viewList.value;
495
496 var view;
497 if(currentVal == "Image view")
498 {
499 setImageVisible(true);
500 setTextVisible(false);
501 view = "image";
502 }
503 else if(currentVal == "Text view")
504 {
505 setImageVisible(false);
506 setTextVisible(true);
507 view = "text";
508 }
509 else
510 {
511 setImageVisible(true);
512 setTextVisible(true);
513 view = "";
514 }
515
516 var ajax = gs.functions.ajaxRequest();
517 ajax.open("GET", gs.xsltParams.library_name + "?a=d&view=" + view + "&c=" + gs.cgiParams.c);
518 ajax.send();
519}
520
521function setImageVisible(visible)
522{
523 var divs = document.getElementsByTagName("DIV");
524 var images = new Array();
525 for (var i = 0; i < divs.length; i++)
526 {
527 if(divs[i].id && divs[i].id.search(/^image/) != -1)
528 {
529 images.push(divs[i]);
530 }
531 }
532
533 for(var i = 0; i < images.length; i++)
534 {
535 var image = images[i];
536 if(visible)
537 {
538 image.style.display = "block";
539 }
540 else
541 {
542 image.style.display = "none";
543 }
544 }
545}
546
547function setTextVisible(visible)
548{
549 var divs = document.getElementsByTagName("DIV");
550 var textDivs = new Array();
551 for (var i = 0; i < divs.length; i++)
552 {
553 if(divs[i].id && divs[i].id.search(/^text/) != -1)
554 {
555 textDivs.push(divs[i]);
556 }
557 }
558
559 for(var i = 0; i < textDivs.length; i++)
560 {
561 var text = textDivs[i];
562 if(visible)
563 {
564 text.style.display = "block";
565 }
566 else
567 {
568 text.style.display = "none";
569 }
570 }
571}
572
573function retrieveTableOfContentsAndTitles()
574{
575 var ilt = "";
576 ilt += '<xsl:template match="/">';
577 ilt += '<xsl:for-each select="/page/pageResponse/document/documentNode">';
578 ilt += '<xsl:call-template name="documentNodeTOC"/>';
579 ilt += '</xsl:for-each>';
580 ilt += '</xsl:template>';
581
582 var ajax = gs.functions.ajaxRequest();
583 ajax.open("GET", gs.xsltParams.library_name + "?a=d&ed=1&c=" + gs.cgiParams.c + "&d=" + gs.cgiParams.d + "&ilt=" + ilt.replace(/ /g, "%20"), true);
584 ajax.onreadystatechange = function()
585 {
586 if(ajax.readyState == 4 && ajax.status == 200)
587 {
588 document.getElementById("tableOfContents").innerHTML = ajax.responseText;
589 replaceLinksWithSlider();
590 var loading = document.getElementById("tocLoadingImage");
591 loading.parentNode.removeChild(loading);
592 }
593 else if(ajax.readyState == 4)
594 {
595 var loading = document.getElementById("tocLoadingImage");
596 loading.parentNode.removeChild(loading);
597 console.log("Error Loading TOC");
598 }
599 }
600 ajax.send();
601}
602
603function replaceLinksWithSlider()
604{
605 var tableOfContents = document.getElementById("tableOfContents");
606 var liElems = tableOfContents.getElementsByTagName("LI");
607
608 var leafSections = new Array();
609 for (var i = 0; i < liElems.length; i++)
610 {
611 var section = liElems[i];
612 var add = true;
613 for(var j = 0; j < leafSections.length; j++)
614 {
615 if(leafSections[j] == undefined){continue;}
616
617 var leaf = leafSections[j];
618 if(leaf.getAttribute("id").search(section.getAttribute("id")) != -1)
619 {
620 add = false;
621 }
622
623 if(section.getAttribute("id").search(leaf.getAttribute("id")) != -1)
624 {
625 delete leafSections[j];
626 }
627 }
628
629 if(add)
630 {
631 leafSections.push(section);
632 }
633 }
634
635 for(var i = 0 ; i < leafSections.length; i++)
636 {
637 if(leafSections[i] == undefined){continue;}
638 leafSections[i].style.display = "none";
639 var links = leafSections[i].getElementsByTagName("A");
640 var widget = new SliderWidget(links);
641 leafSections[i].parentNode.insertBefore(widget.getElem(), leafSections[i]);
642 }
643
644 //Disable all TOC toggles
645 var imgs = document.getElementsByTagName("IMG");
646 for(var j = 0; j < imgs.length; j++)
647 {
648 var currentImage = imgs[j];
649 if(currentImage.getAttribute("id") && currentImage.getAttribute("id").search(/^ttoggle/) != -1)
650 {
651 currentImage.setAttribute("onclick", "");
652 }
653 else if(currentImage.getAttribute("id") && currentImage.getAttribute("id").search(/^dtoggle/) != -1)
654 {
655 currentImage.setAttribute("onclick", currentImage.getAttribute("onclick").replace(/\)/, ", null, true)"));
656 }
657 }
658}
659
660function SliderWidget(_links)
661{
662 //****************
663 //MEMBER VARIABLES
664 //****************
665
666 //The container for the widget
667 var _mainDiv = document.createElement("DIV");
668 _mainDiv.setAttribute("class", "ui-widget-content pageSlider");
669
670 //The table of images
671 var _linkTable = document.createElement("TABLE");
672 _mainDiv.appendChild(_linkTable);
673
674 //The image row of the table
675 var _linkRow = document.createElement("TR");
676 _linkTable.appendChild(_linkRow);
677
678 //The list of titles we can search through
679 var _titles = new Array();
680
681 //****************
682 //PUBLIC FUNCTIONS
683 //****************
684
685 //Function that returns the widget element
686 this.getElem = function()
687 {
688 return _mainDiv;
689 }
690
691 //*****************
692 //PRIVATE FUNCTIONS
693 //*****************
694
695 var setUpFilterBox = function()
696 {
697 var filter = $("#filterText");
698 filter.keyup(function()
699 {
700 var currentValue = filter.val();
701 var isRange = (currentValue.search(/\d+-\d+/) != -1)
702
703 var found = false;
704 for(var i = 0; i < _titles.length; i++)
705 {
706 if(_titles[i][0] == currentValue)
707 {
708 found = true;
709 }
710 }
711
712 if(!found && isRange)
713 {
714 var firstNumber = currentValue.replace(/^(\d+)-\d+$/, "$1");
715 var secondNumber = currentValue.replace(/^\d+-(\d+)$/, "$1");
716
717 if(firstNumber <= secondNumber)
718 {
719 var matchingTitles = new Array();
720 for(var i = firstNumber; i <= secondNumber; i++)
721 {
722 var numString = i + "";
723 for(var j = 0; j < _titles.length; j++)
724 {
725 var currentTitle = _titles[j];
726 if(currentTitle[0].search(numString) != -1)
727 {
728 matchingTitles.push(currentTitle);
729 }
730 }
731 }
732
733 for(var i = 0; i < _titles.length; i++)
734 {
735 _titles[i][1].cell.style.display = "none";
736 }
737
738 for(var i = 0; i < matchingTitles.length; i++)
739 {
740 matchingTitles[i][1].cell.style.display = "table-cell";
741 }
742 }
743 }
744 else
745 {
746 for(var i = 0; i < _titles.length; i++)
747 {
748 var currentTitle = _titles[i];
749 if(currentTitle[0].search(currentValue.replace(/\./g, "\\.")) != -1)
750 {
751 currentTitle[1].cell.style.display = "table-cell";
752 }
753 else
754 {
755 currentTitle[1].cell.style.display = "none";
756 }
757 }
758 }
759 });
760 }
761
762 var getImage = function(page)
763 {
764 var ajax = gs.functions.ajaxRequest();
765
766 var href = page.getAttribute("href");
767 var startHREF = href.indexOf("'") + 1;
768 var endHREF = href.indexOf("'", startHREF);
769 var nodeID = href.substring(startHREF, endHREF);
770 href = gs.xsltParams.library_name + "/collection/" + gs.cgiParams.c + "/document/" + nodeID;
771
772 var template = '';
773 template += '<xsl:template match="/">';
774 template += '<gsf:metadata name=\"Thumb\"/>';
775 template += '<html>';
776 template += '<img>';
777 template += '<xsl:attribute name="src">';
778 template += "<xsl:value-of disable-output-escaping=\"yes\" select=\"/page/pageResponse/collection/metadataList/metadata[@name = 'httpPath']\"/>";
779 template += '<xsl:text>/index/assoc/</xsl:text>';
780 template += "<xsl:value-of disable-output-escaping=\"yes\" select=\"/page/pageResponse/document/metadataList/metadata[@name = 'assocfilepath']\"/>";
781 template += '<xsl:text>/</xsl:text>';
782 template += "<xsl:value-of disable-output-escaping=\"yes\" select=\"/page/pageResponse/document//documentNode[@nodeID = '" + nodeID + "']/metadataList/metadata[@name = 'Thumb']\"/>";
783 template += '</xsl:attribute>';
784 template += '</img>';
785 template += '<p>';
786 template += "<xsl:value-of disable-output-escaping=\"yes\" select=\"/page/pageResponse/document/documentNode/metadataList/metadata[@name = 'Title']\"/>";
787 template += '</p>';
788 template += '</html>';
789 template += '</xsl:template>';
790
791 ajax.open("GET", href + "?ilt=" + template.replace(" ", "%20"));
792 ajax.onreadystatechange = function()
793 {
794 if(ajax.readyState == 4 && ajax.status == 200)
795 {
796 var text = ajax.responseText;
797 var hrefStart = text.indexOf("src=\"") + 5;
798 if(hrefStart == -1)
799 {
800 page.isLoading = false;
801 page.noImage = true;
802 page.image.setAttribute("src", gs.imageURLs.blank);
803 return;
804 }
805 var hrefEnd = text.indexOf("\"", hrefStart);
806 var href = text.substring(hrefStart, hrefEnd);
807
808 var image = document.createElement("IMG");
809 $(image).load(function()
810 {
811 page.link.innerHTML = "";
812 page.link.appendChild(image);
813 page.isLoading = false;
814 page.imageLoaded = true;
815 });
816 $(image).error(function()
817 {
818 page.isLoading = false;
819 page.noImage = true;
820 image.setAttribute("src", gs.imageURLs.blank);
821 });
822 image.setAttribute("src", href);
823
824 var titleStart = text.indexOf("<p>") + 3;
825 var titleEnd = text.indexOf("</p>");
826 var title = text.substring(titleStart, titleEnd);
827 }
828 else if (ajax.readyState == 4 && !page.failed)
829 {
830 page.failed = true;
831 getImage(page);
832 }
833 }
834 ajax.send();
835 }
836
837 var startCheckFunction = function()
838 {
839 var checkFunction = function()
840 {
841 var widgetLeft = _mainDiv.scrollLeft;
842 var widgetRight = _mainDiv.clientWidth + _mainDiv.scrollLeft;
843
844 var visiblePages = new Array();
845 for(var i = 0; i < _links.length; i++)
846 {
847 var current = _links[i].cell;
848 var currentLeft = current.offsetLeft;
849 var currentRight = currentLeft + current.clientWidth;
850 if(currentRight > widgetLeft && currentLeft < widgetRight)
851 {
852 visiblePages.push(_links[i]);
853 }
854 }
855
856 for(var i = 0; i < visiblePages.length; i++)
857 {
858 var page = visiblePages[i];
859 if(!page || page.imageLoaded || page.noImage || page.isLoading)
860 {
861 continue;
862 }
863
864 page.isLoading = true;
865 getImage(page);
866 }
867 }
868 setInterval(checkFunction, 1000);
869 }
870
871 //***********
872 //CONSTRUCTOR
873 //***********
874
875 for(var i = 0; i < _links.length; i++)
876 {
877 var col = document.createElement("TD");
878 _linkRow.appendChild(col);
879 col.setAttribute("class", "pageSliderCol");
880 _links[i].cell = col;
881
882 var link = document.createElement("A");
883 col.appendChild(link);
884 _links[i].link = link;
885 var href = _links[i].getAttribute("href");
886 link.setAttribute("href", href.replace(/\)/, ", 0, true)"));
887
888 if(!_linkCellMap[href])
889 {
890 _linkCellMap[href] = new Array();
891 }
892 _linkCellMap[href].push(_links[i]);
893
894 var image = document.createElement("IMG");
895 link.appendChild(image);
896 image.setAttribute("src", gs.imageURLs.loading);
897 _links[i].image = image;
898
899 var title = _links[i].innerHTML;
900 if(title.search(/^[^ ]+ [^ ]+$/) != -1)
901 {
902 var section = title.replace(/^([^ ]+) [^ ]+$/, "$1");
903 var page = title.replace(/^[^ ]+ ([^ ]+)$/, "$1");
904 if(page.search(/^[0-9]+$/) != -1)
905 {
906 title = page;
907 }
908 }
909 _titles.push([title, _links[i]]);
910
911 var text = document.createTextNode(title);
912 col.appendChild(text);
913 }
914
915 setUpFilterBox();
916 startCheckFunction();
917}
918
919/***********************
920* HIGHLIGHTING SCRIPTS *
921***********************/
922function swapHighlight()
923{
924 var hlCheckbox = document.getElementById("highlightOption");
925
926 var from;
927 var to;
928 if(hlCheckbox.checked)
929 {
930 from = "noTermHighlight";
931 to = "termHighlight";
932 }
933 else
934 {
935 from = "termHighlight";
936 to = "noTermHighlight";
937 }
938
939 var spans = document.getElementsByTagName("span");
940 for(var i = 0; i < spans.length; i++)
941 {
942 var currentSpan = spans[i];
943 if(currentSpan.getAttribute("class") == from)
944 {
945 currentSpan.setAttribute("class", to);
946 }
947 }
948}
949
950/**************************
951* REALISTIC BOOKS SCRIPTS *
952**************************/
953
954function bookInit()
955{
956 loadBook();
957 hideText();
958 showBook();
959 swapLinkJavascript(false);
960}
961
962function hideText()
963{
964 var textDiv = document.getElementById("gs-document-text");
965 textDiv.style.visibility = "hidden";
966}
967
968function showText()
969{
970 var textDiv = document.getElementById("gs-document-text");
971 textDiv.style.visibility = "visible";
972}
973
974function hideBook()
975{
976 var bookDiv = document.getElementById("bookdiv");
977 bookDiv.style.visibility = "hidden";
978 bookDiv.style.height = "0px";
979
980 var bookObject = document.getElementById("bookObject");
981 bookObject.style.visibility = "hidden";
982 bookObject.style.height = "0px";
983
984 var bookEmbed = document.getElementById("bookEmbed");
985 bookEmbed.style.visibility = "hidden";
986 bookEmbed.style.height = "0px";
987}
988
989function showBook()
990{
991 var bookDiv = document.getElementById("bookdiv");
992 bookDiv.style.visibility = "visible";
993 bookDiv.style.height = "600px";
994
995 var bookObject = document.getElementById("bookObject");
996 bookObject.style.visibility = "visible";
997 bookObject.style.height = "600px";
998
999 var bookEmbed = document.getElementById("bookEmbed");
1000 bookEmbed.style.visibility = "visible";
1001 bookEmbed.style.height = "600px";
1002}
1003
1004function swapLinkJavascript(rbOn)
1005{
1006 var option = document.getElementById("rbOption");
1007 if(rbOn)
1008 {
1009 option.setAttribute("onclick", "hideText(); showBook(); swapLinkJavascript(false);");
1010 }
1011 else
1012 {
1013 option.setAttribute("onclick", "hideBook(); showText(); swapLinkJavascript(true);");
1014 }
1015}
1016
1017//Helper function to create param elements
1018function createParam(name, value)
1019{
1020 var param = document.createElement("PARAM");
1021 param.setAttribute("name", name);
1022 param.setAttribute("value", value);
1023 return param;
1024}
1025
1026function loadBook()
1027{
1028 var doc_url = document.URL;
1029 doc_url = doc_url.replace(/(&|\?)book=[a-z]+/gi,'');
1030 doc_url += '&book=flashxml';
1031
1032 var img_cover = gs.collectionMetadata.httpPath + '/index/assoc/' + gs.documentMetadata.assocfilepath + '/cover.jpg';
1033
1034 var flash_plug_html = ""
1035 flash_plug_html += '<OBJECT align="middle" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" \n';
1036 flash_plug_html += ' height="600px" id="bookObject" swLiveConnect="true" \n';
1037 flash_plug_html += ' codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" \n';
1038 flash_plug_html += ' width="70%">\n';
1039 flash_plug_html += ' <PARAM name="allowScriptAccess" value="always" />\n';
1040 flash_plug_html += ' <PARAM name="movie" value="Book.swf';
1041 flash_plug_html += '?src_image=' + escape(img_cover);
1042 flash_plug_html += '&doc_url=' + escape(doc_url);
1043 flash_plug_html += '" />\n';
1044 flash_plug_html += ' <PARAM name="quality" value="high" />\n';
1045 flash_plug_html += ' <PARAM name="bgcolor" value="#FFFFFF" />\n';
1046 flash_plug_html += ' <EMBED align="middle" \n';
1047 flash_plug_html += ' allowScriptAccess="always" swLiveConnect="true" \n';
1048 flash_plug_html += ' bgcolor="#FFFFFF" height="600px" name="Book" \n';
1049 flash_plug_html += ' pluginspage="http://www.macromedia.com/go/getflashplayer" \n';
1050 flash_plug_html += ' quality="high" id="bookEmbed"\n';
1051 flash_plug_html += ' src="Book.swf';
1052 flash_plug_html += '?src_image=' + escape(img_cover);
1053 flash_plug_html += '&doc_url=' + escape(doc_url);
1054 flash_plug_html += '"\n';
1055 flash_plug_html += ' type="application/x-shockwave-flash" width="70%" />\n';
1056 flash_plug_html += '</OBJECT>\n';
1057 var flash_div = document.getElementById("bookdiv");
1058 flash_div.innerHTML = flash_plug_html;
1059}
1060
1061function addEditMetadataLink(cell)
1062{
1063 var id = cell.getAttribute("id").substring(6);
1064 var metaTable = document.getElementById("meta" + id);
1065
1066 var row = cell.parentNode;
1067 var newCell = document.createElement("TD");
1068 newCell.setAttribute("style", "font-size:0.7em; padding:0px 10px");
1069 newCell.setAttribute("class", "editMetadataButton");
1070
1071 var linkSpan = document.createElement("SPAN");
1072 linkSpan.setAttribute("class", "ui-state-default ui-corner-all");
1073 linkSpan.setAttribute("style", "padding: 2px; float:left;");
1074
1075 var linkLabel = document.createElement("SPAN");
1076 linkLabel.innerHTML = "edit metadata";
1077 newCell.linkLabel = linkLabel;
1078 var linkIcon = document.createElement("SPAN");
1079 linkIcon.setAttribute("class", "ui-icon ui-icon-folder-collapsed");
1080 newCell.linkIcon = linkIcon;
1081
1082 var uList = document.createElement("UL");
1083 var labelItem = document.createElement("LI");
1084 var iconItem = document.createElement("LI");
1085 uList.appendChild(iconItem);
1086 uList.appendChild(labelItem);
1087 labelItem.appendChild(linkLabel);
1088 iconItem.appendChild(linkIcon);
1089
1090 uList.setAttribute("style", "outline: 0 none; margin:0px; padding:0px;");
1091 labelItem.setAttribute("style", "float:left; list-style:none outside none;");
1092 iconItem.setAttribute("style", "float:left; list-style:none outside none;");
1093
1094 var newLink = document.createElement("A");
1095 newLink.setAttribute("href", "javascript:;");
1096 newLink.onclick = function()
1097 {
1098 if(metaTable.style.display == "none")
1099 {
1100 linkLabel.innerHTML = "hide metadata";
1101 linkIcon.setAttribute("class", "ui-icon ui-icon-folder-open");
1102 metaTable.style.display = "block";
1103 metaTable.metaNameField.style.display = "inline";
1104 metaTable.addRowButton.style.display = "inline";
1105 }
1106 else
1107 {
1108 linkLabel.innerHTML = "edit metadata";
1109 linkIcon.setAttribute("class", "ui-icon ui-icon-folder-collapsed");
1110 metaTable.style.display = "none";
1111 metaTable.metaNameField.style.display = "none";
1112 metaTable.addRowButton.style.display = "none";
1113 }
1114 }
1115 newLink.appendChild(uList);
1116 linkSpan.appendChild(newLink);
1117 newCell.appendChild(linkSpan);
1118 row.appendChild(newCell);
1119
1120 addFunctionalityToTable(metaTable);
1121 metaTable.metaNameField.style.display = "none";
1122 metaTable.addRowButton.style.display = "none";
1123}
1124
1125function setEditingFeaturesVisible(visible)
1126{
1127 if(visible)
1128 {
1129 document.getElementById("editContentButton").innerHTML = "Hide editor";
1130 }
1131 else
1132 {
1133 document.getElementById("editContentButton").innerHTML = "Edit content";
1134 }
1135
1136 var saveButton = document.getElementById("saveButton");
1137 var metadataListLabel = document.getElementById("metadataListLabel");
1138 var metadataList = document.getElementById("metadataSetList");
1139
1140 var visibility = (visible ? "" : "none");
1141 saveButton.style.display = visibility;
1142 metadataListLabel.style.display = visibility;
1143 metadataList.style.display = visibility;
1144
1145 var buttons = gs.functions.getElementsByClassName("editMetadataButton");
1146
1147 for(var i = 0; i < buttons.length; i++)
1148 {
1149 buttons[i].style.display = visibility;
1150 buttons[i].linkLabel.innerHTML = "edit metadata";
1151 buttons[i].linkIcon.setAttribute("class", "ui-icon ui-icon-folder-collapsed");
1152 }
1153
1154 var tables = document.getElementsByTagName("TABLE");
1155 for(var i = 0; i < tables.length; i++)
1156 {
1157 var currentTable = tables[i];
1158 if(currentTable.getAttribute("id") && currentTable.getAttribute("id").search(/^meta/) != -1)
1159 {
1160 currentTable.style.display = "none";
1161 currentTable.metaNameField.style.display = "none";
1162 currentTable.addRowButton.style.display = "none";
1163 }
1164 }
1165}
1166
1167function readyPageForEditing()
1168{
1169 if(document.getElementById("metadataSetList"))
1170 {
1171 var setList = document.getElementById("metadataSetList");
1172 if(!setList.style.display || setList.style.display == "")
1173 {
1174 setEditingFeaturesVisible(false);
1175 }
1176 else
1177 {
1178 setEditingFeaturesVisible(true);
1179 }
1180 return;
1181 }
1182
1183 document.getElementById("editContentButton").innerHTML = "Hide Editor";
1184
1185 var textDivs = gs.functions.getElementsByClassName("sectionText");
1186 for(var i = 0; i < textDivs.length; i++)
1187 {
1188 de.doc.registerEditSection(textDivs[i]);
1189 }
1190
1191 var editBar = document.getElementById("editBarLeft");
1192 var saveButton = document.createElement("BUTTON");
1193 saveButton.onclick = save;
1194 saveButton.innerHTML = "Save changes";
1195 saveButton.setAttribute("id", "saveButton");
1196 editBar.appendChild(saveButton);
1197
1198 var visibleMetadataList = document.createElement("SELECT");
1199 var allOption = document.createElement("OPTION");
1200 allOption.innerHTML = "All";
1201 visibleMetadataList.appendChild(allOption);
1202 visibleMetadataList.setAttribute("id", "metadataSetList");
1203 var metadataListLabel = document.createElement("SPAN");
1204 metadataListLabel.setAttribute("id", "metadataListLabel");
1205 metadataListLabel.setAttribute("style", "margin-left:20px;");
1206 metadataListLabel.innerHTML = "Visible metadata: ";
1207 editBar.appendChild(metadataListLabel);
1208 editBar.appendChild(visibleMetadataList);
1209 visibleMetadataList.onchange = onVisibleMetadataSetChange;
1210
1211 var statusBarDiv = document.createElement("DIV");
1212 editBar.appendChild(statusBarDiv);
1213 _statusBar = new StatusBar(statusBarDiv);
1214
1215 var titleDivs = gs.functions.getElementsByClassName("sectionTitle");
1216 for(var i = 0; i < titleDivs.length; i++)
1217 {
1218 addEditMetadataLink(titleDivs[i]);
1219 }
1220
1221 _baseURL = gs.xsltParams.library_name;
1222}
Note: See TracBrowser for help on using the repository browser.