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:
		| @@ -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) | ||||
|   } | ||||
|  | ||||
|   | ||||
| @@ -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) { | ||||
|   | ||||
| @@ -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()) | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -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[] { | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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)[] = [] | ||||
|   | ||||
| @@ -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) | ||||
|     } | ||||
|   } | ||||
|   | ||||
| @@ -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) | ||||
|   } | ||||
|   | ||||
| @@ -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"], | ||||
|   | ||||
| @@ -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 | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -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 { | ||||
|   | ||||
| @@ -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 = ": " | ||||
|     } | ||||
|   | ||||
| @@ -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 | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -60,7 +60,7 @@ export class TableRowMap { | ||||
|     } | ||||
|  | ||||
|     if (item.value || !item.hasCheckbox) { | ||||
|       column._hasValue = true | ||||
|       column.hasValue = true | ||||
|     } | ||||
|  | ||||
|     this.currentRow.items.set(column, item) | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -105,7 +105,7 @@ | ||||
| 	Если ПустаяСтрока(ИмяРеквизита) Тогда | ||||
| 		ВызватьИсключение  | ||||
| 			"Не заполнено имя реквизита в построителе схемы формы.  | ||||
| 			||Это ошибка в обработке. Зарегистрируйте, пожалуйста, ошибку по адресу https://github.com/crimsongoldteam/md_design/issues"; | ||||
| 			|Это ошибка в обработке. Зарегистрируйте, пожалуйста, ошибку по адресу https://github.com/crimsongoldteam/md_design/issues"; | ||||
| 	КонецЕсли; | ||||
| 	Результат = Новый Структура; | ||||
| 	Результат.Вставить("Имя", ПараметрыВыполнения.Префикс + ИмяРеквизита); | ||||
|   | ||||
| @@ -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ВСтруктуру(Текст); | ||||
| КонецФункции | ||||
|  | ||||
| &НаКлиенте | ||||
| Функция АПИ_ПолучитьТаблицу() | ||||
|   | ||||
										
											Binary file not shown.
										
									
								
							| @@ -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" | ||||
|   | ||||
| @@ -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" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user