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

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

Rewriting two more files using jQuery

  • Property svn:executable set to *
File size: 35.3 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 gs.jqGet("zoomOptions").css("display", null);
150 gs.jqGet("pagedImageOptions").css("display", null);
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.jqGet("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 = gs.jqGet("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 = gs.jqGet("contentsArea");
429 var maxLink = gs.jqGet("sidebarMaximizeButton");
430 var minLink = gs.jqGet("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 = gs.jqGet("coverImage");
444 var toc = gs.jqGet("contentsArea");
445 var maxLink = gs.jqGet("sidebarMaximizeButton");
446 var minLink = gs.jqGet("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 = gs.jqGet("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 var divs = $("div");
498 var images = new Array();
499 for (var i = 0; i < divs.length; i++)
500 {
501 if($(divs[i]).attr("id") && $(divs[i]).attr("id").search(/^image/) != -1)
502 {
503 images.push($(divs[i]));
504 }
505 }
506
507 for(var i = 0; i < images.length; i++)
508 {
509 var image = images[i];
510 if(visible)
511 {
512 image.css("display", "block");
513 }
514 else
515 {
516 image.css("display", "none");
517 }
518 }
519}
520
521function setTextVisible(visible)
522{
523 var divs = $("div");
524 var textDivs = new Array();
525 for (var i = 0; i < divs.length; i++)
526 {
527 if($(divs[i]).attr("id") && $(divs[i]).attr("id").search(/^text/) != -1)
528 {
529 textDivs.push($(divs[i]));
530 }
531 }
532
533 for(var i = 0; i < textDivs.length; i++)
534 {
535 var text = textDivs[i];
536 if(visible)
537 {
538 text.css("display", "block");
539 }
540 else
541 {
542 text.css("display", "none");
543 }
544 }
545}
546
547function retrieveTableOfContentsAndTitles()
548{
549 var ilt = "";
550 ilt += '<xsl:template match="/">';
551 ilt += '<xsl:for-each select="/page/pageResponse/document/documentNode">';
552 ilt += '<xsl:call-template name="documentNodeTOC"/>';
553 ilt += '</xsl:for-each>';
554 ilt += '</xsl:template>';
555
556 var url = gs.xsltParams.library_name + "?a=d&ed=1&c=" + gs.cgiParams.c + "&d=" + gs.cgiParams.d + "&ilt=" + ilt.replace(/ /g, "%20");
557
558 $.ajax(url)
559 .success(function(response)
560 {
561 gs.jqGet("tableOfContents").html(response);
562 replaceLinksWithSlider();
563 var loading = gs.jqGet("tocLoadingImage");
564 loading.remove();
565 })
566 .error(function()
567 {
568 setTimeout(function(){retrieveTableOfContentsAndTitles();}, 1000);
569 });
570}
571
572function replaceLinksWithSlider()
573{
574 var tableOfContents = gs.jqGet("tableOfContents");
575 var liElems = tableOfContents.find("li");
576
577 var leafSections = new Array();
578 for (var i = 0; i < liElems.length; i++)
579 {
580 var section = $(liElems[i]);
581 var add = true;
582 for(var j = 0; j < leafSections.length; j++)
583 {
584 if(leafSections[j] == undefined){continue;}
585
586 var leaf = $(leafSections[j]);
587 if(leaf.attr("id").search(section.attr("id")) != -1)
588 {
589 add = false;
590 }
591
592 if(section.attr("id").search(leaf.attr("id")) != -1)
593 {
594 delete leafSections[j];
595 }
596 }
597
598 if(add)
599 {
600 leafSections.push(section);
601 }
602 }
603
604 for(var i = 0 ; i < leafSections.length; i++)
605 {
606 if(leafSections[i] == undefined){continue;}
607
608 leafSections[i].css("display", "none");
609 var links = leafSections[i].find("a");
610
611 var widget = new SliderWidget(links);
612 leafSections[i].before(widget.getElem());
613 }
614
615 //Disable all TOC toggles
616 var imgs = $("img");
617 for(var j = 0; j < imgs.length; j++)
618 {
619 var currentImage = $(imgs[j]);
620 if(currentImage.attr("id") && currentImage.attr("id").search(/^ttoggle/) != -1)
621 {
622 currentImage.attr("onclick", "");
623 }
624 else if(currentImage.attr("id") && currentImage.attr("id").search(/^dtoggle/) != -1)
625 {
626 currentImage.attr("onclick", currentImage.attr("onclick").replace(/\)/, ", null, true)"));
627 }
628 }
629}
630
631function SliderWidget(_links)
632{
633 //****************
634 //MEMBER VARIABLES
635 //****************
636
637 //The container for the widget
638 var _mainDiv = $("<div>");
639 _mainDiv.attr("class", "ui-widget-content pageSlider");
640
641 //The table of images
642 var _linkTable = $("<table>");
643 _mainDiv.append(_linkTable);
644
645 //The image row of the table
646 var _linkRow = $("<tr>");
647 _linkTable.append(_linkRow);
648
649 //The list of titles we can search through
650 var _titles = new Array();
651
652 //Keep track of the slider position
653 var _prevScroll = 0;
654
655 //****************
656 //PUBLIC FUNCTIONS
657 //****************
658
659 //Function that returns the widget element
660 this.getElem = function()
661 {
662 return _mainDiv;
663 }
664
665 //*****************
666 //PRIVATE FUNCTIONS
667 //*****************
668
669 var setUpFilterBox = function()
670 {
671 var filter = $("#filterText");
672 filter.keyup(function()
673 {
674 var currentValue = filter.val();
675 var isRange = (currentValue.search(/\d+-\d+/) != -1)
676
677 var found = false;
678 for(var i = 0; i < _titles.length; i++)
679 {
680 if(_titles[i][0] == currentValue)
681 {
682 found = true;
683 }
684 }
685
686 if(!found && isRange)
687 {
688 var firstNumber = currentValue.replace(/^(\d+)-\d+$/, "$1");
689 var secondNumber = currentValue.replace(/^\d+-(\d+)$/, "$1");
690
691 if(firstNumber <= secondNumber)
692 {
693 var matchingTitles = new Array();
694 for(var i = firstNumber; i <= secondNumber; i++)
695 {
696 var numString = i + "";
697 for(var j = 0; j < _titles.length; j++)
698 {
699 var currentTitle = _titles[j];
700 if(currentTitle[0].search(numString) != -1)
701 {
702 matchingTitles.push(currentTitle);
703 }
704 }
705 }
706
707 for(var i = 0; i < _titles.length; i++)
708 {
709 $(_titles[i][1].cell).css("display", "none");
710 }
711
712 for(var i = 0; i < matchingTitles.length; i++)
713 {
714 $(matchingTitles[i][1].cell).css("display", "table-cell");
715 }
716 }
717 }
718 else
719 {
720 for(var i = 0; i < _titles.length; i++)
721 {
722 var currentTitle = _titles[i];
723 if(currentTitle[0].search(currentValue.replace(/\./g, "\\.")) != -1)
724 {
725 $(currentTitle[1].cell).css("display", "table-cell");
726 }
727 else
728 {
729 $(currentTitle[1].cell).css("display", "none");
730 }
731 }
732 }
733 });
734 }
735
736 var getImage = function(page, attemptNumber)
737 {
738 var href = page.getAttribute("href");
739 var startHREF = href.indexOf("'") + 1;
740 var endHREF = href.indexOf("'", startHREF);
741 var nodeID = href.substring(startHREF, endHREF);
742 href = gs.xsltParams.library_name + "/collection/" + gs.cgiParams.c + "/document/" + nodeID;
743
744 var template = '';
745 template += '<xsl:template match="/">';
746 template += '<gsf:metadata name=\"Thumb\"/>';
747 template += '<html>';
748 template += '<img>';
749 template += '<xsl:attribute name="src">';
750 template += "<xsl:value-of disable-output-escaping=\"yes\" select=\"/page/pageResponse/collection/metadataList/metadata[@name = 'httpPath']\"/>";
751 template += '<xsl:text>/index/assoc/</xsl:text>';
752 template += "<xsl:value-of disable-output-escaping=\"yes\" select=\"/page/pageResponse/document/metadataList/metadata[@name = 'assocfilepath']\"/>";
753 template += '<xsl:text>/</xsl:text>';
754 template += "<xsl:value-of disable-output-escaping=\"yes\" select=\"/page/pageResponse/document//documentNode[@nodeID = '" + nodeID + "']/metadataList/metadata[@name = 'Thumb']\"/>";
755 template += '</xsl:attribute>';
756 template += '</img>';
757 template += '<p>';
758 template += "<xsl:value-of disable-output-escaping=\"yes\" select=\"/page/pageResponse/document/documentNode/metadataList/metadata[@name = 'Title']\"/>";
759 template += '</p>';
760 template += '</html>';
761 template += '</xsl:template>';
762
763 var url = href + "?ilt=" + template.replace(" ", "%20");
764 $.ajax(url)
765 .success(function(text)
766 {
767 var hrefStart = text.indexOf("src=\"") + 5;
768 if(hrefStart == -1)
769 {
770 page.isLoading = false;
771 page.noImage = true;
772 $(page.image).attr("src", gs.imageURLs.blank);
773 return;
774 }
775 var hrefEnd = text.indexOf("\"", hrefStart);
776 var href = text.substring(hrefStart, hrefEnd);
777
778 var image = $("<img>");
779 image.load(function()
780 {
781 $(page.link).html("");
782 $(page.link).append(image);
783 page.isLoading = false;
784 page.imageLoaded = true;
785 });
786 image.error(function()
787 {
788 if(!attemptNumber || attemptNumber < 3)
789 {
790 setTimeout(function(){getImage(page, ((!attemptNumber) ? 1 : attemptNumber + 1));}, 500);
791 }
792 else
793 {
794 page.isLoading = false;
795 page.noImage = true;
796 image.attr("src", gs.imageURLs.blank);
797 }
798 });
799 image.attr("src", href);
800
801 var titleStart = text.indexOf("<p>") + 3;
802 var titleEnd = text.indexOf("</p>");
803 var title = text.substring(titleStart, titleEnd);
804 })
805 .error(function()
806 {
807 page.failed = true;
808 if(!attemptNumber || attemptNumber < 3)
809 {
810 setTimeout(function(){getImage(page, ((!attemptNumber) ? 1 : attemptNumber + 1));}, 500);
811 }
812 else
813 {
814 var image = document.createElement("IMG");
815 image.setAttribute("src", gs.imageURLs.blank);
816 page.link.innerHTML = "";
817 page.link.appendChild(image);
818 page.isLoading = false;
819 page.noImage = true;
820 }
821 });
822 }
823
824 var startCheckFunction = function()
825 {
826 var checkFunction = function(forced)
827 {
828 //Don't bother checking if we haven't scrolled very far
829 if(Math.abs(_mainDiv.scrollLeft() - _prevScroll) > 100 || forced)
830 {
831 _prevScroll = _mainDiv.scrollLeft();
832 _checking = true;
833 var widgetLeft = _mainDiv.offset().left;
834 var widgetRight = widgetLeft + _mainDiv.width();
835
836 var visiblePages = new Array();
837 for(var i = 0; i < _links.length; i++)
838 {
839 var current = _links[i].cell;
840 var currentLeft = current.offset().left;
841 var currentRight = currentLeft + current.width();
842
843 if(currentRight > widgetLeft && currentLeft < widgetRight)
844 {
845 visiblePages.push(_links[i]);
846 }
847 }
848
849 for(var i = 0; i < visiblePages.length; i++)
850 {
851 var page = visiblePages[i];
852 if(!page || page.imageLoaded || page.noImage || page.isLoading)
853 {
854 continue;
855 }
856
857 page.isLoading = true;
858 getImage(page);
859 }
860 _checking = false;
861 }
862 }
863
864 setTimeout(checkFunction, 250);
865 setInterval(function(){checkFunction(true)}, 2000);
866 _mainDiv.scroll(checkFunction);
867 }
868
869 //***********
870 //CONSTRUCTOR
871 //***********
872
873 for(var i = 0; i < _links.length; i++)
874 {
875 var col = $("<td>");
876 _linkRow.append(col);
877 col.addClass("pageSliderCol");
878 _links[i].cell = col;
879
880 var link = $("<a>");
881 col.append(link);
882 _links[i].link = link;
883 var href = $(_links[i]).attr("href");
884 link.attr("href", href.replace(/\)/, ", 0, true)"));
885
886 if(!_linkCellMap[href])
887 {
888 _linkCellMap[href] = new Array();
889 }
890 _linkCellMap[href].push(_links[i]);
891
892 var loadingText = $("<p>Loading image</p>");
893 link.append(loadingText);
894
895 var image = $("<img>");
896 link.append(image);
897 image.attr("src", gs.imageURLs.loading);
898 _links[i].image = image;
899
900 var title = $(_links[i]).html();
901 if(title.search(/^[^ ]+ [^ ]+$/) != -1)
902 {
903 var section = title.replace(/^([^ ]+) [^ ]+$/, "$1");
904 var page = title.replace(/^[^ ]+ ([^ ]+)$/, "$1");
905 if(page.search(/^[0-9]+$/) != -1)
906 {
907 title = page;
908 }
909 }
910 _titles.push([title, _links[i]]);
911
912 col.append($("<br>"));
913 col.append(title);
914 }
915
916 setUpFilterBox();
917 startCheckFunction();
918}
919
920/***********************
921* HIGHLIGHTING SCRIPTS *
922***********************/
923function swapHighlight(imageClicked)
924{
925 var hlCheckbox = $("#highlightOption");
926
927 if(imageClicked)
928 {
929 $(hlCheckbox).attr("checked", !$(hlCheckbox).attr("checked"));
930 }
931
932 var from;
933 var to;
934 if(hlCheckbox.attr("checked"))
935 {
936 from = "noTermHighlight";
937 to = "termHighlight";
938 }
939 else
940 {
941 from = "termHighlight";
942 to = "noTermHighlight";
943 }
944
945 var spans = $("span").each(function()
946 {
947 if($(this).hasClass(from))
948 {
949 $(this).removeClass(from);
950 $(this).addClass(to);
951 }
952 });
953}
954
955/**************************
956* REALISTIC BOOKS SCRIPTS *
957**************************/
958
959function bookInit()
960{
961 loadBook();
962 hideText();
963 showBook();
964 swapLinkJavascript(false);
965}
966
967function hideText()
968{
969 $("#gs-document-text").css("visibility", "hidden");
970}
971
972function showText()
973{
974 $("#gs-document-text").css("visibility", "visible");
975}
976
977function hideBook()
978{
979 $("#bookDiv, #bookObject, #bookEmbed").css({"visibility": "hidden", "height": "0px"});
980}
981
982function showBook()
983{
984 $("#bookDiv, #bookObject, #bookEmbed").css({"visibility": "visible", "height": "600px"});
985}
986
987function swapLinkJavascript(rbOn)
988{
989 var option = $("#rbOption");
990 var optionImage = $("#rbOptionImage");
991
992 if(rbOn)
993 {
994 option.attr("onclick", "hideText(); showBook(); swapLinkJavascript(false);");
995 optionImage.attr("onclick", "hideText(); showBook(); swapLinkJavascript(false);");
996 $(option).attr("checked", false);
997 }
998 else
999 {
1000 option.attr("onclick", "hideBook(); showText(); swapLinkJavascript(true);");
1001 optionImage.attr("onclick", "hideBook(); showText(); swapLinkJavascript(true);");
1002 $(option).attr("checked", true);
1003 }
1004}
1005
1006function loadBook()
1007{
1008 var doc_url = document.URL;
1009 doc_url = doc_url.replace(/(&|\?)book=[a-z]+/gi,'');
1010 doc_url += '&book=flashxml';
1011
1012 var img_cover = gs.collectionMetadata.httpPath + '/index/assoc/' + gs.documentMetadata.assocfilepath + '/cover.jpg';
1013
1014 var flash_plug_html = ""
1015 flash_plug_html += '<OBJECT align="middle" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" \n';
1016 flash_plug_html += ' height="600px" id="bookObject" swLiveConnect="true" \n';
1017 flash_plug_html += ' codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" \n';
1018 flash_plug_html += ' width="70%">\n';
1019 flash_plug_html += ' <PARAM name="allowScriptAccess" value="always" />\n';
1020 flash_plug_html += ' <PARAM name="movie" value="Book.swf';
1021 flash_plug_html += '?src_image=' + escape(img_cover);
1022 flash_plug_html += '&doc_url=' + escape(doc_url);
1023 flash_plug_html += '" />\n';
1024 flash_plug_html += ' <PARAM name="quality" value="high" />\n';
1025 flash_plug_html += ' <PARAM name="bgcolor" value="#FFFFFF" />\n';
1026 flash_plug_html += ' <EMBED align="middle" \n';
1027 flash_plug_html += ' allowScriptAccess="always" swLiveConnect="true" \n';
1028 flash_plug_html += ' bgcolor="#FFFFFF" height="600px" name="Book" \n';
1029 flash_plug_html += ' pluginspage="http://www.macromedia.com/go/getflashplayer" \n';
1030 flash_plug_html += ' quality="high" id="bookEmbed"\n';
1031 flash_plug_html += ' src="Book.swf';
1032 flash_plug_html += '?src_image=' + escape(img_cover);
1033 flash_plug_html += '&doc_url=' + escape(doc_url);
1034 flash_plug_html += '"\n';
1035 flash_plug_html += ' type="application/x-shockwave-flash" width="70%" />\n';
1036 flash_plug_html += '</OBJECT>\n';
1037 $("#bookdiv").html(flash_plug_html);
1038}
1039
1040/************************
1041* METADATA EDIT SCRIPTS *
1042************************/
1043
1044function addEditMetadataLink(cell)
1045{
1046 cell = $(cell);
1047 var id = cell.attr("id").substring(6);
1048 var metaTable = gs.jqGet("meta" + id);
1049
1050 var row = cell.parent();
1051 var newCell = $("<td>", {"style": "font-size:0.7em; padding:0px 10px", "class": "editMetadataButton"});
1052 var linkSpan = $("<span>", {"class": "ui-state-default ui-corner-all", "style": "padding: 2px; float:left;"});
1053
1054 var linkLabel = $("<span>edit metadata</span>");
1055 var linkIcon = $("<span>", {"class": "ui-icon ui-icon-folder-collapsed"});
1056 newCell.linkIcon = linkIcon;
1057 newCell.linkLabel = linkLabel;
1058
1059 var uList = $("<ul>", {"style": "outline: 0 none; margin:0px; padding:0px;"});
1060 var labelItem = $("<li>", {"style": "float:left; list-style:none outside none;"});
1061 var iconItem = $("<li>", {"style": "float:left; list-style:none outside none;"});
1062
1063 uList.append(iconItem);
1064 uList.append(labelItem);
1065 labelItem.append(linkLabel);
1066 iconItem.append(linkIcon);
1067
1068 var newLink = $("<a>", {"href": "javascript:;"});
1069 newLink.click(function()
1070 {
1071 if(metaTable.css("display") == "none")
1072 {
1073 linkLabel.html("hide metadata");
1074 linkIcon.attr("class", "ui-icon ui-icon-folder-open");
1075 metaTable.css("display", "block");
1076 metaTable.metaNameField.css("display", "inline");
1077 metaTable.addRowButton.css("display", "inline");
1078 }
1079 else
1080 {
1081 linkLabel.html("edit metadata");
1082 linkIcon.attr("class", "ui-icon ui-icon-folder-collapsed");
1083 metaTable.css("display", "none");
1084 metaTable.metaNameField.css("display", "none");
1085 metaTable.addRowButton.css("display", "none");
1086 }
1087 });
1088
1089 newLink.append(uList);
1090 linkSpan.append(newLink);
1091 newCell.append(linkSpan);
1092 row.append(newCell);
1093
1094 addFunctionalityToTable(metaTable);
1095 metaTable.metaNameField.css("display", "none");
1096 metaTable.addRowButton.css("display", "none");
1097}
1098
1099function setEditingFeaturesVisible(visible)
1100{
1101 if(visible)
1102 {
1103 $("#editContentButton").html("Hide editor");
1104 }
1105 else
1106 {
1107 $("#editContentButton").html("Edit content");
1108 }
1109
1110 var visibility = (visible ? "" : "none");
1111 $("#saveButton, #metadataListLabel, #metadataSetList").css("display", visibility);
1112
1113 $(".editMetadataButton").each(function()
1114 {
1115 $(this).css("display", visibility);
1116 $(this.linkLabel).html("edit metadata");
1117 $(this.linkIcon).attr("class", "ui-icon ui-icon-folder-collapsed");
1118 });
1119
1120 $("table").each(function()
1121 {
1122 if($(this).attr("id") && $(this).attr("id").search(/^meta/) != -1)
1123 {
1124 $(this).css("display", "none");
1125 $(this.metaNameField).css("display", "none");
1126 $(this.addRowButton).css("display", "none");
1127 }
1128 });
1129}
1130
1131function readyPageForEditing()
1132{
1133 if($("#metadataSetList").length)
1134 {
1135 var setList = $("#metadataSetList");
1136 if(!setList.css("display") || setList.css("display") == "")
1137 {
1138 setEditingFeaturesVisible(false);
1139 }
1140 else
1141 {
1142 setEditingFeaturesVisible(true);
1143 }
1144 return;
1145 }
1146
1147 $("#editContentButton").html("Hide Editor");
1148
1149 var textDivs = $(".sectionText").each(function(){de.doc.registerEditSection(this);});
1150
1151 var editBar = $("#editBarLeft");
1152 var saveButton = $("<button>", {"id": "saveButton"});
1153 saveButton.click(save);
1154 saveButton.html("Save changes");
1155 editBar.append(saveButton);
1156
1157 var visibleMetadataList = $("<select>", {"id": "metadataSetList"});
1158 var allOption = $("<option>All</option>");
1159 visibleMetadataList.append(allOption);
1160
1161 var metadataListLabel = $("<span>", {"id": "metadataListLabel", "style": "margin-left:20px;"});
1162 metadataListLabel.html("Visible metadata: ");
1163 editBar.append(metadataListLabel);
1164 editBar.append(visibleMetadataList);
1165 visibleMetadataList.change(onVisibleMetadataSetChange);
1166
1167 var statusBarDiv = $("<div>");
1168 editBar.append(statusBarDiv);
1169 _statusBar = new StatusBar(statusBarDiv[0]);
1170
1171 var titleDivs = $(".sectionTitle");
1172 for(var i = 0; i < titleDivs.length; i++)
1173 {
1174 addEditMetadataLink(titleDivs[i]);
1175 }
1176
1177 _baseURL = gs.xsltParams.library_name;
1178}
1179
1180/***************
1181* MENU SCRIPTS *
1182***************/
1183
1184function floatMenu(enabled)
1185{
1186 var menu = $(".tableOfContentsContainer");
1187 if(enabled)
1188 {
1189 menu.data("position", menu.css("position"));
1190 menu.data("width", menu.css("width"));
1191 menu.data("right", menu.css("right"));
1192 menu.data("top", menu.css("top"));
1193 menu.data("max-height", menu.css("max-height"));
1194 menu.data("overflow", menu.css("overflow"));
1195 menu.data("z-index", menu.css("z-index"));
1196
1197 menu.css("position", "fixed");
1198 menu.css("width", "300px");
1199 menu.css("right", "0px");
1200 menu.css("top", "100px");
1201 menu.css("max-height", "600px");
1202 menu.css("overflow", "auto");
1203 menu.css("z-index", "200");
1204
1205 $("#unfloatTOCButton").show();
1206 }
1207 else
1208 {
1209 menu.css("position", menu.data("position"));
1210 menu.css("width", menu.data("width"));
1211 menu.css("right", menu.data("right"));
1212 menu.css("top", menu.data("top"));
1213 menu.css("max-height", menu.data("max-height"));
1214 menu.css("overflow", menu.data("overflow"));
1215 menu.css("z-index", menu.data("z-index"));
1216
1217 $("#unfloatTOCButton").hide();
1218 $("#floatTOCToggle").attr("checked", false);
1219 }
1220
1221 var url = gs.xsltParams.library_name + "?a=d&ftoc=" + (enabled ? "1" : "0") + "&c=" + gs.cgiParams.c;
1222
1223 $.ajax(url);
1224}
1225
1226/********************
1227* SLIDESHOW SCRIPTS *
1228********************/
1229
1230function showSlideShow()
1231{
1232 $("#ssOption").attr('checked', false);
1233 if(!($("#gs-slideshow").length))
1234 {
1235 var slideshowDiv = $("<div>", {id:"gs-slideshow", style:"height:100%;"});
1236 var loadingImage = $("<img>", {src:gs.imageURLs.loading});
1237 slideshowDiv.append(loadingImage);
1238
1239 $.blockUI({message: $(slideshowDiv), css:{top: "5%", left: "5%", width: "90%", height: "90%", overflow: "auto", cursor: "auto"}});
1240
1241 retrieveImagesForSlideShow(function(imageIDArray)
1242 {
1243 loadingImage.hide();
1244 if(imageIDArray && imageIDArray.length > 0)
1245 {
1246 var imageURLs = new Array();
1247 for(var i = 0; i < imageIDArray.length; i++)
1248 {
1249 if(imageIDArray[i].source && imageIDArray[i].source.search(/.*\.(gif|jpg|jpeg|png)$/) != -1)
1250 {
1251 imageURLs.push(gs.collectionMetadata.httpPath + "/index/assoc/" + gs.documentMetadata.assocfilepath + "/" + imageIDArray[i].source);
1252 }
1253 }
1254 new SlideShowWidget(slideshowDiv, imageURLs, imageIDArray);
1255 }
1256 });
1257 }
1258 else
1259 {
1260 $("#gs-slideshow").show();
1261 }
1262}
1263
1264function retrieveImagesForSlideShow(callback)
1265{
1266 var template = "";
1267 template += '<xsl:template match="/">';
1268 template += '<images>[';
1269 template += '<xsl:for-each select="//documentNode">';
1270 template += '<xsl:text disable-output-escaping="yes">{"source":"</xsl:text><gsf:metadata name="Source"/><xsl:text disable-output-escaping="yes">",</xsl:text>';
1271 template += '<xsl:text disable-output-escaping="yes">"id":"</xsl:text><xsl:value-of select="@nodeID"/><xsl:text disable-output-escaping="yes">"}</xsl:text>';
1272 template += '<xsl:if test="position() != count(//documentNode)">,</xsl:if>';
1273 template += '</xsl:for-each>';
1274 template += ']</images>';
1275 template += '</xsl:template>';
1276
1277 var url = gs.xsltParams.library_name + "/collection/" + gs.cgiParams.c + "/document/" + gs.cgiParams.d + "?ed=1&ilt=" + template.replace(" ", "%20");
1278
1279 $.ajax(
1280 {
1281 url:url,
1282 success: function(data)
1283 {
1284 var startIndex = data.indexOf(">", data.indexOf(">") + 1) + 1;
1285 var endIndex = data.lastIndexOf("<");
1286 var arrayString = data.substring(startIndex, endIndex);
1287 var imageIDArray = eval(arrayString);
1288
1289 callback(imageIDArray);
1290 }
1291 });
1292}
1293
1294function SlideShowWidget(mainDiv, images, idArray)
1295{
1296 var _inTransition = false;
1297 var _images = new Array();
1298 var _mainDiv = mainDiv;
1299 var _imageDiv = $("<div>", {id:"ssImageDiv", style:"height:95%; overflow:auto;"});
1300 var _navDiv = $("<div>", {style:"height:5%;"});
1301 var _nextButton = $("<img>", {src:gs.imageURLs.next, style:"float:right; cursor:pointer;"});
1302 var _prevButton = $("<img>", {src:gs.imageURLs.prev, style:"float:left; cursor:pointer; display:none;"});
1303 var _closeLink = $("<a href=\"javascript:$.unblockUI()\">Close Slideshow</a>");
1304 var _clearDiv = $("<div>", {style:"clear:both;"});
1305 var _currentIndex = 0;
1306
1307 _navDiv.append(_nextButton);
1308 _navDiv.append(_closeLink);
1309 _navDiv.append(_prevButton);
1310 _navDiv.append(_clearDiv);
1311 _mainDiv.append(_navDiv);
1312 _mainDiv.append(_imageDiv);
1313
1314 for(var i = 0; i < images.length; i++)
1315 {
1316 _images.push($("<img>", {src:images[i], "class":"slideshowImage"}));
1317 }
1318
1319 if(_images.length < 2)
1320 {
1321 _nextButton.css("display", "none");
1322 }
1323
1324 _imageDiv.append(_images[0]);
1325
1326 this.nextImage = function()
1327 {
1328 if(!_inTransition)
1329 {
1330 _inTransition = true;
1331 if((_currentIndex + 1) < _images.length)
1332 {
1333 _prevButton.css("display", "");
1334 if(_currentIndex + 1 == _images.length - 1)
1335 {
1336 _nextButton.css("display", "none");
1337 }
1338
1339 _imageDiv.fadeOut(500, function()
1340 {
1341 _imageDiv.empty();
1342 _imageDiv.append(_images[_currentIndex + 1]);
1343 _currentIndex++;
1344 _imageDiv.fadeIn(500, function()
1345 {
1346 _inTransition = false;
1347 });
1348 });
1349 }
1350 else
1351 {
1352 _inTransition = false;
1353 }
1354 }
1355 }
1356
1357 this.prevImage = function()
1358 {
1359 if(!_inTransition)
1360 {
1361 _inTransition = true;
1362 if((_currentIndex - 1) >= 0)
1363 {
1364 _nextButton.css("display", "");
1365 if(_currentIndex - 1 == 0)
1366 {
1367 _prevButton.css("display", "none");
1368 }
1369
1370 _imageDiv.fadeOut(500, function()
1371 {
1372 _imageDiv.empty();
1373 _imageDiv.append(_images[_currentIndex - 1]);
1374 _currentIndex--;
1375 _imageDiv.fadeIn(500, function()
1376 {
1377 _inTransition = false;
1378 });
1379 });
1380 }
1381 else
1382 {
1383 _inTransition = false;
1384 }
1385 }
1386 }
1387
1388 var getRootFilenameFromURL = function(url)
1389 {
1390 var urlSegments = url.split("/");
1391 var filename = urlSegments[urlSegments.length - 1];
1392 return filename.replace(/_thumb\..*$/, "");
1393 }
1394
1395 var setLink = function(currentLink, index)
1396 {
1397 $(currentLink).click(function()
1398 {
1399 _inTransition = true;
1400 _currentIndex = index;
1401 _imageDiv.fadeOut(500, function()
1402 {
1403 _imageDiv.empty();
1404 _imageDiv.append(_images[_currentIndex]);
1405 _imageDiv.fadeIn(500, function()
1406 {
1407 _inTransition = false;
1408 });
1409 });
1410 });
1411 }
1412
1413 var sliderLinks = $(".pageSliderCol a");
1414 for(var i = 0; i < sliderLinks.length; i++)
1415 {
1416 var currentLink = sliderLinks[i];
1417 var id = $(currentLink).attr("href").split("'")[1];
1418
1419 for(var j = 0; j < idArray.length; j++)
1420 {
1421 if(idArray[j].id == id)
1422 {
1423 var image = idArray[j].source;
1424
1425 for(var l = 0; l < images.length; l++)
1426 {
1427 var filename = getRootFilenameFromURL(images[l]);
1428 if (filename == image)
1429 {
1430 setLink(currentLink, l);
1431 break;
1432 }
1433 }
1434
1435 break;
1436 }
1437 }
1438 }
1439
1440 _nextButton.click(this.nextImage);
1441 _prevButton.click(this.prevImage);
1442}
Note: See TracBrowser for help on using the repository browser.