Skip to content

Commit

Permalink
Merge pull request #6076 from dannon/workflow_fixes
Browse files Browse the repository at this point in the history
Workflow and remote-user related refactoring and a bug fix
  • Loading branch information
mvdbeek committed Jun 8, 2018
2 parents db5dc55 + d2805bb commit 9a79839
Show file tree
Hide file tree
Showing 6 changed files with 256 additions and 260 deletions.
211 changes: 108 additions & 103 deletions client/galaxy/scripts/mvc/workflow/workflow-canvas.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,103 @@
function CanvasManager(app, canvas_viewport, overview) {
this.app = app;
this.cv = canvas_viewport;
this.cc = this.cv.find("#canvas-container");
this.overview = overview;
this.oc = overview.find("#overview-canvas");
this.ov = overview.find("#overview-viewport");
// Make overview box draggable
this.init_drag();
// Initialize Copy & Paste events
this.init_copy_paste();
/* global $ */

// FIXME: merge scroll panel into CanvasManager, clean up hardcoded stuff.
class ScrollPanel {
constructor(panel) {
this.panel = panel;
}
test(e, onmove) {
window.clearTimeout(this.timeout);
var x = e.pageX;
var y = e.pageY;

var // Panel size and position
panel = $(this.panel);

var panel_pos = panel.position();
var panel_w = panel.width();
var panel_h = panel.height();

var // Viewport size and offset
viewport = panel.parent();

var viewport_w = viewport.width();
var viewport_h = viewport.height();
var viewport_offset = viewport.offset();

var // Edges of viewport (in page coordinates)
min_x = viewport_offset.left;

var min_y = viewport_offset.top;
var max_x = min_x + viewport.width();
var max_y = min_y + viewport.height();

var // Legal panel range
p_min_x = -(panel_w - viewport_w / 2);

var p_min_y = -(panel_h - viewport_h / 2);
var p_max_x = viewport_w / 2;
var p_max_y = viewport_h / 2;

var // Did the panel move?
moved = false;

var // Constants
close_dist = 5;

var nudge = 23;
var t = 0;
if (x - close_dist < min_x) {
if (panel_pos.left < p_max_x) {
t = Math.min(nudge, p_max_x - panel_pos.left);
panel.css("left", panel_pos.left + t);
moved = true;
}
} else if (x + close_dist > max_x) {
if (panel_pos.left > p_min_x) {
t = Math.min(nudge, panel_pos.left - p_min_x);
panel.css("left", panel_pos.left - t);
moved = true;
}
} else if (y - close_dist < min_y) {
if (panel_pos.top < p_max_y) {
t = Math.min(nudge, p_max_y - panel_pos.top);
panel.css("top", panel_pos.top + t);
moved = true;
}
} else if (y + close_dist > max_y) {
if (panel_pos.top > p_min_y) {
t = Math.min(nudge, panel_pos.top - p_min_x);
panel.css("top", `${panel_pos.top - t}px`);
moved = true;
}
}
if (moved) {
// Keep moving even if mouse doesn't move
onmove();
this.timeout = window.setTimeout(() => {
this.test(e, onmove);
}, 50);
}
}
stop() {
window.clearTimeout(this.timeout);
}
}
$.extend(CanvasManager.prototype, {
init_drag: function() {

class CanvasManager {
constructor(app, canvas_viewport, overview) {
this.app = app;
this.cv = canvas_viewport;
this.cc = this.cv.find("#canvas-container");
this.overview = overview;
this.oc = overview.find("#overview-canvas");
this.ov = overview.find("#overview-viewport");
// Make overview box draggable
this.init_drag();
// Initialize Copy & Paste events
this.init_copy_paste();
}
init_drag() {
var self = this;
var move = (x, y) => {
x = Math.min(x, self.cv.width() / 2);
Expand Down Expand Up @@ -100,8 +186,8 @@ $.extend(CanvasManager.prototype, {
/* Disable dragging for child element of the panel so that resizing can
only be done by dragging the borders */
$("#overview-border div").bind("drag", () => {});
},
init_copy_paste: function() {
}
init_copy_paste() {
document.addEventListener("copy", e => {
// If it appears that the user is trying to copy/paste text, we
// pass that through.
Expand Down Expand Up @@ -129,15 +215,17 @@ $.extend(CanvasManager.prototype, {
var nodeId;
try {
nodeId = JSON.parse(e.clipboardData.getData("application/json")).nodeId;
} catch (error) {}
} catch (error) {
console.debug(error);
}
if (nodeId && this.app.workflow.nodes.hasOwnProperty(nodeId)) {
this.app.workflow.nodes[nodeId].clone();
}
e.preventDefault();
}
});
},
update_viewport_overlay: function() {
}
update_viewport_overlay() {
var cc = this.cc;
var cv = this.cv;
var oc = this.oc;
Expand All @@ -154,8 +242,8 @@ $.extend(CanvasManager.prototype, {
width: cv.width() / in_w * o_w - 2,
height: cv.height() / in_h * o_h - 2
});
},
draw_overview: function() {
}
draw_overview() {
var canvas_el = $("#overview-canvas");

var size = canvas_el
Expand Down Expand Up @@ -223,89 +311,6 @@ $.extend(CanvasManager.prototype, {
});
this.update_viewport_overlay();
}
});

// FIXME: merge scroll panel into CanvasManager, clean up hardcoded stuff.
function ScrollPanel(panel) {
this.panel = panel;
}
$.extend(ScrollPanel.prototype, {
test: function(e, onmove) {
clearTimeout(this.timeout);
var x = e.pageX;
var y = e.pageY;

var // Panel size and position
panel = $(this.panel);

var panel_pos = panel.position();
var panel_w = panel.width();
var panel_h = panel.height();

var // Viewport size and offset
viewport = panel.parent();

var viewport_w = viewport.width();
var viewport_h = viewport.height();
var viewport_offset = viewport.offset();

var // Edges of viewport (in page coordinates)
min_x = viewport_offset.left;

var min_y = viewport_offset.top;
var max_x = min_x + viewport.width();
var max_y = min_y + viewport.height();

var // Legal panel range
p_min_x = -(panel_w - viewport_w / 2);

var p_min_y = -(panel_h - viewport_h / 2);
var p_max_x = viewport_w / 2;
var p_max_y = viewport_h / 2;

var // Did the panel move?
moved = false;

var // Constants
close_dist = 5;

var nudge = 23;
var t = 0;
if (x - close_dist < min_x) {
if (panel_pos.left < p_max_x) {
t = Math.min(nudge, p_max_x - panel_pos.left);
panel.css("left", panel_pos.left + t);
moved = true;
}
} else if (x + close_dist > max_x) {
if (panel_pos.left > p_min_x) {
t = Math.min(nudge, panel_pos.left - p_min_x);
panel.css("left", panel_pos.left - t);
moved = true;
}
} else if (y - close_dist < min_y) {
if (panel_pos.top < p_max_y) {
t = Math.min(nudge, p_max_y - panel_pos.top);
panel.css("top", panel_pos.top + t);
moved = true;
}
} else if (y + close_dist > max_y) {
if (panel_pos.top > p_min_y) {
t = Math.min(nudge, panel_pos.top - p_min_x);
panel.css("top", `${panel_pos.top - t}px`);
moved = true;
}
}
if (moved) {
// Keep moving even if mouse doesn't move
onmove();
this.timeout = setTimeout(() => {
this.test(e, onmove);
}, 50);
}
},
stop: function() {
clearTimeout(this.timeout);
}
});
export default CanvasManager;

0 comments on commit 9a79839

Please sign in to comment.