mirror of
https://github.com/s00500/ESPUI.git
synced 2024-11-21 22:50:55 +00:00
Checkpoint adding fileDisplay object
This commit is contained in:
parent
aa9a62bbdf
commit
ea8de92246
69
data/js/controls.js
vendored
69
data/js/controls.js
vendored
@ -60,7 +60,10 @@ const UPDATE_SEPARATOR = 119;
|
|||||||
const UI_TIME = 20;
|
const UI_TIME = 20;
|
||||||
const UPDATE_TIME = 120;
|
const UPDATE_TIME = 120;
|
||||||
|
|
||||||
const UI_FRAGMENT = 21;
|
const UI_FILEDISPLAY = 21;
|
||||||
|
const UPDATE_FILEDISPLAY = 121;
|
||||||
|
|
||||||
|
const UI_FRAGMENT = 98;
|
||||||
|
|
||||||
const UP = 0;
|
const UP = 0;
|
||||||
const DOWN = 1;
|
const DOWN = 1;
|
||||||
@ -80,7 +83,7 @@ const C_DARK = 7;
|
|||||||
const C_NONE = 255;
|
const C_NONE = 255;
|
||||||
|
|
||||||
var controlAssemblyArray = new Object();
|
var controlAssemblyArray = new Object();
|
||||||
var FragmentAssemblyTimer = new Object();
|
var FragmentAssemblyTimer = new Array();
|
||||||
var graphData = new Array();
|
var graphData = new Array();
|
||||||
var hasAccel = false;
|
var hasAccel = false;
|
||||||
var sliderContinuous = false;
|
var sliderContinuous = false;
|
||||||
@ -197,8 +200,8 @@ function conStatusError() {
|
|||||||
FragmentAssemblyTimer.forEach(element => {
|
FragmentAssemblyTimer.forEach(element => {
|
||||||
clearInterval(element);
|
clearInterval(element);
|
||||||
});
|
});
|
||||||
FragmentAssemblyTimer = new Object();
|
FragmentAssemblyTimer = new Array();
|
||||||
controlAssemblyArray = new Object();
|
controlAssemblyArray = new Array();
|
||||||
|
|
||||||
if (true === websockConnected) {
|
if (true === websockConnected) {
|
||||||
websockConnected = false;
|
websockConnected = false;
|
||||||
@ -220,10 +223,10 @@ function handleVisibilityChange() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function start() {
|
function start() {
|
||||||
let location = window.location.hostname;
|
// let location = window.location.hostname;
|
||||||
let port = window.location.port;
|
// let port = window.location.port;
|
||||||
// let location = "192.168.10.229";
|
let location = "192.168.10.219";
|
||||||
// let port = "";
|
let port = "";
|
||||||
|
|
||||||
document.addEventListener("visibilitychange", handleVisibilityChange, false);
|
document.addEventListener("visibilitychange", handleVisibilityChange, false);
|
||||||
if (
|
if (
|
||||||
@ -257,8 +260,8 @@ function start() {
|
|||||||
FragmentAssemblyTimer.forEach(element => {
|
FragmentAssemblyTimer.forEach(element => {
|
||||||
clearInterval(element);
|
clearInterval(element);
|
||||||
});
|
});
|
||||||
FragmentAssemblyTimer = new Object();
|
FragmentAssemblyTimer = new Array();
|
||||||
controlAssemblyArray = new Object();
|
controlAssemblyArray = new Array();
|
||||||
};
|
};
|
||||||
|
|
||||||
websock.onclose = function (evt) {
|
websock.onclose = function (evt) {
|
||||||
@ -270,8 +273,8 @@ function start() {
|
|||||||
FragmentAssemblyTimer.forEach(element => {
|
FragmentAssemblyTimer.forEach(element => {
|
||||||
clearInterval(element);
|
clearInterval(element);
|
||||||
});
|
});
|
||||||
FragmentAssemblyTimer = new Object();
|
FragmentAssemblyTimer = new Array();
|
||||||
controlAssemblyArray = new Object();
|
controlAssemblyArray = new Array();
|
||||||
};
|
};
|
||||||
|
|
||||||
websock.onerror = function (evt) {
|
websock.onerror = function (evt) {
|
||||||
@ -283,8 +286,8 @@ function start() {
|
|||||||
FragmentAssemblyTimer.forEach(element => {
|
FragmentAssemblyTimer.forEach(element => {
|
||||||
clearInterval(element);
|
clearInterval(element);
|
||||||
});
|
});
|
||||||
FragmentAssemblyTimer = new Object();
|
FragmentAssemblyTimer = new Array();
|
||||||
controlAssemblyArray = new Object();
|
controlAssemblyArray = new Array();
|
||||||
};
|
};
|
||||||
|
|
||||||
var handleEvent = function (evt) {
|
var handleEvent = function (evt) {
|
||||||
@ -367,7 +370,7 @@ function start() {
|
|||||||
if (data.visible) addToHTML(data);
|
if (data.visible) addToHTML(data);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
These elements must call additional functions after being added to the DOM
|
These elements must call additional functions after being added to the DOM
|
||||||
*/
|
*/
|
||||||
case UI_BUTTON:
|
case UI_BUTTON:
|
||||||
@ -565,6 +568,14 @@ function start() {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case UI_FILEDISPLAY:
|
||||||
|
if (data.visible)
|
||||||
|
{
|
||||||
|
addToHTML(data);
|
||||||
|
FileDisplayUploadFile(data);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Update messages change the value/style of a component without adding new HTML
|
* Update messages change the value/style of a component without adding new HTML
|
||||||
*/
|
*/
|
||||||
@ -639,6 +650,10 @@ function start() {
|
|||||||
websock.send("time:" + rv + ":" + data.id);
|
websock.send("time:" + rv + ":" + data.id);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case UPDATE_FILEDISPLAY:
|
||||||
|
FileDisplayUploadFile(data);
|
||||||
|
break;
|
||||||
|
|
||||||
case UI_FRAGMENT:
|
case UI_FRAGMENT:
|
||||||
let FragmentLen = data.length;
|
let FragmentLen = data.length;
|
||||||
let FragementOffset = data.offset;
|
let FragementOffset = data.offset;
|
||||||
@ -770,6 +785,25 @@ function start() {
|
|||||||
websock.onmessage = handleEvent;
|
websock.onmessage = handleEvent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function FileDisplayUploadFile(data)
|
||||||
|
{
|
||||||
|
let text = downloadFile(data.value);
|
||||||
|
// populate the text object
|
||||||
|
} // FileDisplayUploadFile
|
||||||
|
|
||||||
|
async function downloadFile(filename) {
|
||||||
|
let response = await fetch(filename);
|
||||||
|
|
||||||
|
if(response.status != 200) {
|
||||||
|
throw new Error("File Read Server Error: '" + response.status + "'");
|
||||||
|
}
|
||||||
|
|
||||||
|
// read response stream as text
|
||||||
|
let text_data = await response.text();
|
||||||
|
|
||||||
|
return text_data;
|
||||||
|
} // downloadFile
|
||||||
|
|
||||||
function StartFragmentAssemblyTimer(Id)
|
function StartFragmentAssemblyTimer(Id)
|
||||||
{
|
{
|
||||||
StopFragmentAssemblyTimer(Id);
|
StopFragmentAssemblyTimer(Id);
|
||||||
@ -930,6 +964,7 @@ var addToHTML = function (data) {
|
|||||||
case UI_GRAPH:
|
case UI_GRAPH:
|
||||||
case UI_GAUGE:
|
case UI_GAUGE:
|
||||||
case UI_ACCEL:
|
case UI_ACCEL:
|
||||||
|
case UI_FILEDISPLAY:
|
||||||
html = "<div id='id" + data.id + "' " + panelStyle + " class='two columns " + panelwide + " card tcenter " +
|
html = "<div id='id" + data.id + "' " + panelStyle + " class='two columns " + panelwide + " card tcenter " +
|
||||||
colorClass(data.color) + "'><h5>" + data.label + "</h5><hr/>" +
|
colorClass(data.color) + "'><h5>" + data.label + "</h5><hr/>" +
|
||||||
elementHTML(data) +
|
elementHTML(data) +
|
||||||
@ -1020,8 +1055,6 @@ var elementHTML = function (data) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var processEnabled = function (data) {
|
var processEnabled = function (data) {
|
||||||
//Handle the enabling and disabling of controls
|
//Handle the enabling and disabling of controls
|
||||||
//Most controls can be disabled through the use of $("#<item>").prop("disabled", true) and CSS will style it accordingly
|
//Most controls can be disabled through the use of $("#<item>").prop("disabled", true) and CSS will style it accordingly
|
||||||
@ -1067,6 +1100,8 @@ var processEnabled = function (data) {
|
|||||||
case UI_CPAD:
|
case UI_CPAD:
|
||||||
case UPDATE_PAD:
|
case UPDATE_PAD:
|
||||||
case UPDATE_CPAD:
|
case UPDATE_CPAD:
|
||||||
|
case UI_FILEDISPLAY:
|
||||||
|
case UPDATE_FILEDISPLAY:
|
||||||
if (data.enabled) {
|
if (data.enabled) {
|
||||||
$("#id" + data.id + " nav").removeClass('disabled');
|
$("#id" + data.id + " nav").removeClass('disabled');
|
||||||
} else {
|
} else {
|
||||||
|
@ -32,6 +32,9 @@ lib_ignore =
|
|||||||
[env:esp8266]
|
[env:esp8266]
|
||||||
platform = espressif8266
|
platform = espressif8266
|
||||||
board = nodemcuv2
|
board = nodemcuv2
|
||||||
|
upload_port = COM8
|
||||||
|
monitor_port = COM8
|
||||||
|
monitor_speed = 115200
|
||||||
|
|
||||||
[env:esp32]
|
[env:esp32]
|
||||||
platform = espressif32
|
platform = espressif32
|
||||||
@ -41,3 +44,6 @@ board_build.flash_mode = dout
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${env.lib_deps}
|
${env.lib_deps}
|
||||||
me-no-dev/AsyncTCP
|
me-no-dev/AsyncTCP
|
||||||
|
upload_port = COM9
|
||||||
|
monitor_port = COM9
|
||||||
|
monitor_speed = 115200
|
||||||
|
@ -11,8 +11,8 @@ DNSServer dnsServer;
|
|||||||
#include <ESP8266WiFi.h>
|
#include <ESP8266WiFi.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const char* ssid = "ESPUI";
|
const char* ssid = "MaRtInG";
|
||||||
const char* password = "espui";
|
const char* password = "martinshomenetwork";
|
||||||
|
|
||||||
const char* hostname = "espui";
|
const char* hostname = "espui";
|
||||||
|
|
||||||
@ -238,6 +238,7 @@ void setup(void)
|
|||||||
ESPUI.slider("Slider two", &slider, ControlColor::None, 100);
|
ESPUI.slider("Slider two", &slider, ControlColor::None, 100);
|
||||||
ESPUI.text("Text Test:", &textCall, ControlColor::Alizarin, "a Text Field");
|
ESPUI.text("Text Test:", &textCall, ControlColor::Alizarin, "a Text Field");
|
||||||
ESPUI.number("Numbertest", &numberCall, ControlColor::Alizarin, 5, 0, 10);
|
ESPUI.number("Numbertest", &numberCall, ControlColor::Alizarin, 5, 0, 10);
|
||||||
|
ESPUI.fileDisplay("Filetest", ControlColor::Turquoise, "DisplayFile.txt");
|
||||||
|
|
||||||
graphId = ESPUI.graph("Graph Test", ControlColor::Wetasphalt);
|
graphId = ESPUI.graph("Graph Test", ControlColor::Wetasphalt);
|
||||||
|
|
||||||
@ -258,7 +259,22 @@ void setup(void)
|
|||||||
* password, for example begin("ESPUI Control", "username", "password")
|
* password, for example begin("ESPUI Control", "username", "password")
|
||||||
*/
|
*/
|
||||||
ESPUI.sliderContinuous = true;
|
ESPUI.sliderContinuous = true;
|
||||||
ESPUI.begin("ESPUI Control");
|
ESPUI.beginLITTLEFS("ESPUI Control");
|
||||||
|
|
||||||
|
// create a text file
|
||||||
|
ESPUI.prepareFileSystem();
|
||||||
|
#if defined(ESP32)
|
||||||
|
#if (ESP_IDF_VERSION_MAJOR == 4 && ESP_IDF_VERSION_MINOR >= 4) || ESP_IDF_VERSION_MAJOR > 4
|
||||||
|
File testFile = LittleFS.open("/DisplayFile.txt", "w");
|
||||||
|
#else
|
||||||
|
File testFile = LITTLEFS.open("/DisplayFile.txt", "w");
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
File testFile = LittleFS.open("/DisplayFile.txt", "w");
|
||||||
|
#endif
|
||||||
|
String TestLine = "Test Line\n";
|
||||||
|
testFile.write((const uint8_t*)TestLine.c_str(), TestLine.length());
|
||||||
|
testFile.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop(void)
|
void loop(void)
|
||||||
|
@ -805,6 +805,11 @@ uint16_t ESPUIClass::separator(const char* label)
|
|||||||
return addControl(ControlType::Separator, label, "", ControlColor::Alizarin, Control::noParent, nullptr);
|
return addControl(ControlType::Separator, label, "", ControlColor::Alizarin, Control::noParent, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint16_t ESPUIClass::fileDisplay(const char* label, ControlColor color, String filename)
|
||||||
|
{
|
||||||
|
return addControl(ControlType::FileDisplay, label, filename, color, Control::noParent);
|
||||||
|
}
|
||||||
|
|
||||||
uint16_t ESPUIClass::accelerometer(const char* label, std::function<void(Control*, int)> callback, ControlColor color)
|
uint16_t ESPUIClass::accelerometer(const char* label, std::function<void(Control*, int)> callback, ControlColor color)
|
||||||
{
|
{
|
||||||
return addControl(ControlType::Accel, label, "", color, Control::noParent, callback);
|
return addControl(ControlType::Accel, label, "", color, Control::noParent, callback);
|
||||||
@ -1425,6 +1430,14 @@ void ESPUIClass::begin(const char* _title, const char* username, const char* pas
|
|||||||
server->onNotFound([this](AsyncWebServerRequest* request) {
|
server->onNotFound([this](AsyncWebServerRequest* request) {
|
||||||
if (captivePortal)
|
if (captivePortal)
|
||||||
{
|
{
|
||||||
|
AsyncResponseStream *response = request->beginResponseStream("text/html");
|
||||||
|
String responseText;
|
||||||
|
responseText.reserve(1024);
|
||||||
|
responseText += F("<!DOCTYPE html><html><head><title>Captive Portal</title></head><body>");
|
||||||
|
responseText += ("<p>If site does not re-direct click here <a href='http://" + WiFi.softAPIP().toString() + "'>this link</a></p>");
|
||||||
|
responseText += ("</body></html><head><meta http-equiv=\"Refresh\" content=\"0; URL='http://" + WiFi.softAPIP().toString() + "'\" /></head>");
|
||||||
|
response->write(responseText.c_str(), responseText.length());
|
||||||
|
request->send(response);
|
||||||
request->redirect("/");
|
request->redirect("/");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -143,6 +143,7 @@ public:
|
|||||||
uint16_t gauge(const char* label, ControlColor color, int value, int min = 0,
|
uint16_t gauge(const char* label, ControlColor color, int value, int min = 0,
|
||||||
int max = 100); // Create Gauge display
|
int max = 100); // Create Gauge display
|
||||||
uint16_t separator(const char* label); //Create separator
|
uint16_t separator(const char* label); //Create separator
|
||||||
|
uint16_t fileDisplay(const char* label, ControlColor color, String filename);
|
||||||
|
|
||||||
// Input only
|
// Input only
|
||||||
uint16_t accelerometer(const char* label, std::function<void(Control*, int)> callback, ControlColor color);
|
uint16_t accelerometer(const char* label, std::function<void(Control*, int)> callback, ControlColor color);
|
||||||
|
@ -280,3 +280,4 @@ void Control::onWsEvent(String & cmd, String& data)
|
|||||||
}
|
}
|
||||||
} while (false);
|
} while (false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,8 +30,9 @@ enum ControlType : uint8_t
|
|||||||
Accel,
|
Accel,
|
||||||
Separator,
|
Separator,
|
||||||
Time,
|
Time,
|
||||||
|
FileDisplay,
|
||||||
|
|
||||||
Fragment,
|
Fragment = 98,
|
||||||
Password = 99,
|
Password = 99,
|
||||||
UpdateOffset = 100,
|
UpdateOffset = 100,
|
||||||
};
|
};
|
||||||
@ -93,6 +94,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
bool _ToBeDeleted = false;
|
bool _ToBeDeleted = false;
|
||||||
uint32_t ControlChangeID = 0;
|
uint32_t ControlChangeID = 0;
|
||||||
|
String OldValue = emptyString;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define UI_TITLE ControlType::Title
|
#define UI_TITLE ControlType::Title
|
||||||
|
Loading…
Reference in New Issue
Block a user