From 43e0ff9270e674acaa7d35a8fe65233a1133c400 Mon Sep 17 00:00:00 2001
From: fvanroie
Date: Sat, 18 Feb 2023 22:38:26 +0100
Subject: [PATCH] Fix CI/CD and update binary assets
---
data/edit.htm | 666 +--------------------------------
data/main.js | 2 +-
data/script.js | 134 +------
data/static/edit.htm.gz | Bin 6707 -> 1132 bytes
data/static/en.json.gz | Bin 1777 -> 1777 bytes
data/static/main.js.gz | Bin 4004 -> 4136 bytes
data/static/script.js.gz | Bin 2268 -> 4484 bytes
data/static/style.css.gz | Bin 5329 -> 5866 bytes
data/style.css | 57 ++-
src/sys/svc/hasp_http.cpp | 47 ++-
tools/auto_firmware_version.py | 18 +
tools/esp_merge_bin.py | 12 +-
tools/minifiy.py | 69 ++++
user_setups/esp32/_esp32.ini | 4 +-
14 files changed, 177 insertions(+), 832 deletions(-)
create mode 100644 tools/minifiy.py
diff --git a/data/edit.htm b/data/edit.htm
index cd185e2c..f25ffeff 100644
--- a/data/edit.htm
+++ b/data/edit.htm
@@ -1,665 +1 @@
-
-
-
-
-
-
-
-
-
-
-
-
- openHASP
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- New File
- Edit
- Preview
- Download
- Delete
-
-
-
-
-
-
-
-
+openHASP File Editor
New File Upload Files Edit Preview Download Delete
\ No newline at end of file
diff --git a/data/main.js b/data/main.js
index faad72b7..a74ef0c9 100644
--- a/data/main.js
+++ b/data/main.js
@@ -1 +1 @@
-import{createApp,reactive,createI18n}from"/static/petite-vue.hasp.js?COMMIT_HASH";const languages=[{code:"en",name:"English"},{code:"nl",name:"Nederlands"},{code:"fr",name:"Français"}];var locations={af:["Abidjan","Algiers","Bissau","Cairo","Casablanca","El_Aaiun","Johannesburg","Juba","Khartoum","Lagos","Maputo","Monrovia","Nairobi","Ndjamena","Sao_Tome","Tripoli","Tunis","Windhoek","Cape_Verde","Mauritius"],eu:["Ceuta","Danmarkshavn","Nuuk","Scoresbysund","Thule","Anadyr","Barnaul","Chita","Irkutsk","Kamchatka","Khandyga","Krasnoyarsk","Magadan","Novokuznetsk","Novosibirsk","Omsk","Sakhalin","Srednekolymsk","Tomsk","Ust-Nera","Vladivostok","Yakutsk","Yekaterinburg","Azores","Canary","Faroe","Madeira","Andorra","Astrakhan","Athens","Belgrade","Berlin","Brussels","Bucharest","Budapest","Chisinau","Dublin","Gibraltar","Helsinki","Istanbul","Kaliningrad","Kirov","Kyiv","Lisbon","London","Madrid","Malta","Minsk","Moscow","Paris","Prague","Riga","Rome","Samara","Saratov","Sofia","Tallinn","Tirane","Ulyanovsk","Vienna","Vilnius","Volgograd","Warsaw","Zurich"],as:["Almaty","Amman","Aqtau","Aqtobe","Ashgabat","Atyrau","Baghdad","Baku","Bangkok","Beirut","Bishkek","Choibalsan","Colombo","Damascus","Dhaka","Dili","Dubai","Dushanbe","Famagusta","Gaza","Hebron","Ho_Chi_Minh","Hong_Kong","Hovd","Jakarta","Jayapura","Jerusalem","Kabul","Karachi","Kathmandu","Kolkata","Kuching","Macau","Makassar","Manila","Nicosia","Oral","Pontianak","Pyongyang","Qatar","Qostanay","Qyzylorda","Riyadh","Samarkand","Seoul","Shanghai","Singapore","Taipei","Tashkent","Tbilisi","Tehran","Thimphu","Tokyo","Ulaanbaatar","Urumqi","Yangon","Yerevan","Chagos","Maldives"],au:["Perth","Eucla","Adelaide","Broken_Hill","Darwin","Brisbane","Hobart","Lindeman","Melbourne","Sydney","Lord_Howe"],na:["Adak","Anchorage","Bahia_Banderas","Barbados","Belize","Boise","Cambridge_Bay","Cancun","Chicago","Chihuahua","Ciudad_Juarez","Costa_Rica","Dawson","Dawson_Creek","Denver","Detroit","Edmonton","El_Salvador","Fort_Nelson","Glace_Bay","Goose_Bay","Grand_Turk","Guatemala","Halifax","Havana","Hermosillo","Indiana/Indianapolis","Indiana/Knox","Indiana/Marengo","Indiana/Petersburg","Indiana/Tell_City","Indiana/Vevay","Indiana/Vincennes","Indiana/Winamac","Inuvik","Iqaluit","Jamaica","Juneau","Kentucky/Louisville","Kentucky/Monticello","Los_Angeles","Managua","Martinique","Matamoros","Mazatlan","Menominee","Merida","Metlakatla","Mexico_City","Miquelon","Moncton","Monterrey","New_York","Nome","North_Dakota/Beulah","North_Dakota/Center","North_Dakota/New_Salem","Ojinaga","Panama","Phoenix","Port-au-Prince","Puerto_Rico","Rankin_Inlet","Regina","Resolute","Santo_Domingo","Sitka","St_Johns","Swift_Current","Tegucigalpa","Tijuana","Toronto","Vancouver","Whitehorse","Winnipeg","Yakutat","Yellowknife","Bermuda","Honolulu"],sa:["Araguaina","Argentina/Buenos_Aires","Argentina/Catamarca","Argentina/Cordoba","Argentina/Jujuy","Argentina/La_Rioja","Argentina/Mendoza","Argentina/Rio_Gallegos","Argentina/Salta","Argentina/San_Juan","Argentina/San_Luis","Argentina/Tucuman","Argentina/Ushuaia","Asuncion","Bahia","Belem","Boa_Vista","Bogota","Campo_Grande","Caracas","Cayenne","Cuiaba","Eirunepe","Fortaleza","Guayaquil","Guyana","La_Paz","Lima","Maceio","Manaus","Montevideo","Noronha","Paramaribo","Porto_Velho","Punta_Arenas","Recife","Rio_Branco","Santarem","Santiago","Sao_Paulo","Palmer","South_Georgia","Stanley","Easter","Galapagos"],at:["Cape_Verde","Canary","Faroe","Madeira","Azores","Bermuda","South_Georgia","Stanley"],in:["Mauritius","Maldives","Chagos"],pa:["Palau","Guam","Port_Moresby","Bougainville","Efate","Guadalcanal","Kosrae","Norfolk","Noumea","Auckland","Fiji","Kwajalein","Nauru","Tarawa","Chatham","Apia","Fakaofo","Kanton","Tongatapu","Kiritimati","Pitcairn","Gambier","Marquesas","Rarotonga","Tahiti","Niue","Pago_Pago","Honolulu","Easter","Galapagos"],aq:["Troll","Mawson","Davis","Casey","Rothera","Macquarie","Palmer"],etc:["Greenwich","Universal","Zulu","GMT-14","GMT-13","GMT-12","GMT-11","GMT-10","GMT-9","GMT-8","GMT-7","GMT-6","GMT-5","GMT-4","GMT-3","GMT-2","GMT-1","GMT","GMT+1","GMT+2","GMT+3","GMT+4","GMT+5","GMT+6","GMT+7","GMT+8","GMT+9","GMT+10","GMT+11","GMT+12","UCT","UTC"]};const regions={etc:"Etc",af:"Africa",as:"Asia",au:"Australia",aq:"Antarctica",eu:"Europe",na:"America",sa:"America",at:"Atlantic",in:"Indian",pa:"Pacific"},licenseData=[],licenseApp=[{t:"Petite Vue",y:2021,a:"Yuxi (Evan) You",l:"mit"},{t:"Petite Vue I18n Lite",y:2021,a:"Front Labs",l:"mit"},{t:"Ace Editor",y:2010,a:"Ajax.org B.V.",r:1,l:"bsd"},{t:"MaterialDesign Icons",y:2022,a:"Google",l:"apache2"}];function Credits(a){return{$template:"#credit-template",model:a}}function RegionItem(a,e,t){return{$template:"#region-template",model:a,region:e,i18n:t,list(t){if(a[t]&&e[t]){for(var n="etc"===t?a[t]:a[t].sort(),o=[],i=0;it.t(a).toString().replace(/_/g," ")}}fetch("/static/en.json?COMMIT_HASH").then((a=>a.json())).then((a=>{const e=reactive(createI18n({locale:"en",fallbackLocale:"en",messages:{en:a.en}}));createApp({i18n:e,languages:languages,RegionItem:RegionItem,regions:regions,locations:locations,licenseData:licenseData,licenseApp:licenseApp,Credits:Credits,hostname:null,title:null,config:{hasp:null,wifi:null,mqtt:null,http:null,gui:null,gpio:null,debug:null,time:null,ota:null},info:null,files:null,show:null,t(a){return this.i18n.t(a)},fetchConfig(a){fetch("/api/config/"+a+"/").then((a=>a.json())).then((e=>{this.config[a]=e,this.show=a,document.title=a}))},submitConfig(){let a=this.show;fetch("/api/config/"+a+"/",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(this.config[a])}).then((a=>a.json())).then((e=>{this.config[a]=e,window.history.pushState({},"","/config/"),window.dispatchEvent(new Event("popstate"))}))},submitOldConfig(a){fetch("/api/config/"+a+"/",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(this.config[a])}).then((a=>a.json())).then((a=>{window.location.href="/config"}))},fetchLang(a){fetch("/static/"+a+".json?COMMIT_HASH").then((a=>a.json())).then((e=>{let t=e[a]?e[a]:{};this.i18n.setLocaleMessage(a,t),this.i18n.changeLocale(a)}))},fetchInfo(){fetch("/api/info/").then((a=>a.json())).then((a=>{this.info=a,this.show="info",document.title="Info"}))},fetchAbout(){fetch("/api/credits/").then((a=>a.json())).then((a=>{this.licenseData=a,this.show="about",document.title="About"}))},showPage(a){this.show=a,document.title=a,""!=a&&(a+="/")},showInfo(){this.fetchInfo(),document.title="Info"},showConfig(a){this.fetchConfig(a),document.title=a},showEditor(){fetch("/api/files/").then((a=>a.json())).then((a=>{this.files=a,this.show="edit";var e=document.getElementsByClassName("container__editor")[0];e&&(e.style.display="flex"),document.title="Editor"}))},handleLocation(a,e){const t={"/":()=>{this.showPage("")},"/hasp.htm":()=>{this.showPage("")},"/config/":()=>{this.showPage("config")},"/config/hasp/":()=>{this.showConfig("hasp")},"/config/wifi/":()=>{this.showConfig("wifi")},"/config/http/":()=>{this.showConfig("http")},"/config/mqtt/":()=>{this.showConfig("mqtt")},"/config/gui/":()=>{this.showConfig("gui")},"/config/ftp/":()=>{this.showConfig("ftp")},"/config/time/":()=>{this.showConfig("time")},"/config/debug/":()=>{this.showConfig("debug")},"/config/reset/":()=>{this.showPage("reset")},"/firmware/":()=>{this.showConfig("ota")},"/info/":()=>{this.showInfo()},"/screenshot/":()=>{this.showPage("screenshot")},"/about/":()=>{this.fetchAbout()},"/edit/":()=>{this.showEditor()},"/edit":()=>{},"/static/editor.htm":()=>{},"/reboot/":()=>{this.showPage("reboot")}};"function"==typeof t[a]?t[a]():"/"!==a.slice(-1)&&"function"==typeof t[a+"/"]?t[a+"/"]():t["/"];const n=document.getElementsByClassName("container__editor")[0];n&&(n.style.display=a.includes("/edit")?"flex":"none"),window.scrollTo({top:e})},mounted(){let a=decodeURIComponent(document.cookie).split(";");for(let e=0;e{const e=window.location.pathname;var t=a.state,n=0;t&&(n=t.scrollTop),this.handleLocation(e,n)};const e=window.location.pathname;this.handleLocation(e,0)},route(a){(a=a||window.event).preventDefault();const e=a.currentTarget.href||a.target.parentNode.href,t=new URL(e).pathname;if(window.location.pathname!=t){var n={path:window.location.href||a.target.href,scrollTop:document.body.scrollTop};window.history.replaceState(n,"",document.location.pathname),n={path:window.location.href,scrollTop:0},window.history.pushState(n,"",t),window.dispatchEvent(new Event("popstate"))}},goto(a){if(window.location.pathname!=a){var e={path:window.location.href,scrollTop:document.body.scrollTop};window.history.replaceState(e,"",document.location.pathname),e={path:window.location.href,scrollTop:0},window.history.pushState(e,"",a),window.dispatchEvent(new Event("popstate"))}},ref(a){},aref(a){setTimeout((function(){}),1e3*a)},upd(a){var e=(new Date).getTime();document.getElementById("bmp").src="/screenshot?a="+a+"&q="+e}}).directive("t",(({el:a,get:t,effect:n})=>n((()=>a.textContent=e.t(t()))))).directive("ts",(({el:a,get:t,effect:n})=>n((()=>a.textContent=e.t(t()).replace(/_/g," "))))).mount()}));
\ No newline at end of file
+import{createApp,reactive,createI18n}from"/static/petite-vue.hasp.js?COMMIT_HASH";const languages=[{code:"en",name:"English"},{code:"nl",name:"Nederlands"},{code:"fr",name:"Français"}];var locations={af:["Abidjan","Algiers","Bissau","Cairo","Casablanca","El_Aaiun","Johannesburg","Juba","Khartoum","Lagos","Maputo","Monrovia","Nairobi","Ndjamena","Sao_Tome","Tripoli","Tunis","Windhoek","Cape_Verde","Mauritius"],eu:["Ceuta","Danmarkshavn","Nuuk","Scoresbysund","Thule","Anadyr","Barnaul","Chita","Irkutsk","Kamchatka","Khandyga","Krasnoyarsk","Magadan","Novokuznetsk","Novosibirsk","Omsk","Sakhalin","Srednekolymsk","Tomsk","Ust-Nera","Vladivostok","Yakutsk","Yekaterinburg","Azores","Canary","Faroe","Madeira","Andorra","Astrakhan","Athens","Belgrade","Berlin","Brussels","Bucharest","Budapest","Chisinau","Dublin","Gibraltar","Helsinki","Istanbul","Kaliningrad","Kirov","Kyiv","Lisbon","London","Madrid","Malta","Minsk","Moscow","Paris","Prague","Riga","Rome","Samara","Saratov","Sofia","Tallinn","Tirane","Ulyanovsk","Vienna","Vilnius","Volgograd","Warsaw","Zurich"],as:["Almaty","Amman","Aqtau","Aqtobe","Ashgabat","Atyrau","Baghdad","Baku","Bangkok","Beirut","Bishkek","Choibalsan","Colombo","Damascus","Dhaka","Dili","Dubai","Dushanbe","Famagusta","Gaza","Hebron","Ho_Chi_Minh","Hong_Kong","Hovd","Jakarta","Jayapura","Jerusalem","Kabul","Karachi","Kathmandu","Kolkata","Kuching","Macau","Makassar","Manila","Nicosia","Oral","Pontianak","Pyongyang","Qatar","Qostanay","Qyzylorda","Riyadh","Samarkand","Seoul","Shanghai","Singapore","Taipei","Tashkent","Tbilisi","Tehran","Thimphu","Tokyo","Ulaanbaatar","Urumqi","Yangon","Yerevan","Chagos","Maldives"],au:["Perth","Eucla","Adelaide","Broken_Hill","Darwin","Brisbane","Hobart","Lindeman","Melbourne","Sydney","Lord_Howe"],na:["Adak","Anchorage","Bahia_Banderas","Barbados","Belize","Boise","Cambridge_Bay","Cancun","Chicago","Chihuahua","Ciudad_Juarez","Costa_Rica","Dawson","Dawson_Creek","Denver","Detroit","Edmonton","El_Salvador","Fort_Nelson","Glace_Bay","Goose_Bay","Grand_Turk","Guatemala","Halifax","Havana","Hermosillo","Indiana/Indianapolis","Indiana/Knox","Indiana/Marengo","Indiana/Petersburg","Indiana/Tell_City","Indiana/Vevay","Indiana/Vincennes","Indiana/Winamac","Inuvik","Iqaluit","Jamaica","Juneau","Kentucky/Louisville","Kentucky/Monticello","Los_Angeles","Managua","Martinique","Matamoros","Mazatlan","Menominee","Merida","Metlakatla","Mexico_City","Miquelon","Moncton","Monterrey","New_York","Nome","North_Dakota/Beulah","North_Dakota/Center","North_Dakota/New_Salem","Ojinaga","Panama","Phoenix","Port-au-Prince","Puerto_Rico","Rankin_Inlet","Regina","Resolute","Santo_Domingo","Sitka","St_Johns","Swift_Current","Tegucigalpa","Tijuana","Toronto","Vancouver","Whitehorse","Winnipeg","Yakutat","Yellowknife","Bermuda","Honolulu"],sa:["Araguaina","Argentina/Buenos_Aires","Argentina/Catamarca","Argentina/Cordoba","Argentina/Jujuy","Argentina/La_Rioja","Argentina/Mendoza","Argentina/Rio_Gallegos","Argentina/Salta","Argentina/San_Juan","Argentina/San_Luis","Argentina/Tucuman","Argentina/Ushuaia","Asuncion","Bahia","Belem","Boa_Vista","Bogota","Campo_Grande","Caracas","Cayenne","Cuiaba","Eirunepe","Fortaleza","Guayaquil","Guyana","La_Paz","Lima","Maceio","Manaus","Montevideo","Noronha","Paramaribo","Porto_Velho","Punta_Arenas","Recife","Rio_Branco","Santarem","Santiago","Sao_Paulo","Palmer","South_Georgia","Stanley","Easter","Galapagos"],at:["Cape_Verde","Canary","Faroe","Madeira","Azores","Bermuda","South_Georgia","Stanley"],in:["Mauritius","Maldives","Chagos"],pa:["Palau","Guam","Port_Moresby","Bougainville","Efate","Guadalcanal","Kosrae","Norfolk","Noumea","Auckland","Fiji","Kwajalein","Nauru","Tarawa","Chatham","Apia","Fakaofo","Kanton","Tongatapu","Kiritimati","Pitcairn","Gambier","Marquesas","Rarotonga","Tahiti","Niue","Pago_Pago","Honolulu","Easter","Galapagos"],aq:["Troll","Mawson","Davis","Casey","Rothera","Macquarie","Palmer"],etc:["Greenwich","Universal","Zulu","GMT-14","GMT-13","GMT-12","GMT-11","GMT-10","GMT-9","GMT-8","GMT-7","GMT-6","GMT-5","GMT-4","GMT-3","GMT-2","GMT-1","GMT","GMT+1","GMT+2","GMT+3","GMT+4","GMT+5","GMT+6","GMT+7","GMT+8","GMT+9","GMT+10","GMT+11","GMT+12","UCT","UTC"]};const regions={etc:"Etc",af:"Africa",as:"Asia",au:"Australia",aq:"Antarctica",eu:"Europe",na:"America",sa:"America",at:"Atlantic",in:"Indian",pa:"Pacific"},licenseData=[],licenseApp=[{t:"Petite Vue",y:2021,a:"Yuxi (Evan) You",l:"mit"},{t:"Petite Vue I18n Lite",y:2021,a:"Front Labs",l:"mit"},{t:"Ace Editor",y:2010,a:"Ajax.org B.V.",r:1,l:"bsd"},{t:"MaterialDesign Icons",y:2022,a:"Google",l:"apache2"}];function Credits(a){return{$template:"#credit-template",model:a}}function RegionItem(a,o,e){return{$template:"#region-template",model:a,region:o,i18n:e,list(e){if(a[e]&&o[e]){for(var n="etc"===e?a[e]:a[e].sort(),t=[],i=0;ie.t(a).toString().replace(/_/g," ")}}fetch("/static/en.json?COMMIT_HASH").then((a=>a.json())).then((a=>{const o=reactive(createI18n({locale:"en",fallbackLocale:"en",messages:{en:a.en}}));createApp({i18n:o,languages:languages,RegionItem:RegionItem,regions:regions,locations:locations,licenseData:licenseData,licenseApp:licenseApp,Credits:Credits,hostname:null,title:null,config:{hasp:null,wifi:null,mqtt:null,http:null,gui:null,gpio:null,debug:null,time:null,ota:null},info:null,files:null,show:null,t(a){return this.i18n.t(a)},fetchConfig(a){fetch("/api/config/"+a+"/").then((a=>a.json())).then((o=>{this.config[a]=o,this.show=a,document.title=a}))},submitConfig(){let a=this.show;fetch("/api/config/"+a+"/",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(this.config[a])}).then((a=>a.json())).then((o=>{this.config[a]=o,window.history.pushState({},"","/config/"),window.dispatchEvent(new Event("popstate"))}))},submitOldConfig(a){fetch("/api/config/"+a+"/",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(this.config[a])}).then((a=>a.json())).then((a=>{window.location.href="/config"}))},fetchLang(a){fetch("/static/"+a+".json?COMMIT_HASH").then((a=>a.json())).then((o=>{let e=o[a]?o[a]:{};this.i18n.setLocaleMessage(a,e),this.i18n.changeLocale(a),console.log(a)}))},fetchInfo(){fetch("/api/info/").then((a=>a.json())).then((a=>{this.info=a,this.show="info",document.title="Info"}))},fetchAbout(){fetch("/api/credits/").then((a=>a.json())).then((a=>{this.licenseData=a,this.show="about",document.title="About"}))},showPage(a){console.log("showPage "+a),this.show=a,document.title=a,""!=a&&(a+="/")},showInfo(){console.log("showInfo"),this.fetchInfo(),document.title="Info"},showConfig(a){console.log("showConfig "+a),this.fetchConfig(a),document.title=a},showEditor(){console.log("showEditor"),fetch("/api/files/").then((a=>a.json())).then((a=>{this.files=a,this.show="edit";var o=document.getElementsByClassName("container__editor")[0];o&&(o.style.display="flex"),document.title="Editor"}))},handleLocation(a,o){const e={"/":()=>{this.showPage("")},"/hasp.htm":()=>{this.showPage("")},"/config/":()=>{this.showPage("config")},"/config/hasp/":()=>{this.showConfig("hasp")},"/config/wifi/":()=>{this.showConfig("wifi")},"/config/http/":()=>{this.showConfig("http")},"/config/mqtt/":()=>{this.showConfig("mqtt")},"/config/gui/":()=>{this.showConfig("gui")},"/config/ftp/":()=>{this.showConfig("ftp")},"/config/time/":()=>{this.showConfig("time")},"/config/debug/":()=>{this.showConfig("debug")},"/config/reset/":()=>{this.showPage("reset")},"/firmware/":()=>{this.showConfig("ota")},"/info/":()=>{this.showInfo()},"/screenshot/":()=>{this.showPage("screenshot")},"/about/":()=>{this.fetchAbout()},"/edit/":()=>{this.showEditor()},"/edit":()=>{},"/static/editor.htm":()=>{},"/reboot/":()=>{this.showPage("reboot")}};"function"==typeof e[a]?(console.log("Location: "+a),e[a]()):"/"!==a.slice(-1)&&"function"==typeof e[a+"/"]?(console.log("Location: "+a),e[a+"/"]()):(console.log("Not found: "+a),e["/"]);const n=document.getElementsByClassName("container__editor")[0];n&&(n.style.display=a.includes("/edit")?"flex":"none"),window.scrollTo({top:o})},mounted(){let a=decodeURIComponent(document.cookie).split(";");for(let o=0;o{const o=window.location.pathname;console.log("Popstate: "+o),console.log(a);var e=a.state,n=0;e&&(n=e.scrollTop),this.handleLocation(o,n)};const o=window.location.pathname;this.handleLocation(o,0),console.log("App Mounted")},route(a){console.log("Routing..."),a=a||window.event,console.log(a.target),a.preventDefault();const o=a.currentTarget.href||a.target.parentNode.href,e=new URL(o).pathname;if(window.location.pathname!=e){console.log("Push Route: "+e);var n={path:window.location.href||a.target.href,scrollTop:document.body.scrollTop};window.history.replaceState(n,"",document.location.pathname),n={path:window.location.href,scrollTop:0},window.history.pushState(n,"",e),window.dispatchEvent(new Event("popstate"))}},goto(a){if(console.log("Goto..."),window.location.pathname!=a){console.log("Push Route: "+a);var o={path:window.location.href,scrollTop:document.body.scrollTop};window.history.replaceState(o,"",document.location.pathname),o={path:window.location.href,scrollTop:0},window.history.pushState(o,"",a),window.dispatchEvent(new Event("popstate"))}},ref(a){},aref(a){setTimeout((function(){}),1e3*a)},upd(a){var o=(new Date).getTime();document.getElementById("bmp").src="/screenshot?a="+a+"&q="+o}}).directive("t",(({el:a,get:e,effect:n})=>n((()=>a.textContent=o.t(e()))))).directive("ts",(({el:a,get:e,effect:n})=>n((()=>a.textContent=o.t(e()).replace(/_/g," "))))).mount(),console.log("JS Loaded...")}));
\ No newline at end of file
diff --git a/data/script.js b/data/script.js
index 9a9fcc6f..541761af 100644
--- a/data/script.js
+++ b/data/script.js
@@ -1,133 +1 @@
-function aref(e) {
- setTimeout(function () {
- ref("");
- }, 1e3 * e);
-}
-function upd(e) {
- var t = new Date().getTime();
- return (document.getElementById("bmp").src = "?a=" + e + "&q=" + t), !1;
-}
-async function ref(e) {
- var t = new Date().getTime();
- (await fetch("/screenshot?d=" + t + "&a=" + e)).ok ? upd(e) : aref(2);
-}
-function ihtm(id, html) {
- if (obj = document.getElementById(id))
- obj.innerHTML = html;
-}
-function about() {
- ihtm("lic",'openHASP Copyright© 2019-2022 Francis Van RoieMIT License
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files(the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and / or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
');
- ihtm("pkg","Based on the previous work of the following open source developers:
HASwitchPlate Copyright© 2019 Allen Derusha allen @derusha.orgMIT License
LVGL Copyright© 2021 LVGL KftMIT License
LovyanGFX Copyright© 2020 lovyan03 (https://github.com/lovyan03) All rights reserved.FreeBSD License
TFT_eSPI Copyright© 2020 Bodmer (https://github.com/Bodmer) All rights reserved.FreeBSD License
Adafruit_GFX Copyright© 2012 Adafruit Industries. All rights reservedBSD License
ArduinoJson Copyright© 2014-2021 Benoit BLANCHONMIT License
PubSubClient Copyright© 2008-2015 Nicholas O'LearyMIT License
ArduinoLog Copyright© 2017,2018 Thijs Elenbaas, MrRobot62, rahuldeo2047, NOX73, dhylands, Josha blemasle, mfalkviddMIT License
QR Code generator Copyright© Project NayukiMIT License
SimpleFTPServer Copyright© 2017 Renzo Mischianti www.mischianti.org All right reserved.MIT License
AceButton Copyright© 2018 Brian T. ParkMIT License
");
-}
-function handleSubmit(e) {
- e.preventDefault();
- const t = new FormData(e.target),
- o = Object.fromEntries(t.entries());
- console.log({ value: o });
-}
-function info2() {
- try {
- data = JSON.parse(this.response);
- var e = "";
- for (let t in data) {
- e += `${t} `;
- for (let o in data[t])
- e += `${o}: ${data[t][o]} `;
- }
- (e += "
"), (document.getElementById("info").innerHTML = e);
- } catch (e) {
- console.log('invalid json');
- }
-}
-function loader(e, t, o) {
- window.addEventListener("load", function () {
- var n = new XMLHttpRequest();
- n.addEventListener("load", o), n.open(e, t), n.send();
- });
-}
-function info() {
- if (obj = document.getElementById("info")) {
- var n = new XMLHttpRequest();
- n.addEventListener("load", info2), n.open("GET", "/api/info/"), n.send();
- }
-}
-function fill() {
- try {
- data = JSON.parse(this.response);
- for (const form of document.forms) populate(form, data);
- } catch (e) {
- console.log('invalid json');
- }
-}
-function filler(e, t) {
- window.addEventListener("load", function () {
- var o = new XMLHttpRequest();
- o.addEventListener("load", fill), o.open(e, t), o.send();
- });
-}
-function filler2(e, t) {
- var o = new XMLHttpRequest();
- o.addEventListener("load", fill), o.open(e, t), o.send();
-}
-function forms() {
- document.querySelectorAll("form").forEach(function(f) {
- console.log(f.id);
- filler2("GET", "/api/config/" + f.id + "/");
- });
-}
-function populate(e, t, o) {
- for (var n in t)
- if (t.hasOwnProperty(n)) {
- var r = n,
- i = t[n];
- if (
- (void 0 === i && (i = ""),
- null === i && (i = ""),
- void 0 !== o && (r = o + "[" + n + "]"),
- i.constructor === Array)
- )
- r += "[]";
- else if ("object" == typeof i) {
- populate(e, i, r);
- continue;
- }
- var a = e.elements.namedItem(r);
- if (a)
- switch (a.type || a[0].type) {
- default:
- a.value = i;
- break;
- case "radio":
- for (
- var s = i.constructor === Array ? i : [i], c = 0;
- c < a.length;
- c++
- )
- a[c].checked = s.indexOf(Number(a[c].value)) > -1;
- break;
- case "checkbox":
- (s = i.constructor === Array ? i : [i]),
- (a.checked = s.indexOf(Number(a.value)) > -1);
- break;
- case "select-multiple":
- s = i.constructor === Array ? i : [i];
- for (var p = 0; p < a.options.length; p++)
- a.options[p].selected = s.indexOf(a.options[p].value) > -1;
- break;
- case "select":
- case "select-one":
- a.value = i.toString() || i;
- break;
- case "date":
- a.value = new Date(i).toISOString().split("T")[0];
- }
- }
-}
-
-
-window.addEventListener('load', (event) => {
- // console.log('The page has fully loaded');
- forms();
- info();
- about();
-});
\ No newline at end of file
+var ctx_el;function _(e){return document.getElementById(e)}function hidectx(){_("ctx").style.display="none",ctx_el&&ctx_el.classList.remove("selitem"),ctx_el=void 0}function doesFontExist(e){var t=document.createElement("canvas"),n=t.getContext("2d"),o="abcdefghijklmnopqrstuvwxyz0123456789";n.font="72px monospace";var a=n.measureText(o).width;return n.font="72px '"+e+"', monospace",t=null,n.measureText(o).width!=a}function createEditor(e,t,n,o,a){function i(e){let t=/(?:\.([^.]+))?$/.exec(e)[1];if(void 0!==typeof t)switch(t){case"htm":case"html":return"html";case"js":return"javascript";case"cmd":case"json":case"jsonl":return"json";case"css":case"svg":case"xml":return t}return"plain_text"}void 0===n&&(n=i(t)),void 0===a&&(a="text/"+n);["basePath","modePath","themePath"].forEach((e=>{ace.config.set(e,"https://cdnjs.cloudflare.com/ajax/libs/ace/1.15.2")}));var c=ace.edit(e,{useWorker:!1,wrap:!0,indentedSoftWrap:!1,showPrintMargin:!1,highlightGutterLine:!0,useSoftTabs:!0,tabSize:2});c.setFontSize(parseFloat(getComputedStyle(document.documentElement).fontSize)),c.setReadOnly(!0),c.getSession().setUndoManager(new ace.UndoManager),void 0===o&&(o=window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"monokai":"textmate");var s=_("save"),l=_("undo"),r=_("redo"),d=_("cut"),m=_("copy"),u=_("paste"),p=_("font"),f=_("fontsize"),g="none"!==_(e).display;f.value=parseFloat(c.getFontSize()).toFixed(1),p.onchange=function(){c.setOption("fontFamily","'"+p.value+"',monospace")},f.onchange=function(){var e=parseFloat(f.value);!isNaN(e)&&e>=9&&e<=40&&c.setFontSize(e),f.value=parseFloat(c.getFontSize()).toFixed(1)};function h(){let e=!g||c.session.getSelection().isEmpty();d.disabled=e,m.disabled=e}function y(){let e=c.session.getUndoManager();s.disabled=!g||e.isClean(),l.disabled=!g||!e.hasUndo(),r.disabled=!g||!e.hasRedo()}function v(){if(void 0===t)return;const e=function(e){var t=e.getValue();try{var n=JSON.parse(t);return JSON.stringify(n)}catch(e){return t+""}}(c),n=new FormData;n.append("data",new Blob([e],{type:a}),t),fetch("/edit",{method:"POST",body:n}).then((e=>e.ok?e.text().then((e=>{console.log("Save OK /edit "+e)})):e.text().then((e=>{throw console.log("Save FAIL /edit"),new Error(e)})))).then((e=>{console.log(e),generateToast({message:"Saved "+t,background:"#ddd",color:"#000"})})).catch((e=>{console.warn("AbortError"===e.name?"Promise Aborted":"Promise Rejected"),alert(e)})).finally((()=>{y()}))}function x(){var e=c.getCopyText();if(window.clipboardData&&window.clipboardData.setData)return window.clipboardData.setData("Text",e);if(document.queryCommandSupported&&document.queryCommandSupported("copy")){c.focus();try{return document.execCommand("copy")}catch(t){return console.warn("Copy to clipboard failed.",t),prompt("Copy to clipboard: Ctrl+C, Enter",e)}}}function w(e){_("name").innerHTML=e;fetch(e).then((t=>t.ok?(console.log("OK "+e),t.text()):t.text().then((e=>{throw console.log("ERROR "+url),new Error(e)})))).then((e=>{try{var t=JSON.parse(e);c.setValue(JSON.stringify(t,null,4)),console.log("parse json OK")}catch(t){c.setValue(e),console.log("parse json FAIL")}null!==_("editor")&&(_("editor").style.display="block"),null!==_("preview")&&(_("preview").style.display="none"),g=!0,c.setReadOnly(!1),c.focus(),y()})).catch((e=>{console.log(e),alert(e),c.setReadOnly(!0)})).finally((()=>{c.resize(!0),c.scrollToLine(1,!0,!0,(function(){})),c.gotoLine(1,0,!0),c.clearSelection(),c.session.getUndoManager().reset()}))}return["Courier New","Monaco","Lucida Console","Monospace","ui-monospace","Roboto Mono","Inconsolata","IBM Plex Mono","Space Mono","PT Mono","Ubuntu Mono","Nanum Gothic Coding","Cousine","Fira Mono","Share Tech Mono","Courier Prime","Anonymous Pro","Cutive Mono","Overpass Mono","Fira Code","VT323","DM Mono","Oxygen Mono","Nova Mono","B612 Mono","Spline Sans Mono","Noto Sans Mono","Major Mono Display","Azeret Mono","Red Hat Mono","Syne Mono","Xanh Mono"].sort().forEach((function(e,t){if(doesFontExist(e)){var n=document.createElement("option");n.text=e,p.add(n)}})),null!==s&&null!==l&&null!==r&&c.on("input",y),c.session.selection.on("changeCursor",h),s.onclick=v,l.onclick=e=>{c.undo()&&c.focus()},r.onclick=e=>{c.redo()&&c.focus()},d.onclick=e=>{x()&&c.execCommand("cut")},m.onclick=e=>{x()&&c.execCommand("copy")},u.onclick=function(){try{navigator.clipboard.readText().then((e=>{c.execCommand("paste",e)})).catch((e=>{u.disabled=!0}))}catch{u.disabled=!0}},c.loadUrl=(e,o)=>{n=i(t=e+o),a="text/"+n,"plain"!==n&&c.getSession().setMode("ace/mode/"+n),w(e+o)},c.hide=()=>{g=!1,y(),h(),_("editor").style.display="none"},"plain"!==n&&c.getSession().setMode("ace/mode/"+n),c.setTheme("ace/theme/"+o),c.$blockScrolling=1/0,c.commands.addCommand({name:"save",bindKey:{win:"Ctrl-S",mac:"Command-S"},exec:v,readOnly:!1}),c.commands.addCommand({name:"undo",bindKey:{win:"Ctrl-Z",mac:"Command-Z"},exec:function(){c.undo()}}),c.commands.addCommand({name:"redo",bindKey:{win:"Ctrl-Y",mac:"Command-Y"},exec:function(){c.redo()}}),void 0!==t&&w(t),c.resize(),c}function uploadFileAsync(e,t,n,o,a,i){fetchData("/edit","POST",e).then((e=>{generateToast({message:"Upload "+n+"/"+o+" "+t+" done.",background:"#ddd",color:"#000"}),n==o&&listFiles(a,i)}))}function doUpload(e,t){const n=_("upload"),o=n.files.length;if(0!==o)for(let a=0;a=0}function isText(e){if(isFolder(e))return!1;var t=/(?:\.([^.]+))?$/.exec(e.name)[1];if(void 0!==typeof t)switch(t){case"txt":case"cmd":case"json":case"jsonl":case"htm":case"html":case"js":case"c":case"cpp":case"css":case"svg":case"xml":return!0}return!1}function isImage(e){if(isFolder(e))return!1;var t=/(?:\.([^.]+))?$/.exec(e.name)[1];if(void 0!==typeof t)switch(t){case"bmp":case"png":case"jpg":case"gif":case"svg":return!0}return!1}function isAudio(e){if(isFolder(e))return!1;var t=/(?:\.([^.]+))?$/.exec(e.name)[1];if(void 0!==typeof t)switch(t){case"wav":case"mp3":case"aac":case"m4a":case"wma":return!0}return!1}function icon(e){if(isFolder(e))return"dir";if(isImage(e))return"image";if(isAudio(e))return"audio";var t=/(?:\.([^.]+))?$/.exec(e.name)[1];if(void 0!==typeof t)switch(t){case"cmd":case"css":case"json":case"jsonl":case"ttf":return t;case"zip":case"gz":return"zip";case"html":case"htm":return"html"}return"file"}function preview(e,t){if(isImage(e)){let n=t+e.name;const o=_("preview");o.innerHTML=' ',o.style.display="block",ace.edit("editor").hide(),_("name").innerHTML=n}}function edit(e,t){isText(e)&&(ace.edit("editor").loadUrl(t,e.name),_("preview").style.display="none")}function url(e,t){console.log("click "+t+e.name),isImage(e)?preview(e,t):isText(e)&&edit(e,t)}async function fetchData(e,t,n,o){await fetch(e,{method:t,body:n}).then((n=>n.ok?(console.log(t+" OK "+e),n.text()):n.text().then((n=>{throw console.log(t+" FAIL "+e),new Error(n)})))).then((e=>{o&&o.remove(),console.log(e)})).catch((e=>{console.warn("AbortError"===e.name?"Promise Aborted":"Promise Rejected"),alert(e)})).finally((()=>{}))}function download(e,t){console.log("download "+t+e.name),document.getElementById("download-frame").src=t+e.name+"?download=true"}function remove(e,t,n){let o=t+e.name;isFolder(e)&&(o+="/"),console.log("remove "+o);const a=new FormData;a.append("path",o),fetchData("/edit","DELETE",a,n)}function create(e,t,n){var o=window.prompt("Create File in "+e,"");if(null==o||""==o||o.includes("/"))return;const a=new FormData;a.append("path",e+o),fetchData("/edit","PUT",a),fetch("/api/files/").then((e=>e.json())).then((o=>{t&&t.remove(),listFiles(n,e),console.log(o)}))}function upload(e,t){_("upload").onchange=()=>{doUpload(e,t)},_("upload").click()}function ctx(e,t,n,o){e.preventDefault(),ctx_el=o;let a,i=isFolder(t),c=_("ctx");c.style.display="block",a=c.getElementsByTagName("li")[0],a.onclick=i?function(){hidectx(),create(n+t.name+"/",o.children.item(1),o)}:function(){hidectx(),create(n,o.parentNode,o.parentNode.parentNode)},a.style.display=i?"block":"none",a=c.getElementsByTagName("li")[1],i&&(a.onclick=function(){hidectx(),upload(o,n+t.name+"/")}),a.style.display=i?"block":"none",a=c.getElementsByTagName("li")[2],a.onclick=function(){edit(t,n),hidectx()},a.style.display=isText(t)?"block":"none",a=c.getElementsByTagName("li")[3],a.onclick=function(){preview(t,n),hidectx()},a.style.display=isImage(t)?"block":"none",a=c.getElementsByTagName("li")[4],a.onclick=function(){download(t,n),hidectx()},a.style.display=i?"none":"block",a=c.getElementsByTagName("li")[5],a.onclick=function(){remove(t,n,o),hidectx()},a.style.display=n?"block":"none";var s=document.body.scrollTop?document.body.scrollTop:document.documentElement.scrollTop,l=document.body.scrollLeft?document.body.scrollLeft:document.documentElement.scrollLeft,r=e.clientX+l+10,d=e.clientY+s-20,m=(c.offsetWidth,c.offsetHeight),u=document.documentElement.clientHeight;d+m>u&&(d=u-m-20),c.style.left=r+"px",c.style.top=d+"px",o&&o.classList.add("selitem")}function drag(e,t,n){let o=n+t.name;isFolder(t)&&(o+="/"),e.dataTransfer.setData("text",o),console.log("drag start "+o)}function drop(e,t){let n=e.dataTransfer.getData("text");n.startsWith(t)||(e.preventDefault(),console.log("Move "+n+" to "+t))}function listFiles(e,t){return console.log("listFiles"),fetch("/api/files/?dir="+t).then((e=>e.json())).then((n=>{if(0==n.length)return!1;let o=e.getElementsByTagName("div")[0];o&&(o.onclick=n=>{i.remove(),o.onclick=()=>{listFiles(e,t)},n.stopPropagation()});let a=e.getElementsByTagName("ul");for(let e=0;e{drag(event,e,t)},a.appendChild(s),s.innerHTML=''+o+" ",isFolder(e)){let n=t+e.name+"/";s.classList.add("bold"),s.onclick=function(e){listFiles(a,n)},s.ondragover=e=>{e.preventDefault()},s.ondrop=e=>{drop(e,n)}}else(isText(e)||isImage(e)||isAudio(e))&&(s.onclick=function(n){url(e,t)});s.oncontextmenu=n=>{ctx(n,e,t,a)}}return e.scrollIntoView(),!0}))}function generateToast({message:e,background:t="#00214d",color:n="#fffffe",length:o="7000ms"}){_("toast").insertAdjacentHTML("afterbegin",`\n ${e}\n
`);const a=_("toast").firstElementChild;a.addEventListener("animationend",(()=>a.remove()))}document.addEventListener("blur",(function(){hidectx()})),document.addEventListener("DOMContentLoaded",(function(){createEditor("editor",void 0,void 0,void 0);listFiles(_("tree"),"/"),_("tree").getElementsByTagName("div")[0].oncontextmenu=e=>{ctx(e,{name:"",children:[]},"",_("tree"))},_("load").onclick=function(e){const t=new FormData;t.append("load",""),fetchData("/edit","PUT",t)},_("init").onclick=function(e){const t=new FormData;t.append("init",""),fetchData("/edit","PUT",t)},_("home").onclick=function(e){window.location.href="/"},_("page").onchange=function(e){const t=new FormData;t.append("page",_("page").value),fetchData("/edit","PUT",t)}})),document.addEventListener("DOMContentLoaded",(function(){const e=document.getElementById("dragMe"),t=e.previousElementSibling,n=e.nextElementSibling;let o=0,a=0,i=0;const c=function(a){const c=a.clientX-o,s=(a.clientY,100*(i+c)/e.parentNode.getBoundingClientRect().width);t.style.width=`${s}%`,t.style.right=t.style.width,e.style.cursor="col-resize",document.body.style.cursor="col-resize",t.style.userSelect="none",t.style.pointerEvents="none",n.style.userSelect="none",n.style.pointerEvents="none",ace.edit("editor").resize()},s=function(){e.style.removeProperty("cursor"),document.body.style.removeProperty("cursor"),t.style.removeProperty("user-select"),t.style.removeProperty("pointer-events"),n.style.removeProperty("user-select"),n.style.removeProperty("pointer-events"),document.removeEventListener("mousemove",c),document.removeEventListener("mouseup",s)};e.addEventListener("mousedown",(function(e){o=e.clientX,a=e.clientY,i=t.getBoundingClientRect().width,document.addEventListener("mousemove",c),document.addEventListener("mouseup",s)})),e.addEventListener("dblclick",(()=>{var e=t.style.visibility="hidden"===t.style.visibility;t.style.visibility=e?"unset":"hidden",t.style.position=e?"unset":"absolute",ace.edit("editor").resize()}))}));
\ No newline at end of file
diff --git a/data/static/edit.htm.gz b/data/static/edit.htm.gz
index cbea9b3c1de02007dee1907d53edf91de06a210e..8ddca4a7d672f2b213bc2594cf0e803ee0e2fa0a 100644
GIT binary patch
literal 1132
zcmV-y1e5z8iwFqxL-At*|7B!pbS`LgZ2+xS+iv4F5d9TZeb@wDNlDNEU9Y8H(iV%N
zTNu08=YS?h7GsJO$dPO}$iH_;NsjN>qJ5D>&YYRyTn;t;Mi`Ep2BHdURZRUeQcN%M
z7<5c)V4|4TfGpw_vkowiTP%|w;$c^_8uGZ4uxgCOIO0YlXwq6qfmJS`lN^$;cq_F;
z$yDMvQ;^@13CFE$FmjgXafR5pNtSV;pIpk7X+^1+g_N5*V^3_IDLHo;w6g+u=M
z?q1yAl;ydQM)iL03;-o6C`<$T!_S{*(eF}0^qY`q>@@3TQzi8>vY_(V;YNY00I0B)
zh4R%$N4=18x9j3-U_o*gC#iW35y~t~>bk`iFeFOWYylYwzFXI7w9-Sz(v;MS6r|9@
z2Ni}qXHS50OBr>c%JEUi|HhUxt)=$nzO;=!X)G*?Ry`}}FbS)~A7P@6hW8B=q7(x3{%MCa&09pHgT2bs
z6y*ncPP2Y{D>j-d$(Q+?-pkeFRiD@Ex0IplH^rB*eFXDX9qT9pAsw45U-j`TE3jhGh;6R)J
literal 6707
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
JddFm1004d_^f~|l
diff --git a/data/static/en.json.gz b/data/static/en.json.gz
index 4c8f258b830a7625a075a340fef126a30feae784..69abbe80c1c975174cdf4ec2baab633b6cbf3bee 100644
GIT binary patch
delta 16
Xcmey!`;nJjzMF&Ni}S~g?624WHva~W
delta 16
Xcmey!`;nJjzMF%?@Z+nE?624WHJb)<
diff --git a/data/static/main.js.gz b/data/static/main.js.gz
index d5feb9cfe45258c859f13399ab4baf95ef2395b2..1db00d055cc202de49bf4131c7a2092c0fd625e2 100644
GIT binary patch
literal 4136
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
KxEF}RBme-uKi;tb
diff --git a/data/static/script.js.gz b/data/static/script.js.gz
index 3fc28f3e34a95069787f59cebe072c725411a548..0bbc6fe8b30ec3a0a89a047a11f384b8e3c763c2 100644
GIT binary patch
literal 4484
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
Wnv~`NVUFw<;QtR1fumt$F#rJR6T!y-
literal 2268
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 ');
--trash: url('data:image/svg+xml, ');
--download: url('data:image/svg+xml, ');
+ --upload: url('data:image/svg+xml, ');
+ --flash: url('data:image/svg+xml, ');
--file: url('data:image/svg+xml, ');
--dir: url('data:image/svg+xml, ');
--diropen: url('data:image/svg+xml, ');
@@ -17,8 +19,10 @@
--zip: url('data:image/svg+xml, ');
--cmd: url('data:image/svg+xml, ');
--css: url('data:image/svg+xml, ');
+ --ttf: url('data:image/svg+xml, ');
--eye: url('data:image/svg+xml, ');
--json: url('data:image/svg+xml, ');
+ --audio: url('data:image/svg+xml, ');
}
.fn:hover {
@@ -57,12 +61,14 @@
.fa-browse { mask-image: var(--browse); -webkit-mask-image: var(--browse)}
.fa-cog { mask-image: var(--cog); -webkit-mask-image: var(--cog)}
.fa-download{ mask-image: var(--download); -webkit-mask-image: var(--download)}
+.fa-upload { mask-image: var(--upload); -webkit-mask-image: var(--upload)}
.fa-home { mask-image: var(--home); -webkit-mask-image: var(--home)}
.fa-info { mask-image: var(--info); -webkit-mask-image: var(--info)}
.fa-ota { mask-image: var(--ota); -webkit-mask-image: var(--ota)}
.fa-shot { mask-image: var(--shot); -webkit-mask-image: var(--shot)}
.fa-star { mask-image: var(--star); -webkit-mask-image: var(--star)}
.fa-trash { mask-image: var(--trash); -webkit-mask-image: var(--trask)}
+.fa-flash { mask-image: var(--flash); -webkit-mask-image: var(--flash)}
.fa-file { mask-image: var(--file); -webkit-mask-image: var(--file)}
.fa-dir { mask-image: var(--dir); -webkit-mask-image: var(--dir)}
.fa-diropen { mask-image: var(--diropen); -webkit-mask-image: var(--diropen)}
@@ -73,7 +79,9 @@
.fa-json { mask-image: var(--json); -webkit-mask-image: var(--json)}
.fa-jsonl { mask-image: var(--json); -webkit-mask-image: var(--json)}
.fa-image { mask-image: var(--image); -webkit-mask-image: var(--image)}
+.fa-audio { mask-image: var(--audio); -webkit-mask-image: var(--audio)}
.fa-html { mask-image: var(--html); -webkit-mask-image: var(--html)}
+.fa-ttf { mask-image: var(--ttf); -webkit-mask-image: var(--ttf)}
.nav-list {
font-size: var(--fs-nav);
@@ -455,6 +463,7 @@ a.foot:visited {
justify-content: left;
overflow-x: clip;
overflow-y: scroll;
+ background-color: var(--treebg);
/* Popout */
top: 0;
@@ -479,8 +488,7 @@ a.foot:visited {
/* Misc */
align-items: center;
display: flex;
- justify-content: center;
- background-color: var(--grpbg)
+ background-color: #888;
}
.toolbar {
text-align: center;
@@ -519,9 +527,7 @@ a.foot:visited {
#ctx > ul {
padding-left: 0px;
}
-#ctx > ul > li,
-.sub_div > ul > li {
- cursor: pointer;
+#ctx > ul > li {
white-space: nowrap
}
#ctx > ul > li:hover {
@@ -531,8 +537,7 @@ a.foot:visited {
width: 3rem
}
#preview {
- background-color: #888;
- padding: 5px;
+ padding: 0.3rem;
overflow: scroll;
}
#preview > img {
@@ -550,10 +555,11 @@ a.foot:visited {
width: 100%;
line-height: 1.3rem;
font-size: 0.95rem;
- background-color: var(--treebg)
}
.download{background-image: var(--download)}
+.upload{background-image: var(--upload)}
.eye{background-image: var(--eye)}
+.flash{background-image: var(--flash)}
.file{background-image: var(--file)}
.zip{background-image: var(--zip)}
.css{background-image: var(--css)}
@@ -561,6 +567,41 @@ a.foot:visited {
.json{background-image: var(--json)}
.jsonl{background-image: var(--json)}
.image{background-image: var(--image)}
+.audio{background-image: var(--audio)}
.html{background-image: var(--html)}
.dir{background-image: var(--dir)}
.diropen{background-image: var(--diropen)}
+
+
+#toast {
+ position: fixed;
+ bottom: 1rem;
+ right: 1.5rem;
+ display: grid;
+ align-items: end;
+ align-content: end;
+ gap: 1rem;
+}
+
+.toast {
+ font-size: 1rem;
+ margin: 0;
+ font-weight: bold;
+ line-height: 1;
+ padding: 0.5em 1em;
+ background-color: lightblue;
+ animation: toastIt 3000ms cubic-bezier(0.785, 0.135, 0.15, 0.86) forwards;
+}
+
+@keyframes toastIt {
+ 0%,
+ 100% {
+ transform: translateY(150%);
+ opacity: 0;
+ }
+ 10%,
+ 90% {
+ transform: translateY(0);
+ opacity: 1;
+ }
+}
diff --git a/src/sys/svc/hasp_http.cpp b/src/sys/svc/hasp_http.cpp
index 75ccecf2..a72d94aa 100644
--- a/src/sys/svc/hasp_http.cpp
+++ b/src/sys/svc/hasp_http.cpp
@@ -80,16 +80,16 @@ extern const uint8_t SCRIPT_JS_GZ_START[] asm("_binary_data_static_script_js_gz_
extern const uint8_t SCRIPT_JS_GZ_END[] asm("_binary_data_static_script_js_gz_end");
extern const uint8_t LOGO_SVG_GZ_START[] asm("_binary_data_static_logo_svg_gz_start");
extern const uint8_t LOGO_SVG_GZ_END[] asm("_binary_data_static_logo_svg_gz_end");
-extern const uint8_t ACE_JS_GZ_START[] asm("_binary_data_static_ace_1_9_6_min_js_gz_start");
-extern const uint8_t ACE_JS_GZ_END[] asm("_binary_data_static_ace_1_9_6_min_js_gz_end");
extern const uint8_t PETITE_VUE_HASP_JS_GZ_START[] asm("_binary_data_static_petite_vue_hasp_js_gz_start");
extern const uint8_t PETITE_VUE_HASP_JS_GZ_END[] asm("_binary_data_static_petite_vue_hasp_js_gz_end");
extern const uint8_t MAIN_JS_GZ_START[] asm("_binary_data_static_main_js_gz_start");
extern const uint8_t MAIN_JS_GZ_END[] asm("_binary_data_static_main_js_gz_end");
extern const uint8_t EN_JSON_GZ_START[] asm("_binary_data_static_en_json_gz_start");
extern const uint8_t EN_JSON_GZ_END[] asm("_binary_data_static_en_json_gz_end");
-extern const uint8_t HASP_HTM_GZ_START[] asm("_binary_data_static_hasp_htm_gz_start");
-extern const uint8_t HASP_HTM_GZ_END[] asm("_binary_data_static_hasp_htm_gz_end");
+// extern const uint8_t HASP_HTM_GZ_START[] asm("_binary_data_static_hasp_htm_gz_start");
+// extern const uint8_t HASP_HTM_GZ_END[] asm("_binary_data_static_hasp_htm_gz_end");
+// extern const uint8_t ACE_JS_GZ_START[] asm("_binary_data_static_ace_1_9_6_min_js_gz_start");
+// extern const uint8_t ACE_JS_GZ_END[] asm("_binary_data_static_ace_1_9_6_min_js_gz_end");
#endif // CONFIG_IDF_TARGET_ESP32
@@ -1218,22 +1218,31 @@ static void handleFileDelete()
{
if(!http_is_authenticated(F("filedelete"))) return;
- char mimetype[16];
- snprintf_P(mimetype, sizeof(mimetype), PSTR("text/plain"));
+ const char mimetype[] = "text/plain";
- if(webServer.args() == 0) {
- return webServer.send_P(500, mimetype, PSTR("BAD ARGS"));
+ if(!webServer.hasArg("path")) {
+ return webServer.send(500, mimetype, "BAD ARGS");
}
- String path = webServer.arg(0);
+ String path = webServer.arg("path");
LOG_TRACE(TAG_HTTP, F("handleFileDelete: %s"), path.c_str());
if(path == "/") {
- return webServer.send_P(500, mimetype, PSTR("BAD PATH"));
+ return webServer.send(500, mimetype, "BAD PATH");
}
if(!HASP_FS.exists(path)) {
- return webServer.send_P(404, mimetype, PSTR("FileNotFound"));
+ return webServer.send(404, mimetype, "FileNotFound");
+ }
+ bool result;
+ if(path.endsWith("/")) {
+ path.remove(path.length() - 1);
+ result = HASP_FS.rmdir(path);
+ } else {
+ result = HASP_FS.remove(path);
+ }
+ if(result) {
+ webServer.send(200, mimetype, String(""));
+ } else {
+ webServer.send(405, mimetype, "RemoveFailed");
}
- HASP_FS.remove(path);
- webServer.send(200, mimetype, String(""));
}
static void handleFileCreate()
@@ -2275,16 +2284,16 @@ static inline int handleFirmwareFile(String path)
#if defined(CONFIG_IDF_TARGET_ESP32) || defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32S3)
if(path == F("/edit.htm")) {
return http_send_static_gzip_file(EDIT_HTM_GZ_START, EDIT_HTM_GZ_END, contentType);
- } else if(path == F("/hasp.htm")) { // 39 kB
- return http_send_static_gzip_file(HASP_HTM_GZ_START, HASP_HTM_GZ_END, contentType);
+ // } else if(path == F("/hasp.htm")) { // 39 kB
+ // return http_send_static_gzip_file(HASP_HTM_GZ_START, HASP_HTM_GZ_END, contentType);
} else if(path == F("/logo.svg")) { // 300 bytes
return http_send_static_gzip_file(LOGO_SVG_GZ_START, LOGO_SVG_GZ_END, contentType);
} else if(path == F("/style.css")) { // 11 kB
return http_send_static_gzip_file(STYLE_CSS_GZ_START, STYLE_CSS_GZ_END, contentType);
} else if(path == F("/vars.css")) {
return http_send_static_file(HTTP_VARS_CSS, HTTP_VARS_CSS + sizeof(HTTP_VARS_CSS) - 1, contentType);
- // } else if(path == F("/script.js")) { // 3 kB
- // return http_send_static_gzip_file(SCRIPT_JS_GZ_START, SCRIPT_JS_GZ_END, contentType);
+ } else if(path == F("/script.js")) { // 3 kB
+ return http_send_static_gzip_file(SCRIPT_JS_GZ_START, SCRIPT_JS_GZ_END, contentType);
} else if(path == F("/en.json")) { // 2 kB
return http_send_static_gzip_file(EN_JSON_GZ_START, EN_JSON_GZ_END, contentType);
} else if(path == F("/main.js")) { // 9 kB
@@ -2292,8 +2301,8 @@ static inline int handleFirmwareFile(String path)
} else if(path == F("/petite-vue.hasp.js")) { // 9 kB
return http_send_static_gzip_file(PETITE_VUE_HASP_JS_GZ_START, PETITE_VUE_HASP_JS_GZ_END, contentType);
#if ESP_FLASH_SIZE > 4
- } else if(path == F("/ace.js")) { // 96 kB
- return http_send_static_gzip_file(ACE_JS_GZ_START, ACE_JS_GZ_END, contentType);
+ // } else if(path == F("/ace.js")) { // 96 kB
+ // return http_send_static_gzip_file(ACE_JS_GZ_START, ACE_JS_GZ_END, contentType);
#endif
}
#endif // ARDUINO_ARCH_ESP32
diff --git a/tools/auto_firmware_version.py b/tools/auto_firmware_version.py
index f0a3d901..d4fd4f2e 100644
--- a/tools/auto_firmware_version.py
+++ b/tools/auto_firmware_version.py
@@ -48,3 +48,21 @@ with open("data/main.js", "r", encoding="utf-8") as f:
html = html.replace("COMMIT_HASH", commit_hash)
with gzip.open('data/static/main.js.gz', 'wb') as f:
f.write(html.encode('utf-8'))
+
+with open("data/script.js", "r", encoding="utf-8") as f:
+ html=f.read()
+html = html.replace("COMMIT_HASH", commit_hash)
+with gzip.open('data/static/script.js.gz', 'wb') as f:
+ f.write(html.encode('utf-8'))
+
+with open("data/en.json", "r", encoding="utf-8") as f:
+ html=f.read()
+html = html.replace("COMMIT_HASH", commit_hash)
+with gzip.open('data/static/en.json.gz', 'wb') as f:
+ f.write(html.encode('utf-8'))
+
+with open("data/style.css", "r", encoding="utf-8") as f:
+ html=f.read()
+html = html.replace("COMMIT_HASH", commit_hash)
+with gzip.open('data/static/style.css.gz', 'wb') as f:
+ f.write(html.encode('utf-8'))
diff --git a/tools/esp_merge_bin.py b/tools/esp_merge_bin.py
index 6cada46c..4c484f78 100644
--- a/tools/esp_merge_bin.py
+++ b/tools/esp_merge_bin.py
@@ -58,10 +58,11 @@ def copy_merge_bins(source, target, env):
mcu = board.get("build.mcu", "esp32")
bootloader = "{}tools{}sdk{}{}{}bin{}bootloader_{}_{}.bin".format(FRAMEWORK_DIR, os.path.sep, os.path.sep, mcu, os.path.sep, os.path.sep, flash_mode, flash_freq)
+ # # if not os.path.isfile(bootloader):
+ # # bootloader = "{}tools{}sdk{}bin{}bootloader_dio_40m.bin".format(FRAMEWORK_DIR, os.path.sep, os.path.sep, os.path.sep, os.path.sep, os.path.sep)
# if not os.path.isfile(bootloader):
- # bootloader = "{}tools{}sdk{}bin{}bootloader_dio_40m.bin".format(FRAMEWORK_DIR, os.path.sep, os.path.sep, os.path.sep, os.path.sep, os.path.sep)
- if not os.path.isfile(bootloader):
- bootloader = "{}tools{}sdk{}{}{}bin{}bootloader_{}_{}.bin".format(FRAMEWORK_DIR, os.path.sep, os.path.sep, mcu, os.path.sep, os.path.sep, flash_mode, flash_freq)
+ # bootloader = "{}tools{}sdk{}{}{}bin{}bootloader_{}_{}.bin".format(FRAMEWORK_DIR, os.path.sep, os.path.sep, mcu, os.path.sep, os.path.sep, flash_mode, flash_freq)
+ bootloader = str(target[0]).replace('firmware.bin','bootloader.bin')
bootloader_location = '0x1000'
if (mcu == 'esp32s3'):
bootloader_location = '0x0000'
@@ -94,7 +95,10 @@ def copy_merge_bins(source, target, env):
print(f_flash)
print(flash_mode)
- process = subprocess.Popen(['python', 'tools/esptool_with_merge_bin.py', '--chip', mcu, 'merge_bin', '--output', firmware_dst, '--flash_mode', 'dio', '--flash_size', flash_size, '--flash_freq', flash_freq, bootloader_location, bootloader, '0x8000', partitions, '0xe000', boot_app0, '0x10000', firmware_src],
+ # esptool = 'tools/esptool_with_merge_bin.py'
+ esptool = '{}{}esptool.py'.format(platform.get_package_dir("tool-esptoolpy"),os.path.sep)
+ print(esptool)
+ process = subprocess.Popen(['python', esptool, '--chip', mcu, 'merge_bin', '--output', firmware_dst, '--flash_mode', 'dio', '--flash_size', flash_size, '--flash_freq', flash_freq, bootloader_location, bootloader, '0x8000', partitions, '0xe000', boot_app0, '0x10000', firmware_src],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
diff --git a/tools/minifiy.py b/tools/minifiy.py
new file mode 100644
index 00000000..1c83e7b2
--- /dev/null
+++ b/tools/minifiy.py
@@ -0,0 +1,69 @@
+import gzip, minify_html
+
+# options = {
+# "do_not_minify_doctype": True,
+# "ensure_spec_compliant_unquoted_attribute_values": False,
+# "keep_closing_tags": True,
+# "keep_html_and_head_opening_tags": True,
+# "keep_spaces_between_attributes": True,
+# "keep_comments": True,
+# "minify_css": True,
+# "minify_js": True,
+# "remove_bangs": False,
+# "remove_processing_instructions": False
+# }
+
+# with open("data/script.js", "r") as f:
+# html=f.read()
+# minified = minify_html.minify(html, options)
+# with gzip.open('data/static/script.js.gz', 'wb') as f:
+# f.write(minified.encode('utf-8'))
+
+# with open("data/editor.htm", "r") as f:
+# html=f.read()
+# # minified = minify_html.minify(html, options)
+# with gzip.open('data/static/edit.htm.gz', 'wb') as f:
+# f.write(html.encode('utf-8'))
+# with open('data/edit.htm', 'wb') as f:
+# f.write(html.encode('utf-8'))
+
+
+# with open("data/style.css", "r") as f:
+# html=f.read()
+# with gzip.open('data/static/style.css.gz', 'wb') as f:
+# f.write(html.encode('utf-8'))
+# minified = minify_html.minify(html, options).replace('"id=mdi-','" id=mdi-')
+# with open('data/style.min.css', 'wb') as f:
+# f.write(minified.encode('utf-8'))
+
+
+# with open("data/hasp.htm", "r") as f:
+# html=f.read()
+# minified = minify_html.minify(html, options)
+# with gzip.open('data/static/hasp.htm.gz', 'wb') as f:
+# f.write(minified.encode('utf-8'))
+
+
+
+# with open("data/en.json", "r") as f:
+# html=f.read()
+# minified = minify_html.minify(html, options)
+# with gzip.open('data/static/en.json.gz', 'wb') as f:
+# f.write(minified.encode('utf-8'))
+
+# with open("data/nl.json", "r") as f:
+# html=f.read()
+# minified = minify_html.minify(html, options)
+# with gzip.open('data/static/nl.json.gz', 'wb') as f:
+# f.write(minified.encode('utf-8'))
+
+# with open("data/fr.json", "r") as f:
+# html=f.read()
+# minified = minify_html.minify(html, options)
+# with gzip.open('data/static/fr.json.gz', 'wb') as f:
+# f.write(minified.encode('utf-8'))
+
+# with open("data/main.js", "r") as f:
+# html=f.read()
+# with gzip.open('data/static/main.js.gz', 'wb') as f:
+# f.write(html.encode('utf-8'))
diff --git a/user_setups/esp32/_esp32.ini b/user_setups/esp32/_esp32.ini
index 727dce69..5b969c98 100644
--- a/user_setups/esp32/_esp32.ini
+++ b/user_setups/esp32/_esp32.ini
@@ -23,11 +23,11 @@ board_build.embed_files =
data/cert/x509_crt_bundle.bin
; -- new dynamic website files -------------------
data/static/logo.svg.gz
- data/static/ace.1.9.6.min.js.gz
+ ; data/static/ace.1.9.6.min.js.gz
data/static/petite-vue.hasp.js.gz
data/static/main.js.gz
data/static/en.json.gz
- data/static/hasp.htm.gz
+ ; data/static/hasp.htm.gz
build_flags =
${env.build_flags}