Compare commits

8 Commits

Author SHA1 Message Date
82dc1b846a Chvíle
All checks were successful
Build / build (push) Successful in 5m39s
2024-02-10 13:56:38 +01:00
d4a7fff83d Tajemství rituální obřízky 2024-02-10 00:02:48 +01:00
852a3c73bb Žlutá 2024-02-10 00:02:30 +01:00
fdc5b3e911 Optimize font rendering
All checks were successful
Build / build (push) Successful in 5m37s
2024-02-09 09:52:59 +01:00
d5cc96a647 Search input reset 2024-02-09 09:45:56 +01:00
4fe838eb2a Better colors and styling
All checks were successful
Build / build (push) Successful in 5m29s
2024-02-08 22:06:47 +01:00
78e16a9851 Add favicon 2024-02-08 14:08:40 +01:00
e35f3f5494 Add filtering
All checks were successful
Build / build (push) Successful in 5m32s
2024-02-08 13:50:24 +01:00
13 changed files with 320 additions and 47 deletions

57
content/chvile/chvile.cho Normal file
View File

@ -0,0 +1,57 @@
{title: Chvíle}
{artist: Hop trop}
{columns: 2}
{diagrams: off}
{define: "Em (Am)" copy Em}
{define: "Bm (Em)" copy Bm}
{define: "Am (Dm)" copy Am}
{define: "A (D)" copy A}
{define: "C (F)" copy C}
{c: Akordy v závorce platí pro kapodastr na 7. poli}
{sov}
[Em (Am)]Mám rád ty chvíle, kdy noc už pomalu [Bm (Em)]končí,
[Am (Dm)]chvíle, co patřej' jen [Bm (Em)]těm, co neusí[Em (Am)]naj',
[Em (Am)]toulavejm bláznům, když právě s jarem se [Bm (Em)]loučí
a [Am (Dm)]za dobrý slovo ti [Bm (Em)]srdce svý na dlani [Em (Am)]daj'.
{eov}
{sov}
[Em (Am)]Mám rád ty chvíle, kdy holkám ve vočích [Bm (Em)]svítí
[Am (Dm)]slunce, když do korun [Bm (Em)]stromů začlo se [Em (Am)]drát,
[Em (Am)]stejně jak v kapičkách rosy na pavoučích [Bm (Em)]sítích,
to [Am (Dm)]najednou chce se mi [Bm (Em)]brečet a zároveň [Em (Am)]smát.
{eov}
{soc}
Ty rána s [A (D)]vůní borový [Em (Am)]smůly
měly by [A (D)]zůstat navždycky v [Em (Am)]nás,
ty rána s [C (F)]vůní sekaný [Bm (Em)]trávy
a ohně co [Am (Dm)]právě [Bm (Em)] pomalu [Em (Am)]zhas'.
{eoc}
{column_break}
{sov}
[Em (Am)]Mám rád ty chvíle, kdy kluci v duchu si [Bm (Em)]říkaj',
[Am (Dm)]jak je to nádherný, [Bm (Em)]léto před sebou [Em (Am)]mít.
[Em (Am)]Spolu si přejou, ať moc rychle dny neu[Bm (Em)]tíkaj'
a [Am (Dm)]trápení jsou někde v [Bm (Em)]dálce, a kolem je [Em (Am)]klid.
{eov}
{sov}
[Em (Am)]Mám rád ty chvíle, kdy noc už pomalu [Bm (Em)]končí,
[Am (Dm)]chvíle, co patřej' jen [Bm (Em)]těm, co neusí[Em (Am)]naj',
[Em (Am)]toulavejm bláznům, když právě s jarem se [Bm (Em)]loučí
a [Am (Dm)]za dobrý slovo ti [Bm (Em)]srdce svý na dlani [Em (Am)]daj'.
{eov}
{soc}
Ty rána s [A (D)]vůní borový [Em (Am)]smůly
měly by [A (D)]zůstat navždycky v [Em (Am)]nás,
ty rána s [C (F)]vůní sekaný [Bm (Em)]trávy
a ohně co [Am (Dm)]právě [Bm (Em)] pomalu [Em (Am)]zhas'.
{eoc}

