new sticky menu
This commit is contained in:
		
							parent
							
								
									4ac2f39868
								
							
						
					
					
						commit
						faa369c1e1
					
				
							
								
								
									
										81
									
								
								main.js
									
									
									
									
									
								
							
							
						
						
									
										81
									
								
								main.js
									
									
									
									
									
								
							@ -170,8 +170,12 @@
 | 
				
			|||||||
    return pathNameSplit()[2]
 | 
					    return pathNameSplit()[2]
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function urlParams() {
 | 
				
			||||||
 | 
					    return new URLSearchParams(location.search)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  function getAction() {
 | 
					  function getAction() {
 | 
				
			||||||
    let params = new URLSearchParams(document.location.search)
 | 
					    let params = urlParams()
 | 
				
			||||||
    return params.get("action")
 | 
					    return params.get("action")
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -211,7 +215,7 @@
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  async function deletePoint() {
 | 
					  async function deletePoint() {
 | 
				
			||||||
    return await fetch(`https://runcity.geo.rictum.ru/api/points/${new URLSearchParams(location.search).get("cp_id")}`, {
 | 
					    return await fetch(`https://runcity.geo.rictum.ru/api/points/${urlParams().get("cp_id")}`, {
 | 
				
			||||||
      method: 'DELETE'
 | 
					      method: 'DELETE'
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@ -881,7 +885,7 @@
 | 
				
			|||||||
  
 | 
					  
 | 
				
			||||||
    if (needUpdateId) {
 | 
					    if (needUpdateId) {
 | 
				
			||||||
      let formData = new FormData()
 | 
					      let formData = new FormData()
 | 
				
			||||||
      formData.set("cp[id]", new URLSearchParams(document.location.search).get("cp_id"))
 | 
					      formData.set("cp[id]", urlParams().get("cp_id"))
 | 
				
			||||||
      formData.set("cp[number]", document.querySelector(`input[name="cp[number]"]`).value)
 | 
					      formData.set("cp[number]", document.querySelector(`input[name="cp[number]"]`).value)
 | 
				
			||||||
      formData.set("update_id", true)
 | 
					      formData.set("update_id", true)
 | 
				
			||||||
      updatePoint(formData).then(() => localStorage.removeItem(localStorageItems.NEED_UPDATE_ID))
 | 
					      updatePoint(formData).then(() => localStorage.removeItem(localStorageItems.NEED_UPDATE_ID))
 | 
				
			||||||
@ -930,14 +934,50 @@
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  function addStickyHeaderToMainList() {
 | 
					  function addStickyMenu() {
 | 
				
			||||||
    let topMenu = document.querySelector(".large-menu")
 | 
					    let links = {
 | 
				
			||||||
    let table = document.querySelector("#props")
 | 
					      "Волонтеры": "suv_comp",
 | 
				
			||||||
    if (topMenu) {
 | 
					      "Контрольные пункты": "cp_mgmt",
 | 
				
			||||||
      let caption = document.createElement("caption")
 | 
					      "Добавить новый КП": "cp_mgmt/?action=edit",
 | 
				
			||||||
      caption.appendChild(topMenu)
 | 
					      "Маршруты": "route_mgmt",
 | 
				
			||||||
      table.prepend(caption)
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    let catLinks = {
 | 
				
			||||||
 | 
					      "Редактор маршрута": (catId) => `route_mgmt?action=edit&cat_id=${catId}`,
 | 
				
			||||||
 | 
					      "Конструктор маршрута": (catId) => `route_mgmt/?action=stages&cat_id=${catId}`,
 | 
				
			||||||
 | 
					      "Карта": (catId) => `route_mgmt?action=map&cat_id=${catId}`,
 | 
				
			||||||
 | 
					      "Этапы": (catId) => `route_mgmt/?action=stages&cat_id=${catId}`,
 | 
				
			||||||
 | 
					      "Легенда": (catId) => `route_mgmt?action=preview&cat_id=${catId}&locale_id=ru`,
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let menuContainer = document.createElement("nav")
 | 
				
			||||||
 | 
					    menuContainer.classList.add("sticky-menu")
 | 
				
			||||||
 | 
					    let menu = document.createElement("menu")
 | 
				
			||||||
 | 
					    menuContainer.appendChild(menu)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let catId = urlParams().get("cat_id")
 | 
				
			||||||
 | 
					    if (catId !== null) {
 | 
				
			||||||
 | 
					      for (const [label, href] of Object.entries(catLinks)) {
 | 
				
			||||||
 | 
					        links[label] = href(catId)
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (const [label, href] of Object.entries(links)) {
 | 
				
			||||||
 | 
					      let menuItem = document.createElement("li")
 | 
				
			||||||
 | 
					      let link = document.createElement("a")
 | 
				
			||||||
 | 
					      link.href = `/${getCompetition()}/${href}`
 | 
				
			||||||
 | 
					      link.innerText = label
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      menuItem.appendChild(link)
 | 
				
			||||||
 | 
					      menu.appendChild(menuItem)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    document.querySelector("#header").after(menuContainer)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function addClearBoth() {
 | 
				
			||||||
 | 
					    let clearEl = document.createElement("div")
 | 
				
			||||||
 | 
					    clearEl.style.clear = "both"
 | 
				
			||||||
 | 
					    document.body.appendChild(clearEl)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  function initMapbox() {
 | 
					  function initMapbox() {
 | 
				
			||||||
@ -1370,12 +1410,24 @@
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  let styles = `
 | 
					  let styles = `
 | 
				
			||||||
    #props caption {
 | 
					    .sticky-menu {
 | 
				
			||||||
      position: sticky;
 | 
					      position: sticky;
 | 
				
			||||||
      top: 0;
 | 
					      top: 0;
 | 
				
			||||||
 | 
					      z-index: 9999;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
      .large-menu {
 | 
					      menu {
 | 
				
			||||||
 | 
					        display: flex;
 | 
				
			||||||
 | 
					        gap: .3rem;
 | 
				
			||||||
        background: white;
 | 
					        background: white;
 | 
				
			||||||
 | 
					        font-size: 1.2rem;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        li {
 | 
				
			||||||
 | 
					          list-style-type: none;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          &:not(:last-child)::after {
 | 
				
			||||||
 | 
					            content: " | "
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1723,12 +1775,11 @@
 | 
				
			|||||||
    return
 | 
					    return
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  addClearBoth()
 | 
				
			||||||
  initMapbox()
 | 
					  initMapbox()
 | 
				
			||||||
  addFullscreenButton()
 | 
					  addFullscreenButton()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (isListCpPage()) {
 | 
					  addStickyMenu()
 | 
				
			||||||
    addStickyHeaderToMainList()
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (isRouteBuildPage() || isRouteMapPage()) {
 | 
					  if (isRouteBuildPage() || isRouteMapPage()) {
 | 
				
			||||||
    centerMap()
 | 
					    centerMap()
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user