Skip to content
This repository has been archived by the owner on Mar 12, 2018. It is now read-only.

Commit

Permalink
classes: Dedupe all classes
Browse files Browse the repository at this point in the history
This causes a slow down especially on cases with simple string-only
arrays, but this is the best I can do. Optimization welcome.
  • Loading branch information
TimothyGu committed Jan 14, 2016
1 parent b65daa6 commit 010d986
Showing 1 changed file with 31 additions and 23 deletions.
54 changes: 31 additions & 23 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,35 +58,43 @@ function pug_merge(a, b) {
* @return {String}
*/
exports.classes = pug_classes;
function pug_classes_array(val, escaping) {
var classString = '', className, padding = '', escapeEnabled = Array.isArray(escaping);
function pug_classes_array(val, escaping, out) {
var escapeAlways = escaping === true;
var escapeEnabled = Array.isArray(escaping);
for (var i = 0; i < val.length; i++) {
className = pug_classes(val[i]);
if (!className) continue;
escapeEnabled && escaping[i] && (className = pug_escape(className));
classString = classString + padding + className;
padding = ' ';
}
return classString;
}
function pug_classes_object(val) {
var classString = '', padding = '';
for (var key in val) {
if (key && val[key] && pug_has_own_property.call(val, key)) {
classString = classString + padding + key;
padding = ' ';
var escape = escapeAlways || escapeEnabled && escaping[i];
var cur = val[i];
if (Array.isArray(cur)) {
pug_classes_array(cur, escape, out);
} else if (cur && typeof cur === 'object') {
for (var key in cur) {
if (cur[key] && pug_has_own_property.call(cur, key)) {
out[escape ? pug_escape(key) : key] = true;
}
}
} else if (cur) {
out[escape ? pug_escape(cur) : cur] = true;
}
}
return classString;
return out;
}
function pug_classes(val, escaping) {
if (Array.isArray(val)) {
return pug_classes_array(val, escaping);
} else if (val && typeof val === 'object') {
return pug_classes_object(val);
} else {
return val || '';
if (typeof val === 'string') return val;
else if (Array.isArray(val)) {
var out = {};
pug_classes_array(val, escaping, out);
val = out;
}
if (val && typeof val === 'object') {
var classString = '', padding = '';
for (var key in val) {
if (val[key] && pug_has_own_property.call(val, key)) {
classString = classString + padding + key;
padding = ' ';
}
}
return classString;
} else return '';
}

/**
Expand Down

0 comments on commit 010d986

Please sign in to comment.