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>
</template>
<script>
const monthMap = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
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"}`
}
<script type="module">
import {dateSuffixAdder, monthMap, timeFormatter} from "../../js/modules/mastodonDateTools.js";
const renderComment = (comment, target, parentIdm) => {
const node = document

View File

@ -1,20 +1,21 @@
const { DateTime } = require("luxon");
const markdownIt = require("markdown-it");
const markdownItFootnote = require("markdown-it-footnote");
const markdownItAnchor = require("markdown-it-anchor");
const mdfigcaption = require('markdown-it-image-figures');
const pluginRss = require("@11ty/eleventy-plugin-rss");
const pluginSyntaxHighlight = require("@11ty/eleventy-plugin-syntaxhighlight");
const pluginBundle = require("@11ty/eleventy-plugin-bundle");
const pluginNavigation = require("@11ty/eleventy-navigation");
const prettier = require("prettier");
const { EleventyHtmlBasePlugin } = require("@11ty/eleventy");
import { DateTime } from "luxon";
import markdownIt from "markdown-it";
import markdownItFootnote from "markdown-it-footnote";
import markdownItAnchor from "markdown-it-anchor";
import mdfigcaption from 'markdown-it-image-figures';
import pluginRss from "@11ty/eleventy-plugin-rss";
import pluginSyntaxHighlight from "@11ty/eleventy-plugin-syntaxhighlight";
import pluginBundle from "@11ty/eleventy-plugin-bundle";
import pluginNavigation from "@11ty/eleventy-navigation";
import prettier from "prettier";
import { EleventyHtmlBasePlugin } from "@11ty/eleventy";
import {dateSuffixAdder, monthMap, timeFormatter} from "./public/js/modules/mastodonDateTools.js";
const figoptions = {
figcaption: true
};
module.exports = eleventyConfig => {
export default async function(eleventyConfig) {
// Helper Functions
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
eleventyConfig.addPassthroughCopy({ 'public/xsl/*': "/xsl/" });
eleventyConfig.addPassthroughCopy({ 'public/img/*': "/img/" });
eleventyConfig.addPassthroughCopy({ 'public/robots.txt': "/" });
eleventyConfig.addPassthroughCopy({ 'public/js/*': "/js/" });
eleventyConfig.addPassthroughCopy({ 'public/js/webComponents/*': "/js/webComponents" });
eleventyConfig.addPassthroughCopy({ 'public/js/modules/*': "/js/modules" });
// Copying so that basic.xsl can use it
eleventyConfig.addPassthroughCopy({ 'public/css/index.css': "/css/index.css" });
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-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;
--meta-font-size: var(--step--1);
--meta-font-style: italic;
--meta-font-variation-settings: "opsz" 12, "wght" 310, "SOFT" 40, "WONK" 0;
--meta-font-family: var(--font-family-ui);
--meta-font-size: var(--step--2);
--meta-font-style: normal;
--meta-font-variation-settings: var(--font-variation-ui);
--ui-letter-spacing: calc(var(--space-3xs) * 0.5);
}
@ -386,20 +387,30 @@ table th {
.continue-discussion button {
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);
text-decoration: none;
}
wc-comment::part(main) {
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-style: var(--meta-font-style);
font-variation-settings: var(--font-variation-settings);
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 */
pre,
code {

View File

@ -1,3 +1,4 @@
import './webComponents/card.js';
import './webComponents/profilePic.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