Skip to content

Commit 7a4a635

Browse files
PatrickJSvicb
authored andcommitted
feat(change_detection): uppercase and lowercase pipes
because the world needs more uppercase madness [✔] clang-format [✔] tests
1 parent 557d54b commit 7a4a635

File tree

5 files changed

+229
-1
lines changed

5 files changed

+229
-1
lines changed

modules/angular2/src/change_detection/change_detection.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import {IterableChangesFactory} from './pipes/iterable_changes';
55
import {KeyValueChangesFactory} from './pipes/keyvalue_changes';
66
import {ObservablePipeFactory} from './pipes/observable_pipe';
77
import {PromisePipeFactory} from './pipes/promise_pipe';
8+
import {UpperCaseFactory} from './pipes/uppercase_pipe';
9+
import {LowerCaseFactory} from './pipes/lowercase_pipe';
810
import {NullPipeFactory} from './pipes/null_pipe';
911
import {ChangeDetection, ProtoChangeDetector, ChangeDetectorDefinition} from './interfaces';
1012
import {Injectable} from 'angular2/src/di/decorators';
@@ -39,10 +41,26 @@ export var iterableDiff: List <
3941
export var async: List <
4042
PipeFactory >= [new ObservablePipeFactory(), new PromisePipeFactory(), new NullPipeFactory()];
4143

44+
/**
45+
* Uppercase text transform.
46+
*
47+
* @exportedAs angular2/pipes
48+
*/
49+
export var uppercase: List < PipeFactory >= [new UpperCaseFactory(), new NullPipeFactory()];
50+
51+
/**
52+
* Lowercase text transform.
53+
*
54+
* @exportedAs angular2/pipes
55+
*/
56+
export var lowercase: List < PipeFactory >= [new LowerCaseFactory(), new NullPipeFactory()];
57+
4258
export var defaultPipes = {
4359
"iterableDiff": iterableDiff,
4460
"keyValDiff": keyValDiff,
45-
"async": async
61+
"async": async,
62+
"uppercase": uppercase,
63+
"lowercase": lowercase
4664
};
4765

