Files
dashboard/user/plugins/featherlight/js/featherlight.min.js
T

9 lines
7.3 KiB
JavaScript

/**
* Featherlight - ultra slim jQuery lightbox
* Version 1.3.2 - http://noelboss.github.io/featherlight/
*
* Copyright 2015, Noël Raoul Bossart (http://www.noelboss.com)
* MIT Licensed.
**/
(function(d){function g(a,b){if(this instanceof g)this.id=g.id++,this.setup(a,b),this.chainCallbacks(g._callbackChain);else{var c=new g(a,b);c.open();return c}}if("undefined"===typeof d)"console"in window&&window.console.info("Too much lightness, Featherlight needs jQuery.");else{var l=[],m=function(a){return l=d.grep(l,function(b){return b!==a&&0<b.$instance.closest("body").length})},q=function(a,b){var c={},d=new RegExp("^"+b+"([A-Z])(.*)"),f;for(f in a){var h=f.match(d);h&&(h=(h[1]+h[2].replace(/([A-Z])/g,"-$1")).toLowerCase(),c[h]=a[f])}return c},n={keyup:"onKeyUp",resize:"onResize"},r=function(a){d.each(g.opened().reverse(),function(){if(!a.isDefaultPrevented()&&!1===this[n[a.type]](a))return a.preventDefault(),a.stopPropagation(),!1})},p=function(a){if(a!==g._globalHandlerInstalled){g._globalHandlerInstalled=a;var b=d.map(n,function(a,b){return b+"."+g.prototype.namespace}).join(" ");d(window)[a?"on":"off"](b,r)}};g.prototype={constructor:g,namespace:"featherlight",targetAttr:"data-featherlight",variant:null,resetCss:!1,background:null,openTrigger:"click",closeTrigger:"click",filter:null,root:"body",openSpeed:250,closeSpeed:250,closeOnClick:"background",closeOnEsc:!0,closeIcon:"&#10005;",loading:"",persist:!1,otherClose:null,beforeOpen:d.noop,beforeContent:d.noop,beforeClose:d.noop,afterOpen:d.noop,afterContent:d.noop,afterClose:d.noop,onKeyUp:d.noop,onResize:d.noop,type:null,contentFilters:"jquery image html ajax iframe text".split(" "),setup:function(a,b){"object"!==typeof a||!1!==a instanceof d||b||(b=a,a=void 0);var c=d.extend(this,b,{target:a}),e=c.resetCss?c.namespace+"-reset":c.namespace,e=d(c.background||['<div class="'+e+"-loading "+e+'">','<div class="'+e+'-content">','<span class="'+e+"-close-icon "+c.namespace+'-close">',c.closeIcon,"</span>",'<div class="'+c.namespace+'-inner">'+c.loading+"</div>","</div></div>"].join("")),f="."+c.namespace+"-close"+(c.otherClose?","+c.otherClose:"");c.$instance=e.clone().addClass(c.variant);c.$instance.on(c.closeTrigger+"."+c.namespace,function(a){var b=d(a.target);if("background"===c.closeOnClick&&b.is("."+c.namespace)||"anywhere"===c.closeOnClick||b.closest(f).length)a.preventDefault(),c.close()});return this},getContent:function(){if(!1!==this.persist&&this.$content)return this.$content;var a=this.constructor.contentFilters,b=this.$currentTarget&&this.$currentTarget.attr(this.targetAttr),c=this.target||b||"",e=a[this.type];!e&&c in a&&(e=a[c],c=this.target&&b);c=c||this.$currentTarget&&this.$currentTarget.attr("href")||"";if(!e)for(var f in a)this[f]&&(e=a[f],c=this[f]);if(!e){var h=c,c=null;d.each(this.contentFilters,function(){e=a[this];e.test&&(c=e.test(h));!c&&e.regex&&h.match&&h.match(e.regex)&&(c=h);return!c});if(!c)return"console"in window&&window.console.error("Featherlight: no content filter found "+(h?' for "'+h+'"':" (no target specified)")),!1}return e.process.call(this,c)},setContent:function(a){(a.is("iframe")||0<d("iframe",a).length)&&this.$instance.addClass(this.namespace+"-iframe");this.$instance.removeClass(this.namespace+"-loading");this.$instance.find("."+this.namespace+"-inner").not(a).slice(1).remove().end().replaceWith(d.contains(this.$instance[0],a[0])?"":a);this.$content=a.addClass(this.namespace+"-inner");return this},open:function(a){var b=this;b.$instance.hide().appendTo(b.root);if(!(a&&a.isDefaultPrevented()||!1===b.beforeOpen(a))){a&&a.preventDefault();var c=b.getContent();if(c)return l.push(b),p(!0),b.$instance.fadeIn(b.openSpeed),b.beforeContent(a),d.when(c).always(function(c){b.setContent(c);b.afterContent(a)}).then(b.$instance.promise()).done(function(){b.afterOpen(a)})}b.$instance.detach();return d.Deferred().reject().promise()},close:function(a){var b=this,c=d.Deferred();!1===b.beforeClose(a)?c.reject():(0===m(b).length&&p(!1),b.$instance.fadeOut(b.closeSpeed,function(){b.$instance.detach();b.afterClose(a);c.resolve()}));return c.promise()},chainCallbacks:function(a){for(var b in a)this[b]=d.proxy(a[b],this,d.proxy(this[b],this))}};d.extend(g,{id:0,autoBind:"[data-featherlight]",defaults:g.prototype,contentFilters:{jquery:{regex:/^[#.]\w/,test:function(a){return a instanceof d&&a},process:function(a){return!1!==this.persist?d(a):d(a).clone(!0)}},image:{regex:/\.(png|jpg|jpeg|gif|tiff|bmp)(\?\S*)?$/i,process:function(a){var b=d.Deferred(),c=new Image,e=d('<img src="'+a+'" alt="" class="'+this.namespace+'-image" />');c.onload=function(){e.naturalWidth=c.width;e.naturalHeight=c.height;b.resolve(e)};c.onerror=function(){b.reject(e)};c.src=a;return b.promise()}},html:{regex:/^\s*<[\w!][^<]*>/,process:function(a){return d(a)}},ajax:{regex:/./,process:function(a){var b=d.Deferred(),c=d("<div></div>").load(a,function(a,d){"error"!==d&&b.resolve(c.contents());b.fail()});return b.promise()}},iframe:{process:function(a){var b=new d.Deferred,c=d("<iframe/>").hide().attr("src",a).css(q(this,"iframe")).on("load",function(){b.resolve(c.show())}).appendTo(this.$instance.find("."+this.namespace+"-content"));return b.promise()}},text:{process:function(a){return d("<div>",{text:a})}}},functionAttributes:"beforeOpen afterOpen beforeContent afterContent beforeClose afterClose".split(" "),readElementConfig:function(a,b){var c=this,e=new RegExp("^data-"+b+"-(.*)"),f={};a&&a.attributes&&d.each(a.attributes,function(){var a=this.name.match(e);if(a){var b=this.value,a=d.camelCase(a[1]);if(0<=d.inArray(a,c.functionAttributes))b=new Function(b);else try{b=d.parseJSON(b)}catch(g){}f[a]=b}});return f},extend:function(a,b){var c=function(){this.constructor=a};c.prototype=this.prototype;a.prototype=new c;a.__super__=this.prototype;d.extend(a,this,b);a.defaults=a.prototype;return a},attach:function(a,b,c){var e=this;"object"!==typeof b||!1!==b instanceof d||c||(c=b,b=void 0);c=d.extend({},c);var f=d.extend({},e.defaults,e.readElementConfig(a[0],c.namespace||e.defaults.namespace),c),g;a.on(f.openTrigger+"."+f.namespace,f.filter,function(l){var k=d.extend({$source:a,$currentTarget:d(this)},e.readElementConfig(a[0],f.namespace),e.readElementConfig(this,f.namespace),c),k=g||d(this).data("featherlight-persisted")||new e(b,k);"shared"===k.persist?g=k:!1!==k.persist&&d(this).data("featherlight-persisted",k);k.open(l)});return a},current:function(){var a=this.opened();return a[a.length-1]||null},opened:function(){var a=this;m();return d.grep(l,function(b){return b instanceof a})},close:function(){var a=this.current();if(a)return a.close()},_onReady:function(){var a=this;a.autoBind&&(a.attach(d(document),{filter:a.autoBind}),d(a.autoBind).filter("[data-featherlight-filter]").each(function(){a.attach(d(this))}))},_callbackChain:{onKeyUp:function(a,b){return 27===b.keyCode?(this.closeOnEsc&&this.$instance.find("."+this.namespace+"-close:first").click(),!1):a(b)},onResize:function(a,b){if(this.$content.naturalWidth){var c=this.$content.naturalWidth,d=this.$content.naturalHeight;this.$content.css("width","").css("height","");var f=Math.max(c/parseInt(this.$content.parent().css("width"),10),d/parseInt(this.$content.parent().css("height"),10));1<f&&this.$content.css("width",""+c/f+"px").css("height",""+d/f+"px")}return a(b)},afterContent:function(a,b){var c=a(b);this.onResize(b);return c}}});d.featherlight=g;d.fn.featherlight=function(a,b){return g.attach(this,a,b)};d(document).ready(function(){g._onReady()})}})(jQuery);