flst / upstream /emscripten /node_modules /clean-css /lib /optimizer /level-2 /properties /populate-components.js
| var configuration = require('../../configuration'); | |
| var InvalidPropertyError = require('../../invalid-property-error'); | |
| function populateComponents(properties, validator, warnings) { | |
| var component; | |
| var j, m; | |
| for (var i = properties.length - 1; i >= 0; i--) { | |
| var property = properties[i]; | |
| var descriptor = configuration[property.name]; | |
| if (!property.dynamic && descriptor && descriptor.shorthand) { | |
| if (onlyValueIsVariable(property, validator) || moreThanOneValueIsVariable(property, validator)) { | |
| property.optimizable = false; | |
| continue; | |
| } | |
| property.shorthand = true; | |
| property.dirty = true; | |
| try { | |
| property.components = descriptor.breakUp(property, configuration, validator); | |
| if (descriptor.shorthandComponents) { | |
| for (j = 0, m = property.components.length; j < m; j++) { | |
| component = property.components[j]; | |
| component.components = configuration[component.name].breakUp(component, configuration, validator); | |
| } | |
| } | |
| } catch (e) { | |
| if (e instanceof InvalidPropertyError) { | |
| property.components = []; // this will set property.unused to true below | |
| warnings.push(e.message); | |
| } else { | |
| throw e; | |
| } | |
| } | |
| if (property.components.length > 0) { | |
| property.multiplex = property.components[0].multiplex; | |
| } else { | |
| property.unused = true; | |
| } | |
| } | |
| } | |
| } | |
| function onlyValueIsVariable(property, validator) { | |
| return property.value.length == 1 && validator.isVariable(property.value[0][1]); | |
| } | |
| function moreThanOneValueIsVariable(property, validator) { | |
| return property.value.length > 1 | |
| && property.value.filter( | |
| function(value) { | |
| return validator.isVariable(value[1]); | |
| } | |
| ).length > 1; | |
| } | |
| module.exports = populateComponents; | |