diff options
| -rw-r--r-- | src/jqLite.js | 11 | ||||
| -rw-r--r-- | test/jqLiteSpec.js | 51 |
2 files changed, 59 insertions, 3 deletions
diff --git a/src/jqLite.js b/src/jqLite.js index b820f5e7..809ede03 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -840,10 +840,15 @@ forEach({ removeClass: jqLiteRemoveClass, toggleClass: function(element, selector, condition) { - if (isUndefined(condition)) { - condition = !jqLiteHasClass(element, selector); + if (selector) { + forEach(selector.split(' '), function(className){ + var classCondition = condition; + if (isUndefined(classCondition)) { + classCondition = !jqLiteHasClass(element, className); + } + (classCondition ? jqLiteAddClass : jqLiteRemoveClass)(element, className); + }); } - (condition ? jqLiteAddClass : jqLiteRemoveClass)(element, selector); }, parent: function(element) { diff --git a/test/jqLiteSpec.js b/test/jqLiteSpec.js index 056c6145..482c05f4 100644 --- a/test/jqLiteSpec.js +++ b/test/jqLiteSpec.js @@ -666,6 +666,57 @@ describe('jqLite', function() { expect(jqLite(b).hasClass('abc')).toEqual(false); }); + + it('should allow toggling multiple classes without a condition', function () { + var selector = jqLite([a, b]); + expect(selector.toggleClass('abc cde')).toBe(selector); + expect(jqLite(a).hasClass('abc')).toBe(true); + expect(jqLite(a).hasClass('cde')).toBe(true); + expect(jqLite(b).hasClass('abc')).toBe(true); + expect(jqLite(b).hasClass('cde')).toBe(true); + + expect(selector.toggleClass('abc cde')).toBe(selector); + expect(jqLite(a).hasClass('abc')).toBe(false); + expect(jqLite(a).hasClass('cde')).toBe(false); + expect(jqLite(b).hasClass('abc')).toBe(false); + expect(jqLite(b).hasClass('cde')).toBe(false); + + expect(selector.toggleClass('abc')).toBe(selector); + expect(selector.toggleClass('abc cde')).toBe(selector); + expect(jqLite(a).hasClass('abc')).toBe(false); + expect(jqLite(a).hasClass('cde')).toBe(true); + expect(jqLite(b).hasClass('abc')).toBe(false); + expect(jqLite(b).hasClass('cde')).toBe(true); + + expect(selector.toggleClass('abc cde')).toBe(selector); + expect(jqLite(a).hasClass('abc')).toBe(true); + expect(jqLite(a).hasClass('cde')).toBe(false); + expect(jqLite(b).hasClass('abc')).toBe(true); + expect(jqLite(b).hasClass('cde')).toBe(false); + }); + + it('should allow toggling multiple classes with a condition', function () { + var selector = jqLite([a, b]); + selector.addClass('abc'); + expect(selector.toggleClass('abc cde', true)).toBe(selector); + expect(jqLite(a).hasClass('abc')).toBe(true); + expect(jqLite(a).hasClass('cde')).toBe(true); + expect(jqLite(b).hasClass('abc')).toBe(true); + expect(jqLite(b).hasClass('cde')).toBe(true); + + selector.removeClass('abc'); + expect(selector.toggleClass('abc cde', false)).toBe(selector); + expect(jqLite(a).hasClass('abc')).toBe(false); + expect(jqLite(a).hasClass('cde')).toBe(false); + expect(jqLite(b).hasClass('abc')).toBe(false); + expect(jqLite(b).hasClass('cde')).toBe(false); + }); + + it('should not break for null / undefined selectors', function () { + var selector = jqLite([a, b]); + expect(selector.toggleClass(null)).toBe(selector); + expect(selector.toggleClass(undefined)).toBe(selector); + }); }); |
