Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
81 commits
Select commit Hold shift + click to select a range
024f05f
add basic cornerradius for bar charts
emilykl Oct 18, 2023
31c3ac2
update plot-schema
emilykl Oct 18, 2023
b0c6258
add layout.barcornerradius property
emilykl Oct 31, 2023
d71fe49
handle negative bars
emilykl Nov 2, 2023
bb78c78
formatting
emilykl Nov 2, 2023
5dfd686
round corners of legend icon if bar is rounded
emilykl Nov 8, 2023
64912d4
change the way layout.barcornerradius is handled
emilykl Nov 8, 2023
cc1e6ff
rename mock
emilykl Nov 8, 2023
dc2c54c
handle reversed x and y axes
emilykl Nov 9, 2023
3b725fa
cleanup and simplify bar path logic for rounded corners
emilykl Nov 22, 2023
870d4c9
don't round corners of bars which are not top of stack
emilykl Nov 22, 2023
aa8ba1e
fix outmost bar logic
emilykl Nov 27, 2023
5845e0e
extend rounding to lower bars
emilykl Dec 15, 2023
85f47c6
remove 0 default for bar.marker.cornerradius
emilykl Dec 30, 2023
578712a
only set helper values for rounded corners if needed
emilykl Dec 30, 2023
8f77cde
better pct string handling
emilykl Dec 30, 2023
45689ae
remove cornerradius attr from barpolar and funnel
emilykl Dec 30, 2023
137e185
fix rounding for grouped barmode
emilykl Dec 30, 2023
795235b
handle stacked traces with different cornerradius
emilykl Jan 2, 2024
dd717b6
handle label text position inside bars
emilykl Jan 5, 2024
35e0c8f
fix function name
emilykl Jan 6, 2024
7aa7496
test label position for cornerradius in mock
emilykl Jan 6, 2024
250bf31
adjust cornerradius standardization for stacked bars
emilykl Jan 6, 2024
495d950
update plot-schema
emilykl Jan 6, 2024
be0ddff
don't coerce marker.cornerradius
emilykl Jan 6, 2024
819e8bf
add draftlog
emilykl Jan 6, 2024
ed69422
syntax
emilykl Jan 6, 2024
4a44291
syntax
emilykl Jan 6, 2024
65d3b55
add image baseline
emilykl Jan 6, 2024
e8cdde1
update draftlog
emilykl Jan 6, 2024
9c4227e
fix rounding for relative barmode
emilykl Jan 6, 2024
dabcaf0
fix NaN bug
emilykl Jan 6, 2024
701fd8c
fix bug with stacking in group mode
emilykl Jan 6, 2024
29589e8
coerce marker.cornerradius for histograms
emilykl Jan 8, 2024
d0b9a90
fix histogram2d
emilykl Jan 8, 2024
3e5a957
fix behavior for negative bars in stacked barmode
emilykl Jan 8, 2024
582ce13
fix behavior for negative bars in stacked barmode (2)
emilykl Jan 8, 2024
a238c87
Cast radius parameter to number
emilykl Jan 9, 2024
ac329f7
validate cornerradius value in supply defaults
emilykl Jan 9, 2024
8a607e6
export validateCornerradius
emilykl Jan 9, 2024
338b4e6
Change cornerradius editType to calc
emilykl Jan 9, 2024
60c918e
Change barcornerradius editType to calc
emilykl Jan 9, 2024
9dd0896
better handling of text placement on rounded horizontal bars
emilykl Jan 9, 2024
1628b5c
avoid using Math.sign
emilykl Jan 10, 2024
bfbd397
lint
emilykl Jan 10, 2024
71e4896
update plot-schema
emilykl Jan 10, 2024
4e794d0
bugfix
emilykl Jan 11, 2024
dedce2a
bugfix
emilykl Jan 11, 2024
b137b25
store cornerradius in t instead of trace; general cleanup
emilykl Jan 11, 2024
fdd6d03
small cleanup and add comments
emilykl Jan 17, 2024
8fcc3a5
Merge branch 'master' into rounded-bars
emilykl Jan 17, 2024
71b53c3
update baseline
emilykl Jan 17, 2024
90cf5c3
add text to zz-bar-rounded-corners
archmoj Jan 19, 2024
510c66b
rounded-bar display_height_zero line_width
archmoj Jan 19, 2024
5599ea6
round bar_gantt-chart
archmoj Jan 19, 2024
8dffbbe
round hist_cum_stacked
archmoj Jan 19, 2024
c165f6a
round histogram_colorscale
archmoj Jan 19, 2024
ee2451a
round histogram-offsetgroups
archmoj Jan 19, 2024
256a87e
round period_positioning9
archmoj Jan 19, 2024
b122521
round bar_stackto100_negative
archmoj Jan 19, 2024
015b881
round bar_attrs_relative
archmoj Jan 19, 2024
8b57fb5
round worldcup
archmoj Jan 19, 2024
ec44d87
bugfix
emilykl Jan 19, 2024
2913c6e
text position DRAFT
emilykl Jan 24, 2024
9e3c249
update baselines
archmoj Jan 24, 2024
f986349
fix text padding for rounded bars
emilykl Jan 26, 2024
99352d0
update baselines
archmoj Jan 26, 2024
6f685c0
fix text scale and pad for rounded bars
emilykl Jan 26, 2024
f093ee7
fix text position for stacked rounded bars
emilykl Jan 30, 2024
e3cd5a5
simplify logic in cross_trace_calc
emilykl Jan 30, 2024
98356b4
update baselines
emilykl Jan 30, 2024
a2befea
fix variable declaration
emilykl Jan 30, 2024
781fbe2
remove lxFunc and lyFunc
emilykl Jan 31, 2024
97f0b0e
use absolute arcs for bar path
emilykl Feb 1, 2024
c52890c
simplify text placement logic
emilykl Feb 1, 2024
10e38f4
Update docstring
emilykl Feb 1, 2024
f7d4b4a
Update docstring
emilykl Feb 1, 2024
4335ba0
more permissive text inside/outside logic for rounded bars
emilykl Feb 1, 2024
e9043e9
Merge branch 'rounded-bars' of https://github.com/plotly/plotly.js in…
emilykl Feb 1, 2024
4624132
updated baselines
archmoj Feb 1, 2024
8c45d15
update schema
archmoj Feb 1, 2024
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
validate cornerradius value in supply defaults
  • Loading branch information
