minor #12109 [VarDumper] Improved dump in html (hason)
This PR was merged into the 2.6-dev branch.
Discussion
----------
[VarDumper] Improved dump in html
| Q | A
| ------------- | ---
| Bug fix? | yes
| New feature? | yes
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | http://www.w3.org/TR/html5/dom.html#the-id-attribute
| License | MIT
| Doc PR | -
Commits
-------
f214eda
[VarDumper] Added unique id for every single dump in html
This commit is contained in:
commit
063826d17f
@ -77,6 +77,7 @@ class DumpExtensionTest extends \PHPUnit_Framework_TestCase
|
||||
if ($debug) {
|
||||
$this->assertStringStartsWith('<script>', $dump);
|
||||
$dump = preg_replace('/^.*?<pre/', '<pre', $dump);
|
||||
$dump = preg_replace('/sf-dump-\\d{2,}/', 'sf-dump', $dump);
|
||||
}
|
||||
$this->assertEquals($expectedOutput, $dump);
|
||||
}
|
||||
|
@ -32,18 +32,21 @@ class DumpDataCollectorTest extends \PHPUnit_Framework_TestCase
|
||||
$collector->dump($data); $line = __LINE__;
|
||||
$this->assertSame(1, $collector->getDumpsCount());
|
||||
|
||||
$xDump = array(
|
||||
array(
|
||||
'data' => "<pre id=sf-dump><span class=sf-dump-0><span class=sf-dump-num>123</span>\n</span></pre><script>Sfjs.dump.instrument()</script>\n",
|
||||
'name' => 'DumpDataCollectorTest.php',
|
||||
'file' => __FILE__,
|
||||
'line' => $line,
|
||||
'fileExcerpt' => false,
|
||||
),
|
||||
);
|
||||
$dump = $collector->getDumps('html');
|
||||
$this->assertTrue(isset($dump[0]['data']));
|
||||
$dump[0]['data'] = preg_replace('/^.*?<pre/', '<pre', $dump[0]['data']);
|
||||
preg_match('/sf-dump-(\\d{2,})/', $dump[0]['data'], $matches);
|
||||
$dumpId = $matches[1];
|
||||
|
||||
$xDump = array(
|
||||
array(
|
||||
'data' => "<pre id=sf-dump-{$dumpId}><span class=sf-dump-0><span class=sf-dump-num>123</span>\n</span></pre><script>Sfjs.dump.instrument()</script>\n",
|
||||
'name' => 'DumpDataCollectorTest.php',
|
||||
'file' => __FILE__,
|
||||
'line' => $line,
|
||||
'fileExcerpt' => false,
|
||||
),
|
||||
);
|
||||
$this->assertSame($xDump, $dump);
|
||||
|
||||
$this->assertStringStartsWith(
|
||||
|
@ -12,6 +12,7 @@
|
||||
namespace Symfony\Component\VarDumper\Dumper;
|
||||
|
||||
use Symfony\Component\VarDumper\Cloner\Cursor;
|
||||
use Symfony\Component\VarDumper\Cloner\Data;
|
||||
|
||||
/**
|
||||
* HtmlDumper dumps variables as HTML.
|
||||
@ -23,8 +24,9 @@ class HtmlDumper extends CliDumper
|
||||
public static $defaultOutputStream = 'php://output';
|
||||
|
||||
protected $dumpHeader;
|
||||
protected $dumpPrefix = '<pre id=sf-dump>';
|
||||
protected $dumpPrefix = '<pre id=%id%>';
|
||||
protected $dumpSuffix = '</pre><script>Sfjs.dump.instrument()</script>';
|
||||
protected $dumpId = 'sf-dump';
|
||||
protected $colors = true;
|
||||
protected $headerIsDumped = false;
|
||||
protected $lastDepth = -1;
|
||||
@ -82,6 +84,15 @@ class HtmlDumper extends CliDumper
|
||||
$this->dumpSuffix = $suffix;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function dump(Data $data, $lineDumper = null)
|
||||
{
|
||||
$this->dumpId = 'sf-dump-'.mt_rand();
|
||||
parent::dump($data, $lineDumper);
|
||||
}
|
||||
|
||||
/**
|
||||
* Dumps the HTML header.
|
||||
*/
|
||||
@ -90,7 +101,7 @@ class HtmlDumper extends CliDumper
|
||||
$this->headerIsDumped = true;
|
||||
|
||||
if (null !== $this->dumpHeader) {
|
||||
return $this->dumpHeader;
|
||||
return str_replace('%id%', $this->dumpId, $this->dumpHeader);
|
||||
}
|
||||
|
||||
$line = <<<'EOHTML'
|
||||
@ -129,7 +140,7 @@ Sfjs.dump.toggle = function(a) {
|
||||
};
|
||||
</script>
|
||||
<style>
|
||||
#sf-dump {
|
||||
#%id% {
|
||||
display: block;
|
||||
background-color: #300a24;
|
||||
white-space: pre;
|
||||
@ -138,31 +149,33 @@ Sfjs.dump.toggle = function(a) {
|
||||
font: 12px monospace, sans-serif;
|
||||
padding: 5px;
|
||||
}
|
||||
#sf-dump span {
|
||||
#%id% span {
|
||||
display: inline;
|
||||
}
|
||||
#sf-dump .sf-dump-compact {
|
||||
#%id% .sf-dump-compact {
|
||||
display: none;
|
||||
}
|
||||
#sf-dump abbr {
|
||||
#%id% abbr {
|
||||
text-decoration: none;
|
||||
border: none;
|
||||
cursor: help;
|
||||
}
|
||||
#sf-dump a {
|
||||
#%id% a {
|
||||
text-decoration: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
#sf-dump a:hover {
|
||||
#%id% a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
EOHTML;
|
||||
|
||||
foreach ($this->styles as $class => $style) {
|
||||
$line .= "#sf-dump .sf-dump-$class {{$style}}";
|
||||
$line .= "#%id% .sf-dump-$class {{$style}}";
|
||||
}
|
||||
|
||||
return $this->dumpHeader = preg_replace('/\s+/', ' ', $line).'</style>'.$this->dumpHeader;
|
||||
$this->dumpHeader = preg_replace('/\s+/', ' ', $line).'</style>'.$this->dumpHeader;
|
||||
|
||||
return str_replace('%id%', $this->dumpId, $this->dumpHeader);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -201,9 +214,9 @@ EOHTML;
|
||||
if ('ref' === $style) {
|
||||
$ref = substr($val, 1);
|
||||
if ('#' === $val[0]) {
|
||||
return "<a class=sf-dump-ref name=\"sf-dump-ref$ref\">$val</a>";
|
||||
return "<a class=sf-dump-ref name=\"{$this->dumpId}-ref$ref\">$val</a>";
|
||||
} else {
|
||||
return "<a class=sf-dump-ref href=\"#sf-dump-ref$ref\">$val</a>";
|
||||
return "<a class=sf-dump-ref href=\"#{$this->dumpId}-ref$ref\">$val</a>";
|
||||
}
|
||||
}
|
||||
|
||||
@ -236,14 +249,14 @@ EOHTML;
|
||||
}
|
||||
|
||||
if (-1 === $this->lastDepth) {
|
||||
$this->line = $this->dumpPrefix.$this->line;
|
||||
$this->line = str_replace('%id%', $this->dumpId, $this->dumpPrefix).$this->line;
|
||||
}
|
||||
if (!$this->headerIsDumped) {
|
||||
$this->line = $this->getDumpHeader().$this->line;
|
||||
}
|
||||
|
||||
if (-1 === $depth) {
|
||||
$this->line .= $this->dumpSuffix;
|
||||
$this->line .= str_replace('%id%', $this->dumpId, $this->dumpSuffix);
|
||||
parent::dumpLine(0);
|
||||
}
|
||||
$this->lastDepth = $depth;
|
||||
|
@ -33,7 +33,7 @@ class HtmlDumperTest extends \PHPUnit_Framework_TestCase
|
||||
unset($a['uri']);
|
||||
|
||||
return $a;
|
||||
}
|
||||
},
|
||||
));
|
||||
$data = $cloner->cloneVar($var);
|
||||
|
||||
@ -44,12 +44,14 @@ class HtmlDumperTest extends \PHPUnit_Framework_TestCase
|
||||
$out = preg_replace('/[ \t]+$/m', '', $out);
|
||||
$var['file'] = htmlspecialchars($var['file'], ENT_QUOTES, 'UTF-8');
|
||||
$intMax = PHP_INT_MAX;
|
||||
preg_match('/sf-dump-(\\d{2,})/', $out, $matches);
|
||||
$dumpId = $matches[1];
|
||||
|
||||
$this->assertSame(
|
||||
<<<EOTXT
|
||||
<foo></foo><bar><span class=sf-dump-0><span class=sf-dump-note>array:25</span> [<span name=sf-dump-child>
|
||||
<span class=sf-dump-1>"<span class=sf-dump-meta>number</span>" => <span class=sf-dump-num>1</span>
|
||||
<span class=sf-dump-meta>0</span> => <span class=sf-dump-const>null</span> <a class=sf-dump-ref name="sf-dump-ref1">#1</a>
|
||||
<span class=sf-dump-meta>0</span> => <span class=sf-dump-const>null</span> <a class=sf-dump-ref name="sf-dump-{$dumpId}-ref1">#1</a>
|
||||
"<span class=sf-dump-meta>const</span>" => <span class=sf-dump-num>1.1</span>
|
||||
<span class=sf-dump-meta>1</span> => <span class=sf-dump-const>true</span>
|
||||
<span class=sf-dump-meta>2</span> => <span class=sf-dump-const>false</span>
|
||||
@ -72,7 +74,7 @@ class HtmlDumperTest extends \PHPUnit_Framework_TestCase
|
||||
<span class=sf-dump-meta>options</span>: []
|
||||
</span></span>}
|
||||
<span class=sf-dump-meta>8</span> => resource:<span class=sf-dump-note>Unknown</span> {}
|
||||
"<span class=sf-dump-meta>obj</span>" => <span class=sf-dump-note><abbr title="Symfony\Component\VarDumper\Tests\Fixture\DumbFoo" class=sf-dump-note>DumbFoo</abbr></span> {<span name=sf-dump-child> <a class=sf-dump-ref name="sf-dump-ref2">#2</a>
|
||||
"<span class=sf-dump-meta>obj</span>" => <span class=sf-dump-note><abbr title="Symfony\Component\VarDumper\Tests\Fixture\DumbFoo" class=sf-dump-note>DumbFoo</abbr></span> {<span name=sf-dump-child> <a class=sf-dump-ref name="sf-dump-{$dumpId}-ref2">#2</a>
|
||||
<span class=sf-dump-2><span class=sf-dump-public>foo</span>: "<span class=sf-dump-str>foo</span>"
|
||||
"<span class=sf-dump-public>bar</span>": "<span class=sf-dump-str>bar</span>"
|
||||
</span></span>}
|
||||
@ -90,15 +92,15 @@ class HtmlDumperTest extends \PHPUnit_Framework_TestCase
|
||||
</span></span>}
|
||||
"<span class=sf-dump-meta>line</span>" => <span class=sf-dump-num>{$var['line']}</span>
|
||||
"<span class=sf-dump-meta>nobj</span>" => <span class=sf-dump-note>array:1</span> [<span name=sf-dump-child>
|
||||
<span class=sf-dump-2><span class=sf-dump-meta>0</span> => {} <a class=sf-dump-ref name="sf-dump-ref3">#3</a>
|
||||
<span class=sf-dump-2><span class=sf-dump-meta>0</span> => {} <a class=sf-dump-ref name="sf-dump-{$dumpId}-ref3">#3</a>
|
||||
</span></span>]
|
||||
"<span class=sf-dump-meta>recurs</span>" => <span class=sf-dump-note>array:1</span> [<span name=sf-dump-child> <a class=sf-dump-ref name="sf-dump-ref4">#4</a>
|
||||
<span class=sf-dump-2><span class=sf-dump-meta>0</span> => <a class=sf-dump-ref href="#sf-dump-ref4">&4</a> <span class=sf-dump-note>array:1</span> [<a class=sf-dump-ref href="#sf-dump-ref4">@4</a>]
|
||||
"<span class=sf-dump-meta>recurs</span>" => <span class=sf-dump-note>array:1</span> [<span name=sf-dump-child> <a class=sf-dump-ref name="sf-dump-{$dumpId}-ref4">#4</a>
|
||||
<span class=sf-dump-2><span class=sf-dump-meta>0</span> => <a class=sf-dump-ref href="#sf-dump-{$dumpId}-ref4">&4</a> <span class=sf-dump-note>array:1</span> [<a class=sf-dump-ref href="#sf-dump-{$dumpId}-ref4">@4</a>]
|
||||
</span></span>]
|
||||
<span class=sf-dump-meta>9</span> => <a class=sf-dump-ref href="#sf-dump-ref1">&1</a> <span class=sf-dump-const>null</span>
|
||||
"<span class=sf-dump-meta>sobj</span>" => <span class=sf-dump-note><abbr title="Symfony\Component\VarDumper\Tests\Fixture\DumbFoo" class=sf-dump-note>DumbFoo</abbr></span> {<a class=sf-dump-ref href="#sf-dump-ref2">@2</a>}
|
||||
"<span class=sf-dump-meta>snobj</span>" => <a class=sf-dump-ref href="#sf-dump-ref3">&3</a> {<a class=sf-dump-ref href="#sf-dump-ref3">@3</a>}
|
||||
"<span class=sf-dump-meta>snobj2</span>" => {<a class=sf-dump-ref href="#sf-dump-ref3">@3</a>}
|
||||
<span class=sf-dump-meta>9</span> => <a class=sf-dump-ref href="#sf-dump-{$dumpId}-ref1">&1</a> <span class=sf-dump-const>null</span>
|
||||
"<span class=sf-dump-meta>sobj</span>" => <span class=sf-dump-note><abbr title="Symfony\Component\VarDumper\Tests\Fixture\DumbFoo" class=sf-dump-note>DumbFoo</abbr></span> {<a class=sf-dump-ref href="#sf-dump-{$dumpId}-ref2">@2</a>}
|
||||
"<span class=sf-dump-meta>snobj</span>" => <a class=sf-dump-ref href="#sf-dump-{$dumpId}-ref3">&3</a> {<a class=sf-dump-ref href="#sf-dump-{$dumpId}-ref3">@3</a>}
|
||||
"<span class=sf-dump-meta>snobj2</span>" => {<a class=sf-dump-ref href="#sf-dump-{$dumpId}-ref3">@3</a>}
|
||||
"<span class=sf-dump-meta>file</span>" => "<span class=sf-dump-str>{$var['file']}</span>"
|
||||
b"<span class=sf-dump-meta>bin-key-é</span>" => ""
|
||||
</span></span>]
|
||||
|
Reference in New Issue
Block a user