Skip to content

Commit ab751c2

Browse files
committed
Legend: fix drag movement when editable: true
The legend container is now a `<g>` and position must be set using `translate` instead of `x` and `y` coordinates. The cursor is set to always be `move`.
1 parent 1f406e5 commit ab751c2

File tree

1 file changed

+19
-23
lines changed

1 file changed

+19
-23
lines changed

src/components/legend/draw.js

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ var d3 = require('d3');
1313

1414
var Plotly = require('../../plotly');
1515
var Lib = require('../../lib');
16-
var setCursor = require('../../lib/setcursor');
1716
var Plots = require('../../plots/plots');
1817
var dragElement = require('../dragelement');
1918
var Drawing = require('../drawing');
@@ -321,38 +320,35 @@ module.exports = function draw(gd) {
321320
}
322321

323322
if(gd._context.editable) {
324-
var xf,
325-
yf,
326-
x0,
327-
y0,
328-
lw,
329-
lh;
323+
var xf, yf, x0, y0;
324+
325+
legend.classed('cursor-move', true);
330326

331327
dragElement.init({
332328
element: legend.node(),
333329
prepFn: function() {
334-
x0 = Number(legend.attr('x'));
335-
y0 = Number(legend.attr('y'));
336-
lw = Number(legend.attr('width'));
337-
lh = Number(legend.attr('height'));
338-
setCursor(legend);
330+
// regex pattern for 'translate(123.45px, 543.21px)'
331+
var re = /(.*\()(\d*\.?\d*)([^\d]*)(\d*\.?\d*)([^\d]*)/,
332+
transform = legend.attr('transform')
333+
.replace(re, function(match, p1, p2, p3, p4) {
334+
return [p2, p4].join(' ');
335+
})
336+
.split(' ');
337+
338+
x0 = +transform[0] || 0;
339+
y0 = +transform[1] || 0;
339340
},
340341
moveFn: function(dx, dy) {
341-
var gs = gd._fullLayout._size;
342-
343-
legend.call(Drawing.setPosition, x0+dx, y0+dy);
342+
var newX = x0 + dx,
343+
newY = y0 + dy;
344344

345-
xf = dragElement.align(x0+dx, lw, gs.l, gs.l+gs.w,
346-
opts.xanchor);
347-
yf = dragElement.align(y0+dy+lh, -lh, gs.t+gs.h, gs.t,
348-
opts.yanchor);
345+
var transform = 'translate(' + newX + ', ' + newY + ')';
346+
legend.attr('transform', transform);
349347

350-
var csr = dragElement.getCursor(xf, yf,
351-
opts.xanchor, opts.yanchor);
352-
setCursor(legend, csr);
348+
xf = dragElement.align(newX, 0, gs.l, gs.l+gs.w, opts.xanchor);
349+
yf = dragElement.align(newY, 0, gs.t+gs.h, gs.t, opts.yanchor);
353350
},
354351
doneFn: function(dragged) {
355-
setCursor(legend);
356352
if(dragged && xf !== undefined && yf !== undefined) {
357353
Plotly.relayout(gd, {'legend.x': xf, 'legend.y': yf});
358354
}

0 commit comments

Comments
 (0)