emilykl committed Jan 9, 2024
commit ac329f723d1b56b7401899beddc86306a3ae15db
32 changes: 29 additions & 3 deletions src/traces/bar/defaults.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
'use strict';

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

var Lib = require('../../lib');
var Color = require('../../components/color');
var Registry = require('../../registry');
Expand Down Expand Up @@ -69,16 +71,40 @@ function crossTraceDefaults(fullData, fullLayout) {

if(traceOut.type === 'bar') {
traceIn = traceOut._input;
// This needs to happen here rather than in handleStyleDefaults() because
// it needs to happen after `layout.barcornerradius` has been coerced
coerce('marker.cornerradius', fullLayout.barcornerradius);
// `marker.cornerradius` needs to be coerced here rather than in handleStyleDefaults()
// because it needs to happen after `layout.barcornerradius` has been coerced
var r = coerce('marker.cornerradius', fullLayout.barcornerradius);
traceOut.marker.cornerradius = validateCornerradius(r);

if(fullLayout.barmode === 'group') {
handleGroupingDefaults(traceIn, traceOut, fullLayout, coerce);
}
}
}
}

// Returns a value equivalent to the given cornerradius value, if valid;
// otherwise returns`undefined`.
// Valid cornerradius values must be either:
// - a numeric value (string or number) >= 0, or
// - a string consisting of a number >= 0 followed by a % sign
// If the given cornerradius value is a numeric string, it will be converted
// to a number.
function validateCornerradius(r) {
var validR = false;
if(isNumeric(r)) {
r = +r;
if(r >= 0) validR = true;
} else if(typeof r === 'string' && r.slice(-1) === '%') {
r = +r.slice(0, -1);
if(r >= 0) {
r += '%';
validR = true;
}
}
return validR ? r : undefined;
}

function handleText(traceIn, traceOut, layout, coerce, textposition, opts) {
opts = opts || {};
var moduleHasSelected = !(opts.moduleHasSelected === false);
Expand Down
2 changes: 1 addition & 1 deletion src/traces/bar/plot.js
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ function plot(gd, plotinfo, cdModule, traceLayer, opts, makeOnCompleteCallback)
} else if(isNumeric(radiusParam)) {
// If radius is already given as a number of pixels, use the given value
rPx = +radiusParam;
} else if(typeof radiusParam === 'string' && radiusParam.slice(-1) === '%') {
} else if(typeof radiusParam === 'string') {
Copy link
Contributor

Choose a reason for hiding this comment

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

We shouldn't get into this if statement, if the value is presented in a string but not having a percentage at the end.
Also we may replace parseFloat by unary plus operator to get NaN when the remaining string is not a number.
Something like:

                } else if(typeof radiusParam === 'string' && radiusParam.slice(-1) === '%') {
                    // If radius is given as a percentage string, convert to number of pixels
                    var rPercent = Math.min(50, +radiusParam.slice(0, -1));

Copy link
Collaborator

Choose a reason for hiding this comment

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

Better to use isNumeric to find if the value is a number, it's our standard method of finding either number type or numeric string:

if(!radiusParam) {
    return 0;
else if(isNumeric(radiusParam)) {
    rPx = +radiusParam;
else {
    var rPercent = ...
}

Copy link
Contributor Author

Choose a reason for hiding this comment

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

If cornerradius value is invalid (e.g. string not ending in %) should we log an error message or just ignore?

Copy link
Collaborator

Choose a reason for hiding this comment

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

Ignore if it’s invalid. Plotlyjs has a separate validation utility that will alert you if any attributes you provide were not accepted, but if you don’t explicitly call that our convention is to silently ignore invalid items.

// Otherwise, if % string, convert to number of pixels
var rPercent = Math.min(50, +radiusParam.slice(0, -1));
rPx = barWidth * (rPercent / 100);
Expand Down
5 changes: 4 additions & 1 deletion src/traces/histogram/cross_trace_defaults.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ var axisIds = require('../../plots/cartesian/axis_ids');

var traceIs = require('../../registry').traceIs;
var handleGroupingDefaults = require('../scatter/grouping_defaults');
var validateCornerradius = require('../bar/defaults').validateCornerradius;

var nestedProperty = Lib.nestedProperty;
var getAxisGroup = require('../../plots/cartesian/constraints').getAxisGroup;
Expand Down Expand Up @@ -100,8 +101,10 @@ module.exports = function crossTraceDefaults(fullData, fullLayout) {
// https://github.com/plotly/plotly.js/issues/749
delete traceOut._xautoBinFinished;
delete traceOut._yautoBinFinished;

if(traceOut.type === 'histogram') {
coerce('marker.cornerradius', fullLayout.barcornerradius);
var r = coerce('marker.cornerradius', fullLayout.barcornerradius);
traceOut.marker.cornerradius = validateCornerradius(r);
}

// N.B. need to coerce *alignmentgroup* before *bingroup*, as traces
Expand Down