<?php
use Fury\Kernel\AppContainer;
function dd($var, $die_flag = true){
ob_start();
var_dump($var);
$dump = ob_get_clean();
// style
$style = '
<style type="text/css">
.dd-container{
width: 100%;
box-sizing: border-box;
height: auto;
padding: 20px 10px;
background-color: #333;
color: white;
}
.dd-container *{
font-family: Arial;
letter-spacing: .8px;
}
.dd-line{
padding: 5px 20px;
}
.dd-margin{
margin-left: 30px;
}
.dd-arrow{
font-weight: bold;
padding: 0 10px;
color: #D9CB04;
}
.dd-key{
font-weight: bold;
padding: 0 3px;
color: #038C8C;
}
.dd-key-border{
color: #026873;
}
.dd-keyword{
font-weight: bold;
color: #D9B504;
margin-right: 5px;
}
.dd-brackets-content{
font-weight: bold;
padding: 0 3px;
color: #F28D77;
}
.dd-block{
display: none;
}
.dd-block.show{
display: block;
}
.dd-btn{
display: inline-block;
color: #7ED955;
background: transparent;
padding: 0;
width: 20px;
height: 20px;
cursor: pointer;
text-align: center;
outline: none;
font-size: 16px;
line-height: 18px;
border: 2px solid #7ED955;
}
.dd-block-show,
.dd-block-hide{
margin-top: -29px;
position: relative;
left: -10px;
float: right;
}
.dd-block-hide{
line-height: 16px;
color: #F28D77;
border-color: #F28D77;
}
</style>
';
// JAVASCRIPT
$js = '<script>
(function(){
let btnsShow = document.getElementsByClassName("dd-block-show");
for(let i in btnsShow){
let btn = btnsShow[i];
btn.onclick = function(){
this.style.display = "none";
let block = document.getElementsByClassName("dd-block-id-" + this.dataset.blockShow)[0];
block.classList.add("show");
}
}
let btnsHide = document.getElementsByClassName("dd-block-hide");
for(let i in btnsHide){
let btn = btnsHide[i];
btn.onclick = function(){
document.querySelector("[data-block-show=\"" + this.dataset.blockHide + "\"]").style.display = "inline-block";
let block = document.getElementsByClassName("dd-block-id-" + this.dataset.blockHide)[0];
block.classList.remove("show");
}
}
})();
</script>';
$lines = explode("\n", $dump);
$prev_lvl = 0;
$cur_lvl = 1;
foreach ($lines as $inx => $line) {
$two_space = '<span class="dd-margin"></span>';
$len = strlen($line);
$count_spaces = 0;
for($i=0; $i<$len; $i++){
if($line[$i] != " "){
$count_spaces = $i;
break;
}
}
$line = mb_substr($line, $count_spaces, $len);
for($i=0; $i<$count_spaces / 2; $i++){
$line = $two_space . $line;
}
$lines[$inx] = '<div class="dd-line">' . $line . '</div>';
$cur_lvl = $count_spaces / 2;
if($prev_lvl < $cur_lvl){
$bid = uniqid('', $inx);
$lines[$inx] = '
<button class="dd-btn dd-block-show" data-block-show="' . $bid . '">+</button>
<div class="dd-block dd-block-lvl-
' . $cur_lvl . ' dd-block-id-' . $bid . '">
<button class="dd-btn dd-block-hide" data-block-hide="' . $bid . '">-</button>
' . $lines[$inx];
}
if($prev_lvl > $cur_lvl){
$lines[$inx] .= '</div>';
}
$prev_lvl = $cur_lvl;
}
$dump = implode('', $lines);
$dump = str_replace('=>', '<span class="dd-arrow">>></span>', $dump);
$dump = str_replace('["', '<span class="dd-key-border">["</span><span class="dd-key">', $dump);
$dump = str_replace('"]', '</span><span class="dd-key-border">"]</span>', $dump);
// keywords
$keywords = ['array', 'string', 'int', 'float', 'double', 'object'];
$formating_keywords = array_map(function($item){
return '<span class="dd-keyword">' . $item . '</span>';
}, $keywords);
$dump = str_replace($keywords, $formating_keywords, $dump);
// brackets content
$dump = str_replace('(', '(<span class="dd-brackets-content">', $dump);
$dump = str_replace(')', '</span>)', $dump);
// Print data forming
$dump = $style . '<div class="dd-container">' . $dump;
$dump .= '</div>' . $js;
$json_var = json_encode(["var" => $var]);
$dump .= "<script>console.warn('Die and Dump'); console.log({$json_var})</script>";
echo $die_flag ? die($dump) : $dump;
}
function ddjson($var, $die_flag = true) {
$die_flag ? die(json_encode([ "die" => $var ])) : print(json_encode([ "die" => $var ]));
}
function app(){
return AppContainer::app();
}
function bootstrap(){
return AppContainer::bootstrap();
}
function events(){
return AppContainer::events();
}
function logging(){
return AppContainer::logging();
}