From 825ebcc1063b0ad2af65cb094f825bac57fd2f59 Mon Sep 17 00:00:00 2001 From: Zhora Shalyapin Date: Thu, 27 Feb 2025 14:59:25 +0000 Subject: [PATCH] delete point from db on delete button pressed --- main.js | 104 +++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 73 insertions(+), 31 deletions(-) diff --git a/main.js b/main.js index ae9c369..d25dd60 100644 --- a/main.js +++ b/main.js @@ -7,10 +7,6 @@ // @match https://rst.runcity.org/*/cp_mgmt* // @icon https://www.google.com/s2/favicons?sz=64&domain=runcity.org // @grant none -// @require https://code.jquery.com/jquery-3.7.1.min.js -// @require https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js -// @require https://api.mapbox.com/mapbox.js/plugins/leaflet-fullscreen/v1.0.1/Leaflet.fullscreen.min.js -// @require https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js // ==/UserScript== (function () { @@ -113,18 +109,35 @@ document.head.appendChild(css) } + function addJs(link) { + let script = document.createElement("script") + script.src = link + document.head.appendChild(script) + } + function isEditCpPage() { let params = new URLSearchParams(document.location.search) return params.get("action") === "edit" } + + function isDeleteCpPage() { + let params = new URLSearchParams(document.location.search) + return params.get("action") === "delete" + } - async function sendData(formData) { + async function updatePoint(formData) { return await fetch(`https://runcity.geo.rictum.ru/api/competitions/${window.location.pathname.split('/')[1]}/update`, { method: 'POST', body: formData }) } + async function deletePoint() { + return await fetch(`https://runcity.geo.rictum.ru/api/points/${new URLSearchParams(location.search).get("cp_id")}`, { + method: 'DELETE' + }) + } + function copyCoordinates() { let copyButton = document.createElement("button") copyButton.addEventListener("click", async event => { @@ -214,7 +227,7 @@ let normalInputName = fileInputs[inputName] formData.set(`cp[id]`, document.querySelector("input[name='cp[id]']").value) formData.set(`cp[${normalInputName}]`, "-1") - let result = await sendData(formData) + let result = await updatePoint(formData) try { console.log(result.ok) } @@ -652,7 +665,7 @@ formData.set(`propname[${prop.name}]`, propName) } - let result = await sendData(formData) + let result = await updatePoint(formData) try { console.log(result.ok) @@ -1070,7 +1083,7 @@ } ` - /* HEAD */ + /* REDIRECTS */ let justCreated = localStorage.getItem(localStorageItems.JUST_CREATED) let prevCreated = localStorage.getItem(localStorageItems.PREV_CREATED) @@ -1082,7 +1095,7 @@ formData.set("cp[id]", new URLSearchParams(document.location.search).get("cp_id")) formData.set("cp[number]", document.querySelector(`input[name="cp[number]"]`).value) formData.set("update_id", true) - sendData(formData).then(() => localStorage.removeItem(localStorageItems.NEED_UPDATE_ID)) + updatePoint(formData).then(() => localStorage.removeItem(localStorageItems.NEED_UPDATE_ID)) } if (exit) { @@ -1109,19 +1122,46 @@ localStorage.removeItem(localStorageItems.LONGITUDE) } + /* HEAD */ + let styleSheet = document.createElement("style") styleSheet.textContent = styles document.head.appendChild(styleSheet) - addCss("https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css") - addCss('https://api.mapbox.com/mapbox.js/plugins/leaflet-fullscreen/v1.0.1/leaflet.fullscreen.css') - addCss("https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css") + /* SWITCH FOR DIFFERENT PAGES */ + if (isDeleteCpPage()) { + let deleteButton = document.querySelector(`input[name="delete_go"]`) + let pseudoDeleteButton = document.createElement("button") + pseudoDeleteButton.type = "button" + pseudoDeleteButton.textContent = deleteButton.value + pseudoDeleteButton.classList.add("unsafe-action", "pseudo-save") + pseudoDeleteButton.addEventListener("click", async () => { + await deletePoint() + deleteButton.click() + }) + + deleteButton.style.display = "none" + deleteButton.parentElement.insertBefore(pseudoDeleteButton, deleteButton) + + return + } if (!isEditCpPage()) { return } + /* action=edit HEAD */ + + addJs("https://code.jquery.com/jquery-3.7.1.min.js") + addJs("https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js") + addJs("https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js") + addJs('https://api.mapbox.com/mapbox.js/plugins/leaflet-fullscreen/v1.0.1/Leaflet.fullscreen.min.js') + + addCss("https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css") + addCss('https://api.mapbox.com/mapbox.js/plugins/leaflet-fullscreen/v1.0.1/leaflet.fullscreen.css') + addCss("https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css") + /* NEW DEFALUT VALUES */ document.querySelector(`#props input[name="new_file_type1"][value="l"]`).click() @@ -1379,25 +1419,27 @@ container.appendChild(bottomButtonsContainer) /* MAP */ - let content = document.querySelector("#content") - let contentWrapper = document.createElement("div") - contentWrapper.id = "content-wrapper" - contentWrapper.appendChild(document.querySelector("form")) - contentWrapper.appendChild(document.querySelector("#map-wrapper")) - content.appendChild(contentWrapper) - $(() => { - map.addControl(new L.Control.Fullscreen()) - }) - - let panToCenter = document.createElement("button") - panToCenter.type = "button" - panToCenter.textContent = "В центр" - panToCenter.addEventListener("click", () => { - let lat = document.querySelector("input[name=\"cp\[lattitude\]\"").value - let lon = document.querySelector("input[name=\"cp\[longitude\]\"").value - map.setView(new L.LatLng(parseFloat(lat), parseFloat(lon)), 16) - }) - document.querySelector("#map_controls").appendChild(panToCenter) + if (map !== undefined && L !== undefined) { + let content = document.querySelector("#content") + let contentWrapper = document.createElement("div") + contentWrapper.id = "content-wrapper" + contentWrapper.appendChild(document.querySelector("form")) + contentWrapper.appendChild(document.querySelector("#map-wrapper")) + content.appendChild(contentWrapper) + $(() => { + map.addControl(new L.Control.Fullscreen()) + }) + + let panToCenter = document.createElement("button") + panToCenter.type = "button" + panToCenter.textContent = "В центр" + panToCenter.addEventListener("click", () => { + let lat = document.querySelector("input[name=\"cp\[lattitude\]\"").value + let lon = document.querySelector("input[name=\"cp\[longitude\]\"").value + map.setView(new L.LatLng(parseFloat(lat), parseFloat(lon)), 16) + }) + document.querySelector("#map_controls").appendChild(panToCenter) + } /* DIALOG */ let dialog = document.createElement("dialog")