Skip to content

Commit

Permalink
Clean up {Bucket,StyleLayer}.create
Browse files Browse the repository at this point in the history
* Replace switch with object lookup
* Avoid delayed requires
* Eliminate the need for eslint-disable-line
  • Loading branch information
jfirebaugh authored and mourner committed Oct 20, 2016
1 parent 99363f5 commit d9e6f5a
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 43 deletions.
47 changes: 23 additions & 24 deletions js/data/bucket.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,30 +62,6 @@ class Bucket {
}
}

/**
* Instantiate the appropriate subclass of `Bucket` for `options`.
* @param options See `Bucket` constructor options
* @returns {Bucket}
*/
static create(options) {
const Classes = {
fill: require('./bucket/fill_bucket'),
fillextrusion: require('./bucket/fill_extrusion_bucket'),
line: require('./bucket/line_bucket'),
circle: require('./bucket/circle_bucket'),
symbol: require('./bucket/symbol_bucket')
};

let type = options.layer.type;
if (type === 'fill' && (!options.layer.isPaintValueFeatureConstant('fill-extrude-height') ||
!options.layer.isPaintValueZoomConstant('fill-extrude-height') ||
options.layer.getPaintValue('fill-extrude-height') !== 0)) {
type = 'fillextrusion';
}

return new Classes[type](options);
}

populate(features) {
this.createArrays();
this.recalculateStyleLayers();
Expand Down Expand Up @@ -289,6 +265,29 @@ Bucket.ElementArrayType = function (components) {

module.exports = Bucket;

const subclasses = {
fill: require('./bucket/fill_bucket'),
fillextrusion: require('./bucket/fill_extrusion_bucket'),
line: require('./bucket/line_bucket'),
circle: require('./bucket/circle_bucket'),
symbol: require('./bucket/symbol_bucket')
};

/**
* Instantiate the appropriate subclass of `Bucket` for `options`.
* @param options See `Bucket` constructor options
* @returns {Bucket}
*/
Bucket.create = function(options) {
let type = options.layer.type;
if (type === 'fill' && (!options.layer.isPaintValueFeatureConstant('fill-extrude-height') ||
!options.layer.isPaintValueZoomConstant('fill-extrude-height') ||
options.layer.getPaintValue('fill-extrude-height') !== 0)) {
type = 'fillextrusion';
}
return new subclasses[type](options);
};

function createPaintAttributes(bucket) {
const attributes = {};
for (const interfaceName in bucket.programInterfaces) {
Expand Down
29 changes: 10 additions & 19 deletions js/style/style_layer.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,28 +10,12 @@ const Evented = require('../util/evented');

const TRANSITION_SUFFIX = '-transition';

// false-positive prefer-const eslint violation here; we intentionally assign once but later
let FillStyleLayer, LineStyleLayer, SymbolStyleLayer; // eslint-disable-line

class StyleLayer extends Evented {
constructor(layer, refLayer) {
super();
this.set(layer, refLayer);
}

static create(layer, refLayer) {
switch ((refLayer || layer).type) {
case 'fill':
return new FillStyleLayer(layer, refLayer);
case 'line':
return new LineStyleLayer(layer, refLayer);
case 'symbol':
return new SymbolStyleLayer(layer, refLayer);
default:
return new StyleLayer(layer, refLayer);
}
}

set(layer, refLayer) {
this.id = layer.id;
this.ref = layer.ref;
Expand Down Expand Up @@ -347,9 +331,16 @@ class StyleLayer extends Evented {

module.exports = StyleLayer;

FillStyleLayer = require('./style_layer/fill_style_layer');
LineStyleLayer = require('./style_layer/line_style_layer');
SymbolStyleLayer = require('./style_layer/symbol_style_layer');
const subclasses = {
'fill': require('./style_layer/fill_style_layer'),
'line': require('./style_layer/line_style_layer'),
'symbol': require('./style_layer/symbol_style_layer')
};

StyleLayer.create = function(layer, refLayer) {
const LayerClass = subclasses[(refLayer || layer).type] || StyleLayer;
return new LayerClass(layer, refLayer);
};

function getDeclarationValue(declaration) {
return declaration.value;
Expand Down

0 comments on commit d9e6f5a

Please sign in to comment.