1
0
mirror of https://github.com/crimsongoldteam/md_design.git synced 2025-10-30 23:18:04 +02:00

feat: настроить обмен свойствами с ts

This commit is contained in:
nikitazherebtsov
2025-06-23 00:39:00 +05:00
parent b573675b92
commit 35e3565ea5
21 changed files with 132 additions and 93 deletions

View File

@@ -28,16 +28,16 @@ interface IApplication {
}
export class ElementPathData {
@Expose()
@Expose({ name: "Элемент" })
@Type(() => BaseElement, PlainToClassDiscriminator.discriminatorOptions)
@Transform(PlainToClassTransformer.transform, { toClassOnly: true })
public item: BaseElement
@Expose()
@Expose({ name: "Путь" })
@Type(() => CstPathItem)
public path: CstPath
@Expose()
@Expose({ name: "ЭтоНовый" })
public isNew: boolean
constructor(item: BaseElement, path: CstPath, isNew: boolean) {
@@ -87,7 +87,7 @@ export class Application implements IApplication {
throw new Error("onChangeContent is not implemented")
}
public onChangeCurrentElement: (currentElement: BaseElement | undefined) => void = () => {
public onChangeCurrentElement: (currentElement: ElementPathData | undefined) => void = () => {
throw new Error("onChangeCurrentElement is not implemented")
}
@@ -128,6 +128,8 @@ export class Application implements IApplication {
public getTableData(): ElementPathData {
let table = this.mainModel.getCurrentTableElement()
let path: CstPath = []
const isNew = table === undefined
if (table) {
path = table.getCstPath()
} else {
@@ -136,7 +138,7 @@ export class Application implements IApplication {
path = element.getCstPath()
}
const result = new ElementPathData(table, path, true)
const result = new ElementPathData(table, path, isNew)
return result
}
@@ -196,11 +198,11 @@ export class Application implements IApplication {
this.onChangeContent(this.mainEditor.getSemanicTree())
}
private onChangeMainEditorCurrentElement(currentElement: BaseElement | undefined): void {
private onChangeMainEditorCurrentElement(currentElement: ElementPathData | undefined): void {
this.onChangeCurrentElement(currentElement)
}
private onChangeGroupEditorCurrentElement(currentElement: BaseElement | undefined): void {
private onChangeGroupEditorCurrentElement(currentElement: ElementPathData | undefined): void {
this.onChangeCurrentElement(currentElement)
}

View File

@@ -11,6 +11,7 @@ import { BaseElement } from "../elements/baseElement"
import { CstPath } from "@/elements/cstPathHelper"
import { FormElement } from "../elements/formElement"
import { TableElement } from "../elements/tableElement"
import { ElementPathData } from "@/application"
export abstract class AbstractModel<T extends BaseElement> {
private readonly semanticTokensManager: SemanticTokensManager = new SemanticTokensManager()
@@ -55,6 +56,12 @@ export abstract class AbstractModel<T extends BaseElement> {
return token.element
}
public getCurrentElementPathData(): ElementPathData {
const element = this.getCurrentElement()
const path = element.getCstPath()
return new ElementPathData(element, path, false)
}
public getNearestContainer(current: BaseElement): BaseElement {
let element: BaseElement | undefined = current
while (element) {

View File

@@ -1,6 +1,7 @@
import * as monaco from "monaco-editor-core"
import { AbstractModel } from "./abstractModel"
import { BaseElement } from "../elements/baseElement"
import { ElementPathData } from "@/application"
export class EditorWrapper {
protected readonly editor: monaco.editor.IStandaloneCodeEditor
@@ -30,7 +31,7 @@ export class EditorWrapper {
throw new Error("onChangeContent is not implemented")
}
public onChangeCurrentElement: (currentElement: BaseElement | undefined) => void = () => {
public onChangeCurrentElement: (currentElement: ElementPathData | undefined) => void = () => {
throw new Error("onChangeCurrentElement is not implemented")
}
@@ -133,6 +134,6 @@ export class EditorWrapper {
private onDidChangeCursorSelection(e: monaco.editor.ICursorSelectionChangedEvent) {
this.model.setCursor(e.selection.startLineNumber, e.selection.startColumn)
this.onChangeCurrentElement?.(this.model.getCurrentElement())
this.onChangeCurrentElement?.(this.model.getCurrentElementPathData())
}
}

View File

@@ -10,7 +10,7 @@ export enum ElementListType {
Rows = "rows",
}
export enum TableCellAlignment {
export enum PropertyAlignment {
Left = "Лево",
Center = "Центр",
Right = "Право",
@@ -20,6 +20,8 @@ export type ProperyPrimitiveValue = string | boolean | number
export type PropertyValue = ProperyPrimitiveValue | ProperyPrimitiveValue[]
export abstract class BaseElement {
protected static aligmentProperty: string = "ГоризонтальноеПоложениеВГруппе"
@Expose({ name: "Тип" })
public type: string = ""
@@ -109,13 +111,32 @@ export abstract class BaseElement {
return undefined
}
public getAlignment(): TableCellAlignment {
const alignment = this.getProperty("ГоризонтальноеПоложение")
if (!alignment) {
return TableCellAlignment.Left
public setProperty(key: string, value: PropertyValue | undefined) {
const properties = this.properties
const lowerKey = key.toLowerCase()
for (const prop in properties) {
if (prop.toLowerCase() === lowerKey) {
properties.delete(prop)
}
}
return alignment as TableCellAlignment
if (value === undefined) return
properties.set(key, value)
}
public get alignment(): PropertyAlignment {
const alignment = this.getProperty((this.constructor as any).aligmentProperty)
if (!alignment) {
return PropertyAlignment.Left
}
return alignment as PropertyAlignment
}
public set alignment(alignment: PropertyAlignment) {
this.setProperty((this.constructor as any).aligmentProperty, alignment)
}
public getChildrenFields(): ElementListType[] {

View File

@@ -13,6 +13,10 @@ export class TableColumnElement extends BaseElement {
public elementType = "ПолеФормы"
public elementKind = "ПолеВвода"
private _hasValue: boolean = false
protected static aligmentProperty: string = "ГоризонтальноеПоложение"
@Expose({ name: "УИДАтрибута", groups: ["production"] })
public attributeId: string = ""
@@ -20,8 +24,6 @@ export class TableColumnElement extends BaseElement {
@Type(() => TypeDescription)
public typeDescription: TypeDescription = new TypeDescription()
public _hasValue: boolean = false
@Expose({ name: "ЕстьЗначение" })
public get hasValue(): boolean {
return this._hasValue || !this.hasCheckbox

View File

@@ -10,6 +10,8 @@ export class TableColumnGroupElement extends BaseElementWithoutAttributes {
public elementType = "ГруппаФормы"
public elementKind = "ГруппаКолонок"
protected static aligmentProperty: string = "ГоризонтальноеПоложение"
@Expose({ name: "Колонки" })
@Type(() => BaseElement, PlainToClassDiscriminator.discriminatorOptions)
public items: (TableColumnElement | TableColumnGroupElement)[] = []

View File

@@ -93,7 +93,7 @@ export class TableElement extends BaseElementWithAttributes {
cell.valueCheckbox = valueData.data[column.checkboxAttributeId] as boolean
}
if (column._hasValue && valueData.data[column.attributeId]) {
if (column.hasValue && valueData.data[column.attributeId]) {
cell.value = FormatterUtils.formatValue(valueData.data[column.attributeId], column.typeDescription)
}
}

View File

@@ -1,4 +1,4 @@
import { instanceToPlain, plainToInstance } from "class-transformer"
import { plainToInstance } from "class-transformer"
import { Application, ElementPathData } from "./application"
import { BaseElement } from "./elements/baseElement"
import { ValueData } from "./editor/formModel"
@@ -26,7 +26,7 @@ export class EnterpriseConnector {
this.application.insertText(text)
}
public getNewValue(type: string): string {
public getNewValue(type: string): string | undefined {
const value = this.application.getNewValue(type)
return Exporter.export(value)
}
@@ -61,13 +61,9 @@ export class EnterpriseConnector {
})
}
private onChangeCurrentElement(currentElement: BaseElement | undefined): void {
const plain = currentElement
? instanceToPlain(currentElement, { groups: ["production"], strategy: "excludeAll" })
: undefined
private onChangeCurrentElement(currentElement: ElementPathData | undefined): void {
const result = {
currentElement: JSON.stringify(plain, null, 2),
currentElement: Exporter.export(currentElement),
}
this.sendEvent("EVENT_CHANGE_CURRENT_ELEMENT", result)
}

View File

@@ -2,7 +2,9 @@ import { instanceToPlain } from "class-transformer"
import { ElementPathData } from "../application"
export class Exporter {
public static readonly export = (element: any) => {
public static readonly export = (element: any): string | undefined => {
if (element === undefined) return undefined
const plainObject = instanceToPlain(element, {
strategy: "excludeAll",
groups: ["production"],

View File

@@ -1,4 +1,4 @@
import { TableCellAlignment } from "@/elements/baseElement"
import { PropertyAlignment } from "@/elements/baseElement"
import { ITableFormatterCell } from "./tableFormatter"
export abstract class BaseTableFormatterCell implements ITableFormatterCell {
@@ -12,14 +12,14 @@ export abstract class BaseTableFormatterCell implements ITableFormatterCell {
return this.value.length
}
protected getAlignedValue(alignment: TableCellAlignment): string {
protected getAlignedValue(alignment: PropertyAlignment): string {
const padding = this.getCalulatedLength() - this.getLength()
if (alignment === TableCellAlignment.Left) {
if (alignment === PropertyAlignment.Left) {
return this.value + " ".repeat(padding)
}
if (alignment === TableCellAlignment.Right) {
if (alignment === PropertyAlignment.Right) {
return " ".repeat(padding) + this.value
}

View File

@@ -1,5 +1,5 @@
import { TableColumnGroupElement } from "@/elements/tableColumnGroupElement"
import { TableCellAlignment } from "@/elements/baseElement"
import { PropertyAlignment } from "@/elements/baseElement"
import { BaseTableFormatterCell } from "./baseTableFormatterCell"
import { FormFormatterFactory } from "../formatterFactory"
import { FormatterUtils } from "../formatterUtils"
@@ -36,8 +36,8 @@ export class TableFormatterColumn extends BaseTableFormatterCell {
parent.columns.push(this)
}
public getAlignment(): TableCellAlignment {
return this.element.getAlignment()
public getAlignment(): PropertyAlignment {
return this.element.alignment
}
public popValue(): string {

View File

@@ -1,4 +1,4 @@
import { TableCellAlignment } from "@/elements/baseElement"
import { PropertyAlignment } from "@/elements/baseElement"
import { BaseTableFormatterCell } from "./baseTableFormatterCell"
import { TableFormatterColumn } from "./tableFormatterColumn"
@@ -24,11 +24,11 @@ export class TableFormatterSeparator extends BaseTableFormatterCell {
const alignment = this.column.getAlignment()
if (alignment === TableCellAlignment.Right) {
if (alignment === PropertyAlignment.Right) {
rightSymbol = ": "
}
if (alignment === TableCellAlignment.Center) {
if (alignment === PropertyAlignment.Center) {
leftSymbol = " :"
rightSymbol = ": "
}

View File

@@ -6,7 +6,7 @@ import { TypesUtils } from "./visitorTools/typesUtuls"
import { SemanticTokensManager, SemanticTokensTypes } from "./visitorTools/sematicTokensManager"
import { IdGenerator } from "./visitorTools/idGenerator"
import { HorizontalGroupDictionary, PagesDictionary } from "./nodes"
import { BaseElement, ElementListType, PropertyValue } from "../elements/baseElement"
import { BaseElement, ElementListType, PropertyAlignment, PropertyValue } from "../elements/baseElement"
import { FormElement } from "../elements/formElement"
import { InputElement } from "../elements/inputElement"
import { LabelElement } from "../elements/labelElement"
@@ -497,10 +497,10 @@ export class Visitor extends BaseVisitor {
if (isColumnGroup) {
result = new TableColumnGroupElement()
content = content?.slice(1, -1)
content = content?.slice(1, -1).trim()
}
this.setProperty(result, "Заголовок", content)
this.setProperty(result, "Заголовок", content?.trim())
this.visit(ctx.properties as CstNode[], { element: result })
@@ -524,17 +524,17 @@ export class Visitor extends BaseVisitor {
const hasRight = !!data.rightColon
if (hasLeft && !hasRight) {
this.setProperty(column, "ГоризонтальноеПоложение", "Лево")
column.alignment = PropertyAlignment.Left
return
}
if (hasLeft && hasRight) {
this.setProperty(column, "ГоризонтальноеПоложение", "Центр")
column.alignment = PropertyAlignment.Center
return
}
if (!hasLeft && hasRight) {
this.setProperty(column, "ГоризонтальноеПоложение", "Право")
column.alignment = PropertyAlignment.Right
}
let tokens = [...(data.leftColon ?? []), ...(data.Dashes ?? []), ...(data.rightColon ?? [])]
@@ -690,10 +690,10 @@ export class Visitor extends BaseVisitor {
if (ctx.leftArrowRight) {
//-> * <-
if (ctx.rightArrowLeft) {
this.setProperty(element, "ГоризонтальноеПоложениеВГруппе", "Центр")
element.alignment = PropertyAlignment.Center
return
}
this.setProperty(element, "ГоризонтальноеПоложениеВГруппе", "Право")
element.alignment = PropertyAlignment.Right
return
}

View File

@@ -60,7 +60,7 @@ export class TableRowMap {
}
if (item.value || !item.hasCheckbox) {
column._hasValue = true
column.hasValue = true
}
this.currentRow.items.set(column, item)

View File

@@ -42,6 +42,5 @@
<div id="output"></div>
<script type="module" src="/lib/playground/playground.ts"></script>
<script type="module" src="/lib/editor.ts"></script>
</body>
</html>

View File

@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.20">
<ExternalDataProcessor uuid="74f8e05f-b246-419b-92d7-d288d7754f8f">
<ExternalDataProcessor uuid="b5da5ff0-b79f-45a2-8715-988158f677a1">
<InternalInfo>
<xr:ContainedObject>
<xr:ClassId>c3831ec8-d8d5-4f93-8a22-f9bfae07327f</xr:ClassId>
<xr:ObjectId>185ca0bf-aafc-40dc-9769-e478025d16c4</xr:ObjectId>
<xr:ObjectId>5852121b-a96c-490c-97ef-f4771e28ecad</xr:ObjectId>
</xr:ContainedObject>
<xr:GeneratedType name="ExternalDataProcessorObject.Накидка" category="Object">
<xr:TypeId>b93d1ad5-1f32-46b0-8424-4ee0eed4dc9b</xr:TypeId>
<xr:ValueId>364519c4-c7d8-4106-ad17-3725217bd6a5</xr:ValueId>
<xr:TypeId>7b9d0858-ca7f-41ec-a186-b3b738810605</xr:TypeId>
<xr:ValueId>a94da9ea-d400-4ecf-a0ad-ab6f69a99b8b</xr:ValueId>
</xr:GeneratedType>
</InternalInfo>
<Properties>

View File

@@ -105,7 +105,7 @@
Если ПустаяСтрока(ИмяРеквизита) Тогда
ВызватьИсключение
"Не заполнено имя реквизита в построителе схемы формы.
||Это ошибка в обработке. Зарегистрируйте, пожалуйста, ошибку по адресу https://github.com/crimsongoldteam/md_design/issues";
|Это ошибка в обработке. Зарегистрируйте, пожалуйста, ошибку по адресу https://github.com/crimsongoldteam/md_design/issues";
КонецЕсли;
Результат = Новый Структура;
Результат.Вставить("Имя", ПараметрыВыполнения.Префикс + ИмяРеквизита);

View File

@@ -68,7 +68,7 @@
Перем мПрефикс;
&НаКлиенте
Перем мТекущийЭлемент;
Перем мДанныеТекущегоЭлемента;
&НаКлиенте
Перем мВариантыТипов;
@@ -368,10 +368,10 @@ EndFunction
Процедура РедакторТаблицы(Команда)
ДанныеТаблицы = АПИ_ПолучитьТаблицу();
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("ОписаниеТаблицы", ДанныеТаблицы.item);
ПараметрыОткрытия.Вставить("ОписаниеТаблицы", ДанныеТаблицы.Элемент);
ПараметрыОткрытия.Вставить("ОписаниеНовойКолонки", АПИ_ПолучитьНовоеЗначение("КолонкаТаблицы"));
ДополнительныеПараметры = Новый Структура("Путь,ЭтоНовый", ДанныеТаблицы.path, ДанныеТаблицы.isNew);
ДополнительныеПараметры = Новый Структура("Путь,ЭтоНовый", ДанныеТаблицы.Путь, ДанныеТаблицы.ЭтоНовый);
ОписаниеОповещения = Новый ОписаниеОповещения("РедактированиеТаблицыЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ОткрытьФорму(ИдентификаторОбработки + ".Форма.ФормаРедактированияТаблицы", ПараметрыОткрытия, ЭтотОбъект, , , , ОписаниеОповещения);
@@ -596,11 +596,7 @@ EndFunction
ОтключитьОбработчикОжидания("ИзменениеПозицииКурсораЗавершение");
Если Событие.params.currentElement = Неопределено Тогда
мТекущийЭлемент = Неопределено;
Иначе
мТекущийЭлемент = СлужебныеФункции().JSONВСтруктуру(Событие.params.currentElement);
КонецЕсли;
мДанныеТекущегоЭлемента = АПИ_ПолучитьДанныеТекущегоЭлементаИзСобытия(Событие.params.currentElement);
Таймаут = 0.1;
ПодключитьОбработчикОжидания("ИзменениеПозицииКурсораЗавершение", Таймаут, Истина);
@@ -611,22 +607,24 @@ EndFunction
Процедура ИзменениеПозицииКурсораЗавершение()
ОбновитьОтборПалитрыСвойств();
Если мТекущийЭлемент = Неопределено Тогда
Если мДанныеТекущегоЭлемента = Неопределено Тогда
Возврат;
КонецЕсли;
КонецЕсли;
НаборСвойств = мДанныеТекущегоЭлемента.Элемент.НаборСвойств;
Для Каждого СтрокаТаблица Из ПалитраСвойств Цикл
Если НЕ СтрокаТаблица.Отбор Тогда
Продолжить;
КонецЕсли;
Если мТекущийЭлемент.НаборСвойств.Свойство(СтрокаТаблица.ИмяПоля) Тогда
Если НаборСвойств.Свойство(СтрокаТаблица.ИмяПоля) Тогда
Если СтрокаТаблица.Категория = "Цвет" Тогда
СтрокаТаблица["Значение" + СтрокаТаблица.Категория] = WebЦвета[мТекущийЭлемент.НаборСвойств[СтрокаТаблица.ИмяПоля]];
СтрокаТаблица["Значение" + СтрокаТаблица.Категория] = WebЦвета[НаборСвойств[СтрокаТаблица.ИмяПоля]];
ИначеЕсли СтрокаТаблица.Категория = "СписокЗначений" Тогда
СтрокаТаблица["Значение" + СтрокаТаблица.Категория].ЗагрузитьЗначения(мТекущийЭлемент.НаборСвойств[СтрокаТаблица.ИмяПоля]);
СтрокаТаблица["Значение" + СтрокаТаблица.Категория].ЗагрузитьЗначения(НаборСвойств[СтрокаТаблица.ИмяПоля]);
Иначе
СтрокаТаблица["Значение" + СтрокаТаблица.Категория] = мТекущийЭлемент.НаборСвойств[СтрокаТаблица.ИмяПоля];
СтрокаТаблица["Значение" + СтрокаТаблица.Категория] = НаборСвойств[СтрокаТаблица.ИмяПоля];
КонецЕсли;
СтрокаТаблица.Изменено = Истина;
@@ -732,9 +730,11 @@ EndFunction
&НаКлиенте
Процедура ПалитраСвойствПриАктивизацииСтроки(Элемент)
Если мТекущийЭлемент = Неопределено Тогда
Если мДанныеТекущегоЭлемента = Неопределено Тогда
Возврат;
КонецЕсли;
КонецЕсли;
АктивныйЭлемент = мДанныеТекущегоЭлемента.Элемент;
ТекущаяСтрока = Элементы.ПалитраСвойств.ТекущиеДанные;
@@ -754,8 +754,8 @@ EndFunction
КонецЕсли;
СписокСвойств = УправлениеСвойствами().ПолучитьСписокСвойствПоТипу(
мТекущийЭлемент.ТипЭлемента,
мТекущийЭлемент.ВидЭлемента,
АктивныйЭлемент.ТипЭлемента,
АктивныйЭлемент.ВидЭлемента,
ТекущаяСтрока.ИмяПоля);
Элементы.ПалитраСвойствЗначениеСписок.СписокВыбора.Очистить();
@@ -766,7 +766,13 @@ EndFunction
&НаКлиенте
Процедура ПалитраСвойствЗначениеСтрокаАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
Если НЕ мТекущийЭлемент.НаборСвойств.Свойство("Заголовок") Тогда
Если мДанныеТекущегоЭлемента = Неопределено Тогда
Возврат;
КонецЕсли;
НаборСвойств = мДанныеТекущегоЭлемента.Элемент.НаборСвойств;
Если НЕ НаборСвойств.Свойство("Заголовок") Тогда
Возврат;
КонецЕсли;
@@ -779,7 +785,7 @@ EndFunction
Возврат;
КонецЕсли;
Варианты = ПолучитьВарианты(мТекущийЭлемент.НаборСвойств.Заголовок);
Варианты = ПолучитьВарианты(НаборСвойств.Заголовок);
ДанныеВыбора = Новый СписокЗначений;
Сч = 0;
@@ -797,7 +803,7 @@ EndFunction
Для Каждого Вариант Из Варианты.Новые Цикл
ТекВариант = Вариант;
Если мТекущийЭлемент.НаборСвойств.Свойство("СписокВыбора") Тогда
Если НаборСвойств.Свойство("СписокВыбора") Тогда
ТекВариант = "ПеречислениеСсылка." + Вариант;
Иначе
ТекВариант = "СправочникСсылка." + Вариант;
@@ -989,12 +995,12 @@ EndFunction
#Область ПалитраСвойств
&НаКлиенте
Процедура ОбновитьОтборПалитрыСвойств()
Процедура ОбновитьОтборПалитрыСвойств()
Для Каждого СтрокаТаблица Из ПалитраСвойств Цикл
СтрокаТаблица.Отбор =
мТекущийЭлемент <> Неопределено И
ТекущийЭлемент.ТипЭлемента = СтрокаТаблица.ТипЭлемента) И
ТекущийЭлемент.ВидЭлемента = СтрокаТаблица.ВидЭлемента) И
мДанныеТекущегоЭлемента <> Неопределено И
ДанныеТекущегоЭлемента.Элемент.ТипЭлемента = СтрокаТаблица.ТипЭлемента) И
ДанныеТекущегоЭлемента.Элемент.ВидЭлемента = СтрокаТаблица.ВидЭлемента) И
(ЭтотОбъект.ПоказыватьВсеСвойства ИЛИ СтрокаТаблица.Основное);
КонецЦикла;
@@ -1103,14 +1109,16 @@ EndFunction
&НаКлиенте
Процедура ИзменитьЗначениеСвойстваПалитры()
Результат = Новый Структура;
РезультатПоСвойству = Новый Структура;
Результат.Вставить(мТекущийЭлемент.УИД, РезультатПоСвойству);
Если мДанныеТекущегоЭлемента = Неопределено Тогда
Возврат;
КонецЕсли;
ТекущаяСтрока = Элементы.ПалитраСвойств.ТекущиеДанные;
ТекущееЗначение = ТекущаяСтрока["Значение" + ТекущаяСтрока.Категория];
НаборСвойств = мДанныеТекущегоЭлемента.Элемент.НаборСвойств;
//Если ТекущаяСтрока.Категория = "СписокЗначений" Тогда
// ТекущаяСтрока.Изменено = Истина;
@@ -1129,25 +1137,24 @@ EndFunction
//Парсер().ПарсингНабораСвойств(Новый Структура, Парсер().НовыйТекст("{Тип = " + ТекущаяСтрока.ЗначениеСтрока + "}", 0, 0), ОписаниеТипов);
// мТекущийЭлемент.ОписаниеТипов = ОписаниеТипов;
Если ТекущаяСтрока.Категория = "Цвет" Тогда
РезультатПоСвойству.Вставить(ТекущаяСтрока.ИмяПоля, ТекущаяСтрока.ЗначениеСтрока);
НаборСвойств.Вставить(ТекущаяСтрока.ИмяПоля, ТекущаяСтрока.ЗначениеСтрока);
Иначе
РезультатПоСвойству.Вставить(ТекущаяСтрока.ИмяПоля, ТекущееЗначение);
НаборСвойств.Вставить(ТекущаяСтрока.ИмяПоля, ТекущееЗначение);
КонецЕсли;
Иначе
ТекущаяСтрока.Изменено = Ложь;
РезультатПоСвойству.Вставить(ТекущаяСтрока.ИмяПоля, Неопределено);
НаборСвойств.Вставить(ТекущаяСтрока.ИмяПоля, Неопределено);
КонецЕсли;
мОтключитьОбработчикОбновленияТекущегоЭлементаРедактора = Истина;
УстановитьСвойства(Результат);
УстановитьСвойства();
КонецПроцедуры
&НаКлиенте
Процедура УстановитьСвойства(НаборСвойств)
ДанныеСтрока = СлужебныеФункции().СтруктураВJSON(НаборСвойств);
АПИ_УстановитьСвойства(ДанныеСтрока);
Процедура УстановитьСвойства()
АПИ_СоздатьОбновитьЭлемент(мДанныеТекущегоЭлемента);
КонецПроцедуры
&НаКлиенте
@@ -2036,7 +2043,7 @@ EndFunction
&НаКлиенте
Функция АПИ_ПолучитьПараметрыПередачиЭлемента(Элемент, Путь, ЭтоНовый)
Возврат Новый Структура("item,path,isNew", Элемент, Путь, ЭтоНовый);
Возврат Новый Структура("Элемент,Путь,ЭтоНовый", Элемент, Путь, ЭтоНовый);
КонецФункции
&НаКлиенте
@@ -2060,9 +2067,9 @@ EndFunction
КонецПроцедуры
&НаКлиенте
Процедура АПИ_УстановитьСвойства(Текст)
мКонтекстОкнаРедактораHTML.setProperties(Текст);
КонецПроцедуры
Функция АПИ_ПолучитьДанныеТекущегоЭлементаИзСобытия(Текст)
Возврат СлужебныеФункции().JSONВСтруктуру(Текст);
КонецФункции
&НаКлиенте
Функция АПИ_ПолучитьТаблицу()

View File

@@ -1,6 +1,6 @@
import { defineConfig } from "vite"
import { viteSingleFile } from "vite-plugin-singlefile"
import path from "path"
import * as path from "path"
export default defineConfig((api) => {
const isDev = api.mode === "development"

View File

@@ -3,7 +3,7 @@ import { viteSingleFile } from "vite-plugin-singlefile"
import monacoEditorPlugin from "vite-plugin-monaco-editor"
import replaceGlobalThis from "./vite-build-plugins/replace"
import zipPack from "vite-plugin-zip-pack"
import path from "path"
import * as path from "path"
export default defineConfig((api) => {
const isDev = api.mode === "development"