').html(retval.comment).text());
self.prev().remove();
self.replaceWith(' ');
comment.find('.abortCommentEdit').on('click', function(e) {
e.preventDefault();
$(this).prev().remove();
$(this).replaceWith(' ');
textarea.replaceWith(body);
});
comment.find('.saveCommentEdit').on('click', function(e) {
e.preventDefault();
var _this = $(this);
$.ajax({
url: '/api/comments/' + id + '/edit',
method: 'POST',
data: { comment: textarea.val() },
success: function(retval) {
if(retval.error == 'null') {
body.html(retval.rendered_comment);
flash('success', 'Comment edited successfully');
body.find('.comment_clickable_timestamp').on('click', commentClickableTimestamp);
}
else if(retval.error == 'invalid_request')
flash('error', 'Invalid request was sent by your browser');
else if(retval.error == 'not_logged_in')
flash('error', 'Not logged in');
else if(retval.error == 'insufficient_permissions')
flash('error', 'Insufficient permissions');
else if(retval.error == 'comment_not_found')
flash('error', 'Comment does not exist');
else
flash('error', 'Error editing comment');
},
error: function(jqxhr, status, error) {
flash('error', 'Error editing comment');
},
complete: function() {
textarea.replaceWith(body);
_this.next().remove();
_this.replaceWith(' ');
}
});
});
}
else if(retval.error == 'comment_not_found')
flash('error', 'Comment does not exist');
else
flash('error', 'Error editing comment');
},
error: function(jqxhr, status, error) {
flash('error', 'Failed receiving non-rendered comment from API');
}
});
}
/*$(function () {
var cBar = $('.vjs-control-bar');
var cBarStatus = false;
$('video').on('mousemove', function () {
if(cBarStatus) return;
cBar.css('display', 'flex');
cBarStatus = true;
}).on('mouseleave', function (e) {
if($(e.relatedTarget).is('[class^="vjs"]') || !cBarStatus) return;
cBar.hide();
cBarStatus = false;
});
$('[class^="vjs"]').on('mouseleave', function (e) {
if(e.relatedTarget == $('video').get(0) || $(e.relatedTarget).is('[class^="vjs"]') || !cBarStatus) return;
cBar.hide();
cBarStatus = false;
});
});*/
//upload
$(function() {
if(!/\/upload/.test(location.href))
return;
var defaultPreview = $('#dragndrop-text').html();
var defaultDragNDropColor = $('#dragndrop').css('color');
var defaultDragNDropBorderColor = $('#dragndrop').css('border-left-color');
var defaultDragNDropBackgroundColor = $('#dragndrop').css('background-color');
var counter = 0;
var currentFile;
var jqXHR;
var tags = $('#tags_upload');
var nsfwCheckbox = $('#nsfw');
function applyDefaultDragNDropCSS() {
$('#dragndrop').css({
'color': defaultDragNDropColor,
'border-color': defaultDragNDropBorderColor,
'background-color': defaultDragNDropBackgroundColor
});
}
function humanFileSize(size) {
var i = Math.floor(Math.log(size) / Math.log(1024));
return (size / Math.pow(1024, i)).toFixed(2) + ' ' + ['B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'][i];
}
function dragndropLinkClickHandler(e) {
e.preventDefault();
$('input[type="file"]').trigger('click');
}
function restoreDefaultPreview() {
$('#dragndrop-link').on('click', dragndropLinkClickHandler);
$('#dragndrop-link').attr('href', '#');
$('#dragndrop-text').html(defaultPreview);
}
function createPreview(file) {
$('#dragndrop-link').removeAttr('href').off('click');
$('#dragndrop-text').html('
' + file.name + ' — ' + humanFileSize(file.size) + ' — ');
$('#video_preview').prop('volume', 0);
$('#dragndrop-clear').on('click', function(e) {
e.preventDefault();
e.stopPropagation();
currentFile = null;
$(this).off('click');
applyDefaultDragNDropCSS();
restoreDefaultPreview();
if(jqXHR && jqXHR.statusText != "abort") {
jqXHR.abort();
jqXHR = null;
}
});
}
function checkFile(file) {
var maxFileSize = 1e8;
var tooBig = file.size > maxFileSize;
var invalid = file.type !== "video/webm";
if((tooBig && $('#dragndrop').data('uploadlimit')) || invalid) {
flash('error', invalid ? 'Invalid file' : `File too big. Max ${humanFileSize(maxFileSize)}`);
applyDefaultDragNDropCSS();
return false;
}
return true;
}
function submitForm(videotitle, interpret, songtitle, imgsource, category, tags, file) {
var lastState = {
'loaded': 0,
'secondsElapsed': 0
};
var speed = [];
var lastSpeedIndex = 0;
function interval() {
var avgSpeed = 0;
var length = speed.length;
var i;
for(i = lastSpeedIndex; i < length; i++)
avgSpeed += speed[i];
avgSpeed = avgSpeed / (i - lastSpeedIndex);
lastSpeedIndex = i;
$('#upload-stats').text('Speed: ' + humanFileSize(Math.floor(avgSpeed)) + '/s Uploaded: ' + humanFileSize(lastState.loaded));
}
var statsInterval;
var formData = new FormData();
formData.append('videotitle', videotitle);
formData.append('interpret', interpret);
formData.append('songtitle', songtitle);
formData.append('imgsource', imgsource);
formData.append('category', category);
formData.append('tags', tags);
formData.append('file', file);
$('.progress-striped, #upload-stats').css('opacity', 0).slideDown('fast').animate({opacity: 1}, {queue: false, duration: 'fast'});
jqXHR = $.ajax({
url: '/api/video/upload',
type: 'POST',
data: formData,
processData: false,
contentType: false,
success: function(cb) {
switch(cb.error) {
case 'null':
if(cb.video_id) {
flash('success', 'Upload successful:
/' + cb.video_id + '. Redirect in 3 seconds...');
setTimeout(function() {
location.href = '/' + cb.video_id;
}, 3000);
}
else
flash('error', 'Upload failed');
break;
case 'invalid_request':
flash('error', 'Invalid request');
break;
case 'not_logged_in':
flash('error', 'Not logged in');
break;
case 'uploadlimit_reached':
flash('error', 'Uploadlimit reached');
break;
case 'invalid_file':
flash('error', 'Invalid file');
break;
case 'file_too_big':
flash('error', 'File too big. Check the max upload size.');
break;
case 'already_exists':
if(cb.video_id)
flash('error', 'Video already exists:
/' + cb.video_id + '');
else
flash('error', 'Video already existed but has been deleted');
break;
case 'erroneous_file_encoding':
flash('error', 'Erroneous file encoding.
Try reencoding it');
break;
default:
flash('error', 'Upload failed');
break;
}
if(cb.error != 'null') {
$('.progress-bar-custom').css('background-color', 'red');
$('.progress-bar-custom').text('Upload failed');
}
$('#upload-stats').text('Speed: ' + humanFileSize(Math.floor(speed.average())) + '/s Uploaded: ' + humanFileSize(currentFile.size));
},
error: function(jqXHR, status, error) {
jqXHR = null;
if(error == 'abort') {
flash('info', 'Upload aborted');
return;
}
flash('error', 'Upload failed');
$('.progress-bar-custom').css('background-color', 'red');
$('.progress-bar-custom').text('Upload failed');
},
complete: function() {
clearInterval(statsInterval);
},
xhr: function() {
var xhr = $.ajaxSettings.xhr();
var started_at = new Date();
$('.progress-bar-custom').css('background-color', 'rgba(47, 196, 47, 1)');
xhr.upload.onprogress = function(e) {
var percentage = Math.floor(e.loaded / e.total * 100);
var secondsElapsed = (new Date().getTime() - started_at.getTime()) / 1000;
var bytesPerSecond = (e.loaded - lastState.loaded) / (secondsElapsed - lastState.secondsElapsed);
$('.progress-bar-custom').css('width', percentage + '%');
$('.progress-bar-custom').text(percentage + '%');
lastState.secondsElapsed = secondsElapsed;
lastState.loaded = e.loaded;
speed.push(bytesPerSecond);
if(!statsInterval) {
interval();
statsInterval = setInterval(interval, 500);
}
};
return xhr;
}
});
}
$('input[type="file"]').on('change', function(e) {
if(!this.files.length)
return;
var file = this.files[0];
if(checkFile(file)) {
currentFile = file;
createPreview(file);
}
$(this).wrap('