AngularJS - Blur binding 1.2.0

HTML

<script src="http://code.angularjs.org/1.2.0/angular.js"></script>
<input type="text" ng-model="value" ng-model-onblur />
    <span ng-bind="value"></span>

JavaScript

function Main() {}


// override the default input to update on blur
angular.module('app', []).directive('ngModelOnblur', function() {
    return {
        restrict: 'A',
        require: '?ngModel',
        priority: 99,
        link: function(scope, elm, attr, ngModel) {
            if(!ngModel) return; // do nothing if no ng-model
            if (['radio', 'checkbox'].indexOf(attr.type) > -1) return;
            
            elm.unbind('input').unbind('keydown').unbind('change');
            
            //ui->model
            elm.on('blur', function() {
                scope.$apply(read.call(this));         
            });
            
            function read() {
                ngModel.$setViewValue(elm.val());
            }
        }
    };
});