mirror of
https://github.com/Swarsel/.dotfiles.git
synced 2026-04-14 21:29:12 +02:00
Compare commits
1 commit
d13c7057ab
...
5e378178f2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5e378178f2 |
4 changed files with 285 additions and 36805 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -7,3 +7,5 @@ result
|
||||||
*.bak
|
*.bak
|
||||||
.pre-commit-config.yaml
|
.pre-commit-config.yaml
|
||||||
.direnv
|
.direnv
|
||||||
|
/index.html
|
||||||
|
/style.css
|
||||||
|
|
|
||||||
|
|
@ -121,7 +121,6 @@ window.addEventListener('load', addDarkmodeWidget);
|
||||||
#+begin_export html
|
#+begin_export html
|
||||||
<script>
|
<script>
|
||||||
(function() {
|
(function() {
|
||||||
// Create pinned panel if it doesn't exist
|
|
||||||
let pinnedPanel = document.getElementById('pinned-panel');
|
let pinnedPanel = document.getElementById('pinned-panel');
|
||||||
if (!pinnedPanel) {
|
if (!pinnedPanel) {
|
||||||
pinnedPanel = document.createElement('aside');
|
pinnedPanel = document.createElement('aside');
|
||||||
|
|
@ -151,7 +150,6 @@ window.addEventListener('load', addDarkmodeWidget);
|
||||||
const toggleBtn = document.getElementById('toggle-pinned-btn');
|
const toggleBtn = document.getElementById('toggle-pinned-btn');
|
||||||
const pinnedItems = new Map(); // href -> { li: <li>, btn: <button> }
|
const pinnedItems = new Map(); // href -> { li: <li>, btn: <button> }
|
||||||
|
|
||||||
// Toggle panel visibility
|
|
||||||
function hidePinnedPanel() {
|
function hidePinnedPanel() {
|
||||||
pinnedPanel.classList.add('hidden');
|
pinnedPanel.classList.add('hidden');
|
||||||
content.classList.add('pinned-hidden');
|
content.classList.add('pinned-hidden');
|
||||||
|
|
@ -167,11 +165,9 @@ 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
|
|
||||||
const tocLinks = document.querySelectorAll('#text-table-of-contents a');
|
const tocLinks = document.querySelectorAll('#text-table-of-contents a');
|
||||||
|
|
||||||
tocLinks.forEach(link => {
|
tocLinks.forEach(link => {
|
||||||
// If this link is already wrapped, skip
|
|
||||||
if (link.parentElement && link.parentElement.classList.contains('toc-entry')) {
|
if (link.parentElement && link.parentElement.classList.contains('toc-entry')) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -179,19 +175,16 @@ window.addEventListener('load', addDarkmodeWidget);
|
||||||
const li = link.closest('li');
|
const li = link.closest('li');
|
||||||
if (!li) return;
|
if (!li) return;
|
||||||
|
|
||||||
// Wrap link in a container span to manage hover
|
|
||||||
const wrapper = document.createElement('span');
|
const wrapper = document.createElement('span');
|
||||||
wrapper.className = 'toc-entry';
|
wrapper.className = 'toc-entry';
|
||||||
|
|
||||||
// Move link into wrapper
|
|
||||||
li.insertBefore(wrapper, link);
|
li.insertBefore(wrapper, link);
|
||||||
wrapper.appendChild(link);
|
wrapper.appendChild(link);
|
||||||
|
|
||||||
// Create pin button
|
|
||||||
const pinBtn = document.createElement('button');
|
const pinBtn = document.createElement('button');
|
||||||
pinBtn.className = 'toc-pin-btn';
|
pinBtn.className = 'toc-pin-btn';
|
||||||
pinBtn.type = 'button';
|
pinBtn.type = 'button';
|
||||||
pinBtn.textContent = '📌';
|
pinBtn.textContent = '[ pin ]';
|
||||||
wrapper.appendChild(pinBtn);
|
wrapper.appendChild(pinBtn);
|
||||||
|
|
||||||
pinBtn.addEventListener('click', (e) => {
|
pinBtn.addEventListener('click', (e) => {
|
||||||
|
|
@ -201,19 +194,16 @@ window.addEventListener('load', addDarkmodeWidget);
|
||||||
const href = link.getAttribute('href');
|
const href = link.getAttribute('href');
|
||||||
const text = link.textContent.trim();
|
const text = link.textContent.trim();
|
||||||
|
|
||||||
// Toggle behavior
|
|
||||||
if (pinnedItems.has(href)) {
|
if (pinnedItems.has(href)) {
|
||||||
// Already pinned -> unpin
|
|
||||||
const { li: existingLi } = pinnedItems.get(href);
|
const { li: existingLi } = pinnedItems.get(href);
|
||||||
if (existingLi && existingLi.parentElement) {
|
if (existingLi && existingLi.parentElement) {
|
||||||
existingLi.parentElement.removeChild(existingLi);
|
existingLi.parentElement.removeChild(existingLi);
|
||||||
}
|
}
|
||||||
pinnedItems.delete(href);
|
pinnedItems.delete(href);
|
||||||
pinBtn.textContent = '📌';
|
pinBtn.textContent = '[ pin ]';
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Not pinned -> pin it
|
|
||||||
const pinnedLi = document.createElement('li');
|
const pinnedLi = document.createElement('li');
|
||||||
|
|
||||||
const pinnedLink = document.createElement('a');
|
const pinnedLink = document.createElement('a');
|
||||||
|
|
@ -227,7 +217,7 @@ window.addEventListener('load', addDarkmodeWidget);
|
||||||
removeBtn.addEventListener('click', () => {
|
removeBtn.addEventListener('click', () => {
|
||||||
pinnedItems.delete(href);
|
pinnedItems.delete(href);
|
||||||
pinnedLi.remove();
|
pinnedLi.remove();
|
||||||
pinBtn.textContent = '📌';
|
pinBtn.textContent = '[ pin ]';
|
||||||
});
|
});
|
||||||
|
|
||||||
pinnedLi.appendChild(pinnedLink);
|
pinnedLi.appendChild(pinnedLink);
|
||||||
|
|
@ -30970,7 +30960,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,12 +31106,24 @@ 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;
|
||||||
|
}
|
||||||
|
|
||||||
#+end_src
|
#+end_src
|
||||||
** justfile
|
** justfile
|
||||||
|
|
|
||||||
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