More work on the archive. Start rendering conversations
This commit is contained in:
parent
493d1932f8
commit
db54ca40c6
@ -1,3 +1,4 @@
|
||||
module.exports = function(eleventyConfig) {
|
||||
eleventyConfig.addPlugin(require('./dates'));
|
||||
eleventyConfig.addPlugin(require('./notes'));
|
||||
}
|
14
config/filters/notes.js
Normal file
14
config/filters/notes.js
Normal file
@ -0,0 +1,14 @@
|
||||
function conversationLength(note) {
|
||||
return note.replies.reduce((total, reply) => {
|
||||
return total + conversationLength(reply);
|
||||
}, 1);
|
||||
}
|
||||
|
||||
module.exports = function (eleventyConfig) {
|
||||
// Filter out notes so that it's only notes that aren't replying to a post
|
||||
eleventyConfig.addFilter('topLevelNotes', function (notes) {
|
||||
return notes.filter(note => !note.replyId);
|
||||
});
|
||||
|
||||
eleventyConfig.addFilter('conversationLength', conversationLength);
|
||||
}
|
@ -21,4 +21,5 @@ const markdownLib = markdownIt({
|
||||
|
||||
module.exports = function (eleventyConfig) {
|
||||
eleventyConfig.setLibrary('md', markdownLib);
|
||||
eleventyConfig.addFilter('md', content => content ? markdownLib.render(content) : "");
|
||||
}
|
@ -10,12 +10,20 @@ const formatMentions = text => {
|
||||
|
||||
module.exports = function() {
|
||||
const notes = JSON.parse(fs.readFileSync('./src/_data/_notes.json', 'utf-8'))
|
||||
.filter(note => note.text !== null)
|
||||
.filter(note => note.text !== null && note.visibility === "public")
|
||||
.map(note => ({
|
||||
...note,
|
||||
text: formatMentions(note.text),
|
||||
createdAt: new Date(note.createdAt)
|
||||
createdAt: new Date(note.createdAt),
|
||||
replies: []
|
||||
}));
|
||||
|
||||
notes.forEach(note => {
|
||||
if (note.replyId) {
|
||||
notes.find(replied => replied.id === note.replyId)?.replies.push(note);
|
||||
}
|
||||
});
|
||||
|
||||
console.log(JSON.stringify(notes.filter(note => note.replies.length && note.replies.find(reply => reply.replies.length)), null, 2));
|
||||
return notes;
|
||||
}
|
@ -11,5 +11,23 @@ layout: "base.njk"
|
||||
<time class="dt-published" datetime="{{ note.createdAt | dateToRfc3339 }}">{{ note.createdAt | dateTimeDisplay }}</time>
|
||||
</div>
|
||||
{{ content | safe }}
|
||||
<pre>{{ note.replies | dump }}</pre>
|
||||
|
||||
<ul>
|
||||
|
||||
{% for reply in note.replies %}
|
||||
<li>{{ reply.text | md | safe }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{# <ul>
|
||||
{% for reply in note.replies %}
|
||||
<li>
|
||||
<div>
|
||||
<time class="dt-published" datetime="{{ reply.createdAt | dateToRfc3339 }}">{{ reply.createdAt | dateTimeDisplay }}</time>
|
||||
{{ reply.text | md | safe }}
|
||||
</div>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul> #}
|
||||
</article>
|
||||
</main>
|
@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Firefish Archive
|
||||
---
|
||||
|
||||
<ul>
|
||||
{% for note in notes | topLevelNotes %}
|
||||
<li>
|
||||
<a href="/notes/{{ note.id }}">{{ note.id }} ({{ note | conversationLength }} replies)</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
@ -1,6 +1,41 @@
|
||||
:root {
|
||||
--space-size-4xs: clamp(0.125rem, calc(0.12rem + 0.03vw), 0.21rem);
|
||||
--space-size-3xs: clamp(0.25rem, calc(0.24rem + 0.06vw), 0.31rem);
|
||||
--space-size-2xs: clamp(0.5rem, calc(0.48rem + 0.13vw), 0.63rem);
|
||||
--space-size-xs: clamp(0.75rem, calc(0.71rem + 0.19vw), 0.94rem);
|
||||
--space-size-s: clamp(1rem, calc(0.95rem + 0.25vw), 1.25rem);
|
||||
--space-size-m: clamp(1.5rem, calc(1.43rem + 0.38vw), 1.88rem);
|
||||
--space-size-l: clamp(2rem, calc(1.9rem + 0.5vw), 2.5rem);
|
||||
--space-size-xl: clamp(3rem, calc(2.85rem + 0.75vw), 3.75rem);
|
||||
--space-size-2xl: clamp(4rem, calc(3.8rem + 1vw), 5rem);
|
||||
--space-size-3xl: clamp(6rem, calc(5.7rem + 1.5vw), 7.5rem);
|
||||
--text-size-2xs: clamp(0.56rem, calc(0.72rem + -0.14vw), 0.69rem);
|
||||
--text-size-xs: clamp(0.83rem, calc(0.83rem + 0vw), 0.83rem);
|
||||
--text-size-s: clamp(1rem, calc(0.95rem + 0.25vw), 1.25rem);
|
||||
--text-size-m: clamp(1.2rem, calc(1.07rem + 0.68vw), 1.88rem);
|
||||
--text-size-l: clamp(1.44rem, calc(1.17rem + 1.37vw), 2.81rem);
|
||||
--text-size-xl: clamp(1.73rem, calc(1.23rem + 2.49vw), 4.22rem);
|
||||
--text-size-2xl: clamp(2.07rem, calc(1.22rem + 4.25vw), 6.33rem);
|
||||
--text-size-3xl: clamp(2.49rem, calc(1.09rem + 7vw), 9.49rem);
|
||||
--font-family-sans: ui-sans-serif, system-ui, -apple-system,
|
||||
BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans",
|
||||
sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol",
|
||||
"Noto Color Emoji";
|
||||
--font-family-mono: "Space Grotesk", ui-monospace, SFMono-Regular, Menlo,
|
||||
Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
||||
--screen-sm: 640px;
|
||||
--screen-md: 768px;
|
||||
--screen-lg: 1024px;
|
||||
--screen-xl: 1280px;
|
||||
--screen-2xl: 1536px;
|
||||
--screen-3xl: 1920px;
|
||||
}
|
||||
|
||||
body {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
font-family: var(--font-family-sans);
|
||||
font-size: var(--text-size-s);
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
@ -16,8 +51,8 @@ main[data-for="note"] {
|
||||
}
|
||||
|
||||
article {
|
||||
max-width: 40rem;
|
||||
padding: 1rem;
|
||||
max-width: var(--screen-lg);
|
||||
padding: var(--space-size-s);
|
||||
border-radius: 5px;
|
||||
box-shadow: 0px 10px 15px -3px rgba(0,0,0,0.1);
|
||||
}
|
Loading…
Reference in New Issue
Block a user