LoadBoards -> still one bug on the creation of myDiv for parallel and grid.

Rafael
jaume-nualart 7 months ago
parent 4fff24272f
commit 2ed161e2ce
  1. 338
      Data/Pilgatan/archive/listofsensores_separatescarss.json
  2. 1
      py/Boards/Charlie/test1.json
  3. 1
      py/Boards/Pilgatan/2222222.json
  4. 1
      py/Boards/Pilgatan/dddd.json
  5. 1
      py/Boards/Pilgatan/ee.json
  6. 1
      py/Boards/Pilgatan/rr.json
  7. 2
      web-html/config/config.js
  8. 48
      web-html/dash.html
  9. 14
      web-html/home.html
  10. 386
      web-html/js/dash.js

@ -0,0 +1,338 @@
{
"Hus_Pilgatan_card_v1": [
"Date",
"Time",
"SCv1.SCv1-1-Temp.celsius",
"SCv1.SCv1-2-Counter.Counter",
"SCv1.SCv1-3-Temp.celsius",
"SCv1.SCv1-4-Hum.percentRH",
"SCv1.SCv1-5-Pressure.hPa",
"WS.WS-01-Speed.mXs",
"WS.WS-01-Gust.mXs",
"WS.WS-03-Temp.celsius",
"WS.WS-03-Wind.deg",
"WS.WS-05-Hum.percentRH",
"WS.WS-05-Rain (d).mm",
"WS.WS-07-Rain (h).mmXh",
"WS.WS-07-Air pressure.hPa",
"WS.WS-09-UV index.none",
"WS.WS-09-Sun.none",
"W1.W1-01-Temp.celsius",
"W1.W1-01-Hum.percentRH",
"W1.W1-02-Temp.celsius",
"W1.W1-02-Hum.percentRH",
"W1.W1-03-Temp.celsius",
"W1.W1-03-Hum.percentRH",
"W1.W1-04-Temp.celsius",
"W1.W1-04-Hum.percentRH",
"W1.W1-05-Temp.celsius",
"W1.W1-05-Hum.percentRH",
"W1.W1-06-Temp.celsius",
"W1.W1-06-Hum.percentRH",
"W1.W1-07-Temp.celsius",
"W1.W1-07-Hum.percentRH",
"W1.W1-08-Temp.celsius",
"W1.W1-08-Hum.percentRH",
"W1.W1-09-Temp.celsius",
"W1.W1-09-Hum.percentRH",
"W1.W1-10-Temp.celsius",
"W1.W1-10-Hum.percentRH",
"W1.W1-11-Temp.celsius",
"W1.W1-11-Hum.percentRH",
"W1.W1-12-Temp.celsius",
"W1.W1-12-Hum.percentRH",
"W1.W1-intern-Temp.celsius",
"W1.W1-intern-Hum.percentRH",
"W1.intern-intern-Pressure.hPa",
"W1.W1-intern-Runtime.min",
"W2.W2-01-Temp.celsius",
"W2.W2-01-Hum.percentRH",
"W2.W2-02-Temp.celsius",
"W2.W2-02-Hum.percentRH",
"W2.W2-03-Temp.celsius",
"W2.W2-03-Hum.percentRH",
"W2.W2-04-Temp.celsius",
"W2.W2-04-Hum.percentRH",
"W2.W2-05-Temp.celsius",
"W2.W2-05-Hum.percentRH",
"W2.W2-06-Temp.celsius",
"W2.W2-06-Hum.percentRH",
"W2.W2-07-Temp.celsius",
"W2.W2-07-Hum.percentRH",
"W2.W2-08-Temp.celsius",
"W2.W2-08-Hum.percentRH",
"W2.W2-09-Temp.celsius",
"W2.W2-09-Hum.percentRH",
"W2.W2-10-Temp.celsius",
"W2.W2-10-Hum.percentRH",
"W2.W2-11-Temp.celsius",
"W2.W2-11-Hum.percentRH",
"W2.W2-12-Temp.celsius",
"W2.W2-12-Hum.percentRH",
"W2.W2-intern-Temp.celsius",
"W2.W2-intern-Hum.percentRH",
"W2.intern-intern-Pressure.hPa",
"W2.W2-intern-Runtime.min",
"W3.W3-01-Temp.celsius",
"W3.W3-01-Hum.percentRH",
"W3.W3-02-Temp.celsius",
"W3.W3-02-Hum.percentRH",
"W3.W3-03-Temp.celsius",
"W3.W3-03-Hum.percentRH",
"W3.W3-04-Temp.celsius",
"W3.W3-04-Hum.percentRH",
"W3.W3-05-Temp.celsius",
"W3.W3-05-Hum.percentRH",
"W3.W3-06-Temp.celsius",
"W3.W3-06-Hum.percentRH",
"W3.W3-07-Temp.celsius",
"W3.W3-07-Hum.percentRH",
"W3.W3-08-Temp.celsius",
"W3.W3-08-Hum.percentRH",
"W3.W3-09-Temp.celsius",
"W3.W3-09-Hum.percentRH",
"W3.W3-10-Temp.celsius",
"W3.W3-10-Hum.percentRH",
"W3.W3-11-Temp.celsius",
"W3.W3-11-Hum.percentRH",
"W3.W3-12-Temp.celsius",
"W3.W3-12-Hum.percentRH",
"W3.W3-intern-Temp.celsius",
"W3.W3-intern-Hum.percentRH",
"W3.intern-intern-Pressure.hPa",
"W3.W3-intern-Runtime.min",
"W4.W4-01-Temp.celsius",
"W4.W4-01-Hum.percentRH",
"W4.W4-02-Temp.celsius",
"W4.W4-02-Hum.percentRH",
"W4.W4-03-Temp.celsius",
"W4.W4-03-Hum.percentRH",
"W4.W4-04-Temp.celsius",
"W4.W4-04-Hum.percentRH",
"W4.W4-05-Temp.celsius",
"W4.W4-05-Hum.percentRH",
"W4.W4-06-Temp.celsius",
"W4.W4-06-Hum.percentRH",
"W4.W4-07-Temp.celsius",
"W4.W4-07-Hum.percentRH",
"W4.W4-08-Temp.celsius",
"W4.W4-08-Hum.percentRH",
"W4.W4-09-Temp.celsius",
"W4.W4-09-Hum.percentRH",
"W4.W4-10-Temp.celsius",
"W4.W4-10-Hum.percentRH",
"W4.W4-11-Temp.celsius",
"W4.W4-11-Hum.percentRH",
"W4.W4-12-Temp.celsius",
"W4.W4-12-Hum.percentRH",
"W4.W4-intern-Temp.celsius",
"W4.W4-intern-Hum.percentRH",
"W4.intern-intern-Pressure.hPa",
"W4.W4-intern-Runtime.min",
"S2.S2-01-Temp.celsius",
"S2.S2-01-Hum.percentRH",
"S2.S2-02-Temp.celsius",
"S2.S2-02-Hum.percentRH",
"S2.S2-03-Temp.celsius",
"S2.S2-03-Hum.percentRH",
"S3.S2-01-Temp.celsius",
"S3.S2-01-Hum.percentRH",
"S3.S2-02-Temp.celsius",
"S3.S2-02-Hum.percentRH",
"S3.S2-03-Temp.celsius",
"S3.S2-03-Hum.percentRH",
"S1.S2-01-Temp.celsius",
"S1.S2-01-Hum.percentRH",
"S1.S2-02-Temp.celsius",
"S1.S2-02-Hum.percentRH",
"S1.S2-03-Temp.celsius",
"S1.S2-03-Hum.percentRH",
"S4.S2-01-Temp.celsius",
"S4.S2-01-Hum.percentRH",
"S4.S2-02-Temp.celsius",
"S4.S2-02-Hum.percentRH",
"S4.S2-03-Temp.celsius",
"S4.S2-03-Hum.percentRH",
"S4.S2-intern-Temp.celsius",
"S4.S2-intern-Hum.percentRH",
"S4.intern-intern-Pressure.hPa",
"S4.S2-intern-Runtime.min",
"S6.S6-01-Temp.celsius",
"S6.S6-01-Hum.percentRH",
"S6.S6-02-Temp.celsius",
"S6.S6-02-Hum.percentRH",
"S6.S6-03-Temp.celsius",
"S6.S6-03-Hum.percentRH",
"S7.S6-01-Temp.celsius",
"S7.S6-01-Hum.percentRH",
"S7.S6-02-Temp.celsius",
"S7.S6-02-Hum.percentRH",
"S7.S6-03-Temp.celsius",
"S7.S6-03-Hum.percentRH",
"S5.S6-01-Temp.celsius",
"S5.S6-01-Hum.percentRH",
"S5.S6-02-Temp.celsius",
"S5.S6-02-Hum.percentRH",
"S5.S6-03-Temp.celsius",
"S5.S6-03-Hum.percentRH",
"S8.S6-01-Temp.celsius",
"S8.S6-01-Hum.percentRH",
"S8.S6-02-Temp.celsius",
"S8.S6-02-Hum.percentRH",
"S8.S6-03-Temp.celsius",
"S8.S6-03-Hum.percentRH",
"S8.S6-intern-Temp.celsius",
"S8.S6-intern-Hum.percentRH",
"S8.intern-intern-Pressure.hPa",
"S8.S6-intern-Runtime.min"
],
"Hus_Pilgatan_card_v6": [
"Date",
"Time",
"SCv6.SCv6-01-Temp.celsius",
"SCv6.SCv6-02-Counter.Counter",
"SCv6.SCv6-03-Temp.celsius",
"SCv6.SCv6-04-Hum.percentRH",
"SCv6.SCv6-05-Pressure.hPa",
"W5.W5-01-Temp.celsius",
"W5.W5-01-Hum.percentRH",
"W5.W5-02-Temp.celsius",
"W5.W5-02-Hum.percentRH",
"W5.W5-03-Temp.celsius",
"W5.W5-03-Hum.percentRH",
"W5.W5-04-Temp.celsius",
"W5.W5-04-Hum.percentRH",
"W5.W5-05-Temp.celsius",
"W5.W5-05-Hum.percentRH",
"W5.W5-06-Temp.celsius",
"W5.W5-06-Hum.percentRH",
"W5.W5-07-Temp.celsius",
"W5.W5-07-Hum.percentRH",
"W5.W5-08-Temp.celsius",
"W5.W5-08-Hum.percentRH",
"W5.W5-09-Temp.celsius",
"W5.W5-09-Hum.percentRH",
"W5.W5-10-Temp.celsius",
"W5.W5-10-Hum.percentRH",
"W5.W5-11-Temp.celsius",
"W5.W5-11-Hum.percentRH",
"W5.W5-12-Temp.celsius",
"W5.W5-12-Hum.percentRH",
"W5.W5-intern-Temp.celsius",
"W5.W5-intern-Hum.percentRH",
"W5.intern-intern-Pressure.hPa",
"W5.W5-intern-Runtime.min",
"W6.W6-01-Temp.celsius",
"W6.W6-01-Hum.percentRH",
"W6.W6-02-Temp.celsius",
"W6.W6-02-Hum.percentRH",
"W6.W6-03-Temp.celsius",
"W6.W6-03-Hum.percentRH",
"W6.W6-04-Temp.celsius",
"W6.W6-04-Hum.percentRH",
"W6.W6-05-Temp.celsius",
"W6.W6-05-Hum.percentRH",
"W6.W6-06-Temp.celsius",
"W6.W6-06-Hum.percentRH",
"W6.W6-07-Temp.celsius",
"W6.W6-07-Hum.percentRH",
"W6.W6-08-Temp.celsius",
"W6.W6-08-Hum.percentRH",
"W6.W6-09-Temp.celsius",
"W6.W6-09-Hum.percentRH",
"W6.W6-10-Temp.celsius",
"W6.W6-10-Hum.percentRH",
"W6.W6-11-Temp.celsius",
"W6.W6-11-Hum.percentRH",
"W6.W6-12-Temp.celsius",
"W6.W6-12-Hum.percentRH",
"W6.W6-intern-Temp.celsius",
"W6.W6-intern-Hum.percentRH",
"W6.intern-intern-Pressure.hPa",
"W6.W6-intern-Runtime.min",
"W7.W7-01-Temp.celsius",
"W7.W7-01-Hum.percentRH",
"W7.W7-02-Temp.celsius",
"W7.W7-02-Hum.percentRH",
"W7.W7-03-Temp.celsius",
"W7.W7-03-Hum.percentRH",
"W7.W7-04-Temp.celsius",
"W7.W7-04-Hum.percentRH",
"W7.W7-05-Temp.celsius",
"W7.W7-05-Hum.percentRH",
"W7.W7-06-Temp.celsius",
"W7.W7-06-Hum.percentRH",
"W7.W7-07-Temp.celsius",
"W7.W7-07-Hum.percentRH",
"W7.W7-08-Temp.celsius",
"W7.W7-08-Hum.percentRH",
"W7.W7-09-Temp.celsius",
"W7.W7-09-Hum.percentRH",
"W7.W7-10-Temp.celsius",
"W7.W7-10-Hum.percentRH",
"W7.W7-11-Temp.celsius",
"W7.W7-11-Hum.percentRH",
"W7.W7-12-Temp.celsius",
"W7.W7-12-Hum.percentRH",
"W7.W7-intern-Temp.celsius",
"W7.W7-intern-Hum.percentRH",
"W7.intern-intern-Pressure.hPa",
"W7.W7-intern-Runtime.min",
"W8.W8-01-Temp.celsius",
"W8.W8-01-Hum.percentRH",
"W8.W8-02-Temp.celsius",
"W8.W8-02-Hum.percentRH",
"W8.W8-03-Temp.celsius",
"W8.W8-03-Hum.percentRH",
"W8.W8-04-Temp.celsius",
"W8.W8-04-Hum.percentRH",
"W8.W8-05-Temp.celsius",
"W8.W8-05-Hum.percentRH",
"W8.W8-06-Temp.celsius",
"W8.W8-06-Hum.percentRH",
"W8.W8-07-Temp.celsius",
"W8.W8-07-Hum.percentRH",
"W8.W8-08-Temp.celsius",
"W8.W8-08-Hum.percentRH",
"W8.W8-09-Temp.celsius",
"W8.W8-09-Hum.percentRH",
"W8.W8-10-Temp.celsius",
"W8.W8-10-Hum.percentRH",
"W8.W8-11-Temp.celsius",
"W8.W8-11-Hum.percentRH",
"W8.W8-12-Temp.celsius",
"W8.W8-12-Hum.percentRH",
"W8.W8-intern-Temp.celsius",
"W8.W8-intern-Hum.percentRH",
"W8.intern-intern-Pressure.hPa",
"W8.W8-intern-Runtime.min",
"R1.R1-01-Temp.celsius",
"R1.R1-01-Hum.percentRH",
"R1.R1-02-Temp.celsius",
"R1.R1-02-Hum.percentRH",
"R1.R1-03-Temp.celsius",
"R1.R1-03-Hum.percentRH",
"R1.R1-04-Temp.celsius",
"R1.R1-04-Hum.percentRH",
"R1.R1-05-Temp.celsius",
"R1.R1-05-Hum.percentRH",
"R1.R1-06-Temp.celsius",
"R1.R1-06-Hum.percentRH",
"R2.R1-01-Temp.celsius",
"R2.R1-01-Hum.percentRH",
"R2.R1-02-Temp.celsius",
"R2.R1-02-Hum.percentRH",
"R2.R1-03-Temp.celsius",
"R2.R1-03-Hum.percentRH",
"R2.R1-04-Temp.celsius",
"R2.R1-04-Hum.percentRH",
"R2.R1-05-Temp.celsius",
"R2.R1-05-Hum.percentRH",
"R2.R1-06-Temp.celsius",
"R2.R1-06-Hum.percentRH",
"R2.R1-intern-Temp.celsius",
"R2.R1-intern-Hum.percentRH",
"R2.intern-intern-Pressure.hPa",
"R2.R1-intern-Runtime.min"
]
}

