[VarDumper] Fix small ClassStub rendering issues
This commit is contained in:
parent
a86583d226
commit
7d0cee175a
@ -881,7 +881,11 @@ table.logs .metadata {
|
|||||||
margin: 0.5em 0;
|
margin: 0.5em 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#collector-content pre.sf-dump { color: #CC7832; }
|
#collector-content pre.sf-dump,
|
||||||
|
#collector-content .sf-dump-default {
|
||||||
|
color: #CC7832;
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
#collector-content .sf-dump-str { color: #629755; }
|
#collector-content .sf-dump-str { color: #629755; }
|
||||||
#collector-content .sf-dump-private,
|
#collector-content .sf-dump-private,
|
||||||
#collector-content .sf-dump-protected,
|
#collector-content .sf-dump-protected,
|
||||||
@ -893,7 +897,6 @@ table.logs .metadata {
|
|||||||
#collector-content .sf-dump {
|
#collector-content .sf-dump {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
background: none;
|
|
||||||
line-height: 1.4;
|
line-height: 1.4;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -904,10 +907,6 @@ table.logs .metadata {
|
|||||||
line-height: inherit;
|
line-height: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
#collector-content .dump-inline pre.sf-dump .sf-dump-ellipsis {
|
|
||||||
width: 4em;
|
|
||||||
}
|
|
||||||
|
|
||||||
#collector-content .sf-dump .trace {
|
#collector-content .sf-dump .trace {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
@ -59,6 +59,7 @@ class HtmlDumper extends CliDumper
|
|||||||
{
|
{
|
||||||
AbstractDumper::__construct($output, $charset, $flags);
|
AbstractDumper::__construct($output, $charset, $flags);
|
||||||
$this->dumpId = 'sf-dump-'.mt_rand();
|
$this->dumpId = 'sf-dump-'.mt_rand();
|
||||||
|
$this->displayOptions['fileLinkFormat'] = ini_get('xdebug.file_link_format') ?: get_cfg_var('xdebug.file_link_format');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -189,7 +190,7 @@ return function (root, x) {
|
|||||||
options = {$options},
|
options = {$options},
|
||||||
elt = root.getElementsByTagName('A'),
|
elt = root.getElementsByTagName('A'),
|
||||||
len = elt.length,
|
len = elt.length,
|
||||||
i = 0, s, h, fmt,
|
i = 0, s, h,
|
||||||
t = [];
|
t = [];
|
||||||
|
|
||||||
while (i < len) t.push(elt[i++]);
|
while (i < len) t.push(elt[i++]);
|
||||||
@ -197,10 +198,6 @@ return function (root, x) {
|
|||||||
for (i in x) {
|
for (i in x) {
|
||||||
options[i] = x[i];
|
options[i] = x[i];
|
||||||
}
|
}
|
||||||
fmt = options.fileLinkFormat;
|
|
||||||
if (fmt && 'string' == typeof fmt) {
|
|
||||||
fmt = [fmt];
|
|
||||||
}
|
|
||||||
|
|
||||||
function a(e, f) {
|
function a(e, f) {
|
||||||
addEventListener(root, e, function (e) {
|
addEventListener(root, e, function (e) {
|
||||||
@ -221,8 +218,10 @@ return function (root, x) {
|
|||||||
refStyle.innerHTML = '';
|
refStyle.innerHTML = '';
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
a('mouseover', function (a) {
|
a('mouseover', function (a, e, c) {
|
||||||
if (a = idRx.exec(a.className)) {
|
if (c) {
|
||||||
|
e.target.style.cursor = "pointer";
|
||||||
|
} else if (a = idRx.exec(a.className)) {
|
||||||
try {
|
try {
|
||||||
refStyle.innerHTML = 'pre.sf-dump .'+a[0]+'{background-color: #B729D9; color: #FFF !important; border-radius: 2px}';
|
refStyle.innerHTML = 'pre.sf-dump .'+a[0]+'{background-color: #B729D9; color: #FFF !important; border-radius: 2px}';
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@ -321,16 +320,6 @@ return function (root, x) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (fmt && (a = elt.getAttribute('data-file'))) {
|
|
||||||
if (fmt[1]) {
|
|
||||||
for (x in fmt[1]) {
|
|
||||||
if (0 === a.indexOf(x)) {
|
|
||||||
a = fmt[1][x] + a.substr(x.length);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
elt.href = fmt[0].replace('%l', elt.getAttribute('data-line')).replace('%f', a);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -391,7 +380,7 @@ pre.sf-dump .sf-dump-ellipsis {
|
|||||||
display: inline-block;
|
display: inline-block;
|
||||||
overflow: visible;
|
overflow: visible;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
width: 50px;
|
width: 5em;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
@ -411,7 +400,7 @@ EOHTML
|
|||||||
);
|
);
|
||||||
|
|
||||||
foreach ($this->styles as $class => $style) {
|
foreach ($this->styles as $class => $style) {
|
||||||
$line .= 'pre.sf-dump'.('default' !== $class ? ' .sf-dump-'.$class : '').'{'.$style.'}';
|
$line .= 'pre.sf-dump'.('default' === $class ? ', pre.sf-dump' : '').' .sf-dump-'.$class.'{'.$style.'}';
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->dumpHeader = preg_replace('/\s+/', ' ', $line).'</style>'.$this->dumpHeader;
|
return $this->dumpHeader = preg_replace('/\s+/', ' ', $line).'</style>'.$this->dumpHeader;
|
||||||
@ -485,37 +474,27 @@ EOHTML
|
|||||||
$style .= sprintf(' title="Private property defined in class: `%s`"', esc($this->utf8Encode($attr['class'])));
|
$style .= sprintf(' title="Private property defined in class: `%s`"', esc($this->utf8Encode($attr['class'])));
|
||||||
}
|
}
|
||||||
$map = static::$controlCharsMap;
|
$map = static::$controlCharsMap;
|
||||||
$style = "<span class=sf-dump-{$style}>";
|
|
||||||
|
|
||||||
if (isset($attr['ellipsis'])) {
|
if (isset($attr['ellipsis'])) {
|
||||||
$label = esc(substr($value, -$attr['ellipsis']));
|
$label = esc(substr($value, -$attr['ellipsis']));
|
||||||
|
$style = str_replace(' title="', " title=\"$v\n", $style);
|
||||||
$v = sprintf('</span>%s<abbr title="%s" class=sf-dump-ellipsis>%2$s</abbr>%s</span>%1$s', $style, substr($v, 0, -strlen($label)), $label);
|
$v = sprintf('<span class=sf-dump-ellipsis>%s</span>%s', substr($v, 0, -strlen($label)), $label);
|
||||||
}
|
}
|
||||||
|
|
||||||
$v = preg_replace_callback(static::$controlCharsRx, function ($c) use ($map, $style) {
|
$v = "<span class=sf-dump-{$style}>".preg_replace_callback(static::$controlCharsRx, function ($c) use ($map) {
|
||||||
$s = '</span>';
|
$s = '<span class=sf-dump-default>';
|
||||||
$c = $c[$i = 0];
|
$c = $c[$i = 0];
|
||||||
do {
|
do {
|
||||||
$s .= isset($map[$c[$i]]) ? $map[$c[$i]] : sprintf('\x%02X', ord($c[$i]));
|
$s .= isset($map[$c[$i]]) ? $map[$c[$i]] : sprintf('\x%02X', ord($c[$i]));
|
||||||
} while (isset($c[++$i]));
|
} while (isset($c[++$i]));
|
||||||
|
|
||||||
return $s.$style;
|
return $s.'</span>';
|
||||||
}, $v, -1, $cchrCount);
|
}, $v).'</span>';
|
||||||
|
|
||||||
if ('<' === $v[0]) {
|
if (isset($attr['file']) && $href = $this->getSourceLink($attr['file'], isset($attr['line']) ? $attr['line'] : 0)) {
|
||||||
$v = substr($v, 7);
|
$attr['href'] = $href;
|
||||||
} else {
|
|
||||||
$v = $style.$v;
|
|
||||||
}
|
}
|
||||||
if ('>' === substr($v, -1)) {
|
if (isset($attr['href'])) {
|
||||||
$v = substr($v, 0, -strlen($style));
|
|
||||||
} else {
|
|
||||||
$v .= '</span>';
|
|
||||||
}
|
|
||||||
if (isset($attr['file'])) {
|
|
||||||
$v = sprintf('<a data-file="%s" data-line="%d">%s</a>', esc($this->utf8Encode($attr['file'])), isset($attr['line']) ? $attr['line'] : 1, $v);
|
|
||||||
} elseif (isset($attr['href'])) {
|
|
||||||
$v = sprintf('<a href="%s">%s</a>', esc($this->utf8Encode($attr['href'])), $v);
|
$v = sprintf('<a href="%s">%s</a>', esc($this->utf8Encode($attr['href'])), $v);
|
||||||
}
|
}
|
||||||
if (isset($attr['lang'])) {
|
if (isset($attr['lang'])) {
|
||||||
@ -554,6 +533,31 @@ EOHTML
|
|||||||
}
|
}
|
||||||
AbstractDumper::dumpLine($depth);
|
AbstractDumper::dumpLine($depth);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getSourceLink($file, $line)
|
||||||
|
{
|
||||||
|
$fileLinkFormat = $this->extraDisplayOptions + $this->displayOptions;
|
||||||
|
|
||||||
|
if (!$fileLinkFormat = $fileLinkFormat['fileLinkFormat']) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!is_array($fileLinkFormat)) {
|
||||||
|
$i = max(strpos($fileLinkFormat, '%f'), strpos($fileLinkFormat, '%l'));
|
||||||
|
$i = strpos($fileLinkFormat, '#"', $i) ?: strlen($fileLinkFormat);
|
||||||
|
$fileLinkFormat = array(substr($fileLinkFormat, 0, $i), substr($fileLinkFormat, $i + 1));
|
||||||
|
$fileLinkFormat[1] = @json_decode('{'.$fileLinkFormat[1].'}', true) ?: array();
|
||||||
|
$this->extraDisplayOptions['fileLinkFormat'] = $fileLinkFormat;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($fileLinkFormat[1] as $k => $v) {
|
||||||
|
if (0 === strpos($file, $k)) {
|
||||||
|
$file = substr_replace($file, $v, 0, strlen($k));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return strtr($fileLinkFormat[0], array('%f' => $file, '%l' => $line));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function esc($str)
|
function esc($str)
|
||||||
|
@ -150,10 +150,12 @@ EODUMP;
|
|||||||
<foo></foo><bar><span class=sf-dump-note>Exception</span> {<samp>
|
<foo></foo><bar><span class=sf-dump-note>Exception</span> {<samp>
|
||||||
#<span class=sf-dump-protected title="Protected property">message</span>: "<span class=sf-dump-str title="3 characters">foo</span>"
|
#<span class=sf-dump-protected title="Protected property">message</span>: "<span class=sf-dump-str title="3 characters">foo</span>"
|
||||||
#<span class=sf-dump-protected title="Protected property">code</span>: <span class=sf-dump-num>0</span>
|
#<span class=sf-dump-protected title="Protected property">code</span>: <span class=sf-dump-num>0</span>
|
||||||
#<span class=sf-dump-protected title="Protected property">file</span>: "<a data-file="%sExceptionCasterTest.php" data-line="25"><span class=sf-dump-str title="%d characters"><abbr title="%sTests" class=sf-dump-ellipsis>%sTests</abbr>%eCaster%eExceptionCasterTest.php</span></a>"
|
#<span class=sf-dump-protected title="Protected property">file</span>: "<span class=sf-dump-str title="%sExceptionCasterTest.php
|
||||||
|
%d characters"><span class=sf-dump-ellipsis>%sTests</span>%eCaster%eExceptionCasterTest.php</span>"
|
||||||
#<span class=sf-dump-protected title="Protected property">line</span>: <span class=sf-dump-num>25</span>
|
#<span class=sf-dump-protected title="Protected property">line</span>: <span class=sf-dump-num>25</span>
|
||||||
-<span class=sf-dump-private title="Private property defined in class: `Exception`">trace</span>: {<samp>
|
-<span class=sf-dump-private title="Private property defined in class: `Exception`">trace</span>: {<samp>
|
||||||
<span class=sf-dump-meta title="Stack level %d."><abbr title="%sVarDumper%eTests" class=sf-dump-ellipsis>%sVarDumper%eTests</abbr>%eCaster%eExceptionCasterTest.php</span>: <span class=sf-dump-num>25</span>
|
<span class=sf-dump-meta title="%sExceptionCasterTest.php
|
||||||
|
Stack level %d."><span class=sf-dump-ellipsis>%sVarDumper%eTests</span>%eCaster%eExceptionCasterTest.php</span>: <span class=sf-dump-num>25</span>
|
||||||
…12
|
…12
|
||||||
</samp>}
|
</samp>}
|
||||||
</samp>}
|
</samp>}
|
||||||
|
@ -94,11 +94,12 @@ EODUMP;
|
|||||||
$dumper = new HtmlDumper();
|
$dumper = new HtmlDumper();
|
||||||
$dumper->setDumpHeader('<foo></foo>');
|
$dumper->setDumpHeader('<foo></foo>');
|
||||||
$dumper->setDumpBoundaries('<bar>', '</bar>');
|
$dumper->setDumpBoundaries('<bar>', '</bar>');
|
||||||
|
$dumper->setDisplayOptions(array('fileLinkFormat' => '%f:%l'));
|
||||||
$dump = $dumper->dump($cloner->cloneVar($var), true);
|
$dump = $dumper->dump($cloner->cloneVar($var), true);
|
||||||
|
|
||||||
$expectedDump = <<<'EODUMP'
|
$expectedDump = <<<'EODUMP'
|
||||||
<foo></foo><bar><span class=sf-dump-note>array:1</span> [<samp>
|
<foo></foo><bar><span class=sf-dump-note>array:1</span> [<samp>
|
||||||
<span class=sf-dump-index>0</span> => "<a data-file="%sStubCasterTest.php" data-line="1"><span class=sf-dump-str title="%d characters">Symfony\Component\VarDumper\Tests\Caster\StubCasterTest</span></a>"
|
<span class=sf-dump-index>0</span> => "<a href="%sStubCasterTest.php:0"><span class=sf-dump-str title="55 characters">Symfony\Component\VarDumper\Tests\Caster\StubCasterTest</span></a>"
|
||||||
</samp>]
|
</samp>]
|
||||||
</bar>
|
</bar>
|
||||||
EODUMP;
|
EODUMP;
|
||||||
@ -114,11 +115,11 @@ EODUMP;
|
|||||||
$dumper = new HtmlDumper();
|
$dumper = new HtmlDumper();
|
||||||
$dumper->setDumpHeader('<foo></foo>');
|
$dumper->setDumpHeader('<foo></foo>');
|
||||||
$dumper->setDumpBoundaries('<bar>', '</bar>');
|
$dumper->setDumpBoundaries('<bar>', '</bar>');
|
||||||
$dump = $dumper->dump($cloner->cloneVar($var), true);
|
$dump = $dumper->dump($cloner->cloneVar($var), true, array('fileLinkFormat' => '%f:%l'));
|
||||||
|
|
||||||
$expectedDump = <<<'EODUMP'
|
$expectedDump = <<<'EODUMP'
|
||||||
<foo></foo><bar><span class=sf-dump-note>array:1</span> [<samp>
|
<foo></foo><bar><span class=sf-dump-note>array:1</span> [<samp>
|
||||||
<span class=sf-dump-index>0</span> => "<a data-file="%sFooInterface.php" data-line="8"><span class=sf-dump-str title="5 characters">hello</span></a>"
|
<span class=sf-dump-index>0</span> => "<a href="%sFooInterface.php:8"><span class=sf-dump-str title="5 characters">hello</span></a>"
|
||||||
</samp>]
|
</samp>]
|
||||||
</bar>
|
</bar>
|
||||||
EODUMP;
|
EODUMP;
|
||||||
@ -138,7 +139,8 @@ EODUMP;
|
|||||||
|
|
||||||
$expectedDump = <<<'EODUMP'
|
$expectedDump = <<<'EODUMP'
|
||||||
<foo></foo><bar><span class=sf-dump-note>array:1</span> [<samp>
|
<foo></foo><bar><span class=sf-dump-note>array:1</span> [<samp>
|
||||||
<span class=sf-dump-index>0</span> => "<span class=sf-dump-str title="52 characters"><abbr title="Symfony\Component\VarDumper\Tests\Caster" class=sf-dump-ellipsis>Symfony\Component\VarDumper\Tests\Caster</abbr>\NotExisting</span>"
|
<span class=sf-dump-index>0</span> => "<span class=sf-dump-str title="Symfony\Component\VarDumper\Tests\Caster\NotExisting
|
||||||
|
52 characters"><span class=sf-dump-ellipsis>Symfony\Component\VarDumper\Tests\Caster</span>\NotExisting</span>"
|
||||||
</samp>]
|
</samp>]
|
||||||
</bar>
|
</bar>
|
||||||
EODUMP;
|
EODUMP;
|
||||||
@ -154,11 +156,11 @@ EODUMP;
|
|||||||
$dumper = new HtmlDumper();
|
$dumper = new HtmlDumper();
|
||||||
$dumper->setDumpHeader('<foo></foo>');
|
$dumper->setDumpHeader('<foo></foo>');
|
||||||
$dumper->setDumpBoundaries('<bar>', '</bar>');
|
$dumper->setDumpBoundaries('<bar>', '</bar>');
|
||||||
$dump = $dumper->dump($cloner->cloneVar($var), true);
|
$dump = $dumper->dump($cloner->cloneVar($var), true, array('fileLinkFormat' => '%f:%l'));
|
||||||
|
|
||||||
$expectedDump = <<<'EODUMP'
|
$expectedDump = <<<'EODUMP'
|
||||||
<foo></foo><bar><span class=sf-dump-note>array:1</span> [<samp>
|
<foo></foo><bar><span class=sf-dump-note>array:1</span> [<samp>
|
||||||
<span class=sf-dump-index>0</span> => "<a data-file="%sFooInterface.php" data-line="5"><span class=sf-dump-str title="5 characters">hello</span></a>"
|
<span class=sf-dump-index>0</span> => "<a href="%sFooInterface.php:5"><span class=sf-dump-str title="5 characters">hello</span></a>"
|
||||||
</samp>]
|
</samp>]
|
||||||
</bar>
|
</bar>
|
||||||
EODUMP;
|
EODUMP;
|
||||||
|
@ -59,8 +59,8 @@ class HtmlDumperTest extends \PHPUnit_Framework_TestCase
|
|||||||
<span class=sf-dump-key>4</span> => <span class=sf-dump-num>INF</span>
|
<span class=sf-dump-key>4</span> => <span class=sf-dump-num>INF</span>
|
||||||
<span class=sf-dump-key>5</span> => <span class=sf-dump-num>-INF</span>
|
<span class=sf-dump-key>5</span> => <span class=sf-dump-num>-INF</span>
|
||||||
<span class=sf-dump-key>6</span> => <span class=sf-dump-num>{$intMax}</span>
|
<span class=sf-dump-key>6</span> => <span class=sf-dump-num>{$intMax}</span>
|
||||||
"<span class=sf-dump-key>str</span>" => "<span class=sf-dump-str title="5 characters">d&%s;j&%s;</span>\\n"
|
"<span class=sf-dump-key>str</span>" => "<span class=sf-dump-str title="5 characters">d&%s;j&%s;<span class=sf-dump-default>\\n</span></span>"
|
||||||
<span class=sf-dump-key>7</span> => b"<span class=sf-dump-str title="2 binary or non-UTF-8 characters">&%s;</span>\\x00"
|
<span class=sf-dump-key>7</span> => b"<span class=sf-dump-str title="2 binary or non-UTF-8 characters">&%s;<span class=sf-dump-default>\\x00</span></span>"
|
||||||
"<span class=sf-dump-key>[]</span>" => []
|
"<span class=sf-dump-key>[]</span>" => []
|
||||||
"<span class=sf-dump-key>res</span>" => <span class=sf-dump-note>stream resource</span> <a class=sf-dump-ref>@{$res}</a><samp>
|
"<span class=sf-dump-key>res</span>" => <span class=sf-dump-note>stream resource</span> <a class=sf-dump-ref>@{$res}</a><samp>
|
||||||
%A <span class=sf-dump-meta>wrapper_type</span>: "<span class=sf-dump-str title="9 characters">plainfile</span>"
|
%A <span class=sf-dump-meta>wrapper_type</span>: "<span class=sf-dump-str title="9 characters">plainfile</span>"
|
||||||
@ -84,7 +84,8 @@ class HtmlDumperTest extends \PHPUnit_Framework_TestCase
|
|||||||
<span class=sf-dump-meta>default</span>: <span class=sf-dump-const>null</span>
|
<span class=sf-dump-meta>default</span>: <span class=sf-dump-const>null</span>
|
||||||
</samp>}
|
</samp>}
|
||||||
</samp>}
|
</samp>}
|
||||||
<span class=sf-dump-meta>file</span>: "<a data-file="{$var['file']}" data-line="24"><span class=sf-dump-str title="%d characters"><abbr title="%sTests" class=sf-dump-ellipsis>%sTests</abbr>%eFixtures%edumb-var.php</span></a>"
|
<span class=sf-dump-meta>file</span>: "<span class=sf-dump-str title="{$var['file']}
|
||||||
|
%d characters"><span class=sf-dump-ellipsis>%sTests</span>%eFixtures%edumb-var.php</span>"
|
||||||
<span class=sf-dump-meta>line</span>: "<span class=sf-dump-str title="%d characters">{$var['line']} to {$var['line']}</span>"
|
<span class=sf-dump-meta>line</span>: "<span class=sf-dump-str title="%d characters">{$var['line']} to {$var['line']}</span>"
|
||||||
</samp>}
|
</samp>}
|
||||||
"<span class=sf-dump-key>line</span>" => <span class=sf-dump-num>{$var['line']}</span>
|
"<span class=sf-dump-key>line</span>" => <span class=sf-dump-num>{$var['line']}</span>
|
||||||
|
Reference in New Issue
Block a user