Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 7d0cee1

Browse files
[VarDumper] Fix small ClassStub rendering issues
1 parent a86583d commit 7d0cee1

File tree

5 files changed

+63
-55
lines changed

5 files changed

+63
-55
lines changed

src/Symfony/Bundle/WebProfilerBundle/Resources/views/Profiler/profiler.css.twig

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -881,7 +881,11 @@ table.logs .metadata {
881881
margin: 0.5em 0;
882882
}
883883

884-
#collector-content pre.sf-dump { color: #CC7832; }
884+
#collector-content pre.sf-dump,
885+
#collector-content .sf-dump-default {
886+
color: #CC7832;
887+
background: none;
888+
}
885889
#collector-content .sf-dump-str { color: #629755; }
886890
#collector-content .sf-dump-private,
887891
#collector-content .sf-dump-protected,
@@ -893,7 +897,6 @@ table.logs .metadata {
893897
#collector-content .sf-dump {
894898
margin: 0;
895899
padding: 0;
896-
background: none;
897900
line-height: 1.4;
898901
}
899902

@@ -904,10 +907,6 @@ table.logs .metadata {
904907
line-height: inherit;
905908
}
906909

907-
#collector-content .dump-inline pre.sf-dump .sf-dump-ellipsis {
908-
width: 4em;
909-
}
910-
911910
#collector-content .sf-dump .trace {
912911
font-size: 12px;
913912
}

src/Symfony/Component/VarDumper/Dumper/HtmlDumper.php

Lines changed: 42 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public function __construct($output = null, $charset = null, $flags = 0)
5959
{
6060
AbstractDumper::__construct($output, $charset, $flags);
6161
$this->dumpId = 'sf-dump-'.mt_rand();
62+
$this->displayOptions['fileLinkFormat'] = ini_get('xdebug.file_link_format') ?: get_cfg_var('xdebug.file_link_format');
6263
}
6364

