chore: remove generated deploy files

This commit is contained in:
Leon Schwarzäugl 2025-12-31 03:18:56 +01:00 committed by Leon Schwarzäugl
parent 568301d1da
commit 7536167677
4 changed files with 470 additions and 36928 deletions

2
.gitignore vendored
View file

@ -7,3 +7,5 @@ result
*.bak *.bak
.pre-commit-config.yaml .pre-commit-config.yaml
.direnv .direnv
/index.html
/style.css

View file

@ -121,7 +121,15 @@ window.addEventListener('load', addDarkmodeWidget);
#+begin_export html #+begin_export html
<script> <script>
(function() { (function() {
// Create pinned panel if it doesn't exist function ready(fn) {
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', fn);
} else {
fn();
}
}
ready(function initPinned() {
let pinnedPanel = document.getElementById('pinned-panel'); let pinnedPanel = document.getElementById('pinned-panel');
if (!pinnedPanel) { if (!pinnedPanel) {
pinnedPanel = document.createElement('aside'); pinnedPanel = document.createElement('aside');
@ -136,7 +144,6 @@ window.addEventListener('load', addDarkmodeWidget);
document.body.appendChild(pinnedPanel); document.body.appendChild(pinnedPanel);
} }
// Create show button (visible when panel is hidden)
let showBtn = document.getElementById('show-pinned-btn'); let showBtn = document.getElementById('show-pinned-btn');
if (!showBtn) { if (!showBtn) {
showBtn = document.createElement('button'); showBtn = document.createElement('button');
@ -149,9 +156,11 @@ window.addEventListener('load', addDarkmodeWidget);
const content = document.getElementById('content'); const content = document.getElementById('content');
const pinnedList = document.getElementById('pinned-list'); const pinnedList = document.getElementById('pinned-list');
const toggleBtn = document.getElementById('toggle-pinned-btn'); const toggleBtn = document.getElementById('toggle-pinned-btn');
const pinnedItems = new Map(); // href -> { li: <li>, btn: <button> }
// Toggle panel visibility if (!content || !pinnedList || !toggleBtn) return;
const pinnedItems = new Map();
function hidePinnedPanel() { function hidePinnedPanel() {
pinnedPanel.classList.add('hidden'); pinnedPanel.classList.add('hidden');
content.classList.add('pinned-hidden'); content.classList.add('pinned-hidden');
@ -167,75 +176,102 @@ window.addEventListener('load', addDarkmodeWidget);
toggleBtn.addEventListener('click', hidePinnedPanel); toggleBtn.addEventListener('click', hidePinnedPanel);
showBtn.addEventListener('click', showPinnedPanel); showBtn.addEventListener('click', showPinnedPanel);
// Add pin buttons to all TOC links function attachPinBehavior(pinBtn, href, text) {
const tocLinks = document.querySelectorAll('#text-table-of-contents a'); if (!href) return;
tocLinks.forEach(link => { if (!pinnedItems.has(href)) {
// If this link is already wrapped, skip pinnedItems.set(href, { li: null, btns: new Set() });
if (link.parentElement && link.parentElement.classList.contains('toc-entry')) {
return;
} }
const entry = pinnedItems.get(href);
entry.btns.add(pinBtn);
const li = link.closest('li'); pinBtn.textContent = entry.li ? '[unpin]' : '[pin]';
if (!li) return;
// Wrap link in a container span to manage hover pinBtn.addEventListener('click', function(e) {
const wrapper = document.createElement('span');
wrapper.className = 'toc-entry';
// Move link into wrapper
li.insertBefore(wrapper, link);
wrapper.appendChild(link);
// Create pin button
const pinBtn = document.createElement('button');
pinBtn.className = 'toc-pin-btn';
pinBtn.type = 'button';
pinBtn.textContent = '📌';
wrapper.appendChild(pinBtn);
pinBtn.addEventListener('click', (e) => {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
const current = pinnedItems.get(href);
if (!current) return;
const href = link.getAttribute('href'); if (current.li) {
const text = link.textContent.trim(); if (current.li.parentElement) {
current.li.parentElement.removeChild(current.li);
// Toggle behavior
if (pinnedItems.has(href)) {
// Already pinned -> unpin
const { li: existingLi } = pinnedItems.get(href);
if (existingLi && existingLi.parentElement) {
existingLi.parentElement.removeChild(existingLi);
}
pinnedItems.delete(href);
pinBtn.textContent = '📌';
return;
} }
current.li = null;
current.btns.forEach(b => b.textContent = '[pin]');
} else {
const li = document.createElement('li');
// Not pinned -> pin it const a = document.createElement('a');
const pinnedLi = document.createElement('li'); a.href = href;
a.textContent = text;
const pinnedLink = document.createElement('a');
pinnedLink.href = href;
pinnedLink.textContent = text;
const removeBtn = document.createElement('button'); const removeBtn = document.createElement('button');
removeBtn.className = 'pin-remove'; removeBtn.className = 'pin-remove';
removeBtn.type = 'button'; removeBtn.type = 'button';
removeBtn.textContent = '✕'; removeBtn.textContent = '✕';
removeBtn.addEventListener('click', () => { removeBtn.addEventListener('click', () => {
pinnedItems.delete(href); const cur = pinnedItems.get(href);
pinnedLi.remove(); if (!cur) return;
pinBtn.textContent = '📌'; if (cur.li && cur.li.parentElement) {
cur.li.parentElement.removeChild(cur.li);
}
cur.li = null;
cur.btns.forEach(b => b.textContent = '[pin]');
}); });
pinnedLi.appendChild(pinnedLink); li.appendChild(a);
pinnedLi.appendChild(removeBtn); li.appendChild(removeBtn);
pinnedList.appendChild(pinnedLi); pinnedList.appendChild(li);
pinnedItems.set(href, { li: pinnedLi, btn: pinBtn }); current.li = li;
pinBtn.textContent = '[unpin]'; current.btns.forEach(b => b.textContent = '[unpin]');
}
});
}
const tocLinks = document.querySelectorAll('#text-table-of-contents a');
tocLinks.forEach(link => {
if (link.parentElement && link.parentElement.classList.contains('toc-entry')) {
return;
}
const li = link.closest('li');
if (!li) return;
const wrapper = document.createElement('span');
wrapper.className = 'toc-entry';
li.insertBefore(wrapper, link);
wrapper.appendChild(link);
const pinBtn = document.createElement('button');
pinBtn.className = 'toc-pin-btn';
pinBtn.type = 'button';
pinBtn.textContent = '[pin]';
wrapper.appendChild(pinBtn);
const href = link.getAttribute('href');
const text = link.textContent.trim();
attachPinBehavior(pinBtn, href, text);
});
const headers = content.querySelectorAll('h2, h3, h4, h5');
headers.forEach(header => {
const id = header.getAttribute('id');
if (!id) return;
if (header.querySelector('.toc-pin-btn')) return; // avoid duplicates
const href = '#' + id;
const text = header.textContent.trim();
const pinBtn = document.createElement('button');
pinBtn.className = 'toc-pin-btn';
pinBtn.type = 'button';
pinBtn.textContent = '[pin]';
pinBtn.style.marginLeft = '0.8rem';
pinBtn.style.fontSize = '0.75em';
header.appendChild(pinBtn);
attachPinBehavior(pinBtn, href, text);
}); });
}); });
})(); })();
@ -30801,7 +30837,6 @@ This is the stylesheet used by waybar.
This is the stylesheet used by waybar. This is the stylesheet used by waybar.
#+begin_src css :tangle style.css #+begin_src css :tangle style.css
html, body { html, body {
margin: 0; margin: 0;
padding: 0; padding: 0;
@ -30809,7 +30844,7 @@ html, body {
color: #b7c5d3; color: #b7c5d3;
font-family: "Inter", "Fira Sans", system-ui, sans-serif; font-family: "Inter", "Fira Sans", system-ui, sans-serif;
line-height: 1.6; line-height: 1.6;
overflow-x: hidden; /* prevent horizontal scroll from small overflows */ overflow-x: hidden;
} }
body { body {
@ -30895,7 +30930,6 @@ h3 {
font-size: 1.3rem; font-size: 1.3rem;
} }
a { a {
color: #5ec4ff; color: #5ec4ff;
} }
@ -30970,7 +31004,6 @@ blockquote {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
margin-bottom: 0.5rem;
} }
#pinned-panel h2 { #pinned-panel h2 {
@ -31117,13 +31150,43 @@ blockquote {
#content { #content {
padding: 1.2rem 1rem; padding: 1.2rem 1rem;
} }
.darkmode-toggle,
.darkmode-layer,
.darkmode-background {
display: none !important;
visibility: hidden !important;
opacity: 0 !important;
pointer-events: none !important;
}
} }
.darkmode-layer, .darkmode-toggle { .darkmode-layer, .darkmode-toggle {
z-index: 500; z-index: 500;
} }
html,
body {
overflow-x: hidden;
}
h1 .toc-pin-btn,
h2 .toc-pin-btn,
h3 .toc-pin-btn,
h4 .toc-pin-btn,
h5 .toc-pin-btn {
opacity: 0;
visibility: hidden;
transition: opacity 0.2s, visibility 0.2s;
}
h1:hover .toc-pin-btn,
h2:hover .toc-pin-btn,
h3:hover .toc-pin-btn,
h4:hover .toc-pin-btn,
h5:hover .toc-pin-btn {
opacity: 1;
visibility: visible;
}
#+end_src #+end_src
** justfile ** justfile
:PROPERTIES: :PROPERTIES:

