Skip to content
This repository was archived by the owner on Feb 22, 2018. It is now read-only.

Commit e517e51

Browse files
committed
feat: add ng-show, ng-hide directives
1 parent 195a890 commit e517e51

File tree

5 files changed

+143
-0
lines changed

5 files changed

+143
-0
lines changed

lib/angular.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@ part 'directives/ng_class.dart';
1818
part 'directives/ng_cloak.dart';
1919
part 'directives/ng_click.dart';
2020
part 'directives/ng_controller.dart';
21+
part 'directives/ng_hide.dart';
2122
part 'directives/ng_mustache.dart';
2223
part 'directives/ng_repeat.dart';
24+
part 'directives/ng_show.dart';
2325
part 'dom_utilities.dart';
2426
part 'exception_handler.dart';
2527
part 'http.dart';
@@ -141,4 +143,6 @@ angularModule(AngularModule module) {
141143
module.directive(NgCloakAttrDirective);
142144
module.directive(NgClickAttrDirective);
143145
module.directive(NgControllerAttrDirective);
146+
module.directive(NgHideAttrDirective);
147+
module.directive(NgShowAttrDirective);
144148
}

lib/directives/ng_hide.dart

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
part of angular;
2+
3+
4+
class NgHideAttrDirective {
5+
static String NG_HIDE_CLASS = 'ng-hide';
6+
7+
String expression;
8+
dom.Element node;
9+
10+
NgHideAttrDirective(dom.Node this.node, DirectiveValue value) {
11+
expression = value.value;
12+
}
13+
14+
attach(Scope scope) {
15+
scope.$watch(expression, (value, _, __) {
16+
if (value != null && toBool(value)) {
17+
node.classes.add(NG_HIDE_CLASS);
18+
} else {
19+
node.classes.remove(NG_HIDE_CLASS);
20+
}
21+
});
22+
}
23+
}

lib/directives/ng_show.dart

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
part of angular;
2+
3+
4+
class NgShowAttrDirective {
5+
static String NG_SHOW_CLASS = 'ng-show';
6+
7+
String expression;
8+
dom.Element node;
9+
10+
NgShowAttrDirective(dom.Node this.node, DirectiveValue value) {
11+
expression = value.value;
12+
}
13+
14+
attach(Scope scope) {
15+
scope.$watch(expression, (value, _, __) {
16+
if (value != null && toBool(value)) {
17+
node.classes.add(NG_SHOW_CLASS);
18+
} else {
19+
node.classes.remove(NG_SHOW_CLASS);
20+
}
21+
});
22+
}
23+
}

test/directives/ng_hide_spec.dart

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import '../_specs.dart';
2+
import 'dart:html' as dom;
3+
4+
5+
main() {
6+
beforeEach(module(angularModule));
7+
8+
describe('NgHide', () {
9+
var compile, element, rootScope;
10+
11+
beforeEach(inject((Scope scope, Compiler compiler) {
12+
compile = (html, [applyFn]) {
13+
element = $(html);
14+
rootScope = scope;
15+
compiler(element)(element).attach(scope);
16+
scope.$apply(applyFn);
17+
};
18+
}));
19+
20+
21+
it('should add/remove ng-hide class', () {
22+
compile('<div ng-hide="isHidden"></div>');
23+
24+
expect(element).not.toHaveClass('ng-hide');
25+
26+
rootScope.$apply(() {
27+
rootScope['isHidden'] = true;
28+
});
29+
expect(element).toHaveClass('ng-hide');
30+
31+
rootScope.$apply(() {
32+
rootScope['isHidden'] = false;
33+
});
34+
expect(element).not.toHaveClass('ng-hide');
35+
});
36+
});
37+
}

test/directives/ng_show_spec.dart

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import '../_specs.dart';
2+
import 'dart:html' as dom;
3+
4+
5+
main() {
6+
beforeEach(module(angularModule));
7+
8+
describe('NgShow', () {
9+
var compile, element, rootScope;
10+
11+
beforeEach(inject((Scope scope, Compiler compiler) {
12+
compile = (html, [applyFn]) {
13+
element = $(html);
14+
rootScope = scope;
15+
compiler(element)(element).attach(scope);
16+
scope.$apply(applyFn);
17+
};
18+
}));
19+
20+
21+
it('should add/remove ng-show class', () {
22+
compile('<div ng-show="isVisible"></div>');
23+
24+
expect(element).not.toHaveClass('ng-show');
25+
26+
rootScope.$apply(() {
27+
rootScope['isVisible'] = true;
28+
});
29+
expect(element).toHaveClass('ng-show');
30+
31+
rootScope.$apply(() {
32+
rootScope['isVisible'] = false;
33+
});
34+
expect(element).not.toHaveClass('ng-show');
35+
});
36+
37+
it('should work together with ng-class', () {
38+
compile('<div ng-class="currentCls" ng-show="isVisible"></div>');
39+
40+
expect(element).not.toHaveClass('active');
41+
expect(element).not.toHaveClass('ng-show');
42+
43+
rootScope.$apply(() {
44+
rootScope['currentCls'] = 'active';
45+
});
46+
expect(element).toHaveClass('active');
47+
expect(element).not.toHaveClass('ng-show');
48+
49+
rootScope.$apply(() {
50+
rootScope['isVisible'] = true;
51+
});
52+
expect(element).toHaveClass('active');
53+
expect(element).toHaveClass('ng-show');
54+
});
55+
});
56+
}

0 commit comments

Comments
 (0)