Add toot embedding

This commit is contained in:
Nathan Upchurch 2024-07-09 11:39:02 -05:00
parent e55fa73d92
commit 54ec74c6ed
6 changed files with 217 additions and 39 deletions

View File

@ -25,27 +25,8 @@
</wc-comment> </wc-comment>
</template> </template>
<script> <script type="module">
const monthMap = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; import {dateSuffixAdder, monthMap, timeFormatter} from "../../js/modules/mastodonDateTools.js";
const dateSuffixAdder = (date) => {
if (date > 9 && date < 20) {
return "th";
} else {
let dateString = date < 10 ? "0" + date : "" + date;
if (dateString[1] < 4 && dateString[1] > 0) {
return dateString[1] == 1 ? "st" :
dateString[1] == 2 ? "nd" :
dateString[1] == 3 ? "rd" : null;
} else {
return "th"
}
}
}
const timeFormatter = (hours, minutes) => {
return `${hours < 12 ? hours : hours - 12}:${minutes < 10 ? "0" : ""}${minutes} ${hours < 12 ? "AM" : "PM"}`
}
const renderComment = (comment, target, parentIdm) => { const renderComment = (comment, target, parentIdm) => {
const node = document const node = document

View File

@ -1,20 +1,21 @@
const { DateTime } = require("luxon"); import { DateTime } from "luxon";
const markdownIt = require("markdown-it"); import markdownIt from "markdown-it";
const markdownItFootnote = require("markdown-it-footnote"); import markdownItFootnote from "markdown-it-footnote";
const markdownItAnchor = require("markdown-it-anchor"); import markdownItAnchor from "markdown-it-anchor";
const mdfigcaption = require('markdown-it-image-figures'); import mdfigcaption from 'markdown-it-image-figures';
const pluginRss = require("@11ty/eleventy-plugin-rss"); import pluginRss from "@11ty/eleventy-plugin-rss";
const pluginSyntaxHighlight = require("@11ty/eleventy-plugin-syntaxhighlight"); import pluginSyntaxHighlight from "@11ty/eleventy-plugin-syntaxhighlight";
const pluginBundle = require("@11ty/eleventy-plugin-bundle"); import pluginBundle from "@11ty/eleventy-plugin-bundle";
const pluginNavigation = require("@11ty/eleventy-navigation"); import pluginNavigation from "@11ty/eleventy-navigation";
const prettier = require("prettier"); import prettier from "prettier";
const { EleventyHtmlBasePlugin } = require("@11ty/eleventy"); import { EleventyHtmlBasePlugin } from "@11ty/eleventy";
import {dateSuffixAdder, monthMap, timeFormatter} from "./public/js/modules/mastodonDateTools.js";
const figoptions = { const figoptions = {
figcaption: true figcaption: true
}; };
module.exports = eleventyConfig => { export default async function(eleventyConfig) {
// Helper Functions // Helper Functions
const multiReplace = (text, replacementTable) => { const multiReplace = (text, replacementTable) => {
@ -88,12 +89,38 @@ module.exports = eleventyConfig => {
`; `;
}); });
eleventyConfig.addAsyncShortcode("toot", async function(instance, ID) {
const tootData = await fetch(
`https://${instance}/api/v1/statuses/${ID}`
);
const toot = await tootData.json();
const dateObj = new Date(toot.created_at);
const dateTime = `${dateObj.getDate()}${dateSuffixAdder(dateObj.getDate())} of ${monthMap[dateObj.getMonth()]}, ${dateObj.getFullYear()}, at ${timeFormatter(dateObj.getHours(), dateObj.getMinutes())}`;
return `
<wc-toot
author_name="${toot.account.display_name}"
author_url="${toot.url.replace(/\/[0-9]+/, "")}"
author_username="${toot.account.username}"
avatar_url="${toot.account.avatar_static}"
toot_content="${toot.content}"
toot_url="${toot.url}"
publish_date="${dateTime}"
sharp_corner="">
</wc-toot>
`
});
// Passthrough // Passthrough
eleventyConfig.addPassthroughCopy({ 'public/xsl/*': "/xsl/" }); eleventyConfig.addPassthroughCopy({ 'public/xsl/*': "/xsl/" });
eleventyConfig.addPassthroughCopy({ 'public/img/*': "/img/" }); eleventyConfig.addPassthroughCopy({ 'public/img/*': "/img/" });
eleventyConfig.addPassthroughCopy({ 'public/robots.txt': "/" }); eleventyConfig.addPassthroughCopy({ 'public/robots.txt': "/" });
eleventyConfig.addPassthroughCopy({ 'public/js/*': "/js/" }); eleventyConfig.addPassthroughCopy({ 'public/js/*': "/js/" });
eleventyConfig.addPassthroughCopy({ 'public/js/webComponents/*': "/js/webComponents" }); eleventyConfig.addPassthroughCopy({ 'public/js/webComponents/*': "/js/webComponents" });
eleventyConfig.addPassthroughCopy({ 'public/js/modules/*': "/js/modules" });
// Copying so that basic.xsl can use it // Copying so that basic.xsl can use it
eleventyConfig.addPassthroughCopy({ 'public/css/index.css': "/css/index.css" }); eleventyConfig.addPassthroughCopy({ 'public/css/index.css': "/css/index.css" });
eleventyConfig.addPassthroughCopy({ 'public/css/webfonts/*': "/css/webfonts/" }); eleventyConfig.addPassthroughCopy({ 'public/css/webfonts/*': "/css/webfonts/" });

View File

@ -18,9 +18,10 @@
--font-variation-default: "opsz" 18, "wght" 310, "SOFT" 40, "WONK" 0; --font-variation-default: "opsz" 18, "wght" 310, "SOFT" 40, "WONK" 0;
--font-variation-ui: "wght" 500; --font-variation-ui: "wght" 500;
--font-family-monospace: Consolas, Menlo, Monaco, Andale Mono WT, Andale Mono, Lucida Console, Lucida Sans Typewriter, DejaVu Sans Mono, Bitstream Vera Sans Mono, Liberation Mono, Nimbus Mono L, Courier New, Courier, monospace; --font-family-monospace: Consolas, Menlo, Monaco, Andale Mono WT, Andale Mono, Lucida Console, Lucida Sans Typewriter, DejaVu Sans Mono, Bitstream Vera Sans Mono, Liberation Mono, Nimbus Mono L, Courier New, Courier, monospace;
--meta-font-size: var(--step--1); --meta-font-family: var(--font-family-ui);
--meta-font-style: italic; --meta-font-size: var(--step--2);
--meta-font-variation-settings: "opsz" 12, "wght" 310, "SOFT" 40, "WONK" 0; --meta-font-style: normal;
--meta-font-variation-settings: var(--font-variation-ui);
--ui-letter-spacing: calc(var(--space-3xs) * 0.5); --ui-letter-spacing: calc(var(--space-3xs) * 0.5);
} }
@ -386,20 +387,30 @@ table th {
.continue-discussion button { .continue-discussion button {
margin-top: var(--space-xs); margin-top: var(--space-xs);
} }
wc-comment::part(author-link) { wc-comment::part(author-link), wc-toot::part(author-link) {
font-size: var(--step-0); font-size: var(--step-0);
text-decoration: none; text-decoration: none;
} }
wc-comment::part(main) { wc-comment::part(main) {
margin-bottom: var(--space-l); margin-bottom: var(--space-l);
} }
wc-comment::part(publish-date) { wc-comment::part(publish-date), wc-toot::part(publish-date) {
font-family: var(--meta-font-family);
font-size: var(--meta-font-size); font-size: var(--meta-font-size);
font-style: var(--meta-font-style); font-style: var(--meta-font-style);
font-variation-settings: var(--font-variation-settings); font-variation-settings: var(--font-variation-settings);
margin-top: -.25rem; margin-top: -.25rem;
} }
wc-toot::part(main) {
color: white;
font-family: var(--meta-font-family);
font-size: var(--step--1);
}
wc-toot::part(author), wc-toot::part(author-link){
color: white;
font-style: var(--meta-font-style);
font-variation-settings: "wght" 600;
}
/* Code Fences */ /* Code Fences */
pre, pre,
code { code {

View File

@ -1,3 +1,4 @@
import './webComponents/card.js'; import './webComponents/card.js';
import './webComponents/profilePic.js'; import './webComponents/profilePic.js';
import './webComponents/comment.js'; import './webComponents/comment.js';
import './webComponents/toot.js';

View File

@ -0,0 +1,22 @@
const dateSuffixAdder = (date) => {
if (date > 9 && date < 20) {
return "th";
} else {
let dateString = date < 10 ? "0" + date : "" + date;
if (dateString[1] < 4 && dateString[1] > 0) {
return dateString[1] == 1 ? "st" :
dateString[1] == 2 ? "nd" :
dateString[1] == 3 ? "rd" : null;
} else {
return "th"
}
}
}
const monthMap = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
const timeFormatter = (hours, minutes) => {
return `${hours < 12 ? hours : hours - 12}:${minutes < 10 ? "0" : ""}${minutes} ${hours < 12 ? "AM" : "PM"}`
}
export {dateSuffixAdder, monthMap, timeFormatter};

File diff suppressed because one or more lines are too long