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

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

Some fixes to the paged image view

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