4866
export var preGeneratedProtoDetectors = {};
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import {isString, StringWrapper} from 'angular2/src/facade/lang';
2+
import {Pipe} from './pipe';
3+
4+
// HACK: workaround for Traceur behavior.
5+
// It expects all transpiled modules to contain this marker.
6+
// TODO: remove this when we no longer use traceur
7+
export var __esModule = true;
8+
9+
/**
10+
* Implements lowercase transforms to text.
11+
*
12+
* # Example
13+
*
14+
* In this example we transform the user text lowercase.
15+
*
16+
* ```
17+
* @Component({
18+
* selector: "username-cmp"
19+
* })
20+
* @View({
21+
* inline: "Username: {{ user | lowercase }}"
22+
* })
23+
* class Username {
24+
* user:string;
25+
* }
26+
*
27+
* ```
28+
*
29+
* @exportedAs angular2/pipes
30+
*/
31+
export class LowerCasePipe extends Pipe {
32+
_latestValue: string;
33+
constructor() {
34+
super();
35+
this._latestValue = null;
36+
}
37+
supports(str): boolean { return isString(str); }
38+
39+
onDestroy(): void { this._latestValue = null; }
40+
41+
transform(value: string): string {
42+
if (this._latestValue !== value) {
43+
this._latestValue = value;
44+
return StringWrapper.toLowerCase(value);
45+
} else {
46+
return this._latestValue;
47+
}
48+
}
49+
}
50+
51+
/**
52+
* @exportedAs angular2/pipes
53+
*/
54+
export class LowerCaseFactory {
55+
supports(str): boolean { return isString(str); }
56+
57+
create(): Pipe { return new LowerCasePipe(); }
58+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import {isString, StringWrapper} from 'angular2/src/facade/lang';
2+
import {Pipe} from './pipe';
3+
4+
// HACK: workaround for Traceur behavior.
5+
// It expects all transpiled modules to contain this marker.
6+
// TODO: remove this when we no longer use traceur
7+
export var __esModule = true;
8+
9+
/**
10+
* Implements uppercase transforms to text.
11+
*
12+
* # Example
13+
*
14+
* In this example we transform the user text uppercase.
15+
*
16+
* ```
17+
* @Component({
18+
* selector: "username-cmp"
19+
* })
20+
* @View({
21+
* inline: "Username: {{ user | uppercase }}"
22+
* })
23+
* class Username {
24+
* user:string;
25+
* }
26+
*
27+
* ```
28+
*
29+
* @exportedAs angular2/pipes
30+
*/
31+
export class UpperCasePipe extends Pipe {
32+
_latestValue: string;
33+
constructor() {
34+
super();
35+
this._latestValue = null;
36+
}
37+
supports(str): boolean { return isString(str); }
38+
39+
onDestroy(): void { this._latestValue = null; }
40+
41+
transform(value: string): string {
42+
if (this._latestValue !== value) {
43+
this._latestValue = value;
44+
return StringWrapper.toUpperCase(value);
45+
} else {
46+
return this._latestValue;
47+
}
48+
}
49+
}
50+
51+
/**
52+
* @exportedAs angular2/pipes
53+
*/
54+
export class UpperCaseFactory {
55+
supports(str): boolean { return isString(str); }
56+
57+
create(): Pipe { return new UpperCasePipe(); }
58+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import {ddescribe, describe, it, iit, xit, expect, beforeEach, afterEach} from 'angular2/test_lib';
2+
3+
import {LowerCasePipe} from 'angular2/src/change_detection/pipes/lowercase_pipe';
4+
5+
export function main() {
6+
describe("LowerCasePipe", () => {
7+
var str;
8+
var upper;
9+
var lower;
10+
var pipe;
11+
12+
beforeEach(() => {
13+
str = 'something';
14+
lower = 'something';
15+
upper = 'SOMETHING';
16+
pipe = new LowerCasePipe();
17+
});
18+
19+
describe("supports", () => {
20+
it("should support strings", () => {
21+
expect(pipe.supports(str)).toBe(true);
22+
});
23+
24+
it("should not support other objects", () => {
25+
expect(pipe.supports(new Object())).toBe(false);
26+
expect(pipe.supports(null)).toBe(false);
27+
});
28+
});
29+
30+
describe("transform", () => {
31+
32+
it("should return lowercase", () => {
33+
var val = pipe.transform(upper);
34+
expect(val).toEqual(lower);
35+
});
36+
37+
it("should lowercase when there is a new value", () => {
38+
var val = pipe.transform(upper);
39+
expect(val).toEqual(lower);
40+
var val2 = pipe.transform('WAT');
41+
expect(val2).toEqual('wat');
42+
});
43+
44+
});
45+
46+
});
47+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import {ddescribe, describe, it, iit, xit, expect, beforeEach, afterEach} from 'angular2/test_lib';
2+
3+
import {UpperCasePipe} from 'angular2/src/change_detection/pipes/uppercase_pipe';
4+
5+
export function main() {
6+
describe("UpperCasePipe", () => {
7+
var str;
8+
var upper;
9+
var lower;
10+
var pipe;
11+
12+
beforeEach(() => {
13+
str = 'something';
14+
lower = 'something';
15+
upper = 'SOMETHING';
16+
pipe = new UpperCasePipe();
17+
});
18+
19+
describe("supports", () => {
20+
it("should support strings", () => {
21+
expect(pipe.supports(str)).toBe(true);
22+
});
23+
24+
it("should not support other objects", () => {
25+
expect(pipe.supports(new Object())).toBe(false);
26+
expect(pipe.supports(null)).toBe(false);
27+
});
28+
});
29+
30+
describe("transform", () => {
31+
32+
it("should return uppercase", () => {
33+
var val = pipe.transform(lower);
34+
expect(val).toEqual(upper);
35+
});
36+
37+
it("should uppercase when there is a new value", () => {
38+
var val = pipe.transform(lower);
39+
expect(val).toEqual(upper);
40+
var val2 = pipe.transform('wat');
41+
expect(val2).toEqual('WAT');
42+
});
43+
44+
});
45+
46+
});
47+
}

0 commit comments

Comments
 (0)