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

Last change on this file since 30169 was 30169, checked in by kjdon, 9 years ago

changing the filtering algorithm. Can choose between pagenum and title. pagenum is numeric by default, title is string matching.

  • Property svn:executable set to *
File size: 46.1 KB
Line 
1var _imageZoomEnabled = false;
2// Choose which types of filtering you want: sectionnum, or sectiontitle.
3var _filter_on_types = ["sectiontitle", "sectionnum"];
4// the text strings for the two radio buttons
5var _filter_on_num_text = "pagenum";
6var _filter_on_title_text = "title";
7// are titles numeric match?
8var _filter_title_numeric = false;
9
10var _linkCellMap = new Array();
11var _onCells = new Array();
12
13/* some vars for document editing */
14/* if true, will look through all the metadata for the document, and add each namespace into the list of metadata sets. If set to false, will only add in the ones defined in setStaticMetadataSets function (defined below) - override this function to make a custom list of sets */
15var dynamic_metadata_set_list = true;
16/* if true, will make the editing controls stay visible even on page scrolling */
17var keep_editing_controls_visible = true;
18/* Here you can choose which save buttons you like. Choose from 'save', 'rebuild', 'saveandrebuild' */
19var save_and_rebuild_buttons = ["saveandrebuild"];
20
21var save_button_text = "Save changes";
22var rebuild_button_text = "Rebuild";
23var save_and_rebuild_button_text = "Save and Rebuild";
24
25/*Array to store init states of metadata fields and text*/
26var editableInitStates = new Array();
27/*Array to store last states of metadata fields and text*/
28var editableLastStates = new Array();
29
30/* What kind of metadata element selection do we provide?
31 plain: just a text input box
32 fixedlist: a drop down menu with a fixed list of options (provided by the availableMetadataElements list)
33 autocomplete: a text input box with a list of suggestions to choose from (provided by the availableMetadataElements list). Allows additional input other than the fixed list
34*/
35var new_metadata_field_input_type = "plain";
36/* Metadata elements to be used in the fixedlist/autocomplete options above */
37var availableMetadataElements = ["dc.Title", "dc.Subject"];
38/********************
39* EXPANSION SCRIPTS *
40********************/
41
42function getTextForSection(sectionID, callback)
43{
44 if(!callback)
45 {
46 console.log("Cannot get text as the callback function is not defined");
47 }
48
49 var template = "";
50 template += '<xsl:template match="/">';
51 template += '<text>';
52 template += '<xsl:for-each select="/page/pageResponse/document//documentNode[@nodeID = \'' + sectionID + '\']">';
53 template += '<xsl:call-template name="sectionContent"/>';
54 template += '</xsl:for-each>';
55 template += '</text>';
56 template += '</xsl:template>';
57
58 var hlCheckBox = document.getElementById("highlightOption");
59
60 var hl = "";
61 if(hlCheckBox)
62 {
63 if(hlCheckBox.checked)
64 {
65 hl = "on";
66 }
67 else
68 {
69 hl = "off";
70 }
71 }
72
73 var url = gs.xsltParams.library_name + "/collection/" + gs.cgiParams.c + "/document/" + sectionID + "?hl=" + hl + "&p.s=TextQuery&ilt=" + template.replace(" ", "%20");
74
75 $.ajax(url)
76 .success(function(response)
77 {
78 if(response)
79 {
80 var textStart = response.indexOf(">", response.indexOf(">") + 1) + 1;
81 var textEnd = response.lastIndexOf("<");
82
83 if(textStart == 0 || textEnd == -1 || textEnd <= textStart)
84 {
85 callback("");
86 }
87
88 var text = response.substring(textStart, textEnd);
89 callback(text);
90 }
91 else
92 {
93 callback(null);
94 }
95 })
96 .error(function()
97 {
98 callback(null);
99 });
100}
101
102function getSubSectionsForSection(sectionID, callback)
103{
104 if(!callback)
105 {
106 console.log("Cannot get sub sections as the callback function is not defined");
107 }
108
109 var template = "";
110 template += '<xsl:template match="/">';
111 template += '<sections>';
112 template += '<xsl:for-each select="/page/pageResponse/document//documentNode[@nodeID = \'' + sectionID + '\']/documentNode">';
113 template += '<xsl:call-template name="wrapDocumentNodes"/>';
114 template += '</xsl:for-each>';
115 template += '</sections>';
116 template += '</xsl:template>';
117
118 var url = gs.xsltParams.library_name + "/collection/" + gs.cgiParams.c + "/document/" + sectionID + "?ilt=" + template.replace(" ", "%20");
119
120 if(gs.documentMetadata.docType == "paged")
121 {
122 url += "&dt=hierarchy";
123 }
124
125 $.ajax(url)
126 .success(function(response)
127 {
128 if(response)
129 {
130 var sectionsStart = response.indexOf(">", response.indexOf(">") + 1) + 1;
131 var sectionsEnd = response.lastIndexOf("<");
132
133 if(sectionsStart == 0 || sectionsEnd == -1 || sectionsEnd <= sectionsStart)
134 {
135 callback(" ");
136 return;
137 }
138
139 var sections = response.substring(sectionsStart, sectionsEnd);
140 callback(sections);
141 }
142 else
143 {
144 callback(null);
145 }
146 })
147 .error(function()
148 {
149 callback(null);
150 });
151}
152
153function toggleSection(sectionID, callback, tocDisabled)
154{
155 var docElem = gs.jqGet("doc" + sectionID);
156 var tocElem = gs.jqGet("toc" + sectionID);
157
158 var tocToggleElem = gs.jqGet("ttoggle" + sectionID);
159 var docToggleElem = gs.jqGet("dtoggle" + sectionID);
160
161 if(docElem.css("display") == "none")
162 {
163 if(tocToggleElem.length && !tocDisabled)
164 {
165 tocToggleElem.attr("src", gs.imageURLs.collapse);
166 }
167
168 if(tocElem.length && !tocDisabled)
169 {
170 tocElem.css("display", "block");
171 }
172
173 if(docElem.hasClass("noText"))
174 {
175 getTextForSection(sectionID, function(text)
176 {
177 if(text)
178 {
179 var nodeID = sectionID.replace(/\./g, "_");
180 if(text.search("wrap" + nodeID) != -1)
181 {
182 $("#zoomOptions").css("display", "");
183 $("#pagedImageOptions").css("display", "");
184 }
185 getSubSectionsForSection(sectionID, function(sections)
186 {
187 if(sections)
188 {
189 var textElem = gs.jqGet("doc" + sectionID);
190 textElem.html(text + sections);
191
192 docElem.removeClass("noText");
193 docElem.css("display", "block");
194 docToggleElem.attr("src", gs.imageURLs.collapse);
195
196 if(callback)
197 {
198 callback(true);
199 }
200
201 if(gs.jqGet("viewSelection").length)
202 {
203 changeView();
204 }
205 }
206 else
207 {
208 docToggleElem.attr("src", gs.imageURLs.expand);
209 if(callback)
210 {
211 callback(false);
212 }
213 }
214 });
215 }
216 else
217 {
218 docToggleElem.attr("src", gs.imageURLs.expand);
219 if(callback)
220 {
221 callback(false);
222 }
223 }
224 });
225
226 docToggleElem.attr("src", gs.imageURLs.loading);
227 }
228 else
229 {
230 docToggleElem.attr("src", gs.imageURLs.collapse);
231 docElem.css("display", "block");
232
233 if(callback)
234 {
235 callback(true);
236 }
237 }
238 }
239 else
240 {
241 docElem.css("display", "none");
242
243 //Use the page image if this is a leaf node and the chapter image if it not
244 docToggleElem.attr("src", gs.imageURLs.expand);
245
246 if(tocToggleElem.length)
247 {
248 tocToggleElem.attr("src", gs.imageURLs.expand);
249 }
250
251 if(tocElem.length)
252 {
253 tocElem.css("display", "none");
254 }
255
256 if(callback)
257 {
258 callback(true);
259 }
260 }
261}
262
263function scrollToTop()
264{
265 $('html, body').stop().animate({scrollTop: 0}, 1000);
266}
267
268function focusSection(sectionID, level, tocDisabled)
269{
270 if(!level)
271 {
272 level = 0;
273 }
274
275 var parts = sectionID.split(".");
276 if(level >= parts.length)
277 {
278 var topVal = $(document.getElementById("doc" + sectionID)).offset().top - 50;
279 $('html, body').stop().animate({scrollTop: topVal}, 1000);
280 return;
281 }
282
283 var idToExpand = "";
284 for(var i = 0; i < level + 1; i++)
285 {
286 if(i > 0)
287 {
288 idToExpand += ".";
289 }
290
291 idToExpand += parts[i];
292 }
293
294 if(!isExpanded(idToExpand))
295 {
296 toggleSection(idToExpand, function(success)
297 {
298 if(success)
299 {
300 focusSection(sectionID, level + 1, tocDisabled);
301 }
302 }, tocDisabled);
303 }
304 else
305 {
306 focusSection(sectionID, level + 1, tocDisabled);
307 }
308}
309
310function expandOrCollapseAll(expand)
311{
312 var divs = $("div");
313 var startCounter = 0;
314 var endCounter = 0;
315
316 for(var i = 0; i < divs.length; i++)
317 {
318 if($(divs[i]).attr("id") && $(divs[i]).attr("id").search(/^doc/) != -1)
319 {
320 var id = $(divs[i]).attr("id").replace(/^doc(.*)/, "$1");
321 if(isExpanded(id) != expand)
322 {
323 //Don't collapse the top level
324 if(!expand && id.indexOf(".") == -1)
325 {
326 continue;
327 }
328 startCounter++;
329
330 var toggleFunction = function(tid)
331 {
332 toggleSection(tid, function(success)
333 {
334 if(success)
335 {
336 endCounter++;
337 }
338 else
339 {
340 setTimeout(function(){toggleFunction(tid)}, 500);
341 }
342 });
343 }
344 toggleFunction(id);
345 }
346 }
347 }
348
349 if(startCounter != 0)
350 {
351 var checkFunction = function()
352 {
353 if(startCounter == endCounter)
354 {
355 expandOrCollapseAll(expand);
356 }
357 else
358 {
359 setTimeout(checkFunction, 500);
360 }
361 }
362 checkFunction();
363 }
364}
365
366function loadTopLevelPage(callbackFunction, customURL)
367{
368 var url;
369 if(customURL)
370 {
371 url = customURL;
372 }
373 else
374 {
375 url = gs.xsltParams.library_name + "?a=d&c=" + gs.cgiParams.c + "&excerptid=gs-document";
376 if(gs.cgiParams.d && gs.cgiParams.d.length > 0)
377 {
378 url += "&d=" + gs.cgiParams.d.replace(/([^.]*)\..*/, "$1");
379 }
380 else if(gs.cgiParams.href && gs.cgiParams.href.length > 0)
381 {
382 url += "&d=&alb=1&rl=1&href=" + gs.cgiParams.href;
383 }
384 }
385
386 $.ajax(url)
387 .success(function(response)
388 {
389 if(response)
390 {
391 var targetElem = $("#gs-document");
392 var docStart = response.indexOf(">") + 1;
393 var docEnd = response.lastIndexOf("<");
394 var doc = response.substring(docStart, docEnd);
395
396 targetElem.html(doc);
397
398 if(callbackFunction)
399 {
400 callbackFunction();
401 }
402 }
403 })
404 .error(function()
405 {
406 setTimeout(function(){loadTopLevelPage(callbackFunction, customURL);}, 1000);
407 });
408}
409
410function retrieveFullTableOfContents()
411{
412 var url = gs.xsltParams.library_name + "/collection/" + gs.cgiParams.c + "?excerptid=tableOfContents&ed=1";
413 if(gs.cgiParams.d && gs.cgiParams.d.length > 0)
414 {
415 url += "&a=d&d=" + gs.cgiParams.d;
416 }
417 else if(gs.cgiParams.href && gs.cgiParams.href.length > 0)
418 {
419 url += "&a=d&d=&alb=1&rl=1&href=" + gs.cgiParams.href;
420 }
421
422 $.ajax(url)
423 .success(function(newTOCElem)
424 {
425 var tocStart = newTOCElem.indexOf(">") + 1;
426 var tocEnd = newTOCElem.lastIndexOf("<");
427
428 var newTOC = newTOCElem.substring(tocStart, tocEnd);
429
430 //Add the "Expand document"/"Collapse document" links
431 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;
432
433 //Collapse the TOC
434 newTOC = newTOC.replace(/display:block/g, "display:none");
435 newTOC = newTOC.replace(/display:none/, "display:block");
436 newTOC = newTOC.replace(/images\/collapse/g, "images/expand");
437
438 var tocElem = $("#tableOfContents");
439 tocElem.html(newTOC);
440
441 gs.variables.tocLoaded = true;
442 })
443 .error(function()
444 {
445 setTimeout(retrieveFullTableOfContents, 1000);
446 });
447}
448
449function isExpanded(sectionID)
450{
451 var docElem = gs.jqGet("doc" + sectionID);
452 if(docElem.css("display") == "block")
453 {
454 return true;
455 }
456 return false;
457}
458
459function minimizeSidebar()
460{
461 var toc = $("#contentsArea");
462 var maxLink = $("#sidebarMaximizeButton");
463 var minLink = $("#sidebarMinimizeButton");
464
465 if(toc.length)
466 {
467 toc.css("display", "none");
468 }
469
470 maxLink.css("display", "block");
471 minLink.css("display", "none");
472}
473
474function maximizeSidebar()
475{
476 var coverImage = $("#coverImage");
477 var toc = $("#contentsArea");
478 var maxLink = $("#sidebarMaximizeButton");
479 var minLink = $("#sidebarMinimizeButton");
480
481 if(coverImage.length)
482 {
483 coverImage.css("display", "block");
484 }
485
486 if(toc.length)
487 {
488 toc.css("display", "block");
489 }
490
491 maxLink.css("display", "none");
492 minLink.css("display", "block");
493}
494
495function extractFilteredPagesToOwnDocument()
496{
497 var oids = new Array();
498 var filtered = $(".pageSliderCol:visible a").each(function()
499 {
500 var hrefString = $(this).attr("href");
501 var oidStart = hrefString.indexOf(".") + 1;
502 var oidFinish = hrefString.indexOf("'", oidStart + 1);
503
504 oids.push(hrefString.substring(oidStart, oidFinish));
505 });
506
507 var sectionString = "[";
508 for(var i = 0; i < oids.length; i++)
509 {
510 sectionString += "\"" + oids[i] + "\"";
511 if(i < oids.length - 1)
512 {
513 sectionString += ",";
514 }
515 }
516 sectionString += "]";
517
518 var url = "cgi-bin/document-extract.pl?a=extract-archives-doc&c=" + gs.cgiParams.c + "&d=" + gs.cgiParams.d + "&json-sections=" + sectionString + "&site=" + gs.xsltParams.site_name;// + "&json-metadata=[{"metaname":"dc.Title","metavalue":"All Black Rugy Success","metamode":"accumulate"]"
519 $("#extractDocButton").attr("disabled", "disabled").html("Exracting document...");
520 $.ajax(url)
521 .success(function(response)
522 {
523 $("#extractDocButton").html("Building collection...");
524 gs.functions.buildCollections([gs.cgiParams.c], function()
525 {
526 $("#extractDocButton").removeAttr("disabled").html("Extract these pages to document");
527 });
528 })
529 .error(function()
530 {
531 $("#extractDocButton").removeAttr("disabled").html("Extract these pages to document");
532 });
533}
534
535/**********************
536* PAGED-IMAGE SCRIPTS *
537**********************/
538
539function changeView()
540{
541 var viewList = $("#viewSelection");
542 var currentVal = viewList.val();
543
544 var view;
545 if(currentVal == "Image view")
546 {
547 setImageVisible(true);
548 setTextVisible(false);
549 view = "image";
550 }
551 else if(currentVal == "Text view")
552 {
553 setImageVisible(false);
554 setTextVisible(true);
555 view = "text";
556 }
557 else
558 {
559 setImageVisible(true);
560 setTextVisible(true);
561 view = "";
562 }
563
564 var url = gs.xsltParams.library_name + "?a=d&view=" + view + "&c=" + gs.cgiParams.c;
565 $.ajax(url);
566}
567
568function setImageVisible(visible)
569{
570 $("div").each(function()
571 {
572 if($(this).attr("id") && $(this).attr("id").search(/^image/) != -1)
573 {
574 $(this).css("display", (visible ? "block" : "none"));
575 }
576 });
577}
578
579function setTextVisible(visible)
580{
581 $("div").each(function()
582 {
583 if($(this).attr("id") && $(this).attr("id").search(/^text/) != -1)
584 {
585 $(this).css("display", (visible ? "block" : "none"));
586 }
587 });
588}
589
590function retrieveTableOfContentsAndTitles()
591{
592 var ilt = "";
593 ilt += '<xsl:template match="/">';
594 ilt += '<xsl:for-each select="/page/pageResponse/document/documentNode">';
595 ilt += '<xsl:call-template name="documentNodeTOC"/>';
596 ilt += '</xsl:for-each>';
597 ilt += '</xsl:template>';
598
599 var url = gs.xsltParams.library_name + "?a=d&ed=1&c=" + gs.cgiParams.c + "&d=" + gs.cgiParams.d + "&ilt=" + ilt.replace(/ /g, "%20");
600
601 $.ajax(url)
602 .success(function(response)
603 {
604 $("#tableOfContents").html(response);
605 replaceLinksWithSlider();
606 var loading = $("#tocLoadingImage");
607 loading.remove();
608 })
609 .error(function()
610 {
611 setTimeout(function(){retrieveTableOfContentsAndTitles();}, 1000);
612 });
613}
614
615function replaceLinksWithSlider()
616{
617 var tableOfContents = $("#tableOfContents");
618
619 var leafSections = new Array();
620 var liElems = tableOfContents.find("li").each(function()
621 {
622 var section = $(this);
623 var add = true;
624 for(var j = 0; j < leafSections.length; j++)
625 {
626 if(leafSections[j] == undefined){continue;}
627
628 var leaf = $(leafSections[j]);
629 if(leaf.attr("id").search(section.attr("id")) != -1)
630 {
631 add = false;
632 }
633
634 if(section.attr("id").search(leaf.attr("id")) != -1)
635 {
636 delete leafSections[j];
637 }
638 }
639
640 if(add)
641 {
642 leafSections.push(section);
643 }
644 });
645
646 for(var i = 0 ; i < leafSections.length; i++)
647 {
648 if(leafSections[i] == undefined){continue;}
649
650 leafSections[i].css("display", "none");
651 var links = leafSections[i].find("a");
652
653 var widget = new SliderWidget(links);
654 leafSections[i].before(widget.getElem());
655 }
656
657 //Disable all TOC toggles
658 var imgs = $("img").each(function()
659 {
660 var currentImage = $(this);
661 if(currentImage.attr("id") && currentImage.attr("id").search(/^ttoggle/) != -1)
662 {
663 currentImage.attr("onclick", "");
664 currentImage.click(function()
665 {
666 var sliderDiv = currentImage.parents("table").first().next();
667 if(sliderDiv.is(":visible"))
668 {
669 sliderDiv.hide();
670 }
671 else
672 {
673 sliderDiv.show();
674 }
675 });
676 }
677 else if(currentImage.attr("id") && currentImage.attr("id").search(/^dtoggle/) != -1)
678 {
679 currentImage.attr("onclick", currentImage.attr("onclick").replace(/\)/, ", null, true)"));
680 }
681 });
682}
683
684
685function SliderWidget(_links)
686{
687 //****************
688 //MEMBER VARIABLES
689 //****************
690
691 //The container for the widget
692 var _mainDiv = $("<div>");
693 _mainDiv.attr("class", "ui-widget-content pageSlider");
694
695 //The table of images
696 var _linkTable = $("<table>");
697 _mainDiv.append(_linkTable);
698
699 //The image row of the table
700 var _linkRow = $("<tr>");
701 _linkTable.append(_linkRow);
702
703 //The list of titles we can search through
704 var _titles = new Array();
705
706 //Keep track of the slider position
707 var _prevScroll = 0;
708
709 //****************
710 //PUBLIC FUNCTIONS
711 //****************
712
713 //Function that returns the widget element
714 this.getElem = function()
715 {
716 return _mainDiv;
717 }
718
719 //*****************
720 //PRIVATE FUNCTIONS
721 //*****************
722
723 // _filter_on_types can be "sectionnum", "sectiontitle"
724 var setUpFilterButtons = function() {
725
726 var button_div = $("#filterOnButtons");
727 button_div.onclick = doFiltering;
728 button_div.html("radio");
729 if (_filter_on_types.length == 0) {
730 _filter_on_types = ["sectionnum", "sectiontitle"];
731 }
732 else if (_filter_on_types.length == 1) {
733 if (_filter_on_types[0] == "sectionnum") {
734 button_div.html("(<input type='radio' name='filterOn' value='num' checked>"+_filter_on_num_text+"</input>)");
735 } else {
736 button_div.html("(<input type='radio' name='filterOn' value='title' checked>"+_filter_on_title_text+"</input>)");
737 }
738 } else {
739 // should be both options
740 button_div.html("<input type='radio' name='filterOn' value='num' checked>"+_filter_on_num_text+"</input><input type='radio' name='filterOn' value='title'>"+_filter_on_title_text+"</input>");
741 }
742}
743
744 var doFiltering = function () {
745 if (typeof _titles == "undefined") {
746 return;
747 }
748
749 var filter_string = $("#filterText").val();
750 var filter_type = $('input[name="filterOn"]:checked').val();
751
752 var index = 2; // section num
753 var numeric_match = true;
754 if (filter_type == "title") {
755 index = 3;
756 if (_filter_title_numeric != true) {
757 numeric_match = false;
758 }
759
760 }
761 var values = filter_string.split(",");
762
763 var matchingTitles = new Array();
764
765 for (var l = 0; l < values.length; l++)
766 {
767 var currentValue = values[l].replace(/^ +/g, "").replace(/ +$/g, "");
768 if (numeric_match) {
769 var isRange = (currentValue.search(/\d+-\d+/) != -1);
770 if (isRange) {
771 var firstNumber = currentValue.replace(/(\d+)-\d+/, "$1");
772 var secondNumber = currentValue.replace(/\d+-(\d+)/, "$1");
773
774 if(firstNumber <= secondNumber)
775 {
776 for(var i = firstNumber; i <= secondNumber; i++)
777 {
778 var numString = i + "";
779 for(var j = 0; j < _titles.length; j++) {
780
781 var currentTitle = _titles[j];
782 if(currentTitle[index] == numString) {
783 matchingTitles.push(currentTitle);
784 }
785 }
786 }
787 }
788 } // if isRange
789 else {
790 for(var j = 0; j < _titles.length; j++) {
791 if (_titles[j][index]==currentValue) {
792 matchingTitles.push(_titles[j]);
793 }
794 }
795
796 }
797
798 } else { // not numeric match.
799 // need to do a search
800 for(var i = 0; i < _titles.length; i++)
801 {
802 var currentTitle = _titles[i];
803 if(currentTitle[index].toLowerCase().search(currentValue.toLowerCase().replace(/\./g, "\\.")) != -1)
804 {
805 matchingTitles.push(currentTitle);
806 }
807 }
808 }
809 } // for each value from filter string
810
811 // set all to hide...
812 for(var i = 0; i < _titles.length; i++)
813 {
814 $(_titles[i][1].cell).css("display", "none");
815 }
816
817 // .. then display the matching ones
818 for(var i = 0; i < matchingTitles.length; i++)
819 {
820 $(matchingTitles[i][1].cell).css("display", "table-cell");
821 }
822}
823
824 var setUpFilterBox = function()
825 {
826 var filter = $("#filterText");
827
828 filter.keyup(function()
829 {
830 doFiltering();
831 });
832 }
833
834 var getImage = function(page, attemptNumber)
835 {
836 var href = page.getAttribute("href");
837 var startHREF = href.indexOf("'") + 1;
838 var endHREF = href.indexOf("'", startHREF);
839 var nodeID = href.substring(startHREF, endHREF);
840 href = gs.xsltParams.library_name + "/collection/" + gs.cgiParams.c + "/document/" + nodeID;
841
842 var template = '';
843 template += '<xsl:template match="/">';
844 template += '<gsf:metadata name=\"Thumb\"/>';
845 template += '<html>';
846 template += '<img>';
847 template += '<xsl:attribute name="src">';
848 template += "<xsl:value-of disable-output-escaping=\"yes\" select=\"/page/pageResponse/collection/metadataList/metadata[@name = 'httpPath']\"/>";
849 template += '<xsl:text>/index/assoc/</xsl:text>';
850 template += "<xsl:value-of disable-output-escaping=\"yes\" select=\"/page/pageResponse/document/metadataList/metadata[@name = 'assocfilepath']\"/>";
851 template += '<xsl:text>/</xsl:text>';
852 template += "<xsl:value-of disable-output-escaping=\"yes\" select=\"/page/pageResponse/document//documentNode[@nodeID = '" + nodeID + "']/metadataList/metadata[@name = 'Thumb']\"/>";
853 template += '</xsl:attribute>';
854 template += '</img>';
855 template += '<p>';
856 template += "<xsl:value-of disable-output-escaping=\"yes\" select=\"/page/pageResponse/document/documentNode/metadataList/metadata[@name = 'Title']\"/>";
857 template += '</p>';
858 template += '</html>';
859 template += '</xsl:template>';
860
861 var url = href + "?ilt=" + template.replace(" ", "%20");
862 $.ajax(url)
863 .success(function(text)
864 {
865 var hrefStart = text.indexOf("src=\"") + 5;
866 if(hrefStart == -1)
867 {
868 page.isLoading = false;
869 page.noImage = true;
870 $(page.image).attr("src", gs.imageURLs.blank);
871 return;
872 }
873 var hrefEnd = text.indexOf("\"", hrefStart);
874 var href = text.substring(hrefStart, hrefEnd);
875
876 var image = $("<img>");
877 image.load(function()
878 {
879 $(page.link).html("");
880 $(page.link).append(image);
881 page.isLoading = false;
882 page.imageLoaded = true;
883 });
884 image.error(function()
885 {
886 if(!attemptNumber || attemptNumber < 3)
887 {
888 setTimeout(function(){getImage(page, ((!attemptNumber) ? 1 : attemptNumber + 1));}, 500);
889 }
890 else
891 {
892 page.isLoading = false;
893 page.noImage = true;
894 image.attr("src", gs.imageURLs.blank);
895 }
896 });
897 image.attr("src", href);
898
899 var titleStart = text.indexOf("<p>") + 3;
900 var titleEnd = text.indexOf("</p>");
901 var title = text.substring(titleStart, titleEnd);
902 })
903 .error(function()
904 {
905 page.failed = true;
906 if(!attemptNumber || attemptNumber < 3)
907 {
908 setTimeout(function(){getImage(page, ((!attemptNumber) ? 1 : attemptNumber + 1));}, 500);
909 }
910 else
911 {
912 var image = $("<img>", {"src": gs.imageURLs.blank});
913 $(page.link).html("");
914 $(page.link).append(image);
915 page.isLoading = false;
916 page.noImage = true;
917 }
918 });
919 }
920
921 var startCheckFunction = function()
922 {
923 var checkFunction = function(forced)
924 {
925 //Don't bother checking if we haven't scrolled very far
926 if(Math.abs(_mainDiv.scrollLeft() - _prevScroll) > 100 || forced)
927 {
928 _prevScroll = _mainDiv.scrollLeft();
929 _checking = true;
930 var widgetLeft = _mainDiv.offset().left;
931 var widgetRight = widgetLeft + _mainDiv.width();
932
933 var visiblePages = new Array();
934 for(var i = 0; i < _links.length; i++)
935 {
936 var current = _links[i].cell;
937 var currentLeft = current.offset().left;
938 var currentRight = currentLeft + current.width();
939
940 if(currentRight > widgetLeft && currentLeft < widgetRight)
941 {
942 visiblePages.push(_links[i]);
943 }
944 }
945
946 for(var i = 0; i < visiblePages.length; i++)
947 {
948 var page = visiblePages[i];
949 if(!page || page.imageLoaded || page.noImage || page.isLoading)
950 {
951 continue;
952 }
953
954 page.isLoading = true;
955 getImage(page);
956 }
957 _checking = false;
958 }
959 }
960
961 setTimeout(checkFunction, 250);
962 setInterval(function(){checkFunction(true)}, 2000);
963 _mainDiv.scroll(checkFunction);
964 }
965
966 //***********
967 //CONSTRUCTOR
968 //***********
969
970 for(var i = 0; i < _links.length; i++)
971 {
972 var col = $("<td>");
973 _linkRow.append(col);
974 col.addClass("pageSliderCol");
975 _links[i].cell = col;
976
977 var link = $("<a>");
978 col.append(link);
979 _links[i].link = link;
980 var href = $(_links[i]).attr("href");
981 link.attr("href", href.replace(/\)/, ", 0, true)"));
982
983 if(!_linkCellMap[href])
984 {
985 _linkCellMap[href] = new Array();
986 }
987 _linkCellMap[href].push(_links[i]);
988
989 var loadingText = $("<p>Loading image</p>");
990 link.append(loadingText);
991
992 var image = $("<img>");
993 link.append(image);
994 image.attr("src", gs.imageURLs.loading);
995 _links[i].image = image;
996
997 var title = $(_links[i]).html();
998 var t_section = "";
999 var t_title = "";
1000 if (title.search(/tocSectionNumber/) != -1)
1001 {
1002 var matching_regex = /<span class=\"tocSectionNumber\">([0-9]+)<\/span>\s*(.+)$/;
1003 var matches_array = matching_regex.exec(title);
1004 if (matches_array.length == 3) {
1005 t_section = matches_array[1];
1006 t_title = matches_array[2];
1007 }
1008 }
1009
1010 _titles.push([title, _links[i], t_section, t_title]);
1011
1012 col.append($("<br>"));
1013 col.append(title);
1014 }
1015
1016 setUpFilterBox();
1017 setUpFilterButtons();
1018 startCheckFunction();
1019 }
1020
1021/***********************
1022* HIGHLIGHTING SCRIPTS *
1023***********************/
1024function swapHighlight(imageClicked)
1025{
1026 var hlCheckbox = $("#highlightOption");
1027 if(imageClicked)
1028 {
1029 // toggle the state of the checkbox
1030 $(hlCheckbox).prop("checked", !$(hlCheckbox).prop("checked"));
1031 }
1032 var from;
1033 var to;
1034 if(hlCheckbox.prop("checked"))
1035 {
1036 from = "noTermHighlight";
1037 to = "termHighlight";
1038 }
1039 else
1040 {
1041 from = "termHighlight";
1042 to = "noTermHighlight";
1043 }
1044
1045 var spans = $("span").each(function()
1046 {
1047 if($(this).hasClass(from))
1048 {
1049 $(this).removeClass(from);
1050 $(this).addClass(to);
1051 }
1052 });
1053}
1054
1055/**************************
1056* REALISTIC BOOKS SCRIPTS *
1057**************************/
1058
1059function bookInit()
1060{
1061 loadBook();
1062 hideText();
1063 showBook();
1064 swapLinkJavascript(false);
1065}
1066
1067function hideText()
1068{
1069 $("#gs-document-text").css("visibility", "hidden");
1070}
1071
1072function showText()
1073{
1074 $("#gs-document-text").css("visibility", "visible");
1075}
1076
1077function hideBook()
1078{
1079 $("#bookDiv, #bookObject, #bookEmbed").css({"visibility": "hidden", "height": "0px"});
1080}
1081
1082function showBook()
1083{
1084 $("#bookDiv, #bookObject, #bookEmbed").css({"visibility": "visible", "height": "600px"});
1085}
1086
1087function swapLinkJavascript(rbOn)
1088{
1089 var option = $("#rbOption");
1090 var optionImage = $("#rbOptionImage");
1091
1092 if(rbOn)
1093 {
1094 option.attr("onclick", "hideText(); showBook(); swapLinkJavascript(false);");
1095 optionImage.attr("onclick", "hideText(); showBook(); swapLinkJavascript(false);");
1096 $(option).prop("checked", false);
1097 }
1098 else
1099 {
1100 option.attr("onclick", "hideBook(); showText(); swapLinkJavascript(true);");
1101 optionImage.attr("onclick", "hideBook(); showText(); swapLinkJavascript(true);");
1102 $(option).prop("checked", true);
1103 }
1104}
1105
1106function loadBook()
1107{
1108 var doc_url = document.URL;
1109 doc_url = doc_url.replace(/(&|\?)book=[a-z]+/gi,'');
1110 doc_url += '&book=flashxml';
1111
1112 var img_cover = gs.collectionMetadata.httpPath + '/index/assoc/' + gs.documentMetadata.assocfilepath + '/cover.jpg';
1113
1114 var flash_plug_html = ""
1115 flash_plug_html += '<OBJECT align="middle" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" \n';
1116 flash_plug_html += ' height="600px" id="bookObject" swLiveConnect="true" \n';
1117 flash_plug_html += ' codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" \n';
1118 flash_plug_html += ' width="70%">\n';
1119 flash_plug_html += ' <PARAM name="allowScriptAccess" value="always" />\n';
1120 flash_plug_html += ' <PARAM name="movie" value="Book.swf';
1121 flash_plug_html += '?src_image=' + escape(img_cover);
1122 flash_plug_html += '&doc_url=' + escape(doc_url);
1123 flash_plug_html += '" />\n';
1124 flash_plug_html += ' <PARAM name="quality" value="high" />\n';
1125 flash_plug_html += ' <PARAM name="bgcolor" value="#FFFFFF" />\n';
1126 flash_plug_html += ' <EMBED align="middle" \n';
1127 flash_plug_html += ' allowScriptAccess="always" swLiveConnect="true" \n';
1128 flash_plug_html += ' bgcolor="#FFFFFF" height="600px" name="Book" \n';
1129 flash_plug_html += ' pluginspage="http://www.macromedia.com/go/getflashplayer" \n';
1130 flash_plug_html += ' quality="high" id="bookEmbed"\n';
1131 flash_plug_html += ' src="Book.swf';
1132 flash_plug_html += '?src_image=' + escape(img_cover);
1133 flash_plug_html += '&doc_url=' + escape(doc_url);
1134 flash_plug_html += '"\n';
1135 flash_plug_html += ' type="application/x-shockwave-flash" width="70%" />\n';
1136 flash_plug_html += '</OBJECT>\n';
1137 $("#bookdiv").html(flash_plug_html);
1138}
1139
1140/************************
1141* CHANGES SCRIPTS *
1142************************/
1143function addEditableState(editable,stateArray)
1144{
1145 if(editable.tagName == 'TEXTAREA')
1146 {
1147 nodeText = editable.value;
1148 }
1149 else
1150 {
1151 nodeText = editable.innerHTML;
1152 }
1153
1154 stateArray.push({
1155 editableNode : editable,
1156 initHTML : nodeText
1157 });
1158}
1159
1160function getLastEditableStates()
1161{
1162 editableLastStates = [];
1163 $(".sectionText").each(function(){addEditableState(this,editableLastStates);});
1164 $(".metaTableCellArea").each(function(){addEditableState(this,editableLastStates);});
1165
1166}
1167
1168function changesToUpdate()
1169{
1170 var resultArray = new Array();
1171 getLastEditableStates();
1172 for (var j in editableLastStates)
1173 {
1174 if (isNodeChanged(editableLastStates[j]))
1175 {
1176 resultArray.push(editableLastStates[j].editableNode);
1177 }
1178 }
1179 return resultArray;
1180}
1181
1182function isNodeChanged(StateToCheck){
1183 for (var i in editableInitStates)
1184 {
1185 if ((StateToCheck.editableNode === editableInitStates[i].editableNode) && StateToCheck.initHTML === editableInitStates[i].initHTML )
1186 {
1187 return false;
1188 }
1189
1190 }
1191 return true;
1192}
1193/************************
1194* METADATA EDIT SCRIPTS *
1195************************/
1196
1197function addEditMetadataLink(cell)
1198{
1199 cell = $(cell);
1200 var id = cell.attr("id").substring(6);
1201 var metaTable = gs.jqGet("meta" + id);
1202
1203 var row = cell.parent();
1204 var newCell = $("<td>", {"style": "font-size:0.7em; padding:0px 10px", "class": "editMetadataButton"});
1205 var linkSpan = $("<span>", {"class": "ui-state-default ui-corner-all", "style": "padding: 2px; float:left;"});
1206
1207 var linkLabel = $("<span>edit metadata</span>");
1208 var linkIcon = $("<span>", {"class": "ui-icon ui-icon-folder-collapsed"});
1209 newCell.linkIcon = linkIcon;
1210 newCell.linkLabel = linkLabel;
1211
1212 var uList = $("<ul>", {"style": "outline: 0 none; margin:0px; padding:0px;"});
1213 var labelItem = $("<li>", {"style": "float:left; list-style:none outside none;"});
1214 var iconItem = $("<li>", {"style": "float:left; list-style:none outside none;"});
1215
1216 uList.append(iconItem);
1217 uList.append(labelItem);
1218 labelItem.append(linkLabel);
1219 iconItem.append(linkIcon);
1220
1221 var newLink = $("<a>", {"href": "javascript:;"});
1222 newLink.click(function()
1223 {
1224 if(metaTable.css("display") == "none")
1225 {
1226 linkLabel.html("hide metadata");
1227 linkIcon.attr("class", "ui-icon ui-icon-folder-open");
1228 metaTable.css("display", "block");
1229 metaTable.metaNameField.css("display", "inline");
1230 metaTable.addRowButton.css("display", "inline");
1231 }
1232 else
1233 {
1234 linkLabel.html("edit metadata");
1235 linkIcon.attr("class", "ui-icon ui-icon-folder-collapsed");
1236 metaTable.css("display", "none");
1237 metaTable.metaNameField.css("display", "none");
1238 metaTable.addRowButton.css("display", "none");
1239 }
1240 });
1241
1242 newLink.append(uList);
1243 linkSpan.append(newLink);
1244 newCell.append(linkSpan);
1245 row.append(newCell);
1246
1247 addFunctionalityToTable(metaTable);
1248 metaTable.metaNameField.css("display", "none");
1249 metaTable.addRowButton.css("display", "none");
1250}
1251
1252function setEditingFeaturesVisible(visible)
1253{
1254 if(visible)
1255 {
1256 $("#editContentButton").html("Hide editor");
1257 $("#editContentButtonDiv").attr("class", "ui-state-default ui-corner-all");
1258 }
1259 else
1260 {
1261 $("#editContentButton").html("Edit content");
1262 $("#editContentButtonDiv").attr("class", "");
1263 }
1264
1265 var visibility = (visible ? "" : "none");
1266 $("#metadataListLabel, #metadataSetList").css("display", visibility);
1267
1268 $(".editMetadataButton").each(function()
1269 {
1270 $(this).css("display", visibility);
1271 $(this.linkLabel).html("edit metadata");
1272 $(this.linkIcon).attr("class", "ui-icon ui-icon-folder-collapsed");
1273 });
1274
1275 $("table").each(function()
1276 {
1277 if($(this).attr("id") && $(this).attr("id").search(/^meta/) != -1)
1278 {
1279 $(this).css("display", "none");
1280 $(this.metaNameField).css("display", "none");
1281 $(this.addRowButton).css("display", "none");
1282 }
1283 });
1284}
1285
1286/* override this function in other interface/site/collection if you want
1287 a different set of metadata sets
1288 Use in conjunction with the dynamic_metadata_set_list variable. */
1289function setStaticMetadataSets(list) {
1290 addOptionToList(list, "All", "All");
1291}
1292
1293function readyPageForEditing()
1294{
1295
1296 if($("#metadataSetList").length)
1297 {
1298 var setList = $("#metadataSetList");
1299 if(!setList.css("display") || setList.css("display") == "")
1300 {
1301 setEditingFeaturesVisible(false);
1302 }
1303 else
1304 {
1305 setEditingFeaturesVisible(true);
1306 }
1307 return;
1308 }
1309
1310 $("#editContentButton").html("Hide Editor");
1311 //wait for 0.5 sec to let ckeditor up
1312 setTimeout(function(){ $(".sectionText").each(function(){addEditableState(this,editableInitStates);}); }, 500);
1313
1314 var editBar = $("#editBarLeft");
1315
1316 var visibleMetadataList = $("<select>", {"id": "metadataSetList", "class": "ui-state-default"});
1317 setStaticMetadataSets(visibleMetadataList);
1318
1319 var metadataListLabel = $("<span>", {"id": "metadataListLabel", "style": "margin-left:20px;"});
1320 metadataListLabel.html("Visible metadata: ");
1321 editBar.append(metadataListLabel);
1322 editBar.append(visibleMetadataList);
1323 visibleMetadataList.change(onVisibleMetadataSetChange);
1324 editBar.append("<br>");
1325 for (var i=0; i< save_and_rebuild_buttons.length; i++) {
1326 var button_type = save_and_rebuild_buttons[i];
1327 if (button_type == "save") {
1328 var saveButton = $("<button>", {"id": "saveButton", "class": "ui-state-default ui-corner-all"});
1329 saveButton.click(save);
1330 saveButton.html(save_button_text);
1331 editBar.append(saveButton);
1332 } else if(button_type == "rebuild") {
1333 var rebuildButton = $("<button>", {"id": "rebuildButton", "class": "ui-state-default ui-corner-all"});
1334 rebuildButton.click(rebuildCurrentCollection);
1335 rebuildButton.html(rebuild_button_text);
1336 editBar.append(rebuildButton);
1337 } else if (button_type == "saveandrebuild") {
1338 var saveAndRebuildButton = $("<button>", {"id": "saveAndRebuildButton", "class": "ui-state-default ui-corner-all"});
1339 saveAndRebuildButton.click(saveAndRebuild);
1340 saveAndRebuildButton.html(save_and_rebuild_button_text);
1341 editBar.append(saveAndRebuildButton);
1342
1343 }
1344 }
1345 var statusBarDiv = $("<div>");
1346 editBar.append(statusBarDiv);
1347 _statusBar = new StatusBar(statusBarDiv[0]);
1348
1349 var titleDivs = $(".sectionTitle");
1350 for(var i = 0; i < titleDivs.length; i++)
1351 {
1352 addEditMetadataLink(titleDivs[i]);
1353 }
1354
1355 _baseURL = gs.xsltParams.library_name;
1356 onVisibleMetadataSetChange(); // make sure that the selected item in the list is active
1357}
1358
1359// override the one in documentmaker_scripts_util
1360// currently not used if other one is present. need to get the js include order right
1361function enableSaveButtons(enabled) {
1362 if (enabled) {
1363 $("#saveButton, #rebuildButton, #saveAndRebuildButton").removeAttr("disabled");
1364 } else {
1365 $("#saveButton, #rebuildButton, #saveAndRebuildButton").attr("disabled", "disabled");
1366 }
1367}
1368
1369/* this is a cut down version of save() from documentmaker_scripts_util.js
1370 going back to using save, will delete this once everything working*/
1371function saveMetadataChangesOld() {
1372
1373 console.log("Saving metadata changes");
1374
1375 // get collection name
1376 var collection = gs.cgiParams.c;;
1377
1378 // get document id
1379 var docID = gs.cgiParams.d;
1380
1381 var metadataChanges = new Array();
1382 if (_deletedMetadata.length > 0) {
1383
1384 for(var i = 0; i < _deletedMetadata.length; i++) {
1385
1386 var currentRow = _deletedMetadata[i];
1387
1388 //Get metadata name
1389 var cells = currentRow.getElementsByTagName("TD");
1390 var nameCell = cells[0];
1391 var name = nameCell.innerHTML;
1392 var valueCell = cells[1];
1393 var value = valueCell.innerHTML;
1394 metadataChanges.push({type:'delete', docID:docID, name:name, value:value});
1395 removeFromParent(currentRow);
1396 }
1397 }
1398
1399 /*var changes = null;
1400 //var changes = de.Changes.getChangedEditableSections();
1401 for(var i = 0; i < changes.length; i++) {
1402
1403 var changedElem = changes[i];
1404
1405 //Get metadata name
1406 var row = changedElem.parentNode;
1407 var cells = row.getElementsByTagName("TD");
1408 var nameCell = cells[0];
1409 var name = nameCell.innerHTML;
1410 var value = changedElem.innerHTML;
1411 value = value.replace(/&nbsp;/g, " ");
1412
1413 var orig = changedElem.originalValue;
1414 if (orig) {
1415 orig = orig.replace(/&nbsp;/g, " ");
1416 }
1417 metadataChanges.push({collection:collection, docID:docID, name:name, value:value, orig:orig});
1418 changedElem.originalValue = changedElem.innerHTML;
1419
1420 }
1421*/
1422 if (metadataChanges.length ==0) {
1423 console.log ("... No changes detected. ");
1424 return;
1425 }
1426
1427 var processChangesLoop = function(index)
1428 {
1429 var change = metadataChanges[index];
1430
1431 var callbackFunction;
1432 if(index + 1 == metadataChanges.length)
1433 {
1434 callbackFunction = function(){console.log("Completed saving metadata changes. You must rebuild the collection for the changes to take effect.");};
1435 }
1436 else
1437 {
1438 callbackFunction = function(){processChangesLoop(index + 1)};
1439 }
1440 if (change.type == "delete") {
1441 gs.functions.removeArchivesMetadata(collection, gs.xsltParams.site_name, change.docID, change.name, null, change.value, function(){callbackFunction();});
1442 } else {
1443 if(change.orig)
1444 {
1445 gs.functions.setArchivesMetadata(collection, gs.xsltParams.site_name, docID, change.name, null, change.value, change.orig, "override", function(){callbackFunction();});
1446 }
1447 else
1448 {
1449 gs.functions.setArchivesMetadata(collection, gs.xsltParams.site_name, docID, change.name, null, change.value, null, "accumulate", function(){callbackFunction();});
1450 }
1451 }
1452 }
1453 processChangesLoop(0);
1454 /* need to clear the changes from the page */
1455 while (_deletedMetadata.length>0) {
1456 _deletedMetadata.pop();
1457 }
1458
1459}
1460
1461
1462
1463
1464
1465/***************
1466* MENU SCRIPTS *
1467***************/
1468function moveScroller() {
1469 var move = function() {
1470 var editbar = $("#editBar");
1471 var st = $(window).scrollTop();
1472 var fa = $("#float-anchor").offset().top;
1473 if(st > fa) {
1474
1475 editbar.css({
1476 position: "fixed",
1477 top: "0px",
1478 width: editbar.data("width"),
1479 //width: "30%"
1480 });
1481 } else {
1482 editbar.data("width", editbar.css("width"));
1483 editbar.css({
1484 position: "relative",
1485 top: "",
1486 width: ""
1487 });
1488 }
1489 };
1490 $(window).scroll(move);
1491 move();
1492}
1493
1494
1495function floatMenu(enabled)
1496{
1497 var menu = $(".tableOfContentsContainer");
1498 if(enabled)
1499 {
1500 menu.data("position", menu.css("position"));
1501 menu.data("width", menu.css("width"));
1502 menu.data("right", menu.css("right"));
1503 menu.data("top", menu.css("top"));
1504 menu.data("max-height", menu.css("max-height"));
1505 menu.data("overflow", menu.css("overflow"));
1506 menu.data("z-index", menu.css("z-index"));
1507
1508 menu.css("position", "fixed");
1509 menu.css("width", "300px");
1510 menu.css("right", "0px");
1511 menu.css("top", "100px");
1512 menu.css("max-height", "600px");
1513 menu.css("overflow", "auto");
1514 menu.css("z-index", "200");
1515
1516 $("#unfloatTOCButton").show();
1517 }
1518 else
1519 {
1520 menu.css("position", menu.data("position"));
1521 menu.css("width", menu.data("width"));
1522 menu.css("right", menu.data("right"));
1523 menu.css("top", menu.data("top"));
1524 menu.css("max-height", menu.data("max-height"));
1525 menu.css("overflow", menu.data("overflow"));
1526 menu.css("z-index", menu.data("z-index"));
1527
1528 $("#unfloatTOCButton").hide();
1529 $("#floatTOCToggle").prop("checked", false);
1530 }
1531
1532 var url = gs.xsltParams.library_name + "?a=d&ftoc=" + (enabled ? "1" : "0") + "&c=" + gs.cgiParams.c;
1533
1534 $.ajax(url);
1535}
1536
1537/********************
1538* SLIDESHOW SCRIPTS *
1539********************/
1540
1541function showSlideShow()
1542{
1543 if(!($("#gs-slideshow").length))
1544 {
1545 var slideshowDiv = $("<div>", {id:"gs-slideshow", style:"height:100%;"});
1546 var loadingImage = $("<img>", {src:gs.imageURLs.loading});
1547 slideshowDiv.append(loadingImage);
1548
1549 $.blockUI({message: $(slideshowDiv), css:{top: "5%", left: "5%", width: "90%", height: "90%", overflow: "auto", cursor: "auto"}});
1550
1551 retrieveImagesForSlideShow(function(imageIDArray)
1552 {
1553 loadingImage.hide();
1554 if(imageIDArray && imageIDArray.length > 0)
1555 {
1556 var imageURLs = new Array();
1557 for(var i = 0; i < imageIDArray.length; i++)
1558 {
1559 if(imageIDArray[i].source && imageIDArray[i].source.search(/.*\.(gif|jpg|jpeg|png)$/) != -1)
1560 {
1561 imageURLs.push(gs.collectionMetadata.httpPath + "/index/assoc/" + gs.documentMetadata.assocfilepath + "/" + imageIDArray[i].source);
1562 }
1563 }
1564 new SlideShowWidget(slideshowDiv, imageURLs, imageIDArray);
1565 }
1566 });
1567 }
1568 else
1569 {
1570 $("#gs-slideshow").show();
1571 }
1572}
1573
1574function retrieveImagesForSlideShow(callback)
1575{
1576 var template = "";
1577 template += '<xsl:template match="/">';
1578 template += '<images>[';
1579 template += '<xsl:for-each select="//documentNode">';
1580 template += '<xsl:text disable-output-escaping="yes">{"source":"</xsl:text><gsf:metadata name="Source"/><xsl:text disable-output-escaping="yes">",</xsl:text>';
1581 template += '<xsl:text disable-output-escaping="yes">"id":"</xsl:text><xsl:value-of select="@nodeID"/><xsl:text disable-output-escaping="yes">"}</xsl:text>';
1582 template += '<xsl:if test="position() != count(//documentNode)">,</xsl:if>';
1583 template += '</xsl:for-each>';
1584 template += ']</images>';
1585 template += '</xsl:template>';
1586
1587 var url = gs.xsltParams.library_name + "/collection/" + gs.cgiParams.c + "/document/" + gs.cgiParams.d + "?ed=1&ilt=" + template.replace(" ", "%20");
1588
1589 $.ajax(
1590 {
1591 url:url,
1592 success: function(data)
1593 {
1594 var startIndex = data.indexOf(">", data.indexOf(">") + 1) + 1;
1595 var endIndex = data.lastIndexOf("<");
1596 var arrayString = data.substring(startIndex, endIndex);
1597 var imageIDArray = eval(arrayString);
1598
1599 callback(imageIDArray);
1600 }
1601 });
1602}
1603
1604function SlideShowWidget(mainDiv, images, idArray)
1605{
1606 var _inTransition = false;
1607 var _images = new Array();
1608 var _mainDiv = mainDiv;
1609 var _imageDiv = $("<div>", {id:"ssImageDiv", style:"height:95%; overflow:auto;"});
1610 var _navDiv = $("<div>", {style:"height:5%;"});
1611 var _nextButton = $("<img>", {src:gs.imageURLs.next, style:"float:right; cursor:pointer;"});
1612 var _prevButton = $("<img>", {src:gs.imageURLs.prev, style:"float:left; cursor:pointer; display:none;"});
1613 var _closeLink = $("<a href=\"javascript:$.unblockUI()\">Close Slideshow</a>");
1614 var _clearDiv = $("<div>", {style:"clear:both;"});
1615 var _currentIndex = 0;
1616
1617 _navDiv.append(_nextButton);
1618 _navDiv.append(_closeLink);
1619 _navDiv.append(_prevButton);
1620 _navDiv.append(_clearDiv);
1621 _mainDiv.append(_navDiv);
1622 _mainDiv.append(_imageDiv);
1623
1624 for(var i = 0; i < images.length; i++)
1625 {
1626 _images.push($("<img>", {src:images[i], "class":"slideshowImage"}));
1627 }
1628
1629 if(_images.length < 2)
1630 {
1631 _nextButton.css("display", "none");
1632 }
1633
1634 _imageDiv.append(_images[0]);
1635
1636 this.nextImage = function()
1637 {
1638 if(!_inTransition)
1639 {
1640 _inTransition = true;
1641 if((_currentIndex + 1) < _images.length)
1642 {
1643 _prevButton.css("display", "");
1644 if(_currentIndex + 1 == _images.length - 1)
1645 {
1646 _nextButton.css("display", "none");
1647 }
1648
1649 _imageDiv.fadeOut(500, function()
1650 {
1651 _imageDiv.empty();
1652 _imageDiv.append(_images[_currentIndex + 1]);
1653 _currentIndex++;
1654 _imageDiv.fadeIn(500, function()
1655 {
1656 _inTransition = false;
1657 });
1658 });
1659 }
1660 else
1661 {
1662 _inTransition = false;
1663 }
1664 }
1665 }
1666
1667 this.prevImage = function()
1668 {
1669 if(!_inTransition)
1670 {
1671 _inTransition = true;
1672 if((_currentIndex - 1) >= 0)
1673 {
1674 _nextButton.css("display", "");
1675 if(_currentIndex - 1 == 0)
1676 {
1677 _prevButton.css("display", "none");
1678 }
1679
1680 _imageDiv.fadeOut(500, function()
1681 {
1682 _imageDiv.empty();
1683 _imageDiv.append(_images[_currentIndex - 1]);
1684 _currentIndex--;
1685 _imageDiv.fadeIn(500, function()
1686 {
1687 _inTransition = false;
1688 });
1689 });
1690 }
1691 else
1692 {
1693 _inTransition = false;
1694 }
1695 }
1696 }
1697
1698 var getRootFilenameFromURL = function(url)
1699 {
1700 var urlSegments = url.split("/");
1701 var filename = urlSegments[urlSegments.length - 1];
1702 return filename.replace(/_thumb\..*$/, "");
1703 }
1704
1705 var setLink = function(currentLink, index)
1706 {
1707 $(currentLink).click(function()
1708 {
1709 _inTransition = true;
1710 _currentIndex = index;
1711 _imageDiv.fadeOut(500, function()
1712 {
1713 _imageDiv.empty();
1714 _imageDiv.append(_images[_currentIndex]);
1715 _imageDiv.fadeIn(500, function()
1716 {
1717 _inTransition = false;
1718 });
1719 });
1720 });
1721 }
1722
1723 var sliderLinks = $(".pageSliderCol a");
1724 for(var i = 0; i < sliderLinks.length; i++)
1725 {
1726 var currentLink = sliderLinks[i];
1727 var id = $(currentLink).attr("href").split("'")[1];
1728
1729 for(var j = 0; j < idArray.length; j++)
1730 {
1731 if(idArray[j].id == id)
1732 {
1733 var image = idArray[j].source;
1734
1735 for(var l = 0; l < images.length; l++)
1736 {
1737 var filename = getRootFilenameFromURL(images[l]);
1738 if (filename == image)
1739 {
1740 setLink(currentLink, l);
1741 break;
1742 }
1743 }
1744
1745 break;
1746 }
1747 }
1748 }
1749
1750 _nextButton.click(this.nextImage);
1751 _prevButton.click(this.prevImage);
1752}
Note: See TracBrowser for help on using the repository browser.