Skip to content

Commit

Permalink
Return default values for undefined feature properties in fns
Browse files Browse the repository at this point in the history
  • Loading branch information
Lauren Budorick committed Jun 13, 2016
1 parent aae7914 commit b515496
Showing 1 changed file with 22 additions and 10 deletions.
32 changes: 22 additions & 10 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';

function createFunction(parameters, defaultType) {
function createFunction(parameters, defaultType, reference) {
var fun;

if (!isFunctionDefinition(parameters)) {
Expand Down Expand Up @@ -45,7 +45,7 @@ function createFunction(parameters, defaultType) {
featureFunctionStops.push([featureFunctions[z].zoom, createFunction(featureFunctions[z])]);
}
fun = function(zoom, feature) {
return evaluateExponentialFunction({ stops: featureFunctionStops, base: parameters.base }, zoom)(zoom, feature);
return evaluateExponentialFunction({ stops: featureFunctionStops, base: parameters.base }, zoom)(zoom, feature, reference);
};
fun.isFeatureConstant = false;
fun.isZoomConstant = false;
Expand All @@ -58,7 +58,7 @@ function createFunction(parameters, defaultType) {
fun.isZoomConstant = false;
} else {
fun = function(zoom, feature) {
return innerFun(parameters, feature[parameters.property]);
return innerFun(parameters, feature[parameters.property], reference);
};
fun.isFeatureConstant = false;
fun.isZoomConstant = true;
Expand All @@ -68,7 +68,11 @@ function createFunction(parameters, defaultType) {
return fun;
}

function evaluateCategoricalFunction(parameters, input) {
function evaluateCategoricalFunction(parameters, input, reference) {
if (input === undefined && reference) {
return reference.default;
}

for (var i = 0; i < parameters.stops.length; i++) {
if (input === parameters.stops[i][0]) {
return parameters.stops[i][1];
Expand All @@ -77,14 +81,22 @@ function evaluateCategoricalFunction(parameters, input) {
return parameters.stops[0][1];
}

function evaluateIntervalFunction(parameters, input) {
function evaluateIntervalFunction(parameters, input, reference) {
if (input === undefined && reference) {
return reference.default;
}

for (var i = 0; i < parameters.stops.length; i++) {
if (input < parameters.stops[i][0]) break;
}
return parameters.stops[Math.max(i - 1, 0)][1];
}

function evaluateExponentialFunction(parameters, input) {
function evaluateExponentialFunction(parameters, input, reference) {
if (input == undefined && reference) {
return reference.default;
}

var base = parameters.base !== undefined ? parameters.base : 1;

var i = 0;
Expand Down Expand Up @@ -156,10 +168,10 @@ function isFunctionDefinition(value) {

module.exports.isFunctionDefinition = isFunctionDefinition;

module.exports.interpolated = function(parameters) {
return createFunction(parameters, 'exponential');
module.exports.interpolated = function(parameters, reference) {
return createFunction(parameters, 'exponential', reference);
};

module.exports['piecewise-constant'] = function(parameters) {
return createFunction(parameters, 'interval');
module.exports['piecewise-constant'] = function(parameters, reference) {
return createFunction(parameters, 'interval', reference);
};

2 comments on commit b515496

@mourner
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we only use reference.default, should we pass the value directly instead of the reference object?

@lbud
Copy link

@lbud lbud commented on b515496 Aug 16, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can do that — would that make more sense? @mourner

Please sign in to comment.