Doing this means we only have to serve up a single js file across all pages, reducing the amount of fuckery the backend has to do. Also we can start marking the js to require much heavier caching
83 lines
1.9 KiB
TypeScript
83 lines
1.9 KiB
TypeScript
export class VideoMeta {
|
|
name: string|null
|
|
thumbnail: string|null
|
|
category: string
|
|
basename: string|null
|
|
|
|
constructor(raw: any) {
|
|
this.name = raw['name']
|
|
this.thumbnail = raw['thumbnail']
|
|
|
|
let path = window.location.pathname
|
|
this.category = path.substring(path.lastIndexOf('/')+1)
|
|
|
|
this.basename = this.name ?
|
|
this.name.slice(0, this.name.lastIndexOf('.')) :
|
|
null
|
|
}
|
|
|
|
private clean_link(link: string) : string {
|
|
// NOTE: no need to url encode since browser does that anyway
|
|
for(const part of ['.', '-', '_', 'mp4', 'mkv', 'webm']) {
|
|
link = link.replace(part, ' ')
|
|
}
|
|
return link
|
|
}
|
|
|
|
title_link() : HTMLHeadingElement {
|
|
let container = document.createElement('h2')
|
|
let link = document.createElement('a')
|
|
if(this.name) {
|
|
link.href = `/clip/${this.category}/${this.basename}`
|
|
link.text = this.clean_link(this.name)
|
|
} else {
|
|
link.href = '#'
|
|
link.text = this.name + 'ft. No thumbnail'
|
|
}
|
|
|
|
container.appendChild(link)
|
|
|
|
|
|
return container
|
|
}
|
|
|
|
thumbnail_div() : HTMLAnchorElement {
|
|
let nail = document.createElement('img')
|
|
nail.className = 'img-fluid'
|
|
|
|
// Modern browser's should be able to cache this request
|
|
if(!(this.thumbnail == null || this.thumbnail.length == 0)) {
|
|
nail.setAttribute('src', this.thumbnail)
|
|
} else{
|
|
nail.setAttribute('src', '/cantfindshit.gif')
|
|
}
|
|
let link = document.createElement('a')
|
|
if(this.name) {
|
|
link.href = `/clip/${this.category}/${this.basename}`
|
|
} else {
|
|
link.href = '#'
|
|
}
|
|
link.appendChild(nail)
|
|
|
|
return link
|
|
}
|
|
|
|
public as_div() {
|
|
let container = document.createElement('div')
|
|
container.className = 'video-block'
|
|
|
|
let title = this.title_link()
|
|
let thumbnail = this.thumbnail_div()
|
|
|
|
container.appendChild(title)
|
|
container.appendChild(thumbnail)
|
|
|
|
// Dump gallery onto the main page
|
|
document.getElementById('main-container').appendChild(container)
|
|
|
|
return container
|
|
}
|
|
}
|
|
|
|
|