* WIP - started improving handling of sorting for sources index table * WIP - Added UI to table to indicate sort column and direction * Refactored toggle liveview into a livecomponent * Added sorting for all table attrs * Added pagination to the sources table * Added tests for updated liveviews and live components * Add tests for new helper methods * Added fancy new CSS to my sources table * Added size to sources table * Adds relative div to ensure that sorting arrow doesn't run away * Fixed da tests
48 lines
1.4 KiB
JavaScript
48 lines
1.4 KiB
JavaScript
window.copyTextToClipboard = async (text) => {
|
|
// Navigator clipboard api needs a secure context (https)
|
|
if (navigator.clipboard && window.isSecureContext) {
|
|
await navigator.clipboard.writeText(text)
|
|
} else {
|
|
const textArea = document.createElement('textarea')
|
|
textArea.value = text
|
|
// Move textarea out of the viewport so it's not visible
|
|
textArea.style.position = 'absolute'
|
|
textArea.style.left = '-999999px'
|
|
|
|
document.body.prepend(textArea)
|
|
textArea.select()
|
|
|
|
try {
|
|
document.execCommand('copy')
|
|
} catch (error) {
|
|
console.error(error)
|
|
} finally {
|
|
textArea.remove()
|
|
}
|
|
}
|
|
}
|
|
|
|
window.copyWithCallbacks = async (text, onCopy, onAfterDelay, delay = 4000) => {
|
|
await window.copyTextToClipboard(text)
|
|
onCopy()
|
|
setTimeout(onAfterDelay, delay)
|
|
}
|
|
|
|
window.markVersionAsSeen = (versionString) => {
|
|
localStorage.setItem('seenVersion', versionString)
|
|
}
|
|
|
|
window.isVersionSeen = (versionString) => {
|
|
return localStorage.getItem('seenVersion') === versionString
|
|
}
|
|
|
|
window.dispatchFor = (elementOrId, eventName, detail = {}) => {
|
|
const element =
|
|
typeof elementOrId === 'string' ? document.getElementById(elementOrId) : elementOrId
|
|
|
|
// This is needed to ensure the DOM has updated before dispatching the event.
|
|
// Doing so ensures that the latest DOM state is what's sent to the server
|
|
setTimeout(() => {
|
|
element.dispatchEvent(new Event(eventName, { bubbles: true, detail }))
|
|
}, 0)
|
|
}
|