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

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

renamed interfaces

  • Property svn:executable set to *
File size: 44.0 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 stateArray.push({
1092 editableNode : editable,
1093 initHTML : editable.innerHTML
1094 });
1095}
1096
1097function getLastEditableStates()
1098{
1099 editableLastStates = [];
1100 $(".sectionText").each(function(){addEditableState(this,editableLastStates);});
1101 $(".metaTableCell").each(function(){addEditableState(this,editableLastStates);});
1102
1103}
1104
1105function changesToUpdate()
1106{
1107 var resultArray = new Array();
1108 getLastEditableStates();
1109 for (var j in editableLastStates)
1110 {
1111 if (isNodeChanged(editableLastStates[j]))
1112 {
1113 resultArray.push(editableLastStates[j].editableNode);
1114 }
1115 }
1116 return resultArray;
1117}
1118
1119function isNodeChanged(StateToCheck){
1120 for (var i in editableInitStates)
1121 {
1122 if ((StateToCheck.editableNode === editableInitStates[i].editableNode) && StateToCheck.initHTML === editableInitStates[i].initHTML )
1123 {
1124 return false;
1125 }
1126
1127 }
1128 return true;
1129}
1130/************************
1131* METADATA EDIT SCRIPTS *
1132************************/
1133
1134function addEditMetadataLink(cell)
1135{
1136 cell = $(cell);
1137 var id = cell.attr("id").substring(6);
1138 var metaTable = gs.jqGet("meta" + id);
1139
1140 var row = cell.parent();
1141 var newCell = $("<td>", {"style": "font-size:0.7em; padding:0px 10px", "class": "editMetadataButton"});
1142 var linkSpan = $("<span>", {"class": "ui-state-default ui-corner-all", "style": "padding: 2px; float:left;"});
1143
1144 var linkLabel = $("<span>edit metadata</span>");
1145 var linkIcon = $("<span>", {"class": "ui-icon ui-icon-folder-collapsed"});
1146 newCell.linkIcon = linkIcon;
1147 newCell.linkLabel = linkLabel;
1148
1149 var uList = $("<ul>", {"style": "outline: 0 none; margin:0px; padding:0px;"});
1150 var labelItem = $("<li>", {"style": "float:left; list-style:none outside none;"});
1151 var iconItem = $("<li>", {"style": "float:left; list-style:none outside none;"});
1152
1153 uList.append(iconItem);
1154 uList.append(labelItem);
1155 labelItem.append(linkLabel);
1156 iconItem.append(linkIcon);
1157
1158 var newLink = $("<a>", {"href": "javascript:;"});
1159 newLink.click(function()
1160 {
1161 if(metaTable.css("display") == "none")
1162 {
1163 linkLabel.html("hide metadata");
1164 linkIcon.attr("class", "ui-icon ui-icon-folder-open");
1165 metaTable.css("display", "block");
1166 metaTable.metaNameField.css("display", "inline");
1167 metaTable.addRowButton.css("display", "inline");
1168 }
1169 else
1170 {
1171 linkLabel.html("edit metadata");
1172 linkIcon.attr("class", "ui-icon ui-icon-folder-collapsed");
1173 metaTable.css("display", "none");
1174 metaTable.metaNameField.css("display", "none");
1175 metaTable.addRowButton.css("display", "none");
1176 }
1177 });
1178
1179 newLink.append(uList);
1180 linkSpan.append(newLink);
1181 newCell.append(linkSpan);
1182 row.append(newCell);
1183
1184 addFunctionalityToTable(metaTable);
1185 metaTable.metaNameField.css("display", "none");
1186 metaTable.addRowButton.css("display", "none");
1187}
1188
1189function setEditingFeaturesVisible(visible)
1190{
1191 if(visible)
1192 {
1193 $("#editContentButton").html("Hide editor");
1194 $("#editContentButtonDiv").attr("class", "ui-state-default ui-corner-all");
1195 }
1196 else
1197 {
1198 $("#editContentButton").html("Edit content");
1199 $("#editContentButtonDiv").attr("class", "");
1200 }
1201
1202 var visibility = (visible ? "" : "none");
1203 $("#metadataListLabel, #metadataSetList").css("display", visibility);
1204
1205 $(".editMetadataButton").each(function()
1206 {
1207 $(this).css("display", visibility);
1208 $(this.linkLabel).html("edit metadata");
1209 $(this.linkIcon).attr("class", "ui-icon ui-icon-folder-collapsed");
1210 });
1211
1212 $("table").each(function()
1213 {
1214 if($(this).attr("id") && $(this).attr("id").search(/^meta/) != -1)
1215 {
1216 $(this).css("display", "none");
1217 $(this.metaNameField).css("display", "none");
1218 $(this.addRowButton).css("display", "none");
1219 }
1220 });
1221}
1222
1223/* override this function in other interface/site/collection if you want
1224 a different set of metadata sets
1225 Use in conjunction with the dynamic_metadata_set_list variable. */
1226function setStaticMetadataSets(list) {
1227 addOptionToList(list, "All", "All");
1228}
1229
1230function readyPageForEditing()
1231{
1232
1233 if($("#metadataSetList").length)
1234 {
1235 var setList = $("#metadataSetList");
1236 if(!setList.css("display") || setList.css("display") == "")
1237 {
1238 setEditingFeaturesVisible(false);
1239 }
1240 else
1241 {
1242 setEditingFeaturesVisible(true);
1243 }
1244 return;
1245 }
1246
1247 $("#editContentButton").html("Hide Editor");
1248 //wait for 0.5 sec to let ckeditor up
1249 setTimeout(function(){ $(".sectionText").each(function(){addEditableState(this,editableInitStates);}); }, 500);
1250
1251 var editBar = $("#editBarLeft");
1252
1253 var visibleMetadataList = $("<select>", {"id": "metadataSetList", "class": "ui-state-default"});
1254 setStaticMetadataSets(visibleMetadataList);
1255
1256 var metadataListLabel = $("<span>", {"id": "metadataListLabel", "style": "margin-left:20px;"});
1257 metadataListLabel.html("Visible metadata: ");
1258 editBar.append(metadataListLabel);
1259 editBar.append(visibleMetadataList);
1260 visibleMetadataList.change(onVisibleMetadataSetChange);
1261 editBar.append("<br>");
1262 for (var i=0; i< save_and_rebuild_buttons.length; i++) {
1263 var button_type = save_and_rebuild_buttons[i];
1264 if (button_type == "save") {
1265 var saveButton = $("<button>", {"id": "saveButton", "class": "ui-state-default ui-corner-all"});
1266 saveButton.click(save);
1267 saveButton.html(save_button_text);
1268 editBar.append(saveButton);
1269 } else if(button_type == "rebuild") {
1270 var rebuildButton = $("<button>", {"id": "rebuildButton", "class": "ui-state-default ui-corner-all"});
1271 rebuildButton.click(rebuildCurrentCollection);
1272 rebuildButton.html(rebuild_button_text);
1273 editBar.append(rebuildButton);
1274 } else if (button_type == "saveandrebuild") {
1275 var saveAndRebuildButton = $("<button>", {"id": "saveAndRebuildButton", "class": "ui-state-default ui-corner-all"});
1276 saveAndRebuildButton.click(saveAndRebuild);
1277 saveAndRebuildButton.html(save_and_rebuild_button_text);
1278 editBar.append(saveAndRebuildButton);
1279
1280 }
1281 }
1282 var statusBarDiv = $("<div>");
1283 editBar.append(statusBarDiv);
1284 _statusBar = new StatusBar(statusBarDiv[0]);
1285
1286 var titleDivs = $(".sectionTitle");
1287 for(var i = 0; i < titleDivs.length; i++)
1288 {
1289 addEditMetadataLink(titleDivs[i]);
1290 }
1291
1292 _baseURL = gs.xsltParams.library_name;
1293 onVisibleMetadataSetChange(); // make sure that the selected item in the list is active
1294}
1295
1296// override the one in documentmaker_scripts_util
1297// currently not used if other one is present. need to get the js include order right
1298function enableSaveButtons(enabled) {
1299 if (enabled) {
1300 $("#saveButton, #rebuildButton, #saveAndRebuildButton").removeAttr("disabled");
1301 } else {
1302 $("#saveButton, #rebuildButton, #saveAndRebuildButton").attr("disabled", "disabled");
1303 }
1304}
1305
1306/* this is a cut down version of save() from documentmaker_scripts_util.js
1307 going back to using save, will delete this once everything working*/
1308function saveMetadataChangesOld() {
1309
1310 console.log("Saving metadata changes");
1311
1312 // get collection name
1313 var collection = gs.cgiParams.c;;
1314
1315 // get document id
1316 var docID = gs.cgiParams.d;
1317
1318 var metadataChanges = new Array();
1319 if (_deletedMetadata.length > 0) {
1320
1321 for(var i = 0; i < _deletedMetadata.length; i++) {
1322
1323 var currentRow = _deletedMetadata[i];
1324
1325 //Get metadata name
1326 var cells = currentRow.getElementsByTagName("TD");
1327 var nameCell = cells[0];
1328 var name = nameCell.innerHTML;
1329 var valueCell = cells[1];
1330 var value = valueCell.innerHTML;
1331 metadataChanges.push({type:'delete', docID:docID, name:name, value:value});
1332 removeFromParent(currentRow);
1333 }
1334 }
1335
1336 var changes = de.Changes.getChangedEditableSections();
1337 for(var i = 0; i < changes.length; i++) {
1338
1339 var changedElem = changes[i];
1340
1341 //Get metadata name
1342 var row = changedElem.parentNode;
1343 var cells = row.getElementsByTagName("TD");
1344 var nameCell = cells[0];
1345 var name = nameCell.innerHTML;
1346 var value = changedElem.innerHTML;
1347 value = value.replace(/&nbsp;/g, " ");
1348
1349 var orig = changedElem.originalValue;
1350 if (orig) {
1351 orig = orig.replace(/&nbsp;/g, " ");
1352 }
1353 metadataChanges.push({collection:collection, docID:docID, name:name, value:value, orig:orig});
1354 changedElem.originalValue = changedElem.innerHTML;
1355
1356 }
1357
1358 if (metadataChanges.length ==0) {
1359 console.log ("... No changes detected. ");
1360 return;
1361 }
1362
1363 var processChangesLoop = function(index)
1364 {
1365 var change = metadataChanges[index];
1366
1367 var callbackFunction;
1368 if(index + 1 == metadataChanges.length)
1369 {
1370 callbackFunction = function(){console.log("Completed saving metadata changes. You must rebuild the collection for the changes to take effect.");};
1371 }
1372 else
1373 {
1374 callbackFunction = function(){processChangesLoop(index + 1)};
1375 }
1376 if (change.type == "delete") {
1377 gs.functions.removeArchivesMetadata(collection, gs.xsltParams.site_name, change.docID, change.name, null, change.value, function(){callbackFunction();});
1378 } else {
1379 if(change.orig)
1380 {
1381 gs.functions.setArchivesMetadata(collection, gs.xsltParams.site_name, docID, change.name, null, change.value, change.orig, "override", function(){callbackFunction();});
1382 }
1383 else
1384 {
1385 gs.functions.setArchivesMetadata(collection, gs.xsltParams.site_name, docID, change.name, null, change.value, null, "accumulate", function(){callbackFunction();});
1386 }
1387 }
1388 }
1389 processChangesLoop(0);
1390 /* need to clear the changes from the page */
1391 de.Changes.clear();
1392 while (_deletedMetadata.length>0) {
1393 _deletedMetadata.pop();
1394 }
1395
1396}
1397
1398
1399
1400
1401
1402/***************
1403* MENU SCRIPTS *
1404***************/
1405function moveScroller() {
1406 var move = function() {
1407 var editbar = $("#editBar");
1408 var st = $(window).scrollTop();
1409 var fa = $("#float-anchor").offset().top;
1410 if(st > fa) {
1411
1412 editbar.css({
1413 position: "fixed",
1414 top: "0px",
1415 width: editbar.data("width"),
1416 //width: "30%"
1417 });
1418 } else {
1419 editbar.data("width", editbar.css("width"));
1420 editbar.css({
1421 position: "relative",
1422 top: "",
1423 width: ""
1424 });
1425 }
1426 };
1427 $(window).scroll(move);
1428 move();
1429}
1430
1431
1432function floatMenu(enabled)
1433{
1434 var menu = $(".tableOfContentsContainer");
1435 if(enabled)
1436 {
1437 menu.data("position", menu.css("position"));
1438 menu.data("width", menu.css("width"));
1439 menu.data("right", menu.css("right"));
1440 menu.data("top", menu.css("top"));
1441 menu.data("max-height", menu.css("max-height"));
1442 menu.data("overflow", menu.css("overflow"));
1443 menu.data("z-index", menu.css("z-index"));
1444
1445 menu.css("position", "fixed");
1446 menu.css("width", "300px");
1447 menu.css("right", "0px");
1448 menu.css("top", "100px");
1449 menu.css("max-height", "600px");
1450 menu.css("overflow", "auto");
1451 menu.css("z-index", "200");
1452
1453 $("#unfloatTOCButton").show();
1454 }
1455 else
1456 {
1457 menu.css("position", menu.data("position"));
1458 menu.css("width", menu.data("width"));
1459 menu.css("right", menu.data("right"));
1460 menu.css("top", menu.data("top"));
1461 menu.css("max-height", menu.data("max-height"));
1462 menu.css("overflow", menu.data("overflow"));
1463 menu.css("z-index", menu.data("z-index"));
1464
1465 $("#unfloatTOCButton").hide();
1466 $("#floatTOCToggle").prop("checked", false);
1467 }
1468
1469 var url = gs.xsltParams.library_name + "?a=d&ftoc=" + (enabled ? "1" : "0") + "&c=" + gs.cgiParams.c;
1470
1471 $.ajax(url);
1472}
1473
1474/********************
1475* SLIDESHOW SCRIPTS *
1476********************/
1477
1478function showSlideShow()
1479{
1480 if(!($("#gs-slideshow").length))
1481 {
1482 var slideshowDiv = $("<div>", {id:"gs-slideshow", style:"height:100%;"});
1483 var loadingImage = $("<img>", {src:gs.imageURLs.loading});
1484 slideshowDiv.append(loadingImage);
1485
1486 $.blockUI({message: $(slideshowDiv), css:{top: "5%", left: "5%", width: "90%", height: "90%", overflow: "auto", cursor: "auto"}});
1487
1488 retrieveImagesForSlideShow(function(imageIDArray)
1489 {
1490 loadingImage.hide();
1491 if(imageIDArray && imageIDArray.length > 0)
1492 {
1493 var imageURLs = new Array();
1494 for(var i = 0; i < imageIDArray.length; i++)
1495 {
1496 if(imageIDArray[i].source && imageIDArray[i].source.search(/.*\.(gif|jpg|jpeg|png)$/) != -1)
1497 {
1498 imageURLs.push(gs.collectionMetadata.httpPath + "/index/assoc/" + gs.documentMetadata.assocfilepath + "/" + imageIDArray[i].source);
1499 }
1500 }
1501 new SlideShowWidget(slideshowDiv, imageURLs, imageIDArray);
1502 }
1503 });
1504 }
1505 else
1506 {
1507 $("#gs-slideshow").show();
1508 }
1509}
1510
1511function retrieveImagesForSlideShow(callback)
1512{
1513 var template = "";
1514 template += '<xsl:template match="/">';
1515 template += '<images>[';
1516 template += '<xsl:for-each select="//documentNode">';
1517 template += '<xsl:text disable-output-escaping="yes">{"source":"</xsl:text><gsf:metadata name="Source"/><xsl:text disable-output-escaping="yes">",</xsl:text>';
1518 template += '<xsl:text disable-output-escaping="yes">"id":"</xsl:text><xsl:value-of select="@nodeID"/><xsl:text disable-output-escaping="yes">"}</xsl:text>';
1519 template += '<xsl:if test="position() != count(//documentNode)">,</xsl:if>';
1520 template += '</xsl:for-each>';
1521 template += ']</images>';
1522 template += '</xsl:template>';
1523
1524 var url = gs.xsltParams.library_name + "/collection/" + gs.cgiParams.c + "/document/" + gs.cgiParams.d + "?ed=1&ilt=" + template.replace(" ", "%20");
1525
1526 $.ajax(
1527 {
1528 url:url,
1529 success: function(data)
1530 {
1531 var startIndex = data.indexOf(">", data.indexOf(">") + 1) + 1;
1532 var endIndex = data.lastIndexOf("<");
1533 var arrayString = data.substring(startIndex, endIndex);
1534 var imageIDArray = eval(arrayString);
1535
1536 callback(imageIDArray);
1537 }
1538 });
1539}
1540
1541function SlideShowWidget(mainDiv, images, idArray)
1542{
1543 var _inTransition = false;
1544 var _images = new Array();
1545 var _mainDiv = mainDiv;
1546 var _imageDiv = $("<div>", {id:"ssImageDiv", style:"height:95%; overflow:auto;"});
1547 var _navDiv = $("<div>", {style:"height:5%;"});
1548 var _nextButton = $("<img>", {src:gs.imageURLs.next, style:"float:right; cursor:pointer;"});
1549 var _prevButton = $("<img>", {src:gs.imageURLs.prev, style:"float:left; cursor:pointer; display:none;"});
1550 var _closeLink = $("<a href=\"javascript:$.unblockUI()\">Close Slideshow</a>");
1551 var _clearDiv = $("<div>", {style:"clear:both;"});
1552 var _currentIndex = 0;
1553
1554 _navDiv.append(_nextButton);
1555 _navDiv.append(_closeLink);
1556 _navDiv.append(_prevButton);
1557 _navDiv.append(_clearDiv);
1558 _mainDiv.append(_navDiv);
1559 _mainDiv.append(_imageDiv);
1560
1561 for(var i = 0; i < images.length; i++)
1562 {
1563 _images.push($("<img>", {src:images[i], "class":"slideshowImage"}));
1564 }
1565
1566 if(_images.length < 2)
1567 {
1568 _nextButton.css("display", "none");
1569 }
1570
1571 _imageDiv.append(_images[0]);
1572
1573 this.nextImage = function()
1574 {
1575 if(!_inTransition)
1576 {
1577 _inTransition = true;
1578 if((_currentIndex + 1) < _images.length)
1579 {
1580 _prevButton.css("display", "");
1581 if(_currentIndex + 1 == _images.length - 1)
1582 {
1583 _nextButton.css("display", "none");
1584 }
1585
1586 _imageDiv.fadeOut(500, function()
1587 {
1588 _imageDiv.empty();
1589 _imageDiv.append(_images[_currentIndex + 1]);
1590 _currentIndex++;
1591 _imageDiv.fadeIn(500, function()
1592 {
1593 _inTransition = false;
1594 });
1595 });
1596 }
1597 else
1598 {
1599 _inTransition = false;
1600 }
1601 }
1602 }
1603
1604 this.prevImage = function()
1605 {
1606 if(!_inTransition)
1607 {
1608 _inTransition = true;
1609 if((_currentIndex - 1) >= 0)
1610 {
1611 _nextButton.css("display", "");
1612 if(_currentIndex - 1 == 0)
1613 {
1614 _prevButton.css("display", "none");
1615 }
1616
1617 _imageDiv.fadeOut(500, function()
1618 {
1619 _imageDiv.empty();
1620 _imageDiv.append(_images[_currentIndex - 1]);
1621 _currentIndex--;
1622 _imageDiv.fadeIn(500, function()
1623 {
1624 _inTransition = false;
1625 });
1626 });
1627 }
1628 else
1629 {
1630 _inTransition = false;
1631 }
1632 }
1633 }
1634
1635 var getRootFilenameFromURL = function(url)
1636 {
1637 var urlSegments = url.split("/");
1638 var filename = urlSegments[urlSegments.length - 1];
1639 return filename.replace(/_thumb\..*$/, "");
1640 }
1641
1642 var setLink = function(currentLink, index)
1643 {
1644 $(currentLink).click(function()
1645 {
1646 _inTransition = true;
1647 _currentIndex = index;
1648 _imageDiv.fadeOut(500, function()
1649 {
1650 _imageDiv.empty();
1651 _imageDiv.append(_images[_currentIndex]);
1652 _imageDiv.fadeIn(500, function()
1653 {
1654 _inTransition = false;
1655 });
1656 });
1657 });
1658 }
1659
1660 var sliderLinks = $(".pageSliderCol a");
1661 for(var i = 0; i < sliderLinks.length; i++)
1662 {
1663 var currentLink = sliderLinks[i];
1664 var id = $(currentLink).attr("href").split("'")[1];
1665
1666 for(var j = 0; j < idArray.length; j++)
1667 {
1668 if(idArray[j].id == id)
1669 {
1670 var image = idArray[j].source;
1671
1672 for(var l = 0; l < images.length; l++)
1673 {
1674 var filename = getRootFilenameFromURL(images[l]);
1675 if (filename == image)
1676 {
1677 setLink(currentLink, l);
1678 break;
1679 }
1680 }
1681
1682 break;
1683 }
1684 }
1685 }
1686
1687 _nextButton.click(this.nextImage);
1688 _prevButton.click(this.prevImage);
1689}
Note: See TracBrowser for help on using the repository browser.