myprint-design
Version:
操作简单,组件丰富的一站式打印解决方案打印设计器
143 lines (140 loc) • 4.24 kB
JavaScript
import { selectAllElement, selectTabNext, moveableResizeOffset, moveableMoveOffset, removeSelectElement } from '../plugins/moveable/moveable.mjs';
import { redoPanel, undoPanel } from './historyUtil.mjs';
import { mitt } from './utils.mjs';
import { memoryClipboardUtil } from './memoryClipboardUtil.mjs';
const keyConvert = {
Ctrl: ["Meta", "Ctrl"]
};
const eventListeners = [];
const downKeyList = {};
function mountedKeyboardEvent() {
addKeyboardEvent().subscribe([isCtrlShift, "z"], () => {
redoPanel();
}).subscribe([isCtrlShift, "y"], () => {
redoPanel();
}).subscribe([isCtrl, "z"], () => {
undoPanel();
}).subscribe([isCtrl, "a"], () => {
selectAllElement();
}).subscribe([isCtrl, "c"], () => {
memoryClipboardUtil.copy();
}).subscribe([isCtrl, "x"], () => {
memoryClipboardUtil.cut();
}).subscribe([isCtrl, "v"], () => {
memoryClipboardUtil.paste();
}).subscribe([isCtrl, "d"], () => {
}).subscribe([isCtrl, "s"], () => {
mitt.emit("saveTemplate", {});
}).subscribe(["Tab"], () => {
selectTabNext();
}).subscribe([isCtrlShift, "ArrowUp"], () => {
moveableResizeOffset(0, -10);
}).subscribe([isCtrlShift, "ArrowDown"], () => {
moveableResizeOffset(0, 10);
}).subscribe([isCtrlShift, "ArrowLeft"], () => {
moveableResizeOffset(-10, 0);
}).subscribe([isCtrlShift, "ArrowRight"], () => {
moveableResizeOffset(10, 0);
}).subscribe([isShift, "ArrowUp"], () => {
moveableMoveOffset(0, -10);
}).subscribe([isShift, "ArrowDown"], () => {
moveableMoveOffset(0, 10);
}).subscribe([isShift, "ArrowLeft"], () => {
moveableMoveOffset(-10, 0);
}).subscribe([isShift, "ArrowRight"], () => {
moveableMoveOffset(10, 0);
}).subscribe([isCtrl, "ArrowUp"], () => {
moveableResizeOffset(0, -1);
}).subscribe([isCtrl, "ArrowDown"], () => {
moveableResizeOffset(0, 1);
}).subscribe([isCtrl, "ArrowLeft"], () => {
moveableResizeOffset(-1, 0);
}).subscribe([isCtrl, "ArrowRight"], () => {
moveableResizeOffset(1, 0);
}).subscribe(["ArrowUp"], () => {
moveableMoveOffset(0, -1);
}).subscribe(["ArrowDown"], () => {
moveableMoveOffset(0, 1);
}).subscribe(["ArrowLeft"], () => {
moveableMoveOffset(-1, 0);
}).subscribe(["ArrowRight"], () => {
moveableMoveOffset(1, 0);
}).subscribe([isDelete], () => {
removeSelectElement();
});
}
function unMountedKeyboardEvent() {
removeKeyboardEvent();
}
function addKeyboardEvent() {
document.addEventListener("keydown", keyDown);
document.addEventListener("keyup", keyUp);
const handlers = {
subscribe(keys, callback) {
eventListeners.push({
keys,
callback
});
return handlers;
}
};
return handlers;
}
function removeKeyboardEvent() {
document.removeEventListener("keydown", keyDown);
document.removeEventListener("keyup", keyUp);
}
function keyUp(event) {
delete downKeyList[convertKey(event.key)];
}
function convertKey(key) {
for (let keyConvertKey in keyConvert) {
let convertList = keyConvert[keyConvertKey];
if (convertList.includes(key)) {
return keyConvertKey;
}
}
return key;
}
function keyDown(event) {
if (event.target.tagName === "INPUT" || event.target.tagName === "TEXTAREA") {
return;
}
for (let eventListener of eventListeners) {
const { keys, callback } = eventListener;
let isTrigger = true;
for (let key of keys) {
if (key instanceof Function) {
if (!key(event)) {
isTrigger = false;
break;
}
} else {
if (key != event.key) {
isTrigger = false;
break;
}
}
}
if (isTrigger) {
callback();
event.preventDefault();
event.stopPropagation();
break;
}
}
}
function isCtrl(event) {
return event.ctrlKey || event.metaKey;
}
function isShift(event) {
return event.shiftKey;
}
function isCtrlShift(event) {
return (event.ctrlKey || event.metaKey) && event.shiftKey;
}
function isDelete(event) {
return event.key == "Backspace";
}
export { addKeyboardEvent, isCtrl, isCtrlShift, isDelete, isShift, mountedKeyboardEvent, removeKeyboardEvent, unMountedKeyboardEvent };
//# sourceMappingURL=keyboardUtil.mjs.map