| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- <%#
- Copyright 2018-2019 Lienol <[email protected]>
- Licensed to the public under the Apache License 2.0.
- -%>
- <script type="text/javascript">
- //<![CDATA[
- window.addEventListener('load', function () {
- const doms = document.getElementsByClassName('pingtime');
- const ports = document.getElementsByClassName("socket-connected");
- const transports = document.getElementsByClassName("transport");
- const wsPaths = document.getElementsByClassName("wsPath");
- const tlss = document.getElementsByClassName("tls");
- const xhr = (index) => {
- return new Promise((res) => {
- const dom = doms[index];
- const port = ports[index];
- const transport = transports[index];
- const wsPath = wsPaths[index];
- const tls = tlss[index];
- if (!dom) res();
- port.innerHTML = '<font style=\"color:#0072c3\">connect</font>';
- XHR.get('<%=luci.dispatcher.build_url("admin/services/shadowsocksr/ping")%>', {
- index,
- domain: dom.getAttribute("hint"),
- port: port.getAttribute("hint"),
- transport: transport.getAttribute("hint"),
- wsPath: wsPath.getAttribute("hint"),
- tls: tls.getAttribute("hint")
- },
- (x, result) => {
- let col = '#ff0000';
- if (result.ping) {
- if (result.ping < 300) col = '#ff3300';
- if (result.ping < 200) col = '#ff7700';
- if (result.ping < 100) col = '#249400';
- }
- dom.innerHTML = `<font style=\"color:${col}\">${(result.ping ? result.ping : "--") + " ms"}</font>`;
- if (result.socket) {
- port.innerHTML = '<font style=\"color:#249400\">ok</font>';
- } else {
- port.innerHTML = '<font style=\"color:#ff0000\">fail</font>';
- }
- res();
- });
- });
- };
- let task = -1;
- const thread = () => {
- task = task + 1;
- if (doms[task]) {
- xhr(task).then(thread);
- }
- };
- for (let i = 0; i < 20; i++) {
- thread();
- }
- });
- function cbi_row_drop(fromId, toId, store, isToBottom) {
- var fromNode = document.getElementById(fromId);
- var toNode = document.getElementById(toId);
- if (!fromNode || !toNode) return false;
- var table = fromNode.parentNode;
- while (table && table.nodeName.toLowerCase() != "table")
- table = table.parentNode;
- if (!table) return false;
- var ids = [];
- if (isToBottom) {
- toNode.parentNode.appendChild(fromNode);
- } else {
- fromNode.parentNode.insertBefore(fromNode, toNode);
- }
- for (var idx = 2; idx < table.rows.length; idx++) {
- table.rows[idx].className = table.rows[idx].className.replace(
- /cbi-rowstyle-[12]/,
- "cbi-rowstyle-" + (1 + (idx % 2))
- );
- if (table.rows[idx].id && table.rows[idx].id.match(/-([^\-]+)$/))
- ids.push(RegExp.$1);
- }
- var input = document.getElementById(store);
- if (input) input.value = ids.join(" ");
- return false;
- }
- // set tr draggable
- function enableDragForTable(table_selecter, store) {
- var trs = document.querySelectorAll(table_selecter + " tr");
- if (!trs || trs.length.length < 3) {
- return;
- }
- function ondragstart(ev) {
- ev.dataTransfer.setData("Text", ev.target.id);
- }
- function ondrop(ev) {
- var from = ev.dataTransfer.getData("Text");
- cbi_row_drop(from, this.id, store);
- }
- function ondragover(ev) {
- ev.preventDefault();
- ev.dataTransfer.dropEffect = "move";
- }
- function moveToTop(id) {
- var top = document.querySelectorAll(table_selecter + " tr")[2];
- cbi_row_drop(id, top.id, store);
- }
- function moveToBottom(id) {
- console.log('moveToBottom:', id);
- var trList = document.querySelectorAll(table_selecter + " tr");
- var bottom = trList[trList.length - 1];
- cbi_row_drop(id, bottom.id, store, true);
- }
- for (let index = 2; index < trs.length; index++) {
- const el = trs[index];
- el.setAttribute("draggable", true);
- el.ondragstart = ondragstart;
- el.ondrop = ondrop;
- el.ondragover = ondragover;
- // reset the behaviors of the btns
- var upBtns = el.querySelectorAll(".cbi-button.cbi-button-up");
- if (upBtns && upBtns.length > 0) {
- upBtns.forEach(function (_el) {
- _el.onclick = function () {
- moveToTop(el.id);
- };
- });
- }
- var downBtns = el.querySelectorAll(".cbi-button.cbi-button-down");
- if (downBtns && downBtns.length > 0) {
- downBtns.forEach(function (_el) {
- _el.onclick = function () {
- moveToBottom(el.id);
- };
- });
- }
- }
- }
- // enable
- enableDragForTable(
- "#cbi-shadowsocksr-servers table",
- "cbi.sts.shadowsocksr.servers"
- );
- //]]>
- </script>
|