Compare commits

...

2 commits

Author SHA1 Message Date
coon 67c31634f4 static: add basic file tree view 2023-11-29 13:30:24 +01:00
coon 343e31afa3 w3c compliance stuff 2023-11-29 13:27:40 +01:00
3 changed files with 154 additions and 8 deletions

View file

@ -3,6 +3,7 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>Sanic - Flexbox layout</title> <title>Sanic - Flexbox layout</title>
<link rel="stylesheet" href="treeview.css">
<link rel="stylesheet" href="sanic.css"> <link rel="stylesheet" href="sanic.css">
<script src="sanic.js"></script> <script src="sanic.js"></script>
</head> </head>
@ -22,24 +23,24 @@
</div> </div>
<div> <div>
<label for="progress"></label> <label for="progress"></label>
<input type="range" id="progress" name="progress" min="0" max="100" /> <input type="range" id="progress" name="progress" min="0" max="100">
</div> </div>
</div> </div>
<div id="queue-volume-controls"> <div id="queue-volume-controls">
<div id="queue-controls"> <div id="queue-controls">
<div id="queue-playback-order-controls"> <div id="queue-playback-order-controls">
<div> <div>
<input type="checkbox" id="repeat" name="repeat" /> <input type="checkbox" id="repeat" name="repeat">
<label for="repeat">repeat</label> <label for="repeat">repeat</label>
</div> </div>
<div> <div>
<input type="checkbox" id="shuffle" name="shuffle" /> <input type="checkbox" id="shuffle" name="shuffle">
<label for="shuffle">shuffle</label> <label for="shuffle">shuffle</label>
</div> </div>
</div> </div>
<div id="queue-xfade-control"> <div id="queue-xfade-control">
<div> <div>
<label for="xfade">xfade</label> xfade
</div> </div>
<div id="queue-xfade-buttons"> <div id="queue-xfade-buttons">
<button>-</button> <button>-</button>
@ -50,18 +51,18 @@
</div> </div>
<div id="volume-control"> <div id="volume-control">
<label for="volume"></label> <label for="volume"></label>
<input id="volume" name="volume" type="range" min="1" max="100" /> <input id="volume" name="volume" type="range" min="1" max="100">
</div> </div>
</div> </div>
<div class="track-info"> <div class="track-info">
<p>Now playing: 00:00:00/100:00:00</p> <p>Now playing: 00:00:00/100:00:00</p>
<label for="track">track</label> <label for="track">track</label>
<input type="text" id="track" name="track" disabled /> <input type="text" id="track" name="track" disabled>
</div> </div>
<div id="top-logo-container"> <div id="top-logo-container">
<div id="top-logo"> <div id="top-logo">
<img id="sanic-logo" src="../img/sanic-logo.webp"> <img id="sanic-logo" alt="sanic logo" src="../img/sanic-logo.webp">
Sanic Sanic
</div> </div>
</div> </div>
@ -140,7 +141,54 @@
</div> </div>
<div id="controls_bottom"> <div id="controls_bottom">
<div id="playlist_controls"> <div id="playlist_controls">
playlist controls <ul class="tree">
<li>
<details open>
<summary>/</summary>
<ul>
<li>
<details>
<summary>00_music</summary>
<ul>
<li>autosort</li>
<li>reimport</li>
<li>unsortable</li>
<li>youtube</li>
</ul>
</details>
</li>
<li>
<details>
<summary>01_incoming</summary>
<ul>
<li>coon</li>
<li>cascha</li>
<li>Xen</li>
</ul>
</details>
</li>
<li>
<details>
<summary>02_megablast</summary>
<ul>
<li>dnb</li>
<li>mix</li>
</ul>
</details>
</li>
<li>
<details>
<summary>03_mfs</summary>
<ul>
<li>ambient</li>
<li>electronic</li>
</ul>
</details>
</li>
</ul>
</details>
</li>
</ul>
</div> </div>
<div id="playlist_tracklist"> <div id="playlist_tracklist">
<table> <table>

View file

@ -0,0 +1,91 @@
/* https://iamkate.com/code/tree-views/ */
/* Custom properties */
.tree {
--spacing : 1.0rem;
--radius : 10px;
}
/* Padding */
.tree li {
display : block;
position : relative;
padding-left : calc(2 * var(--spacing) - var(--radius) - 2px + 10px);
}
.tree ul {
margin-left : calc(var(--radius) - var(--spacing));
padding-left : 0;
}
/* Vertical lines */
.tree ul li {
border-left : 2px solid #ddd;
}
.tree ul li:last-child {
border-color : transparent;
}
/* Horizontal lines */
.tree ul li::before {
content : '';
display : block;
position : absolute;
top : calc(var(--spacing) / -2);
left : -2px;
width : calc(var(--spacing) + 2px);
height : calc(var(--spacing) + 1px);
border : solid #ddd;
border-width : 0 0 2px 2px;
}
/* Summaries */
.tree summary {
display : block;
cursor : pointer;
}
.tree summary::marker,
.tree summary::-webkit-details-marker {
display : none;
}
.tree summary:focus {
outline : none;
}
.tree summary:focus-visible {
outline : 1px dotted #000;
}
/* Markers */
.tree li::after,
.tree summary::before {
content : '';
display : block;
position : absolute;
top : calc(var(--spacing) / 2 - var(--radius));
left : calc(var(--spacing) - var(--radius) - 1px);
width : calc(2 * var(--radius));
height : calc(2 * var(--radius));
border-radius : 50%;
background : #ddd;
}
/* Expand and collapse buttons */
.tree summary::before {
z-index : 1;
background : #696 url('../img/expand-collapse.svg') 0 0;
}
.tree details[open] > summary::before {
background-position : calc(-2 * var(--radius)) 0;
}

View file

@ -0,0 +1,7 @@
<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg" width="40" height="20">
<g fill="#fff">
<path d="m5 9h4v-4h2v4h4v2h-4v4h-2v-4h-4z"/>
<path d="m25 9h10v2h-10z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 199 B