Atom feed for our EEG site

more

+1
.gitignore
···
# Virtual environments
.venv
···
# Virtual environments
.venv
+
free-icons
+3
brands-github.svg
···
···
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
+
<path d="M 171.3548387096774 407.741935483871 Q 170.32258064516128 411.8709677419355 166.19354838709677 411.8709677419355 Q 160 411.8709677419355 160 407.741935483871 Q 161.03225806451613 404.64516129032256 165.16129032258064 404.64516129032256 Q 170.32258064516128 404.64516129032256 171.3548387096774 407.741935483871 L 171.3548387096774 407.741935483871 Z M 139.3548387096774 403.61290322580646 Q 138.32258064516128 406.7096774193548 143.48387096774192 408.7741935483871 Q 148.6451612903226 409.80645161290323 149.67741935483872 406.7096774193548 Q 150.70967741935485 402.5806451612903 145.5483870967742 401.5483870967742 Q 140.38709677419354 400.51612903225805 139.3548387096774 403.61290322580646 L 139.3548387096774 403.61290322580646 Z M 184.7741935483871 401.5483870967742 Q 179.61290322580646 402.5806451612903 179.61290322580646 406.7096774193548 Q 180.6451612903226 409.80645161290323 185.80645161290323 409.80645161290323 Q 190.96774193548387 407.741935483871 190.96774193548387 404.64516129032256 Q 189.93548387096774 401.5483870967742 184.7741935483871 401.5483870967742 L 184.7741935483871 401.5483870967742 Z M 252.90322580645162 6.193548387096774 Q 142.4516129032258 8.258064516129032 72.25806451612904 78.45161290322581 L 72.25806451612904 78.45161290322581 L 72.25806451612904 78.45161290322581 Q 2.064516129032258 148.6451612903226 0 258.06451612903226 Q 1.032258064516129 345.80645161290323 48.516129032258064 411.8709677419355 Q 96 477.93548387096774 175.48387096774192 504.7741935483871 Q 194.06451612903226 505.80645161290323 193.03225806451613 492.38709677419354 Q 193.03225806451613 488.258064516129 193.03225806451613 476.9032258064516 Q 193.03225806451613 453.16129032258067 193.03225806451613 429.4193548387097 Q 190.96774193548387 429.4193548387097 173.41935483870967 431.48387096774195 Q 154.83870967741936 432.51612903225805 134.19354838709677 427.35483870967744 Q 113.54838709677419 421.16129032258067 105.29032258064517 398.4516129032258 Q 105.29032258064517 396.38709677419354 97.03225806451613 381.93548387096774 Q 88.7741935483871 368.51612903225805 76.38709677419355 360.258064516129 Q 74.3225806451613 359.2258064516129 68.12903225806451 352 Q 60.903225806451616 345.80645161290323 78.45161290322581 344.7741935483871 Q 79.48387096774194 343.741935483871 92.90322580645162 348.9032258064516 Q 106.3225806451613 353.03225806451616 117.6774193548387 371.61290322580646 Q 136.25806451612902 399.48387096774195 157.93548387096774 399.48387096774195 Q 180.6451612903226 399.48387096774195 193.03225806451613 393.2903225806452 Q 197.16129032258064 368.51612903225805 209.5483870967742 358.19354838709677 Q 164.1290322580645 356.1290322580645 130.06451612903226 335.48387096774195 Q 96 315.8709677419355 93.93548387096774 243.61290322580646 Q 93.93548387096774 222.96774193548387 100.12903225806451 209.5483870967742 Q 105.29032258064517 196.1290322580645 117.6774193548387 183.74193548387098 Q 115.61290322580645 177.5483870967742 113.54838709677419 158.96774193548387 Q 111.48387096774194 140.38709677419354 120.7741935483871 113.54838709677419 Q 139.3548387096774 110.45161290322581 164.1290322580645 124.90322580645162 Q 189.93548387096774 138.32258064516128 192 141.41935483870967 Q 192 141.41935483870967 192 141.41935483870967 Q 222.96774193548387 132.1290322580645 257.03225806451616 132.1290322580645 Q 290.06451612903226 132.1290322580645 322.06451612903226 141.41935483870967 Q 322.06451612903226 140.38709677419354 335.48387096774195 132.1290322580645 Q 347.8709677419355 123.87096774193549 364.38709677419354 117.6774193548387 Q 380.9032258064516 110.45161290322581 393.2903225806452 113.54838709677419 Q 402.5806451612903 140.38709677419354 400.51612903225805 158.96774193548387 Q 398.4516129032258 177.5483870967742 395.35483870967744 183.74193548387098 Q 407.741935483871 196.1290322580645 414.96774193548384 209.5483870967742 Q 422.19354838709677 222.96774193548387 422.19354838709677 243.61290322580646 Q 421.16129032258067 293.16129032258067 404.64516129032256 316.9032258064516 Q 387.0967741935484 339.61290322580646 360.258064516129 347.8709677419355 Q 333.4193548387097 356.1290322580645 303.48387096774195 358.19354838709677 Q 320 369.5483870967742 321.03225806451616 405.6774193548387 Q 321.03225806451616 443.8709677419355 321.03225806451616 473.80645161290323 Q 321.03225806451616 487.2258064516129 321.03225806451616 492.38709677419354 Q 320 505.80645161290323 338.5806451612903 504.7741935483871 Q 417.03225806451616 477.93548387096774 464.51612903225805 411.8709677419355 Q 510.96774193548384 345.80645161290323 512 258.06451612903226 Q 510.96774193548384 185.80645161290323 476.9032258064516 129.03225806451613 Q 441.80645161290323 72.25806451612904 384 39.225806451612904 Q 325.16129032258067 7.225806451612903 252.90322580645162 6.193548387096774 L 252.90322580645162 6.193548387096774 Z M 100.12903225806451 362.3225806451613 Q 98.06451612903226 364.38709677419354 101.16129032258064 367.48387096774195 Q 104.25806451612904 370.5806451612903 106.3225806451613 368.51612903225805 Q 108.38709677419355 366.4516129032258 105.29032258064517 363.35483870967744 Q 103.2258064516129 360.258064516129 100.12903225806451 362.3225806451613 L 100.12903225806451 362.3225806451613 Z M 88.7741935483871 354.06451612903226 Q 88.7741935483871 356.1290322580645 91.87096774193549 358.19354838709677 Q 94.96774193548387 359.2258064516129 96 357.16129032258067 Q 97.03225806451613 355.0967741935484 93.93548387096774 353.03225806451616 Q 90.83870967741936 352 88.7741935483871 354.06451612903226 L 88.7741935483871 354.06451612903226 Z M 122.83870967741936 390.19354838709677 Q 120.7741935483871 393.2903225806452 123.87096774193549 397.4193548387097 Q 128 400.51612903225805 131.09677419354838 398.4516129032258 Q 132.1290322580645 395.35483870967744 129.03225806451613 391.2258064516129 Q 124.90322580645162 388.1290322580645 122.83870967741936 390.19354838709677 L 122.83870967741936 390.19354838709677 Z M 110.45161290322581 375.741935483871 Q 108.38709677419355 377.80645161290323 110.45161290322581 381.93548387096774 Q 113.54838709677419 385.03225806451616 116.64516129032258 384 Q 118.70967741935483 381.93548387096774 116.64516129032258 377.80645161290323 Q 113.54838709677419 373.6774193548387 110.45161290322581 375.741935483871 L 110.45161290322581 375.741935483871 Z" />
+
</svg>
+3
brands-wikipedia-w.svg
···
···
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
+
<path d="M 512 91.6 L 512 101.2 L 512 91.6 L 512 101.2 Q 479.2 103.6 467.2 134 Q 460 150 447.2 179.6 Q 425.6 230.8 396.8 297.2 Q 368 363.6 343.2 420.4 L 332 420.4 L 332 420.4 L 266.4 266 L 266.4 266 Q 252 294 236.8 322.8 Q 211.2 372.4 187.2 420.4 Q 186.4 421.2 180.8 420.4 Q 176 420.4 175.2 420.4 Q 147.2 354.8 118.4 290 Q 88.8 223.6 60.8 157.2 Q 52.8 139.6 35.2 121.2 Q 16.8 102.8 0 102 Q 0 99.6 0 97.2 Q 0 93.2 0 90.8 L 129.6 90.8 L 129.6 90.8 L 129.6 101.2 L 129.6 101.2 Q 116.8 102 103.2 109.2 Q 90.4 116.4 94.4 129.2 Q 100 140.4 109.6 162 Q 118.4 183.6 130.4 210 Q 149.6 254.8 168 298 Q 186.4 340.4 195.2 359.6 Q 200.8 348.4 211.2 330 Q 220.8 311.6 231.2 290.8 Q 246.4 262.8 255.2 245.2 Q 248 229.2 232 193.2 Q 221.6 170 212 148.4 Q 202.4 127.6 197.6 117.2 Q 191.2 107.6 177.6 104.4 Q 164.8 101.2 152.8 102 L 152.8 90.8 L 152.8 90.8 L 266.4 90.8 L 266.4 90.8 L 266.4 101.2 L 266.4 101.2 Q 254.4 102 246.4 106.8 Q 238.4 111.6 243.2 122 Q 253.6 145.2 262.4 163.6 Q 271.2 183.6 281.6 206 Q 285.6 198 298.4 171.6 Q 311.2 146 320 125.2 Q 330.4 102 288.8 102 Q 289.6 99.6 289.6 96.4 Q 289.6 93.2 289.6 90.8 Q 314.4 90.8 341.6 90.8 Q 358.4 90.8 371.2 90.8 Q 383.2 90.8 388 90.8 L 388 101.2 L 388 101.2 Q 358.4 102.8 341.6 126.8 L 294.4 225.2 L 294.4 225.2 Q 296.8 232.4 308 257.2 Q 319.2 282 331.2 308.4 Q 337.6 323.6 343.2 335.6 Q 348 346.8 349.6 350 L 447.2 124.4 L 447.2 124.4 Q 441.6 110.8 428.8 106 Q 416.8 101.2 409.6 102 L 409.6 90.8 L 409.6 90.8 L 512 91.6 L 512 91.6 L 512 91.6 L 512 91.6 Z" />
+
</svg>
+27 -22
index.html
···
.feed-item-row {
display: flex;
-
align-items: flex-start;
padding: 8px 15px;
width: 100%;
overflow: hidden;
···
display: flex;
align-items: center;
margin-right: 10px;
-
position: sticky;
-
top: 8px;
}
.feed-item-date {
···
color: var(--text-muted);
min-width: 80px;
margin-right: 10px;
-
position: sticky;
-
top: 8px;
}
.feed-item-author {
···
min-width: 70px;
margin-right: 15px;
white-space: nowrap;
-
position: sticky;
-
top: 8px;
}
.feed-item-title {
···
flex: 1;
overflow: hidden;
white-space: nowrap;
}
.feed-item-preview {
···
flex-wrap: wrap;
align-items: center;
gap: 8px;
-
margin-top: 5px;
-
padding-top: 5px;
-
border-top: 1px dotted var(--border-color);
}
-
.external-link-item[title*="github.com"] {
background-color: rgba(77, 180, 128, 0.08);
color: var(--accent-alt);
}
.feed-item:hover .preview-links,
···
entriesHTML += `
<article id="${entry.articleId}" class="feed-item" ${dateAttr}>
<div class="feed-item-row">
-
<div class="feed-item-left">
-
<a href="${entry.link}" target="_blank" class="external-link" title="Open original post">🔗</a>
-
</div>
<div class="feed-item-date">${formatDate(entry.published)}</div>
<div class="feed-item-author">${entry.author}</div>
<div class="feed-item-content-wrapper">
···
${entry.externalLinks && entry.externalLinks.length > 0 ? `
<div class="preview-links">
-
<span class="external-links-label">External links:</span>
${entry.externalLinks.map(link => {
const url = new URL(link.url);
let displayText = url.hostname.replace('www.', '');
···
// Extract the parts from pathname (remove leading slash)
const parts = url.pathname.substring(1).split('/').filter(part => part);
if (parts.length >= 2) {
-
displayText = `github:${parts[0]}/${parts[1]}`;
}
}
···
const titlePart = url.pathname.split('/').pop();
if (titlePart) {
const title = decodeURIComponent(titlePart).replace(/_/g, ' ');
-
displayText = `wikipedia:${title}`;
}
}
-
return `<a href="${link.url}" target="_blank" class="external-link-item" title="${link.url}">${displayText}</a>`;
-
}).join(', ')}
</div>
` : ''}
···
<span class="external-links-label">References:</span>
${entry.referencesTo.map(ref => `
<a href="${ref.link}" target="_blank" class="external-link-item" title="${ref.title} by ${ref.author}">→ ${ref.title}</a>
-
`).join(', ')}
</div>
` : ''}
${entry.referencedBy && entry.referencedBy.length > 0 ? `
<div class="preview-references">
-
<span class="external-links-label">Referenced by:</span>
${entry.referencedBy.map(ref => `
<a href="${ref.link}" target="_blank" class="external-link-item" title="${ref.title} by ${ref.author}">← ${ref.title}</a>
-
`).join(', ')}
</div>
` : ''}
</div>
···
.feed-item-row {
display: flex;
+
align-items: center;
padding: 8px 15px;
width: 100%;
overflow: hidden;
···
display: flex;
align-items: center;
margin-right: 10px;
}
.feed-item-date {
···
color: var(--text-muted);
min-width: 80px;
margin-right: 10px;
}
.feed-item-author {
···
min-width: 70px;
margin-right: 15px;
white-space: nowrap;
}
.feed-item-title {
···
flex: 1;
overflow: hidden;
white-space: nowrap;
+
text-overflow: ellipsis;
}
.feed-item-preview {
···
flex-wrap: wrap;
align-items: center;
gap: 8px;
+
margin-top: 3px;
}
+
.external-link-item[data-link-type="github"] {
background-color: rgba(77, 180, 128, 0.08);
color: var(--accent-alt);
+
display: inline-flex;
+
align-items: center;
+
}
+
+
.external-link-item[data-link-type="wikipedia"] {
+
background-color: rgba(77, 180, 128, 0.08);
+
color: var(--accent-alt);
+
display: inline-flex;
+
align-items: center;
+
}
+
+
.external-link-item img {
+
display: inline-block;
+
vertical-align: middle;
+
filter: invert(1);
}
.feed-item:hover .preview-links,
···
entriesHTML += `
<article id="${entry.articleId}" class="feed-item" ${dateAttr}>
<div class="feed-item-row">
<div class="feed-item-date">${formatDate(entry.published)}</div>
<div class="feed-item-author">${entry.author}</div>
<div class="feed-item-content-wrapper">
···
${entry.externalLinks && entry.externalLinks.length > 0 ? `
<div class="preview-links">
+
<span class="external-links-label">Links:</span>
${entry.externalLinks.map(link => {
const url = new URL(link.url);
let displayText = url.hostname.replace('www.', '');
···
// Extract the parts from pathname (remove leading slash)
const parts = url.pathname.substring(1).split('/').filter(part => part);
if (parts.length >= 2) {
+
displayText = `<img src="brands-github.svg" width="14" height="14" style="vertical-align: middle; margin-right: 4px;"> ${parts[0]}/${parts[1]}`;
}
}
···
const titlePart = url.pathname.split('/').pop();
if (titlePart) {
const title = decodeURIComponent(titlePart).replace(/_/g, ' ');
+
displayText = `<img src="brands-wikipedia-w.svg" width="14" height="14" style="vertical-align: middle; margin-right: 4px;"> ${title}`;
}
}
+
return `<a href="${link.url}" target="_blank" class="external-link-item" title="${link.url}" data-link-type="${url.hostname.includes('github') ? 'github' : url.hostname.includes('wikipedia') ? 'wikipedia' : ''}">${displayText}</a>`;
+
}).join(' ')}
</div>
` : ''}
···
<span class="external-links-label">References:</span>
${entry.referencesTo.map(ref => `
<a href="${ref.link}" target="_blank" class="external-link-item" title="${ref.title} by ${ref.author}">→ ${ref.title}</a>
+
`).join(' ')}
</div>
` : ''}
${entry.referencedBy && entry.referencedBy.length > 0 ? `
<div class="preview-references">
+
<span class="external-links-label">Cited by:</span>
${entry.referencedBy.map(ref => `
<a href="${ref.link}" target="_blank" class="external-link-item" title="${ref.title} by ${ref.author}">← ${ref.title}</a>
+
`).join(' ')}
</div>
` : ''}
</div>