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

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

Fixed buggy table of contents

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