mirror of
https://github.com/UnickSoft/graphonline.git
synced 2025-07-04 00:36:45 +00:00
1 line
17 KiB
JavaScript
Executable File
1 line
17 KiB
JavaScript
Executable File
(function(e){function t(e,t,n){var r=parseInt(e.css("top"),10);var i;if(t=="left"){i="-"+this.image_wrapper_height+"px";e.css("top",this.image_wrapper_height+"px")}else{i=this.image_wrapper_height+"px";e.css("top","-"+this.image_wrapper_height+"px")}if(n){n.css("bottom","-"+n[0].offsetHeight+"px");n.animate({bottom:0},this.settings.animation_speed*2)}if(this.current_description){this.current_description.animate({bottom:"-"+this.current_description[0].offsetHeight+"px"},this.settings.animation_speed*2)}return{old_image:{top:i},new_image:{top:r}}}function n(e,t,n){var r=parseInt(e.css("left"),10);var i;if(t=="left"){i="-"+this.image_wrapper_width+"px";e.css("left",this.image_wrapper_width+"px")}else{i=this.image_wrapper_width+"px";e.css("left","-"+this.image_wrapper_width+"px")}if(n){n.css("bottom","-"+n[0].offsetHeight+"px");n.animate({bottom:0},this.settings.animation_speed*2)}if(this.current_description){this.current_description.animate({bottom:"-"+this.current_description[0].offsetHeight+"px"},this.settings.animation_speed*2)}return{old_image:{left:i},new_image:{left:r}}}function r(e,t,n){var r=e.width();var i=e.height();var s=parseInt(e.css("left"),10);var o=parseInt(e.css("top"),10);e.css({width:0,height:0,top:this.image_wrapper_height/2,left:this.image_wrapper_width/2});return{old_image:{width:0,height:0,top:this.image_wrapper_height/2,left:this.image_wrapper_width/2},new_image:{width:r,height:i,top:o,left:s}}}function i(e,t,n){e.css("opacity",0);return{old_image:{opacity:0},new_image:{opacity:1}}}function s(e,t,n){e.css("opacity",0);return{old_image:{opacity:0},new_image:{opacity:1},speed:0}}function o(e,t){this.init(e,t)}function u(e,t){this.init(e,t)}e.fn.adGallery=function(t){var n={loader_image:"./ad-gallery/loader.gif",start_at_index:0,update_window_hash:true,description_wrapper:false,thumb_opacity:.7,animate_first_image:false,animation_speed:400,width:false,height:false,display_next_and_prev:true,display_back_and_forward:true,scroll_jump:0,slideshow:{enable:true,autostart:false,speed:5e3,start_label:"Start",stop_label:"Stop",stop_on_scroll:true,countdown_prefix:"(",countdown_sufix:")",onStart:false,onStop:false},effect:"slide-hori",enable_keyboard_move:true,cycle:true,hooks:{displayDescription:false},callbacks:{init:false,afterImageVisible:false,beforeImageVisible:false}};var r=e.extend(false,n,t);if(t&&t.slideshow){r.slideshow=e.extend(false,n.slideshow,t.slideshow)}if(!r.slideshow.enable){r.slideshow.autostart=false}var i=[];e(this).each(function(){var e=new o(this,r);i[i.length]=e});return i};o.prototype={wrapper:false,image_wrapper:false,gallery_info:false,nav:false,loader:false,preloads:false,thumbs_wrapper:false,thumbs_wrapper_width:0,scroll_back:false,scroll_forward:false,next_link:false,prev_link:false,slideshow:false,image_wrapper_width:0,image_wrapper_height:0,current_index:-1,current_image:false,current_description:false,nav_display_width:0,settings:false,images:false,in_transition:false,animations:false,init:function(t,n){var r=this;this.wrapper=e(t);this.settings=n;this.setupElements();this.setupAnimations();if(this.settings.width){this.image_wrapper_width=this.settings.width;this.image_wrapper.width(this.settings.width);this.wrapper.width(this.settings.width)}else{this.image_wrapper_width=this.image_wrapper.width()}if(this.settings.height){this.image_wrapper_height=this.settings.height;this.image_wrapper.height(this.settings.height)}else{this.image_wrapper_height=this.image_wrapper.height()}this.nav_display_width=this.nav.width();this.current_index=-1;this.current_image=false;this.current_description=false;this.in_transition=false;this.findImages();if(this.settings.display_next_and_prev){this.initNextAndPrev()}var i=function(e){return r.nextImage(e)};this.slideshow=new u(i,this.settings.slideshow);this.controls.append(this.slideshow.create());if(this.settings.slideshow.enable){this.slideshow.enable()}else{this.slideshow.disable()}if(this.settings.display_back_and_forward){this.initBackAndForward()}if(this.settings.enable_keyboard_move){this.initKeyEvents()}this.initHashChange();var s=parseInt(this.settings.start_at_index,10);if(typeof this.getIndexFromHash()!="undefined"){s=this.getIndexFromHash()}this.loading(true);this.showImage(s,function(){if(r.settings.slideshow.autostart){r.preloadImage(s+1);r.slideshow.start()}});this.fireCallback(this.settings.callbacks.init)},setupAnimations:function(){this.animations={"slide-vert":t,"slide-hori":n,resize:r,fade:i,none:s}},setupElements:function(){this.controls=this.wrapper.find(".ad-controls");this.gallery_info=e('<p class="ad-info"></p>');this.controls.append(this.gallery_info);this.image_wrapper=this.wrapper.find(".ad-image-wrapper");this.image_wrapper.empty();this.nav=this.wrapper.find(".ad-nav");this.thumbs_wrapper=this.nav.find(".ad-thumbs");this.preloads=e('<div class="ad-preloads"></div>');this.loader=e('<img class="ad-loader" src="'+this.settings.loader_image+'">');this.image_wrapper.append(this.loader);this.loader.hide();e(document.body).append(this.preloads)},loading:function(e){if(e){this.loader.show()}else{this.loader.hide()}},addAnimation:function(t,n){if(e.isFunction(n)){this.animations[t]=n}},findImages:function(){var t=this;this.images=[];var n=0;var r=this.thumbs_wrapper.find("a");var i=r.length;if(this.settings.thumb_opacity<1){r.find("img").css("opacity",this.settings.thumb_opacity)}r.each(function(r){var i=e(this);i.data("ad-i",r);var s=i.attr("href");var o=i.find("img");t.whenImageLoaded(o[0],function(){var e=o[0].parentNode.parentNode.offsetWidth;if(o[0].width==0){e=50}t.thumbs_wrapper_width+=e;n++});t._initLink(i);t.images[r]=t._createImageData(i,s)});var s=setInterval(function(){if(i==n){t._setThumbListWidth(t.thumbs_wrapper_width);clearInterval(s)}},300)},_setThumbListWidth:function(e){e+=25;var t=this.nav.find(".ad-thumb-list");t.css("width",e+"px")},_initLink:function(t){var n=this;t.click(function(){n.showImage(t.data("ad-i"));n.slideshow.stop();return false}).hover(function(){if(!e(this).is(".ad-active")&&n.settings.thumb_opacity<1){e(this).find("img").fadeTo(300,1)}n.preloadImage(t.data("ad-i"))},function(){if(!e(this).is(".ad-active")&&n.settings.thumb_opacity<1){e(this).find("img").fadeTo(300,n.settings.thumb_opacity)}})},_createImageData:function(e,t){var n=false;var r=e.find("img");if(r.data("ad-link")){n=e.data("ad-link")}else if(r.attr("longdesc")&&r.attr("longdesc").length){n=r.attr("longdesc")}var i=false;if(r.data("ad-desc")){i=r.data("ad-desc")}else if(r.attr("alt")&&r.attr("alt").length){i=r.attr("alt")}var s=false;if(r.data("ad-title")){s=r.data("ad-title")}else if(r.attr("title")&&r.attr("title").length){s=r.attr("title")}return{thumb_link:e,image:t,error:false,preloaded:false,desc:i,title:s,size:false,link:n}},initKeyEvents:function(){var t=this;e(document).keydown(function(e){if(e.keyCode==39){t.nextImage();t.slideshow.stop()}else if(e.keyCode==37){t.prevImage();t.slideshow.stop()}})},getIndexFromHash:function(){if(window.location.hash&&window.location.hash.indexOf("#ad-image-")===0){var e=window.location.hash.replace(/^#ad-image-/g,"");var t=this.thumbs_wrapper.find("#"+e);if(t.length){return this.thumbs_wrapper.find("a").index(t)}else if(!isNaN(parseInt(e,10))){return parseInt(e,10)}}return undefined},removeImage:function(t){if(t<0||t>=this.images.length){throw"Cannot remove image for index "+t}var n=this.images[t];this.images.splice(t,1);var r=n.thumb_link;var i=r[0].parentNode.offsetWidth;this.thumbs_wrapper_width-=i;r.remove();this._setThumbListWidth(this.thumbs_wrapper_width);this.gallery_info.html(this.current_index+1+" / "+this.images.length);this.thumbs_wrapper.find("a").each(function(t){e(this).data("ad-i",t)});if(t==this.current_index&&this.images.length!=0){this.showImage(0)}},removeAllImages:function(){for(var e=this.images.length-1;e>=0;e--){this.removeImage(e)}},addImage:function(t,n,r,i,s){r=r||"";i=i||"";s=s||"";var o=e('<li><a href="'+n+'" id="'+r+'">'+'<img src="'+t+'" title="'+i+'" alt="'+s+'">'+"</a></li>");var u=this;this.thumbs_wrapper.find("ul").append(o);var a=o.find("a");var f=a.find("img");f.css("opacity",this.settings.thumb_opacity);this.whenImageLoaded(f[0],function(){var e=f[0].parentNode.parentNode.offsetWidth;if(f[0].width==0){e=100}u.thumbs_wrapper_width+=e;u._setThumbListWidth(u.thumbs_wrapper_width)});var l=this.images.length;a.data("ad-i",l);this._initLink(a);this.images[l]=u._createImageData(a,n);this.gallery_info.html(this.current_index+1+" / "+this.images.length)},initHashChange:function(){var t=this;if("onhashchange"in window){e(window).bind("hashchange",function(){var e=t.getIndexFromHash();if(typeof e!="undefined"&&e!=t.current_index){t.showImage(e)}})}else{var n=window.location.hash;setInterval(function(){if(window.location.hash!=n){n=window.location.hash;var e=t.getIndexFromHash();if(typeof e!="undefined"&&e!=t.current_index){t.showImage(e)}}},200)}},initNextAndPrev:function(){this.next_link=e('<div class="ad-next"><div class="ad-next-image"></div></div>');this.prev_link=e('<div class="ad-prev"><div class="ad-prev-image"></div></div>');this.image_wrapper.append(this.next_link);this.image_wrapper.append(this.prev_link);var t=this;this.prev_link.add(this.next_link).mouseover(function(n){e(this).css("height",t.image_wrapper_height);e(this).find("div").show()}).mouseout(function(t){e(this).find("div").hide()}).click(function(){if(e(this).is(".ad-next")){t.nextImage();t.slideshow.stop()}else{t.prevImage();t.slideshow.stop()}}).find("div").css("opacity",.7)},initBackAndForward:function(){var t=this;this.scroll_forward=e('<div class="ad-forward"></div>');this.scroll_back=e('<div class="ad-back"></div>');this.nav.append(this.scroll_forward);this.nav.prepend(this.scroll_back);var n=0;var r=false;e(this.scroll_back).add(this.scroll_forward).click(function(){var n=t.nav_display_width-50;var r;if(t.settings.scroll_jump>0){n=t.settings.scroll_jump}if(e(this).is(".ad-forward")){r=t.thumbs_wrapper.scrollLeft()+n}else{r=t.thumbs_wrapper.scrollLeft()-n}if(t.settings.slideshow.stop_on_scroll){t.slideshow.stop()}t.thumbs_wrapper.animate({scrollLeft:r+"px"});return false}).css("opacity",.6).hover(function(){var i="left";if(e(this).is(".ad-forward")){i="right"}r=setInterval(function(){n++;if(n>30&&t.settings.slideshow.stop_on_scroll){t.slideshow.stop()}var e=t.thumbs_wrapper.scrollLeft()+1;if(i=="left"){e=t.thumbs_wrapper.scrollLeft()-1}t.thumbs_wrapper.scrollLeft(e)},10);e(this).css("opacity",1)},function(){n=0;clearInterval(r);e(this).css("opacity",.6)})},_afterShow:function(){this.gallery_info.html(this.current_index+1+" / "+this.images.length);if(!this.settings.cycle){this.prev_link.show().css("height",this.image_wrapper_height);this.next_link.show().css("height",this.image_wrapper_height);if(this.current_index==this.images.length-1){this.next_link.hide()}if(this.current_index==0){this.prev_link.hide()}}if(this.settings.update_window_hash){var e=this.images[this.current_index].thumb_link;if(e.attr("id")){window.location.hash="#ad-image-"+e.attr("id")}else{window.location.hash="#ad-image-"+this.current_index}}this.fireCallback(this.settings.callbacks.afterImageVisible)},_getContainedImageSize:function(e,t){if(t>this.image_wrapper_height){var n=e/t;t=this.image_wrapper_height;e=this.image_wrapper_height*n}if(e>this.image_wrapper_width){var n=t/e;e=this.image_wrapper_width;t=this.image_wrapper_width*n}return{width:e,height:t}},_centerImage:function(e,t,n){e.css("top","0px");if(n<this.image_wrapper_height){var r=this.image_wrapper_height-n;e.css("top",r/2+"px")}e.css("left","0px");if(t<this.image_wrapper_width){var r=this.image_wrapper_width-t;e.css("left",r/2+"px")}},_getDescription:function(t){var n="";if(t.desc.length||t.title.length){var r="";if(t.title.length){r='<strong class="ad-description-title">'+t.title+"</strong>"}n="";if(t.desc.length){n="<span>"+t.desc+"</span>"}n=e('<p class="ad-image-description">'+r+n+"</p>")}return n},showImage:function(e,t){if(this.images[e]&&!this.in_transition&&e!=this.current_index){var n=this;var r=this.images[e];this.in_transition=true;if(!r.preloaded){this.loading(true);this.preloadImage(e,function(){n.loading(false);n._showWhenLoaded(e,t)})}else{this._showWhenLoaded(e,t)}}},_showWhenLoaded:function(t,n){if(this.images[t]){var r=this;var i=this.images[t];var s=e(document.createElement("div")).addClass("ad-image");var o=e(new Image).attr("src",i.image);if(i.link){var u=e('<a href="'+i.link+'" target="_blank"></a>');u.append(o);s.append(u)}else{s.append(o)}this.image_wrapper.prepend(s);var a=this._getContainedImageSize(i.size.width,i.size.height);o.attr("width",a.width);o.attr("height",a.height);s.css({width:a.width+"px",height:a.height+"px"});this._centerImage(s,a.width,a.height);var f=this._getDescription(i);if(f){if(!this.settings.description_wrapper&&!this.settings.hooks.displayDescription){s.append(f);var l=a.width-parseInt(f.css("padding-left"),10)-parseInt(f.css("padding-right"),10);f.css("width",l+"px")}else if(this.settings.hooks.displayDescription){this.settings.hooks.displayDescription.call(this,i)}else{var c=this.settings.description_wrapper;c.append(f)}}this.highLightThumb(this.images[t].thumb_link);var h="right";if(this.current_index<t){h="left"}this.fireCallback(this.settings.callbacks.beforeImageVisible);if(this.current_image||this.settings.animate_first_image){var p=this.settings.animation_speed;var d="swing";var v=this.animations[this.settings.effect].call(this,s,h,f);if(typeof v.speed!="undefined"){p=v.speed}if(typeof v.easing!="undefined"){d=v.easing}if(this.current_image){var m=this.current_image;var g=this.current_description;m.animate(v.old_image,p,d,function(){m.remove();if(g)g.remove()})}s.animate(v.new_image,p,d,function(){r.current_index=t;r.current_image=s;r.current_description=f;r.in_transition=false;r._afterShow();r.fireCallback(n)})}else{this.current_index=t;this.current_image=s;r.current_description=f;this.in_transition=false;r._afterShow();this.fireCallback(n)}}},nextIndex:function(){var e;if(this.current_index==this.images.length-1){if(!this.settings.cycle){return false}e=0}else{e=this.current_index+1}return e},nextImage:function(e){var t=this.nextIndex();if(t===false)return false;this.preloadImage(t+1);this.showImage(t,e);return true},prevIndex:function(){var e;if(this.current_index==0){if(!this.settings.cycle){return false}e=this.images.length-1}else{e=this.current_index-1}return e},prevImage:function(e){var t=this.prevIndex();if(t===false)return false;this.preloadImage(t-1);this.showImage(t,e);return true},preloadAll:function(){function n(){if(t<e.images.length){t++;e.preloadImage(t,n)}}var e=this;var t=0;e.preloadImage(t,n)},preloadImage:function(t,n){if(this.images[t]){var r=this.images[t];if(!this.images[t].preloaded){var i=e(new Image);i.attr("src",r.image);if(!this.isImageLoaded(i[0])){this.preloads.append(i);var s=this;i.load(function(){r.preloaded=true;r.size={width:this.width,height:this.height};s.fireCallback(n)}).error(function(){r.error=true;r.preloaded=false;r.size=false})}else{r.preloaded=true;r.size={width:i[0].width,height:i[0].height};this.fireCallback(n)}}else{this.fireCallback(n)}}},whenImageLoaded:function(t,n){if(this.isImageLoaded(t)){n&&n()}else{e(t).load(n)}},isImageLoaded:function(e){if(typeof e.complete!="undefined"&&!e.complete){return false}if(typeof e.naturalWidth!="undefined"&&e.naturalWidth==0){return false}return true},highLightThumb:function(e){this.thumbs_wrapper.find(".ad-active").removeClass("ad-active");e.addClass("ad-active");if(this.settings.thumb_opacity<1){this.thumbs_wrapper.find("a:not(.ad-active) img").fadeTo(300,this.settings.thumb_opacity);e.find("img").fadeTo(300,1)}var t=e[0].parentNode.offsetLeft;t-=this.nav_display_width/2-e[0].offsetWidth/2;this.thumbs_wrapper.animate({scrollLeft:t+"px"})},fireCallback:function(t){if(e.isFunction(t)){t.call(this)}}};u.prototype={start_link:false,stop_link:false,countdown:false,controls:false,settings:false,nextimage_callback:false,enabled:false,running:false,countdown_interval:false,init:function(e,t){this.nextimage_callback=e;this.settings=t},create:function(){this.start_link=e('<span class="ad-slideshow-start">'+this.settings.start_label+"</span>");this.stop_link=e('<span class="ad-slideshow-stop">'+this.settings.stop_label+"</span>");this.countdown=e('<span class="ad-slideshow-countdown"></span>');this.controls=e('<div class="ad-slideshow-controls"></div>');this.controls.append(this.start_link).append(this.stop_link).append(this.countdown);this.countdown.hide();var t=this;this.start_link.click(function(){t.start()});this.stop_link.click(function(){t.stop()});e(document).keydown(function(e){if(e.keyCode==83){if(t.running){t.stop()}else{t.start()}}});return this.controls},disable:function(){this.enabled=false;this.stop();this.controls.hide()},enable:function(){this.enabled=true;this.controls.show()},toggle:function(){if(this.enabled){this.disable()}else{this.enable()}},start:function(){if(this.running||!this.enabled)return false;this.running=true;this.controls.addClass("ad-slideshow-running");this._next();this.fireCallback(this.settings.onStart);return true},stop:function(){if(!this.running)return false;this.running=false;this.countdown.hide();this.controls.removeClass("ad-slideshow-running");clearInterval(this.countdown_interval);this.fireCallback(this.settings.onStop);return true},_next:function(){var e=this;var t=this.settings.countdown_prefix;var n=this.settings.countdown_sufix;clearInterval(e.countdown_interval);this.countdown.show().html(t+this.settings.speed/1e3+n);var r=0;this.countdown_interval=setInterval(function(){r+=1e3;if(r>=e.settings.speed){var i=function(){if(e.running){e._next()}r=0};if(!e.nextimage_callback(i)){e.stop()}r=0}var s=parseInt(e.countdown.text().replace(/[^0-9]/g,""),10);s--;if(s>0){e.countdown.html(t+s+n)}},1e3)},fireCallback:function(t){if(e.isFunction(t)){t.call(this)}}}})(jQuery) |