Skip to content

Commit

Permalink
Revert "overriding ManagesStacks.php is not necessary anymore"
Browse files Browse the repository at this point in the history
  • Loading branch information
denisdulici committed Mar 10, 2021
1 parent 3cbc3d1 commit c723e50
Show file tree
Hide file tree
Showing 2 changed files with 203 additions and 0 deletions.
2 changes: 2 additions & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@
"Database\\Factories\\": "database/factories/",
"Database\\Seeds\\": "database/seeds/",
"Illuminate\\Translation\\": "overrides/Illuminate/Translation/",
"Illuminate\\View\\Concerns\\": "overrides/Illuminate/View/Concerns/",
"Modules\\": "modules/",
"Symfony\\Component\\Process\\": "overrides/symfony/process/"
},
Expand All @@ -95,6 +96,7 @@
"vendor/akaunting/laravel-module/src/Commands/EnableCommand.php",
"vendor/akaunting/laravel-module/src/Commands/InstallCommand.php",
"vendor/laravel/framework/src/Illuminate/Translation/MessageSelector.php",
"vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesStacks.php",
"vendor/symfony/process/PhpExecutableFinder.php"
],
"files": [
Expand Down
201 changes: 201 additions & 0 deletions overrides/Illuminate/View/Concerns/ManagesStacks.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
<?php

namespace Illuminate\View\Concerns;

use InvalidArgumentException;

trait ManagesStacks
{
/**
* All of the finished, captured push sections.
*
* @var array
*/
protected $pushes = [];

/**
* All of the finished, captured prepend sections.
*
* @var array
*/
protected $prepends = [];

/**
* The stack of in-progress push sections.
*
* @var array
*/
protected $pushStack = [];

/**
* Start injecting content into a push section.
*
* @param string $section
* @param string $content
* @return void
*/
public function startPush($section, $content = '')
{
if ($content === '') {
if (ob_start()) {
$this->pushStack[] = $section;
}
} else {
$this->extendPush($section, $content);
}
}

/**
* Stop injecting content into a push section.
*
* @return string
*
* @throws \InvalidArgumentException
*/
public function stopPush()
{
if (empty($this->pushStack)) {
throw new InvalidArgumentException('Cannot end a push stack without first starting one.');
}

return tap(array_pop($this->pushStack), function ($last) {
$this->extendPush($last, ob_get_clean());
});
}

/**
* Append content to a given push section.
*
* @param string $section
* @param string $content
* @return void
*/
protected function extendPush($section, $content)
{
if (! isset($this->pushes[$section])) {
$this->pushes[$section] = [];
}

if (! isset($this->pushes[$section][$this->renderCount])) {
$this->pushes[$section][$this->renderCount] = $content;
} else {
$this->pushes[$section][$this->renderCount] .= $content;
}
}

/**
* Start prepending content into a push section.
*
* @param string $section
* @param string $content
* @return void
*/
public function startPrepend($section, $content = '')
{
if ($content === '') {
if (ob_start()) {
$this->pushStack[] = $section;
}
} else {
$this->extendPrepend($section, $content);
}
}

/**
* Stop prepending content into a push section.
*
* @return string
*
* @throws \InvalidArgumentException
*/
public function stopPrepend()
{
if (empty($this->pushStack)) {
throw new InvalidArgumentException('Cannot end a prepend operation without first starting one.');
}

return tap(array_pop($this->pushStack), function ($last) {
$this->extendPrepend($last, ob_get_clean());
});
}

/**
* Prepend content to a given stack.
*
* @param string $section
* @param string $content
* @return void
*/
protected function extendPrepend($section, $content)
{
if (! isset($this->prepends[$section])) {
$this->prepends[$section] = [];
}

if (! isset($this->prepends[$section][$this->renderCount])) {
$this->prepends[$section][$this->renderCount] = $content;
} else {
$this->prepends[$section][$this->renderCount] = $content.$this->prepends[$section][$this->renderCount];
}
}

/**
* Get the string contents of a push section.
*
* @param string $section
* @param string $default
* @return string
*/
public function yieldPushContent($section, $default = '')
{
if (! isset($this->pushes[$section]) && ! isset($this->prepends[$section])) {
return $default;
}

$output = '';

if (isset($this->prepends[$section])) {
$output .= implode(array_reverse($this->prepends[$section]));
}

if (isset($this->pushes[$section])) {
$output .= implode($this->pushes[$section]);
}

return $output;
}

/**
* Flush all of the stacks.
*
* @return void
*/
public function flushStacks()
{
$this->pushes = [];
$this->prepends = [];
$this->pushStack = [];
}

/**
* Flush stack by key.
*
* @return void
*/
public function flushStack($key = null)
{
$properties = [
'pushes',
'prepends',
'pushStack',
];

foreach ($properties as $property) {
if (!array_key_exists($key, $this->$property)) {
continue;
}

unset($this->$property[$key]);
}
}
}

0 comments on commit c723e50

Please sign in to comment.