Active
Project:
Display Builder
Version:
1.0.x-dev
Component:
Code
Priority:
Major
Category:
Task
Assigned:
Unassigned
Reporter:
Created:
1 Oct 2026 at 08:32 UTC
Updated:
19 Oct 2026 at 13:50 UTC
Jump to comment: Most recent
Child 6 of #3624396: Plan: Harden InstanceInterface, IslandInterface and DisplayBuildableInterface as public API before RC1. An island with a form, the four Contextual panels today, gets it through a pattern of its own:
IslandWithFormInterface declares static getFormClass() and hasFormClass(). Core's PluginWithFormsInterface has the same names as instance methods taking an operation, so an island cannot implement both, and the statics cannot be deprecated in place.ApiController calls getFormClass() on a class name, twice.builder_id holds the instance ID, instance_id the node ID, and instance the node data.setBuilderId() and setNodeId() pass state the build info already carries. setNodeId() has no caller.#[Island] gains forms. Islands implement PluginWithFormsInterface through PluginWithFormsTrait. configure stays the profile form. The in-builder form gets its own operation, contextual, named after where it shows, as core names the settings_tray form of blocks.IslandFormBase builds the plugin form through plugin_form.factory, with one build info shape on every path: island ID, instance ID, node ID, node data, contexts. Named as #3627256: IslandInterface: name the instance $instance, and settle the island API before RC1 names them.getFormClass() and hasFormClass() leave IslandWithFormInterface before RC1, with a change record. ApiController asks the island plugin instead of its class.setBuilderId() and setNodeId() removed: the build info carries what they set.display_builder_island_{island_id}: plugin_form.factory returns a subform, so IslandFormBase stays the wrapper that owns the ID.None.
IslandWithFormInterface::getFormClass() and hasFormClass() removed. Islands with a form implement PluginWithFormsInterface, and declare forms on #[Island].setBuilderId() and setNodeId() removed: the build info carries what they set.None.
Comments
Comment #2
mogtofu33 commentedComment #3
mogtofu33 commentedComment #4
mogtofu33 commentedComment #5
mogtofu33 commentedComment #6
mogtofu33 commented