6465
/**
@@ -189,18 +190,14 @@ function toggle(a, recursive) {
189190
options = {$options},
190191
elt = root.getElementsByTagName('A'),
191192
len = elt.length,
192-
i = 0, s, h, fmt,
193+
i = 0, s, h,
193194
t = [];
194195
195196
while (i < len) t.push(elt[i++]);
196197
197198
for (i in x) {
198199
options[i] = x[i];
199200
}
200-
fmt = options.fileLinkFormat;
201-
if (fmt && 'string' == typeof fmt) {
202-
fmt = [fmt];
203-
}
204201
205202
function a(e, f) {
206203
addEventListener(root, e, function (e) {
@@ -221,8 +218,10 @@ function isCtrlKey(e) {
221218
refStyle.innerHTML = '';
222219
}
223220
});
224-
a('mouseover', function (a) {
225-
if (a = idRx.exec(a.className)) {
221+
a('mouseover', function (a, e, c) {
222+
if (c) {
223+
e.target.style.cursor = "pointer";
224+
} else if (a = idRx.exec(a.className)) {
226225
try {
227226
refStyle.innerHTML = 'pre.sf-dump .'+a[0]+'{background-color: #B729D9; color: #FFF !important; border-radius: 2px}';
228227
} catch (e) {
@@ -321,16 +320,6 @@ function isCtrlKey(e) {
321320
}
322321
}
323322
}
324-
} else if (fmt && (a = elt.getAttribute('data-file'))) {
325-
if (fmt[1]) {
326-
for (x in fmt[1]) {
327-
if (0 === a.indexOf(x)) {
328-
a = fmt[1][x] + a.substr(x.length);
329-
break;
330-
}
331-
}
332-
}
333-
elt.href = fmt[0].replace('%l', elt.getAttribute('data-line')).replace('%f', a);
334323
}
335324
}
336325
@@ -391,7 +380,7 @@ function isCtrlKey(e) {
391380
display: inline-block;
392381
overflow: visible;
393382
text-overflow: ellipsis;
394-
width: 50px;
383+
width: 5em;
395384
white-space: nowrap;
396385
overflow: hidden;
397386
vertical-align: top;
@@ -411,7 +400,7 @@ function isCtrlKey(e) {
411400
);
412401

413402
foreach ($this->styles as $class => $style) {
414-
$line .= 'pre.sf-dump'.('default' !== $class ? ' .sf-dump-'.$class : '').'{'.$style.'}';
403+
$line .= 'pre.sf-dump'.('default' === $class ? ', pre.sf-dump' : '').' .sf-dump-'.$class.'{'.$style.'}';
415404
}
416405

417406
return $this->dumpHeader = preg_replace('/\s+/', ' ', $line).'</style>'.$this->dumpHeader;
@@ -485,37 +474,27 @@ protected function style($style, $value, $attr = array())
485474
$style .= sprintf(' title="Private property defined in class:&#10;`%s`"', esc($this->utf8Encode($attr['class'])));
486475
}
487476
$map = static::$controlCharsMap;
488-
$style = "<span class=sf-dump-{$style}>";
489477

490478
if (isset($attr['ellipsis'])) {
491479
$label = esc(substr($value, -$attr['ellipsis']));
492-
493-
$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);
480+
$style = str_replace(' title="', " title=\"$v\n", $style);
481+
$v = sprintf('<span class=sf-dump-ellipsis>%s</span>%s', substr($v, 0, -strlen($label)), $label);
494482
}
495483

496-
$v = preg_replace_callback(static::$controlCharsRx, function ($c) use ($map, $style) {
497-
$s = '</span>';
484+
$v = "<span class=sf-dump-{$style}>".preg_replace_callback(static::$controlCharsRx, function ($c) use ($map) {
485+
$s = '<span class=sf-dump-default>';
498486
$c = $c[$i = 0];
499487
do {
500488
$s .= isset($map[$c[$i]]) ? $map[$c[$i]] : sprintf('\x%02X', ord($c[$i]));
501489
} while (isset($c[++$i]));
502490

503-
return $s.$style;
504-
}, $v, -1, $cchrCount);
491+
return $s.'</span>';
492+
}, $v).'</span>';
505493

506-
if ('<' === $v[0]) {
507-
$v = substr($v, 7);
508-
} else {
509-
$v = $style.$v;
510-
}
511-
if ('>' === substr($v, -1)) {
512-
$v = substr($v, 0, -strlen($style));
513-
} else {
514-
$v .= '</span>';
494+
if (isset($attr['file']) && $href = $this->getSourceLink($attr['file'], isset($attr['line']) ? $attr['line'] : 0)) {
495+
$attr['href'] = $href;
515496
}
516-
if (isset($attr['file'])) {
517-
$v = sprintf('<a data-file="%s" data-line="%d">%s</a>', esc($this->utf8Encode($attr['file'])), isset($attr['line']) ? $attr['line'] : 1, $v);
518-
} elseif (isset($attr['href'])) {
497+
if (isset($attr['href'])) {
519498
$v = sprintf('<a href="%s">%s</a>', esc($this->utf8Encode($attr['href'])), $v);
520499
}
521500
if (isset($attr['lang'])) {
@@ -554,6 +533,31 @@ protected function dumpLine($depth, $endOfValue = false)
554533
}
555534
AbstractDumper::dumpLine($depth);
556535
}
536+
537+
private function getSourceLink($file, $line)
538+
{
539+
$fileLinkFormat = $this->extraDisplayOptions + $this->displayOptions;
540+
541+
if (!$fileLinkFormat = $fileLinkFormat['fileLinkFormat']) {
542+
return false;
543+
}
544+
if (!is_array($fileLinkFormat)) {
545+
$i = max(strpos($fileLinkFormat, '%f'), strpos($fileLinkFormat, '%l'));
546+
$i = strpos($fileLinkFormat, '#"', $i) ?: strlen($fileLinkFormat);
547+
$fileLinkFormat = array(substr($fileLinkFormat, 0, $i), substr($fileLinkFormat, $i + 1));
548+
$fileLinkFormat[1] = @json_decode('{'.$fileLinkFormat[1].'}', true) ?: array();
549+
$this->extraDisplayOptions['fileLinkFormat'] = $fileLinkFormat;
550+
}
551+
552+
foreach ($fileLinkFormat[1] as $k => $v) {
553+
if (0 === strpos($file, $k)) {
554+
$file = substr_replace($file, $v, 0, strlen($k));
555+
break;
556+
}
557+
}
558+
559+
return strtr($fileLinkFormat[0], array('%f' => $file, '%l' => $line));
560+
}
557561
}
558562

559563
function esc($str)

src/Symfony/Component/VarDumper/Tests/Caster/ExceptionCasterTest.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,10 +150,12 @@ public function testHtmlDump()
150150
<foo></foo><bar><span class=sf-dump-note>Exception</span> {<samp>
151151
#<span class=sf-dump-protected title="Protected property">message</span>: "<span class=sf-dump-str title="3 characters">foo</span>"
152152
#<span class=sf-dump-protected title="Protected property">code</span>: <span class=sf-dump-num>0</span>
153-
#<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>"
153+
#<span class=sf-dump-protected title="Protected property">file</span>: "<span class=sf-dump-str title="%sExceptionCasterTest.php
154+
%d characters"><span class=sf-dump-ellipsis>%sTests</span>%eCaster%eExceptionCasterTest.php</span>"
154155
#<span class=sf-dump-protected title="Protected property">line</span>: <span class=sf-dump-num>25</span>
155156
-<span class=sf-dump-private title="Private property defined in class:&#10;`Exception`">trace</span>: {<samp>
156-
<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>
157+
<span class=sf-dump-meta title="%sExceptionCasterTest.php
158+
Stack level %d."><span class=sf-dump-ellipsis>%sVarDumper%eTests</span>%eCaster%eExceptionCasterTest.php</span>: <span class=sf-dump-num>25</span>
157159
&hellip;12
158160
</samp>}
159161
</samp>}

src/Symfony/Component/VarDumper/Tests/Caster/StubCasterTest.php

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -94,11 +94,12 @@ public function testLinkStub()
9494
$dumper = new HtmlDumper();
9595
$dumper->setDumpHeader('<foo></foo>');
9696
$dumper->setDumpBoundaries('<bar>', '</bar>');
97+
$dumper->setDisplayOptions(array('fileLinkFormat' => '%f:%l'));
9798
$dump = $dumper->dump($cloner->cloneVar($var), true);
9899

99100
$expectedDump = <<<'EODUMP'
100101
<foo></foo><bar><span class=sf-dump-note>array:1</span> [<samp>
101-
<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>"
102+
<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>"
102103
</samp>]
103104
</bar>
104105
EODUMP;
@@ -114,11 +115,11 @@ public function testClassStub()
114115
$dumper = new HtmlDumper();
115116
$dumper->setDumpHeader('<foo></foo>');
116117
$dumper->setDumpBoundaries('<bar>', '</bar>');
117-
$dump = $dumper->dump($cloner->cloneVar($var), true);
118+
$dump = $dumper->dump($cloner->cloneVar($var), true, array('fileLinkFormat' => '%f:%l'));
118119

119120
$expectedDump = <<<'EODUMP'
120121
<foo></foo><bar><span class=sf-dump-note>array:1</span> [<samp>
121-
<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>"
122+
<span class=sf-dump-index>0</span> => "<a href="%sFooInterface.php:8"><span class=sf-dump-str title="5 characters">hello</span></a>"
122123
</samp>]
123124
</bar>
124125
EODUMP;
@@ -138,7 +139,8 @@ public function testClassStubWithNotExistingClass()
138139

139140
$expectedDump = <<<'EODUMP'
140141
<foo></foo><bar><span class=sf-dump-note>array:1</span> [<samp>
141-
<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>"
142+
<span class=sf-dump-index>0</span> => "<span class=sf-dump-str title="Symfony\Component\VarDumper\Tests\Caster\NotExisting
143+
52 characters"><span class=sf-dump-ellipsis>Symfony\Component\VarDumper\Tests\Caster</span>\NotExisting</span>"
142144
</samp>]
143145
</bar>
144146
EODUMP;
@@ -154,11 +156,11 @@ public function testClassStubWithNotExistingMethod()
154156
$dumper = new HtmlDumper();
155157
$dumper->setDumpHeader('<foo></foo>');
156158
$dumper->setDumpBoundaries('<bar>', '</bar>');
157-
$dump = $dumper->dump($cloner->cloneVar($var), true);
159+
$dump = $dumper->dump($cloner->cloneVar($var), true, array('fileLinkFormat' => '%f:%l'));
158160

159161
$expectedDump = <<<'EODUMP'
160162
<foo></foo><bar><span class=sf-dump-note>array:1</span> [<samp>
161-
<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>"
163+
<span class=sf-dump-index>0</span> => "<a href="%sFooInterface.php:5"><span class=sf-dump-str title="5 characters">hello</span></a>"
162164
</samp>]
163165
</bar>
164166
EODUMP;

src/Symfony/Component/VarDumper/Tests/HtmlDumperTest.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@ public function testGet()
5959
<span class=sf-dump-key>4</span> => <span class=sf-dump-num>INF</span>
6060
<span class=sf-dump-key>5</span> => <span class=sf-dump-num>-INF</span>
6161
<span class=sf-dump-key>6</span> => <span class=sf-dump-num>{$intMax}</span>
62-
"<span class=sf-dump-key>str</span>" => "<span class=sf-dump-str title="5 characters">d&%s;j&%s;</span>\\n"
63-
<span class=sf-dump-key>7</span> => b"<span class=sf-dump-str title="2 binary or non-UTF-8 characters">&%s;</span>\\x00"
62+
"<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>"
63+
<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>"
6464
"<span class=sf-dump-key>[]</span>" => []
6565
"<span class=sf-dump-key>res</span>" => <span class=sf-dump-note>stream resource</span> <a class=sf-dump-ref>@{$res}</a><samp>
6666
%A <span class=sf-dump-meta>wrapper_type</span>: "<span class=sf-dump-str title="9 characters">plainfile</span>"
@@ -84,7 +84,8 @@ public function testGet()
8484
<span class=sf-dump-meta>default</span>: <span class=sf-dump-const>null</span>
8585
</samp>}
8686
</samp>}
87-
<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>"
87+
<span class=sf-dump-meta>file</span>: "<span class=sf-dump-str title="{$var['file']}
88+
%d characters"><span class=sf-dump-ellipsis>%sTests</span>%eFixtures%edumb-var.php</span>"
8889
<span class=sf-dump-meta>line</span>: "<span class=sf-dump-str title="%d characters">{$var['line']} to {$var['line']}</span>"
8990
</samp>}
9091
"<span class=sf-dump-key>line</span>" => <span class=sf-dump-num>{$var['line']}</span>

0 commit comments

Comments
 (0)