* #issue-fix The new menu will ask if you want to erase the current content but it will ignore the answer * #issue-fix dialog needs to be closer than the original * #issue-fix main menu alignment changes * #issue_fix double click and opensvg issue fixed * #issue-fix process_cancel change to seConfirm * #issue-fix review how the top toolbar display when many buttons are displayed * #issue-fix unwanted css reoved * #issue-fix BOTTOM TOOLS Make sure all features of the bottom toolbar are working * #issue-fix IMPORT IMAGE menu open issue fixed * #issue-fix alert dialog overwrite style * #issue-fix lint issue fixed * npm update + associated fixes * #36 look of opacity button should like the zoom button (without the dropdown button) * #37 Clicking anywhere on the bottom bar (for example below the opacity button is displaying the “color popup”.) * #38 The opacity button does not update with the current element * #42 When you import an image, it works well but the dialog should disappear automatically * Fixes #53: 4th option for the background display fixed * Fixes #53: 4th option for the background fixed * #49 the x button does not work * Fixes #41: Alignment fixes in bottom bar * fix test scenario * #39 opacity button/stroke size/radius button don’t allow the 0 value * #41 The look and alignment of stroke size and stroke style should be consistent with the rest of the bottom bar. * #44 Text font dropdown is broken * #52 Fix the export * Fixes #44: Text font dropdown fixed * Fixes #44: Text font dropdown fixed * Fixes #44: Text font dropdown fixed * Fixes #44: Text font dropdown fixed * Update index.html * update husky * fixes * moves from index.html to js * fix #66 * fix #48 first set of new icons * Reorganize tools in left panel to be more intuitive * Update button styles to adapt to new icons * Fix #48 new set of icons for alignments * Variabilisation of icon bkgd colors Update of color choice to fit new icons design * Update canvas and rulers colors * Improve layer handle design * Modernize SVG Logo but keeping original spirit * Fix #48 continue improve icons * Continue to reorganise left panel * Update right panel handle for layers * Fix #48 new set of icons for main menu * Improve main menu design * Rework menu organisation * Rework menu organisation * Update input element design * New icons * Improve Zoom Module * Improve Color Picker Module * New icons * New icons * #65 restore the feature of start/end marker lines partially did * #64 The export dialog needs to include the quality options (except for PDF) * #39 opacity button/stroke size/radius button don’t allow the 0 value * #39 eslint changes * #69 menu button style overwrite * #65 restore the feature of start/end marker lines * #43 With a small window, the look of the top toolbar is broken * #43 tool top alignment revert * #46 Move this jQuery component to a web component for graduate and picker components * #46 Move this jQuery component to a web component * remove some non standard lint rules * #46 picker convert as pure javascript changes * #46 jquery plugin convert to pure javascript * #46 jquery plugin change to pure javascript * #46 jquery remove and convert to pure javascript * #46 slider issue fixed * #46 ColorValuePicker and js convertion * #46 globals $ remov from slider class * #46 jquery convert pure javascript changes * #46 jquery to js convertion changes * #46 paintbox and current element color set issue fixed * #46 unwanted files removed * #46 $.extend modify changes * #46 extend modifiey changes * #46 $.extend change to pure javascript * #46 extend and data changes * #46 jquery removed * #45 These buttons don't work and dropdown is broken * #45 These buttons don't work and dropdown is broken * #45 These buttons don't work and dropdown is broken commit reverted * #43 With a small window, the look of the top toolbar is broken * Update jQuery.jPicker.js * #76 draggable modification changes * #76 jquery-ui-1.8.17.custom.min.js removed from editor * #76 jquery ui file removed * npm update * #77 console issue fixed * #77 <SVG> button issue fixed * #77 shortkey issue fixed * #77 jquery hotkeys plugin changes * #77 hotkey plugin related changes * #78 hotkey related code comment. * #78 js-hotkeys/jquery.hotkeys.min.js file removed from svgedit.js * #51 Rewrite the color palette without elix * #81 unwanted files removed * #81 folder name renamed * #81 folder rename changes * #81 jquery-ui folder renamed * #81 jquery modify changes * #81 globals $ removed Co-authored-by: Agriya Dev5 <agriya.dev5@agriya.in> Co-authored-by: mathieucura <mathieu@optimistik.fr>
96 lines
2.5 KiB
JavaScript
96 lines
2.5 KiB
JavaScript
// https://github.com/knadh/dragmove.js
|
|
// Kailash Nadh (c) 2020.
|
|
// MIT License.
|
|
|
|
let _loaded = false;
|
|
let _callbacks = [];
|
|
const _isTouch = window.ontouchstart !== undefined;
|
|
|
|
export const dragmove = function(target, handler, parent, onStart, onEnd, onDrag) {
|
|
// Register a global event to capture mouse moves (once).
|
|
if (!_loaded) {
|
|
document.addEventListener(_isTouch ? "touchmove" : "mousemove", function(e) {
|
|
let c = e;
|
|
if (e.touches) {
|
|
c = e.touches[0];
|
|
}
|
|
|
|
// On mouse move, dispatch the coords to all registered callbacks.
|
|
for (var i = 0; i < _callbacks.length; i++) {
|
|
_callbacks[i](c.clientX, c.clientY);
|
|
}
|
|
});
|
|
}
|
|
|
|
_loaded = true;
|
|
let isMoving = false, hasStarted = false;
|
|
let startX = 0, startY = 0, lastX = 0, lastY = 0;
|
|
|
|
// On the first click and hold, record the offset of the pointer in relation
|
|
// to the point of click inside the element.
|
|
handler.addEventListener(_isTouch ? "touchstart" : "mousedown", function(e) {
|
|
e.stopPropagation();
|
|
e.preventDefault();
|
|
if (target.dataset.dragEnabled === "false") {
|
|
return;
|
|
}
|
|
|
|
let c = e;
|
|
if (e.touches) {
|
|
c = e.touches[0];
|
|
}
|
|
|
|
isMoving = true;
|
|
startX = target.offsetLeft - c.clientX;
|
|
startY = target.offsetTop - c.clientY;
|
|
});
|
|
|
|
// On leaving click, stop moving.
|
|
document.addEventListener(_isTouch ? "touchend" : "mouseup", function(e) {
|
|
if (onEnd && hasStarted) {
|
|
onEnd(target, parent, parseInt(target.style.left), parseInt(target.style.top));
|
|
}
|
|
|
|
isMoving = false;
|
|
hasStarted = false;
|
|
});
|
|
|
|
// On leaving click, stop moving.
|
|
document.addEventListener(_isTouch ? "touchmove" : "mousemove", function(e) {
|
|
if (onDrag && hasStarted) {
|
|
onDrag(target, parseInt(target.style.left), parseInt(target.style.top));
|
|
}
|
|
});
|
|
|
|
// Register mouse-move callback to move the element.
|
|
_callbacks.push(function move(x, y) {
|
|
if (!isMoving) {
|
|
return;
|
|
}
|
|
|
|
if (!hasStarted) {
|
|
hasStarted = true;
|
|
if (onStart) {
|
|
onStart(target, lastX, lastY);
|
|
}
|
|
}
|
|
|
|
lastX = x + startX;
|
|
lastY = y + startY;
|
|
|
|
// If boundary checking is on, don't let the element cross the viewport.
|
|
if (target.dataset.dragBoundary === "true") {
|
|
if (lastX < 1 || lastX >= window.innerWidth - target.offsetWidth) {
|
|
return;
|
|
}
|
|
if (lastY < 1 || lastY >= window.innerHeight - target.offsetHeight) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
target.style.left = lastX + "px";
|
|
target.style.top = lastY + "px";
|
|
});
|
|
}
|
|
|
|
export { dragmove as default }; |