diff --git a/conf.example.json b/conf.example.json new file mode 100644 index 0000000..3983d28 --- /dev/null +++ b/conf.example.json @@ -0,0 +1,31 @@ +{ + "tags": { + "allowUnknownTags": true + }, + "recurseDepth": 10, + "source": { + "include": ["docfiles"], + "include_2": ["../../develop/first/gui/js/providers"], + "include_3": ["../../develop/first/gui/js"], + "core": ["../../develop/first/core"], + "includePattern": ".+\\.js(doc|x)?$", + "excludePattern": "(^|\\/|\\\\)_" + }, + "opts" : { + "template": "templates/jaguarjs-jsdoc", + "encoding": "utf8", + "readme": "", + "recurse": true, + "destination": "example-docs/" + }, + "plugins": [ + "plugins/markdown" + ], + "templates": { + "cleverLinks": false, + "monospaceLinks": false, + "default": { + "outputSourceFiles": true + } + } +} diff --git a/conf2.json b/conf2.json new file mode 100644 index 0000000..899ab33 --- /dev/null +++ b/conf2.json @@ -0,0 +1,31 @@ +{ + "tags": { + "allowUnknownTags": true + }, + "recurseDepth": 10, + "source": { + "include": ["docfiles"], + "include_2": ["../../develop/first/gui/js/providers"], + "include_3": ["../../develop/first/gui/js"], + "core": ["../../develop/first/core"], + "includePattern": ".+\\.js(doc|x)?$", + "excludePattern": "(^|\\/|\\\\)_" + }, + "opts" : { + "template": "templates/initi2", + "encoding": "utf8", + "readme": "", + "recurse": true, + "destination": "docs/" + }, + "plugins": [ + "plugins/markdown" + ], + "templates": { + "cleverLinks": false, + "monospaceLinks": false, + "default": { + "outputSourceFiles": true + } + } +} diff --git a/docfiles/custom/context.js b/docfiles/custom/context.js new file mode 100644 index 0000000..3e4ab78 --- /dev/null +++ b/docfiles/custom/context.js @@ -0,0 +1,142 @@ +/** + * ### Документация по работе с GUI версии 2.9.1 + * + * @name 01 + * @context + * @memberof context + */ + +/** + * ### Контекстное меню + * + *
+ * + * #### Протокол + + | type | command | data | + |------------- |------------------------------ |----------------------------------------------------------------------------- | + | GUI => CORE | requestContext | | + | CORE => GUI | responseContext | result: List(VariableContainer)
proxyData: VariableContainer | + | GUI => CORE | executeContextAction | action: String,
data: VariableContainer,
proxyData: VariableContainer | + | CORE => GUI | executeContextActionResponse | wizard: Boolean,
result: Map(Integer, Integer) | + +
+ + #### Описание содержимого responseContext.result + + | name | type | description | + |---------- |------------------- |-------------------------------------------------------------------- | + | id | String | Идентификатор, пункта меню | + | type | Integer | Тип пункта меню | + | parentId | String | Родительский ПМ, если его нет, то "" | + | name | String | Локализация названия | + | options | VariableContainer | Данные, которые сопутствую ПМ, в зависимости от контекста действия | + +
+ + + #### Описание типов, пунктов контекстного меню + + | id | name | descriptions | options | + |---- |----------- |--------------------------------------------------------------------------------------------------- |------------------------------------------------------------------------------ | + | 0 | group | пункт меню (ПМ), который содержит в себе подпункты | VariableContainer[] | + | 1 | simple | ПМ, который исполняет запрос к ядру (executeAction) | VariableContainer[] | + | 2 | guiAction | действие которое исполняется со стороны GUI. | Опции, специфичные для id | + | 3 | dialog | ПМ, который откроет диалог, который необходимо заполнить и исполнит запрос к ядру (executeAction) | VariableContainer [
type: String,
data: VariableContainer
] | + | 4 | widget | ПМ, который любой виджет | VariableContainer [
type: String,
data: VariableContainer
] | + + * #### Пример ответа + * + * ``` +VariableContainer [ + errCode : 0, + proxyData : VariableContainer [ + nodeIds : Set(Integer) [ + 0 + ] + ], + result : List(VariableContainer) [ + VariableContainer [ + options : VariableContainer [ + + ], + id : "model", + parentId : "", + type : 2, + name : "Модель" + ], + VariableContainer [ + options : VariableContainer [ + data : VariableContainer [ + label : "Введите название для нового контейнера", + formVC : VariableContainer [ + data : VariableContainer [ + rules : List(VariableContainer) [ + VariableContainer [ + id : "name", + message : "Имя не может быть пустым", + validator : "input.size() > 0" + ] + ], + data : List(VariableContainer) [ + VariableContainer [ + value : "", + id : "name", + title : "Название", + viewer : VariableContainer [ + data : VariableContainer [ + vc : true + ], + type : "LabelString" + ], + editor : "Textbox" + ] + ] + ], + type : "Form" + ], + windowOptions : VariableContainer [ + width : VariableContainer [ + type : 0, + data : 300 + ], + height : VariableContainer [ + type : 0, + data : 160 + ] + ] + ], + type : "VariablesForm" + ], + id : "addContainer", + parentId : "", + type : 3, + name : "Добавить контейнер" + ], + VariableContainer [ + options : VariableContainer [ + + ], + id : "shortcutTopology", + parentId : "", + type : 1, + name : "Создать ярлык на рабочем столе" + ], + VariableContainer [ + options : VariableContainer [ + + ], + id : "inventory", + parentId : "", + type : 1, + name : "Синхронизация инвентаря" + ] + ], + command : "responseContext" +] + * ``` + * + * @name 02 + * @context + * @memberof context + */ diff --git a/docfiles/custom/editors.js b/docfiles/custom/editors.js new file mode 100644 index 0000000..67599da --- /dev/null +++ b/docfiles/custom/editors.js @@ -0,0 +1,1593 @@ +/** + * ### Документация по эдиторам + * @name 01 + * @editors + * @memberof editors + * + browserNodeSelector.js + componentID.js + componentIDS.js + componentType.js + dataStructure.js + dynamicForm.js + eventTypebox.js + filterEditor.js + gridRowSelecter.js + list.js + listSelector.js + panel.js + processorEditor.js + rightsSelector.js + rightsTree.js + selectGroup.js + tileContainer.js + tiles.js + toggleButton.js + tripleStateCheckbox.js + */ + +/** + * #### Содержание: + * - ##### Текстовые + * - - ##### [Textbox](#textbox) + * - - ##### [Addressbox](#addressbox) + * - - ##### [Textarea](#textarea) + * - - ##### [Password](#password) + * - - ##### [Localebox](#localebox) + * - - ##### [CodeEditorbox](#code-editorbox) + * - ##### Булевые + * - - ##### [Switchbox](#switchbox) + * - - ##### [Checkbox](#checkbox) + * - ##### Числовые + * - - ##### [Floatbox](#floatbox) + * - - ##### [UUIDbox](#uuidbox) + * - - ##### [Timebox](#timebox) + * - - ##### [TimeDiffbox](#time-diffbox) + * - ##### Популярные + * - - ##### [Form](#form) + * - - ##### [GridEditor](#grid-editor) + * - - ##### [Combobox](#combobox) + * - - ##### [Address](#address) + * - - ##### [Ipbox](#ipbox) + * - - ##### [Oidbox](#oidbox) + * - - ##### [CustomStructureEditor](#custom-structure-editor) + * - ##### Другие + * - - ##### [Colorpicker](#colorpicker) + * - - ##### [IconEditor](#icon-editor) + * - - ##### [PresentationPicker](#presentation-picker) + * - - ##### [Slider](#slider) + * - ##### Не классифицированные + * - - ##### [TreeEditor](#tree-editor) + * - - ##### [DialogEditor](#dialog-editor) + * - - ##### [ProcessorEditor](#processor-editor) + * - ##### Устаревшие + * - - ##### [ComponentSelector](#component-selector) - устаревший (будет переработан) + * - - ##### [ComponentFilterEditor](#сomponent-filter-editor) - устаревший (будет удален) + * - - ##### [AttributeSelecter](#attribute-selecter) - устаревший (будет переработан) + * - - ##### [AttributeSetter](#attribute-setter) - устаревший (будет переработан) + * + * @name 01 + * @editors + * @memberof editors + */ + +/** + * ### Textbox + * *Поле для ввода текста* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "Textbox" + * data: VariableContainer [ + * placeholder: String + * ] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |------------- |----------- |---------------------- |--------------- |-------------------------------------------------------------------- | + * | enable | false | Boolean | true | Включение/выключение эдитора | + * | width | false | String/Integer/Float | "100%" | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + * | height | false | String/Integer/Float | 30 | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + * | placeholder | false | String | "" | Задает текст, который будет подставлен, без введенного текста | + * + *
+ * + * **Значение** + * ``` + * String + * ``` + * + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### Addressbox + * *Поле для ввода адреса* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "Addressbox" + * data: VariableContainer [ + * placeholder: String + * ] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |------------- |----------- |---------------------- |--------------- |-------------------------------------------------------------------- | + * | enable | false | Boolean | true | Включение/выключение эдитора | + * | width | false | String/Integer/Float | "100%" | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + * | height | false | String/Integer/Float | 30 | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + * | placeholder | false | String | "" | Задает текст, который будет подставлен, без введенного текста | + * + *
+ * + * **Значение** + * ``` + * Address + * ``` + * + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### Password + * *Поле для ввода пароля* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "Password" + * data: VariableContainer [] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |------------- |----------- |---------------------- |--------------- |-------------------------------------------------------------------- | + * | enable | false | Boolean | true | Включение/выключение эдитора | + * | width | false | String/Integer/Float | "100%" | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + * | height | false | String/Integer/Float | 30 | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + * + *
+ * + * **Значение** + * ``` + * String + * ``` + * + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### Localebox + * *Поле для ввода локализованного текста* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "Localebox" + * data: VariableContainer [ + * placeholder: String + * ] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |------------- |----------- |---------------------- |--------------- |-------------------------------------------------------------------- | + * | enable | false | Boolean | true | Включение/выключение эдитора | + * | width | false | String/Integer/Float | "100%" | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + * | height | false | String/Integer/Float | 30 | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + * | placeholder | false | String | "" | Задает текст, который будет подставлен, без введенного текста | + * + *
+ * + * **Значение** + * ``` + * VariableContainer [ en: "", ru: "", ... "anyLng": ""] + * ``` + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### CodeEditorbox + * *Редактор для ввода кода* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "CodeEditorbox" + * data: VariableContainer [ + * enableHighlight: Boolean, + * highlightPlugin: String, + * enableTransition: Boolean + * ] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |------------------ |----------- |---------------------- |--------------- |-------------------------------------------------------------------- | + * | enable | false | Boolean | true | Включение/выключение эдитора | + * | width | false | String/Integer/Float | "100%" | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + * | height | false | String/Integer/Float | 200 | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + * | enableHighlight | false | Boolean | false | Подключает подсветку кода | + * | highlightPlugin | false | String | "smola" | Устанавливает плагин, который будет осуществлять подсветку | + * | enableTransition | false | Boolean | false | Будет ли меняться задний фон при наведении | + * + *
+ * + * **Значение** + * ``` + * String + * ``` + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### Switchbox + * *Переключатель. Редактор для булевого значения* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "Switchbox" + * data: VariableContainer [] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |------------------ |----------- |---------------------- |--------------- |-------------------------------------------------------------------- | + * | enable | false | Boolean | true | Включение/выключение эдитора | + * | width | false | String/Integer/Float | 50 | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + * | height | false | String/Integer/Float | 200 | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + * + *
+ * + * **Значение** + * ``` + * Boolean + * ``` + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### Checkbox + * *Переключатель. Редактор для булевого значения* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "Checkbox" + * data: VariableContainer [] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |------------------ |----------- |---------------------- |--------------- |-------------------------------------------------------------------- | + * | enable | false | Boolean | true | Включение/выключение эдитора | + * | width | false | String/Integer/Float | 20 | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + * | height | false | String/Integer/Float | 20 | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + * + *
+ * + * **Значение** + * ``` + * Boolean + * ``` + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### Combobox + * *Выпадающий список. Редактор для выбора из списка* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "Combobox" + * data: VariableContainer [ + * data: Deque(String)[], + * useEnum: false, + * enumList: null, + * maxPopupHeight: Integer, + * popupWidth: Integer, + * placeholder: String, + * viewType: String | VariableContainer, + * ] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |---------------- |----------- |-------------------------- |----------------- |-------------------------------------------------------------------- | + * | enable | false | Boolean | true | Включение/выключение эдитора | + * | width | false | String/Integer/Float | 100% | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + * | height | false | String/Integer/Float | 200 | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + * | data | true | Deque(String) | Deque(String)[] | Список пунктов выпадающего списка | + * | maxPopupHeight | false | Integer | 100 | Максимальная высота, всплывающего окна, содержащего список | + * | popupWidth | false | Integer | -1 | Ширина всплывающего окна, если задан -1, то равно ширине редактора | + * | placeholder | false | String | "" | Текст заглушка | + * | viewType | false | String/VariableContainer | LabelString | Вьювер, отображающий текст | + * | useEnum | false | Boolean | false | Включает подмену типа, из заданного списка | + * | enumList | false | Deque(Any) | null | Список замен, по пунктам | *
+ * + *
+ * + * **Значение** + * ``` + * // Если useEnum == false + * Integer + * // Если useEnum == true, тогда + * // Deque(Type) enumList + * Type + * ``` + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### Floatbox + * *Редактор для ввода значения с плавающей запятой* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "Floatbox" + * data: VariableContainer [ + * precision: Integer + * ] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |------------------ |----------- |---------------------- |--------------- |-------------------------------------------------------------------- | + * | enable | false | Boolean | true | Включение/выключение эдитора | + * | width | false | String/Integer/Float | 50 | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + * | height | false | String/Integer/Float | 200 | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + * | precision | false | Integer | 5 | Задает кол-во числе после точки | + * | step | false | Integer | 1 | Надо узнать у автора, что это такое | + * + *
+ * + * **Значение** + * ``` + * Float + * ``` + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### UUIDbox + * *Ввод UUID* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "UUIDbox" + * data: VariableContainer [] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |------------------ |----------- |---------------------- |--------------- |-------------------------------------------------------------------- | + * | enable | false | Boolean | true | Включение/выключение эдитора | + * | width | false | String/Integer/Float | 50 | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + * | height | false | String/Integer/Float | 200 | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + * + *
+ * + * **Значение** + * ``` + * UUID + * ``` + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### Timebox + * *Выбор времени (календарь с часами)* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "Timebox" + * data: VariableContainer [ + * mode: Integer + * ] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |------------------ |----------- |---------------------- |--------------- |-------------------------------------------------------------------- | + * | enable | false | Boolean | true | Включение/выключение эдитора | + * | width | false | String/Integer/Float | 50 | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + * | height | false | String/Integer/Float | 200 | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + * | mode | false | Integer | 5 | Задает кол-во числе после точки | + * + *
+ * + * **Значение** + * ``` + * Time + * ``` + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### TimeDiffbox + * *Ввод временного интервала* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "TimeDiffbox" + * data: VariableContainer [] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |------------------ |----------- |---------------------- |--------------- |-------------------------------------------------------------------- | + * | enable | false | Boolean | true | Включение/выключение эдитора | + * | width | false | String/Integer/Float | 50 | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + * | height | false | String/Integer/Float | 200 | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + * + *
+ * + * **Значение** + * ``` + * TimeDiff + * ``` + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### ComponentSelector + * *Выбор типа компонента* + * + * _**устаревший** - необходима переработка_ + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "ComponentSelector" + * data: VariableContainer [] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |------------------ |----------- |---------------------- |--------------- |-------------------------------------------------------------------- | + * | enable | false | Boolean | true | Включение/выключение эдитора | + * | width | false | String/Integer/Float | 50 | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + * | height | false | String/Integer/Float | 200 | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + * + *
+ * + * **Значение** + * ``` + * ModelType + * ``` + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### ComponentFilterEditor + * *Редактор фильтра по идентификатору фильтра* + * + * _**устаревший** - вместо него требуется использовать связку DialogEditor и TreeEditor_ + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "ComponentFilterEditor" + * data: VariableContainer [ + * nodeId: Integer, + * isSingleComponentMode: Boolean, + * componentType: ModelType + * ] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |------------------ |----------- |---------------------- |--------------- |-------------------------------------------------------------------- | + * | enable | false | Boolean | true | Включение/выключение эдитора | + * | width | false | String/Integer/Float | 50 | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + * | height | false | String/Integer/Float | 200 | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + * | nodeId | true | Integer | null | идентификатор ноды в дереве flt | + * | isSingleComponentMode | false | Boolean | false | жестко задан тип компонента | + * | componentType | false | ModelType | null | тип компонента | + * + *
+ * + * **Значение** + * ``` + * Integer + * ``` + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### Address + * *Поле, в которое можно перетащить модель* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "Address" + * data: VariableContainer [ + * onlyContainers: Boolean, + * helper: String + * ] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |------------------ |----------- |---------------------- |--------------- |-------------------------------------------------------------------- | + * | enable | false | Boolean | true | Включение/выключение эдитора | + * | width | false | String/Integer/Float | 50 | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + * | height | false | String/Integer/Float | 200 | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + * | onlyContainers | false | Boolean | false | указвает, что выбранный элемент может быть только контейнером | + * | helper | false | String | "" | перевод для подсказки | + * + *
+ * + * **Значение** + * ``` + * Address + * ``` + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### Ipbox + * *Ввод IP адреса* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "Ipbox" + * data: VariableContainer [ + * allowMultiple: Boolean + * ] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |------------------ |----------- |---------------------- |--------------- |-------------------------------------------------------------------- | + * | enable | false | Boolean | true | Включение/выключение эдитора | + * | width | false | String/Integer/Float | 50 | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + * | height | false | String/Integer/Float | 200 | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + * | allowMultiple | false | Boolean | true | Позволяет задавать несколько адресов | + * + *
+ * + * **Значение** + * ``` + * String + * ``` + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### Oidbox + * *Редактор для ввода Oid'a* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "Oidbox" + * data: VariableContainer [ + * maxPopupHeight: Integer, + * maxHistorySize: Integer + * ] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |------------------ |----------- |---------------------- |--------------- |-------------------------------------------------------------------- | + * | enable | false | Boolean | true | Включение/выключение эдитора | + * | width | false | String/Integer/Float | 50 | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + * | height | false | String/Integer/Float | 200 | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + * | maxPopupHeight | false | Integer | 200 | Позволяет задавать высоту выпадающего окна | + * | maxHistorySize | false | Integer | 14 | Ограничение на память истории | + * + *
+ * + * **Значение** + * ``` + * Oid + * ``` + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### Colorpicker + * *Редактор, позволяющий выбрать цвет* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "Colorpicker" + * data: VariableContainer [ + * popupType: Integer + * ] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |------------------ |----------- |---------------------- |--------------- |-------------------------------------------------------------------- | + * | enable | false | Boolean | true | Включение/выключение эдитора | + * | width | false | String/Integer/Float | 50 | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + * | height | false | String/Integer/Float | 200 | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + * | popupType | false | Integer | 0 | 0 - hsv picker, 1 - RGB Fields, 2 - color palette | + * + *
+ * + * **Значение** + * ``` + * String + * ``` + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### Textarea + * *Редактор текста* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "Textarea" + * data: VariableContainer [] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |------------------ |----------- |---------------------- |--------------- |-------------------------------------------------------------------- | + * | enable | false | Boolean | true | Включение/выключение эдитора | + * | width | false | String/Integer/Float | 50 | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + * | height | false | String/Integer/Float | 74 | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + * + *
+ * + * **Значение** + * ``` + * String + * ``` + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### IconEditor + * *Редактор иконок* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "IconEditor" + * data: VariableContainer [ + * enabledKinds: Deque(String), + * iconType: Integer, + * background: Integer + * ] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |------------------ |----------- |---------------------- |--------------- |-------------------------------------------------------------------- | + * | enable | false | Boolean | true | Включение/выключение эдитора | + * | width | false | String/Integer/Float | 50 | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + * | height | false | String/Integer/Float | "auto" | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + * | enabledKinds | false | Deque(String) | Deque(String)[] | | + * | iconType | false | Integer | 0 | | + * | background | false | Integer | 1 | | + * + *
+ * + * **Значение** + * ``` + * String + * ``` + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### PresentationPicker + * ### PresentationPicker + * *Позволяет выбрать виджет, эдитор и вьювер* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "PresentationPicker" + * data: VariableContainer [ + * position: String, + * colsCount: Float, + * popupHeight: Integer, + * allowedWidgets: Boolean / Deque(String), + * allowedViewers: Boolean / Deque(String), + * allowedEditors: Boolean / Deque(String), + * idOnly: Boolean + * ] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |---------------- |----------- |----------------------- |------------------ |--------------------------------------------------------------------- | + * | width | false | String/Integer/Float | "100%" | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + * | height | false | String/Integer/Float | 200 | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + * | position | false | String | innerRightBottom | Задает политику позиционирования для выпадающего меню | + * | colsCount | false | Float | 1.5 | | + * | popupHeight | false | Integer | 300 | Высота выпадающего списка | + * | allowedWidgets | false | Deque(String)/Boolean | true | Будут ли отображены виджеты (или те виджеты, которые будут указаны) | + * | allowedViewers | false | Deque(String)/Boolean | true | Будут ли отображены вьюверы | + * | allowedEditors | false | Deque(String)/Boolean | true | Будут ли отображены эдиторы | + * | idOnly | false | Boolean | false | | + *
+ * + * **Значение** + * ``` + * String + * ``` + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### Slider + * *Эдитор для отображения ползунка* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "Slider" + * data: VariableContainer [ + * isVertical: Boolean, + * sliderWidth: Integer, + * lineWidth: Integer, + * valueMin: Integer, + * valueMax: Integer, + * tooltip: String + * ] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |------------- |----------- |---------------------- |--------------- |-------------------------------------------------------------------- | + * | width | false | String/Integer/Float | 25 | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + * | height | false | String/Integer/Float | "100%" | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + * | isVertical | false | Boolean | true | | + * | sliderWidth | false | Integer | 15 | Ширина ползунка | + * | lineWidth | false | Integer | 4 | Толщина линии | + * | valueMin | false | Integer | 0 | Минимальное допустимое значение | + * | valueMax | false | Integer | 100 | Максимальное допустимое значение | + * | tooltip | false | String | "" | Подсказка | *
+ * + *
+ * + * **Значение** + * ``` + * Integer + * ``` + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### GridEditor + * *Эдитор для отображения редактируемой таблицы* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "GridEditor" + * data: VariableContainer [ + * useHeaderLabelTranslationPrefix: Boolean, + * columns: Deque(VariableContainer), + * rootFormParameters: VariableContainer, + * allowAdd: Boolean, + * allowRemove: Boolean, + * allowEdit: Boolean, + * idColumn: String, + * isMultiple: Boolean, + * popupWidth: Integer + * ] + * ] + * ``` + * + *
+ * + * **Опции** + *| name | mandatory | type | default value | description | + *|--------------------------------- |----------- |-------------------------- |---------------------------- |-------------------------------------------------------------------- | + *| width | false | String/Integer/Float | 25 | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + *| height | false | String/Integer/Float | 200 | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + *| useHeaderLabelTranslationPrefix | false | Boolean | true | Задает префикс, для перевода заголовков | + *| columns | true | Deque(VariableContainer) | Deque(VariableContainer)[] | Описание колонок для таблицы | + *| rootFormParameters | false | VariableContainer | VariableContainer [] | Описание параметров, формы редактирования строки в таблице | + *| allowAdd | false | Boolean | true | Можно ли добавлять строчку в таблицу | + *| allowRemove | false | Boolean | true | Можно ли добавлять строчку в таблицу | + *| allowEdit | false | Boolean | true | Можно ли редактировать строчку в таблицу | + *| idColumn | false | String | "" | Указывает, какая колонка является идентификатором | + *| isMultiple | false | Boolean | false | Может ли быть строчка многострочной | + *| popupWidth | false | Integer | 400 | Ширина окна редактирования строки | + * + *
+ * + * _**Описание параметров для Form.columns**_ + * + *
+ * + * **Представление** + * ``` + * Deque(VariableContainer) [ + * VariableContainer [ + * id: String, + * type: Type, + * label: String, + * optional: Boolean, + * showOptionalCheckbox: Boolaen, + * useInCellEditor: Boolean, + * editor: String/VariableContainer, + * viewer: String/VariableContainer, + * value: Type, + * visible: Boolean, + * ] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |---------------------- |----------- |-------------------------- |--------------- |-------------------------------------------------------------------- | + * | id | true | String | undefined | Идентификатор колонки таблицы | + * | type | true | Type | undefined | Тип значения, который должен быть в этой колонке | + * | label | true | String | undefined | Название колонки | + * | optional | false | Boolean | false | Является ли колонка, необязательной к заполнению | + * | showOptionalCheckbox | false | Boolaen | false | Показывать ли чекбокс, необязательной колокнки | + * | useInCellEditor | false | Boolean | undefined | Будет ли отображен эдитор в ячейке этой колонки | + * | editor | false | String/VariableContainer | undefined | Редактор, которым можно осуществлять редактирование
этой ячейки | + * | viewer | false | String/VariableContainer | undefined | Вьювер, который будет отображать содержимое колонки | + * | value | false | Type | undefined | Значение | + * | visible | false | Boolean | undefined | Предустановленное значение при добавлении новой строчки | + * + *
+ * + * **Значение** + * ``` + * Deque(VariableContainer) + * ``` + * + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### CustomStructureEditor + * *Редактор, кода, типов, шаблонов, структур в текстовом формате* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "Slider" + * data: VariableContainer [ + * mode: Integer, + * context: VariableContainer, + * desiredType: VariableContainer, + * description: String, + * hint: Boolean, + * validationButton: Boolean, + * ] + * ] + * ``` + * + *
+ * + * **Опции** + *| name | mandatory | type | default value | description | + *|------------------ |----------- |---------------------- |------------------------------- |--------------------------------------------------------------------------------------------------------- | + *| width | false | String/Integer/Float | 25 | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + *| height | false | String/Integer/Float | 300 | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + *| mode | false | Integer | 0 | Тип данных (0 - обычные литералы, 1 - шаблонизация (dbcl сериализация), 2 - описание типов, 3 - текст ) | + *| context | false | VariableContainer | VariableContainer [] | Объект, содержащий данные по ссылка, если это тип 1 | + *| desiredType | false | VariableContainer | VariableContainer [type: 257] | Тип данных, который ожидается на выходе | + *| description | false | String | "" | | + *| hint | false | Boolean | true | Показывать ли подсказку | + *| validationButton | false | Boolean | true | Кнопка валидации | + * + *
+ * + * **Значение** + * ``` + * // Зависит от опций + * ``` + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### Form + * *Редактор, представляющий собой форму* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "Slider" + * data: VariableContainer [ + * viewMode: String, + * data: List(VariableContainer), + * showTitles: Boolean, + * viewsInData: Boolean, + * viewer: String, + * titlePadding: String, + * titleVAlign: String, + * showInvalids: Boolean, + * rules: Deque(VariableContainer), + * extra: List(Pair(String, String)), + * fixLayout: Boolean, + * dependencies: List(VariableContainer), + * defaultLayoutWidth: Float, + * focusField: String + * ] + * ] + * ``` + * + *
+ * + * **Опции** + *| name | mandatory | type | default value | description | + *|-------------------- |----------- |---------------------------- |------------------------------- |------------------------------------------------------------------------------------------------------------------------- | + *| width | false | String/Integer/Float | 25 | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + *| height | false | String/Integer/Float | "auto" | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + *| viewMode | false | String | "normal" | Тип формы. Варианты:
- **normal** - слева текст, справа редактор
- **smallTitles** - маленький текст над редактором | + *| data | true | List(VariableContainer) | List(VariableContainer) [] | Описание строчек формы | + *| showTitles | false | Boolean | true | Показывать ли заголовки | + *| viewsInData | false | Boolean | true | Обращаться к юре | + *| viewer | false | String | "Translation" | Вьювер для отображения текста в левой части | + *| titlePadding | false | String | "2px" | Отступы | + *| titleVAlign | false | String | "middle" | Полтика позицирования по вертикали | + *| showInvalids | false | Boolean | true | Показывать, какие поля некорректно заполнены | + *| rules | false | Deque(VariableContainer) | undefined | Правила по которым, будут проверены поля | + *| extra | false | List(Pair(String, String)) | List(Pair(String, String)) [] | Назначение неизвестно | + *| fixLayout | false | Boolean | false | Самостоятельный расчет ширины текста слева | + *| dependencies | false | List(VariableContainer) | List(VariableContainer)[] | Зависимости, между полями формы и вложенных форм | + *| defaultLayoutWidth | false | Float | 0 | Базовая ширина слоя для заголовков | + *| focusField | false | String | "" | Идентификатор поля, которое должно быть сфокусировано | + * + *
+ * + * _**Описание параметров для Form.data**_ + * + *
+ * + * **Представление** + * ``` + * List(VariableContainer) [ + * VariableContainer [ + * id: String, + * editor: String/VariableContainer, + * title: String, + * optional: Boolean, + * view: Boolean + * value: Type, + * viewer: String/VariableContainer, + * showOptionalCheckbox: Boolean, + * expanding: Boolean, + * valueViewer: Type + * ] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |---------------------- |----------- |-------------------------- |--------------- |-------------------------------------------------------- | + * | id | true | String | undefined | Идентификатор поля | + * | editor | true | String/VariableContainer | undefined | Редактор, который будет вставлен с правой стороны | + * | title | true | String | undefined | Подставлять ли с правой стороны вьювер, а не эдитор | + * | optional | false | Boolean | false | Делает поле необязательным, (появляется переключатель) | + * | view | false | Boolean | true | если задан в true, то интерпретирует editor, как viewer | + * | value | false | Type | null | | + * | viewer | false | String/VariableContainer | Form.viewer | Вьювер, который будет подставлен с левой стороны | + * | extra | false | ?? | ?? | Неизвестное поле (Заполнять не нужно) | + * | showOptionalCheckbox | false | Boolean | true | Спрятать чекбокс необязательности | + * | expanding | false | Boolean | false | Занимать всю доступную высоту от формы. | + * | valueViewer | false | Type | undefined | Значение вьювера если view = true | + * + *
+ * + * _**Описание параметров для Form.dependencies**_ + * + *
+ * + * **Представление** + * ``` + * List(VariableContainer) [ + * VariableContainer [ + * source: String, + * target: String, + * asIs: Boolean, + * data: List(VariableContainer)[] + * ] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |-------- |----------- |--------------------------- |--------------- |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + * | source | true | String | undefined | Исходящий эдитор и параметер
Как задавать: **'rowId':'type':'optional'**
rowId может быть разделен точкой и указывать на вложенные формы или эдиторы
mySubForm.mySubSubForm.myNiceEditor
возможные значения для type: value/parameter
если задан parameter, то нужно указать параметр, который будет передан
если задан value, то данные будут взяты из getValue
пример **mySourceEditorId:value** | + * | target | true | String | undefined | Входящий эдитор и параметер
Как задавать: **'rowId':'type':'optional'**
возможные значения для type: value/parameter
если задан parameter, то нужно указать параметр, который будет передан
если задан value, то данные будут переданы в setValue
пример **mySubForm.mySubSubForm.myNiceEditor:value**
пример **mySubForm.mySubSubForm.myNiceEditor:parameter:width** | + * | asIs | false | Boolean | true | Передавать данные без изменений.
Если задан как false - будет использовать для этого data | + * | data | false | List(VariableContainer)[] | undefined | Правило подмены значений; | + * + *
+ * + * **Значение** + * ``` + * VariableContainer [ + * : , + * ... + * ] + * ``` + * + *
+ * + * **Пример** + * ``` + * VariableContainer + * [ + * type : "Form", + * data : VariableContainer + * [ + * data : List(VariableContainer) + * [ + * VariableContainer + * [ + * editor : VariableContainer + * [ + * data : VariableContainer + * [ + * idOnly : true, + * popupHeight : 92, + * allowedWidgets : false, + * allowedEditors : List(String) + * [ + * "ComponentType", + * "CustomStructureEditor" + * ], + * allowedViewers : false + * ], + * type : "PresentationPicker" + * ], + * title : "DataSourcesPanel.userGrid.editor", + * id : "type" + * ], + * VariableContainer [ + * value : VariableContainer [], + * editor : VariableContainer + * [ + * data : VariableContainer + * [ + * hint : false, + * mode : 0, + * height : 150, + * desiredType : VariableContainer [type : 19], + * validationButton : false + * ], + * type : "CustomStructureEditor" + * ], + * title : "DataSourcesPanel.userGrid.options", + * id : "data" + * ] + * ], + * dependencies : List(VariableContainer) + * [ + * VariableContainer + * [ + * asIs : false, + * data : List(VariableContainer) + * [ + * VariableContainer + * [ + * method : "replace", + * map : Map(String, VariableContainer) + * [ + * "Address" : VariableContainer [], + * "ComponentType" : VariableContainer [], + * "CustomStructureEditor" : VariableContainer + * [ + * hint : false, + * mode : 0, + * height : 75, + * desiredType : VariableContainer [type : 19], + * validationButton : false + * ], + * "Floatbox" : VariableContainer [precision : 5,step : 1], + * "Integerbox" : VariableContainer [showArrows : true,step : 1], + * "Switchbox" : VariableContainer [], + * "Textbox" : VariableContainer [placeholder : "type text"], + * "TimeDiffbox" : VariableContainer [format : "(h=ap)(m=ap)(s=ap)"], + * "Timebox" : VariableContainer [], + * "UUIDbox" : VariableContainer [] + * ] + * ] + * ], + * target : "data:value", + * source : "type:value" + * ] + * ] + * ] + * ] + * ``` + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### TreeEditor + * *Редактор представляющий дерево, для выбора ноды* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "Slider" + * data: VariableContainer [ + * mode: String, + * treeTag: String, + * rootIds: Deque(Integer), + * extraIndication: VariableContainer, + * searchable: Boolean, + * filterData: VariableContainer, + * multiSelectable: Boolean, + * enableContextMenu: Boolean + * ] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |------------------- |----------- |---------------------- |--------------------- |------------------------------------------------------------------------------------------ | + * | width | false | String/Integer/Float | 25 | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + * | height | false | String/Integer/Float | "100px" | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + * | mode | false | String | "tree | Определяет какое будет отображение у дерева (browser или tree) | + * | treeTag | true | String | "" | Указывает, какой тип дерева нужно отображать | + * | rootIds | false | Deque(Integer) | defaultRootId | Список корневых узлов, от которых начнется дерево | + * | extraIndication | false | VariableContainer | VariableContainer[] | (Устаревший атрибут, не используется) Специальные иконки | + * | searchable | false | Boolean | null | (Устаревший атрибут, не используется) Осуществлять ли поиск | + * | filterData | false | VariableContainer | VariableContainer | Позволяет с помощью условия, осуществить фильтрацию на предмет
активности и выделения | + * | multiSelectable | false | Boolean | false | Позволяет выбирать несколько узлов в дереве | + * | enableContextMenu | false | Boolean | true | Позволяет отключить контекстное меню | + * + *
+ * + * **Значение** + * ``` + * // if option.multiSelectable != true + * Integer + * // else + * Deque(Integer) + * ``` + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### DialogEditor + * *Редактор, который открывает содержащийся в нем редактор в новом окне и ждет результат* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "Slider" + * data: VariableContainer [ + * usePlaceholder: Boolean, + * placeholder: String, + * dialogWidth: Integer, + * dialogHeight: Integer, + * editor: String/VariableContainer, + * viewer: String/VariableContainer, + * activator: VariableContainer, + * defaultValue: Any + * ] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |---------------- |----------- |-------------------------- |------------------------------------------- |-------------------------------------------------------------------- | + * | width | false | String/Integer/Float | 25 | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + * | height | false | String/Integer/Float | "100px" | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + * | usePlaceholder | false | Boolean | false | Использовать ли подсказку | + * | placeholder | false | String | null | Текст, который будет показан, как подсказка | + * | dialogWidth | false | Integer | 500 | Ширина окна, в котором будет открыт поддиалог | + * | dialogHeight | false | Integer | 300 | Высота окна, в котором будет открыт поддиалог | + * | editor | true | String/VariableContainer | null | Стандартная схема описания редактора | + * | viewer | false | String/VariableContainer | null | Стандартная схема описания вьювера | + * | activator | false | VariableContainer | VariableContainer [name: "gear", type: 4] | Иконка, которая отображена в правой части редактора. | + * | defaultValue | false | Any | null | Предустановленное значение, которое будет установлено редактору | + * + *
+ * + * **Значение** + * ``` + * typeof options.editor + * ``` + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### ProcessorEditor + * *Редактор, который может подменять входные и выходные данные* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "Slider" + * data: VariableContainer [ + * processors: List(VariableContainer), + * validator: String, + * editor: String/VariableContainer + * ] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |------------ |----------- |-------------------------- |---------------------------- |-------------------------------------------------------------------- | + * | width | false | String/Integer/Float | 25 | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + * | height | false | String/Integer/Float | "100px" | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + * | processors | false | List(VariableContainer) | List(VariableContainer) [] | Задает процессоры, для редактора | + * | validator | false | String | null | Задает условие для проверки значения. Пример "input.size() > 0" | + * | editor | true | String/VariableContainer | null | Стандартная схема описания редактора | + * + *
+ * + * **Пример** + * ``` + * // пример описания процессоров + * List(VariableContainer)[ + * VariableContainer [ + * type: "convertNodeToModelAddr", // идентификатор процессора + * data: VariableContainer [ // специфичные данные процессора + * treeTag: "st" + * ] + * ] + * ] + * + * // пример простого процессора, который использует только валидатор + * VariableContainer [ + * type : "ProcessorEditor", + * data : VariableContainer [ + * validator : "input.size() >= 2", // input - это значение которое возвращает редактор + * editor : "Textbox" + * ] + * ] + * ``` + * + *
+ * + * **Значение** + * ``` + * // Тип возвращаемого значения зависит от options.editor и options.processors + * ``` + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### AttributeSelecter + * *Редактор, который позволяет выбрать атрибут компонента* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "AttributeSelecter" + * data: VariableContainer [ + * componentType: ModelType + * ] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |------------ |----------- |-------------------------- |---------------------------- |-------------------------------------------------------------------- | + * | width | false | String/Integer/Float | 25 | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + * | height | false | String/Integer/Float | "100px" | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + * | componentType | false | ModelType | null | Тип компонента | + * + *
+ * + * **Пример** + * ``` + * VariableContainer [ + * type : "AttributeSelecter", + * data : VariableContainer [ + * componentType : @component + * ] + * ] + * ``` + * + *
+ * + * **Значение** + * ``` + * String + * ``` + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### AttributeSetter + * *Редактор, который позволяет выбрать атрибут компонента* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "AttributeSetter" + * data: VariableContainer [ + * componentType: ModelType + * ] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |------------ |----------- |-------------------------- |------------------- |-------------------------------------------------------------------- | + * | width | false | String/Integer/Float | 25 | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + * | height | false | String/Integer/Float | 30 | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + * + *
+ * + * **Пример** + * ``` + * VariableContainer [ + * type : "AttributeSetter", + * data : VariableContainer [] + * ] + * ``` + * + *
+ * + * **Значение** + * ``` + * VariableContainer + * ``` + * @name _ + * @editors + * @memberof editors + */ + +/** + * ### AttributeSetter + * *Редактор, который позволяет выбрать атрибут компонента* + * + *
+ * + * **Представление** + * ``` + * VariableContainer [ + * type: "AttributeSetter" + * data: VariableContainer [ + * componentType: ModelType + * ] + * ] + * ``` + * + *
+ * + * **Опции** + * | name | mandatory | type | default value | description | + * |------------ |----------- |-------------------------- |------------------- |-------------------------------------------------------------------- | + * | width | false | String/Integer/Float | 25 | Задает ширину эдитору (в процентах или пикселях, если это Integer) | + * | height | false | String/Integer/Float | 30 | Задает высоту эдитору (в процентах или пикселях, если это Integer) | + * + *
+ * + * **Пример** + * ``` + * VariableContainer [ + * type : "AttributeSetter", + * data : VariableContainer [] + * ] + * ``` + * + *
+ * + * **Значение** + * ``` + * VariableContainer + * ``` + * @name _ + * @editors + * @memberof editors + */ \ No newline at end of file diff --git a/docfiles/custom/protocol.js b/docfiles/custom/protocol.js new file mode 100644 index 0000000..1a25053 --- /dev/null +++ b/docfiles/custom/protocol.js @@ -0,0 +1,18 @@ +/** + * Created by Aleksey Chichenkov on 3/4/20. + */ + +/** + * ### Документация по работе с GUI версии 2.9.1 + * + * asdf + * as + * dfa + * sdf + * asdf + * + * @name 01 + * @protocol + * @memberof protocol + */ + diff --git a/docfiles/mainpage/main.js b/docfiles/mainpage/main.js index d77ccb1..e16f45e 100644 --- a/docfiles/mainpage/main.js +++ b/docfiles/mainpage/main.js @@ -50,7 +50,11 @@ * - - #### {@link std} - реализация сишной библиотеки на js. * - - #### {@link v2} - сериализуемые типы, которыми можно обмениваться с ядром. * - - #### {@link tools} - разного рода хелперы и инструменты. - * + * - #### Дополнительные материалы + * - - #### [Эдиторы](./editors.html) + * - - #### Протоколы + * - - - #### [Контекстное меню](./context.html) + * @name 02 * @mainpage * @memberof mainpage diff --git a/docfiles/providers/managers/entities/manager.js b/docfiles/providers/managers/entities/manager.js new file mode 100644 index 0000000..b7e10c7 --- /dev/null +++ b/docfiles/providers/managers/entities/manager.js @@ -0,0 +1,4 @@ +/** + * Created by Aleksey Chichenkov on 12/16/19. + */ + diff --git a/docfiles/providers/managers/trees/manager.js b/docfiles/providers/managers/trees/manager.js index 9e451a7..7517efc 100644 --- a/docfiles/providers/managers/trees/manager.js +++ b/docfiles/providers/managers/trees/manager.js @@ -31,24 +31,34 @@ * * *
- * Список доступных тегов деревьев: - * - "cmp" - Компоненты - * - "cst" - Вложенность компонентов - * - "dsk" - Рабочий стол - * - "ect" - Дерево событий - * - "flt" - Фильтры - * - "edg" - Линки - * - "cedg" - Вложенность линков - * - "prf" - Профили - * - "rmt" - Сборщики данных - * - "st" - Схема объектов - * - "uat" - Пользовательские данные - * - "dptt" - ??? - * - "ecst" - ??? - * - "gat" - Глобальное дерево с атрибутами - * - "gt" - Глобальное дерево - * - "rlt" - ??? - * - "role" - ??? + * Список доступных тегов деревьев: + * + * att - Массовые операций + * cedg - Вложенность линков + * chp - Провайдеры клик-хауса + * cmp - Компоненты + * cst - Вложенность компонентов + * dsk - Рабочий стол + * dst - Датасорсы + * ecst - Вложенность линков + * ect - Дерево событий + * edg - Дерево эджей (линков) + * gat - Глобальное дерево с атрибутами (Прототип) + * gt - Глобальное дерево (Прототип) + * flt - Фильтры + * fmt - Файловый менеджер + * ppt - Профили опроса + * prf - Профили авторизации + * rlt - Правила + * rmt - Сборщики данных + * rtt - Отчеты + * smptt - Мастер провайдеры + * ssptt - Слейв провайдеры + * st - Схема объектов + * uat - Пользовательские данные + * wmptt - WMI Master + * wsptt - WMI Slave + * * *
* Связанные объекты: diff --git a/docfiles/providers/managers/trees/schemeTree/node.js b/docfiles/providers/managers/trees/schemeTree/node.js index 5024037..afa0b3e 100644 --- a/docfiles/providers/managers/trees/schemeTree/node.js +++ b/docfiles/providers/managers/trees/schemeTree/node.js @@ -5,4 +5,29 @@ */ function Node() { + /** + * Возвращает адрес модели связанный с этой нодой. + * + * @public + * @function model_addr + * @memberof Trees.SchemeTree.Node + * @returns {v2.address} + */ + this.model_addr = function() { + + }; + + /** + * Указывает, является ли данная нода контейнером. + * + * @public + * @function is_container + * @memberof Trees.SchemeTree.Node + * @returns {v2.boolean} + */ + this.is_container = function() { + + }; + + } \ No newline at end of file diff --git a/examples/test.js b/examples/test.js new file mode 100644 index 0000000..44ae7ca --- /dev/null +++ b/examples/test.js @@ -0,0 +1,4 @@ +/** + * Created by Aleksey Chichenkov on 12/17/19. + */ + diff --git a/templates/initi/publish.js b/templates/initi/publish.js index a002517..7fa7079 100644 --- a/templates/initi/publish.js +++ b/templates/initi/publish.js @@ -251,6 +251,7 @@ function generate(title, docs, filename, resolveLinks) { } fs.writeFileSync(outpath, html, 'utf8'); + return outpath; } function generateSourceFiles(sourceFiles, encoding) { @@ -650,6 +651,7 @@ var find_first_members = function (_parent, _clss) { global.typedefs = {}; global.mainpage_content = []; +global.cusomData = Object.create(null); var find_tag_by_id = function (_tags, _tag_id) { for (var a = 0; a < _tags.length; a++) { @@ -718,17 +720,27 @@ exports.publish = function(taffyData, opts, tutorials) { helper.addEventListeners(data); data().each(function(doclet){ - // console.log(doclet); if(doclet.kind == "typedef") { typedefs[doclet.longname] = doclet; } if(doclet.tags && find_tag_by_id(doclet.tags, "mainpage")){ - // console.log(doclet); - mainpage_content.push(doclet); } + + if(doclet.meta && doclet.meta.path) { + var path = doclet.meta.path.split("/"); + if(path[path.length - 1] === "custom") { + var id = doclet.meta.filename.split(".")[0]; + + if (!cusomData[id]) + cusomData[id] = []; + + if (doclet.tags && find_tag_by_id(doclet.tags, id)) + cusomData[id].push(doclet); + } + } }); @@ -877,6 +889,7 @@ exports.publish = function(taffyData, opts, tutorials) { // add template helpers view.content = mainpage_content; + view.cusomData = cusomData; view.find = find; view.linkto = linkto; view.replace_enters_to_br = replace_enters_to_br; @@ -910,9 +923,25 @@ exports.publish = function(taffyData, opts, tutorials) { ).concat(files), indexUrl); console.log("outdir", outdir) + // console.log("indexUrl", indexUrl) + for(var id in cusomData) { + var out = generate(id, + packages.concat( + [{ + subkind: id, + kind: 'custom', + readme: opts.readme, + longname: id + }] + ).concat(files), id + ".html"); + console.log("generate", id, out) + + } + + var sih = require("./search_inheritance.js"); var inh_struct = sih.find(env.conf, helper, logger, generate); diff --git a/templates/initi/static/styles/common.css b/templates/initi/static/styles/common.css index 01ce9c6..3ccdd29 100644 --- a/templates/initi/static/styles/common.css +++ b/templates/initi/static/styles/common.css @@ -93,6 +93,12 @@ div.part > div.desc { padding: 5px; } +pre.source { + margin-top: 5px; + margin-bottom: 5px; +} + + div.container-overview > .desc > pre, div.part > pre { margin: 0px; @@ -194,3 +200,15 @@ h4, h4 a .compact-method * { word-spacing: 0px; } + +h3 > a.title { + cursor: pointer; + text-decoration: none; +} + +h5 { + margin-block-start: 0; + margin-block-end: 0; + margin-top: 0; + margin-bottom: 0; +} \ No newline at end of file diff --git a/templates/initi/static/styles/jsdoc-default.css b/templates/initi/static/styles/jsdoc-default.css index 0535e3f..17efb70 100644 --- a/templates/initi/static/styles/jsdoc-default.css +++ b/templates/initi/static/styles/jsdoc-default.css @@ -197,7 +197,7 @@ h5, .container-overview .subsection-title font-size: 120%; font-weight: bold; letter-spacing: -0.01em; - margin: 8px 0 3px 0; + /*margin: 8px 0 3px 0;*/ } .container-overview > h3 { @@ -235,6 +235,7 @@ table td, th { + background-color: #ffffff63; border: 1px solid #ddd; margin: 0px; text-align: left; diff --git a/templates/initi/tmpl/container.tmpl b/templates/initi/tmpl/container.tmpl index 19519b6..51c2f6d 100644 --- a/templates/initi/tmpl/container.tmpl +++ b/templates/initi/tmpl/container.tmpl @@ -18,8 +18,16 @@ isGlobalPage = (doc.kind === 'globalobj'); } ?> - + + + + + + + + + diff --git a/templates/initi/tmpl/custom.tmpl b/templates/initi/tmpl/custom.tmpl new file mode 100644 index 0000000..b80e6ac --- /dev/null +++ b/templates/initi/tmpl/custom.tmpl @@ -0,0 +1,16 @@ + + + + + + +

+ + diff --git a/templates/initi2/publish.js b/templates/initi2/publish.js new file mode 100644 index 0000000..04c04eb --- /dev/null +++ b/templates/initi2/publish.js @@ -0,0 +1,14 @@ +/** + * Created by Aleksey Chichenkov on 12/16/19. + */ +const Render = require("./render"); + + +// do stuff here to generate your output files +exports.publish = function(data, opts, tutorials) { + + this.render = new Render(data, opts, tutorials); + this.render.init(); + +}; + diff --git a/templates/initi2/render.js b/templates/initi2/render.js new file mode 100644 index 0000000..a14c594 --- /dev/null +++ b/templates/initi2/render.js @@ -0,0 +1,550 @@ +/** + * Created by Aleksey Chichenkov on 12/16/19. + */ +const fs = require("fs"); +const util = require('util'); +const helper = require('jsdoc/util/templateHelper'); +const path = require('jsdoc/path'); +const jfs = require('jsdoc/fs'); +const env = require('jsdoc/env'); +const template = require('jsdoc/template'); +const taffy = require('taffydb').taffy; +const htmlsafe = helper.htmlsafe; +const linkto = helper.linkto; + +class Render { + + /** + * + * @param _taffyData + * @param _opts + */ + constructor (_taffyData, _opts, _tutorials) { + this._taffyData = _taffyData; + this._opts = _opts; + this._tutorials = _tutorials; + + this._sourceFiles = {}; + this._sourceFilePaths = []; + } + + init() { + this._outdir = path.normalize(this._opts.destination); + this._templatePath = path.normalize(this._opts.template); + this._conf = env.conf.templates || {}; + this._conf.default = this._conf.default || {}; + this._indexUrl = helper.getUniqueFilename('index'); + this._outputSourceFiles = this._conf.default && this._conf.default.outputSourceFiles !== false; + + this._upgradeData(); + this._createFileWithDocklets(); + this._createOutdir(); + this._copyStaticFiles(); + this._processExamples(); + this._processSee(); + this._buildListSourceFiles(); + this._buildLinks(); + this._addAttribsAndSignature(); // what it do is + this._buildMenu(); + this._findMembers(); + this._initTemplate(); + this._generateFiles(); + + // index page displays information from package.json and lists files + var files = this.find({kind: 'file'}); + var packages = this.find({kind: 'package'}); + this.generate('Documentation: GUI 2.9.1-develop', + packages.concat( + [{ + kind: 'mainpage', + readme: this._opts.readme, + longname: (this._opts.mainpagetitle) ? this._opts.mainpagetitle : 'Main Page' + }] + ).concat(files), this._indexUrl); + } + + _upgradeData () { + this._data = helper.prune(this._taffyData); + this._data.sort('longname, version, since'); + } + + _createFileWithDocklets () { + var data = []; + + this._taffyData().each(function (_data) { + data.push(_data); + }); + + fs.writeFileSync("taffy.json", JSON.stringify(data, true, 3)); + } + + _createOutdir () { + var packageInfo = (this.find({kind: 'package'}) || [])[0]; + + if (packageInfo && packageInfo.name) { + this._outdir = path.join(this._outdir, packageInfo.name, (packageInfo.version || '')); + } + jfs.mkPath(this._outdir); + } + + _copyStaticFiles () { + var fromDir = path.join(this._templatePath, 'static'); + var staticFiles = jfs.ls(fromDir, 3); + + staticFiles.forEach(function(fileName) { + var toDir = jfs.toDir( fileName.replace(fromDir, outdir) ); + + jfs.mkPath(toDir); + jfs.copyFileSync(fileName, toDir); + }); + + if (this._conf.default.staticFiles) { + // The canonical property name is `include`. We accept `paths` for backwards compatibility + // with a bug in JSDoc 3.2.x. + var staticFilePaths = this._conf.default.staticFiles.include || + this._conf.default.staticFiles.paths || + []; + var staticFileFilter = new (require('jsdoc/src/filter')).Filter(this._conf.default.staticFiles); + var staticFileScanner = new (require('jsdoc/src/scanner')).Scanner(); + + staticFilePaths.forEach(function(filePath) { + var extraStaticFiles; + + filePath = path.resolve(env.pwd, filePath); + extraStaticFiles = staticFileScanner.scan([filePath], 10, staticFileFilter); + + extraStaticFiles.forEach(function(fileName) { + var sourcePath = jfs.toDir(filePath); + var toDir = jfs.toDir( fileName.replace(sourcePath, outdir) ); + + jfs.mkPath(toDir); + jfs.copyFileSync(fileName, toDir); + }.bind(this)); + }.bind(this)); + } + + } + + _processExamples (){ + this._data().each(function(doclet) { + doclet.attribs = ''; + + if (doclet.examples) { + doclet.examples = doclet.examples.map(function (example) { + var caption; + var code; + + if (example.match(/^\s*([\s\S]+?)<\/caption>(\s*[\n\r])([\s\S]+)$/i)) { + caption = RegExp.$1; + code = RegExp.$3; + } + + return { + caption: caption || '', + code: code || example + }; + }.bind(this)); + } + }.bind(this)) + } + + _processSee (){ + this._data().each(function(doclet) { + if (doclet.see) { + doclet.see.forEach(function(seeItem, i) { + doclet.see[i] = hashToLink(doclet, seeItem); + }); + } + }.bind(this)) + } + + _buildListSourceFiles (){ + var sourcePath; + + this._data().each(function(doclet) { + // build a list of source files + if (doclet.meta) { + sourcePath = getPathFromDoclet(doclet); + this._sourceFiles[sourcePath] = { + resolved: sourcePath, + shortened: null + }; + if (this._sourceFilePaths.indexOf(sourcePath) === -1) { + this._sourceFilePaths.push(sourcePath); + } + } + }.bind(this)); + + if (this._sourceFilePaths.length) { + this._sourceFiles = shortenPaths( this._sourceFiles, path.commonPrefix(this._sourceFilePaths) ); + } + } + + _buildLinks () { + this._data().each(function(doclet) { + var docletPath; + var url = helper.createLink(doclet); + + helper.registerLink(doclet.longname, url); + + // add a shortened version of the full path + if (doclet.meta) { + docletPath = getPathFromDoclet(doclet); + docletPath = this._sourceFiles[docletPath].shortened; + if (docletPath) { + doclet.meta.shortpath = docletPath; + } + } + }.bind(this)); + } + + _addAttribsAndSignature () { + this._data().each(function (doclet) { + var url = helper.longnameToUrl[doclet.longname]; + + if (url.indexOf('#') > -1) { + doclet.id = helper.longnameToUrl[doclet.longname].split(/#/).pop(); + } else { + doclet.id = doclet.name; + } + + if (needsSignature(doclet)) { + addSignatureParams(doclet); + addSignatureReturns(doclet); + addAttribs(doclet); + } + }.bind(this)); + + // do this after the urls have all been generated + this._data().each(function(doclet) { + doclet.ancestors = this.getAncestorLinks(doclet); + + if (doclet.kind === 'member') { + addSignatureTypes(doclet); + addAttribs(doclet); + } + + if (doclet.kind === 'constant') { + addSignatureTypes(doclet); + addAttribs(doclet); + doclet.kind = 'member'; + } + }.bind(this)); + + } + + _buildMenu () { + + } + + _findMembers() { + this._members = helper.getMembers(this._data); + this._members.tutorials = this._tutorials.children; + } + + _initTemplate () { + this._view = new template.Template( path.join(this._templatePath, 'tmpl') ); + this._view.find = this.find.bind(this); + this._view.linkto = linkto; + this._view.resolveAuthorLinks = helper.resolveAuthorLinks; + this._view.tutoriallink = tutoriallink; + this._view.htmlsafe = htmlsafe; + this._view.outputSourceFiles = this._outputSourceFiles; + + // set up templating + if(this._conf.default.layoutFile) { + this._view.layout = path.getResourcePath(path.dirname(this._conf.default.layoutFile), path.basename(this._conf.default.layoutFile)) + } else { + this._view.layout = 'layout.tmpl' + } + } + + _generateFiles() { + // output pretty-printed source files by default + if (this._outputSourceFiles) { + this.generateSourceFiles(this._sourceFiles, this._opts.encoding); + } + + // set up the lists that we'll use to generate pages + this._classes = taffy(this._members.classes); + this._modules = taffy(this._members.modules); + this._namespaces = taffy(this._members.namespaces); + this._mixins = taffy(this._members.mixins); + this._externals = taffy(this._members.externals); + this._interfaces = taffy(this._members.interfaces); + + Object.keys(helper.longnameToUrl).forEach(function(longname) { + var myClasses = helper.find(this._classes, {longname: longname}); + var myExternals = helper.find(this._externals, {longname: longname}); + var myInterfaces = helper.find(this._interfaces, {longname: longname}); + var myMixins = helper.find(this._mixins, {longname: longname}); + var myModules = helper.find(this._modules, {longname: longname}); + var myNamespaces = helper.find(this._namespaces, {longname: longname}); + + if (myModules.length) { + this.generate('Module: ' + myModules[0].name, myModules, helper.longnameToUrl[longname]); + } + + if (myClasses.length) { + this.generate(myClasses[0].name, myClasses, helper.longnameToUrl[longname]); + } + + if (myNamespaces.length) { + this.generate(myNamespaces[0].name, myNamespaces, helper.longnameToUrl[longname]); + } + + if (myMixins.length) { + this.generate('Mixin: ' + myMixins[0].name, myMixins, helper.longnameToUrl[longname]); + } + + if (myExternals.length) { + this.generate('External: ' + myExternals[0].name, myExternals, helper.longnameToUrl[longname]); + } + + if (myInterfaces.length) { + this.generate('Interface: ' + myInterfaces[0].name, myInterfaces, helper.longnameToUrl[longname]); + } + }.bind(this)); + } + + generate(title, docs, filename, resolveLinks) { + var docData; + var html; + var outpath; + + resolveLinks = resolveLinks !== false; + + docData = { + env: env, + title: title, + docs: docs + }; + + outpath = path.join(this._outdir, filename); + + html = this._view.render('container.tmpl', docData); + + if (resolveLinks) { + html = helper.resolveLinks(html); // turn {@link foo} into foo + } + + fs.writeFileSync(outpath, html, 'utf8'); + } + + generateSourceFiles(sourceFiles, encoding) { + this._encoding = encoding || 'utf8'; + Object.keys(this._sourceFiles).forEach(function(file) { + var source; + // links are keyed to the shortened path in each doclet's `meta.shortpath` property + var sourceOutfile = helper.getUniqueFilename(this._sourceFiles[file].shortened); + + helper.registerLink(this._sourceFiles[file].shortened, sourceOutfile); + + try { + source = { + kind: 'source', + code: helper.htmlsafe( fs.readFileSync(this._sourceFiles[file].resolved, this._encoding) ) + }; + } + catch (e) { + logger.error('Error while generating source file %s: %s', file, e.message); + } + + this.generate('Source: ' + this._sourceFiles[file].shortened, [source], sourceOutfile, false); + }.bind(this)); + } + + getAncestorLinks(doclet) { + return helper.getAncestorLinks(this._data, doclet); + } + + find(spec) { + return helper.find(this._data, spec); + } +} + + +// local functions + +function tutoriallink(tutorial) { + return helper.toTutorial(tutorial, null, { + tag: 'em', + classname: 'disabled', + prefix: 'Tutorial: ' + }); +} + +function shortenPaths(files, commonPrefix) { + Object.keys(files).forEach(function(file) { + files[file].shortened = files[file].resolved.replace(commonPrefix, '') + // always use forward slashes + .replace(/\\/g, '/'); + }); + + return files; +} + +function getPathFromDoclet(doclet) { + if (!doclet.meta) { + return null; + } + + return doclet.meta.path && doclet.meta.path !== 'null' ? + path.join(doclet.meta.path, doclet.meta.filename) : + doclet.meta.filename; +} + +function needsSignature(doclet) { + var needsSig = false; + + // function and class definitions always get a signature + if (doclet.kind === 'function' || doclet.kind === 'class') { + needsSig = true; + } + // typedefs that contain functions get a signature, too + else if (doclet.kind === 'typedef' && doclet.type && doclet.type.names && + doclet.type.names.length) { + for (var i = 0, l = doclet.type.names.length; i < l; i++) { + if (doclet.type.names[i].toLowerCase() === 'function') { + needsSig = true; + break; + } + } + } + // and namespaces that are functions get a signature (but finding them is a + // bit messy) + else if (doclet.kind === 'namespace' && doclet.meta && doclet.meta.code && + doclet.meta.code.type && doclet.meta.code.type.match(/[Ff]unction/)) { + needsSig = true; + } + + return needsSig; +} + +function addSignatureTypes(f) { + var types = f.type ? buildItemTypeStrings(f) : []; + + f.signature = (f.signature || '') + '' + + (types.length ? ' :' + types.join('|') : '') + ''; +} + +function getSignatureAttributes(item) { + var attributes = []; + + if (item.optional) { + attributes.push('opt'); + } + + if (item.nullable === true) { + attributes.push('nullable'); + } + else if (item.nullable === false) { + attributes.push('non-null'); + } + + return attributes; +} + + +function updateItemName(item) { + var attributes = getSignatureAttributes(item); + var itemName = item.name || ''; + + if (item.variable) { + itemName = '…' + itemName; + } + + if (attributes && attributes.length) { + itemName = util.format( '%s%s', itemName, + attributes.join(', ') ); + } + + return itemName; +} + +function addParamAttributes(params) { + return params.filter(function(param) { + return param.name && param.name.indexOf('.') === -1; + }).map(updateItemName); +} + +function addSignatureParams(f) { + var params = f.params ? addParamAttributes(f.params) : []; + + f.signature = util.format( '%s(%s)', (f.signature || ''), params.join(', ') ); +} + +function buildItemTypeStrings(item) { + var types = []; + + if (item && item.type && item.type.names) { + item.type.names.forEach(function(name) { + types.push( linkto(name, htmlsafe(name)) ); + }); + } + + return types; +} + + +function addNonParamAttributes(items) { + var types = []; + + items.forEach(function(item) { + types = types.concat( buildItemTypeStrings(item) ); + }); + + return types; +} + +function buildAttribsString(attribs) { + var attribsString = ''; + + if (attribs && attribs.length) { + attribsString = htmlsafe( util.format('(%s) ', attribs.join(', ')) ); + } + + return attribsString; +} + +function addSignatureReturns(f) { + var attribs = []; + var attribsString = ''; + var returnTypes = []; + var returnTypesString = ''; + var source = f.yields || f.returns; + + // jam all the return-type attributes into an array. this could create odd results (for example, + // if there are both nullable and non-nullable return types), but let's assume that most people + // who use multiple @return tags aren't using Closure Compiler type annotations, and vice-versa. + if (source) { + source.forEach(function(item) { + helper.getAttribs(item).forEach(function(attrib) { + if (attribs.indexOf(attrib) === -1) { + attribs.push(attrib); + } + }); + }); + + attribsString = buildAttribsString(attribs); + } + + if (source) { + returnTypes = addNonParamAttributes(source); + } + if (returnTypes.length) { + returnTypesString = util.format( ' → %s{%s}', attribsString, returnTypes.join('|') ); + } + + f.signature = '' + (f.signature || '') + '' + + '' + returnTypesString + ''; +} + +function addAttribs(f) { + var attribs = helper.getAttribs(f); + var attribsString = buildAttribsString(attribs); + + f.attribs = util.format('%s', attribsString); +} + +module.exports = Render; \ No newline at end of file diff --git a/templates/initi2/tmpl/container.tmpl b/templates/initi2/tmpl/container.tmpl new file mode 100644 index 0000000..e69de29 diff --git a/templates/initi2/tmpl/layout.tmpl b/templates/initi2/tmpl/layout.tmpl new file mode 100644 index 0000000..197a8e2 --- /dev/null +++ b/templates/initi2/tmpl/layout.tmpl @@ -0,0 +1,53 @@ + + + + + Initi documentation for GUI(2.9.1-develop) <?js= title ?> + + + + + + + + + + + + + + + + + + + +
+ +

+ + + +
+ Documentation generated by JSDoc on +
+
+ + + +
+ + + + + +