Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

new cdump() shortcut #376

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,13 @@
},
"require-dev": {
"nette/utils": "^2.4 || ^3.0",
"nette/di": "^2.4 || ~3.0.0",
"nette/di": "^3.0",
"nette/tester": "^2.2",
"psr/log": "^1.0"
},
"conflict": {
"nette/di": "<3.0"
},
"suggest": {
"https://nette.org/donate": "Please support Tracy via a donation"
},
Expand All @@ -35,7 +38,7 @@
"minimum-stability": "dev",
"extra": {
"branch-alias": {
"dev-master": "2.6-dev"
"dev-master": "3.0-dev"
}
}
}
1 change: 1 addition & 0 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ Alternatively, you can download the whole package or [tracy.phar](https://github

| Tracy | PHP | compatible with browsers
|-----------|---------------|----------
| Tracy 3.0 (dev) | PHP 7.1 – 7.3 | Chrome 49+, Firefox 45+, MS Edge 14+, Safari 10+ and iOS Safari 10.2+
| Tracy 2.6 | PHP 7.1 – 7.3 | Chrome 49+, Firefox 45+, MS Edge 14+, Safari 10+ and iOS Safari 10.2+
| Tracy 2.5 | PHP 5.4.4 – 7.3 | Chrome 49+, Firefox 45+, MS Edge 12+, Safari 10+ and iOS Safari 10.2+
| Tracy 2.4 | PHP 5.4.4 – 7.2 | Chrome 29+, Firefox 28+, IE 11+ (except AJAX), MS Edge 12+, Safari 9+ and iOS Safari 9.2+
Expand Down
57 changes: 30 additions & 27 deletions src/Bridges/Nette/TracyExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
namespace Tracy\Bridges\Nette;

use Nette;
use Nette\Schema\Expect;
use Tracy;


Expand All @@ -18,26 +19,6 @@
*/
class TracyExtension extends Nette\DI\CompilerExtension
{
public $defaults = [
'email' => null,
'fromEmail' => null,
'logSeverity' => null,
'editor' => null,
'browser' => null,
'errorTemplate' => null,
'strictMode' => null,
'showBar' => null,
'maxLen' => null,
'maxLength' => null,
'maxDepth' => null,
'showLocation' => null,
'scream' => null,
'bar' => [], // of class name
'blueScreen' => [], // of callback
'editorMapping' => [],
'netteMailer' => true,
];

/** @var bool */
private $debugMode;

Expand All @@ -52,9 +33,31 @@ public function __construct(bool $debugMode = false, bool $cliMode = false)
}


public function getConfigSchema(): Nette\Schema\Schema
{
return Expect::structure([
'email' => Expect::email()->dynamic(),
'fromEmail' => Expect::email()->dynamic(),
'logSeverity' => Expect::scalar(),
'editor' => Expect::string()->dynamic(),
'browser' => Expect::string()->dynamic(),
'errorTemplate' => Expect::string()->dynamic(),
'strictMode' => Expect::bool()->dynamic(),
'showBar' => Expect::bool()->dynamic(),
'maxLength' => Expect::int()->dynamic(),
'maxDepth' => Expect::int()->dynamic(),
'showLocation' => Expect::bool()->dynamic(),
'scream' => Expect::bool()->dynamic(),
'bar' => Expect::listOf('class'),
'blueScreen' => Expect::listOf('callable'),
'editorMapping' => Expect::arrayOf('string')->dynamic(),
'netteMailer' => Expect::bool(true),
]);
}


public function loadConfiguration()
{
$this->validateConfig($this->defaults);
$builder = $this->getContainerBuilder();

$builder->addDefinition($this->prefix('logger'))
Expand All @@ -74,7 +77,7 @@ public function afterCompile(Nette\PhpGenerator\ClassType $class)
$initialize = $class->getMethod('initialize');
$builder = $this->getContainerBuilder();

$options = $this->config;
$options = (array) $this->config;
unset($options['bar'], $options['blueScreen'], $options['netteMailer']);
if (isset($options['logSeverity'])) {
$res = 0;
Expand All @@ -94,17 +97,17 @@ public function afterCompile(Nette\PhpGenerator\ClassType $class)
}

$logger = $builder->getDefinition($this->prefix('logger'));
if ($logger->getFactory()->getEntity() !== [Tracy\Debugger::class, 'getLogger']) {
if (!$logger instanceof Nette\DI\ServiceDefinition || $logger->getFactory()->getEntity() !== [Tracy\Debugger::class, 'getLogger']) {
$initialize->addBody($builder->formatPhp('Tracy\Debugger::setLogger(?);', [$logger]));
}
if ($this->config['netteMailer'] && $builder->getByType(Nette\Mail\IMailer::class)) {
if ($this->config->netteMailer && $builder->getByType(Nette\Mail\IMailer::class)) {
$initialize->addBody($builder->formatPhp('Tracy\Debugger::getLogger()->mailer = ?;', [
[new Nette\DI\Statement(Tracy\Bridges\Nette\MailSender::class, ['fromEmail' => $this->config['fromEmail']]), 'send'],
[new Nette\DI\Statement(Tracy\Bridges\Nette\MailSender::class, ['fromEmail' => $this->config->fromEmail]), 'send'],
]));
}

if ($this->debugMode) {
foreach ((array) $this->config['bar'] as $item) {
foreach ($this->config->bar as $item) {
if (is_string($item) && substr($item, 0, 1) === '@') {
$item = new Nette\DI\Statement(['@' . $builder::THIS_CONTAINER, 'getService'], [substr($item, 1)]);
} elseif (is_string($item)) {
Expand All @@ -122,7 +125,7 @@ public function afterCompile(Nette\PhpGenerator\ClassType $class)
}
}

foreach ((array) $this->config['blueScreen'] as $item) {
foreach ($this->config->blueScreen as $item) {
$initialize->addBody($builder->formatPhp(
'$this->getService(?)->addPanel(?);',
Nette\DI\Helpers::filterArguments([$this->prefix('blueScreen'), $item])
Expand Down
2 changes: 1 addition & 1 deletion src/Bridges/Psr/PsrToTracyLoggerAdapter.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public function __construct(Psr\Log\LoggerInterface $psrLogger)
}


public function log($value, $priority = self::INFO)
public function log($value, string $priority = self::INFO)
{
if ($value instanceof \Throwable) {
$message = Tracy\Helpers::getClass($value) . ': ' . $value->getMessage() . ($value->getCode() ? ' #' . $value->getCode() : '') . ' in ' . $value->getFile() . ':' . $value->getLine();
Expand Down
2 changes: 1 addition & 1 deletion src/Tracy/Bar/Bar.php
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ private function renderPanels(string $suffix = ''): array
foreach ($this->panels as $id => $panel) {
$idHtml = preg_replace('#[^a-z0-9]+#i', '-', $id) . $suffix;
try {
$tab = (string) $panel->getTab();
$tab = $panel->getTab();
$panelHtml = $tab ? $panel->getPanel() : null;

} catch (\Throwable $e) {
Expand Down
4 changes: 2 additions & 2 deletions src/Tracy/Bar/IBarPanel.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@ interface IBarPanel
* Renders HTML code for custom tab.
* @return string
*/
function getTab();
function getTab(): ?string;

/**
* Renders HTML code for custom panel.
* @return string
*/
function getPanel();
function getPanel(): ?string;
}
10 changes: 5 additions & 5 deletions src/Tracy/Bar/assets/bar.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,9 @@

elem.querySelectorAll('.tracy-icons a').forEach((link) => {
link.addEventListener('click', (e) => {
if (link.rel === 'close') {
if (link.dataset.tracyAction === 'close') {
this.toPeek();
} else if (link.rel === 'window') {
} else if (link.dataset.tracyAction === 'window') {
this.toWindow();
}
e.preventDefault();
Expand Down Expand Up @@ -258,7 +258,7 @@
initTabs(elem) {
elem.querySelectorAll('a').forEach((link) => {
link.addEventListener('click', (e) => {
if (link.rel === 'close') {
if (link.dataset.tracyAction === 'close') {
this.close();

} else if (link.rel) {
Expand All @@ -284,7 +284,7 @@
});

link.addEventListener('mouseenter', (e) => {
if (e.buttons || !link.rel || link.rel === 'close' || elem.classList.contains('tracy-dragged')) {
if (e.buttons || !link.rel || elem.classList.contains('tracy-dragged')) {
return;
}

Expand All @@ -311,7 +311,7 @@
link.addEventListener('mouseleave', () => {
clearTimeout(this.displayTimeout);

if (link.rel && link.rel !== 'close' && !elem.classList.contains('tracy-dragged')) {
if (link.rel && !elem.classList.contains('tracy-dragged')) {
Debug.panels[link.rel].blur();
}
});
Expand Down
2 changes: 1 addition & 1 deletion src/Tracy/Bar/assets/bar.phtml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,6 @@ namespace Tracy;
<?php } endforeach ?>

<?php if ($type === 'main'): ?>
<li><a href="#" rel="close" title="close debug bar">&times;</a></li>
<li><a href="#" data-tracy-action="close" title="close debug bar">&times;</a></li>
<?php endif ?>
</ul>
4 changes: 2 additions & 2 deletions src/Tracy/Bar/assets/panels.phtml
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ use Tracy\Helpers;

$icons = '
<div class="tracy-icons">
<a href="#" rel="window" title="open in window">&curren;</a>
<a href="#" rel="close" title="close window">&times;</a>
<a href="#" data-tracy-action="window" title="open in window">&curren;</a>
<a href="#" data-tracy-action="close" title="close window">&times;</a>
</div>
';

Expand Down
1 change: 0 additions & 1 deletion src/Tracy/BlueScreen/BlueScreen.php
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,6 @@ private function renderTemplate(\Throwable $exception, string $template, $toScre
);
$info = array_filter($this->info);
$source = Helpers::getSource();
$sourceIsUrl = preg_match('#^https?://#', $source);
$title = $exception instanceof \ErrorException
? Helpers::errorTypeToString($exception->getSeverity())
: Helpers::getClass($exception);
Expand Down
20 changes: 17 additions & 3 deletions src/Tracy/BlueScreen/assets/bluescreen.css
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,20 @@
padding: 3px;
}

.tracy-bs-main {
display: flex;
flex-direction: column;
min-height: 100vh;
}

.tracy-bs-main.tracy-collapsed {
display: none;
}

#tracy-bs div.panel:last-of-type {
flex: 1;
}

#tracy-bs-error {
background: #CD1818;
color: white;
Expand Down Expand Up @@ -153,7 +167,7 @@
list-style: none;
}

#tracy-bs-logo a {
#tracy-bs .footer-logo a {
position: absolute;
bottom: 0;
right: 0;
Expand All @@ -165,8 +179,8 @@
margin: 0;
}

#tracy-bs-logo a:hover,
#tracy-bs-logo a:focus {
#tracy-bs .footer-logo a:hover,
#tracy-bs .footer-logo a:focus {
opacity: 1;
transition: opacity 0.1s;
}
Expand Down
20 changes: 9 additions & 11 deletions src/Tracy/BlueScreen/assets/content.phtml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
* @param array $info
* @param string $title
* @param string $source
* @param bool $sourceIsUrl
* @param array $lastError
* @param array $httpHeaders
* @param callable $dump
Expand All @@ -28,7 +27,7 @@ $code = $exception->getCode() ? ' #' . $exception->getCode() : '';
?>
<div id="tracy-bs" itemscope>
<a id="tracy-bs-toggle" href="#" class="tracy-toggle"></a>
<div>
<div class="tracy-bs-main">
<div id="tracy-bs-error" class="panel">
<?php if ($exception->getMessage()): ?><p><?= Helpers::escapeHtml($title . $code) ?></p><?php endif ?>

Expand Down Expand Up @@ -357,15 +356,14 @@ $code = $exception->getCode() ? ' #' . $exception->getCode() : '';
</div></div>
<?php endforeach ?>


<ul>
<li><b><a href="https://nette.org/make-donation?to=tracy" target="_blank" rel="noreferrer noopener">Please support Tracy via a donation 💙️</a></b></li>
<li>Report generated at <?= @date('Y/m/d H:i:s') // @ timezone may not be set ?></li>
<li><?php if ($sourceIsUrl): ?><a href="<?= Helpers::escapeHtml($source) ?>"><?php endif ?><?= Helpers::escapeHtml($source) ?><?php if ($sourceIsUrl): ?></a><?php endif ?></li>
<?php foreach ($info as $item): ?><li><?= Helpers::escapeHtml($item) ?></li><?php endforeach ?>
</ul>

<div id="tracy-bs-logo"><a href="https://tracy.nette.org" rel="noreferrer"></a></div>
<footer>
<ul>
<li><b><a href="https://nette.org/make-donation?to=tracy" target="_blank" rel="noreferrer noopener">Please support Tracy via a donation 💙️</a></b></li>
<li>Report generated at <?= @date('Y/m/d H:i:s') // @ timezone may not be set ?></li>
<?php foreach ($info as $item): ?><li><?= Helpers::escapeHtml($item) ?></li><?php endforeach ?>
</ul>
<div class="footer-logo"><a href="https://tracy.nette.org" rel="noreferrer"></a></div>
</footer>
</div>
<meta itemprop=tracy-snapshot content=<?= Dumper::formatSnapshotAttribute($snapshot) ?>>
</div>
2 changes: 1 addition & 1 deletion src/Tracy/Debugger/Debugger.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
*/
class Debugger
{
public const VERSION = '2.6.3';
public const VERSION = '3.0-dev';

/** server modes for Debugger::enable() */
public const
Expand Down
2 changes: 1 addition & 1 deletion src/Tracy/Logger/FireLogger.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class FireLogger implements ILogger
* Sends message to FireLogger console.
* @param mixed $message
*/
public function log($message, $priority = self::DEBUG): bool
public function log($message, string $priority = self::DEBUG): bool
{
if (!isset($_SERVER['HTTP_X_FIRELOGGER']) || headers_sent()) {
return false;
Expand Down
2 changes: 1 addition & 1 deletion src/Tracy/Logger/ILogger.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,5 @@ interface ILogger
EXCEPTION = 'exception',
CRITICAL = 'critical';

function log($value, $priority = self::INFO);
function log($value, string $priority = self::INFO);
}
2 changes: 1 addition & 1 deletion src/Tracy/Logger/Logger.php
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public function __construct(?string $directory, $email = null, BlueScreen $blueS
* @param string $priority one of constant ILogger::INFO, WARNING, ERROR (sends email), EXCEPTION (sends email), CRITICAL (sends email)
* @return string|null logged error filename
*/
public function log($message, $priority = self::INFO)
public function log($message, string $priority = self::INFO): ?string
{
if (!$this->directory) {
throw new \LogicException('Logging directory is not specified.');
Expand Down
12 changes: 12 additions & 0 deletions src/Tracy/shortcuts.php
Original file line number Diff line number Diff line change
Expand Up @@ -44,3 +44,15 @@ function bdump($var)
return $var;
}
}

if (!function_exists('cdump')) {
/**
* Tracy\Debugger::fireLog() shortcut.
* @tracySkipLocation
*/
function cdump($var)
{
Tracy\Debugger::fireLog(...func_get_args());
return $var;
}
}
2 changes: 1 addition & 1 deletion tests/Tracy.Bridges/TracyExtension.services.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ require __DIR__ . '/../bootstrap.php';

class CustomLogger implements ILogger
{
public function log($value, $priority = self::INFO)
public function log($value, string $priority = self::INFO)
{
}
}
Expand Down
2 changes: 1 addition & 1 deletion tests/Tracy.Bridges/TracyToPsrLoggerAdapter.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class DummyTracyLogger implements ILogger
public $entries = [];


public function log($value, $priority = self::INFO)
public function log($value, string $priority = self::INFO)
{
$this->entries[] = [$priority, $value];
}
Expand Down
2 changes: 1 addition & 1 deletion tests/Tracy/Logger.extensible.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class CustomLogger extends Logger
public $collector = [];


public function log($value, $priority = self::INFO): ?string
public function log($value, string $priority = self::INFO): ?string
{
$exceptionFile = $value instanceof \Exception ? $this->logException($value) : null;

Expand Down
Loading