From debdf611dcc08ac3b522e9dc70c75f4b11889d0a Mon Sep 17 00:00:00 2001 From: Zhora Shalyapin Date: Wed, 26 Feb 2025 10:16:06 +0000 Subject: [PATCH] add button for save and new --- main.js | 126 +++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 88 insertions(+), 38 deletions(-) diff --git a/main.js b/main.js index a8b8f23..a03a212 100644 --- a/main.js +++ b/main.js @@ -613,56 +613,86 @@ e.preventDefault() }) } + + async function sendForm(onSend) { + let formData = new FormData(document.querySelector("form")) + + let fileContainers = [...document.querySelectorAll(".file-list-container")] + let fileInputNames = ["legend_photo", "legend_files", "admin_photo", "admin_files"] + for (let [i, fileContainer] of fileContainers.entries()) { + formData.set(`cp[${fileInputNames[i]}]`, fileContainer.children.length) + } + + let props = document.querySelectorAll("input[name^=\"prop_\"]"); + for (let prop of props) { + let parent = prop.parentElement + let propName + + if (parent.tagName === "DIV") { + propName = parent.parentElement.querySelector("label").textContent + } + else if (parent.tagName === "TD") { + propName = parent.parentElement.querySelector("td:first-child").textContent + } + + formData.set(`propname[${prop.name}]`, propName) + } + + let result = await sendData(formData) + + try { + console.log(result.ok) + } + catch (e) { + console.log(e) + } + finally { + onSend() + } + } + + function createSaveAndNewButton() { + let saveAndNewButton = document.createElement("button") + saveAndNewButton.textContent = "+" + saveAndNewButton.type = "button" + saveAndNewButton.classList.add("safe-action") + saveAndNewButton.addEventListener("click", () => { + sendForm(() => { + let cpNumber = document.querySelector(`input[name="cp[number]"]`).value + let lattitude = document.querySelector(`input[name="cp[lattitude]"]`).value + let longitude = document.querySelector(`input[name="cp[longitude]"]`).value + + localStorage.setItem("justCreated", cpNumber) + localStorage.setItem("lattitude", lattitude) + localStorage.setItem("longitude", longitude) + + document.querySelector("input[name=\"save_go\"]").click() + }) + }) + + return saveAndNewButton + } function createSendButtons() { - if (document.querySelector("button.safe-action")) return + if (document.querySelector(".pseudo-save")) return - let saveButtons = [...document.querySelectorAll("input[name=\"save_go\"]"), ...document.querySelectorAll("input[name=\"save_exit\"]")] + let saveButtons = [ + ...document.querySelectorAll("input[name=\"save_go\"]"), + ...document.querySelectorAll("input[name=\"save_exit\"]") + ] for (let saveButton of saveButtons) { let pseudoSaveButton = document.createElement("button") pseudoSaveButton.type = "button" pseudoSaveButton.textContent = saveButton.value - pseudoSaveButton.classList.add("safe-action") - pseudoSaveButton.addEventListener("click", async () => { - let formData = new FormData(document.querySelector("form")) + pseudoSaveButton.classList.add("safe-action", "pseudo-save") + pseudoSaveButton.addEventListener("click", async () => await sendForm(() => saveButton.click())) - let fileContainers = [...document.querySelectorAll(".file-list-container")] - let fileInputNames = ["legend_photo", "legend_files", "admin_photo", "admin_files"] - for (let [i, fileContainer] of fileContainers.entries()) { - formData.set(`cp[${fileInputNames[i]}]`, fileContainer.children.length) - } - - let props = document.querySelectorAll("input[name^=\"prop_\"]"); - for (let prop of props) { - let parent = prop.parentElement - let propName - - if (parent.tagName === "DIV") { - propName = parent.parentElement.querySelector("label").textContent - } - else if (parent.tagName === "TD") { - propName = parent.parentElement.querySelector("td:first-child").textContent - } - - formData.set(`propname[${prop.name}]`, propName) - } - - let result = await sendData(formData) - - try { - console.log(result.ok) - } - catch (e) { - console.log(e) - } - finally { - saveButton.click() - } - }) saveButton.style.display = "none" saveButton.parentElement.insertBefore(pseudoSaveButton, saveButton) } + + document.querySelectorAll("input[name=\"save_go\"]").forEach(el => el.after(createSaveAndNewButton())) } function addUglyDeleteListener() { @@ -1018,6 +1048,26 @@ /* HEAD */ + let justCreated = localStorage.getItem("justCreated") + let prevCreated = localStorage.getItem("prevCreated") + + if (justCreated !== null) { + localStorage.setItem("prevCreated", justCreated) + localStorage.removeItem("justCreated") + + window.location.href = "https://rst.runcity.org/msk2025/cp_mgmt/?action=edit" + return + } + if (prevCreated !== null) { + document.querySelector(`input[name="cp[number]"]`).value = parseInt(localStorage.getItem("prevCreated")) + 1 + document.querySelector(`input[name="cp[lattitude]"]`).value = localStorage.getItem("lattitude") + document.querySelector(`input[name="cp[longitude]"]`).value = localStorage.getItem("longitude") + + localStorage.removeItem("prevCreated") + localStorage.removeItem("lattitude") + localStorage.removeItem("longitude") + } + let styleSheet = document.createElement("style") styleSheet.textContent = styles document.head.appendChild(styleSheet)