cit-is-bot-backend/static/scripts/vendor.js

112 строки
3.2 KiB
JavaScript
Исходник Обычный вид История

// class Menu {
// #application;
// #root;
// #items;
//
// constructor(application) {
// this.#application = application;
// this.#root = document.querySelector('#menu');
// this.#items = this.#root.querySelectorAll('input[data-page]');
// this.#items.forEach(item => {
// item.addEventListener('click', () => this.#application.open(item.dataset.page));
// });
// };
//
// setActive(pageId) {
// this.#items.forEach(item => item.classList.remove('active'));
// this.#items.forEach(item => item.dataset.page === pageId ? item.classList.add('active') : null);
// };
// }
//
// class Application {
// static DEFAULT_PAGE = 'dashboard';
//
// #inputContainer;
// #outputContainer;
// #menu;
// #pageId;
//
// constructor() {
// this.#inputContainer = document.querySelector('#input');
// this.#outputContainer = document.querySelector('#output');
// this.#menu = new Menu(this);
// };
//
// open(pageId) {
// this.#pageId = pageId;
// document.querySelectorAll('#input [data-page]').forEach(page => page.classList.remove('active'));
// document.querySelector(`#input [data-page="${pageId}"]`).classList.add('active');
// document.querySelectorAll('#output [data-page]').forEach(page => page.classList.remove('active'));
// this.#menu.setActive(pageId);
// };
// }
// const mutableStateOf = {
// _value: null,
// constructor(value) {
// this._value = value
// },
// get value() {
// return this._value
// },
// set value(value) {
// this._value = value
// }
// }
const syncUrl = new URL('https://cit.csasq.ru/ws/sync')
const SyncDataType = {
TEXT: 0,
BOOLEAN: 1,
}
const enableSync = (url) => {
let ws = new WebSocket(url)
document
.querySelectorAll('md-outlined-text-field[data-sync]')
.forEach(element => element.addEventListener('input', () => {
const data = JSON.stringify({
id: element.id,
type: SyncDataType.TEXT,
value: element.value,
})
ws.send(data)
}))
document
.querySelectorAll('md-switch[data-sync]')
.forEach(element => element.addEventListener('change', () => {
const data = JSON.stringify({
id: element.id,
type: SyncDataType.BOOLEAN,
value: !element.hasAttribute('selected'),
})
ws.send(data)
}))
ws.onmessage = (event) => {
const data = JSON.parse(event.data)
const elements = document.querySelectorAll(`#${data.id}`)
switch (data.type) {
case SyncDataType.TEXT:
elements.forEach(element => element.value = data.value)
break
case SyncDataType.BOOLEAN:
elements.forEach(element => element.toggleAttribute('selected', data.value))
break
}
}
ws.onclose = () => () => ws = new WebSocket(url)
ws.onerror = () => {
console.log('ws_error')
}
}
document.addEventListener('DOMContentLoaded', () => enableSync(syncUrl))