// ==UserScript==
// @name kbin BioSignature
// @namespace http://tampermonkey.net/
// @version 1.0
// @description Adds a user's bio after their comments/posts as a signature
// @author You
// @match https://kbin.social/*
// @match https://fedia.io/*
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant GM_xmlhttpRequest
// @grant GM_setValue
// @grant GM_getValue
// @license MIT
// @downloadURL none
// ==/UserScript==
function fetchFullContent(url, callback) {
GM_xmlhttpRequest({
method: "GET",
url: url,
onload: function(response) {
let parser = new DOMParser();
let doc = parser.parseFromString(response.responseText, "text/html");
let fullContent = doc.querySelector('.section--top .content');
callback(fullContent);
}
});
}
function applyToPost(authors) {
let post = document.querySelector('.entry--single');
post.classList.add('has-signature');
// Get author's name
let authorName = post.querySelector('a.user-inline').innerHTML;
if (authorName in authors) {
addSignature(post, authors[authorName]);
return
}
// Get author's page link
let authorLink = post.querySelector('a.user-inline').href;
fetchFullContent(authorLink, function(fullContent) {
if (fullContent == null) {
return;
}
authors[authorName] = fullContent.innerHTML;
let content = post.querySelector('.entry__body');
if (content) {
content.innerHTML += '
' + fullContent.innerHTML;
} else {
addSignature(post,fullContent.innerHTML);
}
});
}
function applyToNewComments(authors) {
let comments = document.querySelectorAll('blockquote.entry-comment:not(.has-signature');
for(let comment of comments) {
comment.classList.add('has-signature');
// Get author's name
let authorName = ''
if (comment.classList.contains('entry')) {
authorName = comment.querySelector('entry aside.meta.entry__meta > a').innerHTML;
} else {
authorName = comment.querySelector('header a').innerHTML;
}
if (authorName in authors) {
addSignature(comment, authors[authorName]);
continue;
}
// Get author's page link
let authorLink = comment.querySelector('header a').href;
fetchFullContent(authorLink, function(fullContent) {
if (fullContent == null) {
return;
}
authors[authorName] = fullContent.innerHTML;
addSignature(comment,fullContent.innerHTML);
});
}
}
async function addSignature(comment, signature) {
let signatureDiv = await document.createElement('div');
signatureDiv.className = 'signature';
signatureDiv.innerHTML = '
' + signature;
signatureDiv.style = `grid-area: signature`;
// Get comment's footer menu
let menu = await comment.querySelector('footer menu');
// Insert signature before menu
await menu.parentNode.insertBefore(signatureDiv, menu);
//comment.appendChild(signatureDiv);
}
//window.addEventListener('DOMContentLoaded', (event) => {
//});
(function () {
"use strict";
let authors = {};
// Check if page is user profile
if (window.location.pathname.startsWith('/u/')) {
return;
}
applyToPost(authors);
applyToNewComments(authors);
// Observe for new posts
let observer = new MutationObserver(applyToNewComments,authors);
observer.observe(document.body, { childList: true, subtree: true });
})();