9 lines
7.8 KiB
JavaScript
9 lines
7.8 KiB
JavaScript
/*!
|
|
* jQuery Popup Overlay
|
|
*
|
|
* @version 1.6.0
|
|
* @requires jQuery v1.7.1+
|
|
* @link http://vast-engineering.github.com/jquery-popup-overlay/
|
|
*/
|
|
|
|
!function(t){var e,i=t(window),o={},n=[],a=[],s=!1,p=!1,l=null,d=null,c=null,r=null,u="_open",f="_close",h=null,v={_init:function(e){var i=t(e),o=i.data("popupoptions");a[e.id]=!1,n[e.id]=0,i.data("popup-initialized")||(i.attr("data-popup-initialized","true"),v._initonce(e)),o.autoopen&&setTimeout(function(){v.show(e,0)},0)},_initonce:function(i){var o,n=t("body"),a=$el.data("popupoptions");if(r=parseInt(n.css("margin-right"),10),"tooltip"==a.type&&(a.background=!1,a.scrolllock=!1),a.scrolllock){var s,p;"undefined"==typeof e&&(s=t('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo("body"),p=s.children(),e=p.innerWidth()-p.height(99).innerWidth(),s.remove())}if($el.attr("id")||$el.attr("id","j-popup-"+parseInt(1e8*Math.random())),$el.addClass("popup_content"),n.prepend(i),$el.wrap('<div id="'+i.id+'_wrapper" class="popup_wrapper" />'),o=t("#"+i.id+"_wrapper"),o.css({opacity:0,visibility:"hidden",position:"absolute",overflow:"auto"}),$el.css({opacity:0,visibility:"hidden",display:"inline-block"}),a.setzindex&&!a.autozindex&&o.css("z-index","2001"),a.outline||$el.css("outline","none"),a.transition&&($el.css("transition",a.transition),o.css("transition",a.transition)),t(i).attr("aria-hidden",!0),a.background&&!t("#"+i.id+"_background").length){var l='<div id="'+i.id+'_background" class="popup_background"></div>';n.prepend(l);var d=t("#"+i.id+"_background");d.css({opacity:0,visibility:"hidden",backgroundColor:a.color,position:"fixed",top:0,right:0,bottom:0,left:0}),a.setzindex&&!a.autozindex&&d.css("z-index","2000"),a.transition&&d.css("transition",a.transition)}"overlay"==a.type&&($el.css({textAlign:"left",position:"relative",verticalAlign:"middle"}),o.css({position:"fixed",top:0,right:0,left:0,bottom:0,textAlign:"center"}),o.append('<div class="popup_align" />'),t(".popup_align").css({display:"inline-block",verticalAlign:"middle",height:"100%"})),$el.attr("role","dialog");var c=a.openelement?a.openelement:"."+i.id+u;t(c).each(function(e,i){t(i).attr("data-popup-ordinal",e),t(i).attr("id")||t(i).attr("id","open_"+parseInt(1e8*Math.random(),10))}),$el.attr("aria-labelledby")||$el.attr("aria-label")||$el.attr("aria-labelledby",t(c).attr("id")),t(document).on("click",c,function(e){if(!$el.data("popup-visible")){var o=t(this).data("popup-ordinal");setTimeout(function(){v.show(i,o)},0),e.preventDefault()}});var h=a.closeelement?a.closeelement:"."+i.id+f;t(document).on("click",h,function(t){v.hide(i),t.preventDefault()}),a.detach?$el.hide().detach():o.hide()},show:function(o,u){var f=t(o);if(!f.data("popup-visible")){f.data("popup-initialized")||v._init(o),f.attr("data-popup-initialized","true");var g=t("body"),m=f.data("popupoptions"),y=t("#"+o.id+"_wrapper"),_=t("#"+o.id+"_background");if(b(o,u,m.beforeopen),a[o.id]=u,m.detach?(y.prepend(o),f.show()):y.show(),setTimeout(function(){y.css({visibility:"visible",opacity:1}),t("html").addClass("popup_visible").addClass("popup_visible_"+o.id),f.addClass("popup_content_visible")},20),f.css({visibility:"visible",opacity:1}),m.scrolllock&&(g.css("overflow","hidden"),g.height()>i.height()&&g.css("margin-right",r+e)),setTimeout(function(){s||(m.keepfocus&&t(document).on("focusin",l),m.blur&&t(document).on("click",d),m.escape&&t(document).on("keydown",c)),s?p=!0:s=!0},0),f.data("popup-visible",!0),v.reposition(o,u),m.background&&(_.css({visibility:"visible",opacity:m.opacity}),setTimeout(function(){_.css({opacity:m.opacity})},0)),h=document.activeElement,m.keepfocus&&(f.attr("tabindex",-1),setTimeout(function(){m.focuselement?t(m.focuselement).focus():f.focus()},m.focusdelay),l=function(t){var e=document.getElementById(o.id);e.contains(t.target)||(t.stopPropagation(),e.focus())}),m.autozindex){for(var k=document.getElementsByTagName("*"),w=k.length,$=0,z=0;w>z;z++){var x=t(k[z]).css("z-index");"auto"!==x&&(x=parseInt(x),x>$&&($=x))}n[o.id]=$,n[o.id]>0&&y.css({zIndex:n[o.id]+2}),m.background&&n[o.id]>0&&t("#"+o.id+"_background").css({zIndex:n[o.id]+1})}m.blur&&(d=function(e){t(e.target).parents().andSelf().is("#"+o.id)||v.hide(o)}),m.escape&&(c=function(t){27==t.keyCode&&f.data("popup-visible")&&v.hide(o)}),t(m.pagecontainer).attr("aria-hidden",!0),f.attr("aria-hidden",!1),y.one("transitionend",function(){b(o,u,m.opentransitionend)}),b(o,u,m.onopen)}},hide:function(e){var i=t("body"),o=t(e),n=o.data("popupoptions"),u=t("#"+e.id+"_wrapper"),f=t("#"+e.id+"_background");o.data("popup-visible",!1),p?(t("html").removeClass("popup_visible_"+e.id),p=!1):(t("html").removeClass("popup_visible").removeClass("popup_visible_"+e.id),s=!1),o.removeClass("popup_content_visible"),n.scrolllock&&setTimeout(function(){i.css({overflow:"visible","margin-right":r})},10),n.blur&&t(document).off("click",d),n.keepfocus&&(t(document).off("focusin",l),setTimeout(function(){t(h).is(":visible")&&h.focus()},0)),n.escape&&t(document).off("keydown",c),u.css({visibility:"hidden",opacity:0}),o.css({visibility:"hidden",opacity:0}),n.background&&f.css({visibility:"hidden",opacity:0}),o.one("transitionend",function(){o.data("popup-visible")||(n.detach?o.hide().detach():u.hide()),n.notransitiondetach||b(e,a[e.id],n.closetransitionend)}),n.notransitiondetach&&(n.detach?o.hide().detach():u.hide()),t(n.pagecontainer).attr("aria-hidden",!1),o.attr("aria-hidden",!0),b(e,a[e.id],n.onclose)},toggle:function(t,e){$el.data("popup-visible")?v.hide(t):setTimeout(function(){v.show(t,e)},0)},reposition:function(e,i){{var o=t(e),n=o.data("popupoptions"),a=t("#"+e.id+"_wrapper");t("#"+e.id+"_background")}if(i=i||0,"tooltip"==n.type){a.css({position:"absolute"});var s=n.openelement?n.openelement:"."+e.id+u,p=t(s+'[data-popup-ordinal="'+i+'"]'),l=p.offset();"right"==n.horizontal?a.css("left",l.left+p.outerWidth()+n.offsetleft):"leftedge"==n.horizontal?a.css("left",l.left+p.outerWidth()-p.outerWidth()+n.offsetleft):"left"==n.horizontal?a.css("right",t(window).width()-l.left-n.offsetleft):"rightedge"==n.horizontal?a.css("right",t(window).width()-l.left-p.outerWidth()-n.offsetleft):a.css("left",l.left+p.outerWidth()/2-o.outerWidth()/2-parseFloat(o.css("marginLeft"))+n.offsetleft),"bottom"==n.vertical?a.css("top",l.top+p.outerHeight()+n.offsettop):"bottomedge"==n.vertical?a.css("top",l.top+p.outerHeight()-o.outerHeight()+n.offsettop):"top"==n.vertical?a.css("bottom",t(window).height()-l.top-n.offsettop):"topedge"==n.vertical?a.css("bottom",t(window).height()-l.top-o.outerHeight()-n.offsettop):a.css("top",l.top+p.outerHeight()/2-o.outerHeight()/2-parseFloat(o.css("marginTop"))+n.offsettop)}else"overlay"==n.type&&(n.horizontal?a.css("text-align",n.horizontal):a.css("text-align","center"),n.vertical?o.css("vertical-align",n.vertical):o.css("vertical-align","middle"))}},b=function(e,i,n){var a=o.openelement?o.openelement:"."+e.id+u,s=t(a+'[data-popup-ordinal="'+i+'"]');"function"==typeof n&&n(s)};t.fn.popup=function(e){return this.each(function(){if($el=t(this),"object"==typeof e){var i=t.extend({},t.fn.popup.defaults,e);$el.data("popupoptions",i),o=$el.data("popupoptions"),v._init(this)}else"string"==typeof e?($el.data("popupoptions")||($el.data("popupoptions",t.fn.popup.defaults),o=$el.data("popupoptions")),v[e].call(this,this)):($el.data("popupoptions")||($el.data("popupoptions",t.fn.popup.defaults),o=$el.data("popupoptions")),v._init(this))})},t.fn.popup.defaults={type:"overlay",autoopen:!1,background:!0,color:"black",opacity:"0.5",horizontal:"center",vertical:"middle",offsettop:0,offsetleft:0,escape:!0,blur:!0,setzindex:!0,autozindex:!1,scrolllock:!1,keepfocus:!0,focuselement:null,focusdelay:50,outline:!1,pagecontainer:null,detach:!1,openelement:null,closeelement:null,transition:null,notransitiondetach:!1,beforeopen:function(){},onclose:function(){},onopen:function(){},opentransitionend:function(){},closetransitionend:function(){}}}(jQuery); |