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

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

Some big changes to how the document view is handled

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