mirror of
https://github.com/Swarsel/.dotfiles.git
synced 2026-04-14 21:29:12 +02:00
chore: remove generated deploy files
This commit is contained in:
parent
cd1a23845f
commit
68bc5d5b3b
4 changed files with 470 additions and 36928 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -7,3 +7,5 @@ result
|
|||
*.bak
|
||||
.pre-commit-config.yaml
|
||||
.direnv
|
||||
/index.html
|
||||
/style.css
|
||||
|
|
|
|||
|
|
@ -121,7 +121,15 @@ window.addEventListener('load', addDarkmodeWidget);
|
|||
#+begin_export html
|
||||
<script>
|
||||
(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');
|
||||
if (!pinnedPanel) {
|
||||
pinnedPanel = document.createElement('aside');
|
||||
|
|
@ -136,7 +144,6 @@ window.addEventListener('load', addDarkmodeWidget);
|
|||
document.body.appendChild(pinnedPanel);
|
||||
}
|
||||
|
||||
// Create show button (visible when panel is hidden)
|
||||
let showBtn = document.getElementById('show-pinned-btn');
|
||||
if (!showBtn) {
|
||||
showBtn = document.createElement('button');
|
||||
|
|
@ -149,9 +156,11 @@ window.addEventListener('load', addDarkmodeWidget);
|
|||
const content = document.getElementById('content');
|
||||
const pinnedList = document.getElementById('pinned-list');
|
||||
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() {
|
||||
pinnedPanel.classList.add('hidden');
|
||||
content.classList.add('pinned-hidden');
|
||||
|
|
@ -167,75 +176,102 @@ window.addEventListener('load', addDarkmodeWidget);
|
|||
toggleBtn.addEventListener('click', hidePinnedPanel);
|
||||
showBtn.addEventListener('click', showPinnedPanel);
|
||||
|
||||
// Add pin buttons to all TOC links
|
||||
const tocLinks = document.querySelectorAll('#text-table-of-contents a');
|
||||
function attachPinBehavior(pinBtn, href, text) {
|
||||
if (!href) return;
|
||||
|
||||
tocLinks.forEach(link => {
|
||||
// If this link is already wrapped, skip
|
||||
if (link.parentElement && link.parentElement.classList.contains('toc-entry')) {
|
||||
return;
|
||||
if (!pinnedItems.has(href)) {
|
||||
pinnedItems.set(href, { li: null, btns: new Set() });
|
||||
}
|
||||
const entry = pinnedItems.get(href);
|
||||
entry.btns.add(pinBtn);
|
||||
|
||||
const li = link.closest('li');
|
||||
if (!li) return;
|
||||
pinBtn.textContent = entry.li ? '[unpin]' : '[pin]';
|
||||
|
||||
// Wrap link in a container span to manage hover
|
||||
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) => {
|
||||
pinBtn.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
const current = pinnedItems.get(href);
|
||||
if (!current) return;
|
||||
|
||||
const href = link.getAttribute('href');
|
||||
const text = link.textContent.trim();
|
||||
|
||||
// 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;
|
||||
if (current.li) {
|
||||
if (current.li.parentElement) {
|
||||
current.li.parentElement.removeChild(current.li);
|
||||
}
|
||||
current.li = null;
|
||||
current.btns.forEach(b => b.textContent = '[pin]');
|
||||
} else {
|
||||
const li = document.createElement('li');
|
||||
|
||||
// Not pinned -> pin it
|
||||
const pinnedLi = document.createElement('li');
|
||||
|
||||
const pinnedLink = document.createElement('a');
|
||||
pinnedLink.href = href;
|
||||
pinnedLink.textContent = text;
|
||||
const a = document.createElement('a');
|
||||
a.href = href;
|
||||
a.textContent = text;
|
||||
|
||||
const removeBtn = document.createElement('button');
|
||||
removeBtn.className = 'pin-remove';
|
||||
removeBtn.type = 'button';
|
||||
removeBtn.textContent = '✕';
|
||||
removeBtn.addEventListener('click', () => {
|
||||
pinnedItems.delete(href);
|
||||
pinnedLi.remove();
|
||||
pinBtn.textContent = '📌';
|
||||
const cur = pinnedItems.get(href);
|
||||
if (!cur) return;
|
||||
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);
|
||||
pinnedLi.appendChild(removeBtn);
|
||||
pinnedList.appendChild(pinnedLi);
|
||||
li.appendChild(a);
|
||||
li.appendChild(removeBtn);
|
||||
pinnedList.appendChild(li);
|
||||
|
||||
pinnedItems.set(href, { li: pinnedLi, btn: pinBtn });
|
||||
pinBtn.textContent = '[unpin]';
|
||||
current.li = li;
|
||||
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.
|
||||
|
||||
#+begin_src css :tangle style.css
|
||||
|
||||
html, body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
|
|
@ -30809,7 +30844,7 @@ html, body {
|
|||
color: #b7c5d3;
|
||||
font-family: "Inter", "Fira Sans", system-ui, sans-serif;
|
||||
line-height: 1.6;
|
||||
overflow-x: hidden; /* prevent horizontal scroll from small overflows */
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
body {
|
||||
|
|
@ -30895,7 +30930,6 @@ h3 {
|
|||
font-size: 1.3rem;
|
||||
}
|
||||
|
||||
|
||||
a {
|
||||
color: #5ec4ff;
|
||||
}
|
||||
|
|
@ -30970,7 +31004,6 @@ blockquote {
|
|||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
#pinned-panel h2 {
|
||||
|
|
@ -31117,13 +31150,43 @@ blockquote {
|
|||
#content {
|
||||
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 {
|
||||
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
|
||||
** justfile
|
||||
:PROPERTIES:
|
||||
|
|
|
|||
36203
index.html
36203
index.html
File diff suppressed because it is too large
Load diff
320
style.css
320
style.css
|
|
@ -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;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue