What's this
It's a pure JavaScript mask input.
Now you can use a simple and pure javascript lib to mask your input elements, without need to load jQuery or Zepto to do it.
Let's live a lightweight client-side world using micro libraries as VanillaMasker is!
Don't worry about where this will work, because this is a cross-browser and cross-device library. And if you find any bug, please let us know about it reporting an issue.
If you wanna see how this lib works, click to test this demo page.
How to install
Download script
We have the following CDN available, for development or minified versions:
//cdn.jsdelivr.net/vanilla-masker/1.1.0/vanilla-masker.js
//cdn.jsdelivr.net/vanilla-masker/1.1.0/vanilla-masker.min.js
We intent to automatically send new versions to the CDN, but keep in mind that the version you want might not be available there. Of course you can always download and put it in your own site.
NPM
For npm users you just run this command: npm install vanilla-masker --save
Bower
You can install it via bower too, using this command: bower install --save vanilla-masker
Meteor
And you can install inside your meteor projects with this command: meteor add bankfacil:vanilla-masker
How to use
Loading the lib
Like I said, you need to download and put this lib in your own site, using this tag below:
<html>
<head></head>
<body>
<input type="text">
<script src="vanilla-masker.min.js"></script>
</body>
</html>
Common uses
Money format
VMasker(document.querySelector("data-js-input")).maskMoney();
VMasker(document.querySelector("data-js-input")).maskMoney({
precision: 2,
separator: ',',
delimiter: '.',
unit: 'R$',
suffixUnit: 'R$',
zeroCents: true
});
VMasker(document.querySelectorAll("data-js-input")).maskMoney();
VMasker.toMoney(1234);
Only numbers
VMasker(document.querySelector("data-js-input")).maskNumber();
VMasker.toNumber("123ac34");
VMasker.toNumber("-123ac34");
Custom pattern
VMasker(document.querySelector("input")).maskPattern("(99) 9999-9999");
VMasker.toPattern(1099911111, "(99) 9999-9999");
VMasker.toPattern(12122000, "99/99/9999");
VMasker.toPattern(99911111101, "999.999.999-99");
VMasker.toPattern('ABC1234', "AAA-9999");
VMasker.toPattern('9BGRD08X04G117974', "SS.SS.SSSSS.S.S.SSSSSS");
VMasker.toPattern('4', {pattern: "(999) 999-9999", placeholder: "x"});
Undoing a mask
var el = document.querySelector("input")
VMasker(el).maskPattern("(99) 9999-9999");
VMasker(el).unMask();
Dynamic mask
Sometimes you need swap the mask according with value.
You can see the sample below on codepen.io
function inputHandler(masks, max, event) {
var c = event.target;
var v = c.value.replace(/\D/g, '');
var m = c.value.length > max ? 1 : 0;
VMasker(c).unMask();
VMasker(c).maskPattern(masks[m]);
c.value = VMasker.toPattern(v, masks[m]);
}
var telMask = ['(99) 9999-99999', '(99) 99999-9999'];
var tel = document.querySelector('#tel');
VMasker(tel).maskPattern(telMask[0]);
tel.addEventListener('input', inputHandler.bind(undefined, telMask, 14), false);
var docMask = ['999.999.999-999', '99.999.999/9999-99'];
var doc = document.querySelector('#doc');
VMasker(doc).maskPattern(docMask[0]);
doc.addEventListener('input', inputHandler.bind(undefined, docMask, 14), false);
Meteor uses
If your app is built on top of Meteor framework, you can use the lib in this way...
<body>
<h1>Welcome to Meteor!</h1>
{{> myTemplate}}
</body>
<template name="myTemplate">
<input type="text" placeholder="Money" data-vm-mask-money>
<input type="text" placeholder="Number" data-vm-mask-number>
<input type="text" placeholder="Date" data-vm-mask-date>
</template>
You just need to bind the elements into the template rendered
function...
if (Meteor.isClient) {
Template.myTemplate.rendered = function() {
VMasker(this.find("[data-vm-mask-money]")).maskMoney();
VMasker(this.find("[data-vm-mask-number]")).maskNumber();
VMasker(this.find("[data-vm-mask-date]")).maskPattern("99/99/9999");
};
}
How to run localhost
- Install node.js - http://nodejs.org/download
- Clone this repository -
git clone git@github.com:vanilla-masker/vanilla-masker.git
- Install Grunt -
npm install -g grunt-cli
- Install Grunt dependencies -
cd vanilla-masker && npm install
- Running development mode -
grunt dev
- Open the browser - http://localhost:4500
Run test
- Run the command:
grunt test
Build project
- Run the command:
grunt build
TODO - we need pull requests :]
- Test Opera mini browser;
- Beautify Demo Page;
- Bind mask using
data-vm
attributes;
Compatibility
Desktop browsers:
- Chrome 4.0+
- Firefox 2.0+
- Safari 4.0+
- Opera 10.0+
- Internet Explorer 8+
Mobile browsers:
- Android browser 2.2+
- Chrome mobile 35.0+
- Firefox mobile 29.0+
- Opera mobile 10.0+
- iOS Safari 3.2+
- Windows Phone browsers
Contributors
Caio Ribeiro Pereira - caio.ribeiro.pereira@gmail.com
Leandro Alvares da Costa - leandroadacosta@gmail.com
Bobby - squidz.bee@gmail.com
Henrique Antonini Silvério - contato@henriquesilverio.com
Joilson Marques - joilsonmarques@gmail.com
Leonardo Andrade - leonardopandrade@gmail.com
Thiago Lagden - lagden@gmail.com
License
MIT License: http://bankfacil.mit-license.org