fixed exception HTML markup (closes #9044, partially based on a patch from wrzasq)
This commit is contained in:
parent
f398755fcd
commit
eb7cbb77ec
@ -16,19 +16,20 @@ build: 56
|
||||
.sf-exceptionreset h3 { font-size: 130%; font-weight: bold; letter-spacing: -0.02em; }
|
||||
.sf-exceptionreset h3 span { float: right; font-size: 80%; background: #eee; color: #333; padding: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }
|
||||
.sf-exceptionreset ul { padding-left: 20px }
|
||||
.sf-exceptionreset ul li { padding-bottom: 5px; list-style: decimal }
|
||||
.sf-exceptionreset ol { font-family: monospace; white-space: pre; padding: 10px 0 }
|
||||
.sf-exceptionreset ol li { margin: -5px; list-style: decimal; list-style-position: inside }
|
||||
.sf-exceptionreset ol .selected { font-weight: bold; background-color: #ffd; padding: 2px 0 }
|
||||
.sf-exceptionreset ul li { padding-bottom: 5px }
|
||||
.sf-exceptionreset ol { padding: 10px 0 }
|
||||
.sf-exceptionreset ol li { list-style: decimal; margin-left: 20px; padding: 2px }
|
||||
.sf-exceptionreset ol ol li { list-style-position: inside; margin-left: 0 }
|
||||
.sf-exceptionreset li .selected { background-color: #ffd; padding: 4px 3px }
|
||||
.sf-exceptionreset p.error { padding: 10px; background-color: #f00; font-weight: bold; text-align: center; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px; }
|
||||
.sf-exceptionreset p.error a { color: #fff }
|
||||
.sf-exceptionreset .block { padding: 20px 25px; margin-bottom: 10px; border: 1px solid #ddd; background-color: #fff; text-align:left; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px; min-width: 770px; max-width: 770px; box-shadow: 0 1px 2px rgba(0,0,0,0.15); -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.15); -moz-box-shadow: 0 1px 3px rgba(0,0,0,0.3); }
|
||||
.sf-exceptionreset .block { padding: 20px 25px; margin-bottom: 10px; border: 1px solid #ddd; background-color: #fff; text-align:left; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px; width: 770px; box-shadow: 0 1px 2px rgba(0,0,0,0.15); -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.15); -moz-box-shadow: 0 1px 3px rgba(0,0,0,0.3); }
|
||||
.sf-exceptionreset .traces { display: none; margin-top: 10px }
|
||||
.sf-exceptionreset #message { margin-top: 30px; margin-bottom: 10px; padding: 20px 25px; text-align:left; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px; min-width: 770px; max-width: 770px; background-color: #c8e8f3; border: 1px solid #ddd; background-image: -moz-linear-gradient(-90deg, #fff, #c8e8f3); background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#fff), to(#c8e8f3)); box-shadow: 0 1px 2px rgba(0,0,0,0.15); -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.15); -moz-box-shadow: 0 1px 3px rgba(0,0,0,0.3); }
|
||||
.sf-exceptionreset #message { margin-top: 30px; margin-bottom: 10px; padding: 20px 25px; text-align:left; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px; width: 770px; background-color: #c8e8f3; border: 1px solid #ddd; background-image: -moz-linear-gradient(-90deg, #fff, #c8e8f3); background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#fff), to(#c8e8f3)); box-shadow: 0 1px 2px rgba(0,0,0,0.15); -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.15); -moz-box-shadow: 0 1px 3px rgba(0,0,0,0.3); }
|
||||
.sf-exceptionreset #content { border: 1px solid #ddd; margin-top: 10px; padding: 7px; overflow: auto; }
|
||||
.sf-exceptionreset a.file_link { text-decoration: none; }
|
||||
.sf-exceptionreset a.file_link:hover { text-decoration: underline; }
|
||||
.sf-exceptionreset .code { overflow: auto; }
|
||||
.sf-exceptionreset code { font-size: 105%; font-family: monospace; overflow: auto; }
|
||||
.sf-exceptionreset img { vertical-align: middle; }
|
||||
.sf-exceptionreset .error { background-color: #f66 }
|
||||
.sf-exceptionreset .linked ul, .sf-exceptionreset .linked li { padding-left: 0; display: inline }
|
||||
|
@ -5,7 +5,7 @@
|
||||
<div class="sf-exceptionreset">
|
||||
<div id="message">
|
||||
<div style="float: left; margin-right: 20px">
|
||||
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABHpJREFUeNrsV1tIY1cUzUvzMJOJk/isjkYnOlLBVE1spjQElXb6U/yyklGL1hedD7FFjDBQbBGrfohfgyhSKgYKLfhX2qotUzrWDnUCo7VgjTA2iI4ZNY+bh1G7Tri3pGn05tKB+egcWJzXPvusu8/e+5zLPzs74z3PIuA95/KCAI/4QCxiym3ge6CDg9oOes1ttr1EbJpmZmaKhUKheXFxsWBqaqoWQxabzRaOJ2uxWIg+W1tbW1V1dfXVk5OTR01NTRfqZyXA5/Otp6enlNls7isvL8/o7u6eQP+9eLJJSUkT4+PjbysUCjFkhrH2Yzb9rATI5qiswGdyuXx9cHCwvrGx8S76l4GrtNhj4GhkZKQeMmTzEvR/T+SsWAnAjEyTKDSmpaUt6fX6KXxlclZWlpRM7Ozs+N1udwhzcsgbE92cKwEezvb68PAw1dnZWRZPdm9vj+rr67sOX/n5mYUhIUCAzW80NDR8pFQqZcxYLMgckSGyzNh/scDrADHp15G46ugw6nS6fDalJpMpH8djhNx9eugtwAv8GNfJ490F8N5ko9G4IpVKRQi/eQx9V1FRccdgMHhLSkrMFxFYX1//YXl5+crKysoHhA/C8R2/3x9eWloqx16hhAiMjY1JUPnpc32ysbHxS1VV1c21tbXd+fn5P0tLSwOwRopEIhETmUAgELTb7b7V1VVJbW1tTllZWTbkviosLKzUaDR5tFppT09PIFEL8EZHRx+iqfN6va79/f2j3NzcfCSkiM+g7wUpF0VRkYQkk8lEWq1WpVar5YyOLRT0L6Go0bX39va+Enev8wiQMjQ0dAtVvcvlMqlUKiWXFI81HqxZQPPL/v7+WSYVJ0pAQz4MIF+YbLVaH6SkpIi5EAiHw6cDAwNash4QAhT22kooCnJycr4Qi8VCePIZztmDFJt8fHwcmfN4PFuHh4cbCDktzKu5KMSLi4u7Q6HQawKBgB8MBkn4GBIi0NzcrGfacDCf0+l0ZGZmFpL+9va2GwrDIOIuKio6d3dsHEIkmbKzs3Wc8wDM50T1UkRAJLLjSPIxFplDjGt2d3dVGRkZCmbsHB1Uenr6b6gZAk4ueeAfCamlpWXuCkqsHMzqRiT8gUjZwSWUhWi4hqNTkLnNzU3H3NxcM5o/Rb8HuKRictPdrays/BBKJeRrY4ELyHFwcPAY/nFMatJn5nBkauSKO0RH1K2ZsAVEMN+9mpqal+GIFCLAj6/7l8M5HI77cNA9pg8e6QUFBTdoZ/0VRK5BP39hYWENCc2EdjghH+jq6hJA2AAiQnKW8IPP4VPvIxGlRcvBMnk+ny8MEkfY/DKI5tGX0BMQnoWOT0lar6ure5VEAicfaG9vn0DzXaCVPLOAN4BvouWQ44MwvQemp+CcstTU1Eu4P0i+eBP4FmgkrzryWJmcnFRyzoSktLa2Rj8qZzFnYXnk2iBzi+lPT0/zLnJCTg8S2iIku+nPEX9Ayzy7/wK876IRBgzAJ8DTqPGn9JiBlvl7Deuj98W/4f+ewF8CDADfMn9DHK75mAAAAABJRU5ErkJggg==" />
|
||||
<img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABHpJREFUeNrsV1tIY1cUzUvzMJOJk/isjkYnOlLBVE1spjQElXb6U/yyklGL1hedD7FFjDBQbBGrfohfgyhSKgYKLfhX2qotUzrWDnUCo7VgjTA2iI4ZNY+bh1G7Tri3pGn05tKB+egcWJzXPvusu8/e+5zLPzs74z3PIuA95/KCAI/4QCxiym3ge6CDg9oOes1ttr1EbJpmZmaKhUKheXFxsWBqaqoWQxabzRaOJ2uxWIg+W1tbW1V1dfXVk5OTR01NTRfqZyXA5/Otp6enlNls7isvL8/o7u6eQP+9eLJJSUkT4+PjbysUCjFkhrH2Yzb9rATI5qiswGdyuXx9cHCwvrGx8S76l4GrtNhj4GhkZKQeMmTzEvR/T+SsWAnAjEyTKDSmpaUt6fX6KXxlclZWlpRM7Ozs+N1udwhzcsgbE92cKwEezvb68PAw1dnZWRZPdm9vj+rr67sOX/n5mYUhIUCAzW80NDR8pFQqZcxYLMgckSGyzNh/scDrADHp15G46ugw6nS6fDalJpMpH8djhNx9eugtwAv8GNfJ490F8N5ko9G4IpVKRQi/eQx9V1FRccdgMHhLSkrMFxFYX1//YXl5+crKysoHhA/C8R2/3x9eWloqx16hhAiMjY1JUPnpc32ysbHxS1VV1c21tbXd+fn5P0tLSwOwRopEIhETmUAgELTb7b7V1VVJbW1tTllZWTbkviosLKzUaDR5tFppT09PIFEL8EZHRx+iqfN6va79/f2j3NzcfCSkiM+g7wUpF0VRkYQkk8lEWq1WpVar5YyOLRT0L6Go0bX39va+Enev8wiQMjQ0dAtVvcvlMqlUKiWXFI81HqxZQPPL/v7+WSYVJ0pAQz4MIF+YbLVaH6SkpIi5EAiHw6cDAwNash4QAhT22kooCnJycr4Qi8VCePIZztmDFJt8fHwcmfN4PFuHh4cbCDktzKu5KMSLi4u7Q6HQawKBgB8MBkn4GBIi0NzcrGfacDCf0+l0ZGZmFpL+9va2GwrDIOIuKio6d3dsHEIkmbKzs3Wc8wDM50T1UkRAJLLjSPIxFplDjGt2d3dVGRkZCmbsHB1Uenr6b6gZAk4ueeAfCamlpWXuCkqsHMzqRiT8gUjZwSWUhWi4hqNTkLnNzU3H3NxcM5o/Rb8HuKRictPdrays/BBKJeRrY4ELyHFwcPAY/nFMatJn5nBkauSKO0RH1K2ZsAVEMN+9mpqal+GIFCLAj6/7l8M5HI77cNA9pg8e6QUFBTdoZ/0VRK5BP39hYWENCc2EdjghH+jq6hJA2AAiQnKW8IPP4VPvIxGlRcvBMnk+ny8MEkfY/DKI5tGX0BMQnoWOT0lar6ure5VEAicfaG9vn0DzXaCVPLOAN4BvouWQ44MwvQemp+CcstTU1Eu4P0i+eBP4FmgkrzryWJmcnFRyzoSktLa2Rj8qZzFnYXnk2iBzi+lPT0/zLnJCTg8S2iIku+nPEX9Ayzy7/wK876IRBgzAJ8DTqPGn9JiBlvl7Deuj98W/4f+ewF8CDADfMn9DHK75mAAAAABJRU5ErkJggg==" />
|
||||
</div>
|
||||
<div style="float: left; width: 600px">
|
||||
<h1><?php echo $view->get('code')->formatFileFromText(str_replace("\n", '<br />', htmlspecialchars($exception->getMessage(), ENT_QUOTES, $view->getCharset()))) ?></h1>
|
||||
|
@ -6,10 +6,12 @@
|
||||
<style type="text/css">
|
||||
html { background: #eee }
|
||||
body { font: 11px Verdana, Arial, sans-serif; color: #333 }
|
||||
.sf-exceptionreset, .sf-exceptionreset .block, .sf-exceptionreset #message { margin: auto }
|
||||
|
||||
<?php echo $view->render('FrameworkBundle:Exception:styles') ?>
|
||||
</style>
|
||||
<script type="text/javascript">
|
||||
//<![CDATA[
|
||||
function toggle(id, clazz) {
|
||||
el = document.getElementById(id);
|
||||
current = el.style.display
|
||||
@ -25,11 +27,10 @@
|
||||
|
||||
el.style.display = current == 'none' ? 'block' : 'none';
|
||||
}
|
||||
//]]>
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<center>
|
||||
<?php echo $view->get('slots')->get('_content') ?>
|
||||
</center>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,8 +1,8 @@
|
||||
<ul>
|
||||
<ol>
|
||||
<?php foreach ($logs as $log): ?>
|
||||
<li<?php if ('ERR' === $log['priorityName']): ?> class="error"<?php endif; ?>>
|
||||
<?php echo $log['priorityName'] ?>:
|
||||
<?php echo $log['message'] ?>
|
||||
</li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
</ol>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<?php if ($trace['file'] && $trace['line']): ?>
|
||||
in <em><?php echo $view->get('code')->formatFile($trace['file'], $trace['line']) ?></em>
|
||||
<a href="#" onclick="toggle('trace_<?php echo $prefix.'_'.$i ?>'); return false;">»</a><br />
|
||||
<ul class="code" id="trace_<?php echo $prefix.'_'.$i ?>" style="display: <?php echo 0 === $i ? 'block' : 'none' ?>">
|
||||
<div id="trace_<?php echo $prefix.'_'.$i ?>" style="display: <?php echo 0 === $i ? 'block' : 'none' ?>">
|
||||
<?php echo $view->get('code')->fileExcerpt($trace['file'], $trace['line']) ?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
@ -10,11 +10,11 @@
|
||||
<?php endif; ?>
|
||||
|
||||
<a id="traces_link_<?php echo $position ?>"></a>
|
||||
<ul class="traces" id="traces_<?php echo $position ?>" style="display: <?php echo 0 === $position ? 'block' : 'none' ?>">
|
||||
<ol class="traces" id="traces_<?php echo $position ?>" style="display: <?php echo 0 === $position ? 'block' : 'none' ?>">
|
||||
<?php foreach ($exception->getTrace() as $i => $trace): ?>
|
||||
<li>
|
||||
<?php echo $view->render('FrameworkBundle:Exception:trace', array('prefix' => $position, 'i' => $i, 'trace' => $trace)) ?>
|
||||
</li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
</ol>
|
||||
</div>
|
||||
|
@ -132,11 +132,14 @@ class CodeHelper extends Helper
|
||||
public function fileExcerpt($file, $line)
|
||||
{
|
||||
if (is_readable($file)) {
|
||||
$content = preg_split('#<br />#', highlight_file($file, true));
|
||||
$code = highlight_file($file, true);
|
||||
// remove main code/span tags
|
||||
$code = preg_replace('#^<code.*?>\s*<span.*?>(.*)</span>\s*</code>#s', '\\1', $code);
|
||||
$content = preg_split('#<br />#', $code);
|
||||
|
||||
$lines = array();
|
||||
for ($i = max($line - 3, 1), $max = min($line + 3, count($content)); $i <= $max; $i++) {
|
||||
$lines[] = '<li'.($i == $line ? ' class="selected"' : '').'>'.$content[$i - 1].'</li>';
|
||||
$lines[] = '<li'.($i == $line ? ' class="selected"' : '').'><code>'.self::fixCodeMarkup($content[$i - 1]).'</code></li>';
|
||||
}
|
||||
|
||||
return '<ol start="'.max($line - 3, 1).'">'.implode("\n", $lines).'</ol>';
|
||||
@ -187,4 +190,23 @@ class CodeHelper extends Helper
|
||||
{
|
||||
return 'code';
|
||||
}
|
||||
|
||||
protected static function fixCodeMarkup($line)
|
||||
{
|
||||
// </span> ending tag from previous line
|
||||
$opening = strpos($line, '<span');
|
||||
$closing = strpos($line, '</span>');
|
||||
if (false !== $closing && (false === $opening || $closing < $opening)) {
|
||||
$line = substr_replace($line, '', $closing, 7);
|
||||
}
|
||||
|
||||
// missing </span> tag at the end of line
|
||||
$opening = strpos($line, '<span');
|
||||
$closing = strpos($line, '</span>');
|
||||
if (false !== $opening && (false === $closing || $closing > $opening)) {
|
||||
$line .= '</span>';
|
||||
}
|
||||
|
||||
return $line;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user