136 lines
4.6 KiB
JavaScript
136 lines
4.6 KiB
JavaScript
const fdata = {
|
|
floor: 2,
|
|
floors: [null,null,null,null,null,null],
|
|
floors_rooms: [[], [], [], [], [], []],
|
|
inited: false,
|
|
check: async () => {
|
|
var count = 0
|
|
fdata.floors.forEach(e => e == null ? count += 1 : null)
|
|
document.querySelector('#block > p').innerHTML = `${6-count}/6 загружено...`
|
|
if (count == 0) {
|
|
await sleep(100)
|
|
mapdisplay()
|
|
removeblock()
|
|
}
|
|
},
|
|
results: (query) => {
|
|
query = query.toLowerCase()
|
|
var found = []
|
|
var foundrooms = []
|
|
fdata.floors_rooms.forEach((rooms, floor) => {
|
|
rooms.forEach(
|
|
room =>
|
|
room && room.toLowerCase().includes(query) && !foundrooms.includes(room)
|
|
? function() {found.push({r: room, f: floor+1}); foundrooms.push(room)} ()
|
|
: null
|
|
)
|
|
})
|
|
return found
|
|
}
|
|
}
|
|
|
|
const floorsopen = () => {
|
|
document.querySelector('#controls > .select').classList.toggle('hidden')
|
|
Telegram.WebApp.HapticFeedback.impactOccurred('light')
|
|
}
|
|
const fswitch = floor => {
|
|
if (floor == fdata.floor) return
|
|
fdata.floor = floor
|
|
if (!document.querySelector('#controls > .select').classList.contains('hidden')) document.querySelector('#controls > .select').classList.add('hidden')
|
|
//
|
|
document.querySelector('#controls > .select > .active').classList.remove('active')
|
|
document.querySelector('#controls > .current > span').innerHTML = `${floor} этаж`
|
|
document.querySelectorAll('#controls > .select > span')[floor-1].classList.add('active')
|
|
input.placeholder = 'Введи нужную аудиторию...'
|
|
Telegram.WebApp.HapticFeedback.impactOccurred('light')
|
|
mapdisplay()
|
|
}
|
|
|
|
const removeblock = () => {
|
|
document.querySelector('#block').remove()
|
|
}
|
|
const highlight = (room) => {
|
|
document.querySelectorAll('.highlight').forEach(e => e.classList.remove('highlight'))
|
|
var lastfound = null
|
|
document.querySelectorAll('#Аудитории > g').forEach(e => {
|
|
if (e.getAttribute('serif:id') == room) {
|
|
e.querySelector('*').classList.add('highlight')
|
|
lastfound = e
|
|
}
|
|
})
|
|
const scrollauto = (room) => {
|
|
const bbox = room.getBBox()
|
|
const svg = document.querySelector('#map > #wr > svg')
|
|
const roomCenterX = (bbox.x%svg.viewBox.baseVal.width) + bbox.width / 2
|
|
const scale = svg.clientHeight / svg.viewBox.baseVal.height
|
|
const centerX = roomCenterX * scale
|
|
const sc = centerX - map.clientWidth / 2
|
|
map.scroll({left: sc, behavior: 'smooth'})
|
|
console.log(sc, bbox,roomCenterX, centerX, scale, map.clientWidth)
|
|
|
|
}
|
|
const map = document.querySelector('#map > #wr')
|
|
if (room.includes('-')) {
|
|
const building = room.split('-')[0]
|
|
const values_to_scroll = {
|
|
1: 1.1,
|
|
2: 1.1,
|
|
3: 1.1,
|
|
4: 1.1,
|
|
5: 1.1,
|
|
6: 1.1,
|
|
7: null,
|
|
9: 10000,
|
|
8: 3.9,
|
|
10: 1.9
|
|
|
|
}
|
|
const val = values_to_scroll[building]
|
|
if (!val) {return scrollauto(lastfound)}
|
|
|
|
const sc = (map.scrollWidth - map.clientWidth) / val
|
|
map.scroll({left: sc, behavior: 'smooth'})
|
|
|
|
} else if (room.includes('Туале')) {
|
|
const sc = (map.scrollWidth - map.clientWidth) / 1.1
|
|
map.scroll({left: sc, behavior: 'smooth'})
|
|
} else {
|
|
return scrollauto(lastfound)
|
|
}
|
|
}
|
|
|
|
const mapload = async () => {
|
|
|
|
for (let i = 0; i < 6; i++) {
|
|
await fetch(`./images/${i+1}.svg`).then(
|
|
async e => {
|
|
const mp = document.createElement('div');
|
|
const svg = await e.text()
|
|
fdata.floors[i] = svg
|
|
mp.innerHTML = svg
|
|
mp.querySelectorAll('#Аудитории > g').forEach(e => {
|
|
// console.log(e.getAttributeNS('serif:id'))
|
|
fdata.floors_rooms[i].push(e.getAttribute('serif:id'))
|
|
})
|
|
await sleep(100)
|
|
fdata.check()
|
|
}
|
|
)
|
|
}
|
|
|
|
// [0,1,2,3,4,5].map(async (_, i) =>
|
|
// await fetch(`./images/${i+1}.svg`).then(async e => {fdata.floors[i] = await e.text(); fdata.check()}))
|
|
}
|
|
const mapdisplay = async () => {
|
|
const map = document.querySelector('#map > #wr')
|
|
const svg = fdata.floors[fdata.floor-1]
|
|
map.innerHTML = svg
|
|
if (!fdata.inited) {
|
|
const sc = (map.scrollWidth - map.clientWidth) / 1.1
|
|
map.scrollLeft = sc;
|
|
console.log(sc)
|
|
fdata.inited = true
|
|
}
|
|
}
|
|
|
|
|