const MASTODON_ACCOUNT_ID = '109285376472065471' const MASTODON_HOST = 'social.sd.ai' async function copyElementTextToClipboard(e) { const text = e.textContent await navigator.clipboard.write(text) e.classList.add('tootClick'); setTimeout(() => { e.classList.remove('tootClick'); }, 600); } function escapeHtml(unsafe) { return unsafe .replace(/&/g, "&") .replace(//g, ">") .replace(/"/g, """) .replace(/'/g, "'"); } function renderMastodonContent(toots, parentElement) { if (!Array.isArray(toots) || toots.length === 0) { document.getElementById('mastodon-comments-list').innerHTML = "
No comments (yet)!
" return } for (const toot of toots) { toot.account.display_name = escapeHtml(toot.account.display_name) console.log(toot) toot.account.emojis.forEach(emoji => { toot.account.display_name = toot.account.display_name.replace(`:${emoji.shortcode}:`, `Emoji ${emoji.shortcode}`); }) toot.emojis.forEach(emoji => { toot.content = toot.content.replace(`:${emoji.shortcode}:`, `Emoji ${emoji.shortcode}`); }) const comment = `
${escapeHtml(toot.account.display_name)}'s avatar
${toot.content} ${toot.uri}
` const child = DOMPurify.sanitize(comment, {'RETURN_DOM_FRAGMENT': true}); const links = child.querySelectorAll('.tootlink'); for (const link of links) { link.onclick = function() { return copyToClipboard(this); } } parentElement.appendChild(child); } } document.addEventListener("DOMContentLoaded", async (event) => { if (document.getElementsByClassName('gh-sidebar').length > 0) { const element = document.getElementById('mastodon-comments-list') const response = await fetch(`https://${MASTODON_HOST}/api/v1/accounts/${MASTODON_ACCOUNT_ID}/statuses?exclude_replies=true&exclude_reblogs=true`) const content = await response.json() return renderMastodonContent(content, element) } })