Can open multiple files at once now

File paths can be given as command line arguments
Files can be drop into the splash screen to open
This commit is contained in:
Matthew Welch 2021-01-27 19:10:09 -08:00
parent f9f50cd562
commit 5037bf41be
4 changed files with 64 additions and 8 deletions

View File

@ -63,6 +63,7 @@
"jquery": "^3.5.1",
"jsdom": "^16.4.0",
"jsonschema": "^1.4.0",
"minimist": "^1.2.5",
"typescript": "^4.1.3"
},
"devDependencies": {

View File

@ -13,6 +13,7 @@ import * as fs from "fs";
import * as path from "path";
import * as util from 'util';
import * as log from "electron-log";
import * as parseArgs from "minimist";
import { Validator } from "jsonschema";
import * as jsdom from "jsdom";
const { JSDOM } = jsdom;
@ -149,10 +150,22 @@ app.on("before-quit", (event) => {
})
function start() {
if (process.argv.includes("--debug")) {
let args = parseArgs(process.argv.slice(1));
if (args["_"][0] == ".") {
args["_"].splice(0, 1);
}
if (args["debug"]) {
debug = true;
}
createSplashScreen();
if (args["_"].length > 0) {
for (let file_path of args["_"]) {
log.info(file_path);
openFile(file_path, true, true);
}
} else {
createSplashScreen();
}
}
function createSplashScreen() {
@ -240,7 +253,7 @@ function chooseFile(title, for_save=false) {
}
}
function openFile(file_path="", new_file=false) {
function openFile(file_path="", make_new_file=false, make_new_window=false) {
if (file_path === "") {
file_path = chooseFile("Open website data");
}
@ -249,10 +262,12 @@ function openFile(file_path="", new_file=false) {
if (result) {
let json = getUpdatedJson(result);
updateRecentFiles(file_path);
if (new_file) {
if (make_new_file) {
let old_window = BrowserWindow.getFocusedWindow();
createEditorWindow(file_path, json);
old_window.close();
if (old_window && !make_new_window) {
old_window.close();
}
} else {
let window = BrowserWindow.getFocusedWindow();
window.webContents.send("open", file_path, json);
@ -416,12 +431,16 @@ ipcMain.on("save", (event, file_name, json_data) => {
saveFile(file_name, json_data);
})
ipcMain.on("open", (event, file_path="", new_file=false) => {
ipcMain.on("open", (event, file_path="", new_file=false, new_window=false) => {
openFile(file_path, new_file)
})
ipcMain.on("quit", (event) => {
app.exit();
if (BrowserWindow.getAllWindows().length > 1) {
BrowserWindow.getFocusedWindow().destroy();
} else {
app.exit();
}
})
ipcMain.on("close-window", (event) => {

View File

@ -1,6 +1,6 @@
import { ipcRenderer } from 'electron';
import * as $ from "../../third_party/js/jquery-3.5.1.js";
let recent_files_div = $("#recent-files")
let recent_files_div = $("#recent-files");
async function showRecentFiles() {
let recent_files = await ipcRenderer.invoke("get-store-value", "recent_files");
@ -42,3 +42,36 @@ $("#create-new").on("click", () => {
$("#open-file").on("click", () => {
ipcRenderer.send("open", "", true);
})
$("#file-drop").on('drop', (event) => {
if (event.originalEvent.dataTransfer.types.includes("Files")) {
event.preventDefault();
event.stopPropagation();
let files = event.originalEvent.dataTransfer.files;
for (const f of files) {
ipcRenderer.send("open", f.path, true, true);
}
$("#file-drop").css("display", "none");
}
})
.on('dragover', (event) => {
if (event.originalEvent.dataTransfer.types.includes("Files")) {
event.preventDefault();
event.stopPropagation();
$("#file-drop").css("display", "block");
}
})
.on('dragleave', (event) => {
if (event.originalEvent.dataTransfer.types.includes("Files")) {
$("#file-drop").css("display", "none");
}
});
$(window).on('dragenter', (event) => {
if (event.originalEvent.dataTransfer.types.includes("Files")) {
let width = $(document).width();
let height = $(document).height();
$("#file-drop").css({"display": "block", "width": width, "height": height});
}
});

View File

@ -14,6 +14,9 @@
<br/>
<button id="open-file" class="btn btn-secondary">Open</button>
</div>
<div id="file-drop" style="display: none; width: 100%; height: 100%; background: white; opacity: 50%; position: absolute">
<div class="position-absolute top-50 start-50 translate-middle" style="pointer-events: none">Drop files here</div>
</div>
<script>
if (typeof module === 'object') {
window.module = module;