123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- var currAp = "";
- var blockScan = 0;
- function createInputForAp(ap) {
- if (ap.essid=="" && ap.rssi==0) return;
- var input = e("input");
- input.type = "radio";
- input.name = "essid";
- input.value=ap.essid;
- input.id = "opt-" + ap.essid;
- if (currAp == ap.essid) input.checked = "1";
- var bars = e("div");
- var rssiVal = -Math.floor(ap.rssi/51)*32;
- bars.className = "lock-icon";
- bars.style.backgroundPosition = "0px "+(rssiVal-1)+"px";
- var rssi = e("div");
- rssi.innerHTML = "" + ap.rssi +"dB";
- var encrypt = e("div");
- var encVal = "-65"; //assume wpa/wpa2
- if (ap.enc == "0") encVal = "0"; //open
- if (ap.enc == "1") encVal = "-33"; //wep
- encrypt.className = "lock-icon";
- encrypt.style.backgroundPosition = "-32px "+encVal+"px";
- var label = e("div");
- label.innerHTML = ap.essid;
- var div = m('<label for=\"opt-' + ap.essid + '"></label>').childNodes[0];
- div.appendChild(input);
- div.appendChild(encrypt);
- div.appendChild(bars);
- div.appendChild(rssi);
- div.appendChild(label);
- return div;
- }
- function getSelectedEssid() {
- var e = document.forms.wifiform.elements;
- for (var i=0; i<e.length; i++) {
- if (e[i].type == "radio" && e[i].checked) {
- var v = e[i].value;
- if (v == "_hidden_ssid_") v = $("#hidden-ssid").value;
- return v;
- }
- }
- return currAp;
- }
- var scanTimeout = null;
- var scanReqCnt = 0;
- function scanResult() {
- if (scanReqCnt > 60) {
- return scanAPs();
- }
- scanReqCnt += 1;
- ajaxJson('GET', "/wifi/scan", function(data) {
- currAp = getSelectedEssid();
- if (data.result.inProgress == "0" && data.result.APs.length > 0) {
- $("#aps").innerHTML = "";
- var n = 0;
- for (var i=0; i<data.result.APs.length; i++) {
- if (data.result.APs[i].essid == "" && data.result.APs[i].rssi == 0) continue;
- $("#aps").appendChild(createInputForAp(data.result.APs[i]));
- n = n+1;
- }
- showNotification("Scan found " + n + " networks");
- var cb = $("#connect-button");
- cb.className = cb.className.replace(" pure-button-disabled", "");
- if (scanTimeout != null) clearTimeout(scanTimeout);
- scanTimeout = window.setTimeout(scanAPs, 20000);
- } else {
- window.setTimeout(scanResult, 1000);
- }
- }, function(s, st) {
- window.setTimeout(scanResult, 5000);
- });
- }
- function scanAPs() {
- // console.log("scanning now");
- if (blockScan) {
- scanTimeout = window.setTimeout(scanAPs, 1000);
- return;
- }
- scanTimeout = null;
- scanReqCnt = 0;
- ajaxReq('POST', "/wifi/scan", function(data) {
- showNotification("Wifi scan started");
- window.setTimeout(scanResult, 1000);
- }, function(s, st) {
- if (s == 400) {
- showWarning("Cannot scan in AP mode");
- $("#aps").innerHTML =
- "Switch to <a href=\"#\" onclick=\"changeWifiMode(3)\">STA+AP mode</a> to scan.";
- } else showWarning("Failed to scan: " + st);
- //window.setTimeout(scanResult, 1000);
- });
- }
- function getStatus() {
- ajaxJsonSpin("GET", "/wifi/connstatus", function(data) {
- if (data.status == "idle" || data.status == "connecting") {
- $("#aps").innerHTML = "Connecting...";
- showNotification("Connecting...");
- window.setTimeout(getStatus, 1000);
- } else if (data.status == "got IP address") {
- var txt = "Connected! Got IP "+data.ip;
- showNotification(txt);
- showWifiInfo(data);
- blockScan = 0;
- if (data.modechange == "yes") {
- var txt2 = "meta-id will switch to STA-only mode in a few seconds";
- window.setTimeout(function() { showNotification(txt2); }, 4000);
- }
- $("#reconnect").removeAttribute("hidden");
- $("#reconnect").innerHTML =
- "If you are in the same network, go to <a href=\"http://"+data.ip+
- "/\">"+data.ip+"</a>, else connect to network "+data.ssid+" first.";
- } else {
- blockScan = 0;
- showWarning("Connection failed: " + data.status + ", " + data.reason);
- $("#aps").innerHTML =
- "Check password and selected AP. <a href=\"wifi.tpl\">Go Back</a>";
- }
- }, function(s, st) {
- //showWarning("Can't get status: " + st);
- window.setTimeout(getStatus, 2000);
- });
- }
- function changeWifiMode(m) {
- blockScan = 1;
- hideWarning();
- ajaxSpin("POST", "/wifi/setmode?mode=" + m, function(resp) {
- showNotification("Mode changed");
- window.setTimeout(getWifiInfo, 100);
- blockScan = 0;
- window.setTimeout(scanAPs, 500);
- $("#aps").innerHTML = 'Scanning... <div class="spinner spinner-small"></div>';
- }, function(s, st) {
- showWarning("Error changing mode: " + st);
- window.setTimeout(getWifiInfo, 100);
- blockScan = 0;
- });
- }
- function changeWifiAp(e) {
- e.preventDefault();
- var passwd = $("#wifi-passwd").value;
- var essid = getSelectedEssid();
- showNotification("Connecting to " + essid);
- var url = "/wifi/connect?essid="+encodeURIComponent(essid)+"&passwd="+encodeURIComponent(passwd);
- hideWarning();
- $("#reconnect").setAttribute("hidden", "");
- $("#wifi-passwd").value = "";
- var cb = $("#connect-button");
- var cn = cb.className;
- cb.className += ' pure-button-disabled';
- blockScan = 1;
- ajaxSpin("POST", url, function(resp) {
- $("#spinner").removeAttribute('hidden'); // hack
- showNotification("Waiting for network change...");
- window.scrollTo(0, 0);
- window.setTimeout(getStatus, 2000);
- }, function(s, st) {
- showWarning("Error switching network: "+st);
- cb.className = cn;
- window.setTimeout(scanAPs, 1000);
- });
- }
- function changeSpecial(e) {
- e.preventDefault();
- var url = "/wifi/special";
- url += "?dhcp=" + document.querySelector('input[name="dhcp"]:checked').value;
- url += "&staticip=" + encodeURIComponent($("#wifi-staticip").value);
- url += "&netmask=" + encodeURIComponent($("#wifi-netmask").value);
- url += "&gateway=" + encodeURIComponent($("#wifi-gateway").value);
- hideWarning();
- var cb = $("#special-button");
- addClass(cb, 'pure-button-disabled');
- ajaxSpin("POST", url, function(resp) {
- removeClass(cb, 'pure-button-disabled');
- //getWifiInfo(); // it takes 1 second for new settings to be applied
- }, function(s, st) {
- showWarning("Error: "+st);
- removeClass(cb, 'pure-button-disabled');
- getWifiInfo();
- });
- }
- function doDhcp() {
- $('#dhcp-on').removeAttribute('hidden');
- $('#dhcp-off').setAttribute('hidden', '');
- }
- function doStatic() {
- $('#dhcp-off').removeAttribute('hidden');
- $('#dhcp-on').setAttribute('hidden', '');
- }
|