angular-ui-mask
Advanced tools
Comparing version 1.7.2 to 1.8.0
/*! | ||
* angular-ui-mask | ||
* https://github.com/angular-ui/ui-mask | ||
* Version: 1.7.2 - 2016-01-29T01:41:09.032Z | ||
* Version: 1.8.0 - 2016-02-19T02:52:44.000Z | ||
* License: MIT | ||
@@ -25,3 +25,25 @@ */ | ||
}) | ||
.directive('uiMask', ['uiMaskConfig', function(maskConfig) { | ||
.provider('uiMask.Config', function() { | ||
var options = {}; | ||
this.clearOnBlur = function(clearOnBlur) { | ||
return options.clearOnBlur = clearOnBlur; | ||
}; | ||
this.clearOnBlurPlaceholder = function(clearOnBlurPlaceholder) { | ||
return options.clearOnBlurPlaceholder = clearOnBlurPlaceholder; | ||
}; | ||
this.eventsToHandle = function(eventsToHandle) { | ||
return options.eventsToHandle = eventsToHandle; | ||
}; | ||
this.$get = ['uiMaskConfig', function(uiMaskConfig) { | ||
var tempOptions = uiMaskConfig; | ||
for(var prop in options) | ||
{ | ||
tempOptions[prop] = options[prop]; | ||
} | ||
return tempOptions; | ||
}]; | ||
}) | ||
.directive('uiMask', ['uiMask.Config', function(maskConfig) { | ||
function isFocused (elem) { | ||
@@ -170,3 +192,3 @@ return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); | ||
controller.$formatters.push(formatter); | ||
controller.$formatters.unshift(formatter); | ||
controller.$parsers.unshift(parser); | ||
@@ -517,3 +539,3 @@ | ||
// These events don't require any action | ||
if (isSelection || (isSelected && (eventType === 'click' || eventType === 'keyup'))) { | ||
if (isSelection || (isSelected && (eventType === 'click' || eventType === 'keyup' || eventType === 'focus'))) { | ||
return; | ||
@@ -520,0 +542,0 @@ } |
/*! | ||
* angular-ui-mask | ||
* https://github.com/angular-ui/ui-mask | ||
* Version: 1.7.2 - 2016-01-29T01:41:09.032Z | ||
* Version: 1.8.0 - 2016-02-19T02:52:44.000Z | ||
* License: MIT | ||
*/ | ||
!function(){"use strict";angular.module("ui.mask",[]).value("uiMaskConfig",{maskDefinitions:{9:/\d/,A:/[a-zA-Z]/,"*":/[a-zA-Z0-9]/},clearOnBlur:!0,clearOnBlurPlaceholder:!1,eventsToHandle:["input","keyup","click","focus"]}).directive("uiMask",["uiMaskConfig",function(e){function n(e){return e===document.activeElement&&(!document.hasFocus||document.hasFocus())&&!!(e.type||e.href||~e.tabIndex)}return{priority:100,require:"ngModel",restrict:"A",compile:function(){var t=e;return function(e,i,r,a){function u(e){return angular.isDefined(e)?($(e),q?(h(),d(),!0):f()):f()}function l(e){e&&(C=e,!q||0===i.val().length&&angular.isDefined(r.placeholder)||i.val(m(p(i.val()))))}function o(){return u(r.uiMask)}function c(e){return q?(T=p(e||""),H=v(T),a.$setValidity("mask",H),H&&T.length?m(T):void 0):e}function s(e){return q?(T=p(e||""),H=v(T),a.$viewValue=T.length?m(T):"",a.$setValidity("mask",H),H?J?a.$viewValue:T:void 0):e}function f(){return q=!1,g(),angular.isDefined(K)?i.attr("placeholder",K):i.removeAttr("placeholder"),angular.isDefined(W)?i.attr("maxlength",W):i.removeAttr("maxlength"),i.val(a.$modelValue),a.$viewValue=a.$modelValue,!1}function h(){T=F=p(a.$modelValue||""),B=z=m(T),H=v(T),r.maxlength&&i.attr("maxlength",2*S[S.length-1]),K||i.attr("placeholder",C);for(var e=a.$modelValue,n=a.$formatters.length;n--;)e=a.$formatters[n](e);a.$viewValue=e||"",a.$render()}function d(){I||(i.bind("blur",y),i.bind("mousedown mouseup",E),i.bind("keydown",x),i.bind(Q.eventsToHandle.join(" "),O),I=!0)}function g(){I&&(i.unbind("blur",y),i.unbind("mousedown",E),i.unbind("mouseup",E),i.unbind("keydown",x),i.unbind("input",O),i.unbind("keyup",O),i.unbind("click",O),i.unbind("focus",O),I=!1)}function v(e){return e.length?e.length>=R:!0}function p(e){var n,t,r="",a=i[0],u=_.slice(),l=N,o=l+A(a),c="";return e=e.toString(),n=0,t=e.length-C.length,angular.forEach(j,function(i){var r=i.position;r>=l&&o>r||(r>=l&&(r+=t),e.substring(r,r+i.value.length)===i.value&&(c+=e.slice(n,r),n=r+i.value.length))}),e=c+e.slice(n),angular.forEach(e.split(""),function(e){u.length&&u[0].test(e)&&(r+=e,u.shift())}),r}function m(e){var n="",t=S.slice();return angular.forEach(C.split(""),function(i,r){e.length&&r===t[0]?(n+=e.charAt(0)||"_",e=e.substr(1),t.shift()):n+=i}),n}function b(e){var n,t=angular.isDefined(r.uiMaskPlaceholder)?r.uiMaskPlaceholder:r.placeholder;return angular.isDefined(t)&&t[e]?t[e]:(n=angular.isDefined(r.uiMaskPlaceholderChar)&&r.uiMaskPlaceholderChar?r.uiMaskPlaceholderChar:"_","space"===n.toLowerCase()?" ":n[0])}function k(){var e,n,t=C.split("");S&&!isNaN(S[0])&&angular.forEach(S,function(e){t[e]="_"}),e=t.join(""),n=e.replace(/[_]+/g,"_").replace(/([^_]+)([a-zA-Z0-9])([^_])/g,"$1$2_$3").split("_"),n=n.filter(function(e){return""!==e});var i=0;return n.map(function(n){var t=e.indexOf(n,i);return i=t+1,{value:n,position:t}})}function $(e){var n=0;if(S=[],_=[],C="",angular.isString(e)){R=0;var t=!1,i=0,r=e.split("");angular.forEach(r,function(e,r){Q.maskDefinitions[e]?(S.push(n),C+=b(r-i),_.push(Q.maskDefinitions[e]),n++,t||R++,t=!1):"?"===e?(t=!0,i++):(C+=e,n++)})}S.push(S.slice().pop()+1),j=k(),q=S.length>1?!0:!1}function y(){(Q.clearOnBlur||Q.clearOnBlurPlaceholder&&0===T.length&&r.placeholder)&&(N=0,Z=0,H&&0!==T.length||(B="",i.val(""),e.$apply(function(){a.$viewValue=""}))),T!==U&&w(i[0]),U=T}function w(e){var n;angular.isFunction(window.Event)&&!e.fireEvent?(n=new Event("change",{view:window,bubbles:!0,cancelable:!1}),e.dispatchEvent(n)):"createEvent"in document?(n=document.createEvent("HTMLEvents"),n.initEvent("change",!1,!0),e.dispatchEvent(n)):e.fireEvent&&e.fireEvent("onchange")}function E(e){"mousedown"===e.type?i.bind("mouseout",M):i.unbind("mouseout",M)}function M(){Z=A(this),i.unbind("mouseout",M)}function x(e){var n=8===e.which,t=D(this)-1||0;if(n){for(;t>=0;){if(V(t)){P(this,t+1);break}t--}L=-1===t}}function O(n){n=n||{};var t=n.which,r=n.type;if(16!==t&&91!==t){var u,l=i.val(),o=z,c=!1,s=p(l),f=F,h=D(this)||0,d=N||0,g=h-d,v=S[0],b=S[s.length]||S.slice().shift(),k=Z||0,$=A(this)>0,y=k>0,w=l.length>o.length||k&&l.length>o.length-k,E=l.length<o.length||k&&l.length===o.length-k,M=t>=37&&40>=t&&n.shiftKey,x=37===t,O=8===t||"keyup"!==r&&E&&-1===g,_=46===t||"keyup"!==r&&E&&0===g&&!y,j=(x||O||"click"===r)&&h>v;if(Z=A(this),!M&&(!$||"click"!==r&&"keyup"!==r)){if(O&&L)return i.val(C),e.$apply(function(){a.$setViewValue("")}),void P(this,d);if("input"===r&&E&&!y&&s===f){for(;O&&h>v&&!V(h);)h--;for(;_&&b>h&&-1===S.indexOf(h);)h++;var R=S.indexOf(h);s=s.substring(0,R)+s.substring(R+1),s!==f&&(c=!0)}for(u=m(s),z=u,F=s,!c&&l.length>u.length&&(c=!0),i.val(u),c&&e.$apply(function(){a.$setViewValue(u)}),w&&v>=h&&(h=v+1),j&&h--,h=h>b?b:v>h?v:h;!V(h)&&h>v&&b>h;)h+=j?-1:1;(j&&b>h||w&&!V(d))&&h++,N=h,P(this,h)}}}function V(e){return S.indexOf(e)>-1}function D(e){if(!e)return 0;if(void 0!==e.selectionStart)return e.selectionStart;if(document.selection&&n(i[0])){e.focus();var t=document.selection.createRange();return t.moveStart("character",e.value?-e.value.length:0),t.text.length}return 0}function P(e,t){if(!e)return 0;if(0!==e.offsetWidth&&0!==e.offsetHeight)if(e.setSelectionRange)n(i[0])&&(e.focus(),e.setSelectionRange(t,t));else if(e.createTextRange){var r=e.createTextRange();r.collapse(!0),r.moveEnd("character",t),r.moveStart("character",t),r.select()}}function A(e){return e?void 0!==e.selectionStart?e.selectionEnd-e.selectionStart:document.selection?document.selection.createRange().text.length:0:0}var S,_,C,j,R,T,B,H,z,F,N,Z,L,q=!1,I=!1,K=r.placeholder,W=r.maxlength,G=a.$isEmpty;a.$isEmpty=function(e){return G(q?p(e||""):e)};var J=!1;r.$observe("modelViewValue",function(e){"true"===e&&(J=!0)});var Q={};r.uiOptions?(Q=e.$eval("["+r.uiOptions+"]"),Q=angular.isObject(Q[0])?function(e,n){for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(void 0===n[t]?n[t]=angular.copy(e[t]):angular.isObject(n[t])&&!angular.isArray(n[t])&&(n[t]=angular.extend({},e[t],n[t])));return n}(t,Q[0]):t):Q=t,r.$observe("uiMask",u),angular.isDefined(r.uiMaskPlaceholder)?r.$observe("uiMaskPlaceholder",l):r.$observe("placeholder",l),angular.isDefined(r.uiMaskPlaceholderChar)&&r.$observe("uiMaskPlaceholderChar",o),a.$formatters.push(c),a.$parsers.unshift(s);var U=i.val();i.bind("mousedown mouseup",E),Array.prototype.indexOf||(Array.prototype.indexOf=function(e){if(null===this)throw new TypeError;var n=Object(this),t=n.length>>>0;if(0===t)return-1;var i=0;if(arguments.length>1&&(i=Number(arguments[1]),i!==i?i=0:0!==i&&i!==1/0&&i!==-(1/0)&&(i=(i>0||-1)*Math.floor(Math.abs(i)))),i>=t)return-1;for(var r=i>=0?i:Math.max(t-Math.abs(i),0);t>r;r++)if(r in n&&n[r]===e)return r;return-1})}}}}])}(); | ||
!function(){"use strict";angular.module("ui.mask",[]).value("uiMaskConfig",{maskDefinitions:{9:/\d/,A:/[a-zA-Z]/,"*":/[a-zA-Z0-9]/},clearOnBlur:!0,clearOnBlurPlaceholder:!1,eventsToHandle:["input","keyup","click","focus"]}).provider("uiMask.Config",function(){var e={};this.clearOnBlur=function(n){return e.clearOnBlur=n},this.clearOnBlurPlaceholder=function(n){return e.clearOnBlurPlaceholder=n},this.eventsToHandle=function(n){return e.eventsToHandle=n},this.$get=["uiMaskConfig",function(n){var t=n;for(var r in e)t[r]=e[r];return t}]}).directive("uiMask",["uiMask.Config",function(e){function n(e){return e===document.activeElement&&(!document.hasFocus||document.hasFocus())&&!!(e.type||e.href||~e.tabIndex)}return{priority:100,require:"ngModel",restrict:"A",compile:function(){var t=e;return function(e,r,i,a){function u(e){return angular.isDefined(e)?($(e),q?(h(),d(),!0):f()):f()}function l(e){e&&(_=e,!q||0===r.val().length&&angular.isDefined(i.placeholder)||r.val(m(p(r.val()))))}function o(){return u(i.uiMask)}function c(e){return q?(j=p(e||""),R=g(j),a.$setValidity("mask",R),R&&j.length?m(j):void 0):e}function s(e){return q?(j=p(e||""),R=g(j),a.$viewValue=j.length?m(j):"",a.$setValidity("mask",R),R?J?a.$viewValue:j:void 0):e}function f(){return q=!1,v(),angular.isDefined(K)?r.attr("placeholder",K):r.removeAttr("placeholder"),angular.isDefined(W)?r.attr("maxlength",W):r.removeAttr("maxlength"),r.val(a.$modelValue),a.$viewValue=a.$modelValue,!1}function h(){j=F=p(a.$modelValue||""),H=z=m(j),R=g(j),i.maxlength&&r.attr("maxlength",2*C[C.length-1]),K||r.attr("placeholder",_);for(var e=a.$modelValue,n=a.$formatters.length;n--;)e=a.$formatters[n](e);a.$viewValue=e||"",a.$render()}function d(){I||(r.bind("blur",y),r.bind("mousedown mouseup",E),r.bind("keydown",O),r.bind(Q.eventsToHandle.join(" "),x),I=!0)}function v(){I&&(r.unbind("blur",y),r.unbind("mousedown",E),r.unbind("mouseup",E),r.unbind("keydown",O),r.unbind("input",x),r.unbind("keyup",x),r.unbind("click",x),r.unbind("focus",x),I=!1)}function g(e){return e.length?e.length>=T:!0}function p(e){var n,t,i="",a=r[0],u=S.slice(),l=N,o=l+A(a),c="";return e=e.toString(),n=0,t=e.length-_.length,angular.forEach(B,function(r){var i=r.position;i>=l&&o>i||(i>=l&&(i+=t),e.substring(i,i+r.value.length)===r.value&&(c+=e.slice(n,i),n=i+r.value.length))}),e=c+e.slice(n),angular.forEach(e.split(""),function(e){u.length&&u[0].test(e)&&(i+=e,u.shift())}),i}function m(e){var n="",t=C.slice();return angular.forEach(_.split(""),function(r,i){e.length&&i===t[0]?(n+=e.charAt(0)||"_",e=e.substr(1),t.shift()):n+=r}),n}function b(e){var n,t=angular.isDefined(i.uiMaskPlaceholder)?i.uiMaskPlaceholder:i.placeholder;return angular.isDefined(t)&&t[e]?t[e]:(n=angular.isDefined(i.uiMaskPlaceholderChar)&&i.uiMaskPlaceholderChar?i.uiMaskPlaceholderChar:"_","space"===n.toLowerCase()?" ":n[0])}function k(){var e,n,t=_.split("");C&&!isNaN(C[0])&&angular.forEach(C,function(e){t[e]="_"}),e=t.join(""),n=e.replace(/[_]+/g,"_").replace(/([^_]+)([a-zA-Z0-9])([^_])/g,"$1$2_$3").split("_"),n=n.filter(function(e){return""!==e});var r=0;return n.map(function(n){var t=e.indexOf(n,r);return r=t+1,{value:n,position:t}})}function $(e){var n=0;if(C=[],S=[],_="",angular.isString(e)){T=0;var t=!1,r=0,i=e.split("");angular.forEach(i,function(e,i){Q.maskDefinitions[e]?(C.push(n),_+=b(i-r),S.push(Q.maskDefinitions[e]),n++,t||T++,t=!1):"?"===e?(t=!0,r++):(_+=e,n++)})}C.push(C.slice().pop()+1),B=k(),q=C.length>1?!0:!1}function y(){(Q.clearOnBlur||Q.clearOnBlurPlaceholder&&0===j.length&&i.placeholder)&&(N=0,Z=0,R&&0!==j.length||(H="",r.val(""),e.$apply(function(){a.$viewValue=""}))),j!==U&&w(r[0]),U=j}function w(e){var n;angular.isFunction(window.Event)&&!e.fireEvent?(n=new Event("change",{view:window,bubbles:!0,cancelable:!1}),e.dispatchEvent(n)):"createEvent"in document?(n=document.createEvent("HTMLEvents"),n.initEvent("change",!1,!0),e.dispatchEvent(n)):e.fireEvent&&e.fireEvent("onchange")}function E(e){"mousedown"===e.type?r.bind("mouseout",M):r.unbind("mouseout",M)}function M(){Z=A(this),r.unbind("mouseout",M)}function O(e){var n=8===e.which,t=P(this)-1||0;if(n){for(;t>=0;){if(V(t)){D(this,t+1);break}t--}L=-1===t}}function x(n){n=n||{};var t=n.which,i=n.type;if(16!==t&&91!==t){var u,l=r.val(),o=z,c=!1,s=p(l),f=F,h=P(this)||0,d=N||0,v=h-d,g=C[0],b=C[s.length]||C.slice().shift(),k=Z||0,$=A(this)>0,y=k>0,w=l.length>o.length||k&&l.length>o.length-k,E=l.length<o.length||k&&l.length===o.length-k,M=t>=37&&40>=t&&n.shiftKey,O=37===t,x=8===t||"keyup"!==i&&E&&-1===v,S=46===t||"keyup"!==i&&E&&0===v&&!y,B=(O||x||"click"===i)&&h>g;if(Z=A(this),!M&&(!$||"click"!==i&&"keyup"!==i&&"focus"!==i)){if(x&&L)return r.val(_),e.$apply(function(){a.$setViewValue("")}),void D(this,d);if("input"===i&&E&&!y&&s===f){for(;x&&h>g&&!V(h);)h--;for(;S&&b>h&&-1===C.indexOf(h);)h++;var T=C.indexOf(h);s=s.substring(0,T)+s.substring(T+1),s!==f&&(c=!0)}for(u=m(s),z=u,F=s,!c&&l.length>u.length&&(c=!0),r.val(u),c&&e.$apply(function(){a.$setViewValue(u)}),w&&g>=h&&(h=g+1),B&&h--,h=h>b?b:g>h?g:h;!V(h)&&h>g&&b>h;)h+=B?-1:1;(B&&b>h||w&&!V(d))&&h++,N=h,D(this,h)}}}function V(e){return C.indexOf(e)>-1}function P(e){if(!e)return 0;if(void 0!==e.selectionStart)return e.selectionStart;if(document.selection&&n(r[0])){e.focus();var t=document.selection.createRange();return t.moveStart("character",e.value?-e.value.length:0),t.text.length}return 0}function D(e,t){if(!e)return 0;if(0!==e.offsetWidth&&0!==e.offsetHeight)if(e.setSelectionRange)n(r[0])&&(e.focus(),e.setSelectionRange(t,t));else if(e.createTextRange){var i=e.createTextRange();i.collapse(!0),i.moveEnd("character",t),i.moveStart("character",t),i.select()}}function A(e){return e?void 0!==e.selectionStart?e.selectionEnd-e.selectionStart:document.selection?document.selection.createRange().text.length:0:0}var C,S,_,B,T,j,H,R,z,F,N,Z,L,q=!1,I=!1,K=i.placeholder,W=i.maxlength,G=a.$isEmpty;a.$isEmpty=function(e){return G(q?p(e||""):e)};var J=!1;i.$observe("modelViewValue",function(e){"true"===e&&(J=!0)});var Q={};i.uiOptions?(Q=e.$eval("["+i.uiOptions+"]"),Q=angular.isObject(Q[0])?function(e,n){for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(void 0===n[t]?n[t]=angular.copy(e[t]):angular.isObject(n[t])&&!angular.isArray(n[t])&&(n[t]=angular.extend({},e[t],n[t])));return n}(t,Q[0]):t):Q=t,i.$observe("uiMask",u),angular.isDefined(i.uiMaskPlaceholder)?i.$observe("uiMaskPlaceholder",l):i.$observe("placeholder",l),angular.isDefined(i.uiMaskPlaceholderChar)&&i.$observe("uiMaskPlaceholderChar",o),a.$formatters.unshift(c),a.$parsers.unshift(s);var U=r.val();r.bind("mousedown mouseup",E),Array.prototype.indexOf||(Array.prototype.indexOf=function(e){if(null===this)throw new TypeError;var n=Object(this),t=n.length>>>0;if(0===t)return-1;var r=0;if(arguments.length>1&&(r=Number(arguments[1]),r!==r?r=0:0!==r&&r!==1/0&&r!==-(1/0)&&(r=(r>0||-1)*Math.floor(Math.abs(r)))),r>=t)return-1;for(var i=r>=0?r:Math.max(t-Math.abs(r),0);t>i;i++)if(i in n&&n[i]===e)return i;return-1})}}}}])}(); |
@@ -18,8 +18,15 @@ var fs = require('fs'); | ||
var reKaLa = geSaLaKaCuLa.recursiveKarmaLauncher; | ||
var versionAfterBump; | ||
var connect = require('gulp-connect'); | ||
var angularProtractor = require('gulp-angular-protractor'); | ||
var sauceConnectLauncher = require('sauce-connect-launcher'); | ||
var versionAfterBump, sauceConnectProcess; | ||
gulp.task('default', ['build', 'test']); | ||
gulp.task('ci', ['karma-sauce']); | ||
gulp.task('build', ['scripts']); | ||
gulp.task('test', ['build', 'karma']); | ||
gulp.task('test', ['build', 'protractor', 'karma']); | ||
gulp.task('ci', ['protractor-sauce','karma-sauce'], function() { | ||
sauceConnectProcess.close(function() { | ||
console.log("Closed Sauce Connect process"); | ||
}); | ||
}); | ||
@@ -73,13 +80,32 @@ gulp.task('watch', ['build', 'karma-watch'], function() { | ||
gulp.task('karma', ['build'], function() { | ||
var server = new Server({configFile: __dirname + '/karma.conf.js', singleRun: true}); | ||
server.start(); | ||
gulp.task('karma', ['build'], function(callback) { | ||
runKarma(true, callback); | ||
}); | ||
gulp.task('karma-watch', ['build'], function(callback) { | ||
runKarma(false, callback); | ||
}); | ||
gulp.task('karma-watch', ['build'], function() { | ||
var server = new Server({configFile: __dirname + '/karma.conf.js', singleRun: false}); | ||
function runKarma(singleRun, callback) { | ||
var server = new Server({configFile: __dirname + '/karma.conf.js', singleRun: singleRun}, function(exitCode) { | ||
callback(); | ||
}); | ||
server.start(); | ||
} | ||
gulp.task('start-sauce-connect', function(callback) { | ||
sauceConnectLauncher({ | ||
username: process.env.SAUCE_USERNAME, | ||
accessKey: process.env.SAUCE_ACCESS_KEY, | ||
tunnelIdentifier: process.env.TRAVIS_JOB_NUMBER | ||
}, function(err, sauceProcess) { | ||
if (err) { | ||
callback(err); | ||
} | ||
sauceConnectProcess = sauceProcess; | ||
callback(); | ||
}); | ||
}); | ||
gulp.task('karma-sauce', ['build'], function() { | ||
gulp.task('karma-sauce', ['build', 'start-sauce-connect'], function(callback) { | ||
var customLaunchers = geSaLaKaCuLa({ | ||
@@ -97,7 +123,37 @@ 'Windows 7': { | ||
reKaLa({ | ||
karma: Server, | ||
customLaunchers: customLaunchers | ||
}, process.exit); | ||
karma: Server, | ||
customLaunchers: customLaunchers | ||
}, function(code) { | ||
callback(); | ||
}); | ||
}); | ||
gulp.task('protractor', ['build'], function(callback) { | ||
runProtractor('protractor.config.js', callback); | ||
}); | ||
gulp.task('protractor-sauce', ['build', 'start-sauce-connect'], function(callback) { | ||
runProtractor('protractor.travis.config.js', callback); | ||
}); | ||
var runProtractor = function(configFile, callback) { | ||
connect.server({ | ||
port: 8000 | ||
}); | ||
gulp.src(['test/maskSpec.protractor.js']) | ||
.pipe(angularProtractor({ | ||
'configFile': configFile, | ||
'debug': false, | ||
'autoStartStopServer': true | ||
})) | ||
.on('error', function(e) { | ||
callback(e); | ||
}) | ||
.on('end', function() { | ||
connect.serverClose(); | ||
callback(); | ||
}); | ||
}; | ||
var handleError = function(err) { | ||
@@ -104,0 +160,0 @@ console.log(err.toString()); |
@@ -28,3 +28,3 @@ // Karma configuration | ||
// possible values: 'dots', 'progress', 'junit', 'growl', 'coverage' | ||
reporters: ['progress'], | ||
reporters: ['progress','saucelabs'], | ||
@@ -75,3 +75,5 @@ | ||
sauceLabs: { | ||
testName: 'UI Mask CI' | ||
testName: 'UI Mask CI', | ||
tunnelIdentifier: process.env.TRAVIS_JOB_NUMBER, | ||
startConnect: false | ||
}, | ||
@@ -78,0 +80,0 @@ captureTimeout: 120000, |
{ | ||
"name": "angular-ui-mask", | ||
"version": "1.7.2", | ||
"version": "1.8.0", | ||
"author": "https://github.com/angular-ui/ui-mask/graphs/contributors", | ||
@@ -13,4 +13,6 @@ "license": "MIT", | ||
"gulp": "~3.9.0", | ||
"gulp-angular-protractor": "0.0.6", | ||
"gulp-bump": "^0.3.1", | ||
"gulp-concat": "~2.6.0", | ||
"gulp-connect": "^2.3.1", | ||
"gulp-footer": "~1.0.5", | ||
@@ -31,5 +33,5 @@ "gulp-git": "^1.4.0", | ||
"karma-ng-html2js-preprocessor": "^0.1.0", | ||
"karma-phantomjs-launcher": "~0.2.1", | ||
"karma-sauce-launcher": "^0.2.14", | ||
"phantomjs": "^1.9.18", | ||
"protractor": "^3.0.0", | ||
"run-sequence": "^1.1.2" | ||
@@ -36,0 +38,0 @@ }, |
@@ -75,6 +75,25 @@ # ui-mask [![Build Status](https://travis-ci.org/angular-ui/ui-mask.svg?branch=master)](https://travis-ci.org/angular-ui/ui-mask) [![npm version](https://badge.fury.io/js/angular-ui-mask.svg)](http://badge.fury.io/js/angular-ui-mask) [![Bower version](https://badge.fury.io/bo/angular-ui-mask.svg)](http://badge.fury.io/bo/angular-ui-mask) [![Join the chat at https://gitter.im/angular-ui/ui-mask](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/angular-ui/ui-mask?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) | ||
#### Global customization | ||
In addition to customizing behaviors for a specific element, you can also customize the behaviors globally. To do this, simply use the `uiMaskConfig` provider in your app configuration. Example: | ||
```sh | ||
app.config(['uiMask.ConfigProvider', function(uiMaskConfigProvider) { | ||
uiMaskConfigProvider.maskDefinitions({'A': /[a-z], '*': /[a-zA-Z0-9]/}); | ||
uiMaskConfigProvider.clearOnBlur(false); | ||
uiMaskConfigProvider.eventsToHandle(['input', 'keyup', 'click']); | ||
} | ||
``` | ||
#### maskDefinitions | ||
The keys in `maskDefinitions` represent the special tokens/characters used in your mask declaration to delimit acceptable ranges of inputs. For example, we use '9' here to accept any numeric values for a phone number: `ui-mask="(999) 999-9999"`. The values associated with each token are regexen. Each regex defines the ranges of values that will be acceptable as inputs in the position of that token. | ||
#### modelViewValue | ||
If this is set to true, then the model value bound with `ng-model` will be the same as the `$viewValue` meaning it will contain any static mask characters present in the mask definition. This will not set the model value to a `$viewValue` that is considered invalid. | ||
#### uiMaskPlaceholder | ||
Allows customizing the mask placeholder when a user has focused the input element and while typing in their value | ||
#### uiMaskPlaceholderChar | ||
Allows customizing the mask placeholder character. The default mask placeholder is `_`. | ||
## Development | ||
@@ -81,0 +100,0 @@ |
@@ -15,3 +15,25 @@ /* | ||
}) | ||
.directive('uiMask', ['uiMaskConfig', function(maskConfig) { | ||
.provider('uiMask.Config', function() { | ||
var options = {}; | ||
this.clearOnBlur = function(clearOnBlur) { | ||
return options.clearOnBlur = clearOnBlur; | ||
}; | ||
this.clearOnBlurPlaceholder = function(clearOnBlurPlaceholder) { | ||
return options.clearOnBlurPlaceholder = clearOnBlurPlaceholder; | ||
}; | ||
this.eventsToHandle = function(eventsToHandle) { | ||
return options.eventsToHandle = eventsToHandle; | ||
}; | ||
this.$get = ['uiMaskConfig', function(uiMaskConfig) { | ||
var tempOptions = uiMaskConfig; | ||
for(var prop in options) | ||
{ | ||
tempOptions[prop] = options[prop]; | ||
} | ||
return tempOptions; | ||
}]; | ||
}) | ||
.directive('uiMask', ['uiMask.Config', function(maskConfig) { | ||
function isFocused (elem) { | ||
@@ -160,3 +182,3 @@ return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); | ||
controller.$formatters.push(formatter); | ||
controller.$formatters.unshift(formatter); | ||
controller.$parsers.unshift(parser); | ||
@@ -507,3 +529,3 @@ | ||
// These events don't require any action | ||
if (isSelection || (isSelected && (eventType === 'click' || eventType === 'keyup'))) { | ||
if (isSelection || (isSelected && (eventType === 'click' || eventType === 'keyup' || eventType === 'focus'))) { | ||
return; | ||
@@ -510,0 +532,0 @@ } |
@@ -6,3 +6,3 @@ describe("uiMask", function () { | ||
var inputHtml = "<input name='input' ng-model='x' ui-mask='{{mask}}' ui-options='options'>"; | ||
var compileElement, scope, config, timeout; | ||
var compileElement, scope, config, timeout, uiMaskConfigProvider; | ||
@@ -25,3 +25,6 @@ beforeEach(module("ui.mask")); | ||
} | ||
}); | ||
}) | ||
.config(['uiMask.ConfigProvider', function(configProvider) { | ||
uiMaskConfigProvider = configProvider; | ||
}]); | ||
module("test"); | ||
@@ -505,3 +508,3 @@ }); | ||
expect(input.attr("placeholder")).toBe("MM/DD/YYYY"); | ||
}) | ||
}); | ||
@@ -681,2 +684,17 @@ it("should allow text input to be the same character as ui-mask-placeholder-char", function() { | ||
describe("Configuration Provider", function() { | ||
it("should return default values", inject(function($injector) { | ||
var service = $injector.invoke(uiMaskConfigProvider.$get); | ||
expect(service.clearOnBlur).toEqual(true); | ||
expect(service.clearOnBlurPlaceholder).toEqual(false); | ||
})); | ||
it("should merge default values with configured values", inject(function($injector) { | ||
uiMaskConfigProvider.clearOnBlur(false); | ||
var service = $injector.invoke(uiMaskConfigProvider.$get); | ||
expect(service.clearOnBlur).toEqual(false); | ||
expect(service.clearOnBlurPlaceholder).toEqual(false); | ||
})); | ||
}); | ||
}); |
Sorry, the diff of this file is not supported yet
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 3 instances in 1 package
143783
18
2124
125
27
4