dyno-bot/Dyno-web-wip-admin/public/js/app.js
2020-09-12 19:08:48 +01:00

881 lines
25 KiB
JavaScript

/* eslint-disable */
//globals for react
var _showSuccess, _showError
(function ($) {
$(document).ready(function() {
var successTimeout, errorTimeout;
if (window.location.hash) {
var hash = window.location.hash;
if (hash) {
var parts = hash.replace('module-', '').replace(/^#?\//, '').split('-'),
tab = hash.indexOf('module-') > -1 ? 'module-' + parts.join('-') :
(parts.length > 1 ? 'module-' + parts[0] : parts[0]);
setTimeout(function () {
var $tab = $('#' + tab);
var $tabControl = $('.tab-control-legacy[href="#/' + tab + '"]');
if (parts.length > 1) {
var $subtab = $('#' + parts.join('-'));
var $subtabControl = $('.subtab-control-legacy[href="' + '#/' + parts.join('-') + '"]');
$subtabControl.closest('.tabs').find('li').removeClass('is-active');
$subtab.closest('.tab-content').find('.subtab-content').removeClass('is-active');
$subtabControl.parent().addClass('is-active');
$subtab.addClass('is-active');
}
$('.tab-control-legacy').removeClass('is-active');
$('.tab-content').removeClass('is-active');
$('#loader').removeClass('is-active');
$tabControl.addClass('is-active');
$tab.addClass('is-active');
if (parts.length <= 1) return;
}, 200);
} else {
$('#loader').removeClass('is-active');
$('#settings').addClass('is-active');
$('.tab-control-legacy[href="#/settings"]').addClass('is-active');
}
} else {
$('#loader').removeClass('is-active');
$('#settings').addClass('is-active');
$('.tab-control-legacy[href="#/settings"]').addClass('is-active');
}
function showSuccess(msg) {
clearTimeout(successTimeout);
$('.success').find('p').html(msg);
$('.success').removeClass('is-hidden')
successTimeout = setTimeout(function () {
$('.success').addClass('is-hidden');
}, 5000);
}
_showSuccess = showSuccess;
function showError(msg) {
clearTimeout(errorTimeout);
$('.error').find('p').html(msg);
$('.error').removeClass('is-hidden')
errorTimeout = setTimeout(function () {
$('.error').addClass('is-hidden');
}, 10000);
}
_showError = showError;
function apiPost(url, data, callback) {
if (typeof data === 'function') {
callback = data;
data = {};
}
var options = {
method: 'POST',
url: url,
};
data = data || {};
if (data) {
options.data = data;
}
$.ajax(options).done(function (msg) {
return callback(null, msg);
}).fail(function () {
return callback(true);
});
}
$('.oauth').on('click', function (e) {
e.preventDefault();
window.open($(this).attr('href'), 'addbotpage', 'width=495,height=600');
});
// handle tabs
$('.tab-control-legacy').on('click', function (e) {
// e.preventDefault();
var tab = $(this).attr('href').replace(/^#?\//, '#');
$('.tab-control-legacy').removeClass('is-active');
$('.tab-content').removeClass('is-active');
$(this).addClass('is-active');
$(tab).addClass('is-active');
});
// handle subtabs
$('.subtab-control-legacy').on('click', function (e) {
// e.preventDefault();
var tab = $(this).attr('href').replace(/^#?\//, '#');
// $('.subtab-control-legacy').parent().removeClass('is-active');
$(this).closest('.tabs').find('li').removeClass('is-active');
$(this).closest('.tab-content').find('.subtab-content').removeClass('is-active');
$(this).parent().addClass('is-active');
$(tab).addClass('is-active');
});
$('.queue-control').on('click', function (e) {
var $tab = $('#module-music');
$tab.find('.subtab-content').removeClass('is-active');
$tab.find('.tabs').find('li').removeClass('is-active');
$tab.find('#music-queue').addClass('is-active');
$(this).closest('.tabs').find('li').removeClass('is-active');
$('.tab-control-legacy').removeClass('is-active');
$('.tab-content').removeClass('is-active');
$('.tab-control-legacy[href="#/module-music"]').addClass('is-active');
$('.subtab-control-legacy[href="#/music-queue"]').closest('li').addClass('is-active');
$tab.addClass('is-active');
});
// Server selector
$('.server-select > select').on('change', function () {
window.location.href = '/manage/' + $(this).val();
});
// faq toggle
$('.faq-title').on('click', function (e) {
e.preventDefault();
$(this).toggleClass('is-active');
$(this).next().toggleClass('is-active');
});
// module checkboxes
// $('.module').on('change', function () {
// var module = $(this).val(),
// enabled = this.checked,
// url = '/api/server/' + server + '/updateMod',
// data = { module: module, enabled: enabled };
// apiPost(url, data, function (err, msg) {
// if (err) return showError('An error occurred.');
// var enabledOrDisabled = enabled ? 'enabled' : 'disabled';
// return showSuccess("Module '" + module + "' has been " + enabledOrDisabled + '.');
// });
// });
// $('.module-toggle').on('click', function (e) {
// if (e.target !== this) return;
// var $checkbox = $(this).find('input[type=checkbox]'),
// checked = $checkbox.prop('checked');
// $checkbox.prop('checked', checked ? false : true).attr('checked', 'checked').trigger('change');
// });
// Update nickname
$('.nick').on('click', function (e) {
e.preventDefault();
var nick = $(this).prev('input[type=text]').val(),
maxLength = $(this).attr('maxlength'),
url = '/api/server/' + server + '/updateNick',
data = { nick: nick };
if (maxLength && nick.length > maxLength) {
return showError('Nickname is too long.');
}
apiPost(url, data, function (err, msg) {
if (err) return showError('An error occurred.');
return showSuccess('Nickname changed to ' + nick);
});
});
$('.remove-moderator').on('click', function (e) {
e.preventDefault();
var $el = $(this),
id = $el.attr('id'),
url = '/api/server/' + server + '/removeModerator',
data = { id: id };
apiPost(url, data, function (err, msg) {
if (err) return showError('An error occurred.');
showSuccess('Removed moderator.');
$el.closest('.mod').remove();
});
});
// text box submits (when they press enter)
$('.text-form').on('submit', function (e) {
$(this).find('.button').click();
e.preventDefault();
return;
});
// update settings (by clicking the update button)
$('.update-setting').on('click', function (e) {
e.preventDefault();
var text = $(this).prev('input[type=text]'),
setting = text.attr('name'),
maxLength = text.attr('maxlength'),
url = '/api/server/' + server + '/updateSetting',
data = { setting: setting, value: text.val() };
if (maxLength && text.val().length > maxLength) {
return showError('Setting length is too long.');
}
apiPost(url, data, function (err, msg) {
if (err) return showError('An error occurred.');
return showSuccess('Changed ' + setting + ': ' + text.val());
});
});
// bot setting checkboxes
$('.setting-checkbox').on('change', function () {
var setting = $(this).attr('name'),
enabled = this.checked,
url = '/api/server/' + server + '/updateSetting',
data = { setting: setting, value: enabled };
apiPost(url, data, function (err, msg) {
if (err) return showError('An error occurred.');
var enabledOrDisabled = enabled ? 'enabled' : 'disabled';
return showSuccess("'" + setting + "' has been " + enabledOrDisabled + '.');
});
});
// beta checkbox
$('.beta-checkbox').on('change', function () {
var setting = $(this).attr('name'),
enabled = this.checked,
url = '/api/server/' + server + '/updateSetting',
data = { setting: setting, value: enabled };
apiPost(url, data, function (err) {
if (err) return showError('An error occurred.');
var enabledOrDisabled = enabled ? 'Enabled' : 'Disabled';
var redirect = enabled ? 'https://beta.dynobot.net' : 'https://www.dynobot.net';
showSuccess(enabledOrDisabled + ' Dyno Beta, redirecting you to ' + redirect);
// redirect
window.location.href = redirect;
});
});
// update module settings (by clicking the button)
$('.update-module-setting').on('click', function (e) {
e.preventDefault();
var parent = $(this).closest('form'),
text = parent.find('input[type=text], textarea'),
module = text.attr('data-module'),
setting = text.attr('name'),
url = '/api/server/' + server + '/updateModSetting',
data = { module: module, setting: setting, value: text.val() };
apiPost(url, data, function (err, msg) {
if (err) return showError('An error occurred.');
return showSuccess('Changed ' + setting + ': ' + text.val());
});
});
// announcement setting checkboxes
// $('.module-setting-checkbox').on('change', function () {
// var setting = $(this).attr('name'),
// module = $(this).attr('data-module'),
// enabled = this.checked,
// url = '/api/server/' + server + '/updateModSetting',
// data = { module: module, setting: setting, value: enabled };
// apiPost(url, data, function (err, msg) {
// if (err) return showError('An error occurred.');
// var enabledOrDisabled = enabled ? 'enabled' : 'disabled';
// return showSuccess("'" + setting + "' has been " + enabledOrDisabled + '.');
// });
// });
// module setting dropdowns
$('.setting-dropdown').on('change', function () {
var setting = $(this).attr('name'),
module = $(this).attr('data-module'),
value = $(this).val(),
endpoint = module ? '/updateModSetting' : '/updateSetting',
url = '/api/server/' + server + endpoint,
data = { setting: setting, value: value };
if (module) {
data.module = module;
}
apiPost(url, data, function (err, msg) {
if (err) return showError('An error occurred.');
var enabledOrDisabled = enabled ? 'enabled' : 'disabled';
return showSuccess(setting + " changed.");
});
});
// Module channel adding
// $('.add-module-item').on('click', function (e) {
// e.preventDefault();
// var data = $(this).closest('form').serializeArray(),
// url = '/api/server/' + server + '/moduleItem/add';
// data.push({ name: 'module', value: $(this).attr('data-module') });
// data.push({ name: 'setting', value: $(this).attr('data-setting') });
// apiPost(url, $.param(data), function (err, msg) {
// if (err) return showError('An error occurred.');
// showSuccess(msg.value + ' added');
// return location.reload();
// });
// });
// Module channel removing
$('.remove-module-item').on('click', function (e) {
e.preventDefault();
var $el = $(this).closest('tr'),
id = $(this).attr('data-id'),
module = $(this).attr('data-module'),
setting = $(this).attr('data-setting'),
url = '/api/server/' + server + '/moduleItem/remove',
data = { module: module, setting: setting, id: id };
apiPost(url, data, function (err, msg) {
if (err) return showError('An error occurred.');
showSuccess(msg.value + ' removed.');
return $el.remove();
});
});
// $('.item-channel').on('change', function () {
// var name = $('option:selected', this).attr('data-name');
// $(this).closest('form').find('input[name=name]').val(name);
// });
// $('.playlist-remove').on('click', function (e) {
// e.preventDefault();
// var $el = $(this),
// index = $el.attr('id'),
// url = '/api/server/' + server + '/playlist/delete',
// data = { index: index };
// apiPost(url, data, function (err, msg) {
// if (err) return showError('An error occurred.');
// return $el.closest('tr').remove();
// });
// });
$('.playlist-clear').on('click', function (e) {
e.preventDefault();
var $el = $(this),
url = '/api/server/' + server + '/playlist/clear';
apiPost(url, data, function (err, msg) {
if (err) return showError('An error occurred.');
return $el.closest('tr').remove();
});
});
// custom commands
function createCommand($form) {
var url = '/api/server/' + server + '/customCommand/create',
data = $form.serialize();
apiPost(url, data, function (err, msg) {
if (err) return showError('An error occurred.');
$form.find('input[type=text]').val('');
$form.find('textarea').val('');
showSuccess("Command created.");
return location.reload();
});
}
function editCommand(command, response) {
var url = '/api/server/' + server + '/customCommand/edit',
data = { command, response }
apiPost(url, data, function (err, msg) {
if (err) return showError('An error occurred.');
showSuccess("Command edited.");
return location.reload();
});
}
$('.new-command a.button').on('click', function (e) {
e.preventDefault();
var $form = $(this).closest('form');
createCommand($form);
});
$('.new-command').on('submit', function (e) {
e.preventDefault();
var $form = $(this);
createCommand($form);
});
// $('.command-remove').on('click', function (e) {
// e.preventDefault();
// var $el = $(this),
// command = $el.attr('data-command'),
// url = '/api/server/' + server + '/customCommand/delete',
// data = { command: command };
// apiPost(url, data, function (err, msg) {
// if (err) return showError('An error occurred.');
// showSuccess('Command removed.');
// return $el.closest('tr').remove();
// });
// });
$('.command-edit').on('click', function (e) {
e.preventDefault();
var command = $(this).attr('data-command');
var response = $(this).attr('data-response');
$('.edit-command-modal input').val(command)
$('.edit-command-modal textarea').text(response)
$('.edit-command-modal .button').attr('data-command', command)
$('.edit-command-modal').addClass('is-active');
});
$('.command-save').on('click', function(e) {
e.preventDefault();
var $form = $(this).closest('form');
var command = $(this).attr('data-command'),
response = $('.edit-command-modal textarea').val()
editCommand(command, response);
});
// $('.edit-command-modal .modal-close').on('click', function (e) {
// $('.edit-command-modal').removeClass('is-active');
// });
// $('.edit-command-modal .modal-background').on('click', function (e) {
// $('.edit-command-modal').removeClass('is-active');
// });
// auto responder
function createResponse($form) {
var url = '/api/server/' + server + '/autoResponse/create',
data = $form.serialize();
apiPost(url, data, function (err, msg) {
if (err) return showError('An error occurred.');
$form.find('input[type=text]').val('');
$form.find('textarea').val('');
showSuccess("Response created.");
return location.reload();
});
}
function editResponse(command, response) {
var url = '/api/server/' + server + '/autoResponse/edit',
data = { command, response }
apiPost(url, data, function (err, msg) {
if (err) return showError('An error occurred.');
showSuccess("Command edited.");
return location.reload();
});
}
$('.new-response a.button').on('click', function (e) {
e.preventDefault();
var $form = $(this).closest('form');
createResponse($form);
});
$('.new-response').on('submit', function (e) {
e.preventDefault();
var $form = $(this);
createResponse($form);
});
$('.response-remove').on('click', function (e) {
e.preventDefault();
var $el = $(this),
command = $el.attr('data-command'),
url = '/api/server/' + server + '/autoResponse/delete',
data = { command: command };
apiPost(url, data, function (err, msg) {
if (err) return showError('An error occurred.');
showSuccess('Response removed.');
return $el.closest('tr').remove();
});
});
$('.response-edit').on('click', function (e) {
e.preventDefault();
var command = $(this).attr('data-command');
var response = $(this).attr('data-response');
$('.edit-response-modal input').val(command)
$('.edit-response-modal textarea').text(response)
$('.edit-response-modal .button').attr('data-command', command)
$('.edit-response-modal').addClass('is-active');
});
$('.response-save').on('click', function(e) {
e.preventDefault();
var $form = $(this).closest('form');
var command = $(this).attr('data-command'),
response = $('.edit-response-modal textarea').val()
editResponse(command, response);
});
// $('.edit-response-modal .modal-close').on('click', function (e) {
// $('.edit-response-modal').removeClass('is-active');
// });
// $('.edit-response-modal .modal-background').on('click', function (e) {
// $('.edit-response-modal').removeClass('is-active');
// });
// Tags settings
function createTag($form) {
var url = '/api/server/' + server + '/tags/create',
data = $form.serialize();
apiPost(url, data, function (err, msg) {
if (err) return showError('An error occurred.');
$form.find('input[type=text]').val('');
$form.find('textarea').val('');
showSuccess("Tag created.");
return location.reload();
});
}
function editTag(tag, content) {
var url = '/api/server/' + server + '/tags/edit',
data = { tag, content }
apiPost(url, data, function (err, msg) {
if (err) return showError('An error occurred.');
showSuccess("Tag edited.");
return location.reload();
});
}
$('.new-tag a.button').on('click', function (e) {
e.preventDefault();
var $form = $(this).closest('form');
createTag($form);
});
$('.new-tag').on('submit', function (e) {
e.preventDefault();
var $form = $(this);
createTag($form);
});
// $('.tag-edit').on('click', function (e) {
// e.preventDefault();
// var tag = $(this).attr('data-tag');
// var content = $(this).attr('data-content');
// $('.edit-tag-modal input').val(tag)
// $('.edit-tag-modal textarea').text(content)
// $('.edit-tag-modal .button').attr('data-tag', tag)
// $('.edit-tag-modal').addClass('is-active');
// });
// $('.tag-save').on('click', function(e) {
// e.preventDefault();
// var $form = $(this).closest('form');
// var tag = $(this).attr('data-tag'),
// content = $('.edit-tag-modal textarea').val()
// editTag(tag, content);
// });
// $('.edit-tag-modal .modal-close').on('click', function (e) {
// $('.edit-tag-modal').removeClass('is-active');
// });
// $('.edit-tag-modal .modal-background').on('click', function (e) {
// $('.edit-tag-modal').removeClass('is-active');
// });
// $('.remove-tag').on('click', function (e) {
// e.preventDefault();
// var $el = $(this),
// id = $el.attr('data-id'),
// name = $el.attr('data-name'),
// url = '/api/server/' + server + '/tags/delete',
// data = { tag: id, name: name };
// apiPost(url, data, function (err, msg) {
// if (err) return showError('An error occurred.');
// showSuccess('Tag removed.');
// return $el.closest('tr').remove();
// });
// });
// Role persist
$('.remove-persist').on('click', function (e) {
e.preventDefault();
var $el = $(this),
id = $el.attr('data-id'),
url = '/api/server/' + server + '/persist/delete',
data = { id: id };
apiPost(url, data, function (err, msg) {
if (err) return showError('An error occurred.');
showSuccess('Role persist removed.');
return $el.closest('tr').remove();
});
});
// Automod banned words
$('.banned-words-add .button').on('click', function (e) {
e.preventDefault();
var words = $(this).closest('form').find('textarea').val(),
type = $(this).closest('form').find('input[name=type]:checked').val(),
url = '/api/server/' + server + '/bannedWords/add',
data = { type: type, words: words };
apiPost(url, data, function (err, msg) {
if (err) return showError('An error occurred.');
showSuccess('Words added.');
return location.reload();
});
});
$('.banned-words-remove').on('click', function (e) {
e.preventDefault();
var $el = $(this).closest('.tag'),
word = $(this).attr('data-tag'),
type = $(this).attr('data-type'),
url = '/api/server/' + server + '/bannedWords/remove',
data = { type: type, word: word };
apiPost(url, data, function (err, msg) {
if (err) return showError('An error occurred.');
showSuccess(word + ' removed.');
return $el.remove();
});
});
$('.banned-words-clear').on('click', function (e) {
e.preventDefault();
var $el = $(this),
url = '/api/server/' + server + '/bannedWords/clear';
apiPost(url, function (err, msg) {
if (err) return showError('An error occurred.');
showSuccess('Banned words cleared.');
$el.closest('.subtab-content').find('.tag.badword').remove();
});
});
// Autoroles
// $('.add-autorole').on('click', function (e) {
// e.preventDefault();
// var $form = $(this).closest('form'),
// role = $form.find('select[name=role]').val(),
// type = $form.find('input[name=type]:checked').val(),
// wait = $form.find('input[name=wait]').val(),
// url = '/api/server/' + server + '/autoroles/create',
// data = { type: type, role: role, wait: wait };
// apiPost(url, data, function (err, msg) {
// if (err) return showError('An error occurred.');
// showSuccess('Autorole added.');
// return location.reload();
// });
// });
// $('.remove-autorole').on('click', function (e) {
// e.preventDefault();
// var $el = $(this),
// id = $el.attr('data-id'),
// type = $el.attr('data-type'),
// wait = $el.attr('data-wait'),
// name = $el.attr('data-name'),
// url = '/api/server/' + server + '/autoroles/delete',
// data = { id: id, type: type, wait: wait, name: name };
// apiPost(url, data, function (err, msg) {
// if (err) return showError('An error occurred.');
// showSuccess('Autorole removed: ' + name);
// return $el.closest('tr').remove();
// });
// });
// Automod whitelist urls
$('.add-whitelist-url').on('click', function (e) {
e.preventDefault();
var dataUrl = $(this).prev('input[type=text]').val(),
url = '/api/server/' + server + '/whitelistUrl/add',
data = { url: dataUrl };
apiPost(url, data, function (err, msg) {
if (err) return showError('An error occurred.');
showSuccess('URL added.');
return location.reload();
});
});
$('.remove-whitelist-url').on('click', function (e) {
e.preventDefault();
var $el = $(this).closest('tr'),
dataUrl = $(this).attr('data-url'),
url = '/api/server/' + server + '/whitelistUrl/remove',
data = { url: dataUrl };
apiPost(url, data, function (err, msg) {
if (err) return showError('An error occurred.');
showSuccess(dataUrl + ' removed.');
return $el.remove();
});
});
$('.add-blacklist-url').on('click', function (e) {
e.preventDefault();
var dataUrl = $(this).prev('input[type=text]').val(),
url = '/api/server/' + server + '/blacklistUrl/add',
data = { url: dataUrl };
apiPost(url, data, function (err, msg) {
if (err) return showError('An error occurred.');
showSuccess('URL added.');
return location.reload();
});
});
$('.remove-blacklist-url').on('click', function (e) {
e.preventDefault();
var $el = $(this).closest('tr'),
dataUrl = $(this).attr('data-url'),
url = '/api/server/' + server + '/blacklistUrl/remove',
data = { url: dataUrl };
apiPost(url, data, function (err, msg) {
if (err) return showError('An error occurred.');
showSuccess(dataUrl + ' removed.');
return $el.remove();
});
});
// Thumbnail hover
$(document).on('mouseover', '.queue-title a', function(e) {
const imgElement = $(this).parent().find('.queue-thumb');
const thumbUrl = imgElement.data('thumbUrl');
imgElement.attr('src', thumbUrl);
})
// Paginated lists
// var queueList = new List('queueList', {
// page: 10,
// pagination: {
// innerWindow: 1,
// outerWindow: 1,
// left: 0,
// right: 0,
// paginationClass: 'pagination-list',
// },
// valueNames: [ 'queue-index', 'queue-title' ],
// });
// var commandList = new List('commandList', {
// page: 8,
// pagination: {
// innerWindow: 1,
// outerWindow: 1,
// left: 0,
// right: 0,
// paginationClass: 'pagination-list',
// },
// valueNames: [ 'cmd-name' ],
// });
// if (List) {
// var responseList = new List('responseList', {
// page: 10,
// pagination: {
// innerWindow: 1,
// outerWindow: 1,
// left: 0,
// right: 0,
// paginationClass: 'pagination-list',
// },
// valueNames: [ 'res-name' ],
// });
// }
// var tagList = new List('tagList', {
// page: 10,
// pagination: {
// innerWindow: 1,
// outerWindow: 1,
// left: 0,
// right: 0,
// paginationClass: 'pagination-list',
// },
// valueNames: [ 'tag-name', 'tag-author' ],
// });
// var webLogList = new List('webLogList', {
// page: 10,
// pagination: {
// innerWindow: 1,
// outerWindow: 1,
// left: 0,
// right: 0,
// paginationClass: 'pagination-list',
// },
// valueNames: [ 'weblog-user', 'weblog-action' ],
// });
});
})(jQuery);