diff options
Diffstat (limited to 'js/vendor/angular-ui/modules/directives/showhide')
-rw-r--r-- | js/vendor/angular-ui/modules/directives/showhide/showhide.js | 60 | ||||
-rw-r--r-- | js/vendor/angular-ui/modules/directives/showhide/test/showhideSpec.js | 104 |
2 files changed, 164 insertions, 0 deletions
diff --git a/js/vendor/angular-ui/modules/directives/showhide/showhide.js b/js/vendor/angular-ui/modules/directives/showhide/showhide.js new file mode 100644 index 000000000..eec5c395d --- /dev/null +++ b/js/vendor/angular-ui/modules/directives/showhide/showhide.js @@ -0,0 +1,60 @@ +/** + * uiShow Directive + * + * Adds a 'ui-show' class to the element instead of display:block + * Created to allow tighter control of CSS without bulkier directives + * + * @param expression {boolean} evaluated expression to determine if the class should be added + */ +angular.module('ui.directives').directive('uiShow', [function () { + return function (scope, elm, attrs) { + scope.$watch(attrs.uiShow, function (newVal, oldVal) { + if (newVal) { + elm.addClass('ui-show'); + } else { + elm.removeClass('ui-show'); + } + }); + }; +}]) + +/** + * uiHide Directive + * + * Adds a 'ui-hide' class to the element instead of display:block + * Created to allow tighter control of CSS without bulkier directives + * + * @param expression {boolean} evaluated expression to determine if the class should be added + */ + .directive('uiHide', [function () { + return function (scope, elm, attrs) { + scope.$watch(attrs.uiHide, function (newVal, oldVal) { + if (newVal) { + elm.addClass('ui-hide'); + } else { + elm.removeClass('ui-hide'); + } + }); + }; +}]) + +/** + * uiToggle Directive + * + * Adds a class 'ui-show' if true, and a 'ui-hide' if false to the element instead of display:block/display:none + * Created to allow tighter control of CSS without bulkier directives. This also allows you to override the + * default visibility of the element using either class. + * + * @param expression {boolean} evaluated expression to determine if the class should be added + */ + .directive('uiToggle', [function () { + return function (scope, elm, attrs) { + scope.$watch(attrs.uiToggle, function (newVal, oldVal) { + if (newVal) { + elm.removeClass('ui-hide').addClass('ui-show'); + } else { + elm.removeClass('ui-show').addClass('ui-hide'); + } + }); + }; +}]); diff --git a/js/vendor/angular-ui/modules/directives/showhide/test/showhideSpec.js b/js/vendor/angular-ui/modules/directives/showhide/test/showhideSpec.js new file mode 100644 index 000000000..6f9959911 --- /dev/null +++ b/js/vendor/angular-ui/modules/directives/showhide/test/showhideSpec.js @@ -0,0 +1,104 @@ +/*global beforeEach, describe, it, inject, expect, module, spyOn*/ + +(function () { + 'use strict'; + + describe('uiShow', function () { + + var scope, $compile; + beforeEach(module('ui.directives')); + beforeEach(inject(function (_$rootScope_, _$compile_) { + scope = _$rootScope_.$new(); + $compile = _$compile_; + })); + + describe('linking the directive', function () { + it('should call scope.$watch', function () { + spyOn(scope, '$watch'); + $compile('<div ui-show="foo"></div>')(scope); + expect(scope.$watch).toHaveBeenCalled(); + }); + }); + + describe('executing the watcher', function () { + it('should add the ui-show class if true', function () { + var element = $compile('<div ui-show="foo"></div>')(scope); + scope.foo = true; + scope.$apply(); + expect(element.hasClass('ui-show')).toBe(true); + }); + it('should remove the ui-show class if false', function () { + var element = $compile('<div ui-show="foo"></div>')(scope); + scope.foo = false; + scope.$apply(); + expect(element.hasClass('ui-show')).toBe(false); + }); + }); + }); + + describe('uiHide', function () { + + var scope, $compile; + beforeEach(module('ui.directives')); + beforeEach(inject(function (_$rootScope_, _$compile_) { + scope = _$rootScope_.$new(); + $compile = _$compile_; + })); + + describe('when the directive is linked', function () { + it('should call scope.$watch', function () { + spyOn(scope, '$watch'); + $compile('<div ui-hide="foo"></div>')(scope); + expect(scope.$watch).toHaveBeenCalled(); + }); + }); + + describe('executing the watcher', function () { + it('should add the ui-hide class if true', function () { + var element = $compile('<div ui-hide="foo"></div>')(scope); + scope.foo = true; + scope.$apply(); + expect(element.hasClass('ui-hide')).toBe(true); + }); + it('should remove the ui-hide class if false', function () { + var element = $compile('<div ui-hide="foo"></div>')(scope); + scope.foo = false; + scope.$apply(); + expect(element.hasClass('ui-hide')).toBe(false); + }); + }); + }); + + describe('uiToggle', function () { + + var scope, $compile; + beforeEach(module('ui.directives')); + beforeEach(inject(function (_$rootScope_, _$compile_) { + scope = _$rootScope_.$new(); + $compile = _$compile_; + })); + + describe('when the directive is linked', function () { + it('should call scope.$watch', function () { + spyOn(scope, '$watch'); + $compile('<div ui-toggle="foo"></div>')(scope); + expect(scope.$watch).toHaveBeenCalled(); + }); + }); + + describe('executing the watcher', function () { + it('should remove the ui-hide class and add the ui-show class if true', function () { + var element = $compile('<div ui-toggle="foo"></div>')(scope); + scope.foo = true; + scope.$apply(); + expect(element.hasClass('ui-show') && !element.hasClass('ui-hide')).toBe(true); + }); + it('should remove the ui-hide class and add the ui-show class if false', function () { + var element = $compile('<div ui-toggle="foo"></div>')(scope); + scope.foo = false; + scope.$apply(); + expect(!element.hasClass('ui-show') && element.hasClass('ui-hide')).toBe(true); + }); + }); + }); +})(); |