From ab93673f2af5108dcd3b749cce1d8b93fe27cf2e Mon Sep 17 00:00:00 2001 From: Aidaho Date: Sun, 2 Apr 2023 19:58:55 +0300 Subject: [PATCH] v6.3.9.0 Changelog: https://roxy-wi.org/changelog#6_3_9 --- app/add.py | 7 +- app/create_db.py | 2 +- app/modules/db/sql.py | 32 ++- app/modules/roxywi/overview.py | 11 +- app/modules/server/server.py | 131 +++++---- app/options.py | 44 +-- app/runtimeapi.py | 2 +- app/servers.py | 2 +- app/templates/404.html | 6 +- app/templates/500.html | 8 +- app/templates/add.html | 1 - app/templates/add_nginx.html | 1 - app/templates/admin.html | 14 +- app/templates/ajax/compare.html | 2 +- app/templates/ajax/config_show.html | 4 +- app/templates/ajax/load_services.html | 30 +- app/templates/ajax/nginx_stats.html | 4 +- app/templates/ajax/overview.html | 35 +-- app/templates/ajax/show_compare_configs.html | 4 +- app/templates/ajax/show_configs_files.html | 2 +- app/templates/ajax/show_list_version.html | 2 +- app/templates/ajax/show_log_files.html | 5 - app/templates/ajax/show_server_services.html | 63 ++++ app/templates/ajax/show_services_ovw.html | 71 ++--- app/templates/ajax/smon_dashboard.html | 12 +- app/templates/base.html | 22 +- app/templates/config.html | 39 ++- app/templates/configver.html | 6 +- app/templates/delver.html | 4 +- app/templates/hapservers.html | 24 +- app/templates/history.html | 2 +- app/templates/include/admin_servers.html | 43 +-- app/templates/include/admin_settings.html | 3 +- app/templates/include/intro/admin.html | 2 +- app/templates/include/intro/ovw.html | 2 +- app/templates/include/intro/servers.html | 2 +- app/templates/include/login.html | 48 ++-- app/templates/login.html | 51 +++- app/templates/ovw.html | 33 ++- app/templates/portscanner.html | 2 +- app/templates/runtimeapi.html | 4 +- app/templates/sections.html | 40 ++- app/templates/servers.html | 27 +- app/templates/statsview.html | 17 +- app/templates/waf.html | 4 +- app/users.py | 2 +- inc/admin_settings.js | 46 +++ .../{awesome-6.3.8.css => awesome-6.3.9.css} | 6 + inc/css/jquery-ui.min.css | 2 +- inc/css/{style.css => style-6.3.9.css} | 118 +++++--- inc/css/{table.css => table-6.3.9.css} | 2 +- inc/css/{toastr.css => toastr-6.3.9.css} | 12 +- inc/{overview.js => overview-6.3.9.js} | 63 ++-- inc/{script.js => script-6.3.9.js} | 68 +++-- inc/users.js | 269 +++++++++++------- inc/{waf.js => waf-6.3.8.js} | 15 +- index.html | 10 +- 57 files changed, 863 insertions(+), 620 deletions(-) create mode 100644 app/templates/ajax/show_server_services.html create mode 100644 inc/admin_settings.js rename inc/css/{awesome-6.3.8.css => awesome-6.3.9.css} (98%) rename inc/css/{style.css => style-6.3.9.css} (93%) rename inc/css/{table.css => table-6.3.9.css} (99%) rename inc/css/{toastr.css => toastr-6.3.9.css} (98%) rename inc/{overview.js => overview-6.3.9.js} (92%) rename inc/{script.js => script-6.3.9.js} (97%) rename inc/{waf.js => waf-6.3.8.js} (95%) diff --git a/app/add.py b/app/add.py index 555ba01f..83b1bf16 100644 --- a/app/add.py +++ b/app/add.py @@ -62,9 +62,10 @@ if all(v is None for v in [ black_lists = roxywi_common.get_files(folder=black_dir, file_format="lst") template = template.render( - role=user_params['role'], user=user_params['user'], selects=user_params['servers'], add=form.getvalue('add'), conf_add=form.getvalue('conf'), - group=user_group, options=sql.select_options(), saved_servers=sql.select_saved_servers(), white_lists=white_lists, - black_lists=black_lists, user_services=user_params['user_services'], token=user_params['token'], lang=user_params['lang'] + h2=1, role=user_params['role'], user=user_params['user'], selects=user_params['servers'], add=form.getvalue('add'), + conf_add=form.getvalue('conf'), group=user_group, options=sql.select_options(), saved_servers=sql.select_saved_servers(), + white_lists=white_lists, black_lists=black_lists, user_services=user_params['user_services'], token=user_params['token'], + lang=user_params['lang'] ) print(template) diff --git a/app/create_db.py b/app/create_db.py index ff14e678..29dd111b 100644 --- a/app/create_db.py +++ b/app/create_db.py @@ -797,7 +797,7 @@ def update_db_v_6_3_8(): def update_ver(): try: - Version.update(version='6.3.8.0').execute() + Version.update(version='6.3.9.0').execute() except Exception: print('Cannot update version') diff --git a/app/modules/db/sql.py b/app/modules/db/sql.py index 34eca4a9..b591aee4 100755 --- a/app/modules/db/sql.py +++ b/app/modules/db/sql.py @@ -318,20 +318,30 @@ def update_hapwi_server(server_id, alert, metrics, active, service_name): out_error(e) -def update_server( - hostname, group, typeip, enable, master, server_id, cred, port, desc, haproxy, nginx, apache, firewall, protected -): +def update_server(hostname, group, typeip, enable, master, server_id, cred, port, desc, firewall, protected): try: server_update = Server.update( hostname=hostname, groups=group, type_ip=typeip, enable=enable, master=master, cred=cred, - port=port, desc=desc, haproxy=haproxy, nginx=nginx, apache=apache, firewall_enable=firewall, - protected=protected + port=port, desc=desc, firewall_enable=firewall, protected=protected ).where(Server.server_id == server_id) server_update.execute() except Exception as e: out_error(e) +def update_server_services(server_id: str, haproxy: int, nginx: int, apache: int, keepalived: int) -> bool: + try: + server_update = Server.update( + haproxy=haproxy, nginx=nginx, apache=apache, keepalived=keepalived + ).where(Server.server_id == server_id) + server_update.execute() + except Exception as e: + out_error(e) + return False + else: + return True + + def update_server_master(master, slave): try: master_id = Server.get(Server.ip == master).server_id @@ -1443,20 +1453,17 @@ def insert_nginx_waf_rules(serv): {'serv': serv, 'rule_name': 'Nextcloud exclusion rules', 'rule_file': 'REQUEST-903.9003-NEXTCLOUD-EXCLUSION-RULES.conf', 'desc': 'These exclusions remedy false positives in a default NextCloud install. They will likely work with OwnCloud ' 'too, but you may have to modify them. The exclusions are only active if crs_exclusions_nextcloud=1 is set. ' - 'See rule 900130 in crs-setup.conf for instructions.', - 'service': 'nginx'}, + 'See rule 900130 in crs-setup.conf for instructions.', 'service': 'nginx'}, {'serv': serv, 'rule_name': 'Dokuwiki exclusion rules', 'rule_file': 'REQUEST-903.9004-DOKUWIKI-EXCLUSION-RULES.conf', 'desc': 'These exclusions remedy false positives in a default Dokuwiki install. The exclusions are only active ' - 'if crs_exclusions_dokuwiki=1 is set. See rule 900130 in crs-setup.conf for instructions.', - 'service': 'nginx'}, + 'if crs_exclusions_dokuwiki=1 is set. See rule 900130 in crs-setup.conf for instructions.', 'service': 'nginx'}, {'serv': serv, 'rule_name': 'CPanel exclusion rules', 'rule_file': 'REQUEST-903.9005-CPANEL-EXCLUSION-RULES.conf', 'desc': 'These exclusions remedy false positives in a default CPanel install. The exclusions are only active ' 'if crs_exclusions_cpanel=1 is set. See rule 900130 in crs-setup.conf for instructions.', 'service': 'nginx'}, {'serv': serv, 'rule_name': 'XenForo exclusion rules', 'rule_file': 'REQUEST-903.9006-XENFORO-EXCLUSION-RULES.conf', 'desc': 'These exclusions remedy false positives in a default XenForo install. The exclusions are only active ' - 'if crs_exclusions_xenforo=1 is set. See rule 900130 in crs-setup.conf for instructions.', - 'service': 'nginx'}, + 'if crs_exclusions_xenforo=1 is set. See rule 900130 in crs-setup.conf for instructions.', 'service': 'nginx'}, {'serv': serv, 'rule_name': 'Common exceptions', 'rule_file': 'REQUEST-905-COMMON-EXCEPTIONS.conf', 'desc': 'This file is used as an exception mechanism to remove common false positives that may be encountered.', 'service': 'nginx'}, @@ -1469,8 +1476,7 @@ def insert_nginx_waf_rules(serv): {'serv': serv, 'rule_name': 'Protocol enforcement', 'rule_file': 'REQUEST-920-PROTOCOL-ENFORCEMENT.conf', 'desc': 'Some protocol violations are common in application layer attacks. Validating HTTP requests eliminates ' 'a large number of application layer attacks. The purpose of this rules file is to enforce HTTP RFC ' - 'requirements that state how the client is supposed to interact with the server.', - 'service': 'nginx'}, + 'requirements that state how the client is supposed to interact with the server.', 'service': 'nginx'}, {'serv': serv, 'rule_name': 'Protocol attack', 'rule_file': 'REQUEST-921-PROTOCOL-ATTACK.conf', 'desc': 'Protocol attack rule.', 'service': 'nginx'}, {'serv': serv, 'rule_name': 'Application attack LFI', 'rule_file': 'REQUEST-930-APPLICATION-ATTACK-LFI.conf', diff --git a/app/modules/roxywi/overview.py b/app/modules/roxywi/overview.py index e6156764..c9313bb6 100644 --- a/app/modules/roxywi/overview.py +++ b/app/modules/roxywi/overview.py @@ -107,22 +107,24 @@ def show_overview(serv) -> None: return server_status async def get_runner_overview(): - env = Environment(loader=FileSystemLoader('templates/ajax'), autoescape=True, + env = Environment(loader=FileSystemLoader('templates/'), autoescape=True, extensions=['jinja2.ext.loopcontrols', 'jinja2.ext.do']) servers = [] - template = env.get_template('overview.html') + template = env.get_template('ajax/overview.html') cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) user_uuid = cookie.get('uuid') group_id = cookie.get('group') group_id = int(group_id.value) + lang = roxywi_common.get_user_lang() + role = sql.get_user_role_by_uuid(user_uuid.value, group_id) futures = [async_get_overview(server[1], server[2], user_uuid.value, server[0]) for server in sql.select_servers(server=serv)] for i, future in enumerate(asyncio.as_completed(futures)): result = await future servers.append(result) servers_sorted = sorted(servers, key=common.get_key) - template = template.render(service_status=servers_sorted, role=sql.get_user_role_by_uuid(user_uuid.value, group_id)) + template = template.render(service_status=servers_sorted, role=role, lang=lang) print(template) ioloop = asyncio.get_event_loop() @@ -216,6 +218,7 @@ def show_services_overview() -> None: servers_group = [] host = os.environ.get('HTTP_HOST', '') user_group = roxywi_common.get_user_group(id=1) + lang = roxywi_common.get_user_lang() if (user_params['role'] == 2 or user_params['role'] == 3) and int(user_group) != 1: for s in user_params['servers']: @@ -271,7 +274,7 @@ def show_services_overview() -> None: metrics_log_id=roxy_logs.roxy_wi_log(log_id=1, file="metrics"), checker_log_id=roxy_logs.roxy_wi_log(log_id=1, file="checker"), keep_alive_log_id=roxy_logs.roxy_wi_log(log_id=1, file="keep_alive"), - socket_log_id=roxy_logs.roxy_wi_log(log_id=1, file="socket"), error=stderr + socket_log_id=roxy_logs.roxy_wi_log(log_id=1, file="socket"), error=stderr, lang=lang ) print(rendered_template) diff --git a/app/modules/server/server.py b/app/modules/server/server.py index cba04670..549933ab 100644 --- a/app/modules/server/server.py +++ b/app/modules/server/server.py @@ -1,5 +1,7 @@ import json +from jinja2 import Environment, FileSystemLoader + import modules.db.sql as sql import modules.server.ssh as mod_ssh import modules.common.common as common @@ -345,8 +347,6 @@ def get_system_info(server_ip: str) -> str: def show_system_info() -> None: - from jinja2 import Environment, FileSystemLoader - server_ip = form.getvalue('server_ip') server_ip = common.is_ip_or_dns(server_ip) server_id = form.getvalue('server_id') @@ -376,8 +376,6 @@ def show_system_info() -> None: def update_system_info() -> None: - from jinja2 import Environment, FileSystemLoader - server_ip = form.getvalue('server_ip') server_ip = common.is_ip_or_dns(server_ip) server_id = form.getvalue('server_id') @@ -404,8 +402,6 @@ def update_system_info() -> None: def show_firewalld_rules() -> None: - from jinja2 import Environment, FileSystemLoader - serv = common.checkAjaxInput(form.getvalue('viewFirewallRules')) cmd = ["sudo iptables -L INPUT -n --line-numbers|sed 's/ */ /g'|grep -v -E 'Chain|target'"] @@ -431,59 +427,61 @@ def show_firewalld_rules() -> None: print(template) -def create_server(hostname, ip, group, typeip, enable, master, cred, port, desc, haproxy, nginx, apache, firewall, scan_server, **kwargs) -> bool: +def create_server(hostname, ip, group, typeip, enable, master, cred, port, desc, haproxy, nginx, apache, firewall, **kwargs) -> bool: if not roxywi_auth.is_admin(level=2, role_id=kwargs.get('role_id')): - raise Exception('not enough permission') + raise Exception('error: not enough permission') if sql.add_server(hostname, ip, group, typeip, enable, master, cred, port, desc, haproxy, nginx, apache, firewall): - try: - try: - sql.insert_new_checker_setting_for_server(ip) - except Exception as e: - roxywi_common.logging(f'Cannot insert Checker settings for {hostname}', str(e), roxywi=1) - raise Exception(f'error: Cannot insert Checker settings for {hostname} {e}') - - if scan_server == '1': - nginx_config_path = sql.get_setting('nginx_config_path') - haproxy_config_path = sql.get_setting('haproxy_config_path') - haproxy_dir = sql.get_setting('haproxy_dir') - apache_config_path = sql.get_setting('apache_config_path') - keepalived_config_path = sql.get_setting('keepalived_config_path') - - if is_file_exists(ip, nginx_config_path): - sql.update_nginx(ip) - - if is_file_exists(ip, haproxy_config_path): - sql.update_haproxy(ip) - - if is_file_exists(ip, keepalived_config_path): - sql.update_keepalived(ip) - - if is_file_exists(ip, apache_config_path): - sql.update_apache(ip) - - if is_file_exists(ip, haproxy_dir + '/waf/bin/modsecurity'): - sql.insert_waf_metrics_enable(ip, "0") - sql.insert_waf_rules(ip) - - if is_service_active(ip, 'firewalld'): - sql.update_firewall(ip) - - except Exception as e: - roxywi_common.logging(f'Cannot scan a new server {hostname}', str(e), roxywi=1) - raise Exception(f'error: Cannot scan a new server {hostname} {e}') - - try: - get_system_info(ip) - except Exception as e: - roxywi_common.logging(f'Cannot get information from {hostname}', str(e), roxywi=1, login=1) - raise Exception(f'error: Cannot get information from {hostname} {e}') - return True else: return False +def update_server_after_creating(hostname: str, ip: str, scan_server: int) -> None: + try: + try: + sql.insert_new_checker_setting_for_server(ip) + except Exception as e: + roxywi_common.logging(f'Cannot insert Checker settings for {hostname}', str(e), roxywi=1) + raise Exception(f'error: Cannot insert Checker settings for {hostname} {e}') + + if scan_server == '1': + nginx_config_path = sql.get_setting('nginx_config_path') + haproxy_config_path = sql.get_setting('haproxy_config_path') + haproxy_dir = sql.get_setting('haproxy_dir') + apache_config_path = sql.get_setting('apache_config_path') + keepalived_config_path = sql.get_setting('keepalived_config_path') + + if is_file_exists(ip, nginx_config_path): + sql.update_nginx(ip) + + if is_file_exists(ip, haproxy_config_path): + sql.update_haproxy(ip) + + if is_file_exists(ip, keepalived_config_path): + sql.update_keepalived(ip) + + if is_file_exists(ip, apache_config_path): + sql.update_apache(ip) + + if is_file_exists(ip, haproxy_dir + '/waf/bin/modsecurity'): + sql.insert_waf_metrics_enable(ip, "0") + sql.insert_waf_rules(ip) + + if is_service_active(ip, 'firewalld'): + sql.update_firewall(ip) + + except Exception as e: + roxywi_common.logging(f'Cannot scan a new server {hostname}', str(e), roxywi=1) + raise Exception(f'error: Cannot scan a new server {hostname} {e}') + + try: + get_system_info(ip) + except Exception as e: + roxywi_common.logging(f'Cannot get information from {hostname}', str(e), roxywi=1, login=1) + raise Exception(f'error: Cannot get information from {hostname} {e}') + + def delete_server(server_id: int) -> None: server = sql.select_servers(id=server_id) server_ip = '' @@ -514,3 +512,34 @@ def server_is_up(server_ip: str) -> None: cmd = [f'if ping -c 1 -W 1 {server_ip} >> /dev/null; then echo up; else echo down; fi'] server_status, stderr = subprocess_execute(cmd) print(server_status) + + +def show_server_services() -> None: + server_id = common.checkAjaxInput(form.getvalue('server_id')) + server = sql.select_servers(id=server_id) + env = Environment(loader=FileSystemLoader('templates')) + template = env.get_template('ajax/show_server_services.html') + lang = roxywi_common.get_user_lang() + template = template.render(server=server, lang=lang) + print(template) + + +def change_server_services() -> None: + import json + + server_id = common.checkAjaxInput(form.getvalue('changeServerServicesId')) + server_name = common.checkAjaxInput(form.getvalue('changeServerServicesServer')) + services = sql.select_services() + services_status = {} + server_services = json.loads(form.getvalue('jsonDatas')) + + for k, v in server_services.items(): + for service in services: + if service.service_id == int(k): + services_status[service.service_id] = v + + try: + if sql.update_server_services(server_id, services_status[1], services_status[2], services_status[4], services_status[3]): + roxywi_common.logging('Roxy-WI server', f'Active services have been updated for {server_name}', roxywi=1, login=1) + except Exception as e: + print(e) diff --git a/app/options.py b/app/options.py index 507c69b8..21db270c 100644 --- a/app/options.py +++ b/app/options.py @@ -713,7 +713,6 @@ if form.getvalue('newserver') is not None: hostname = common.checkAjaxInput(form.getvalue('servername')) ip = common.is_ip_or_dns(form.getvalue('newip')) group = common.checkAjaxInput(form.getvalue('newservergroup')) - scan_server = common.checkAjaxInput(form.getvalue('scan_server')) typeip = common.checkAjaxInput(form.getvalue('typeip')) haproxy = common.checkAjaxInput(form.getvalue('haproxy')) nginx = common.checkAjaxInput(form.getvalue('nginx')) @@ -732,7 +731,7 @@ if form.getvalue('newserver') is not None: print('error: IP or DNS name is not valid') sys.exit() try: - if server_mod.create_server(hostname, ip, group, typeip, enable, master, cred, port, desc, haproxy, nginx, apache, firewall, scan_server): + if server_mod.create_server(hostname, ip, group, typeip, enable, master, cred, port, desc, haproxy, nginx, apache, firewall): try: user_subscription = roxywi_common.return_user_status() except Exception as e: @@ -741,19 +740,24 @@ if form.getvalue('newserver') is not None: env = Environment(loader=FileSystemLoader('templates/'), autoescape=True) template = env.get_template('ajax/new_server.html') - - template = template.render(groups=sql.select_groups(), - servers=sql.select_servers(server=ip), - masters=sql.select_servers(get_master_servers=1), - sshs=sql.select_ssh(group=group), - page=page, - user_status=user_subscription['user_status'], - user_plan=user_subscription['user_plan'], - adding=1, - lang=lang) + template = template.render(groups=sql.select_groups(), servers=sql.select_servers(server=ip), + masters=sql.select_servers(get_master_servers=1), sshs=sql.select_ssh(group=group), + page=page, user_status=user_subscription['user_status'], user_plan=user_subscription['user_plan'], + adding=1,lang=lang) print(template) - roxywi_common.logging(ip, f'A new server {hostname} has been created', roxywi=1, login=1, - keep_history=1, service='server') + roxywi_common.logging(ip, f'A new server {hostname} has been created', roxywi=1, login=1, keep_history=1, service='server') + + except Exception as e: + print(f'error: {e}') + +if act == 'after_adding': + hostname = common.checkAjaxInput(form.getvalue('servername')) + ip = common.is_ip_or_dns(form.getvalue('newip')) + group = common.checkAjaxInput(form.getvalue('newservergroup')) + scan_server = common.checkAjaxInput(form.getvalue('scan_server')) + + try: + server_mod.update_server_after_creating(hostname, ip, scan_server) except Exception as e: print(e) @@ -773,9 +777,6 @@ if form.getvalue('updateserver') is not None: name = form.getvalue('updateserver') group = form.getvalue('servergroup') typeip = form.getvalue('typeip') - haproxy = form.getvalue('haproxy') - nginx = form.getvalue('nginx') - apache = form.getvalue('apache') firewall = form.getvalue('firewall') enable = form.getvalue('enable') master = form.getvalue('slave') @@ -788,8 +789,7 @@ if form.getvalue('updateserver') is not None: if name is None or port is None: print(error_mess) else: - sql.update_server(name, group, typeip, enable, master, serv_id, cred, port, desc, haproxy, nginx, apache, - firewall, protected) + sql.update_server(name, group, typeip, enable, master, serv_id, cred, port, desc, firewall, protected) roxywi_common.logging(f'the server {name}', ' has been updated ', roxywi=1, login=1) server_ip = sql.select_server_ip_by_id(serv_id) roxywi_common.logging(server_ip, f'The server {name} has been update', roxywi=1, login=1, @@ -2367,3 +2367,9 @@ if form.getvalue('updateServiceCheckerSettings'): print('ok') else: print('error: Cannot update Checker settings') + +if act == 'show_server_services': + server_mod.show_server_services() + +if form.getvalue('changeServerServicesId') is not None: + server_mod.change_server_services() diff --git a/app/runtimeapi.py b/app/runtimeapi.py index 0db37b8b..1fc76e5d 100644 --- a/app/runtimeapi.py +++ b/app/runtimeapi.py @@ -26,7 +26,7 @@ if servbackend is None: servbackend = "" rendered_template = template.render( - h2=0, title="RunTime API", role=user_params['role'], user=user_params['user'], select_id="serv", + h2=1, title="RunTime API", role=user_params['role'], user=user_params['user'], select_id="serv", selects=user_params['servers'], token=user_params['token'], user_services=user_params['user_services'], servbackend=servbackend, lang=user_params['lang'] ) diff --git a/app/servers.py b/app/servers.py index e227347f..19cbfb13 100644 --- a/app/servers.py +++ b/app/servers.py @@ -49,7 +49,7 @@ else: title = "Servers: " rendered_template = template.render( - title=title, role=user_params['role'], user=user_params['user'], users=sql.select_users(group=user_group), + h2=1, title=title, role=user_params['role'], user=user_params['user'], users=sql.select_users(group=user_group), groups=sql.select_groups(), servers=servers, roles=sql.select_roles(), sshs=sql.select_ssh(group=user_group), masters=masters, group=user_group, services=services, timezones=pytz.all_timezones, guide_me=1, token=user_params['token'], settings=settings, backups=sql.select_backups(), page="servers.py", diff --git a/app/templates/404.html b/app/templates/404.html index 95fa95b8..25b38d4a 100644 --- a/app/templates/404.html +++ b/app/templates/404.html @@ -29,14 +29,14 @@ - - + + - + diff --git a/app/templates/500.html b/app/templates/500.html index f3a66315..baae21ed 100644 --- a/app/templates/500.html +++ b/app/templates/500.html @@ -29,16 +29,16 @@ - - + + - + - + diff --git a/app/templates/add.html b/app/templates/add.html index ae534946..b373fad7 100644 --- a/app/templates/add.html +++ b/app/templates/add.html @@ -33,7 +33,6 @@
  • {{lang.words.userlists|title()}}
  • Peers
  • {{lang.words.lists|title()}}
  • - {% include 'include/login.html' %} {% include 'include/add_proxy.html' %} diff --git a/app/templates/add_nginx.html b/app/templates/add_nginx.html index d7d7afbe..0bf933e2 100644 --- a/app/templates/add_nginx.html +++ b/app/templates/add_nginx.html @@ -10,7 +10,6 @@ {% include 'include/add_nginx_proxy.html' %} diff --git a/app/templates/admin.html b/app/templates/admin.html index 6c97091d..9363a44c 100644 --- a/app/templates/admin.html +++ b/app/templates/admin.html @@ -17,12 +17,9 @@
  • {{lang.words.settings|title()}}
  • {{lang.words.services|title()}}
  • {{lang.words.w_update|title()}}
  • -
  • {{lang.words.backup|title()}}
  • -
  • {{lang.words.monitoring|title()}} {{lang.words.installation}}
  • - {% include 'include/login.html' %} +
  • {{lang.words.monitoring|title()}} {{lang.words.installation}}
  • +
  • {{lang.words.backup|title()}}
  • - -
    {% include 'include/admin_users.html' %}
    @@ -135,13 +132,12 @@
    -
    - {% include 'include/admin_backup.html' %} -
    -
    {% include 'include/mon_installation.html' %}
    +
    + {% include 'include/admin_backup.html' %} +
    {% include 'include/admins_dialogs.html' %} - \ No newline at end of file diff --git a/app/templates/ajax/show_server_services.html b/app/templates/ajax/show_server_services.html new file mode 100644 index 00000000..94b80767 --- /dev/null +++ b/app/templates/ajax/show_server_services.html @@ -0,0 +1,63 @@ +{% import 'languages/'+lang|default('en')+'.html' as lang %} + + + + {% for s in server %} + {% if s.15|int() == 0 %} + + + + + {% endif %} + {% if s.14|int() == 0 %} + + + + + {% endif %} + {% if s.24|int() == 0 %} + + + + + {% endif %} + {% if s.13|int() == 0 %} + + + + + {% endif %} + {% endfor %} + +
    {{lang.words.all|title()}} {{lang.words.services}}
    HAProxy+
    NGINX+
    Apache+
    Keepalived+
    + + + + {% for s in server %} + {% if s.15|int() == 1 %} + + + + + {% endif %} + {% if s.14|int() == 1 %} + + + + + {% endif %} + {% if s.24|int() == 1 %} + + + + + {% endif %} + {% if s.13|int() == 1 %} + + + + + {% endif %} + {% endfor %} + +
    {{lang.words.actives|title()}} {{lang.words.services}}
    HAProxy-
    NGINX-
    Apache-
    Keepalived-
    diff --git a/app/templates/ajax/show_services_ovw.html b/app/templates/ajax/show_services_ovw.html index b3ae3160..a3e289de 100644 --- a/app/templates/ajax/show_services_ovw.html +++ b/app/templates/ajax/show_services_ovw.html @@ -1,9 +1,10 @@ +{% import 'languages/'+lang|default('en')+'.html' as lang %} {% if metrics_master == 'active' %} - + {% if role <= 1 %} - + Metrics master {% else %} @@ -11,16 +12,16 @@ {% endif %} {% else %} {% if metrics_master == 'inactive' or metrics_master == 'failed' %} - + {% if role <= 1 %} - + Metrics master {% else %} Metrics master {% endif %} {% else %} - + Metrics master @@ -29,9 +30,9 @@ {% if checker_master == 'active' %} - + {% if role <= 1 %} - + Checker master {% else %} @@ -39,17 +40,17 @@ {% endif %} {% else %} {% if checker_master == 'inactive' or checker_master == 'failed' %} - + {% if role <= 1 %} - + Checker master {% else %} Checker master {% endif %} {% else %} - - + + Checker master {% endif %} @@ -57,9 +58,9 @@ {% if keep_alive == 'active' %} - + {% if role <= 1 %} - + Auto start {% else %} @@ -67,16 +68,16 @@ {% endif %} {% else %} {% if keep_alive == 'inactive' or keep_alive == 'failed' %} - + {% if role <= 1 %} - + Auto start {% else %} Auto start {% endif %} {% else %} - + Auto start @@ -87,16 +88,16 @@ {% if metrics_worker|int() >= 1 %} - + {% else %} {% if is_metrics_worker|int() == 0 %} {% else %} - + {% endif %} {% endif %} {% if role <= 1 %} - + Metrics workers {% else %} @@ -105,16 +106,16 @@ {% if checker_worker|int() >= 1 %} - + {% else %} {% if is_checker_worker|int() == 0 %} {% else %} - + {% endif %} {% endif %} {% if role <= 1 %} - + Checker workers {% else %} @@ -123,14 +124,14 @@ {% if smon == 'active' %} - + SMON {% else %} {% if smon == 'inactive' or smon == 'failed' %} - - + + SMON {% else %} @@ -146,19 +147,19 @@ {% if role == 1 %} {% if grafana|int() >= 1 %} - - Grafana + + Grafana {% else %} - + Grafana {% endif %} {% endif %} {% if socket == 'active' %} - + {% if role <= 1 %} - + Socket service {% else %} @@ -166,8 +167,8 @@ {% endif %} {% else %} {% if socket == 'inactive' or socket == 'failed' %} - - + + Socket service {% else %} @@ -180,14 +181,14 @@ {% if port_scanner == 'active' %} - + Port scanner {% else %} {% if port_scanner == 'inactive' or port_scanner == 'failed' %} - - + + Port scanner {% else %} diff --git a/app/templates/ajax/smon_dashboard.html b/app/templates/ajax/smon_dashboard.html index f3e186f8..f58a40e5 100644 --- a/app/templates/ajax/smon_dashboard.html +++ b/app/templates/ajax/smon_dashboard.html @@ -2,10 +2,7 @@ {% import 'languages/'+lang|default('en')+'.html' as lang %} {% endif %}
    - {{lang.smon_page.desc.do_not_sort}} | - {{lang.smon_page.desc.sort_status}} | - {{lang.words.refresh|title()}} - +
    {% set down = [] %} {% set up = [] %} {% set dis = [] %} @@ -21,7 +18,10 @@ {% endif %} {% endfor %} {{lang.smon_page.desc.status_summary}}: {{lang.smon_page.desc.UP}}: {{up|length}}, {{lang.smon_page.desc.DOWN}}: {{down|length}}, {{lang.words.disabled|title()}}: {{dis|length}} - +
    + {{lang.smon_page.desc.do_not_sort}} | + {{lang.smon_page.desc.sort_status}} | + {{lang.words.refresh|title()}}
    {% set group = [] %} {% set group_prev = [] %} @@ -148,7 +148,7 @@ {% else %}
    - {{lang.words.disabled|title()}} + {{lang.smon_page.desc.DISABLED}}
    {% endif %} diff --git a/app/templates/base.html b/app/templates/base.html index 6a3440d9..a6995dd4 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -1,6 +1,6 @@ {% import 'languages/'+lang|default('en')+'.html' as lang %} {% from 'languages/languages.html' import languages %} -{% from 'include/input_macros.html' import select %} +{% from 'include/input_macros.html' import select, checkbox %} {% block title %}{% endblock %} @@ -18,7 +18,8 @@ data-empty_name="{{lang.errors.empty_name}}" data-edit="{{lang.words.edit|title()}}" data-close="{{lang.words.close|title()}}" data-server_info="{{lang.phrases.server_info}}" data-generated_config="{{lang.words.generated|title()}} {{lang.words.config}}" data-restart="{{lang.words.restart|title()}}" data-start="{{lang.words.start|title()}}" data-stop="{{lang.words.stop|title()}}" data-reload="{{lang.words.reload|title()}}" data-user_groups="{{lang.phrases.user_groups}}" data-settings="{{lang.words.settings|title()}}" - data-for="{{lang.words.for}}" /> + data-for="{{lang.words.for}}" data-show="{{lang.words.show|title()}}" data-hide="{{lang.words.hide|title()}}" data-logs="{{lang.words.logs}}" + data-autorefresh="{{lang.words.auto|title()}}-{{lang.words.refresh}}" /> {% if title == 'Login page' %} {% endif %} @@ -48,8 +49,8 @@ - - + + @@ -60,9 +61,9 @@ - + - + @@ -207,8 +208,8 @@ {% include 'include/login.html' %} {% if autorefresh %} - - + + {{lang.words.auto|title()}}-{{lang.words.refresh}} @@ -315,10 +316,7 @@ {{lang.words.alerts|title()}} - + {{ checkbox('disable_alerting') }} diff --git a/app/templates/config.html b/app/templates/config.html index f0d3436e..7d0c6d89 100644 --- a/app/templates/config.html +++ b/app/templates/config.html @@ -28,12 +28,11 @@ {% if is_serv_protected and role > 2 %} {% else %} -
    {% if selects|length == 0 %} {% include 'include/getstarted.html' %} {% else %}

    -

    + {% include 'include/select.html' %} {% if service == 'nginx' or service == 'apache' %} @@ -65,38 +64,34 @@ {% if config %} {% if role <= 3 %} -

    {{lang.words.config|title()}} {% if config_file_name != 'undefined' %}{{config_file_name.replace('92', '/')}}{%endif%} {{lang.words.from}} {{ serv }}

    -
    - +

    {{lang.words.config|title()}} {% if config_file_name != 'undefined' %}{{config_file_name.replace('92', '/')}}{%endif%} {{lang.words.from}} {{ serv }}

    + -
    +

    -

    - {{lang.words.back|title()}} - {% if service != 'keepalived' %} - - {% endif %} - - {% if is_restart|int == 0 %} - - {% endif %} - - {% if service != 'keepalived' %} -
    {{lang.words.note|title()}}: {{lang.phrases.master_slave}}
    - {% endif %} -
    + {{lang.words.back|title()}} + {% if service != 'keepalived' %} + + {% endif %} + + {% if is_restart|int == 0 %} + + {% endif %} + + {% if service != 'keepalived' %} +
    {{lang.words.note|title()}}: {{lang.phrases.master_slave}}
    + {% endif %}

    {% endif %} {% endif %} - - -

    -

    + {% include 'include/select.html' %} {{lang.words.open|title()}} @@ -45,6 +44,5 @@ {% endif %} {% endfor %} {% endif %} -
    {% endif %} {% endblock %} diff --git a/app/templates/hapservers.html b/app/templates/hapservers.html index 1c30fc1b..4b4c9d04 100644 --- a/app/templates/hapservers.html +++ b/app/templates/hapservers.html @@ -3,7 +3,7 @@ {% block h2 %}{{ lang.menu_links.hapservers.h2 }} {{ service_desc.service }}{% endblock %} {% block content %} {% from 'include/input_macros.html' import input, checkbox, select, copy_to_clipboard %} - + @@ -34,6 +34,7 @@ $( ".sortable" ).disableSelection(); $( ".sortable" ).sortable({ + handle: ".portlet-header", stop: function(event, ui) { var itemOrder = $('.sortable').sortable("toArray"); for (var i = 0; i < itemOrder.length; i++) { @@ -56,7 +57,7 @@ {% endfor %} }); -
    +
    {%- for s in servers %} {%- if serv %} {% set config_id = 'id=config_link' %} @@ -196,26 +197,26 @@ {% set additional_status_class = 'div-server-head-down' %} {% endif %} {% endif %} -
    +
    {% if not serv %} - {{s.1}} + {{s.1}} {% else %} {{s.1}} {% endif %} {% if s.6|int() >= 1 %} = 1 %} - class="shield green" title="Autostart is enabled"> + class="shield green" title="Autostart {{lang.words.is}} {{lang.words.enabled2}}"> {% else %} - class="shield red" title="Autostart is enabled, but Keep alive service is not running"> + class="shield red" title="Autostart {{lang.words.is}} {{lang.words.enabled2}}, Auto start {{lang.words.service}} {{lang.words.is}} {{lang.words.not}} {{lang.words.running}}"> {% endif %} {% endif %} {% if s.8.0.20 == 1 %} - + {% endif %} {% for set in docker_settings %} {% if set.server_id == s.0 and set.setting == 'dockerized' and set.value == '1' %} @@ -247,10 +248,15 @@ - + {% if service != 'keepalived' %} - + {% endif %} + {%if not serv%} + + + + {%endif%} {% endif %}
    diff --git a/app/templates/history.html b/app/templates/history.html index 074bc4bd..65d641b2 100644 --- a/app/templates/history.html +++ b/app/templates/history.html @@ -6,7 +6,7 @@ {% if user_status == 0 or user_plan == 'user' %} {% include 'include/no_sub.html' %} {% else %} - + {% set section = namespace(section='') %} @@ -20,7 +21,7 @@ {% else %} {% if section.section|string() != set.section|string() %} diff --git a/app/templates/include/intro/admin.html b/app/templates/include/intro/admin.html index c43dc8eb..82d3cff3 100644 --- a/app/templates/include/intro/admin.html +++ b/app/templates/include/intro/admin.html @@ -103,7 +103,7 @@ }); return intro; } - setTimeout(() => { var intro_temp = Intro(); startIntro(intro_temp); }, 3000); + // setTimeout(() => { var intro_temp = Intro(); startIntro(intro_temp); }, 3000); if (!localStorage.getItem('introHintAdminRoles')) { setTimeout(() => { var intro_temp = introHints(); diff --git a/app/templates/include/intro/ovw.html b/app/templates/include/intro/ovw.html index c540c402..084da1b5 100644 --- a/app/templates/include/intro/ovw.html +++ b/app/templates/include/intro/ovw.html @@ -89,5 +89,5 @@ return intro; } - setTimeout(() => { var intro_temp = Intro(); startIntro(intro_temp); }, 3000); + // setTimeout(() => { var intro_temp = Intro(); startIntro(intro_temp); }, 3000); diff --git a/app/templates/include/intro/servers.html b/app/templates/include/intro/servers.html index 68e35ddf..676f0fa1 100644 --- a/app/templates/include/intro/servers.html +++ b/app/templates/include/intro/servers.html @@ -100,5 +100,5 @@ return intro; } - setTimeout(() => { var intro_temp = Intro(); startIntro(intro_temp); }, 3000); + // setTimeout(() => { var intro_temp = Intro(); startIntro(intro_temp); }, 3000); diff --git a/app/templates/include/login.html b/app/templates/include/login.html index be59ca37..9e7e9e46 100644 --- a/app/templates/include/login.html +++ b/app/templates/include/login.html @@ -1,35 +1,25 @@ {% if user %} - + {% else %} {% endif %} {% if guide_me %} - {% if page %} - - {% else %} - - {% endif %} + -{% endif %} \ No newline at end of file +{% endif %} + diff --git a/app/templates/login.html b/app/templates/login.html index dd563014..d31a73f7 100644 --- a/app/templates/login.html +++ b/app/templates/login.html @@ -28,18 +28,54 @@ body, .container { background-color: #239dee; } } +.fontuser { + position: relative; +} +.fontuser i { + position: absolute; + left: 9px; + top: 10px; + color: #036bb0; +} +.fontpassword { + position: relative; + margin-bottom: 15px; +} +.fontpassword i { + position: absolute; + left: 9px; + top: 10px; + color: #036bb0; +} +.fontpassword span i { + position: absolute; + left: 193px; + top: 10px; + color: #036bb0; + font-size: 17px; + cursor: pointer; +}
    - + +
    + {{ input('login', class='form-login', placeholder=lang.words.login|title(), required='required', autofocus='autofocus') }} + +

    - {{ input('login', class='form-login', placeholder='Login', required='required', autofocus='autofocus') }}

    - {{ input('pass', type='password', class='form-login', placeholder='Password', required='required') }}

    - {{ input('ref', type='hidden', value=ref) }} - +
    + {{ input('pass', type='password', class='form-login', placeholder=lang.words.password|title(), required='required') }} + {{ input('ref', type='hidden', value=ref) }} + + + + +
    + {% if error_log or error %} {% endif %}

    diff --git a/app/templates/ovw.html b/app/templates/ovw.html index df249861..63393854 100644 --- a/app/templates/ovw.html +++ b/app/templates/ovw.html @@ -5,7 +5,7 @@ - + + {% if serv %} -
    +
    -

    +

    {{sections_name[set.section]}}

    @@ -173,7 +173,7 @@
    {% if service == 'haproxy' %} - +
    diff --git a/app/users.py b/app/users.py index 70119113..a2c8b5d3 100644 --- a/app/users.py +++ b/app/users.py @@ -49,7 +49,7 @@ except Exception as e: roxywi_common.logging('Roxy-WI server', f'Cannot get a user plan: {e}', roxywi=1) rendered_template = template.render( - role=user_params['role'], user=user_params['user'], users=users, groups=sql.select_groups(), + h2=1, role=user_params['role'], user=user_params['user'], users=users, groups=sql.select_groups(), servers=sql.select_servers(full=1), masters=masters, sshs=sql.select_ssh(), roles=sql.select_roles(), settings=settings, backups=sql.select_backups(), services=services, timezones=pytz.all_timezones, page="users.py", user_services=user_params['user_services'], ldap_enable=ldap_enable, gits=gits, guide_me=1, diff --git a/inc/admin_settings.js b/inc/admin_settings.js new file mode 100644 index 00000000..c71786d3 --- /dev/null +++ b/inc/admin_settings.js @@ -0,0 +1,46 @@ +$( function() { + $('#nginx-section-head').click(function () { + hideAndShowSettings('nginx'); + }); + $('#main-section-head').click(function () { + hideAndShowSettings('main'); + }); + $('#monitoring-section-head').click(function () { + hideAndShowSettings('monitoring'); + }); + $('#haproxy-section-head').click(function () { + hideAndShowSettings('haproxy'); + }); + $('#ldap-section-head').click(function () { + hideAndShowSettings('ldap'); + }); + $('#logs-section-head').click(function () { + hideAndShowSettings('logs'); + }); + $('#rabbitmq-section-head').click(function () { + hideAndShowSettings('rabbitmq'); + }); + $('#apache-section-head').click(function () { + hideAndShowSettings('apache'); + }); + $('#keepalived-section-head').click(function () { + hideAndShowSettings('keepalived'); + }); + $('#mail-section-head').click(function () { + hideAndShowSettings('mail'); + }); +}); +function hideAndShowSettings(section) { + var ElemId = $('#' + section + '-section-h3'); + if(ElemId.attr('class') == 'plus-after') { + $('.' + section + '-section').show(); + ElemId.removeClass('plus-after'); + ElemId.addClass('minus-after'); + $.getScript(awesome); + } else { + $('.' + section + '-section').hide(); + ElemId.removeClass('minus-after'); + ElemId.addClass('plus-after'); + $.getScript(awesome); + } +} diff --git a/inc/css/awesome-6.3.8.css b/inc/css/awesome-6.3.9.css similarity index 98% rename from inc/css/awesome-6.3.8.css rename to inc/css/awesome-6.3.9.css index 30ebf7a7..608c813c 100644 --- a/inc/css/awesome-6.3.8.css +++ b/inc/css/awesome-6.3.9.css @@ -266,6 +266,9 @@ .fa-stop { color: red !important; } +.disabled-button > .fa-stop, .disabled-button > .fa-play { + color: gray !important; +} .service-restart > .fa-sync-alt { color: orange !important; } @@ -337,6 +340,9 @@ margin-top: 4px; font-size: 25px; } +.alert-warning .fa-exclamation-circle { + margin-top: -5px; +} .alert-info .fa-info-circle { margin-top: -3px; } diff --git a/inc/css/jquery-ui.min.css b/inc/css/jquery-ui.min.css index e94b94a1..2bb175cb 100644 --- a/inc/css/jquery-ui.min.css +++ b/inc/css/jquery-ui.min.css @@ -4,4 +4,4 @@ * To view and modify this theme, visit http://jqueryui.com/themeroller/?bgShadowXPos=&bgOverlayXPos=&bgErrorXPos=&bgHighlightXPos=&bgContentXPos=&bgHeaderXPos=&bgActiveXPos=&bgHoverXPos=&bgDefaultXPos=&bgShadowYPos=&bgOverlayYPos=&bgErrorYPos=&bgHighlightYPos=&bgContentYPos=&bgHeaderYPos=&bgActiveYPos=&bgHoverYPos=&bgDefaultYPos=&bgShadowRepeat=&bgOverlayRepeat=&bgErrorRepeat=&bgHighlightRepeat=&bgContentRepeat=&bgHeaderRepeat=&bgActiveRepeat=&bgHoverRepeat=&bgDefaultRepeat=&iconsHover=url(%22images%2Fui-icons_555555_256x240.png%22)&iconsHighlight=url(%22images%2Fui-icons_777620_256x240.png%22)&iconsHeader=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsError=url(%22images%2Fui-icons_cc0000_256x240.png%22)&iconsDefault=url(%22images%2Fui-icons_777777_256x240.png%22)&iconsContent=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsActive=url(%22images%2Fui-icons_ffffff_256x240.png%22)&bgImgUrlShadow=&bgImgUrlOverlay=&bgImgUrlHover=&bgImgUrlHighlight=&bgImgUrlHeader=&bgImgUrlError=&bgImgUrlDefault=&bgImgUrlContent=&bgImgUrlActive=&opacityFilterShadow=Alpha(Opacity%3D30)&opacityFilterOverlay=Alpha(Opacity%3D30)&opacityShadowPerc=30&opacityOverlayPerc=30&iconColorHover=%23555555&iconColorHighlight=%23777620&iconColorHeader=%23444444&iconColorError=%23cc0000&iconColorDefault=%23777777&iconColorContent=%23444444&iconColorActive=%23ffffff&bgImgOpacityShadow=0&bgImgOpacityOverlay=0&bgImgOpacityError=95&bgImgOpacityHighlight=55&bgImgOpacityContent=75&bgImgOpacityHeader=75&bgImgOpacityActive=65&bgImgOpacityHover=75&bgImgOpacityDefault=75&bgTextureShadow=flat&bgTextureOverlay=flat&bgTextureError=flat&bgTextureHighlight=flat&bgTextureContent=flat&bgTextureHeader=flat&bgTextureActive=flat&bgTextureHover=flat&bgTextureDefault=flat&cornerRadius=3px&fwDefault=normal&ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&cornerRadiusShadow=8px&thicknessShadow=5px&offsetLeftShadow=0px&offsetTopShadow=0px&opacityShadow=.3&bgColorShadow=%23666666&opacityOverlay=.3&bgColorOverlay=%23aaaaaa&fcError=%235f3f3f&borderColorError=%23f1a899&bgColorError=%23fddfdf&fcHighlight=%23777620&borderColorHighlight=%23dad55e&bgColorHighlight=%23fffa90&fcContent=%23333333&borderColorContent=%23dddddd&bgColorContent=%23ffffff&fcHeader=%23333333&borderColorHeader=%23dddddd&bgColorHeader=%23e9e9e9&fcActive=%23ffffff&borderColorActive=%23003eff&bgColorActive=%23007fff&fcHover=%232b2b2b&borderColorHover=%23cccccc&bgColorHover=%23ededed&fcDefault=%23454545&borderColorDefault=%23c5c5c5&bgColorDefault=%23f6f6f6 * Copyright jQuery Foundation and other contributors; Licensed MIT */ -.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;-ms-filter:"alpha(opacity=0)"}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;font-size:100%}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-button{padding:.3em 1em .4em .3em;display:inline-block;position:relative;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2em;box-sizing:border-box;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-button-icon-only{text-indent:0}.ui-button-icon-only .ui-icon{position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.ui-button.ui-icon-notext .ui-icon{padding:0;width:2.1em;height:2.1em;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-icon-notext .ui-icon{width:auto;height:auto;text-indent:0;white-space:normal;padding:.4em 1em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-controlgroup{vertical-align:middle;display:inline-block}.ui-controlgroup > .ui-controlgroup-item{float:left;margin-left:0;margin-right:0}.ui-controlgroup > .ui-controlgroup-item:focus,.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus{z-index:9999}.ui-controlgroup-vertical > .ui-controlgroup-item{display:block;float:none;width:100%;margin-top:0;margin-bottom:0;text-align:left}.ui-controlgroup-vertical .ui-controlgroup-item{box-sizing:border-box}.ui-controlgroup .ui-controlgroup-label{padding:.4em 1em}.ui-controlgroup .ui-controlgroup-label span{font-size:80%}.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item{border-left:none}.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item{border-top:none}.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content{border-right:none}.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content{border-bottom:none}.ui-controlgroup-vertical .ui-spinner-input{width:75%;width:calc( 100% - 2.4em )}.ui-controlgroup-vertical .ui-spinner .ui-spinner-up{border-top-style:solid}.ui-checkboxradio-label .ui-icon-background{box-shadow:inset 1px 1px 1px #ccc;border-radius:.12em;border:none}.ui-checkboxradio-radio-label .ui-icon-background{width:16px;height:16px;border-radius:1em;overflow:visible;border:none}.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon{background-image:none;width:8px;height:8px;border-width:4px;border-style:solid}.ui-checkboxradio-disabled{pointer-events:none}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:0.9em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;left:.5em;top:.3em}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-n{height:2px;top:0}.ui-dialog .ui-resizable-e{width:2px;right:0}.ui-dialog .ui-resizable-s{height:2px;bottom:0}.ui-dialog .ui-resizable-w{width:2px;left:0}.ui-dialog .ui-resizable-se,.ui-dialog .ui-resizable-sw,.ui-dialog .ui-resizable-ne,.ui-dialog .ui-resizable-nw{width:7px;height:7px}.ui-dialog .ui-resizable-se{right:0;bottom:0}.ui-dialog .ui-resizable-sw{left:0;bottom:0}.ui-dialog .ui-resizable-ne{right:0;top:0}.ui-dialog .ui-resizable-nw{left:0;top:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;-ms-filter:"alpha(opacity=25)";opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:0.9em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-text{display:block;margin-right:20px;overflow:hidden;text-overflow:ellipsis}.ui-selectmenu-button.ui-button{text-align:left;white-space:nowrap;width:14em}.ui-selectmenu-icon.ui-icon{float:right;margin-top:0}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:pointer;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:.222em 0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:2em}.ui-spinner-button{width:1.6em;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top-style:none;border-bottom-style:none;border-right-style:none}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget .ui-widget{font-size:0.9em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Arial,Helvetica,sans-serif;font-size:0.9em}.ui-widget.ui-widget-content{border:1px solid #c5c5c5}.ui-widget-content{border:1px solid #ddd;background:#fff;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #ddd;background:#e9e9e9;color:#333;font-weight:bold}.ui-widget-header a{color:#333}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-button,html .ui-button.ui-state-disabled:hover,html .ui-button.ui-state-disabled:active{border:1px solid #c5c5c5;background:#f6f6f6;font-weight:normal;color:#454545}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button,.ui-button{color:#454545;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus,.ui-button:hover,.ui-button:focus{border:1px solid #ccc;background:#ededed;font-weight:normal;color:#2b2b2b}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,a.ui-button:hover,a.ui-button:focus{color:#2b2b2b;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px rgb(94,158,214)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active,.ui-button:active,.ui-button.ui-state-active:hover{border:1px solid #003eff;background:#007fff;font-weight:normal;color:#fff}.ui-icon-background,.ui-state-active .ui-icon-background{border:#003eff;background-color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #dad55e;background:#fffa90;color:#777620}.ui-state-checked{border:1px solid #dad55e;background:#fffa90}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#777620}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #f1a899;background:#fddfdf;color:#5f3f3f}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#5f3f3f}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#5f3f3f}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;-ms-filter:"alpha(opacity=70)";font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;-ms-filter:"alpha(opacity=35)";background-image:none}.ui-state-disabled .ui-icon{-ms-filter:"alpha(opacity=35)"}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("../images/ui-icons_444444_256x240.png")}.ui-widget-header .ui-icon{background-image:url("../images/ui-icons_444444_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon,.ui-button:hover .ui-icon,.ui-button:focus .ui-icon{background-image:url("../images/ui-icons_555555_256x240.png")}.ui-state-active .ui-icon,.ui-button:active .ui-icon{background-image:url("../images/ui-icons_ffffff_256x240.png")}.ui-state-highlight .ui-icon,.ui-button .ui-state-highlight.ui-icon{background-image:url("../images/ui-icons_777620_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("../images/ui-icons_cc0000_256x240.png")}.ui-button .ui-icon{background-image:url("../images/ui-icons_777777_256x240.png")}.ui-icon-blank.ui-icon-blank.ui-icon-blank{background-image:none}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:3px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:3px}.ui-widget-overlay{background:#aaa;opacity:.003;-ms-filter:Alpha(Opacity=.3)}.ui-widget-shadow{-webkit-box-shadow:0 0 5px #666;box-shadow:0 0 5px #666} \ No newline at end of file +.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;-ms-filter:"alpha(opacity=0)"}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;font-size:100%}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-button{padding:.3em 1em .4em .3em;display:inline-block;position:relative;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2em;box-sizing:border-box;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-button-icon-only{text-indent:0}.ui-button-icon-only .ui-icon{position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.ui-button.ui-icon-notext .ui-icon{padding:0;width:2.1em;height:2.1em;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-icon-notext .ui-icon{width:auto;height:auto;text-indent:0;white-space:normal;padding:.4em 1em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-controlgroup{vertical-align:middle;display:inline-block}.ui-controlgroup > .ui-controlgroup-item{float:left;margin-left:0;margin-right:0}.ui-controlgroup > .ui-controlgroup-item:focus,.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus{z-index:9999}.ui-controlgroup-vertical > .ui-controlgroup-item{display:block;float:none;width:100%;margin-top:0;margin-bottom:0;text-align:left}.ui-controlgroup-vertical .ui-controlgroup-item{box-sizing:border-box}.ui-controlgroup .ui-controlgroup-label{padding:.4em 1em}.ui-controlgroup .ui-controlgroup-label span{font-size:80%}.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item{border-left:none}.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item{border-top:none}.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content{border-right:none}.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content{border-bottom:none}.ui-controlgroup-vertical .ui-spinner-input{width:75%;width:calc( 100% - 2.4em )}.ui-controlgroup-vertical .ui-spinner .ui-spinner-up{border-top-style:solid}.ui-checkboxradio-label .ui-icon-background{box-shadow:inset 1px 1px 1px #ccc;border-radius:.12em;border:none}.ui-checkboxradio-radio-label .ui-icon-background{width:16px;height:16px;border-radius:1em;overflow:visible;border:none}.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon{background-image:none;width:8px;height:8px;border-width:4px;border-style:solid}.ui-checkboxradio-disabled{pointer-events:none}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:0.9em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;left:.5em;top:.3em}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-n{height:2px;top:0}.ui-dialog .ui-resizable-e{width:2px;right:0}.ui-dialog .ui-resizable-s{height:2px;bottom:0}.ui-dialog .ui-resizable-w{width:2px;left:0}.ui-dialog .ui-resizable-se,.ui-dialog .ui-resizable-sw,.ui-dialog .ui-resizable-ne,.ui-dialog .ui-resizable-nw{width:7px;height:7px}.ui-dialog .ui-resizable-se{right:0;bottom:0}.ui-dialog .ui-resizable-sw{left:0;bottom:0}.ui-dialog .ui-resizable-ne{right:0;top:0}.ui-dialog .ui-resizable-nw{left:0;top:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;-ms-filter:"alpha(opacity=25)";opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:0.9em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-text{display:block;margin-right:20px;overflow:hidden;text-overflow:ellipsis}.ui-selectmenu-button.ui-button{text-align:left;white-space:nowrap;width:14em}.ui-selectmenu-icon.ui-icon{float:right;margin-top:0}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:pointer;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:.222em 0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:2em}.ui-spinner-button{width:1.6em;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top-style:none;border-bottom-style:none;border-right-style:none}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Arial,Helvetica,sans-serif;font-size:0.9em}.ui-widget.ui-widget-content{border:1px solid #c5c5c5}.ui-widget-content{border:1px solid #ddd;background:#fff;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #ddd;background:#e9e9e9;color:#333;font-weight:bold}.ui-widget-header a{color:#333}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-button,html .ui-button.ui-state-disabled:hover,html .ui-button.ui-state-disabled:active{border:1px solid #c5c5c5;background:#f6f6f6;font-weight:normal;color:#454545}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button,.ui-button{color:#454545;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus,.ui-button:hover,.ui-button:focus{border:1px solid #ccc;background:#ededed;font-weight:normal;color:#2b2b2b}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,a.ui-button:hover,a.ui-button:focus{color:#2b2b2b;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px rgb(94,158,214)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active,.ui-button:active,.ui-button.ui-state-active:hover{border:1px solid #003eff;background:#007fff;font-weight:normal;color:#fff}.ui-icon-background,.ui-state-active .ui-icon-background{border:#003eff;background-color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #dad55e;background:#fffa90;color:#777620}.ui-state-checked{border:1px solid #dad55e;background:#fffa90}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#777620}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #f1a899;background:#fddfdf;color:#5f3f3f}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#5f3f3f}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#5f3f3f}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;-ms-filter:"alpha(opacity=70)";font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;-ms-filter:"alpha(opacity=35)";background-image:none}.ui-state-disabled .ui-icon{-ms-filter:"alpha(opacity=35)"}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("../images/ui-icons_444444_256x240.png")}.ui-widget-header .ui-icon{background-image:url("../images/ui-icons_444444_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon,.ui-button:hover .ui-icon,.ui-button:focus .ui-icon{background-image:url("../images/ui-icons_555555_256x240.png")}.ui-state-active .ui-icon,.ui-button:active .ui-icon{background-image:url("../images/ui-icons_ffffff_256x240.png")}.ui-state-highlight .ui-icon,.ui-button .ui-state-highlight.ui-icon{background-image:url("../images/ui-icons_777620_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("../images/ui-icons_cc0000_256x240.png")}.ui-button .ui-icon{background-image:url("../images/ui-icons_777777_256x240.png")}.ui-icon-blank.ui-icon-blank.ui-icon-blank{background-image:none}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:3px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:3px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:3px}.ui-widget-overlay{background:#aaa;opacity:.3;-ms-filter:Alpha(Opacity=.3)}.ui-widget-shadow{-webkit-box-shadow:0 0 5px #666;box-shadow:0 0 5px #666} \ No newline at end of file diff --git a/inc/css/style.css b/inc/css/style-6.3.9.css similarity index 93% rename from inc/css/style.css rename to inc/css/style-6.3.9.css index e6a678a2..1b2ee5bc 100644 --- a/inc/css/style.css +++ b/inc/css/style-6.3.9.css @@ -26,7 +26,7 @@ h2 { font-size: 1.5em; background: var(--blue-color); border: 1px solid var(--blue-color); - padding: 2px 3px 3px 10px; + padding: 2px 3px 3px 15px; color: #fff; margin-top: 0; margin-bottom: 0; @@ -36,14 +36,15 @@ h3 { margin-top: -0; margin-bottom: 0; background: #d1ecf1; - padding: 0.3em; font-size: 1.6em; border-bottom: 1px solid #ddd; + padding: 0.3em 0.3em 0.3em 13px; } ul#browse_histroy { padding-left: 12px; display: block; - margin-top: 1px; + margin-top: 3px; + margin-bottom: -1px; list-style: none; border-bottom: 1px solid #D9D9D9; padding-bottom: 5px; @@ -64,15 +65,15 @@ ul#browse_histroy li+li:before { } #browse_histroy a { color: #767676; - font-size: 9.1px; + font-size: 11.1px; font-weight: bold; } ul#browse_histroy li:first-child a { - font-size: 8.4px; + font-size: 10.4px; color: #979393; } ul#browse_histroy li:last-child a { - font-size: 9.8px; + font-size: 11.8px; color: #7e7b7b; } form { @@ -100,10 +101,10 @@ pre { top: 0; right: 0; left: 0; - z-index: 1000; display: block; background-color: var(--menu-color); font-size: 12px; + z-index: 99; } .logoText { color: #EBF1F1; @@ -182,7 +183,7 @@ pre { float: right; margin-top: 3px; margin-left: 14px; - margin-right: 30px; + margin-right: 50px; color: #fff !important; font-size: 15px; cursor: pointer; @@ -253,9 +254,8 @@ pre { margin-right: 5px; } .configShow, .diff { - margin-left: 16%; overflow: auto; - width: 70%; + width: 95%; border: 1px solid #DCDCDC; border-radius: 5px; } @@ -354,7 +354,6 @@ pre { .add-note { width: 30%; padding-left: 10px; - font-style: italic; } .add_server_number { width: 70px; @@ -362,13 +361,19 @@ pre { .overview { width: 100%; } +.overview-overflow { + overflow-x: auto; + display: block; +} .overview-wi { - width: 46%; + width: 47%; min-width: 566px; max-width: 50%; min-height: 160px; float: left; - margin: 0 20px 20px; + margin: 0 20px 20px 7px; + border-bottom: 1px solid #D9D9D9; + border-top: 1px solid #D9D9D9; } .overviewHead { border-radius: 5px; @@ -418,7 +423,7 @@ pre { .serverNone { background-color: #ddd; } -.add-button, .add-button-wi { +.add-button { background-color: var(--blue-color); border-radius: 5px; color: #fff; @@ -427,23 +432,30 @@ pre { margin-right: 1px; cursor: pointer; } -.add-button:hover, .add-button-wi:hover { +.add-button:hover { background-color: #5094ee; } -.add-button:active, .add-button-wi:active { +.add-button:active { background-color: #5499f4; box-shadow: 0 1px #666; } .add-button-wi { + float: right; padding-right: 5px; padding-left: 5px; font-size: 13px; + cursor: pointer; + color: #b3b3b3; +} +.add-button-wi:hover, .add-button-wi:active { + text-decoration: underline; + color: var(--right-menu-blue-rolor); } .serverDown { background-color: var(--red-color); } .padding10 { - padding: 10px 10px 10px 0; + padding: 10px 10px 10px 10px; border: none; width: 15%; } @@ -455,11 +467,9 @@ pre { padding-top: 20px; } .first-collumn { - padding-left: 15px; width: 20%; } .first-collumn-wi { - padding-left: 15px; width: 40%; } .second-collumn { @@ -526,7 +536,6 @@ ul{ opacity: 0; border-left: 10px solid transparent; transition: 0.5s opacity; - z-index: 1001; } .v_menu a { background-color: #48505A; @@ -574,17 +583,37 @@ ul{ font-size: 0.9em; } .form-login { - text-align: center; background-color: #fff; - padding: 10px; + padding: 10px 10px 10px 30px; width: 220px; background-size: 0 !important; border: 0 !important; } +.ui-selectmenu-open, .ui-selectmenu-menu { + z-index: 1010 !important; +} +.ui-dialog { + z-index: 1000 !important; +} .ui-button { padding-left: 10px !important; padding-right: 10px !important; } +.ui-button:active { + border: none !important; +} +#tabs.ui-widget.ui-widget-content { + border: none !important; +} +#tabs.ui-tabs { + padding: 0 !important; +} +#tabs.ui-widget-header { + border: none !important; +} +#tabs.ui-corner-all { + border-radius: none !important; +} .overflow_div { overflow: hidden; text-overflow: ellipsis; @@ -611,7 +640,7 @@ ul{ } .ui-tabs-nav { border-radius: 0 !important; - padding-left: 25px !important; + padding-left: 15px !important; padding-top: 0.28em !important; } .ui-tabs .ui-tabs-panel { @@ -620,26 +649,23 @@ ul{ } .ui-tabs { padding-left: 0 !important; - margin-top: -5px !important; margin-left: -2px; } .ui-widget-header { background: var(--blue-color) !important; + color: #f4f1f1 !important; } .ui-menu, .ui-menu-item { background: #EBF1F1 !important; } -.ui-dialog { - z-index: 1000 !important; -} -.ui-selectmenu-open, .ui-selectmenu-menu { - z-index: 1010 !important; -} .ui-corner-all { border-radius: 3px !important; } -#tabs.ui-widget.ui-widget-content { - border-bottom: none !important; +/*.ui-visual-focus {*/ +/* box-shadow: none !important;*/ +/*}*/ +.ui-state-focus { + border: none !important; } .need-field { color: var(--red-color); @@ -674,9 +700,10 @@ table { border-spacing: 0; border-collapse: collapse; background-color: transparent; + border-top: 1px solid #ddd; border-radius: var(--border-radius); width: 100%; - font-size: 1.2em; + font-size: 1.1em; } caption { color: #777; @@ -704,7 +731,6 @@ td,th { padding:15px; margin-bottom:20px; border:1px solid transparent; - width: 400px; display: block; } .alert a { @@ -713,8 +739,7 @@ td,th { color: var(--blue-color) !important; } .alert-danger, .alert-info, .alert-success, .alert-warning, .added { - margin-left: 15px; - margin-top: 15px; + margin-top: 15px; } .alert-danger { color: #a94442; @@ -731,6 +756,7 @@ td,th { color: #0c5460; background-color: #d1ecf1; border-color: #bee5eb; + margin-left: 15px; } .alert-warning { color: #856404; @@ -767,6 +793,9 @@ label { font-weight: bold; padding-right: 10px; } +.odd { + background-color: white; +} .even { background-color: #f3f8fb; } @@ -924,7 +953,7 @@ label { padding-left: 4px; } .main { - margin: 20px; + margin: 15px; } .sort_menu { clear: both; @@ -934,14 +963,14 @@ label { } .group_name { font-size: 18px; - padding: 10px 20px 0 15px; + padding: 10px 20px 0px 0px; } .smon_services { width: 192px; height: 162px; float: left; background-color: #fbfbfb;; - margin: 10px; + margin: 10px 10px 10px 0px; padding-left: 15px; padding-top: 0; border: 1px solid #A4C7F5; @@ -1244,11 +1273,13 @@ label { padding: 0 10px 5px 5px; } .stats_active, .stats_drain, .stats_maintain, .stats_down, .stats_not_checked, .stats_backup, .stats_frontends, .stats_backends { - color: #000 ; + color: #000 !important; border-color: rgb(221, 221, 221) !important; + opacity: .8; } -.stats_active:hover, .stats_not_checked:hover, .stats_backup:hover { - color: darkgrey !important; +.stats_active:hover, .stats_drain:hover, .stats_maintain:hover, .stats_down:hover, .stats_not_checked:hover, .stats_backup:hover, .stats_frontends:hover, .stats_backends:hover { + color: #000 !important; + opacity: 1; } .stats_active { background-color: #c0ffc0 !important; @@ -1308,3 +1339,6 @@ label { text-overflow: ellipsis; white-space: nowrap; } +.left-space { + margin-left: 15px !important; +} diff --git a/inc/css/table.css b/inc/css/table-6.3.9.css similarity index 99% rename from inc/css/table.css rename to inc/css/table-6.3.9.css index b52a9ea3..6eee865d 100644 --- a/inc/css/table.css +++ b/inc/css/table-6.3.9.css @@ -208,7 +208,7 @@ table.dataTable td { *zoom: 1; zoom: 1; } .dataTables_length { - padding-left: 10px; + padding-left: 15px; } .dataTables_filter, .dataTables_length { padding-top: 9px; diff --git a/inc/css/toastr.css b/inc/css/toastr-6.3.9.css similarity index 98% rename from inc/css/toastr.css rename to inc/css/toastr-6.3.9.css index 74473ec8..d8ac8e71 100644 --- a/inc/css/toastr.css +++ b/inc/css/toastr-6.3.9.css @@ -23,9 +23,9 @@ 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); + opacity: 1; + -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + filter: alpha(opacity=100); line-height: 1; } .toast-close-button:hover, @@ -115,9 +115,9 @@ button.toast-close-button { -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); + opacity: 1; + -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); + filter: alpha(opacity=100); } #toast-container > div.rtl { direction: rtl; diff --git a/inc/overview.js b/inc/overview-6.3.9.js similarity index 92% rename from inc/overview.js rename to inc/overview-6.3.9.js index 22ed4f2c..e5b50583 100644 --- a/inc/overview.js +++ b/inc/overview-6.3.9.js @@ -165,9 +165,9 @@ function ajaxActionServers(action, id) { toastr.error(data); } else if (cur_url[0] == "hapservers.py") { if (data.indexOf('warning: ') != '-1') { - toastr.warning(data) + toastr.warning(data); } else { - location.reload() + location.reload(); } } else { setTimeout(showOverview(ip, hostnamea), 2000); @@ -347,45 +347,36 @@ $( function() { console.log(e); } $( "#show-all-users" ).click( function() { - $( ".show-users" ).show("fast"); - $( "#show-all-users" ).text("Hide"); - $( "#show-all-users" ).attr("title", "Hide all users"); - $( "#show-all-users" ).attr("id", "hide-all-users"); - - $("#hide-all-users").click(function() { - $( ".show-users" ).hide("fast"); - $( "#hide-all-users" ).attr("title", "Show all users"); - $( "#hide-all-users" ).text("Show all"); - $( "#hide-all-users" ).attr("id", "show-all-users"); - }); + $(".show-users").show("fast"); + $("#hide-all-users").css("display", "block"); + $("#show-all-users").css("display", "none"); + }); + $("#hide-all-users").click(function() { + $(".show-users").hide("fast"); + $("#hide-all-users").css("display", "none"); + $("#show-all-users").css("display", "block"); }); $( "#show-all-groups" ).click( function() { - $( ".show-groups" ).show("fast"); - $( "#show-all-groups" ).text("Hide"); - $( "#show-all-groups" ).attr("title", "Hide all groups"); - $( "#show-all-groups" ).attr("id", "hide-all-groups"); - - $( "#hide-all-groups" ).click( function() { - $( ".show-groups" ).hide("fast"); - $( "#hide-all-groups" ).attr("title", "Show all groups"); - $( "#hide-all-groups" ).text("Show all"); - $( "#hide-all-groups" ).attr("id", "show-all-groups"); - }); + $(".show-groups").show("fast"); + $("#hide-all-groups").css("display", "block"); + $("#show-all-groups").css("display", "none"); + }); + $( "#hide-all-groups" ).click( function() { + $(".show-groups").hide("fast"); + $("#hide-all-groups").css("display", "none"); + $("#show-all-groups").css("display", "block"); }); $( "#show-all-haproxy-wi-log" ).click( function() { - $( ".show-haproxy-wi-log" ).show("fast"); - $( "#show-all-haproxy-wi-log" ).text("Show less"); - $( "#show-all-haproxy-wi-log" ).attr("title", "Show less"); - $( "#show-all-haproxy-wi-log" ).attr("id", "hide-all-haproxy-wi-log"); - - $( "#hide-all-haproxy-wi-log" ).click( function() { - $( ".show-haproxy-wi-log" ).hide("fast"); - $( "#hide-all-haproxy-wi-log" ).attr("title", "Show more"); - $( "#hide-all-haproxy-wi-log" ).text("Show more"); - $( "#hide-all-haproxy-wi-log" ).attr("id", "show-all-haproxy-wi-log"); - }); + $(".show-haproxy-wi-log").show("fast"); + $("#hide-all-haproxy-wi-log").css("display", "block"); + $("#show-all-haproxy-wi-log").css("display", "none"); + }); + $( "#hide-all-haproxy-wi-log" ).click( function() { + $(".show-haproxy-wi-log").hide("fast"); + $("#hide-all-haproxy-wi-log").css("display", "none"); + $("#show-all-haproxy-wi-log").css("display", "block"); }); if (cur_url[0] == "overview.py" || cur_url[0] == "waf.py" || cur_url[0] == "metrics.py") { @@ -583,6 +574,8 @@ function keepalivedBecameMaster(serv) { data = data.replace(/\s+/g,' '); if (data.indexOf('error:') != '-1') { toastr.error(data); + } else if (data.indexOf('no such') != '-1') { + $("#bin_bout").html('Cannot get information'); } else { $("#bin_bout").html(data); $.getScript("/inc/fontawesome.min.js") diff --git a/inc/script.js b/inc/script-6.3.9.js similarity index 97% rename from inc/script.js rename to inc/script-6.3.9.js index 8ea856be..17d35e6d 100644 --- a/inc/script.js +++ b/inc/script-6.3.9.js @@ -23,15 +23,14 @@ function show_current_page(id) { id.parent().css('left', '0'); id.parent().children().css('margin-left', '-20px'); id.parent().find('a').css('padding-left', '20px'); - id.find('a').css('padding-left', '30px'); - id.find('a').css('border-left', '4px solid var(--right-menu-blue-rolor)'); + id.find('a').css('background-color', 'var(--right-menu-blue-rolor)'); } $( function() { $('.menu li ul li').each(function () { var link = $(this).find('a').attr('href'); - var link2 = link.split('/')[2] + var link2 = link.split('/')[2]; if (cur_url[1] == null) { - cur_url[1] = 'haproxy'; + cur_url[1] = 'haproxy'; } if (cur_url[0] == link2 && cur_url[1].split('&')[0] != 'service=keepalived' && cur_url[1].split('&')[0] != 'service=nginx' && cur_url[1].split('&')[0] != 'service=apache') { show_current_page($(this)) @@ -83,8 +82,9 @@ $( function() { show_current_page($(this)) } else if(cur_url[0] == 'add.py' && cur_url[1].split('&')[0] == 'service=nginx#ssl' && link2 == 'add.py?service=nginx#ssl'){ show_current_page($(this)) - } else if(cur_url[0] == 'viewlogs.py' && cur_url[1].split('&')[0] == 'type=2' && link2 == 'viewlogs.py?type=2'){ - show_current_page($(this)) + } else if(cur_url[0] == 'viewlogs.py' && cur_url[1].split('&')[0] == 'type=2' && link2 == 'viewlogs.py?type=2') { + show_current_page($(this)); + return false; } else if(cur_url[0] == 'metrics.py' && cur_url[1].split('&')[0] == 'service=haproxy' && link2 == 'metrics.py?service=haproxy'){ show_current_page($(this)) } else if(cur_url[0] == 'metrics.py' && cur_url[1].split('&')[0] == 'service=nginx' && link2 == 'metrics.py?service=nginx'){ @@ -194,16 +194,17 @@ function setRefreshInterval(interval) { if (interval == "0") { var autoRefresh = sessionStorage.getItem('auto-refresh'); if (autoRefresh !== undefined) { + var autorefresh_word = $('#translate').attr('data-autorefresh'); sessionStorage.removeItem('auto-refresh'); pauseAutoRefresh(); - $('#0').html(' Auto-refresh'); + $('#0').html(' '+autorefresh_word); $('.auto-refresh').css('display', 'inline'); $('.auto-refresh').css('font-size', '15px'); - $('#1').text('Auto-refresh'); - $('.auto-refresh-pause').css('display', 'none'); + $('#1').text(autorefresh_word); $('.auto-refresh-resume').css('display', 'none'); + $('.auto-refresh-pause').css('display', 'none'); $.getScript("/inc/fontawesome.min.js"); - $.getScript("/inc/scripts.js"); + // $.getScript("/inc/script-6.3.9.js"); } hideAutoRefreshDiv(); } else { @@ -261,12 +262,10 @@ function startSetInterval(interval) { } function pauseAutoRefresh() { clearInterval(intervalId); - $(function() { - $('.auto-refresh-pause').css('display', 'none'); - $('.auto-refresh-resume').css('display', 'inline'); - sessionStorage.setItem('auto-refresh-pause', '1') - }); -} + $('.auto-refresh-pause').css('display', 'none'); + $('.auto-refresh-resume').css('display', 'inline'); + sessionStorage.setItem('auto-refresh-pause', '1'); +} function pauseAutoResume(){ var autoRefresh = sessionStorage.getItem('auto-refresh'); setRefreshInterval(autoRefresh); @@ -762,7 +761,8 @@ $( function() { $( "[title]" ).tooltip({ "content": function(){ return $(this).attr("data-help"); - } + }, + show: {"delay": 1000} }); $( "input[type=submit], button" ).button(); $( "input[type=checkbox]" ).checkboxradio(); @@ -931,7 +931,6 @@ $( function() { var save_word = $('#translate').attr('data-save'); var change_word = $('#translate').attr('data-change'); var password_word = $('#translate').attr('data-password'); - var logout_word = $('#translate').attr('data-logout'); var change_pass_word = change_word + ' ' + password_word var showUserSettings = $( "#show-user-settings" ).dialog({ autoOpen: false, @@ -950,11 +949,6 @@ $( function() { changePassword(); $(this).dialog("close"); } - }, { - text: logout_word, - click: function() { - window.location.replace(window.location.origin+'/app/login.py?logout=logout'); - } }, { text: cancel_word, click: function () { @@ -965,11 +959,9 @@ $( function() { $('#show-user-settings-button').click(function() { if (localStorage.getItem('disabled_alert') == '1') { - $('#disable_alerting option[value="1"]').prop('selected', true); - $('#disable_alerting').selectmenu('refresh'); + $('#disable_alerting').prop('checked', false).checkboxradio('refresh'); } else { - $('#disable_alerting option[value="0"]').prop('selected', true); - $('#disable_alerting').selectmenu('refresh'); + $('#disable_alerting').prop('checked', true).checkboxradio('refresh'); } $.ajax( { url: "options.py", @@ -1124,7 +1116,7 @@ $( function() { $(this).children(".installmon").css('padding-left', '30px'); $(this).children(".installmon").css('border-left', '4px solid var(--right-menu-blue-rolor)'); }); - $( "#tabs" ).tabs( "option", "active", 7 ); + $( "#tabs" ).tabs( "option", "active", 6 ); } ); $( ".backup" ).on( "click", function() { $('.menu li ul li').each(function () { @@ -1133,7 +1125,7 @@ $( function() { $(this).children(".backup").css('padding-left', '30px'); $(this).children(".backup").css('border-left', '4px solid var(--right-menu-blue-rolor)'); }); - $( "#tabs" ).tabs( "option", "active", 6 ); + $( "#tabs" ).tabs( "option", "active", 7 ); } ); } } @@ -1154,12 +1146,10 @@ $( function() { }) }); function saveUserSettings(){ - if ($('#disable_alerting').val() == '0') { - localStorage.removeItem('disabled_alert'); - sessionStorage.removeItem('disabled_alert'); - } else if ($('#disable_alerting').val() == '1') { - sessionStorage.setItem('disabled_alert', '1'); + if ($('#disable_alerting').is(':checked')) { localStorage.removeItem('disabled_alert'); + } else { + localStorage.setItem('disabled_alert', '1'); } changeCurrentGroupF(); Cookies.set('lang', $('#lang_select').val(), { expires: 365, path: '/app', samesite: 'strict', secure: 'true' }); @@ -1674,7 +1664,7 @@ function startIntro(intro) { } } document.addEventListener("DOMContentLoaded", function(event){ - statAgriment(); + // statAgriment(); }); function sendGet(page) { var xmlHttp = new XMLHttpRequest(); @@ -1694,3 +1684,11 @@ function show_pretty_ansible_error(data) { function openTab(tabId) { $( "#tabs" ).tabs( "option", "active", tabId ); } +function showPassword(input) { + var x = document.getElementById(input); + if (x.type === "password") { + x.type = "text"; + } else { + x.type = "password"; + } +} diff --git a/inc/users.js b/inc/users.js index fd27ec96..1f873cc6 100644 --- a/inc/users.js +++ b/inc/users.js @@ -15,7 +15,8 @@ $( function() { docker = '1'; } if ($('#haproxyaddserv').val() == '------' || $('#haproxyaddserv').val() === null) { - toastr.warning('Select a server'); + var select_server = $('#translate').attr('data-select_server'); + toastr.warning(select_server); return false } $("#ajax").html(wait_mess); @@ -839,16 +840,6 @@ $( function() { clearTips(); } }); - $('#show_country_codes').click(function() { - $('#hide_country_codes').show(); - $('#geoip_country_codes').show(); - $('#show_country_codes').hide(); - }); - $('#hide_country_codes').click(function() { - $('#show_country_codes').show(); - $('#geoip_country_codes').hide(); - $('#hide_country_codes').hide(); - }); $( "#geoipserv" ).on('selectmenuchange',function() { if($('#geoip_service option:selected').val() != '------') { checkGeoipInstallation(); @@ -910,7 +901,6 @@ $( function() { } else if (activeTab == '#updatehapwi') { loadupdatehapwi(); } else if (activeTab == '#checker'){ - loadchecker(); } else if (activeTab == '#openvpn'){ loadopenvpn(); @@ -932,51 +922,7 @@ $( function() { $(this).children(".backup").css('border-left', '4px solid var(--right-menu-blue-rolor)'); }); }); - $('#nginx-section-head').click(function () { - hideAndShowSettings('nginx'); - }); - $('#main-section-head').click(function () { - hideAndShowSettings('main'); - }); - $('#monitoring-section-head').click(function () { - hideAndShowSettings('monitoring'); - }); - $('#haproxy-section-head').click(function () { - hideAndShowSettings('haproxy'); - }); - $('#ldap-section-head').click(function () { - hideAndShowSettings('ldap'); - }); - $('#logs-section-head').click(function () { - hideAndShowSettings('logs'); - }); - $('#rabbitmq-section-head').click(function () { - hideAndShowSettings('rabbitmq'); - }); - $('#apache-section-head').click(function () { - hideAndShowSettings('apache'); - }); - $('#keepalived-section-head').click(function () { - hideAndShowSettings('keepalived'); - }); - $('#mail-section-head').click(function () { - hideAndShowSettings('mail'); - }); } ); -function hideAndShowSettings(section) { - var ElemId = $('#' + section + '-section-h3'); - if(ElemId.attr('class') == 'plus-after') { - $('.' + section + '-section').show(); - ElemId.removeClass('plus-after'); - ElemId.addClass('minus-after'); - $.getScript(awesome); - } else { - $('.' + section + '-section').hide(); - ElemId.removeClass('minus-after'); - ElemId.addClass('plus-after'); - $.getScript(awesome); - } -} window.onload = function() { $('#tabs').tabs(); var activeTabIdx = $('#tabs').tabs('option','active') @@ -1115,7 +1061,6 @@ function addServer(dialog_id) { valid = valid && checkLength( $('#new-server-add'), "Hostname", 1 ); valid = valid && checkLength( $('#new-ip'), "IP", 1 ); valid = valid && checkLength( $('#new-port'), "Port", 1 ); - console.log(cred) if (cred == null) { toastr.error('First select credentials'); return false; @@ -1133,7 +1078,6 @@ function addServer(dialog_id) { newip: newip, newport: $('#new-port').val(), newservergroup: newservergroup, - scan_server: scan_server, typeip: typeip, haproxy: haproxy, nginx: nginx, @@ -1142,17 +1086,14 @@ function addServer(dialog_id) { enable: enable, slave: $('#slavefor' ).val(), cred: cred, - page: cur_url[0].split('#')[0], + page: cur_url, desc: $('#desc').val(), token: $('#token').val() }, type: "POST", success: function( data ) { data = data.replace(/\s+/g,' '); - if (data.indexOf('You should install lshw on the server') != '-1') { - toastr.error(data); - $( dialog_id ).dialog("close"); - } else if (data.indexOf('error:') != '-1') { + if (data.indexOf('error:') != '-1') { toastr.error(data); } else { common_ajax_action_after_success(dialog_id, 'newserver', 'ajax-servers', data); @@ -1170,11 +1111,36 @@ function addServer(dialog_id) { $('select:regex(id, apache_exp_addserv)').append('').selectmenu("refresh"); $('select:regex(id, node_exp_addserv)').append('').selectmenu("refresh"); $('select:regex(id, geoipserv)').append('').selectmenu("refresh"); + $('select:regex(id, haproxyaddserv)').append('').selectmenu("refresh"); + $('select:regex(id, nginxaddserv)').append('').selectmenu("refresh"); + $('select:regex(id, apacheaddserv)').append('').selectmenu("refresh"); + after_server_creating(servername, newip, scan_server); } } } ); } } +function after_server_creating(servername, newip, scan_server) { + $.ajax({ + url: "options.py", + data: { + act: 'after_adding', + servername: servername, + newip: newip, + scan_server: scan_server, + token: $('#token').val() + }, + type: "POST", + success: function (data) { + data = data.replace(/\s+/g, ' '); + if (data.indexOf('You should install lshw on the server') != '-1') { + toastr.error(data); + } else if (data.indexOf('error:') != '-1') { + toastr.error(data); + } + } + } ); +} function addCreds(dialog_id) { toastr.clear(); var ssh_enable = 0; @@ -1942,23 +1908,11 @@ function updateServer(id) { toastr.clear(); let typeip = 0; let enable = 0; - let haproxy = 0; - let nginx = 0; - let apache = 0; let firewall = 0; let protected_serv = 0; if ($('#typeip-'+id).is(':checked')) { typeip = '1'; } - if ($('#haproxy-'+id).is(':checked')) { - haproxy = '1'; - } - if ($('#nginx-'+id).is(':checked')) { - nginx = '1'; - } - if ($('#apache-'+id).is(':checked')) { - apache = '1'; - } if ($('#enable-'+id).is(':checked')) { enable = '1'; } @@ -1979,9 +1933,6 @@ function updateServer(id) { port: $('#port-'+id).val(), servergroup: servergroup, typeip: typeip, - haproxy: haproxy, - nginx: nginx, - apache: apache, firewall: firewall, enable: enable, slave: $('#slavefor-'+id+' option:selected' ).val(), @@ -2008,7 +1959,7 @@ function updateServer(id) { } function uploadSsh() { toastr.clear(); - if ($( "#ssh-key-name option:selected" ).val() == "Choose server" || $('#ssh_cert').val() == '') { + if ($( "#ssh-key-name option:selected" ).val() == "------" || $('#ssh_cert').val() == '') { toastr.error('All fields must be completed'); } else { $.ajax( { @@ -2128,7 +2079,7 @@ function updateSlack(id) { } function updateBackup(id) { toastr.clear(); - if ($( "#backup-type-"+id+" option:selected" ).val() == "Choose server" || $('#backup-rserver-'+id).val() == '' || $('#backup-rpath-'+id).val() == '') { + if ($( "#backup-type-"+id+" option:selected" ).val() == "-------" || $('#backup-rserver-'+id).val() == '' || $('#backup-rpath-'+id).val() == '') { toastr.error('All fields must be completed'); } else { $.ajax( { @@ -3012,7 +2963,8 @@ function installService(service){ docker = '1'; } if ($('#'+service+'addserv').val() == '------') { - toastr.warning('Select a server'); + var select_server = $('#translate').attr('data-select_server'); + toastr.warning(select_server); return false } $("#ajax").html(wait_mess); @@ -3078,34 +3030,37 @@ function showServiceVersion(service) { } ); } function serverIsUp(server_ip, server_id) { - $.ajax({ - url: "options.py", - data: { - act: 'server_is_up', - server_is_up: server_ip, - token: $('#token').val() - }, - type: "POST", - success: function (data) { - data = data.replace(/^\s+|\s+$/g, ''); - if (data.indexOf('up') != '-1') { - $('#server_status-'+server_id).removeClass('serverNone'); - $('#server_status-'+server_id).removeClass('serverDown'); - $('#server_status-'+server_id).addClass('serverUp'); - $('#server_status-'+server_id).attr('title', 'Server is reachable'); - } else if (data.indexOf('down') != '-1') { - $('#server_status-'+server_id).removeClass('serverNone'); - $('#server_status-'+server_id).removeClass('serverUp'); - $('#server_status-'+server_id).addClass('serverDown'); - $('#server_status-'+server_id).attr('title', 'Server is unreachable'); - } else { - $('#server_status-'+server_id).removeClass('serverDown'); - $('#server_status-'+server_id).removeClass('serverUp'); - $('#server_status-'+server_id).addClass('serverNone'); - $('#server_status-'+server_id).attr('title', 'Cannot get server status'); + var cur_url = window.location.href.split('/').pop(); + if (cur_url.split('#')[1] == 'servers') { + $.ajax({ + url: "options.py", + data: { + act: 'server_is_up', + server_is_up: server_ip, + token: $('#token').val() + }, + type: "POST", + success: function (data) { + data = data.replace(/^\s+|\s+$/g, ''); + if (data.indexOf('up') != '-1') { + $('#server_status-' + server_id).removeClass('serverNone'); + $('#server_status-' + server_id).removeClass('serverDown'); + $('#server_status-' + server_id).addClass('serverUp'); + $('#server_status-' + server_id).attr('title', 'Server is reachable'); + } else if (data.indexOf('down') != '-1') { + $('#server_status-' + server_id).removeClass('serverNone'); + $('#server_status-' + server_id).removeClass('serverUp'); + $('#server_status-' + server_id).addClass('serverDown'); + $('#server_status-' + server_id).attr('title', 'Server is unreachable'); + } else { + $('#server_status-' + server_id).removeClass('serverDown'); + $('#server_status-' + server_id).removeClass('serverUp'); + $('#server_status-' + server_id).addClass('serverNone'); + $('#server_status-' + server_id).attr('title', 'Cannot get server status'); + } } - } - }); + }); + } } function confirmChangeGroupsAndRoles(user_id) { var cancel_word = $('#translate').attr('data-cancel'); @@ -3211,3 +3166,101 @@ function saveGroupsAndRoles(user_id) { } }); } +function openChangeServerServiceDialog(server_id) { + var cancel_word = $('#translate').attr('data-cancel'); + var action_word = $('#translate').attr('data-save'); + var user_groups_word = $('#translate').attr('data-user_groups'); + var hostname = $('#hostname-'+server_id).val(); + $.ajax({ + url: "options.py", + data: { + act: 'show_server_services', + server_id: server_id, + token: $('#token').val() + }, + type: "POST", + success: function (data) { + $("#groups-roles").html(data); + $("#groups-roles").dialog({ + resizable: false, + height: "auto", + width: 700, + modal: true, + title: user_groups_word + ' ' + hostname, + buttons: [{ + text: action_word, + click: function () { + changeServerServices(server_id); + $(this).dialog("close"); + } + }, { + text: cancel_word, + click: function () { + $(this).dialog("close"); + } + }] + }); + } + }); +} +function addServiceToServer(service_id) { + var service_name = $('#add_service-'+service_id).attr('data-service_name'); + var delete_word = $('#translate').attr('data-delete'); + var service_word = $('#translate').attr('data-service'); + var length_tr = $('#checked_services tbody tr').length; + var tr_class = 'odd'; + if (length_tr % 2 != 0) { + tr_class = 'even'; + } + var html_tag = '' + + ''+service_name+'' + + '-'; + $('#add_service-'+service_id).remove(); + $("#checked_services tbody").append(html_tag); +} +function removeServiceFromServer(service_id) { + var service_name = $('#remove_service-'+service_id).attr('data-service_name'); + var add_word = $('#translate').attr('data-add'); + var service_word = $('#translate').attr('data-service'); + var length_tr = $('#all_services tbody tr').length; + var tr_class = 'odd'; + if (length_tr % 2 != 0) { + tr_class = 'even'; + } + var html_tag = '' + + ''+service_name+'' + + '+'; + $('#remove_service-'+service_id).remove(); + $("#all_services tbody").append(html_tag); +} +function changeServerServices(server_id) { + var jsonData = {}; + $('#checked_services tbody tr').each(function () { + var this_id = $(this).attr('id').split('-')[1]; + jsonData[this_id] = 1 + }); + $('#all_services tbody tr').each(function () { + var this_id = $(this).attr('id').split('-')[1]; + jsonData[this_id] = 0 + }); + $.ajax( { + url: "options.py", + data: { + changeServerServicesId: server_id, + jsonDatas: JSON.stringify(jsonData), + changeServerServicesServer: $('#hostname-'+server_id).val(), + token: $('#token').val() + }, + type: "POST", + success: function( data ) { + if (data.indexOf('error:') != '-1' || data.indexOf('Failed') != '-1') { + toastr.error(data); + } else { + $("#server-" + server_id).addClass("update", 1000); + setTimeout(function () { + $("#server-" + server_id).removeClass("update"); + }, 2500); + } + } + } ); +} diff --git a/inc/waf.js b/inc/waf-6.3.8.js similarity index 95% rename from inc/waf.js rename to inc/waf-6.3.8.js index 67588cca..4e0f3f73 100644 --- a/inc/waf.js +++ b/inc/waf-6.3.8.js @@ -1,4 +1,6 @@ var awesome = "/inc/fontawesome.min.js" +var waf = "/inc/waf-6.3.8.js" +var overview = "/inc/overview-6.3.9.js" function showOverviewWaf(serv, hostnamea) { var service = findGetParameter('service'); if (service == 'haproxy') { @@ -9,8 +11,8 @@ function showOverviewWaf(serv, hostnamea) { for (i = 0; i < serv.length; i++) { showOverviewWafCallBack(serv[i], hostnamea[i]) } - $.getScript('/inc/overview.js'); - $.getScript('/inc/waf.js'); + $.getScript(overview); + $.getScript(waf); } function showOverviewWafCallBack(serv, hostnamea) { var service = findGetParameter('service'); @@ -31,7 +33,7 @@ function showOverviewWafCallBack(serv, hostnamea) { $("#"+hostnamea).html(data) $( "input[type=submit], button" ).button(); $( "input[type=checkbox]" ).checkboxradio(); - $.getScript('/inc/overview.js'); + $.getScript(overview); $.getScript(awesome); } } ); @@ -59,7 +61,7 @@ function metrics_waf(name) { } ); } function installWaf(ip1) { - $("#ajax").html('') + $("#ajax").html(''); $("#ajax").html(wait_mess); var service = findGetParameter('service'); $.ajax( { @@ -80,7 +82,8 @@ function installWaf(ip1) { } else if (data.indexOf('success') != '-1' ){ toastr.clear(); toastr.success('WAF service has been installed'); - showOverviewWaf(ip, hostnamea) + showOverviewWaf(ip, hostnamea); + $("#ajax").html(''); } } } ); @@ -204,4 +207,4 @@ function addNewConfig() { } } }); -} \ No newline at end of file +} diff --git a/index.html b/index.html index 812bd905..a6aa9bb6 100644 --- a/index.html +++ b/index.html @@ -29,7 +29,7 @@ - + @@ -39,7 +39,7 @@ - + @@ -47,17 +47,17 @@ - + - + - +