package.src.style-spec.declass.js Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of mapbox-gl Show documentation
Show all versions of mapbox-gl Show documentation
A WebGL interactive maps library
The newest version!
import extend from './util/extend';
export default declassStyle;
/**
* Returns a new style with the given 'paint classes' merged into each layer's
* main `paint` definiton, and with all `paint.*` properties removed.
*
* @private
* @param {Object} style A style JSON object.
* @param {Array} classes An array of paint classes to apply, in order.
*
* @example
* var declass = require('mapbox-gl-style-spec/lib/declass')
* var baseStyle = { ... style with a 'paint.night' property in some layers ... }
* var nightStyle = declass(baseStyle, ['night'])
* // nightStyle now has each layer's `paint.night` properties merged in to the
* // main `paint` property.
*/
function declassStyle(style, classes) {
return extend({}, style, {
layers: style.layers.map((layer) => {
const result = classes.reduce(declassLayer, layer);
// strip away all `paint.CLASS` definitions
for (const key in result) {
if (/paint\..*/.test(key)) {
delete result[key];
}
}
return result;
})
});
}
function declassLayer(layer, klass) {
return extend({}, layer, {
paint: extend({}, layer.paint, layer[`paint.${klass}`])
});
}