html_console.h 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /* clang-format off */
  2. #ifdef ENABLE_FEATURE_WEB_CONSOLE
  3. static const char js_csapp[] PROGMEM = R"=====(function g(i) { return document.getElementById(i) };
  4. var xhttp, updateTime, reqTime, reqFin;
  5. var msgList = document.getElementById('msgs');
  6. g('cmdInput').addEventListener("keyup", function(event) {
  7. event.preventDefault();
  8. if (event.keyCode === 13) {
  9. sendCmd();
  10. }
  11. });
  12. function sendCmd() {
  13. var form = g('cmdForm');
  14. msgList.innerHTML += 'Sent: ' + g('cmdInput').value + '\n';
  15. g('cmd').value=g('cmdInput').value;
  16. g('cmdInput').value='';
  17. g('cmdInput').value = '';
  18. msgList.scrollTop = msgList.scrollHeight;
  19. return transmit(form);
  20. }
  21. var lastMsgIndex=0;
  22. function transmit(f) {
  23. if (!xhttp) {
  24. reqTime = 0;
  25. reqFin = false;
  26. xhttp = new XMLHttpRequest();
  27. xhttp.timeout = 1000;
  28. xhttp.overrideMimeType("text/plain");
  29. xhttp.open('POST', 'webcsapi');
  30. xhttp.send(f ? (new FormData(f)) : '');
  31. xhttp.onreadystatechange = function () {
  32. if (xhttp.readyState === XMLHttpRequest.DONE && xhttp.status === 200) {
  33. var data = xhttp.responseText.split("\n");
  34. for(i=0; i < data.length; i++) {
  35. var numEnd = data[i].indexOf("}");
  36. var num = parseInt(data[i].substring(1, numEnd));
  37. var msg = data[i].substring(numEnd+1);
  38. if(num > lastMsgIndex || lastMsgIndex == 0) {
  39. msgList.innerHTML += msg;
  40. msgList.scrollTop = msgList.scrollHeight;
  41. lastMsgIndex = num;
  42. }
  43. }
  44. xhttp = null;
  45. updateTime = 0;
  46. reqFin = true;
  47. }
  48. else {
  49. if(!reqFin && reqTime > 10) {
  50. xhttp = null;
  51. reqFin = true;
  52. }
  53. }
  54. }
  55. }
  56. return false;
  57. }
  58. transmit();
  59. setInterval(transmit, 2000);
  60. )====="; // js_csapp
  61. static const char html_console_body[] PROGMEM = R"=====(
  62. <p><b>Console</b></p>
  63. <table style='width:100%'>
  64. <tr><td style='width:800px;'><textarea id="msgs" style="width:100%;min-height:400px;resize:both;"></textarea></td></tr>
  65. <tr><td><input id='cmdInput' type='text'></td></tr>
  66. <tr><td><button type='submit' id='btnSend' onclick='sendCmd();'>Send</button></td></tr>
  67. <tr><td><form action='.' method='get'><button class='bgrey'>Close</button></form></td></tr>
  68. </table>
  69. <form id='cmdForm'>
  70. <input type='hidden' name='cmd' id='cmd'>
  71. </form>
  72. <script src="csapp.js"></script>
  73. )====="; // html_console_body
  74. #endif