diff --git a/app/create_db.py b/app/create_db.py
index d968db1b..86f1578c 100644
--- a/app/create_db.py
+++ b/app/create_db.py
@@ -166,8 +166,8 @@ def update_db_v_31(**kwargs):
sql.append("INSERT INTO settings (param, value, section, `desc`) values('proxy', '', 'main', 'Proxy server. Use proto://ip:port');")
sql.append("INSERT INTO settings (param, value, section, `desc`) values('session_ttl', '5', 'main', 'Time to live users sessions. In days');")
sql.append("INSERT INTO settings (param, value, section, `desc`) values('token_ttl', '5', 'main', 'Time to live users tokens. In days');")
- sql.append("INSERT INTO settings (param, value, section, `desc`) values('tmp_config_path', '/tmp/', 'main', 'Temp store configs, for check');")
- sql.append("INSERT INTO settings (param, value, section, `desc`) values('cert_path', '/etc/ssl/certs/', 'main', 'Path to SSL dir');")
+ sql.append("INSERT INTO settings (param, value, section, `desc`) values('tmp_config_path', '/tmp/', 'main', 'Temp store configs, for check. Path must exist');")
+ sql.append("INSERT INTO settings (param, value, section, `desc`) values('cert_path', '/etc/ssl/certs/', 'main', 'Path to SSL dir. Folder owner must be a user which set in the SSH settings. Path must exist');")
sql.append("INSERT INTO settings (param, value, section, `desc`) values('lists_path', 'lists', 'main', 'Path to black/white lists. This is a relative path, begins with $HOME_HAPROXY-WI');")
sql.append("INSERT INTO settings (param, value, section, `desc`) values('local_path_logs', '/var/log/haproxy.log', 'logs', 'Logs save locally, enabled by default');")
sql.append("INSERT INTO settings (param, value, section, `desc`) values('syslog_server_enable', '0', 'logs', 'If exist syslog server for HAproxy logs, enable this option');")
@@ -475,9 +475,14 @@ def update_db_v_4_3(**kwargs):
def update_db_v_4_3_0(**kwargs):
con, cur = get_cur()
- sql = """
- insert OR IGNORE into user_groups(user_id, user_group_id) select id, groups from user;
- """
+ if mysql_enable == '1':
+ sql = """
+ insert OR IGNORE into user_groups(user_id, user_group_id) select user.id, user.groups from user;
+ """
+ else:
+ sql = """
+ insert OR IGNORE into user_groups(user_id, user_group_id) select id, groups from user;
+ """
try:
cur.execute(sql)
con.commit()
@@ -567,7 +572,7 @@ def update_db_v_4_4(**kwargs):
except sqltool.Error as e:
if kwargs.get('silent') != 1:
if e.args[0] == 'duplicate column name: pos' or e == " 1060 (42S21): Duplicate column name 'pos' ":
- print('DB was update to 4.4.0')
+ print('Updating... go to version 4.4.2')
else:
print("An error occurred:", e)
return False
@@ -575,6 +580,32 @@ def update_db_v_4_4(**kwargs):
return True
cur.close()
con.close()
+
+
+def update_db_v_4_4_2(**kwargs):
+ con, cur = get_cur()
+ sql = """CREATE TABLE IF NOT EXISTS `waf_rules` (`id` INTEGER NOT NULL,
+ serv varchar(64),
+ `rule_name` varchar(64),
+ `rule_file` varchar(64),
+ `desc` varchar(1024),
+ `en` INTEGER DEFAULT 1,
+ UNIQUE(serv, rule_name),
+ PRIMARY KEY(`id`) ); """
+ try:
+ cur.execute(sql)
+ con.commit()
+ except sqltool.Error as e:
+ if kwargs.get('silent') != 1:
+ if e.args[0] == 'duplicate column name: version' or e == "1060 (42S21): Duplicate column name 'version' ":
+ print('DB was update to 4.4.2')
+ else:
+ print("DB was update to 4.4.2")
+ return False
+ else:
+ return True
+ cur.close()
+ con.close()
def update_ver(**kwargs):
@@ -609,6 +640,7 @@ def update_all():
update_db_v_4_3_1()
update_db_v_4_3_2()
update_db_v_4_4()
+ update_db_v_4_4_2()
update_ver()
@@ -632,6 +664,7 @@ def update_all_silent():
update_db_v_4_3_1(silent=1)
update_db_v_4_3_2(silent=1)
update_db_v_4_4(silent=1)
+ update_db_v_4_4_2(silent=1)
update_ver()
diff --git a/app/funct.py b/app/funct.py
index 2b181c07..11024417 100644
--- a/app/funct.py
+++ b/app/funct.py
@@ -523,6 +523,7 @@ def waf_install(serv, **kwargs):
stderr = ssh_command(serv, commands, print_out="1")
sql.insert_waf_metrics_enable(serv, "0")
+ sql.insert_waf_rules(serv)
def install_nginx(serv):
@@ -607,18 +608,23 @@ def upload(serv, path, file, **kwargs):
try:
ssh = ssh_connect(serv)
except Exception as e:
- error = e
+ error = e.args
logging('localhost', str(e.args[0]), haproxywi=1)
+ print(' Cannot upload '+file+' to '+full_path+' to server: '+serv+' error: '+str(e.args))
pass
try:
sftp = ssh.open_sftp()
except Exception as e:
+ error = e.args
logging('localhost', str(e.args[0]), haproxywi=1)
+ print('Cannot upload '+file+' to '+full_path+' to server: '+serv+' error: '+str(e.args))
try:
file = sftp.put(file, full_path)
except Exception as e:
+ error = e.args
+ print('Cannot upload '+file+' to '+full_path+' to server: '+serv+' error: '+str(e.args))
logging('localhost', ' Cannot upload '+file+' to '+full_path+' to server: '+serv+' Error: '+str(e.args), haproxywi=1)
pass
@@ -628,6 +634,7 @@ def upload(serv, path, file, **kwargs):
except Exception as e:
error = e.args
logging('localhost', str(error[0]), haproxywi=1)
+ print('Cannot upload '+file+' to '+full_path+' to server: '+serv+' error: '+str(e.args))
pass
return str(error)
@@ -903,7 +910,7 @@ def ssh_command(serv, commands, **kwargs):
ssh.close()
except:
logging('localhost', ' '+str(ssh), haproxywi=1)
- return "
"
+ return "error: "+str(ssh)
pass
diff --git a/app/options.py b/app/options.py
index 3ee54630..d593f752 100644
--- a/app/options.py
+++ b/app/options.py
@@ -26,17 +26,17 @@ if act == "checkrestart":
if not sql.check_token_exists(form.getvalue("token")):
- print('Your token has been expired
')
+ print('error: Your token has been expired')
sys.exit()
if form.getvalue('getcerts') is not None and serv is not None:
cert_path = sql.get_setting('cert_path')
- commands = [ "ls -1t "+cert_path+" |grep pem" ]
+ commands = ["sudo ls -1t "+cert_path+" |grep pem"]
try:
funct.ssh_command(serv, commands, ip="1")
- except:
- print('Can not connect to the server
')
+ except Exception as e:
+ print('error: Cannot connect to the server: ' + str(e))
if form.getvalue('checkSshConnect') is not None and serv is not None:
@@ -50,7 +50,7 @@ if form.getvalue('getcert') is not None and serv is not None:
try:
funct.ssh_command(serv, commands, ip="1")
except:
- print('Can not connect to the server
')
+ print('error: Can not connect to the server')
if serv and form.getvalue('ssl_cert'):
@@ -61,24 +61,24 @@ if serv and form.getvalue('ssl_cert'):
os.makedirs(cert_local_dir)
if form.getvalue('ssl_name') is None:
- print('Please enter desired name
')
+ print('error: Please enter desired name')
else:
name = form.getvalue('ssl_name') + '.pem'
try:
with open(name, "w") as ssl_cert:
ssl_cert.write(form.getvalue('ssl_cert'))
- except IOError:
- print('Can\'t save ssl keys file. Check ssh keys path in config
')
- else:
- print('SSL file was upload to %s into: %s %s
' % (serv, cert_path, name))
+ except IOError as e :
+ print('error: Can\'t save ssl keys file. Check ssh keys path in config '+e.args[0])
MASTERS = sql.is_master(serv)
for master in MASTERS:
if master[0] != None:
funct.upload(master[0], cert_path, name)
try:
- funct.upload(serv, cert_path, name)
+ error = funct.upload(serv, cert_path, name)
+ if error == '':
+ print('success: SSL file has been uploaded to %s into: %s%s' % (serv, cert_path, '/'+name))
except Exception as e:
funct.logging('localhost', e.args[0], haproxywi=1)
try:
@@ -86,7 +86,7 @@ if serv and form.getvalue('ssl_cert'):
except OSError as e:
funct.logging('localhost', e.args[0], haproxywi=1)
- funct.logging(serv, "add.py#ssl upload new ssl cert %s" % name)
+ funct.logging(serv, "add.py#ssl uploaded a new SSL cert %s" % name, haproxywi=1, login=1)
if form.getvalue('backend') is not None:
@@ -200,7 +200,7 @@ if form.getvalue('maxconn_frontend') is not None:
cmd = 'string=`grep %s %s -n -A5 |grep maxcon -n |awk -F":" \'{print $2}\'|awk -F"-" \'{print $1}\'` && sed -Ei "$( echo $string)s/[0-9]+/%s/g" %s' % (frontend, cfg, maxconn, cfg)
output, stderr = funct.subprocess_execute(cmd)
stderr = funct.master_slave_upload_and_restart(serv, cfg, just_save='save')
- print('Maxconn for %s has been set to %s ' % (frontend, maxconn))
+ print('success: Maxconn for %s has been set to %s ' % (frontend, maxconn))
else:
print('error: '+output[0])
@@ -272,9 +272,9 @@ if form.getvalue('action_hap') is not None and serv is not None:
commands = [ "sudo systemctl %s haproxy" % action ]
funct.ssh_command(serv, commands)
funct.logging(serv, 'HAProxy was '+action+'ed', haproxywi=1, login=1)
- print("HAproxy was %s" % action)
+ print("success: HAproxy was %s" % action)
else:
- print("Bad config, check please")
+ print("error: Bad config, check please")
if form.getvalue('action_nginx') is not None and serv is not None:
@@ -284,9 +284,9 @@ if form.getvalue('action_nginx') is not None and serv is not None:
commands = [ "sudo systemctl %s nginx" % action ]
funct.ssh_command(serv, commands)
funct.logging(serv, 'Nginx was '+action+'ed', haproxywi=1, login=1)
- print("Nginx was %s" % action)
+ print("success: Nginx was %s" % action)
else:
- print("Bad config, check please")
+ print("error: Bad config, check please")
if form.getvalue('action_waf') is not None and serv is not None:
@@ -354,7 +354,7 @@ if act == "overviewHapservers":
try:
print(funct.ssh_command(serv, commands))
except:
- print('Cannot get last date')
+ print('error: Cannot get last date')
if act == "overview":
@@ -538,17 +538,17 @@ if serv is not None and act == "stats":
try:
response = requests.get('http://%s:%s/%s' % (serv, stats_port, stats_page), auth=(haproxy_user, haproxy_pass))
except requests.exceptions.ConnectTimeout:
- print('Oops. Connection timeout occured!')
+ print('error: Oops. Connection timeout occured!')
except requests.exceptions.ReadTimeout:
- print('Oops. Read timeout occured')
+ print('error: Oops. Read timeout occured')
except requests.exceptions.HTTPError as errh:
- print ("Http Error:",errh)
+ print ("error: Http Error:",errh)
except requests.exceptions.ConnectionError as errc:
- print ('Error Connecting: %s
' % errc)
+ print ('error: Error Connecting: %s' % errc)
except requests.exceptions.Timeout as errt:
- print ("Timeout Error:",errt)
+ print ("error: Timeout Error:",errt)
except requests.exceptions.RequestException as err:
- print ("OOps: Something Else",err)
+ print ("error: OOps: Something Else",err)
data = response.content
if form.getvalue('service') == 'nginx':
@@ -627,11 +627,11 @@ if serv is not None and act == "showMap":
error = funct.get_config(serv, cfg)
if error:
- print(''+error+'
')
+ print(error)
try:
conf = open(cfg, "r")
except IOError:
- print('Can\'t read import config file
')
+ print('error: Can\'t read import config file')
node = ""
line_new2 = [1,""]
@@ -703,7 +703,7 @@ if serv is not None and act == "showMap":
plt.savefig("map.png")
plt.show()
except Exception as e:
- print('' + str(e) + '
')
+ print(str(e))
cmd = "rm -f "+os.path.dirname(os.getcwd())+"/map*.png && mv map.png "+os.path.dirname(os.getcwd())+"/map"+date+".png"
output, stderr = funct.subprocess_execute(cmd)
@@ -1339,7 +1339,7 @@ if form.getvalue('get_hap_v'):
if form.getvalue('get_nginx_v'):
- cmd = [ "/usr/sbin/nginx -v" ]
+ cmd = [ '/usr/sbin/nginx -v' ]
print(funct.ssh_command(serv, cmd))
@@ -1355,7 +1355,7 @@ if form.getvalue('bwlists'):
file.close
print(file_read)
except IOError:
- print('Cat\'n read '+form.getvalue('color')+' list
')
+ print('error: Cat\'n read '+form.getvalue('color')+' list , ')
if form.getvalue('bwlists_create'):
@@ -1365,13 +1365,13 @@ if form.getvalue('bwlists_create'):
list = os.path.dirname(os.getcwd())+"/"+sql.get_setting('lists_path')+"/"+form.getvalue('group')+"/"+color+"/"+list_name
try:
open(list, 'a').close()
- print(''+color+' list was created
')
+ print(color)
try:
funct.logging(server[1], 'has created '+color+' list '+list_name, haproxywi=1, login=1)
except:
pass
except IOError as e:
- print('Cat\'n create new '+color+' list. %s
' % e)
+ print('error: Cat\'n create new '+color+' list. %s , ' % e)
if form.getvalue('bwlists_save'):
@@ -1382,7 +1382,7 @@ if form.getvalue('bwlists_save'):
with open(list, "w") as file:
file.write(form.getvalue('bwlists_content'))
except IOError as e:
- print('Cat\'n save '+color+' list. %s
' % e)
+ print('error: Cat\'n save '+color+' list. %s , ' % e)
path = sql.get_setting('haproxy_dir')+"/"+color
servers = []
@@ -1404,9 +1404,9 @@ if form.getvalue('bwlists_save'):
funct.ssh_command(serv, ["sudo chown $(whoami) "+path])
error = funct.upload(serv, path+"/"+bwlists_save, list, dir='fullpath')
if error:
- print('Upload fail: %s
' % error)
+ print('error: Upload fail: %s , ' % error)
else:
- print('Edited '+color+' list was uploaded to '+serv+'
')
+ print('success: Edited '+color+' list was uploaded to '+serv+' , ')
try:
funct.logging(serv, 'has edited '+color+' list '+bwlists_save, haproxywi=1, login=1)
except:
@@ -1468,7 +1468,7 @@ if form.getvalue('change_waf_mode'):
funct.logging(serv, 'Was changed WAF mod to '+waf_mode, haproxywi=1, login=1)
-error_mess = 'All fields must be completed X '
+error_mess = 'error: All fields must be completed'
if form.getvalue('newuser') is not None:
@@ -1731,9 +1731,9 @@ if form.getvalue('ssh_cert'):
with open(ssh_keys, "w") as conf:
conf.write(form.getvalue('ssh_cert'))
except IOError:
- print('Can\'t save ssh keys file. Check ssh keys path in config
')
+ print('error: Can\'t save ssh keys file. Check ssh keys path in config')
else:
- print('Ssh key was save into: %s
' % ssh_keys)
+ print('success: Ssh key was save into: %s ' % ssh_keys)
try:
cmd = 'chmod 600 %s' % ssh_keys
@@ -1867,6 +1867,7 @@ if form.getvalue('smondel') is not None:
if sql.delete_smon(id, user_group):
print('Ok')
+ funct.logging('SMON','Has been delete server from SMON ', haproxywi=1, login=1)
if form.getvalue('showsmon') is not None:
@@ -1907,6 +1908,7 @@ if form.getvalue('updateSmonIp') is not None:
sys.exit()
if sql.update_smon(id, ip, port, body, telegram, group, desc, en):
print("Ok")
+ funct.logging('SMON','Has been update the server '+ip+' to SMON ', haproxywi=1, login=1)
if form.getvalue('showBytes') is not None:
diff --git a/app/templates/include/smon_server.html b/app/templates/include/smon_server.html
index e429f60b..1ef102a3 100644
--- a/app/templates/include/smon_server.html
+++ b/app/templates/include/smon_server.html
@@ -32,10 +32,15 @@
{% set id = 'smon-body-' + s.0|string() %}
{% if s.5 != 'None' %}
+ {{s.5}}
+ {% else %}
+
+ {% endif %}
+ {#{% if s.5 != 'None' %}
{{ input(id, value=s.5, size='10') }}
{% else %}
{{ input(id, size='10') }}
- {% endif %}
+ {% endif %} #}
diff --git a/inc/script.js b/inc/script.js
index 0ca3a11c..b6c2ed19 100644
--- a/inc/script.js
+++ b/inc/script.js
@@ -283,9 +283,14 @@ function showStats() {
},
type: "POST",
success: function( data ) {
- $("#ajax").html(data);
- window.history.pushState("Stats", "Stats", cur_url[0]+"?service="+$("#service").val()+"&serv="+$("#serv").val());
- wait();
+ if (data.indexOf('error') != '-1') {
+ toastr.error(data);
+ } else {
+ toastr.clear();
+ $("#ajax").html(data);
+ window.history.pushState("Stats", "Stats", cur_url[0] + "?service=" + $("#service").val() + "&serv=" + $("#serv").val());
+ wait();
+ }
}
} );
}
@@ -344,16 +349,21 @@ function showLog() {
},
type: "POST",
success: function( data ) {
- $("#ajax").html(data);
- window.history.pushState("Logs", "Logs", cur_url[0]+"?service="+service+"&serv="+$("#serv").val()+
- '&rows='+rows+
- '&exgrep='+exgrep+
- '&grep='+grep+
- '&hour='+hour+
- '&minut='+minut+
- '&hour1='+hour1+
- '&minut1='+minut1+
- '&waf='+waf);
+ if (data.indexOf('error') != '-1') {
+ toastr.error(data);
+ } else {
+ toastr.clear();
+ $("#ajax").html(data);
+ window.history.pushState("Logs", "Logs", cur_url[0] + "?service=" + service + "&serv=" + $("#serv").val() +
+ '&rows=' + rows +
+ '&exgrep=' + exgrep +
+ '&grep=' + grep +
+ '&hour=' + hour +
+ '&minut=' + minut +
+ '&hour1=' + hour1 +
+ '&minut1=' + minut1 +
+ '&waf=' + waf);
+ }
}
} );
}
@@ -372,8 +382,13 @@ function showMap() {
},
type: "POST",
success: function( data ) {
- $("#ajax").html(data);
- window.history.pushState("Show map", "Show map", cur_url[0]+'?serv='+$("#serv").val()+'&showMap');
+ if (data.indexOf('error') != '-1') {
+ toastr.error(data);
+ } else {
+ toastr.clear();
+ $("#ajax").html(data);
+ window.history.pushState("Show map", "Show map", cur_url[0] + '?serv=' + $("#serv").val() + '&showMap');
+ }
}
} );
}
@@ -389,7 +404,12 @@ function showCompare() {
},
type: "POST",
success: function( data ) {
- $("#ajax").html(data);
+ if (data.indexOf('error') != '-1') {
+ toastr.error(data);
+ } else {
+ toastr.clear();
+ $("#ajax").html(data);
+ }
}
} );
}
@@ -408,11 +428,16 @@ function showCompareConfigs() {
},
type: "POST",
success: function( data ) {
- $("#ajax-compare").html(data);
- $( "input[type=submit], button" ).button();
- $( "select" ).selectmenu();
- window.history.pushState("Show compare config", "Show compare config", cur_url[0]+'?service='+$("#service").val()+'&serv='+$("#serv").val()+'&showCompare');
- }
+ if (data.indexOf('error') != '-1') {
+ toastr.error(data);
+ } else {
+ toastr.clear();
+ $("#ajax-compare").html(data);
+ $("input[type=submit], button").button();
+ $("select").selectmenu();
+ window.history.pushState("Show compare config", "Show compare config", cur_url[0] + '?service=' + $("#service").val() + '&serv=' + $("#serv").val() + '&showCompare');
+ }
+ }
} );
}
function showConfig() {
@@ -431,9 +456,14 @@ function showConfig() {
},
type: "POST",
success: function( data ) {
- $("#ajax").html(data);
- $.getScript('/inc/configshow.js');
- window.history.pushState("Show config", "Show config", cur_url[0]+"?service="+service+"&serv="+$("#serv").val()+"&showConfig");
+ if (data.indexOf('error') != '-1') {
+ toastr.error(data);
+ } else {
+ toastr.clear();
+ $("#ajax").html(data);
+ $.getScript('/inc/configshow.js');
+ window.history.pushState("Show config", "Show config", cur_url[0] + "?service=" + service + "&serv=" + $("#serv").val() + "&showConfig");
+ }
}
} );
}
@@ -452,9 +482,14 @@ function showUploadConfig() {
},
type: "POST",
success: function( data ) {
- $("#ajax").html(data);
- window.history.pushState("Show config", "Show config", cur_url[0]+"?service="+service+"&serv="+serv+"&open=open&configver="+configver);
- $.getScript('/inc/configshow.js');
+ if (data.indexOf('error') != '-1') {
+ toastr.error(data);
+ } else {
+ toastr.clear();
+ $("#ajax").html(data);
+ window.history.pushState("Show config", "Show config", cur_url[0] + "?service=" + service + "&serv=" + serv + "&open=open&configver=" + configver);
+ $.getScript('/inc/configshow.js');
+ }
}
} );
}
@@ -499,19 +534,24 @@ function viewLogs() {
type: "POST",
success: function( data ) {
$("#ajax").html(data);
- window.history.pushState("View logs", "View logs", cur_url[0]+"?viewlogs="+viewlogs+
- '&rows='+rows+
- '&grep='+grep+
- '&exgrep='+exgrep+
- '&hour='+hour+
- '&minut='+minut+
- '&hour1='+hour1+
- '&minut1='+minut1);
+ window.history.pushState("View logs", "View logs", cur_url[0] + "?viewlogs=" + viewlogs +
+ '&rows=' + rows +
+ '&grep=' + grep +
+ '&exgrep=' + exgrep +
+ '&hour=' + hour +
+ '&minut=' + minut +
+ '&hour1=' + hour1 +
+ '&minut1=' + minut1);
}
} );
}
}
$( function() {
+ toastr.options.closeButton = true;
+ toastr.options.progressBar = true;
+ toastr.options.positionClass = 'toast-bottom-full-width';
+ toastr.options.timeOut = 25000;
+ toastr.options.extendedTimeOut = 50000;
$('#errorMess').click(function(){
$('#error').remove();
});
@@ -1005,7 +1045,7 @@ function showSmon(action) {
type: "POST",
success: function( data ) {
if (data.indexOf('error') != '-1') {
- alert(data);
+ toastr.error(data);
} else {
$("#smon_dashboard").html(data);
if (action == 'not_sort') {
diff --git a/inc/toastr.css b/inc/toastr.css
new file mode 100644
index 00000000..74473ec8
--- /dev/null
+++ b/inc/toastr.css
@@ -0,0 +1,228 @@
+.toast-title {
+ font-weight: bold;
+}
+.toast-message {
+ -ms-word-wrap: break-word;
+ word-wrap: break-word;
+}
+.toast-message a,
+.toast-message label {
+ color: #FFFFFF;
+}
+.toast-message a:hover {
+ color: #CCCCCC;
+ text-decoration: none;
+}
+.toast-close-button {
+ position: relative;
+ right: -0.3em;
+ top: -0.3em;
+ float: right;
+ font-size: 20px;
+ font-weight: bold;
+ color: #FFFFFF;
+ -webkit-text-shadow: 0 1px 0 #ffffff;
+ text-shadow: 0 1px 0 #ffffff;
+ opacity: 0.8;
+ -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
+ filter: alpha(opacity=80);
+ line-height: 1;
+}
+.toast-close-button:hover,
+.toast-close-button:focus {
+ color: #000000;
+ text-decoration: none;
+ cursor: pointer;
+ opacity: 0.4;
+ -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);
+ filter: alpha(opacity=40);
+}
+.rtl .toast-close-button {
+ left: -0.3em;
+ float: left;
+ right: 0.3em;
+}
+/*Additional properties for button version
+ iOS requires the button element instead of an anchor tag.
+ If you want the anchor version, it requires `href="#"`.*/
+button.toast-close-button {
+ padding: 0;
+ cursor: pointer;
+ background: transparent;
+ border: 0;
+ -webkit-appearance: none;
+}
+.toast-top-center {
+ top: 0;
+ right: 0;
+ width: 100%;
+}
+.toast-bottom-center {
+ bottom: 0;
+ right: 0;
+ width: 100%;
+}
+.toast-top-full-width {
+ top: 0;
+ right: 0;
+ width: 100%;
+}
+.toast-bottom-full-width {
+ bottom: 0;
+ right: 0;
+ width: 100%;
+}
+.toast-top-left {
+ top: 12px;
+ left: 12px;
+}
+.toast-top-right {
+ top: 12px;
+ right: 12px;
+}
+.toast-bottom-right {
+ right: 12px;
+ bottom: 12px;
+}
+.toast-bottom-left {
+ bottom: 12px;
+ left: 12px;
+}
+#toast-container {
+ position: fixed;
+ z-index: 999999;
+ pointer-events: none;
+ /*overrides*/
+}
+#toast-container * {
+ -moz-box-sizing: border-box;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+}
+#toast-container > div {
+ position: relative;
+ pointer-events: auto;
+ overflow: hidden;
+ margin: 0 0 6px;
+ padding: 15px 15px 15px 50px;
+ width: 300px;
+ -moz-border-radius: 3px 3px 3px 3px;
+ -webkit-border-radius: 3px 3px 3px 3px;
+ border-radius: 3px 3px 3px 3px;
+ background-position: 15px center;
+ background-repeat: no-repeat;
+ -moz-box-shadow: 0 0 12px #999999;
+ -webkit-box-shadow: 0 0 12px #999999;
+ box-shadow: 0 0 12px #999999;
+ color: #FFFFFF;
+ opacity: 0.8;
+ -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
+ filter: alpha(opacity=80);
+}
+#toast-container > div.rtl {
+ direction: rtl;
+ padding: 15px 50px 15px 15px;
+ background-position: right 15px center;
+}
+#toast-container > div:hover {
+ -moz-box-shadow: 0 0 12px #000000;
+ -webkit-box-shadow: 0 0 12px #000000;
+ box-shadow: 0 0 12px #000000;
+ opacity: 1;
+ -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
+ filter: alpha(opacity=100);
+ cursor: pointer;
+}
+#toast-container > .toast-info {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=") !important;
+}
+#toast-container > .toast-error {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=") !important;
+}
+#toast-container > .toast-success {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==") !important;
+}
+#toast-container > .toast-warning {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=") !important;
+}
+#toast-container.toast-top-center > div,
+#toast-container.toast-bottom-center > div {
+ width: 300px;
+ margin-left: auto;
+ margin-right: auto;
+}
+#toast-container.toast-top-full-width > div,
+#toast-container.toast-bottom-full-width > div {
+ width: 96%;
+ margin-left: auto;
+ margin-right: auto;
+}
+.toast {
+ background-color: #030303;
+}
+.toast-success {
+ background-color: #51A351;
+}
+.toast-error {
+ background-color: #BD362F;
+}
+.toast-info {
+ background-color: #2F96B4;
+}
+.toast-warning {
+ background-color: #F89406;
+}
+.toast-progress {
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ height: 4px;
+ background-color: #000000;
+ opacity: 0.4;
+ -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);
+ filter: alpha(opacity=40);
+}
+/*Responsive Design*/
+@media all and (max-width: 240px) {
+ #toast-container > div {
+ padding: 8px 8px 8px 50px;
+ width: 11em;
+ }
+ #toast-container > div.rtl {
+ padding: 8px 50px 8px 8px;
+ }
+ #toast-container .toast-close-button {
+ right: -0.2em;
+ top: -0.2em;
+ }
+ #toast-container .rtl .toast-close-button {
+ left: -0.2em;
+ right: 0.2em;
+ }
+}
+@media all and (min-width: 241px) and (max-width: 480px) {
+ #toast-container > div {
+ padding: 8px 8px 8px 50px;
+ width: 18em;
+ }
+ #toast-container > div.rtl {
+ padding: 8px 50px 8px 8px;
+ }
+ #toast-container .toast-close-button {
+ right: -0.2em;
+ top: -0.2em;
+ }
+ #toast-container .rtl .toast-close-button {
+ left: -0.2em;
+ right: 0.2em;
+ }
+}
+@media all and (min-width: 481px) and (max-width: 768px) {
+ #toast-container > div {
+ padding: 15px 15px 15px 50px;
+ width: 25em;
+ }
+ #toast-container > div.rtl {
+ padding: 15px 50px 15px 15px;
+ }
+}
\ No newline at end of file
diff --git a/inc/toastr.js b/inc/toastr.js
new file mode 100644
index 00000000..b97f9d78
--- /dev/null
+++ b/inc/toastr.js
@@ -0,0 +1,2 @@
+!function(e){e(["jquery"],function(e){return function(){function t(e,t,n){return g({type:O.error,iconClass:m().iconClasses.error,message:e,optionsOverride:n,title:t})}function n(t,n){return t||(t=m()),v=e("#"+t.containerId),v.length?v:(n&&(v=d(t)),v)}function o(e,t,n){return g({type:O.info,iconClass:m().iconClasses.info,message:e,optionsOverride:n,title:t})}function s(e){C=e}function i(e,t,n){return g({type:O.success,iconClass:m().iconClasses.success,message:e,optionsOverride:n,title:t})}function a(e,t,n){return g({type:O.warning,iconClass:m().iconClasses.warning,message:e,optionsOverride:n,title:t})}function r(e,t){var o=m();v||n(o),u(e,o,t)||l(o)}function c(t){var o=m();return v||n(o),t&&0===e(":focus",t).length?void h(t):void(v.children().length&&v.remove())}function l(t){for(var n=v.children(),o=n.length-1;o>=0;o--)u(e(n[o]),t)}function u(t,n,o){var s=!(!o||!o.force)&&o.force;return!(!t||!s&&0!==e(":focus",t).length)&&(t[n.hideMethod]({duration:n.hideDuration,easing:n.hideEasing,complete:function(){h(t)}}),!0)}function d(t){return v=e("
").attr("id",t.containerId).addClass(t.positionClass),v.appendTo(e(t.target)),v}function p(){return{tapToDismiss:!0,toastClass:"toast",containerId:"toast-container",debug:!1,showMethod:"fadeIn",showDuration:300,showEasing:"swing",onShown:void 0,hideMethod:"fadeOut",hideDuration:1e3,hideEasing:"swing",onHidden:void 0,closeMethod:!1,closeDuration:!1,closeEasing:!1,closeOnHover:!0,extendedTimeOut:1e3,iconClasses:{error:"toast-error",info:"toast-info",success:"toast-success",warning:"toast-warning"},iconClass:"toast-info",positionClass:"toast-top-right",timeOut:5e3,titleClass:"toast-title",messageClass:"toast-message",escapeHtml:!1,target:"body",closeHtml:'× ',closeClass:"toast-close-button",newestOnTop:!0,preventDuplicates:!1,progressBar:!1,progressClass:"toast-progress",rtl:!1}}function f(e){C&&C(e)}function g(t){function o(e){return null==e&&(e=""),e.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}function s(){c(),u(),d(),p(),g(),C(),l(),i()}function i(){var e="";switch(t.iconClass){case"toast-success":case"toast-info":e="polite";break;default:e="assertive"}I.attr("aria-live",e)}function a(){E.closeOnHover&&I.hover(H,D),!E.onclick&&E.tapToDismiss&&I.click(b),E.closeButton&&j&&j.click(function(e){e.stopPropagation?e.stopPropagation():void 0!==e.cancelBubble&&e.cancelBubble!==!0&&(e.cancelBubble=!0),E.onCloseClick&&E.onCloseClick(e),b(!0)}),E.onclick&&I.click(function(e){E.onclick(e),b()})}function r(){I.hide(),I[E.showMethod]({duration:E.showDuration,easing:E.showEasing,complete:E.onShown}),E.timeOut>0&&(k=setTimeout(b,E.timeOut),F.maxHideTime=parseFloat(E.timeOut),F.hideEta=(new Date).getTime()+F.maxHideTime,E.progressBar&&(F.intervalId=setInterval(x,10)))}function c(){t.iconClass&&I.addClass(E.toastClass).addClass(y)}function l(){E.newestOnTop?v.prepend(I):v.append(I)}function u(){if(t.title){var e=t.title;E.escapeHtml&&(e=o(t.title)),M.append(e).addClass(E.titleClass),I.append(M)}}function d(){if(t.message){var e=t.message;E.escapeHtml&&(e=o(t.message)),B.append(e).addClass(E.messageClass),I.append(B)}}function p(){E.closeButton&&(j.addClass(E.closeClass).attr("role","button"),I.prepend(j))}function g(){E.progressBar&&(q.addClass(E.progressClass),I.prepend(q))}function C(){E.rtl&&I.addClass("rtl")}function O(e,t){if(e.preventDuplicates){if(t.message===w)return!0;w=t.message}return!1}function b(t){var n=t&&E.closeMethod!==!1?E.closeMethod:E.hideMethod,o=t&&E.closeDuration!==!1?E.closeDuration:E.hideDuration,s=t&&E.closeEasing!==!1?E.closeEasing:E.hideEasing;if(!e(":focus",I).length||t)return clearTimeout(F.intervalId),I[n]({duration:o,easing:s,complete:function(){h(I),clearTimeout(k),E.onHidden&&"hidden"!==P.state&&E.onHidden(),P.state="hidden",P.endTime=new Date,f(P)}})}function D(){(E.timeOut>0||E.extendedTimeOut>0)&&(k=setTimeout(b,E.extendedTimeOut),F.maxHideTime=parseFloat(E.extendedTimeOut),F.hideEta=(new Date).getTime()+F.maxHideTime)}function H(){clearTimeout(k),F.hideEta=0,I.stop(!0,!0)[E.showMethod]({duration:E.showDuration,easing:E.showEasing})}function x(){var e=(F.hideEta-(new Date).getTime())/F.maxHideTime*100;q.width(e+"%")}var E=m(),y=t.iconClass||E.iconClass;if("undefined"!=typeof t.optionsOverride&&(E=e.extend(E,t.optionsOverride),y=t.optionsOverride.iconClass||y),!O(E,t)){T++,v=n(E,!0);var k=null,I=e("
"),M=e("
"),B=e("
"),q=e("
"),j=e(E.closeHtml),F={intervalId:null,hideEta:null,maxHideTime:null},P={toastId:T,state:"visible",startTime:new Date,options:E,map:t};return s(),r(),a(),f(P),E.debug&&console&&console.log(P),I}}function m(){return e.extend({},p(),b.options)}function h(e){v||(v=n()),e.is(":visible")||(e.remove(),e=null,0===v.children().length&&(v.remove(),w=void 0))}var v,C,w,T=0,O={error:"error",info:"info",success:"success",warning:"warning"},b={clear:r,remove:c,error:t,getContainer:n,info:o,options:{},subscribe:s,success:i,version:"2.1.4",warning:a};return b}()})}("function"==typeof define&&define.amd?define:function(e,t){"undefined"!=typeof module&&module.exports?module.exports=t(require("jquery")):window.toastr=t(window.jQuery)});
+//# sourceMappingURL=toastr.js.map
\ No newline at end of file
diff --git a/inc/toastr.js.map b/inc/toastr.js.map
new file mode 100644
index 00000000..47a9639a
--- /dev/null
+++ b/inc/toastr.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["toastr.js"],"names":["define","$","error","message","title","optionsOverride","notify","type","toastType","iconClass","getOptions","iconClasses","getContainer","options","create","$container","containerId","length","createContainer","info","subscribe","callback","listener","success","warning","clear","$toastElement","clearOptions","clearToast","clearContainer","remove","removeToast","children","toastsToClear","i","force","hideMethod","duration","hideDuration","easing","hideEasing","complete","attr","addClass","positionClass","appendTo","target","getDefaults","tapToDismiss","toastClass","debug","showMethod","showDuration","showEasing","onShown","undefined","onHidden","closeMethod","closeDuration","closeEasing","closeOnHover","extendedTimeOut","timeOut","titleClass","messageClass","escapeHtml","closeHtml","closeClass","newestOnTop","preventDuplicates","progressBar","progressClass","rtl","publish","args","map","source","replace","personalizeToast","setIcon","setTitle","setMessage","setCloseButton","setProgressBar","setRTL","setSequence","setAria","ariaValue","handleEvents","hover","stickAround","delayedHideToast","onclick","click","hideToast","closeButton","$closeElement","event","stopPropagation","cancelBubble","onCloseClick","displayToast","hide","intervalId","setTimeout","maxHideTime","parseFloat","hideEta","Date","getTime","setInterval","updateProgress","prepend","append","suffix","$titleElement","$messageElement","$progressElement","shouldExit","previousToast","override","method","clearTimeout","response","state","endTime","stop","percentage","width","extend","toastId","startTime","console","log","toastr","is","version","amd","deps","factory","module","exports","require","window","jQuery"],"mappings":"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","file":"toastr.js","sourcesContent":["/*\n * Toastr\n * Copyright 2012-2015\n * Authors: John Papa, Hans FjÀllemark, and Tim Ferrell.\n * All Rights Reserved.\n * Use, reproduction, distribution, and modification of this code is subject to the terms and\n * conditions of the MIT license, available at http://www.opensource.org/licenses/mit-license.php\n *\n * ARIA Support: Greta Krafsig\n *\n * Project: https://github.com/CodeSeven/toastr\n */\n/* global define */\n(function (define) {\n define(['jquery'], function ($) {\n return (function () {\n var $container;\n var listener;\n var toastId = 0;\n var toastType = {\n error: 'error',\n info: 'info',\n success: 'success',\n warning: 'warning'\n };\n\n var toastr = {\n clear: clear,\n remove: remove,\n error: error,\n getContainer: getContainer,\n info: info,\n options: {},\n subscribe: subscribe,\n success: success,\n version: '2.1.4',\n warning: warning\n };\n\n var previousToast;\n\n return toastr;\n\n ////////////////\n\n function error(message, title, optionsOverride) {\n return notify({\n type: toastType.error,\n iconClass: getOptions().iconClasses.error,\n message: message,\n optionsOverride: optionsOverride,\n title: title\n });\n }\n\n function getContainer(options, create) {\n if (!options) { options = getOptions(); }\n $container = $('#' + options.containerId);\n if ($container.length) {\n return $container;\n }\n if (create) {\n $container = createContainer(options);\n }\n return $container;\n }\n\n function info(message, title, optionsOverride) {\n return notify({\n type: toastType.info,\n iconClass: getOptions().iconClasses.info,\n message: message,\n optionsOverride: optionsOverride,\n title: title\n });\n }\n\n function subscribe(callback) {\n listener = callback;\n }\n\n function success(message, title, optionsOverride) {\n return notify({\n type: toastType.success,\n iconClass: getOptions().iconClasses.success,\n message: message,\n optionsOverride: optionsOverride,\n title: title\n });\n }\n\n function warning(message, title, optionsOverride) {\n return notify({\n type: toastType.warning,\n iconClass: getOptions().iconClasses.warning,\n message: message,\n optionsOverride: optionsOverride,\n title: title\n });\n }\n\n function clear($toastElement, clearOptions) {\n var options = getOptions();\n if (!$container) { getContainer(options); }\n if (!clearToast($toastElement, options, clearOptions)) {\n clearContainer(options);\n }\n }\n\n function remove($toastElement) {\n var options = getOptions();\n if (!$container) { getContainer(options); }\n if ($toastElement && $(':focus', $toastElement).length === 0) {\n removeToast($toastElement);\n return;\n }\n if ($container.children().length) {\n $container.remove();\n }\n }\n\n // internal functions\n\n function clearContainer (options) {\n var toastsToClear = $container.children();\n for (var i = toastsToClear.length - 1; i >= 0; i--) {\n clearToast($(toastsToClear[i]), options);\n }\n }\n\n function clearToast ($toastElement, options, clearOptions) {\n var force = clearOptions && clearOptions.force ? clearOptions.force : false;\n if ($toastElement && (force || $(':focus', $toastElement).length === 0)) {\n $toastElement[options.hideMethod]({\n duration: options.hideDuration,\n easing: options.hideEasing,\n complete: function () { removeToast($toastElement); }\n });\n return true;\n }\n return false;\n }\n\n function createContainer(options) {\n $container = $('
')\n .attr('id', options.containerId)\n .addClass(options.positionClass);\n\n $container.appendTo($(options.target));\n return $container;\n }\n\n function getDefaults() {\n return {\n tapToDismiss: true,\n toastClass: 'toast',\n containerId: 'toast-container',\n debug: false,\n\n showMethod: 'fadeIn', //fadeIn, slideDown, and show are built into jQuery\n showDuration: 300,\n showEasing: 'swing', //swing and linear are built into jQuery\n onShown: undefined,\n hideMethod: 'fadeOut',\n hideDuration: 1000,\n hideEasing: 'swing',\n onHidden: undefined,\n closeMethod: false,\n closeDuration: false,\n closeEasing: false,\n closeOnHover: true,\n\n extendedTimeOut: 1000,\n iconClasses: {\n error: 'toast-error',\n info: 'toast-info',\n success: 'toast-success',\n warning: 'toast-warning'\n },\n iconClass: 'toast-info',\n positionClass: 'toast-top-right',\n timeOut: 5000, // Set timeOut and extendedTimeOut to 0 to make it sticky\n titleClass: 'toast-title',\n messageClass: 'toast-message',\n escapeHtml: false,\n target: 'body',\n closeHtml: '× ',\n closeClass: 'toast-close-button',\n newestOnTop: true,\n preventDuplicates: false,\n progressBar: false,\n progressClass: 'toast-progress',\n rtl: false\n };\n }\n\n function publish(args) {\n if (!listener) { return; }\n listener(args);\n }\n\n function notify(map) {\n var options = getOptions();\n var iconClass = map.iconClass || options.iconClass;\n\n if (typeof (map.optionsOverride) !== 'undefined') {\n options = $.extend(options, map.optionsOverride);\n iconClass = map.optionsOverride.iconClass || iconClass;\n }\n\n if (shouldExit(options, map)) { return; }\n\n toastId++;\n\n $container = getContainer(options, true);\n\n var intervalId = null;\n var $toastElement = $('
');\n var $titleElement = $('
');\n var $messageElement = $('
');\n var $progressElement = $('
');\n var $closeElement = $(options.closeHtml);\n var progressBar = {\n intervalId: null,\n hideEta: null,\n maxHideTime: null\n };\n var response = {\n toastId: toastId,\n state: 'visible',\n startTime: new Date(),\n options: options,\n map: map\n };\n\n personalizeToast();\n\n displayToast();\n\n handleEvents();\n\n publish(response);\n\n if (options.debug && console) {\n console.log(response);\n }\n\n return $toastElement;\n\n function escapeHtml(source) {\n if (source == null) {\n source = '';\n }\n\n return source\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(//g, '>');\n }\n\n function personalizeToast() {\n setIcon();\n setTitle();\n setMessage();\n setCloseButton();\n setProgressBar();\n setRTL();\n setSequence();\n setAria();\n }\n\n function setAria() {\n var ariaValue = '';\n switch (map.iconClass) {\n case 'toast-success':\n case 'toast-info':\n ariaValue = 'polite';\n break;\n default:\n ariaValue = 'assertive';\n }\n $toastElement.attr('aria-live', ariaValue);\n }\n\n function handleEvents() {\n if (options.closeOnHover) {\n $toastElement.hover(stickAround, delayedHideToast);\n }\n\n if (!options.onclick && options.tapToDismiss) {\n $toastElement.click(hideToast);\n }\n\n if (options.closeButton && $closeElement) {\n $closeElement.click(function (event) {\n if (event.stopPropagation) {\n event.stopPropagation();\n } else if (event.cancelBubble !== undefined && event.cancelBubble !== true) {\n event.cancelBubble = true;\n }\n\n if (options.onCloseClick) {\n options.onCloseClick(event);\n }\n\n hideToast(true);\n });\n }\n\n if (options.onclick) {\n $toastElement.click(function (event) {\n options.onclick(event);\n hideToast();\n });\n }\n }\n\n function displayToast() {\n $toastElement.hide();\n\n $toastElement[options.showMethod](\n {duration: options.showDuration, easing: options.showEasing, complete: options.onShown}\n );\n\n if (options.timeOut > 0) {\n intervalId = setTimeout(hideToast, options.timeOut);\n progressBar.maxHideTime = parseFloat(options.timeOut);\n progressBar.hideEta = new Date().getTime() + progressBar.maxHideTime;\n if (options.progressBar) {\n progressBar.intervalId = setInterval(updateProgress, 10);\n }\n }\n }\n\n function setIcon() {\n if (map.iconClass) {\n $toastElement.addClass(options.toastClass).addClass(iconClass);\n }\n }\n\n function setSequence() {\n if (options.newestOnTop) {\n $container.prepend($toastElement);\n } else {\n $container.append($toastElement);\n }\n }\n\n function setTitle() {\n if (map.title) {\n var suffix = map.title;\n if (options.escapeHtml) {\n suffix = escapeHtml(map.title);\n }\n $titleElement.append(suffix).addClass(options.titleClass);\n $toastElement.append($titleElement);\n }\n }\n\n function setMessage() {\n if (map.message) {\n var suffix = map.message;\n if (options.escapeHtml) {\n suffix = escapeHtml(map.message);\n }\n $messageElement.append(suffix).addClass(options.messageClass);\n $toastElement.append($messageElement);\n }\n }\n\n function setCloseButton() {\n if (options.closeButton) {\n $closeElement.addClass(options.closeClass).attr('role', 'button');\n $toastElement.prepend($closeElement);\n }\n }\n\n function setProgressBar() {\n if (options.progressBar) {\n $progressElement.addClass(options.progressClass);\n $toastElement.prepend($progressElement);\n }\n }\n\n function setRTL() {\n if (options.rtl) {\n $toastElement.addClass('rtl');\n }\n }\n\n function shouldExit(options, map) {\n if (options.preventDuplicates) {\n if (map.message === previousToast) {\n return true;\n } else {\n previousToast = map.message;\n }\n }\n return false;\n }\n\n function hideToast(override) {\n var method = override && options.closeMethod !== false ? options.closeMethod : options.hideMethod;\n var duration = override && options.closeDuration !== false ?\n options.closeDuration : options.hideDuration;\n var easing = override && options.closeEasing !== false ? options.closeEasing : options.hideEasing;\n if ($(':focus', $toastElement).length && !override) {\n return;\n }\n clearTimeout(progressBar.intervalId);\n return $toastElement[method]({\n duration: duration,\n easing: easing,\n complete: function () {\n removeToast($toastElement);\n clearTimeout(intervalId);\n if (options.onHidden && response.state !== 'hidden') {\n options.onHidden();\n }\n response.state = 'hidden';\n response.endTime = new Date();\n publish(response);\n }\n });\n }\n\n function delayedHideToast() {\n if (options.timeOut > 0 || options.extendedTimeOut > 0) {\n intervalId = setTimeout(hideToast, options.extendedTimeOut);\n progressBar.maxHideTime = parseFloat(options.extendedTimeOut);\n progressBar.hideEta = new Date().getTime() + progressBar.maxHideTime;\n }\n }\n\n function stickAround() {\n clearTimeout(intervalId);\n progressBar.hideEta = 0;\n $toastElement.stop(true, true)[options.showMethod](\n {duration: options.showDuration, easing: options.showEasing}\n );\n }\n\n function updateProgress() {\n var percentage = ((progressBar.hideEta - (new Date().getTime())) / progressBar.maxHideTime) * 100;\n $progressElement.width(percentage + '%');\n }\n }\n\n function getOptions() {\n return $.extend({}, getDefaults(), toastr.options);\n }\n\n function removeToast($toastElement) {\n if (!$container) { $container = getContainer(); }\n if ($toastElement.is(':visible')) {\n return;\n }\n $toastElement.remove();\n $toastElement = null;\n if ($container.children().length === 0) {\n $container.remove();\n previousToast = undefined;\n }\n }\n\n })();\n });\n}(typeof define === 'function' && define.amd ? define : function (deps, factory) {\n if (typeof module !== 'undefined' && module.exports) { //Node\n module.exports = factory(require('jquery'));\n } else {\n window.toastr = factory(window.jQuery);\n }\n}));\n"]}
\ No newline at end of file
diff --git a/inc/users.js b/inc/users.js
index d1fd2e01..02828ded 100644
--- a/inc/users.js
+++ b/inc/users.js
@@ -25,7 +25,11 @@ $( function() {
},
success: function( data ) {
data = data.replace(/\s+/g,' ');
- response(data.split(" "));
+ if (data.indexOf('error') != '-1' || data.indexOf('Failed') != '-1') {
+ toastr.error(data);
+ } else {
+ response(data.split(" "));
+ }
}
} );
},
@@ -43,7 +47,11 @@ $( function() {
},
success: function( data ) {
data = data.replace(/\s+/g,' ');
- response(data.split(" "));
+ if (data.indexOf('error') != '-1' || data.indexOf('Failed') != '-1') {
+ toastr.error(data);
+ } else {
+ response(data.split(" "));
+ }
}
} );
},
@@ -68,11 +76,11 @@ $( function() {
$("#ajax").html('')
if( $("#master").val() == "" || $("#slave").val() == "" || $("#interface").val() == "" ||
$("#vrrp-ip").val() == "") {
- $("#ajax").html('Please fill in all fields
')
+ toastr.warning('Please fill in all fields');
} else if(! $("#vrrp-ip").val().match(ipformat)) {
- $("#ajax").html('Please enter IP in "VRRP IP" field
')
+ toastr.warning('Please enter IP in "VRRP IP" field');
} else if ($("#master").val() == $("#slave").val() ){
- $("#ajax").html('Master and slave must be diff servers
')
+ toastr.warning('Master and slave must be diff servers');
} else {
$("#ajax").html(wait_mess);
$.ajax( {
@@ -91,16 +99,16 @@ $( function() {
success: function( data ) {
data = data.replace(/\s+/g,' ');
if (data.indexOf('error') != '-1' || data.indexOf('alert') != '-1' || data.indexOf('FAILED') != '-1') {
- $("#ajax").html(''+data+'
');
+ toastr.error(data);
} else if (data.indexOf('info') != '-1' ){
- $("#ajax").html(''+data+'
');
+ toastr.clear();
+ toastr.info(data);
} else if (data.indexOf('success') != '-1' ){
- $('.alert-danger').remove();
- $("#ajax").html(''+data+'
');
+ toastr.clear();
+ toastr.success(data);
} else {
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajax").html(''+data+'
');
+ toastr.clear();
+ toastr.info(data);
}
}
} );
@@ -116,9 +124,9 @@ $( function() {
$("#ajax").html('')
if( $("#master-add").val() == "" || $("#slave-add").val() == "" || $("#interface-add").val() == "" ||
$("#vrrp-ip-add").val() == "") {
- $("#ajax").html('Please fill in all fields
')
+ toastr.warning('Please fill in all fields')
} else if(! $("#vrrp-ip-add").val().match(ipformat)) {
- $("#ajax").html('Please enter IP in "VRRP IP" field
')
+ toastr.warning('Please enter IP in "VRRP IP" field')
} else {
$("#ajax").html(wait_mess);
$.ajax( {
@@ -135,14 +143,14 @@ $( function() {
success: function( data ) {
data = data.replace(/\s+/g,' ');
if (data.indexOf('error') != '-1') {
- $("#ajax").html(''+data+'
');
+ toastr.clear();
+ toastr.error(data);
} else if (data.indexOf('success') != '-1'){
- $('.alert-danger').remove();
- $("#ajax").html(''+data+'
');
+ toastr.clear();
+ toastr.success(data);
} else {
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajax").html(''+data+'
');
+ toastr.clear();
+ toastr.info(data);
}
}
} );
@@ -167,19 +175,16 @@ $( function() {
success: function( data ) {
data = data.replace(/\s+/g,' ');
if (data.indexOf('error') != '-1' || data.indexOf('FAILED') != '-1') {
- $("#ajax").html(''+data+'
');
+ toastr.error(data);
} else if (data.indexOf('success') != '-1' ){
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajax").html(''+data+'
');
+ toastr.remove();
+ toastr.success(data);
} else if (data.indexOf('Info') != '-1' ){
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajax").html(''+data+'
');
+ toastr.remove();
+ toastr.info(data);
} else {
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajax").html(''+data+'
');
+ toastr.remove();
+ toastr.info(data);
}
}
} );
@@ -202,19 +207,17 @@ $( function() {
success: function( data ) {
data = data.replace(/\s+/g,' ');
if (data.indexOf('error') != '-1' || data.indexOf('FAILED') != '-1') {
- $("#ajax").html(''+data+'
');
+ toastr.clear();
+ toastr.error(data);
} else if (data.indexOf('success') != '-1' ){
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajax").html(''+data+'
');
+ toastr.clear();
+ toastr.success(data);
} else if (data.indexOf('Info') != '-1' ){
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajax").html(''+data+'
');
+ toastr.clear();
+ toastr.info(data);
} else {
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajax").html(''+data+'
');
+ toastr.clear();
+ toastr.info(data);
}
}
} );
@@ -232,19 +235,17 @@ $( function() {
success: function( data ) {
data = data.replace(/\s+/g,' ');
if (data.indexOf('FAILED') != '-1') {
- $("#ajaxmon").html(''+data+'
');
+ toastr.clear();
+ toastr.error(data);;
} else if (data.indexOf('success') != '-1' ){
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajaxmon").html(''+data+'
');
+ toastr.clear();
+ toastr.success(data);
} else if (data.indexOf('Info') != '-1' ){
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajaxmon").html(''+data+'
');
+ toastr.clear();
+ toastr.info(data);
} else {
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajaxmon").html(''+data+'
');
+ toastr.clear();
+ toastr.info(data);
}
}
} );
@@ -262,21 +263,19 @@ $( function() {
success: function( data ) {
data = data.replace(/\s+/g,' ');
if (data.indexOf('error') != '-1' || data.indexOf('FAILED') != '-1') {
- $("#ajaxmon").html(''+data+'
');
+ toastr.clear();
+ toastr.error(data);
} else if (data.indexOf('success') != '-1' ){
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajaxmon").html(''+data+'
');
+ toastr.clear();
+ toastr.success(data);
$('#cur_haproxy_exp_ver').text('HAProxy expoter is installed');
$('#haproxy_exp_install').text('Update');
} else if (data.indexOf('Info') != '-1' ){
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajaxmon").html(''+data+'
');
+ toastr.clear();
+ toastr.info(data);
} else {
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajax").html(''+data+'
');
+ toastr.clear();
+ toastr.info(data);
}
}
} );
@@ -294,21 +293,18 @@ $( function() {
success: function( data ) {
data = data.replace(/\s+/g,' ');
if (data.indexOf('error') != '-1' || data.indexOf('FAILED') != '-1') {
- $("#ajaxmon").html(''+data+'
');
+ toastr.error(data);
} else if (data.indexOf('success') != '-1' ){
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajaxmon").html(''+data+'
');
+ toastr.clear();
+ toastr.success(data);
$('#cur_nginx_exp_ver').text('Nginx expoter is installed');
$('#nginx_exp_install').text('Update');
} else if (data.indexOf('Info') != '-1' ){
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajaxmon").html(''+data+'
');
+ toastr.clear();
+ toastr.info(data);
} else {
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajaxmon").html(''+data+'
');
+ toastr.clear();
+ toastr.info(data);
}
}
} );
@@ -419,54 +415,46 @@ $( function() {
success: function( data ) {
data = data.replace(/\s+/g,' ');
if (data.indexOf('error') != '-1' || data.indexOf('Failed') != '-1') {
- $("#ajax").html(''+data+'
');
+ toastr.error(data);
} else if (data.indexOf('Complete!') != '-1'){
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajax-update").html('Update was success!
');
+ toastr.clear();
+ toastr.success('Update was success!');
} else if (data.indexOf('Unauthorized') != '-1') {
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajax-update").html('It is seems like you Unauthorized in the HAProxy-WI repository. How to get HAProxy-WI auth you can read
hear ');
+ toastr.clear();
+ toastr.error('It is seems like you Unauthorized in the HAProxy-WI repository. How to get HAProxy-WI auth you can read hear ');
} else if (data.indexOf('but not installed') != '-1') {
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajax-update").html('You have settings for HAProxy-WI repository, but installed HAProxy-WI without repository. Please reinstall with yum or use update.sh
');
+ toastr.clear();
+ toastr.error('You have settings for HAProxy-WI repository, but installed HAProxy-WI without repository. Please reinstall with yum');
} else if (data.indexOf('No Match for argument') != '-1') {
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajax-update").html('It is seems like you do not have HAProxy-WI repository settings. Please read docs for
detail ');
+ toastr.clear();
+ toastr.error('It is seems like you do not have HAProxy-WI repository settings. Please read docs for detail ');
} else if (data.indexOf('password for') != '-1') {
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajax-update").html('It is seems like you need add Apache user to sudoers. Please read docs for
detail ');
+ toastr.clear();
+ toastr.error('It is seems like you need add Apache user to sudoers. Please read docs fordetail ');
} else if (data.indexOf('No packages marked for update') != '-1') {
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajax-update").html('It is seems like you have the lastest version HAProxy-WI
');
+ toastr.clear();
+ toastr.error('It is seems like you have the lastest version HAProxy-WI');
} else if (data.indexOf('Connection timed out') != '-1') {
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajax-update").html('Cannot connect to HAProxy-WI repository. Connection timed out
');
+ toastr.clear();
+ toastr.error('Cannot connect to HAProxy-WI repository. Connection timed out');
} else if (data.indexOf('--disable') != '-1') {
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajax-update").html('It is seems like you have problem with your repositorys.
');
+ toastr.clear();
+ toastr.error('It is seems like you have problem with your repositorys');
} else if (data.indexOf('Unauthorized') != '-1') {
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajax-update").html('It is seems like you Unauthorized in the HAProxy-WI repository.
');
+ toastr.clear();
+ toastr.error('It is seems like you Unauthorized in the HAProxy-WI repository');
} else if (data.indexOf('Error: Package') != '-1') {
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajax-update").html(''+data+'
');
+ toastr.clear();
+ toastr.error(data);
+ } else if (data.indexOf('conflicts with file from') != '-1') {
+ toastr.clear();
+ toastr.error(data);
}
}
} );
});
$('#add-group').click(function() {
- $('#error').remove();
- $('.alert-danger').remove();
+ toastr.clear();
$.ajax( {
url: "options.py",
data: {
@@ -478,12 +466,9 @@ $( function() {
type: "POST",
success: function( data ) {
if (data.indexOf('error') != '-1') {
- $("#ajax-group").append(''+data+'
');
- $('#errorMess').click(function() {
- $('#error').remove();
- $('.alert-danger').remove();
- });
+ toastr.error(data);
} else {
+ toastr.clear();
var getId = new RegExp('[0-9]+');
var id = data.match(getId);
$("#ajax-group").append(data);
@@ -495,8 +480,7 @@ $( function() {
} );
});
$('#add-ssh').click(function() {
- $('#error').remove();
- $('.alert-danger').remove();
+ toastr.clear();
var ssh_enable = 0;
if ($('#new-ssh_enable').is(':checked')) {
ssh_enable = '1';
@@ -515,12 +499,9 @@ $( function() {
type: "POST",
success: function( data ) {
if (data.indexOf('error') != '-1') {
- $("#ajax-ssh").append(''+data+'
');
- $('#errorMess').click(function() {
- $('#error').remove();
- $('.alert-danger').remove();
- });
+ toastr.error(data);
} else {
+ toastr.clear();
var getId = new RegExp('ssh-table-[0-9]+');
var id = data.match(getId) + '';
id = id.split('-').pop();;
@@ -540,8 +521,7 @@ $( function() {
} );
});
$('#add-telegram').click(function() {
- $('#error').remove();
- $('.alert-danger').remove();
+ toastr.clear();
$.ajax( {
url: "options.py",
data: {
@@ -554,11 +534,7 @@ $( function() {
type: "POST",
success: function( data ) {
if (data.indexOf('error') != '-1') {
- $("#ajax-telegram").append(''+data+'
');
- $('#errorMess').click(function() {
- $('#error').remove();
- $('.alert-danger').remove();
- });
+ toastr.error(data);
} else {
$("#checker_table").append(data);
$( ".newgroup" ).addClass( "update", 1000, callbackGroup );
@@ -794,13 +770,13 @@ $( function() {
success: function( data ) {
data = data.replace(/\s+/g,' ');
if (data.indexOf('error') != '-1') {
- alert(data)
+ toastr.error(data);
$('#new-email').val('');
$('#new-password').attr('readonly', false);
$('#new-password').val('');
} else {
var json = $.parseJSON(data);
- $('.alert-danger').remove();
+ toastr.clear();
$('#new-email').val(json[0]);
$('#new-username').val(user+'@'+json[1]);
$('#new-password').val('aduser');
@@ -882,22 +858,19 @@ function addNewSmonServer() {
success: function( data ) {
data = data.replace(/\s+/g,' ');
if (data.indexOf('error') != '-1' || data.indexOf('unique') != '-1') {
- $("#ajax").html(''+data+'
');;
- $('#errorMess').click(function() {
- $('#error').remove();
- $('.alert-danger').remove();
- });
+ toastr.error(data);
} else {
- $('.alert-danger').remove();
+ toastr.clear();
$("#ajax-smon").append(data);
$(".newserver").addClass( "update", 1000 );
$( "input[type=submit], button" ).button();
$( "input[type=checkbox]" ).checkboxradio();
$( "select" ).selectmenu();
$.getScript(awesome);
+ $.getScript('/inc/unsers.js');
setTimeout(function() {
$( ".newserver" ).removeClass( "update" );
- }, 2500 );
+ }, 2500 );
clearTips();
$( "#smon-add-table" ).dialog("close" );
}
@@ -934,13 +907,9 @@ function addUser() {
success: function( data ) {
data = data.replace(/\s+/g,' ');
if (data.indexOf('error') != '-1') {
- $("#ajax-users").append(''+data+'
');
- $('#errorMess').click(function() {
- $('#error').remove();
- $('.alert-danger').remove();
- });
+ toastr.error(data);
} else {
- $('.alert-danger').remove();
+ toastr.remove();
$("#ajax-users").append(data);
var getId = new RegExp('[0-9]+');
var id = data.match(getId);
@@ -953,8 +922,7 @@ function addUser() {
}
}
function addServer() {
- $('#error').remove();
- $('.alert-danger').remove();
+ toastr.clear()
var valid = true;
var servername = $('#new-server-add').val();
var newip = $('#new-ip').val();
@@ -1004,13 +972,9 @@ function addServer() {
success: function( data ) {
data = data.replace(/\s+/g,' ');
if (data.indexOf('error') != '-1') {
- $("#ajax-servers").append(''+data+'
');
- $('#errorMess').click(function() {
- $('#error').remove();
- $('.alert-danger').remove();
- });
+ toastr.error(data);
} else {
- $('.alert-danger').remove();
+ toastr.clear()
$("#ajax-servers").append(data);
$(".newserver").addClass( "update", 1000 );
$( "input[type=submit], button" ).button();
@@ -1056,13 +1020,9 @@ function addBackup() {
success: function( data ) {
data = data.replace(/\s+/g,' ');
if (data.indexOf('error') != '-1') {
- $("#ajax-backup").html(''+data+'
');
- $('#errorMess').click(function() {
- $('#error').remove();
- $('.alert-danger').remove();
- });
+ toastr.error(data);
} else if (data.indexOf('success') != '-1') {
- $('.alert-danger').remove();
+ toastr.remove();
$("#ajax-backup-table").append(data);
$(".newbackup").addClass( "update", 1000 );
setTimeout(function() {
@@ -1071,8 +1031,8 @@ function addBackup() {
$( "select" ).selectmenu();
$.getScript(awesome);
} else if (data.indexOf('info') != '-1') {
- $('.alert-danger').remove();
- $("#ajax-backup").html(''+data+'
');
+ toastr.remove();
+ toastr.info(data);
}
}
} );
@@ -1081,7 +1041,7 @@ function addBackup() {
}
}
function updateSettings(param, val) {
- $('.alert-danger').remove();
+ toastr.clear();
$.ajax( {
url: "options.py",
data: {
@@ -1093,13 +1053,9 @@ function updateSettings(param, val) {
success: function( data ) {
data = data.replace(/\s+/g,' ');
if (data.indexOf('error') != '-1') {
- $("#ajax").append(data);
- $('#errorMess').click(function() {
- $('#error').remove();
- $('.alert-danger').remove();
- });
+ toastr.error(data);
} else {
- $('.alert-danger').remove();
+ toastr.clear();
$("#"+param).parent().parent().addClass( "update", 1000 );
setTimeout(function() {
$( "#"+param ).parent().parent().removeClass( "update" );
@@ -1444,13 +1400,13 @@ function removeSmon(id) {
if(data == "Ok ") {
$("#smon-"+id).remove();
} else {
- alert(data);
+ toastr.error(data);
}
}
} );
}
function updateUser(id) {
- $('.alert-danger').remove();
+ toastr.remove();
cur_url[0] = cur_url[0].split('#')[0]
var usergroup = Cookies.get('group');
var activeuser = 0;
@@ -1472,13 +1428,9 @@ function updateUser(id) {
success: function( data ) {
data = data.replace(/\s+/g,' ');
if (data.indexOf('error') != '-1') {
- $("#ajax-users").append(data);
- $('#errorMess').click(function() {
- $('#error').remove();
- $('.alert-danger').remove();
- });
+ toastr.error(data);
} else {
- $('.alert-danger').remove();
+ toastr.remove();
$("#user-"+id).addClass( "update", 1000 );
setTimeout(function() {
$( "#user-"+id ).removeClass( "update" );
@@ -1488,7 +1440,7 @@ function updateUser(id) {
} );
}
function updateGroup(id) {
- $('#error').remove();
+ toastr.clear();
$.ajax( {
url: "options.py",
data: {
@@ -1501,13 +1453,9 @@ function updateGroup(id) {
success: function( data ) {
data = data.replace(/\s+/g,' ');
if (data.indexOf('error') != '-1') {
- $("#ajax-group").append(data);
- $('#errorMess').click(function() {
- $('#error').remove();
- $('.alert-danger').remove();
- });
+ toastr.error(data);
} else {
- $('.alert-danger').remove();
+ toastr.clear();
$("#group-"+id).addClass( "update", 1000 );
setTimeout(function() {
$( "#group-"+id ).removeClass( "update" );
@@ -1519,7 +1467,7 @@ function updateGroup(id) {
} );
}
function updateServer(id) {
- $('.alert-danger').remove();
+ toastr.clear();
var typeip = 0;
var enable = 0;
var haproxy = 0;
@@ -1560,13 +1508,9 @@ function updateServer(id) {
success: function( data ) {
data = data.replace(/\s+/g,' ');
if (data.indexOf('error') != '-1') {
- $("#ajax-servers").append(data);
- $('#errorMess').click(function() {
- $('#error').remove();
- $('.alert-danger').remove();
- });
+ toastr.error(data);
} else {
- $('.alert-danger').remove();
+ toastr.clear();
$("#server-"+id).addClass( "update", 1000 );
setTimeout(function() {
$( "#server-"+id ).removeClass( "update" );
@@ -1576,9 +1520,9 @@ function updateServer(id) {
} );
}
function uploadSsh() {
- $('.alert-danger').remove();
+ toastr.clear();
if ($( "#ssh-key-name option:selected" ).val() == "Choose server" || $('#ssh_cert').val() == '') {
- $("#ajax-ssh").html('All fields must be completed
');
+ toastr.error('All fields must be completed');
} else {
$.ajax( {
url: "options.py",
@@ -1591,19 +1535,19 @@ function uploadSsh() {
success: function( data ) {
data = data.replace(/\s+/g,' ');
if (data.indexOf('danger') != '-1') {
- $("#ajax-ssh").html(data);
+ toastr.error(data);
} else if (data.indexOf('success') != '-1') {
- $('.alert-danger').remove();
- $("#ajax-ssh").html(data);
+ toastr.clear();
+ toastr.success(data)
} else {
- $("#ajax-ssh").html('Something wrong, check and try again
');
+ toastr.error('Something wrong, check and try again');
}
}
} );
}
}
function updateSSH(id) {
- $('#error').remove();
+ toastr.clear();
var ssh_enable = 0;
if ($('#ssh_enable-'+id).is(':checked')) {
ssh_enable = '1';
@@ -1628,13 +1572,9 @@ function updateSSH(id) {
success: function( data ) {
data = data.replace(/\s+/g,' ');
if (data.indexOf('error') != '-1') {
- $("#ajax-ssh").append(data);
- $('#errorMess').click(function() {
- $('#error').remove();
- $('.alert-danger').remove();
- });
+ toastr.error(data);
} else {
- $('.alert-danger').remove();
+ toastr.clear();
$("#ssh-table-"+id).addClass( "update", 1000 );
setTimeout(function() {
$( "#ssh-table-"+id ).removeClass( "update" );
@@ -1648,7 +1588,7 @@ function updateSSH(id) {
} );
}
function updateTelegram(id) {
- $('#error').remove();
+ toastr.clear();
$.ajax( {
url: "options.py",
data: {
@@ -1662,13 +1602,9 @@ function updateTelegram(id) {
success: function( data ) {
data = data.replace(/\s+/g,' ');
if (data.indexOf('error') != '-1') {
- $("#ajax-ssh").append(data);
- $('#errorMess').click(function() {
- $('#error').remove();
- $('.alert-danger').remove();
- });
+ toastr.error(data);
} else {
- $('.alert-danger').remove();
+ toastr.clear();
$("#telegram-table-"+id).addClass( "update", 1000 );
setTimeout(function() {
$( "#telegram-table-"+id ).removeClass( "update" );
@@ -1678,9 +1614,9 @@ function updateTelegram(id) {
} );
}
function updateBackup(id) {
- $('#error').remove();
+ toastr.clear();
if ($( "#backup-type-"+id+" option:selected" ).val() == "Choose server" || $('#backup-rserver-'+id).val() == '' || $('#backup-rpath-'+id).val() == '') {
- $("#ajax-backup").html('All fields must be completed
');
+ toastr.error('All fields must be completed');
} else {
$.ajax( {
url: "options.py",
@@ -1699,13 +1635,9 @@ function updateBackup(id) {
success: function( data ) {
data = data.replace(/\s+/g,' ');
if (data.indexOf('error') != '-1') {
- $("#ajax-backup").html(''+data+'
');
- $('#errorMess').click(function() {
- $('#error').remove();
- $('.alert-danger').remove();
- });
+ toastr.error(data);
} else {
- $('.alert-danger').remove();
+ toastr.clear();
$("#backup-table-"+id).addClass( "update", 1000 );
setTimeout(function() {
$( "#backup-table-"+id ).removeClass( "update" );
@@ -1716,7 +1648,7 @@ function updateBackup(id) {
}
}
function updateSmon(id) {
- $('#error').remove();
+ toastr.clear();
var enable = 0;
if ($('#smon-enable-'+id).is(':checked')) {
enable = '1';
@@ -1728,7 +1660,7 @@ function updateSmon(id) {
updateSmonPort: $('#smon-port-'+id).val(),
updateSmonEn: enable,
updateSmonHttp: $('#smon-proto1-'+id).text(),
- updateSmonBody: $('#smon-body-'+id).val(),
+ updateSmonBody: $('#smon-body-'+id).text(),
updateSmonTelegram: $('#smon-telegram-'+id).val(),
updateSmonGroup: $('#smon-group-'+id).val(),
updateSmonDesc: $('#smon-desc-'+id).val(),
@@ -1739,13 +1671,9 @@ function updateSmon(id) {
success: function( data ) {
data = data.replace(/\s+/g,' ');
if (data.indexOf('error') != '-1') {
- $("#ajax").html(''+data+'
');
- $('#errorMess').click(function() {
- $('#error').remove();
- $('.alert-danger').remove();
- });
+ toastr.error(data);
} else {
- $('.alert-danger').remove();
+ toastr.clear();
$("#smon-"+id).addClass( "update", 1000 );
setTimeout(function() {
$( "#smon-"+id ).removeClass( "update" );
@@ -1778,12 +1706,12 @@ function showApacheLog(serv) {
type: "POST",
success: function( data ) {
$("#ajax").html(data);
- window.history.pushState("Logs", "Logs", cur_url[0]+"?serv="+serv+"&rows1="+rows+"&grep="+grep+
- '&exgrep='+exgrep+
- '&hour='+hour+
- '&minut='+minut+
- '&hour1='+hour1+
- '&minut1='+minut1);
+ window.history.pushState("Logs", "Logs", cur_url[0] + "?serv=" + serv + "&rows1=" + rows + "&grep=" + grep +
+ '&exgrep=' + exgrep +
+ '&hour=' + hour +
+ '&minut=' + minut +
+ '&hour1=' + hour1 +
+ '&minut1=' + minut1);
}
} );
}
@@ -1798,15 +1726,11 @@ function checkSshConnect(ip) {
type: "POST",
success: function( data ) {
if (data.indexOf('error') != '-1') {
- $("#checkSshConnect").html(data);
+ toastr.error(data)
} else {
- $("#checkSshConnect").html("");
+ toastr.clear();
+ toastr.success('Connect is accepted');
}
- $('#errorMess').click(function() {
- $('#error').remove();
- $('.alert-danger').remove();
- $('.alert-success').remove();
- });
}
} );
}
@@ -1862,13 +1786,9 @@ function changeUserPassword(id, d) {
success: function( data ) {
data = data.replace(/\s+/g,' ');
if (data.indexOf('error') != '-1') {
- $("#ajax-users").append(data);
- $('#errorMess').click(function() {
- $('#error').remove();
- $('.alert-danger').remove();
- });
+ toastr.error(data);
} else {
- $('.alert-danger').remove();
+ toastr.clear();
$("#user-"+id).addClass( "update", 1000 );
setTimeout(function() {
$( "#user-"+id ).removeClass( "update" );
@@ -1889,9 +1809,9 @@ function changeUserGroupDialog(id) {
type: "POST",
success: function( data ) {
if (data.indexOf('danger') != '-1') {
- $("#ajax").html(data);
+ toastr.error(data);
} else {
- $('.alert-danger').remove();
+ toastr.clear();
$('#change-user-groups-form').html(data);
$( "#change-user-groups-dialog" ).dialog({
resizable: false,
@@ -1925,10 +1845,14 @@ function changeUserGroup(id) {
},
type: "POST",
success: function( data ) {
- $("#user-"+id).addClass( "update", 1000 );
- setTimeout(function() {
- $( "#user-"+id ).removeClass( "update" );
- }, 2500 );
+ if (data.indexOf('error') != '-1' || data.indexOf('Failed') != '-1') {
+ toastr.error(data);
+ } else {
+ $("#user-" + id).addClass("update", 1000);
+ setTimeout(function () {
+ $("#user-" + id).removeClass("update");
+ }, 2500);
+ }
}
} );
}
@@ -1943,10 +1867,14 @@ function addUserGroup(id) {
},
type: "POST",
success: function( data ) {
- $("#user-"+id).addClass( "update", 1000 );
- setTimeout(function() {
- $( "#user-"+id ).removeClass( "update" );
- }, 2500 );
+ if (data.indexOf('error') != '-1' || data.indexOf('Failed') != '-1') {
+ toastr.error(data);
+ } else {
+ $("#user-" + id).addClass("update", 1000);
+ setTimeout(function () {
+ $("#user-" + id).removeClass("update");
+ }, 2500);
+ }
}
} );
}
diff --git a/inc/waf.js b/inc/waf.js
index 6c9ec0d1..358c0afa 100644
--- a/inc/waf.js
+++ b/inc/waf.js
@@ -66,19 +66,13 @@ function installWaf(ip1) {
success: function( data ) {
data = data.replace(/\s+/g,' ');
if (data.indexOf('error') != '-1' || data.indexOf('Failed') != '-1') {
- $("#ajax").html(''+data+'');
- $('#errorMess').click(function() {
- $('#error').remove();
- $('.alert-danger').remove();
- });
+ toastr.error(data);
} else if (data.indexOf('Info') != '-1' ){
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajax").html('
'+data+'');
+ toastr.clear();
+ toastr.info(data);
} else if (data.indexOf('success') != '-1' ){
- $('.alert-danger').remove();
- $('.alert-warning').remove();
- $("#ajax").html('
WAF service has installed');
+ toastr.clear();
+ toastr.success('WAF service has installed');
showOverviewWaf(ip, hostnamea)
}
}
@@ -96,11 +90,39 @@ function changeWafMode(id) {
},
type: "POST",
success: function( data ) {
- alert('Do not forget restart WAF server: '+server_hostname)
+ toastr.info('Do not forget restart WAF service');
$( '#'+server_hostname+'-select-line' ).addClass( "update", 1000 );
setTimeout(function() {
$( '#'+server_hostname+'-select-line' ).removeClass( "update" );
}, 2500 );
}
} );
+}
+$( function() {
+ $( "#waf_rules input" ).change(function() {
+ var id = $(this).attr('id').split('-');
+ waf_rules_en(id[1])
+ });
+});
+function waf_rules_en(id) {
+ var enable = 0;
+ if ($('#rule_id-'+id).is(':checked')) {
+ enable = '1';
+ }
+ $.ajax( {
+ url: "options.py",
+ data: {
+ waf_rule_id: id,
+ waf_en: enable,
+ token: $('#token').val()
+ },
+ type: "POST",
+ success: function( data ) {
+ toastr.info('Do not forget restart WAF service');
+ $( '#rule-'+id ).addClass( "update", 1000 );
+ setTimeout(function() {
+ $( '#rule-'+id ).removeClass( "update" );
+ }, 2500 );
+ }
+ } );
}
\ No newline at end of file