Index: lams_central/web/css/_authoring_base.scss =================================================================== diff -u -rf69a1e048cd573d84dbf0fee8a2175e8b8b9eeb6 -r3510bf9db75009af42fcd5d0f64959dab092fa8f --- lams_central/web/css/_authoring_base.scss (.../_authoring_base.scss) (revision f69a1e048cd573d84dbf0fee8a2175e8b8b9eeb6) +++ lams_central/web/css/_authoring_base.scss (.../_authoring_base.scss) (revision 3510bf9db75009af42fcd5d0f64959dab092fa8f) @@ -456,6 +456,7 @@ td#templateContainerCell { width: 200px; vertical-align: top; + user-select: none; } td#templateContainerCell #template-container-collapse { @@ -598,12 +599,6 @@ overflow: auto; vertical-align: top; background: $canvas-dot-background; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - -o-user-select: none; user-select: none; } Index: lams_central/web/includes/javascript/authoring/authoringHandler.js =================================================================== diff -u -r92d88cf5311b393cb22d67e2ba3ca5b09929fd62 -r3510bf9db75009af42fcd5d0f64959dab092fa8f --- lams_central/web/includes/javascript/authoring/authoringHandler.js (.../authoringHandler.js) (revision 92d88cf5311b393cb22d67e2ba3ca5b09929fd62) +++ lams_central/web/includes/javascript/authoring/authoringHandler.js (.../authoringHandler.js) (revision 3510bf9db75009af42fcd5d0f64959dab092fa8f) @@ -157,8 +157,21 @@ * Moves dragged elements on the canvas. */ dragItemsMoveHandler : function(object, event, startX, startY) { - var dx = GeneralLib.snapToGrid(event.pageX - startX, true), - dy = GeneralLib.snapToGrid(event.pageY - startY, true); + // detect if activity is close to an edge of viewport and scroll automatically + if (event.pageX - canvas.scrollLeft() > canvas.width() - layout.activity.width / 2) { + canvas.scrollLeft(event.pageX - canvas.width() + layout.activity.width / 2); + } else if (event.pageX - canvas.scrollLeft() < layout.activity.width * 1.5) { + canvas.scrollLeft(event.pageX - layout.activity.width * 1.5); + } + + if (event.pageY - canvas.scrollTop() > canvas.height() - layout.activity.height * 2) { + canvas.scrollTop(event.pageY - canvas.height() + layout.activity.height * 2); + } else if (event.pageY - canvas.scrollTop() < layout.activity.height) { + canvas.scrollTop(event.pageY - layout.activity.height); + } + + var dx = GeneralLib.snapToGrid(event.pageX + canvas.scrollLeft() - startX, true), + dy = GeneralLib.snapToGrid(event.pageY + canvas.scrollTop() - startY, true); object.items.transform('t' + dx + ' ' + dy); @@ -395,7 +408,7 @@ var transitions = activity.transitions.from.concat(activity.transitions.to); // start dragging the activity - HandlerLib.dragItemsStartHandler(activity, this, mouseupHandler, event, x, y, transitions); + HandlerLib.dragItemsStartHandler(activity, this, mouseupHandler, event, x + canvas.scrollLeft(), y + canvas.scrollTop(), transitions); } }, @@ -485,7 +498,7 @@ } } - HandlerLib.dragItemsStartHandler(container, this, mouseupHandler, event, x, y); + HandlerLib.dragItemsStartHandler(container, this, mouseupHandler, event, x + canvas.scrollLeft(), y + canvas.scrollTop()); }, /** @@ -587,7 +600,7 @@ } } - HandlerLib.dragItemsStartHandler(label, this, mouseupHandler, event, x, y); + HandlerLib.dragItemsStartHandler(label, this, mouseupHandler, event, x + canvas.scrollLeft(), y + canvas.scrollTop()); }, @@ -777,6 +790,6 @@ } } - HandlerLib.dragItemsStartHandler(transition, this, mouseupHandler, event, x, y); + HandlerLib.dragItemsStartHandler(transition, this, mouseupHandler, event, x + canvas.scrollLeft(), y + canvas.scrollTop()); } };