diff --git a/assets/css/admin.scss b/assets/css/admin.scss index 01a5713..0376401 100644 --- a/assets/css/admin.scss +++ b/assets/css/admin.scss @@ -21,10 +21,6 @@ $pagination-active-bg: #343a40; } } -.flag-icon-en { - background-image: url(~flag-icon-css/flags/4x3/gb.svg); -} - body { overflow-x: hidden; } @@ -33,6 +29,10 @@ body { width: 30px; } +.flag-icon-en { + background-image: url(~flag-icon-css/flags/4x3/gb.svg); +} + .choices__list--dropdown { display: none; } @@ -109,6 +109,19 @@ tr.table-primary-light { white-space: nowrap; } +.table tr { + td { + transition: border 500ms ease-out; + border-bottom: 1px solid #dee2e6; + } + + &:hover { + td { + border-bottom: 1px solid #a8aaac; + } + } +} + .bg-dark-blue { background: #242b3b; color: #fff; @@ -129,6 +142,7 @@ tr.table-primary-light { } } + .sidebar { width: 260px; display: inline-block; @@ -257,13 +271,6 @@ th { } } -.bg-tiles { - background-color: #c1c1c1; - background-image: linear-gradient(45deg, #646464 25%, transparent 25%, transparent 75%, #646464 75%), linear-gradient(45deg, #646464 25%, transparent 25%, transparent 75%, #646464 75%); - background-size: 20px 20px; - background-position: 0 0, 10px 10px; -} - .tab-form { padding: 15px; } @@ -459,3 +466,14 @@ fieldset.form-group { clear: both; } } + +.modal-dialog-large { + max-width: 80%; +} + +.output { + &-console { + background: #073642; + line-height: normal; + } +} diff --git a/composer.json b/composer.json index a98af75..a899d1f 100644 --- a/composer.json +++ b/composer.json @@ -20,6 +20,7 @@ "scheb/2fa-google-authenticator": "^5.7", "scheb/2fa-qr-code": "^5.7", "sensio/framework-extra-bundle": "^6.1", + "sensiolabs/ansi-to-html": "^1.2", "stof/doctrine-extensions-bundle": "^1.6", "symfony/apache-pack": "^1.0", "symfony/asset": "5.2.*", diff --git a/config/packages/ansi_to_html.yaml b/config/packages/ansi_to_html.yaml new file mode 100644 index 0000000..78e983c --- /dev/null +++ b/config/packages/ansi_to_html.yaml @@ -0,0 +1,6 @@ +services: + _defaults: + autowire: true + autoconfigure: true + + SensioLabs\AnsiConverter\Bridge\Twig\AnsiExtension: null diff --git a/core/Cache/SymfonyCacheManager.php b/core/Cache/SymfonyCacheManager.php index 6ddba95..4857aa5 100644 --- a/core/Cache/SymfonyCacheManager.php +++ b/core/Cache/SymfonyCacheManager.php @@ -65,6 +65,7 @@ class SymfonyCacheManager 'command' => 'cache:clear', '-e' => $this->kernel->getEnvironment(), '--no-warmup' => null, + '--ansi' => null, ]); $application->run($input, $output); diff --git a/core/Controller/Task/TaskAdminController.php b/core/Controller/Task/TaskAdminController.php index 51a3098..e8f20e6 100644 --- a/core/Controller/Task/TaskAdminController.php +++ b/core/Controller/Task/TaskAdminController.php @@ -10,6 +10,8 @@ use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; +use SensioLabs\AnsiConverter\AnsiToHtmlConverter; +use SensioLabs\AnsiConverter\Theme\SolarizedTheme; /** * @Route("/admin/task") @@ -45,7 +47,8 @@ class TaskAdminController extends AdminController $event = new TaskRunRequestedEvent($task, $request->query, $output); $eventDispatcher->dispatch($event, TaskRunRequestedEvent::RUN_REQUEST_EVENT); - $content = $output->fetch(); + $converter = new AnsiToHtmlConverter(new SolarizedTheme()); + $content = $converter->convert($output->fetch()); return $this->render('@Core/task/task_admin/run.html.twig', [ 'output' => $content, diff --git a/core/Resources/views/task/task_admin/run.html.twig b/core/Resources/views/task/task_admin/run.html.twig index dcfa3c1..536e73c 100644 --- a/core/Resources/views/task/task_admin/run.html.twig +++ b/core/Resources/views/task/task_admin/run.html.twig @@ -1,4 +1,4 @@ -