small-package/luci-app-openclash/luasrc/view/openclash/status.htm

787 lines
53 KiB
HTML
Raw Normal View History

2021-09-05 16:50:22 +08:00
<head>
<style>
.dot-typing{position:relative;left:-9999px;width:10px;height:10px;border-radius:5px;background-color:#9880ff;color:#9880ff;box-shadow:9984px 0 0 0 #9880ff,9999px 0 0 0 #9880ff,10014px 0 0 0 #9880ff;animation:dotTyping 1.5s infinite linear}@keyframes dotTyping{0%{box-shadow:9984px 0 0 0 #9880ff,9999px 0 0 0 #9880ff,10014px 0 0 0 #9880ff}16.667%{box-shadow:9984px -10px 0 0 #9880ff,9999px 0 0 0 #9880ff,10014px 0 0 0 #9880ff}33.333%{box-shadow:9984px 0 0 0 #9880ff,9999px 0 0 0 #9880ff,10014px 0 0 0 #9880ff}50%{box-shadow:9984px 0 0 0 #9880ff,9999px -10px 0 0 #9880ff,10014px 0 0 0 #9880ff}66.667%{box-shadow:9984px 0 0 0 #9880ff,9999px 0 0 0 #9880ff,10014px 0 0 0 #9880ff}83.333%{box-shadow:9984px 0 0 0 #9880ff,9999px 0 0 0 #9880ff,10014px -10px 0 0 #9880ff}100%{box-shadow:9984px 0 0 0 #9880ff,9999px 0 0 0 #9880ff,10014px 0 0 0 #9880ff}}
2021-09-26 08:31:24 +08:00
.radio-button{
display: none;
white-space: nowrap;
background-color: #d1d1d1;
border-radius: 4px;
}
.radio-button input[type="radio"] {
display: none;
}
.radio-button label {
display: inline-block;
font-size: 14px;
padding: 4px 5px;
color: white;
cursor: pointer;
border-radius: 4px;
}
.radio-button input[type="radio"]:checked+label {
background-color: #1080c1;
}
2021-09-05 16:50:22 +08:00
</style>
</head>
<fieldset class="cbi-section">
<table width="100%">
<tr>
<td colspan="4" width="100%">
<p align="center">
<img id="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACWCAYAAAFLBkF0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAFEmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxOS0wNi0wOFQyMToyMDo1NiswODowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTktMDYtMDhUMjE6NDA6NTcrMDg6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMTktMDYtMDhUMjE6NDA6NTcrMDg6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0ic1JHQiBJRUM2MTk2Ni0yLjEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NGY5MDRjYzUtYWUxMC1mOTQz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
</p>
<p id="_clashversion" align="center" >
<b><%:Collecting data...%></b>
</p>
</td></tr>
<tr><td colspan="4" width="100%">
<p align="center">
<img id="wiki" src="https://img.shields.io/badge/Tutorials--lightgrey?logo=Wikipedia&style=social" loading="lazy" alt="Wiki" width="75px" height="20px" onerror="return imgerrorfuns(this,this.src)" onclick="return wikipage()" />
&nbsp;&nbsp;&nbsp;
<img id="star" src="https://img.shields.io/badge/Star--lightgrey?logo=github&style=social" loading="lazy" alt="star" width="50px" height="20px" onerror="return imgerrorfuns(this,this.src)" onclick="return homepage()" />
&nbsp;&nbsp;&nbsp;
<img id="telegram" src="https://img.shields.io/badge/Telegram--lightgrey?logo=Telegram&style=social" loading="lazy" alt="Telegram" onerror="return imgerrorfuns(this,this.src)" onclick="return telegrampage()" />
&nbsp;&nbsp;&nbsp;
<img id="sponsor" src="https://img.shields.io/badge/Sponsor--lightgrey?logo=ko-fi&style=social" loading="lazy" alt="Sponsor" width="73px" height="20px" onerror="return imgerrorfuns(this,this.src)" onclick="return sponsorpage()" />
</p>
</td></tr>
<tr><td width="100%" colspan="4">
<p align="center" id="_clashstart">
<b><%:Tip: after started, please wait patiently until the connection is normal%></b>
</p>
</td></tr>
2021-09-26 08:31:24 +08:00
<tr><td width="25%"><%:Main Program%></td><td width="25%" align="left"><span id="_clash"><%:Collecting data...%></span><span id="_watchdog">></span></td><td width="25%"><%:Control Panel Login IP%></td><td width="25%" align="left" id="_daip"><%:Collecting data...%></td></tr>
<tr><td width="20%"><%:Running Mode%></td><td width="30%" align="left"><span id="_mode"><%:Collecting data...%></span><span id="radio-ru-mode" class="radio-button">
<input type="radio" id="normal" name="radios-ru" value="" checked onclick="return switch_run_mode(this.value)"/>
<label for="normal" id="run_normal"><%:Compatible%></label>
<input type="radio" id="tun" name="radios-ru" value="-tun" onclick="return switch_run_mode(this.value)"/>
<label for="tun"><%:TUN%></label>
<input type="radio" id="mix" name="radios-ru" value="-mix" onclick="return switch_run_mode(this.value)"/>
<label for="mix"><%:Mix%></label>
</span></td><td width="25%"><%:Control Panel Login Port%></td><td width="25%" align="left" id="_dapo"><%:Collecting data...%></td></tr>
<tr><td width="25%"><%:Proxy Mode%></td><td width="25%" align="left"><span id="radio-de"><%:Collecting data...%></span><span id="radio-mode" class="radio-button">
<input type="radio" id="rule" name="radios" value="rule" checked onclick="return switch_rule_mode(this.value)"/>
<label for="rule">Rule</label>
<input type="radio" id="global" name="radios" value="global" onclick="return switch_rule_mode(this.value)"/>
<label for="global">Global</label>
<input type="radio" id="direct" name="radios" value="direct" onclick="return switch_rule_mode(this.value)"/>
<label for="direct">Direct</label>
<input type="radio" id="script" name="radios" value="script" onclick="return switch_rule_mode(this.value)"/>
<label for="script">Script</label>
</span></td><td width="25%"><%:Control Panel Login Secret%></td><td width="25%" align="left" id="_dase"><%:Collecting data...%></td></tr>
<tr><td width="25%"><%:Yacd Control Panel%></td><td width="25%" align="left" id="_web"><%:Collecting data...%></td><td width="25%"><%:Dashboard Control Panel%></td><td width="25%" align="left" id="_webo"><%:Collecting data...%></td></tr>
2021-09-05 16:50:22 +08:00
<tr id="tool_label2"><td colspan="4"><p align="center">
<span>
&nbsp;&nbsp;<%:Up:%>&nbsp;
<span id="upload_">
<font color=green>
0 KB/S
</font>
</span>
</span>
<span>
&nbsp;&nbsp;<%:Down:%>&nbsp;
<span id="download_">
<font color=green>
0 KB/S
</font>
</span>
</span>
<span>
&nbsp;&nbsp;<%:Up Total:%>&nbsp;
<span id="uploadtotal_">
<font color=green>
0 KB
</font>
</span>
</span>
<span>
&nbsp;&nbsp;<%:Down Total:%>&nbsp;
<span id="downloadtotal_">
<font color=green>
0 KB
</font>
</span>
</span>
<span>
&nbsp;&nbsp;<%:Connections:%>&nbsp;
<span id="connect_t">
<font color=green>
0
</font>
</span>
</span>
<span>
&nbsp;&nbsp;<%:Ram:%>&nbsp;
<span id="mem_t">
<font color=green>
0 KB
</font>
</span>
</span>
<span>
&nbsp;&nbsp;<%:CPU:%>&nbsp;
<span id="cpu_t">
<font color=green>
0 %
</font>
</span>
&nbsp;&nbsp;
</span>
</p></td></tr>
<tr height="50px">
<td width="100%" colspan="4">
<div id="hid_btn" style="height: 25px;width: 100px;margin: 0 auto;" onclick="hid_btn_action()">
<div style="margin: 0 auto; top: 50%;" class="dot-typing"></div>
</div>
</td>
</tr>
<tr id="hid_1"><td width="100%" colspan="4"><p align="center"><b><%:Quick Operation%></b></p></td></tr>
<tr id="hid_2">
2021-09-26 08:31:24 +08:00
<td width="25%" align="center"><p align="center" id="_close_all_connection"><%:Collecting data...%></p></td>
<td width="25%" align="center"><p align="center" id="_reload_firewall"><%:Collecting data...%></p></td>
<td width="25%" align="center"><p align="center" id="_update_subscribe"><%:Collecting data...%></p></td>
<td width="25%" align="center"><p align="center" id="_one_key_update"><%:Collecting data...%></p></td>
2021-09-05 16:50:22 +08:00
</tr>
<tr id="hid_3">
2021-09-26 08:31:24 +08:00
<td width="50%" colspan="2" align="center"><p align="center" id="_update_other_rules"><%:Collecting data...%></p></td>
<td width="50%" colspan="2" align="center"><p align="center" id="_update_geoip"><%:Collecting data...%></p></td>
2021-09-05 16:50:22 +08:00
</tr>
</table>
</fieldset>
<fieldset id="state" class="cbi-section">
<table>
<tr><td width="100%" colspan="4">
<p align="center">
<b><%:Please ensure that all items are displayed normally before running. If you need to update, please go to the global settings page%></b>
</p>
</td></tr>
<tr><td width="25%"><%:Node Select Backup%></td><td width="25%" align="left" id="_historychecktime"><%:Collecting data...%></td><td width="25%"><%:lhie1 Rule Update%></td><td width="25%" align="left" id="_lhie1"><%:Collecting data...%></td></tr>
<tr><td width="25%"><%:ConnersHua Rule Update%></td><td width="25%" align="left" id="_ConnersHua"><%:Collecting data...%></td><td width="25%"><%:ConnersHua Return Rule Update%></td><td width="25%" align="left" id="_ConnersHua_return"><%:Collecting data...%></td></tr>
<tr><td width="25%"><%:Mainland IP Update%></td><td width="25%" align="left" id="_chnroute"><%:Collecting data...%></td><td width="25%"><%:GEOIPBy MaxMindData Update%></td><td width="25%" align="left" id="_ipdb"><%:Collecting data...%></td></tr>
</table>
</fieldset>
<script type="text/javascript">//<![CDATA[
var clash = document.getElementById('_clash');
var mode = document.getElementById('_mode');
var web = document.getElementById('_web');
var webo = document.getElementById('_webo');
var watchdog = document.getElementById('_watchdog');
var daip = document.getElementById('_daip');
var dase = document.getElementById('_dase');
var dapo = document.getElementById('_dapo');
var clashversion = document.getElementById('_clashversion');
var close_all_connection = document.getElementById('_close_all_connection');
var reload_firewall = document.getElementById('_reload_firewall');
var one_key_update = document.getElementById('_one_key_update');
var update_subscribe = document.getElementById('_update_subscribe');
var update_other_rules = document.getElementById('_update_other_rules');
var update_geoip = document.getElementById('_update_geoip');
var ipdb = document.getElementById('_ipdb');
var lhie1 = document.getElementById('_lhie1');
var ConnersHua = document.getElementById('_ConnersHua');
var ConnersHua_return = document.getElementById('_ConnersHua_return');
var chnroute = document.getElementById('_chnroute');
var historychecktime = document.getElementById('_historychecktime');
var hid_1 = document.getElementById("hid_1");
var hid_2 = document.getElementById("hid_2");
var hid_3 = document.getElementById("hid_3");
var state = document.getElementById("state");
var hid_btn = document.getElementById("hid_btn");
var tool_label2 = document.getElementById('tool_label2');
2021-09-26 08:31:24 +08:00
var radio_mode = document.getElementById('radio-mode');
var radio = document.getElementsByName("radios");
var radio_de = document.getElementById('radio-de');
var radio_ru_mode = document.getElementById('radio-ru-mode');
var radio_ru = document.getElementsByName("radios-ru");
var radio_run_normal = document.getElementById("run_normal");
2021-09-05 16:50:22 +08:00
var hid_btn_if = true;
var ws_connect = false;
var ws_error = false;
var ws_retry = 0;
var luci_protocol;
var ws_t;
var ws_c;
var state_refresh;
2021-09-26 08:31:24 +08:00
var s;
var gr;
2021-09-05 16:50:22 +08:00
state_get();
2021-09-26 08:31:24 +08:00
get_rule_mode();
get_run_mode();
2021-09-05 16:50:22 +08:00
hid_1.style.display = "none";
hid_2.style.display = "none";
hid_3.style.display = "none";
state.style.display="none";
XHR.poll(2, '<%=luci.dispatcher.build_url("admin", "services", "openclash", "status")%>', null, function(x, status) {
if ( x && x.status == 200 ) {
if ( status.restricted_mode != "1" )
{
clash.innerHTML = status.clash ? '<b><font color=green><%:Running%></font></b>' : '<b><font color=red><%:Not Running%></font></b>';
}
else
{
clash.innerHTML = status.clash ? '<b><font color=green><%:Running%> <%:<Limited State>%></font></b>' : '<b><font color=red><%:Not Running%></font></b>';
}
2021-09-26 08:31:24 +08:00
watchdog.innerHTML = status.watchdog ? '&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;<%:Daemons%>:&nbsp;&nbsp;&nbsp;<b><font color=green><%:Running%></font></b>' : '&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;<%:Daemons%>:&nbsp;&nbsp;&nbsp;<b><font color=red><%:Not Running%></font></b>';
2021-09-05 16:50:22 +08:00
dase.innerHTML = status.dase ? "<b><font color=green>"+status.dase+"</font></b>" : "<b><font color=red>"+"<%:Not Set%>"+"</font></b>";
web.innerHTML = status.web ? '<input type="button" class="btn cbi-button cbi-button-reload" value="<%:Open Panel%>" onclick="return ycad_dashboard(this)"/>' : '<b><font color=red><%:Not Running%></font></b>';
webo.innerHTML = status.web ? '<input type="button" class="btn cbi-button cbi-button-reload" value="<%:Open Panel%>" onclick="return net_dashboard(this)"/>' : '<b><font color=red><%:Not Running%></font></b>';
close_all_connection.innerHTML = status.clash ? '<input type="button" class="btn cbi-button cbi-button-reload" value="<%:Close All Connections%>" onclick="return b_close_all_connection(this)"/>' : '<b><font color=red><%:Not Running%></font></b>';
reload_firewall.innerHTML = status.clash ? '<input type="button" class="btn cbi-button cbi-button-reload" value="<%:Reload Firewall Rules%>" onclick="return b_reload_firewall(this)"/>' : '<b><font color=red><%:Not Running%></font></b>';
one_key_update.innerHTML = '<input type="button" class="btn cbi-button cbi-button-reload" value="<%:Check All Components Update%>" onclick="return all_one_key_update(this)"/>';
update_subscribe.innerHTML = '<input type="button" class="btn cbi-button cbi-button-reload" value="<%:Check Config Update%>" onclick="return b_update_subscribe(this)"/>';
update_other_rules.innerHTML = '<input type="button" class="btn cbi-button cbi-button-reload" value="<%:Check Third Party Rules Update%>" onclick="return b_update_other_rules(this)"/>';
update_geoip.innerHTML = '<input type="button" class="btn cbi-button cbi-button-reload" value="<%:Check GEOIP Data Update%>" onclick="return b_update_geoip(this)"/>';
2021-09-13 08:31:34 +08:00
if (status.daip && window.location.hostname == status.daip) {
2021-09-06 08:31:34 +08:00
daip.innerHTML = status.daip ? "<b><font color=green>"+status.daip+"</font></b>" : "<b><font color=red>"+"<%:Not Set%>"+"</font></b>";
dapo.innerHTML = status.cn_port ? "<b><font color=green>"+status.cn_port+"</font></b>" : "<b><font color=red>"+"<%:Not Set%>"+"</font></b>";
luci_protocol = (window.location.protocol == "http:" ? "ws://" : "wss://") + status.daip + ":" + status.cn_port;
}
2021-09-13 08:31:34 +08:00
else if (status.daip && window.location.hostname != status.daip && status.db_foward_domain && status.db_foward_port)
2021-09-06 08:31:34 +08:00
{
daip.innerHTML = status.db_foward_domain ? "<b><font color=green>"+status.db_foward_domain+"</font></b>" : "<b><font color=red>"+"<%:Not Set%>"+"</font></b>";
dapo.innerHTML = status.db_foward_port ? "<b><font color=green>"+status.db_foward_port+"</font></b>" : "<b><font color=red>"+"<%:Not Set%>"+"</font></b>";
luci_protocol = (window.location.protocol == "http:" ? "ws://" : "wss://") + status.db_foward_domain + ":" + status.db_foward_port;
}
else {
daip.innerHTML = status.daip ? "<b><font color=green>"+status.daip+"</font></b>" : "<b><font color=red>"+"<%:Not Set%>"+"</font></b>";
dapo.innerHTML = status.cn_port ? "<b><font color=green>"+status.cn_port+"</font></b>" : "<b><font color=red>"+"<%:Not Set%>"+"</font></b>";
luci_protocol = (window.location.protocol == "http:" ? "ws://" : "wss://") + status.daip + ":" + status.cn_port;
2021-09-26 08:31:24 +08:00
};
if (status.clash) {
radio_mode.style.display = "inline-block";
radio_de.style.display = "none";
}
else {
radio_mode.style.display = "none";
radio_de.style.display = "";
radio_de.innerHTML = "<b><font color=red><%:Not Running%></font></b>";
};
if (status.clash) {
radio_ru_mode.style.display = "inline-block";
2021-09-06 08:31:34 +08:00
}
2021-09-26 08:31:24 +08:00
else {
radio_ru_mode.style.display = "none";
};
2021-09-05 16:50:22 +08:00
function ws_open() {
ws_t = new WebSocket(luci_protocol+"/traffic?token="+status.dase);
ws_c = new WebSocket(luci_protocol+"/connections?token="+status.dase);
ws_t.onmessage = ws_tmessage;
ws_c.onmessage = ws_cmessage;
ws_t.onerror = ws_terror;
ws_t.onopen = function (event) {
ws_connect = true;
ws_error = false;
};
};
if (status.watchdog) {
if (!ws_connect && !ws_error) {
ws_open();
}
else if (ws_error && ws_retry < 3)
{
ws_retry=ws_retry+1;
setTimeout(ws_open,1000*3);
}
else if (ws_error && ws_retry >= 3)
{
2021-09-06 08:31:34 +08:00
ws_terror();
2021-09-05 16:50:22 +08:00
}
}
else
{
ws_connect = false;
ws_error = false;
ws_terror();
}
}
});
2021-09-26 08:31:24 +08:00
function get_rule_mode() {
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "rule_mode")%>', null, function(x, status) {
if (x && x.status == 200 && status.mode != "") {
for (i=0; i<radio.length; i++) {
if (radio[i].value == status.mode && ! radio[i].checked) {
radio[i].checked = true;
}
}
}
});
s = setTimeout("get_rule_mode()",5000);
};
function switch_rule_mode(value)
{
clearTimeout(s);
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "switch_rule_mode")%>', {rule_mode: value}, function(x, status) {
if (x && x.status == 200) {
alert(' <%:Proxy Mode%>: ' + value + ' <%:switching succeeded!%>');
get_rule_mode();
}
else {
alert(' <%:Proxy Mode%>: ' + value + ' <%:switching failed!%>');
get_rule_mode();
}
});
};
function get_run_mode() {
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "get_run_mode")%>', null, function(x, status) {
if (x && x.status == 200 && status.mode) {
2021-11-16 12:46:32 +08:00
if (status.mode == "fake-ip" || status.mode == "fake-ip-tun" || status.mode == "fake-ip-mix")
2021-09-26 08:31:24 +08:00
{
2021-10-02 09:00:13 +08:00
mode.innerHTML = status.clash ? "<b><font color=green><%:Fake-IP%></font></b>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;" : '<b><font color=red><%:Not Running%></font></b>';
2021-09-26 08:31:24 +08:00
radio_run_normal.innerHTML = "<%:Enhance%>"
}
2021-11-16 12:46:32 +08:00
else if (status.mode == "redir-host" || status.mode == "redir-host-tun" || status.mode == "redir-host-mix")
2021-09-26 08:31:24 +08:00
{
2021-10-02 09:00:13 +08:00
mode.innerHTML = status.clash ? "<b><font color=green><%:Redir-Host%></font></b>&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;" : '<b><font color=red><%:Not Running%></font></b>';
2021-09-26 08:31:24 +08:00
radio_run_normal.innerHTML = "<%:Compatible%>"
};
for (i=0; i<radio_ru.length; i++) {
if (radio_ru[i].value == (status["mode"].split("-")[2] == undefined ? "" : ("-" + status["mode"].split("-")[2])) && ! radio_ru[i].checked) {
radio_ru[i].checked = true;
}
};
};
});
gr = setTimeout("get_run_mode()",2000);
};
function switch_run_mode(value)
{
var r = confirm("<%:Are you sure want to switch the running mode?%>")
if (r == true) {
clearTimeout(gr);
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "switch_run_mode")%>', {run_mode: value}, function(x, status) {
if (x && x.status == 200) {
get_run_mode();
}
else {
get_run_mode();
}
});
}
};
2021-09-05 16:50:22 +08:00
function state_get() {
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "state")%>', null, function(x, status) {
if ( x && x.status == 200 ) {
ipdb.innerHTML = status.ipdb ? "<b><font color=green>"+status.ipdb+"</font></b>" : "<b><font color=red>"+"<%:File Not Exist%>"+"</font></b>";
lhie1.innerHTML = status.lhie1 ? "<b><font color=green>"+status.lhie1+"</font></b>" : "<b><font color=red>"+"<%:File Not Exist%>"+"</font></b>";
ConnersHua.innerHTML = status.ConnersHua ? "<b><font color=green>"+status.ConnersHua+"</font></b>" : "<b><font color=red>"+"<%:File Not Exist%>"+"</font></b>";
ConnersHua_return.innerHTML = status.ConnersHua_return ? "<b><font color=green>"+status.ConnersHua_return+"</font></b>" : "<b><font color=red>"+"<%:File Not Exist%>"+"</font></b>";
chnroute.innerHTML = status.chnroute ? "<b><font color=green>"+status.chnroute+"</font></b>" : "<b><font color=red>"+"<%:File Not Exist%>"+"</font></b>";
if ( status.historychecktime != "0" ) {
historychecktime.innerHTML = "<b><font color=green>"+status.historychecktime+"</font></b>";
}
else {
historychecktime.innerHTML = "<b><font color=green>"+"<%:No Backup%>"+"</font></b>";
}
}
});
2021-09-26 08:31:24 +08:00
};
2021-09-05 16:50:22 +08:00
function hid_btn_action() {
if (hid_btn_if) {
hid_1.style.display = "";
hid_2.style.display = "";
hid_3.style.display = "";
state.style.display = "block";
hid_btn_if = false;
clearInterval(state_refresh);
state_refresh=setInterval("state_get()",1000*2);
} else {
hid_1.style.display = "none";
hid_2.style.display = "none";
hid_3.style.display = "none";
state.style.display = "none";
hid_btn_if = true;
clearInterval(state_refresh);
}
2021-09-26 08:31:24 +08:00
};
2021-09-05 16:50:22 +08:00
function winOpen(url)
{
var winOpen = window.open(url);
if(winOpen == null || typeof(winOpen) == 'undefined'){
window.location.href=url;
}
2021-09-26 08:31:24 +08:00
};
2021-09-05 16:50:22 +08:00
function ws_terror() {
ws_error = true;
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "toolbar_show")%>', null, function(x, status) {
if (x && x.status == 200 && x.responseText != "") {
document.getElementById("upload_").innerHTML = "<font color=green>"+status.up+"</font>";
document.getElementById("download_").innerHTML = "<font color=green>"+status.down+"</font>";
document.getElementById("uploadtotal_").innerHTML = "<font color=green>"+status.up_total+"</font>";
document.getElementById("downloadtotal_").innerHTML = "<font color=green>"+status.down_total+"</font>";
document.getElementById("mem_t").innerHTML = "<font color=green>"+status.mem+"</font>";
document.getElementById("connect_t").innerHTML = "<font color=green>"+status.connections+"</font>";
if (status.cpu <= 50) {
document.getElementById("cpu_t").innerHTML = "<font color=green>"+status.cpu+" %</font>";
}
else if (status.cpu >= 50 && status.cpu <= 80) {
document.getElementById("cpu_t").innerHTML = "<font color=orange>"+status.cpu+" %</font>";
}
else {
document.getElementById("cpu_t").innerHTML = "<font color=red>"+status.cpu+" %</font>";
}
}
else {
document.getElementById("upload_").innerHTML = "<font color=green>0 B/S</font>";
document.getElementById("download_").innerHTML = "<font color=green>0 B/S</font>";
document.getElementById("uploadtotal_").innerHTML = "<font color=green>0 KB</font>";
document.getElementById("downloadtotal_").innerHTML = "<font color=green>0 KB</font>";
document.getElementById("mem_t").innerHTML = "<font color=green>0 KB</font>";
document.getElementById("cpu_t").innerHTML = "<font color=green>0 %</font>";
document.getElementById("connect_t").innerHTML = "<font color=green>0</font>";
}
});
2021-09-26 08:31:24 +08:00
};
2021-09-05 16:50:22 +08:00
function show_sys() {
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "toolbar_show_sys")%>', null, function(x, status) {
if (x && x.status == 200 && x.responseText != "") {
document.getElementById("mem_t").innerHTML = "<font color=green>"+status.mem+"</font>";
if (status.cpu <= 50) {
document.getElementById("cpu_t").innerHTML = "<font color=green>"+status.cpu+" %</font>";
}
else if (status.cpu >= 50 && status.cpu <= 80) {
document.getElementById("cpu_t").innerHTML = "<font color=orange>"+status.cpu+" %</font>";
}
else {
document.getElementById("cpu_t").innerHTML = "<font color=red>"+status.cpu+" %</font>";
}
}
else {
document.getElementById("mem_t").innerHTML = "<font color=green>0 KB</font>";
document.getElementById("cpu_t").innerHTML = "<font color=green>0 %</font>";
}
});
};
function ws_tmessage(event) {
var data = JSON.parse(event.data)
document.getElementById("upload_").innerHTML = "<font color=green>"+bytesToSize(data.up)+"/S</font>";
document.getElementById("download_").innerHTML = "<font color=green>"+bytesToSize(data.down)+"/S</font>";
};
function ws_cmessage(event) {
var data = JSON.parse(event.data)
document.getElementById("uploadtotal_").innerHTML = "<font color=green>"+bytesToSize(data.uploadTotal)+"</font>";
document.getElementById("downloadtotal_").innerHTML = "<font color=green>"+bytesToSize(data.downloadTotal)+"</font>";
document.getElementById("connect_t").innerHTML = "<font color=green>"+Object.keys(data.connections).length+"</font>";
show_sys();
};
function bytesToSize(bytes) {
var sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
if (bytes == 0) return '0 B';
var i = Math.floor(Math.log(bytes) / Math.log(1024));
return i == 0 ? (bytes / Math.pow(1024, i)) + ' ' + sizes[i] : (bytes / Math.pow(1024, i)).toFixed(1) + ' ' + sizes[i];
};
function all_one_key_update(btn)
{
btn.value = '<%:Check All Components Update%>';
btn.disabled = true;
var r = confirm("<%:Check and update all Cores and plug-ins?%>")
if (r == true) {
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "one_key_update_check")%>', null, function(x, status) {
if ( x && x.status == 200 ) {
if ( status.corever != "0" ) {
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "one_key_update")%>', null, function(x, status) {
if ( x && x.status != 200 ) {
alert('<%:Check failed, Please try again later!%>')
}
});
}
else {
alert('<%:No compiled version is selected. Please configure it in the General Settings tab!%>')
}
}
else {
alert('<%:Check failed, Please try again later!%>')
}
});
}
else {
}
btn.disabled = false;
return false;
2021-09-26 08:31:24 +08:00
};
2021-09-05 16:50:22 +08:00
function b_update_other_rules(btn)
{
btn.disabled = true;
btn.value = '<%:Checking...%>';
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "update_other_rules")%>', null, function(x, status) {
if ( x && x.status == 200 ) {
btn.disabled = false;
btn.value = '<%:Check Third Party Rules Update%>';
}
else {
btn.disabled = false;
btn.value = '<%:Check Third Party Rules Update%>';
}
return false;
});
2021-09-26 08:31:24 +08:00
};
2021-09-05 16:50:22 +08:00
function b_update_geoip(btn)
{
btn.disabled = true;
btn.value = '<%:Checking...%>';
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "update_geoip")%>', null, function(x, status) {
if ( x && x.status == 200 ) {
btn.disabled = false;
btn.value = '<%:Check GEOIP Data Update%>';
}
else {
btn.disabled = false;
btn.value = '<%:Check GEOIP Data Update%>';
}
return false;
});
2021-09-26 08:31:24 +08:00
};
2021-09-05 16:50:22 +08:00
function b_update_subscribe(btn)
{
btn.disabled = true;
btn.value = '<%:Checking...%>';
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "update_subscribe")%>', null, function(x, status) {
if ( x && x.status == 200 ) {
btn.disabled = false;
btn.value = '<%:Check Config Update%>';
}
else {
btn.disabled = false;
btn.value = '<%:Check Config Update%>';
}
return false;
});
2021-09-26 08:31:24 +08:00
};
2021-09-05 16:50:22 +08:00
function b_reload_firewall(btn)
{
btn.disabled = true;
btn.value = '<%:Reloading...%>';
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "reload_firewall")%>', null, function(x, status) {
if ( x && x.status == 200 ) {
btn.disabled = false;
btn.value = '<%:Reload Firewall Rules%>';
}
else {
btn.disabled = false;
btn.value = '<%:Firewall Rules Reset Failed%>';
}
return false;
});
2021-09-26 08:31:24 +08:00
};
2021-09-05 16:50:22 +08:00
function b_close_all_connection(btn)
{
btn.disabled = true;
btn.value = '<%:Reloading...%>';
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "close_all_connection")%>', null, function(x, status) {
if ( x && x.status == 200 ) {
btn.disabled = false;
btn.value = '<%:Close All Connections%>';
}
else {
btn.disabled = false;
btn.value = '<%:Close All Connections Failed%>';
}
return false;
});
2021-09-26 08:31:24 +08:00
};
2021-09-05 16:50:22 +08:00
function ycad_dashboard(btn)
{
2021-09-06 08:31:34 +08:00
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "status")%>', null, function(x, status) {
2021-09-05 16:50:22 +08:00
btn.disabled = true;
btn.value = '<%:Open Panel%>';
2021-09-13 08:31:34 +08:00
if (status.daip && window.location.hostname == status.daip) {
2021-09-05 16:50:22 +08:00
url1='<%="http://'+window.location.hostname+':'+window.location.port+'/luci-static/openclash?hostname='+ window.location.hostname + '&port=' + status.cn_port + '&secret=' + status.dase +'"%>';
}
2021-09-13 08:31:34 +08:00
else if (status.daip && window.location.hostname != status.daip && status.db_foward_domain && status.db_foward_port) {
2021-09-06 08:31:34 +08:00
url1='<%="http://'+window.location.hostname+':'+window.location.port+'/luci-static/openclash?hostname='+ status.db_foward_domain + '&port=' + status.db_foward_port + '&secret=' + status.dase +'"%>';
}
2021-09-05 16:50:22 +08:00
else {
url1='<%="http://'+window.location.hostname+':'+window.location.port+'/luci-static/openclash"%>';
}
winOpen(url1);
return false;
});
2021-09-26 08:31:24 +08:00
};
2021-09-05 16:50:22 +08:00
function net_dashboard(btn)
{
2021-09-06 08:31:34 +08:00
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "status")%>', null, function(x, status) {
2021-09-05 16:50:22 +08:00
btn.disabled = true;
btn.value = '<%:Open Panel%>';
2021-09-13 08:31:34 +08:00
if (status.daip && window.location.hostname == status.daip) {
2021-09-05 16:50:22 +08:00
url2='<%="http://'+window.location.hostname+':'+status.cn_port+'/ui/?host='+ window.location.hostname + '&port=' + status.cn_port + '&secret=' + status.dase +'"%>';
}
2021-09-13 08:31:34 +08:00
else if (status.daip && window.location.hostname != status.daip && status.db_foward_domain && status.db_foward_port) {
2021-09-06 08:31:34 +08:00
url2='<%="http://'+status.db_foward_domain+':'+status.db_foward_port+'/ui/?host='+ status.db_foward_domain + '&port=' + status.db_foward_port + '&secret=' + status.dase +'"%>';
}
2021-09-05 16:50:22 +08:00
else {
url2='<%="http://'+window.location.hostname+':'+status.cn_port+'/ui/"%>';
}
winOpen(url2);
return false;
});
2021-09-26 08:31:24 +08:00
};
2021-09-05 16:50:22 +08:00
function homepage()
{
url3='https://github.com/vernesong/OpenClash';
winOpen(url3);
2021-09-26 08:31:24 +08:00
};
2021-09-05 16:50:22 +08:00
function wikipage()
{
url5='https://github.com/vernesong/OpenClash/wiki';
winOpen(url5);
2021-09-26 08:31:24 +08:00
};
2021-09-05 16:50:22 +08:00
function telegrampage()
{
url6='https://t.me/ctcgfw_openwrt_discuss';
winOpen(url6);
2021-09-26 08:31:24 +08:00
};
2021-09-05 16:50:22 +08:00
function sponsorpage()
{
url7='https://ko-fi.com/vernesong';
winOpen(url7);
2021-09-26 08:31:24 +08:00
};
2021-09-05 16:50:22 +08:00
2021-09-06 08:31:34 +08:00
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "currentversion")%>', null, function(x, status) {
2021-09-05 16:50:22 +08:00
if ( x && x.status == 200 ) {
clashversion.innerHTML = '<img id="currenntver" src="'+status.currentversion+'" alt="currentversion" height="21px" onload="return clashversion_check()" onclick="return go_update()">';
}
});
function clashversion_check()
{
2021-09-06 08:31:34 +08:00
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "lastversion")%>', null, function(x, status) {
2021-09-05 16:50:22 +08:00
if ( x && x.status == 200 ) {
if ( status.lastversion != "" )
{
clashversion.innerHTML = '<img id="lastver" src="'+status.lastversion+'" alt="lastversion" onerror="return clashversion_error()" onclick="return go_update()">';
}
}
});
2021-09-26 08:31:24 +08:00
};
2021-09-05 16:50:22 +08:00
function clashversion_error()
{
2021-09-06 08:31:34 +08:00
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "currentversion")%>', null, function(x, status) {
2021-09-05 16:50:22 +08:00
if ( x && x.status == 200 ) {
clashversion.innerHTML = '<img id="currenntver" src="'+status.currentversion+'" alt="currentversion" height="21px" onclick="return go_update()">';
}
});
2021-09-26 08:31:24 +08:00
};
2021-09-05 16:50:22 +08:00
function imgerrorfuns(imgobj,imgSrc){
setTimeout(function(){
imgobj.src=imgSrc;
},1000*10);
2021-09-26 08:31:24 +08:00
};
2021-09-05 16:50:22 +08:00
function go_update()
{
url4='https://github.com/vernesong/OpenClash/releases';
winOpen(url4);
2021-09-26 08:31:24 +08:00
};
2021-09-05 16:50:22 +08:00
var startlog = document.getElementById('_clashstart');
2021-09-06 08:31:34 +08:00
XHR.poll(6, '<%=luci.dispatcher.build_url("admin", "services", "openclash", "startlog")%>', null, function(x, status) {
2021-09-05 16:50:22 +08:00
if ( x && x.status == 200 ) {
if ( status.startlog == "\n" || status.startlog == "" ) {
var rdmdl=Math.floor(Math.random()*12)+1;
if(rdmdl==1)
{
startlog.innerHTML = '<b><font><%:Tip: You can modify the profile on the profile page (for content that is not taken over)%></font></b>';
}
if(rdmdl==2)
{
startlog.innerHTML = '<b><font><%:Tip: click the version icon above to jump to the client publishing page%></font></b>';
}
if(rdmdl==3)
{
startlog.innerHTML = '<b><font><%:Tip: do not write configuration files? Try to create one click on the server page%></font></b>';
}
if(rdmdl==4)
{
startlog.innerHTML = '<b><font><%:Tip: some website are abnormal? Try switching modes or using third-party rules%></font></b>';
}
if(rdmdl==5)
{
startlog.innerHTML = '<b><font><%:Tip: using the fake IP mode can get a faster access experience%></font></b>';
}
if(rdmdl==6)
{
startlog.innerHTML = '<b><font><%:Tip: query DNS by TLS & TCP & HTTPS can get better anti pollution effect%></font></b>';
}
if(rdmdl==7)
{
startlog.innerHTML = '<b><font><%:Tip: openlash will check the configuration file parameters to ensure that it works properly%></font></b>';
}
if(rdmdl==8)
{
startlog.innerHTML = '<b><font><%:Tip: the nameserver group must have at least one server set when using custom DNS%></font></b>';
}
if(rdmdl==9)
{
startlog.innerHTML = '<b><font><%:Tip: the website access check shows the connection of the device currently logged in to the Luci page%></font></b>';
}
if(rdmdl==10)
{
startlog.innerHTML = '<b><font><%:Tip: after started, please wait patiently until the connection is normal%></font></b>';
}
if(rdmdl==11)
{
startlog.innerHTML = '<b><font><%:Tip: if you don not use IPv6, please turn off the DHCP service of IPv6, otherwise the connection will be abnormal%></font></b>';
}
if(rdmdl==12)
{
startlog.innerHTML = '<b><font><%:Tip: you can update the version in the global settings page%></font></b>';
}
}
}
});
2021-09-06 08:31:34 +08:00
XHR.poll(1, '<%=luci.dispatcher.build_url("admin", "services", "openclash", "startlog")%>', null, function(x, status) {
2021-09-05 16:50:22 +08:00
if ( x && x.status == 200 ) {
2021-11-16 12:46:32 +08:00
if ( status.startlog.match("level=fatal") ) {
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "del_start_log")%>', null, function(x) {});
alert('<%:OpenClash Start Failed%> :\n\n' + status.startlog.split('msg=')[1]);
}
else if ( status.startlog != "\n" && status.startlog != "" ) {
startlog.innerHTML = '<b><font color="green">'+status.startlog+'</font></b>';
2021-09-05 16:50:22 +08:00
}
}
});
//]]></script>