68 lines
2.3 KiB
JavaScript
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();
|
||
|
}
|
||
|
|
||
|
});
|
||
|
}
|