Ядро (cybervela.js)
Обзор
Класс `cybervela` — это основной контроллер фронтенд-приложения, который управляет и инициализирует модули, обрабатывает запросы к серверу, хранит сессионные данные, уведомления, а также предоставляет вспомогательные методы для работы с DOM, cookie и localStorage.
Архитектура и назначение
Класс cybervela реализует паттерн "ядро приложения" и служит центральной точкой управления фронтенд-логикой. Он отвечает за инициализацию и загрузку модулей, обработку событий, работу с сессией, хранение данных, AJAX-запросы и вспомогательные операции. Все модули (forms, modals, sliders, catalogs, userprofile) подключаются динамически через конструктор.
Конструктор и инициализация
- Принимает строку с перечнем модулей, объект конфигурации и колбэк
onLoad. - Объединяет конфиг по умолчанию (
requeststo— URL для AJAX-запросов) с переданным. - Создаёт экземпляры
notifyиutilsдля уведомлений и утилит. - Добавляет глобальные обработчики событий (например, для форм с классом
.xhr). - Загружает сессию пользователя через
loadSession, после чего динамически подключает и инициализирует указанные модули, добавляя их в массивmodules. - Каждый модуль получает ссылку на ядро (
this), что позволяет им взаимодействовать с приложением.
Основные поля класса
- version — версия приложения.
- prefix — префикс для ключей cookie и localStorage.
- locale — локализация (по умолчанию RU_ru).
- modules — массив подключённых модулей.
- unloaded — счётчик незагруженных модулей (используется для отслеживания загрузки).
- binds — объект для хранения привязок элементов к функциям (механизм расширяемый).
- config — объект конфигурации (например, URL для AJAX-запросов).
- notify — экземпляр класса уведомлений.
- utils — экземпляр вспомогательных утилит.
- onload — колбэк, вызываемый после полной инициализации.
Механизм загрузки и инициализации модулей
- Модули перечисляются строкой через запятую и подключаются динамически.
- Для каждого модуля создаётся экземпляр, который добавляется в
this.modulesи становится доступен как поле ядра (this.forms,this.modalsи т.д.). - После загрузки сессии вызывается
moduleIsLoadedдля отслеживания статуса загрузки.
Работа с сессией, cookie и localStorage
setSessionToken(token, expiration)— сохраняет токен сессии в cookie с префиксом и временем жизни.getSessionToken()— получает токен сессии из cookie.dropSessionToken()— удаляет токен сессии из cookie.setToStorage(key, val)— сохраняет значение в localStorage с префиксом.getFromStorage(key)— получает значение из localStorage по ключу с префиксом.getCookie(name)— получает cookie по имени.loadSession(callback)— отправляет запрос на сервер для загрузки сессионных данных, обновляет токен и вызывает колбэк.
AJAX-запросы и взаимодействие с сервером
request(settings, callback)— универсальный AJAX-запрос, обрабатывает ошибки и вызывает колбэк при успехе.requestBack(settings, callback)— отправляет запрос на сервер по адресу из конфига, автоматически добавляет токен сессии, обрабатывает ошибки и выводит их в формы и через notify.
Вспомогательные методы
uniqid(prefix, random)— генерирует уникальный идентификатор (например, для элементов DOM).timeToSec(time)— переводит строку времениhh:mm:ssв секунды.decount(timer, callback, time)— обратный отсчёт: уменьшает значение в элементе, по окончании вызывает колбэк.makeContactLink(contact)— преобразует строку контакта (телефон, email, Telegram, ссылка) в корректную HTML-ссылку (<a>) или возвращает<span>с текстом, если формат не распознан. Поддерживает телефоны, email, Telegram-юзернеймы и ссылки, автоматически определяя тип контакта.
Механизм привязок (binds)
bind(elem, callback)— позволяет привязать функцию к элементу (расширяемый механизм для реактивных обновлений).updateBinds()— вызывает все привязанные функции для актуализации состояния элементов.
Обработка событий
addListeners()— добавляет глобальный обработчик отправки форм с классом.xhr. Перехватывает submit, отправляет данные черезrequestBack, вызывает колбэк из data-атрибута формы.onUpdateDOM()— вызывает методupdate()у всех модулей (например, для обновления DOM после изменений).
Пример использования
<script type="module">
import { cybervela } from '/js/cybervela.js';
var application;
jQuery(document).ready(() => {
// Initialize application
application = new cybervela('forms, modals, sliders, userprofile, catalogs', {}, () => {
jQuery('.curtain').fadeOut();
});
window.application = application;
});
</script>
