Fork of the espurna firmware for `mhsw` switches
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

130 lines
3.3 KiB

8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
  1. var websock;
  2. function doUpdate() {
  3. var self = $(this);
  4. self.addClass("loading");
  5. $.ajax({
  6. 'method': 'POST',
  7. 'url': '/save',
  8. 'dataType': 'json',
  9. 'data': $("#formSave").serializeArray()
  10. }).done(function(data) {
  11. self.removeClass("loading");
  12. }).fail(function() {
  13. self.removeClass("loading");
  14. });
  15. }
  16. function showPanel() {
  17. $(".panel").hide();
  18. $("#" + $(this).attr("data")).show();
  19. if ($("#layout").hasClass('active')) toggleMenu();
  20. };
  21. function toggleMenu() {
  22. $("#layout").toggleClass('active');
  23. $("#menu").toggleClass('active');
  24. $("#menuLink").toggleClass('active');
  25. }
  26. function processData(data) {
  27. // pre-process
  28. if ("network" in data) {
  29. data.network = data.network.toUpperCase();
  30. }
  31. if ("mqttStatus" in data) {
  32. data.mqttStatus = data.mqttStatus ? "CONNECTED" : "NOT CONNECTED";
  33. }
  34. // relay
  35. if ("relayStatus" in data) {
  36. $("input[name='relayStatus']")
  37. .prop("checked", data.relayStatus)
  38. .iphoneStyle({
  39. checkedLabel: 'ON',
  40. uncheckedLabel: 'OFF',
  41. onChange: function(elem, value) {
  42. $.ajax({
  43. 'method': 'GET',
  44. 'url': value ? '/relay/on' : '/relay/off',
  45. 'dataType': 'json'
  46. });
  47. }
  48. })
  49. .iphoneStyle("refresh");
  50. }
  51. // title
  52. if ("app" in data) {
  53. document.title = data.app;
  54. $(".pure-menu-heading").html(data.app);
  55. }
  56. // automatic assign
  57. Object.keys(data).forEach(function(key) {
  58. // Look for INPUTs
  59. var element = $("input[name=" + key + "]");
  60. if (element.length > 0) {
  61. if (element.attr('type') == 'checkbox') {
  62. element.prop("checked", data[key] == 1)
  63. .iphoneStyle({
  64. resizeContainer: false,
  65. resizeHandle: false,
  66. checkedLabel: 'ON',
  67. uncheckedLabel: 'OFF'
  68. })
  69. .iphoneStyle("refresh");
  70. } else {
  71. element.val(data[key]);
  72. }
  73. }
  74. // Look for SELECTs
  75. var element = $("select[name=" + key + "]");
  76. if (element.length > 0) {
  77. element.val(data[key]);
  78. }
  79. });
  80. // WIFI
  81. var groups = $("#panel-wifi .pure-g");
  82. for (var i in data.wifi) {
  83. var wifi = data.wifi[i];
  84. Object.keys(wifi).forEach(function(key) {
  85. var id = "input[name=" + key + "]";
  86. if ($(id, groups[i]).length) $(id, groups[i]).val(wifi[key]);
  87. });
  88. };
  89. }
  90. function getJson(str) {
  91. try {
  92. return JSON.parse(str);
  93. } catch (e) {
  94. return false;
  95. }
  96. }
  97. function init() {
  98. $("#menuLink").on('click', toggleMenu);
  99. $(".button-update").on('click', doUpdate);
  100. $(".pure-menu-link").on('click', showPanel);
  101. var host = window.location.hostname;
  102. websock = new WebSocket('ws://' + host + ':81/');
  103. websock.onopen = function(evt) {};
  104. websock.onclose = function(evt) {};
  105. websock.onerror = function(evt) {};
  106. websock.onmessage = function(evt) {
  107. var data = getJson(evt.data);
  108. if (data) processData(data);
  109. };
  110. }
  111. $(init);