45 lines
1.3 KiB
JavaScript
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)
|
|
}
|
|
})
|