mirror of
				https://github.com/s00500/ESPUI.git
				synced 2025-10-30 20:53:24 +00:00 
			
		
		
		
	
							
								
								
									
										28
									
								
								data/js/controls.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										28
									
								
								data/js/controls.js
									
									
									
									
										vendored
									
									
								
							| @@ -68,6 +68,8 @@ const C_ALIZARIN = 6; | |||||||
| const C_DARK = 7; | const C_DARK = 7; | ||||||
| const C_NONE = 255; | const C_NONE = 255; | ||||||
|  |  | ||||||
|  | var graphData = new Array(); | ||||||
|  |  | ||||||
| function colorClass(colorId) { | function colorClass(colorId) { | ||||||
|   colorId = Number(colorId); |   colorId = Number(colorId); | ||||||
|   switch (colorId) { |   switch (colorId) { | ||||||
| @@ -155,7 +157,7 @@ function start() { | |||||||
|     var center = ""; |     var center = ""; | ||||||
|     switch (data.type) { |     switch (data.type) { | ||||||
|       case UI_INITIAL_GUI: |       case UI_INITIAL_GUI: | ||||||
|         data.controls.forEach(element => { |         data.controls.forEach((element) => { | ||||||
|           var fauxEvent = { |           var fauxEvent = { | ||||||
|             data: JSON.stringify(element) |             data: JSON.stringify(element) | ||||||
|           }; |           }; | ||||||
| @@ -577,17 +579,27 @@ function start() { | |||||||
|             "<h5>" + |             "<h5>" + | ||||||
|             data.label + |             data.label + | ||||||
|             "</h5><hr/>" + |             "</h5><hr/>" + | ||||||
|             "WILL BE A GRAPH <input style='color:black;' id='graph" + |             "<figure id='graph" + | ||||||
|             data.id + |             data.id + | ||||||
|             "' type='number' value='" + |             "'>" + | ||||||
|             data.value + |             "<figcaption>" + | ||||||
|             "' onchange='numberchange(" + |             data.label + | ||||||
|             data.id + |             "</figcaption>" + | ||||||
|             ")' />" + |             "</figure>" + | ||||||
|             "</div>" |             "</div>" | ||||||
|         ); |         ); | ||||||
|  |         graphData[data.id] = []; | ||||||
|  |         renderGraphSvg(graphData[data.id], "graph" + data.id); | ||||||
|  |         break; | ||||||
|  |       case ADD_GRAPH_POINT: | ||||||
|  |         var ts = Math.round(new Date().getTime() / 1000); | ||||||
|  |         graphData[data.id].push({ x: ts, y: data.value }); | ||||||
|  |         renderGraphSvg(graphData[data.id], "graph" + data.id); | ||||||
|  |         break; | ||||||
|  |       case CLEAR_GRAPH: | ||||||
|  |         graphData[data.id] = []; | ||||||
|  |         renderGraphSvg(graphData[data.id], "graph" + data.id); | ||||||
|         break; |         break; | ||||||
|  |  | ||||||
|       case UI_GAUGE: |       case UI_GAUGE: | ||||||
|         var parent; |         var parent; | ||||||
|         if (data.parentControl) { |         if (data.parentControl) { | ||||||
|   | |||||||
							
								
								
									
										18
									
								
								data/js/controls.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								data/js/controls.min.js
									
									
									
									
										vendored
									
									
								
							| @@ -1,8 +1,8 @@ | |||||||
| const UI_INITIAL_GUI=200;const UPDATE_OFFSET=100;const UI_TITEL=0;const UI_PAD=1;const UPDATE_PAD=101;const UI_CPAD=2;const UPDATE_CPAD=102;const UI_BUTTON=3;const UPDATE_BUTTON=103;const UI_LABEL=4;const UPDATE_LABEL=104;const UI_SWITCHER=5;const UPDATE_SWITCHER=105;const UI_SLIDER=6;const UPDATE_SLIDER=106;const UI_NUMBER=7;const UPDATE_NUMBER=107;const UI_TEXT_INPUT=8;const UPDATE_TEXT_INPUT=108;const UI_GRAPH=9;const ADD_GRAPH_POINT=10;const CLEAR_GRAPH=109;const UI_TAB=11;const UPDATE_TAB=111;const UI_SELECT=12;const UPDATE_SELECT=112;const UI_OPTION=13;const UPDATE_OPTION=113;const UI_MIN=14;const UPDATE_MIN=114;const UI_MAX=15;const UPDATE_MAX=115;const UI_STEP=16;const UPDATE_STEP=116;const UI_GAUGE=17;const UPTDATE_GAUGE=117;const UI_ACCEL=18;const UPTDATE_ACCEL=117;const UP=0;const DOWN=1;const LEFT=2;const RIGHT=3;const CENTER=4;const C_TURQUOISE=0;const C_EMERALD=1;const C_PETERRIVER=2;const C_WETASPHALT=3;const C_SUNFLOWER=4;const C_CARROT=5;const C_ALIZARIN=6;const C_DARK=7;const C_NONE=255;function colorClass(colorId){colorId=Number(colorId);switch(colorId){case C_TURQUOISE:return"turquoise";case C_EMERALD:return"emerald";case C_PETERRIVER:return"peterriver";case C_WETASPHALT:return"wetasphalt";case C_SUNFLOWER:return"sunflower";case C_CARROT:return"carrot";case C_ALIZARIN:return"alizarin";case C_NONE:return"dark";default:return"";}} | const UI_INITIAL_GUI=200;const UPDATE_OFFSET=100;const UI_TITEL=0;const UI_PAD=1;const UPDATE_PAD=101;const UI_CPAD=2;const UPDATE_CPAD=102;const UI_BUTTON=3;const UPDATE_BUTTON=103;const UI_LABEL=4;const UPDATE_LABEL=104;const UI_SWITCHER=5;const UPDATE_SWITCHER=105;const UI_SLIDER=6;const UPDATE_SLIDER=106;const UI_NUMBER=7;const UPDATE_NUMBER=107;const UI_TEXT_INPUT=8;const UPDATE_TEXT_INPUT=108;const UI_GRAPH=9;const ADD_GRAPH_POINT=10;const CLEAR_GRAPH=109;const UI_TAB=11;const UPDATE_TAB=111;const UI_SELECT=12;const UPDATE_SELECT=112;const UI_OPTION=13;const UPDATE_OPTION=113;const UI_MIN=14;const UPDATE_MIN=114;const UI_MAX=15;const UPDATE_MAX=115;const UI_STEP=16;const UPDATE_STEP=116;const UI_GAUGE=17;const UPTDATE_GAUGE=117;const UI_ACCEL=18;const UPTDATE_ACCEL=117;const UP=0;const DOWN=1;const LEFT=2;const RIGHT=3;const CENTER=4;const C_TURQUOISE=0;const C_EMERALD=1;const C_PETERRIVER=2;const C_WETASPHALT=3;const C_SUNFLOWER=4;const C_CARROT=5;const C_ALIZARIN=6;const C_DARK=7;const C_NONE=255;var graphData=new Array();function colorClass(colorId){colorId=Number(colorId);switch(colorId){case C_TURQUOISE:return"turquoise";case C_EMERALD:return"emerald";case C_PETERRIVER:return"peterriver";case C_WETASPHALT:return"wetasphalt";case C_SUNFLOWER:return"sunflower";case C_CARROT:return"carrot";case C_ALIZARIN:return"alizarin";case C_NONE:return"dark";default:return"";}} | ||||||
| var websock;var websockConnected=false;function restart(){$(document).add("*").off();$("#row").html("");websock.close();start();} | var websock;var websockConnected=false;function restart(){$(document).add("*").off();$("#row").html("");websock.close();start();} | ||||||
| function conStatusError(){websockConnected=false;$("#conStatus").removeClass("color-green");$("#conStatus").addClass("color-red");$("#conStatus").html("Error / No Connection ↻");$("#conStatus").off();$("#conStatus").on({click:restart});} | function conStatusError(){websockConnected=false;$("#conStatus").removeClass("color-green");$("#conStatus").addClass("color-red");$("#conStatus").html("Error / No Connection ↻");$("#conStatus").off();$("#conStatus").on({click:restart});} | ||||||
| function handleVisibilityChange(){if(!websockConnected&&!document.hidden){restart();}} | function handleVisibilityChange(){if(!websockConnected&&!document.hidden){restart();}} | ||||||
| function start(){document.addEventListener("visibilitychange",handleVisibilityChange,false);websock=new WebSocket("ws://"+window.location.hostname+"/ws");websock.onopen=function(evt){console.log("websock open");$("#conStatus").addClass("color-green");$("#conStatus").text("Connected");websockConnected=true;};websock.onclose=function(evt){console.log("websock close");conStatusError();};websock.onerror=function(evt){console.log(evt);conStatusError();};var handleEvent=function(evt){var data=JSON.parse(evt.data);var e=document.body;var center="";switch(data.type){case UI_INITIAL_GUI:data.controls.forEach(element=>{var fauxEvent={data:JSON.stringify(element)};handleEvent(fauxEvent);});break;case UI_TITEL:document.title=data.label;$("#mainHeader").html(data.label);break;case UI_LABEL:var parent;if(data.parentControl){parent=$("#tab"+data.parentControl);}else{parent=$("#row");} | function start(){document.addEventListener("visibilitychange",handleVisibilityChange,false);websock=new WebSocket("ws://"+window.location.hostname+"/ws");websock.onopen=function(evt){console.log("websock open");$("#conStatus").addClass("color-green");$("#conStatus").text("Connected");websockConnected=true;};websock.onclose=function(evt){console.log("websock close");conStatusError();};websock.onerror=function(evt){console.log(evt);conStatusError();};var handleEvent=function(evt){var data=JSON.parse(evt.data);var e=document.body;var center="";switch(data.type){case UI_INITIAL_GUI:data.controls.forEach((element)=>{var fauxEvent={data:JSON.stringify(element)};handleEvent(fauxEvent);});break;case UI_TITEL:document.title=data.label;$("#mainHeader").html(data.label);break;case UI_LABEL:var parent;if(data.parentControl){parent=$("#tab"+data.parentControl);}else{parent=$("#row");} | ||||||
| parent.append("<div id='id"+ | parent.append("<div id='id"+ | ||||||
| data.id+ | data.id+ | ||||||
| "' class='two columns card tcenter "+ | "' class='two columns card tcenter "+ | ||||||
| @@ -192,14 +192,14 @@ colorClass(data.color)+ | |||||||
| "<h5>"+ | "<h5>"+ | ||||||
| data.label+ | data.label+ | ||||||
| "</h5><hr/>"+ | "</h5><hr/>"+ | ||||||
| "WILL BE A GRAPH <input style='color:black;' id='graph"+ | "<figure id='graph"+ | ||||||
| data.id+ | data.id+ | ||||||
| "' type='number' value='"+ | "'>"+ | ||||||
| data.value+ | "<figcaption>"+ | ||||||
| "' onchange='numberchange("+ | data.label+ | ||||||
| data.id+ | "</figcaption>"+ | ||||||
| ")' />"+ | "</figure>"+ | ||||||
| "</div>");break;case UI_GAUGE:var parent;if(data.parentControl){parent=$("#tab"+data.parentControl);}else{parent=$("#row");} | "</div>");graphData["graph"+data.id]=[];renderGraphSvg(graphData["graph"+data.id],"graph"+data.id);break;case ADD_GRAPH_POINT:var ts=Math.round(new Date().getTime()/1000);graphData["graph"+data.id].push({x:ts,y:data.value});renderGraphSvg(graphData["graph"+data.id],"graph"+data.id);break;case CLEAR_GRAPH:graphData["graph"+data.id]=[];renderGraphSvg(graphData["graph"+data.id],"graph"+data.id);break;case UI_GAUGE:var parent;if(data.parentControl){parent=$("#tab"+data.parentControl);}else{parent=$("#row");} | ||||||
| parent.append("<div id='id"+ | parent.append("<div id='id"+ | ||||||
| data.id+ | data.id+ | ||||||
| "' class='two columns card tcenter "+ | "' class='two columns card tcenter "+ | ||||||
|   | |||||||
| @@ -570,7 +570,50 @@ void ESPUIClass::updateSelect(uint16_t id, String text, int clientId) { updateCo | |||||||
| void ESPUIClass::updateGauge(uint16_t id, int number, int clientId) { updateControlValue(id, String(number), clientId); } | void ESPUIClass::updateGauge(uint16_t id, int number, int clientId) { updateControlValue(id, String(number), clientId); } | ||||||
|  |  | ||||||
| void ESPUIClass::clearGraph(uint16_t id, int clientId) {} | void ESPUIClass::clearGraph(uint16_t id, int clientId) {} | ||||||
| void ESPUIClass::addGraphPoint(uint16_t id, int nValue, int clientId) {} |  | ||||||
|  | void ESPUIClass::addGraphPoint(uint16_t id, int nValue, int clientId) { | ||||||
|  |   Control *control = getControl(id); | ||||||
|  |   if (!control) { | ||||||
|  |     return; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   String json; | ||||||
|  |   DynamicJsonDocument document(2000); | ||||||
|  |   JsonObject root = document.to<JsonObject>(); | ||||||
|  |  | ||||||
|  |   root["type"] = (int)ControlType::GraphPoint; | ||||||
|  |   root["value"] = nValue; | ||||||
|  |   root["id"] = control->id; | ||||||
|  |   serializeJson(document, json); | ||||||
|  |  | ||||||
|  |   if (this->verbosity >= Verbosity::VerboseJSON) { | ||||||
|  |     Serial.println(json); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   if (clientId < 0) { | ||||||
|  |     this->ws->textAll(json); | ||||||
|  |     return; | ||||||
|  |   } | ||||||
|  |   // This is a hacky workaround because ESPAsyncWebServer does not have a | ||||||
|  |   // function like this and it's clients array is private | ||||||
|  |   int tryId = 0; | ||||||
|  |  | ||||||
|  |   for (int count = 0; count < this->ws->count();) { | ||||||
|  |     if (this->ws->hasClient(tryId)) { | ||||||
|  |       if (clientId != tryId) { | ||||||
|  |         this->ws->client(tryId)->text(json); | ||||||
|  |  | ||||||
|  |         if (this->verbosity >= Verbosity::VerboseJSON) { | ||||||
|  |           Serial.println(json); | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       count++; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     tryId++; | ||||||
|  |   } | ||||||
|  | } | ||||||
| /* | /* | ||||||
| Convert & Transfer Arduino elements to JSON elements | Convert & Transfer Arduino elements to JSON elements | ||||||
| Initially this function used to send the control element data individually. | Initially this function used to send the control element data individually. | ||||||
|   | |||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
		Reference in New Issue
	
	Block a user