You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// This extractor is used in level 2 optimizations
// IMPORTANT: Mind Token class and this code is not related!
// Properties will be tokenized in one step, see #429
var Token = require('../../tokenizer/token'); var serializeRules = require('../../writer/one-time').rules; var serializeValue = require('../../writer/one-time').value;
function extractProperties(token) { var properties = []; var inSpecificSelector; var property; var name; var value; var i, l;
if (token[0] == Token.RULE) { inSpecificSelector = !/[\.\+>~]/.test(serializeRules(token[1]));
for (i = 0, l = token[2].length; i < l; i++) { property = token[2][i];
if (property[0] != Token.PROPERTY) continue;
name = property[1][1]; if (name.length === 0) continue;
if (name.indexOf('--') === 0) continue;
value = serializeValue(property, i);
properties.push([ name, value, findNameRoot(name), token[2][i], name + ':' + value, token[1], inSpecificSelector ]); } } else if (token[0] == Token.NESTED_BLOCK) { for (i = 0, l = token[2].length; i < l; i++) { properties = properties.concat(extractProperties(token[2][i])); } }
return properties; }
function findNameRoot(name) { if (name == 'list-style') return name; if (name.indexOf('-radius') > 0) return 'border-radius'; if (name == 'border-collapse' || name == 'border-spacing' || name == 'border-image') return name; if (name.indexOf('border-') === 0 && /^border\-\w+\-\w+$/.test(name)) return name.match(/border\-\w+/)[0]; if (name.indexOf('border-') === 0 && /^border\-\w+$/.test(name)) return 'border'; if (name.indexOf('text-') === 0) return name; if (name == '-chrome-') return name;
return name.replace(/^\-\w+\-/, '').match(/([a-zA-Z]+)/)[0].toLowerCase(); }
module.exports = extractProperties;
|