From cfd4966f731af762500fecd94c230b71d3b12454 Mon Sep 17 00:00:00 2001 From: Danilo Ribeiro da Silveira Date: Fri, 26 Aug 2016 14:16:17 -0300 Subject: [PATCH] Add 0800 phone --- README.md | 4 + releases/br-masks-standalone.js | 200 +--------------------------- releases/br-masks-standalone.min.js | 2 +- releases/br-masks.js | 7 +- releases/br-masks.min.js | 2 +- src/phone.js | 7 +- test/phone.test.js | 4 + 7 files changed, 25 insertions(+), 201 deletions(-) diff --git a/README.md b/README.md index 20dc293..e8a85b5 100644 --- a/README.md +++ b/README.md @@ -87,6 +87,10 @@ See: [Conferência de Inscrições Estaduais](http://www.sintegra.gov.br/insc_es var phone9 = '38212201255'; var masked9 = BrM.phone(phone9); // masked9 should be '(38) 21220-1255' + + var phone0800 = '08001234567'; + var masked0800 = BrM.phone(phone0800); + // masked0800 should be '0800-123-4567' ``` ### FINANCE ### diff --git a/releases/br-masks-standalone.js b/releases/br-masks-standalone.js index 3a6c363..9e026dc 100644 --- a/releases/br-masks-standalone.js +++ b/releases/br-masks-standalone.js @@ -1,196 +1,3 @@ -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define([], factory); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(); - } else { - // Browser globals (root is window) - root.StringMask = factory(); - } -}(this, function () { - var tokens = { - '0': {pattern: /\d/, _default: '0'}, - '9': {pattern: /\d/, optional: true}, - '#': {pattern: /\d/, optional: true, recursive: true}, - 'S': {pattern: /[a-zA-Z]/}, - 'U': {pattern: /[a-zA-Z]/, transform: function (c) { return c.toLocaleUpperCase(); }}, - 'L': {pattern: /[a-zA-Z]/, transform: function (c) { return c.toLocaleLowerCase(); }}, - '$': {escape: true} - }; - - function isEscaped(pattern, pos) { - var count = 0; - var i = pos - 1; - var token = {escape: true}; - while (i >= 0 && token && token.escape) { - token = tokens[pattern.charAt(i)]; - count += token && token.escape ? 1 : 0; - i--; - } - return count > 0 && count%2 === 1; - } - - function calcOptionalNumbersToUse(pattern, value) { - var numbersInP = pattern.replace(/[^0]/g,'').length; - var numbersInV = value.replace(/[^\d]/g,'').length; - return numbersInV - numbersInP; - } - - function concatChar(text, character, options, token) { - if (token && typeof token.transform === 'function') character = token.transform(character); - if (options.reverse) return character + text; - return text + character; - } - - function hasMoreTokens(pattern, pos, inc) { - var pc = pattern.charAt(pos); - var token = tokens[pc]; - if (pc === '') return false; - return token && !token.escape ? true : hasMoreTokens(pattern, pos + inc, inc); - } - - function insertChar(text, char, position) { - var t = text.split(''); - t.splice(position >= 0 ? position: 0, 0, char); - return t.join(''); - } - - function StringMask(pattern, opt) { - this.options = opt || {}; - this.options = { - reverse: this.options.reverse || false, - usedefaults: this.options.usedefaults || this.options.reverse - }; - this.pattern = pattern; - } - - StringMask.prototype.process = function proccess(value) { - if (!value) return ''; - value = value + ''; - var pattern2 = this.pattern; - var valid = true; - var formatted = ''; - var valuePos = this.options.reverse ? value.length - 1 : 0; - var optionalNumbersToUse = calcOptionalNumbersToUse(pattern2, value); - var escapeNext = false; - var recursive = []; - var inRecursiveMode = false; - - var steps = { - start: this.options.reverse ? pattern2.length - 1 : 0, - end: this.options.reverse ? -1 : pattern2.length, - inc: this.options.reverse ? -1 : 1 - }; - - function continueCondition(options) { - if (!inRecursiveMode && hasMoreTokens(pattern2, i, steps.inc)) { - return true; - } else if (!inRecursiveMode) { - inRecursiveMode = recursive.length > 0; - } - - if (inRecursiveMode) { - var pc = recursive.shift(); - recursive.push(pc); - if (options.reverse && valuePos >= 0) { - i++; - pattern2 = insertChar(pattern2, pc, i); - return true; - } else if (!options.reverse && valuePos < value.length) { - pattern2 = insertChar(pattern2, pc, i); - return true; - } - } - return i < pattern2.length && i >= 0; - } - - for (var i = steps.start; continueCondition(this.options); i = i + steps.inc) { - var pc = pattern2.charAt(i); - var vc = value.charAt(valuePos); - var token = tokens[pc]; - if (!inRecursiveMode || vc) { - if (this.options.reverse && isEscaped(pattern2, i)) { - formatted = concatChar(formatted, pc, this.options, token); - i = i + steps.inc; - continue; - } else if (!this.options.reverse && escapeNext) { - formatted = concatChar(formatted, pc, this.options, token); - escapeNext = false; - continue; - } else if (!this.options.reverse && token && token.escape) { - escapeNext = true; - continue; - } - } - - if (!inRecursiveMode && token && token.recursive) { - recursive.push(pc); - } else if (inRecursiveMode && !vc) { - if (!token || !token.recursive) formatted = concatChar(formatted, pc, this.options, token); - continue; - } else if (recursive.length > 0 && token && !token.recursive) { - // Recursive tokens most be the last tokens of the pattern - valid = false; - continue; - } else if (!inRecursiveMode && recursive.length > 0 && !vc) { - continue; - } - - if (!token) { - formatted = concatChar(formatted, pc, this.options, token); - if (!inRecursiveMode && recursive.length) { - recursive.push(pc); - } - } else if (token.optional) { - if (token.pattern.test(vc) && optionalNumbersToUse) { - formatted = concatChar(formatted, vc, this.options, token); - valuePos = valuePos + steps.inc; - optionalNumbersToUse--; - } else if (recursive.length > 0 && vc) { - valid = false; - break; - } - } else if (token.pattern.test(vc)) { - formatted = concatChar(formatted, vc, this.options, token); - valuePos = valuePos + steps.inc; - } else if (!vc && token._default && this.options.usedefaults) { - formatted = concatChar(formatted, token._default, this.options, token); - } else { - valid = false; - break; - } - } - - return {result: formatted, valid: valid}; - }; - - StringMask.prototype.apply = function(value) { - return this.process(value).result; - }; - - StringMask.prototype.validate = function(value) { - return this.process(value).valid; - }; - - StringMask.process = function(value, pattern, options) { - return new StringMask(pattern, options).process(value); - }; - - StringMask.apply = function(value, pattern, options) { - return new StringMask(pattern, options).apply(value); - }; - - StringMask.validate = function(value, pattern, options) { - return new StringMask(pattern, options).validate(value); - }; - - return StringMask; -})); - /** * br-masks * A library of masks applicable to several Brazilian data like I.E., CNPJ, CPF and others @@ -367,7 +174,8 @@ var NFEACCESSKEY = function(value) { /*exported PHONE */ var PHONE = function(value) { var phoneMask8D = new StringMask('(00) 0000-0000'), - phoneMask9D = new StringMask('(00) 00000-0000'); + phoneMask9D = new StringMask('(00) 00000-0000'), + phoneMask0800 = new StringMask('0000-000-0000'); if(!value) { return value; @@ -375,7 +183,9 @@ var PHONE = function(value) { var formatedValue; value = value + ''; - if(value.length < 11){ + if (value.indexOf('0800') === 0) { + formatedValue = phoneMask0800.apply(value); + }else if(value.length < 11){ formatedValue = phoneMask8D.apply(value); }else{ formatedValue = phoneMask9D.apply(value); diff --git a/releases/br-masks-standalone.min.js b/releases/br-masks-standalone.min.js index 3195d68..2a3c27a 100644 --- a/releases/br-masks-standalone.min.js +++ b/releases/br-masks-standalone.min.js @@ -1 +1 @@ -!function(e,n){"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?module.exports=n():e.StringMask=n()}(this,function(){function e(e,n){for(var t=0,r=n-1,s={escape:!0};r>=0&&s&&s.escape;)s=a[e.charAt(r)],t+=s&&s.escape?1:0,r--;return t>0&&t%2===1}function n(e,n){var t=e.replace(/[^0]/g,"").length,r=n.replace(/[^\d]/g,"").length;return r-t}function t(e,n,t,r){return r&&"function"==typeof r.transform&&(n=r.transform(n)),t.reverse?n+e:e+n}function r(e,n,t){var s=e.charAt(n),i=a[s];return""===s?!1:i&&!i.escape?!0:r(e,n+t,t)}function s(e,n,t){var r=e.split("");return r.splice(t>=0?t:0,0,n),r.join("")}function i(e,n){this.options=n||{},this.options={reverse:this.options.reverse||!1,usedefaults:this.options.usedefaults||this.options.reverse},this.pattern=e}var a={0:{pattern:/\d/,_default:"0"},9:{pattern:/\d/,optional:!0},"#":{pattern:/\d/,optional:!0,recursive:!0},S:{pattern:/[a-zA-Z]/},U:{pattern:/[a-zA-Z]/,transform:function(e){return e.toLocaleUpperCase()}},L:{pattern:/[a-zA-Z]/,transform:function(e){return e.toLocaleLowerCase()}},$:{escape:!0}};return i.prototype.process=function(i){function o(e){if(!w&&r(p,k,m.inc))return!0;if(w||(w=v.length>0),w){var n=v.shift();if(v.push(n),e.reverse&&c>=0)return k++,p=s(p,n,k),!0;if(!e.reverse&&c=0}if(!i)return"";i+="";for(var p=this.pattern,u=!0,f="",c=this.options.reverse?i.length-1:0,l=n(p,i),h=!1,v=[],w=!1,m={start:this.options.reverse?p.length-1:0,end:this.options.reverse?-1:p.length,inc:this.options.reverse?-1:1},k=m.start;o(this.options);k+=m.inc){var d=p.charAt(k),g=i.charAt(c),y=a[d];if(!w||g){if(this.options.reverse&&e(p,k)){f=t(f,d,this.options,y),k+=m.inc;continue}if(!this.options.reverse&&h){f=t(f,d,this.options,y),h=!1;continue}if(!this.options.reverse&&y&&y.escape){h=!0;continue}}if(!w&&y&&y.recursive)v.push(d);else{if(w&&!g){y&&y.recursive||(f=t(f,d,this.options,y));continue}if(v.length>0&&y&&!y.recursive){u=!1;continue}if(!w&&v.length>0&&!g)continue}if(y)if(y.optional){if(y.pattern.test(g)&&l)f=t(f,g,this.options,y),c+=m.inc,l--;else if(v.length>0&&g){u=!1;break}}else if(y.pattern.test(g))f=t(f,g,this.options,y),c+=m.inc;else{if(g||!y._default||!this.options.usedefaults){u=!1;break}f=t(f,y._default,this.options,y)}else f=t(f,d,this.options,y),!w&&v.length&&v.push(d)}return{result:f,valid:u}},i.prototype.apply=function(e){return this.process(e).result},i.prototype.validate=function(e){return this.process(e).valid},i.process=function(e,n,t){return new i(n,t).process(e)},i.apply=function(e,n,t){return new i(n,t).apply(e)},i.validate=function(e,n,t){return new i(n,t).validate(e)},i}),function(e,n){"function"==typeof define&&define.amd?define(["string-mask"],n):"object"==typeof exports?module.exports=n(require("string-mask")):e.BrM=n(e.StringMask)}(this,function(e){if(!e)throw new Error("StringMask not found");var n=function(n){var t=new e("00000-000");if(!n)return n;var r=t.process(n);return r.result},t=function(n){if(!n)return n;var t=new e("00.000.000/0000-00"),r=t.apply(n);return r},r=function(e){return e&&e.length?e.length<=11?s(e):t(e):e},s=function(n){var t=new e("000.000.000-00");if(!n)return n;var r=t.apply(n);return r},i=function(n,t,r,s){t=!t&&0!==t||0>t?2:t,r=r||".",s=s||"";var i=t>0?r+new Array(t+1).join("0"):"",a="#"+s+"##0"+i;n=parseFloat(n),n||(n=0);var o=!1;0>n&&(n=-1*n,o=!0);var p=new e(a,{reverse:!0}),u=p.apply(n.toFixed(t).replace(/[^\d]+/g,""));return o?"("+u+")":u},a=function(n,t){function r(e){return e.replace(/[^0-9]/g,"")}function s(e,n){if(!e||!i[e])return void 0;var t=e.toUpperCase();if("SP"===t&&/^P/i.test(n))return i.SP[1].mask;for(var s=i[e],a=0;s[a].chars&&s[a].charsr?2:r,a=a||".",s=s||"";var t=r>0?a+new Array(r+1).join("0"):"",w="#"+s+"##0"+t;e=parseFloat(e),e||(e=0);var i=!1;0>e&&(e=-1*e,i=!0);var u=new n(w,{reverse:!0}),k=u.apply(e.toFixed(r).replace(/[^\d]+/g,""));return i?"("+k+")":k},w=function(e,r){function a(n){return n.replace(/[^0-9]/g,"")}function s(n,e){if(!n||!t[n])return void 0;var r=n.toUpperCase();if("SP"===r&&/^P/i.test(e))return t.SP[1].mask;for(var s=t[n],w=0;s[w].chars&&s[w].charsr?2:r,a=a||".",s=s||"";var t=r>0?a+new Array(r+1).join("0"):"",w="#"+s+"##0"+t;e=parseFloat(e),e||(e=0);var i=!1;0>e&&(e=-1*e,i=!0);var u=new n(w,{reverse:!0}),k=u.apply(e.toFixed(r).replace(/[^\d]+/g,""));return i?"("+k+")":k},w=function(e,r){function a(n){return n.replace(/[^0-9]/g,"")}function s(n,e){if(!n||!t[n])return void 0;var r=n.toUpperCase();if("SP"===r&&/^P/i.test(e))return t.SP[1].mask;for(var s=t[n],w=0;s[w].chars&&s[w].charsr?2:r,a=a||".",s=s||"";var t=r>0?a+new Array(r+1).join("0"):"",w="#"+s+"##0"+t;e=parseFloat(e),e||(e=0);var i=!1;0>e&&(e=-1*e,i=!0);var u=new n(w,{reverse:!0}),k=u.apply(e.toFixed(r).replace(/[^\d]+/g,""));return i?"("+k+")":k},w=function(e,r){function a(n){return n.replace(/[^0-9]/g,"")}function s(n,e){if(!n||!t[n])return void 0;var r=n.toUpperCase();if("SP"===r&&/^P/i.test(e))return t.SP[1].mask;for(var s=t[n],w=0;s[w].chars&&s[w].chars