mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-05 09:40:52 +03:00
feat(form-decompile,form-compile): общие свойства элемента DefaultItem/FileDragMode/EnableStartDrag/SkipOnInput (кластер generic element props)
Эти свойства — общие для любого типа элемента (таблица, поле, надпись, картинка, кнопка), а не специфичны для таблицы. Раньше обрабатывались только в дин-список-блоке Table → терялись на PictureDecoration/PictureField/LabelField/InputField/Button. Перенесены в общий Emit-Layout/Add-Layout (универсальны — 17 вызовов компилятора, один вызов декомпилятора на каждый элемент): - DefaultItem (элемент по умолчанию), EnableStartDrag, FileDragMode — захват при наличии. - SkipOnInput — теперь эмитится явное значение, включая false (раньше только true); декомпилятор захватывает фактическое значение. - Вынесены в helper Emit-CommonElementProps; убраны дубли из дин-список-блока Table (useAlternationRowColor/initialTreeView остаются table-specific) и из Emit-Table (enableStartDrag). Зеркало в form-compile.py идентично (py==ps1 проверено). Валидация: FileDragMode/DefaultItem/EnableStartDrag — 0 LOST / 0 ADDED (полностью закрыты на всех типах); SkipOnInput 141→37 (остаток — companion/nested-cmdbar кнопки, редундантный false, в BACKLOG); регресс 33/33 ps+py; сертификация в 1С PASS; harness 8300→7971 (−329), 0 fail, match 7→8. Spec: defaultItem/enableStartDrag/fileDragMode/skipOnInput → раздел 4.1 (общие свойства). В BACKLOG: хвост SkipOnInput на companion + мис-атрибуция дубликатов в harness. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
1d158e3218
commit
a9e1ab64c8
@@ -1,4 +1,4 @@
|
||||
# form-compile v1.40 — Compile 1C managed form from JSON or object metadata
|
||||
# form-compile v1.41 — Compile 1C managed form from JSON or object metadata
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
param(
|
||||
[string]$JsonPath,
|
||||
@@ -2405,9 +2405,21 @@ function Emit-CommonFlags {
|
||||
# историческим выводом input/label, чтобы не сдвигать существующие снапшоты.
|
||||
# -skipHeight: для Table (height → HeightInTableRows, эмитится в Emit-Table).
|
||||
# -multiLineDefault: input без явного autoMaxWidth при multiLine → AutoMaxWidth=false.
|
||||
# Общие свойства элемента (любой тип, включая Button/cmdBar): default/skip/drag.
|
||||
function Emit-CommonElementProps {
|
||||
param($el, [string]$indent)
|
||||
if ($el.defaultItem -eq $true) { X "$indent<DefaultItem>true</DefaultItem>" }
|
||||
if ($el.PSObject.Properties['skipOnInput'] -and $null -ne $el.skipOnInput) {
|
||||
$siv = if ($el.skipOnInput -eq $true) { 'true' } else { 'false' }
|
||||
X "$indent<SkipOnInput>$siv</SkipOnInput>"
|
||||
}
|
||||
if ($el.enableStartDrag -eq $true) { X "$indent<EnableStartDrag>true</EnableStartDrag>" }
|
||||
if ($el.fileDragMode) { X "$indent<FileDragMode>$($el.fileDragMode)</FileDragMode>" }
|
||||
}
|
||||
|
||||
function Emit-Layout {
|
||||
param($el, [string]$indent, [switch]$skipHeight, [bool]$multiLineDefault = $false)
|
||||
if ($el.skipOnInput -eq $true) { X "$indent<SkipOnInput>true</SkipOnInput>" }
|
||||
Emit-CommonElementProps -el $el -indent $indent
|
||||
$amwExplicit = ($el.PSObject.Properties.Name -contains 'autoMaxWidth')
|
||||
if ($amwExplicit) {
|
||||
if ($el.autoMaxWidth -eq $false) { X "$indent<AutoMaxWidth>false</AutoMaxWidth>" }
|
||||
@@ -2960,10 +2972,9 @@ function Emit-LabelField {
|
||||
# DSL-ключ переопределяет; декомпилятор инвертирует (опускает значения = дефолту).
|
||||
function Emit-DynListTableBlock {
|
||||
param($el, [string]$indent)
|
||||
# Group B (условные опц.): defaultItem / useAlternationRowColor / fileDragMode
|
||||
if ($el.defaultItem -eq $true) { X "$indent<DefaultItem>true</DefaultItem>" }
|
||||
# UseAlternationRowColor — специфично для list-таблицы (defaultItem/fileDragMode/
|
||||
# enableStartDrag — общие, эмитятся в Emit-Layout)
|
||||
if ($el.useAlternationRowColor -eq $true) { X "$indent<UseAlternationRowColor>true</UseAlternationRowColor>" }
|
||||
if ($el.fileDragMode) { X "$indent<FileDragMode>$($el.fileDragMode)</FileDragMode>" }
|
||||
# Group A (гарант. блок, n=5079): дефолт + override
|
||||
$ar = if ($el.autoRefresh -eq $true) { "true" } else { "false" }
|
||||
X "$indent<AutoRefresh>$ar</AutoRefresh>"
|
||||
@@ -3019,7 +3030,6 @@ function Emit-Table {
|
||||
}
|
||||
if ($el.choiceMode -eq $true) { X "$inner<ChoiceMode>true</ChoiceMode>" }
|
||||
if ($el.initialTreeView) { X "$inner<InitialTreeView>$($el.initialTreeView)</InitialTreeView>" }
|
||||
if ($el.enableStartDrag -eq $true) { X "$inner<EnableStartDrag>true</EnableStartDrag>" }
|
||||
if ($el.enableDrag -eq $true) { X "$inner<EnableDrag>true</EnableDrag>" }
|
||||
if ($el.rowPictureDataPath) { X "$inner<RowPictureDataPath>$($el.rowPictureDataPath)</RowPictureDataPath>" }
|
||||
if ($el.rowsPicture) {
|
||||
@@ -3143,6 +3153,7 @@ function Emit-Button {
|
||||
|
||||
X "$indent<Button name=`"$name`" id=`"$id`">"
|
||||
$inner = "$indent`t"
|
||||
# (общие свойства — через Emit-Layout ниже; отдельный вызов был бы двойной эмиссией)
|
||||
|
||||
# Type — context-aware:
|
||||
# Inside command bar (cmdBar/autoCmdBar/popup) only CommandBarButton/CommandBarHyperlink are valid.
|
||||
|
||||
Reference in New Issue
Block a user