6
content/chvile/index.md Normal file
View File

@ -0,0 +1,6 @@
+++
title = "Chvíle"
[taxonomies]
category = ["classic"]
artist = ["Hop trop"]
+++

View File

@ -0,0 +1,6 @@
+++
title = "Tajemství rituální obřízky"
[taxonomies]
category = ["mixtape"]
artist = ["Morčata na útěku"]
+++

View File

@ -0,0 +1,58 @@
{title: Tajemství rituální obřízky}
{artist: Morčata na útěku}
{album: Jsme trochu jiný}
{columns: 2}
{sov}
[F]Náš rabín mě řekl "už seš [C]velkej chlap",
[Am]vzal mě kolem ramen za pin[G]ďoura chňap.
[F]Nabrousil si velkej vostrej [C]sekáček
a [Am]sloupnul ho tak snadno [G]jak Libereckej [F]špekáček.[C]
{eov}
{sob}
[Am] [G] [F] [C] [Am] [G]
{eob}
{sov}
[F]Moje teta tvoje teta [C]svazačka,
[Am]říká se jim baba vobře[G]zavačka.
S [F]modlitbičkou na rtech v rytmu [C]dechovky
[Am]vobšvicnou ti ho víčkem vod [G]plechovky.
{eov}
{soc}
[F]Když chtějí být chlapi bez své [C]kůžičky,
[Am]tak si na to vezmou velký [G]nužtičky.
[F]Co je na tom že to není [C]žádnej modní hit.
[Am]Holej jako prst ho prostě [G]musíš mít.
{eoc}
{sov}
[F]Vem si kudlu hoď šulina [C]na špalek
a [Am]nepoškoď si svůj močovej [G]kanálek.
[F]Představ si to jak když krájíš [C]slaninu
a [Am]uhňápni tu hnusnou [G]přebytečnou tkaninu.
{eov}
{column_break}
{soc}
[F]Když chtějí být chlapi bez své [C]kůžičky,
[Am]tak si na to vezmou velký [G]nužtičky.
[F]Nedá se nic dělat, naro[C]dil ses jako žid,
[Am]holej jako prst ho prostě [G]musíš mít.
{eoc}
{sov}
[F]Je to jako jarní vánek [C]na poli.
[Am]Trošičku to štípne ale [G]nebolí.
[F]Bez kůžičky změní se ti [C]celej svět.
[Am]Všichni chlapci ti to budou [G]závidět.
{eov}
{soc}
[F]Když chtějí být chlapi bez své [C]kůžičky,
[Am]tak si na to vezmou velký [G]nužtičky.
[F]Vem na to sekeru pilu [C]nebo zubní nit.
[Am]Holej jako prst ho prostě [G]musíš mít.
{eoc}

6
content/zluta/index.md Normal file
View File

@ -0,0 +1,6 @@
+++
title = "Žlutá"
[taxonomies]
category = ["mixtape"]
artist = ["Morčata na útěku"]
+++

53
content/zluta/zluta.cho Normal file
View File

