2015-07-14 13:45:54 -07:00

9 lines
4.6 KiB
JavaScript

/**
* angular-strap
* @version v2.2.1 - 2015-03-10
* @link http://mgcrea.github.io/angular-strap
* @author Olivier Louvignes (olivier@mg-crea.com)
* @license MIT License, http://www.opensource.org/licenses/MIT
*/
"use strict";angular.module("mgcrea.ngStrap.modal",["mgcrea.ngStrap.helpers.dimensions"]).provider("$modal",function(){var e=this.defaults={animation:"am-fade",backdropAnimation:"am-fade",prefixClass:"modal",prefixEvent:"modal",placement:"top",template:"modal/modal.tpl.html",contentTemplate:!1,container:!1,element:null,backdrop:!0,keyboard:!0,html:!1,show:!0};this.$get=["$window","$rootScope","$compile","$q","$templateCache","$http","$animate","$timeout","$sce","dimensions",function(n,t,o,a,i,r,l,c,s){function u(n){function a(){w.$emit(v.prefixEvent+".show",u)}function i(){w.$emit(v.prefixEvent+".hide",u),g.removeClass(v.prefixClass+"-open"),v.animation&&g.removeClass(v.prefixClass+"-with-"+v.animation)}function r(e){e.target===e.currentTarget&&("static"===v.backdrop?u.focus():u.hide())}function c(e){e.preventDefault()}var u={},v=u.$options=angular.extend({},e,n);u.$promise=f(v.template);var w=u.$scope=v.scope&&v.scope.$new()||t.$new();v.element||v.container||(v.container="body"),u.$id=v.id||v.element&&v.element.attr("id")||"",m(["title","content"],function(e){v[e]&&(w[e]=s.trustAsHtml(v[e]))}),w.$hide=function(){w.$$postDigest(function(){u.hide()})},w.$show=function(){w.$$postDigest(function(){u.show()})},w.$toggle=function(){w.$$postDigest(function(){u.toggle()})},u.$isShown=w.$isShown=!1,v.contentTemplate&&(u.$promise=u.$promise.then(function(e){var t=angular.element(e);return f(v.contentTemplate).then(function(e){var o=p('[ng-bind="content"]',t[0]).removeAttr("ng-bind").html(e);return n.template||o.next().remove(),t[0].outerHTML})}));var k,x,y=angular.element('<div class="'+v.prefixClass+'-backdrop"/>');return y.css({position:"fixed",top:"0px",left:"0px",bottom:"0px",right:"0px","z-index":1038}),u.$promise.then(function(e){angular.isObject(e)&&(e=e.data),v.html&&(e=e.replace(b,'ng-bind-html="')),e=h.apply(e),k=o(e),u.init()}),u.init=function(){v.show&&w.$$postDigest(function(){u.show()})},u.destroy=function(){x&&(x.remove(),x=null),y&&(y.remove(),y=null),w.$destroy()},u.show=function(){if(!u.$isShown){var e,n;if(angular.isElement(v.container)?(e=v.container,n=v.container[0].lastChild?angular.element(v.container[0].lastChild):null):v.container?(e=p(v.container),n=e[0].lastChild?angular.element(e[0].lastChild):null):(e=null,n=v.element),x=u.$element=k(w,function(){}),!w.$emit(v.prefixEvent+".show.before",u).defaultPrevented){x.css({display:"block"}).addClass(v.placement),v.animation&&(v.backdrop&&y.addClass(v.backdropAnimation),x.addClass(v.animation)),v.backdrop&&l.enter(y,g,null);var t=l.enter(x,e,n,a);t&&t.then&&t.then(a),u.$isShown=w.$isShown=!0,d(w);var o=x[0];$(function(){o.focus()}),g.addClass(v.prefixClass+"-open"),v.animation&&g.addClass(v.prefixClass+"-with-"+v.animation),v.backdrop&&(x.on("click",r),y.on("click",r),y.on("wheel",c)),v.keyboard&&x.on("keyup",u.$onKeyUp)}}},u.hide=function(){if(u.$isShown&&!w.$emit(v.prefixEvent+".hide.before",u).defaultPrevented){var e=l.leave(x,i);e&&e.then&&e.then(i),v.backdrop&&l.leave(y),u.$isShown=w.$isShown=!1,d(w),v.backdrop&&(x.off("click",r),y.off("click",r),y.off("wheel",c)),v.keyboard&&x.off("keyup",u.$onKeyUp)}},u.toggle=function(){u.$isShown?u.hide():u.show()},u.focus=function(){x[0].focus()},u.$onKeyUp=function(e){27===e.which&&u.$isShown&&(u.hide(),e.stopPropagation())},u}function d(e){e.$$phase||e.$root&&e.$root.$$phase||e.$digest()}function p(e,n){return angular.element((n||document).querySelectorAll(e))}function f(e){return v[e]?v[e]:v[e]=r.get(e,{cache:i}).then(function(e){return e.data})}var m=angular.forEach,h=String.prototype.trim,$=n.requestAnimationFrame||n.setTimeout,g=angular.element(n.document.body),b=/ng-bind="/gi,v={};return u}]}).directive("bsModal",["$window","$sce","$modal",function(e,n,t){return{restrict:"EAC",scope:!0,link:function(e,o,a){var i={scope:e,element:o,show:!1};angular.forEach(["template","contentTemplate","placement","container","animation","id"],function(e){angular.isDefined(a[e])&&(i[e]=a[e])});var r=/^(false|0|)$/;angular.forEach(["keyboard","html"],function(e){angular.isDefined(a[e])&&(i[e]=!r.test(a[e]))}),angular.isDefined(a.backdrop)&&(i.backdrop=r.test(a.backdrop)?!1:a.backdrop),angular.forEach(["title","content"],function(t){a[t]&&a.$observe(t,function(o){e[t]=n.trustAsHtml(o)})}),a.bsModal&&e.$watch(a.bsModal,function(n){angular.isObject(n)?angular.extend(e,n):e.content=n},!0);var l=t(i);o.on(a.trigger||"click",l.toggle),e.$on("$destroy",function(){l&&l.destroy(),i=null,l=null})}}}]);
//# sourceMappingURL=modal.min.js.map