From 36f802713517e88986cbfea527a454609518324c Mon Sep 17 00:00:00 2001 From: raveren Date: Thu, 6 Apr 2023 00:19:13 +0300 Subject: [PATCH] Replaced default IDE link provider. Still PHPStorm, just another means. * The good old remote call plugin was replaced by IDE remote control. * The new plugin is not as liberal for what the file path is prefixed, so improved app-root detection, removing Sage::$appRootDirs in the process. Breaking change but no one used it, fact :) * Updated fonts to be a more modern selection. Bolder, nicer, readabler :) * Random inspections fixed --- .github/build/build.php | 2 +- .github/examples/overview.php | 16 +- Makefile | 2 +- README.md | 174 +- Sage.php | 132 +- composer.json | 2 +- decorators/SageDecoratorsRich.php | 1 + inc/SageHelper.php | 79 +- inc/shorthands.inc.php | 2 + parsers/SageParsersClassStatics.php | 6 +- parsers/SageParsersColor.php | 6 +- parsers/SageParsersMicrotime.php | 2 +- playground.php | 35 +- resources/compiled/aante-light.css | 2 +- resources/compiled/original.css | 2 +- resources/compiled/solarized-dark.css | 2 +- resources/compiled/solarized.css | 2 +- resources/css/base.scss | 2 +- sage.phar | Bin 167053 -> 165659 bytes ...yTest__display_filesizes_correctly__1.html | 71 +- .../__snapshots__/issue1Test__example__1.html | 38 +- .../__snapshots__/issue1Test__example__2.html | 174024 --------- .../__snapshots__/issue1Test__example__3.html | 280942 --------------- ...lainDisplayTest__just_random_stuff__1.html | 10 +- ...lainDisplayTest__just_random_stuff__2.html | 10 +- ...lainDisplayTest__just_random_stuff__3.html | 292 +- tests/__snapshots__/xmlTest__xml__1.html | 38 +- tests/all/fileDisplayTest.php | 3 +- tests/all/issue1Test.php | 14 +- 29 files changed, 440 insertions(+), 455471 deletions(-) delete mode 100644 tests/__snapshots__/issue1Test__example__2.html delete mode 100644 tests/__snapshots__/issue1Test__example__3.html diff --git a/.github/build/build.php b/.github/build/build.php index 3aec69d..245ddb7 100644 --- a/.github/build/build.php +++ b/.github/build/build.php @@ -31,4 +31,4 @@ $phar->updateTimestamps(); $phar->save($pharPath, Phar::SHA512); -saged("Success!!! /sage.phar updated!"); +saged('Success!!! /sage.phar updated!'); diff --git a/.github/examples/overview.php b/.github/examples/overview.php index 4c62913..abab168 100644 --- a/.github/examples/overview.php +++ b/.github/examples/overview.php @@ -1,10 +1,10 @@ user = $user; - d($this->getUser()); + s($this->getUser()); } /** @@ -199,8 +199,8 @@ public function ensureUser()

Debug variables

debugUser($user); -d($userManager, $tabularData); -d($nestedArray); +s($userManager, $tabularData); +s($nestedArray); ?>

Trace

"scripts" section + make test test: diff --git a/README.md b/README.md index 991c62e..1317395 100644 --- a/README.md +++ b/README.md @@ -38,14 +38,13 @@ sage(1); // shortcut for dumping trace ![](.github/img/main-screenshot.png) - -| Function | Shorthand | | -|-----------|-----------------------|-------------------| -| `sage` | `s` | Dump | -| `saged` | `sd` | Dump & die | -| `ssage` | `ss` | Simple dump | -| `ssaged` | `ssd` | Simple dump & die | -| `sage(1)` | `s(1)`/`sd(1)` | Debug backtrace | +| Function | Shorthand | | +|-----------|----------------|-------------------| +| `sage` | `s` | Dump | +| `saged` | `sd` | Dump & die | +| `ssage` | `ss` | Simple dump | +| `ssaged` | `ssd` | Simple dump & die | +| `sage(1)` | `s(1)`/`sd(1)` | Debug backtrace | ### Simple dump: @@ -62,12 +61,12 @@ To output plain-text mode (NO STYLING) prefix with `~`, to return instead of ech $output = @ss(); // returns output ``` - ---- # Customization options -Sage is designed with the utmost care to be as usable and useful out of the box, however there are several customization options available for advanced users. +Sage is designed with the utmost care to be as usable and useful out of the box, however there are several customization +options available for advanced users. ### Where to store customization? @@ -100,8 +99,8 @@ Sage::$theme = Sage::THEME_LIGHT; sage.theme = solarized-dark ; always display all dump levels, almost always crashes the browser: sage.maxLevels = 0 -; it's been 10 years, and phpstorm:// is still not working, Jetbrains, PLEASE! -sage.editor = phpstorm-remotecall +; set your IDE links +sage.editor = vscode ; disable Sage unless explicitly enabled sage.enabled = 0 ``` @@ -115,11 +114,12 @@ Sage::$theme = Sage::THEME_ORIGINAL; ``` Currently available themes are: - * `Sage::THEME_ORIGINAL` - * `Sage::THEME_LIGHT` - * `Sage::THEME_SOLARIZED` - * `Sage::THEME_SOLARIZED_DARK` - + +* `Sage::THEME_ORIGINAL` +* `Sage::THEME_LIGHT` +* `Sage::THEME_SOLARIZED` +* `Sage::THEME_SOLARIZED_DARK` + --- ```php @@ -127,24 +127,27 @@ Sage::$editor = ini_get('xdebug.file_link_format'); ``` Make visible source file paths clickable to open your editor. Available options are: - * `'sublime'` - * `'textmate'` - * `'emacs'` - * `'macvim'` - * `'phpstorm'` - * `'phpstorm-remotecall'` - this is the one I have been using for the past 8 years. Requires [Remote call](https://plugins.jetbrains.com/plugin/6027-remote-call) plugin. - * `'idea'` - * `'vscode'` - * `'vscode-insiders'` - * `'vscode-remote'` - * `'vscode-insiders-remote'` - * `'vscodium'` - * `'atom'` - * `'nova'` - * `'netbeans'` - * `'xdebug'` - -Or pass a custom string where %f should be replaced with full file path, %l with line number to create a custom link. Set to null to disable linking. + +* `'sublime'` +* `'textmate'` +* `'emacs'` +* `'macvim'` +* `'phpstorm'` +* `'phpstorm-plugin'` - default, + requires [IDE Remote Control](https://plugins.jetbrains.com/plugin/19991-ide-remote-control) plugin. +* `'idea'` +* `'vscode'` +* `'vscode-insiders'` +* `'vscode-remote'` +* `'vscode-insiders-remote'` +* `'vscodium'` +* `'atom'` +* `'nova'` +* `'netbeans'` +* `'xdebug'` + +Or pass a custom string where %file should be replaced with full file path, %line with line number to create a custom +link. Set to null to disable linking. --- @@ -155,34 +158,20 @@ Sage::$displayCalledFrom = true; Whether to display where Sage was called from --- + ```php Sage::$maxLevels = 7; ``` + Max array/object levels to go deep, set to zero/false to disable --- -```php -Sage::$appRootDirs = [ $_SERVER['DOCUMENT_ROOT'] => 'ROOT' ]; -``` -Directories of your application that will be displayed instead of the full path. Keys are paths, values are replacement strings. - -Use this if you need to hide the access path from output. - -```php - // Example (for Kohana framework (R.I.P.)): - Sage::appRootDirs = [ - SYSPATH => 'SYSPATH', - MODPATH => 'MODPATH', - DOCROOT => 'DOCROOT', - ]; -``` - ---- ```php Sage::$expandedByDefault = false; ``` + Draw rich output already expanded without having to click --- @@ -190,14 +179,17 @@ Draw rich output already expanded without having to click ```php Sage::$cliDetection = true; ``` + Enable detection when running in command line and adjust output format accordingly. --- + ```php Sage::$cliColors = true; ``` -In addition to above setting, enable detection when Sage is run in *UNIX* command line. Attempts to add coloring, but if opened as plain text, the color information is visible as gibberish. +In addition to above setting, enable detection when Sage is run in *UNIX* command line. Attempts to add coloring, but if +opened as plain text, the color information is visible as gibberish. --- @@ -212,9 +204,11 @@ Sage::$charEncodings = [ Possible alternative char encodings in order of probability. --- + ```php Sage::$returnOutput = false; ``` + Sage returns output instead of printing it. --- @@ -222,7 +216,10 @@ Sage returns output instead of printing it. ```php Sage::$aliases; ``` -Add new custom Sage wrapper names. Optional, but needed for backtraces, variable name detection and modifiers to work properly. Accepts array or comma separated string. Use notation `Class::method` for methods. + +Add new custom Sage wrapper names. Optional, but needed for backtraces, variable name detection and modifiers to work +properly. Accepts array or comma separated string. Use notation `Class::method` for methods. + ```php // example, returns text-only output function MY_dump($args) @@ -235,8 +232,11 @@ Sage::$aliases[] = 'my_dump'; // let Sage know about it. In lowercase please. ``` --- + # 🧙 Advanced Tips & Tricks + > this section is under construction :) + ```php // we already saw: sage($GLOBALS, $_SERVER); @@ -259,7 +259,7 @@ Sage::dump( debug_backtrace() ); // you can even pass a custom result from debug // dump and die debugging sd($GLOBALS, $_SERVER); // dd() might be taken by your framework -saged($GLOBALS, $_SERVER); // so this is an equivalent altenrative +saged($GLOBALS, $_SERVER); // so this is an equivalent alternative ssd($GLOBALS, $_SERVER); // available for plain display too! // this will disable Sage completely @@ -267,16 +267,20 @@ Sage::enabled(false); sd('Get off my lawn!'); // no effect ``` -* Sage supports keyboard shortcuts! Just press d when viewing output and the rest is self-explanatory (p.s. vim-style `hjkl` works as well); -* Call `Sage::enabled(Sage::MODE_PLAIN);` to switch to a simpler, js-free output. -* Call `Sage::enabled(Sage::MODE_TEXT_ONLY);` for pure-plain text output which you can save or pass around by first setting `Sage::$returnOutput = true;` -* Sage can provide a plain-text version of its output and does so automatically when invoked via PHP running in command line mode. +* Sage supports keyboard shortcuts! Just press d when viewing output and the rest is self-explanatory (p.s. + vim-style `hjkl` works as well); +* Call `Sage::enabled(Sage::MODE_PLAIN);` to switch to a simpler, js-free output. +* Call `Sage::enabled(Sage::MODE_TEXT_ONLY);` for pure-plain text output which you can save or pass around by first + setting `Sage::$returnOutput = true;` +* Sage can provide a plain-text version of its output and does so automatically when invoked via PHP running in command + line mode. ![](.github/img/cli-output.png) * Double clicking the `[+]` sign in the output will expand/collapse ALL nodes; **triple clicking** a big block of text will select it all. -* Clicking the tiny arrow on the **right** of the output will open it in a separate window where you can keep it for comparison. +* Clicking the tiny arrow on the **right** of the output will open it in a separate window where you can keep it for + comparison. * Sage supports themes: ![](.github/img/theme-preview.png) @@ -284,11 +288,11 @@ sd('Get off my lawn!'); // no effect For customization instructions read the section below. * If a variable is an object, its classname can be clicked to open the class in your IDE. * There are a couple of real-time modifiers you can use: - * `~s($var)` this call will output in plain text format. - * `+s($var)` will disregard depth level limits and output everything (careful, this can hang your browser on huge - objects) - * `!s($var)` will show uncollapsed rich output. - * `-s($var)` will attempt to `ob_clean` the previous output - useful when Sage is obscured by already present HTML. + * `~s($var)` this call will output in plain text format. + * `+s($var)` will disregard depth level limits and output everything (careful, this can hang your browser on huge + objects) + * `!s($var)` will show uncollapsed rich output. + * `-s($var)` will attempt to `ob_clean` the previous output - useful when Sage is obscured by already present HTML. [Here's a little bit](https://stackoverflow.com/a/69890023/179104) on how it works. @@ -313,28 +317,36 @@ sd( microtime(), 'final call, after sleep(2)' ); ### 💬 How is it different or better than [symfony/var-dumper](https://symfony.com/doc/current/components/var_dumper.html)? * Visible **Variable name** -* Keyboard shortcuts. Type d and the rest is just self-explanatory (use arrows, space, tab, enter, you'll get it!). +* Keyboard shortcuts. Type d and the rest is just self-explanatory (use arrows, space, tab, enter, you'll get + it!). * **Debug backtraces** with full insight of arguments, callee objects and more. * Custom display for a lot of recognized types: ![custom types](.github/img/alternative-view.png) * Has text-only, plain and rich views, has several visual themes - actually created by a pro designer. * A huge amount of small usability enhancements - like the (clickable) **call trace** in the footer of each output. -* Supports convenience modifiers, for example `@sage($var);` will return instead of outputting, `-sage($var);` will `ob_clean` all output to be the only thing on page (see advanced section above for more). +* Supports convenience modifiers, for example `@sage($var);` will return instead of outputting, `-sage($var);` + will `ob_clean` all output to be the only thing on page (see advanced section above for more). * Compatibility! Fully works on **PHP 5.1 - 8.1+**! * Code is way less complex - to read and contribute to. -* Sage came first - developed since [pre-2012](https://github.com/php-sage/sage/commit/3c49968cb912fb627c6650c4bfd4673bb1b44277). It inspired the now ubiquitous [dd](https://github.com/php-sage/sage/commit/fa6c8074ea1870bb5c6a080e94f7130e9a0f2fda#diff-2cdf3c423d47e373c75638c910674ec68c5aa434e11d4074037c91a543d9cb58R549) shorthand, pioneered a lot of the concepts in the tool niche. +* Sage came first - developed + since [pre-2012](https://github.com/php-sage/sage/commit/3c49968cb912fb627c6650c4bfd4673bb1b44277). It inspired the + now + ubiquitous [dd](https://github.com/php-sage/sage/commit/fa6c8074ea1870bb5c6a080e94f7130e9a0f2fda#diff-2cdf3c423d47e373c75638c910674ec68c5aa434e11d4074037c91a543d9cb58R549) + shorthand, pioneered a lot of the concepts in the tool niche. ### 💬 What are the other dumpers out there - * [Symfony/var-dumper](https://symfony.com/doc/current/components/var_dumper.html) - * [yii\helpers\VarDumper](https://www.yiiframework.com/doc/api/2.0/yii-helpers-vardumper) - * [Tracy](https://tracy.nette.org/) - * [PHP Debug Bar](https://github.com/maximebf/php-debugbar) - * [Kint](https://kint-php.github.io/kint/) - sage superseeds Kint. +* [Symfony/var-dumper](https://symfony.com/doc/current/components/var_dumper.html) +* [yii\helpers\VarDumper](https://www.yiiframework.com/doc/api/2.0/yii-helpers-vardumper) +* [Tracy](https://tracy.nette.org/) +* [PHP Debug Bar](https://github.com/maximebf/php-debugbar) +* [Kint](https://kint-php.github.io/kint/) - sage supersedes Kint. ### 💬 Why does Sage look so much like Kint? A.K.A. Why does this have so few stars? -Because it is Kint, and I am its author, however the project was [**forcibly taken over**](https://github.com/kint-php/kint/commit/1ea81f3add81b586756515673f8364f60feb86a3) from me by a malicious contributor! +Because it is Kint, and I am its author, however the project was [**forcibly taken over +**](https://github.com/kint-php/kint/commit/1ea81f3add81b586756515673f8364f60feb86a3) from me by a malicious +contributor! Instead of fighting DMCA windmills, I chose to fork and rename the last **good** version and continue under a new name! @@ -342,8 +354,10 @@ Instead of fighting DMCA windmills, I chose to fork and rename the last **good** 1. In practice, Xdebug is quite often very difficult and time-consuming to install and configure. 2. There's many use-cases where dump&die is just faster to bring up. -3. There is no way you can visualise a timeline of changed data with XDebug. For example, all values dumped from within a loop. -4. And there's more subtle use-cases, eg. if you stepped over something there's no way to go back, but with var-dumping the values are still there... +3. There is no way you can visualise a timeline of changed data with XDebug. For example, all values dumped from within + a loop. +4. And there's more subtle use-cases, eg. if you stepped over something there's no way to go back, but with var-dumping + the values are still there... I use xdebug almost daily, by the way. Side by side with Sage. @@ -355,14 +369,16 @@ I use xdebug almost daily, by the way. Side by side with Sage. * Install [Docker Compose](https://docs.docker.com/compose/install/#install-compose'). * If you're on **Windows** 10+ you need to use WSL2: - 1. Setup: `wsl --install` - 2. Set Ubuntu as your default wsl shell: `wsl --set-version Ubuntu 2`. - 3. All commands listed below must be run from inside wsl shell: `wsl` + 1. Setup: `wsl --install` + 2. Set Ubuntu as your default wsl shell: `wsl --set-version Ubuntu 2`. + 3. All commands listed below must be run from inside wsl shell: `wsl` Do your changes but before committing run ```bash docker compose run php composer build + # or (see Makefile): + make build ``` To compile resources and build the phar file. diff --git a/Sage.php b/Sage.php index b73b298..cb167ba 100644 --- a/Sage.php +++ b/Sage.php @@ -7,7 +7,8 @@ * * The MIT License (MIT) * - * Copyright (c) 2013 Rokas Sleinius (raveren@gmail.com) and contributors (https://github.com/php-sage/sage/contributors) + * Copyright (c) 2013 Rokas Sleinius (raveren@gmail.com) and contributors: + * (https://github.com/php-sage/sage/contributors) * * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -60,35 +61,35 @@ class Sage * @var string makes visible source file paths clickable to open your editor. * * Pre-defined values: - * 'sublime' => 'subl://open?url=file://%f&line=%l', - * 'textmate' => 'txmt://open?url=file://%f&line=%l', - * 'emacs' => 'emacs://open?url=file://%f&line=%l', - * 'macvim' => 'mvim://open/?url=file://%f&line=%l', - * 'phpstorm' => 'phpstorm://open?file=%f&line=%l', - * 'phpstorm-remotecall' => 'http://localhost:8091?message=%f:%l', - * 'idea' => 'idea://open?file=%f&line=%l', - * 'vscode' => 'vscode://file/%f:%l', - * 'vscode-insiders' => 'vscode-insiders://file/%f:%l', - * 'vscode-remote' => 'vscode://vscode-remote/%f:%l', - * 'vscode-insiders-remote' => 'vscode-insiders://vscode-remote/%f:%l', - * 'vscodium' => 'vscodium://file/%f:%l', - * 'atom' => 'atom://core/open/file?filename=%f&line=%l', - * 'nova' => 'nova://core/open/file?filename=%f&line=%l', - * 'netbeans' => 'netbeans://open/?f=%f:%l', - * 'xdebug' => 'xdebug://%f@%l', - * - * Or pass a custom string where %f should be replaced with full file path, %l with line number to create a - * custom link. Set to null to disable linking. + * 'sublime' => 'subl://open?url=file://%file&line=%line', + * 'textmate' => 'txmt://open?url=file://%file&line=%line', + * 'emacs' => 'emacs://open?url=file://%file&line=%line', + * 'macvim' => 'mvim://open/?url=file://%file&line=%line', + * 'phpstorm' => 'phpstorm://open?file=%file&line=%line', + * 'phpstorm-plugin' => 'http://localhost:63342/api/file/%file:%line', + * 'idea' => 'idea://open?file=%file&line=%line', + * 'vscode' => 'vscode://file/%file:%line', + * 'vscode-insiders' => 'vscode-insiders://file/%file:%line', + * 'vscode-remote' => 'vscode://vscode-remote/%file:%line', + * 'vscode-insiders-remote' => 'vscode-insiders://vscode-remote/%file:%line', + * 'vscodium' => 'vscodium://file/%file:%line', + * 'atom' => 'atom://core/open/file?filename=%file&line=%line', + * 'nova' => 'nova://core/open/file?filename=%file&line=%line', + * 'netbeans' => 'netbeans://open/?f=%file:%line', + * 'xdebug' => 'xdebug://%file@%line' + * + * Or pass a custom string where %fileileileileileile should be replaced with full file path, %line with line number + * to create a custom link. Set to null to disable linking. * * Example: - * // works with for PHPStorm and RemoteCall Plugin - * Sage::$editor = 'phpstorm-remotecall'; + * // works with for PHPStorm and IDE Remote Control Plugin + * Sage::$editor = 'phpstorm-plugin'; * Example: * // same result as above, but explicitly defined - * Sage::$editor = 'http://localhost:8091/?message=%f:%l'; + * Sage::$editor = 'http://localhost:63342/api/file/f:%line'; * * Default: - * ini_get('xdebug.file_link_format') ?: 'phpstorm-remotecall' + * ini_get('xdebug.file_link_format') ?: 'phpstorm-plugin' * */ public static $editor; @@ -141,27 +142,6 @@ class Sage */ public static $theme; - /** - * @var array directories of your application that will be displayed instead of the full path. Keys are paths, - * values are replacement strings. - * - * Use this if you need to hide the access path from output. - * - * Example (for Kohana framework (R.I.P.)): - * Sage::appRootDirs = array( - * SYSPATH => 'SYSPATH', - * MODPATH => 'MODPATH', - * DOCROOT => 'DOCROOT', - * ); - * - * Example #2: - * Sage::appRootDirs = array( realpath( __DIR__ . '/../../..' ) => 'ROOT' ); - * - * Default: - * array( $_SERVER['DOCUMENT_ROOT'] => 'ROOT' ) - */ - public static $appRootDirs; - /** * @var bool draw rich output already expanded without having to click * @@ -192,9 +172,9 @@ class Sage * * Default: * array( - * 'UTF-8', - * 'Windows-1252', // Western; includes iso-8859-1, replace this with windows-1251 if you have Russian code - * 'euc-jp', // Japanese + * 'UTF-8', + * 'Windows-1252', // Western; includes iso-8859-1, replace this with windows-1251 if you have Russian code + * 'euc-jp', // Japanese * ); */ public static $charEncodings; @@ -240,9 +220,6 @@ class Sage const MODE_CLI = 'c'; const MODE_PLAIN = 'p'; - /** @deprecated in favor of Sage::MODE_TEXT_ONLY will be removed in the next version! */ - const MODE_WHITESPACE = 'w'; - const THEME_ORIGINAL = 'original'; const THEME_LIGHT = 'aante-light'; const THEME_SOLARIZED_DARK = 'solarized-dark'; @@ -431,7 +408,7 @@ public static function dump($data = null) } // process modifier combinations - if (! empty($modifiers) && strpos($modifiers, '-') !== false) { + if (strpos($modifiers, '-') !== false) { $decorator::$firstRun = true; } } @@ -454,7 +431,7 @@ public static function dump($data = null) $output .= call_user_func(array($decorator, 'decorateTrace'), $trace); } else { $data = func_num_args() === 0 - ? array("[[no arguments passed]]") + ? array('[[no arguments passed]]') : func_get_args(); foreach ($data as $k => $argument) { @@ -474,22 +451,25 @@ public static function dump($data = null) self::enabled($enabledMode); $decorator::$firstRun = false; - if (! empty($modifiers) && strpos($modifiers, '~') !== false) { - $decorator::$firstRun = $firstRunOldValue; - } else { - self::enabled($enabledMode); - } - if (! empty($modifiers) && strpos($modifiers, '!') !== false) { - self::$expandedByDefault = $expandedByDefaultOldValue; - } - if (! empty($modifiers) && strpos($modifiers, '+') !== false) { - self::$maxLevels = $maxLevelsOldValue; - } - if (! empty($modifiers) && strpos($modifiers, '@') !== false) { - self::$returnOutput = $returnOldValue; - $decorator::$firstRun = $firstRunOldValue; + if (! empty($modifiers)) { + if (strpos($modifiers, '~') !== false) { + $decorator::$firstRun = $firstRunOldValue; + } - return $output; + if (strpos($modifiers, '!') !== false) { + self::$expandedByDefault = $expandedByDefaultOldValue; + } + + if (strpos($modifiers, '+') !== false) { + self::$maxLevels = $maxLevelsOldValue; + } + + if (strpos($modifiers, '@') !== false) { + self::$returnOutput = $returnOldValue; + $decorator::$firstRun = $firstRunOldValue; + + return $output; + } } if (self::$returnOutput) { @@ -517,11 +497,10 @@ public static function dump($data = null) * * @param string $file full path to file * @param int $lineNumber the line to display - * @param int $padding surrounding lines to show besides the main one * * @return bool|string */ - private static function _showSource($file, $lineNumber, $padding = 7) + private static function _showSource($file, $lineNumber) { if (! $file || ! is_readable($file)) { // continuing will cause errors @@ -534,8 +513,8 @@ private static function _showSource($file, $lineNumber, $padding = 7) // Set the reading range $range = array( - 'start' => $lineNumber - $padding, - 'end' => $lineNumber + $padding, + 'start' => $lineNumber - 7, + 'end' => $lineNumber + 7, ); // set the zero-padding amount for line numbers @@ -627,7 +606,7 @@ private static function _getCalleeInfo($trace) // get the position of the last call to the function preg_match_all( " - [ + / # beginning of statement [\x07{(] @@ -652,7 +631,7 @@ private static function _getCalleeInfo($trace) # find the character where Sage's opening bracket resides (group 3) (\\() - ]ix", + /ix", $source, $matches, PREG_OFFSET_CAPTURE @@ -950,20 +929,19 @@ private static function _init() // 4. Load default from Sage self::_initSetting( 'editor', - ini_get('xdebug.file_link_format') ? ini_get('xdebug.file_link_format') : 'phpstorm-remotecall' + ini_get('xdebug.file_link_format') ? ini_get('xdebug.file_link_format') : 'phpstorm-plugin' ); self::_initSetting('fileLinkServerPath', null); self::_initSetting('fileLinkLocalPath', null); self::_initSetting('displayCalledFrom', true); self::_initSetting('maxLevels', 7); self::_initSetting('theme', self::THEME_ORIGINAL); - self::_initSetting('appRootDirs', array($_SERVER['DOCUMENT_ROOT'] => 'ROOT')); self::_initSetting('expandedByDefault', false); self::_initSetting('cliDetection', true); self::_initSetting('cliColors', true); self::_initSetting('charEncodings', array( 'UTF-8', - 'Windows-1252', // Western; includes iso-8859-1, replace this with windows-1251 if you have + 'Windows-1252', // Western; includes iso-8859-1, replace this with windows-1251 if you have Russian code 'euc-jp', // Japanese ) ); diff --git a/composer.json b/composer.json index 6cf3c5c..a8b4032 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { "name": "php-sage/sage", "description": "☯ Insightful PHP debugging assistant.", - "keywords": ["sage", "php", "dumper", "debug", "dump", "var_dup", "debug_backtrace", "json_decode"], + "keywords": ["sage", "php", "dumper", "debug", "dump", "var_dump", "debug_backtrace", "json_decode"], "type": "library", "homepage": "https://github.com/php-sage/sage", "license": "MIT", diff --git a/decorators/SageDecoratorsRich.php b/decorators/SageDecoratorsRich.php index d42d52a..5dd5dfb 100644 --- a/decorators/SageDecoratorsRich.php +++ b/decorators/SageDecoratorsRich.php @@ -150,6 +150,7 @@ public static function decorateTrace($traceData) } $output .= ''; } + if (! empty($step['object'])) { $output .= '
  • ' . self::decorate($calleeDump) . '
  • '; } diff --git a/inc/SageHelper.php b/inc/SageHelper.php index 9d748b1..31d3a28 100644 --- a/inc/SageHelper.php +++ b/inc/SageHelper.php @@ -10,25 +10,26 @@ class SageHelper const MAX_STR_LENGTH = 80; public static $editors = array( - 'sublime' => 'subl://open?url=file://%f&line=%l', - 'textmate' => 'txmt://open?url=file://%f&line=%l', - 'emacs' => 'emacs://open?url=file://%f&line=%l', - 'macvim' => 'mvim://open/?url=file://%f&line=%l', - 'phpstorm' => 'phpstorm://open?file=%f&line=%l', - 'phpstorm-remotecall' => 'http://localhost:8091?message=%f:%l', - 'idea' => 'idea://open?file=%f&line=%l', - 'vscode' => 'vscode://file/%f:%l', - 'vscode-insiders' => 'vscode-insiders://file/%f:%l', - 'vscode-remote' => 'vscode://vscode-remote/%f:%l', - 'vscode-insiders-remote' => 'vscode-insiders://vscode-remote/%f:%l', - 'vscodium' => 'vscodium://file/%f:%l', - 'atom' => 'atom://core/open/file?filename=%f&line=%l', - 'nova' => 'nova://core/open/file?filename=%f&line=%l', - 'netbeans' => 'netbeans://open/?f=%f:%l', - 'xdebug' => 'xdebug://%f@%l' + 'sublime' => 'subl://open?url=file://%file&line=%line', + 'textmate' => 'txmt://open?url=file://%file&line=%line', + 'emacs' => 'emacs://open?url=file://%file&line=%line', + 'macvim' => 'mvim://open/?url=file://%file&line=%line', + 'phpstorm' => 'phpstorm://open?file=%file&line=%line', + 'phpstorm-plugin' => 'http://localhost:63342/api/file/%file:%line', + 'idea' => 'idea://open?file=%file&line=%line', + 'vscode' => 'vscode://file/%file:%line', + 'vscode-insiders' => 'vscode-insiders://file/%file:%line', + 'vscode-remote' => 'vscode://vscode-remote/%file:%line', + 'vscode-insiders-remote' => 'vscode-insiders://vscode-remote/%file:%line', + 'vscodium' => 'vscodium://file/%file:%line', + 'atom' => 'atom://core/open/file?filename=%file&line=%line', + 'nova' => 'nova://core/open/file?filename=%file&line=%line', + 'netbeans' => 'netbeans://open/?f=%file:%line', + 'xdebug' => 'xdebug://%file@%line' ); private static $aliasesRaw; + private static $projectRootDir; public static function php53orLater() { @@ -61,40 +62,28 @@ public static function isHtmlMode() */ public static function shortenPath($file) { - $file = str_replace('\\', '/', $file); - $shortenedName = $file; - $replaced = false; - if (is_array(Sage::$appRootDirs)) { - foreach (Sage::$appRootDirs as $path => $replaceString) { - if (empty($path)) { - continue; - } + $file = str_replace('\\', '/', $file); - $path = str_replace('\\', '/', $path); + // Find common path with Sage dir + if (! isset(self::$projectRootDir)) { + self::$projectRootDir = ''; - if (strpos($file, $path) === 0) { - $shortenedName = $replaceString . substr($file, strlen($path)); - $replaced = true; + $sagePathParts = explode('/', str_replace('\\', '/', SAGE_DIR)); + $filePathParts = explode('/', $file); + foreach ($filePathParts as $i => $filePart) { + if (! isset($sagePathParts[$i]) || $sagePathParts[$i] !== $filePart) { break; } - } - } - // fallback to find common path with Sage dir - if (! $replaced) { - $pathParts = explode('/', str_replace('\\', '/', SAGE_DIR)); - $fileParts = explode('/', $file); - $i = 0; - foreach ($fileParts as $i => $filePart) { - if (! isset($pathParts[$i]) || $pathParts[$i] !== $filePart) { - break; - } + self::$projectRootDir .= $filePart . '/'; } + } - $shortenedName = ($i ? '.../' : '') . implode('/', array_slice($fileParts, $i)); + if (strpos($file, self::$projectRootDir) === 0) { + return substr($file, strlen(self::$projectRootDir)); } - return $shortenedName; + return $file; } public static function buildAliases() @@ -208,11 +197,15 @@ public static function strlen($string, $encoding = null) public static function ideLink($file, $line, $linkText = null) { $enabledMode = Sage::enabled(); + $file = self::shortenPath($file); + if (! self::isHtmlMode()) { return $file . ':' . $line; } - $linkText = $linkText ? $linkText : self::shortenPath($file) . ':' . $line; + $linkText = $linkText + ? $linkText + : $file . ':' . $line; $linkText = self::esc($linkText); if (! Sage::$editor) { @@ -220,7 +213,7 @@ public static function ideLink($file, $line, $linkText = null) } $ideLink = str_replace( - array('%f', '%l', Sage::$fileLinkServerPath), + array('%file', '%line', Sage::$fileLinkServerPath), array($file, $line, Sage::$fileLinkLocalPath), isset(self::$editors[Sage::$editor]) ? self::$editors[Sage::$editor] : Sage::$editor ); diff --git a/inc/shorthands.inc.php b/inc/shorthands.inc.php index 991b4f9..48c7220 100644 --- a/inc/shorthands.inc.php +++ b/inc/shorthands.inc.php @@ -33,6 +33,7 @@ function sage() Sage::$aliases[] = __FUNCTION__; $params = func_get_args(); + return call_user_func_array(['Sage', 'dump'], $params); } } @@ -52,6 +53,7 @@ function s() Sage::$aliases[] = __FUNCTION__; $params = func_get_args(); + return call_user_func_array(array('Sage', 'dump'), $params); } } diff --git a/parsers/SageParsersClassStatics.php b/parsers/SageParsersClassStatics.php index ee12b8f..b099cab 100644 --- a/parsers/SageParsersClassStatics.php +++ b/parsers/SageParsersClassStatics.php @@ -21,12 +21,12 @@ protected static function parse(&$variable, $varData) foreach ($reflection->getProperties(ReflectionProperty::IS_STATIC) as $property) { if ($property->isProtected()) { $property->setAccessible(true); - $access = "protected"; + $access = 'protected'; } elseif ($property->isPrivate()) { $property->setAccessible(true); - $access = "private"; + $access = 'private'; } else { - $access = "public"; + $access = 'public'; } if (method_exists($property, 'isInitialized') && ! $property->isInitialized($variable)) { diff --git a/parsers/SageParsersColor.php b/parsers/SageParsersColor.php index 9262bef..16f9a85 100644 --- a/parsers/SageParsersColor.php +++ b/parsers/SageParsersColor.php @@ -267,7 +267,7 @@ private static function _convert($color) case 'hex': $variant = '#'; foreach ($decimalColors as &$color) { - $variant .= str_pad(dechex($color), 2, "0", STR_PAD_LEFT); + $variant .= str_pad(dechex($color), 2, '0', STR_PAD_LEFT); } $variant .= isset($alpha) ? ' (alpha omitted)' : ''; break; @@ -279,7 +279,7 @@ private static function _convert($color) } else { $a = ''; } - $variant = "rgb{$a}( " . implode(', ', $rgb) . " )"; + $variant = "rgb{$a}( " . implode(', ', $rgb) . ' )'; break; case 'hsl': $rgb = self::_RGBtoHSL($decimalColors); @@ -294,7 +294,7 @@ private static function _convert($color) $a = ''; } - $variant = "hsl{$a}( " . implode(', ', $rgb) . " )"; + $variant = "hsl{$a}( " . implode(', ', $rgb) . ' )'; break; case 'name': // [!] name in initial variants array must go after hex diff --git a/parsers/SageParsersMicrotime.php b/parsers/SageParsersMicrotime.php index 0a21d71..1d9fc05 100644 --- a/parsers/SageParsersMicrotime.php +++ b/parsers/SageParsersMicrotime.php @@ -15,7 +15,7 @@ protected static function parse(&$variable, $varData) return false; } - list($usec, $sec) = explode(" ", $variable); + list($usec, $sec) = explode(' ', $variable); $time = (float)$usec + (float)$sec; diff --git a/playground.php b/playground.php index b6de367..0d7e8bd 100644 --- a/playground.php +++ b/playground.php @@ -8,37 +8,4 @@ require 'vendor/autoload.php'; -Sage::$returnOutput = true; -Sage::$expandedByDefault = true; - -echo sage( - SAGE_DIR, - SAGE_DIR . 'LICENCE', - 'non-existing', - new SplFileInfo('LICENCE'), - new SplFileInfo('non-existing'), - new SplFileInfo(''), - new SplFileInfo(SAGE_DIR . '.github/img/trace.png') - ) - . Sage::enabled(Sage::MODE_PLAIN) - . sage( - SAGE_DIR, - SAGE_DIR . 'LICENCE', - 'non-existing', - new SplFileInfo('LICENCE'), - new SplFileInfo('non-existing'), - new SplFileInfo(''), - new SplFileInfo(SAGE_DIR . '.github/img/trace.png') - ); - -function getStructure() -{ - return new class('test') { - public function __construct( - public readonly string $deliveryDate, - ) { - } - - }; -} - +require SAGE_DIR . '.github/examples/overview.php'; diff --git a/resources/compiled/aante-light.css b/resources/compiled/aante-light.css index 75ba1f0..16c0bad 100644 --- a/resources/compiled/aante-light.css +++ b/resources/compiled/aante-light.css @@ -1 +1 @@ -._sage::selection{background:#aaa;color:#1d1e1e}._sage,._sage::before,._sage::after,._sage *,._sage *::before,._sage *::after{box-sizing:border-box;border-radius:0;color:#1d1e1e;float:none !important;font-family:Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif;line-height:15px;margin:0;padding:0;text-align:left}._sage{font-size:13px;margin:8px 0;overflow-x:auto;white-space:nowrap}._sage dt{background:#f8f8f8;border:1px solid #d7d7d7;color:#1d1e1e;display:block;font-weight:bold;list-style:none outside none;overflow:auto;padding:4px}._sage dt:hover{border-color:#aaa}._sage dt>var{margin-right:5px}._sage dt dt>var{margin-right:0}._sage dt u{color:#ff8c00}._sage>dl dl{padding:0 0 0 12px}._sage nav{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAA8CAYAAAC5OOBJAAAAvklEQVR42mNgGMFAS0uLLSQk5HxoaOh/XDg4OLgdpwEBAQEGQAN+YtMIFH/i4ODAg9cFQNMbsWkOCgrKJMv5ID5Qipko/6M7PzAw0ImkAIQ5H0hvISv0gZpP+fn5qZAVfcBAkmEYBaNZcjRLjmbJUUCvqAIlDlAiASUWkjWDkiU0eTaSpBGUEZBy1E9QRiFWLzO2LEmU80GZHkcRhN/5oGIGVNzgKIbwOx9UwOErAIl2/igYzZKjWXI0S9IHAAASJijo0Ypj8AAAAABJRU5ErkJggg==") no-repeat scroll 0 0 rgba(0,0,0,0);cursor:pointer;display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle}._sage dt._sage-parent:hover nav{background-position:0 -15px}._sage dt._sage-parent._sage-show:hover>nav{background-position:0 -45px}._sage dt._sage-show>nav{background-position:0 -30px}._sage dt._sage-parent+dd{display:none;border-left:1px dashed #d7d7d7}._sage dt._sage-parent._sage-show+dd{display:block}._sage var,._sage var a{color:#06f;font-style:normal}._sage dt:hover var,._sage dt:hover var a{color:red}._sage dfn{font-style:normal;font-family:monospace;color:#1d1e1e}._sage pre{color:#1d1e1e;margin:0 0 0 12px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #d7d7d7;background:#f8f8f8;display:block;word-break:normal}._sage ._sage-popup-trigger{float:right !important;cursor:pointer;color:#aaa}._sage ._sage-popup-trigger:hover{color:#d7d7d7}._sage dt._sage-parent>._sage-popup-trigger{font-size:13px}._sage footer{padding:0 3px 3px;font-size:9px}._sage footer>._sage-popup-trigger{font-size:12px}._sage footer nav{background-size:10px;height:10px;width:10px}._sage footer nav:hover{background-position:0 -10px}._sage footer>ol{display:none;margin-left:32px}._sage footer._sage-show>ol{display:block}._sage footer._sage-show nav{background-position:0 -20px}._sage footer._sage-show nav:hover{background-position:0 -30px}._sage a{color:#1d1e1e;text-shadow:none}._sage a:hover{color:#1d1e1e;border-bottom:1px dotted #1d1e1e}._sage ul{list-style:none;padding-left:12px}._sage ul:not(._sage-tabs) li{border-left:1px dashed #d7d7d7}._sage ul:not(._sage-tabs) li>dl{border-left:none}._sage ul._sage-tabs{margin:0 0 0 12px;padding-left:0;background:#f8f8f8;border:1px solid #d7d7d7;border-top:0}._sage ul._sage-tabs li{background:#f8f8f8;border:1px solid #d7d7d7;cursor:pointer;display:inline-block;height:24px;margin:2px;padding:0 12px;vertical-align:top}._sage ul._sage-tabs li:hover,._sage ul._sage-tabs li._sage-active-tab:hover{border-color:#aaa;color:red}._sage ul._sage-tabs li._sage-active-tab{background:#f8f8f8;border-top:0;margin-top:-1px;height:27px;line-height:24px}._sage ul._sage-tabs li:not(._sage-active-tab){line-height:20px}._sage ul._sage-tabs li+li{margin-left:0}._sage ul:not(._sage-tabs)>li:not(:first-child){display:none}._sage dt:hover+dd>ul>li._sage-active-tab{border-color:#aaa;color:red}._sage-report{border-collapse:collapse;empty-cells:show;border-spacing:0}._sage-report *{font-size:12px}._sage-report dt{background:none;padding:2px}._sage-report dt ._sage-parent{min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._sage-report td,._sage-report th{border:1px solid #d7d7d7;padding:2px;vertical-align:center}._sage-report th{cursor:alias}._sage-report td:first-child,._sage-report th{font-weight:bold;background:#f8f8f8;color:#1d1e1e}._sage-report td{background:#f8f8f8;white-space:pre}._sage-report td>dl{padding:0}._sage-report pre{border-top:0;border-right:0}._sage-report th:first-child{background:none;border:0}._sage-report td._sage-empty{background:#d33682 !important}._sage-report tr:hover>td{box-shadow:0 0 1px 0 #aaa inset}._sage-report tr:hover var{color:red}._sage-report ul._sage-tabs li._sage-active-tab{height:20px;line-height:17px}._sage-trace ._sage-source{line-height:14px}._sage-trace ._sage-source span{padding-right:1px;border-right:3px inset #06f}._sage-trace ._sage-source ._sage-highlight{background:#f8f8f8}._sage-trace ._sage-parent>b{min-width:18px;display:inline-block;text-align:right;color:#1d1e1e}._sage-trace ._sage-parent>var>a{color:#06f}._sage-focused{box-shadow:0 0 3px 2px red}._sage-microtime,._sage-color-preview{box-shadow:0 0 2px 0 #b6cedb;height:16px;text-align:center;text-shadow:-1px 0 #839496,0 1px #839496,1px 0 #839496,0 -1px #839496;width:230px;color:#fdf6e3}._sage footer li{color:#ddd}._sage dt{font-weight:normal}._sage dt._sage-parent{margin-top:4px}._sage>dl{background:linear-gradient(90deg, rgba(255, 255, 255, 0) 0, #fff 15px)}._sage dl dl{margin-top:4px;padding-left:25px;border-left:none}._sage>dl>dt{background:#f8f8f8}._sage ul{margin:0;padding-left:0}._sage ul:not(._sage-tabs)>li{border-left:0}._sage ul._sage-tabs{background:#f8f8f8;border:1px solid #d7d7d7;border-width:0 1px 1px 1px;padding:4px 0 0 12px;margin-left:-1px;margin-top:-1px}._sage ul._sage-tabs li,._sage ul._sage-tabs li+li{margin:0 0 0 4px}._sage ul._sage-tabs li{border-bottom-width:0;height:25px}._sage ul._sage-tabs li:first-child{margin-left:0}._sage ul._sage-tabs li._sage-active-tab{border-top:1px solid #d7d7d7;background:#fff;font-weight:bold;padding-top:0;border-bottom:1px solid #fff !important;margin-bottom:-1px}._sage ul._sage-tabs li._sage-active-tab:hover{border-bottom:1px solid #fff}._sage ul>li>pre{border:1px solid #d7d7d7}._sage dt:hover+dd>ul{border-color:#aaa}._sage pre{background:#fff;margin-top:4px;margin-left:25px}._sage ._sage-popup-trigger:hover{color:red}._sage ._sage-source ._sage-highlight{background:#cfc}._sage-report td{background:#fff}._sage-report td>dl{padding:0;margin:0}._sage-report td>dl>dt._sage-parent{margin:0}._sage-report td:first-child,._sage-report td,._sage-report th{padding:2px 4px}._sage-report td._sage-empty{background:#d7d7d7 !important}._sage-report dd,._sage-report dt{background:#fff}._sage-report tr:hover>td{box-shadow:none;background:#cfc} +._sage::selection{background:#aaa;color:#1d1e1e}._sage,._sage::before,._sage::after,._sage *,._sage *::before,._sage *::after{box-sizing:border-box;border-radius:0;color:#1d1e1e;float:none !important;font-family:ui-monospace,"Cascadia Code","Source Code Pro",Menlo,Consolas,"DejaVu Sans Mono",monospace;line-height:15px;margin:0;padding:0;text-align:left}._sage{font-size:13px;margin:8px 0;overflow-x:auto;white-space:nowrap}._sage dt{background:#f8f8f8;border:1px solid #d7d7d7;color:#1d1e1e;display:block;font-weight:bold;list-style:none outside none;overflow:auto;padding:4px}._sage dt:hover{border-color:#aaa}._sage dt>var{margin-right:5px}._sage dt dt>var{margin-right:0}._sage dt u{color:#ff8c00}._sage>dl dl{padding:0 0 0 12px}._sage nav{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAA8CAYAAAC5OOBJAAAAvklEQVR42mNgGMFAS0uLLSQk5HxoaOh/XDg4OLgdpwEBAQEGQAN+YtMIFH/i4ODAg9cFQNMbsWkOCgrKJMv5ID5Qipko/6M7PzAw0ImkAIQ5H0hvISv0gZpP+fn5qZAVfcBAkmEYBaNZcjRLjmbJUUCvqAIlDlAiASUWkjWDkiU0eTaSpBGUEZBy1E9QRiFWLzO2LEmU80GZHkcRhN/5oGIGVNzgKIbwOx9UwOErAIl2/igYzZKjWXI0S9IHAAASJijo0Ypj8AAAAABJRU5ErkJggg==") no-repeat scroll 0 0 rgba(0,0,0,0);cursor:pointer;display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle}._sage dt._sage-parent:hover nav{background-position:0 -15px}._sage dt._sage-parent._sage-show:hover>nav{background-position:0 -45px}._sage dt._sage-show>nav{background-position:0 -30px}._sage dt._sage-parent+dd{display:none;border-left:1px dashed #d7d7d7}._sage dt._sage-parent._sage-show+dd{display:block}._sage var,._sage var a{color:#06f;font-style:normal}._sage dt:hover var,._sage dt:hover var a{color:red}._sage dfn{font-style:normal;font-family:monospace;color:#1d1e1e}._sage pre{color:#1d1e1e;margin:0 0 0 12px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #d7d7d7;background:#f8f8f8;display:block;word-break:normal}._sage ._sage-popup-trigger{float:right !important;cursor:pointer;color:#aaa}._sage ._sage-popup-trigger:hover{color:#d7d7d7}._sage dt._sage-parent>._sage-popup-trigger{font-size:13px}._sage footer{padding:0 3px 3px;font-size:9px}._sage footer>._sage-popup-trigger{font-size:12px}._sage footer nav{background-size:10px;height:10px;width:10px}._sage footer nav:hover{background-position:0 -10px}._sage footer>ol{display:none;margin-left:32px}._sage footer._sage-show>ol{display:block}._sage footer._sage-show nav{background-position:0 -20px}._sage footer._sage-show nav:hover{background-position:0 -30px}._sage a{color:#1d1e1e;text-shadow:none}._sage a:hover{color:#1d1e1e;border-bottom:1px dotted #1d1e1e}._sage ul{list-style:none;padding-left:12px}._sage ul:not(._sage-tabs) li{border-left:1px dashed #d7d7d7}._sage ul:not(._sage-tabs) li>dl{border-left:none}._sage ul._sage-tabs{margin:0 0 0 12px;padding-left:0;background:#f8f8f8;border:1px solid #d7d7d7;border-top:0}._sage ul._sage-tabs li{background:#f8f8f8;border:1px solid #d7d7d7;cursor:pointer;display:inline-block;height:24px;margin:2px;padding:0 12px;vertical-align:top}._sage ul._sage-tabs li:hover,._sage ul._sage-tabs li._sage-active-tab:hover{border-color:#aaa;color:red}._sage ul._sage-tabs li._sage-active-tab{background:#f8f8f8;border-top:0;margin-top:-1px;height:27px;line-height:24px}._sage ul._sage-tabs li:not(._sage-active-tab){line-height:20px}._sage ul._sage-tabs li+li{margin-left:0}._sage ul:not(._sage-tabs)>li:not(:first-child){display:none}._sage dt:hover+dd>ul>li._sage-active-tab{border-color:#aaa;color:red}._sage-report{border-collapse:collapse;empty-cells:show;border-spacing:0}._sage-report *{font-size:12px}._sage-report dt{background:none;padding:2px}._sage-report dt ._sage-parent{min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._sage-report td,._sage-report th{border:1px solid #d7d7d7;padding:2px;vertical-align:center}._sage-report th{cursor:alias}._sage-report td:first-child,._sage-report th{font-weight:bold;background:#f8f8f8;color:#1d1e1e}._sage-report td{background:#f8f8f8;white-space:pre}._sage-report td>dl{padding:0}._sage-report pre{border-top:0;border-right:0}._sage-report th:first-child{background:none;border:0}._sage-report td._sage-empty{background:#d33682 !important}._sage-report tr:hover>td{box-shadow:0 0 1px 0 #aaa inset}._sage-report tr:hover var{color:red}._sage-report ul._sage-tabs li._sage-active-tab{height:20px;line-height:17px}._sage-trace ._sage-source{line-height:14px}._sage-trace ._sage-source span{padding-right:1px;border-right:3px inset #06f}._sage-trace ._sage-source ._sage-highlight{background:#f8f8f8}._sage-trace ._sage-parent>b{min-width:18px;display:inline-block;text-align:right;color:#1d1e1e}._sage-trace ._sage-parent>var>a{color:#06f}._sage-focused{box-shadow:0 0 3px 2px red}._sage-microtime,._sage-color-preview{box-shadow:0 0 2px 0 #b6cedb;height:16px;text-align:center;text-shadow:-1px 0 #839496,0 1px #839496,1px 0 #839496,0 -1px #839496;width:230px;color:#fdf6e3}._sage footer li{color:#ddd}._sage dt{font-weight:normal}._sage dt._sage-parent{margin-top:4px}._sage>dl{background:linear-gradient(90deg, rgba(255, 255, 255, 0) 0, #fff 15px)}._sage dl dl{margin-top:4px;padding-left:25px;border-left:none}._sage>dl>dt{background:#f8f8f8}._sage ul{margin:0;padding-left:0}._sage ul:not(._sage-tabs)>li{border-left:0}._sage ul._sage-tabs{background:#f8f8f8;border:1px solid #d7d7d7;border-width:0 1px 1px 1px;padding:4px 0 0 12px;margin-left:-1px;margin-top:-1px}._sage ul._sage-tabs li,._sage ul._sage-tabs li+li{margin:0 0 0 4px}._sage ul._sage-tabs li{border-bottom-width:0;height:25px}._sage ul._sage-tabs li:first-child{margin-left:0}._sage ul._sage-tabs li._sage-active-tab{border-top:1px solid #d7d7d7;background:#fff;font-weight:bold;padding-top:0;border-bottom:1px solid #fff !important;margin-bottom:-1px}._sage ul._sage-tabs li._sage-active-tab:hover{border-bottom:1px solid #fff}._sage ul>li>pre{border:1px solid #d7d7d7}._sage dt:hover+dd>ul{border-color:#aaa}._sage pre{background:#fff;margin-top:4px;margin-left:25px}._sage ._sage-popup-trigger:hover{color:red}._sage ._sage-source ._sage-highlight{background:#cfc}._sage-report td{background:#fff}._sage-report td>dl{padding:0;margin:0}._sage-report td>dl>dt._sage-parent{margin:0}._sage-report td:first-child,._sage-report td,._sage-report th{padding:2px 4px}._sage-report td._sage-empty{background:#d7d7d7 !important}._sage-report dd,._sage-report dt{background:#fff}._sage-report tr:hover>td{box-shadow:none;background:#cfc} diff --git a/resources/compiled/original.css b/resources/compiled/original.css index 382e869..81df43b 100644 --- a/resources/compiled/original.css +++ b/resources/compiled/original.css @@ -1 +1 @@ -._sage::selection{background:#0092db;color:#1d1e1e}._sage,._sage::before,._sage::after,._sage *,._sage *::before,._sage *::after{box-sizing:border-box;border-radius:0;color:#1d1e1e;float:none !important;font-family:Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif;line-height:15px;margin:0;padding:0;text-align:left}._sage{font-size:13px;margin:8px 0;overflow-x:auto;white-space:nowrap}._sage dt{background:#e0eaef;border:1px solid #b6cedb;color:#1d1e1e;display:block;font-weight:bold;list-style:none outside none;overflow:auto;padding:4px}._sage dt:hover{border-color:#0092db}._sage dt>var{margin-right:5px}._sage dt dt>var{margin-right:0}._sage dt u{color:#ff8c00}._sage>dl dl{padding:0 0 0 12px}._sage nav{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAA8CAMAAACO5hB7AAAACVBMVEX///82b4tctzBls0NMAAAAQklEQVR42rWRIQ4AAAgCwf8/2qgER2BeuwJsgAqIzekMfMryPL9XQSkobE6vwKcsz/N7FfPvh09lnPf/b+7673+f0uHuAZ/EdkNQAAAAAElFTkSuQmCC") no-repeat scroll 0 0 rgba(0,0,0,0);cursor:pointer;display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle}._sage dt._sage-parent:hover nav{background-position:0 -15px}._sage dt._sage-parent._sage-show:hover>nav{background-position:0 -45px}._sage dt._sage-show>nav{background-position:0 -30px}._sage dt._sage-parent+dd{display:none;border-left:1px dashed #b6cedb}._sage dt._sage-parent._sage-show+dd{display:block}._sage var,._sage var a{color:#0092db;font-style:normal}._sage dt:hover var,._sage dt:hover var a{color:#5cb730}._sage dfn{font-style:normal;font-family:monospace;color:#1d1e1e}._sage pre{color:#1d1e1e;margin:0 0 0 12px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #b6cedb;background:#e0eaef;display:block;word-break:normal}._sage ._sage-popup-trigger{float:right !important;cursor:pointer;color:#0092db}._sage ._sage-popup-trigger:hover{color:#b6cedb}._sage dt._sage-parent>._sage-popup-trigger{font-size:13px}._sage footer{padding:0 3px 3px;font-size:9px}._sage footer>._sage-popup-trigger{font-size:12px}._sage footer nav{background-size:10px;height:10px;width:10px}._sage footer nav:hover{background-position:0 -10px}._sage footer>ol{display:none;margin-left:32px}._sage footer._sage-show>ol{display:block}._sage footer._sage-show nav{background-position:0 -20px}._sage footer._sage-show nav:hover{background-position:0 -30px}._sage a{color:#1d1e1e;text-shadow:none}._sage a:hover{color:#1d1e1e;border-bottom:1px dotted #1d1e1e}._sage ul{list-style:none;padding-left:12px}._sage ul:not(._sage-tabs) li{border-left:1px dashed #b6cedb}._sage ul:not(._sage-tabs) li>dl{border-left:none}._sage ul._sage-tabs{margin:0 0 0 12px;padding-left:0;background:#e0eaef;border:1px solid #b6cedb;border-top:0}._sage ul._sage-tabs li{background:#c1d4df;border:1px solid #b6cedb;cursor:pointer;display:inline-block;height:24px;margin:2px;padding:0 12px;vertical-align:top}._sage ul._sage-tabs li:hover,._sage ul._sage-tabs li._sage-active-tab:hover{border-color:#0092db;color:#5cb730}._sage ul._sage-tabs li._sage-active-tab{background:#e0eaef;border-top:0;margin-top:-1px;height:27px;line-height:24px}._sage ul._sage-tabs li:not(._sage-active-tab){line-height:20px}._sage ul._sage-tabs li+li{margin-left:0}._sage ul:not(._sage-tabs)>li:not(:first-child){display:none}._sage dt:hover+dd>ul>li._sage-active-tab{border-color:#0092db;color:#5cb730}._sage-report{border-collapse:collapse;empty-cells:show;border-spacing:0}._sage-report *{font-size:12px}._sage-report dt{background:none;padding:2px}._sage-report dt ._sage-parent{min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._sage-report td,._sage-report th{border:1px solid #b6cedb;padding:2px;vertical-align:center}._sage-report th{cursor:alias}._sage-report td:first-child,._sage-report th{font-weight:bold;background:#c1d4df;color:#1d1e1e}._sage-report td{background:#e0eaef;white-space:pre}._sage-report td>dl{padding:0}._sage-report pre{border-top:0;border-right:0}._sage-report th:first-child{background:none;border:0}._sage-report td._sage-empty{background:#d33682 !important}._sage-report tr:hover>td{box-shadow:0 0 1px 0 #0092db inset}._sage-report tr:hover var{color:#5cb730}._sage-report ul._sage-tabs li._sage-active-tab{height:20px;line-height:17px}._sage-trace ._sage-source{line-height:14px}._sage-trace ._sage-source span{padding-right:1px;border-right:3px inset #0092db}._sage-trace ._sage-source ._sage-highlight{background:#c1d4df}._sage-trace ._sage-parent>b{min-width:18px;display:inline-block;text-align:right;color:#1d1e1e}._sage-trace ._sage-parent>var>a{color:#0092db}._sage-focused{box-shadow:0 0 3px 2px #5cb730}._sage-microtime,._sage-color-preview{box-shadow:0 0 2px 0 #b6cedb;height:16px;text-align:center;text-shadow:-1px 0 #839496,0 1px #839496,1px 0 #839496,0 -1px #839496;width:230px;color:#fdf6e3}._sage footer li{color:#ddd}._sage>dl>dt{background:linear-gradient(to bottom, #e3ecf0 0, #c0d4df 100%)}._sage ul._sage-tabs{background:linear-gradient(to bottom, #9dbed0 0px, #b2ccda 100%)}._sage>dl:not(._sage-trace)>dd>ul._sage-tabs li{background:#e0eaef}._sage>dl:not(._sage-trace)>dd>ul._sage-tabs li._sage-active-tab{background:#c1d4df}._sage>dl._sage-trace>dt{background:linear-gradient(to bottom, #c0d4df 0px, #e3ecf0 100%)}._sage ._sage-source ._sage-highlight{background:#f0eb96} +._sage::selection{background:#0092db;color:#1d1e1e}._sage,._sage::before,._sage::after,._sage *,._sage *::before,._sage *::after{box-sizing:border-box;border-radius:0;color:#1d1e1e;float:none !important;font-family:ui-monospace,"Cascadia Code","Source Code Pro",Menlo,Consolas,"DejaVu Sans Mono",monospace;line-height:15px;margin:0;padding:0;text-align:left}._sage{font-size:13px;margin:8px 0;overflow-x:auto;white-space:nowrap}._sage dt{background:#e0eaef;border:1px solid #b6cedb;color:#1d1e1e;display:block;font-weight:bold;list-style:none outside none;overflow:auto;padding:4px}._sage dt:hover{border-color:#0092db}._sage dt>var{margin-right:5px}._sage dt dt>var{margin-right:0}._sage dt u{color:#ff8c00}._sage>dl dl{padding:0 0 0 12px}._sage nav{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAA8CAMAAACO5hB7AAAACVBMVEX///82b4tctzBls0NMAAAAQklEQVR42rWRIQ4AAAgCwf8/2qgER2BeuwJsgAqIzekMfMryPL9XQSkobE6vwKcsz/N7FfPvh09lnPf/b+7673+f0uHuAZ/EdkNQAAAAAElFTkSuQmCC") no-repeat scroll 0 0 rgba(0,0,0,0);cursor:pointer;display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle}._sage dt._sage-parent:hover nav{background-position:0 -15px}._sage dt._sage-parent._sage-show:hover>nav{background-position:0 -45px}._sage dt._sage-show>nav{background-position:0 -30px}._sage dt._sage-parent+dd{display:none;border-left:1px dashed #b6cedb}._sage dt._sage-parent._sage-show+dd{display:block}._sage var,._sage var a{color:#0092db;font-style:normal}._sage dt:hover var,._sage dt:hover var a{color:#5cb730}._sage dfn{font-style:normal;font-family:monospace;color:#1d1e1e}._sage pre{color:#1d1e1e;margin:0 0 0 12px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #b6cedb;background:#e0eaef;display:block;word-break:normal}._sage ._sage-popup-trigger{float:right !important;cursor:pointer;color:#0092db}._sage ._sage-popup-trigger:hover{color:#b6cedb}._sage dt._sage-parent>._sage-popup-trigger{font-size:13px}._sage footer{padding:0 3px 3px;font-size:9px}._sage footer>._sage-popup-trigger{font-size:12px}._sage footer nav{background-size:10px;height:10px;width:10px}._sage footer nav:hover{background-position:0 -10px}._sage footer>ol{display:none;margin-left:32px}._sage footer._sage-show>ol{display:block}._sage footer._sage-show nav{background-position:0 -20px}._sage footer._sage-show nav:hover{background-position:0 -30px}._sage a{color:#1d1e1e;text-shadow:none}._sage a:hover{color:#1d1e1e;border-bottom:1px dotted #1d1e1e}._sage ul{list-style:none;padding-left:12px}._sage ul:not(._sage-tabs) li{border-left:1px dashed #b6cedb}._sage ul:not(._sage-tabs) li>dl{border-left:none}._sage ul._sage-tabs{margin:0 0 0 12px;padding-left:0;background:#e0eaef;border:1px solid #b6cedb;border-top:0}._sage ul._sage-tabs li{background:#c1d4df;border:1px solid #b6cedb;cursor:pointer;display:inline-block;height:24px;margin:2px;padding:0 12px;vertical-align:top}._sage ul._sage-tabs li:hover,._sage ul._sage-tabs li._sage-active-tab:hover{border-color:#0092db;color:#5cb730}._sage ul._sage-tabs li._sage-active-tab{background:#e0eaef;border-top:0;margin-top:-1px;height:27px;line-height:24px}._sage ul._sage-tabs li:not(._sage-active-tab){line-height:20px}._sage ul._sage-tabs li+li{margin-left:0}._sage ul:not(._sage-tabs)>li:not(:first-child){display:none}._sage dt:hover+dd>ul>li._sage-active-tab{border-color:#0092db;color:#5cb730}._sage-report{border-collapse:collapse;empty-cells:show;border-spacing:0}._sage-report *{font-size:12px}._sage-report dt{background:none;padding:2px}._sage-report dt ._sage-parent{min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._sage-report td,._sage-report th{border:1px solid #b6cedb;padding:2px;vertical-align:center}._sage-report th{cursor:alias}._sage-report td:first-child,._sage-report th{font-weight:bold;background:#c1d4df;color:#1d1e1e}._sage-report td{background:#e0eaef;white-space:pre}._sage-report td>dl{padding:0}._sage-report pre{border-top:0;border-right:0}._sage-report th:first-child{background:none;border:0}._sage-report td._sage-empty{background:#d33682 !important}._sage-report tr:hover>td{box-shadow:0 0 1px 0 #0092db inset}._sage-report tr:hover var{color:#5cb730}._sage-report ul._sage-tabs li._sage-active-tab{height:20px;line-height:17px}._sage-trace ._sage-source{line-height:14px}._sage-trace ._sage-source span{padding-right:1px;border-right:3px inset #0092db}._sage-trace ._sage-source ._sage-highlight{background:#c1d4df}._sage-trace ._sage-parent>b{min-width:18px;display:inline-block;text-align:right;color:#1d1e1e}._sage-trace ._sage-parent>var>a{color:#0092db}._sage-focused{box-shadow:0 0 3px 2px #5cb730}._sage-microtime,._sage-color-preview{box-shadow:0 0 2px 0 #b6cedb;height:16px;text-align:center;text-shadow:-1px 0 #839496,0 1px #839496,1px 0 #839496,0 -1px #839496;width:230px;color:#fdf6e3}._sage footer li{color:#ddd}._sage>dl>dt{background:linear-gradient(to bottom, #e3ecf0 0, #c0d4df 100%)}._sage ul._sage-tabs{background:linear-gradient(to bottom, #9dbed0 0px, #b2ccda 100%)}._sage>dl:not(._sage-trace)>dd>ul._sage-tabs li{background:#e0eaef}._sage>dl:not(._sage-trace)>dd>ul._sage-tabs li._sage-active-tab{background:#c1d4df}._sage>dl._sage-trace>dt{background:linear-gradient(to bottom, #c0d4df 0px, #e3ecf0 100%)}._sage ._sage-source ._sage-highlight{background:#f0eb96} diff --git a/resources/compiled/solarized-dark.css b/resources/compiled/solarized-dark.css index 2d00720..1ba220b 100644 --- a/resources/compiled/solarized-dark.css +++ b/resources/compiled/solarized-dark.css @@ -1 +1 @@ -._sage::selection{background:#268bd2;color:#839496}._sage,._sage::before,._sage::after,._sage *,._sage *::before,._sage *::after{box-sizing:border-box;border-radius:0;color:#839496;float:none !important;font-family:Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif;line-height:15px;margin:0;padding:0;text-align:left}._sage{font-size:13px;margin:8px 0;overflow-x:auto;white-space:nowrap}._sage dt{background:#002b36;border:1px solid #586e75;color:#839496;display:block;font-weight:bold;list-style:none outside none;overflow:auto;padding:4px}._sage dt:hover{border-color:#268bd2}._sage dt>var{margin-right:5px}._sage dt dt>var{margin-right:0}._sage dt u{color:#ff8c00}._sage>dl dl{padding:0 0 0 12px}._sage nav{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAA8CAMAAACO5hB7AAAA7VBMVEVYbnWToaH///9YbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnWToaFYbnVYbnWToaGToaFYbnWToaFYbnWToaFYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnWToaEeRtj1AAAATXRSTlMAAACLab0B7iP2R7CL9iPuaUewAb36F0/QnPoX0JxPYQaurepi6QV8FhV7MzFhM6586RYFMa3qYnsVBpNQ+ZGOGJ3PkM9QkZAY+Y6TnV7gnYsAAAEcSURBVHhebdHVbgMxEEBRu8sUZmqapBBoSuGUmWb+/3NayxtrLOe+Hck745XZgd6/eb3CVcKt7HmR+gKxlCGOETG5vFbOoahR6NxI5zHt6nuq+2dqnqfzzH3mfcz70vb8H6MJt5u6a96hS30E4PjEFgAEp2fKNojKUfVEOoS044ex7u3YPE/nmfvM+5j3pe17T9oe/77O41w+n4vnrbrwZxbTshVhvtx5Kb8vliRLRWmeSQSTjJq/El5x5fUXYmNN9hcQC5y4g/hGvVksNtT8451rns2IScb7mn567ll2GNpWr9YWfvQgzWsKs8HOA/m960g6rjTzA8HAV/NHwiOmPLwDKA/J/gggYsRVgFvqbr/fpWYv90zzZKKs9Qfx00Jx65oxLAAAAABJRU5ErkJggg==") no-repeat scroll 0 0 rgba(0,0,0,0);cursor:pointer;display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle}._sage dt._sage-parent:hover nav{background-position:0 -15px}._sage dt._sage-parent._sage-show:hover>nav{background-position:0 -45px}._sage dt._sage-show>nav{background-position:0 -30px}._sage dt._sage-parent+dd{display:none;border-left:1px dashed #586e75}._sage dt._sage-parent._sage-show+dd{display:block}._sage var,._sage var a{color:#268bd2;font-style:normal}._sage dt:hover var,._sage dt:hover var a{color:#2aa198}._sage dfn{font-style:normal;font-family:monospace;color:#93a1a1}._sage pre{color:#839496;margin:0 0 0 12px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #586e75;background:#002b36;display:block;word-break:normal}._sage ._sage-popup-trigger{float:right !important;cursor:pointer;color:#268bd2}._sage ._sage-popup-trigger:hover{color:#586e75}._sage dt._sage-parent>._sage-popup-trigger{font-size:13px}._sage footer{padding:0 3px 3px;font-size:9px}._sage footer>._sage-popup-trigger{font-size:12px}._sage footer nav{background-size:10px;height:10px;width:10px}._sage footer nav:hover{background-position:0 -10px}._sage footer>ol{display:none;margin-left:32px}._sage footer._sage-show>ol{display:block}._sage footer._sage-show nav{background-position:0 -20px}._sage footer._sage-show nav:hover{background-position:0 -30px}._sage a{color:#839496;text-shadow:none}._sage a:hover{color:#93a1a1;border-bottom:1px dotted #93a1a1}._sage ul{list-style:none;padding-left:12px}._sage ul:not(._sage-tabs) li{border-left:1px dashed #586e75}._sage ul:not(._sage-tabs) li>dl{border-left:none}._sage ul._sage-tabs{margin:0 0 0 12px;padding-left:0;background:#002b36;border:1px solid #586e75;border-top:0}._sage ul._sage-tabs li{background:#073642;border:1px solid #586e75;cursor:pointer;display:inline-block;height:24px;margin:2px;padding:0 12px;vertical-align:top}._sage ul._sage-tabs li:hover,._sage ul._sage-tabs li._sage-active-tab:hover{border-color:#268bd2;color:#2aa198}._sage ul._sage-tabs li._sage-active-tab{background:#002b36;border-top:0;margin-top:-1px;height:27px;line-height:24px}._sage ul._sage-tabs li:not(._sage-active-tab){line-height:20px}._sage ul._sage-tabs li+li{margin-left:0}._sage ul:not(._sage-tabs)>li:not(:first-child){display:none}._sage dt:hover+dd>ul>li._sage-active-tab{border-color:#268bd2;color:#2aa198}._sage-report{border-collapse:collapse;empty-cells:show;border-spacing:0}._sage-report *{font-size:12px}._sage-report dt{background:none;padding:2px}._sage-report dt ._sage-parent{min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._sage-report td,._sage-report th{border:1px solid #586e75;padding:2px;vertical-align:center}._sage-report th{cursor:alias}._sage-report td:first-child,._sage-report th{font-weight:bold;background:#073642;color:#93a1a1}._sage-report td{background:#002b36;white-space:pre}._sage-report td>dl{padding:0}._sage-report pre{border-top:0;border-right:0}._sage-report th:first-child{background:none;border:0}._sage-report td._sage-empty{background:#d33682 !important}._sage-report tr:hover>td{box-shadow:0 0 1px 0 #268bd2 inset}._sage-report tr:hover var{color:#2aa198}._sage-report ul._sage-tabs li._sage-active-tab{height:20px;line-height:17px}._sage-trace ._sage-source{line-height:14px}._sage-trace ._sage-source span{padding-right:1px;border-right:3px inset #268bd2}._sage-trace ._sage-source ._sage-highlight{background:#073642}._sage-trace ._sage-parent>b{min-width:18px;display:inline-block;text-align:right;color:#93a1a1}._sage-trace ._sage-parent>var>a{color:#268bd2}._sage-focused{box-shadow:0 0 3px 2px #859900 inset;border-radius:7px}._sage-microtime,._sage-color-preview{box-shadow:0 0 2px 0 #b6cedb;height:16px;text-align:center;text-shadow:-1px 0 #839496,0 1px #839496,1px 0 #839496,0 -1px #839496;width:230px;color:#fdf6e3}._sage footer li{color:#ddd}body{background:#073642;color:#fff}._sage{background:#073642;box-shadow:0 0 5px 3px #073642}._sage>dl>dt,._sage ul._sage-tabs{box-shadow:4px 0 2px -3px #268bd2 inset}._sage ul._sage-tabs li._sage-active-tab{padding-top:7px;height:34px} +._sage::selection{background:#268bd2;color:#839496}._sage,._sage::before,._sage::after,._sage *,._sage *::before,._sage *::after{box-sizing:border-box;border-radius:0;color:#839496;float:none !important;font-family:ui-monospace,"Cascadia Code","Source Code Pro",Menlo,Consolas,"DejaVu Sans Mono",monospace;line-height:15px;margin:0;padding:0;text-align:left}._sage{font-size:13px;margin:8px 0;overflow-x:auto;white-space:nowrap}._sage dt{background:#002b36;border:1px solid #586e75;color:#839496;display:block;font-weight:bold;list-style:none outside none;overflow:auto;padding:4px}._sage dt:hover{border-color:#268bd2}._sage dt>var{margin-right:5px}._sage dt dt>var{margin-right:0}._sage dt u{color:#ff8c00}._sage>dl dl{padding:0 0 0 12px}._sage nav{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAA8CAMAAACO5hB7AAAA7VBMVEVYbnWToaH///9YbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnWToaFYbnVYbnWToaGToaFYbnWToaFYbnWToaFYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnWToaEeRtj1AAAATXRSTlMAAACLab0B7iP2R7CL9iPuaUewAb36F0/QnPoX0JxPYQaurepi6QV8FhV7MzFhM6586RYFMa3qYnsVBpNQ+ZGOGJ3PkM9QkZAY+Y6TnV7gnYsAAAEcSURBVHhebdHVbgMxEEBRu8sUZmqapBBoSuGUmWb+/3NayxtrLOe+Hck745XZgd6/eb3CVcKt7HmR+gKxlCGOETG5vFbOoahR6NxI5zHt6nuq+2dqnqfzzH3mfcz70vb8H6MJt5u6a96hS30E4PjEFgAEp2fKNojKUfVEOoS044ex7u3YPE/nmfvM+5j3pe17T9oe/77O41w+n4vnrbrwZxbTshVhvtx5Kb8vliRLRWmeSQSTjJq/El5x5fUXYmNN9hcQC5y4g/hGvVksNtT8451rns2IScb7mn567ll2GNpWr9YWfvQgzWsKs8HOA/m960g6rjTzA8HAV/NHwiOmPLwDKA/J/gggYsRVgFvqbr/fpWYv90zzZKKs9Qfx00Jx65oxLAAAAABJRU5ErkJggg==") no-repeat scroll 0 0 rgba(0,0,0,0);cursor:pointer;display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle}._sage dt._sage-parent:hover nav{background-position:0 -15px}._sage dt._sage-parent._sage-show:hover>nav{background-position:0 -45px}._sage dt._sage-show>nav{background-position:0 -30px}._sage dt._sage-parent+dd{display:none;border-left:1px dashed #586e75}._sage dt._sage-parent._sage-show+dd{display:block}._sage var,._sage var a{color:#268bd2;font-style:normal}._sage dt:hover var,._sage dt:hover var a{color:#2aa198}._sage dfn{font-style:normal;font-family:monospace;color:#93a1a1}._sage pre{color:#839496;margin:0 0 0 12px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #586e75;background:#002b36;display:block;word-break:normal}._sage ._sage-popup-trigger{float:right !important;cursor:pointer;color:#268bd2}._sage ._sage-popup-trigger:hover{color:#586e75}._sage dt._sage-parent>._sage-popup-trigger{font-size:13px}._sage footer{padding:0 3px 3px;font-size:9px}._sage footer>._sage-popup-trigger{font-size:12px}._sage footer nav{background-size:10px;height:10px;width:10px}._sage footer nav:hover{background-position:0 -10px}._sage footer>ol{display:none;margin-left:32px}._sage footer._sage-show>ol{display:block}._sage footer._sage-show nav{background-position:0 -20px}._sage footer._sage-show nav:hover{background-position:0 -30px}._sage a{color:#839496;text-shadow:none}._sage a:hover{color:#93a1a1;border-bottom:1px dotted #93a1a1}._sage ul{list-style:none;padding-left:12px}._sage ul:not(._sage-tabs) li{border-left:1px dashed #586e75}._sage ul:not(._sage-tabs) li>dl{border-left:none}._sage ul._sage-tabs{margin:0 0 0 12px;padding-left:0;background:#002b36;border:1px solid #586e75;border-top:0}._sage ul._sage-tabs li{background:#073642;border:1px solid #586e75;cursor:pointer;display:inline-block;height:24px;margin:2px;padding:0 12px;vertical-align:top}._sage ul._sage-tabs li:hover,._sage ul._sage-tabs li._sage-active-tab:hover{border-color:#268bd2;color:#2aa198}._sage ul._sage-tabs li._sage-active-tab{background:#002b36;border-top:0;margin-top:-1px;height:27px;line-height:24px}._sage ul._sage-tabs li:not(._sage-active-tab){line-height:20px}._sage ul._sage-tabs li+li{margin-left:0}._sage ul:not(._sage-tabs)>li:not(:first-child){display:none}._sage dt:hover+dd>ul>li._sage-active-tab{border-color:#268bd2;color:#2aa198}._sage-report{border-collapse:collapse;empty-cells:show;border-spacing:0}._sage-report *{font-size:12px}._sage-report dt{background:none;padding:2px}._sage-report dt ._sage-parent{min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._sage-report td,._sage-report th{border:1px solid #586e75;padding:2px;vertical-align:center}._sage-report th{cursor:alias}._sage-report td:first-child,._sage-report th{font-weight:bold;background:#073642;color:#93a1a1}._sage-report td{background:#002b36;white-space:pre}._sage-report td>dl{padding:0}._sage-report pre{border-top:0;border-right:0}._sage-report th:first-child{background:none;border:0}._sage-report td._sage-empty{background:#d33682 !important}._sage-report tr:hover>td{box-shadow:0 0 1px 0 #268bd2 inset}._sage-report tr:hover var{color:#2aa198}._sage-report ul._sage-tabs li._sage-active-tab{height:20px;line-height:17px}._sage-trace ._sage-source{line-height:14px}._sage-trace ._sage-source span{padding-right:1px;border-right:3px inset #268bd2}._sage-trace ._sage-source ._sage-highlight{background:#073642}._sage-trace ._sage-parent>b{min-width:18px;display:inline-block;text-align:right;color:#93a1a1}._sage-trace ._sage-parent>var>a{color:#268bd2}._sage-focused{box-shadow:0 0 3px 2px #859900 inset;border-radius:7px}._sage-microtime,._sage-color-preview{box-shadow:0 0 2px 0 #b6cedb;height:16px;text-align:center;text-shadow:-1px 0 #839496,0 1px #839496,1px 0 #839496,0 -1px #839496;width:230px;color:#fdf6e3}._sage footer li{color:#ddd}body{background:#073642;color:#fff}._sage{background:#073642;box-shadow:0 0 5px 3px #073642}._sage>dl>dt,._sage ul._sage-tabs{box-shadow:4px 0 2px -3px #268bd2 inset}._sage ul._sage-tabs li._sage-active-tab{padding-top:7px;height:34px} diff --git a/resources/compiled/solarized.css b/resources/compiled/solarized.css index 02cd4e8..8fe00e0 100644 --- a/resources/compiled/solarized.css +++ b/resources/compiled/solarized.css @@ -1 +1 @@ -._sage::selection{background:#268bd2;color:#657b83}._sage,._sage::before,._sage::after,._sage *,._sage *::before,._sage *::after{box-sizing:border-box;border-radius:0;color:#657b83;float:none !important;font-family:Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif;line-height:15px;margin:0;padding:0;text-align:left}._sage{font-size:13px;margin:8px 0;overflow-x:auto;white-space:nowrap}._sage dt{background:#fdf6e3;border:1px solid #93a1a1;color:#657b83;display:block;font-weight:bold;list-style:none outside none;overflow:auto;padding:4px}._sage dt:hover{border-color:#268bd2}._sage dt>var{margin-right:5px}._sage dt dt>var{margin-right:0}._sage dt u{color:#ff8c00}._sage>dl dl{padding:0 0 0 12px}._sage nav{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAA8CAMAAACO5hB7AAAA7VBMVEVYbnWToaH///9YbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnWToaFYbnVYbnWToaGToaFYbnWToaFYbnWToaFYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnWToaEeRtj1AAAATXRSTlMAAACLab0B7iP2R7CL9iPuaUewAb36F0/QnPoX0JxPYQaurepi6QV8FhV7MzFhM6586RYFMa3qYnsVBpNQ+ZGOGJ3PkM9QkZAY+Y6TnV7gnYsAAAEcSURBVHhebdHVbgMxEEBRu8sUZmqapBBoSuGUmWb+/3NayxtrLOe+Hck745XZgd6/eb3CVcKt7HmR+gKxlCGOETG5vFbOoahR6NxI5zHt6nuq+2dqnqfzzH3mfcz70vb8H6MJt5u6a96hS30E4PjEFgAEp2fKNojKUfVEOoS044ex7u3YPE/nmfvM+5j3pe17T9oe/77O41w+n4vnrbrwZxbTshVhvtx5Kb8vliRLRWmeSQSTjJq/El5x5fUXYmNN9hcQC5y4g/hGvVksNtT8451rns2IScb7mn567ll2GNpWr9YWfvQgzWsKs8HOA/m960g6rjTzA8HAV/NHwiOmPLwDKA/J/gggYsRVgFvqbr/fpWYv90zzZKKs9Qfx00Jx65oxLAAAAABJRU5ErkJggg==") no-repeat scroll 0 0 rgba(0,0,0,0);cursor:pointer;display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle}._sage dt._sage-parent:hover nav{background-position:0 -15px}._sage dt._sage-parent._sage-show:hover>nav{background-position:0 -45px}._sage dt._sage-show>nav{background-position:0 -30px}._sage dt._sage-parent+dd{display:none;border-left:1px dashed #93a1a1}._sage dt._sage-parent._sage-show+dd{display:block}._sage var,._sage var a{color:#268bd2;font-style:normal}._sage dt:hover var,._sage dt:hover var a{color:#2aa198}._sage dfn{font-style:normal;font-family:monospace;color:#586e75}._sage pre{color:#657b83;margin:0 0 0 12px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #93a1a1;background:#fdf6e3;display:block;word-break:normal}._sage ._sage-popup-trigger{float:right !important;cursor:pointer;color:#268bd2}._sage ._sage-popup-trigger:hover{color:#93a1a1}._sage dt._sage-parent>._sage-popup-trigger{font-size:13px}._sage footer{padding:0 3px 3px;font-size:9px}._sage footer>._sage-popup-trigger{font-size:12px}._sage footer nav{background-size:10px;height:10px;width:10px}._sage footer nav:hover{background-position:0 -10px}._sage footer>ol{display:none;margin-left:32px}._sage footer._sage-show>ol{display:block}._sage footer._sage-show nav{background-position:0 -20px}._sage footer._sage-show nav:hover{background-position:0 -30px}._sage a{color:#657b83;text-shadow:none}._sage a:hover{color:#586e75;border-bottom:1px dotted #586e75}._sage ul{list-style:none;padding-left:12px}._sage ul:not(._sage-tabs) li{border-left:1px dashed #93a1a1}._sage ul:not(._sage-tabs) li>dl{border-left:none}._sage ul._sage-tabs{margin:0 0 0 12px;padding-left:0;background:#fdf6e3;border:1px solid #93a1a1;border-top:0}._sage ul._sage-tabs li{background:#eee8d5;border:1px solid #93a1a1;cursor:pointer;display:inline-block;height:24px;margin:2px;padding:0 12px;vertical-align:top}._sage ul._sage-tabs li:hover,._sage ul._sage-tabs li._sage-active-tab:hover{border-color:#268bd2;color:#2aa198}._sage ul._sage-tabs li._sage-active-tab{background:#fdf6e3;border-top:0;margin-top:-1px;height:27px;line-height:24px}._sage ul._sage-tabs li:not(._sage-active-tab){line-height:20px}._sage ul._sage-tabs li+li{margin-left:0}._sage ul:not(._sage-tabs)>li:not(:first-child){display:none}._sage dt:hover+dd>ul>li._sage-active-tab{border-color:#268bd2;color:#2aa198}._sage-report{border-collapse:collapse;empty-cells:show;border-spacing:0}._sage-report *{font-size:12px}._sage-report dt{background:none;padding:2px}._sage-report dt ._sage-parent{min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._sage-report td,._sage-report th{border:1px solid #93a1a1;padding:2px;vertical-align:center}._sage-report th{cursor:alias}._sage-report td:first-child,._sage-report th{font-weight:bold;background:#eee8d5;color:#586e75}._sage-report td{background:#fdf6e3;white-space:pre}._sage-report td>dl{padding:0}._sage-report pre{border-top:0;border-right:0}._sage-report th:first-child{background:none;border:0}._sage-report td._sage-empty{background:#d33682 !important}._sage-report tr:hover>td{box-shadow:0 0 1px 0 #268bd2 inset}._sage-report tr:hover var{color:#2aa198}._sage-report ul._sage-tabs li._sage-active-tab{height:20px;line-height:17px}._sage-trace ._sage-source{line-height:14px}._sage-trace ._sage-source span{padding-right:1px;border-right:3px inset #268bd2}._sage-trace ._sage-source ._sage-highlight{background:#eee8d5}._sage-trace ._sage-parent>b{min-width:18px;display:inline-block;text-align:right;color:#586e75}._sage-trace ._sage-parent>var>a{color:#268bd2}._sage-focused{box-shadow:0 0 3px 2px #859900 inset;border-radius:7px}._sage-microtime,._sage-color-preview{box-shadow:0 0 2px 0 #b6cedb;height:16px;text-align:center;text-shadow:-1px 0 #839496,0 1px #839496,1px 0 #839496,0 -1px #839496;width:230px;color:#fdf6e3}._sage footer li{color:#ddd}._sage>dl>dt,._sage ul._sage-tabs{box-shadow:4px 0 2px -3px #268bd2 inset}._sage ul._sage-tabs li._sage-active-tab{padding-top:7px;height:34px} +._sage::selection{background:#268bd2;color:#657b83}._sage,._sage::before,._sage::after,._sage *,._sage *::before,._sage *::after{box-sizing:border-box;border-radius:0;color:#657b83;float:none !important;font-family:ui-monospace,"Cascadia Code","Source Code Pro",Menlo,Consolas,"DejaVu Sans Mono",monospace;line-height:15px;margin:0;padding:0;text-align:left}._sage{font-size:13px;margin:8px 0;overflow-x:auto;white-space:nowrap}._sage dt{background:#fdf6e3;border:1px solid #93a1a1;color:#657b83;display:block;font-weight:bold;list-style:none outside none;overflow:auto;padding:4px}._sage dt:hover{border-color:#268bd2}._sage dt>var{margin-right:5px}._sage dt dt>var{margin-right:0}._sage dt u{color:#ff8c00}._sage>dl dl{padding:0 0 0 12px}._sage nav{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAA8CAMAAACO5hB7AAAA7VBMVEVYbnWToaH///9YbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnWToaFYbnVYbnWToaGToaFYbnWToaFYbnWToaFYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnVYbnWToaGToaGToaGToaGToaGToaGToaGToaGToaFYbnWToaEeRtj1AAAATXRSTlMAAACLab0B7iP2R7CL9iPuaUewAb36F0/QnPoX0JxPYQaurepi6QV8FhV7MzFhM6586RYFMa3qYnsVBpNQ+ZGOGJ3PkM9QkZAY+Y6TnV7gnYsAAAEcSURBVHhebdHVbgMxEEBRu8sUZmqapBBoSuGUmWb+/3NayxtrLOe+Hck745XZgd6/eb3CVcKt7HmR+gKxlCGOETG5vFbOoahR6NxI5zHt6nuq+2dqnqfzzH3mfcz70vb8H6MJt5u6a96hS30E4PjEFgAEp2fKNojKUfVEOoS044ex7u3YPE/nmfvM+5j3pe17T9oe/77O41w+n4vnrbrwZxbTshVhvtx5Kb8vliRLRWmeSQSTjJq/El5x5fUXYmNN9hcQC5y4g/hGvVksNtT8451rns2IScb7mn567ll2GNpWr9YWfvQgzWsKs8HOA/m960g6rjTzA8HAV/NHwiOmPLwDKA/J/gggYsRVgFvqbr/fpWYv90zzZKKs9Qfx00Jx65oxLAAAAABJRU5ErkJggg==") no-repeat scroll 0 0 rgba(0,0,0,0);cursor:pointer;display:inline-block;height:15px;width:15px;margin-right:3px;vertical-align:middle}._sage dt._sage-parent:hover nav{background-position:0 -15px}._sage dt._sage-parent._sage-show:hover>nav{background-position:0 -45px}._sage dt._sage-show>nav{background-position:0 -30px}._sage dt._sage-parent+dd{display:none;border-left:1px dashed #93a1a1}._sage dt._sage-parent._sage-show+dd{display:block}._sage var,._sage var a{color:#268bd2;font-style:normal}._sage dt:hover var,._sage dt:hover var a{color:#2aa198}._sage dfn{font-style:normal;font-family:monospace;color:#586e75}._sage pre{color:#657b83;margin:0 0 0 12px;padding:5px;overflow-y:hidden;border-top:0;border:1px solid #93a1a1;background:#fdf6e3;display:block;word-break:normal}._sage ._sage-popup-trigger{float:right !important;cursor:pointer;color:#268bd2}._sage ._sage-popup-trigger:hover{color:#93a1a1}._sage dt._sage-parent>._sage-popup-trigger{font-size:13px}._sage footer{padding:0 3px 3px;font-size:9px}._sage footer>._sage-popup-trigger{font-size:12px}._sage footer nav{background-size:10px;height:10px;width:10px}._sage footer nav:hover{background-position:0 -10px}._sage footer>ol{display:none;margin-left:32px}._sage footer._sage-show>ol{display:block}._sage footer._sage-show nav{background-position:0 -20px}._sage footer._sage-show nav:hover{background-position:0 -30px}._sage a{color:#657b83;text-shadow:none}._sage a:hover{color:#586e75;border-bottom:1px dotted #586e75}._sage ul{list-style:none;padding-left:12px}._sage ul:not(._sage-tabs) li{border-left:1px dashed #93a1a1}._sage ul:not(._sage-tabs) li>dl{border-left:none}._sage ul._sage-tabs{margin:0 0 0 12px;padding-left:0;background:#fdf6e3;border:1px solid #93a1a1;border-top:0}._sage ul._sage-tabs li{background:#eee8d5;border:1px solid #93a1a1;cursor:pointer;display:inline-block;height:24px;margin:2px;padding:0 12px;vertical-align:top}._sage ul._sage-tabs li:hover,._sage ul._sage-tabs li._sage-active-tab:hover{border-color:#268bd2;color:#2aa198}._sage ul._sage-tabs li._sage-active-tab{background:#fdf6e3;border-top:0;margin-top:-1px;height:27px;line-height:24px}._sage ul._sage-tabs li:not(._sage-active-tab){line-height:20px}._sage ul._sage-tabs li+li{margin-left:0}._sage ul:not(._sage-tabs)>li:not(:first-child){display:none}._sage dt:hover+dd>ul>li._sage-active-tab{border-color:#268bd2;color:#2aa198}._sage-report{border-collapse:collapse;empty-cells:show;border-spacing:0}._sage-report *{font-size:12px}._sage-report dt{background:none;padding:2px}._sage-report dt ._sage-parent{min-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._sage-report td,._sage-report th{border:1px solid #93a1a1;padding:2px;vertical-align:center}._sage-report th{cursor:alias}._sage-report td:first-child,._sage-report th{font-weight:bold;background:#eee8d5;color:#586e75}._sage-report td{background:#fdf6e3;white-space:pre}._sage-report td>dl{padding:0}._sage-report pre{border-top:0;border-right:0}._sage-report th:first-child{background:none;border:0}._sage-report td._sage-empty{background:#d33682 !important}._sage-report tr:hover>td{box-shadow:0 0 1px 0 #268bd2 inset}._sage-report tr:hover var{color:#2aa198}._sage-report ul._sage-tabs li._sage-active-tab{height:20px;line-height:17px}._sage-trace ._sage-source{line-height:14px}._sage-trace ._sage-source span{padding-right:1px;border-right:3px inset #268bd2}._sage-trace ._sage-source ._sage-highlight{background:#eee8d5}._sage-trace ._sage-parent>b{min-width:18px;display:inline-block;text-align:right;color:#586e75}._sage-trace ._sage-parent>var>a{color:#268bd2}._sage-focused{box-shadow:0 0 3px 2px #859900 inset;border-radius:7px}._sage-microtime,._sage-color-preview{box-shadow:0 0 2px 0 #b6cedb;height:16px;text-align:center;text-shadow:-1px 0 #839496,0 1px #839496,1px 0 #839496,0 -1px #839496;width:230px;color:#fdf6e3}._sage footer li{color:#ddd}._sage>dl>dt,._sage ul._sage-tabs{box-shadow:4px 0 2px -3px #268bd2 inset}._sage ul._sage-tabs li._sage-active-tab{padding-top:7px;height:34px} diff --git a/resources/css/base.scss b/resources/css/base.scss index 67302f8..4268780 100644 --- a/resources/css/base.scss +++ b/resources/css/base.scss @@ -34,7 +34,7 @@ $border: 1px solid $border-color; border-radius: 0; color: $text-color; float: none !important; - font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif; + font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono', monospace; line-height: 15px; margin: 0; padding: 0; diff --git a/sage.phar b/sage.phar index d3b6902271730a449a353afd0512b797f49d0839..edc88d2d021adfafa17b204547f807d1ef568d24 100644 GIT binary patch delta 2533 zcmcImeN0nV6!*TCuR^g1Z7CGEK;f10q#%e4DSk1hBHDnuA;Nf;2NX+RdGDc{!->-+ z8b5{}^=)xFzxI!r)A*9rWwI>(wK=9{)5L9>xx|0AIb{w^+`#O;78$Mm*PG^@+~4_~ zbM86!+>`G8KyzfDW}rjoI5cfq|Cf|mk>=0iRr@z>(EVu*Vv3xx%ySJeN=aM7czg_3 zb`Je_&7TvqSU?Me@Viro0F_&w}WWx;eJ3T~kWwJ~q*J+KpA_2yHSJJJaP zBkjJoMb~LGEwHSBRR-yvYAZ68nSyQUKb=NTmns-p~MmUDNwy|kyu#q(EEf=op+ zLkq0%X;g>qJ3|muKn4@|HNrM5u-L^h zw7_5*PNZ#0T3Yimu4lSg8Cb-61&)R6^z!InU4c&DZ3ruA`?GS|C@3_SBu?DGgnQWb zOFE4I6(bFp@2jOAi%kVb$xIj|-@Te(U zEUrdsXm(Z{_(^@(Ci`r;qlK!Ku}T6^{F_=F%$LC}E6rm6g9+{H>!wQ=*R`v~odl5r z@6gL2X@Nl+rYjMe1G8Ktnj_J!Q4O+7uX;z3Eb4r37EauNbp1#+Th_Gn>}+$d9CC`oC+Y?v1T?J-mpJ;x0+kNhF! z(Zvfa*F7`rM!|>gYqcSE;zwP`WDS8h?7$>BS2Jm?)YZb%9gGut z##R6~W`rA0bfTsLCB`bV%Sj8Jpc{Y59N@?sC(Q|blf~U!fcyHMnKqBtigpSm1-cxE zMJ#e)OVAZ3;37=g#ck2Zn#&8EkL9fa6@_`m(_UF=2{jdyv?$ZY_pX<@lSF~@FkWj! zKIooii8_t^KC&)Zq}HeX@dW|*N|MTQOoZV(Sx#WQN^U{71#*QS>IuDgKMu9#hZJWX zw#Y+l!z$(tAq1}!6E!GP+^s>!l?x>)Oa|tnza$gi)h|Ox4CI~WVSImR89li%ej;R+Qwif$L3IVjMu|b@<8QT56x3KHB1-1rWZHR zULM!UesZWuZ{qwp#C|csN@V+wWDx|8BJ^(@=BvNDnZMUv+xOn~xZ19h4|is|PrYX9xi%nNm_2?_ sZO%+At-qXp9k4Rcr|S0(Me<9y^iys zscLiDtblFV~={}g?REYN-qph>3aUz46Bh24emZPanc;7{8VE@iML*;Fh_ z{16}H1h-F?|B)B>RLA$%04u$RL2Xef4w@&8M29v zI^Z({jVdX>&rDq+@Ih8vEu4^Ri+0NH%zJUBU8nEuN$VcbcqGT zF!OPOV28JE7Uon{Rxe*0V6w~&;dz5K(?_DCu` z=E-GKRdeKIxL4quksAtY=O19W^`N3?`Ly?%$dWmLlV98Q_X#f38{u&jV$c zDDKOdb+ae-T~3RmDJ8e`jFTj8ocei*`N9YTCR1^cj*AhAa-opG`?xSK25ESh3uC+( z!2m;NIV5o7%uo5C9A=zfT@oHY!e4-K6see>KA3h8t5hwM^w^xop7NwBz_LdEeAoGH(a zzFq!Os>QQ(DXsIf5Ml*Es7&Z>Pl!3Xc}F!#O{ihN*KSM*E+cS<^P(5L zSB#`L`s&Uv2cYonmw!36aaP!Tt2W`(R#a(Jxm=6Tsl1Ux%tlV&Iho0w+!&mGxAeu@ zeAW(m>`nGjtd`hVe5g>(Gkont?kPz;+L0(|1W|Fl{bE7}L^!XkWT-}>yij#wF zPUoCX`W@JH#dP?~)UrA3#mOpu@WX5CxbW0nGh{!TTKm-$rep5Xs2sUTjtn5JJG9hX zD#Hsb=+MG)!s%DcS&6{nNh%kYk$kv6nF<}h%vI_x5IuxG&4S9ej1at=p6&4<%Lu{% z=NnOP&>)Q5cBReippX*??YcW=Fy2`Sjd$!i8xK!}Oz`b1S$Z{k*n6isPffgolfrVZ zjqh{PJ$tZ7@Zp_is0?R-=gh*kujJ&g@pLVf4U$4Ay zkoeQk!jB?JYkG&WXERAlv4$c87%gy5md5%Ikq;hOWUaKiXjgZqx1+w%+tTz{H+ILV zO#Y5!#zx;GFA%+zI;}7@X;M2A!_HituTq<3j1ByOWYQ!nwZ^2YBz@VF>yX$*fsXy`fsT0YKLza?$=Cm&xo zet2Ny`R*@vCgtDVwud|K{Ci|?L)kkEPM+HD-n8Q6-_GAXZk~K|pXI8H{NzR5q~TFL L{_nHCp|#<^yp@i2 diff --git a/tests/__snapshots__/fileDisplayTest__display_filesizes_correctly__1.html b/tests/__snapshots__/fileDisplayTest__display_filesizes_correctly__1.html index 3d5f807..6a4f491 100644 --- a/tests/__snapshots__/fileDisplayTest__display_filesizes_correctly__1.html +++ b/tests/__snapshots__/fileDisplayTest__display_filesizes_correctly__1.html @@ -1,7 +1,7 @@ - @@ -19,11 +19,11 @@
    'group&owner' => string (9) "1000:1000"
    -'created' => string (19) "2023-04-02 18:41:35"
    +'created' => string (19) "2023-04-05 21:19:09"
    -'modified' => string (19) "2023-04-02 18:41:35"
    +'modified' => string (19) "2023-04-05 21:19:09"
    -'accessed' => string (19) "2023-04-02 18:42:26"
    +'accessed' => string (19) "2023-04-05 21:19:09" @@ -44,7 +44,7 @@
    'modified' => string (19) "2020-09-13 12:26:40"
    -'accessed' => string (19) "2023-04-02 08:49:16"
    +'accessed' => string (19) "2023-04-05 10:57:44" @@ -67,7 +67,7 @@
    'modified' => string (19) "2020-09-13 12:26:40"
    -'accessed' => string (19) "2023-04-02 08:49:16"
    +'accessed' => string (19) "2023-04-05 10:57:44" @@ -96,40 +96,40 @@ -