@ -0,0 +1 @@
{"Name": "test1", "Description": "this is a test", "Hus": "Charlie", "col-left": [{"order": 0, "id": "P-txt-723017", "text": "eeeeeeee", "api_url": null}, {"order": 1, "id": "parallel-4286811", "text": "", "api_url": "parallel/daily?hus=Charlie&family=MP1_1&type=celsius&day=2022-12-15"}], "col-center": [{"order": 0, "id": "G-txt-910177", "text": "err we", "api_url": null}, {"order": 1, "id": "grid-438525", "text": "", "api_url": "grid/yearly?hus=Charlie&sensor=Temp_MP1_1_Pos1&type=celsius&year=2023"}], "col-right": [{"order": 0, "id": "H-txt-974001", "text": "rerer er re", "api_url": null}, {"order": 1, "id": "horizon-487744", "text": "", "api_url": "horizon/daily?hus=Charlie&family=MP1_1&type=celsius&day=2023-02-07"}]}

@ -0,0 +1 @@
{"Name": "2222222", "Description": "333333333", "Hus": "Pilgatan", "col-left": [], "col-center": [], "col-right": []}

@ -0,0 +1 @@
{"Name": "dddd", "Description": "fff", "Hus": "Pilgatan", "col-left": [], "col-center": [], "col-right": []}

