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

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

A major rework of document templates so that the display templates are easier to modify

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