From 4a68a977dcb4878b420870bf4cbb69de02d856db Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Mon, 8 Jun 2026 21:51:03 +0300 Subject: [PATCH] =?UTF-8?q?feat(form-decompile,form-compile):=20collapsedT?= =?UTF-8?q?itle=20=E2=80=94=20=D0=B7=D0=B0=D0=B3=D0=BE=D0=BB=D0=BE=D0=B2?= =?UTF-8?q?=D0=BE=D0=BA=20=D1=81=D0=B2=D1=91=D1=80=D0=BD=D1=83=D1=82=D0=BE?= =?UTF-8?q?=D0=B9=20=D0=B3=D1=80=D1=83=D0=BF=D0=BF=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ключ collapsedTitle у группы → (мультиязычный текст, как title/inputHint). Заголовок свёрнутого представления у collapsible/ popup групп. 172 файла в корпусе, не обрабатывался. Зеркало py (байт-в-байт). Кейс groups сертифицирован в 1С. Регресс 39/39 ps1+py. Co-Authored-By: Claude Opus 4.8 (1M context) --- .claude/skills/form-compile/scripts/form-compile.ps1 | 6 ++++-- .claude/skills/form-compile/scripts/form-compile.py | 7 +++++-- .claude/skills/form-decompile/scripts/form-decompile.ps1 | 3 ++- docs/form-dsl-spec.md | 1 + tests/skills/cases/form-compile/groups.json | 2 +- .../DataProcessors/СГруппами/Forms/Форма/Ext/Form.xml | 6 ++++++ 6 files changed, 19 insertions(+), 6 deletions(-) diff --git a/.claude/skills/form-compile/scripts/form-compile.ps1 b/.claude/skills/form-compile/scripts/form-compile.ps1 index 19c8b0d1..1d12b1b4 100644 --- a/.claude/skills/form-compile/scripts/form-compile.ps1 +++ b/.claude/skills/form-compile/scripts/form-compile.ps1 @@ -1,4 +1,4 @@ -# form-compile v1.83 — Compile 1C managed form from JSON or object metadata +# form-compile v1.84 — Compile 1C managed form from JSON or object metadata # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [string]$JsonPath, @@ -2582,7 +2582,7 @@ function Emit-Element { # label/hyperlink "hyperlink"=1;"formatted"=1 # group-specific - "showTitle"=1;"united"=1;"collapsed"=1;"behavior"=1 + "collapsedTitle"=1;"showTitle"=1;"united"=1;"collapsed"=1;"behavior"=1 # hierarchy "children"=1;"columns"=1 # table-specific @@ -3013,6 +3013,8 @@ function Emit-Group { # ShowTitle if ($el.showTitle -eq $false) { X "$innerfalse" } + # Заголовок свёрнутого представления (collapsible/popup) — мультиязычный текст + if ($el.collapsedTitle) { Emit-MLText -tag "CollapsedRepresentationTitle" -text $el.collapsedTitle -indent $inner } # United if ($el.united -eq $false) { X "$innerfalse" } diff --git a/.claude/skills/form-compile/scripts/form-compile.py b/.claude/skills/form-compile/scripts/form-compile.py index a3504e0b..055649ad 100644 --- a/.claude/skills/form-compile/scripts/form-compile.py +++ b/.claude/skills/form-compile/scripts/form-compile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# form-compile v1.83 — Compile 1C managed form from JSON or object metadata +# form-compile v1.84 — Compile 1C managed form from JSON or object metadata # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import copy @@ -1791,7 +1791,7 @@ KNOWN_KEYS = { "choiceButtonRepresentation", "footerHorizontalAlign", "headerHorizontalAlign", "format", "editFormat", "choiceParameters", "choiceParameterLinks", "typeLink", "hyperlink", "formatted", - "showTitle", "united", "collapsed", "behavior", + "collapsedTitle", "showTitle", "united", "collapsed", "behavior", "children", "columns", "changeRowSet", "changeRowOrder", "autoInsertNewRow", "rowFilter", "header", "footer", "commandBarLocation", "searchStringLocation", "viewStatusLocation", "searchControlLocation", @@ -3082,6 +3082,9 @@ def emit_group(lines, el, name, eid, indent): # ShowTitle if el.get('showTitle') is False: lines.append(f'{inner}false') + # Заголовок свёрнутого представления (collapsible/popup) — мультиязычный текст + if el.get('collapsedTitle'): + emit_mltext(lines, inner, 'CollapsedRepresentationTitle', el['collapsedTitle']) # United if el.get('united') is False: diff --git a/.claude/skills/form-decompile/scripts/form-decompile.ps1 b/.claude/skills/form-decompile/scripts/form-decompile.ps1 index ac849ca0..8b12f590 100644 --- a/.claude/skills/form-decompile/scripts/form-decompile.ps1 +++ b/.claude/skills/form-decompile/scripts/form-decompile.ps1 @@ -1,4 +1,4 @@ -# form-decompile v0.60 — Decompile 1C managed Form.xml to JSON DSL (draft) +# form-decompile v0.61 — Decompile 1C managed Form.xml to JSON DSL (draft) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью. param( @@ -1347,6 +1347,7 @@ function Decompile-Element { $rep = Get-Child $node 'Representation' if ($rep) { $repmap=@{'None'='none';'NormalSeparation'='normal';'WeakSeparation'='weak';'StrongSeparation'='strong'}; if ($repmap.ContainsKey($rep)) { $obj['representation']=$repmap[$rep] } else { $obj['representation']=$rep } } if ((Get-Child $node 'ShowTitle') -eq 'false') { $obj['showTitle'] = $false } + $crt = $node.SelectSingleNode("lf:CollapsedRepresentationTitle", $ns); if ($crt) { $ct = Get-LangText $crt; if ($null -ne $ct -and $ct -ne '') { $obj['collapsedTitle'] = $ct } } if ((Get-Child $node 'United') -eq 'false') { $obj['united'] = $false } if ((Get-Child $node 'Collapsed') -eq 'true') { $obj['collapsed'] = $true } $kids = Decompile-Children $node diff --git a/docs/form-dsl-spec.md b/docs/form-dsl-spec.md index ad0e4c6a..7e867481 100644 --- a/docs/form-dsl-spec.md +++ b/docs/form-dsl-spec.md @@ -339,6 +339,7 @@ companion-панели с собственным контентом. Оба не | `group` | string | Ориентация: `horizontal`, `vertical`, `alwaysHorizontal`, `alwaysVertical`. **`""`** → `` не эмитится (тег отсутствовал в исходнике; платформа сериализует «Группировку», только если она задана в конфигураторе — даже явный `Vertical` хранится, поэтому `""` ≠ `vertical`). Ключ обязателен как тип-маркер группы. (Legacy: `collapsible` = `vertical` + `behavior:'collapsible'`) | | `behavior` | string | Поведение (``): `usual`, `collapsible`, `popup`. **Отсутствие = Авто** (дефолт, не эмитится). Свёртываемая/всплывающая несут доп. свойства | | `collapsed` | bool | Свёрнута (у `collapsible`/`popup`) | +| `collapsedTitle` | string/object | Заголовок свёрнутого представления (``), мультиязычный текст | | `children` | array | Вложенные элементы | | `showTitle` | bool | Показывать заголовок группы | | `representation` | string | `none`, `normal`, `weak`, `strong` | diff --git a/tests/skills/cases/form-compile/groups.json b/tests/skills/cases/form-compile/groups.json index 1e0e9a02..cefe170d 100644 --- a/tests/skills/cases/form-compile/groups.json +++ b/tests/skills/cases/form-compile/groups.json @@ -22,7 +22,7 @@ { "input": "Поле2", "path": "Поле2", "title": "Поле 2" }, { "labelField": "Метка", "path": "Поле1", "groupVerticalAlign": "Center" } ]}, - { "group": "vertical", "name": "ГруппаПодвал", "behavior": "collapsible", "collapsed": true, "title": { "ru": "Подвал", "en": "Footer" }, "showLeftMargin": false, "enableContentChange": false, "children": [ + { "group": "vertical", "name": "ГруппаПодвал", "behavior": "collapsible", "collapsed": true, "title": { "ru": "Подвал", "en": "Footer" }, "collapsedTitle": "Развернуть подвал", "showLeftMargin": false, "enableContentChange": false, "children": [ { "input": "Поле3", "path": "Поле3", "title": "Поле 3" } ]} ], diff --git a/tests/skills/cases/form-compile/snapshots/groups/DataProcessors/СГруппами/Forms/Форма/Ext/Form.xml b/tests/skills/cases/form-compile/snapshots/groups/DataProcessors/СГруппами/Forms/Форма/Ext/Form.xml index 106ac5f3..6ece0b10 100644 --- a/tests/skills/cases/form-compile/snapshots/groups/DataProcessors/СГруппами/Forms/Форма/Ext/Form.xml +++ b/tests/skills/cases/form-compile/snapshots/groups/DataProcessors/СГруппами/Forms/Форма/Ext/Form.xml @@ -78,6 +78,12 @@ Vertical Collapsible true + + + ru + Развернуть подвал + + false false