mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-24 13:41:01 +03:00
feat(form-decompile,form-compile): ExtendedTooltip own-content (объектная форма)
ExtendedTooltip — это LabelDecoration: может нести own-content (layout/оформление/
флаги/hyperlink) вместо/вместе с текстом. Объектная форма extendedTooltip:
{ text?, formatted?, width?, autoMaxWidth?, maxWidth?, height?, horizontalStretch?,
verticalAlign?, titleHeight?, hyperlink?, visible?, enabled?, textColor?, font?, … }.
Дизамбигуация от текст-формы (строка/ML/{text,formatted}) — по наличию структурного
ключа. Переиспользует Emit-Layout/Emit-Appearance/Emit-CommonFlags + Emit-GenericScalars.
Порядок: own-content ПЕРЕД Title (в корпусе layout-first 582 vs 10) — заодно убирает
шум атрибуции харнесса на многострочном контенте. Декомпилятор собирает объект
(Add-Layout/Add-GenericScalars/Add-Appearance/флаги/hyperlink), текст → .text;
текст-only остаётся строкой (обратная совместимость).
Форма WildberriesПереходРВБ: TOTAL 35→2 (остаток — отдельный rowsPicture
LoadTransparent). Зеркало py (байт-в-байт), кейс input-fields (own-content+текст и
width-only) сертифицирован в 1С. Регресс 39/39 ps1+py. Хвост: События компаньона
(нужно имя-обработчик) — отложено.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
fb3bce5811
commit
ea43522b5a
@@ -1,4 +1,4 @@
|
||||
# form-decompile v0.56 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# form-decompile v0.57 — Decompile 1C managed Form.xml to JSON DSL (draft)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
# ВНИМАНИЕ: раундтрип не гарантируется. Навык исключён из авто-использования моделью.
|
||||
param(
|
||||
@@ -1599,9 +1599,30 @@ function Decompile-Element {
|
||||
}
|
||||
Add-Layout $obj $node
|
||||
Add-GenericScalars $obj $node
|
||||
# extendedTooltip: контент companion <ExtendedTooltip><Title> (любой элемент)
|
||||
$etTitle = $node.SelectSingleNode("lf:ExtendedTooltip/lf:Title", $ns)
|
||||
if ($etTitle) { $et = Get-MLFormattedValue $etTitle; if ($null -ne $et) { $obj['extendedTooltip'] = $et } }
|
||||
# extendedTooltip: companion <ExtendedTooltip> (это LabelDecoration). Текст-форма (только <Title>) →
|
||||
# строка/{text,formatted}. Own-content (layout/оформление/флаги/hyperlink) → объект { text?, … }.
|
||||
# Events компаньона пока НЕ захватываем (хвост — требует имя-обработчик).
|
||||
$etNode = $node.SelectSingleNode("lf:ExtendedTooltip", $ns)
|
||||
if ($etNode) {
|
||||
$etTitle = $etNode.SelectSingleNode("lf:Title", $ns)
|
||||
$textVal = if ($etTitle) { Get-MLFormattedValue $etTitle } else { $null }
|
||||
$etObj = [ordered]@{}
|
||||
Add-Layout $etObj $etNode
|
||||
Add-GenericScalars $etObj $etNode
|
||||
Add-Appearance $etObj $etNode
|
||||
if ((Get-Child $etNode 'Visible') -eq 'false') { $etObj['hidden'] = $true }
|
||||
if ((Get-Child $etNode 'Enabled') -eq 'false') { $etObj['disabled'] = $true }
|
||||
if ((Get-Child $etNode 'Hyperlink') -eq 'true') { $etObj['hyperlink'] = $true }
|
||||
if ($etObj.Count -gt 0) {
|
||||
if ($null -ne $textVal) {
|
||||
if ($textVal -is [System.Collections.IDictionary]) { $etObj['text'] = $textVal['text']; if ($textVal['formatted']) { $etObj['formatted'] = $true } }
|
||||
else { $etObj['text'] = $textVal }
|
||||
}
|
||||
$obj['extendedTooltip'] = $etObj
|
||||
} elseif ($null -ne $textVal) {
|
||||
$obj['extendedTooltip'] = $textVal
|
||||
}
|
||||
}
|
||||
# companion-панели с контентом: AutoCommandBar → commandBar, ContextMenu → contextMenu (любой элемент)
|
||||
$isDynListTable = ($tag -eq 'Table') -and (Has-Child $node 'UpdateOnDataChange')
|
||||
$cb = Decompile-CompanionPanel $node 'AutoCommandBar' $isDynListTable
|
||||
|
||||
Reference in New Issue
Block a user