asciibird/src/components/parts/KeyboardShortcuts.vue

281 lines
7.2 KiB
Vue

<template>
<div></div>
</template>
<script>
import { mircColours99, toolbarIcons, maxBrushSize } from '../../ascii';
export default {
name: 'KeyboardShortcuts',
mounted() {
const thisIs = this;
this.keyListener = function (e) {
// Stop blocking input when modals are open
if (this.isModalOpen) {
return;
}
e.preventDefault();
const ctrlKey = e.ctrlKey || e.metaKey;
const shiftKey = e.shiftKey;
if (this.isTextEditing) {
thisIs.canvasKeyDown(e.key);
return;
}
// Ctrl Z here
// skg - thanks for mac key suggestion, bro
if (e.key === "z" && ctrlKey) {
this.undo();
}
// Ctrl Y here
if (e.key === "y" && ctrlKey) {
this.redo();
}
// Ctrl C - copy blocks
if (e.key === "c" && ctrlKey && !shiftKey) {
if (this.selectedBlocks.length) {
this.$store.commit(
"selectBlocks",
this.filterNullBlocks(this.selectedBlocks)
);
this.$toasted.show("Copied blocks!", {
type: "success",
icon: "fa-check-circle",
});
this.selectedBlocks = [];
}
}
// Ctrl V - paste blocks
if (e.key === "v" && ctrlKey) {
if (this.haveSelectBlocks) {
this.$store.commit("pushBrushHistory", this.brushBlocks);
this.$store.commit("brushBlocks", this.selectBlocks);
this.$store.commit("changeTool", 4);
}
}
// Show / hide debug panel
if (e.key === "d" && ctrlKey) {
this.$store.commit("toggleDebugPanel", !this.debugPanelState.visible);
}
// Show / hide grid view
if (e.key === "g" && ctrlKey) {
this.$store.commit("toggleGridView", !this.gridView);
}
// Show / hide brush library
if (e.key === "b" && ctrlKey) {
this.$store.commit(
"toggleBrushLibrary",
!this.brushLibraryState.visible
);
}
// New ASCII
// Ctrl N doesn't seem to work in chrome? https://github.com/liftoff/GateOne/issues/290
if (e.key === "m" && ctrlKey) {
this.$store.commit("openModal", "new-ascii");
}
// Edit ASCII
if (e.key === "e" && ctrlKey) {
this.$store.commit("openModal", "edit-ascii");
}
// Paste ASCII
if (e.key === "p" && ctrlKey) {
this.$store.commit("openModal", "paste-ascii");
}
// Export to clipboard
if (e.key === "C" && ctrlKey && shiftKey) {
let ascii = exportMirc();
this.$copyText(ascii.output.join("")).then(
(e) => {
this.$toasted.show("Copied mIRC to clipboard!", {
type: "success",
});
},
(e) => {
this.$toasted.show("Error when copying mIRC to clipboard!", {
type: "error",
});
}
);
}
// Export to txt
if (e.key === "F" && ctrlKey && shiftKey) {
let ascii = exportMirc();
downloadFile(ascii.output.join(""), ascii.filename, "text/plain");
}
if (
e.key === "]" &&
ctrlKey &&
this.brushSizeHeight < this.maxBrushSize &&
this.brushSizeHeight >= 1 &&
this.brushSizeWidth < this.maxBrushSize &&
this.brushSizeWidth >= 1
) {
this.$store.commit("updateBrushSize", {
brushSizeHeight: parseInt(this.brushSizeHeight) + 1,
brushSizeWidth: parseInt(this.brushSizeWidth) + 1,
brushSizeType: this.brushSizeType,
});
}
if (
e.key === "[" &&
ctrlKey &&
this.brushSizeHeight <= this.maxBrushSize &&
this.brushSizeHeight > 1 &&
this.brushSizeWidth <= this.maxBrushSize &&
this.brushSizeWidth > 1
) {
this.$store.commit("updateBrushSize", {
brushSizeHeight: parseInt(this.brushSizeHeight) - 1,
brushSizeWidth: parseInt(this.brushSizeWidth) - 1,
brushSizeType: this.brushSizeType,
});
}
// Hopefully we can still pick up the previous inputs
// while in brush mode
if (this.isBrushing) {
if (e.key === "e") {
this.$store.commit("flipRotateBlocks", {
type: "flip",
});
}
if (e.key === "q") {
this.$store.commit("flipRotateBlocks", {
type: "rotate",
});
}
return;
}
};
// this.keyListenerUp = function (e) {
// this.canKey = true
// };
document.addEventListener("keydown", this.keyListener.bind(this));
// document.addEventListener("keyup", this.keyListenerUp.bind(this));
},
computed: {
isModalOpen() {
return this.$store.getters.isModalOpen;
},
brushSizeHeight() {
return this.$store.getters.brushSizeHeight;
},
brushSizeWidth() {
return this.$store.getters.brushSizeWidth;
},
brushSizeType() {
return this.$store.getters.brushSizeType;
},
currentAscii() {
return this.$store.getters.currentAscii;
},
currentAsciiBlocks() {
return this.$store.getters.currentAsciiBlocks;
},
currentTool() {
return toolbarIcons[this.$store.getters.currentTool];
},
canFg() {
return this.$store.getters.isTargettingFg;
},
canBg() {
return this.$store.getters.isTargettingBg;
},
canText() {
return this.$store.getters.isTargettingChar;
},
currentFg() {
return this.$store.getters.currentFg;
},
currentBg() {
return this.$store.getters.currentBg;
},
currentChar() {
return this.$store.getters.currentChar;
},
isTextEditing() {
return this.currentTool.name === "text";
},
isSelecting() {
return this.currentTool.name === "select";
},
isDefault() {
return this.currentTool.name === "default";
},
isBrushing() {
return this.currentTool.name === "brush";
},
isSelected() {
return (
this.selecting.startX &&
this.selecting.startY &&
this.selecting.endX &&
this.selecting.endY
);
},
brushBlocks() {
return this.$store.getters.brushBlocks;
},
toolbarState() {
return this.$store.getters.toolbarState;
},
mirrorX() {
return this.toolbarState.mirrorX;
},
mirrorY() {
return this.toolbarState.mirrorY;
},
debugPanelState() {
return this.$store.getters.debugPanel;
},
selectBlocks() {
return this.$store.getters.selectBlocks;
},
haveSelectBlocks() {
return !!this.selectBlocks.length;
},
mircColours() {
return mircColours99;
},
brushLibraryState() {
return this.$store.getters.brushLibraryState;
},
gridView() {
return this.$store.getters.gridView;
},
maxBrushSize() {
return maxBrushSize;
},
},
methods: {
undo() {
this.$store.commit("undoBlocks");
},
redo() {
this.$store.commit("redoBlocks");
},
},
};
</script>