mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-06-15 10:24:57 +03:00
feat(form-decompile,form-compile): оформление заголовка + CurrentRowUse на Pages
Контейнер вкладок <Pages> может нести оформление заголовка (TitleFont/TitleTextColor/ TitleBackColor/…) и <CurrentRowUse>. Декомпилятор оформление УЖЕ захватывал (через Add-CommonProps→Add-Appearance), но Emit-Pages не вызывал Emit-Appearance → терялось. CurrentRowUse не ловился у Pages (только Table). Компилятор: Emit-Appearance (профиль field, как у Page) после Emit-Layout + CurrentRowUse после PagesRepresentation (порядок XSD). Декомпилятор: захват currentRowUse в обработчике Pages. Зеркало py. currentRowUse → allowlist (ps1+py). Корпус 8.3.24: Pages title-appearance ~5, CurrentRowUse ~3. Выборка 8 форм (КлиентБанк/ЗагрузкаВыписки, Контрагенты/ФормаНовогоЭлемента, … acc+erp): match 0→8, TOTAL→0. ps1==py байт-в-байт. Регресс 43/43. Spec обновлён. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# form-compile v1.154 — Compile 1C managed form from JSON or object metadata
|
||||
# form-compile v1.155 — Compile 1C managed form from JSON or object metadata
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
param(
|
||||
[string]$JsonPath,
|
||||
@@ -2917,7 +2917,7 @@ function Emit-Element {
|
||||
"wrap"=1;"openButton"=1;"listChoiceMode"=1;"showInFooter"=1
|
||||
"extendedEditMultipleValues"=1;"chooseType"=1;"autoCellHeight"=1
|
||||
"choiceButtonRepresentation"=1;"footerHorizontalAlign"=1;"headerHorizontalAlign"=1
|
||||
"headerDataPath"=1;"headerFormat"=1
|
||||
"headerDataPath"=1;"headerFormat"=1;"currentRowUse"=1
|
||||
"format"=1;"editFormat"=1;"choiceParameters"=1;"choiceParameterLinks"=1;"typeLink"=1
|
||||
# label/hyperlink
|
||||
"hyperlink"=1;"formatted"=1
|
||||
@@ -4611,10 +4611,15 @@ function Emit-Pages {
|
||||
if ($el.pagesRepresentation) {
|
||||
X "$inner<PagesRepresentation>$($el.pagesRepresentation)</PagesRepresentation>"
|
||||
}
|
||||
# Использование текущей строки (после PagesRepresentation, порядок XSD)
|
||||
if ($el.currentRowUse) { X "$inner<CurrentRowUse>$($el.currentRowUse)</CurrentRowUse>" }
|
||||
|
||||
Emit-CommonFlags -el $el -indent $inner
|
||||
Emit-Layout -el $el -indent $inner
|
||||
|
||||
# Оформление (цвета/шрифты/граница) заголовка группы страниц — TitleFont/TitleTextColor/… (как у Page)
|
||||
Emit-Appearance -el $el -indent $inner -profile 'field'
|
||||
|
||||
# Companion
|
||||
Emit-Companion -tag "ExtendedTooltip" -name "${name}РасширеннаяПодсказка" -indent $inner -content $el.extendedTooltip
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# form-compile v1.154 — Compile 1C managed form from JSON or object metadata
|
||||
# form-compile v1.155 — Compile 1C managed form from JSON or object metadata
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
import argparse
|
||||
import copy
|
||||
@@ -2034,7 +2034,7 @@ KNOWN_KEYS = {
|
||||
"wrap", "openButton", "listChoiceMode", "showInHeader", "showInFooter",
|
||||
"extendedEditMultipleValues", "chooseType", "autoCellHeight",
|
||||
"choiceButtonRepresentation", "footerHorizontalAlign", "headerHorizontalAlign",
|
||||
"headerDataPath", "headerFormat",
|
||||
"headerDataPath", "headerFormat", "currentRowUse",
|
||||
"format", "editFormat", "choiceParameters", "choiceParameterLinks", "typeLink",
|
||||
"hyperlink", "formatted",
|
||||
"collapsedTitle", "showTitle", "united", "collapsed", "behavior",
|
||||
@@ -4350,10 +4350,16 @@ def emit_pages(lines, el, name, eid, indent):
|
||||
|
||||
if el.get('pagesRepresentation'):
|
||||
lines.append(f'{inner}<PagesRepresentation>{el["pagesRepresentation"]}</PagesRepresentation>')
|
||||
# \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 (\u043f\u043e\u0441\u043b\u0435 PagesRepresentation, \u043f\u043e\u0440\u044f\u0434\u043e\u043a XSD)
|
||||
if el.get('currentRowUse'):
|
||||
lines.append(f'{inner}<CurrentRowUse>{el["currentRowUse"]}</CurrentRowUse>')
|
||||
|
||||
emit_common_flags(lines, el, inner)
|
||||
emit_layout(lines, el, inner)
|
||||
|
||||
# \u041e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0435 (\u0446\u0432\u0435\u0442\u0430/\u0448\u0440\u0438\u0444\u0442\u044b/\u0433\u0440\u0430\u043d\u0438\u0446\u0430) \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0433\u0440\u0443\u043f\u043f\u044b \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u2014 TitleFont/TitleTextColor/\u2026 (\u043a\u0430\u043a \u0443 Page)
|
||||
emit_appearance(lines, el, inner, 'field')
|
||||
|
||||
# Companion
|
||||
emit_companion(lines, 'ExtendedTooltip', f'{name}\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f\u041f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430', inner, el.get('extendedTooltip'))
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# form-decompile v0.129 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# form-decompile v0.130 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
|
||||
param(
|
||||
@@ -2090,6 +2090,7 @@ function Decompile-Element {
|
||||
$obj[$key] = $name
|
||||
Add-CommonProps $obj $node $name
|
||||
$pr = Get-Child $node 'PagesRepresentation'; if ($pr) { $obj['pagesRepresentation'] = $pr }
|
||||
$cru = Get-Child $node 'CurrentRowUse'; if ($cru) { $obj['currentRowUse'] = $cru }
|
||||
$kids = Decompile-Children $node
|
||||
if ($kids) { $obj['children'] = $kids }
|
||||
}
|
||||
|
||||
@@ -223,7 +223,7 @@ companion-панели с собственным контентом. Оба не
|
||||
|
||||
### 4.1e. Оформление элемента (цвета / шрифты / граница)
|
||||
|
||||
Прямые свойства оформления элемента. Ключи — англ. camelCase 1:1 с тегами; **принимаются рус. синонимы** (forgiving). Применимо к полям (input/check/radio/labelField/picField/calendar), декорациям (label/picture), кнопкам (button), группам (group/columnGroup), **страницам (page: `backColor`/`titleTextColor`/`titleFont`)**, **попапам (popup: `titleTextColor`/`titleFont`)** и таблицам (table); порядок тегов в XML — по базовому типу (профиль), компилятор расставляет сам (1С толерантна к порядку оформления внутри элемента).
|
||||
Прямые свойства оформления элемента. Ключи — англ. camelCase 1:1 с тегами; **принимаются рус. синонимы** (forgiving). Применимо к полям (input/check/radio/labelField/picField/calendar), декорациям (label/picture), кнопкам (button), группам (group/columnGroup), **страницам (page/pages: `backColor`/`titleTextColor`/`titleFont`)**, **попапам (popup: `titleTextColor`/`titleFont`)** и таблицам (table); порядок тегов в XML — по базовому типу (профиль), компилятор расставляет сам (1С толерантна к порядку оформления внутри элемента).
|
||||
|
||||
| Ключ | Тег | Рус. синоним |
|
||||
|------|-----|--------------|
|
||||
@@ -667,7 +667,7 @@ companion-панели с собственным контентом. Оба не
|
||||
Page поддерживает `group` для задания ориентации содержимого и `children` для вложенных элементов.
|
||||
Также `picture` — картинка-иконка вкладки (формат «картинка-ссылка» из §4.1: скаляр-Ref/`abs:X` или объект `{src, loadTransparent?, transparentPixel?}`, дефолт `loadTransparent=false`).
|
||||
|
||||
Pages поддерживает `pagesRepresentation`: `None`, `TabsOnTop`, `TabsOnBottom`, `TabsOnLeft`, `TabsOnRight`.
|
||||
Pages поддерживает `pagesRepresentation`: `None`, `TabsOnTop`, `TabsOnBottom`, `TabsOnLeft`, `TabsOnRight`; `currentRowUse` (`Auto`/`DontUse`/…); оформление заголовка вкладок (`titleFont`/`titleTextColor`/`titleBackColor`/… — как у `page`).
|
||||
|
||||
#### button — Button
|
||||
|
||||
|
||||
Reference in New Issue
Block a user