@ -0,0 +1 @@
{"Name": "ee", "Description": "ee", "Hus": "Pilgatan", "col-left": [{"order": 0, "id": "parallel-5047360", "text": "", "api_url": "parallel/daily?hus=Pilgatan&family=SCv1&type=celsius&day=2023-06-06"}], "col-center": [{"order": 0, "id": "grid-175161", "text": "", "api_url": "grid/monthly?hus=Pilgatan&sensor=SCv1-1-Temp&type=celsius&year=2023&month=01"}], "col-right": [{"order": 0, "id": "horizon-970414", "text": "", "api_url": "horizon/daily?hus=Pilgatan&family=SCv1&type=celsius&day=2023-06-05"}]}

@ -0,0 +1 @@
{"Name": "rr", "Description": "rr", "Hus": "Pilgatan", "col-left": [], "col-center": [], "col-right": []}

@ -4,7 +4,7 @@ homePagageUrl = "./home.html";
h1_title = "Welcome to the TräHus flexyboard";
subtitle = 'This application is a flexyboard that enables monitorization of time-series sensors.';
x1 = "...";
base_url_API = "http://localhost:5000";
x2 = "...";
credits = "Infravis.se (LNU node)";

@ -133,9 +133,9 @@
<div id="myhouse">
</div>
<div id="templates">Manage board:&nbsp;&nbsp;
<button id="saveDash" class="btn btn-outline-success" onclick="getApiUrls();"><i class="fa fa-upload"></i>Save</button>
<button type="button" class="btn btn-dark" data-bs-toggle="modal" data-bs-target="#saveBoardModal"><i class="fa fa-upload"></i>Save Board</button>
&nbsp;&nbsp;
<button id="loadDashList" class="btn btn-outline-success" onclick="loadBoards();"><i class="fa fa-folder-open-o"></i>List</button>
<button id="loadListBoardsButton" type="button" class="btn btn-dark" data-bs-toggle="modal" data-bs-target="#loadBoardModal"><i class="fa fa-folder-open-o"></i>Load Board</button>
<span class="float-end">Templates:&nbsp;&nbsp;
<button id="button2" class="btn btn-outline-success"><i class="fa fa-map"></i> 33 %</button>
&nbsp;&nbsp;
@ -154,6 +154,50 @@
</div>
</div>
<!-- ##################### -->
<!-- Save Board Modal -->
<div class="modal fade" id="saveBoardModal" tabindex="-1" aria-labelledby="saveBoardModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl">
<div class="modal-content">
<div class="modal-header">
<div class="tab-pane fade show" id="saveBoard-pills-default" role="tabpanel" aria-labelledby="pills-default-tab">
<p>You can save this board. Just fill it up the below form:</p>
<form id="saveBoardForm" class="addtext">
<div class="mb-3">
<label for="boardNameLabel" class="form-label">Board name</label>
<input type="email" class="form-control" id="boardName" placeholder="name@example.com">
</div>
<div class="mb-3">
<label for="boardDescLabel" class="form-label">Description</label>
<textarea class="form-control" id="boardDesc" rows="3"></textarea>
</div>
<!-- SUBMIT BUTTON -->
<p>&nbsp;</p>
<div class="col-auto">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<!-- Load Board Modal -->
<div class="modal fade" id="loadBoardModal" tabindex="-1" aria-labelledby="loadBoardModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl">
<div class="modal-content">
<div class="modal-header">
<div class="tab-pane fade show" id="loadBoard-pills-default" role="tabpanel" aria-labelledby="pills-default-tab">
</div>
</div>
</div>
</div>
</div>
<!-- ##################### -->
<!-- parallelModal -->

