diff --git a/dist/nz-toggle.js b/dist/nz-toggle.js
index b44958f..7bfc02b 100644
--- a/dist/nz-toggle.js
+++ b/dist/nz-toggle.js
@@ -111,12 +111,6 @@
first = false;
return;
}
- if (vm.onToggle.call) {
- var res = vm.onToggle();
- if (res && res.call) {
- res(vm.ngModel);
- }
- }
}, true);
// Interaction events
@@ -397,28 +391,35 @@
function toggle(state) {
if (vm.ngDisabled) return;
-
+ var originState = copy(vm.ngModel);
+
+ if (!state) {
+ if (vm.state == 'false') {
+ vm.ngModel = vm.triToggle ? vm.valNull : vm.valTrue;
+ return;
+ } else if (vm.state == 'null') {
+ vm.ngModel = vm.valTrue;
+ return;
+ } else {
+ vm.ngModel = vm.valFalse;
+ }
+ } else {
+ vm.state = state;
+ if (state === 'false') {
+ vm.ngModel = vm.valFalse;
+ return;
+ } else if (state === 'null') {
+ vm.ngModel = vm.valNull;
+ return;
+ } else {
+ vm.ngModel = vm.valTrue;
+ }
+ }
$timeout(function() {
- if (!state) {
- if (vm.state == 'false') {
- vm.ngModel = vm.triToggle ? vm.valNull : vm.valTrue;
- return;
- } else if (vm.state == 'null') {
- vm.ngModel = vm.valTrue;
- return;
- } else {
- vm.ngModel = vm.valFalse;
- }
- } else {
- vm.state = state;
- if (state === 'false') {
- vm.ngModel = vm.valFalse;
- return;
- } else if (state === 'null') {
- vm.ngModel = vm.valNull;
- return;
- } else {
- vm.ngModel = vm.valTrue;
+ if (vm.onToggle.call && originState != vm.ngModel) {
+ var res = vm.onToggle();
+ if (res && res.call) {
+ res(vm.ngModel);
}
}
});
diff --git a/dist/nz-toggle.min.js b/dist/nz-toggle.min.js
index 6aae956..1f0ca42 100644
--- a/dist/nz-toggle.min.js
+++ b/dist/nz-toggle.min.js
@@ -1 +1 @@
-!function(){var l=angular.module("nzToggle",[]);l.directive("nzToggle",["$timeout",function(l){return{restrict:"E",replace:!0,scope:{config:"=?",ngModel:"=",onToggle:"&",ngDisabled:"="},template:['
','
",'
'," ",' {{tipFalse}}'," ",'
',' ',' {{tipNull}}'," ",'
'," ",' {{tipTrue}}'," ","
","
"].join(""),link:function(o,e,t){function a(){s(),y(b.ngModel)||(y(b.valDefault)?b.ngModel=b.valDefault:b.triToggle?b.ngModel=b.valNull:b.ngModel=b.valFalse);var l=!0;b.$watch("ngModel",function(){if(c(),l)return void(l=!1);if(b.onToggle.call){var o=b.onToggle();o&&o.call&&o(b.ngModel)}},!0),v(e[0],"mousedown touchstart",i),v(e[0],"click",n),b.$on("$destroy",function(){p(e[0],"mousedown touchstart",i),p(window,"mousemove touchmove",r),p(window,"mouseup touchend",u),p(e[0],"click",n)})}function n(l){1>T&&d()}function i(l){return b.ngDisabled?void 0:(l=l?l:window.event,h={x:l.pageX||l.touches[0].pageX,y:l.pageY||l.touches[0].pageY},T=0,M.css("transition","0s"),v(window,"mousemove touchmove",r),v(window,"mouseup touchend",u),l.stopPropagation(),l.returnValue=!1,!1)}function r(l){l=l?l:window.event;var o=(l.pageY||l.touches[0].pageY)-h.y,t=(l.pageX||l.touches[0].pageX)-h.x,a=e[0].offsetHeight,n=e[0].offsetWidth,i=o/(a/2)*100,r=t/(n/2)*100;return b.vertical?(f=parseFloat(F.vertical[b.state]),w=Math.max(Math.min(parseFloat(i+f),100),0),m=f+(w-f)/2,M.css("top",m+"%")):(f=parseFloat(F.horizontal[b.state]),w=Math.max(Math.min(parseFloat(r+f),100),0),m=f+(w-f)/2,M.css("left",m+"%")),T=Math.max(T,Math.max(Math.abs(o),Math.abs(t))),l.stopPropagation(),l.returnValue=!1,!1}function u(l){return l=l?l:window.event,h=!1,b.$apply(function(){return 1>T&&"mouseup"==l.type?void 0:1>T&&"touchend"==l.type?void d():b.triToggle?b.vertical?w>73?void d("false"):w>27?void d("null"):void d("true"):27>w?void d("false"):73>w?void d("null"):void d("true"):b.vertical?w>50?void d("false"):void d("true"):50>w?void d("false"):void d("true")}),M.css({top:"",left:"",transition:""}),p(window,"mousemove touchmove",r),p(window,"mouseup touchend",u),l.stopPropagation(),l.returnValue=!1,!1}function s(){if(angular.extend(b,N,b.config||{}),y(t.triToggle)&&(b.triToggle=!0),angular.forEach(["valDefault","valTrue","valFalse","valNull","width","height","colorFalse","colorNull","colorTrue"],function(l){y(t[l])&&(b[l]=b.$eval(t[l]))}),angular.forEach(["tipTrue","tipFalse","tipNull"],function(l){y(t[l])&&b.$watch(t[l],function(o){b[l]=o})}),(b.tipTrue||t.tipFalse||t.tipNull)&&(b.tooltip=!0),y(t.vertical)){b.vertical=!0;var l;b.tooltip&&(l=b.tipTrue,b.tipTrue=b.tipFalse,b.tipFalse=l),b.$eval(t.width)||b.$eval(t.width)||b.config&&(b.config.width||b.config.height)||(l=b.width,b.width=b.height,b.height=l)}b.wrapStyle={width:b.width+"px",height:b.height+"px"},y(b.outerRadius)||(b.outerRadius=Math.min(b.width,b.height)/2),b.innerRadius=b.outerRadius-b.padding}function g(){return[b.vertical?"vertical":"horizontal",b.state]}function c(){return b.showTooltip1=!1,b.showTooltip2=!1,b.showTooltip3=!1,angular.equals(b.ngModel,b.valTrue)?(null!=b.colorTrue&&(b.wrapStyle.backgroundColor=b.colorTrue),b.state="true",void(b.vertical?b.showTooltip1=!0:b.showTooltip3=!0)):angular.equals(b.ngModel,b.valFalse)?(b.state="false",null!=b.colorFalse&&(b.wrapStyle.backgroundColor=b.colorFalse),void(b.vertical?b.showTooltip3=!0:b.showTooltip1=!0)):(b.state="null",null!=b.colorNull&&(b.wrapStyle.backgroundColor=b.colorNull),void(b.showTooltip2=!0))}function d(o){b.ngDisabled||l(function(){if(o){if(b.state=o,"false"===o)return void(b.ngModel=b.valFalse);if("null"===o)return void(b.ngModel=b.valNull);b.ngModel=b.valTrue}else{if("false"==b.state)return void(b.ngModel=b.triToggle?b.valNull:b.valTrue);if("null"==b.state)return void(b.ngModel=b.valTrue);b.ngModel=b.valFalse}})}function v(l,o,e){for(var t=o.split(" "),a=0,n=t.length;n>a;a++)l.addEventListener(t[a],e,!1)}function p(l,o,e){for(var t=o.split(" "),a=0,n=t.length;n>a;a++)l.removeEventListener(t[a],e,!1)}var h,f,w,T,m,M=angular.element(e[0].querySelector(".nz-toggle-handle")),F={horizontal:{"false":0,"null":50,"true":100},vertical:{"false":100,"null":50,"true":0}},y=angular.isDefined,N=(angular.copy,{vertical:!1,valTrue:!0,valFalse:!1,valNull:null,width:50,height:25,padding:3,colorTrue:null,colorFalse:null,colorNull:null,tooltip:!1}),b=o;angular.extend(b,{getStyle:g,toggle:d}),a()}}}])}();
\ No newline at end of file
+!function(){var l=angular.module("nzToggle",[]);l.directive("nzToggle",["$timeout",function(l){return{restrict:"E",replace:!0,scope:{config:"=?",ngModel:"=",onToggle:"&",ngDisabled:"="},template:['','
",'
'," ",' {{tipFalse}}'," ",'
',' ',' {{tipNull}}'," ",'
'," ",' {{tipTrue}}'," ","
","
"].join(""),link:function(o,e,t){function a(){s(),y(x.ngModel)||(y(x.valDefault)?x.ngModel=x.valDefault:x.triToggle?x.ngModel=x.valNull:x.ngModel=x.valFalse);var l=!0;x.$watch("ngModel",function(){if(c(),l)return void(l=!1)},!0),v(e[0],"mousedown touchstart",i),v(e[0],"click",n),x.$on("$destroy",function(){p(e[0],"mousedown touchstart",i),p(window,"mousemove touchmove",r),p(window,"mouseup touchend",u),p(e[0],"click",n)})}function n(l){T<1&&d()}function i(l){if(!x.ngDisabled)return l=l?l:window.event,h={x:l.pageX||l.touches[0].pageX,y:l.pageY||l.touches[0].pageY},T=0,M.css("transition","0s"),v(window,"mousemove touchmove",r),v(window,"mouseup touchend",u),l.stopPropagation(),l.returnValue=!1,!1}function r(l){l=l?l:window.event;var o=(l.pageY||l.touches[0].pageY)-h.y,t=(l.pageX||l.touches[0].pageX)-h.x,a=e[0].offsetHeight,n=e[0].offsetWidth,i=o/(a/2)*100,r=t/(n/2)*100;return x.vertical?(f=parseFloat(F.vertical[x.state]),w=Math.max(Math.min(parseFloat(i+f),100),0),m=f+(w-f)/2,M.css("top",m+"%")):(f=parseFloat(F.horizontal[x.state]),w=Math.max(Math.min(parseFloat(r+f),100),0),m=f+(w-f)/2,M.css("left",m+"%")),T=Math.max(T,Math.max(Math.abs(o),Math.abs(t))),l.stopPropagation(),l.returnValue=!1,!1}function u(l){return l=l?l:window.event,h=!1,x.$apply(function(){if(!(T<1&&"mouseup"==l.type))return T<1&&"touchend"==l.type?void d():x.triToggle?x.vertical?w>73?void d("false"):w>27?void d("null"):void d("true"):w<27?void d("false"):w<73?void d("null"):void d("true"):x.vertical?w>50?void d("false"):void d("true"):w<50?void d("false"):void d("true")}),M.css({top:"",left:"",transition:""}),p(window,"mousemove touchmove",r),p(window,"mouseup touchend",u),l.stopPropagation(),l.returnValue=!1,!1}function s(){if(angular.extend(x,b,x.config||{}),y(t.triToggle)&&(x.triToggle=!0),angular.forEach(["valDefault","valTrue","valFalse","valNull","width","height","colorFalse","colorNull","colorTrue"],function(l){y(t[l])&&(x[l]=x.$eval(t[l]))}),angular.forEach(["tipTrue","tipFalse","tipNull"],function(l){y(t[l])&&x.$watch(t[l],function(o){x[l]=o})}),(x.tipTrue||t.tipFalse||t.tipNull)&&(x.tooltip=!0),y(t.vertical)){x.vertical=!0;var l;x.tooltip&&(l=x.tipTrue,x.tipTrue=x.tipFalse,x.tipFalse=l),x.$eval(t.width)||x.$eval(t.width)||x.config&&(x.config.width||x.config.height)||(l=x.width,x.width=x.height,x.height=l)}x.wrapStyle={width:x.width+"px",height:x.height+"px"},y(x.outerRadius)||(x.outerRadius=Math.min(x.width,x.height)/2),x.innerRadius=x.outerRadius-x.padding}function g(){return[x.vertical?"vertical":"horizontal",x.state]}function c(){return x.showTooltip1=!1,x.showTooltip2=!1,x.showTooltip3=!1,angular.equals(x.ngModel,x.valTrue)?(null!=x.colorTrue&&(x.wrapStyle.backgroundColor=x.colorTrue),x.state="true",void(x.vertical?x.showTooltip1=!0:x.showTooltip3=!0)):angular.equals(x.ngModel,x.valFalse)?(x.state="false",null!=x.colorFalse&&(x.wrapStyle.backgroundColor=x.colorFalse),void(x.vertical?x.showTooltip3=!0:x.showTooltip1=!0)):(x.state="null",null!=x.colorNull&&(x.wrapStyle.backgroundColor=x.colorNull),void(x.showTooltip2=!0))}function d(o){if(!x.ngDisabled){var e=N(x.ngModel);if(o){if(x.state=o,"false"===o)return void(x.ngModel=x.valFalse);if("null"===o)return void(x.ngModel=x.valNull);x.ngModel=x.valTrue}else{if("false"==x.state)return void(x.ngModel=x.triToggle?x.valNull:x.valTrue);if("null"==x.state)return void(x.ngModel=x.valTrue);x.ngModel=x.valFalse}l(function(){if(x.onToggle.call&&e!=x.ngModel){var l=x.onToggle();l&&l.call&&l(x.ngModel)}})}}function v(l,o,e){for(var t=o.split(" "),a=0,n=t.length;a