|
|
- // 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;
|