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

Last change on this file since 29978 was 29978, checked in by Georgiy Litvinov, 9 years ago

Fix for web editor. Moved to textarea for metadata fields.

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