initi.doc/docfiles/mainpage/main.js

223 lines
14 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* Генератор для главной страницы документации.
* Что тут да как?
*
* Новый блок должен состоять из тагов:
* name - где значением будет число. Все блоки сортируются по имени.
* поэтому что бы вставить блок между 01 и 02, нужно написать 01.0
*
* mainpage - таг который указывает, что этот блок будет использован для документации
* memberof - указывает предка для блока. Но в случае документации это используется,
* что бы эти блоки не попали в глобальное пространство.
*/
/**
* ### Документация по работе с GUI версии 2.9.1
* @name 01
* @mainpage
* @memberof mainpage
*
*/
/**
* ### Содержание:
* - #### [Архитектура](./arch.html)
* - #### [Наследование](./inheritance.html)
* - #### [Наследование GUI(деревом)](./gui_tree.html)
* - #### [Наследование GUI(графом)](./gui_graph.html)
* - #### [Наследование CORE(деревом)](./core_tree.html)
* - #### [Наследование CORE(графом)](./core_graph.html)
* - #### Виджеты
* - #### Датасорсы
* - #### Сигнал-Слоты
* - #### Грид
* - #### Графики
* - #### {@link ProvidersSystem Система провайдеров}:
* - - #### {@link Trees} - Менеджер для работы с деревьями
* - - #### {@link Models} - Менеджер для работы с девайсами(моделями)
* - - #### {@link ModelTypes}
* - - #### {@link GroupTypes} - Менеджер для доступа к типам компонентов
* - - #### {@link LinkTypes} - Менеджер для доступа к типам линков
* - - #### {@link Links} - Менеджер для к данным линка
* - - #### {@link EventTypes} - Менеджер для доступа к типам событий
* - - #### {@link CoreConfig}
* - - #### {@link CoreErrors} - интерфейс для получения описания ошибок, которые приходят из ядра
* - - #### {@link CoreTranslations}
* - - #### {@link UserManager} - Менеджер для доступа к настройкам доступа пользователей
* - - #### {@link Publishers} - Менеджер для доступа к настройкам доступа пользователей
* - #### Библиотеки:
* - - #### {@link std} - реализация сишной библиотеки на js.
* - - #### {@link v2} - сериализуемые типы, которыми можно обмениваться с ядром.
* - - #### {@link tools} - разного рода хелперы и инструменты.
* - #### Дополнительные материалы
* - - #### [Эдиторы](./editors.html)
* - - #### Протоколы
* - - - #### [Контекстное меню](./context.html)
* @name 02
* @mainpage
* @memberof mainpage
*
*/
/**
* ### Система провайдеров.
*
* <br>
*
* Провайдеры это механизм, который осуществляет общий доступ к любой доступной информации, которую можно получить от ядра
*
* Проще говоря, они моделируют объекты, которые существют в ядре и поддерживаются в акутальном состоянии,
*
* до тех пор, пока кто-либо ими пользуются. Как только истекает таймер жизни объекта, он вычищается.
*
* <br>
* Провайдеры запускаются перед стартом системы _**js/main.js**_ и определены в глобальной области видимости: **window.ps**.
*
* Как только происходит хендшейк и логин пользователя, начинает загружаться GUI.
*
* <br>
* #### Как пользоваться провайдерами?
*
* Внутри провайдеров проинициализирован объект {@link Platform} в переменной **ps.pl**.
*
* По-сути он моделирует платформу со стороны сервера и содержит в себе менеджеры, через которые можно связываться с ядром.
*
*
* <br>
* #### Как устроены провайдеры? (**Важно прочитать!**)
*
* Механизм провайдеров загружает данные из ядра и моделирует объект, если он изменяется во времени,
* и ядро допускает подписку на данные объекта.
*
* _К таким объектам относятся например:_
* {@link GroupTypes.GroupType GroupType},
* {@link Models.Model Model},
* {@link ModelTypes.ModelType ModelType},
* {@link Trees.GlobalTree.Node Node}.
*
* Основная идея состоит в том, что один раз загрузив данные, клиент не будет нагружать сервер запросами.
*
* Так что система провайдеров по факту кеширует в себе модели сервера, и если происходят обновления данных, то
*
* обновление происходит по частям.
*
* Вся основная работа с провайдерами начинается с точки доступа **ps.pl**. Это корневая платформа, она же мастер.
*
* Посмотреть какие есть интерфейсы у платформы можно {@link Platform тут}.
*
* Платформа содержит в себе все менеджеры, через которые можно осуществлять общение с сервером.
*
* _Например:_ {@link GroupTypes Типы компонентов}, {@link Models Менеджер моделей}, {@link Trees Менеджер деревьев}.
* <br>
* **Как корректно запрашивать и работать с данными предоставляемыми API?**
*
* - 1) У каждого менеджера как правило есть метод **get**. Этот метод, у кажого менеджера принимает свой тип данных.
* - - **get** всегда возвращает {@link tools.promise Промис}.
* - - Результатом промиса всегда будет {@link tools.reference ссылка}.
* - - **Работа ссылкой (ВАЖНО)**:
* - - - после того, как вы закончите работать с ссылкой, **ОБЯЗАТЕЛЬНО** вызвать у неё {@link tools.reference.reset reset}
* - - - если вы получили ссылку, и получили данные из объекта, вызовите у неё {@link tools.reference.reset reset}
* - - - если необходимо следить за состоянием, то сохраните ссылку в переменную и после того, как закончите работу с объектом вызовите {@link tools.reference.reset reset}
* - - - всегда вызывайте {@link tools.reference.reset reset}, если вам не нужен объект. В противном случае он не будет выгружаться из памяти.
*
* - 2) У кажого промиса есть возможность отмены. Если вам больше нет надобности ждать ответ, просто вызовите cancel.
* - 3) Будте внимательны к методам:
* - - все публичные методы и свойства будут идти без нижнего подчеркивания.
* - - все приватные методы будут и должны быть подписаны <_name>
* - - если нет нужного метода, а данные вы нашли где-то в приватных переменных, то следует разобраться почему, так. И:
* - - - а) сделать публичный метод.
* - - - б) спросить почему так сделано у автора.
* - 4) Перед началом работы стоит ознакомится с содержимым папки js/providers/system
* - - **base/base.js** - файл в котором определена машина состояний
* - - **base/item.js** - класс от которого наследуются все НЕ менеджеры
* - - **base/manager.js** - базовый класс для любого менеджера. Содержит API работы с менеджерами.
* - - **platform.js** - {@link Platform платформа}. Оно же точка доступа ps.pl.
*
*
* <br>
* Доступные менеджеры у платформы:
*
* - {@link GroupTypes} - Менеджер, который позволяет получить данные по типу компонента, определен как **ps.pl.gtm**
* - {@link LinkTypes} - Менеджер, который позволяет получить данные по типу линка, определен как **ps.pl.ltm**
* - {@link Links} - Менеджер, который позволяет получить данные по идентификатору линка, определен как **ps.pl.links**
* - {@link EventTypes} - Менеджер, который позволяет получить данные по типу события, определен как **ps.pl.etm**
* - {@link ModelTypes} - Менеджер, который позволяет узнать о содержимом модели **ps.pl.mtm**
* - {@link Models} - Менеджер, для доступа к устройствам, определен как **ps.pl.mm**
* - {@link Trees} - Менеджер, для доступа к деревьям, определен как **ps.pl.tm**
* - {@link CoreConfig} - Менеджер, для доступа к конфигу платформы, определен как **ps.pl.core_config**
* - {@link CoreErrors} - Менеджер, для доступа к конфигу платформы, определен как **ps.pl.core_errors**
* - {@link CoreTranslations} - Менеджер, для доступа к переводам, определен как **ps.pl.translations**
* - {@link UserManager} - Менеджер, для доступа к данным пользоваталей, определен как **ps.pl.users**
* - {@link Publishers} - Менеджер, для доступа к паблишерам, определен как **ps.pl.pm**
*
*
*
* <br><br>
* ### {@link Trees} Деревья:
*
* Для чего нужны деревья?
*
* Например для отображения рабочего стола, каталога моделей, схемы топологии и т.д.
*
*
*
* <br><br>
* ### {@link Publishers}. Паблишеры.
*
* Для чего нужны паблишеры?
*
* В общем случае они предназначены для отображение очень больших списков, которые могут подвесить GUI.
*
* Пример использования паблишера есть в форме результатов обнауржения.
*
*
*
* <br><br>
* ### {@link Models}. Менеджер моделей.
*
* Менеджер моделей предоставляет доступ к устройствами находящимся в системе, которые были обнаружены в сети или добавлены иным способом.
*
* Пример использования можно найти в Схеме моделей.
*
*
*
* <br><br>
* ### {@link GroupTypes}. Менеджер типов групп.
*
* Позволяет получить данные связанные с группой (cTag)
*
* Этот механизм используется в виджете для отображения атрибутов модели.
*
* А так же для отображения атрибутов компонент.
*
*
*
* <br><br>
* ### {@link LinkTypes}. Менеджер типов линков.
*
* Позволяет получить данные связанные с типом линка
*
* Этот механизм используется в виджете для связывания компонентов модели.
*
*
*
* <br><br>
* ### {@link Links}. Менеджер линков.
*
* Позволяет получить данные по линку
*
* Этот механизм используется в виджете для связывания компонентов модели.
*
* А так же получения атрибутов линка, направленности и других данных
*
*
*
* @name 04
* @mainpage
* @memberof mainpage
*
*/