36203
index.html

File diff suppressed because it is too large Load diff

320
style.css
View file

@ -1,320 +0,0 @@
html, body {
margin: 0;
padding: 0;
background-color: #1d252c;
color: #b7c5d3;
font-family: "Inter", "Fira Sans", system-ui, sans-serif;
line-height: 1.6;
overflow-x: hidden; /* prevent horizontal scroll from small overflows */
}
body {
display: flex;
}
#table-of-contents {
position: fixed;
top: 0;
left: 0;
width: 280px;
height: 100vh;
overflow-y: auto;
padding: 1.2rem 1rem;
background-color: #232b32;
border-right: 1px solid #2f3b45;
font-size: 0.9rem;
}
#table-of-contents h2 {
display: none;
}
#text-table-of-contents ul {
list-style: none;
padding-left: 0;
}
#text-table-of-contents li {
margin: 0.2rem 0;
position: relative;
}
.toc-entry {
display: inline-flex;
align-items: center;
}
#text-table-of-contents a {
color: #b7c5d3;
text-decoration: none;
}
#text-table-of-contents a:hover {
color: #5ec4ff;
}
#text-table-of-contents ul ul {
padding-left: 1rem;
border-left: 1px solid #2f3b45;
}
#content {
margin-left: 300px;
margin-right: 320px;
padding: 2rem 3rem;
max-width: 1200px;
width: calc(100vw - 620px);
box-sizing: border-box;
transition: margin 0.3s ease, padding 0.3s ease, width 0.3s ease, max-width 0.3s ease;
}
#content.pinned-hidden {
margin-right: 0;
width: calc(100vw - 300px);
}
h1, h2, h3, h4, h5 {
color: #70e1e8;
font-weight: 500;
margin-top: 2.2rem;
}
h1 {
font-size: 2rem;
}
h2 {
font-size: 1.6rem;
}
h3 {
font-size: 1.3rem;
}
a {
color: #5ec4ff;
}
a:hover {
text-decoration: underline;
}
pre, code {
font-family: "Fira Code", monospace;
background-color: #232b32;
color: #b7c5d3;
}
pre {
padding: 1rem;
overflow-x: auto;
border: 1px solid #2f3b45;
border-radius: 4px;
max-width: 100%;
box-sizing: border-box;
}
code {
padding: 0.15rem 0.3rem;
border-radius: 3px;
}
table {
border-collapse: collapse;
max-width: 100%;
}
th, td {
border: 1px solid #2f3b45;
padding: 0.5rem 0.8rem;
}
th {
background-color: #232b32;
color: #70e1e8;
}
blockquote {
border-left: 3px solid #5ec4ff;
margin-left: 0;
padding-left: 1rem;
color: #718ca1;
}
#pinned-panel {
position: fixed;
top: 0;
right: 0;
width: 280px;
height: 100vh;
overflow-y: auto;
padding: 1.2rem 1rem;
padding-bottom: 5rem;
background-color: #232b32;
border-left: 1px solid #2f3b45;
font-size: 0.9rem;
box-sizing: border-box;
transition: transform 0.3s ease;
}
#pinned-panel.hidden {
transform: translateX(100%);
}
#pinned-panel-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 0.5rem;
}
#pinned-panel h2 {
margin: 0;
font-size: 1rem;
color: #70e1e8;
font-weight: 500;
}
#toggle-pinned-btn {
background: none;
border: none;
color: #718ca1;
cursor: pointer;
font-size: 1.2rem;
padding: 0;
line-height: 1;
}
#toggle-pinned-btn:hover {
color: #5ec4ff;
}
#pinned-list {
list-style: none;
padding-left: 0;
}
#pinned-list li {
margin: 0.5rem 0;
display: flex;
justify-content: space-between;
align-items: center;
}
#pinned-list a {
color: #b7c5d3;
text-decoration: none;
flex: 1;
}
#pinned-list a:hover {
color: #5ec4ff;
}
.pin-remove {
background: none;
border: none;
color: #718ca1;
cursor: pointer;
font-size: 0.9rem;
padding: 0 0.3rem;
}
.pin-remove:hover {
color: #ff6b6b;
}
.toc-pin-btn {
opacity: 0;
visibility: hidden;
transition: opacity 0.2s, visibility 0.2s;
cursor: pointer;
margin-left: 0.4rem;
font-size: 0.85rem;
color: #718ca1;
background: none;
border: none;
padding: 0;
}
.toc-pin-btn:hover {
color: #5ec4ff;
}
#text-table-of-contents .toc-entry:hover .toc-pin-btn {
opacity: 1;
visibility: visible;
}
#show-pinned-btn {
position: fixed;
top: 4.5rem;
right: 1rem;
background-color: #232b32;
border: 1px solid #2f3b45;
color: #b7c5d3;
cursor: pointer;
padding: 0.5rem 0.8rem;
font-size: 0.9rem;
border-radius: 4px;
display: none;
z-index: 1000;
}
#show-pinned-btn:hover {
background-color: #2f3b45;
color: #5ec4ff;
}
#show-pinned-btn.visible {
display: block;
}
@media (max-width: 1600px) {
#content {
max-width: 100%;
}
}
@media (max-width: 1300px) {
#pinned-panel {
display: none !important;
}
#show-pinned-btn {
display: none !important;
}
#content,
#content.pinned-hidden {
margin-right: 0;
width: calc(100vw - 300px);
max-width: 100%;
padding: 1.8rem 2.2rem;
}
}
@media (max-width: 1000px) {
#table-of-contents {
display: none;
}
#content {
margin-left: 0;
margin-right: 0;
width: 100vw;
max-width: 100%;
padding: 1.5rem 1.25rem;
}
}
@media (max-width: 700px) {
#content {
padding: 1.2rem 1rem;
}
}
.darkmode-layer, .darkmode-toggle {
z-index: 500;
}