Fixes #267 - Shorthand CSS class name cannot be combined with object/array class names

This commit is contained in:
Patrick Steele-Idem 2016-04-16 16:13:45 -06:00
parent 2b4310a03d
commit c6bb49d554
4 changed files with 31 additions and 21 deletions

View File

@ -35,14 +35,32 @@ function notEmpty(o) {
return true;
}
function classListArray(classList) {
var classNames = [];
for (var i=0, len=classList.length; i<len; i++) {
var cur = classList[i];
if (cur) {
classNames.push(cur);
function classListHelper(arg, classNames) {
var len;
if (arg) {
if (typeof arg === 'string') {
classNames.push(arg);
} else if (typeof (len = arg.length) === 'number') {
for (var i=0; i<len; i++) {
classListHelper(arg[i], classNames);
}
} else if (typeof arg === 'object') {
for (var name in arg) {
if (arg.hasOwnProperty(name)) {
var value = arg[name];
if (value) {
classNames.push(name);
}
}
}
}
}
}
function classList(classList) {
var classNames = [];
classListHelper(classList, classNames);
return classNames.join(' ');
}
@ -247,21 +265,8 @@ module.exports = {
if (typeof classNames === 'string') {
return attr(CLASS_ATTR, classNames, false);
} else if (isArray(classNames)) {
return attr(CLASS_ATTR, classListArray(classNames), false);
} else if (typeof classNames === 'object') {
var classList = [];
for (var name in classNames) {
if (classNames.hasOwnProperty(name)) {
var value = classNames[name];
if (value) {
classList.push(name);
}
}
}
return attr(CLASS_ATTR, classListArray(classList), false);
} else {
return '';
return attr(CLASS_ATTR, classList(classNames), false);
}
},
@ -361,6 +366,6 @@ module.exports = {
*
*/
cl: function() {
return classListArray(arguments);
return classList(arguments);
}
};

View File

@ -0,0 +1 @@
<div class="foo bar"></div>

View File

@ -0,0 +1 @@
div.foo class={bar: true, baz: false}

View File

@ -0,0 +1,3 @@
exports.templateData = {
name: 'Marko'
};