@ -0,0 +1,53 @@
{title: Žlutá}
{artist: Morčata na útěku}
{album: Tradice z krabice}
{columns: 2}
[G] [D] [C] [D] [Am] [G] [D]
{sov}
[G]Žlutý je [D]pivo, který [C]denně pijem,[D]
[G]žlutá je [D]moč kterou na [C]patník chčijem,[D]
[G]žlutý je [D]slunko, který [C]vypálí zrak,[D]
žlutá je [F]krutá, [C]už je to [G]tak!
{eov}
{sov}
[G]Žlutý jsou [D]prošlý [C]šunkový [D]rolky,
[G]žlutý jsou [D]prej i [C]na Hokajdu [D]holky,
[G]žlutý má [D]hadry aj [C]Dan Neko[D]nečný,
krásně [F]žlutý je žluklý li[C]kér va[G]ječný.
{eov}
{soc}
Žlutej je [C]pes, ve kterém zpívá starej Hejmovic [G]kluk
i tohle je [F]jeho [C]skladba a [F]nám je to [G]fuk,
žlutej je [C]Pták Čau, kterýho rozjezdil [G]vlak,
žlutá je [F]krutá! [C]Už je to [G]tak.
{eoc}
{column_break}
{sov}
[G]Žlutej je [D]ožralej [C]školník [D]Willie,
[G]žlutý jsou [D]prej i jeho [C]igelitky z [D]Billy
[G]vlaky a [D]autobusy [C]Študent A[D]gency
moje [F]játra, se žlouten[C]kou malí ko[G]jenci.
{eov}
{soc}
Jako [C]zahrada když flákneš kosou do kuřá[G]tek,
žlutý [F]jsou fleky na [C]trenclích, jetej [F]karbaná[G]tek,
žlutý je [C]slunko, který vypálí [G]zrak,
žlutá je [F]krutá! [C]Už je to [G]tak!
{eoc}
{sob}
[F] [C] [F] [Am7] [G] [D]
{eob}
{soc}
Žlutej je [C]pes, ve kterém zpívá starej Hejmovic [G]kluk
i tohle je [F]jeho [C]skladba a [F]nám je to [G]fuk,
žlutej je [C]Pták Čau, kterýho rozjezdil [G]vlak,
žlutá je [F]krutá! [C]Už je to [G]tak.
{eoc}

1
sass/_fonts.scss Normal file
View File

@ -0,0 +1 @@
@import url('https://fonts.googleapis.com/css2?family=Noto+Sans:ital,wght@0,400;0,600;1,400;1,600&display=swap');

View File

