AngularJS Example:
HTML
<link rel="stylesheet" href="http://twitter.github.com/bootstrap/assets/css/bootstrap.css">
<div ng-app="myApp">
<div ng-controller="MyCtrl">
<form name="former" ng-submit="doSomething()">
<input type="text" id="answer" name="answer" ng-model="data.answer" length-asterisks="5" /> <span ng-show="former.answer.$error.lengthAsterisks">Length not correct</span>
</form>
</div>
</div>
JavaScript
var myApp = angular.module('myApp', []);
//myApp.directive('myDirective', function() {});
//myApp.factory('myService', function() {});
myApp.controller("MyCtrl", function ($scope) {
$scope.data = {};
});
myApp.directive('lengthAsterisks', function ($filter) {
return {
require: 'ngModel',
link: function postLink(scope, element, attr, ngModel) {
var length = parseInt(attr.lengthAsterisks);
//For DOM -> model validation
ngModel.$parsers.unshift(function (value) {
var l = value ? value.length : -1;
var valid = l === length;
console.log("Input length is: "+l+" desired is "+length);
ngModel.$setValidity('lengthAsterisks', valid);
element.val($filter('asterisks')(value, length));
return value;
});
//For model -> DOM validation
ngModel.$formatters.unshift(function (value) {
var l = value ? value.length : -1;
console.log("Length is: " + length + " size is: " + l);
ngModel.$setValidity('lengthAsterisks', l === length);
return $filter('asterisks')(value, length);
});
}
};
})
.filter('asterisks', function () {
return function (string, length) {
console.log("Running Asterisks with: " + string + " " + length);
if (string === undefined || string === null) {
string = "";
}
string = string.replace("*", "");
for (var i = string.length; i < length; i++)
string += "*";
return string
};
});