8000 Implement bar labels (issue 34) by n-riesco · Pull Request #1159 · plotly/plotly.js · GitHub
[go: up one dir, main page]

Skip to content

Implement bar labels (issue 34) #1159

8000
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
bar: do not coerce elements of an array attribute
  • Loading branch information
n-riesco committed Nov 17, 2016
commit 4a45032686ee4228c9bfbfb12840bac644710212
136 changes: 6 additions & 130 deletions src/traces/bar/defaults.js
View file Open in desktop
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,6 @@

'use strict';

var isNumeric = require('fast-isnumeric');
var tinycolor = require('tinycolor2');

var Lib = require('../../lib');
var Color = require('../../components/color');

Expand All @@ -26,124 +23,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
return Lib.coerce(traceIn, traceOut, attributes, attr, dflt);
}

function coerceEnumerated(attributeDefinition, value, defaultValue) {
if(attributeDefinition.coerceNumber) value = +value;

if(attributeDefinition.values.indexOf(value) !== -1) return value;

return (defaultValue !== undefined) ?
defaultValue :
attributeDefinition.dflt;
}

function coerceString(attributeDefinition, value, defaultValue) {
if(typeof value === 'string') {
if(value || !attributeDefinition.noBlank) return value;
}
else if(typeof value === 'number') {
if(!attributeDefinition.strict) return String(value);
}

return (defaultValue !== undefined) ?
defaultValue :
attributeDefinition.dflt;
}

function coerceNumber(attributeDefinition, value, defaultValue) {
if(isNumeric(value)) {
value = +value;

var min = attributeDefinition.min,
max = attributeDefinition.max,
isOutOfBounds = (min !== undefined && value < min) ||
(max !== undefined && value > max);

if(!isOutOfBounds) return value;
}

return (defaultValue !== undefined) ?
defaultValue :
attributeDefinition.dflt;
}

function coerceColor(attributeDefinition, value, defaultValue) {
if(tinycolor(value).isValid()) return value;

return (defaultValue !== undefined) ?
defaultValue :
attributeDefinition.dflt;
}

function coerceFont(attributeDefinition, value, defaultValue) {
value = value || {};
defaultValue = defaultValue || {};

return {
family: coerceString(
attributeDefinition.family, value.family, defaultValue.family),
size: coerceNumber(
attributeDefinition.size, value.size, defaultValue.size),
color: coerceColor(
attributeDefinition.color, value.color, defaultValue.color)
};
}

function coerceArray(attribute, coerceFunction, defaultValue, defaultValue2) {
var attributeDefinition = attributes[attribute],
arrayOk = attributeDefinition.arrayOk,
inValue = traceIn[attribute],
inValueIsArray = Array.isArray(inValue),
defaultValueIsArray = Array.isArray(defaultValue),
outValue,
i;

// Case: inValue and defaultValue not treated as arrays
if(!arrayOk || (!inValueIsArray && !defaultValueIsArray)) {
outValue = coerceFunction(
attributeDefinition, inValue, defaultValue);
traceOut[attribute] = outValue;
return outValue;
}

// Coerce into an array
outValue = [];

// Case: defaultValue is an array and inValue isn't
if(!inValueIsArray) {
for(i = 0; i < defaultValue.length; i++) {
outValue.push(
coerceFunction(
attributeDefinition, inValue, defaultValue[i]));
}
}

// Case: inValue is an array and defaultValue isn't
else if(!defaultValueIsArray) {
for(i = 0; i < inValue.length; i++) {
outValue.push(
coerceFunction(
attributeDefinition, inValue[i], defaultValue));
}
}

// Case: inValue and defaultValue are both arrays
else {
for(i = 0; i < defaultValue.length; i++) {
outValue.push(
coerceFunction(
attributeDefinition, inValue[i], defaultValue[i]));
}
for(; i < inValue.length; i++) {
outValue.push(
coerceFunction(
attributeDefinition, inValue[i], defaultValue2));
}
}

traceOut[attribute] = outValue;

return outValue;
}
var coerceFont = Lib.coerceFont;

var len = handleXYDefaults(traceIn, traceOut, coerce);
if(!len) {
Expand All @@ -156,21 +36,17 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
coerce('offset');
coerce('width');

coerceArray('text', coerceString);
coerce('text');

var textPosition = coerceArray('textposition', coerceEnumerated);
var textPosition = coerce('textposition');

var hasBoth = Array.isArray(textPosition) || textPosition === 'auto',
hasInside = hasBoth || textPosition === 'inside',
hasOutside = hasBoth || textPosition === 'outside';
if(hasInside || hasOutside) {
var textFont = coerceArray('textfont', coerceFont, layout.font);
if(hasInside) {
coerceArray('insidetextfont', coerceFont, textFont, layout.font);
}
if(hasOutside) {
coerceArray('outsidetextfont', coerceFont, textFont, layout.font);
}
var textFont = coerceFont(coerce, 'textfont', layout.font);
if(hasInside) coerceFont(coerce, 'insidetextfont', textFont);
if(hasOutside) coerceFont(coerce, 'outsidetextfont', textFont);
}

handleStyleDefaults(traceIn, traceOut, coerce, defaultColor, layout);
Expand Down
0