Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
2 / 2 |
CRAP | |
100.00% |
11 / 11 |
RenderContext | |
100.00% |
1 / 1 |
|
100.00% |
2 / 2 |
3 | |
100.00% |
11 / 11 |
update | |
100.00% |
1 / 1 |
1 | |
100.00% |
5 / 5 |
|||
bubble | |
100.00% |
1 / 1 |
2 | |
100.00% |
6 / 6 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\Core\Render\RenderContext. | |
*/ | |
namespace Drupal\Core\Render; | |
/** | |
* The render context: a stack containing bubbleable rendering metadata. | |
* | |
* A stack of \Drupal\Core\Render\BubbleableMetadata objects. | |
* | |
* @see \Drupal\Core\Render\RendererInterface | |
* @see \Drupal\Core\Render\Renderer | |
* @see \Drupal\Core\Render\BubbleableMetadata | |
* | |
* @internal | |
*/ | |
class RenderContext extends \SplStack { | |
/** | |
* Updates the current frame of the stack. | |
* | |
* @param array &$element | |
* The element of the render array that has just been rendered. The stack | |
* frame for this element will be updated with the bubbleable rendering | |
* metadata of this element. | |
*/ | |
public function update(&$element) { | |
// The latest frame represents the bubbleable metadata for the subtree. | |
$frame = $this->pop(); | |
// Update the frame, but also update the current element, to ensure it | |
// contains up-to-date information in case it gets render cached. | |
$updated_frame = BubbleableMetadata::createFromRenderArray($element)->merge($frame); | |
$updated_frame->applyTo($element); | |
$this->push($updated_frame); | |
} | |
/** | |
* Bubbles the stack. | |
* | |
* Whenever another level in the render array has been rendered, the stack | |
* must be bubbled, to merge its rendering metadata with that of the parent | |
* element. | |
*/ | |
public function bubble() { | |
// If there's only one frame on the stack, then this is the root call, and | |
// we can't bubble up further. ::renderRoot() will reset the stack, but we | |
// must not reset it here to allow users of ::executeInRenderContext() to | |
// access the stack directly. | |
if ($this->count() === 1) { | |
return; | |
} | |
// Merge the current and the parent stack frame. | |
$current = $this->pop(); | |
$parent = $this->pop(); | |
$this->push($current->merge($parent)); | |
} | |
} |