More Related Content Similar to "CSScomb.js — вторая жизнь" — Михаил Трошев, Яндекс — доклад на MoscowJS 12 (20) "CSScomb.js — вторая жизнь" — Михаил Трошев, Яндекс — доклад на MoscowJS 1212. 12
Gonzales AST
color: rgb(255,0,0)
"
['declaration',
['property',
['ident', 'color']],
['propertyDelim'],
['value',
['s', ' '],
['function',
['ident', 'rgb'],
['functionBody',
['number', '255'],
['operator', ','],
['number', '0'],
['operator', ','],
['number', '0']]]]]
13. 13
Преобразование узлов
processTree: function(tree) {
this._handlers.forEach(function(handler) {
this.processNode(['tree', tree], 0, handler);
}, this);
return tree;
},
processNode: function(node, level, handler) {
node.forEach(function(node) {
var nodeType = node.shift();
handler.process(nodeType, node, level);
node.unshift(nodeType);
this.processNode(node, level, handler);
}, this);
}
14. 14
Обработчик
process: function(nodeType, node) {
if (nodeType === 'string') {
if (node[0][0] === '"' && this._value === 'single’)
node[0] = node[0]
.replace(/"/g, '"')
.replace(/([^])'/g, '$1'')
.replace(/^"|"$/g, ''');
else if (node[0][0] === ''' && this._value === 'double’)
node[0] = node[0]
.replace(/'/g, ''')
.replace(/([^])"/g, '$1"')
.replace(/^'|'$/g, '"');
}
}
15. 15
На сегодняшний день
— консольный и модульный режимы работы
— lint-режим
— поддержка LESS и SASS
— сортировка + 24 модуля
— автоматическая генерация конфига (!!!)
— плагин для grunt
— плагины для IDE
TODO:
— поддержка Stylus
22. 22
Бонус-трек: оптимизация
170585 search.sort.css
165145 search.css
143685 search.csso.css
143685 search.csso.sort.css
142842 search.clean.sort.css
142744 search.clean.css
29315 search.sort.css.gzip
29117 search.css.gzip
27784 search.csso.css.gzip
27663 search.clean.css.gzip
27648 search.sort.css.gz
27619 search.csso.sort.css.gzip
27532 search.clean.sort.css.gzip
27495 search.css.gz
26357 search.csso.css.gz
26319 search.clean.css.gz
26208 search.csso.sort.css.gz
26099 search.clean.sort.css.gz
*.gz — zopfli --i15
*.gzip — gzip -7
*.sort.* — после запуска csscomb
*.csso.* — после csso
*.clean.* — после clean-css
Победитель:
clean-css + csscomb + zopfli