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

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

Some changes to fix paged images

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