Vendor lock
This commit is contained in:
145
vendor/illuminate/view/Concerns/ManagesComponents.php
vendored
Normal file
145
vendor/illuminate/view/Concerns/ManagesComponents.php
vendored
Normal file
@ -0,0 +1,145 @@
|
||||
<?php
|
||||
|
||||
namespace Illuminate\View\Concerns;
|
||||
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Support\HtmlString;
|
||||
|
||||
trait ManagesComponents
|
||||
{
|
||||
/**
|
||||
* The components being rendered.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $componentStack = [];
|
||||
|
||||
/**
|
||||
* The original data passed to the component.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $componentData = [];
|
||||
|
||||
/**
|
||||
* The slot contents for the component.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $slots = [];
|
||||
|
||||
/**
|
||||
* The names of the slots being rendered.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $slotStack = [];
|
||||
|
||||
/**
|
||||
* Start a component rendering process.
|
||||
*
|
||||
* @param string $name
|
||||
* @param array $data
|
||||
* @return void
|
||||
*/
|
||||
public function startComponent($name, array $data = [])
|
||||
{
|
||||
if (ob_start()) {
|
||||
$this->componentStack[] = $name;
|
||||
|
||||
$this->componentData[$this->currentComponent()] = $data;
|
||||
|
||||
$this->slots[$this->currentComponent()] = [];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the first view that actually exists from the given list, and start a component.
|
||||
*
|
||||
* @param array $names
|
||||
* @param array $data
|
||||
* @return void
|
||||
*/
|
||||
public function startComponentFirst(array $names, array $data = [])
|
||||
{
|
||||
$name = Arr::first($names, function ($item) {
|
||||
return $this->exists($item);
|
||||
});
|
||||
|
||||
$this->startComponent($name, $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the current component.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function renderComponent()
|
||||
{
|
||||
$name = array_pop($this->componentStack);
|
||||
|
||||
return $this->make($name, $this->componentData($name))->render();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the data for the given component.
|
||||
*
|
||||
* @param string $name
|
||||
* @return array
|
||||
*/
|
||||
protected function componentData($name)
|
||||
{
|
||||
return array_merge(
|
||||
$this->componentData[count($this->componentStack)],
|
||||
['slot' => new HtmlString(trim(ob_get_clean()))],
|
||||
$this->slots[count($this->componentStack)]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Start the slot rendering process.
|
||||
*
|
||||
* @param string $name
|
||||
* @param string|null $content
|
||||
* @return void
|
||||
*/
|
||||
public function slot($name, $content = null)
|
||||
{
|
||||
if (func_num_args() === 2) {
|
||||
$this->slots[$this->currentComponent()][$name] = $content;
|
||||
} else {
|
||||
if (ob_start()) {
|
||||
$this->slots[$this->currentComponent()][$name] = '';
|
||||
|
||||
$this->slotStack[$this->currentComponent()][] = $name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the slot content for rendering.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function endSlot()
|
||||
{
|
||||
last($this->componentStack);
|
||||
|
||||
$currentSlot = array_pop(
|
||||
$this->slotStack[$this->currentComponent()]
|
||||
);
|
||||
|
||||
$this->slots[$this->currentComponent()]
|
||||
[$currentSlot] = new HtmlString(trim(ob_get_clean()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the index for the current component.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
protected function currentComponent()
|
||||
{
|
||||
return count($this->componentStack) - 1;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user