diff --git a/src/DebugBar/DataFormatter/DebugBarVarDumper.php b/src/DebugBar/DataFormatter/DebugBarVarDumper.php index 939c1a6..33cae38 100644 --- a/src/DebugBar/DataFormatter/DebugBarVarDumper.php +++ b/src/DebugBar/DataFormatter/DebugBarVarDumper.php @@ -3,13 +3,10 @@ namespace DebugBar\DataFormatter; use DebugBar\DataCollector\AssetProvider; -use Symfony\Component\VarDumper\Caster\Caster; -use Symfony\Component\VarDumper\Cloner\Cursor; +use DebugBar\DataFormatter\VarDumper\DebugBarHtmlDumper; +use DebugBar\DataFormatter\VarDumper\SeekingData; use Symfony\Component\VarDumper\Cloner\Data; -use Symfony\Component\VarDumper\Cloner\DumperInterface; -use Symfony\Component\VarDumper\Cloner\Stub; use Symfony\Component\VarDumper\Cloner\VarCloner; -use Symfony\Component\VarDumper\Dumper\HtmlDumper; /** * Clones and renders variables in HTML format using the Symfony VarDumper component. @@ -48,7 +45,7 @@ class DebugBarVarDumper implements AssetProvider /** @var VarCloner */ protected $cloner; - /** @var DebugBarHtmlDumper */ + /** @var Debu */ protected $dumper; /** @@ -316,110 +313,3 @@ class DebugBarVarDumper implements AssetProvider return $result; } } - -/** - * We have to extend the base HtmlDumper class in order to get access to the protected-only - * getDumpHeader function. - */ -class DebugBarHtmlDumper extends HtmlDumper -{ - public function getDumpHeaderByDebugBar() { - // getDumpHeader is protected: - return $this->getDumpHeader(); - } -} - -/** - * This class backports the seek() function from Symfony 3.2 to older versions - up to v2.6. The - * class should not be used with newer Symfony versions that provide the seek function, as it relies - * on a lot of undocumented functionality. - */ -class SeekingData extends Data -{ - // Because the class copies/pastes the seek() implementation from Symfony 3.2, we reproduce its - // copyright here; this class is subject to the following additional copyright: - - /* - * Copyright (c) 2014-2017 Fabien Potencier - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished - * to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - private $position = 0; - private $key = 0; - - /** - * Seeks to a specific key in nested data structures. - * - * @param string|int $key The key to seek to - * - * @return self|null A clone of $this of null if the key is not set - */ - public function seek($key) - { - $thisData = $this->getRawData(); - $item = $thisData[$this->position][$this->key]; - - if (!$item instanceof Stub || !$item->position) { - return; - } - $keys = array($key); - - switch ($item->type) { - case Stub::TYPE_OBJECT: - $keys[] = "\0+\0".$key; - $keys[] = "\0*\0".$key; - $keys[] = "\0~\0".$key; - $keys[] = "\0$item->class\0$key"; - case Stub::TYPE_ARRAY: - case Stub::TYPE_RESOURCE: - break; - default: - return; - } - - $data = null; - $children = $thisData[$item->position]; - - foreach ($keys as $key) { - if (isset($children[$key]) || array_key_exists($key, $children)) { - $data = clone $this; - $data->key = $key; - $data->position = $item->position; - break; - } - } - - return $data; - } - - /** - * {@inheritdoc} - */ - public function dump(DumperInterface $dumper) - { - // Override the base class dump to use the position and key - $refs = array(0); - $class = new \ReflectionClass($this); - $dumpItem = $class->getMethod('dumpItem'); - $dumpItem->setAccessible(true); - $data = $this->getRawData(); - $args = array($dumper, new Cursor(), &$refs, $data[$this->position][$this->key]); - $dumpItem->invokeArgs($this, $args); - } -} diff --git a/src/DebugBar/DataFormatter/VarDumper/DebugbarHtmlDumper.php b/src/DebugBar/DataFormatter/VarDumper/DebugbarHtmlDumper.php new file mode 100644 index 0000000..6026f3e --- /dev/null +++ b/src/DebugBar/DataFormatter/VarDumper/DebugbarHtmlDumper.php @@ -0,0 +1,17 @@ +getDumpHeader()); + } +} diff --git a/src/DebugBar/DataFormatter/VarDumper/SeekingData.php b/src/DebugBar/DataFormatter/VarDumper/SeekingData.php new file mode 100644 index 0000000..be71ebf --- /dev/null +++ b/src/DebugBar/DataFormatter/VarDumper/SeekingData.php @@ -0,0 +1,103 @@ +getRawData(); + $item = $thisData[$this->position][$this->key]; + + if (!$item instanceof Stub || !$item->position) { + return; + } + $keys = array($key); + + switch ($item->type) { + case Stub::TYPE_OBJECT: + $keys[] = "\0+\0".$key; + $keys[] = "\0*\0".$key; + $keys[] = "\0~\0".$key; + $keys[] = "\0$item->class\0$key"; + case Stub::TYPE_ARRAY: + case Stub::TYPE_RESOURCE: + break; + default: + return; + } + + $data = null; + $children = $thisData[$item->position]; + + foreach ($keys as $key) { + if (isset($children[$key]) || array_key_exists($key, $children)) { + $data = clone $this; + $data->key = $key; + $data->position = $item->position; + break; + } + } + + return $data; + } + + /** + * {@inheritdoc} + */ + public function dump(DumperInterface $dumper) + { + // Override the base class dump to use the position and key + $refs = array(0); + $class = new \ReflectionClass($this); + $dumpItem = $class->getMethod('dumpItem'); + $dumpItem->setAccessible(true); + $data = $this->getRawData(); + $args = array($dumper, new Cursor(), &$refs, $data[$this->position][$this->key]); + $dumpItem->invokeArgs($this, $args); + } +} diff --git a/src/DebugBar/Resources/debugbar.css b/src/DebugBar/Resources/debugbar.css index e78a498..7f74444 100644 --- a/src/DebugBar/Resources/debugbar.css +++ b/src/DebugBar/Resources/debugbar.css @@ -89,6 +89,7 @@ div.phpdebugbar code, div.phpdebugbar pre { div.phpdebugbar pre.sf-dump { color: #a0a000; + outline: 0; } a.phpdebugbar-restore-btn {