PHP Classes

File: src/Outputs/HtmlOutput.php

Recommend this page to a friend!
  Classes of Rodolfo Berrios Arce   Var-Dump   src/Outputs/HtmlOutput.php   Download  
File: src/Outputs/HtmlOutput.php
Role: Class source
Content type: text/plain
Description: Class source
Class: Var-Dump
Show the value of a variable in colored way
Author: By
Last change:
Date: 18 days ago
Size: 4,056 bytes
 

Contents

Class file image Download
<?php

/*
 * This file is part of Chevere.
 *
 * (c) Rodolfo Berrios <[email protected]>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

declare(strict_types=1);

namespace
Chevere\VarDump\Outputs;

use
Chevere\VarDump\Interfaces\FormatInterface;

class
HtmlOutput extends Output
{
    public const
CSS = <<<CSS
@media (prefers-color-scheme: light) {
        :root {
            --textColor: #24292f;
            --backgroundColor: #f2f5f8;
            --inlineColor: #c4c5c7;
        }
    }
    @media (prefers-color-scheme: dark) {
        :root {
            --textColor: #ecf0f1;
            --backgroundColor: #132537;
            --inlineColor: #323e4a;
        }
    }
    html.chv-dump {
        background: var(--backgroundColor);
    }
    pre.chv-dump {
        font-size: 14px;
        font-family: 'Fira Code Retina', 'Operator Mono', Inconsolata, Menlo, Monaco, Consolas, monospace;
        line-height: normal;
        color: var(--textColor);
        padding: 1.25em;
        margin: 0.8em 0;
        word-break: break-word;
        white-space: pre-wrap;
        background: var(--backgroundColor);
        display: block;
        text-align: left;
        border: none;
        border-radius: 0.2857em;
    }
    .chv-dump-hr {
        opacity: 0.25;
    }
    .chv-dump-inline {
        border-left: 1px solid var(--inlineColor);

    }
    .chv-dump-details {
        line-height: normal;
        display: block;
        margin-top: -1.242857em;
    }
    * > .chv-dump-details:not(:last-child) {
        margin-bottom: -1.242857em;
    }
    .chv-dump-summary {
        height: 1.242857em;
        margin-left: -0.8em;
        position: relative;
    }
    .chv-dump-summary:hover {
        background: rgba(255, 255, 255, 0.1);
    }
    .chv-dump-summary::-webkit-details-marker {
        margin-top: 0.3em;
    }
    .chv-dump-float {
        color: #ff8700;
    }
    .chv-dump-int {
        color: #ff8700;
    }
    .chv-dump-string {
        color: #ff8700;
    }
    .chv-dump-bool {
        color: #ff8700;
    }
    .chv-dump-null {
        color: #ff8700;
    }
    .chv-dump-object {
        color: #fabb00;
    }
    .chv-dump-array {
        color: #27ae60;
    }
    .chv-dump-resource {
        color: #ff5f5f;
    }
    .chv-dump-file {
        color: #87afff;
    }
    .chv-dump-class {
        color: #fabb00;
    }
    .chv-dump-operator {
        color: #6c6c6c;
    }
    .chv-dump-function {
        color: #00afff;
    }
    .chv-dump-variable {
        color: #00afff;
    }
    .chv-dump-modifier {
        color: #d75fd7;
    }
    .chv-dump-emphasis {
        color: rgb(108 108 108 / 65%);
    }
CSS;

    protected
bool $hasHeader = false;

    protected static
bool $isStyleWritten = false;

    public function
finalize(): void
   
{
       
$this->writer()->write('</pre>');
        if (
$this->hasHeader) {
           
$this->writer()->write('</body></html>');
        }
    }

    public function
prepare(): void
   
{
       
// @infection-ignore-all
       
if (! headers_sent() || headers_list() === []) {
           
$this->hasHeader = true;
           
$this->writer()->write(
               
'<html class="chv-dump"><head><meta charset="UTF-8"></head><body>'
           
);
        }
        if (!
self::$isStyleWritten) {
           
$this->writer()->write(
               
'<style>' . preg_replace('/\s+/', ' ', self::CSS) . '</style>'
           
);
           
self::$isStyleWritten = true;
        }
       
$this->writer()->write(
           
'<pre class="chv-dump">'
           
. $this->caller()
            .
'<hr class="chv-dump-hr">'
       
);
    }

    public function
writeCallerFile(FormatInterface $format): void
   
{
       
$highlight = $this->getCallerFile($format);
       
$this->writer()->write(
            <<<HTML
{$highlight}

HTML
        );
    }

    public function
isStyleWritten(): bool
   
{
        return
self::$isStyleWritten;
    }
}