@@ -21,12 +21,24 @@ public function __construct(
21
21
22
22
public function renderBrickWithWrapper (array $ contentBlocks ): string
23
23
{
24
- return sprintf ('<div class="inline-config-area">%s</div> ' , implode (PHP_EOL , $ contentBlocks ));
24
+ $ brickHash = $ this ->editableWorker ->buildBrickHash ();
25
+
26
+ return sprintf (
27
+ '<div class="inline-config-area" data-headless-element-hash="%s">%s</div> ' ,
28
+ $ brickHash ,
29
+ implode (PHP_EOL , $ contentBlocks )
30
+ );
25
31
}
26
32
27
- public function renderStandaloneEditableWithWrapper (string $ contentBlock ): string
33
+ public function renderStandaloneEditableWithWrapper (string $ contentBlock, Editable $ editable ): string
28
34
{
29
- return sprintf ('<div class="inline-config-area">%s</div> ' , $ contentBlock );
35
+ $ editableHash = $ this ->editableWorker ->buildEditableHash ($ editable );
36
+
37
+ return sprintf (
38
+ '<div class="inline-config-area" data-headless-element-hash="%s">%s</div> ' ,
39
+ $ editableHash ,
40
+ $ contentBlock
41
+ );
30
42
}
31
43
32
44
public function renderEditableWithWrapper (string $ type , array $ viewParameters ): string
@@ -52,7 +64,7 @@ public function buildEditable(HeadlessEditableInfo $headlessEditableInfo): Edita
52
64
53
65
private function buildStandardEditable (HeadlessEditableInfo $ headlessEditableInfo ): Editable |string |array
54
66
{
55
- return $ this ->processEditable ($ headlessEditableInfo );
67
+ return $ this ->processEditable ($ headlessEditableInfo, $ this -> getEditable ( $ headlessEditableInfo ) );
56
68
}
57
69
58
70
private function buildColumnEditable (HeadlessEditableInfo $ headlessEditableInfo ): string |array
@@ -72,13 +84,14 @@ private function buildColumnEditable(HeadlessEditableInfo $headlessEditableInfo)
72
84
foreach ($ headlessEditableInfo ->getChildren () as $ headlessColumnEditableInfo ) {
73
85
74
86
$ areaBlockDataResponse = null ;
87
+ $ editable = $ this ->getEditable ($ headlessEditableInfo );
75
88
76
89
ob_start ();
77
90
78
- echo $ this ->processEditable ($ headlessColumnEditableInfo , true );
91
+ echo $ this ->processEditable ($ headlessColumnEditableInfo , $ editable , true );
79
92
80
93
if ($ editMode === false ) {
81
- $ areaBlockDataResponse = $ this ->processEditable ($ headlessColumnEditableInfo );
94
+ $ areaBlockDataResponse = $ this ->processEditable ($ headlessColumnEditableInfo, $ editable );
82
95
}
83
96
84
97
$ areaBlockHtmlResponse = ob_get_clean ();
@@ -100,13 +113,14 @@ private function buildAreaEditable(HeadlessEditableInfo $headlessEditableInfo):
100
113
{
101
114
$ areaDataResponse = '' ;
102
115
$ editMode = $ headlessEditableInfo ->isEditMode ();
116
+ $ editable = $ this ->getEditable ($ headlessEditableInfo );
103
117
104
118
ob_start ();
105
119
106
- echo $ this ->processEditable ($ headlessEditableInfo , true );
120
+ echo $ this ->processEditable ($ headlessEditableInfo , $ editable , true );
107
121
108
122
if ($ editMode === false ) {
109
- $ areaDataResponse = $ this ->processEditable ($ headlessEditableInfo );
123
+ $ areaDataResponse = $ this ->processEditable ($ headlessEditableInfo, $ editable );
110
124
}
111
125
112
126
$ areaHtmlResponse = ob_get_clean ();
@@ -118,13 +132,14 @@ private function buildAreaBlockEditable(HeadlessEditableInfo $headlessEditableIn
118
132
{
119
133
$ areaBlockDataResponse = '' ;
120
134
$ editMode = $ headlessEditableInfo ->isEditMode ();
135
+ $ editable = $ this ->getEditable ($ headlessEditableInfo );
121
136
122
137
ob_start ();
123
138
124
- echo $ this ->processEditable ($ headlessEditableInfo , true );
139
+ echo $ this ->processEditable ($ headlessEditableInfo , $ editable , true );
125
140
126
141
if ($ editMode === false ) {
127
- $ areaBlockDataResponse = $ this ->processEditable ($ headlessEditableInfo );
142
+ $ areaBlockDataResponse = $ this ->processEditable ($ headlessEditableInfo, $ editable );
128
143
}
129
144
130
145
$ areaBlockHtmlResponse = ob_get_clean ();
@@ -145,11 +160,23 @@ private function buildBlockEditable(HeadlessEditableInfo $headlessEditableInfo):
145
160
$ blockEditable = $ this ->editableRenderer ->getEditable ($ document , 'block ' , $ headlessEditableInfo ->getName (), $ config , $ headlessEditableInfo ->isEditMode ());
146
161
147
162
foreach ($ blockEditable ->getIterator () as $ blockIndex ) {
163
+
164
+ $ blockHash = $ this ->editableWorker ->buildBlockHash ($ headlessEditableInfo ->getName (), $ blockIndex );
165
+ $ blockNamespace = sprintf ('%s:%s ' , $ headlessEditableInfo ->getName (), $ blockIndex );
166
+
167
+ if ($ editMode === true ) {
168
+ echo sprintf ('<a data-headless-element-hash="%s"></a> ' , $ blockHash );
169
+ }
170
+
171
+ $ this ->editableWorker ->processVirtualElement (HeadlessResponse::TYPE_EDITABLE , 'block ' , $ blockHash , $ blockNamespace );
172
+
148
173
foreach ($ headlessEditableInfo ->getChildren () as $ childHeadlessEditableInfo ) {
149
174
175
+ $ editable = $ this ->getEditable ($ childHeadlessEditableInfo );
176
+
150
177
ob_start ();
151
178
152
- echo $ this ->processEditable ($ childHeadlessEditableInfo , true );
179
+ echo $ this ->processEditable ($ childHeadlessEditableInfo , $ editable , true );
153
180
154
181
$ renderedBlockEditable = ob_get_clean ();
155
182
@@ -162,7 +189,7 @@ private function buildBlockEditable(HeadlessEditableInfo $headlessEditableInfo):
162
189
]);
163
190
164
191
if ($ editMode === false ) {
165
- $ data [] = $ this ->processEditable ($ childHeadlessEditableInfo );
192
+ $ data [] = $ this ->processEditable ($ childHeadlessEditableInfo, $ editable );
166
193
}
167
194
}
168
195
}
@@ -172,18 +199,12 @@ private function buildBlockEditable(HeadlessEditableInfo $headlessEditableInfo):
172
199
return $ editMode ? $ areaBlockHtmlResponse : $ data ;
173
200
}
174
201
175
- private function processEditable (HeadlessEditableInfo $ headlessEditableInfo , bool $ forceRendering = false ): mixed
202
+ private function processEditable (HeadlessEditableInfo $ headlessEditableInfo , Editable $ editable , bool $ forceRendering = false ): mixed
176
203
{
177
204
$ editMode = $ headlessEditableInfo ->isEditMode ();
178
205
$ type = $ headlessEditableInfo ->getType ();
179
- $ name = $ headlessEditableInfo ->getName ();
180
- $ config = $ headlessEditableInfo ->getConfig ();
181
- $ document = $ headlessEditableInfo ->getDocument ();
182
206
$ isSimple = !$ headlessEditableInfo ->isBlockEditable ();
183
207
184
- /** @var Editable $editable */
185
- $ editable = $ this ->editableRenderer ->getEditable ($ document , $ type , $ name , $ config , $ editMode );
186
-
187
208
if ($ headlessEditableInfo ->isStandAlone () === true ) {
188
209
189
210
if ($ editMode === false ) {
@@ -217,4 +238,18 @@ private function processEditable(HeadlessEditableInfo $headlessEditableInfo, boo
217
238
218
239
return '' ;
219
240
}
241
+
242
+ public function getEditable (HeadlessEditableInfo $ headlessEditableInfo ): Editable
243
+ {
244
+ $ editMode = $ headlessEditableInfo ->isEditMode ();
245
+ $ type = $ headlessEditableInfo ->getType ();
246
+ $ name = $ headlessEditableInfo ->getName ();
247
+ $ config = $ headlessEditableInfo ->getConfig ();
248
+ $ document = $ headlessEditableInfo ->getDocument ();
249
+
250
+ /** @var Editable $editable */
251
+ $ editable = $ this ->editableRenderer ->getEditable ($ document , $ type , $ name , $ config , $ editMode );
252
+
253
+ return $ editable ;
254
+ }
220
255
}
0 commit comments