@ -16,11 +16,23 @@
padding: 1rem;
border: 1px solid black;
margin: 1rem;
max-height: 390px;
scroll-behavior: auto;
overflow-y: scroll;
}
.card-img-top {
max-height:110px;
width:150px;
}
.card-body {
position: relative;
height: 390px; Set the desired height of the container
}
.homeButtons {
position: absolute;
bottom: 0;
}
</style>
<!-- JS libs-->
@ -62,7 +74,7 @@
<a href="${houses.map_url}" target="map of ${houses.hname}"><img src="${houses.map}" class="card-img-top" alt="..."></a>
<h5 class="${houses.name}">${houses.hname}</h5>
<p class="card-text">${houses.subtitle}</p>
<p>Open dashboard
<p class="homeButtons">Open dashboard
<a href="dash.html?h=${houses.xname}" class="btn btn-primary">inthis window</a>
<a href="dash.html?h=${houses.xname}" target="_${houses.name}" class="btn btn-primary">In a new window</a>
</p>

@ -195,7 +195,7 @@ document.getElementById("HDParameter").innerHTML = listParametersOptions;
//-----------------------------
// writeIn and writeInTXT
async function writeIn(formId, formData) {
async function writeIn(formId, formData) {//, apiUrl, myid) {
var myColumn = getName(formId[0])
var myTitle = document.getElementById(formId+"Title").value;
@ -324,7 +324,6 @@ document.getElementById("HDParameter").innerHTML = listParametersOptions;
// BUILDING API query
var apiUrl = "grid/weekly?hus="+myHouseXname+"&sensor="+sensor+"&type="+type+"&year="+year+"&week="+week;
makeApiRequest(formId, apiUrl, myid, myTitle, sensor, type, inDate);
break;
//-------------------------------
case "GM":
@ -479,7 +478,7 @@ function do_parallel(myid, myxs, mycolumns, inMyTitle) {
`;
var myTitle = "<h2>"+inMyTitle+"</h2>";
my = myid.replace('#', '')
cl("my id -> "+my);
var mainDiv = document.getElementById(my);
mainDiv.insertAdjacentHTML("afterbegin", myButtons+myTitle);
@ -1313,89 +1312,6 @@ function do_horizon_row(data, myid, title, myDates) {
// FUNCTIONS /////////////////////////////////////////////////
// Function interactions
////////////////////////////////////////////////////////////////
////////////////////////////////
// SAVE DASHBOARF :: export diagrams + texts to the API
function getApiUrls() {
var apiUrlsLeft = [];
var apiUrlsCenter = [];
var apiUrlsRight = [];
document.querySelectorAll('#col-left div').forEach(function(element, index) {
var apiUrl = element.getAttribute('apiurl');
var id = element.id;
var order = apiUrlsLeft.length;
if (apiUrl === 'txt') {
var clone = element.cloneNode(true);
clone.querySelectorAll('span').forEach(function(span) {
span.parentNode.removeChild(span);
});
var innerText = clone.innerText.trim();
apiUrlsLeft.push({ order: order, id: id, text: innerText, api_url: null });
} else if (apiUrl) {
var h2Element = element.querySelector('h2');
text = h2Element ? h2Element.innerText.trim() : '';
apiUrlsLeft.push({ order: order, id: id, text: text, api_url: apiUrl });
}
});
document.querySelectorAll('#col-center div').forEach(function(element, index) {
var apiUrl = element.getAttribute('apiurl');
var id = element.id;
var text = element.innerHTML.trim(); // Assuming the text is the innerHTML of the element
var order = apiUrlsCenter.length;
if (apiUrl === 'txt') {
var clone = element.cloneNode(true);
clone.querySelectorAll('span').forEach(function(span) {
span.parentNode.removeChild(span);
});
var innerText = clone.innerText.trim();
apiUrlsCenter.push({ order: order, id: id, text: innerText, api_url: null });
} else if (apiUrl) {
var h2Element = element.querySelector('h2');
text = h2Element ? h2Element.myLen.trim() : '';
apiUrlsCenter.push({ order: order, id: id, text: text, api_url: apiUrl });
}
});
document.querySelectorAll('#col-right div').forEach(function(element, index) {
var apiUrl = element.getAttribute('apiurl');
var id = element.id;
var text = element.innerHTML.trim(); // Assuming the text is the innerHTML of the element
var order = apiUrlsRight.length;
if (apiUrl === 'txt') {
var clone = element.cloneNode(true);
clone.querySelectorAll('span').forEach(function(span) {
span.parentNode.removeChild(span);
});
var innerText = clone.innerText.trim();
apiUrlsRight.push({ order: order, id: id, text: innerText, api_url: null });
} else if (apiUrl) {
var h2Element = element.querySelector('h2');
text = h2Element ? h2Element.innerText.trim() : '';
apiUrlsRight.push({ order: order, id: id, text: text, api_url: apiUrl });
}
});
// Similar modifications for #col-center and #col-right
var result = {
// FIXME : boardName will be entered in the save board form
"boardName" : "my Form name test",
"name": boardName,
"hus": myParam,
"description": myHouse.subtitle,
"col-left": apiUrlsLeft,
"col-center": apiUrlsCenter,
"col-right": apiUrlsRight
};
return alert(JSON.stringify(result));
}
@ -1581,9 +1497,14 @@ document.querySelectorAll('button[type="submit"]').forEach(button => {
var div = doc.querySelector('div[data-lt-tmp-id^="lt-"]');
var textData = div ? div.innerHTML : 'No div found';
writeInTXT(formId, textData);
} if (formId == "saveBoardForm") {
var boardName = document.getElementById("boardName").value;
var boardDesc = document.getElementById("boardDesc").value
cl(boardName+" - "+boardDesc);
getCurrentBoardData(boardName, boardDesc);
} else {
writeIn(formId, formData);
}
}
});
});
@ -1814,35 +1735,226 @@ var firstOpen = true;
// > makeApiRequiest
// > submit nuttons listener
function getValueByKeyFrrmUrl(key, apiurl) {
const keyValuePairs = apiurl.split("&");
for (let i = 0; i < keyValuePairs.length; i++) {
const [currentKey, value] = keyValuePairs[i].split("=");
if (currentKey === key) {
cl("value: "+value);
return value;
}
}
return null; // Return null if the key is not found
}
function getFormattedDateFromWeek(week, year) {
const date = new Date(year, 0, 1 + (week - 1) * 7); // January 1st + (week - 1) * 7 days
const day = date.getDate();
const month = date.getMonth() + 1; // Months are zero-based, so we add 1
const formattedDate = `${day.toString().padStart(2, '0')}-${month.toString().padStart(2, '0')}-${year}`;
return formattedDate;
}
// JAUME1
////////////////////////////////////////
// BOARDS:
////////////////////////////////
// SAVE BOARD :: export diagrams + texts to the API
// Function to get all the vurrent data from the board.
function getCurrentBoardData(boardName, boardDesc) {
var apiUrlsLeft = [];
var apiUrlsCenter = [];
var apiUrlsRight = [];
cl("here I am: getCurrentBoardData");
document.querySelectorAll('#col-left div').forEach(function(element, index) {
var apiUrl = element.getAttribute('apiurl');
var id = element.id;
var order = apiUrlsLeft.length;
if (apiUrl === 'txt') {
var clone = element.cloneNode(true);
clone.querySelectorAll('span').forEach(function(span) {
span.parentNode.removeChild(span);
});
var innerText = clone.innerText.trim();
apiUrlsLeft.push({ order: order, id: id, text: innerText, api_url: null });
} else if (apiUrl) {
var h2Element = element.querySelector('h2');
text = h2Element ? h2Element.innerText.trim() : '';
apiUrlsLeft.push({ order: order, id: id, text: text, api_url: apiUrl });
}
});
document.querySelectorAll('#col-center div').forEach(function(element, index) {
var apiUrl = element.getAttribute('apiurl');
var id = element.id;
var text = element.innerHTML.trim(); // Assuming the text is the innerHTML of the element
var order = apiUrlsCenter.length;
if (apiUrl === 'txt') {
var clone = element.cloneNode(true);
clone.querySelectorAll('span').forEach(function(span) {
span.parentNode.removeChild(span);
});
var innerText = clone.innerText.trim();
apiUrlsCenter.push({ order: order, id: id, text: innerText, api_url: null });
} else if (apiUrl) {
var h2Element = element.querySelector('h2');
text = h2Element ? h2Element.myLen.trim() : '';
apiUrlsCenter.push({ order: order, id: id, text: text, api_url: apiUrl });
}
});
document.querySelectorAll('#col-right div').forEach(function(element, index) {
var apiUrl = element.getAttribute('apiurl');
var id = element.id;
var text = element.innerHTML.trim(); // Assuming the text is the innerHTML of the element
var order = apiUrlsRight.length;
if (apiUrl === 'txt') {
var clone = element.cloneNode(true);
clone.querySelectorAll('span').forEach(function(span) {
span.parentNode.removeChild(span);
});
var innerText = clone.innerText.trim();
apiUrlsRight.push({ order: order, id: id, text: innerText, api_url: null });
} else if (apiUrl) {
var h2Element = element.querySelector('h2');
text = h2Element ? h2Element.innerText.trim() : '';
apiUrlsRight.push({ order: order, id: id, text: text, api_url: apiUrl });
}
});
var result = {
// FIXME : boardName will be entered in the save board form
"Name" : boardName,
"Description": boardDesc,
"Hus": myParam,
"col-left": apiUrlsLeft,
"col-center": apiUrlsCenter,
"col-right": apiUrlsRight
};
alert(JSON.stringify(result));
return sendDataToAPI(JSON.stringify(result));
}
// function to send and save the collected data from the current borad to the server thriugh the API
function sendDataToAPI(myJSON) {
base_url_API = "http://localhost:5000";
const myApiUrl = base_url_API+"/boards/save"; // Replace with your API URL
const requestOptions = {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: myJSON //.stringify(myJSON)
};
fetch(myApiUrl, requestOptions)
//.then(response => response.json())
.then(data => {
console.log("Response from API:", myJSON);
// Handle the response from the API as needed
alert("Board saved!");
})
.catch(error => {
cl("myJSON");
cl(myJSON);
console.error("Error:", error);
// Handle any errors that occur during the request
});
}
//function to prepare the tha API request upon a board JSON
function getFormId(api_url) {return api_url[0].toUpperCase() + api_url.split("/")[1][0].toUpperCase();};
function loadBoards() {
////////////////////////////////
// LOAD BOARD
// button listener to get the BOARD LIST from the server
const buttonElement = document.getElementById("loadListBoardsButton");
buttonElement.addEventListener("click", function() {
fetchDataAndGenerateHTML(myParam);
});
//JAUME
// Test JSON Board:
myJSON = {"name":"Charlie","hus":"Charlie","description":"Lorem <a href=\"#\">Ipsum is</a> simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen.","col-left":[{"order":0,"id":"P-txt-728265","text":"Here a text","api_url":null},{"order":1,"id":"parallel-8001586","text":"","api_url":"parallel/monthly?hus=Charlie&family=MP1_1&type=celsius&year=2020&month=1"}],"col-center":[{"order":0,"id":"G-txt-956767","text":"Here a text","api_url":null},{"order":1,"id":"grid-190619","text":"","api_url":"grid/monthly?hus=Charlie&sensor=Temp_MP1_1_Pos1&type=celsius&year=2023&month=01"}],"col-right":[{"order":0,"id":"H-txt-518613","text":"Here a text","api_url":null},{"order":1,"id":"horizon-986338","text":"","api_url":"horizon/daily?hus=Charlie&family=MP1_1&type=celsius&day=2023-04-12"}]};
// FIXME IT NEED THE BE CALLED WITH THE JSON AD ARGUMENT!!!
// Function to generate the already loaded JSON data of a board.
async function loadBoards(myJSON) {
cl("Here I am!!");
cl(myJSON);
//myJSON = {"Name":"dddd","Description":" f fa af ffsdfsdfs fsd","Hus":"Charlie","col-left":[],"col-center":[{"order":0,"id":"grid-710994","text":"","api_url":"grid/weekly?hus=Charlie&sensor=Temp_MP1_1_Pos1&type=celsius&year=2023&week=23"}],"col-right":[]};
var cols = ["col-left", "col-center", "col-right"];
cols.forEach(col => {
if (col.length > 0) {
myJSON[col].forEach(element => {
myJSON[col].forEach(async element => {
// Get necessary variables:
var myColumn = col;
var myid = element.id;
var myTitle = element.text;
// Create DIV
createMyDiv(myid, myColumn, myTitle);
await createMyDiv(myid, myColumn, myTitle);
// setTimeout(function() {
// console.log("After 2 seconds");
// // Code to be executed after the delay
// }, 2000);
// Check if is TXT or Diagram:
if (element.text == "" ) {
cl(element["api_url"]);
var apiUrl = element["api_url"];
var formId = getFormId(apiUrl);
//createParallel(myid, formId, formData);
makeApiRequest(formId, apiUrl, myid);
if (element.api_url != null ) {
cl("-> element.api_url: ");
cl(element.api_url);
var apiurl = element.api_url;
var formId = getFormId(apiurl);
cl("-> formId: "+formId);
var sensor = getValueByKeyFrrmUrl("sensor", apiurl);
var type = getValueByKeyFrrmUrl("type", apiurl);
var year = getValueByKeyFrrmUrl("year", apiurl);
switch (formId) {
case "PD":
var family = getValueByKeyFrrmUrl("family", apiurl);
var day = getValueByKeyFrrmUrl("day", apiurl);
cl("PD LoadBoards:");
cl(formId+" - "+apiurl+" - "+myid+" - "+myTitle+" - "+family+" - "+type+" - "+day);
makeApiRequest(formId, apiurl, myid. myTitle, family, type, day);
break;
case "GW":
var week = getValueByKeyFrrmUrl("week", apiurl);
// Trans for week and year to DD-MM-YYYY
var startingDate = getFormattedDateFromWeek(week, year);
cl("startingDate: "+startingDate+" -formId - "+formId+" -apiurl: "+apiurl+" -myid: "+myid+" -myTitle: "+myTitle+" -semsor: "+sensor+" -type: "+type+" -week: "+week+" -year: "+year);
makeApiRequest(formId, apiurl, myid. myTitle, sensor, type, startingDate);
break;
case "GM":
var month = getValueByKeyFrrmUrl("month", apiurl);
makeApiRequest(formId, apiurl, myid. myTitle, sensor, type, year, month);
break;
case "GY":
makeApiRequest(formId, apiurl, myid. myTitle, sensor, type, year);;
break;
default:
makeApiRequest(formId, apiurl, myid);
break;
}
} else {
var formId = "TXT";
createTXT(myid, element.text);
@ -1851,16 +1963,78 @@ function loadBoards() {
}
});
//Prepara the variables:
// formId, apiUrl, myid, myTitle, ...args
}
// for each entry of JSON: make calls: createDiv
// Check if is TXT or DIAGRANM: then call makeApiRequest
// function to load THE LIST OF boards FOR AN SPECIFIC hOUSE
function fetchDataAndGenerateHTML(husName) {
base_url_API = "http://localhost:5000";
var apiUrl = base_url_API+"/boards?hus="+husName;
cl(apiUrl);
fetch(apiUrl)
.then(response => response.json())
.then(jsonData => {
const generatedHTML = generateHTML(jsonData);
// cl("List Boards HTML:");
// console.log(generatedHTML);
document.getElementById("loadBoard-pills-default").insertAdjacentHTML('beforeend', generatedHTML);
})
.catch(error => {
console.error("Error:", error);
});
}
// function to load one boards JSON data
function fetchOneBoardData(husName, boardFilename) {
//base_url_API = "http://localhost:5000";
//${base_url_API}+"/boards/load?hus="+${myParam}+"&filename="+${filename}
//http://localhost:5000/boards/load?hus=Charlie&filename=test1.json
var apiUrl = base_url_API+"/boards/load?hus="+myParam+"&filename="+boardFilename;
cl("-> apiUrl: "+apiUrl);
fetch(apiUrl)
.then(response => response.json())
.then(jsonData1 => {
cl("List Boards JSON:");
console.log(jsonData1);
loadBoards(jsonData1);
})
.catch(error => {
console.error("Error:", error);
});
}
function generateHTML(jsonData) {
let html = '<h2>List of saved boards. Just click the one you want to load.:</h2><p>&nbsp:</p><ol>';
for (let i = 0; i < jsonData.length; i++) {
const item = jsonData[i];
html += `<li>${item.Name}</li>`;
html += '<ul>';
html += `<li>Description: ${item.Desc}</li>`;
html += '<p>&nbsp;</p>';
html += '<button onclick="fetchOneBoardData(\''+myParam+'\', \''+item.Filename+'\');" type="button" class="loadme btn btn-info"><i class="fa fa-bolt"></i>Load me!</button>';
html += '</ul>';
html += '<p>&nbsp;</p>';
}
html += '</ol>';
return html;
}
function checkElementExistence(myid, apiUrl) {
const element = document.getElementById(myid);
if (element) {
element.setAttribute("apiurl", apiUrl);
return
} else {
setTimeout(function() {
checkElementExistence(myid, apiUrl);
}, 1000); // Retry after 1 second (adjust the delay as needed)
}
}
///////////////////////////////////
// Server API:
// Define a function to make the API request
function makeApiRequest(formId, apiUrl, myid, myTitle, ...args) {
@ -1944,8 +2118,12 @@ function makeApiRequest(formId, apiUrl, myid, myTitle, ...args) {
// Make an AJAX request to your Flask API
var apiRequest = `http://localhost:5000/${apiUrl}`; ///parallel/daily?family=${family}&type=${type}&day=${day}`;
cl(apiRequest);
var myDiv_ = document.getElementById(myid);
var myCol = getName(formId[0]).split("-")[1];
document.getElementById(myid).setAttribute("apiurl", apiUrl);
//if (myDiv_ && myDiv_.hasAttribute("apiurl")) {
checkElementExistence(myid, apiUrl)
//document.getElementById(myid).setAttribute("apiurl", apiUrl);
//}
fetch(apiRequest)
.then((response) => {

Loading…
Cancel
Save