refactor
This commit is contained in:
parent
0f8af9b014
commit
e963a3e179
219
main.js
219
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("<br>", "")
|
||||
.replaceAll(/\s*Перейти к легенде.*$/gs, "")
|
||||
@ -121,7 +121,7 @@
|
||||
toDiv(altName = null, altDesc = null) {
|
||||
let div = document.createElement('div')
|
||||
let desc = altDesc ?? this.desc
|
||||
desc = desc ? "<div class='desc-icon-container' title='" + desc + "'>" +
|
||||
desc = desc ? "<div class='desc-icon-container' title='" + desc + "'>" +
|
||||
"<img class='desc-icon' src='data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnIGlkPSJzdmcyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjAwIiB3aWR0aD0iMjAwIiB2ZXJzaW9uPSIxLjAiPgogPHBhdGggaWQ9InBhdGgyMzgyIiBkPSJtMTY1LjMzIDExMy40NGExMDMuNjEgMTAzLjYxIDAgMSAxIC0yMDcuMjIgMCAxMDMuNjEgMTAzLjYxIDAgMSAxIDIwNy4yMiAweiIgdHJhbnNmb3JtPSJtYXRyaXgoLjkzNzM5IDAgMCAuOTM3MzkgNDIuMTQzIC02LjMzOTIpIiBzdHJva2Utd2lkdGg9IjAiIGZpbGw9IiNmZmYiLz4KIDxnIGlkPSJsYXllcjEiPgogIDxwYXRoIGlkPSJwYXRoMjQxMyIgZD0ibTEwMCAwYy01NS4yIDAtMTAwIDQ0LjgtMTAwIDEwMC01LjA0OTVlLTE1IDU1LjIgNDQuOCAxMDAgMTAwIDEwMHMxMDAtNDQuOCAxMDAtMTAwLTQ0LjgtMTAwLTEwMC0xMDB6bTAgMTIuODEyYzQ4LjEzIDAgODcuMTkgMzkuMDU4IDg3LjE5IDg3LjE4OHMtMzkuMDYgODcuMTktODcuMTkgODcuMTktODcuMTg4LTM5LjA2LTg3LjE4OC04Ny4xOSAzOS4wNTgtODcuMTg4IDg3LjE4OC04Ny4xODh6bTEuNDcgMjEuMjVjLTUuNDUgMC4wMy0xMC42NTMgMC43MzctMTUuMjgyIDIuMDYzLTQuNjk5IDEuMzQ2LTkuMTI2IDMuNDg0LTEyLjg3NiA2LjIxOS0zLjIzOCAyLjM2Mi02LjMzMyA1LjM5MS04LjY4NyA4LjUzMS00LjE1OSA1LjU0OS02LjQ2MSAxMS42NTEtNy4wNjMgMTguNjg3LTAuMDQgMC40NjgtMC4wNyAwLjg2OC0wLjA2MiAwLjg3NiAwLjAxNiAwLjAxNiAyMS43MDIgMi42ODcgMjEuODEyIDIuNjg3IDAuMDUzIDAgMC4xMTMtMC4yMzQgMC4yODItMC45MzcgMS45NDEtOC4wODUgNS40ODYtMTMuNTIxIDEwLjk2OC0xNi44MTMgNC4zMi0yLjU5NCA5LjgwOC0zLjYxMiAxNS43NzgtMi45NjkgMi43NCAwLjI5NSA1LjIxIDAuOTYgNy4zOCAyIDIuNzEgMS4zMDEgNS4xOCAzLjM2MSA2Ljk0IDUuODEzIDEuNTQgMi4xNTYgMi40NiA0LjU4NCAyLjc1IDcuMzEyIDAuMDggMC43NTkgMC4wNSAyLjQ4LTAuMDMgMy4yMTktMC4yMyAxLjgyNi0wLjcgMy4zNzgtMS41IDQuOTY5LTAuODEgMS41OTctMS40OCAyLjUxNC0yLjc2IDMuODEyLTIuMDMgMi4wNzctNS4xOCA0LjgyOS0xMC43OCA5LjQwNy0zLjYgMi45NDQtNi4wNCA1LjE1Ni04LjEyIDcuMzQzLTQuOTQzIDUuMTc5LTcuMTkxIDkuMDY5LTguNTY0IDE0LjcxOS0wLjkwNSAzLjcyLTEuMjU2IDcuNTUtMS4xNTYgMTMuMTkgMC4wMjUgMS40IDAuMDYyIDIuNzMgMC4wNjIgMi45N3YwLjQzaDIxLjU5OGwwLjAzLTIuNGMwLjAzLTMuMjcgMC4yMS01LjM3IDAuNTYtNy40MSAwLjU3LTMuMjcgMS40My01IDMuOTQtNy44MSAxLjYtMS44IDMuNy0zLjc2IDYuOTMtNi40NyA0Ljc3LTMuOTkxIDguMTEtNi45OSAxMS4yNi0xMC4xMjUgNC45MS00LjkwNyA3LjQ2LTguMjYgOS4yOC0xMi4xODcgMS40My0zLjA5MiAyLjIyLTYuMTY2IDIuNDYtOS41MzIgMC4wNi0wLjgxNiAwLjA3LTMuMDMgMC0zLjk2OC0wLjQ1LTcuMDQzLTMuMS0xMy4yNTMtOC4xNS0xOS4wMzItMC44LTAuOTA5LTIuNzgtMi44ODctMy43Mi0zLjcxOC00Ljk2LTQuMzk0LTEwLjY5LTcuMzUzLTE3LjU2LTkuMDk0LTQuMTktMS4wNjItOC4yMy0xLjYtMTMuMzUtMS43NS0wLjc4LTAuMDIzLTEuNTktMC4wMzYtMi4zNy0wLjAzMnptLTEwLjkwOCAxMDMuNnYyMmgyMS45OTh2LTIyaC0yMS45OTh6Ii8+CiA8L2c+Cjwvc3ZnPgo='/>" +
|
||||
"</div>" : ""
|
||||
div.innerHTML = "<label for=''>" + (altName ?? this.name ?? "") + "</label>" + "<div>" + (this.content ?? "") + "</div>" +
|
||||
@ -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()) {
|
||||
|
Loading…
Reference in New Issue
Block a user