@@ -10,6 +10,7 @@ var url = require('url');
|
||||
import {List, MapWrapper, ListWrapper, StringMapWrapper} from 'angular2/src/facade/collection';
|
||||
import {DomAdapter, setRootDomAdapter} from './dom_adapter';
|
||||
import {BaseException, isPresent, isBlank} from 'angular2/src/facade/lang';
|
||||
import {SelectorMatcher, CssSelector} from 'angular2/src/core/compiler/selector';
|
||||
|
||||
var _attrToPropMap = {
|
||||
'inner-html': 'innerHTML',
|
||||
@@ -35,27 +36,55 @@ export class Parse5DomAdapter extends DomAdapter {
|
||||
throw _notImplemented('query');
|
||||
}
|
||||
querySelector(el, selector:string) {
|
||||
throw _notImplemented('querySelector');
|
||||
return this.querySelectorAll(el, selector)[0];
|
||||
}
|
||||
querySelectorAll(el, selector:string) {
|
||||
//TODO: use selector class from core. For now, only works for .classname ...
|
||||
var res = ListWrapper.create();
|
||||
var _recursive = (result, node, className) => {
|
||||
if (this.hasClass(node, className)) {
|
||||
var _recursive = (result, node, selector, matcher) => {
|
||||
if (this.elementMatches(node, selector, matcher)) {
|
||||
ListWrapper.push(result, node);
|
||||
}
|
||||
var cNodes = node.childNodes;
|
||||
if (cNodes && cNodes.length > 0) {
|
||||
for (var i = 0; i < cNodes.length; i++) {
|
||||
_recursive(result, cNodes[i], className);
|
||||
_recursive(result, cNodes[i], selector, matcher);
|
||||
}
|
||||
}
|
||||
};
|
||||
_recursive(res, el, selector.substring(1));
|
||||
var matcher = new SelectorMatcher();
|
||||
matcher.addSelectable(CssSelector.parse(selector));
|
||||
_recursive(res, el, selector, matcher);
|
||||
return res;
|
||||
}
|
||||
elementMatches(node, selector:string, matcher = null):boolean {
|
||||
var result = false;
|
||||
if (selector && selector.charAt(0) == "#") {
|
||||
result = this.getAttribute(node, 'id') == selector.substring(1);
|
||||
} else if (selector) {
|
||||
var result = false;
|
||||
if (matcher == null) {
|
||||
matcher = new SelectorMatcher();
|
||||
matcher.addSelectable(CssSelector.parse(selector));
|
||||
}
|
||||
|
||||
var cssSelector = new CssSelector();
|
||||
cssSelector.setElement(this.tagName(node));
|
||||
if (node.attribs) {
|
||||
for (var attrName in node.attribs) {
|
||||
cssSelector.addAttribute(attrName, node.attribs[attrName]);
|
||||
}
|
||||
}
|
||||
var classList = this.classList(node);
|
||||
for (var i = 0; i < classList.length; i++) {
|
||||
cssSelector.addClassName(classList[i]);
|
||||
}
|
||||
|
||||
matcher.match(cssSelector, function(selector, cb) {result = true;});
|
||||
}
|
||||
return result;
|
||||
}
|
||||
on(el, evt, listener) {
|
||||
throw _notImplemented('on');
|
||||
//Do nothing, in order to not break forms integration tests
|
||||
}
|
||||
dispatchEvent(el, evt) {
|
||||
throw _notImplemented('dispatchEvent');
|
||||
@@ -316,7 +345,7 @@ export class Parse5DomAdapter extends DomAdapter {
|
||||
return res;
|
||||
}
|
||||
getAttribute(element, attribute:string) {
|
||||
return element.attribs.hasOwnProperty(attribute) ? element.attribs[attribute] : null;
|
||||
return element.attribs && element.attribs.hasOwnProperty(attribute)? element.attribs[attribute]: null;
|
||||
}
|
||||
setAttribute(element, attribute:string, value:string) {
|
||||
if (attribute) {
|
||||
@@ -341,14 +370,6 @@ export class Parse5DomAdapter extends DomAdapter {
|
||||
}
|
||||
return defDoc;
|
||||
}
|
||||
elementMatches(n, selector:string):boolean {
|
||||
//TODO: use selector class from core.
|
||||
if (selector && selector.charAt(0) == ".") {
|
||||
return this.hasClass(n, selector.substring(1));
|
||||
} else {
|
||||
return n.tagName == selector;
|
||||
}
|
||||
}
|
||||
isTemplateElement(el:any):boolean {
|
||||
return this.isElementNode(el) && this.tagName(el) === "template";
|
||||
}
|
||||
|
||||
+8
-8
@@ -1,26 +1,26 @@
|
||||
import {StringMapWrapper, ListWrapper} from 'angular2/src/facade/collection';
|
||||
import {isPresent} from 'angular2/src/facade/lang';
|
||||
import {ControlGroup, Control, OptionalControl, OptionalControlGroup} from 'angular2/forms';
|
||||
import * as modelModule from './model';
|
||||
|
||||
|
||||
export class FormBuilder {
|
||||
group(controlsConfig, extra = null):ControlGroup {
|
||||
group(controlsConfig, extra = null):modelModule.ControlGroup {
|
||||
var controls = this._reduceControls(controlsConfig);
|
||||
var optionals = isPresent(extra) ? StringMapWrapper.get(extra, "optionals") : null;
|
||||
var validator = isPresent(extra) ? StringMapWrapper.get(extra, "validator") : null;
|
||||
|
||||
if (isPresent(validator)) {
|
||||
return new ControlGroup(controls, optionals, validator);
|
||||
return new modelModule.ControlGroup(controls, optionals, validator);
|
||||
} else {
|
||||
return new ControlGroup(controls, optionals);
|
||||
return new modelModule.ControlGroup(controls, optionals);
|
||||
}
|
||||
}
|
||||
|
||||
control(value, validator:Function = null):Control {
|
||||
control(value, validator:Function = null):modelModule.Control {
|
||||
if (isPresent(validator)) {
|
||||
return new Control(value, validator);
|
||||
return new modelModule.Control(value, validator);
|
||||
} else {
|
||||
return new Control(value);
|
||||
return new modelModule.Control(value);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ export class FormBuilder {
|
||||
}
|
||||
|
||||
_createControl(controlConfig) {
|
||||
if (controlConfig instanceof Control || controlConfig instanceof ControlGroup) {
|
||||
if (controlConfig instanceof modelModule.Control || controlConfig instanceof modelModule.ControlGroup) {
|
||||
return controlConfig;
|
||||
|
||||
} else if (ListWrapper.isList(controlConfig)) {
|
||||
|
||||
+5
-5
@@ -1,18 +1,18 @@
|
||||
import {isBlank, isPresent} from 'angular2/src/facade/lang';
|
||||
import {List, ListWrapper, StringMapWrapper} from 'angular2/src/facade/collection';
|
||||
|
||||
import {ControlGroup, Control} from 'angular2/forms';
|
||||
import * as modelModule from './model';
|
||||
|
||||
export function required(c:Control) {
|
||||
export function required(c:modelModule.Control) {
|
||||
return isBlank(c.value) || c.value == "" ? {"required" : true} : null;
|
||||
}
|
||||
|
||||
export function nullValidator(c:Control) {
|
||||
export function nullValidator(c:modelModule.Control) {
|
||||
return null;
|
||||
}
|
||||
|
||||
export function compose(validators:List<Function>):Function {
|
||||
return function(c:Control) {
|
||||
return function(c:modelModule.Control) {
|
||||
var res = ListWrapper.reduce(validators, (res, validator) => {
|
||||
var errors = validator(c);
|
||||
return isPresent(errors) ? StringMapWrapper.merge(res, errors) : res;
|
||||
@@ -21,7 +21,7 @@ export function compose(validators:List<Function>):Function {
|
||||
}
|
||||
}
|
||||
|
||||
export function controlGroupValidator(c:ControlGroup) {
|
||||
export function controlGroupValidator(c:modelModule.ControlGroup) {
|
||||
var res = {};
|
||||
StringMapWrapper.forEach(c.controls, (control, name) => {
|
||||
if (c.contains(name) && isPresent(control.errors)) {
|
||||
|
||||
Reference in New Issue
Block a user