feat: lit/divi-colors-set und lit/divi-variables-set in der Divi-Integration; je ein geteilter Farben- und Variablen-Adapter

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Jan-Niclas Loosen
2026-10-19 14:24:55 +02:00
co-authored by Claude Sonnet 5.5
parent 88a939787d
commit 0893b7e184
4 changed files with 29 additions and 4 deletions
+1 -1
View File
@@ -125,7 +125,7 @@ Einzelne Module bekommen Presets mit `lit-divi-insert`, `lit-divi-update` und `l
Standardaussehen. Ein **Standard-Preset** wird nicht „entkoppelt“, weil Divi es ohne Verweis anwendet; detach Standardaussehen. Ein **Standard-Preset** wird nicht „entkoppelt“, weil Divi es ohne Verweis anwendet; detach
entfernt dort nur ausdrückliche Verweise und sagt das in `warnings`. Zum Beenden der Standardwirkung das Preset entfernt dort nur ausdrückliche Verweise und sagt das in `warnings`. Zum Beenden der Standardwirkung das Preset
löschen (`lit/divi-presets-delete`) oder mit `make_default: false` den Standard aufheben. löschen (`lit/divi-presets-delete`) oder mit `make_default: false` den Standard aufheben.
- Variablen: `variable` wird noch nicht unterstützt (`unsupported`; Variablen folgen mit Etappe 4c). - Variablen: `variable` (Name oder ID) ersetzt jeden ganzen Verweis auf die Variable durch ihren aktuellen Wert, auch in Presets; danach lässt sie sich mit `lit/divi-variables-set` archivieren (löschen kann Divi sie nicht).
- Meldet die Antwort `hidden_count` größer als 0, können Seiten, die dieses Konto nicht lesen darf, noch Verweise - Meldet die Antwort `hidden_count` größer als 0, können Seiten, die dieses Konto nicht lesen darf, noch Verweise
enthalten; dann nennt sie den Hinweis auf `lit/divi-presets-delete` nicht. enthalten; dann nennt sie den Hinweis auf `lit/divi-presets-delete` nicht.
- Danach `lit/divi-presets-delete` aufrufen (Probelauf, `confirm`, `design_rev`); es meldet kein `in_use` mehr, - Danach `lit/divi-presets-delete` aufrufen (Probelauf, `confirm`, `design_rev`); es meldet kein `in_use` mehr,
+23 -3
View File
@@ -16,6 +16,7 @@ use LIT\MCP\Integrations\Divi\BlockTree\Parser;
use LIT\MCP\Integrations\Divi\Design\ColorRestorePlanner; use LIT\MCP\Integrations\Divi\Design\ColorRestorePlanner;
use LIT\MCP\Integrations\Divi\Design\DesignSystemReader; use LIT\MCP\Integrations\Divi\Design\DesignSystemReader;
use LIT\MCP\Integrations\Divi\Design\DesignSystemWriter; use LIT\MCP\Integrations\Divi\Design\DesignSystemWriter;
use LIT\MCP\Integrations\Divi\Design\DiviColorsSetAbility;
use LIT\MCP\Integrations\Divi\Design\DiviDesignSystemAbility; use LIT\MCP\Integrations\Divi\Design\DiviDesignSystemAbility;
use LIT\MCP\Integrations\Divi\Design\DesignChange; use LIT\MCP\Integrations\Divi\Design\DesignChange;
use LIT\MCP\Integrations\Divi\Design\DesignRights; use LIT\MCP\Integrations\Divi\Design\DesignRights;
@@ -28,6 +29,7 @@ use LIT\MCP\Integrations\Divi\Design\GlobalVariablesAdapter;
use LIT\MCP\Integrations\Divi\Design\DiviPresetsAssignAbility; use LIT\MCP\Integrations\Divi\Design\DiviPresetsAssignAbility;
use LIT\MCP\Integrations\Divi\Design\DiviPresetsDeleteAbility; use LIT\MCP\Integrations\Divi\Design\DiviPresetsDeleteAbility;
use LIT\MCP\Integrations\Divi\Design\DiviPresetsSetAbility; use LIT\MCP\Integrations\Divi\Design\DiviPresetsSetAbility;
use LIT\MCP\Integrations\Divi\Design\DiviVariablesSetAbility;
use LIT\MCP\Integrations\Divi\Design\PageRewriter; use LIT\MCP\Integrations\Divi\Design\PageRewriter;
use LIT\MCP\Integrations\Divi\Design\PresetAssignment; use LIT\MCP\Integrations\Divi\Design\PresetAssignment;
use LIT\MCP\Integrations\Divi\Design\PresetComposer; use LIT\MCP\Integrations\Divi\Design\PresetComposer;
@@ -91,6 +93,10 @@ final class DiviIntegration implements Integration, Bootable
private ThemeBuilderAccess $themeBuilderAccess; private ThemeBuilderAccess $themeBuilderAccess;
private DesignSystemWriter $designWriter; private DesignSystemWriter $designWriter;
private GlobalColorsAdapter $colorsAdapter;
private GlobalVariablesAdapter $variablesAdapter;
/** @var (Closure(): bool)|null Whether lit/divi-insert is enabled (ruling P9, E9, audit M2); null = always. */ /** @var (Closure(): bool)|null Whether lit/divi-insert is enabled (ruling P9, E9, audit M2); null = always. */
private ?Closure $diviWritable; private ?Closure $diviWritable;
@@ -114,6 +120,8 @@ final class DiviIntegration implements Integration, Bootable
$this->modules = new DiviModules(); $this->modules = new DiviModules();
$this->design = new DesignSystemReader(); $this->design = new DesignSystemReader();
$this->designWriter = new DesignSystemWriter(); $this->designWriter = new DesignSystemWriter();
$this->colorsAdapter = new GlobalColorsAdapter();
$this->variablesAdapter = new GlobalVariablesAdapter();
$this->diviWritable = $this->gate(static fn (ToolAvailability $t): bool => $t->allows('lit/divi-insert')); $this->diviWritable = $this->gate(static fn (ToolAvailability $t): bool => $t->allows('lit/divi-insert'));
$this->libraryInsertable = $this->gate( $this->libraryInsertable = $this->gate(
static fn (ToolAvailability $t): bool => $t->allows('lit/library-insert') static fn (ToolAvailability $t): bool => $t->allows('lit/library-insert')
@@ -270,8 +278,8 @@ final class DiviIntegration implements Integration, Bootable
$this->designChange(), $this->designChange(),
new SnapshotStore(), new SnapshotStore(),
new PresetRestorePlanner($this->designWriter, DesignRights::unfilteredHtml()), new PresetRestorePlanner($this->designWriter, DesignRights::unfilteredHtml()),
new ColorRestorePlanner($this->designWriter, new GlobalColorsAdapter()), new ColorRestorePlanner($this->designWriter, $this->colorsAdapter),
new VariableRestorePlanner($this->designWriter, new GlobalVariablesAdapter()) new VariableRestorePlanner($this->designWriter, $this->variablesAdapter)
), ),
new DiviPresetsAssignAbility( new DiviPresetsAssignAbility(
$this->designWriter, $this->designWriter,
@@ -280,12 +288,24 @@ final class DiviIntegration implements Integration, Bootable
), ),
new DiviDesignDetachAbility( new DiviDesignDetachAbility(
$this->designWriter, $this->designWriter,
new GlobalVariablesAdapter(), $this->variablesAdapter,
$this->designChange(), $this->designChange(),
$this->globalUsages(), $this->globalUsages(),
$this->pageRewriter($loader), $this->pageRewriter($loader),
DesignRights::unfilteredHtml() DesignRights::unfilteredHtml()
), ),
new DiviColorsSetAbility(
$this->designWriter,
$this->colorsAdapter,
$this->designChange(),
$this->globalUsages()
),
new DiviVariablesSetAbility(
$this->designWriter,
$this->variablesAdapter,
$this->designChange(),
$this->globalUsages()
),
]; ];
} }
@@ -57,6 +57,8 @@ final class DiviIntegrationTest extends TestCase
'lit/divi-design-restore', 'lit/divi-design-restore',
'lit/divi-presets-assign', 'lit/divi-presets-assign',
'lit/divi-design-detach', 'lit/divi-design-detach',
'lit/divi-colors-set',
'lit/divi-variables-set',
]; ];
public function testProvidesTheDiviAbilitiesOnlyWithDivi5(): void public function testProvidesTheDiviAbilitiesOnlyWithDivi5(): void
@@ -65,6 +65,8 @@ final class DiviToolFeaturesTest extends TestCase
'page-read', 'page-write', 'catalog', 'design-read', 'preset-write', 'library-read', 'library-write', 'page-read', 'page-write', 'catalog', 'design-read', 'preset-write', 'library-read', 'library-write',
'tb-write', 'roles', 'tb-write', 'roles',
], ],
'lit/divi-colors-set' => ['design-read', 'color-write'],
'lit/divi-variables-set' => ['design-read', 'variable-write'],
// Library (divi-library) // Library (divi-library)
'lit/library-list' => ['library-read', 'roles'], 'lit/library-list' => ['library-read', 'roles'],
'lit/library-find-similar' => ['page-read', 'catalog', 'roles'], 'lit/library-find-similar' => ['page-read', 'catalog', 'roles'],
@@ -348,6 +350,7 @@ final class DiviToolFeaturesTest extends TestCase
'lit/divi-node-copy' => 'page-write', 'lit/library-insert' => 'page-write', 'lit/divi-node-copy' => 'page-write', 'lit/library-insert' => 'page-write',
'lit/library-make-global' => 'library-write', 'lit/library-save' => 'library-write', 'lit/library-make-global' => 'library-write', 'lit/library-save' => 'library-write',
'lit/divi-presets-set' => 'preset-write', 'lit/divi-presets-delete' => 'preset-write', 'lit/divi-presets-set' => 'preset-write', 'lit/divi-presets-delete' => 'preset-write',
'lit/divi-colors-set' => 'color-write', 'lit/divi-variables-set' => 'variable-write',
'lit/divi-design-restore' => 'preset-write', 'lit/divi-design-detach' => 'preset-write', 'lit/divi-design-restore' => 'preset-write', 'lit/divi-design-detach' => 'preset-write',
'lit/divi-presets-assign' => 'page-write', 'lit/tb-assign' => 'tb-write', 'lit/tb-activate' => 'tb-write', 'lit/divi-presets-assign' => 'page-write', 'lit/tb-assign' => 'tb-write', 'lit/tb-activate' => 'tb-write',
'lit/tb-create-template' => 'tb-write', 'lit/tb-create-template' => 'tb-write',