Fix interface bugs
pull/375/head
Aidaho 2024-01-23 09:49:47 +03:00
parent ee4631f214
commit bfcead6430
13 changed files with 108 additions and 126 deletions

View File

@ -67,7 +67,7 @@ def check_is_conf(config_path: str) -> bool:
if 'conf' in config_path or 'cfg' in config_path:
return True
return False
raise Exception('error: nice try')
def string_to_dict(dict_string) -> dict:

View File

@ -305,7 +305,7 @@ def create_map(server_ip: str, map_name: str, group: str) -> str:
try:
server_mod.subprocess_execute(f'mkdir -p {map_path}')
except Exception as e:
assert Exception(f'error: cannot create a local folder for maps: {e}')
raise Exception(f'error: cannot create a local folder for maps: {e}')
try:
open(full_path, 'a').close()
try:
@ -313,7 +313,7 @@ def create_map(server_ip: str, map_name: str, group: str) -> str:
except Exception:
pass
except IOError as e:
assert Exception(f'error: Cannot create a new {map_name} map. {e}, ')
raise Exception(f'error: Cannot create a new {map_name} map. {e}, ')
else:
return 'success: '

View File

@ -10,7 +10,7 @@ import modules.server.server as server_mod
import modules.service.common as service_common
def user_owv():
def user_owv() -> str:
lang = roxywi_common.get_user_lang_for_flask()
roles = sql.select_roles()
user_params = roxywi_common.get_users_params()
@ -25,7 +25,7 @@ def user_owv():
return render_template('ajax/show_users_ovw.html', users=users, users_groups=users_groups, lang=lang, roles=roles)
def show_sub_ovw() -> None:
def show_sub_ovw() -> str:
lang = roxywi_common.get_user_lang_for_flask()
return render_template('ajax/show_sub_ovw.html', sub=sql.select_user_all(), lang=lang)
@ -104,7 +104,7 @@ def show_overview(serv) -> str:
return render_template('ajax/overview.html', service_status=servers_sorted, role=role, lang=lang)
def show_haproxy_binout(server_ip: str) -> None:
def show_haproxy_binout(server_ip: str) -> str:
port = sql.get_setting('haproxy_sock_port')
bin_bout = []
cmd = "echo 'show stat' |nc {} {} |cut -d ',' -f 1-2,9|grep -E '[0-9]'|awk -F',' '{{sum+=$3;}}END{{print sum;}}'".format(
@ -135,7 +135,7 @@ def show_nginx_connections(server_ip: str) -> str:
page = sql.get_setting('nginx_stats_page')
url = f'http://{server_ip}:{port}/{page}'
r = requests.get(url, auth=(user, password))
r = requests.get(url, auth=(user, password), timeout=5)
if r.status_code == 200:
bin_bout = [0, 0]
@ -159,7 +159,7 @@ def show_apache_bytes(server_ip: str) -> str:
bin_bout = []
url = f'http://{server_ip}:{port}/{page}?auto'
r = requests.get(url, auth=(user, password))
r = requests.get(url, auth=(user, password), timeout=5)
if r.status_code == 200:
for line in r.text.split('\n'):

View File

@ -71,7 +71,7 @@ def update_user_password(password, uuid, user_id_from_get):
return 'ok'
def get_user_services(user_id: int) -> None:
def get_user_services(user_id: int) -> str:
lang = roxywi_common.get_user_lang_for_flask()
services = sql.select_services()
@ -83,8 +83,8 @@ def get_user_services(user_id: int) -> None:
def change_user_services(user: str, user_id: int, user_services: str) -> str:
services = ''
for k, v in user_services.items():
for k2, v2 in v.items():
for _k, v in user_services.items():
for k2, _v2 in v.items():
services += ' ' + k2
try:
@ -112,7 +112,7 @@ def get_user_active_group(uuid: str, group: str) -> str:
return render_template('ajax/user_current_group.html', groups=groups, group=group, id=group_id, lang=lang)
def show_user_groups_and_roles(user_id: int, lang: str) -> None:
def show_user_groups_and_roles(user_id: int, lang: str) -> str:
groups = sql.select_user_groups_with_names(user_id, user_not_in_group=1)
roles = sql.select_roles()
user_groups = sql.select_user_groups_with_names(user_id)
@ -126,7 +126,7 @@ def is_current_user(user_id: int, user_uuid: str) -> bool:
return False
def save_user_group_and_role(user: str, groups_and_roles: str, user_uuid: str) -> str:
def save_user_group_and_role(user: str, groups_and_roles: dict, user_uuid: str) -> str:
resp = make_response('ok')
for k, v in groups_and_roles.items():
user_id = int(k)

View File

@ -50,7 +50,7 @@ def get_exp_version(server_ip: str, service_name: str) -> str:
if service_name == 'haproxy':
commands = ["/opt/prometheus/exporters/haproxy_exporter --version 2>&1 |head -1|awk '{print $3}'"]
elif service_name == 'nginx':
commands = ["/opt/prometheus/exporters/nginx_exporter 2>&1 |head -1 |awk -F\"=\" '{print $2}'|awk '{print $1}'"]
commands = ["/opt/prometheus/exporters/nginx_exporter --version 2>&1 |head -1 |awk -F\"version\" '{print $2}'|awk '{print $1}'"]
elif service_name == 'node':
commands = ["node_exporter --version 2>&1 |head -1|awk '{print $3}'"]
elif service_name == 'apache':
@ -119,7 +119,7 @@ def check_haproxy_config(server_ip):
print(f'error: {e}')
def check_nginx_config(server_ip):
def check_nginx_config(server_ip) -> bool:
commands = [f"nginx -q -t -p {sql.get_setting('nginx_dir')}"]
with mod_ssh.ssh_connect(server_ip) as ssh:
@ -131,7 +131,7 @@ def check_nginx_config(server_ip):
return False
def overview_backends(server_ip: str, service: str) -> None:
def overview_backends(server_ip: str, service: str) -> str:
import modules.config.config as config_mod
lang = roxywi_common.get_user_lang_for_flask()
@ -188,18 +188,13 @@ def get_overview_last_edit(server_ip: str, service: str) -> str:
def get_stat_page(server_ip: str, service: str) -> str:
if service in ('nginx', 'apache'):
stats_user = sql.get_setting(f'{service}_stats_user')
stats_pass = sql.get_setting(f'{service}_stats_password')
stats_port = sql.get_setting(f'{service}_stats_port')
stats_page = sql.get_setting(f'{service}_stats_page')
else:
stats_user = sql.get_setting('stats_user')
stats_pass = sql.get_setting('stats_password')
stats_port = sql.get_setting('stats_port')
stats_page = sql.get_setting('stats_page')
stats_user = sql.get_setting(f'{service}_stats_user')
stats_pass = sql.get_setting(f'{service}_stats_password')
stats_port = sql.get_setting(f'{service}_stats_port')
stats_page = sql.get_setting(f'{service}_stats_page')
try:
response = requests.get(f'http://{server_ip}:{stats_port}/{stats_page}', auth=(stats_user, stats_pass))
response = requests.get(f'http://{server_ip}:{stats_port}/{stats_page}', auth=(stats_user, stats_pass), timeout=5)
except requests.exceptions.ConnectTimeout:
return 'error: Oops. Connection timeout occurred!'
except requests.exceptions.ReadTimeout:

View File

@ -31,11 +31,11 @@ def create_cluster(cluster: object, group_id: int) -> str:
except Exception as e:
return f'error: Cannon add VIP: {e}'
for slave_id, value in cluster['servers'].items():
for _slave_id, value in cluster['servers'].items():
if value['master']:
master_ip = value['ip']
for slave_id, value in cluster['servers'].items():
for _slave_id, value in cluster['servers'].items():
if value['master']:
continue
try:
@ -194,7 +194,7 @@ def update_slaves(json_data: object, router_id: int) -> None:
server_ids = []
server_ids_from_json = []
for slave_id, value in cluster['servers'].items():
for _slave_id, value in cluster['servers'].items():
if value['master']:
master_ip = common.is_ip_or_dns(value['ip'])
@ -226,7 +226,7 @@ def update_slaves(json_data: object, router_id: int) -> None:
except Exception as e:
raise Exception(f'error: Cannot recreate slaves server: {e}')
for slave_id, value in cluster['servers'].items():
for _slave_id, value in cluster['servers'].items():
if value['master']:
continue
try:
@ -251,7 +251,7 @@ def add_or_update_virt(cluster: object, cluster_id: int, vip_id: int, group_id:
vip = common.is_ip_or_dns(cluster['vip'])
cluster_name = common.checkAjaxInput(cluster['name'])
for slave_id, value in cluster['servers'].items():
for _slave_id, value in cluster['servers'].items():
if value['master']:
master_ip = common.is_ip_or_dns(value['ip'])

View File

@ -64,7 +64,7 @@ def is_tool_active(tool_name: str) -> str:
def update_cur_tool_versions() -> None:
tools = sql.get_all_tools()
for s, v in tools.items():
for s, _v in tools.items():
update_cur_tool_version(s)

View File

@ -137,6 +137,7 @@ def nettols_check(check):
@login_required
@get_user_params()
def service_history(service, server_ip):
history = ''
server_ip = common.checkAjaxInput(server_ip)
if service in ('haproxy', 'nginx', 'keepalived', 'apache', 'cluster'):
@ -154,6 +155,8 @@ def service_history(service, server_ip):
history = sql.select_action_history_by_server_id(server_id)
elif service == 'user':
history = sql.select_action_history_by_user_id(server_ip)
else:
abort(404, f'History not found')
kwargs = {
'user_params': g.user_params,

View File

@ -784,7 +784,7 @@
</tr>
{% for option in options %}
<tr id="option-{{ option.id }}" class="{{ loop.cycle('odd', 'even') }}">
{% if option.groups == group or group == '1' %}
{% if option.groups|string() == user_params['group_id']|string() or group|string() == '1' %}
<td class="padding10 first-collumn">
{{ option.id }}
</td>
@ -833,7 +833,7 @@
</tr>
{% for s in saved_servers %}
<tr id="servers-saved-{{ s.id }}" class="{{ loop.cycle('odd', 'even') }}">
{% if s.groups == group or group == '1' %}
{% if s.groups|string() == user_params['group_id']|string() or group|string() == '1' %}
<td class="padding10 first-collumn">
<input type="text" id="servers-ip-{{ s.id }}" value="{{ s.server }}" size="15" class="form-control">
</td>
@ -1115,7 +1115,7 @@
<div id="dialog-confirm-cert" title="View certificate " style="display: none;">
<pre id="dialog-confirm-body"></pre>
</div>
<input type="hidden" id="group" value="{{ group }}">
<input type="hidden" id="group_id" value="{{ user_params['group_id']|string() }}">
</div>
</div>
<script>

View File

@ -79,7 +79,7 @@
<div id="dialog-confirm-cert" title="View certificate " style="display: none;">
<pre id="dialog-confirm-body"></pre>
</div>
<input type="hidden" id="group" value="{{ group }}">
<input type="hidden" id="group_id" value="{{ user_params['group_id'] }}">
</div>
<script>
$( function() {

View File

@ -8,7 +8,7 @@
<span id="cluster-desc-{{cluster.id}}">{% if cluster.desc != '' %} ({{cluster.desc}}) {% endif %}</span>
</a>
<span class="server-action">
{% if user_params['role'] <= 2 %}
{% if user_params['role'] <= 3 %}
<a class="plus" onclick="add_vip_ha_cluster('{{cluster.id}}', '{{cluster.name}}')"></a>
<a class="edit" onclick="createHaClusterStep1(true, '{{cluster.id}}')"></a>
<a class="delete" onclick="confirmDeleteCluster('{{cluster.id}}')"></a>

View File

@ -1,7 +1,7 @@
{% import 'languages/'+lang|default('en')+'.html' as lang %}
{% for service in service_status %}
<td class="padding10 first-collumn">
<a href="/app/history/server/{{ service.1 }}" title="{{service.0 }} history" class="logs_link">
<a href="/app/history/server/{{ service.1 }}" title="{{service.0 }} {{lang.words.history}}" class="logs_link">
{{ service.0 }}
</a>
</td>

View File

@ -1,7 +1,8 @@
var ssl_offloading_var = "http-request set-header X-Forwarded-Port %[dst_port] \n"+
"http-request add-header X-Forwarded-Proto https if { ssl_fc } \n"+
"redirect scheme https if !{ ssl_fc } \n"
var delete_word = $('#translate').attr('data-delete');
var cancel_word = $('#translate').attr('data-cancel');
$( function() {
$("#listen-mode-select").on('selectmenuchange', function () {
if ($("#listen-mode-select option:selected").val() == "tcp") {
@ -252,7 +253,6 @@ $( function() {
}
});
var availableTags = [
"acl", "hdr(host)", "hdr_beg(host)", "hdr_dom(host)", "http-request", "http-response", "set-uri", "set-url", "set-header", "add-header", "del-header", "replace-header", "path_beg", "url_beg()", "urlp_sub()", "set cookie", "dynamic-cookie-key", "mysql-check", "tcpka", "tcplog", "forwardfor", "option"
];
@ -330,7 +330,7 @@ $( function() {
request.term = 1
}
$.ajax({
url: "/app/add/haproxy/bwlists/black/" + $("#group").val(),
url: "/app/add/haproxy/bwlists/black/" + $("#group_id").val(),
success: function (data) {
data = data.replace(/\s+/g, ' ');
response(data.split(" "));
@ -346,7 +346,7 @@ $( function() {
request.term = 1
}
$.ajax({
url: "/app/add/haproxy/bwlists/black/" + $("#group").val(),
url: "/app/add/haproxy/bwlists/black/" + $("#group_id").val(),
success: function (data) {
data = data.replace(/\s+/g, ' ');
response(data.split(" "));
@ -362,7 +362,7 @@ $( function() {
request.term = 1
}
$.ajax({
url: "/app/add/haproxy/bwlists/white/" + $("#group").val(),
url: "/app/add/haproxy/bwlists/white/" + $("#group_id").val(),
success: function (data) {
data = data.replace(/\s+/g, ' ');
response(data.split(" "));
@ -378,7 +378,7 @@ $( function() {
request.term = 1
}
$.ajax({
url: "/app/add/haproxy/bwlists/white/" + $("#group").val(),
url: "/app/add/haproxy/bwlists/white/" + $("#group_id").val(),
success: function (data) {
data = data.replace(/\s+/g, ' ');
response(data.split(" "));
@ -412,7 +412,7 @@ $( function() {
});
$("#saved-options").autocomplete({
dataType: "json",
source: "/app/add/option/get/" + $('#group').val(),
source: "/app/add/option/get/" + $('#group_id').val(),
autoFocus: true,
minLength: 1,
select: function (event, ui) {
@ -431,10 +431,9 @@ $( function() {
return false;
}
});
$("#saved-options1").autocomplete({
dataType: "json",
source: "/app/add/option/get/" + $('#group').val(),
source: "/app/add/option/get/" + $('#group_id').val(),
autoFocus: true,
minLength: 1,
select: function (event, ui) {
@ -455,7 +454,7 @@ $( function() {
});
$("#saved-options2").autocomplete({
dataType: "json",
source: "/app/add/option/get/" + $('#group').val(),
source: "/app/add/option/get/" + $('#group_id').val(),
autoFocus: true,
minLength: 1,
select: function (event, ui) {
@ -473,8 +472,7 @@ $( function() {
$.ajax({
url: "/app/add/option/save",
data: {
option: $('#new-option').val(),
option_group: $('#group').val()
option: $('#new-option').val()
},
type: "POST",
success: function (data) {
@ -496,7 +494,7 @@ $( function() {
});
$('[name=servers]').autocomplete({
source: "/app/add/server/get/" + $('#group').val(),
source: "/app/add/server/get/" + $('#group_id').val(),
autoFocus: true,
minLength: 1,
select: function (event, ui) {
@ -519,7 +517,6 @@ $( function() {
url: "/app/add/server/save",
data: {
server: $('#new-saved-servers').val(),
group: $('#group').val(),
desc: $('#new-saved-servers-description').val()
},
type: "POST",
@ -1026,7 +1023,6 @@ $( function() {
} else {
replace_text("#optionsInput1", ssl_offloading_var);
}
});
$('#ssl_offloading2').click(function () {
if ($('#optionsInput2').val().indexOf('ssl_fc ') == '-1') {
@ -1035,7 +1031,6 @@ $( function() {
replace_text("#optionsInput2", ssl_offloading_var);
}
});
$(".redirectListen").on("click", function () {
resetProxySettings();
$("#tabs").tabs("option", "active", 1);
@ -1057,7 +1052,6 @@ $( function() {
$("#tabs").tabs("option", "active", 4);
$("#serv5").selectmenu("open");
});
$("#create-http-listen").on("click", function () {
resetProxySettings();
createHttp(1, 'listen');
@ -1284,7 +1278,7 @@ function createHttp(TabId, proxy) {
TabId = '';
}
$( "#serv"+TabId ).selectmenu( "open" );
history.pushState('Add '+proxy, 'Add '+proxy, 'add.py#'+proxy)
history.pushState('Add '+proxy, 'Add '+proxy, 'add/haproxy#'+proxy)
}
function createSsl(TabId, proxy) {
$('[name=port]').val('443');
@ -1303,7 +1297,7 @@ function createSsl(TabId, proxy) {
TabId = '';
}
$( "#serv"+TabId ).selectmenu( "open" );
history.pushState('Add'+proxy, 'Add'+proxy, 'add.py#'+proxy)
history.pushState('Add'+proxy, 'Add'+proxy, 'add/haproxy#'+proxy)
}
function createHttps(TabId, proxy) {
$('[name=port]').val('443');
@ -1317,25 +1311,28 @@ function createHttps(TabId, proxy) {
TabId = '';
}
$( "#serv"+TabId ).selectmenu( "open" );
history.pushState('Add'+proxy, 'Add'+proxy, 'add.py#'+proxy)
history.pushState('Add'+proxy, 'Add'+proxy, 'add/haproxy#'+proxy)
}
function confirmDeleteOption(id) {
$( "#dialog-confirm" ).dialog({
resizable: false,
height: "auto",
width: 400,
modal: true,
title: "Are you sure you want to delete " +$('#option-'+id).val() + "?",
buttons: {
"Delete": function() {
$( this ).dialog( "close" );
removeOption(id);
},
Cancel: function() {
$( this ).dialog( "close" );
}
}
});
$("#dialog-confirm").dialog({
resizable: false,
height: "auto",
width: 400,
modal: true,
title: delete_word + " " + $('#option-body-' + id).val() + "?",
buttons: [{
text: delete_word,
click: function () {
$(this).dialog("close");
removeOption(id);
}
}, {
text: cancel_word,
click: function () {
$(this).dialog("close");
}
}]
});
}
function removeOption(id) {
$("#option-"+id).css("background-color", "#f2dede");
@ -1374,22 +1371,25 @@ function updateOptions(id) {
});
}
function confirmDeleteSavedServer(id) {
$( "#dialog-confirm" ).dialog({
resizable: false,
height: "auto",
width: 400,
modal: true,
title: "Are you sure you want to delete " +$('#servers-saved-'+id).val() + "?",
buttons: {
"Delete": function() {
$( this ).dialog( "close" );
removeSavedServer(id);
},
Cancel: function() {
$( this ).dialog( "close" );
}
}
});
$("#dialog-confirm").dialog({
resizable: false,
height: "auto",
width: 400,
modal: true,
title: delete_word + " " + $('#servers-ip-' + id).val() + "?",
buttons: [{
text: delete_word,
click: function () {
$(this).dialog("close");
removeSavedServer(id);
}
}, {
text: cancel_word,
click: function () {
$(this).dialog("close");
}
}]
});
}
function removeSavedServer(id) {
$("#servers-saved-"+id).css("background-color", "#f2dede");
@ -1427,8 +1427,6 @@ function updateSavedServer(id) {
} );
}
function view_ssl(id) {
var delete_word = $('#translate').attr('data-delete');
var cancel_word = $('#translate').attr('data-cancel');
var raw_word = $('#translate').attr('data-raw');
if(!checkIsServerFiled('#serv5')) return false;
$.ajax( {
@ -1467,8 +1465,6 @@ function view_ssl(id) {
} );
}
function showRawSSL(id) {
var delete_word = $('#translate').attr('data-delete');
var cancel_word = $('#translate').attr('data-cancel');
$.ajax({
url: "/app/add/cert/get/raw/" + $('#serv5').val() + "/" + id,
success: function (data) {
@ -1564,8 +1560,7 @@ function createList(color) {
url: "/app/add/haproxy/bwlist/create",
data: {
bwlists_create: list,
color: color,
group: $('#group').val()
color: color
},
type: "POST",
success: function( data ) {
@ -1586,14 +1581,12 @@ function createList(color) {
}
function editList(list, color) {
$.ajax( {
url: "/app/add/haproxy/bwlist/" + list + "/" + color + "/" + $('#group').val(),
url: "/app/add/haproxy/bwlist/" + list + "/" + color + "/" + $('#group_id').val(),
success: function( data ) {
if (data.indexOf('error:') != '-1') {
toastr.error(data);
} else {
var cancel_word = $('#translate').attr('data-cancel');
var save_word = $('#translate').attr('data-just_save');
var delete_word = $('#translate').attr('data-delete');
var upload_and_reload = $('#translate').attr('data-upload_and_reload');
var upload_and_restart = $('#translate').attr('data-upload_and_restart');
var edit_word = $('#translate').attr('data-edit');
@ -1649,7 +1642,6 @@ function saveList(action, list, color) {
serv: serv,
bwlists_content: $('#edit_lists').val(),
color: color,
group: $('#group').val(),
bwlists_restart: action
},
type: "POST",
@ -1673,7 +1665,7 @@ function deleteList(list, color) {
var serv = $( "#serv-"+color+"-list option:selected" ).val();
if(!checkIsServerFiled($("#serv-"+color+"-list"))) return false;
$.ajax({
url: "/app/add/haproxy/bwlist/delete/" + serv + "/" + color + "/" + list + "/" + $('#group').val(),
url: "/app/add/haproxy/bwlist/delete/" + serv + "/" + color + "/" + list + "/" + $('#group_id').val(),
success: function (data) {
if (data.indexOf('error:') != '-1' || data.indexOf('Failed') != '-1' || data.indexOf('Errno') != '-1') {
toastr.error(data);
@ -1692,10 +1684,9 @@ function createMap() {
map_name = $('#new_map_name').val()
map_name = escapeHtml(map_name);
$.ajax( {
url: "/app/add/map/create",
url: "/app/add/map",
data: {
map_create: map_name,
group: $('#group').val()
map_name: map_name
},
type: "POST",
success: function( data ) {
@ -1715,30 +1706,27 @@ function createMap() {
} );
}
function editMap(map) {
$.ajax( {
url: "/app/add/map/edit",
$.ajax({
url: "/app/add/map",
data: {
edit_map: map,
group: $('#group').val()
map_name: map,
},
type: "POST",
success: function( data ) {
type: "GET",
success: function (data) {
if (data.indexOf('error:') != '-1') {
toastr.error(data);
} else {
var cancel_word = $('#translate').attr('data-cancel');
var save_word = $('#translate').attr('data-just_save');
var delete_word = $('#translate').attr('data-delete');
var upload_and_reload = $('#translate').attr('data-upload_and_reload');
var upload_and_restart = $('#translate').attr('data-upload_and_restart');
var edit_word = $('#translate').attr('data-edit');
$('#edit_map').text(data);
$( "#dialog-confirm-map-edit" ).dialog({
$("#dialog-confirm-map-edit").dialog({
resizable: false,
height: "auto",
width: 650,
modal: true,
title: edit_word + " "+map,
title: edit_word + " " + map,
buttons: [{
text: delete_word,
click: function () {
@ -1772,21 +1760,20 @@ function editMap(map) {
});
}
}
} );
});
}
function saveMap(action, map) {
var serv = $( "#serv-map option:selected" ).val();
if(!checkIsServerFiled($("#serv-map"))) return false;
$.ajax({
url: "/app/add/map/save",
url: "/app/add/map",
data: {
map_save: map,
map_name: map,
serv: serv,
content: $('#edit_map').val(),
group: $('#group').val(),
map_restart: action
},
type: "POST",
type: "PUT",
success: function (data) {
data = data.split(" , ");
for (i = 0; i < data.length; i++) {
@ -1807,13 +1794,12 @@ function deleteMap(map) {
var serv = $( "#serv-map option:selected" ).val();
if(!checkIsServerFiled($("#serv-map"))) return false;
$.ajax({
url: "/app/add/map/delete",
url: "/app/add/map",
data: {
map_delete: map,
map_name: map,
serv: serv,
group: $('#group').val()
},
type: "POST",
type: "DELETE",
success: function (data) {
if (data.indexOf('error:') != '-1' || data.indexOf('Failed') != '-1' || data.indexOf('Errno') != '-1') {
toastr.error(data);
@ -1983,8 +1969,6 @@ function addProxy(form_name) {
});
}
function confirmDeleting(deleting_thing, id, dialog_id, color) {
var cancel_word = $('#translate').attr('data-cancel');
var delete_word = $('#translate').attr('data-delete');
$( "#dialog-confirm" ).dialog({
resizable: false,
height: "auto",