Handle errors in embed

pull/525/head
Chocobozzz 2018-04-19 18:06:59 +02:00
parent 76434ec8e3
commit d4f3fea659
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
3 changed files with 90 additions and 5 deletions

View File

@ -11,6 +11,12 @@
<body>
<div id="error-block">
<h1 id="error-title">Sorry</h1>
<div id="error-content"></div>
</div>
<video id="video-container" class="video-js vjs-peertube-skin">
</video>

View File

@ -4,6 +4,16 @@
@import '~videojs-dock/dist/videojs-dock.css';
@import '../../sass/video-js-custom.scss';
[hidden] {
display: none !important;
}
body {
font-family: $main-fonts;
font-weight: $font-regular;
color: #000;
}
video {
width: 99%;
}
@ -43,3 +53,38 @@ html, body {
}
}
}
#error-block {
display: none;
flex-direction: column;
align-content: center;
justify-content: center;
text-align: center;
background-color: #141313;
width: 100%;
height: 100%;
color: white;
box-sizing: border-box;
font-family: sans-serif;
#error-title {
font-size: 45px;
margin-bottom: 5px;
}
#error-content {
font-size: 24px;
}
}
@media screen and (max-width: 300px) {
#error-block {
font-size: 36px;
#error-content {
font-size: 14px;
}
}
}

View File

@ -9,19 +9,53 @@ function getVideoUrl (id: string) {
return window.location.origin + '/api/v1/videos/' + id
}
async function loadVideoInfo (videoId: string): Promise<VideoDetails> {
const response = await fetch(getVideoUrl(videoId))
return response.json()
function loadVideoInfo (videoId: string): Promise<Response> {
return fetch(getVideoUrl(videoId))
}
function removeElement (element: HTMLElement) {
element.parentElement.removeChild(element)
}
function displayError (videoElement: HTMLVideoElement, text: string) {
// Remove video element
removeElement(videoElement)
document.title = 'Sorry - ' + text
const errorBlock = document.getElementById('error-block')
errorBlock.style.display = 'flex'
const errorText = document.getElementById('error-content')
errorText.innerHTML = text
}
function videoNotFound (videoElement: HTMLVideoElement) {
const text = 'This video does not exist.'
displayError(videoElement, text)
}
function videoFetchError (videoElement: HTMLVideoElement) {
const text = 'We cannot fetch the video. Please try again later.'
displayError(videoElement, text)
}
const urlParts = window.location.href.split('/')
const videoId = urlParts[urlParts.length - 1]
loadVideoInfo(videoId)
.then(videoInfo => {
.then(async response => {
const videoContainerId = 'video-container'
const videoElement = document.getElementById(videoContainerId) as HTMLVideoElement
if (!response.ok) {
if (response.status === 404) return videoNotFound(videoElement)
return videoFetchError(videoElement)
}
const videoInfo: VideoDetails = await response.json()
let autoplay = false
let startTime = 0