mirror of
https://github.com/SickGear/SickGear.git
synced 2024-12-01 00:43:37 +00:00
f3310e29f2
Change improve security with DNS rebinding prevention, set "Allowed browser hostnames" at config/General/Web Interface. Change improve security with cross-site request forgery (xsrf) protection on web forms. Change improve security by sending header flag httponly with cookies Change improve security by sending header flag secure with SSL cookies Change improve test for creating self-signed SSL cert. Change force restart when switching SSL on/off. Change enable Tornado serve_traceback feature. Change PEP8 tweaks.
348 lines
10 KiB
JavaScript
348 lines
10 KiB
JavaScript
function toggle$(el, cond){
|
|
var ifId = '-if-' + $(el).attr('id');
|
|
if(cond){
|
|
$('.hide' + ifId).fadeOut('fast', 'linear');
|
|
$('.show' + ifId).fadeIn('fast', 'linear');
|
|
} else {
|
|
$('.show' + ifId).fadeOut('fast', 'linear');
|
|
$('.hide' + ifId).fadeIn('fast', 'linear');
|
|
}
|
|
}
|
|
|
|
$(document).ready(function () {
|
|
var enabler = $('.enabler'),
|
|
viewIf = $('input.view-if'),
|
|
viewIfSel = $('select.view-if');
|
|
|
|
enabler.each(function () {
|
|
if (!$(this).prop('checked'))
|
|
$('#content_' + $(this).attr('id')).hide();
|
|
});
|
|
|
|
enabler.click(function () {
|
|
var content_id = $('#content_' + $(this).attr('id'));
|
|
if ($(this).prop('checked'))
|
|
content_id.fadeIn('fast', 'linear');
|
|
else
|
|
content_id.fadeOut('fast', 'linear');
|
|
});
|
|
|
|
viewIf.each(function () {
|
|
$(($(this).prop('checked') ? '.hide-if-' : '.show-if-') + $(this).attr('id')).hide();
|
|
});
|
|
|
|
viewIf.click(function () {
|
|
toggle$(this, $(this).prop('checked'));
|
|
});
|
|
|
|
viewIfSel.each(function () {
|
|
$((0 < $(this).find('option:selected').val() ? '.hide-if-' : '.show-if-') + $(this).attr('id')).hide();
|
|
});
|
|
|
|
viewIfSel.change(function(){
|
|
toggle$(this, 0 < $(this).find('option:selected').val());
|
|
});
|
|
|
|
var idSelect = '#imdb-accounts', idDel = '#imdb-list-del', idInput = '#imdb-url', idOnOff = '#imdb-list-onoff',
|
|
sel = 'selected', opt = 'option', selOpt = [opt, sel].join(':'),
|
|
elDropDown = $(idSelect), elDel = $(idDel), elInput = $(idInput), elOnOff = $(idOnOff);
|
|
|
|
function accId() {return elDropDown.find(selOpt).val();}
|
|
function nameList() {return elDropDown.find(selOpt).text();}
|
|
function isAdd() {return 'new' === accId();}
|
|
function isOff() {return 0 == nameList().indexOf('(Off) ');}
|
|
function warnMessage(msg) { elInput.addClass('warning').prop('title', msg); }
|
|
function all(state) {$([idSelect, idDel, idInput, idOnOff].join()).prop('disabled', 'on' == state ? !1 : !0)}
|
|
function setOnOff() {elOnOff.val(isAdd() || isOff() ? 'Enable' : 'Disable');}
|
|
function setLink() {
|
|
var idView = '#view-list', idLink = '#link-list';
|
|
return $([idView, idLink].join()).removeClass() &&
|
|
((isAdd() || isOff()) && $(idLink).addClass('hide') || $(idView).addClass('hide')) &&
|
|
(!isOff() && $(idLink)
|
|
.attr('href', sbRoot + '/home/addShows/watchlist_imdb?account=' + accId())
|
|
.attr('title', 'View ' + nameList()));
|
|
}
|
|
|
|
function defaultControls() {
|
|
elDel.prop('disabled', isAdd());
|
|
elInput.removeClass('warning')
|
|
.val(!isAdd() && accId() || '')
|
|
.prop('title', isAdd() ? '' : 'Select Add. Use Delete or Disable')
|
|
.prop('readonly', !isAdd());
|
|
setOnOff();
|
|
setLink();
|
|
}
|
|
|
|
function populateSelect(jsonData) {
|
|
/** @namespace response.accounts */
|
|
var response = $.parseJSON(jsonData);
|
|
|
|
if ('Success' !== response.result) {
|
|
warnMessage(response.result);
|
|
return !1;
|
|
}
|
|
|
|
elDropDown.find(opt).slice(1).remove();
|
|
var i, l, accounts = response.accounts, options = elDropDown.get(0).options;
|
|
for (i = 0, l = accounts.length; i < l; i = i + 2) {
|
|
options[options.length] = new Option(accounts[i + 1] +
|
|
(0 == accounts[i + 1].replace('(Off) ', '').toLowerCase().indexOf('your') ? '' : '\'s') + ' list', accounts[i]);
|
|
if (0 <= $.trim(elInput.val()).indexOf(accounts[i])) {
|
|
elDropDown.find(opt).prop(sel, !1);
|
|
elDropDown.find('option[value="' + accounts[i] + '"]').prop(sel, sel);
|
|
elInput.val(accounts[i]);
|
|
elInput.prop('title', 'Select Add. Use Delete or Disable');
|
|
setOnOff();
|
|
}
|
|
}
|
|
return !0;
|
|
}
|
|
|
|
elDropDown.change(function() {
|
|
defaultControls();
|
|
});
|
|
|
|
elDel.on('click', function(e) {
|
|
all('off');
|
|
$.confirm({
|
|
'title' : 'Remove the "' + nameList().replace('\'s', '').replace(' list', '') + '" IMDb Watchlist',
|
|
'message' : 'Are you sure you want to remove <span class="footerhighlight">' + nameList() + '</span> ?<br /><br />',
|
|
'buttons' : {
|
|
'Yes' : {
|
|
'class' : 'green',
|
|
'action': function() {
|
|
all('off');
|
|
$.get(sbRoot + '/home/addShows/watchlist_imdb', {
|
|
'action': elDel.val().toLowerCase(),
|
|
'select': accId()})
|
|
.done(function(response) {
|
|
all('on'); setControls(!populateSelect(response), !1); setOnOff(); })
|
|
.fail(function() {
|
|
all('on'); setControls(!0, 'Invalid ID'); setOnOff(); });
|
|
}
|
|
},
|
|
'No' : {
|
|
'class' : 'red',
|
|
'action': function() { e.preventDefault(); all('on'); defaultControls();}
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
elOnOff.on('click', function(e) {
|
|
var strList = $.trim(elInput.val());
|
|
|
|
elInput.removeClass('warning');
|
|
if (!strList) {
|
|
warnMessage('Missing IMDb list Id or URL');
|
|
} else {
|
|
all('off');
|
|
var params = {'action': elOnOff.val().toLowerCase()};
|
|
if ('enable' == params.action)
|
|
params.input = strList;
|
|
else
|
|
params.select = accId();
|
|
|
|
$.get(sbRoot + '/home/addShows/watchlist_imdb', params)
|
|
.done(function(data) { setControls(!populateSelect(data), !1); })
|
|
.fail(function() { setControls(!0, 'Failed to load list'); });
|
|
}
|
|
});
|
|
|
|
function setControls(resetSelect, message) {
|
|
all('on');
|
|
if (resetSelect) {
|
|
if (message)
|
|
warnMessage(message);
|
|
var addList = '[value="new"]';
|
|
elDropDown.find(opt).not(addList).prop(sel, !1);
|
|
elDropDown.find(opt + addList).prop(sel, sel);
|
|
}
|
|
elDel.prop('disabled', isAdd());
|
|
elInput.prop('readonly', !isAdd());
|
|
setLink()
|
|
}
|
|
|
|
var ui_update_trim_zero = (function () {
|
|
var secs = ('00' + new Date().getSeconds().toString()).slice(-2),
|
|
elSecs = $('#trim_info_seconds'),
|
|
elTrimZero = $('#trim_zero');
|
|
elTrimZero.each(function () {
|
|
var checked = $(this).prop('checked') && $('#fuzzy_dating').prop('checked');
|
|
|
|
$('#time_presets').find('option').each(function () {
|
|
var text = ($(this).text());
|
|
$(this).text(checked
|
|
? text.replace(/(\b\d+:\d\d):\d+/mg, '$1')
|
|
: text.replace(/(\b\d+:\d\d)(?:.\d+)?/mg, '$1:' + secs));
|
|
});
|
|
});
|
|
|
|
if ($('#fuzzy_dating').prop('checked'))
|
|
if (elTrimZero.prop('checked'))
|
|
elSecs.fadeOut('fast', 'linear');
|
|
else
|
|
elSecs.fadeIn('fast', 'linear');
|
|
else
|
|
elSecs.fadeIn('fast', 'linear');
|
|
});
|
|
|
|
$('#trim_zero, #fuzzy_dating').click(function () {
|
|
ui_update_trim_zero();
|
|
});
|
|
|
|
ui_update_trim_zero();
|
|
|
|
$('.datePresets').click(function () {
|
|
var elDatePresets = $('#date_presets'),
|
|
defaultPreset = elDatePresets.val();
|
|
if ($(this).prop('checked') && '%x' == defaultPreset) {
|
|
defaultPreset = '%a, %b %d, %Y';
|
|
$('#date_use_system_default').html('1')
|
|
} else if (!$(this).prop('checked') && '1' == $('#date_use_system_default').html())
|
|
defaultPreset = '%x';
|
|
|
|
elDatePresets.attr('name', 'date_preset_old');
|
|
elDatePresets.attr('id', 'date_presets_old');
|
|
|
|
var elDatePresets_na = $('#date_presets_na');
|
|
elDatePresets_na.attr('name', 'date_preset');
|
|
elDatePresets_na.attr('id', 'date_presets');
|
|
|
|
var elDatePresets_old = $('#date_presets_old');
|
|
elDatePresets_old.attr('name', 'date_preset_na');
|
|
elDatePresets_old.attr('id', 'date_presets_na');
|
|
|
|
if (defaultPreset)
|
|
elDatePresets.val(defaultPreset)
|
|
});
|
|
|
|
// bind 'myForm' and provide a simple callback function
|
|
$('#configForm').ajaxForm({
|
|
beforeSubmit: function () {
|
|
$('.config_submitter').each(function () {
|
|
$(this).attr('disabled', 'disabled');
|
|
$(this).after('<span><img src="' + sbRoot + '/images/loading16' + themeSpinner + '.gif"> Saving...</span>');
|
|
$(this).hide();
|
|
});
|
|
$('.show_update_hour_value').text($('#show_update_hour').val())
|
|
},
|
|
success: function (response) {
|
|
setTimeout(function () {config_success(response)}, 2000);
|
|
}
|
|
});
|
|
|
|
$('#api_key').click(function () {$('#api_key').select()});
|
|
$('#generate_new_apikey').click(function () {
|
|
$.get(sbRoot + '/config/general/generateKey',
|
|
function (data) {
|
|
if (data.error != undefined) {
|
|
alert(data.error);
|
|
return;
|
|
}
|
|
$('#api_key').val(data);
|
|
});
|
|
});
|
|
|
|
$('#branchCheckout').click(function () {
|
|
window.location.href = sbRoot + '/home/branchCheckout?branch=' + $('#branchVersion').val();
|
|
});
|
|
|
|
$('#pullRequestCheckout').click(function () {
|
|
window.location.href = sbRoot + '/home/pullRequestCheckout?branch=' + $('#pullRequestVersion').val();
|
|
});
|
|
|
|
fetch_branches();
|
|
fetch_pullrequests();
|
|
|
|
$('#showlist_tagview').on('change', function() {
|
|
var selected = '#showlist_tagview_', target = $(selected + 'custom_config');
|
|
target.removeClass('hidden');
|
|
if ('custom' !== $(this).val())
|
|
target.addClass('hidden');
|
|
$(selected + 'standard,' + selected + 'anime,' + selected + 'custom').removeClass('hidden').addClass('hidden');
|
|
$(selected + $(this).val()).removeClass('hidden');
|
|
});
|
|
});
|
|
|
|
function config_success(response) {
|
|
if ('reload' == response) {
|
|
window.location.reload(true);
|
|
} else if ('restart' == response) {
|
|
window.location.href = sbRoot + $('a.restart').attr('href')
|
|
}
|
|
$('.config_submitter').each(function () {
|
|
$(this).removeAttr('disabled');
|
|
$(this).next().remove();
|
|
$(this).show();
|
|
});
|
|
$('#email_show').trigger('notify');
|
|
|
|
// update footer only on the config page for the propers option
|
|
if('saveSearch' == $('#configForm').attr('action')){
|
|
getFooterTime({'change_layout': 0});
|
|
}
|
|
}
|
|
|
|
function fetch_pullrequests() {
|
|
$.getJSON(sbRoot + '/config/general/fetch_pullrequests', function (data) {
|
|
$('#pullRequestVersion').find('option').remove();
|
|
if (data['result'] == 'success') {
|
|
var pulls = [];
|
|
$.each(data['pulls'], function (i, pull) {
|
|
if (pull[0] != '') {
|
|
pulls.push(pull);
|
|
}
|
|
});
|
|
if (pulls.length > 0) {
|
|
$.each(pulls, function (i, text) {
|
|
add_option_to_pulls(text);
|
|
});
|
|
$('#pullRequestCheckout').removeAttr('disabled');
|
|
} else {
|
|
add_option_to_pulls(['No pull requests available', '']);
|
|
}
|
|
} else {
|
|
add_option_to_pulls(['Failed to connect to github', '']);
|
|
}
|
|
});
|
|
}
|
|
|
|
function fetch_branches() {
|
|
$.getJSON(sbRoot + '/config/general/fetch_branches', function (data) {
|
|
$('#branchVersion').find('option').remove();
|
|
if (data['result'] == 'success') {
|
|
var branches = [];
|
|
$.each(data['branches'], function (i, branch) {
|
|
if (branch != '') {
|
|
branches.push(branch);
|
|
}
|
|
});
|
|
if (branches.length > 0) {
|
|
$.each(branches, function (i, text) {
|
|
add_option_to_branches(text);
|
|
});
|
|
$('#branchCheckout').removeAttr('disabled');
|
|
$('#branchVersion').find('option[value="' + data['current'] + '"]').prop('selected', !0);
|
|
} else {
|
|
add_option_to_branches('No branches available');
|
|
}
|
|
} else {
|
|
add_option_to_branches('Failed to connect to github');
|
|
}
|
|
});
|
|
}
|
|
|
|
function add_option_to_pulls(text) {
|
|
var option = $('<option>');
|
|
option.val(text[1]);
|
|
option.html(text[0]);
|
|
option.appendTo('#pullRequestVersion');
|
|
}
|
|
|
|
function add_option_to_branches(text) {
|
|
var option = $('<option>');
|
|
option.val(text);
|
|
option.html(text);
|
|
option.appendTo('#branchVersion');
|
|
}
|