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

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

Removed the checkbox to enable the slideshow, fixed an error with zooming and increased the zoom window size

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