diff --git a/js/ext/angular/src/service/angularOverrides.js b/js/ext/angular/src/service/angularOverrides.js index badaff8afa..01daa9ba06 100644 --- a/js/ext/angular/src/service/angularOverrides.js +++ b/js/ext/angular/src/service/angularOverrides.js @@ -1,24 +1,24 @@ angular.element.prototype.addClass = function(cssClasses) { - var x, el, existingClasses; + var x, y, cssClass, el, splitClasses, existingClasses; if (cssClasses) { for(x=0; xA')[0]; + b = jqLite('
B
')[0]; + c = jqLite('
C
')[0]; + }); + + describe('class', function() { + + // classList changes do not support svg elements! + /* + it('should properly do with SVG elements', function() { + // this is a jqLite & SVG only test + if (!window.SVGElement) return; + var svg = jqLite(''); + var rect = svg.children(); + + expect(rect.hasClass('foo-class')).toBe(false); + rect.addClass('foo-class'); + expect(rect.hasClass('foo-class')).toBe(true); + rect.removeClass('foo-class'); + expect(rect.hasClass('foo-class')).toBe(false); + }); + */ + + + it('should ignore comment elements', function() { + var comment = jqLite(document.createComment('something')); + + comment.addClass('whatever'); + comment.hasClass('whatever'); + comment.toggleClass('whatever'); + comment.removeClass('whatever'); + }); + + + describe('hasClass', function() { + it('should check class', function() { + var selector = jqLite([a, b]); + expect(selector.hasClass('abc')).toEqual(false); + }); + + + it('should make sure that partial class is not checked as a subset', function() { + var selector = jqLite([a, b]); + selector.addClass('a'); + selector.addClass('b'); + selector.addClass('c'); + expect(selector.addClass('abc')).toEqual(selector); + expect(selector.removeClass('abc')).toEqual(selector); + expect(jqLite(a).hasClass('abc')).toEqual(false); + expect(jqLite(b).hasClass('abc')).toEqual(false); + expect(jqLite(a).hasClass('a')).toEqual(true); + expect(jqLite(a).hasClass('b')).toEqual(true); + expect(jqLite(a).hasClass('c')).toEqual(true); + }); + }); + + + describe('addClass', function() { + it('should allow adding of class', function() { + var selector = jqLite([a, b]); + expect(selector.addClass('abc')).toEqual(selector); + expect(jqLite(a).hasClass('abc')).toEqual(true); + expect(jqLite(b).hasClass('abc')).toEqual(true); + }); + + + it('should ignore falsy values', function() { + var jqA = jqLite(a); + expect(jqA[0].className).toBe(''); + + jqA.addClass(undefined); + expect(jqA[0].className).toBe(''); + + jqA.addClass(null); + expect(jqA[0].className).toBe(''); + + jqA.addClass(false); + expect(jqA[0].className).toBe(''); + }); + + + it('should allow multiple classes to be added in a single string', function() { + var jqA = jqLite(a); + expect(a.className).toBe(''); + + jqA.addClass('foo bar baz'); + expect(a.className).toBe('foo bar baz'); + }); + + + it('should not add duplicate classes', function() { + var jqA = jqLite(a); + expect(a.className).toBe(''); + + a.className = 'foo'; + jqA.addClass('foo'); + expect(a.className).toBe('foo'); + + jqA.addClass('bar foo baz'); + expect(a.className).toBe('foo bar baz'); + }); + }); + + + describe('toggleClass', function() { + it('should allow toggling of class', function() { + var selector = jqLite([a, b]); + expect(selector.toggleClass('abc')).toEqual(selector); + expect(jqLite(a).hasClass('abc')).toEqual(true); + expect(jqLite(b).hasClass('abc')).toEqual(true); + + expect(selector.toggleClass('abc')).toEqual(selector); + expect(jqLite(a).hasClass('abc')).toEqual(false); + expect(jqLite(b).hasClass('abc')).toEqual(false); + + expect(selector.toggleClass('abc'), true).toEqual(selector); + expect(jqLite(a).hasClass('abc')).toEqual(true); + expect(jqLite(b).hasClass('abc')).toEqual(true); + + expect(selector.toggleClass('abc'), false).toEqual(selector); + expect(jqLite(a).hasClass('abc')).toEqual(false); + expect(jqLite(b).hasClass('abc')).toEqual(false); + + }); + }); + + + describe('removeClass', function() { + it('should allow removal of class', function() { + var selector = jqLite([a, b]); + expect(selector.addClass('abc')).toEqual(selector); + expect(selector.removeClass('abc')).toEqual(selector); + expect(jqLite(a).hasClass('abc')).toEqual(false); + expect(jqLite(b).hasClass('abc')).toEqual(false); + }); + + + it('should correctly remove middle class', function() { + var element = jqLite('
'); + expect(element.hasClass('bar')).toBe(true); + + element.removeClass('bar'); + + expect(element.hasClass('foo')).toBe(true); + expect(element.hasClass('bar')).toBe(false); + expect(element.hasClass('baz')).toBe(true); + }); + + + it('should remove multiple classes specified as one string', function() { + var jqA = jqLite(a); + + a.className = 'foo bar baz'; + jqA.removeClass('foo baz noexistent'); + expect(a.className).toBe('bar'); + }); + }); + }); +});