source: main/tags/stable4flax/greenstone3/web/interfaces/default/js/document_scripts.js@ 28843

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

Fixing missing annotations from searching

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