47 lines
1.4 KiB
JavaScript
47 lines
1.4 KiB
JavaScript
import prefixProperty from './utils/prefixProperty';
|
|
import prefixValue from './utils/prefixValue';
|
|
|
|
import addNewValuesOnly from './utils/addNewValuesOnly';
|
|
import isObject from './utils/isObject';
|
|
|
|
export default function createPrefixer(_ref) {
|
|
var prefixMap = _ref.prefixMap,
|
|
plugins = _ref.plugins;
|
|
|
|
return function prefix(style) {
|
|
for (var property in style) {
|
|
var value = style[property];
|
|
|
|
// handle nested objects
|
|
if (isObject(value)) {
|
|
style[property] = prefix(value);
|
|
// handle array values
|
|
} else if (Array.isArray(value)) {
|
|
var combinedValue = [];
|
|
|
|
for (var i = 0, len = value.length; i < len; ++i) {
|
|
var processedValue = prefixValue(plugins, property, value[i], style, prefixMap);
|
|
addNewValuesOnly(combinedValue, processedValue || value[i]);
|
|
}
|
|
|
|
// only modify the value if it was touched
|
|
// by any plugin to prevent unnecessary mutations
|
|
if (combinedValue.length > 0) {
|
|
style[property] = combinedValue;
|
|
}
|
|
} else {
|
|
var _processedValue = prefixValue(plugins, property, value, style, prefixMap);
|
|
|
|
// only modify the value if it was touched
|
|
// by any plugin to prevent unnecessary mutations
|
|
if (_processedValue) {
|
|
style[property] = _processedValue;
|
|
}
|
|
|
|
style = prefixProperty(prefixMap, property, style);
|
|
}
|
|
}
|
|
|
|
return style;
|
|
};
|
|
} |