feat: A lot of stuffs, basic functionality
This commit is contained in:
parent
27eef87174
commit
4525706b23
|
@ -1,10 +1,3 @@
|
||||||
import './bootstrap.js';
|
import './styles/vars.css';
|
||||||
/*
|
import './styles/demdtrap.css';
|
||||||
* Welcome to your app's main JavaScript file!
|
|
||||||
*
|
|
||||||
* This file will be included onto the page via the importmap() Twig function,
|
|
||||||
* which should already be in your base.html.twig.
|
|
||||||
*/
|
|
||||||
import './styles/app.css';
|
import './styles/app.css';
|
||||||
|
|
||||||
console.log('This log comes from assets/app.js - welcome to AssetMapper! 🎉');
|
|
||||||
|
|
|
@ -1,3 +1,13 @@
|
||||||
body {
|
html {
|
||||||
background-color: skyblue;
|
font-family: sans;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
padding: var(--dt-spacing-2);
|
||||||
|
background-color: black;
|
||||||
|
border: 1px solid var(--dt-neutral-4);
|
||||||
|
margin-bottom: var(--dt-spacing-2)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,210 @@
|
||||||
|
* { margin: 0px; padding: 0px; }
|
||||||
|
|
||||||
|
ul {
|
||||||
|
margin-left: var(--dt-spacing-3)
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
margin-bottom: var(--dt-spacing-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
margin: var(--dt-spacing-2) var(--dt-spacing-0);
|
||||||
|
border: 0px;
|
||||||
|
border-bottom: 1px solid var(--dt-neutral-4);
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: var(--dt-primary-lighter);
|
||||||
|
text-decoration: none;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: var(--dt-primary-lighter);
|
||||||
|
color: var(--dt-neutral-2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------- Margins --- */
|
||||||
|
.m-0 { margin: var(--dt-spacing-0); }
|
||||||
|
.m-1 { margin: var(--dt-spacing-1); }
|
||||||
|
.m-2 { margin: var(--dt-spacing-2); }
|
||||||
|
.m-3 { margin: var(--dt-spacing-3); }
|
||||||
|
.m-4 { margin: var(--dt-spacing-4); }
|
||||||
|
.m-5 { margin: var(--dt-spacing-5); }
|
||||||
|
.m-6 { margin: var(--dt-spacing-6); }
|
||||||
|
.mt-0 { margin-top: var(--dt-spacing-0); }
|
||||||
|
.mt-1 { margin-top: var(--dt-spacing-1); }
|
||||||
|
.mt-2 { margin-top: var(--dt-spacing-2); }
|
||||||
|
.mt-3 { margin-top: var(--dt-spacing-3); }
|
||||||
|
.mt-4 { margin-top: var(--dt-spacing-4); }
|
||||||
|
.mt-5 { margin-top: var(--dt-spacing-5); }
|
||||||
|
.mt-6 { margin-top: var(--dt-spacing-6); }
|
||||||
|
.mb-0 { margin-bottom: var(--dt-spacing-0); }
|
||||||
|
.mb-1 { margin-bottom: var(--dt-spacing-1); }
|
||||||
|
.mb-2 { margin-bottom: var(--dt-spacing-2); }
|
||||||
|
.mb-3 { margin-bottom: var(--dt-spacing-3); }
|
||||||
|
.mb-4 { margin-bottom: var(--dt-spacing-4); }
|
||||||
|
.mb-5 { margin-bottom: var(--dt-spacing-5); }
|
||||||
|
.mb-6 { margin-bottom: var(--dt-spacing-6); }
|
||||||
|
.ms-0 { margin-left: var(--dt-spacing-0); }
|
||||||
|
.ms-1 { margin-left: var(--dt-spacing-1); }
|
||||||
|
.ms-2 { margin-left: var(--dt-spacing-2); }
|
||||||
|
.ms-3 { margin-left: var(--dt-spacing-3); }
|
||||||
|
.ms-4 { margin-left: var(--dt-spacing-4); }
|
||||||
|
.ms-5 { margin-left: var(--dt-spacing-5); }
|
||||||
|
.ms-6 { margin-left: var(--dt-spacing-6); }
|
||||||
|
.me-0 { margin-right: var(--dt-spacing-0); }
|
||||||
|
.me-1 { margin-right: var(--dt-spacing-1); }
|
||||||
|
.me-2 { margin-right: var(--dt-spacing-2); }
|
||||||
|
.me-3 { margin-right: var(--dt-spacing-3); }
|
||||||
|
.me-4 { margin-right: var(--dt-spacing-4); }
|
||||||
|
.me-5 { margin-right: var(--dt-spacing-5); }
|
||||||
|
.me-6 { margin-right: var(--dt-spacing-6); }
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------- Padding --- */
|
||||||
|
.p-0 { padding: var(--dt-spacing-0); }
|
||||||
|
.p-1 { padding: var(--dt-spacing-1); }
|
||||||
|
.p-2 { padding: var(--dt-spacing-2); }
|
||||||
|
.p-3 { padding: var(--dt-spacing-3); }
|
||||||
|
.p-4 { padding: var(--dt-spacing-4); }
|
||||||
|
.p-5 { padding: var(--dt-spacing-5); }
|
||||||
|
.p-6 { padding: var(--dt-spacing-6); }
|
||||||
|
.pt-0 { padding-top: var(--dt-spacing-0); }
|
||||||
|
.pt-1 { padding-top: var(--dt-spacing-1); }
|
||||||
|
.pt-2 { padding-top: var(--dt-spacing-2); }
|
||||||
|
.pt-3 { padding-top: var(--dt-spacing-3); }
|
||||||
|
.pt-4 { padding-top: var(--dt-spacing-4); }
|
||||||
|
.pt-5 { padding-top: var(--dt-spacing-5); }
|
||||||
|
.pt-6 { padding-top: var(--dt-spacing-6); }
|
||||||
|
.pb-0 { padding-bottom: var(--dt-spacing-0); }
|
||||||
|
.pb-1 { padding-bottom: var(--dt-spacing-1); }
|
||||||
|
.pb-2 { padding-bottom: var(--dt-spacing-2); }
|
||||||
|
.pb-3 { padding-bottom: var(--dt-spacing-3); }
|
||||||
|
.pb-4 { padding-bottom: var(--dt-spacing-4); }
|
||||||
|
.pb-5 { padding-bottom: var(--dt-spacing-5); }
|
||||||
|
.pb-6 { padding-bottom: var(--dt-spacing-6); }
|
||||||
|
.ps-0 { padding-left: var(--dt-spacing-0); }
|
||||||
|
.ps-1 { padding-left: var(--dt-spacing-1); }
|
||||||
|
.ps-2 { padding-left: var(--dt-spacing-2); }
|
||||||
|
.ps-3 { padding-left: var(--dt-spacing-3); }
|
||||||
|
.ps-4 { padding-left: var(--dt-spacing-4); }
|
||||||
|
.ps-5 { padding-left: var(--dt-spacing-5); }
|
||||||
|
.ps-6 { padding-left: var(--dt-spacing-6); }
|
||||||
|
.pe-0 { padding-right: var(--dt-spacing-0); }
|
||||||
|
.pe-1 { padding-right: var(--dt-spacing-1); }
|
||||||
|
.pe-2 { padding-right: var(--dt-spacing-2); }
|
||||||
|
.pe-3 { padding-right: var(--dt-spacing-3); }
|
||||||
|
.pe-4 { padding-right: var(--dt-spacing-4); }
|
||||||
|
.pe-5 { padding-right: var(--dt-spacing-5); }
|
||||||
|
.pe-6 { padding-right: var(--dt-spacing-6); }
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------- Floats ---*/
|
||||||
|
.float-end { float: right; }
|
||||||
|
.float-start { float: left; }
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------- Borders ---*/
|
||||||
|
.border { border: 1px solid var(--dt-neutral-4); }
|
||||||
|
.border-top { border-top: 1px solid var(--dt-neutral-4); }
|
||||||
|
.border-bottom { border-bottom: 1px solid var(--dt-neutral-4); }
|
||||||
|
.border-start { border-left: 1px solid var(--dt-neutral-4); }
|
||||||
|
.border-end { border-right: 1px solid var(--dt-neutral-4); }
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------- Colors --- */
|
||||||
|
.bg-neutral-1 { background-color: var(--dt-neutral-1) }
|
||||||
|
.bg-neutral-2 { background-color: var(--dt-neutral-2) }
|
||||||
|
.bg-neutral-3 { background-color: var(--dt-neutral-3) }
|
||||||
|
.bg-neutral-4 { background-color: var(--dt-neutral-4) }
|
||||||
|
.bg-neutral-5 { background-color: var(--dt-neutral-5) }
|
||||||
|
.bg-neutral-6 { background-color: var(--dt-neutral-6) }
|
||||||
|
|
||||||
|
.color-white { color: white; }
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------------ Text ---*/
|
||||||
|
.fw-bold { font-weight: bold; }
|
||||||
|
|
||||||
|
.text-center { text-align: center; }
|
||||||
|
.text-start { text-align: left; }
|
||||||
|
.text-end { text-align: right; }
|
||||||
|
|
||||||
|
.text-muted { color: var(--dt-neutral-5); }
|
||||||
|
|
||||||
|
.fs-1 { font-size: 2.000rem !important; }
|
||||||
|
.fs-2 { font-size: 1.750rem !important; }
|
||||||
|
.fs-3 { font-size: 1.500rem !important; }
|
||||||
|
.fs-4 { font-size: 1.250rem !important; }
|
||||||
|
.fs-5 { font-size: 1.125rem !important; }
|
||||||
|
.fs-6 { font-size: 1.000rem !important; }
|
||||||
|
.fs-7 { font-size: 0.875rem !important; }
|
||||||
|
.fs-8 { font-size: 0.750rem !important; }
|
||||||
|
.fs-9 { font-size: 0.625rem !important; }
|
||||||
|
.fs-10 { font-size: 0.500rem !important; }
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------- Display --- */
|
||||||
|
.d-contents { display: contents; }
|
||||||
|
.d-inline-block { display: inline-block; }
|
||||||
|
.d-block { display: block; }
|
||||||
|
.d-flex { display: flex; }
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------- Flex --- */
|
||||||
|
.flex-column { flex-direction: column; }
|
||||||
|
.flex-row { flex-direction: row; }
|
||||||
|
.flex-grow-1 { flex-grow: 1; }
|
||||||
|
|
||||||
|
.gap-0 { gap: var(--dt-spacing-0); }
|
||||||
|
.gap-1 { gap: var(--dt-spacing-1); }
|
||||||
|
.gap-2 { gap: var(--dt-spacing-2); }
|
||||||
|
.gap-3 { gap: var(--dt-spacing-3); }
|
||||||
|
.gap-4 { gap: var(--dt-spacing-4); }
|
||||||
|
.gap-5 { gap: var(--dt-spacing-5); }
|
||||||
|
.gap-6 { gap: var(--dt-spacing-6); }
|
||||||
|
|
||||||
|
.align-self-start { align-self: flex-start; }
|
||||||
|
.align-self-end { align-self: flex-end; }
|
||||||
|
.align-self-center { align-self: center; }
|
||||||
|
.align-self-baseline { align-self: baseline; }
|
||||||
|
.align-self-stretch { align-self: stretch; }
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------- Sizes --- */
|
||||||
|
.w-100 { width: 100%; }
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------- Buttons --- */
|
||||||
|
.btn {
|
||||||
|
border: 0px;
|
||||||
|
padding: var(--dt-spacing-1) var(--dt-spacing-2);
|
||||||
|
color: white;
|
||||||
|
border: 1px solid red;
|
||||||
|
}
|
||||||
|
.btn-primary { background-color: var(--dt-primary); border-color: var(--dt-primary-darker); }
|
||||||
|
.btn-secondary { background-color: var(--dt-secondary); border-color: var(--dt-secondary-darker); }
|
||||||
|
.btn-success { background-color: var(--dt-success); border-color: var(--dt-success-darker); }
|
||||||
|
.btn-warning { background-color: var(--dt-warning); border-color: var(--dt-warning-darker); }
|
||||||
|
.btn-danger { background-color: var(--dt-danger); border-color: var(--dt-danger-darker); }
|
||||||
|
.btn-primary:hover { background-color: var(--dt-primary-darker); }
|
||||||
|
.btn-secondary:hover { background-color: var(--dt-secondary-darker); }
|
||||||
|
.btn-success:hover { background-color: var(--dt-success-darker); }
|
||||||
|
.btn-warning:hover { background-color: var(--dt-warning-darker); }
|
||||||
|
.btn-danger:hover { background-color: var(--dt-danger-darker); }
|
||||||
|
|
||||||
|
.btn-group {
|
||||||
|
display: flex;
|
||||||
|
gap: 0px;
|
||||||
|
}
|
||||||
|
.btn-group > * {
|
||||||
|
width: 30px;
|
||||||
|
height: 30px;
|
||||||
|
border: 1px solid black;
|
||||||
|
border-left: none;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 41px;
|
||||||
|
display: block;
|
||||||
|
color: white;
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: bold;
|
||||||
|
background-position: center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: 15px;
|
||||||
|
}
|
||||||
|
.btn-group > :first-child {
|
||||||
|
border-left: 1px solid black;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
:root {
|
||||||
|
--dt-primary-darker: hsl(var(--dt-primary-darker-hsl));
|
||||||
|
--dt-primary: hsl(var(--dt-primary-hsl));
|
||||||
|
--dt-primary-lighter: hsl(var(--dt-primary-lighter-hsl));
|
||||||
|
--dt-secondary-darker: hsl(var(--dt-secondary-darker-hsl));
|
||||||
|
--dt-secondary: hsl(var(--dt-secondary-hsl));
|
||||||
|
--dt-secondary-lighter: hsl(var(--dt-secondary-lighter-hsl));
|
||||||
|
--dt-success-darker: hsl(var(--dt-success-darker-hsl));
|
||||||
|
--dt-success: hsl(var(--dt-success-hsl));
|
||||||
|
--dt-success-lighter: hsl(var(--dt-success-lighter-hsl));
|
||||||
|
--dt-warning-darker: hsl(var(--dt-warning-darker-hsl));
|
||||||
|
--dt-warning: hsl(var(--dt-warning-hsl));
|
||||||
|
--dt-warning-lighter: hsl(var(--dt-warning-lighter-hsl));
|
||||||
|
--dt-danger-darker: hsl(var(--dt-danger-darker-hsl));
|
||||||
|
--dt-danger: hsl(var(--dt-danger-hsl));
|
||||||
|
--dt-danger-lighter: hsl(var(--dt-danger-lighter-hsl));
|
||||||
|
|
||||||
|
--dt-primary-darker-hsl: 226deg 36% 19%;
|
||||||
|
--dt-primary-hsl: 226deg 36% 39%;
|
||||||
|
--dt-primary-lighter-hsl: 226deg 36% 59%;
|
||||||
|
--dt-secondary-darker-hsl: 219deg 87% 37%;
|
||||||
|
--dt-secondary-hsl: 219deg 87% 57%;
|
||||||
|
--dt-secondary-lighter-hsl: 219deg 87% 77%;
|
||||||
|
--dt-success-darker-hsl: 172deg 89% 17%;
|
||||||
|
--dt-success-hsl: 172deg 89% 37%;
|
||||||
|
--dt-success-lighter-hsl: 172deg 89% 57%;
|
||||||
|
--dt-warning-darker-hsl: 38deg 91% 43%;
|
||||||
|
--dt-warning-hsl: 38deg 91% 63%;
|
||||||
|
--dt-warning-lighter-hsl: 38deg 91% 83%;
|
||||||
|
--dt-danger-darker-hsl: 10deg 84% 41%;
|
||||||
|
--dt-danger-hsl: 10deg 84% 61%;
|
||||||
|
--dt-danger-lighter-hsl: 10deg 84% 81%;
|
||||||
|
|
||||||
|
--dt-neutral-1: hsl(230deg 20% 10%);
|
||||||
|
--dt-neutral-2: hsl(230deg 10% 20%);
|
||||||
|
--dt-neutral-3: hsl(230deg 5% 30%);
|
||||||
|
--dt-neutral-4: hsl(230deg 2% 40%);
|
||||||
|
--dt-neutral-5: hsl(230deg 1% 50%);
|
||||||
|
--dt-neutral-6: hsl(230deg 1% 60%);
|
||||||
|
|
||||||
|
--dt-spacing-0: 0.00rem;
|
||||||
|
--dt-spacing-1: 0.25rem;
|
||||||
|
--dt-spacing-2: 0.50rem;
|
||||||
|
--dt-spacing-3: 1.00rem;
|
||||||
|
--dt-spacing-4: 1.50rem;
|
||||||
|
--dt-spacing-5: 3.00rem;
|
||||||
|
--dt-spacing-6: 6.00rem;
|
||||||
|
}
|
|
@ -11,6 +11,7 @@
|
||||||
"doctrine/doctrine-bundle": "^2.14",
|
"doctrine/doctrine-bundle": "^2.14",
|
||||||
"doctrine/doctrine-migrations-bundle": "^3.4",
|
"doctrine/doctrine-migrations-bundle": "^3.4",
|
||||||
"doctrine/orm": "^3.3",
|
"doctrine/orm": "^3.3",
|
||||||
|
"league/commonmark": "^2.6",
|
||||||
"phpdocumentor/reflection-docblock": "^5.6",
|
"phpdocumentor/reflection-docblock": "^5.6",
|
||||||
"phpstan/phpdoc-parser": "^2.1",
|
"phpstan/phpdoc-parser": "^2.1",
|
||||||
"symfony/asset": "7.2.*",
|
"symfony/asset": "7.2.*",
|
||||||
|
@ -42,7 +43,8 @@
|
||||||
"symfony/validator": "7.2.*",
|
"symfony/validator": "7.2.*",
|
||||||
"symfony/web-link": "7.2.*",
|
"symfony/web-link": "7.2.*",
|
||||||
"symfony/yaml": "7.2.*",
|
"symfony/yaml": "7.2.*",
|
||||||
"twig/extra-bundle": "^2.12|^3.0",
|
"twig/extra-bundle": "^3.20",
|
||||||
|
"twig/markdown-extra": "^3.20",
|
||||||
"twig/twig": "^2.12|^3.0"
|
"twig/twig": "^2.12|^3.0"
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "f68397016d06f528151706c36312cad7",
|
"content-hash": "266b862176b540dfaa8cfb44566a8161",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "composer/semver",
|
"name": "composer/semver",
|
||||||
|
@ -87,6 +87,81 @@
|
||||||
],
|
],
|
||||||
"time": "2024-09-19T14:15:21+00:00"
|
"time": "2024-09-19T14:15:21+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "dflydev/dot-access-data",
|
||||||
|
"version": "v3.0.3",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/dflydev/dflydev-dot-access-data.git",
|
||||||
|
"reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f",
|
||||||
|
"reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^7.1 || ^8.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpstan/phpstan": "^0.12.42",
|
||||||
|
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.3",
|
||||||
|
"scrutinizer/ocular": "1.6.0",
|
||||||
|
"squizlabs/php_codesniffer": "^3.5",
|
||||||
|
"vimeo/psalm": "^4.0.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-main": "3.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Dflydev\\DotAccessData\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Dragonfly Development Inc.",
|
||||||
|
"email": "info@dflydev.com",
|
||||||
|
"homepage": "http://dflydev.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Beau Simensen",
|
||||||
|
"email": "beau@dflydev.com",
|
||||||
|
"homepage": "http://beausimensen.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Carlos Frutos",
|
||||||
|
"email": "carlos@kiwing.it",
|
||||||
|
"homepage": "https://github.com/cfrutos"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Colin O'Dell",
|
||||||
|
"email": "colinodell@gmail.com",
|
||||||
|
"homepage": "https://www.colinodell.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Given a deep data structure, access data by dot notation.",
|
||||||
|
"homepage": "https://github.com/dflydev/dflydev-dot-access-data",
|
||||||
|
"keywords": [
|
||||||
|
"access",
|
||||||
|
"data",
|
||||||
|
"dot",
|
||||||
|
"notation"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/dflydev/dflydev-dot-access-data/issues",
|
||||||
|
"source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3"
|
||||||
|
},
|
||||||
|
"time": "2024-07-08T12:26:09+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "doctrine/cache",
|
"name": "doctrine/cache",
|
||||||
"version": "2.2.0",
|
"version": "2.2.0",
|
||||||
|
@ -1369,6 +1444,195 @@
|
||||||
],
|
],
|
||||||
"time": "2025-03-06T22:45:56+00:00"
|
"time": "2025-03-06T22:45:56+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "league/commonmark",
|
||||||
|
"version": "2.6.1",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/thephpleague/commonmark.git",
|
||||||
|
"reference": "d990688c91cedfb69753ffc2512727ec646df2ad"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/thephpleague/commonmark/zipball/d990688c91cedfb69753ffc2512727ec646df2ad",
|
||||||
|
"reference": "d990688c91cedfb69753ffc2512727ec646df2ad",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"ext-mbstring": "*",
|
||||||
|
"league/config": "^1.1.1",
|
||||||
|
"php": "^7.4 || ^8.0",
|
||||||
|
"psr/event-dispatcher": "^1.0",
|
||||||
|
"symfony/deprecation-contracts": "^2.1 || ^3.0",
|
||||||
|
"symfony/polyfill-php80": "^1.16"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"cebe/markdown": "^1.0",
|
||||||
|
"commonmark/cmark": "0.31.1",
|
||||||
|
"commonmark/commonmark.js": "0.31.1",
|
||||||
|
"composer/package-versions-deprecated": "^1.8",
|
||||||
|
"embed/embed": "^4.4",
|
||||||
|
"erusev/parsedown": "^1.0",
|
||||||
|
"ext-json": "*",
|
||||||
|
"github/gfm": "0.29.0",
|
||||||
|
"michelf/php-markdown": "^1.4 || ^2.0",
|
||||||
|
"nyholm/psr7": "^1.5",
|
||||||
|
"phpstan/phpstan": "^1.8.2",
|
||||||
|
"phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0",
|
||||||
|
"scrutinizer/ocular": "^1.8.1",
|
||||||
|
"symfony/finder": "^5.3 | ^6.0 | ^7.0",
|
||||||
|
"symfony/process": "^5.4 | ^6.0 | ^7.0",
|
||||||
|
"symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0",
|
||||||
|
"unleashedtech/php-coding-standard": "^3.1.1",
|
||||||
|
"vimeo/psalm": "^4.24.0 || ^5.0.0"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"symfony/yaml": "v2.3+ required if using the Front Matter extension"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-main": "2.7-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"League\\CommonMark\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"BSD-3-Clause"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Colin O'Dell",
|
||||||
|
"email": "colinodell@gmail.com",
|
||||||
|
"homepage": "https://www.colinodell.com",
|
||||||
|
"role": "Lead Developer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)",
|
||||||
|
"homepage": "https://commonmark.thephpleague.com",
|
||||||
|
"keywords": [
|
||||||
|
"commonmark",
|
||||||
|
"flavored",
|
||||||
|
"gfm",
|
||||||
|
"github",
|
||||||
|
"github-flavored",
|
||||||
|
"markdown",
|
||||||
|
"md",
|
||||||
|
"parser"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"docs": "https://commonmark.thephpleague.com/",
|
||||||
|
"forum": "https://github.com/thephpleague/commonmark/discussions",
|
||||||
|
"issues": "https://github.com/thephpleague/commonmark/issues",
|
||||||
|
"rss": "https://github.com/thephpleague/commonmark/releases.atom",
|
||||||
|
"source": "https://github.com/thephpleague/commonmark"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://www.colinodell.com/sponsor",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://www.paypal.me/colinpodell/10.00",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/colinodell",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/league/commonmark",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2024-12-29T14:10:59+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "league/config",
|
||||||
|
"version": "v1.2.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/thephpleague/config.git",
|
||||||
|
"reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3",
|
||||||
|
"reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"dflydev/dot-access-data": "^3.0.1",
|
||||||
|
"nette/schema": "^1.2",
|
||||||
|
"php": "^7.4 || ^8.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpstan/phpstan": "^1.8.2",
|
||||||
|
"phpunit/phpunit": "^9.5.5",
|
||||||
|
"scrutinizer/ocular": "^1.8.1",
|
||||||
|
"unleashedtech/php-coding-standard": "^3.1",
|
||||||
|
"vimeo/psalm": "^4.7.3"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-main": "1.2-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"League\\Config\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"BSD-3-Clause"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Colin O'Dell",
|
||||||
|
"email": "colinodell@gmail.com",
|
||||||
|
"homepage": "https://www.colinodell.com",
|
||||||
|
"role": "Lead Developer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Define configuration arrays with strict schemas and access values with dot notation",
|
||||||
|
"homepage": "https://config.thephpleague.com",
|
||||||
|
"keywords": [
|
||||||
|
"array",
|
||||||
|
"config",
|
||||||
|
"configuration",
|
||||||
|
"dot",
|
||||||
|
"dot-access",
|
||||||
|
"nested",
|
||||||
|
"schema"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"docs": "https://config.thephpleague.com/",
|
||||||
|
"issues": "https://github.com/thephpleague/config/issues",
|
||||||
|
"rss": "https://github.com/thephpleague/config/releases.atom",
|
||||||
|
"source": "https://github.com/thephpleague/config"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://www.colinodell.com/sponsor",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://www.paypal.me/colinpodell/10.00",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/colinodell",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2022-12-11T20:36:23+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "monolog/monolog",
|
"name": "monolog/monolog",
|
||||||
"version": "3.9.0",
|
"version": "3.9.0",
|
||||||
|
@ -1472,6 +1736,154 @@
|
||||||
],
|
],
|
||||||
"time": "2025-03-24T10:02:05+00:00"
|
"time": "2025-03-24T10:02:05+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "nette/schema",
|
||||||
|
"version": "v1.3.2",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/nette/schema.git",
|
||||||
|
"reference": "da801d52f0354f70a638673c4a0f04e16529431d"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/nette/schema/zipball/da801d52f0354f70a638673c4a0f04e16529431d",
|
||||||
|
"reference": "da801d52f0354f70a638673c4a0f04e16529431d",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"nette/utils": "^4.0",
|
||||||
|
"php": "8.1 - 8.4"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"nette/tester": "^2.5.2",
|
||||||
|
"phpstan/phpstan-nette": "^1.0",
|
||||||
|
"tracy/tracy": "^2.8"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.3-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"classmap": [
|
||||||
|
"src/"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"BSD-3-Clause",
|
||||||
|
"GPL-2.0-only",
|
||||||
|
"GPL-3.0-only"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "David Grudl",
|
||||||
|
"homepage": "https://davidgrudl.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Nette Community",
|
||||||
|
"homepage": "https://nette.org/contributors"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "📐 Nette Schema: validating data structures against a given Schema.",
|
||||||
|
"homepage": "https://nette.org",
|
||||||
|
"keywords": [
|
||||||
|
"config",
|
||||||
|
"nette"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/nette/schema/issues",
|
||||||
|
"source": "https://github.com/nette/schema/tree/v1.3.2"
|
||||||
|
},
|
||||||
|
"time": "2024-10-06T23:10:23+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "nette/utils",
|
||||||
|
"version": "v4.0.6",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/nette/utils.git",
|
||||||
|
"reference": "ce708655043c7050eb050df361c5e313cf708309"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/nette/utils/zipball/ce708655043c7050eb050df361c5e313cf708309",
|
||||||
|
"reference": "ce708655043c7050eb050df361c5e313cf708309",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "8.0 - 8.4"
|
||||||
|
},
|
||||||
|
"conflict": {
|
||||||
|
"nette/finder": "<3",
|
||||||
|
"nette/schema": "<1.2.2"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"jetbrains/phpstorm-attributes": "dev-master",
|
||||||
|
"nette/tester": "^2.5",
|
||||||
|
"phpstan/phpstan": "^1.0",
|
||||||
|
"tracy/tracy": "^2.9"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"ext-gd": "to use Image",
|
||||||
|
"ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()",
|
||||||
|
"ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()",
|
||||||
|
"ext-json": "to use Nette\\Utils\\Json",
|
||||||
|
"ext-mbstring": "to use Strings::lower() etc...",
|
||||||
|
"ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "4.0-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"classmap": [
|
||||||
|
"src/"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"BSD-3-Clause",
|
||||||
|
"GPL-2.0-only",
|
||||||
|
"GPL-3.0-only"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "David Grudl",
|
||||||
|
"homepage": "https://davidgrudl.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Nette Community",
|
||||||
|
"homepage": "https://nette.org/contributors"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.",
|
||||||
|
"homepage": "https://nette.org",
|
||||||
|
"keywords": [
|
||||||
|
"array",
|
||||||
|
"core",
|
||||||
|
"datetime",
|
||||||
|
"images",
|
||||||
|
"json",
|
||||||
|
"nette",
|
||||||
|
"paginator",
|
||||||
|
"password",
|
||||||
|
"slugify",
|
||||||
|
"string",
|
||||||
|
"unicode",
|
||||||
|
"utf-8",
|
||||||
|
"utility",
|
||||||
|
"validation"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/nette/utils/issues",
|
||||||
|
"source": "https://github.com/nette/utils/tree/v4.0.6"
|
||||||
|
},
|
||||||
|
"time": "2025-03-30T21:06:30+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "phpdocumentor/reflection-common",
|
"name": "phpdocumentor/reflection-common",
|
||||||
"version": "2.2.0",
|
"version": "2.2.0",
|
||||||
|
@ -7499,6 +7911,78 @@
|
||||||
],
|
],
|
||||||
"time": "2025-02-08T09:47:15+00:00"
|
"time": "2025-02-08T09:47:15+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "twig/markdown-extra",
|
||||||
|
"version": "v3.20.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/twigphp/markdown-extra.git",
|
||||||
|
"reference": "f4616e1dd375209dacf6026f846e6b537d036ce4"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/twigphp/markdown-extra/zipball/f4616e1dd375209dacf6026f846e6b537d036ce4",
|
||||||
|
"reference": "f4616e1dd375209dacf6026f846e6b537d036ce4",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=8.1.0",
|
||||||
|
"symfony/deprecation-contracts": "^2.5|^3",
|
||||||
|
"twig/twig": "^3.13|^4.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"erusev/parsedown": "dev-master as 1.x-dev",
|
||||||
|
"league/commonmark": "^1.0|^2.0",
|
||||||
|
"league/html-to-markdown": "^4.8|^5.0",
|
||||||
|
"michelf/php-markdown": "^1.8|^2.0",
|
||||||
|
"symfony/phpunit-bridge": "^6.4|^7.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"Resources/functions.php"
|
||||||
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"Twig\\Extra\\Markdown\\": ""
|
||||||
|
},
|
||||||
|
"exclude-from-classmap": [
|
||||||
|
"/Tests/"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Fabien Potencier",
|
||||||
|
"email": "fabien@symfony.com",
|
||||||
|
"homepage": "http://fabien.potencier.org",
|
||||||
|
"role": "Lead Developer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "A Twig extension for Markdown",
|
||||||
|
"homepage": "https://twig.symfony.com",
|
||||||
|
"keywords": [
|
||||||
|
"html",
|
||||||
|
"markdown",
|
||||||
|
"twig"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"source": "https://github.com/twigphp/markdown-extra/tree/v3.20.0"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://github.com/fabpot",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/twig/twig",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2025-01-31T20:45:36+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "twig/twig",
|
"name": "twig/twig",
|
||||||
"version": "v3.20.0",
|
"version": "v3.20.0",
|
||||||
|
|
|
@ -0,0 +1,81 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Controller;
|
||||||
|
|
||||||
|
use SplFileInfo;
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
|
use Symfony\Component\Filesystem\Filesystem;
|
||||||
|
use Symfony\Component\Finder\Finder;
|
||||||
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
|
use Symfony\Component\Process\Process;
|
||||||
|
use Symfony\Component\Routing\Attribute\Route;
|
||||||
|
|
||||||
|
final class MainController extends AbstractController
|
||||||
|
{
|
||||||
|
#[Route('/sync', 'app_sync')]
|
||||||
|
public function sync(): Response
|
||||||
|
{
|
||||||
|
$gitDir = $this->getParameter('kernel.project_dir') . '/var/data';
|
||||||
|
|
||||||
|
new Process(['git', '-C', $gitDir, 'fetch'])->mustRun();
|
||||||
|
new Process(['git', '-C', $gitDir, 'reset', '--hard', 'FETCH_HEAD'])->mustRun();
|
||||||
|
|
||||||
|
return new Response('Updated.');
|
||||||
|
}
|
||||||
|
|
||||||
|
#[Route('/{path}', 'app_index', ['path' => '.+'])]
|
||||||
|
public function index(string $path): Response
|
||||||
|
{
|
||||||
|
$gitDir = $this->getParameter('kernel.project_dir') . '/var/data';
|
||||||
|
|
||||||
|
|
||||||
|
// ---------------------------------------------- Get file contents ---
|
||||||
|
|
||||||
|
$fullPath = sprintf(
|
||||||
|
'%s/var/data/%s',
|
||||||
|
$this->getParameter('kernel.project_dir'),
|
||||||
|
$path,
|
||||||
|
);
|
||||||
|
|
||||||
|
$fs = new Filesystem();
|
||||||
|
if (!$fs->exists($fullPath)) throw $this->createNotFoundException();
|
||||||
|
$contents = $fs->readFile($fullPath);
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------------- Get data tree ---
|
||||||
|
|
||||||
|
$finder = new Finder();
|
||||||
|
$finder->files()->in($this->getParameter('kernel.project_dir') . '/var/data/');
|
||||||
|
if (!$finder->hasResults()) throw $this->createNotFoundException();
|
||||||
|
|
||||||
|
|
||||||
|
// Convert flat list into a nested tree
|
||||||
|
$tree = [];
|
||||||
|
foreach ($finder as $file) {
|
||||||
|
/** @var SplFileInfo $file */
|
||||||
|
|
||||||
|
$current = &$tree;
|
||||||
|
|
||||||
|
// Dunno why it is undefined, it works
|
||||||
|
foreach (explode('/', $file->getRelativePath()) as $part) {
|
||||||
|
if ($part === '') break;
|
||||||
|
|
||||||
|
if (!isset($current[$part])) {
|
||||||
|
$current[$part] = [];
|
||||||
|
}
|
||||||
|
$current = &$current[$part];
|
||||||
|
}
|
||||||
|
|
||||||
|
$current[] = $file;
|
||||||
|
|
||||||
|
//usort($current, fn($a, $b) => strcmp(implode('/', $a), implode('/', $b)));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->render('main/index.html.twig', [
|
||||||
|
'path' => $path,
|
||||||
|
'contents' => $contents,
|
||||||
|
'tree' => $tree,
|
||||||
|
'version' => new Process(['git', '-C', $gitDir, 'rev-parse', 'HEAD'])->mustRun()->getOutput(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html class="bg-neutral-1 color-white">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<title>{% block title %}Welcome!{% endblock %}</title>
|
<title>{% block title %}Welcome!{% endblock %}</title>
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
{% extends 'base.html.twig' %}
|
||||||
|
|
||||||
|
{% block title %}{{ path }} | Gaisen{% endblock %}
|
||||||
|
|
||||||
|
{% macro render_tree(tree) %}
|
||||||
|
<ul>
|
||||||
|
{% for key, value in tree %}
|
||||||
|
<li>
|
||||||
|
{% if value is iterable and value|length > 0 %}
|
||||||
|
{{ key }}
|
||||||
|
{{ _self.render_tree(value) }} {# Recursive call #}
|
||||||
|
{% else %}
|
||||||
|
<a href="{{ path('app_index', {
|
||||||
|
path: value.relativePathname
|
||||||
|
}) }}">
|
||||||
|
{{ value.filename }}
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% endmacro %}
|
||||||
|
|
||||||
|
{% block body %}
|
||||||
|
<div class="bg-neutral-3 border-bottom w-100 p-2 fs-1 ps-3">
|
||||||
|
Gaisen
|
||||||
|
</div>
|
||||||
|
<div class="d-flex flex-row">
|
||||||
|
<div class="border-end bg-neutral-2 p-3">
|
||||||
|
{{ _self.render_tree(tree) }}
|
||||||
|
</div>
|
||||||
|
<div class="p-3">
|
||||||
|
{{ contents|markdown_to_html }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="bg-neutral-3 border-top w-100 p-2">
|
||||||
|
Version: <span class="text-muted">{{ version }}</span>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
Loading…
Reference in New Issue