@ -1,11 +1,15 @@
@import "fonts";
$col-white: #fff;
$col-black: #181818;
$col-black: #2e3440;
body {
margin: 0;
background-color: $col-white;
color: $col-black;
background-color: $col-black;
color: $col-white;
font-family: "Noto Sans", Tahoma, Geneva, Verdana, sans-serif;
text-rendering: geometricPrecision;
}
table {
@ -13,7 +17,7 @@ table {
}
.song {
padding: 2em;
padding: 1em 0 0 1em;
}
.title {
@ -40,7 +44,7 @@ table {
display: block;
height: 100%;
width: 2px;
background-color: $col-black;
background-color: $col-white;
}
}
@ -53,22 +57,22 @@ table {
.comment {
display: inline-block;
padding: .25em .5em;
background-color: #bbb;
color: $col-black;
background-color: #4c566a;
color: $col-white;
}
@media (prefers-color-scheme: dark) {
@media (prefers-color-scheme: light) {
body {
background-color: $col-black;
color: $col-white;
background-color: $col-white;
color: $col-black;
}
.chorus:before {
background-color: $col-white;
background-color: $col-black;
}
.comment {
background-color: #585858;
color: $col-white;
background-color: #d8dee9;
color: $col-black;
}
}

View File

@ -1,3 +1,5 @@
@import "fonts";
$width-mobile: 900px;
* {
@ -7,6 +9,15 @@ $width-mobile: 900px;
body {
margin: 0;
padding: 0;
background-color: #2e3440;
color: #fff;
font-family: "Noto Sans", Tahoma, Geneva, Verdana, sans-serif;
text-rendering: geometricPrecision;
@media (prefers-color-scheme: light) {
background-color: #fff;
color: #2e3440;
}
}
main.songs {
@ -23,7 +34,7 @@ main.songs {
.filters {
display: grid;
grid-template-columns: 2fr 1fr 1fr;
grid-template-columns: 1fr 1fr 1fr 1fr;
gap: 1em;
margin: 1em 0;
@ -32,21 +43,64 @@ main.songs {
&.hidden { display: none }
&>* {
border: 1px solid #aaa;
border-radius: .5em;
padding: .5em 1em;
font-size: 1em;
box-shadow: rgba(15, 17, 21, 0.5) 0px 3px 6px 0px;
background-color: #3b4252;
color: inherit;
@media (prefers-color-scheme: light) {
background-color: #fff;
color: #2e3440;
}
}
form {
grid-column: 1 / 3;
display: flex;
overflow: hidden;
input {
font-size: inherit;
border: 0;
background-color: inherit;
color: inherit;
}
input[type="search"] {
flex-grow: 1;
padding: .75em 1em;
}
input[type="reset"] {
cursor: pointer;
width: 3em;
padding: 0;
background-size: auto 1.5em;
background-position: center;
background-repeat: no-repeat;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='rgba(160,163,170,1)'%3E%3Cpath d='M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20ZM12 10.5858L14.8284 7.75736L16.2426 9.17157L13.4142 12L16.2426 14.8284L14.8284 16.2426L12 13.4142L9.17157 16.2426L7.75736 14.8284L10.5858 12L7.75736 9.17157L9.17157 7.75736L12 10.5858Z'%3E%3C/path%3E%3C/svg%3E");
}
}
&>.button {
font-weight: bold;
text-align: center;
cursor: pointer;
user-select: none;
padding: .75em 1em;
&.selected {
border-color: #333;
box-shadow: rgba(0, 0, 0, 0.2) 0 0 10px;
color: #fff;
&[data-category="mixtape"] { background-color: #bf616a }
&[data-category="classic"] { background-color: #5e81ac }
}
}
@media only screen and (max-width: $width-mobile) {
grid-template-columns: 1fr 1fr;
}
}
.song-list {
@ -57,25 +111,26 @@ main.songs {
display: flex;
justify-content: space-between;
align-items: center;
gap: 1em;
padding: .5em;
padding-left: 1em;
border-radius: .5em;
box-shadow: rgba(0, 0, 0, 0.2) 0 0 10px;
box-shadow: rgba(15, 17, 21, 0.5) 0px 3px 6px 0px;
border-left: .7em solid #000;
background-color: #3b4252;
&.hidden { display: none }
&.mixtape { border-color: #654575 }
&.classic { border-color: #a55d05 }
&.mixtape { border-color: #bf616a }
&.classic { border-color: #5e81ac }
.meta {
display: flex;
flex-direction: column;
justify-content: center;
.title {
font-weight: bold;
}
.title { font-weight: bold }
.artist { font-size: .8em }
}
.links {
@ -83,8 +138,8 @@ main.songs {
gap: .5em;
&>* {
height: 3em;
width: 3em;
height: 2.75em;
width: 2.75em;
background-position: center;
background-repeat: no-repeat;
background-size: auto 1.5em;
@ -92,22 +147,40 @@ main.songs {
}
.html {
background-color: #335872;
background-color: #5e81ac;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='rgba(255,255,255,1)'%3E%3Cpath d='M16 2L21 7V21.0082C21 21.556 20.5551 22 20.0066 22H3.9934C3.44476 22 3 21.5447 3 21.0082V2.9918C3 2.44405 3.44495 2 3.9934 2H16ZM17.6569 12L14.1213 8.46447L12.7071 9.87868L14.8284 12L12.7071 14.1213L14.1213 15.5355L17.6569 12ZM6.34315 12L9.87868 15.5355L11.2929 14.1213L9.17157 12L11.2929 9.87868L9.87868 8.46447L6.34315 12Z'%3E%3C/path%3E%3C/svg%3E");
}
.pdf {
background-color: #67503a;
background-color: #bf616a;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='rgba(255,255,255,1)'%3E%3Cpath d='M3.9985 2C3.44749 2 3 2.44405 3 2.9918V21.0082C3 21.5447 3.44476 22 3.9934 22H20.0066C20.5551 22 21 21.5489 21 20.9925L20.9997 7L16 2H3.9985ZM10.5 7.5H12.5C12.5 9.98994 14.6436 12.6604 17.3162 13.5513L16.8586 15.49C13.7234 15.0421 10.4821 16.3804 7.5547 18.3321L6.3753 16.7191C7.46149 15.8502 8.50293 14.3757 9.27499 12.6534C10.0443 10.9373 10.5 9.07749 10.5 7.5ZM11.1 13.4716C11.3673 12.8752 11.6043 12.2563 11.8037 11.6285C12.2754 12.3531 12.8553 13.0182 13.5102 13.5953C12.5284 13.7711 11.5666 14.0596 10.6353 14.4276C10.8 14.1143 10.9551 13.7948 11.1 13.4716Z'%3E%3C/path%3E%3C/svg%3E");
}
}
@media (prefers-color-scheme: light) {
background-color: #fff;
color: #2e3440;
}
}
}
}
iframe.song {
display: block;
width: 100%;
main.song {
display: flex;
flex-direction: column;
max-width: 50em;
min-height: 100vh;
border: 0;
margin: 0 auto;
padding-left: .5em;
iframe {
display: block;
width: 100%;
border: 0;
flex-grow: 1;
}
.controls {
display: none; // Temporary
}
}

BIN
static/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

View File

@ -1,6 +1,7 @@
const filters = document.querySelector(".filters");
const buttons = Array.from(filters.querySelectorAll(".button"));
const search = document.querySelector("input[type='text']");
const filters = document.querySelector(".filters");
const buttons = Array.from(filters.querySelectorAll(".button"));
const search = document.querySelector("input[type='search']");
const form = document.querySelector("form");
const songList = document.querySelector(".song-list");
let selectedCategory = null;
@ -12,7 +13,7 @@ function buttonToggle(clickedButton) {
selectedCategory = button.dataset.category;
} else {
button.classList.remove("selected");
selectedCategory = null;
if (button.dataset.category == selectedCategory) selectedCategory = null;
}
});
filterSongs();
@ -29,7 +30,9 @@ function filterSongs() {
}
// Event listeners
search.addEventListener("keyup", filterSongs);
search.addEventListener("input", filterSongs);
// Filtering happens before the reset itself without this timeout
form.addEventListener("reset", () => setTimeout(filterSongs, 0));
buttons.forEach(button => button.addEventListener("click", () => buttonToggle(button)));
// Normalize song titles

View File

@ -6,15 +6,18 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}{{ config.title }}{% endblock %}</title>
<link rel="stylesheet" href="{{ get_url(path="/style.css") }}">
<link rel="icon" href="favicon.svg">
<link rel="icon" type="image/png" href="{{ get_url(path="/favicon.png") }}">
</head>
<body>
{% block content %}
<main class="songs">
<section class="filters">
<input type="text" placeholder="Hledat">
<div class="button" data-category="classic">classic</div>
<div class="button" data-category="mixtape">mixtape</div>
<form>
<input type="search" placeholder="Hledat">
<input type="reset" value="">
</form>
<div class="button" data-category="classic">Classic</div>
<div class="button" data-category="mixtape">Mixtape</div>
</section>
<section class="song-list">
{% for song in section.pages %}

View File

@ -1,8 +1,11 @@
{% extends "index.html" %}
{% block content %}
{% for asset in page.assets %}
{% if asset is matching(page.slug~"[.](html)$") %}
<iframe class="song" src="{{ asset }}"></iframe>
{% endif %}
{% endfor %}
<main class="song">
{% for asset in page.assets %}
{% if asset is matching(page.slug~"[.](html)$") %}
<iframe class="song" src="{{ asset }}"></iframe>
<div class="controls">controls</div>
{% endif %}
{% endfor %}
</main>
{% endblock %}