diff --git a/package.json b/package.json index 4d79657..f6964e5 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "webeditor", "productName": "webeditor", - "version": "1.0.0", + "version": "1.1.0", "description": "My Electron application description", "main": "src/index.js", "scripts": { diff --git a/src/index.js b/src/index.js index e9ac2a3..509c5fe 100644 --- a/src/index.js +++ b/src/index.js @@ -1,13 +1,14 @@ const { app, BrowserWindow, ipcMain, dialog, Menu } = require('electron'); const Store = require("electron-store"); const fs = require("fs"); +const path = require("path"); const util = require('util') let Validator = require("jsonschema").Validator; let validator = new Validator(); let all_schemas = [ - "src/schemas/current_schema.json", - "src/schemas/1.0.0_schema.json", + path.join(app.getAppPath(), "src/schemas/current_schema.json"), + path.join(app.getAppPath(), "src/schemas/1.0.0_schema.json"), ] let schema_updaters = { "1.0.0_schema.json": update_1_0_0_schema @@ -103,14 +104,13 @@ function createSplashScreen() { store.set("recent_files", []); } - splash_screen.loadFile('src/splash.html'); - + splash_screen.loadFile(path.join(app.getAppPath(), "src/splash.html")); // Open the DevTools. // splash_screen.webContents.openDevTools(); // store.openInEditor(); } -function createEditorWindow() { +function createEditorWindow(json) { let main_window = new BrowserWindow({ width: 1000, height: 600, @@ -118,11 +118,14 @@ function createEditorWindow() { webPreferences: { nodeIntegration: true } - }); + }) main_window.maximize(); updateMenuBar(); - main_window.loadFile("src/editor.html"); + main_window.loadFile(path.join(app.getAppPath(), "src/editor.html")) + .then(() => { + main_window.webContents.send("open", json); + }); // Open the DevTools. // main_window.webContents.openDevTools(); return main_window; @@ -174,10 +177,7 @@ function openFile(file_path="", new_file=false) { current_file = file_path if (new_file) { let old_window = BrowserWindow.getFocusedWindow(); - let window = createEditorWindow(); - window.once("ready-to-show", () => { - window.webContents.send("open", json); - }) + createEditorWindow(json); old_window.close(); } else { let window = BrowserWindow.getFocusedWindow(); @@ -196,99 +196,7 @@ function saveFile(json_data, create_new_file) { } } if (current_file) { - let tables_data = json_data["tables"] fs.writeFileSync(current_file, JSON.stringify(json_data, null, 4)); - let nav_content_path = current_file.replace(".json", "-nav-content.html"); - let tab_content_path = current_file.replace(".json", "-tab-content.html"); - let nav = ""; - let tabs = ""; - let table_tabs = {"": []}; - let tables_added = []; - - for (let table_data of tables_data) { - if (table_data["tab_name"] === "") { - table_tabs[""].push(table_data["id"]); - } else { - if (!Object.keys(table_tabs).includes(table_data["tab_name"])) { - table_tabs[table_data["tab_name"]] = [table_data]; - } else { - table_tabs[table_data["tab_name"]].push(table_data); - } - } - } - - for (let table_data of tables_data) { - let table_id = table_data["id"]; - if (table_data["hidden"]) {continue;} - if (tables_added.includes(table_id)) {continue;} - let li; - if (table_tabs[""].includes(table_id)) { - li = $("<li>").addClass("nav-item"); - let tab_link = $("<a>") - .attr({"id": table_id+"-tab", - "class": "nav-link", - "data-bs-toggle": "tab", - "href": "#"+table_id, - "role": "tab", - "aria-controls": table_id, - "aria-selected": false}) - .html(table_data["name"]); - li.append(tab_link); - let div = $("<div>") - .attr({"id": table_id, - "class": "tab-pane fade", - "role": "tabpanel", - "aria-labelledby": table_id+"-tab"}) - let h3 = $("<h3>") - .attr("id", table_id+"-header") - .html(`${table_data["name"]} (<span id="${table_id}-completed"></span>/<span id="${table_id}-total"></span>)`); - div.append(h3) - .append(`<p>${table_data["description"]}</p>`) - .append(`<table id="${table_data["name"]}-table" class="table table-hover"></table>`); - tabs += div.prop("outerHTML"); - tables_added.push(table_id) - } else { - li = $("<li>").addClass("nav-item dropdown"); - let a = $("<a>") - .attr({"class": "nav-link dropdown-toggle", - "href": "#", - "data-bs-toggle": "dropdown", - "role": "button", - "aria-expanded": false}) - .html(table_data["tab_name"]); - li.append(a) - let ul = $("<ul>").addClass("dropdown-menu"); - for (let table of table_tabs[table_data["tab_name"]]) { - let nav_link = $("<li>").append($("<a>") - .attr({"id": table["id"]+"-tab", - "class": "dropdown-item", - "data-bs-toggle": "tab", - "href": "#"+table["id"], - "role": "tab", - "aria-controls": table["id"], - "aria-selected": false}) - .html(table["name"])); - ul.append(nav_link); - let div = $("<div>") - .attr({"id": table["id"], - "class": "tab-pane fade", - "role": "tabpanel", - "aria-labelledby": table["id"]+"-tab"}) - let h3 = $("<h3>") - .attr("id", table["id"]+"-header") - .html(`${table["name"]} (<span id="${table["id"]}-completed"></span>/<span id="${table["id"]}-total"></span>)`); - div.append(h3) - .append(`<p>${table["description"]}</p>`) - .append(`<table id="${table["name"]}-table" class="table table-hover"></table>`); - tabs += div.prop("outerHTML"); - tables_added.push(table["id"]); - } - li.append(ul); - } - nav += li.prop("outerHTML"); - } - fs.writeFileSync(nav_content_path, nav); - fs.writeFileSync(tab_content_path, tabs); } } @@ -336,7 +244,7 @@ function checkFile(file_path) { let schema = loadJson(schema_path); result = validator.validate(json, schema); if (result.valid) { - let split_schema = schema_path.split("/"); + let split_schema = schema_path.split(/[\\/]/); result = {"schema": split_schema[split_schema.length-1], "result": result}; valid_result = true; break; @@ -359,6 +267,8 @@ function getUpdatedJson(validation_result) { function update_1_0_0_schema(json) { $.each(json, (i, table_data) => { table_data["id"] = "table"+i; + table_data["tab_name"] = table_data["tab-name"]; + delete table_data["tab-name"]; let col_dict = {}; $.each(table_data["col-def"], (j, col_data) => { col_dict[col_data["field"]] = "column"+j; diff --git a/src/js/editor.js b/src/js/editor.js index b8916b1..192c123 100644 --- a/src/js/editor.js +++ b/src/js/editor.js @@ -60,10 +60,10 @@ function refreshPage() { function generateTable(table_data, table_index) { const table_id = table_data["id"]; - let a = $("<a></a>") + let a = $("<div>") .attr("id", table_id + "-nav") - .addClass("nav-link table-nav") - .attr("href", "#" + table_id) + .addClass("btn nav-link table-nav") + // .attr("href", "#" + table_id) .text(table_data["name"]) .on("click", () => { showTab(table_id); diff --git a/src/schemas/1.0.0_schema.json b/src/schemas/1.0.0_schema.json index 0a81c86..a14a6e0 100644 --- a/src/schemas/1.0.0_schema.json +++ b/src/schemas/1.0.0_schema.json @@ -6,7 +6,7 @@ "name": {"type": "string"}, "filter": {"type": "boolean"}, "hidden": {"type": "boolean"}, - "tab_name": {"type": "string"}, + "tab-name": {"type": "string"}, "description": {"type": "string"}, "col-def": { "type": "array",