Skip to content

Commit

Permalink
feat(validation): add validationRenderer from @Ullfis
Browse files Browse the repository at this point in the history
  • Loading branch information
Thanood committed Aug 15, 2016
1 parent 86d4318 commit 5a73161
Showing 1 changed file with 78 additions and 0 deletions.
78 changes: 78 additions & 0 deletions src/validation/validationRenderer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import { inject } from 'aurelia-dependency-injection';
import { validationRenderer } from 'aurelia-validation';

@validationRenderer
@inject(Element)
export class MaterializeFormValidationRenderer {

constructor(boundaryElement) {}

render(error, target) {
if (!target || !(this.boundaryElement === target || this.boundaryElement.contains(target))) {
return;
}

let errorMessage = error.message || 'error';

switch (target.tagName) {
case 'MD-INPUT': {
let input = target.querySelector('input');
if (input) {
input.classList.remove('valid');
input.classList.add('invalid');

// focus target
error.target = input;

let label:any = target.querySelector('label');
if (label) {
label.classList.remove('valid');
label.classList.add('invalid');

// get error message from label
let msg = label.getAttribute('data-error');
if(!msg) {
// error message not set? add
label.setAttribute('data-error', errorMessage);
} else {
// set label message into error object
error.message = msg;
}
}
}
break;
}
}

// tag the element so we know we rendered into it.
target.errors = (target.errors || new Map());
target.errors.set(error);
}

unrender(error, target) {
if (!target || !target.errors || !target.errors.has(error)) {
return;
}

target.errors.delete(error);

switch (target.tagName) {
case 'MD-INPUT': {
let input = target.querySelector('input');
if (input) {

input.classList.remove('invalid');
input.classList.add('valid');

let label:any = target.querySelector('label');
if (label) {
label.classList.remove('invalid');
label.classList.add('valid');
}
}
break;
}
}
}

}

0 comments on commit 5a73161

Please sign in to comment.