Skip to content

Commit 69e02ee

Browse files
vicbmhevery
authored andcommitted
feat(ViewSplitter): Change template shorthand syntax from '!' to '*'
fixes angular#717 Closes angular#727
1 parent b1fc3e8 commit 69e02ee

File tree

2 files changed

+13
-15
lines changed

2 files changed

+13
-15
lines changed

modules/angular2/src/core/compiler/pipeline/view_splitter.js

+2-4
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ import {CompileElement} from './compile_element';
99
import {CompileControl} from './compile_control';
1010
import {StringWrapper} from 'angular2/src/facade/lang';
1111

12-
import {$BANG} from 'angular2/src/change_detection/parser/lexer';
13-
1412
/**
1513
* Splits views at `<template>` elements or elements with `template` attribute:
1614
* For `<template>` elements:
@@ -59,9 +57,9 @@ export class ViewSplitter extends CompileStep {
5957
var templateBindings = MapWrapper.get(attrs, 'template');
6058
var hasTemplateBinding = isPresent(templateBindings);
6159

62-
// look for template shortcuts such as !if="condition" and treat them as template="if condition"
60+
// look for template shortcuts such as *if="condition" and treat them as template="if condition"
6361
MapWrapper.forEach(attrs, (attrValue, attrName) => {
64-
if (StringWrapper.charCodeAt(attrName, 0) == $BANG) {
62+
if (StringWrapper.startsWith(attrName, '*')) {
6563
var key = StringWrapper.substring(attrName, 1); // remove the bang
6664
if (hasTemplateBinding) {
6765
// 2nd template binding detected

modules/angular2/test/core/compiler/pipeline/view_splitter_spec.js

+11-11
Original file line numberDiff line numberDiff line change
@@ -99,26 +99,26 @@ export function main() {
9999

100100
});
101101

102-
describe('elements with !directive_name attribute', () => {
102+
describe('elements with *directive_name attribute', () => {
103103

104104
it('should replace the element with an empty <template> element', () => {
105-
var rootElement = el('<div><span !if></span></div>');
105+
var rootElement = el('<div><span *if></span></div>');
106106
var originalChild = rootElement.childNodes[0];
107107
var results = createPipeline().process(rootElement);
108108
expect(results[0].element).toBe(rootElement);
109109
expect(DOM.getOuterHTML(results[0].element)).toEqual('<div><template if=""></template></div>');
110-
expect(DOM.getOuterHTML(results[2].element)).toEqual('<span !if=""></span>')
110+
expect(DOM.getOuterHTML(results[2].element)).toEqual('<span *if=""></span>')
111111
expect(results[2].element).toBe(originalChild);
112112
});
113113

114114
it('should mark the element as viewRoot', () => {
115-
var rootElement = el('<div><div !foo="bar"></div></div>');
115+
var rootElement = el('<div><div *foo="bar"></div></div>');
116116
var results = createPipeline().process(rootElement);
117117
expect(results[2].isViewRoot).toBe(true);
118118
});
119119

120120
it('should work with top-level template node', () => {
121-
var rootElement = DOM.createTemplate('<div !foo>x</div>');
121+
var rootElement = DOM.createTemplate('<div *foo>x</div>');
122122
var originalChild = rootElement.content.childNodes[0];
123123
var results = createPipeline().process(rootElement);
124124

@@ -130,42 +130,42 @@ export function main() {
130130
});
131131

132132
it('should add property bindings from the template attribute', () => {
133-
var rootElement = el('<div><div !prop="expr"></div></div>');
133+
var rootElement = el('<div><div *prop="expr"></div></div>');
134134
var results = createPipeline().process(rootElement);
135135
expect(MapWrapper.get(results[1].propertyBindings, 'prop').source).toEqual('expr');
136136
});
137137

138138
it('should add variable mappings from the template attribute', () => {
139-
var rootElement = el('<div><div !foreach="var varName=mapName"></div></div>');
139+
var rootElement = el('<div><div *foreach="var varName=mapName"></div></div>');
140140
var results = createPipeline().process(rootElement);
141141
expect(results[1].variableBindings).toEqual(MapWrapper.createFromStringMap({'mapName': 'varName'}));
142142
});
143143

144144
it('should add entries without value as attribute to the element', () => {
145-
var rootElement = el('<div><div !varname></div></div>');
145+
var rootElement = el('<div><div *varname></div></div>');
146146
var results = createPipeline().process(rootElement);
147147
expect(results[1].attrs()).toEqual(MapWrapper.createFromStringMap({'varname': ''}));
148148
expect(results[1].propertyBindings).toBe(null);
149149
expect(results[1].variableBindings).toBe(null);
150150
});
151151

152152
it('should iterate properly after a template dom modification', () => {
153-
var rootElement = el('<div><div !foo></div><after></after></div>');
153+
var rootElement = el('<div><div *foo></div><after></after></div>');
154154
var results = createPipeline().process(rootElement);
155155
// 1 root + 2 initial + 1 generated template elements
156156
expect(results.length).toEqual(4);
157157
});
158158

159159
it('should not allow multiple template directives on the same element', () => {
160160
expect( () => {
161-
var rootElement = el('<div><div !foo !bar="blah"></div></div>');
161+
var rootElement = el('<div><div *foo *bar="blah"></div></div>');
162162
createPipeline().process(rootElement);
163163
}).toThrowError('Only one template directive per element is allowed: foo and bar cannot be used simultaneously!');
164164
});
165165

166166
it('should not allow template and bang directives on the same element', () => {
167167
expect( () => {
168-
var rootElement = el('<div><div !foo template="blah"></div></div>');
168+
var rootElement = el('<div><div *foo template="blah"></div></div>');
169169
createPipeline().process(rootElement);
170170
}).toThrowError('Only one template directive per element is allowed: blah and foo cannot be used simultaneously!');
171171
});

0 commit comments

Comments
 (0)