admin.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. document.addEventListener('DOMContentLoaded', function() {
  2. /* make wanted 'elem' class elements to vars */
  3. (function() {
  4. x = document.getElementsByClassName('elem');
  5. for (i = 0; i < x.length; i++ ) {
  6. y = x[i].id;
  7. y = document.getElementById(x[i].id);
  8. }
  9. })();
  10. uploadbtn.addEventListener('change', function () {
  11. uploadfile.value = this.value.replace(/^.*\\/, "");
  12. var len = uploadfile.value.length - 7;
  13. uploadfile.setAttribute('size', len);
  14. var len = uploadfile.offsetWidth;
  15. uploadbtn.style.width = len + "px";
  16. e.stopPropagation();
  17. });
  18. /* all submit buttons */
  19. var submitbtns = document.querySelectorAll('input[type="submit"]');
  20. for (var i=0; i < submitbtns.length; i++){
  21. submitbtns[i].addEventListener('click', function(e) {
  22. if (e.target.hasAttribute('data-wait')) {
  23. e.target.value = e.target.getAttribute('data-wait');
  24. } else e.target.value = 'Working, please wait..';
  25. e.stopPropagation();
  26. }, false);
  27. }
  28. wanconf.addEventListener('change', function(e) {
  29. wanChange(e.target)
  30. e.stopPropagation();
  31. });
  32. wanssid.addEventListener('focus', function(e) {
  33. iwScan(e.target);
  34. e.stopPropagation();
  35. });
  36. /* update WAN form based on what iface is chosen */
  37. function wanChange(e) {
  38. switch (e[e.selectedIndex].id) {
  39. case 'wlan':
  40. wanwifi.setAttribute('class','show');
  41. iwScan(wanssid);
  42. break;
  43. case 'dhcp':
  44. // wanaddr.setAttribute('class','hide');
  45. for (var i = 0; i < wanaddr.children.length; i++) {
  46. wanaddr.children[i].setAttribute('readonly', true);
  47. }
  48. break;
  49. case 'eth':
  50. wanwifi.setAttribute('class','hide');
  51. break
  52. case 'stat':
  53. // wanaddr.setAttribute('class','show');
  54. for (var i = 0; i < wanaddr.children.length; i++) {
  55. wanaddr.children[i].removeAttribute('readonly');
  56. }
  57. break;
  58. }
  59. }
  60. /* get results from iwlist and show in the UI */
  61. function iwScan(e) {
  62. console.log('scanning wifi..');
  63. var scan_el;
  64. if (e.firstChild != document.getElementById('scan')) {
  65. scan_el = document.createElement('option');
  66. scan_el.selected = true;
  67. scan_el.disabled = true;
  68. //scan_el.style.visibility = 'hidden';
  69. scan_el.id = 'scan';
  70. e.insertBefore(scan_el, e.firstChild);
  71. } else scan_el = document.getElementById('scan');
  72. scan_el.textContent = 'scanning for networks..';
  73. ajaxReq('POST', '/admin/iwscan', 'null', function(xhr) {
  74. var res = JSON.parse(xhr['response']);
  75. var aps = res['results'].sort(compSort); /* get APs */
  76. aps_num = Object.keys(aps).length;
  77. for (i = 0; i < aps_num; i++) {
  78. if (document.getElementById(aps[i]['ssid'])) {
  79. //console.log('found ' + aps[i]['ssid'] + ' entry');
  80. /* TODO: update existing records */
  81. } else {
  82. ap = document.createElement('option');
  83. ap.id = aps[i]['ssid'];
  84. ap.setAttribute('data-quality', aps[i]['quality']);
  85. if (aps[i]['encryption']['enabled']) {
  86. ap.setAttribute('data-enc', 'wpa2');
  87. } else {
  88. ap.setAttribute('data-enc', 'false');
  89. }
  90. ap.innerHTML = aps[i]['ssid'];
  91. e.appendChild(ap);
  92. }
  93. }
  94. scan_el.textContent = 'select a network..';
  95. if (! aps_num) {
  96. scan_el.textContent = 'no scan results..';
  97. console.log('no scan results');
  98. }
  99. });
  100. scan_el.selected = 1;
  101. return
  102. }
  103. /* v simple XHR */
  104. function ajaxReq(method, url, data, callback) {
  105. var xhr = new XMLHttpRequest();
  106. xhr.open(method, url, true);
  107. xhr.onerror = function() { clearInterval(uptime); console.log('network error, dying'); return; }
  108. xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  109. xhr.onreadystatechange = function() {
  110. if (xhr.readyState == 4 && xhr.status == 200) {
  111. callback(xhr);
  112. }
  113. }
  114. xhr.send(data);
  115. }
  116. /*
  117. update uptime output
  118. we just run ahead
  119. */
  120. var uptime = (function uptimeUpdate() {
  121. function run() {
  122. ajaxReq('POST', '/admin/uptime', 'null', function(xhr) {
  123. if (xhr['response'] != '') {
  124. document.getElementById('uptime').textContent = xhr['response'];
  125. }
  126. });
  127. }
  128. return setInterval(run, 5000);
  129. })();
  130. /* sort by comparing a and b */
  131. function compSort(a,b) {
  132. if (a.quality < b.quality)
  133. return 1;
  134. if (a.quality > b.quality)
  135. return -1;
  136. return 0;
  137. }
  138. });