angular-toaster.min.js 3.2 KB

1
  1. "use strict";angular.module("toaster",["ngAnimate"]).service("toaster",["$rootScope",function(a){this.pop=function(d,f,b,e,c,g){this.toast={type:d,title:f,body:b,timeout:e,bodyOutputType:c,clickHandler:g};a.$broadcast("toaster-newToast")};this.clear=function(){a.$broadcast("toaster-clearToasts")}}]).constant("toasterConfig",{limit:0,"tap-to-dismiss":true,"close-button":false,"newest-on-top":true,"time-out":5000,"icon-classes":{error:"toast-error",info:"toast-info",wait:"toast-wait",success:"toast-success",warning:"toast-warning"},"body-output-type":"","body-template":"toasterBodyTmpl.html","icon-class":"toast-info","position-class":"toast-top-right","title-class":"toast-title","message-class":"toast-message"}).directive("toasterContainer",["$compile","$timeout","$sce","toasterConfig","toaster",function(e,d,b,a,c){return{replace:true,restrict:"EA",scope:true,link:function(h,m,g){var l=0,k;k=angular.extend({},a,h.$eval(g.toasterOptions));h.config={position:k["position-class"],title:k["title-class"],message:k["message-class"],tap:k["tap-to-dismiss"],closeButton:k["close-button"]};h.configureTimer=function j(n){var o=typeof(n.timeout)=="number"?n.timeout:k["time-out"];if(o>0){i(n,o)}};function f(n){n.type=k["icon-classes"][n.type];if(!n.type){n.type=k["icon-class"]}l++;angular.extend(n,{id:l});n.bodyOutputType=n.bodyOutputType||k["body-output-type"];switch(n.bodyOutputType){case"trustedHtml":n.html=b.trustAsHtml(n.body);break;case"template":n.bodyTemplate=n.body||k["body-template"];break}h.configureTimer(n);if(k["newest-on-top"]===true){h.toasters.unshift(n);if(k.limit>0&&h.toasters.length>k.limit){h.toasters.pop()}}else{h.toasters.push(n);if(k.limit>0&&h.toasters.length>k.limit){h.toasters.shift()}}}function i(n,o){n.timeout=d(function(){h.removeToast(n.id)},o)}h.toasters=[];h.$on("toaster-newToast",function(){f(c.toast)});h.$on("toaster-clearToasts",function(){h.toasters.splice(0,h.toasters.length)})},controller:["$scope","$element","$attrs",function(h,g,f){h.stopTimer=function(i){if(i.timeout){d.cancel(i.timeout);i.timeout=null}};h.restartTimer=function(i){if(!i.timeout){h.configureTimer(i)}};h.removeToast=function(k){var j=0;for(j;j<h.toasters.length;j++){if(h.toasters[j].id===k){break}}h.toasters.splice(j,1)};h.click=function(j){if(h.config.tap===true){if(j.clickHandler&&angular.isFunction(h.$parent.$eval(j.clickHandler))){var i=h.$parent.$eval(j.clickHandler)(j);if(i===true){h.removeToast(j.id)}}else{if(angular.isString(j.clickHandler)){console.log("TOAST-NOTE: Your click handler is not inside a parent scope of toaster-container.")}h.removeToast(j.id)}}}}],template:'<div id="toast-container" ng-class="config.position"><div ng-repeat="toaster in toasters" class="toast" ng-class="toaster.type" ng-click="click(toaster)" ng-mouseover="stopTimer(toaster)" ng-mouseout="restartTimer(toaster)"><button class="toast-close-button" ng-show="config.closeButton">&times;</button><div ng-class="config.title">{{toaster.title}}</div><div ng-class="config.message" ng-switch on="toaster.bodyOutputType"><div ng-switch-when="trustedHtml" ng-bind-html="toaster.html"></div><div ng-switch-when="template"><div ng-include="toaster.bodyTemplate"></div></div><div ng-switch-default >{{toaster.body}}</div></div></div></div>'}}]);