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

Last change on this file since 27163 was 26704, checked in by davidb, 11 years ago

Changed display of save button and add metadata controls to be more consistent with display of other controls.

  • Property svn:executable set to *
File size: 34.7 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
1120 var saveButton = $("<button>", {"id": "saveButton", "class": "ui-state-default ui-corner-all"});
1121 saveButton.click(save);
1122 saveButton.html("Save changes");
1123 editBar.append(saveButton);
1124
1125
1126 var visibleMetadataList = $("<select>", {"id": "metadataSetList"});
1127 var allOption = $("<option>All</option>");
1128 visibleMetadataList.append(allOption);
1129
1130 var metadataListLabel = $("<span>", {"id": "metadataListLabel", "style": "margin-left:20px;"});
1131 metadataListLabel.html("Visible metadata: ");
1132 editBar.append(metadataListLabel);
1133 editBar.append(visibleMetadataList);
1134 visibleMetadataList.change(onVisibleMetadataSetChange);
1135
1136 var statusBarDiv = $("<div>");
1137 editBar.append(statusBarDiv);
1138 _statusBar = new StatusBar(statusBarDiv[0]);
1139
1140 var titleDivs = $(".sectionTitle");
1141 for(var i = 0; i < titleDivs.length; i++)
1142 {
1143 addEditMetadataLink(titleDivs[i]);
1144 }
1145
1146 _baseURL = gs.xsltParams.library_name;
1147}
1148
1149/***************
1150* MENU SCRIPTS *
1151***************/
1152
1153function floatMenu(enabled)
1154{
1155 var menu = $(".tableOfContentsContainer");
1156 if(enabled)
1157 {
1158 menu.data("position", menu.css("position"));
1159 menu.data("width", menu.css("width"));
1160 menu.data("right", menu.css("right"));
1161 menu.data("top", menu.css("top"));
1162 menu.data("max-height", menu.css("max-height"));
1163 menu.data("overflow", menu.css("overflow"));
1164 menu.data("z-index", menu.css("z-index"));
1165
1166 menu.css("position", "fixed");
1167 menu.css("width", "300px");
1168 menu.css("right", "0px");
1169 menu.css("top", "100px");
1170 menu.css("max-height", "600px");
1171 menu.css("overflow", "auto");
1172 menu.css("z-index", "200");
1173
1174 $("#unfloatTOCButton").show();
1175 }
1176 else
1177 {
1178 menu.css("position", menu.data("position"));
1179 menu.css("width", menu.data("width"));
1180 menu.css("right", menu.data("right"));
1181 menu.css("top", menu.data("top"));
1182 menu.css("max-height", menu.data("max-height"));
1183 menu.css("overflow", menu.data("overflow"));
1184 menu.css("z-index", menu.data("z-index"));
1185
1186 $("#unfloatTOCButton").hide();
1187 $("#floatTOCToggle").attr("checked", false);
1188 }
1189
1190 var url = gs.xsltParams.library_name + "?a=d&ftoc=" + (enabled ? "1" : "0") + "&c=" + gs.cgiParams.c;
1191
1192 $.ajax(url);
1193}
1194
1195/********************
1196* SLIDESHOW SCRIPTS *
1197********************/
1198
1199function showSlideShow()
1200{
1201 if(!($("#gs-slideshow").length))
1202 {
1203 var slideshowDiv = $("<div>", {id:"gs-slideshow", style:"height:100%;"});
1204 var loadingImage = $("<img>", {src:gs.imageURLs.loading});
1205 slideshowDiv.append(loadingImage);
1206
1207 $.blockUI({message: $(slideshowDiv), css:{top: "5%", left: "5%", width: "90%", height: "90%", overflow: "auto", cursor: "auto"}});
1208
1209 retrieveImagesForSlideShow(function(imageIDArray)
1210 {
1211 loadingImage.hide();
1212 if(imageIDArray && imageIDArray.length > 0)
1213 {
1214 var imageURLs = new Array();
1215 for(var i = 0; i < imageIDArray.length; i++)
1216 {
1217 if(imageIDArray[i].source && imageIDArray[i].source.search(/.*\.(gif|jpg|jpeg|png)$/) != -1)
1218 {
1219 imageURLs.push(gs.collectionMetadata.httpPath + "/index/assoc/" + gs.documentMetadata.assocfilepath + "/" + imageIDArray[i].source);
1220 }
1221 }
1222 new SlideShowWidget(slideshowDiv, imageURLs, imageIDArray);
1223 }
1224 });
1225 }
1226 else
1227 {
1228 $("#gs-slideshow").show();
1229 }
1230}
1231
1232function retrieveImagesForSlideShow(callback)
1233{
1234 var template = "";
1235 template += '<xsl:template match="/">';
1236 template += '<images>[';
1237 template += '<xsl:for-each select="//documentNode">';
1238 template += '<xsl:text disable-output-escaping="yes">{"source":"</xsl:text><gsf:metadata name="Source"/><xsl:text disable-output-escaping="yes">",</xsl:text>';
1239 template += '<xsl:text disable-output-escaping="yes">"id":"</xsl:text><xsl:value-of select="@nodeID"/><xsl:text disable-output-escaping="yes">"}</xsl:text>';
1240 template += '<xsl:if test="position() != count(//documentNode)">,</xsl:if>';
1241 template += '</xsl:for-each>';
1242 template += ']</images>';
1243 template += '</xsl:template>';
1244
1245 var url = gs.xsltParams.library_name + "/collection/" + gs.cgiParams.c + "/document/" + gs.cgiParams.d + "?ed=1&ilt=" + template.replace(" ", "%20");
1246
1247 $.ajax(
1248 {
1249 url:url,
1250 success: function(data)
1251 {
1252 var startIndex = data.indexOf(">", data.indexOf(">") + 1) + 1;
1253 var endIndex = data.lastIndexOf("<");
1254 var arrayString = data.substring(startIndex, endIndex);
1255 var imageIDArray = eval(arrayString);
1256
1257 callback(imageIDArray);
1258 }
1259 });
1260}
1261
1262function SlideShowWidget(mainDiv, images, idArray)
1263{
1264 var _inTransition = false;
1265 var _images = new Array();
1266 var _mainDiv = mainDiv;
1267 var _imageDiv = $("<div>", {id:"ssImageDiv", style:"height:95%; overflow:auto;"});
1268 var _navDiv = $("<div>", {style:"height:5%;"});
1269 var _nextButton = $("<img>", {src:gs.imageURLs.next, style:"float:right; cursor:pointer;"});
1270 var _prevButton = $("<img>", {src:gs.imageURLs.prev, style:"float:left; cursor:pointer; display:none;"});
1271 var _closeLink = $("<a href=\"javascript:$.unblockUI()\">Close Slideshow</a>");
1272 var _clearDiv = $("<div>", {style:"clear:both;"});
1273 var _currentIndex = 0;
1274
1275 _navDiv.append(_nextButton);
1276 _navDiv.append(_closeLink);
1277 _navDiv.append(_prevButton);
1278 _navDiv.append(_clearDiv);
1279 _mainDiv.append(_navDiv);
1280 _mainDiv.append(_imageDiv);
1281
1282 for(var i = 0; i < images.length; i++)
1283 {
1284 _images.push($("<img>", {src:images[i], "class":"slideshowImage"}));
1285 }
1286
1287 if(_images.length < 2)
1288 {
1289 _nextButton.css("display", "none");
1290 }
1291
1292 _imageDiv.append(_images[0]);
1293
1294 this.nextImage = function()
1295 {
1296 if(!_inTransition)
1297 {
1298 _inTransition = true;
1299 if((_currentIndex + 1) < _images.length)
1300 {
1301 _prevButton.css("display", "");
1302 if(_currentIndex + 1 == _images.length - 1)
1303 {
1304 _nextButton.css("display", "none");
1305 }
1306
1307 _imageDiv.fadeOut(500, function()
1308 {
1309 _imageDiv.empty();
1310 _imageDiv.append(_images[_currentIndex + 1]);
1311 _currentIndex++;
1312 _imageDiv.fadeIn(500, function()
1313 {
1314 _inTransition = false;
1315 });
1316 });
1317 }
1318 else
1319 {
1320 _inTransition = false;
1321 }
1322 }
1323 }
1324
1325 this.prevImage = function()
1326 {
1327 if(!_inTransition)
1328 {
1329 _inTransition = true;
1330 if((_currentIndex - 1) >= 0)
1331 {
1332 _nextButton.css("display", "");
1333 if(_currentIndex - 1 == 0)
1334 {
1335 _prevButton.css("display", "none");
1336 }
1337
1338 _imageDiv.fadeOut(500, function()
1339 {
1340 _imageDiv.empty();
1341 _imageDiv.append(_images[_currentIndex - 1]);
1342 _currentIndex--;
1343 _imageDiv.fadeIn(500, function()
1344 {
1345 _inTransition = false;
1346 });
1347 });
1348 }
1349 else
1350 {
1351 _inTransition = false;
1352 }
1353 }
1354 }
1355
1356 var getRootFilenameFromURL = function(url)
1357 {
1358 var urlSegments = url.split("/");
1359 var filename = urlSegments[urlSegments.length - 1];
1360 return filename.replace(/_thumb\..*$/, "");
1361 }
1362
1363 var setLink = function(currentLink, index)
1364 {
1365 $(currentLink).click(function()
1366 {
1367 _inTransition = true;
1368 _currentIndex = index;
1369 _imageDiv.fadeOut(500, function()
1370 {
1371 _imageDiv.empty();
1372 _imageDiv.append(_images[_currentIndex]);
1373 _imageDiv.fadeIn(500, function()
1374 {
1375 _inTransition = false;
1376 });
1377 });
1378 });
1379 }
1380
1381 var sliderLinks = $(".pageSliderCol a");
1382 for(var i = 0; i < sliderLinks.length; i++)
1383 {
1384 var currentLink = sliderLinks[i];
1385 var id = $(currentLink).attr("href").split("'")[1];
1386
1387 for(var j = 0; j < idArray.length; j++)
1388 {
1389 if(idArray[j].id == id)
1390 {
1391 var image = idArray[j].source;
1392
1393 for(var l = 0; l < images.length; l++)
1394 {
1395 var filename = getRootFilenameFromURL(images[l]);
1396 if (filename == image)
1397 {
1398 setLink(currentLink, l);
1399 break;
1400 }
1401 }
1402
1403 break;
1404 }
1405 }
1406 }
1407
1408 _nextButton.click(this.nextImage);
1409 _prevButton.click(this.prevImage);
1410}
Note: See TracBrowser for help on using the repository browser.