feat(compiler): special-case class attribute in hostAttributes
Closes #1774 Closes #1841
This commit is contained in:
parent
cfba38b462
commit
3011cd86bd
|
@ -100,9 +100,7 @@ export class DirectiveParser extends CompileStep {
|
||||||
}
|
}
|
||||||
if (isPresent(directive.hostAttributes)) {
|
if (isPresent(directive.hostAttributes)) {
|
||||||
MapWrapper.forEach(directive.hostAttributes, (hostAttrValue, hostAttrName) => {
|
MapWrapper.forEach(directive.hostAttributes, (hostAttrValue, hostAttrName) => {
|
||||||
if (!DOM.hasAttribute(current.element, hostAttrName)) {
|
this._addHostAttribute(hostAttrName, hostAttrValue, current);
|
||||||
DOM.setAttribute(current.element, hostAttrName, hostAttrValue);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (isPresent(directive.readAttributes)) {
|
if (isPresent(directive.readAttributes)) {
|
||||||
|
@ -162,6 +160,16 @@ export class DirectiveParser extends CompileStep {
|
||||||
directiveBinderBuilder.bindHostProperty(hostPropertyName, ast);
|
directiveBinderBuilder.bindHostProperty(hostPropertyName, ast);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_addHostAttribute(attrName, attrValue, compileElement) {
|
||||||
|
if (StringWrapper.equals(attrName, 'class')) {
|
||||||
|
ListWrapper.forEach(attrValue.split(' '), (className) => {
|
||||||
|
DOM.addClass(compileElement.element, className);
|
||||||
|
});
|
||||||
|
} else if (!DOM.hasAttribute(compileElement.element, attrName)) {
|
||||||
|
DOM.setAttribute(compileElement.element, attrName, attrValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_splitBindConfig(bindConfig:string) {
|
_splitBindConfig(bindConfig:string) {
|
||||||
return ListWrapper.map(bindConfig.split('|'), (s) => s.trim());
|
return ListWrapper.map(bindConfig.split('|'), (s) => s.trim());
|
||||||
}
|
}
|
||||||
|
|
|
@ -144,6 +144,15 @@ export function main() {
|
||||||
expect(DOM.getAttribute(results[0].element, 'attr_name')).toEqual('attr_val');
|
expect(DOM.getAttribute(results[0].element, 'attr_name')).toEqual('attr_val');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should add CSS classes if "class" specified in host element attributes', () => {
|
||||||
|
var element = el('<input class="foo baz" some-decor-with-host-attrs>');
|
||||||
|
var results = process(element);
|
||||||
|
|
||||||
|
expect(DOM.hasClass(results[0].element, 'foo')).toBeTruthy();
|
||||||
|
expect(DOM.hasClass(results[0].element, 'bar')).toBeTruthy();
|
||||||
|
expect(DOM.hasClass(results[0].element, 'baz')).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
it('should read attribute values', () => {
|
it('should read attribute values', () => {
|
||||||
var element = el('<input some-decor-props some-attr="someValue">');
|
var element = el('<input some-decor-props some-attr="someValue">');
|
||||||
var results = process(element);
|
var results = process(element);
|
||||||
|
@ -283,7 +292,8 @@ var someDirectiveWithHostProperties = new DirectiveMetadata({
|
||||||
var someDirectiveWithHostAttributes = new DirectiveMetadata({
|
var someDirectiveWithHostAttributes = new DirectiveMetadata({
|
||||||
selector: '[some-decor-with-host-attrs]',
|
selector: '[some-decor-with-host-attrs]',
|
||||||
hostAttributes: MapWrapper.createFromStringMap({
|
hostAttributes: MapWrapper.createFromStringMap({
|
||||||
'attr_name': 'attr_val'
|
'attr_name': 'attr_val',
|
||||||
|
'class': 'foo bar'
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue