관리-도구
편집 파일: slideshow.js
/******************************************* * * Slideshow plugin for CrushFTP * v1.0 completed 7/29/2010 * *******************************************/ (function($) { $.fn.slideshow = function(path, options) { var i = 0; for(i in $.fn.slideshow.stack) { if($.fn.slideshow.stack[i].root == this.selector) break; } if(i < $.fn.slideshow.stack.length) { var obj = $.fn.slideshow.stack[i]; obj.Reload(path); $(obj.root).show();//('option', 'position', 'center').dialog('open'); if(obj.stageSlideshow) { if(obj.stageSlideshow.nav.auto) obj.stageSlideshow.nav.timeout = setTimeout(obj.stageSlideshow.nav.func, obj.stageSlideshow.nav.interval); } } else { var opts = $.extend({}, $.fn.slideshow.defaults, options); slideshow = new Slideshow(path, this.selector, opts); } return this; }; $.fn.slideshow.defaults = { files : null, stage : 'list', minWidth: 600, minHeight: 600, width: 800, height: 600, fullscreen: false, slideshowOnly: false, stageShadowHeight: 20, scrollbarThickness: 20, imageFadeTime: 500, imageDeleteTime: 500, stageFadeTime: 500, stageListThumbPadding: 20, stageSlideshowPrefetchWaitTime: 50, stageSlideshowIntervalMinTime: 1000, stageSlideshowIntervalMaxTime: 10000, stageSlideshowIntervalDefaultTime: 3000, stageSlideshowIntervalStep: 1000 }; $.fn.slideshow.stack = new Array(); function Slideshow(path, selector, opts) { this.path = path; this.root = selector; this.opts = opts; this.index = $.fn.slideshow.stack.push(this) - 1; var obj = this; obj.FilesInit(obj.opts.files, function(){ obj.ContainerInit(); }); } Slideshow.prototype.ExternalDownload = function(path, callback) { downloadItem(path); callback(); } Slideshow.prototype.ExternalUpload = function(path, callback) { //Success = true when something was actually uploaded //Success = false when nothing was uploaded (this is an optimization) hashListener.setHash(path); browserUploader(); //success = true; //callback(success); } Slideshow.prototype.ExternalDelete = function(path, callback) { //Success = true when something was deleted successfully //Success = false when nothing was deleted or there was an error (this is an optimization) if(confirm("Are you sure you wish to delete " + path + "?")) { performDeleteAction(path,callback); } } Slideshow.prototype.FilesInit = function(files, callback) { $("div#container").before('<div class="mainProcessIndicator"><img src="/WebInterface/jQuery/images/process_indicator.gif" alt="Loading..." /></div>'); $('div.mainProcessIndicator').show(); var params = [['name', 'name'], ['path', 'base64path'], ['desc', 'keywords'], ['date', 'dateformatted'], ['size', 'sizeFormatted'], ['privs', 'privs']]; var basePath = '/WebInterface/function/'; var image; if(!files) { var obj = this; $.post(basePath, {command: 'getXMLListing', path: obj.path}, function(data){ $('div.mainProcessIndicator').hide(); obj.files = new Array(); $(data).find('listing_subitem').each(function(){ if($(this).find('privs').text().search(/slideshow/i) == -1) return; if($(this).find('preview').text() == 'false') return; row = new Object(); for(i in params) row[params[i][0]] = $(this).find(params[i][1]).text(); row['enabled'] = true; row['thumb'] = new Image(); row['thumb'].src = basePath + '?command=getPreview&size=2&path=' + row['path']; row['imageSrc'] = basePath + '?command=getPreview&size=3&path=' + row['path']; row["fileName"] = row['path']; obj.files.push(row); }); for(i in obj.files) { if(obj.files[i]['enabled']) { obj.currentFile = parseInt(i); break; } } callback(); }, 'xml'); } else { this.files = new Array(); for(i in files) { if(files[i]['privs'].search(/slideshow/i) == -1) break; if($(this).find('preview').text() == 'false') return; row = new Object(); for(j in params) row[params[j][0]] = files[i][params[j][1]]; row['enabled'] = true; row['thumb'] = new Image(); row['thumb'].src = basePath + '?command=getPreview&size=2&path=' + row['path']; row['imageSrc'] = basePath + '?command=getPreview&size=3&path=' + row['path']; row["fileName"] = row['path']; this.files.push(row); } for(i in this.files) { if(this.files[i]['enabled']) { this.currentFile = i; break; } } callback(); } } Slideshow.prototype.ContainerInit = function() { if(this.opts.fullscreen) { this.selector = this.root; this.opts.stage = 'slideshow'; window.moveBy(-window.screenX, -window.screenY); //var w = document.documentElement.clientWidth; //var h = document.documentElement.clientHeight; var h = window.innerHeight ? window.innerHeight : $(window).height(); var w = $(window).width(); var obj = this; $(window).resize(function(){ obj.Resize(window.innerWidth, window.innerHeight); }); $(this.selector).width(w).height(h) .find('div.stage').width(w).height(h - $(this.selector + ' div.menu').height()); this.MenuInit(this.opts.stage); this.StageTransition(this.opts.stage); } else if(this.opts.slideshowOnly) { this.selector = this.root + ' div.slideshow'; var obj = this; $.get('/WebInterface/jQuery/slideshow.html', {}, function(data){ $(obj.root).append(data).show(); //var w = document.documentElement.clientWidth; //var h = document.documentElement.clientHeight; var h = window.innerHeight ? window.innerHeight : $(window).height(); var w = $(window).width(); var menuH = $(obj.selector + ' div.menu').height(); obj.MenuInit(obj.opts.stage); obj.StageTransition(obj.opts.stage); $("div.slideshow").css({'height':'auto','width':w - 25}); $("div.canvas").css({'display':'block','width':w - 40, 'min-height':'550px'}); $("div.files").css({'display':'block','margin-right':'10px','width':w - 70,'height':''}); $(this.selector).width(w).height(h) .find('div.stage').width(w).height(h - $(this.selector + ' div.menu').height()); }, 'html'); $(window).resize(function(){ obj.Resize(window.innerWidth, window.innerHeight); }); } else { this.selector = this.root + ' div.slideshow'; var obj = this; $.get('/WebInterface/jQuery/slideshow.html', {}, function(data){ $(obj.root).append(data); var w = Math.max(obj.opts.width, obj.opts.minWidth); var h = Math.max(obj.opts.height, obj.opts.minHeight); var slideshowDiv = $("#slideshowDiv"); slideshowDiv.find(".content").append($(obj.root)); var viewportHeight = window.innerHeight ? window.innerHeight : $(window).height(); var viewportWidth = $(window).width(); viewportHeight = viewportHeight - (viewportHeight * 0.12); viewportWidth = viewportWidth - (viewportWidth * 0.12); $(obj.root).css({width:viewportWidth+"px",height:viewportHeight + "px"}); $(obj.root).show();/*dialog({title: 'CrushFTP Slideshow', dialogClass: 'slideshow-dialog', position: 'center', width: w, height: h, minWidth: obj.opts.minWidth, minHeight: obj.opts.minHeight}); var dialog = $(obj.root).dialog('widget');*/ var mW = $(obj.root).width(); var mH = $(obj.root).height(); $(obj.selector).data({dialogMW: mW, dialogMH: mH}); var menuH = $(obj.selector + ' div.menu').height(); $(obj.selector).width(mW + 20).height(mH - 50) .find('div.stage').width(mW).height(mH - 50); obj.MenuInit(obj.opts.stage); obj.StageTransition(obj.opts.stage); }, 'html'); } } Slideshow.prototype.MenuInit = function(stage) { var obj = this; $(obj.selector + ' div.menu-item').each(function(){ var str = $(this).css('background-image'); var index = str.lastIndexOf('.'); var base = str.substring(0, index); var suffix = str.substr(index); $(this).data('mode', 'normal').css('background-image', '').css('background', 'transparent') .append('<span class="menu-item"></span><span class="menu-item"></span><span class="menu-item"></span>'); $($(this).find('span.menu-item').get(0)) .attr('id', this.id + '-normal').css('background-image', base + suffix); $($(this).find('span.menu-item').get(1)).hide() .attr('id', this.id + '-highlighted').css('background-image', base + '_highlighted' + suffix); $($(this).find('span.menu-item').get(2)).hide() .attr('id', this.id + '-selected').css('background-image', base + '_selected' + suffix); base = base.replace(/url\(("|')?/gi, ''); suffix = suffix.replace(/("|')?\)/g, ''); image = new Image(); image.src = base + suffix; image = new Image(); image.src = base + '_highlighted' + suffix; image = new Image(); image.src = base + '_selected' + suffix; }).hover(function(){ if($(this).data('mode') == 'normal') obj.MenuItemMode(this, 'highlighted'); }, function(){ if($(this).data('mode') == 'highlighted') obj.MenuItemMode(this, 'normal'); }).mousedown(function(){ if($(this).data('mode') == 'selected') return; obj.MenuItemMode(this, 'selected'); }).mouseup(function(){ if($(this).data('mode') != 'selected') return; var button = this; switch(button.id) { case 'list-button': case 'column-button': case 'slideshow-button': if(obj.stage) obj.MenuItemMode(obj.selector + ' #' + obj.stage + '-button', 'normal'); obj.StageTransition(button.id.substring(0, button.id.length - 7)); break; case 'download-button': obj.Download(obj.currentFile, function(){ obj.MenuItemMode(button, 'highlighted'); }); break; case 'upload-button': obj.Upload(function(){ obj.MenuItemMode(button, 'highlighted'); }); break; case 'delete-button': obj.Delete(obj.currentFile, function(){ obj.MenuItemMode(button, 'highlighted'); }); break; case 'fullscreen-button': obj.OpenFullscreen(obj.path); obj.MenuItemMode(button, 'highlighted'); break; case 'refresh-button': obj.Reload(); break; } }); this.MenuItemMode(this.selector + ' #' + stage + '-button', 'selected'); } Slideshow.prototype.MenuItemMode = function(selector, mode) { $(selector).data('mode', mode) .children().hide().end() .find('#' + $(selector).get(0).id + '-' + mode).show(); } Slideshow.prototype.ListInit = function() { if(this.stageList) { this.ListResize($(this.selector + ' div.stage').width(), $(this.selector + ' div.stage').height()); this.ListReload(); return; } this.stageList = new Object(); this.stageList.resize = true; this.stageList.canvas = this.selector + ' div#stage-list div.canvas'; this.stageList.files = this.selector + ' div#stage-list div.files'; this.stageList.thumbs = this.selector + ' div#stage-list div.thumbs'; this.stageList.current = this.ImageContainerInit(); $(this.stageList.current).appendTo(this.stageList.canvas); var obj = this; obj.ThumbsInit(obj.stageList.thumbs, function(index){ obj.CurrentFileSwitch(obj.stageList.canvas, obj.stageList.current, index); }, true); this.ListResize($(this.selector + ' div.stage').width(), $(this.selector + ' div.stage').height()); obj.CurrentFileSwitch(obj.stageList.canvas, obj.stageList.current, obj.currentFile, function(){ if(!($(obj.stageList.current).data('index') === null)) $(obj.stageList.current).show(); obj.ThumbsSelect(obj.stageList.thumbs, $(obj.stageList.current).data('index')); }); if(!($(this.stageList.current).data('index') === null)) $(this.stageList.current).show(); $(this.stageList.canvas).hide(); $(this.stageList.files).hide(); } Slideshow.prototype.ListReload = function() { var obj = this; obj.CurrentFileSwitch(obj.stageList.canvas, obj.stageList.current, obj.currentFile, function(){ if(!($(obj.stageList.current).data('index') === null)) $(obj.stageList.current).show(); obj.ThumbsSelect(obj.stageList.thumbs, $(obj.stageList.current).data('index')); }); if(!this.stageList.reload) return; var obj = this; obj.ThumbsInit(obj.stageList.thumbs, function(index){ obj.CurrentFileSwitch(obj.stageList.canvas, obj.stageList.current, index); }, false, obj.stageList.thumbSize); $(this.stageList.thumbs).width(this.stageList.thumbSize * this.files.length).height(this.stageList.thumbSize); this.stageList.reload = false; } Slideshow.prototype.ListResize = function(w, h) { if(!this.stageList.resize) return; var fH = $(this.stageList.files).data('height'); if(!fH) { fH = $(this.stageList.files).css('height'); fH = parseInt(fH.substring(0, fH.length - 2)); $(this.stageList.files).data('height', fH); } var margin = $(this.stageList.canvas).css('marginTop'); margin = 2 * parseInt(margin.substring(0, margin.length - 2)); var cH = h - fH; $(this.stageList.canvas).width(w - margin).height(cH - margin).css('display', 'inline-block'); this.CurrentFileSwap(this.stageList.canvas, this.stageList.current, this.currentFile); var divthumbsContainer = $(this.stageList.files).width(w).height(fH).css('display', 'inline-block') .find('div.thumbs-container').height(fH - this.opts.stageShadowHeight).css('overflow', 'auto'); if(this.opts.slideshowOnly) { divthumbsContainer.css({'height':''}).parent().css({'height':'180px'}); $(this.stageList.canvas).css({'height':''}); $(this.stageList.files).find('div.thumbs-container').height(180).css('overflow', 'hidden').css('overflow-x', 'auto'); } this.stageList.thumbSize = fH - this.opts.stageShadowHeight - this.opts.stageListThumbPadding; this.ThumbsResize(this.stageList.thumbs, this.stageList.thumbSize); $(this.stageList.thumbs).width(this.stageList.thumbSize * this.files.length).height(this.stageList.thumbSize); this.stageList.resize = false; } Slideshow.prototype.ListRemoveFile = function(index) { var item; if(this.stage == 'list') { item = $(this.stageList.thumbs + ' div.thumb:eq(' + index + ')'); item.hide('slide', {direction: 'down', easing: 'easeOutCubic'}, this.opts.imageDeleteTime); } else { item = $(this.stageList.thumbs + ' div.thumb:eq(' + index + ')').hide(); } $(".fileName").remove(); this.files[index]['enabled'] = false; if($(this.stageList.current).data('index') == index) { this.CurrentFileSwap(this.stageList.canvas, this.stageList.current, index+1); } } Slideshow.prototype.ListAnimate = function(mode, callback) { if(mode == 'show') { $(this.stageList.canvas).fadeIn(this.opts.stageFadeTime); $(this.stageList.files).show('slide', {direction: 'down', easing: 'easeInCubic'}, this.opts.stageFadeTime, function(){ if(callback) callback(); }); } else if(mode == 'hide') { $(this.stageList.canvas).fadeOut(this.opts.stageFadeTime); $(this.stageList.files).hide('slide', {direction: 'down', easing: 'easeOutCubic'}, this.opts.stageFadeTime, function(){ if(callback) callback(); }); } } Slideshow.prototype.ColumnInit = function() { if(this.stageColumn) { this.ColumnResize($(this.selector + ' div.stage').width(), $(this.selector + ' div.stage').height()); this.ColumnReload(); return; } this.stageColumn = new Object(); this.stageColumn.resize = true; this.stageColumn.canvas = this.selector + ' div#stage-column div.canvas'; this.stageColumn.files = this.selector + ' div#stage-column div.files'; this.stageColumn.thumbs = this.selector + ' div#stage-column div.thumbs'; this.stageColumn.current = this.ImageContainerInit(); $(this.stageColumn.current).appendTo(this.stageColumn.canvas); var obj = this; obj.ThumbsInit(obj.stageColumn.thumbs, function(index){ obj.CurrentFileSwitch(obj.stageColumn.canvas, obj.stageColumn.current, index); }, true); obj.ColumnResize($(obj.selector + ' div.stage').width(), $(obj.selector + ' div.stage').height()); obj.CurrentFileSwap(obj.stageColumn.canvas, obj.stageColumn.current, obj.currentFile, function(){ if(!($(obj.stageColumn.current).data('index') === null)) $(obj.stageColumn.current).show(); obj.ThumbsSelect(obj.stageColumn.thumbs, $(obj.stageColumn.current).data('index')); }); $(this.stageColumn.canvas).hide(); $(this.stageColumn.files).hide(); } Slideshow.prototype.ColumnReload = function() { var obj = this; obj.CurrentFileSwap(obj.stageColumn.canvas, obj.stageColumn.current, obj.currentFile, function(){ if(!($(obj.stageColumn.current).data('index') === null)) $(obj.stageColumn.current).show(); obj.ThumbsSelect(obj.stageColumn.thumbs, $(obj.stageColumn.current).data('index')); }); if(!this.stageColumn.reload) return; var obj = this; obj.ThumbsInit(obj.stageColumn.thumbs, function(index){ obj.CurrentFileSwitch(obj.stageColumn.canvas, obj.stageColumn.current, index); }, false, obj.stageColumn.thumbSize); $(this.stageColumn.thumbs).width(this.stageColumn.thumbSize * 4); this.stageColumn.reload = false; } Slideshow.prototype.ColumnResize = function(w, h) { if(!this.stageColumn.resize) return; var fW = $(this.stageColumn.files).data('width'); if(!fW) { if(!$(document).data("slideShowOnly")) { fW = $(this.stageColumn.files).css('width'); } else { var w = document.documentElement.clientWidth; fW = w * 0.25; fW = fW + 'px'; } fW = parseInt(fW.substring(0, fW.length - 2)); $(this.stageColumn.files).data('width', fW); } var margin = $(this.stageColumn.canvas).css('marginTop'); margin = 2 * parseInt(margin.substring(0, margin.length - 2)); var cW = w - fW; if(!$(document).data("slideShowOnly")) { $(this.stageColumn.canvas).width(cW - margin).css('display', 'inline-block'); this.CurrentFileSwap(this.stageColumn.canvas, this.stageColumn.current, this.currentFile); $(this.stageColumn.files).width(fW).height(h - this.opts.stageShadowHeight).css({position: 'absolute', top: 0, right: 0}) .find('div.thumbs-container').width(fW - this.opts.scrollbarThickness).height(h - this.opts.stageShadowHeight).css('overflow', 'auto'); } else { $(this.stageColumn.canvas).width(cW - margin).css('display', 'inline-block').css({'height':''}); this.CurrentFileSwap(this.stageColumn.canvas, this.stageColumn.current, this.currentFile); $(this.stageColumn.files).width(fW).css({position: 'absolute', top: 0, right: 0, height:'600px'}) .find('div.thumbs-container').width(fW - this.opts.scrollbarThickness).css({'overflow':'auto','height':'600px'}); } fW -= this.opts.scrollbarThickness; this.stageColumn.thumbSize = (fW - this.opts.scrollbarThickness) / 4; this.ThumbsResize(this.stageColumn.thumbs, this.stageColumn.thumbSize); $(this.stageColumn.thumbs).width(this.stageColumn.thumbSize * 4); this.stageColumn.resize = false; } Slideshow.prototype.ColumnRemoveFile = function(index) { if(this.stage == 'column') $(this.stageColumn.thumbs + ' div.thumb:eq(' + index + ')').hide('slide', {direction: 'right', easing: 'easeOutCubic'}, this.opts.imageDeleteTime); else $(this.stageColumn.thumbs + ' div.thumb:eq(' + index + ')').hide(); if($(this.stageColumn.current).data('index') == index) this.CurrentFileSwap(this.stageColumn.canvas, this.stageColumn.current, null); } Slideshow.prototype.ColumnAnimate = function(mode, callback) { if(mode == 'show') { $(this.stageColumn.canvas).fadeIn(this.opts.stageFadeTime); $(this.stageColumn.files).show('slide', {direction: 'right', easing: 'easeInCubic'}, this.opts.stageFadeTime, function(){ if(callback) callback(); }); } else if(mode == 'hide') { $(this.stageColumn.canvas).fadeOut(this.opts.stageFadeTime); $(this.stageColumn.files).hide('slide', {direction: 'right', easing: 'easeOutCubic'}, this.opts.stageFadeTime, function(){ if(callback) callback(); }); } } Slideshow.prototype.SlideshowInit = function() { if(this.stageSlideshow) { this.SlideshowResize($(this.selector + ' div.stage').width(), $(this.selector + ' div.stage').height()); this.SlideshowReload(); return; } this.stageSlideshow = new Object(); this.stageSlideshow.resize = true; this.stageSlideshow.center = this.currentFile; this.stageSlideshow.canvas = this.selector + ' div#stage-slideshow div.canvas'; this.stageSlideshow.toolbar = this.selector + ' div#stage-slideshow div.toolbar-container'; this.stageSlideshow.current = this.ImageContainerInit(); $(this.stageSlideshow.current).appendTo(this.stageSlideshow.canvas); this.stageSlideshow.nav = new Object(); this.stageSlideshow.nav.auto = true; this.stageSlideshow.nav.interval = this.opts.stageSlideshowIntervalDefaultTime; this.stageSlideshow.nav.func = '$.fn.slideshow.StageSlideshowSwitchStatic(' + this.index + ')'; this.SlideshowResize($(this.selector + ' div.stage').width(), $(this.selector + ' div.stage').height()); this.SlideshowToolbarInit(); this.SlideshowSwitchInit(); $(this.stageSlideshow.canvas).hide(); $(this.stageSlideshow.toolbar).hide(); } Slideshow.prototype.SlideshowReload = function() { this.stageSlideshow.switchInit = false; this.stageSlideshow.center = this.currentFile; this.SlideshowSwitchInit(); if(!this.stageSlideshow.reload) return; this.stageSlideshow.reload = false; } Slideshow.prototype.SlideshowResize = function(w, h) { if(!this.stageSlideshow.resize) return; var margin = $(this.stageSlideshow.canvas).css('marginTop'); margin = 2 * parseInt(margin.substring(0, margin.length - 2)); var tH = $(this.stageSlideshow.toolbar).css('height'); tH = parseInt(tH.substring(0, tH.length - 2)); var cH = h - tH; $(this.stageSlideshow.canvas).width(w - margin).height(cH - margin).css('display', 'inline-block'); $(this.stageSlideshow.toolbar).width(w).height(tH).css({position: 'absolute', top: cH + 'px'}).css('display', 'inline-block'); if($(document).data("slideShowOnly")) { $(this.stageSlideshow.toolbar).css({position:'',top:''}); $(this.stageSlideshow.canvas).css({height:''}); } this.CurrentFileSwap(this.stageSlideshow.canvas, this.stageSlideshow.current, this.currentFile); this.stageSlideshow.resize = false; } Slideshow.prototype.SlideshowRemoveFile = function(index) { if((this.stage == 'slideshow') && ((this.stageSlideshow.previous == index) || (this.stageSlideshow.center == index) || (this.stageSlideshow.next == index))) { if(this.stageSlideshow.nav.auto) clearTimeout(this.stageSlideshow.nav.timeout); this.stageSlideshow.switchInit = false; if(this.stageSlideshow.center == index) this.stageSlideshow.center = this.stageSlideshow.next; this.SlideshowSwitchInit(); if(this.stageSlideshow.nav.auto) this.stageSlideshow.nav.timeout = setTimeout(this.stageSlideshow.nav.func, this.stageSlideshow.nav.interval); } } Slideshow.prototype.SlideshowToolbarInit = function() { if(this.stageSlideshow.nav.auto) $(this.stageSlideshow.toolbar + ' div#play-button').hide(); else $(this.stageSlideshow.toolbar + ' div#pause-button').hide(); var image; var obj = this; $(obj.stageSlideshow.toolbar + ' div.toolbar-item').each(function(){ var str = $(this).css('background-image'); var index = str.lastIndexOf('.'); var base = str.substring(0, index); var suffix = str.substr(index); $(this).data('mode', 'normal').css('background-image', '').css('background', 'transparent') .append('<span class="toolbar-item"></span><span class="toolbar-item"></span><span class="toolbar-item"></span>'); $($(this).find('span.toolbar-item').get(0)) .attr('id', this.id + '-normal').css('background-image', base + suffix); $($(this).find('span.toolbar-item').get(1)).hide() .attr('id', this.id + '-highlighted').css('background-image', base + '_highlighted' + suffix); $($(this).find('span.toolbar-item').get(2)).hide() .attr('id', this.id + '-selected').css('background-image', base + '_selected' + suffix); base = base.replace(/url\(("|')?/gi, ''); suffix = suffix.replace(/("|')?\)/g, ''); image = new Image(); image.src = base + suffix; image = new Image(); image.src = base + '_highlighted' + suffix; image = new Image(); image.src = base + '_selected' + suffix; }).hover(function(){ if($(this).data('mode') == 'normal') obj.MenuItemMode(this, 'highlighted'); }, function(){ if($(this).data('mode') == 'highlighted') obj.MenuItemMode(this, 'normal'); }).mousedown(function(){ obj.MenuItemMode(this, 'selected'); }).mouseup(function(){ if($(this).data('mode') != 'selected') return; var button = this; switch(button.id) { case 'previous-button': case 'next-button': if(obj.stageSlideshow.nav.auto) clearTimeout(obj.stageSlideshow.nav.timeout); obj.SlideshowSwitch(button.id.substring(0, button.id.length - 7)); obj.MenuItemMode(button, 'highlighted'); break; case 'play-button': obj.stageSlideshow.nav.auto = true; $(obj.stageSlideshow.toolbar).find('div#play-button').hide().end() .find('div#pause-button').show(); obj.stageSlideshow.nav.timeout = setTimeout(obj.stageSlideshow.nav.func, obj.stageSlideshow.nav.interval); obj.MenuItemMode(button, 'highlighted'); break; case 'pause-button': obj.stageSlideshow.nav.auto = false; $(obj.stageSlideshow.toolbar).find('div#pause-button').hide().end() .find('div#play-button').show(); clearTimeout(obj.stageSlideshow.nav.timeout); obj.MenuItemMode(button, 'highlighted'); break; } }); var slider = obj.stageSlideshow.toolbar + ' div#file-slider'; $(slider).slider({min: 0, max: this.files.length - 1, value: this.currentFile, step: 1}); $(slider).bind('slide', function(event, ui){ clearTimeout(obj.stageSlideshow.nav.timeout); obj.CurrentFileSwap(obj.stageSlideshow.canvas, obj.stageSlideshow.current, null); obj.stageSlideshow.center = obj.currentFile = ui.value; obj.stageSlideshow.switchInit = false; obj.SlideshowSwitchInit(); if(obj.stageSlideshow.nav.auto) obj.stageSlideshow.nav.timeout = setTimeout(obj.stageSlideshow.nav.func, obj.stageSlideshow.nav.interval); }); var eH = 6; var h = $(slider).css('height'); h = parseInt(h.substring(0, h.length - 2)) + eH; var top = '-' + (eH / 2) + 'px'; var mL = '-' + (h / 2) + 'px'; $(slider).find('a.ui-slider-handle').width(h).height(h).css('top', top).css('margin-left', mL); var timer = obj.stageSlideshow.toolbar + ' div#timer'; var text = obj.stageSlideshow.toolbar + ' p#interval'; $(timer).slider({min: this.opts.stageSlideshowIntervalMinTime, max: this.opts.stageSlideshowIntervalMaxTime, value: this.stageSlideshow.nav.interval, step: this.opts.stageSlideshowIntervalStep}); $(text).text('Interval: ' + (this.stageSlideshow.nav.interval / 1000) + ' seconds'); $(timer).bind('slide', function(event,ui){ $(text).text('Interval: ' + (ui.value / 1000) + ' seconds'); }).bind('slidestop', function(event, ui){ clearTimeout(obj.stageSlideshow.nav.timeout); obj.stageSlideshow.nav.interval = ui.value; if(obj.stageSlideshow.nav.auto) obj.stageSlideshow.nav.timeout = setTimeout(obj.stageSlideshow.nav.func, obj.stageSlideshow.nav.interval); }); h = $(timer).css('height'); h = parseInt(h.substring(0, h.length - 2)) + eH; top = '-' + (eH / 2) + 'px'; mL = '-' + (h / 2) + 'px'; $(timer).find('a.ui-slider-handle').width(h).height(h).css('top', top).css('margin-left', mL); } Slideshow.prototype.SlideshowSwitchInit = function() { if(this.stageSlideshow.switchInit) return; var index = 0; if(isNaN(this.stageSlideshow.center) || (this.stageSlideshow.center === null)) { while(index < this.files.length) { if(this.files[index]['enabled']) break; index++; } if(index == this.files.length) { this.stageSlideshow.empty = true; return; } this.stageSlideshow.center = index; } index = this.stageSlideshow.center + 1; while(index < this.files.length) { if(this.files[index]['enabled']) break; index++; } if(index == this.files.length) { index = 0; while(index < this.stageSlideshow.center) { if(this.files[index]['enabled']) break; index++; } } this.stageSlideshow.next = index; index = this.stageSlideshow.center - 1; while(index >= 0) { if(this.files[index]['enabled']) break; index--; } if(index < 0) { index = this.files.length - 1; while(index > this.stageSlideshow.next) { if(this.files[index]['enabled']) break; index--; } } this.stageSlideshow.previous = index; if(!this.files[this.stageSlideshow.previous]['image']) { this.files[this.stageSlideshow.previous]['image'] = new Image(); this.files[this.stageSlideshow.previous]['image'].src = this.files[this.stageSlideshow.previous]['imageSrc']; } if(!this.files[this.stageSlideshow.center]['image']) { this.files[this.stageSlideshow.center]['image'] = new Image(); this.files[this.stageSlideshow.center]['image'].src = this.files[this.stageSlideshow.center]['imageSrc']; } if(!this.files[this.stageSlideshow.next]['image']) { this.files[this.stageSlideshow.next]['image'] = new Image(); this.files[this.stageSlideshow.next]['image'].src = this.files[this.stageSlideshow.next]['imageSrc']; } $(this.stageSlideshow.toolbar + ' div#file-slider').slider('value', this.stageSlideshow.center); var image = this.files[this.stageSlideshow.center]['image']; var loaded = false; var obj = this; $(image).load(function(){ loaded = true; obj.CurrentFileSwap(obj.stageSlideshow.canvas, obj.stageSlideshow.current, obj.stageSlideshow.center); $(obj.stageSlideshow.current).show(); obj.stageSlideshow.switchInit = true; }); if((image.complete || image.complete === undefined) && !loaded) $(image).trigger('load'); } Slideshow.prototype.SlideshowSwitch = function(direction) { if(this.stageSlideshow.empty || !this.stageSlideshow.switchInit) return; if(direction == 'previous') { if(this.files[this.stageSlideshow.previous]['image'].complete === false) { this.stageSlideshow.nav.timeout = setTimeout(this.stageSlideshow.nav.func, this.opts.stageSlideshowPrefetchWaitTime); return; } var index = this.stageSlideshow.previous - 1; while(index >= 0) { if(this.files[index]['enabled']) break; index--; } if(index < 0) { index = this.files.length - 1; while(index > this.stageSlideshow.next) { if(this.files[index]['enabled']) break; index--; } } this.stageSlideshow.next = this.stageSlideshow.center; this.stageSlideshow.center = this.stageSlideshow.previous; this.stageSlideshow.previous = index; if(!this.files[this.stageSlideshow.previous]['image']) { this.files[this.stageSlideshow.previous]['image'] = new Image(); this.files[this.stageSlideshow.previous]['image'].src = this.files[this.stageSlideshow.previous]['imageSrc']; } this.CurrentFileSwitch(this.stageSlideshow.canvas, this.stageSlideshow.current, this.stageSlideshow.center); } else { if(this.files[this.stageSlideshow.next]['image'].complete === false) { this.stageSlideshow.nav.timeout = setTimeout(this.stageSlideshow.nav.func, this.opts.stageSlideshowPrefetchWaitTime); return; } var index = this.stageSlideshow.next + 1; while(index < this.files.length) { if(this.files[index]['enabled']) break; index++; } if(index == this.files.length) { index = 0; while(index < this.stageSlideshow.previous) { if(this.files[index]['enabled']) break; index++; } } this.stageSlideshow.previous = this.stageSlideshow.center; this.stageSlideshow.center = this.stageSlideshow.next; this.stageSlideshow.next = index; if(!this.files[this.stageSlideshow.next]['image']) { this.files[this.stageSlideshow.next]['image'] = new Image(); this.files[this.stageSlideshow.next]['image'].src = this.files[this.stageSlideshow.next]['imageSrc']; } this.CurrentFileSwitch(this.stageSlideshow.canvas, this.stageSlideshow.current, this.stageSlideshow.center); } $(this.stageSlideshow.toolbar + ' div#file-slider').slider('value', this.stageSlideshow.center); if(this.stageSlideshow.nav.auto) this.stageSlideshow.nav.timeout = setTimeout(this.stageSlideshow.nav.func, this.stageSlideshow.nav.interval); } $.fn.slideshow.StageSlideshowSwitchStatic = function(index) { var obj = $.fn.slideshow.stack[index]; obj.SlideshowSwitch(); } Slideshow.prototype.SlideshowAnimate = function(mode, callback) { if(mode == 'show') { var obj = this; $(obj.stageSlideshow.canvas).fadeIn(obj.opts.stageFadeTime); $(obj.stageSlideshow.toolbar).show('slide', {direction: 'down', easing: 'easeInCubic'}, obj.opts.stageFadeTime, function(){ if(obj.stageSlideshow.nav.auto) obj.stageSlideshow.nav.timeout = setTimeout(obj.stageSlideshow.nav.func, obj.stageSlideshow.nav.interval); if(callback) callback(); }); } else if(mode == 'hide') { if(this.stageSlideshow.nav.auto) clearTimeout(this.stageSlideshow.nav.timeout); var obj = this; $(obj.stageSlideshow.canvas).fadeOut(obj.opts.stageFadeTime); $(obj.stageSlideshow.toolbar).hide('slide', {direction: 'down', easing: 'easeOutCubic'}, obj.opts.stageFadeTime, function(){ if(callback) callback(); }); } } Slideshow.prototype.StageTransition = function(stage) { if(this.stage == stage) return; if(stage == 'list') this.ListInit(); else if(stage == 'column') this.ColumnInit(); else if(stage == 'slideshow') this.SlideshowInit(); else return; if(this.stage) { var obj = this; if(obj.stage == 'list') { obj.ListAnimate('hide', function(){ $(obj.selector + ' div#stage-list').appendTo(obj.selector + ' div#stage-hidden'); if(stage == 'column') { $(obj.selector + ' div#stage-column').appendTo(obj.selector + ' div#stage'); obj.ColumnAnimate('show'); } else if(stage == 'slideshow') { $(obj.selector + ' div#stage-slideshow').appendTo(obj.selector + ' div#stage'); obj.SlideshowAnimate('show'); } }); } else if(obj.stage == 'column') { obj.ColumnAnimate('hide', function(){ $(obj.selector + ' div#stage-column').appendTo(obj.selector + ' div#stage-hidden'); if(stage == 'list') { $(obj.selector + ' div#stage-list').appendTo(obj.selector + ' div#stage'); obj.ListAnimate('show'); } else if(stage == 'slideshow') { $(obj.selector + ' div#stage-slideshow').appendTo(obj.selector + ' div#stage'); obj.SlideshowAnimate('show'); } }); } else if(obj.stage == 'slideshow') { obj.SlideshowAnimate('hide', function(){ $(obj.selector + ' div#stage-slideshow').appendTo(obj.selector + ' div#stage-hidden'); if(stage == 'list') { $(obj.selector + ' div#stage-list').appendTo(obj.selector + ' div#stage'); obj.ListAnimate('show'); } else if(stage == 'column') { $(obj.selector + ' div#stage-column').appendTo(obj.selector + ' div#stage'); obj.ColumnAnimate('show'); } }); } } else { var obj = this; if(stage == 'list') { $(obj.selector + ' div#stage-list').appendTo(obj.selector + ' div#stage'); obj.ListAnimate('show'); } else if(stage == 'column') { $(obj.selector + ' div#stage-column').appendTo(obj.selector + ' div#stage'); obj.ColumnAnimate('show'); } else if(stage == 'slideshow') { $(obj.selector + ' div#stage-slideshow').appendTo(obj.selector + ' div#stage'); obj.SlideshowAnimate('show'); } } this.stage = stage; } Slideshow.prototype.ThumbsInit = function(selector, click, noResize, maxW) { $(selector).empty(); $(selector).data('current', null); for(i in this.files) $(selector).append('<div class="thumb"><div class="image-container"><img id="image" class="image" /></div></div>'); var obj = this; $(selector + ' div.thumb').each(function(i) { if(obj.files[i]) { if(!obj.files[i]['enabled']) $(this).hide(); if(obj.files[i]) { $(this).data({index: i, current: false, sized: false}) .find('img#image').attr('src', obj.files[i]['thumb'].src); } } }).click(function(){ if($(this).data('current')) return; $($(selector).data('current')).data('current', false).find('div.image-container').removeClass('current'); $(this).data('current', true).find('div.image-container').addClass('current'); $(selector).data('current', this); click($(this).data('index')); }); if(!noResize) this.ThumbsResize(selector, maxW); } Slideshow.prototype.ThumbsResize = function(selector, maxW) { var thumb = selector + ' div.thumb'; var w, h, mW, mH, ratio; if(!maxW) { var maxW = $(thumb).css('width'); maxW = parseInt(maxW.substring(0, maxW.length - 2)); } maxW -= $(thumb).outerWidth(true) - $(thumb).width(); var obj = this; $(thumb).each(function(i) { if(obj.files[i]) { var element = this; var image = $(element).find('img#image').get(); $(element).data('sized', false); $(image).load(function(){ var w = obj.files[i]['thumb'].width; var h = obj.files[i]['thumb'].height; var mW = 0; var mH = 0; var ratio; if(w > h) { ratio = h / w; w = maxW; h = ratio * w; mH = (maxW - h) / 2; } else if(w < h) { ratio = w / h; h = maxW; w = ratio * h; mW = (maxW - w) / 2; } else { w = h = maxW; } $(element).width(maxW).height(maxW).data('sized', true) .find('div.image-container').width(w).height(h).css('margin', mH + 'px ' + mW + 'px'); }); if((image.complete || image.complete === undefined) && !$(element).data('sized')) $(image).trigger('load'); } }); } Slideshow.prototype.ThumbsSelect = function(selector, file) { if(isNaN(file) || file === null) { if(!$(selector).data('current')) return; $($(selector).data('current')).data('current', false).find('div.image-container').removeClass('current'); $(selector).data('current', null); } else { if($(selector).data('current') && ($($(selector).data('current')).data('index') == file)) return; var element = $(selector).find('div.thumb').get(file); $($(selector).data('current')).data('current', false).find('div.image-container').removeClass('current'); $(element).data('current', true).find('div.image-container').addClass('current'); $(selector).data('current', element); } } Slideshow.prototype.CurrentFileSwitch = function(container, image, index, callback) { if($(image).data('index') == index) return; var obj = this; $(image).fadeOut(obj.opts.imageFadeTime, function(){ obj.CurrentFileSwap(container, image, index, function(){ if($(image).data('index') === null) { if(callback) callback(); return; } $(image).fadeIn(obj.opts.imageFadeTime, function(){ if(callback) callback(); }); }); }); } function getLastFile(files, index){ var lastFileIndex = index; if(index<=0) { lastFileIndex = 0; } else { if((!files[index]) || (files[index] && files[index].enabled == false)){ index -= 1; lastFileIndex = getLastFile(files,index); } } return lastFileIndex; } function resizeFileList(stageList, files) { if(!stageList)return; var lastfileIndex = getLastFile(files, files.length); $(stageList.thumbs).width($(stageList.canvas).css("width")).height(stageList.thumbSize); } Slideshow.prototype.CurrentFileSwap = function(container, image, index, callback) { var maxW = $(container).css('width'); maxW = parseInt(maxW.substring(0, maxW.length - 2)); var maxH = $(container).css('height'); maxH = parseInt(maxH.substring(0, maxH.length - 2)); if((!this.files[index]) || (this.files[index] && this.files[index].enabled == false)){ index = getLastFile(this.files,index); } this.currentFile = index; resizeFileList(this.stageList, this.files); this.ImageContainerChange(image, index, maxW, maxH, function(){ var w = $(image).css('width'); w = parseInt(w.substring(0, w.length - 2)); var h = $(image).css('height'); h = parseInt(h.substring(0, h.length - 2)); var listtype = this.slideshow.stage; if($(document).data("slideShowOnly")) { w = w/2; $(image).css({"left":"50%","margin-left":-w}); } else { var mW = (maxW - w) / 2; var mH = (maxH - h) / 2; if(listtype=="list") { $(image).css({'margin':'0px',"width":""}); } else { $(image).css({'margin':'0px',"width":w+"px"}); } } if($(image).data('index') === null) $(image).hide(); if(callback) callback(); }); } Slideshow.prototype.ImageContainerInit = function(index, maxW, maxH, callback) { if(!this.imageContainerIndex) this.imageContainerIndex = 1; var i = this.imageContainerIndex++; var selector = this.selector + ' div[class=\'image-container\'][id=\'image-' + i + '\']'; $(this.selector + ' div#image-factory').append('<div id="image-' + i + '" class="image-container"><img class="image" /><div class="shadow-righttop"></div><div class="shadow-right"></div><div class="shadow-bottomleft"></div><div class="shadow-bottom"></div><div class="shadow-bottomright"></div></div>'); this.ImageContainerChange(selector, index, maxW, maxH, callback); return selector; } Slideshow.prototype.ImageContainerChange = function(selector, index, maxW, maxH, callback) { if(isNaN(index) || (index === null) || (index < 0) || (index >= this.files.length)) { $(selector).data('index', null) .find('img.image').attr('src', null); this.ImageContainerResize(selector, maxW, maxH); if(callback) callback(); } else if(!this.files[index]['image']) { var fileName = this.files[index]['fileName']; this.files[index]['image'] = new Image(); this.files[index]['image'].src = this.files[index]['imageSrc']; var obj = this; $(obj.files[index]['image']).load(function(){ $(selector).data('index', index) .find('img.image').attr('src', obj.files[index]['imageSrc']); $(selector).parent().parent().find(".fileName").remove(); $(selector).parent().after("<div class='fileName'>" + fileName + "</div>"); obj.ImageContainerResize(selector, maxW, maxH); if(callback) callback(); }); } else { var fileName = this.files[index]['fileName']; $(selector).data('index', index) .find('img.image').attr('src', this.files[index]['imageSrc']); $(selector).parent().parent().find(".fileName").remove(); $(selector).parent().after("<div class='fileName'>" + fileName + "</div>"); this.ImageContainerResize(selector, maxW, maxH); if(callback) callback(); } } Slideshow.prototype.ImageContainerResize = function(selector, maxW, maxH) { var sW = $(selector).find('div.shadow-right').css('width'); sW = parseInt(sW.substring(0, sW.length - 2)); var sWBL = $(selector).find('div.shadow-bottomleft').css('width'); sWBL = parseInt(sWBL.substring(0, sWBL.length - 2)); var sH = $(selector).find('div.shadow-bottom').css('height'); sH = parseInt(sH.substring(0, sH.length - 2)); var sHRT = $(selector).find('div.shadow-righttop').css('height'); sHRT = parseInt(sHRT.substring(0, sHRT.length - 2)); var w = 1; var h = 1; var index = $(selector).data('index'); if(!isNaN(index) && !(index === null) && (index >= 0) && (index < this.files.length)) { w = this.files[index]['image'].width; h = this.files[index]['image'].height; } h = $("#slideshowDiv").height(); h = h - $("#slideshowDiv").find(".menu").height() - 10; if(!maxW) maxW = ($(selector).data('maxW')) ? $(selector).data('maxW') : -1; if(!maxH) maxH = ($(selector).data('maxH')) ? $(selector).data('maxH') : -1; var iR = (w + sW) / (h + sH); var mR = maxW / maxH; if(iR >= mR) { iR = h / w; if(((w + sW) > maxW) && (maxW != -1)) { w = maxW - sW; h = iR * w; } else if(w < sWBL) { w = sWBL; h = iR * w; } } else if(iR < mR) { iR = w / h; if(((h + sH) > maxH) && (maxH != -1)) { h = maxH - sH; w = iR * h; } else if(h < sHRT) { h = sHRT; w = iR * h; } } if(this.stage=="list") { $(selector).data('maxW', maxW).data('maxH', maxH) .width(w + sW).height(h + sH) .find('img.image').width("auto").height(h).end() .find('div.shadow-right').height(h - sHRT).end() .find('div.shadow-bottom').width(w - sWBL); } else { $(selector).data('maxW', maxW).data('maxH', maxH) .width(w + sW).height(h + sH) .find('img.image').height("auto").width(w).parent().css("text-align","center").end() .find('div.shadow-right').height(h - sHRT).end() .find('div.shadow-bottom').width(w - sWBL); } } Slideshow.prototype.OpenFullscreen = function(path) { var url = "/WebInterface/jQuery/slideshowFullscreen.html?path=" + this.path; var w = screen.availWidth - 15; var h = screen.availHeight - 60; var opts = "location=no,menubar=no,scrollbars=no,status=no,toolbar=no,resizable=no,width=" + w +"px,height=" + h + "px"; window.open(url, '', opts); } Slideshow.prototype.Download = function(index, callback) { if(isNaN(index) || index === null) { callback(); return; } this.ExternalDownload(this.files[index]['path'], function(){ callback(); }); } Slideshow.prototype.Upload = function(callback) { if(!this.path) { callback(); return; } var obj = this; obj.ExternalUpload(obj.path, function(success){ if(success) obj.Reload(); callback(); }); } Slideshow.prototype.Delete = function(index, callback) { if(isNaN(index)) { callback(); return; } var obj = this; obj.ExternalDelete(obj.files[index]['path'], function(success){ if(success) { if(obj.stageList) obj.ListRemoveFile(index); if(obj.stageColumn) obj.ColumnRemoveFile(index); if(obj.stageSlideshow) obj.SlideshowRemoveFile(index); obj.files[index]['enabled'] = false; } callback(); }); } Slideshow.prototype.Reload = function(path) { if(path) this.path = path; var obj = this; obj.FilesInit(false, function(){ obj.currentFile = null; if(obj.stageList) obj.stageList.reload = true; if(obj.stageColumn) obj.stageColumn.reload = true; if(obj.stageSlideshow) obj.stageSlideshow.reload = true; if(obj.stage == 'list') { obj.ListAnimate('hide', function(){ obj.ListReload(); obj.ListAnimate('show',function(){ $("div.thumbs:visible").find("div.thumb:first").click(); }); }); } else if(obj.stage == 'column') { obj.ColumnAnimate('hide', function(){ obj.ColumnReload(); obj.ColumnAnimate('show',function(){ $("div.thumbs:visible").find("div.thumb:first").click(); }); }); } else if(obj.stage == 'slideshow') { obj.SlideshowAnimate('hide', function(){ obj.SlideshowReload(); obj.SlideshowAnimate('show'); }); } }); } Slideshow.prototype.Resize = function(w, h) { var sH = h - $(this.selector + ' div.menu').height(); $(this.selector).width(w).height(h) .find('div.stage').width(w).height(sH); if(this.stageList) this.stageList.resize = true; if(this.stageColumn) this.stageColumn.resize = true; if(this.stageSlideshow) this.stageSlideshow.resize = true; if(this.stage == 'list') this.ListResize(w, sH); else if(this.stage == 'column') this.ColumnResize(w, sH); else if(this.stage == 'slideshow') this.SlideshowResize(w, sH); return true; } })(jQuery);