| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- <%#
- Copyright 2018-2019 Lienol <[email protected]>
- Licensed to the public under the Apache License 2.0.
- -%>
- <%
- local dsp = require "luci.dispatcher"
- -%>
- <script type="text/javascript">
- //<![CDATA[
- const doms = document.getElementsByClassName('pingtime');
- const ports = document.getElementsByClassName("socket-connected")
- const xhr = (index) => {
- return new Promise((res) => {
- const dom = doms[index];
- const port = ports[index];
- if (!dom) res()
- port.innerHTML = '<font color="#0072c3">connect</font>';
- XHR.get('<%=dsp.build_url("admin/services/shadowsocksr/ping")%>', {
- index,
- domain: dom.getAttribute("hint"),
- port: port.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 color="${col}">${(result.ping ? result.ping : "--") + " ms"}</font>`
- if (result.socket) {
- port.innerHTML = '<font color="#249400">ok</font>';
- } else {
- port.innerHTML = '<font 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>
|