модуль companies
Публикации: обзор
Модуль публикаций реализован в js/cybervela.companies.js внутри класса company. Он позволяет:
- Отображать, создавать, редактировать, скрывать, удалять и просматривать публикации в модальном окне
- Хранить данные в
localStorageчерезcore.getFromStorage/core.setToStorage - Инициализировать дефолтный набор при первом запуске
Где отображаются публикации
Публикации рендерятся в контейнерах с селектором .wrap[data-key="publications"]. Отрисовка вызывается методом renderPublications(publications, root).
Атрибуты контейнера
data-date-sort— порядок сортировки по дате:asc/desc(по умолчаниюdesc)data-quantity— ограничение числа карточек на вывод (число)data-maxlength— максимальная длина текста (по умолчанию140)data-action— еслиtrue, отображается блок действий (карандаш, корзина, глаз)
Структура записи публикации
{
"id": number, // числовой идентификатор
"title": string, // заголовок
"content": string, // текст
"date": "YYYY-MM-DD",// дата публикации
"hidden": boolean // флаг скрытия из списка
}
Жизненный цикл данных
- При загрузке модуля формируется дефолтный массив публикаций и записывается в
localStorageключомpublications, если там ещё ничего нет - Если сохранённые публикации существуют, они подменяют дефолтные
- Любые изменения (создание/редактирование/скрытие/удаление) сохраняются обратно в
localStorageчерезsavePublicationsToStorage()
Действия пользователя и обработчики
- Сортировка по дате: Клик по иконке в
.data_sort iпереключаетdata-date-sortмеждуasc/desc, перерисовывает список. Переключаются классы иконкиicon-sort-amount-asc⇄icon-sort-amount-desc. - Скрыть публикацию: Клик по
.publication_action .icon-eyeставитhidden = true, обновляет список и сохраняет состояние. - Показать вкладку со всеми публикациями: Клик по
.view_all_publicationsпереключает активный таб на.tab.all_publications. - Редактировать: Клик по
.publication_action .icon-pencilоткрывает модальное окно с префиллом полей. После сохранения вызываетсяupsertPublication(payload, pubId). - Удалить: Клик по
.publication_action .icon-binудаляет запись поid, перерисовывает список и сохраняет состояние. - Читать далее: Клик по
.publication-read-moreоткрывает модальное окно с полной публикацией. Ссылка появляется автоматически, еслиcontentбыл обрезан поdata-maxlength. - Добавить публикацию: Клик по
.add_publicationоткрывает модальное окно создания. По сохранению вызываетсяupsertPublication(payload, null).
Отрисовка публикаций
renderPublications применяет фильтр по hidden, сортирует по дате согласно data-date-sort, ограничивает количество по data-quantity и обрезает текст по data-maxlength. Для каждой публикаации может отображаться блок действий:
- Заголовок:
.publication-title - Дата:
.publication-date - Текст:
.publication-content - Действия:
.publication_actionс иконкамиicon-pencil,icon-bin,icon-eye - Ссылка «Читать далее»:
.publication-read-more
Программные точки расширения
renderPublications(publications, root?)— переотрисовать блок(и) публикацийopenPublicationModal(initial, onSave)— открыть модалку для создания/редактированияupsertPublication(data, existingId?)— создать или обновить записьsavePublicationsToStorage()— сохранить массив публикаций
Замечания по интеграции
- Для корректной работы UI требуется разметка табов и контейнеров
.wrap[data-key="publications"] - Иконки действий зависят от шрифта иконок (см.
css/icomoon.css) - Данные хранятся локально в браузере; серверных методов для публикаций в текущей реализации пока нет
