diff --git a/main.js b/main.js
index 2c9f562..0c83f54 100644
--- a/main.js
+++ b/main.js
@@ -90,7 +90,7 @@
desc
constructor(row = null) {
- if (row == null) return
+ if (row == null) return
let columns = [...row.querySelectorAll('td, th')].map(el => el.cloneNode(true))
if (columns.length === 1) {
@@ -102,7 +102,7 @@
if (elementsToRemove) {
columns[1].removeChild(elementsToRemove)
}
-
+
this.content = columns[1].innerHTML
.replaceAll("
", "")
.replaceAll(/\s*Перейти к легенде.*$/gs, "")
@@ -121,7 +121,7 @@
toDiv(altName = null, altDesc = null) {
let div = document.createElement('div')
let desc = altDesc ?? this.desc
- desc = desc ? "
" +
+ desc = desc ? "
" +
"

" +
"
" : ""
div.innerHTML = "
" + "
" + (this.content ?? "") + "
" +
@@ -240,7 +240,7 @@
function isRouteMapPage() {
return isRouteManagement() && getAction() === "map"
}
-
+
async function updatePoint(formData) {
return await fetch(`https://runcity.geo.rictum.ru/api/competitions/${getCompetition()}/update`, {
method: 'POST',
@@ -308,14 +308,14 @@
return ref
}
- let makeCoordinatesLinks = (function() {
+ let makeCoordinatesLinks = (function () {
var executed = false
return function () {
if (executed) return
executed = true
-
+
let linksContainer = document.createElement("div")
-
+
linksContainer.appendChild(copyCoordinates())
linksContainer.appendChild(makeRef(yandexMaps, "https://upload.wikimedia.org/wikipedia/commons/7/72/Yandex_Maps_icon.svg", ZOOM))
linksContainer.appendChild(makeRef(googleMaps, "https://upload.wikimedia.org/wikipedia/commons/a/aa/Google_Maps_icon_%282020%29.svg", METERS))
@@ -443,7 +443,7 @@
while (n--) {
u8arr[n] = bstr.charCodeAt(n)
}
- return new File([u8arr], filename, {type:mime})
+ return new File([u8arr], filename, { type: mime })
}
function getHtmlElementByFileType(file) {
@@ -474,14 +474,14 @@
let from = variant == "l" ? "history" : "legend"
let to = variant == "l" ? "legend" : "history"
let type = attachmentIndex == 1 ? "photo" : "files"
-
+
return [document.querySelector(`.${from}-${type}-container`), document.querySelector(`.${to}-${type}-container`)]
}
function makeHandleFilesFunc() {
let storedFiles = []
- return function() {
+ return function () {
let dt = new DataTransfer()
if (storedFiles.length) {
@@ -532,16 +532,16 @@
let index = [...fileContainer.parentElement.children].indexOf(fileContainer)
if (!confirm("Точно?")) return
-
+
storedFiles.splice(storedFiles.length - this.files.length + index, 1)
-
+
let rdt = new DataTransfer()
for (const file of this.files) {
rdt.items.add(file)
}
rdt.items.remove(index)
this.files = rdt.files
-
+
fileContainer.parentElement.removeChild(fileContainer)
})
fileButtonsContainer.appendChild(deleteButton)
@@ -556,7 +556,7 @@
displayedFile.src = e.target.result
downloadLink.setAttribute("href", displayedFile.src)
- storedFiles.push({data: displayedFile.src, name: file.name})
+ storedFiles.push({ data: displayedFile.src, name: file.name })
}
reader.readAsDataURL(file)
}
@@ -565,9 +565,9 @@
}
}
- let prettifyFiles = (function() {
+ let prettifyFiles = (function () {
var executed = false
- return function(insertedFileRows) {
+ return function (insertedFileRows) {
if (executed) return
executed = true
@@ -580,11 +580,11 @@
pseudoInput.setAttribute("for", element.id)
pseudoInput.textContent = "+"
element.parentElement.insertBefore(pseudoInput, element)
-
+
let fileListContainer = document.createElement("div")
fileListContainer.classList.add("file-list-container")
element.parentElement.parentElement.appendChild(fileListContainer)
-
+
element.addEventListener("change", makeHandleFilesFunc(), false)
})
@@ -607,11 +607,11 @@
let toInputs = [...to.querySelectorAll("input, textarea")]
for (const [fromEl, value] of values) {
- let currentToInput = toInputs.find(toEl =>
+ let currentToInput = toInputs.find(toEl =>
toEl.type !== 'file' &&
- toEl.type === fromEl.type &&
- toEl.name === fromEl.name &&
- toEl.id === fromEl.id &&
+ toEl.type === fromEl.type &&
+ toEl.name === fromEl.name &&
+ toEl.id === fromEl.id &&
(toEl.type !== "radio" || toEl.value === fromEl.value)
)
@@ -666,9 +666,9 @@
}
function moveNewFilesOnVariantChange() {
- document.querySelectorAll(`input[name^="new_file_type"]`).forEach(el => el.addEventListener("change", function() {
+ document.querySelectorAll(`input[name^="new_file_type"]`).forEach(el => el.addEventListener("change", function () {
let attachmentIndex = getAttachmentIndex(this)
-
+
let [from, to] = getContainersByVariant(this.value, attachmentIndex)
let newFiles = [...from.querySelectorAll(`.file-container-new`)]
for (const newFile of newFiles) {
@@ -693,7 +693,7 @@
function prettifyEditCpForm(form, was, became, insertedFileRows) {
moveInputValues(form, was, became)
prettifyFiles(insertedFileRows)
-
+
moveNewFilesOnVariantChange()
$("#cps_main").select2()
makeCoordinatesLinks()
@@ -720,7 +720,7 @@
alwaysPrettifyCheckbox.type = "checkbox"
alwaysPrettifyCheckbox.id = "always-prettify-" + index
alwaysPrettifyCheckbox.name = "always-prettify-" + index
- alwaysPrettifyCheckbox.addEventListener("change", function() {
+ alwaysPrettifyCheckbox.addEventListener("change", function () {
let otherCheckboxes = document.querySelectorAll(`input[name^="always-prettify-"]`)
for (let checkbox of otherCheckboxes) {
if (checkbox.id !== this.id) {
@@ -805,7 +805,7 @@
new Swiper('.swiper', {
initialSlide: files.findIndex(el => el.dataset.origin && el.dataset.origin === src || el.src === src),
-
+
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
@@ -816,16 +816,16 @@
}
function bindArrowsForGallery(leftButtonQuery, rightButtonQuery) {
- document.addEventListener("keydown", function(e) {
+ document.addEventListener("keydown", function (e) {
if (!document.querySelector("dialog").open) return
- switch(e.key) {
+ switch (e.key) {
case "ArrowLeft":
$(leftButtonQuery).click()
- break
+ break
case "ArrowRight":
$(rightButtonQuery).click()
- break
+ break
default: return
}
@@ -888,14 +888,14 @@
localStorage.setItem(localStorageItems.JUST_CREATED, cpNumber)
localStorage.setItem(localStorageItems.LATTITUDE, lattitude)
localStorage.setItem(localStorageItems.LONGITUDE, longitude)
-
+
document.querySelector(`input[name="save_go"]`).click()
})
})
return saveAndNewButton
}
-
+
function createSendButtons() {
if (document.querySelector(".pseudo-save")) return
@@ -917,7 +917,7 @@
if (saveButton.name == "save_exit") {
localStorage.setItem(localStorageItems.REDIRECT_EXIT, true)
}
-
+
saveAndStayButtons[0].click()
}))
@@ -933,7 +933,7 @@
let prevCreated = localStorage.getItem(localStorageItems.PREV_CREATED)
let needUpdateId = localStorage.getItem(localStorageItems.NEED_UPDATE_ID)
let exit = localStorage.getItem(localStorageItems.REDIRECT_EXIT)
-
+
if (needUpdateId) {
let formData = new FormData()
formData.set("cp[id]", urlParams().get("cp_id"))
@@ -941,18 +941,18 @@
formData.set("update_id", true)
updatePoint(formData).then(() => localStorage.removeItem(localStorageItems.NEED_UPDATE_ID))
}
-
+
if (exit) {
localStorage.removeItem(localStorageItems.REDIRECT_EXIT)
-
+
location.href = location.href.replace(location.search, '')
return
}
-
+
if (justCreated !== null) {
localStorage.setItem(localStorageItems.PREV_CREATED, justCreated)
localStorage.removeItem(localStorageItems.JUST_CREATED)
-
+
location.href = location.href.replace(location.search, "?action=edit")
return
}
@@ -960,7 +960,7 @@
document.querySelector(`input[name="cp[number]"]`).value = parseInt(localStorage.getItem(localStorageItems.PREV_CREATED)) + 1
document.querySelector(`input[name="cp[lattitude]"]`).value = localStorage.getItem(localStorageItems.LATTITUDE)
document.querySelector(`input[name="cp[longitude]"]`).value = localStorage.getItem(localStorageItems.LONGITUDE)
-
+
localStorage.removeItem(localStorageItems.PREV_CREATED)
localStorage.removeItem(localStorageItems.LATTITUDE)
localStorage.removeItem(localStorageItems.LONGITUDE)
@@ -995,7 +995,7 @@
link.innerText = label
if (blanks.includes(label)) {
- link.setAttribute("target", "_blank")
+ link.setAttribute("target", "_blank")
}
menuItem.appendChild(link)
@@ -1017,14 +1017,14 @@
mainLinksFormatted[label] = `/${competition}/${href}`
}
menuContainer.append(createMenuFromLinks(mainLinksFormatted, ["Легенда"]))
-
+
let catId = urlParams().get("cat_id")
if (catId !== null) {
let catLinksFormatted = {}
for (const [label, href] of Object.entries(catLinks)) {
catLinksFormatted[label] = href(catId)
}
-
+
menuContainer.append(createMenuFromLinks(catLinksFormatted))
}
@@ -1142,7 +1142,7 @@
function makeContainer() {
let container = document.createElement('div')
container.id = "new"
-
+
return container
}
@@ -1151,7 +1151,7 @@
{ index: 2, name: "№", desc: "" },
{ index: 8, name: "Название" }
])
-
+
let copyLink = document.createElement("div")
copyLink.innerHTML = new Property(rows[2]).desc
headerContainer.append(copyLink)
@@ -1178,9 +1178,9 @@
let topButtonsContainer = createFrom(rows, "buttons", [
{ index: 0 }
])
-
+
let bottomButtonsContainer = topButtonsContainer.cloneNode(true)
-
+
document.querySelectorAll("#props tr:is(:first-child, :last-child) th").forEach((el, index) => {
let rowContentWrapper = document.createElement("div")
rowContentWrapper.classList.add("buttons-row__content-wrapper")
@@ -1188,20 +1188,20 @@
let child = el.firstChild
rowContentWrapper.appendChild(child)
}
-
+
let prettifyButton = document.createElement("button")
prettifyButton.type = "button"
prettifyButton.textContent = "Сделать красиво"
prettifyButton.addEventListener("click", () => {
prettifyEditCpForm(form, oldTable, container, insertedFileRows)
})
-
+
rowContentWrapper.appendChild(prettifyButton)
rowContentWrapper.appendChild(createAlwaysPrettifyInput(index))
-
+
el.appendChild(rowContentWrapper)
})
-
+
;[topButtonsContainer, bottomButtonsContainer].forEach((el, index) => {
let unglifyButton = document.createElement("button")
unglifyButton.type = "button"
@@ -1209,7 +1209,7 @@
unglifyButton.addEventListener("click", () => {
uglifyEditCpForm(form, container, oldTable)
})
-
+
let topRowContentWrapper = el.querySelector("div > div > div")
topRowContentWrapper.appendChild(unglifyButton)
topRowContentWrapper.appendChild(createAlwaysPrettifyInput(index))
@@ -1244,23 +1244,23 @@
function makeLegend(rows) {
let legendContainer = document.createElement("div")
legendContainer.classList.add("legend-container")
-
+
/* LEGEND DESC */
-
+
let legendDescContainer = document.createElement("div")
legendDescContainer.classList.add("legend-container__desc")
-
+
let legendDescHeader = document.createElement("div")
legendDescHeader.classList.add("legend-container__desc-header")
-
-
+
+
const LEGEND_RU_LABEL = "Русский"
const LEGEND_EN_LABEL = "Английский"
let legendLang = document.createElement("div")
legendLang.classList.add("legend-desc__lang")
legendLang.textContent = LEGEND_RU_LABEL
legendDescHeader.appendChild(legendLang)
-
+
let legendEnSwitchContainer = createFrom(rows, "legend-switch-container", [
{ index: 48 }
])
@@ -1280,7 +1280,7 @@
enInput.value = ruInputs[i].value
}
})
-
+
let legendRuSwitchContainer = createFrom(rows, "legend-switch-container hidden", [
{ index: 39 }
])
@@ -1290,37 +1290,37 @@
legendLang.textContent = LEGEND_RU_LABEL
})
legendDescHeader.appendChild(legendRuSwitchContainer)
-
+
legendDescHeader.appendChild(copyDescButton)
-
+
let legendRuDescContainer = createFrom(rows, "legend-desc", [
{ index: 40, desc: "" },
{ index: 41, desc: "" },
{ index: 42, desc: "" },
{ index: 43, desc: "" }
])
-
+
let legendRuHiddenDescContainer = createFrom(rows, "legend-desc collapsible collapsed", [
{ index: 44, desc: "" },
{ index: 45, desc: "" },
{ index: 46, desc: "" },
{ index: 47, desc: "" },
])
-
+
let legendEnDescContainer = createFrom(rows, "legend-desc hidden", [
{ index: 49, desc: "" },
{ index: 50, desc: "" },
{ index: 51, desc: "" },
{ index: 52, desc: "" }
])
-
+
let legendEnHiddenDescContainer = createFrom(rows, "legend-desc collapsible collapsed hidden", [
{ index: 53, desc: "" },
{ index: 54, desc: "" },
{ index: 55, desc: "" },
{ index: 56, desc: "" }
])
-
+
let hider = document.createElement("div")
let hiderButton = document.createElement("button")
hiderButton.classList.add("collapse-button")
@@ -1332,7 +1332,7 @@
})
})
hider.appendChild(hiderButton)
-
+
legendDescContainer.appendChild(legendDescHeader)
legendDescContainer.appendChild(legendRuDescContainer)
legendDescContainer.appendChild(legendRuHiddenDescContainer)
@@ -1352,22 +1352,22 @@
function makeLegendFiles(rows) {
let legendFilesContainer = document.createElement("div")
legendFilesContainer.classList.add("legend-container__files")
-
+
let imagesForLegendContainer = createFrom(rows, "files-container legend-photo-container", [
{ index: 23, name: "Фото в легенде" }
])
legendFilesContainer.appendChild(imagesForLegendContainer)
-
+
let imagesForHistoryContainer = createFrom(rows, "files-container history-photo-container", [
{ name: "Фото для ИС" }
])
legendFilesContainer.appendChild(imagesForHistoryContainer)
-
+
let audioForLegendContainer = createFrom(rows, "files-container legend-files-container", [
{ index: 27, name: "Файлы в легенде" }
])
legendFilesContainer.appendChild(audioForLegendContainer)
-
+
let audioForHistoryContainer = createFrom(rows, "files-container history-files-container", [
{ name: "Файлы для ИС" }
])
@@ -1404,13 +1404,13 @@
let dialog = document.createElement("dialog")
dialog.id = "dialog"
document.body.appendChild(dialog)
-
+
dialog.addEventListener("click", e => {
if (e.target == dialog) {
e.target.close()
}
})
-
+
dialog.addEventListener("close", e => {
e.target.innerHTML = ""
})
@@ -1424,7 +1424,7 @@
contentWrapper.appendChild(document.querySelector("form"))
contentWrapper.appendChild(document.querySelector("#map-wrapper"))
content.appendChild(contentWrapper)
-
+
let panToCenter = document.createElement("button")
panToCenter.type = "button"
panToCenter.textContent = "В центр"
@@ -1826,17 +1826,17 @@
formatMap()
/* DIALOG */
-
+
makeDialog()
/* PRETTIFY CHECKBOX */
-
+
checkIfAlwaysPrettify(form, oldTable, container, insertedFileRows)
}
function isAllPointsSouthOfLat(lat) {
- map.eachLayer(function(layer) {
- if (layer instanceof L.Marker) {
+ map.eachLayer(function (layer) {
+ if (layer instanceof L.Marker) {
let latLng = layer.getLatLng()
if (latLng.lat > lat) {
return false
@@ -1849,7 +1849,7 @@
if (map !== undefined && L !== undefined) {
let coords = mapsCenterByCompetition[getCompetition()]
if (coords == null) return
-
+
if (isAllPointsSouthOfLat(lat)) {
map.setView(new L.LatLng(coords.ifSouthern.lat, coords.ifSouthern.lon), 13)
}
@@ -1859,7 +1859,7 @@
}
}
- function prettifyRouteBuildPage() {
+ function changeColumnWidthForRouteBuildPage() {
let styles = `
#content table table {
td:nth-child(2) {
@@ -1884,14 +1884,25 @@
}
`
addStylesToHead(styles)
+ }
+ function hideDescriptionFromRouteBuildPage() {
document.querySelectorAll(`#content > form > table > tbody > tr:is(:nth-child(3), :nth-child(6)) `).forEach(el => el.remove())
+ }
+
+ function hideStartRowFromRouteBuildPage() {
document.querySelector(`#content table table tr:nth-child(2) `).remove()
}
+ function prettifyRouteBuildPage() {
+ changeColumnWidthForRouteBuildPage()
+ hideDescriptionFromRouteBuildPage()
+ hideStartRowFromRouteBuildPage()
+ }
+
function matchNumberFromSelect(select) {
return [...document.querySelector(select).options].reduce(
- (res, el) => ({ ...res, [el.textContent.match(/(?<=^\s*#)\d+/g)?.[0]]: el.value }),
+ (res, el) => ({ ...res, [el.textContent.match(/(?<=^\s*#)\d+/g)?.[0]]: el.value }),
{}
)
}
@@ -1904,13 +1915,7 @@
document.querySelector(`${select} option:last-child`).scrollIntoView()
}
- function prettifyRouteEditPage() {
- document.querySelectorAll(`textarea:is([name="track[comment_int]"], [name="track[comment_ext]"])`).forEach(el => {
- el.rows = 1
- })
-
- document.querySelectorAll(`table tr:is(:nth-child(3), :nth-child(4), :nth-child(5))`).forEach(el => el.classList.add("hidden"))
-
+ function createPointsInpitForRouteEditPage() {
let addPointsContainer = document.createElement("div")
let pointInput = document.createElement("input")
@@ -1950,7 +1955,7 @@
option.selected = false
scrollSelectToBottom("#cps_in")
})
-
+
let removeButton = document.createElement("button")
removeButton.type = "button"
removeButton.textContent = "Убрать"
@@ -2001,6 +2006,16 @@
`)
}
+ function prettifyRouteEditPage() {
+ document.querySelectorAll(`textarea:is([name="track[comment_int]"], [name="track[comment_ext]"])`).forEach(el => {
+ el.rows = 1
+ })
+
+ document.querySelectorAll(`table tr:is(:nth-child(3), :nth-child(4), :nth-child(5))`).forEach(el => el.classList.add("hidden"))
+
+ createPointsInpitForRouteEditPage()
+ }
+
function toggleStagePageRows(rows) {
let showIndex = [0, 3]
let to = rows.findIndex(el => el.querySelector("th")?.textContent.trim() == "Бонусы")
@@ -2011,7 +2026,7 @@
toggleRows(rows, to, rows.length, 1, [])
}
- function prettifyRouteStagesPage() {
+ function hideUselessRowsFromRouteStagesPage() {
let styles = `
tr.collapsed {
display: block;
@@ -2126,7 +2141,7 @@
pretty = false
location.reload()
})
-
+
header.querySelector("#enable-button").after(disableButton)
}
@@ -2143,7 +2158,7 @@
alwaysEnableCheckbox.type = "checkbox"
alwaysEnableCheckbox.id = "always-enable"
alwaysEnableCheckbox.name = "always-enable"
- alwaysEnableCheckbox.addEventListener("change", function() {
+ alwaysEnableCheckbox.addEventListener("change", function () {
if (this.checked)
removeDisabledPage()
else
@@ -2161,7 +2176,7 @@
function prettify() {
if (pretty) return
-
+
pretty = true
addDisableButton()
@@ -2169,18 +2184,18 @@
addCommonStyles()
/* SWITCH FOR DIFFERENT PAGES */
-
+
addStickyMenu()
-
+
if (isCpEditPage()) {
prettifyEditCpPage()
}
-
+
if (isRouteListPage()) {
addStageLink()
hideNonTesters()
}
-
+
if (isRouteBuildPage()) {
prettifyRouteBuildPage()
}
@@ -2188,15 +2203,15 @@
if (isRouteEditPage()) {
prettifyRouteEditPage()
}
-
+
if (isRouteStagesPage()) {
- prettifyRouteStagesPage()
+ hideUselessRowsFromRouteStagesPage()
}
}
function prettifyIfEnabled() {
if (isPageDisabled()) return
-
+
prettify()
}
@@ -2214,11 +2229,11 @@
bindDeleteButton()
return
}
-
- prettifyIfEnabled()
+
+ prettifyIfEnabled()
/* MAPS */
-
+
addClearBoth()
if (hasMap()) {