Skip to content

Instantly share code, notes, and snippets.

@hoatle
Last active June 9, 2016 17:37
Show Gist options
  • Save hoatle/6d93c49fcfa3990342b28eeb52d34289 to your computer and use it in GitHub Desktop.
Save hoatle/6d93c49fcfa3990342b28eeb52d34289 to your computer and use it in GitHub Desktop.
decorator for md-input-textarea-directive to adjust input validation behavior: validate the input immediately (angular-material v1.0.9)
/**
* Copyright 2016, Hoat Le; Teracy, Inc.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* 3. Neither the name of Teracy, Inc. nor the names of its contributors may be used
* to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
'use strict';
/**
* @ngdoc function
* @name teracy.decorator:MdInputTextareaDirective
* @description
* # MdInputTextareaDirective
* Decorator of the cg
* This decorator is used for validating the input immediately
*/
angular.module('teracy')
.config(function ($provide) {
function inputTextareaDirectiveDecorator ($delegate, _, $mdUtil) {
var mdInputTextareaDirective = _.find($delegate, function (directive) {
return directive.$$moduleName === 'material.components.input';
});
if (!mdInputTextareaDirective) {
return;
}
var compileFn = mdInputTextareaDirective.compile;
mdInputTextareaDirective.compile = function () {
var linkFn = compileFn.apply(this, arguments); //TODO(hoatle): need to check linkFn is object?
return function (scope, element, attr, ctrls) {
linkFn.apply(this, arguments);
var containerCtrl = ctrls[0];
var ngModelCtrl = ctrls[1] || $mdUtil.fakeNgModel();
if (!containerCtrl) {
return;
}
ngModelCtrl.$viewChangeListeners.push(function () {
$mdUtil.nextTick(function () {
if (ngModelCtrl.$dirty || ngModelCtrl.$touch || !ngModelCtrl.$pristine) {
containerCtrl.setInvalid(ngModelCtrl.$invalid);
} else {
containerCtrl.setInvalid(false);
}
});
});
};
};
return $delegate;
}
$provide.decorator('inputDirective', inputTextareaDirectiveDecorator);
$provide.decorator('textareaDirective', inputTextareaDirectiveDecorator);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment