Skip to content

Instantly share code, notes, and snippets.

@alubbe
Created August 6, 2015 21:54
Show Gist options
  • Select an option

  • Save alubbe/165490b2e2bdb49b3365 to your computer and use it in GitHub Desktop.

Select an option

Save alubbe/165490b2e2bdb49b3365 to your computer and use it in GitHub Desktop.
function jade_escape(str){return str}
function jade_classes_old(val, escaping) {
if (Array.isArray(val) && Array.isArray(escaping)) {
return jade_classes_old(val.map(jade_classes_old).map(function (cls, i) {
return escaping[i] ? jade_escape(cls) : cls;
}));
}
return (Array.isArray(val) ? val.map(jade_classes_old) :
(val && typeof val === 'object') ? Object.keys(val).filter(function (key) { return val[key]; }) :
[val]).filter(Boolean).join(' ');
}
function jade_classes_new(val, escaping) {
if (Array.isArray(val)) {
if (Array.isArray(escaping)) {
return jade_classes_new(val.map(jade_classes_new).map(function (cls, i) {
return escaping[i] ? jade_escape(cls) : cls;
}));
}
return val.map(jade_classes_new).filter(Boolean).join(' ');
} else if (val && typeof val === 'object') {
return Object.keys(val).filter(function (key) {
return val[key];
}).filter(Boolean).join(' ');
} else {
return val || '';
}
}
function classesArray(val, escaping) {
if (Array.isArray(escaping)) {
return jade_classes_newnew(val.map(jade_classes_newnew).map(function (cls, i) {
return escaping[i] ? jade_escape(cls) : cls;
}));
}
return val.map(jade_classes_newnew).filter(Boolean).join(' ');
}
function classesObject(val) {
return Object.keys(val).filter(function (key) {
return val[key];
}).filter(Boolean).join(' ');
}
function jade_classes_newnew(val, escaping) {
if (Array.isArray(val)) {
return classesArray(val, escaping);
} else if (val && typeof val === 'object') {
return classesObject(val);
} else {
return val || '';
}
}
function classesArray2(val, escaping) {
var classString = '', className;
for (var i = 0; i < val.length; i++) {
className = jade_classes_newnew2(val[i]);
className = (Array.isArray(escaping) && escaping[i] ? jade_escape(className) : className);
padding = className !== '' && classString.length > 0 ? ' ' : '';
classString = classString + padding + className;
}
return classString;
}
function classesObject2(val) {
var classString = '', padding;
for (var key in val) {
if (val[key]) {
padding = key !== '' && classString.length > 0 ? ' ' : '';
classString = classString + padding + key;
}
}
return classString;
}
function jade_classes_newnew2(val, escaping) {
if (Array.isArray(val)) {
return classesArray2(val, escaping);
} else if (val && typeof val === 'object') {
return classesObject2(val);
} else {
return val || '';
}
}
new require('benchmark').Suite()
.add('jade_classes_old', function() {
jade_classes_old(['foo', 'bar']);
jade_classes_old([['foo', 'bar'], ['baz', 'bash']]);
jade_classes_old([['foo', 'bar'], {baz: true, bash: false}])
jade_classes_old([['fo<o', 'bar'], {'ba>z': true, bash: false}], [true, false])
})
.add('jade_classes_new', function() {
jade_classes_new(['foo', 'bar']);
jade_classes_new([['foo', 'bar'], ['baz', 'bash']]);
jade_classes_new([['foo', 'bar'], {baz: true, bash: false}])
jade_classes_new([['fo<o', 'bar'], {'ba>z': true, bash: false}], [true, false])
})
.add('jade_classes_newnew', function() {
jade_classes_newnew(['foo', 'bar']);
jade_classes_newnew([['foo', 'bar'], ['baz', 'bash']]);
jade_classes_newnew([['foo', 'bar'], {baz: true, bash: false}])
jade_classes_newnew([['fo<o', 'bar'], {'ba>z': true, bash: false}], [true, false])
})
.add('jade_classes_newnew2', function() {
jade_classes_newnew2(['foo', 'bar']);
jade_classes_newnew2([['foo', 'bar'], ['baz', 'bash']]);
jade_classes_newnew2([['foo', 'bar'], {baz: true, bash: false}])
jade_classes_newnew2([['fo<o', 'bar'], {'ba>z': true, bash: false}], [true, false])
})
.on('cycle', function(event) {
console.log(String(event.target));
})
.on('complete', function() {
console.log('Fastest is ' + this.filter('fastest').pluck('name'));
})
.run();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment