1
0
Fork 0
mirror of https://github.com/Luzifer/share.git synced 2024-10-18 13:24:23 +00:00
share/frontend/app.js
Knut Ahlers 4aa525a02b
Add text displa and code highlight
Signed-off-by: Knut Ahlers <knut@ahlers.me>
2018-04-22 20:55:46 +02:00

109 lines
2.3 KiB
JavaScript

let fileURL = null;
const MSG_NOT_FOUND = 'File not found';
const MSG_NOT_PERMITTED = 'Not allowed to access file';
const MSG_GENERIC_ERR = 'Something went wrong';
/* global $:false */
class Share {
init() {
$(window).bind('hashchange', (e) => {
this.hashLoad();
});
let appTitle = `Share @ ${window.location.host}`;
$('title,.apptitle').text(appTitle);
this.hashLoad();
}
embedFileInfo(file = '') {
if (file === '') {
this.handleErrorMessage(MSG_NOT_FOUND);
}
fileURL = file;
$.ajax(file, {
method: 'HEAD',
success: (data, status, xhr) => {
this.handleEmbed(data, status, xhr);
},
error: (xhr, status) => {
this.handleError(xhr, status);
},
});
}
handleEmbed(data, status, xhr) {
let type = xhr.getResponseHeader('Content-Type');
$('.container').hide();
$('.filename').text(fileURL.substring(fileURL.lastIndexOf('/') + 1));
if (type.match(/^image\//)) {
$('.filelink-src').attr('src', fileURL);
$('.show-image').show();
return;
}
if (type.match(/^video\//)) {
let src = $('<source>');
src.attr('src', fileURL);
src.appendTo($('video'));
$('.show-video').show();
return;
}
if (type.match(/^(text\/|application\/javascript)/)) {
$.ajax(fileURL, {
dataType: 'text',
method: 'GET',
success: (data) => {
$('code').text(data);
$('.show-text').show();
hljs.initHighlighting();
},
error: (xhr, status) => {
this.handleError(xhr, status);
},
});
return;
}
$('.filelink-href').attr('href', fileURL);
$('.show-generic').show();
}
handleError(xhr, status) {
let message = '';
switch (xhr.status) {
case 404:
message = MSG_NOT_FOUND;
break;
case 403:
message = MSG_NOT_PERMITTED;
break;
default:
message = MSG_GENERIC_ERR;
break;
}
this.handleErrorMessage(message);
}
handleErrorMessage(message) {
$('.error').text(message);
$('.container').hide();
$('.show-error').show();
}
hashLoad() {
let file = window.location.hash.substring(1);
this.embedFileInfo(file);
}
}
$(function() {
let share = new Share();
share.init();
});