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

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

Some fixes for document views that use an href instead of a docid, also removing the use of modes in document.xsl, also split document.xsl up and took the TOC parts of it out

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