diff --git a/composer.json b/composer.json index 8168015da..3b370c2fd 100644 --- a/composer.json +++ b/composer.json @@ -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" }, @@ -35,7 +38,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-master": "2.6-dev" + "dev-master": "3.0-dev" } } } diff --git a/readme.md b/readme.md index 9b1869783..929c8cd16 100644 --- a/readme.md +++ b/readme.md @@ -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+ diff --git a/src/Bridges/Nette/TracyExtension.php b/src/Bridges/Nette/TracyExtension.php index 6b82df021..d5bfbd0b6 100644 --- a/src/Bridges/Nette/TracyExtension.php +++ b/src/Bridges/Nette/TracyExtension.php @@ -10,6 +10,7 @@ namespace Tracy\Bridges\Nette; use Nette; +use Nette\Schema\Expect; use Tracy; @@ -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; @@ -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')) @@ -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; @@ -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)) { @@ -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]) diff --git a/src/Bridges/Psr/PsrToTracyLoggerAdapter.php b/src/Bridges/Psr/PsrToTracyLoggerAdapter.php index 71bc7003b..2b9e77b9e 100644 --- a/src/Bridges/Psr/PsrToTracyLoggerAdapter.php +++ b/src/Bridges/Psr/PsrToTracyLoggerAdapter.php @@ -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(); diff --git a/src/Tracy/Bar/Bar.php b/src/Tracy/Bar/Bar.php index e105a505c..6eaff2a27 100644 --- a/src/Tracy/Bar/Bar.php +++ b/src/Tracy/Bar/Bar.php @@ -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) { diff --git a/src/Tracy/Bar/IBarPanel.php b/src/Tracy/Bar/IBarPanel.php index 51cfc7f34..9e259b285 100644 --- a/src/Tracy/Bar/IBarPanel.php +++ b/src/Tracy/Bar/IBarPanel.php @@ -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; } diff --git a/src/Tracy/Bar/assets/bar.js b/src/Tracy/Bar/assets/bar.js index 1efffe2d0..3c25eb79a 100644 --- a/src/Tracy/Bar/assets/bar.js +++ b/src/Tracy/Bar/assets/bar.js @@ -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(); @@ -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) { @@ -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; } @@ -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(); } }); diff --git a/src/Tracy/Bar/assets/bar.phtml b/src/Tracy/Bar/assets/bar.phtml index baac001ba..8fa3a8641 100644 --- a/src/Tracy/Bar/assets/bar.phtml +++ b/src/Tracy/Bar/assets/bar.phtml @@ -32,6 +32,6 @@ namespace Tracy; -
= Helpers::escapeHtml($title . $code) ?>
@@ -357,15 +356,14 @@ $code = $exception->getCode() ? ' #' . $exception->getCode() : '';