new movable action
This commit is contained in:
parent
3bc5938417
commit
24b07c3557
67
src/lib/components/Output/Print/MainSystems/movable.js
Normal file
67
src/lib/components/Output/Print/MainSystems/movable.js
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
import VanillaMoveable, { PROPERTIES, EVENTS } from "moveable";
|
||||||
|
import { camelize, isUndefined } from "@daybrush/utils";
|
||||||
|
|
||||||
|
function createMoveable(node,options) {
|
||||||
|
|
||||||
|
let translate = [0,0];
|
||||||
|
|
||||||
|
options = {
|
||||||
|
originDraggable: true,
|
||||||
|
originRelative: true,
|
||||||
|
draggable: true,
|
||||||
|
throttleDrag: 0,
|
||||||
|
zoom: 1,
|
||||||
|
origin: false,
|
||||||
|
onDrag(e) {
|
||||||
|
translate = e.beforeTranslate;
|
||||||
|
node.dispatchEvent(new CustomEvent('translate', { detail: translate}));
|
||||||
|
},
|
||||||
|
target: node,
|
||||||
|
...options,
|
||||||
|
};
|
||||||
|
|
||||||
|
const moveable = new VanillaMoveable(document.body, options );
|
||||||
|
|
||||||
|
EVENTS.forEach((name) => {
|
||||||
|
const onName = camelize(`on ${name}`);
|
||||||
|
moveable.on(name, (e) => {
|
||||||
|
const result = options[onName] && options[onName](e);
|
||||||
|
const result2 = node.dispatchEvent(new CustomEvent(name, { detail: e }));
|
||||||
|
|
||||||
|
return !isUndefined(result)
|
||||||
|
? result
|
||||||
|
: !isUndefined(result2)
|
||||||
|
? result2
|
||||||
|
: undefined;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
return moveable;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function movable(node, options) {
|
||||||
|
|
||||||
|
let moveable = options.disabled ? undefined : createMoveable(options);
|
||||||
|
|
||||||
|
|
||||||
|
const destroy = () => {
|
||||||
|
if(!moveable) return;
|
||||||
|
moveable.destroy();
|
||||||
|
moveable = undefined;
|
||||||
|
};
|
||||||
|
|
||||||
|
const update = async (params) => {
|
||||||
|
if (params.disabled) {
|
||||||
|
destroy();
|
||||||
|
} else {
|
||||||
|
if (!moveable) {
|
||||||
|
moveable = createMoveable(node, params);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
destroy,
|
||||||
|
update,
|
||||||
|
};
|
||||||
|
}
|
79
src/lib/components/Output/Print/movable.js
Normal file
79
src/lib/components/Output/Print/movable.js
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
import VanillaMoveable, { PROPERTIES, EVENTS } from "moveable";
|
||||||
|
import { camelize, isUndefined } from "@daybrush/utils";
|
||||||
|
|
||||||
|
function createMoveable(node, options) {
|
||||||
|
let translate = [0, 0];
|
||||||
|
|
||||||
|
let ship = options.ship;
|
||||||
|
let system = options.system;
|
||||||
|
delete options.ship;
|
||||||
|
delete options.system;
|
||||||
|
|
||||||
|
if( Array.isArray(system) ) {
|
||||||
|
system = { system: system[0], systemId: system[1] };
|
||||||
|
}
|
||||||
|
else { system = {system}; }
|
||||||
|
|
||||||
|
options = {
|
||||||
|
originDraggable: true,
|
||||||
|
originRelative: true,
|
||||||
|
draggable: true,
|
||||||
|
throttleDrag: 0,
|
||||||
|
zoom: 1,
|
||||||
|
origin: false,
|
||||||
|
onDrag(e) {
|
||||||
|
translate = e.beforeTranslate;
|
||||||
|
node.dispatchEvent(
|
||||||
|
new CustomEvent("translate", { detail: translate })
|
||||||
|
);
|
||||||
|
ship.dispatch.setUITransform({ ...system, translate });
|
||||||
|
},
|
||||||
|
target: node,
|
||||||
|
...options,
|
||||||
|
};
|
||||||
|
|
||||||
|
const moveable = new VanillaMoveable(document.body, options);
|
||||||
|
|
||||||
|
EVENTS.forEach((name) => {
|
||||||
|
const onName = camelize(`on ${name}`);
|
||||||
|
moveable.on(name, (e) => {
|
||||||
|
const result = options[onName] && options[onName](e);
|
||||||
|
const result2 = node.dispatchEvent(
|
||||||
|
new CustomEvent(name, { detail: e })
|
||||||
|
);
|
||||||
|
|
||||||
|
return !isUndefined(result)
|
||||||
|
? result
|
||||||
|
: !isUndefined(result2)
|
||||||
|
? result2
|
||||||
|
: undefined;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
return moveable;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function movable(node, options) {
|
||||||
|
let moveable = options.disabled ? undefined : createMoveable(options);
|
||||||
|
|
||||||
|
const destroy = () => {
|
||||||
|
if (!moveable) return;
|
||||||
|
moveable.destroy();
|
||||||
|
moveable = undefined;
|
||||||
|
};
|
||||||
|
|
||||||
|
const update = async (params) => {
|
||||||
|
if (params.disabled) {
|
||||||
|
destroy();
|
||||||
|
} else {
|
||||||
|
if (!moveable) {
|
||||||
|
moveable = createMoveable(node, params);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
destroy,
|
||||||
|
update,
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user