81 lines
3.3 KiB
JavaScript
81 lines
3.3 KiB
JavaScript
// Function to generate URL
|
|
function getFinalURL(domain, text, link) {
|
|
var url = ''
|
|
if (domain === 'elk.zone') {
|
|
// Elk web app
|
|
url = 'https://elk.zone/intent/post?text=' + encodeURIComponent(text + '<br /><br />' + link)
|
|
} else {
|
|
// Standard Mastodon URL intent
|
|
url = 'https://' + domain + '/share?text=' + encodeURIComponent(text + '\n\n' + link)
|
|
}
|
|
return url
|
|
}
|
|
|
|
// Function to initialize UI and redirects
|
|
async function init() {
|
|
// Generate links to options page
|
|
document.querySelectorAll('.extension-settings-link').forEach(function(el) {
|
|
el.addEventListener('click', function() {
|
|
chrome.runtime.openOptionsPage()
|
|
window.close()
|
|
})
|
|
})
|
|
// Get data from URL and storage
|
|
var inputParams = new URL((window.location.href)).searchParams
|
|
var shareLink = inputParams.get('link')
|
|
var shareText = inputParams.get('text')
|
|
var data = await chrome.storage.sync.get()
|
|
// Show warning if no servers are saved
|
|
if ((!data.serverList) || (data.serverList.length === 0)) {
|
|
document.querySelector('#server-warning').classList.remove('d-none')
|
|
return false
|
|
}
|
|
// If there's only one server, or if the server was picked from the context menu, redirect to that one
|
|
if (inputParams.get('server') != 'generic') {
|
|
document.querySelector('#server-loading').classList.remove('d-none')
|
|
window.location = getFinalURL(inputParams.get('server'), shareText, shareLink)
|
|
return false
|
|
} else if (data.serverList.length === 1) {
|
|
document.querySelector('#server-loading').classList.remove('d-none')
|
|
window.location = getFinalURL(data.serverList[0], shareText, shareLink)
|
|
return false
|
|
}
|
|
console.log(inputParams.get('server'))
|
|
// Create list of servers
|
|
var serverListEl = document.querySelector('#server-list')
|
|
for (server in data.serverList) {
|
|
// Create link list element
|
|
var serverUrl = data.serverList[server]
|
|
var linkEl = document.createElement('a')
|
|
linkEl.classList.add('list-group-item', 'list-group-item', 'list-group-item-action', 'fw-bold')
|
|
linkEl.innerText = serverUrl
|
|
linkEl.href = getFinalURL(serverUrl, shareText, shareLink)
|
|
linkEl.rel = 'preconnect'
|
|
// Add server icon to list
|
|
var serverImg = document.createElement('img')
|
|
if (serverUrl === 'elk.zone') {
|
|
serverImg.setAttribute('src', chrome.runtime.getURL('img/elk.png'))
|
|
} else {
|
|
serverImg.setAttribute('src', 'https://' + serverUrl + '/favicon.ico')
|
|
}
|
|
serverImg.setAttribute('alt', serverUrl + ' icon')
|
|
serverImg.ariaHidden = 'true'
|
|
serverImg.onerror = function() {
|
|
// Show a monochrome Mastodon icon if the server isn't responding
|
|
this.src = chrome.runtime.getURL('img/mastodon-offline.png')
|
|
}
|
|
linkEl.prepend(serverImg)
|
|
// Inject element
|
|
serverListEl.appendChild(linkEl)
|
|
}
|
|
// Show list
|
|
serverListEl.classList.remove('d-none')
|
|
}
|
|
|
|
// Show loading animation when a link is clicked
|
|
window.addEventListener('beforeunload', function() {
|
|
document.querySelector('#server-list').classList.add('d-none')
|
|
document.querySelector('#server-loading').classList.remove('d-none')
|
|
})
|
|
|
|
init() |