blog/assets/js/mastodon-share.js
2024-08-05 19:55:02 +02:00

68 lines
2.3 KiB
JavaScript

// I got the key, I got the secret…
let key = 'mastodon-instance';
let instance = localStorage.getItem(key);
// get the link from the DOM
const button = document.querySelector('.mastodon-share');
// refresh the link with the instance name
const refreshlink = (instance) => {
button.href = `https://${instance}/share?text=${encodeURIComponent(document.title)}%0A${encodeURIComponent(location.href)}`;
}
// got it? Let's go!
if (button) {
// labels and texts from the link
let prompt = button.dataset.prompt || 'Please tell me your Mastodon instance';
let editlabel = button.dataset.editlabel || 'Edit your Mastodon instance';
let edittext = button.dataset.edittext || '✏️';
// Ask the user for the instance name and set it…
const setinstance = _ => {
instance = window.prompt(prompt, instance);
if(instance) {
localStorage.setItem(key, instance);
createeditbutton();
refreshlink(instance);
button.click();
}
}
// create and insert the edit link
const createeditbutton = _ => {
if (document.querySelector('button.mastodon-edit')) return;
let editlink = document.createElement('button');
editlink.innerText = edittext;
editlink.classList.add('mastodon-edit');
editlink.title = editlabel;
editlink.ariaLabel = editlabel;
editlink.addEventListener('click', (e) => {
e.preventDefault();
localStorage.removeItem(key);
setinstance();
});
button.insertAdjacentElement('afterend', editlink);
}
// if there is a value in localstorage, create the edit link
if(localStorage.getItem(key)) {
createeditbutton();
}
// When a user clicks the link
button.addEventListener('click', (e) => {
// If the user has already entered their instance
// and it is in localstorage write out the link href
// with the instance and the current page title and URL
if(localStorage.getItem(key)) {
refreshlink(localStorage.getItem(key));
// otherwise, prompt the user for their instance and save it to localstorage
} else {
e.preventDefault();
setinstance();
}
});
}