")
+ .attr({"id": table["id"],
+ "class": "tab-pane fade",
+ "role": "tabpanel",
+ "aria-labelledby": table["id"]+"-tab"})
+ let h3 = $("
")
+ .attr("id", table["id"]+"-header")
+ .html(`${table["name"]} (/)`);
+ div.append(h3)
+ .append(`
${table["description"]}
`)
+ .append(`
`);
+ 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);
+ }
+}
+
+function updateRecentFiles(new_file) {
+ store.set("default_dir", new_file);
+ let recent_files = store.get("recent_files");
+ if (recent_files.includes(new_file)) {
+ recent_files.splice(recent_files.indexOf(new_file), 1);
+ }
+ recent_files.splice(0, 0, new_file);
+ store.set("recent_files", recent_files)
+ updateMenuBar();
+}
+
+function updateMenuBar() {
+ let recent_files = store.get("recent_files");
+ for (let menu of menu_template[0].submenu) {
+ if (menu.label === "Open Recent") {
+ menu.submenu = []
+ for (let file of recent_files) {
+ if (fs.existsSync(file)) {
+ menu.submenu.push({
+ label: file, click: () => {
+ openFile(file);
+ }
+ });
+ }
+ }
+ }
+ }
+ let menu = Menu.buildFromTemplate(menu_template);
+ Menu.setApplicationMenu(menu);
+}
+
ipcMain.on("create-new", (event) => {
createNew();
})
+
+ipcMain.on("save", (event, tables_data, create_new_file) => {
+ saveFile(tables_data, create_new_file);
+})
+
+ipcMain.on("open", (event, file_path="") => {
+ openFile(file_path, true)
+})
diff --git a/src/js/editor.js b/src/js/editor.js
index 0d6cbb0..9122f17 100644
--- a/src/js/editor.js
+++ b/src/js/editor.js
@@ -5,8 +5,12 @@ let selected_cells = [];
let selected_cell_data;
let nav = $("nav");
let nav_scroll = nav.scrollLeft();
+let detail_tab_name = $("#detail-tab-name");
let detail_table_name = $("#detail-table-name");
+let detail_table_hidden = $("#detail-table-hidden");
let detail_column_name = $("#detail-column-name");
+let detail_column_selectable = $("#detail-column-selectable");
+let detail_column_sortable = $("#detail-column-sortable");
let detail_cell_text = $("#detail-cell-text");
function openFile(file_name) {
@@ -21,6 +25,10 @@ function openFile(file_name) {
});
}
+function saveFile(create_new_file) {
+ ipcRenderer.send("save", tables_data, create_new_file);
+}
+
function clearPage() {
$("#tables").empty();
nav.empty();
@@ -131,8 +139,12 @@ function generateTables() {
function updateDetailsPanel() {
let data = getSelectedCellData();
+ detail_tab_name.val(data["tab_name"]);
detail_table_name.val(data["table_name"]);
detail_column_name.val(data["col_name"]);
+ detail_table_hidden.prop("checked", data["table_hidden"]);
+ detail_column_selectable.prop("checked", data["col_selectable"]);
+ detail_column_sortable.prop("checked", data["col_sortable"]);
if (data["row_id"]) {
detail_cell_text.attr("disabled", false);
detail_cell_text.val(data["cell_text"]);
@@ -179,10 +191,14 @@ function getSelectedCellData(force_update=false) {
if (table_data["id"] === table_match[0]) {
cell_data["table_index"] = i;
cell_data["table_name"] = table_data["name"];
+ cell_data["tab_name"] = table_data["tab_name"];
+ cell_data["table_hidden"] = table_data["hidden"];
$.each(table_data["col-def"], (j, col) => {
if (col["field"] === column_match[0]) {
cell_data["col_index"] = j;
cell_data["col_name"] = col["title"];
+ cell_data["col_selectable"] = col["selectable"];
+ cell_data["col_sortable"] = col["sortable"];
return false;
}
})
@@ -219,7 +235,7 @@ function addTable() {
"name": "New Table",
"filter": false,
"hidden": false,
- "tab-name": "",
+ "tab_name": "",
"description": "",
"col-def": [
{
@@ -523,7 +539,15 @@ nav.on("wheel", (event) => {
nav.stop();
nav.animate({scrollLeft: nav_scroll}, {speed: speed, easing: "linear"});
}
-})
+});
+
+detail_tab_name.on("input", (event) => {
+ let input = $(event.target);
+ let new_tab_name = input.val();
+ let data = getSelectedCellData();
+ tables_data[data["table_index"]]["tab_name"] = new_tab_name;
+ selected_cell_data["tab_name"] = new_tab_name;
+});
detail_table_name.on("input", (event) => {
let input = $(event.target);
@@ -532,7 +556,15 @@ detail_table_name.on("input", (event) => {
$(`#${data["table_nav_id"]}`).text(new_table_name);
tables_data[data["table_index"]]["name"] = new_table_name;
selected_cell_data["table_name"] = new_table_name;
-})
+});
+
+detail_table_hidden.on("input", (event) => {
+ let input = $(event.target);
+ let table_hidden = input.prop("checked");
+ let data = getSelectedCellData();
+ tables_data[data["table_index"]]["hidden"] = table_hidden;
+ selected_cell_data["table_hidden"] = table_hidden;
+});
detail_column_name.on("input", (event) => {
let input = $(event.target);
@@ -541,7 +573,23 @@ detail_column_name.on("input", (event) => {
$(`#${data["col_id"]}`).text(new_col_name);
tables_data[data["table_index"]]["col-def"][data["col_index"]]["title"] = new_col_name;
selected_cell_data["col_name"] = new_col_name;
-})
+});
+
+detail_column_selectable.on("input", (event) => {
+ let input = $(event.target);
+ let column_selectable = input.prop("checked");
+ let data = getSelectedCellData();
+ tables_data[data["table_index"]]["col-def"][data["col_index"]]["selectable"] = column_selectable;
+ selected_cell_data["col_selectable"] = column_selectable;
+});
+
+detail_column_sortable.on("input", (event) => {
+ let input = $(event.target);
+ let column_sortable = input.prop("checked");
+ let data = getSelectedCellData();
+ tables_data[data["table_index"]]["col-def"][data["col_index"]]["sortable"] = column_sortable;
+ selected_cell_data["col_sortable"] = column_sortable;
+});
detail_cell_text.on("input", (event) => {
let input = $(event.target);
@@ -550,8 +598,16 @@ detail_cell_text.on("input", (event) => {
$(`#${data["cell_id"]}`).text(new_cell_text);
tables_data[data["table_index"]]["rows"][data["row_index"]][data["row_key"]] = new_cell_text;
selected_cell_data["cell_text"] = new_cell_text;
-})
+});
ipcRenderer.on("open-default", (event) => {
openFile("default.json");
+});
+
+ipcRenderer.on("open", (event, file_path) => {
+ openFile(file_path);
})
+
+ipcRenderer.on("save", (event, create_new_file) => {
+ saveFile(create_new_file);
+});
diff --git a/src/js/splash.js b/src/js/splash.js
index 4e875ca..483d40a 100644
--- a/src/js/splash.js
+++ b/src/js/splash.js
@@ -5,3 +5,7 @@ $("#recent-files").css("display", "none");
$("#create-new").on("click", () => {
ipcRenderer.send("create-new");
});
+
+$("#open-file").on("click", () => {
+ ipcRenderer.send("open");
+})
diff --git a/src/splash.html b/src/splash.html
index 28ed470..3914c8c 100644
--- a/src/splash.html
+++ b/src/splash.html
@@ -12,7 +12,9 @@
Web Editor
-
+
+
+