/** * @file index.js * @brief Основной файл диаграммного редактора, содержит инициализацию канваса, загрузку диаграмм и подключение модулей UI */ import { moveEvtMobileFix } from './infrastructure/move-evt-mobile-fix.js'; import { CanvasSmbl } from './infrastructure/canvas-smbl.js'; import { moveScaleApplay } from './infrastructure/move-scale-applay.js'; import { evtRouteApplay } from './infrastructure/evt-route-applay.js'; import { tipShow, uiDisable } from './ui/ui.js'; import { srvGet } from './diagram/dgrm-srv.js'; import { deserialize } from './diagram/dgrm-serialization.js'; import { copyPastApplay, groupSelectApplay } from './diagram/group-select-applay.js'; import { shapeTypeMap } from './shapes/shape-type-map.js'; import './ui/menu.js'; import './ui/shape-menu.js'; // @ts-ignore /** @type {import('./infrastructure/canvas-smbl.js').CanvasElement} */ /** @brief Элемент канваса */ const canvas = document.getElementById('canvas'); /** @brief Данные канваса и отображение фигур */ canvas[CanvasSmbl] = { data: { position: { x: 0, y: 0 }, scale: 1, cell: 24 }, shapeMap: shapeTypeMap(canvas) }; moveEvtMobileFix(canvas.ownerSVGElement); evtRouteApplay(canvas.ownerSVGElement); copyPastApplay(canvas); groupSelectApplay(canvas); // groupSelectApplay must go before moveScaleApplay moveScaleApplay(canvas); /** @type { import('./ui/menu').Menu } */(document.getElementById('menu')).init(canvas); /** @type { import('./ui/shape-menu').ShapeMenu } */(document.getElementById('menu-shape')).init(canvas); /** @brief Загружает диаграмму по ссылке, если указан параметр k */ let url = new URL(window.location.href); if (url.searchParams.get('k')) { uiDisable(true); srvGet(url.searchParams.get('k')).then(appData => { url.searchParams.delete('k'); if (deserialize(canvas, appData)) { tipShow(false); } history.replaceState(null, null, url); uiDisable(false); url = null; }); } else { url = null; }