Files
youtube-dl-web/script.js
2018-12-21 15:12:59 +01:00

124 lines
4.2 KiB
JavaScript

jQuery(document).ready(function($){
$('form').submit(function(e) {
e.preventDefault();
var resultWrapper, result, resultHeader, resultBody, resultContent;
$('#results').append(resultWrapper = $('<div>')
.addClass('col-xl-3 col-md-4 col-sm-6 col-12')
.append(result = $('<div>')
.addClass('card text-white bg-secondary')
.append(resultHeader = $('<div>')
.addClass('card-header')
.text($("input[name=url]").val() + ' ')
.append($('<small>')
.text($('select[name=option] option:selected').text())
)
)
.append(resultBody = $('<div>')
.addClass('card-body')
.append(resultContent = $('<pre>')
)
)
)
);
function formatText(text) {
var result = "";
for(var line of text.split("\n")) {
var parts = line.split("\r");
result += parts[parts.length - 1] + "\n";
}
return result;
}
$.ajax({
'url': $('form').attr('action'),
'method': $('form').attr('method'),
'data': (function() {
var data = {};
$('form input, form select').each(function(){
data[$(this).attr('name')] = $(this).val();
});
return data;
})(),
'processData': true,
'contentType': 'application/x-www-form-urlencoded; charset=UTF-8',
'xhr': function() {
var xhr = new XMLHttpRequest();
xhr.addEventListener('progress', function(e) {
resultContent.text(formatText(e.target.response));
}, false);
return xhr;
},
'success': function(data) {
resultContent.text(formatText(data));
result
.removeClass('bg-warning')
if(data.indexOf('exit code: 0') == -1) {
result
.addClass('bg-danger')
.append($('<p>').text('There was an error while processing your request!'));
return;
}
var anyLink = false;
for(regex of [
/Destination: ([^\n\r$]*)/g,
/ ([^ ]+) has already been downloaded and merged/g
]) {
var match;
while (match = regex.exec(data)) {
if(anyLink) {
resultBody.append($('<br/>'));
}
resultBody.append($('<a>')
.addClass('btn btn-sm btn-primary')
.attr('href', 'files/' + match[1])
.text(match[1])
);
anyLink = true;
}
}
if(anyLink) {
result
.addClass('bg-success');
} else {
result
.addClass('bg-danger')
.append($('<p>').text('Did not find any downloadable file!'));
}
},
'error': function(jqXHR, textStatus, errorThrown) {
resultContent.text(formatText(jqXHR.responseText));
result
.removeClass('alert-warning')
.addClass('alert-danger')
.append($('<p>').text('Request failed!'));
},
'complete': function() {
resultHeader.prepend($('<a>')
.html('&times;')
.addClass('float-right btn btn-sm btn-danger')
.attr('href', '#')
.click(function(e) {
e.preventDefault();
resultWrapper.remove();
})
)
}
});
$('form input').val('');
});
});