import Victor from "https://cdn.skypack.dev/victor@1.1.0"; 'use strict'; /** * @author Arsen Mirzaev Tatyano-Muradovich */ class graph { // Идентификатор HTML-элемента-оболочки (instanceof HTMLElement) #id = 'graph'; // Прочитать идентификатор HTML-элемента-оболочки (instanceof HTMLElement) get id() { return this.#id; } // Классы которые будут записаны в HTML-элементы classes = { node: { shell: ['nodes'], element: ['node'], onmouseenter: ['onmouseenter'], title: ['title'], cover: ['cover'], description: { both: ['description'], hidden: ['hidden'], shown: ['shown'] }, close: { both: ['close'], hidden: ['hidden'], shown: ['shown'] }, wrappers: { both: ['wrapper'], left: ['left'], right: ['right'] }, animation: ['animation'] }, connection: { shell: ['connections'], element: ['connection'] } }; // Оболочка (instanceof HTMLElement) #shell = document.getElementById(this.id); get shell() { return this.#shell; } // Реестр узлов #nodes = new Set; get nodes() { return this.#nodes; } // Реестр соединений #connections = new Set; get connections() { return this.#connections; } // Статус активации функций взаимодействий узлов actions = { pushing: true, pulling: true, move: { shell: true, node: true } } // Класс узла #node = class node { // Реестр входящих соединений #inputs = new Set(); // Прочитать реестр входящих соединений get inputs() { return this.#inputs } // Реестр исходящих соединений #outputs = new Set(); // Прочитать реестр исходящих соединений get outputs() { return this.#outputs } // Оператор #operator; // Прочитать оператора get operator() { return this.#operator } // HTML-элемент-оболочка #shell; // Прочитать HTML-элемент-оболочка get shell() { return this.#shell } // HTML-элемент #element; // Прочитать HTML-элемент get element() { return this.#element } // Наблюдатель #observer = null; // Прочитать наблюдатель get observer() { return this.#observer } // Реестр запрещённых к изменению параметров #block = new Set(['events']); // Прочитать реестр запрещённых к изменению параметров get block() { return this.#block } // Диаметр узла #diameter = 100; // Прочитать диаметр узла get diameter() { return this.#diameter } // Степень увеличения диаметра #increase = 0; // Прочитать степень увеличения диаметра get increase() { return this.#increase } // Величина степени увеличения диаметра #addition = 12; // Прочитать величину степени увеличения диаметра get addition() { return this.#addition } // Величина степени увеличения притягивания и отталкивания #shift = 0; // Прочитать величину степени увеличения притягивания и отталкивания get shift() { return this.#shift } /** * Обработка событий * * max - максимум итераций в процессе * current - текущая итерация в процессе */ actions = { move: { active: true, unlimit: false }, pushing: { active: true, max: 100, current: 0 }, pulling: { active: true, max: 100, current: 0 } }; /** * Отталкивания * * Реестр узлов которые обработали отталкивание с целевым узлом в потоке */ pushings = new Set; /** * Притягивания * * Реестр узлов которые обработали притягивание с целевым узлом в потоке */ pullings = new Set; /** * Расчёт времени анимации */ #timing = 'cubic-bezier(0, 1, 1, 1)'; /** * Прочитать расчёт времени анимации */ get timing() { return this.#timing } /** * Длительность анимации (в секундах) */ #duration = '3'; /** * Прочитать длительность анимации (в секундах) */ get duration() { return this.#duration } /** * Анимация (HTMLElement