Skip to content

Commit

Permalink
Put bar label outside or inside if overflow.
Browse files Browse the repository at this point in the history
  • Loading branch information
alexanderby committed Dec 23, 2016
1 parent 4d31b13 commit bb2d585
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 4 deletions.
53 changes: 53 additions & 0 deletions src/elements/decorators/layer-labels-rules.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import {LayerLabelsModel} from './layer-labels-model';
var rules = {};

export class LayerLabelsRules {
Expand Down Expand Up @@ -211,6 +212,58 @@ LayerLabelsRules
};
})

.regRule('outside-then-inside-horizontal', (prev, args) => {

var outer = ['r+', 'l-']
.map(LayerLabelsRules.getRule)
.reduce((p, r) => LayerLabelsModel.compose(p, r(p, args)), prev);

var inner = ['r-', 'l+', 'hide-by-label-height-horizontal', 'cut-label-horizontal']
.map(LayerLabelsRules.getRule)
.reduce((p, r) => LayerLabelsModel.compose(p, r(p, args)), prev);

var overflow = (row) => {
var x = (outer.x(row) + outer.dx(row));
var half = (outer.w(row) / 2);
return ((x - half < 0) || (x + half > args.maxWidth));
};

return Object.assign(
{},
outer,
['x', 'dx', 'hide', 'label'].reduce((obj, prop) => {
obj[prop] = (row) => ((overflow(row) ? inner : outer)[prop](row));
return obj;
}, {})
);
})

.regRule('outside-then-inside-vertical', (prev, args) => {

var outer = ['t+', 'b-']
.map(LayerLabelsRules.getRule)
.reduce((p, r) => LayerLabelsModel.compose(p, r(p, args)), prev);

var inner = ['t-', 'b+', 'hide-by-label-height-vertical', 'cut-label-vertical']
.map(LayerLabelsRules.getRule)
.reduce((p, r) => LayerLabelsModel.compose(p, r(p, args)), prev);

var overflow = (row) => {
var y = (outer.y(row) + outer.dy(row));
var half = (outer.h(row) / 2);
return ((y - half < 0) || (y + half > args.maxHeight));
};

return Object.assign(
{},
outer,
['y', 'dy', 'hide', 'label'].reduce((obj, prop) => {
obj[prop] = (row) => ((overflow(row) ? inner : outer)[prop](row));
return obj;
}, {})
);
})

.regRule('hide-by-label-height-horizontal', (prev) => {

return {
Expand Down
8 changes: 4 additions & 4 deletions src/elements/element.interval.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,10 @@ const Interval = {
(config.guide.label || {}),
{
position: (config.flip ?
(config.stack ?
['r-', 'l+', 'hide-by-label-height-horizontal', 'cut-label-horizontal'] :
['outside-then-inside-horizontal']
) :
(config.stack ?
[
'rotate-on-size-overflow',
Expand All @@ -43,10 +46,7 @@ const Interval = {
] :
[
'rotate-on-size-overflow',
't+',
'b-',
'hide-by-label-height-vertical',
'cut-label-vertical',
'outside-then-inside-vertical',
'auto:hide-on-label-label-overlap'
]
)
Expand Down

0 comments on commit bb2d585

Please sign in to comment.