cloudtube_fork/html/static/js/local-video.js

45 lines
1.3 KiB
JavaScript

const q = s => document.querySelector(s) // write this directly rather than importing to avoid an extra round-trip
let status = q("#status")
const form = q("#form")
const data = q("#video-data")
function displayError(root) {
let contents
if (root instanceof Error) { // error in our code here, or fetch API promise rejection
contents = root.toString()
if (root.stack) contents += root.stack
} else { // some JSON something
if (root.error) { // a descriptive report from the instance
contents = root.error.message || root.error
if (root.error.identifier) contents += `\nIdentifier: ${root.error.identifier}`
} else {
contents = JSON.stringify(root, null, 2)
}
}
console.log(contents)
const newStatus = document.createElement("pre")
newStatus.id = "status"
newStatus.textContent = contents
status.replaceWith(newStatus)
status = newStatus
}
fetch(`http://localhost:3000/api/v1/videos/${id}`).then(res => res.json()).then(root => {
if (root.error) {
throw root // it's ok to throw this, it will be caught and displayed
}
data.value = JSON.stringify(root)
form.submit()
status.textContent = "Submitting..."
}).catch(e => {
if (e.message && e.message.includes("NetworkError")) {
status.textContent = "Connection failed. Make sure you're running your own instance locally."
} else {
displayError(e)
}
})