MeasurementTesting / templates /proposed-GUI.html
Marthee's picture
Update templates/proposed-GUI.html
7867861 verified
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>
<link rel="stylesheet" href="https://use.typekit.net/zos0ars.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="static/style.css">
<link rel="stylesheet" href="static/MenuStyle.css">
<link rel="stylesheet" href="static/LegendPageStyle.css">
<link rel="stylesheet" href="static/popups.css">
<link rel="stylesheet" href="static/IMG-Larger.css">
<link rel="stylesheet" href="static/searchButton.css">
<meta charset="utf-8">
<title>ADR Console</title>
<link rel = "icon" type = "image/png" sizes = "180x154" href = "static/images/TSAlogoCropped180x154.png">
<link rel = "icon" type = "image/png" sizes = "32x27" href = "static/images/TSAlogoCropped32x27.png">
<link rel = "icon" type = "image/png" sizes = "16x14" href = "static/images/TSAlogoCropped16x14.png">
<link rel = "mask-icon" href = "static/images/TSAlogoCropped180x154.png">
<link rel = "shortcut icon" href = "static/images/TSAlogoCropped180x154.png">
</head>
<body >
<div id="pdf-container"></div>
<div id="all">
<!-- {% include 'loading.html' %} -->
{% include 'loading.html' %}
</div>
<!--Main tab links-->
<div class="tab" >
<div class="container" id="toggle">
<div class="bar1"></div>
<div class="bar2"></div>
<div class="bar3"></div>
</div>
<button class="tablinks" id="pagetitle" onclick="openTab(event, 'home')">ADR Console <i class="fa fa-home" > </i></button>
<!-- <button class="tablinks" id="LegendHist" onclick="openTab(event, 'legends')">Legends History <i class="fa fa-caret-down"></i></button> -->
<a class="tablinks" id="LegendHist" href="{{ url_for('legendDirectory') }}">
Legends History <i class="fa fa-caret-down"></i>
</a>
<!-- Container for dynamic tabs -->
<div id="dynamicTabs" class="dynamicdropdownclass">
<!-- This will be the dropdown content (FramestabsDropdown) -->
<!-- <div id="FramestabsDropdown"></div> -->
</div>
<button class="dropbtn" onclick="userguideclick()"><img id="infoImg" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAHz0lEQVR4nNVbW0xVVxC9SAEfNPGRCJICGoWKRkUUNfEVFUnsn0ZjfARfAWmq8UNLfSUmxkLxCzDS6kcrDx8/xkeiaFujJia1ifFDRPyw0Fi0xjeliKi4mnU49+bcfeZwufeefaErmYQczt2zZ/bsPbNn5ng8mgFgAoDNAA4B+BnAnwBaYUer+b/L5rv8TYbn/wYA0QCWAKgG8DfCx2NzLI4Z7emvAJAEoNScsC5w7O8AjPL0FwBIAfA9gLeIHDoAHAaQ3JeCxwLYDaA90GyfPn2KM2fOoKSkBOvXr0dOTg6mT5+OjIwMg/g3n23YsMF45+zZs3j27FlvFPEvgG8AxERa+GwAjT3NrL6+HkVFRZg8eTKioqLAnwVD/M2UKVOwc+dO3L17N5AiGgBkRUr4AgCd0izev3+P6upqZGVlBS1wIJo2bRpqamoMHg7gFtwGIEqX4HEATkmcP378iGPHjmHMmDGuC67S2LFjDUWQpwOOc3u6LfynAH6RuN25cwezZ8/WLrhK8+bN62lrMN6Id1P43yUuR44cQVxcXMSF9xJ5l5WVOSnht7CVgG6z/1Ud+c2bN1i+fHmfCa7SypUrjTkJuBzydgAQJe35V69eYc6cOdqEiY2NRXx8fNC/mzVrFp4/fy4poTZUBWxTR3r58qXhmnSZc0VFBdrb231ny9SpU4MaIzMz01ggAV+F4uc7VbOfO3eutpU/dcruYJqbm4M+Y2gJXiUqLjIrmAivUR1B557nSjshWCvwngkOwVLgiBHd4a0faJq6hCcVFDC2ksEAKJQxKysrpeGKAgmfqsb23Iu6Xd2WLVtE4Z88eYKYmJiQxhw4cKAUJ/Du8FlPCvjB+jajrfnz52sVnsQLkRTirl27NqxxeWYJEWNFT/f5t9Y3Gd7qFt5LvAm2tbUZfOnOeGt0Y9za2lpVAQwYEiUFlFrf+vDhA8aNGxcxBZBo7qNHjw7Z7J3uDoJ1lajCf6Kmr6qqqiIqvE46fpz3Iz888kuvAfhCfUPHldaJoqOjkZycjKSkpJByB4GICRcBuVYF1Fj/w9MzEoJPmjTJsDRr9NbY2Ijx48e7zkvwCD9ZY34/82cmR6fgEydOxIULFxzv9Eyfuc1z925bePPIq4AM9T9cGR2C07x37dqFzk4xoeTDtWvXXOfNLS3gcyqg0PqELmjAgAGuT2DQoEHGyvYG5eXlrvOnTEKitcBjVmF8YEbWbeaDBw/GlStX/DjT/Lu6ukQFrFixQosFnj9/XmVV5jGTBj4UFxe7ynTIkCG4evWq35X64MGDxon/+vVrm/D02cOGDdOigNJSv1CHqKMCmq1P1q1b56rZX79+3Rj33r17KCwsNBTiDX8l3LhxQ4vwpI0bN6rs/qACuuNPE4sWLXKNIX37yZMnkZuba/PvO3bsEBWwd+9ebQpg8UVBKxXg54uys7O1TcBKXstQwaBFF8+ZM2eq7LqoAD/QNHULzz0u3f5YQtPhgbw0YQIr9f7w9IUCVq1aJa4+Cx46+TopoCvSW+DEiROiAtasWaOVr9MWaNN1CDpdfKT0NWOCkSNHauXtdAg2W5+4lYjoKUsj4datW9otb9OmTaIbvGx9wvq8zkkcOHBAVACf61YAAzApEDqkOxS20s2bN0UF6Kw5BAqFN0fiMkQaOnSokWpT0dra6moaLIjLUL54HWZXh45JLF26VFz906dPa1991hcEpHlzAsyR+cC2FB2TOHyYfU12sDCiWwF79uxR2bZYU2Lsw/OhoaFByyTu378vKiA1NVW7AphqU/CjVQFsQnSlJOVEw4cPF1NgTU1N2oVncCcgR+3ufKwzLF2yxKZjA0xZ61YAb6Sq+du6TtHdgekDT+u0tDTXJrFv3z5RAVu3brW9m5CQgP379yMvLy9svizuCJ7nW6kyNMrswPSBLW9uKeDixYuiAhYvXux7h+nwo0ePoqOjw8gWuREbCKvP0liCU32w0vom9+yCBQtcUcCDBw9EBfCsWbZsGerq6nw5wpaWFldcMTvJhHOnTBSeYO+tWUL2gQUFlprDmQizQVxVCepzeqCUlJSwheecmYZT8A+LwJ6egO7eWz/Qf4czmREjRqA3YJbIrYQoW/gEbO9ReEuLDNtJ/MC2k1AnwzD33bt3joLTTFkLcCscXr16tcSmvtdN1QCy1F4BNklxT4U6KV6yJDx8+BALFy50RXASGzqE7cYHmb0S3gsAtr4VFjHZihbKxBITE42Dji6J+cDbt28jPz/f1fYbzk2qNQD40hMK0N14bFNCOJbAWkG4h6rTyjsIXxWS8JbzgI3HULdDOGeC28Q97+BlLoX9MQWAeLPx2K7aqiqj7tdXgtOStDZLK0rwS51Z44RIdJKpxABN8PPWlXdHeGU72M4ErxtjN1YkmqrS09Ol8NbPMLV+QwQgz4ynbeAJz9udjvLWjBkzjHqClFKzfjKjTXAhTrAFS1bQPNmWwl7fUHKM/A27OpjJEZIZUpATnJ8PFwBiAHyt3h0kMNF67tw5oz7PEjVvgExSeD+b4+ryGfP2fIfZ2xcvXqAXYGy/PeKfzVnB3lsztS5uC00gr/KAF5tIAkAi6ypqgtVlMJNT7Hif7w9Ad3otl3145oTDxV9MYDJ30q8/nvY4gK1o5seWjFjon5sASDEruyX5vzrz3XwA6bon+B8RXxEBPsptqAAAAABJRU5ErkJggg=="></button>
</div>
<div id="FramestabsDropdown"> </div>
<div id="mySidebar" class="slide-out">
<div id="menuOptions">
<li onclick="openTab(event, 'home')" >Measure Plans </li>
<li><a href="{{ url_for('searchDocument') }}">Search in Documents</a></li>
</div>
</div>
<div id="home" class="tabcontent" >
<div id="loading" hidden> </div>
<div id="canvaswindow" hidden="until-found">
<canvas id="myCanvas"></canvas>
<br>
<input type="button" value="Draw New Shape" id="NewShapeButtonId" />
<input type="button" value="Undo" id="undoButtonId" />
<div id="colorpickers">
<input type="color" id="color" value="#2FFFFF" >
</div>
<input type="button" value="Save" id="savecanvas" />
</div>
<div id="rightside" hidden="until-found">
<div id="backgroundimg" >
<div id="imgs">
<!-- image here -->
</div>
<div id="underimgbuttons">
<!-- buttons here -->
</div>
</div>
</div>
<div id="myModal" class="modal" >
<span class="close">&times;</span>
<img class="modal-content" id="img01">
<div id="caption"></div>
</div>
<form method="post" id="myForm" enctype="multipart/form-data">
<!-- <div class="projnamedp">
<input type="text" placeholder="Project" name="selectproj" class="selectionsProj" id="selectionsProjid" oninput="filterFunction(this,event)" >
<ul>
</ul>
</div> -->
<input type="button" id="refreshAPIbutton" title="Refresh data retrieved from MC" value="Refresh data retrieved from MC ">
<div id ="">
<select name="selectproj" class="selectionsProj" id="selectionsProjid" required > </select>
</div>
<div id ="projectpart">
<select name="selectprojp" class="selectionsProjp" id="selectionsProjpid" required> </select>
</div>
<div id ="projectsection">
<select name="selectprojs" class="selectionsProjs" onchange=getproj() required> </select>
</div>
<div id ="tomeasurediv">
<div>
<label id="measureLabel">Document To Measure</label>
<input type="search" onkeyup=filterFunction(this.id) id="tomeasureSearchInput">
<!-- <button id="refreshDropboxButtonID"></button> -->
<i hidden class="fa fa-dropbox fa-lg" id="refreshDropboxButtonID">
<span class="dropboxtip">The console updates projects retrieved from Dropbox automatically at 9:00 am and 9:00 p.m. If you need to access any projects in between, just click on this button. Please note that it will refresh the files related to the project you chose only.</span> </i>
</div>
<div id="measureCheckbox">
<!-- <select style="margin-left: -1%;" hidden name="measureselectname" id="measureselectid" multiple size="5"></select> -->
<div id="measureContainer" hidden required></div>
<div id="dxfdiv" hidden="until-found">
<input type="button" id="pdftodxfFileButton" onclick="document.getElementById('pdftodxfFile').click();" value="Upload DXF File" >
<input type="file" id="pdftodxfFile" name="pdftodxfFilename" >
</div>
<select id='selectunitA' hidden>
<option id="m2" value="m2" >m&#xb2; </option>
<option id="mm2" value="mm2" >mm&#xb2; </option>
</select>
<select id='selectunitP' hidden>
<option id="m" value="m" >m </option>
<option id="mm"value="mm" >mm </option>
</select>
</div>
</div>
<div id ="relvDocdiv">
<label id="relvDocLabel">Other Relevant Documents</label>
<input type="search" onkeyup=filterFunction(this.id) id="relevantSearchInput">
<br>
<div id ="relvdiv">
<div id="relvselectid" hidden></div>
<!-- <select style="margin-left: -1%;" hidden name="relvselectname" id="relvselectid" multiple size="5"> </select> -->
<iframe id="pdfFrame" hidden></iframe>
</div>
</div>
<div id="ratios"> </div>
<div id="radiosColors" hidden="until-found">
<div id="checkboxLine">
<input type="checkbox" id="levelcheckbox">
<label id="nLevels" name="levelsnamelabel">Leveled Plan</label>
<i class="fa fa-info-circle" id="infotool">
<span class="tooltiptext">
Choose whether this project contains levels or not. Leave the checkbox unchecked if you want to measure the entirety of the plan.
<br> Please check the box on this line if you want to measure certain areas of the plan or have the plan divided into levels. Once the checkbox is ticked, a window will appear that will allow you to draw on the PDF. Click the save button at the bottom of the page when you are done.
</span>
</i>
</div>
<div class="button-container">
<input type="button" id="popupforextratext" title="Add Key Information" value="Add Key Information">
</div>
<!-- <br>
<input type="checkbox" id="levelcheckbox" >
<label id=nLevels name="levelsnamelabel" >Leveled Plan </label>
<i class="fa fa-info-circle" id="infotool" > <span class="tooltiptext">Choose whether this project contains levels or not. Leave the checkbox unchecked if you want to measure the entirety of the plan. <br> Please check the box on this line if you want to measure certain areas of the plan or have the plan divided into levels. Once the checkbox is ticked, a window will apear that will allow you to draw on the PDF. Click the save button at the bottom of the page when you are done. </span> </i> -->
</div>
<div id ="saveOPdiv">
<button id="measureADRbutton">Measure using ADR</button>
<script src="https://cdn.lordicon.com/bhenfmcm.js"></script>
<lord-icon
src="https://cdn.lordicon.com/ynwbvguu.json"
trigger="hover" colors="primary:black" id="addicon" style="display: none;" onclick="duplicate()" >
</lord-icon>
</div>
<audio id="myAudio" autoplay></audio>
</form>
<div id="progressBar" hidden>
<div id="progress">0%</div>
</div>
<div id ="duplicater" class="duplicaterclass" hidden="until-found">
<label id="labelArrayId" hidden="until-found"> </label>
<select name="measurementscripts" class="measurementselections" id="measurementselectionsid" > </select>
<select name="select" class="selections" id="selectionsid" >
</select>
<select name="measureitem" class="measureitems" id="measureitemsid"> </select>
<br>
<div id="repeatforloop" class="repeatforloopclass00" name="repeatforloopname " >
<select type="text" id="text0" name="text1name" placeholder="GB-1" class=gb> </select>
<input type="text" id="text1" name="text2name" placeholder="A" class=a>
<input type="text" id="text2" name="text3name" placeholder="Depth" class=depth>
<script src="https://cdn.lordicon.com/bhenfmcm.js" ></script>
<lord-icon
onclick="addmctnameicon()"
src="https://cdn.lordicon.com/mecwbjnp.json"
trigger="hover"
class="addmctnameclass"
id="addmctnameid"
colors="primary:black,secondary:black">
</lord-icon>
</div>
</div>
<button hidden id="doneebackground" onclick="getSecondData()" > Export Summary </button>
<button hidden id="summarytoXML" onclick=summary_to_XML() > Summary to XML</button>
<div hidden id ="duplicaterhidden" class="duplicaterclasshidden">
<label id="labelArrayId" hidden="until-found"> </label>
<select name="measurementscripts" class="measurementselections" id="measurementselectionsid" >
<option value="" disabled selected hidden>Select</option>
</select>
<select name="select" class="selections" id="selectionsid"> </select>
<select type="text" name="measureitem" class="measureitems" id="measureitemsid"> </select>
<!-- <select name="select" class="selections" id="selectionsM-M2" > </select> -->
<br>
<div id="repeatforloophidden" class="repeatforloopclasshidden" name="repeatforloopnamehidden " > <!-- onchange="getmctName()" -->
<select type="text" id="text0" name="text1name" placeholder="GB-1" class=gb> </select>
<input type="text" id="text1" name="text2name" placeholder="A" class=a>
<input type="text" id="text2" name="text3name" placeholder="Depth" class=depth>
<script src="https://cdn.lordicon.com/bhenfmcm.js" ></script>
<lord-icon
onclick="addmctnameicon()"
src="https://cdn.lordicon.com/mecwbjnp.json"
trigger="hover"
class="addmctnameclass"
id="addmctnameid"
colors="primary:black,secondary:black">
</lord-icon>
<script src="https://cdn.lordicon.com/bhenfmcm.js"></script>
<lord-icon
onclick="deletemctnameicon()"
src="https://cdn.lordicon.com/rivoakkk.json"
trigger="hover"
class="deletemctnameclass"
id="deletemctnameid"
colors="primary:black,secondary:black">
</lord-icon>
</div>
</div>
</div>
<div id="legends" class="tabcontent">
<ul class="graynavbarLegend" >
<label class="label1">Project Name / Project Part / NRM Section /</label> <label class="label2">Legend</label>
<div class="legendtime">
<div style="display: inline-flex;">
<label class="CreatedTime"> Created Time </label>
<button id="sortBtnCreateDesc" class="sortbutton" onclick="sortlegends(this.id)"><i id="CreatesortDesc" class="fa fa-sort-amount-desc" aria-hidden="true" ></i> </button>
<button id="sortBtnCreateAsc" class="sortbutton" onclick="sortlegends(this.id)"><i id="CreatesortAsc" class="fa fa-sort-amount-asc" aria-hidden="true" ></i></button>
</div>
<div style="display: inline-flex;">
<label class="EditTime"> Last Edited Time </label>
<button id="sortBtnEditDesc" class="sortbutton" onclick="sortlegends(this.id)"><i id="EditsortDesc" class="fa fa-sort-amount-desc" aria-hidden="true" ></i></button>
<button id="sortBtnEditAsc"class="sortbutton" onclick="sortlegends(this.id)"><i id="EditsortAsc" class="fa fa-sort-amount-asc" aria-hidden="true" ></i> </button>
</div>
</div>
</ul>
</div>
<div id="consoleContent"></div>
<div class="dropdown-content" id="dropdown-contentUserguideId" name="tobeclosed">
<div id="userguidetext" >
<div id="UserguideRibbon">
<label id="UserGuideHeader"> User Guide Text: Before using this tool, kindly read the following carefully. </label>
<button id="homeguidebutton" style="background-color: transparent; border: none;" onclick="ShowSectionUserguide(this)">
<i class="fa fa-home fa-lg" id="userguideHome"></i>
</button>
<div class="Userguidecontainer" id="UserGuidetoggle" onclick="userguidetoggleFunction()">
<div class="UserGuidebar1"></div>
<div class="UserGuidebar2"></div>
<div class="UserGuidebar3"></div>
</div>
<button type="button" class="closeModal" id="userguideClose" data-dismiss="modal">&times;</button>
<button style="background-color: transparent; border: none;" id="userguideTableMaya" onclick="userguideMayaTableClick()">
<i class="fa fa-th fa-lg" aria-hidden="true"></i>
</button>
<div id="UserGuideSideBar">
<div id="UserGuidemenuOptions">
<li onclick="ShowSectionUserguide(this)">1.0 Substructure</li>
<li onclick="ShowSectionUserguide(this)">2.1 Frames</li>
<li onclick="ShowSectionUserguide(this)">2.2 Upper Floor</li>
<li onclick="ShowSectionUserguide(this)">2.3 Roof</li>
<li onclick="ShowSectionUserguide(this)">2.4 Stairs</li>
<li onclick="ShowSectionUserguide(this)">2.5 External Walls</li>
<li onclick="ShowSectionUserguide(this)">2.6 External Openings</li>
<li onclick="ShowSectionUserguide(this)">2.7 Internal Walls</li>
<li onclick="ShowSectionUserguide(this)">2.8 Internal Openings</li>
<li onclick="ShowSectionUserguide(this)">3.1 Wall Finishes</li>
<li onclick="ShowSectionUserguide(this)">3.2 Floor Finishes</li>
<li onclick="ShowSectionUserguide(this)">3.3 Ceiling Finishes</li>
<li onclick="ShowSectionUserguide(this)">4.0 Fittings, Furnishings and Equipments</li>
<li onclick="ShowSectionUserguide(this)">5.0 Services</li>
<li onclick="ShowSectionUserguide(this)">5.1 Sanitary</li>
<li onclick="ShowSectionUserguide(this)">7.0 Works to existing buildings</li>
<li onclick="ShowSectionUserguide(this)">8.1 Site Preparation Works</li>
<li onclick="ShowSectionUserguide(this)">8.2 Roads, Paths, Pavings</li>
<li onclick="ShowSectionUserguide(this)">8.3 Soft Landscaping</li>
<li onclick="ShowSectionUserguide(this)">8.4 Fencing, Railing, Walls</li>
<li onclick="ShowSectionUserguide(this)">8.5 External Fixtures</li>
<li onclick="ShowSectionUserguide(this)">8.6 External Drainage</li>
<li onclick="ShowSectionUserguide(this)">8.7 External Services</li>
<li onclick="ShowSectionUserguide(this)">8.8 Minor Buildings</li>
</div>
</div>
</div>
<div id="textfirstpage">
<label style="font-weight: bold;">
After reading this user guide, if you still encounter any issues or have suggestions for improving the system, please don't hesitate to contact the ADR team.
</label>
<br>
<label style="font-style: italic;">
This page provides general guidance on using the console. For details on a specific section, refer to the menu and select the desired section by clicking the '<i class="fa fa-bars" aria-hidden="true"></i>' icon.
<br>
In the top right corner, you will find this icon '<i class="fa fa-th fa-lg" aria-hidden="true"></i>', which, when clicked, takes you to a Google Spreadsheet containing a summarized table of the main AI features implemented and
planned for the ADR console, along with the sections where they are applied.
</label>
<br>
The tool is divided into two main parts:
<br><br>
<i class="fa fa-circle" aria-hidden="true"> </i> <label id="userguideheadings"> First Part </label>
<br>
<div style="margin-left: 40px;">
The system automatically refreshes all data retrieved every 5 minutes from the MC including project names, parts, sections, and MC-T names every. However, if you notice missing information, click this button
<span style="background-color: blue; color: white; padding: 2px 8px; border-radius: 4px; font-style: italic; margin-top: 5px;">Refresh data received from MC</span> to retrieve the latest MC updates.
<br>
<label id="underlinedLables">Inputs: </label>
<br>
<li>
Use the three dropdown menus to select the project name, part, and section to measure.
<br>
<img src="static/images/Dropdowns_3.png" alt="Dropdown menus example" style="margin-top: 10px; width:240px;">
<label style="font-style: italic; margin-left: -10px; margin-top: 50px;color: #2e83c7;"> Ensure the correct 'Project Section' is selected, as it affects the applied code. </label>
<br>
</li>
<li>
<label style="font-size: 15px;"> Document To Measure: </label>
<br>
Clicking a document's name opens a PDF preview in a separate tab attached to the black ribbon inside the console. Checking the box next to the document selects it as the document to measure.
<br>
<li>
When retrieving documents for measurement, if multiple files share the same name on Dropbox, a popup may appear. In such cases, please rename the files in Dropbox, then return to the console and click the following icon:
<i hidden class="fa fa-dropbox" style="color:white; background-color: #2e83c7; border-radius: 4px;"></i> to retrieve the updated documents. You can then select the desired document for measurement. Please note that this process will refresh all documents in the selected project folder.
</li>
<br>
<label style="font-style: italic;"> Pixel-to-Metric conversion important notes:</label>
<br>
Upon selecting a plan, the console automatically downloads the PDF with a colored rectangle. Open it in Foxit Reader, Adobe, or Bluebeam to measure its area and perimeter in the desired metric unit.
Enter these values in the provided textboxes. A dropdown next to each textbox lets you choose between meters (m) or millimeters (mm) for accurate scaling.
<br>
This rectangle serves as a scale check for Bluebeam. Refer to the relevant section for further details.
<br>
<li>
Click <span style="background-color: #b216c7; color: white; padding: 2px 8px; border-radius: 4px; font-style: italic;">Add Key Information</span> button to open a popup where you can input additional details to assist in the detection process.
</li>
</li>
<label id="underlinedLables">Outputs: </label> <br>
The right panel displays results in three sections:
<li>A preview of the measured plan, which you can click to expand.</li>
<li>Three buttons:
<li> <label style="font-weight: bold;" >"Legend and Data Created" </label> – Access the Google Sheet legend.</li>
<li> <label style="font-weight: bold;" >"Click to View as PDF" </label>– Opens the marked-up PDF in Dropbox. <label>(Do not download for this feature.) </label></li>
<li> This icon <i class='fa fa-refresh' style="color:white; padding: 3px 3px;background-color: rgb(255,0,255); border-radius: 4px;"></i> button allows you to get the deleted markups (in case you deleted any from the pdf on dropbox).</li>
</li>
<br>
<label style="font-weight: bold;" > ONLY IN DROPBOX VIEW. DO NOT DOWNLOAD THE PDF FOR THIS FEATURE. </label>
<br>
<label style="font-style: oblique;" >
Note : The algorithm is based on detecting shapes and colors from the plan. Some shapes such as tables and textboxes carrying plan-related information, may also be viewed as shapes and so added to the algorithm.
</label>
Any markup that you deem unnecessary in the pdf can be removed. After deleting any markup, the console will notify you with a message asking whether you would like to delete it from legend or not and the legend will be updated accordingly.
</div>
<br>
<i class="fa fa-circle" aria-hidden="true"> </i> <label id="userguideheadings"> Second Part </label>
<br><br>
<div style="margin-left: 40px;">
To open the Google sheet with the created legend, first click the button labeled "Legend and Data created." Names of each shape should go in the first column of the sheet labeled ‘Guess’.
<br>Ex. GB-1.
<br> Then, return to this page, the ADR Console, to finish entering the remaining data after you have finished entering the guessed names in the legend.
<br> Three dropdown menus and three text boxes are present.
<li style="list-style-type:square;"> You can select the type of the shape from the first dropdown: <!--by selecting either: -->
<br> &emsp;&emsp; e.g. (1.0 Substructure) Ground Beam or Pile Cap. Refer to the relevant section for more details.
<!-- <br> &emsp;&emsp; b. (3.2 Floor Finishes) Floor or Wall -->
</li>
<li style="list-style-type:square;"> In the second dropdown, you will find a list of MC-T Names. Choose Accordingly.</li>
<li style="list-style-type:square;"> The third dropdown menu has the unit of the MC-T Name you have chosen.</li>
<br> Note: If the unit was (m), choose whether you wish to extract perimeter or length data from the third selection.
<br><br><label style="font-style: italic;"> Regarding the MC-T naming process: </label>
Then add the relevant detail and depth to the rows underneath the dropdowns.
You can add/ subtract rows by using the + and - button.
<br>
You can add another block and repeat the process for another item by clicking the button next to "Measure using ADR".
</div>
</div>
<div id="1_0textUserGuide" hidden class="othesectionsuserguide">
User guide in progress...
</div>
<div id="2_1textUserGuide" hidden class="othesectionsuserguide">
User guide in progress...
</div>
<div id="2_7textUserGuide" hidden class="othesectionsuserguide">
User guide in progress...
</div>
<div id="2_8textUserGuide" hidden class="othesectionsuserguide">
User guide in progress...
</div>
<div id="3_2textUserGuide" hidden class="othesectionsuserguide">
User guide in progress...
</div>
<div id="3_3textUserGuide" hidden class="othesectionsuserguide">
User guide in progress...
</div>
</div>
</div>
<!-- POP-UP code -- to handle errors -->
<!-- Link to trigger modal -->
<!-- Modal popup box -->
<div id="mpopupBox" class="mpopup" name="tobeclosed">
<!-- Modal content -->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="closeModal" data-dismiss="modal">&times;</button>
<h2 id="TopTextModal">Error</h2>
</div>
<div class="modal-body">
<p id="modal-bodyText">
</p>
<br>
</div>
</div>
</div>
<div id="dialog-container" class="overlay" name="tobeclosed">
<!-- Modal content -->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="closeModal" >&times;</button>
<h2 id="TopTextModalWarning">Warning!</h2>
</div>
<div class="modal-body">
<p id="modal-bodyTextp">The console updates projects retrieved from Dropbox automatically at 9:00 am and 9:00 p.m. If you need to access any projects in between, just click on this button. Please note that it will refresh the files related to the project you chose only.
</p>
<div id="duplicaterExtra" hidden="until-found">
<div id="repeatforloopExtra" class="repeatforloopclassExtra0" name="repeatforloopExtraname " >
<label id="modalColIndex">Index</label>
<i class="fa fa-info-circle smallFaIcon" id="infotoolModal">
<span class="tooltiptext" id="modaltooltips">
Index of column. (Optional)
</span>
</i>
<label id="modalColumn">Type</label> <label id="modalGray">(from drawing)</label>
<i class="fa fa-info-circle smallFaIcon" id="infotoolModal">
<span class="tooltiptext" id="modaltooltips">
Enter the title for the column as it will be shown in Bluebeam columns. This helps organize and categorize extracted information.
</span>
</i>
<label id="modalKeyword">Specification</label> <label id="modalGray">(from drawing)</label>
<i class="fa fa-info-circle smallFaIcon" id="infotoolModal">
<span class="tooltiptext" id="modaltooltips">
Provide a word or phrase from the data you want to help detect relevant information in the drawing.
</span>
</i>
<label id="modalCharacter">Count</label>
<i class="fa fa-info-circle smallFaIcon" id="infotoolModal">
<span class="tooltiptext" id="modaltooltips">
Set the number of characters that is expected to be captured. This helps refine the extraction by limiting or expanding the detected text.
</span>
</i>
<br>
<input type="number" id="textextra" name="text0name" placeholder="Eg: 1" >
<input type="text" id="text0extra" name="text1name" placeholder="Eg: Wall Type" >
<input type="text" id="text1extra" name="text2name" placeholder="Eg:NBS K10/" >
<input type="number" id="text2extra" name="text3name" placeholder="Eg: 3" min="0">
<script src="https://cdn.lordicon.com/bhenfmcm.js" ></script>
<lord-icon
onclick="addmctnameiconPopup()"
src="https://cdn.lordicon.com/mecwbjnp.json"
trigger="hover"
class="addmctnameclassExtra"
id="addmctnameidExtra"
colors="primary:black,secondary:black">
</lord-icon>
</div>
</div>
<div hidden="until-found" id="duplicaterExtraHidden" >
<div id="repeatforloopExtrahidden" class="repeatforloopclassExtrahidden" name="repeatforloopnameExtrahidden " > <!-- onchange="getmctName()" -->
<input type="number" id="textextra" name="text0name" placeholder="Eg: 1" >
<input type="text" id="text0extra" name="text1name" placeholder="Eg:Specification" >
<input type="text" id="text1extra" name="text2name" placeholder="Eg:NBS K10/" >
<input type="number" id="text2extra" name="text3name" placeholder="Eg: 3" >
<script src="https://cdn.lordicon.com/bhenfmcm.js" ></script>
<lord-icon
onclick="addmctnameiconPopup()"
src="https://cdn.lordicon.com/mecwbjnp.json"
trigger="hover"
class="addmctnameclassExtra"
id="addmctnameidExtra"
colors="primary:black,secondary:black">
</lord-icon>
<script src="https://cdn.lordicon.com/bhenfmcm.js"></script>
<lord-icon
onclick="deletemctnameiconPopup()"
src="https://cdn.lordicon.com/rivoakkk.json"
trigger="hover"
class="deletemctnameclassExtra"
id="deletemctnameidExtra"
colors="primary:black,secondary:black">
</lord-icon>
</div>
</div>
<br>
<div class="text-right">
<button class="dialog-btn btn-primary" id="confirm">Ok</button>
<button class="dialog-btn btn-cancel" id="cancel">Cancel</button>
</div>
<br>
</div>
</div>
</div>
</body>
</html>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.14.305/pdf.min.js"></script>
<script >
///////////////////////////////////////////////BEGIN JS CODE//////////////////////////////////////////////////
var ActiveSections=['1.0','2.1','2.7','2.8','3.2','3.3']
var menuItems = document.querySelectorAll("#UserGuidemenuOptions li");
menuItems.forEach(function (item) {
// Extract the section number (first part of the text)
var sectionNumber = item.textContent.trim().split(" ")[0];
// If the section is not in ActiveSections, disable it
if (!ActiveSections.includes(sectionNumber)) {
item.id = "disabledSection"; // Assign ID
item.style.color = "#bdbcbc"; // Greyed-out text
item.style.cursor = "not-allowed"; // Change cursor
item.onclick = null; // Disable clicking
}
});
function updateProgressBar(value) {
const progressBar = document.getElementById('progress');
progressBar.style.width = value + '%';
progressBar.innerText = Math.round(value) + '%';
}
// Function to send the Dropbox link and keyword to the server
function getURLParams() {
const urlParams = new URLSearchParams(window.location.search);
return {
pdfLink: urlParams.get('pdfLink'),
keyword: JSON.parse(decodeURIComponent(urlParams.get('keyword') || "[]")), // Decode and parse
pageNumber: parseInt(urlParams.get('page')) || 1,
zoomRect: urlParams.get('zoom') // Expecting format: "x,y,width,height"
};
}
function processPdf() {
// const pdfLink = 'https://www.dropbox.com/scl/fi/hnp4mqigb51a5kp89kgfa/00801-ARC-20-ZZ-S-A-0002.pdf?rlkey=45abeoebzqw4qwnslnei6dkd6&st=m4yrcjm2&dl=1'; // Dropbox link
// const keyword = ['115 INTEGRATED MRI ROOM LININGS','710 TRANSPORTATION'] ; // Example keyword
const { pdfLink, keyword, pageNumber, zoomRect } = getURLParams();
// Create a new FormData object to send the data as form data
const formData = new FormData();
formData.append('pdf_link', pdfLink);
formData.append('keyword', JSON.stringify(keyword));
// Send the data to the Flask server
fetch('/api/process-data', {
method: 'POST',
body: formData,
})
.then(response => response.json())
.then(data => {
if (data.download_link) {
//window.location.href = data.download_link; // This will use the rect info from Flask
console.log('Done!')
} else {
alert('Error: ' + data.error);
}
})
.catch(error => {
console.error('Error:', error);
});
}
// Call the function to process the PDF
// processPdf();
////////////////////////////////////////////////////////////////////
PopupElement=document.getElementById('modal-bodyText');
sectionSelect=document.getElementById('section-select');
$(sectionSelect).select2({
closeOnSelect: true,
width:'20ch'
});
// add project names to first dropdown from google sheet
firstdropdown=document.getElementsByClassName('selectionsProj')[0];
seconddropdown=document.getElementsByClassName('selectionsProjp')[0];
thirddropdown=document.getElementsByClassName('selectionsProjs')[0];
$(firstdropdown).select2({
placeholder:'Projects',
closeOnSelect: true,
width:'51ch'
});
$(seconddropdown).select2({
placeholder:'Project Parts',
closeOnSelect: true,
width:'51ch'
});
$(thirddropdown).select2({
placeholder:'Sections',
closeOnSelect: true,
width:'51ch'
});
var measSelect = document.getElementById("measureselectid");
var relvSelect = document.getElementById("relvselectid");
document.getElementById("all").style.display = "block";
PrjNamesArray=[];
PrjPartsArray=[];
PrjSectionsArray=[];
var partsArrwithID=[];
var firstDpwnValue;
var prjids=[]
displayprjnames()
function displayprjnames(){
var eventSource = new EventSource('/getprojectnames/');
document.getElementById('progressBar').removeAttribute('hidden')
document.getElementById('progressBar').style.display='block';
eventSource.onmessage = function (event) {
var progress = parseInt(event.data); // Progress value from Flask
if (progress <= 100) {
console.log(progress); // Log progress for debugging
document.getElementById('progress').style.width = progress + '%';
document.getElementById('progress').textContent = progress + '%';
} else {
// Final data handling when progress reaches 100%
console.log('Process completed!');
// Parse and handle the final response data (documentsToMeasure, RelevantDocuments, extracted_path)
var data = JSON.parse(event.data); // Assuming the result is a JSON array
console.log('Final result:', data);
// You can use this data to update your page or handle it accordingly
eventSource.close(); // Close the connection when finished
document.getElementById('progressBar').setAttribute('hidden',true)
document.getElementById('progressBar').style.display='none';
document.getElementById('progress').style.width = '0%'; // Reset progress for the next process
document.getElementById('progress').textContent = '0%';
document.getElementById("all").style.display = "none";
prjids=data[1];
var op0 = document.createElement("OPTION") ;
op0.text= 'Projects'
op0.value= "";
op0.hidden=true;
firstdropdown.add(op0);
for (let i=0;i<data[0].length;i++)
{
opt=document.createElement("option");
opt.textContent=data[0][i];
opt.text=data[0][i];
firstdropdown.append(opt);
PrjNamesArray.push(data[0][i]);
}
}
}
eventSource.onerror = function (error) {
console.error('Error occurred:', error);
eventSource.close(); // Close on error
PopupElement.textContent='Error occured while retrieving the Project Names. Refresh and try again. If the error continues, please contact the ADR team to fix it. ';
ShowPopUp();
};
}
/*Get chosen value and send to flask to get project parts*/
$(firstdropdown).on("change", function (e) {
console.log('clickeds')
firstDpwnValue=firstdropdown.value;
seconddropdown.innerHTML='';
var op0 = document.createElement("OPTION") ;
op0.text= 'Project Part'
op0.value= "";
op0.hidden=true;
seconddropdown.add(op0);
var ii, L = seconddropdown.options.length - 1;
for(ii = L; ii >= 0; ii--) {
if (seconddropdown.options[ii].value)
seconddropdown.remove(ii);
}
displayprojparts(prjids[(firstdropdown.selectedIndex)-1]);
})
var partsArrIDsonly=[]
function displayprojparts(val){
document.getElementById("all").style.display = "block";
console.log(val)
$.get('/getprojectparts/'+JSON.stringify(val))
.success(function(data){
document.getElementById("all").style.display = "none";
partsArrwithID= data[0];
partsArrIDsonly= data[1];
for (let i=0;i<data[0].length;i++)
{
opt=document.createElement("option");
opt.value=data[0][i];
opt.text=data[0][i];
seconddropdown.append(opt);
PrjPartsArray.push(data[0][i]);
}
})
.error(function(jqXHR, textStatus, errorThrown) {
PopupElement.textContent='Error occured while retrieving the Project Parts. Refresh and try again. If the error continues, please contact the ADR team to fix it. ';
ShowPopUp();
});
}
$(seconddropdown).on("change", function (e) {
thirddropdown.innerHTML='';
var op0 = document.createElement("OPTION") ;
op0.text= 'Section'
op0.value= "";
op0.hidden=true;
thirddropdown.add(op0);
displayprojsections(prjids[(firstdropdown.selectedIndex)-1],partsArrIDsonly[(seconddropdown.selectedIndex)-1]);
})
function isValueNotInDropdown(dropdown, value) {
// const dropdown = document.getElementById(dropdownId);
const values = Array.from(dropdown.options).map(option => option.value);
return !values.includes(value); // Check if the value is not in dropdown values
}
function displayprojsections(projectid,Partid){
console.log(seconddropdown.selectedIndex)
document.getElementById("all").style.display = "block";
if (measSelect && measSelect.hasChildNodes()) {
while (measSelect.firstChild) {
measSelect.removeChild(measSelect.firstChild);
}
}
if (relvSelect && relvSelect.hasChildNodes()) {
while (relvSelect.firstChild) {
relvSelect.removeChild(relvSelect.firstChild);
}
}
$.get('/getprojectsections/' + JSON.stringify([projectid, Partid]))
.done(function(data) {
document.getElementById("all").style.display = "none";
for (let i = 0; i < data.length; i++) {
let valueDoesNotExist = isValueNotInDropdown(thirddropdown, data[i]);
if (valueDoesNotExist) {
let opt = document.createElement("option");
opt.value = data[i];
opt.text = data[i];
let isActive = false;
for (let d = 0; d < ActiveSections.length; d++) {
if (data[i].startsWith(ActiveSections[d])) {
isActive = true;
break; // Exit loop early if active
}
}
if (!isActive) {
opt.style.color = '#bdbcbc';
opt.style.cursor = 'not-allowed';
opt.setAttribute('disabled', true);
}
thirddropdown.append(opt);
PrjSectionsArray.push(data[i]);
}
}
})
.fail(function(jqXHR, textStatus, errorThrown) {
PopupElement.textContent='Error occured while retrieving the Project Sections. Refresh and try again. If the error continues, please contact the ADR team to fix it. ';
ShowPopUp();
});
}
/*Menu bar icon mySidebar and Toggle*/
var $mySidebar = document.getElementById('mySidebar');
var $toggle = document.getElementById('toggle');
$toggle.addEventListener('click', function() {
var isOpen = $mySidebar.classList.contains('slide-in');
w3_open();
$mySidebar.setAttribute('class', isOpen ? 'slide-out' : 'slide-in');
$toggle.classList.toggle("change");
if ($mySidebar.classList.contains('slide-out')){
w3_close()
}
});
// if (thirddropdown.value){
MCTNames={}
var workerMCT = new Worker('../static/MC_T_API_Worker.js');
// workerMCT.postMessage(thirddropdown.value)
workerMCT.onmessage= function(event){
console.log('refreshed')
if (thirddropdown.value){
sectionNumber=thirddropdown.value;
MCTNames=event.data;
MCTNames=MCTNames[sectionNumber.toString().toLowerCase()]
}
console.log('MCtname::',MCTNames)
}
// }
var val=''
var worker = new Worker('../static/API_Refresh_workerJS.js');
postAPIrefreshData()
function postAPIrefreshData()
{
worker.onmessage= function(event){
if (firstdropdown.value)
{
val='firstonly'
console.log(val)
}
if ((firstdropdown.value) && (seconddropdown.value))
{
val='firstSecond'
console.log(val)
}
if (val=='firstonly')
worker.postMessage(firstdropdown.value)
else if (val=='firstSecond')
{
worker.postMessage([firstdropdown.value,seconddropdown.value,partsArrIDsonly[seconddropdown.selectedIndex-1]])
}
var data=JSON.parse(event.data);
console.log(data)
if (data)
{
if (confirm(data[0]+"\n")){
document.getElementById('all').style.display='block';
$.get('/refreshAPIAppendNewTables')
.success(function(successData){
if (data[1]==='project')
{
// console.log('projjjj')
// displayprjnames();
console.log(data[2])
for (let d=0;d<data[2].length;d++)
{
console.log(data[2][d])
opt=document.createElement("option");
opt.textContent=data[2][d];
opt.text=data[2][d];
firstdropdown.append(opt);
PrjNamesArray.push(data[2][d]);
}
}
else if (data[1]==='part')
{ if (firstdropdown.value)
{
console.log(data[2])
for (let d=0;d<data[2].length;d++)
{
console.log(data[2][d])
opt=document.createElement("option");
opt.textContent=data[2][d];
opt.text=data[2][d];
seconddropdown.append(opt);
// PrjPartsArray.push(data[2][d]);
}
}
}
else if (data[1]==='section')
{
if ((firstdropdown.value) && (seconddropdown.value))
{
console.log(data[2])
for (let d=0;d<data[2].length;d++)
{
console.log(data[2][d])
opt=document.createElement("option");
opt.textContent=data[2][d];
opt.text=data[2][d];
if(!(data[2][d].startsWith('1.0') ) && !(data[2][d].startsWith('3.2') ) && !(data[2][d].startsWith('2.8')) && !(data[2][d].startsWith('3.3')) && !(data[2][d].startsWith('2.1')) && !(data[i].startsWith('2.7'))) //||data[i].startsWith('2.2')))
{
opt.style.color='#bdbcbc';
opt.style.cursor='not-allowed';
opt.setAttribute('disabled',true)
}
thirddropdown.append(opt);
// PrjPartsArray.push(data[2][d]);
}
}
}
document.getElementById('all').style.display='none';
})
.error(function(jqXHR, textStatus, errorThrown) {
PopupElement.textContent='Error occured while retrieving projects. Refresh and try again. If the error continues, please contact the ADR team to fix it. ';
ShowPopUp();
});
}
else{
worker.terminate()
}
}
// }
}
}
/*worker.onmessage= function(event){
}
*/
// var workerDropbox = new Worker('../static/DropboxWorker.js');
// workerDropbox.onmessage= function(event)
// {
// var dataDropbox=JSON.parse(event.data);
// }
//___________________________________________________________________________________________________________
//___________________________________________________________________________________________________________
// /*Retrieve MCTNAMES Dictionary from API - Flask*/
var mctnameEmpty=false;
var sectionNumber;
function getALLMCTNAMES(){
MCTNames={}
document.getElementById("all").style.display = "block";
$.get( '/RetrieveMCTNames/')
.success (function(data){
// document.getElementById("all").style.display = "none";
console.log(data)
MCTNames=data;
sectionNumber = projsec.value.split(" ")[0]; // Get first item after splitting by space
console.log(sectionNumber);
// Find the first key in MCTNames that starts with sectionNumber
let matchedKey = Object.keys(MCTNames).find(key => key.toLowerCase().startsWith(sectionNumber.toLowerCase()));
if (matchedKey) {
console.log(matchedKey); // Found matching key
let matchedValue = MCTNames[matchedKey]; // Store matched value without overwriting MCTNames
console.log('MCTname::', matchedValue);
if (matchedValue && matchedValue.length ==0) { // Ensure matchedValue exists and has length
mctnameEmpty = true;
} else {
mctnameEmpty = false;
}
} else {
console.log("No matching key found in MCTNames");
mctnameEmpty = false; // Handle case where no key is found
}
})
.error(function(jqXHR, textStatus, errorThrown) {
PopupElement.textContent='Error occured while retrieving the MC-T Names. Refresh and try again. If the error continues, please contact the ADR team to fix it. ';
ShowPopUp();
});
// return MCTNames
}
//___________________________________________________________________________________________________________
//___________________________________________________________________________________________________________
/****Values of MCTname rows at the end of the conssole( grouping shapes) --> legend summary ****/
document.getElementById('duplicater').childNodes[1].value=[0,0]
//___________________________________________________________________________________________________________
//___________________________________________________________________________________________________________
/*Tab View of User Guide*/
// document.getElementById('secondpage').addEventListener('click',function(){
// document.getElementById('textsecondpage').removeAttribute('hidden');
// document.getElementById('textfirstpage').setAttribute('hidden',true)
// });
// document.getElementById('firstpage').addEventListener('click',function(){
// document.getElementById('textfirstpage').removeAttribute('hidden');
// document.getElementById('textsecondpage').setAttribute('hidden',true)
// });
function w3_open() {
document.getElementById("home").style.marginLeft = "25%";
document.getElementById("legends").style.marginLeft = "25%";
document.getElementById("home").style.transition= '0.8s';
document.getElementById("legends").style.transition= '0.8s';
document.getElementById("mySidebar").style.width = "25%";
document.getElementById("mySidebar").style.display = "block";
}
function w3_close() {
document.getElementById("home").style.marginLeft = "0%";
document.getElementById("legends").style.marginLeft = "0%";
document.getElementById("home").style.transition= '1.5s'
document.getElementById("legends").style.transition= '1.5s'
document.getElementById("mySidebar").style.display = "none";
}
//___________________________________________________________________________________________________________
//___________________________________________________________________________________________________________
/*Red Alert to fill in the first 3 dropdowns: prj name, part, section*/
document.getElementById('measureADRbutton').addEventListener('click',function(){
if (!document.getElementsByClassName('selectionsProj')[0].value)
document.getElementsByClassName('selectionsProj')[0].style.boxShadow='0 0 8px 2px rgb(255, 0, 0)';
if (!document.getElementsByClassName('selectionsProjp')[0].value)
document.getElementsByClassName('selectionsProjp')[0].style.boxShadow='0 0 8px 2px rgb(255, 0, 0)';
if (!document.getElementsByClassName('selectionsProjs')[0].value)
document.getElementsByClassName('selectionsProjs')[0].style.boxShadow='0 0 8px 2px rgb(255, 0, 0)';
//___________________________________________________________________________________________________________
//___________________________________________________________________________________________________________
if (document.getElementById('imgContainer')) {
document.getElementById('imgContainer').innerHTML = '';
}
});
//___________________________________________________________________________________________________________
//___________________________________________________________________________________________________________
/*Toggle Tab View of Home and Legend along with the Menu bar icon*/
function openTab(evt, tabname) {
var i, tabcontent, tablinks;
// Hide all tab contents
tabcontent = document.getElementsByClassName("tabcontent");
for (i = 0; i < tabcontent.length; i++) {
tabcontent[i].style.display = "none";
}
// Remove "active" class from all tab buttons
tablinks = document.getElementsByClassName("tablinks");
for (i = 0; i < tablinks.length; i++) {
tablinks[i].className = tablinks[i].className.replace(" active", "");
}
// Show selected tab content and mark button as active
var tab = document.getElementById(tabname);
if (tab) {
tab.style.display = "block";
tab.className += " active";
// evt.currentTarget.className += " active";
} else {
console.error('Tab content with ID ' + tabname + ' not found.');
}
}
// Start with the first tab open
document.getElementById("pagetitle").click();
// Function to add a new tab dynamically
function addIframeTab(title, url) {
var tabId = "tab_" + Date.now(); // Unique ID for each tab
// Create a new button in the ribbon
var newTab = document.createElement("button");
newTab.className = "tablinks";
newTab.innerHTML = title + ' <i class="fa fa-times" onclick="removeTab(event, \'' + tabId + '\')"></i>';
newTab.onclick = function (event) {
// Delay opening the tab to ensure it has been added to the DOM
setTimeout(function() {
openTab(event, tabId);
}, 10); // 10ms delay to allow DOM rendering
};
// Dynamically create tab labels and append them to FramestabsDropdown
var tabnameDrpdwn = document.createElement("label");
tabnameDrpdwn.className = "tabslabel";
tabnameDrpdwn.innerHTML = title
// Append new tab button to the dynamicTabs container
document.getElementById("dynamicTabs").appendChild(newTab);
document.getElementById("FramestabsDropdown").appendChild(tabnameDrpdwn);
tabnameDrpdwn.addEventListener('click',function(){
openTab('click',tabId)
})
// Event listener for mouseover on dynamicTabs
document.getElementById("dynamicTabs").addEventListener('mouseover', function() {
// Check and log all the labels inside FramestabsDropdown
const labels = document.getElementById("FramestabsDropdown").children;
if (labels.length > 0) {
document.getElementById("FramestabsDropdown").style.display = 'block';
}
});
document.getElementById("FramestabsDropdown").addEventListener('mouseover', function() {
// Stay visible when hovering over the dropdown
document.getElementById("FramestabsDropdown").style.display = 'block';
});
document.addEventListener('click', function(event) {
const dropdown = document.getElementById("FramestabsDropdown");
if (!dropdown.contains(event.target)) {
dropdown.style.display = 'none';
}
});
// Handle clicks inside iframes
document.querySelectorAll("iframe").forEach((iframe) => {
iframe.contentWindow?.addEventListener("mousedown", function () {
document.getElementById("FramestabsDropdown").style.display = "none";
});
});
//FramestabsDropdown
// Create a corresponding iframe container in the console
var iframeContainer = document.createElement("div");
iframeContainer.id = tabId;
iframeContainer.className = "tabcontent";
iframeContainer.style.display = "none"; // Initially hidden
// Create the iframe and set its source
var iframe = document.createElement("iframe");
iframe.src = url;
iframe.style.width = "100%";
iframe.style.height = "100vh";
iframeContainer.appendChild(iframe);
// Append the iframe container to the consoleContent area
document.getElementById("consoleContent").appendChild(iframeContainer);
// Open the new tab after the content is added
setTimeout(function() {
newTab.click();
}, 10); // Short delay before clicking the new tab
}
// Function to remove a tab
function removeTab(event, tabId) {
event.stopPropagation(); // Prevent tab click event
var tabButton = event.target.parentElement;
var tabContent = document.getElementById(tabId);
if (tabButton) tabButton.remove();
if (tabContent) tabContent.remove();
// Switch to the home tab if the removed tab was active
document.getElementById("pagetitle").click();
}
function downloadPdf(pdfname,downloadPDFName) {
console.log('pdfname===',pdfname)
fetch('/get-pdf/'+JSON.stringify(pdfname))
.then(response => response.blob())
.then(blob => {
const url = URL.createObjectURL(blob);
var link = document.createElement('a');
link.href = url;
link.download = downloadPDFName;
link.dispatchEvent(new MouseEvent('click'));
})
.catch(error => console.error('Error fetching PDF:', error));
}
//___________________________________________________________________________________________________________
//___________________________________________________________________________________________________________
/*Add icon to duplicate 'duplicater' div (big section that includes 3 dropdowns,3 textboxes, 2 buttons(add,delete)*/
var dupliateiExtra = 0; // i
var clonedDivIdExtra=0;
var originalExtra = document.getElementById('duplicaterhidden');
var addciconvalExtra=0; //div duplicate
var jjExtra=0;
var dupliatei = 0; // i
var clonedDivId=0;
var original = document.getElementById('duplicaterhidden');
var addciconval=0; //div duplicate
var jj=0;
const vals = [];
var canvasimg;
var ry = [[]];
var section = document.getElementsByClassName("selectionsProjs")[0]
function duplicate() {
/*Create array of addciconval w jj */
addciconval+=1;
jj=0;
var clone = original.cloneNode(true); // "deep" clone
console.log('clonee',clone.children)
clone.id = 'duplicater' + ++dupliatei;
clonedDivId=clone.id;
clone.children[0].value=[addciconval,jj]
clone.children[5].style.marginLeft='5px';
// clone.children[1].style.marginBottom='10px';
clone.children[5].children[4].id='addmctnameid'+dupliatei
clone.children[5].children[6].style.display='none'
clone.children[5].style.marginTop='8px';
console.log('ayhaga', clone.children[5])
clone.removeAttribute("hidden");
clone.setAttribute('class','duplicaterclass'+dupliatei);
clone.getElementsByClassName('measurementselections')[0].setAttribute('name', 'measurementscripts'+dupliatei);
clone.getElementsByClassName('measurementselections')[0].setAttribute('class', 'measurementselections'+dupliatei);
clone.getElementsByClassName('measureitems')[0].setAttribute('name', 'measureitem'+dupliatei);
clone.getElementsByClassName('measureitems')[0].setAttribute('class', 'measureitems'+dupliatei);
clone.getElementsByClassName('selections')[0].setAttribute('name', 'select'+dupliatei);
clone.getElementsByClassName('selections')[0].setAttribute('class', 'selections'+dupliatei);
clone.getElementsByClassName('repeatforloopclasshidden')[0].setAttribute('id', 'repeatforloop'+addciconval+'0');
clone.getElementsByClassName('repeatforloopclasshidden')[0].setAttribute('name', 'repeatforloopname'+addciconval+'0');
clone.getElementsByClassName('repeatforloopclasshidden')[0].setAttribute('class', 'repeatforloopclass'+addciconval+'0');
if (thirddropdown.value.startsWith('3.2') || thirddropdown.value.startsWith('3.3'))
{
clone.children[5].children[1].setAttribute('disabled','True')
clone.children[5].children[2].setAttribute('disabled','True')
clone.children[5].children [1].style.cursor='not-allowed';
clone.children[5].children[2].style.cursor='not-allowed';
// document.getElementById('duplicater' + dupliatei).children[8].children[1].style.cursor='not-allowed';
// document.getElementById('duplicater' + dupliatei).children[8].children[2].style.cursor='not-allowed';
}
original.parentNode.appendChild(clone);
clone.parentElement.insertBefore(clone, document.getElementById('doneebackground'));
/*Based on the NRM section , populate the second part of the interface*/
if (addciconval>0){
var inputs1 = document.getElementsByClassName("measurementselections"+dupliatei)[0]; //1sr dpdwn
var selections1 = document.getElementsByClassName("selections"+dupliatei)[0]; //2nd dropdown
var measitem1 = document.getElementsByClassName("measureitems"+dupliatei)[0]; //3rd dpdwn
$(inputs1).select2({
placeholder:'Select',
closeOnSelect: true,
width:'15ch'
});
$(selections1).select2({
placeholder:'Select MC-T Name',
closeOnSelect: true,
width:'23ch'
});
$(measitem1).select2({
placeholder:'Select unit',
closeOnSelect: true,
width:'11ch'
});
$(inputs1).on("change", function (e) {
get3rddropdown();
});
$(selections1).on("change", function (e) {
get3rddropdown();
})
if (section.value.startsWith('1.0'))
{
var opt = document.createElement("OPTION");
opt.text= 'Select';
opt.value= "";
opt.hidden=true;
inputs1.add(opt);
var optn = document.createElement("OPTION");
optn.text= 'Ground Beams';
optn.value= "ground beams";
inputs1.add(optn);
var optn1 = document.createElement("OPTION");
optn1.text= 'Pile Caps';
optn1.value= "pile caps";
inputs1.add(optn1);
}
if (section.value.startsWith('3.2'))
{
var opt = document.createElement("OPTION");
opt.text= 'Select';
opt.value= "";
opt.hidden=true;
inputs1.add(opt);
var optn = document.createElement("OPTION");
optn.text= 'Floor';
optn.value= "Floor";
inputs1.add(optn);
var optn1 = document.createElement("OPTION");
optn1.text= 'Wall';
optn1.value= "Wall";
inputs1.add(optn1);
var optn2 = document.createElement("OPTION");
optn2.text= 'Internal Doors';
optn2.value= "Internal Doors";
inputs1.add(optn2);
}
if (section.value.startsWith('2.7'))
{
var opt = document.createElement("OPTION");
opt.text= 'Select';
opt.value= "";
opt.hidden=true;
inputs1.add(opt);
var optn = document.createElement("OPTION");
optn.text= 'Internal Walls';
optn.value= "Internal Walls";
inputs1.add(optn);
}
if (section.value.startsWith('2.8'))
{
var opt = document.createElement("OPTION");
opt.text= 'Select';
opt.value= "";
opt.hidden=true;
inputs1.add(opt);
var optn = document.createElement("OPTION");
optn.text= 'Single Door';
optn.value= "Single Door";
inputs1.add(optn);
var optn1 = document.createElement("OPTION");
optn1.text= 'Double Door';
optn1.value= "Double Door";
inputs1.add(optn1);
}
if (section.value.startsWith('2.1'))
{
var opt = document.createElement("OPTION");
opt.text= 'Select';
opt.value= "";
opt.hidden=true;
inputs1.add(opt);
var optn = document.createElement("OPTION");
optn.text= 'Column';
optn.value= "Column";
inputs1.add(optn);
var optn1 = document.createElement("OPTION");
optn1.text= 'Wall';
optn1.value= "Wall";
inputs1.add(optn1);
}
}
}
function userguidetoggleFunction() {
var dropdownContentUserguideId = document.getElementById("dropdown-contentUserguideId");
var UserGuideSideBar = document.getElementById('UserGuideSideBar');
var UserGuidetoggle = document.getElementById('UserGuidetoggle');
var isOpen = UserGuideSideBar.style.display === "block";
// **Close the dropdown when opening User Guide**
dropdownContentUserguideId.classList.remove("active");
// **Toggle the sidebar visibility properly**
if (isOpen) {
UserGuideSideBar.style.display = "none";
UserGuideSideBar.classList.remove('UserGuideslide-in');
UserGuideSideBar.classList.add('UserGuideslide-out');
UserGuidetoggle.classList.remove("change");
} else {
UserGuideSideBar.style.display = "block";
UserGuideSideBar.style.width = "25%";
UserGuideSideBar.classList.add('UserGuideslide-in');
UserGuideSideBar.classList.remove('UserGuideslide-out');
UserGuidetoggle.classList.add("change");
}
}
function ShowSectionUserguide(element) {
var textFirstPage = document.getElementById('textfirstpage');
var UserGuideSideBar = document.getElementById('UserGuideSideBar');
var UserGuidetoggle = document.getElementById('UserGuidetoggle');
var isOpen = UserGuideSideBar.style.display === "block";
// **If clicking home and already on home, only toggle icon**
if (element.id === 'homeguidebutton' || element.parentElement?.id === 'homeguidebutton') {
if (textFirstPage.style.display === 'block') {
return; // Exit function to prevent further toggling
}
hideAllSections();
textFirstPage.style.display = 'block';
return;
}
// **If clicking a section, hide sidebar and update content**
if (element.tagName === 'LI') {
hideAllSections();
// **Toggle the sidebar visibility properly**
if (isOpen) {
UserGuideSideBar.style.display = "none";
UserGuideSideBar.classList.remove('UserGuideslide-in');
UserGuideSideBar.classList.add('UserGuideslide-out');
UserGuidetoggle.classList.remove("change");
} else {
UserGuideSideBar.style.display = "block";
UserGuideSideBar.style.width = "25%";
UserGuideSideBar.classList.add('UserGuideslide-in');
UserGuideSideBar.classList.remove('UserGuideslide-out');
UserGuidetoggle.classList.add("change");
}
if (element.textContent.startsWith('1.0')) {
document.getElementById('1_0textUserGuide').style.display = 'block';
document.getElementById('1_0textUserGuide').removeAttribute('hidden');
}
else if (element.textContent.startsWith('2.1')) {
document.getElementById('2_1textUserGuide').style.display = 'block';
document.getElementById('2_1textUserGuide').removeAttribute('hidden');
}
else if (element.textContent.startsWith('2.7')) {
document.getElementById('2_7textUserGuide').style.display = 'block';
document.getElementById('2_7textUserGuide').removeAttribute('hidden');
}
else if (element.textContent.startsWith('2.8')) {
document.getElementById('2_8textUserGuide').style.display = 'block';
document.getElementById('2_8textUserGuide').removeAttribute('hidden');
}
else if (element.textContent.startsWith('3.2')) {
document.getElementById('3_2textUserGuide').style.display = 'block';
document.getElementById('3_2textUserGuide').removeAttribute('hidden');
}
else if (element.textContent.startsWith('3.3')) {
document.getElementById('3_3textUserGuide').style.display = 'block';
document.getElementById('3_3textUserGuide').removeAttribute('hidden');
}
}
}
// Function to hide all sections before showing the selected one
function hideAllSections() {
document.getElementById('textfirstpage').style.display = 'none';
document.getElementById('1_0textUserGuide').style.display = 'none';
document.getElementById('2_1textUserGuide').style.display = 'none';
document.getElementById('2_7textUserGuide').style.display = 'none';
document.getElementById('2_8textUserGuide').style.display = 'none';
document.getElementById('3_2textUserGuide').style.display = 'none';
document.getElementById('3_3textUserGuide').style.display = 'none';
}
//___________________________________________________________________________________________________________
//___________________________________________________________________________________________________________
/*User Guide button toggle*/
function userguideclick(){
document.getElementById('textfirstpage').style.display='block'
var acc = document.getElementsByClassName("dropdown-content")[0];
var userguideClose=document.getElementById("userguideClose")
var i;
acc.classList.toggle("active");
/* Toggle between hiding and showing the active panel */
if (acc.style.display === "block") {
acc.style.display = "none";
} else {
acc.style.display = "block";
acc.style.backgroundColor=(0, 153, 255);
}
close.onclick = function() {
acc.style.display = "none";
};
}
function userguideMayaTableClick(){
var userguideTableMaya=document.getElementById('userguideTableMaya')
window.open('https://docs.google.com/spreadsheets/d/10TjB8EbSiDHybo9YsDDzekxi8iQECpprXdqptHCZzec/edit?gid=875423041#gid=875423041');
}
//to be retrieved from python code
var areainpixels=0;
var prminpixels=0;
//___________________________________________________________________________________________________________
//___________________________________________________________________________________________________________
/*Populate dropdowns*/
//get the 3 dropdown elements
var proj = document.getElementsByClassName("selectionsProj")[0];
var proj1 = document.getElementsByClassName("selectionsProjp")[0];
var projsec = document.getElementsByClassName("selectionsProjs")[0];
var pdfname;
projsec.addEventListener('input',function(){
projsec.style.boxShadow=( '2px 2px 2px gray')
})
var ratioAunit=1;
var ratioPunit=1;
var pdfnames='';
//___________________________________________________________________________________________________________
//___________________________________________________________________________________________________________
function getSelectValues(select) {
var result = [];
var options = select && select.options;
var opt;
for (var i=0, iLen=options.length; i<iLen; i++) {
opt = options[i];
if (opt.selected) {
result.push(opt.value || opt.text);
}
}
console.log('selectedddddd',result)
return result;
}
//___________________________________________________________________________________________________________
//___________________________________________________________________________________________________________
//Retrieves list of projects
var doorSchedulePDF;
function getproj(){
getALLMCTNAMES();
var proj = document.getElementsByClassName("selectionsProj")[0];
var projectVal=proj.value.toString() //selected project
var inputs = document.getElementsByTagName("select")[1]; //second dropdown(project part)
var p=document.getElementById("selectionsProjpid") //project part
var sections = document.getElementsByClassName("selectionsProjs")[0];
chooseFirstdrpdwn();
var eventSource = new EventSource('/getmethod/' + JSON.stringify(projectVal));
document.getElementById('progressBar').removeAttribute('hidden')
document.getElementById('progressBar').style.display='block';
eventSource.onmessage = function (event) {
var progress = parseInt(event.data); // Progress value from Flask
if (progress <= 100) {
console.log(progress); // Log progress for debugging
document.getElementById('progress').style.width = progress + '%';
document.getElementById('progress').textContent = progress + '%';
} else {
// Final data handling when progress reaches 100%
console.log('Process completed!');
// Parse and handle the final response data (documentsToMeasure, RelevantDocuments, extracted_path)
var data = JSON.parse(event.data); // Assuming the result is a JSON array
console.log('Final result:', data);
// You can use this data to update your page or handle it accordingly
eventSource.close(); // Close the connection when finished
document.getElementById('progressBar').setAttribute('hidden',true)
document.getElementById('progressBar').style.display='none';
document.getElementById('progress').style.width = '0%'; // Reset progress for the next process
document.getElementById('progress').textContent = '0%';
document.getElementById('refreshDropboxButtonID').style.display = "block";
document.getElementById("all").style.display = "none";
if (sections.value.startsWith('3.2') || sections.value.startsWith('3.3') || sections.value.startsWith('2.7') ){
document.getElementById('dxfdiv').removeAttribute('hidden');
document.getElementById('pdftodxfFile').setAttribute('required',true)
}
else{
document.getElementById('dxfdiv').setAttribute('hidden',true)
}
extracted_path=data[2]
var docsToMeasure=data[0]; //
var relvDocs=data[1]
var projname = document.getElementsByClassName("selectionsProj")[0];
var projpart = document.getElementsByClassName("selectionsProjp")[0];
var projsec = document.getElementsByClassName("selectionsProjs")[0];
var meas = document.getElementById("measureCheckbox") ;
var relv = document.getElementById("relvdiv") ;
const measids=[];
const relvids=[];
const measoptns=[];
// var measSelect = document.getElementById("measureselectid");
var measSelect = document.getElementById("measureContainer");
var relvSelect = document.getElementById("relvselectid");
var levelcheckbox= document.getElementById("levelcheckbox");
measSelect.removeAttribute("hidden");
relvSelect.removeAttribute("hidden");
if (measSelect && measSelect.hasChildNodes()) {
while (measSelect.firstChild) {
measSelect.removeChild(measSelect.firstChild);
}
}
var optn2 = document.createElement("div"); // Use a <div> instead of <option>
optn2.textContent = 'Select project to measure'; // Set text content
optn2.hidden = true; // Keep it hidden
optn2.id = 'hidden';
measSelect.appendChild(optn2); // Append to div instead of .add()
document.getElementById("hidden").required = true;
if (relvSelect && relvSelect.hasChildNodes()) {
while (relvSelect.firstChild) {
relvSelect.removeChild(relvSelect.firstChild);
}
}
const nameSet = new Set(); // To track unique names
const nameSetRelv = new Set(); // To track unique names
// Action foconst nameSet = new Set(); // To track unique names
// Action for when the checkbox is clicked
function handleCheckboxChange(event) {
// Uncheck all checkboxes before checking the current one
document.querySelectorAll('input[name="measureCheckbox"]').forEach(checkbox => {
checkbox.checked = false;
});
// Check the current checkbox
event.target.checked = true;
// Action when checkbox is clicked (e.g., log the selected project)
let selectedValue = event.target.value;
console.log("Selected project:", selectedValue);
// Highlight the selected item
document.querySelectorAll(".measure-item").forEach(item => {
item.style.backgroundColor = ''; // Reset background color for all items
});
event.target.closest(".measure-item").style.backgroundColor = '#d3f8d3'; // Highlight the selected item
// Show alert immediately to prompt the user
if (projsec.value.startsWith('3.2') || projsec.value.startsWith('3.3') || projsec.value.startsWith('2.7')) {
// downloadPdf(selectedValue);
downloadPdf(selectedValue,'DXF_File_:'+selectedValue)
// window.alert("Measure the purple shape drawn on the PDF using Foxit Reader, Bluebeam, or any other external tool, then enter its area and perimeter in your desired scale.");
}
// else{
// window.alert("Measure the purple shape drawn on the PDF using Foxit Reader, Bluebeam, or any other external tool, then enter its area and perimeter in your desired scale.");
// }
canvasimg='';
ry=[[]];
levelcheckbox.checked=false;
pdfname=selectedValue;
measSelect.style.boxShadow='none';
document.getElementById("all").style.display = "block";
pixelArr=[projname.value, projpart.value,projsec.value, pdfname]
// Open popup immediately before initiating the PDF download
var eventSource = new EventSource('/pixelimg/' + JSON.stringify(pixelArr));
document.getElementById('progressBar').removeAttribute('hidden')
document.getElementById('progressBar').style.display='block';
eventSource.onmessage = function (event) {
var progress = parseInt(event.data); // Progress value from Flask
if (progress <= 100) {
console.log(progress); // Log progress for debugging
document.getElementById('progress').style.width = progress + '%';
document.getElementById('progress').textContent = progress + '%';
} else {
// Final data handling when progress reaches 100%
console.log('Process completed!');
// Parse and handle the final response data (documentsToMeasure, RelevantDocuments, extracted_path)
var data = JSON.parse(event.data); // Assuming the result is a JSON array
console.log('Final result:', data);
// You can use this data to update your page or handle it accordingly
eventSource.close(); // Close the connection when finished
document.getElementById('progressBar').setAttribute('hidden',true)
document.getElementById('progressBar').style.display='none';
document.getElementById('progress').style.width = '0%'; // Reset progress for the next process
document.getElementById('progress').textContent = '0%';
document.getElementById("all").style.display = "none";
// Display link or any additional data if needed
window.open(data[2]);
downloadPdf(pdfname,'Pixel_Conversion_File_:'+pdfname)
document.getElementById("all").style.display = "none";
document.getElementById('measureADRbutton').onclick= function()
{
if (!areaRatio.value){
if (!(projsec.value.startsWith('3.2')) & !(projsec.value.startsWith('2.8')) & !(projsec.value.startsWith('3.3')) & !(projsec.value.startsWith('2.7')) )
areaRatio.style.boxShadow='0 0 8px 2px rgb(255, 0, 0)';
}
if (!prmRatio.value)
{
if (!(projsec.value.startsWith('2.8')))
prmRatio.style.boxShadow='0 0 8px 2px rgb(255, 0, 0)';
}
}
document.getElementById('radiosColors').removeAttribute('hidden');
var scalelbl= document.createElement("label");
scalelbl.innerText='Scale Document';
scalelbl.id='measureLabel';
var br1= document.createElement("br");
var areadiv=document.createElement("div");
areadiv.id='areadiv'
var areaRatiolbl= document.createElement("label");
areaRatiolbl.innerText='Area:'
areaRatiolbl.id='radiolbl';
var areaRatio= document.createElement("input");
areaRatio.type='number';
areaRatio.id='arealvlinput';
areaRatio.className='lvlinput';
areaRatio.name='areaRatio';
areaRatio.style.marginLeft='78px';
areaRatio.style.textAlign='right';
areaRatio.step=".0000001";
areaRatio.min = "0"; // Allow only positive numbers (>= 0)
if( projsec.value.startsWith('3.2') || projsec.value.startsWith('3.3') || projsec.value.startsWith('2.1') || projsec.value.startsWith('2.7')){
areaRatio.setAttribute('disabled',true)
areaRatio.style.cursor='not-allowed';
areaRatio.style.backgroundColor='rgba(101, 101, 101, 0.27)'
document.getElementById('selectunitA').setAttribute('disabled',true)
document.getElementById('selectunitA').style.cursor='not-allowed';
document.getElementById('selectunitA').style.backgroundColor='rgba(101, 101, 101, 0.27)'
}
else{ // section 1.0
areaRatio.removeAttribute('disabled')
areaRatio.style.cursor='pointer';
document.getElementById('selectunitA').removeAttribute('disabled')
document.getElementById('selectunitA').style.cursor='pointer';
}
areaRatio.addEventListener('change',function(){
areaRatio.value=(Number(areaRatio.value)).toFixed(7)
areaRatio.style.boxShadow='none';
})
areaRatio.required=true;
selectunitA=document.getElementById('selectunitA')
selectunitA.removeAttribute('hidden')
areadiv.append(areaRatiolbl,areaRatio,selectunitA)
var br2= document.createElement("br");
var br3= document.createElement("br");
var prmdiv=document.createElement("div");
prmdiv.id='prmdiv'
var prmRatiolbl= document.createElement("label");
prmRatiolbl.innerText='Perimeter:'
prmRatiolbl.id='radiolbl';
var prmRatio= document.createElement("input");
prmRatio.type='number';
prmRatio.id='perimlvlinput';
prmRatio.className='lvlinput';
prmRatio.name='prmRatio';
prmRatio.style.textAlign='right';
prmRatio.style.marginLeft='49px';
prmRatio.step=".0000001";
prmRatio.min = "0"; // Allow only positive numbers (>= 0)
prmRatio.addEventListener('change',function(){
prmRatio.value=(Number(prmRatio.value)).toFixed(7)
prmRatio.style.boxShadow='none';
})
prmRatio.required=true;
selectunitP=document.getElementById('selectunitP')
selectunitP.removeAttribute('hidden')
prmdiv.append(prmRatiolbl, prmRatio,selectunitP)
var ratiosdiv= document.getElementById("ratios");
ratiosdiv.innerHTML='';
ratiosdiv.append(scalelbl);
ratiosdiv.append(br1);
ratiosdiv.append(areadiv)
ratiosdiv.append(prmdiv)
areainpixels=data[0];
prminpixels=data[1];
if( projsec.value.startsWith('2.8')) {
areaRatio.setAttribute('disabled',true)
areaRatio.style.cursor='not-allowed';
areaRatio.style.backgroundColor='rgba(101, 101, 101, 0.27)'
document.getElementById('selectunitA').setAttribute('disabled',true)
document.getElementById('selectunitA').style.cursor='not-allowed';
document.getElementById('selectunitA').style.backgroundColor='rgba(101, 101, 101, 0.27)'
prmRatio.setAttribute('disabled',true)
prmRatio.style.cursor='not-allowed';
prmRatio.style.backgroundColor='rgba(101, 101, 101, 0.27)'
document.getElementById('selectunitP').setAttribute('disabled',true)
document.getElementById('selectunitP').style.cursor='not-allowed';
document.getElementById('selectunitP').style.backgroundColor='rgba(101, 101, 101, 0.27)'
}
};
}
eventSource.onerror = function (error) {
console.error('Error occurred:', error);
eventSource.close(); // Close on error
PopupElement.textContent='Error occured while uploading the pdf to the Dropbox. Refresh and try again. If the error continues, please contact the ADR team to fix it. ';
ShowPopUp();
};
selectunitA.addEventListener('change',function(){
value=document.getElementById('selectunitA').value
if (value=='mm2')
ratioAunit=1000000;
else
ratioAunit=1;
})
selectunitP.addEventListener('change',function(){
value=document.getElementById('selectunitP').value
if (value=='mm'){
ratioPunit=1000;
}
else
ratioPunit=1;
})
// }
// for 2.8 multiple pdfs
// else{
// pdfnames=getSelectValues(elem)
// }
}
// Action for when the label is clicked (no checkbox change)
function handleLabelClick(event) {
// Action when label is clicked (e.g., log the selected project via the label)
let selectedLabel = event.target.textContent;
console.log("Label clicked: ", selectedLabel);
// Optional: Highlight the selected item
document.querySelectorAll(".measure-item").forEach(item => {
item.style.backgroundColor = ''; // Reset background color for all items
});
// event.target.closest(".measure-item").style.backgroundColor = '#919592'; // Highlight the selected item
// Show loading indicator
document.getElementById("all").style.display = "block";
fetch('/getdropboxurl/'+ JSON.stringify(selectedLabel), {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ filename: "your_pdf_filename_here.pdf" })
})
.then(response => response.blob())
.then(blob => {
document.getElementById("all").style.display = "none";
const url = URL.createObjectURL(blob);
// Set the URL to the iframe's src to load the content inside the page
addIframeTab(selectedLabel,url);
// addIframeTab("Google", "https://www.google.com");
})
.catch(function(jqXHR, textStatus, errorThrown) {
// Handle error
PopupElement.textContent = 'Error occurred while retrieving the dropbox URL. Refresh and try again. If the error continues, please contact the ADR team to fix it.';
ShowPopUp();
});
}
for (let i = 0; i < docsToMeasure.length; i++) {
let name = docsToMeasure[i][0];
// Create div for the measure item
let div = document.createElement("div");
div.className = "measure-item";
// Create the checkbox
let checkbox = document.createElement("input");
checkbox.type = "checkbox";
checkbox.name = "measureCheckbox";
checkbox.value = name;
checkbox.onclick = handleCheckboxChange; // Handle checkbox click
// Create the label
let label = document.createElement("label");
label.textContent = name;
label.onclick = handleLabelClick; // Handle label click
// Append checkbox and label to the div
div.appendChild(checkbox);
div.appendChild(label);
// Append the item to the select container
measSelect.appendChild(div);
// Check for duplicates
if (nameSet.has(name)) {
label.style.color = "red"; // Highlight duplicate (optional)
document.getElementById("TopTextModal").textContent='Error: Duplicates Error'
PopupElement.textContent = 'Duplicate project names were detected while retrieving the project PDFs. Please visit Dropbox and rename the relevant files that you will be working on to ensure each project has a unique name. Once the renaming is complete, return to the console and click on the Dropbox icon to retrieve the updated project names.';
ShowPopUp();
} else {
nameSet.add(name); // Add unique name to the set
}
}
for (let i = 0; i < relvDocs.length; i++) {
let name = relvDocs[i][0];
// Create div for the measure item
let div = document.createElement("div");
div.className = "relv-item"; //relvselectid .relv-item
// Create the label
let label = document.createElement("label");
label.textContent = name;
label.onclick= function(event)
{
// Action when label is clicked (e.g., log the selected project via the label)
let relevantDocumentName = event.target.textContent;
console.log("Label clicked: ", relevantDocumentName);
if (projsec.value.startsWith('2.8')){
doorSchedulePDF=relevantDocumentName
console.log(doorSchedulePDF)
}
// Optional: Highlight the selected item
document.querySelectorAll(".relv-item").forEach(item => {
item.style.backgroundColor = ''; // Reset background color for all items
});
event.target.closest(".relv-item").style.backgroundColor ='#d3f8d3'; // Highlight the selected item
document.getElementById('relvselectid').style.boxShadow='';
};
div.appendChild(label);
// Append the item to the select container
relvSelect.appendChild(div);
// Handle duplicate names
if (nameSetRelv.has(name)) {
label.style.color = "red"; // Highlight duplicate (optional)
} else {
nameSetRelv.add(name);
}
}
relvids.push(relvSelect) ;
measids.push(measSelect);
document.addEventListener("click", function(event) {
const iframe = document.getElementById("pdfFrame");
if (!iframe.contains(event.target)) {
const iframe = document.getElementById("pdfFrame");
iframe.style.display = "none";
}
});
document.getElementById('measureADRbutton').onclick= function()
{
if (!measSelect.value) {
measSelect.style.boxShadow = '0 0 8px 2px rgb(255, 0, 0)';
measSelect.setAttribute("required", "")
}
if (!relvSelect.value) {
if (sectionNumber.startsWith('2.8')) {
relvSelect.style.boxShadow = '0 0 8px 2px rgb(255, 0, 0)';
relvSelect.setAttribute("required", "")
}
}
}
}
if (document.getElementById('arealvlinput')){
if( projsec.value.startsWith('3.2') || projsec.value.startsWith('2.8') || projsec.value.startsWith('3.3') || projsec.value.startsWith('2.1') || projsec.value.startsWith('2.7')){
document.getElementById('arealvlinput').setAttribute('disabled',true)
document.getElementById('selectunitA').setAttribute('disabled',true)
}
else{ // section 1.0
document.getElementById('arealvlinput').removeAttribute('disabled')
document.getElementById('selectunitA').removeAttribute('disabled')
}
}
};
eventSource.onerror = function (error) {
console.error('Error occurred:', error);
eventSource.close(); // Close on error
PopupElement.textContent='Error occured while retrieving the Project Names. Refresh and try again. If the error continues, please contact the ADR team to fix it. ';
ShowPopUp();
};
}
//___________________________________________________________________________________________________________
//___________________________________________________________________________________________________________
function ImgLarger(id, src){
// Get the modal
var modal = document.getElementById('myModal');
// Get the image and insert it inside the modal - use its "alt" text as a caption
var img = document.getElementById(id);
var modalImg = document.getElementById('img01');
var captionText = document.getElementById("caption");
modal.style.display = "block";
modalImg.src = src;
captionText.innerHTML = 'Preview';
// Get the <span> element that closes the modal
var span = document.getElementsByClassName("close")[0];
// When the user clicks on <span> (x), close the modal
span.onclick = function() {
modal.style.display = "none";
}
}
var spreadsheetId='';
var spreadsheetURL='';
var colorsUsed='';
var list1='';
var SimilarAreaDictionary='';
var tomeasureproj=''
var pdfpath=[];
var interval = null;
var namepathArr=''
var allcolors=['#2FFFFF'];
// Main Function - form submit
//___________________________________________________________________________________________________________
//___________________________________________________________________________________________________________
document.getElementById('pdftodxfFile').addEventListener('input',function(){
console.log('hghjk')
const files = document.getElementById("pdftodxfFile");
dxffile=files.files[0];
console.log(dxffile)
});
function ImgSide(imgdata, spreadsheetLink, pdfLink) {
var backimg = document.getElementById('backgroundimg');
backimg.innerHTML=''
// Create a container for the image and buttons
var imgContainer = document.createElement('div');
imgContainer.className = 'imgContainer';
var imgcanvas = document.createElement("img");
imgcanvas.src = 'data:image/gif;base64,' + imgdata;
imgcanvas.height = 600;
imgcanvas.id = 'imgcanvas';
imgcanvas.alt = "Larry";
imgcanvas.style.zIndex = 999;
imgcanvas.addEventListener('click', function () {
ImgLarger(imgcanvas.id, imgcanvas.src);
});
var buttonContainer = document.createElement('div');
buttonContainer.style.display = 'flex';
buttonContainer.style.marginTop = '10px';
///////////////////////////////////////////////////////////////
var legendbutton = document.createElement("button");
legendbutton.className = 'measureADRbutton2';
legendbutton.innerText = 'Legend and Data created';
legendbutton.style.backgroundColor = 'rgb(5, 43, 235)';
if ( projsec.value.startsWith('2.8')){
legendbutton.setAttribute('disabled',true);
legendbutton.style.cursor='not-allowed';
legendbutton.style.boxShadow = 'none';
legendbutton.style.color = 'white';
legendbutton.style.backgroundColor="rgb(154,152,152)";
}
else{
legendbutton.addEventListener('mouseover', function () {
legendbutton.style.boxShadow = '0 0 8px 2px rgb(5, 43, 235)';
});
legendbutton.addEventListener('mouseout', function () {
legendbutton.style.boxShadow = 'none';
});
legendbutton.addEventListener('click', function () {
window.open(spreadsheetLink);
});
}
//////////////////////////////////////////////////////////////
var imgbutton = document.createElement("button");
imgbutton.className = 'measureADRbutton2';
imgbutton.innerText = 'Click to view as PDF';
imgbutton.id='clickpdfurldp'
imgbutton.style.backgroundColor = 'rgb(255,0,255)';
imgbutton.addEventListener('mouseover', function () {
imgbutton.style.boxShadow = '0 0 8px 2px rgb(255,0,255)';
});
imgbutton.addEventListener('mouseout', function () {
imgbutton.style.boxShadow = 'none';
});
imgbutton.addEventListener('click', function () {
window.open(pdfLink);
});
/////////////////////////////////////////////////////////////
var refreshpdfmarkups = document.createElement("button");
refreshpdfmarkups.className = 'measureADRbutton2';
refreshpdfmarkups.id='refreshpdfmarkups'
refreshpdfmarkups.style.backgroundColor = 'rgb(255,80,255)';
refreshpdfmarkups.style.padding = '10px 20px';
// Create the icon element
const icon = document.createElement('i');
icon.className = 'fa fa-refresh'; // Add Font Awesome classes
icon.setAttribute('aria-hidden', 'true'); // Add accessibility attribute
// Set button text and append the icon
// refreshpdfmarkups.textContent = ' Refresh';
refreshpdfmarkups.prepend(icon); // Add icon before the text
refreshpdfmarkups.addEventListener('mouseover', function () {
refreshpdfmarkups.style.boxShadow = '0 0 8px 2px rgb(255,80,255)';
});
refreshpdfmarkups.addEventListener('mouseout', function () {
refreshpdfmarkups.style.boxShadow = 'none';
});
////////////////////////////////////////////////////////////
buttonContainer.appendChild(legendbutton);
buttonContainer.appendChild(imgbutton);
buttonContainer.appendChild(refreshpdfmarkups);
imgContainer.appendChild(imgcanvas);
imgContainer.appendChild(buttonContainer);
backimg.appendChild(imgContainer);
}
function updatepreview(pdfname){
console.log('pdfpath',pdfname)
$.get( '/updatepreviewimg/'+ JSON.stringify(pdfname))
.success( function(data) {
document.getElementById("loading").hidden = true;
ImgSide(data,spreadsheetURL,dropboxLink)
})
}
// Function to update dropdown options
function updateDropdown(options) {
const dropdowns = document.getElementsByName('text1name');
dropdowns.forEach((dropdown) => {
// Save the currently selected value
const selectedValue = dropdown.value;
// Clear the dropdown
dropdown.innerHTML = '';
// Repopulate with new options
options.forEach((value) => {
const option = document.createElement('option');
option.value = value;
option.textContent = value;
dropdown.appendChild(option);
});
// Restore the previously selected value if it still exists
if (options.includes(selectedValue)) {
dropdown.value = selectedValue;
}
});
}
// Function to start the worker and periodic updates
function startDropdownUpdates() {
const guessedNamesWorker = new Worker('../static/guessedNamesWorker.js');
// Handle messages from the worker
guessedNamesWorker.onmessage = function (event) {
if (event.data.status === 'success') {
console.log('Updating dropdown with new data:', event.data.data);
updateDropdown(event.data.data); // Update the dropdown
} else {
console.error('Error from worker:', event.data.error);
}
};
// Send an initial fetch message to the worker
guessedNamesWorker.postMessage('fetch');
// Periodically fetch data every 3 seconds
setInterval(() => {
guessedNamesWorker.postMessage('fetch');
}, 3000);
}
function getData(form) {
document.getElementById("loading").hidden = false;
document.getElementById('measureADRbutton').setAttribute('disabled',true);
document.getElementById('measureADRbutton').style.cursor='not-allowed';
document.getElementById('measureADRbutton').style.boxShadow = 'none';
document.getElementById('measureADRbutton').style.color = 'white';
document.getElementById('measureADRbutton').style.backgroundColor="rgb(154,152,152)";
var formData = new FormData(form);
clearInterval(interval)
val=0;
answers=[];
var ratio1=0;
var ratio2=0;
tomeasureproj='';
pdfpath=[];
formvalues=Object.fromEntries(formData);
console.log(formData,formvalues)
// iterate through entries...
tomeasureproj=formvalues['measureCheckbox']; //proj name
if( formvalues['selectprojs'].startsWith('3.2') || formvalues['selectprojs'].startsWith('3.3') || formvalues['selectprojs'].startsWith('2.7') ){
ratio1=1
ratio2=prminpixels/(formvalues['prmRatio']/ratioPunit);
console.log(ratio2, prminpixels,formvalues['prmRatio'],ratioPunit)
}
else if (formvalues['selectprojs'].startsWith('1.0') ){
ratio1=(formvalues['areaRatio']/ratioAunit)/areainpixels;
ratio2=(formvalues['prmRatio']/ratioPunit)/prminpixels;
console.log('ratioss',ratio1,ratio2)
}
else if (formvalues['selectprojs'].startsWith('2.8') || formvalues['selectprojs'].startsWith('2.1') ){
ratio1=1;
ratio2=(formvalues['prmRatio']/ratioPunit)/prminpixels;
console.log('ratioss',ratio1,ratio2)
}
pdfpath.push(formvalues['selectproj'],formvalues['selectprojp'] ,formvalues['selectprojs']) //project name - part - section
if (canvasimg){
console.log('canvasimg')
buf=canvasimg.split("data:image/png;base64,")
answers.push(tomeasureproj, 220,allcolors , ratio1, ratio2 ,pdfpath,buf[1]);
formData.append('answers',JSON.stringify(answers))
}
else{
console.log('else')
if ( formvalues['selectprojs'].startsWith('3.2') || formvalues['selectprojs'].startsWith('3.3') )
{
console.log('elseif')
answers.push(tomeasureproj, 0,[], ratio1, ratio2 ,pdfpath);
formData.append('file',dxffile)
formData.append('answers',JSON.stringify(answers))
}
else if ( formvalues['selectprojs'].startsWith('2.7'))
{
console.log('elseif')
console.log(groupedValues)
answers.push(tomeasureproj, 0,[], ratio1, ratio2 ,pdfpath,groupedValues);
formData.append('file',dxffile)
formData.append('answers',JSON.stringify(answers))
}
else if (formvalues['selectprojs'].startsWith('1.0'))
{
console.log('whyyyy hereeee')
file=''
answers.push(tomeasureproj, 0,[] , ratio1, ratio2 ,pdfpath);
formData.append('answers',JSON.stringify(answers))
}
else if (formvalues['selectprojs'].startsWith('2.1'))
{
answers.push(tomeasureproj, 0,[] , ratio1, ratio2 ,pdfpath);
formData.append('answers',JSON.stringify(answers))
}
else if (formvalues['selectprojs'].startsWith('2.8') )
{
answers.push(tomeasureproj, 0,[] , 0,0,pdfpath , doorSchedulePDF);
formData.append('answers',JSON.stringify(answers))
}
}
if (formvalues['selectprojs'].startsWith('1.0') || formvalues['selectprojs'].startsWith('3.2') || formvalues['selectprojs'].startsWith('2.8') || formvalues['selectprojs'].startsWith('3.3') || formvalues['selectprojs'].startsWith('2.7') ) //formvalues['selectprojs'].startsWith('2.1')
{
// console.log(formData)
$.ajax({
type: "POST",
url: "/savebase64Img/",
contentType: "application/json", // set content type header to use Flask response.get_json()
data: formData,// convert data/object to JSON to send
processData: false, // Prevent jQuery from automatically processing the data
contentType: false,
success: function(response) {
console.log(response);
},
error: function(err) {
var TopTextModal = document.getElementById("TopTextModalWarning");
TopTextModal.textContent='Error'
PopupElement.textContent='Error occured. Refresh and try again. If the error continues, please contact the ADR team to fix it. ';
ShowPopUp();
}
})
.done(function(data){
// var mp3_url = 'https://media.geeksforgeeks.org/wp-content/uploads/20190531135120/beep.mp3';
// (new Audio(mp3_url)).play()
// retrieveLinks()
if (!(formvalues['selectprojs'].startsWith('2.8')) )
startDropdownUpdates(); // Start the dropdown updates
document.getElementById("loading").hidden = true;
document.getElementById("rightside").hidden = false;
document.getElementById('duplicater').removeAttribute('hidden');
if (formvalues['selectprojs'].startsWith('3.2') || formvalues['selectprojs'].startsWith('3.3') )
{
document.getElementById('duplicater').children[8].children[1].setAttribute('disabled','True')
document.getElementById('duplicater').children[8].children[2].setAttribute('disabled','True')
document.getElementById('duplicater').children[8].children[1].style.cursor='not-allowed';
document.getElementById('duplicater').children[8].children[2].style.cursor='not-allowed';
}
document.getElementById('addicon').style.display='inline-block';
document.getElementById('doneebackground').removeAttribute('hidden');
document.getElementById('summarytoXML').removeAttribute('hidden');
if (mctnameEmpty){
document.getElementById('doneebackground').setAttribute('disabled','True')
document.getElementById('doneebackground').style.cursor='not-allowed';
document.getElementById('doneebackground').style.boxShadow = 'none';
document.getElementById('doneebackground').style.color = 'white';
document.getElementById('doneebackground').style.backgroundColor="rgb(154,152,152)";
document.getElementById('summarytoXML').setAttribute('disabled','True')
document.getElementById('summarytoXML').style.cursor='not-allowed';
document.getElementById('summarytoXML').style.boxShadow = 'none';
document.getElementById('summarytoXML').style.color = 'white';
document.getElementById('summarytoXML').style.backgroundColor="rgb(154,152,152)";
}
// clearInterval()
document.getElementById('measureADRbutton').removeAttribute('disabled');
document.getElementById('measureADRbutton').style.cursor='pointer';
document.getElementById('measureADRbutton').style.color = 'white';
document.getElementById('measureADRbutton').style.backgroundColor="#16c72e";
document.getElementById('measureADRbutton').style.padding='10px 102px';
document.getElementById('measureADRbutton').addEventListener('mouseover',function(){
document.getElementById('measureADRbutton').style.color='black';
document.getElementById('measureADRbutton').style.boxShadow=' 0 0 8px 2px #16c72e';
})
document.getElementById('measureADRbutton').addEventListener('mouseout',function(){
document.getElementById('measureADRbutton').style.color='white';
document.getElementById('measureADRbutton').style.boxShadow='none';
});
if (formvalues['selectprojs'].startsWith('3.2') || formvalues['selectprojs'].startsWith('3.3') || formvalues['selectprojs'].startsWith('2.7') )
{ //
// /* data[0]--> img , SimilarAreaDictionary.to_dict(), spreadsheet_url,spreadsheetId,[],list1.to_dict(),pdflink,hatched_areas,namepathArr]# , spreadsheetId, spreadsheet_url , list1.to_dict()]
SimilarAreaDictionary=data[1];
spreadsheetURL=data[2];
spreadsheetId=data[3];
// spreadsheetURL=data[4];
list1= data[5];
dropboxLink=data[6];
console.log(data[7])
// console.log(dropboxLink)
}
if (formvalues['selectprojs'].startsWith('2.8'))
{ //base64.b64encode(buffer).decode('utf-8') ,pdflink,list1.to_dict(), repeated_labels , not_found]
// /* data[0]--> img , data[1]-->dataframe (goes to legend lsa ) , data [2] -->pdf dropbox shareable link ,data[3]-> spreadsheetId, data[4],spreadsheeturl */
// SimilarAreaDictionary=data[1];
// listofimages=data[0];
console.log('2.8Daata',data)
dropboxLink=data[1];
list1= data[2] // list of pdf markups
Repeated_Labels2_8=data[3]
Not_Found2_8=data[4]
console.log(Repeated_Labels2_8,Not_Found2_8)
}
if (formvalues['selectprojs'].startsWith('2.2'))
{
//ignore data[0] --> img passed directly
//dropboxLink=data[1]
//spreadsheetId=data[2]
//spreadsheetURL=data[3]
}
if (formvalues['selectprojs'].startsWith('2.1'))
{
//ignore data[0] --> img passed directly
//dropboxLink=data[1]
//spreadsheetId=data[2]
//spreadsheetURL=data[3]
spreadsheetURL=data[0]
}
if (formvalues['selectprojs'].startsWith('1.0'))
{// section 1.0
console.log('?')
SimilarAreaDictionary=data[1];
spreadsheetURL= data[2];
spreadsheetId= data[3];
colorsUsed = data[4];
list1 = data[5]; //list of pdf markups
dropboxLink=data[6];
namepathArr=data[8];
}
// if (!(formvalues['selectprojs'].startsWith('2.8')))
// {
ImgSide(data[0],spreadsheetURL,dropboxLink)
if (formvalues['selectprojs'].startsWith('2.8')) {
let messages = [];
if (Repeated_Labels2_8)
if (Repeated_Labels2_8.length > 0) {
messages.push('The following label(s) are represented on multiple doors: ' + Repeated_Labels2_8);
}
if (Not_Found2_8.length > 0) {
messages.push('The following label(s) not found on the plan: ' + Not_Found2_8);
}
if (messages.length > 0) {
var TopTextModal = document.getElementById("TopTextModal");
TopTextModal.textContent = 'Warning';
PopupElement.textContent = messages.join('\n'); // Show both messages if both conditions are met
ShowPopUp();
}
}
// }
// else{
// console.log(listofimages.length)
// for(var p=0;p<listofimages.length;p++)
// {
// ImgSide(listofimages[p],spreadsheetURLs[p],dropboxLinks[p])
// }
// }
// getlegendstoDirectory()
//////////////////////////////////////////////////////////////////////////////////////////
let delrows2 = {
content : {},
id : {},
subject :{},
color:{}
};
var delrows1='';
var flag=0;
pdfpath=[];
pdfpath.push(formvalues['selectproj'],formvalues['selectprojp'] ,formvalues['selectprojs'])
if (formvalues['selectprojs'].startsWith('1.0') || formvalues['selectprojs'].startsWith('3.2') || formvalues['selectprojs'].startsWith('3.3')|| formvalues['selectprojs'].startsWith('2.7')) { // || formvalues['selectprojs'].startsWith('2.8')
const interval = 6000; // Interval in milliseconds
let delrows1 = ''; // Initial data storage
let delrows2 = ''; // Updated data storage
console.log('Starting first AJAX request...');
// First AJAX request
$.ajax({
type: "POST",
url: "/_submission",
contentType: "application/json",
data: JSON.stringify({
dict1: JSON.stringify(list1),
spreadsheetId: spreadsheetId,
pdfpathpath: JSON.stringify(pdfpath),
path: Object.fromEntries(formData)['measureCheckbox']
}),
dataType: "json",
success: function (data1) {
delrows1 = data1[0];
console.log('First AJAX response received:', JSON.stringify(delrows1));
},
error: function (err) {
console.error('Error occurred during first AJAX call:', err);
var TopTextModal = document.getElementById("TopTextModalWarning");
TopTextModal.textContent='Error'
PopupElement.textContent = 'Error occurred. Refresh and try again. If the error continues, please contact the ADR team to fix it.';
ShowPopUp();
}
});
// Function to perform AJAX requests and compare data
async function fetchAndCompareData() {
try {
console.log('Fetching data...');
// Second AJAX request
const data11 = await $.ajax({
type: "POST",
url: "/_submission",
contentType: "application/json",
data: JSON.stringify({
dict1: JSON.stringify(list1),
spreadsheetId: spreadsheetId,
pdfpathpath: JSON.stringify(pdfpath),
path: Object.fromEntries(formData)['measureCheckbox']
}),
dataType: "json"
});
delrows2 = data11[0];
console.log('Second AJAX response received:', JSON.stringify(delrows2));
// Compare data
if (JSON.stringify(delrows1) === JSON.stringify(delrows2)) {
console.log('Data is the same');
} else {
console.log('Differences found:', delrows1, delrows2);
if (confirm("Changes have been made in the markups. Would you like to save and view them in the legend?")) {
delrows1 = delrows2;
document.getElementById("loading").hidden = false;
document.getElementById("loading").style.marginTop = '20%';
document.getElementById("loading").style.marginLeft = '65%';
updatepreview([pdfpath, Object.fromEntries(formData)['measureCheckbox']]);
await $.ajax({
type: "POST",
url: "/deletemarkupsroute",
contentType: "application/json",
data: JSON.stringify({
dict: JSON.stringify(SimilarAreaDictionary),
deletedrows: delrows2,
path: Object.fromEntries(formData)['measureCheckbox'],
spreadsheetId: spreadsheetId,
areaPermArr: JSON.stringify(data[7]),
section: Object.fromEntries(formData)['selectprojs'],
pdfpathpath: JSON.stringify(pdfpath)
}),
dataType: "json"
});
console.log('Markups updated');
}
}
} catch (err) {
var TopTextModal = document.getElementById("TopTextModalWarning");
TopTextModal.textContent='Error'
console.error('Error occurred during fetchAndCompareData:', err);
PopupElement.textContent = 'Error occurred. Refresh and try again. If the error continues, please contact the ADR team to fix it.';
ShowPopUp();
} finally {
// Always continue fetching data every 6 seconds
console.log(`Waiting for ${interval} ms before next fetch...`);
setTimeout(fetchAndCompareData, interval); // Continue the interval
}
}
// Initial interval-based call
setTimeout(fetchAndCompareData, interval);
// Button click event listener
document.addEventListener("click", function (event) {
if (event.target && event.target.id === "refreshpdfmarkups") {
console.log('Button clicked. Fetching data immediately...');
fetchAndCompareData();
}
});
}
/////////////////////////
});
}
}
//___________________________________________________________________________________________________________
//___________________________________________________________________________________________________________
document.getElementById("myForm").addEventListener("submit", function (e) {
e.preventDefault(); // Prevent form submission
let isChecked = document.querySelector('input[name="measureCheckbox"]:checked') !== null;
let sectionNumber = projsec.value; // Ensure projsec is defined
let isRelvClicked = document.querySelector(".relv-item[style*='background-color']") !== null;
let TopTextModal = document.getElementById("TopTextModal");
TopTextModal.textContent = "Warning: Missing Inputs";
if (sectionNumber.startsWith('2.8')) {
// If section starts with '2.8', both measureCheckbox and relv-item must be selected
if (!isChecked & !isRelvClicked) {
document.getElementById('relvselectid').style.boxShadow='0 0 8px 2px rgb(255, 0, 0)';
PopupElement.textContent = "Please select at least one project from 'Documents to Measure' and one relevant item rom 'Other Relevant Documents' before proceeding!";
ShowPopUp();
return;
}
else if (!isChecked){
PopupElement.textContent = "Please select at least one project from 'Documents to Measure' before proceeding!";
ShowPopUp();
return;
}
else if (!isRelvClicked){
document.getElementById('relvselectid').style.boxShadow='0 0 8px 2px rgb(255, 0, 0)';
PopupElement.textContent = "Please select at least one relevant item from 'Other Relevant Documents' before proceeding!";
ShowPopUp();
return;
}
} else {
// If section is not '2.8', only measureCheckbox is required
if (!isChecked) {
PopupElement.textContent = "Please select at least one project before proceeding from 'Documents to Measure' section!";
ShowPopUp();
return;
}
}
// If validation passes, proceed with form submission
getData(e.target);
});
////////////////////////////////////////////
var measitemVal='';
function get3rddropdown(){
console.log('ayhagaaaaaaaaaaaaaaaaa')
// selections=measitem.value.toString() //3rd dpdwn value
var unit;
if (addciconval>0){
for (let i =1 ; i <=addciconval ; i++){
var inputs1 = document.getElementsByClassName("measurementselections"+i)[0]; //1sr dpdwn
var selections1 = document.getElementsByClassName("selections"+i)[0]; //2nd dropdown
var measitem1 = document.getElementsByClassName("measureitems"+i)[0]; //3rd dpdwn
measitemVal1=measitem1.value.toString() //3rd dpdwn value
if(( (inputs1.value=='ground beams' ) || (inputs1.value=='pile caps' ) ) & (!selections1.value))//& (selections.value.startsWith('Pile') || !selections.value )) || (inputs.children[0].value=='pile caps' & (selections.value.startsWith('Ground') || !selections.value )))
{ //1.0
selections1.innerHTML='';
for (let m=0;m<MCTNames.length;m++)
{
var opt0 = document.createElement("OPTION") ;
opt0.text= MCTNames[m][0];
opt0.textContent= MCTNames[m][0];
opt0.value= MCTNames[m][0];
selections1.add(opt0);
}
console.log(section.value.toString())
}
else if(( (inputs1.value=='Wall' ) || (inputs1.value=='Column' ) ) & (!selections1.value))//& (selections.value.startsWith('Pile') || !selections.value )) || (inputs.children[0].value=='pile caps' & (selections.value.startsWith('Ground') || !selections.value )))
{ //1.0
selections1.innerHTML='';
for (let m=0;m<MCTNames.length;m++)
{
var opt0 = document.createElement("OPTION") ;
opt0.text= MCTNames[m][0];
opt0.textContent= MCTNames[m][0];
opt0.value= MCTNames[m][0];
selections1.add(opt0);
}
console.log(section.value.toString())
}
else if(( (inputs1.value=='Floor' ) || (inputs1.value=='Wall' ) ) & (!selections1.value))//& (selections.value.startsWith('Pile') || !selections.value )) || (inputs.children[0].value=='pile caps' & (selections.value.startsWith('Ground') || !selections.value )))
{ //3.2
selections1.innerHTML='';
for (let m=0;m<MCTNames.length;m++)
{
var opt0 = document.createElement("OPTION") ;
opt0.text= MCTNames[m][0];
opt0.textContent= MCTNames[m][0];
opt0.value= MCTNames[m][0];
selections1.add(opt0);
}
console.log(section.value.toString())
}
else if(( (inputs1.value=='Ceiling' ) ) & (!selections1.value))//& (selections.value.startsWith('Pile') || !selections.value )) || (inputs.children[0].value=='pile caps' & (selections.value.startsWith('Ground') || !selections.value )))
{ //3.3
selections1.innerHTML='';
for (let m=0;m<MCTNames.length;m++)
{
var opt0 = document.createElement("OPTION") ;
opt0.text= MCTNames[m][0];
opt0.textContent= MCTNames[m][0];
opt0.value= MCTNames[m][0];
selections1.add(opt0);
}
console.log(section.value.toString())
}
else if(( (inputs1.value=='Internal Walls' ) ) & (!selections1.value))//& (selections.value.startsWith('Pile') || !selections.value )) || (inputs.children[0].value=='pile caps' & (selections.value.startsWith('Ground') || !selections.value )))
{ //3.3
selections1.innerHTML='';
for (let m=0;m<MCTNames.length;m++)
{
var opt0 = document.createElement("OPTION") ;
opt0.text= MCTNames[m][0];
opt0.textContent= MCTNames[m][0];
opt0.value= MCTNames[m][0];
selections1.add(opt0);
}
console.log(section.value.toString())
}
// if (inputs1.value.startsWith('Floor') & (selections1.value.startsWith('Wall') || !selections1.value )){
// selections1.innerHTML='';
// var opt2 = document.createElement("OPTION") ;
// opt2.text= 'Floor:m2';
// opt2.value= 'Floor:m2';
// opt2.id='floorA' ;
// selections1.add(opt2);
// }
// if (inputs1.value.startsWith('Wall') & (selections1.value.startsWith('Floor') || !selections1.value ) ){
// selections1.innerHTML='';
// var opt3 = document.createElement("OPTION") ;
// opt3.text= 'Wall:m';
// opt3.value= 'Wall:m';
// opt3.id='WallP';
// selections1.add(opt3);
// }
// measitem1.innerHTML='';
// var ii, L = measitem1.options.length - 1;
// for(ii = L; ii >= 0; ii--) {
// if (measitem1.options[ii].value=='Area')
// measitem1.remove(ii);
// }
// });
if (selections1.value )
{
for(var l in MCTNames){
if(MCTNames[l][0] == selections1.value){
// Add an element to the dictionary
unit=MCTNames[l][1]
break; // If you want to break out of the loop once you've found a match
}
}
if (unit=='m2' )
{ measitem1.innerHTML='';
var opt10 = document.createElement("OPTION") ;
opt10.text= 'Area:m2';
opt10.value= 'Area:m2';
opt10.id='Area:m2';
measitem1.add(opt10);
}
if (unit=='m' & !(measitem1.value=='Perimeter:m'))
{ measitem1.innerHTML='';
var opt11 = document.createElement("OPTION") ;
opt11.text= 'Length:m';
opt11.value= 'Length:m';
opt11.id='Length:m';
measitem1.add(opt11);
var opt12 = document.createElement("OPTION") ;
opt12.text= 'Perimeter:m';
opt12.value= 'Perimeter:m';
opt12.id='Perimeter:m';
measitem1.add(opt12);
}
if (unit=='nr')
{ measitem1.innerHTML='';
var opt13 = document.createElement("OPTION") ;
opt13.text= 'Count:Nr';
opt13.value= 'Count:Nr';
opt13.id='Count:Nr';
measitem1.add(opt13);
}
}
}
}
// $(inputs).on("change", function (e) {
if(( (inputs.value=='ground beams' ) || (inputs.value=='pile caps' ) ) & (!selections.value))//& (selections.value.startsWith('Pile') || !selections.value )) || (inputs.children[0].value=='pile caps' & (selections.value.startsWith('Ground') || !selections.value )))
{
selections.innerHTML='';
for (let m=0;m<MCTNames.length;m++)
{
var opt0 = document.createElement("OPTION") ;
opt0.text= MCTNames[m][0];
opt0.textContent= MCTNames[m][0];
opt0.value= MCTNames[m][0];
selections.add(opt0);
}
}
if(( (inputs.value=='Wall' ) || (inputs.value=='Column' ) ) & (!selections.value))//& (selections.value.startsWith('Pile') || !selections.value )) || (inputs.children[0].value=='pile caps' & (selections.value.startsWith('Ground') || !selections.value )))
{
selections.innerHTML='';
for (let m=0;m<MCTNames.length;m++)
{
var opt0 = document.createElement("OPTION") ;
opt0.text= MCTNames[m][0];
opt0.textContent= MCTNames[m][0];
opt0.value= MCTNames[m][0];
selections.add(opt0);
}
}
else if(( (inputs.value=='Floor' ) || (inputs.value=='Wall' ) ) & (!selections.value))//& (selections.value.startsWith('Pile') || !selections.value )) || (inputs.children[0].value=='pile caps' & (selections.value.startsWith('Ground') || !selections.value )))
{
selections.innerHTML='';
for (let m=0;m<MCTNames.length;m++)
{
var opt0 = document.createElement("OPTION") ;
opt0.text= MCTNames[m][0];
opt0.textContent= MCTNames[m][0];
opt0.value= MCTNames[m][0];
selections.add(opt0);
}
}
else if(( (inputs.value=='Ceiling' ) ) & (!selections.value))//& (selections.value.startsWith('Pile') || !selections.value )) || (inputs.children[0].value=='pile caps' & (selections.value.startsWith('Ground') || !selections.value )))
{
selections.innerHTML='';
for (let m=0;m<MCTNames.length;m++)
{
var opt0 = document.createElement("OPTION") ;
opt0.text= MCTNames[m][0];
opt0.textContent= MCTNames[m][0];
opt0.value= MCTNames[m][0];
selections.add(opt0);
}
}
// if (inputs.value=='Floor' & (selections.value.startsWith('Wall') || !selections.value )){
// selections.innerHTML='';
// var optn = document.createElement("OPTION") ;
// optn.text= 'Floor:m2';
// optn.value= 'Floor:m2';
// optn.id='floorA' ;
// selections.add(optn);
// }
// if (inputs.value=='Wall' & (selections.value.startsWith('Floor') || !selections.value ) ){
// selections.innerHTML='';
// var opt = document.createElement("OPTION") ;
// opt.text= 'Wall:m';
// opt.value= 'Wall:m';
// opt.id='WallP';
// selections.add(opt);
// }
// })
console.log(selections.value)
if (selections.value)
{
for(var l in MCTNames){
if(MCTNames[l][0] == selections.value){
// Add an element to the dictionary
unit=MCTNames[l][1]
break; // If you want to break out of the loop once you've found a match
}
}
if (unit=='m2' )
{ measitem.innerHTML='';
var opt10 = document.createElement("OPTION") ;
opt10.text= 'Area:m2';
opt10.value= 'Area:m2';
opt10.id='Area:m2';
measitem.add(opt10);
}
if (unit=='m' & !(measitem.value=='Perimeter:m'))
{
measitem.innerHTML='';
var opt11 = document.createElement("OPTION") ;
opt11.text= 'Length:m';
opt11.value= 'Length:m';
opt11.id='Length:m';
measitem.add(opt11);
var opt12 = document.createElement("OPTION") ;
opt12.text= 'Perimeter:m';
opt12.value= 'Perimeter:m';
opt12.id='Perimeter:m';
measitem.add(opt12);
}
if (unit=='nr' )
{ measitem.innerHTML='';
var opt13 = document.createElement("OPTION") ;
opt13.text= 'Count:Nr';
opt13.value= 'Count:Nr';
opt13.id='Count:Nr';
measitem.add(opt13);
}
}
}
//___________________________________________________________________________________________________________
//___________________________________________________________________________________________________________
var repeatforloopI=0;
var repeatforloopIextra=0;
function getmctName(){
var listofnames=[];
var flag=0;
arrallvalues=[];
arrmctNames=[];
arrFinalMCNames=[];
var allmcnamestext= document.querySelectorAll('input[name="text1name"]');
allmcnamestext.forEach(function(elem){
if (elem.value)
arrallvalues.push(elem.value);
})
for (ii=0 ; ii<=addciconval; ii++){
if (ii==0){
//first one -- not duplicated yet --first row onlyy
var divduplicater= document.getElementsByClassName('duplicaterclass')[0].children;
var selections = divduplicater[3];//ex: Gb:m
measitemVal=divduplicater[5].value; // ex:area
var div=divduplicater[8].children;// first repeatforloopclass
var divValues=['text1'+div[0].value, div[1].value , div[2].value];
mctname=[selections.value ,divValues , measitemVal ];
//////////////////////////////////////////
count=0;
var ii0selections='';
for (let child =1;child <divduplicater.length;child++)
{
console.log('here3')
if( divduplicater[child] instanceof(HTMLDivElement) )
count++;
console.log(divduplicater)
ii0selections=divduplicater[3].value;
measitemVal=divduplicater[5].value;
console.log('gfd ',ii0selections,measitemVal)
if (divduplicater[child].className.startsWith('repeatforloopclass') && child !=5)
{
console.log('c',divduplicater[child].children)
var divValues2=['text1'+divduplicater[child].children[0].value, divduplicater[child].children[1].value , divduplicater[child].children[2].value];
mctname1=[ii0selections ,divValues2 , measitemVal];
console.log('divValues2',mctname1)
if(divduplicater[child].children[0].value && divduplicater[child].children[1].value && divduplicater[child].children[2].value)
{
// console.log(mctname1);
flag=1;
arrmctNames.push(mctname1);
}
else if(divduplicater[child].children[0].value && !divduplicater[child].children[1].value && !divduplicater[child].children[2].value) {
mctname1=[ii0selections ,[ 'text1'+divduplicater[child].children[0].value ], measitemVal ];
flag=1;
arrmctNames.push( mctname1);
}
else if(divduplicater[child].children[0].value && divduplicater[child].children[1].value && !divduplicater[child].children[2].value) {
mctname1=[ii0selections ,['text1'+divduplicater[child].children[0].value , divduplicater[child].children[1].value] , measitemVal];
flag=1;
arrmctNames.push( mctname1);
}
}
}
}
// else if (ii>0){
// var divduplicater= document.getElementsByClassName('duplicaterclass'+ii)[0].children;
// console.log(divduplicater)
// selections = divduplicater[3];//document.getElementsByClassName("selections")[0];
// measitemVal=divduplicater[5].value;
// div=divduplicater[8].children;
// var divValues=['text1'+div[0].value, div[1].value , div[2].value];
// mctname=[selections.value ,divValues , measitemVal ];
// if(div[0].value && div[1].value && div[2].value)
// {
// flag=1;
// arrmctNames.push( mctname);
// }
// else if (div[0].value && !div[1].value && !div[2].value) {
// mctname=[selections.value ,['text1'+div[0].value ], measitemVal ];
// flag=1;
// arrmctNames.push( mctname);
// }
// else if (div[0].value && div[1].value && !div[2].value) {
// mctname=[selections.value ,['text1'+div[0].value, div[1].value ] , measitemVal ];
// flag=1;
// arrmctNames.push( mctname);
// }
// }
if (ii>0 )//&& addciconval >0 && jj>0)
{
count=0;
var ii0selections='';
var replicatedDivChildren=document.getElementsByClassName('duplicaterclass'+ii)[0].children;
for (let o =0;o <=replicatedDivChildren.length;o++)
{
if( replicatedDivChildren[o] instanceof(HTMLDivElement) )
{ count++;
ii0selections=replicatedDivChildren[3].value;
measitemVal=replicatedDivChildren[5].value;
console.log('lkjhgf',replicatedDivChildren)
}
}
for (child=0;child<replicatedDivChildren.length;child++)
{
if (replicatedDivChildren[child].className.startsWith('repeatforloopclass') && child !=5)
{
var divValues2=['text1'+replicatedDivChildren[child].children[0].value, replicatedDivChildren[child].children[1].value , replicatedDivChildren[child].children[2].value];
mctname1=[ii0selections ,divValues2 , measitemVal];
if(replicatedDivChildren[child].children[0].value && replicatedDivChildren[child].children[1].value && replicatedDivChildren[child].children[2].value)
{
arrmctNames.push(mctname1);
flag=1;
}
else if(replicatedDivChildren[child].children[0].value && !replicatedDivChildren[child].children[1].value && !replicatedDivChildren[child].children[2].value)
{
mctname1=[ii0selections ,['text1'+replicatedDivChildren[child].children[0].value] , measitemVal];
arrmctNames.push(mctname1);
flag=1;
}
else if(replicatedDivChildren[child].children[0].value && replicatedDivChildren[child].children[1].value && !replicatedDivChildren[child].children[2].value)
{
mctname1=[ii0selections ,['text1'+replicatedDivChildren[child].children[0].value, replicatedDivChildren[child].children[1].value] , measitemVal];
arrmctNames.push(mctname1);
flag=1;
}
}
}
}
arrFinalMCNames= arrmctNames.slice();
if(arrmctNames.length >1){
var name=[];
allnames=[];
arrFinalMCNames = arrmctNames.slice();
var newarr=[];
for (let i=0;i<arrmctNames.length; i++)
{ str='';
newarr=[];
for (let j=i+1; j<arrmctNames.length; j++)
{
if (arrmctNames[i][0] == arrmctNames[j][0] && arrmctNames[i][2] == arrmctNames[j][2] &&arrmctNames[i][1][1] == arrmctNames[j][1][1] && arrmctNames[i][1][2] == arrmctNames[j][1][2])
{ var selectionsname=arrmctNames[i][0] ;
measitemVal=arrmctNames[i][2];
flag=1;
console.log('foorrr',arrmctNames[i][0],arrmctNames[i]);
if (allnames.includes(arrmctNames[i][1][0]) )
{
var index = allnames.indexOf(allnames[i] );
if (index !== -1) {
allnames.splice(index, 1);
}
}
if (!name.includes(arrmctNames[i][1][0] ) ){
// console.log('msh mwgod');
name.push(arrmctNames[i][1][0]);
newarr.push(arrmctNames[i][1][0]);
var index = arrFinalMCNames.indexOf(arrmctNames[i] );
if (index !== -1) {
arrFinalMCNames.splice(index, 1);
}
}
if (!name.includes(arrmctNames[j][1][0] ) ){
// console.log('msh mwgodj')
name.push(arrmctNames[j][1][0]);
newarr.push(arrmctNames[j][1][0]);
var index1 = arrFinalMCNames.indexOf(arrmctNames[j] );
if (index1 !== -1) {
arrFinalMCNames.splice(index1, 1);
}
}
if (!name.includes(arrmctNames[i][1][1] ) ||!name.includes(arrmctNames[i][1][2] ) ){
name.push( arrmctNames[i][1][1] , arrmctNames[i][1][2] );
newarr.push(arrmctNames[i][1][1] , arrmctNames[i][1][2] );
}
}
}
if (newarr.length >0){
flag=1;
arrFinalMCNames.push([selectionsname , newarr, measitemVal ]);
}
}
}
arrFinalMCNames.push([spreadsheetId , pdfpath[2]]);
console.log(arrFinalMCNames)
}
if (flag==1){
$.get( '/mctnametoGoogleSheet/'+ JSON.stringify(arrFinalMCNames))
.success( function(data) {
console.log('dataaaaa',data)
spreadsheetURL=spreadsheetURL+ '/edit#gid='+data[0].toString()
console.log('spreadsheetURL',spreadsheetURL)
document.getElementById('all').style.display='none';
window.open(spreadsheetURL.toString()) //sheetid
})
.error(function(jqXHR, textStatus, errorThrown) {
PopupElement.textContent='Error occured while exporting the summary. Check your connection, refresh and try again. If the error continues, please contact the ADR team to fix it. ';
ShowPopUp();
});
}
}
//___________________________________________________________________________________________________________
//___________________________________________________________________________________________________________
function addmctnameicon(){
// guessednamesDropdown()
repeatforloopI+=1
var dupDiv;
if (clonedDivId==0){
var dupDiv=document.getElementById('duplicater'); //pass kol div hna
}
else{
var dupDiv=document.getElementById(clonedDivId); //pass kol div hna //akher div et3mlt
}
var div=document.getElementById('repeatforloophidden')
var clone = div.cloneNode(true); // "deep" clone
jj++;
if (clonedDivId==0)
clone.style.marginLeft='5px';
else
clone.style.marginLeft='5px';
window.onclick = elem => {
if (elem.target.tagName.startsWith('LORD-ICON') && elem.target.id.startsWith('addmctnameid')){
clone.id = 'repeatforloop'+ elem.target.parentElement.parentElement.childNodes[1].value[0] + ++elem.target.parentElement.parentElement.childNodes[1].value[1];
clone.setAttribute('class','repeatforloopclass'+elem.target.parentElement.parentElement.childNodes[1].value[0] + elem.target.parentElement.parentElement.childNodes[1].value[1]);
clone.setAttribute('name','repeatforloopname'+elem.target.parentElement.parentElement.childNodes[1].value[0] + elem.target.parentElement.parentElement.childNodes[1].value[1]);
clone.childNodes[11].id='addmctnameid'+elem.target.parentElement.parentElement.childNodes[1].value[0] + elem.target.parentElement.parentElement.childNodes[1].value[1];
clone.childNodes[15].id='deletemctnameid'+elem.target.parentElement.parentElement.childNodes[1].value[0] + elem.target.parentElement.parentElement.childNodes[1].value[1];
if (elem.target.parentElement.nextElementSibling)
{
$("#"+elem.target.parentElement.parentElement.id).append(clone);
}
else
{
$("#"+elem.target.parentElement.parentElement.id).append(clone);
$("#"+elem.target.parentElement.id).insertBefore(clone,document.getElementById('doneebackground'));
}
if (thirddropdown.value.startsWith('3.2') || thirddropdown.value.startsWith('3.3'))
{
document.getElementById( 'repeatforloop'+ elem.target.parentElement.parentElement.childNodes[1].value[0] +elem.target.parentElement.parentElement.childNodes[1].value[1]).children[1].setAttribute('disabled','True')
document.getElementById( 'repeatforloop'+ elem.target.parentElement.parentElement.childNodes[1].value[0] +elem.target.parentElement.parentElement.childNodes[1].value[1]).children[2].setAttribute('disabled','True')
document.getElementById( 'repeatforloop'+ elem.target.parentElement.parentElement.childNodes[1].value[0] +elem.target.parentElement.parentElement.childNodes[1].value[1]).children[1].style.cursor='not-allowed';
document.getElementById( 'repeatforloop'+ elem.target.parentElement.parentElement.childNodes[1].value[0] +elem.target.parentElement.parentElement.childNodes[1].value[1]).children[2].style.cursor='not-allowed';
}
}
}
}
//___________________________________________________________________________________________________________
//___________________________________________________________________________________________________________
function deletemctnameicon(){
window.onclick = elem => {
if (elem.target.tagName.startsWith('LORD-ICON') && elem.target.id.startsWith('deletemctnameid'))
{
var numb = elem.target.parentElement.id.match(/\d/g);
if (numb==null)
numb='';
else
numb = numb.join("");
var deletethisdiv= document.getElementById('repeatforloop'+ numb);
deletethisdiv.parentNode.removeChild(deletethisdiv);
}
}
}
function addmctnameiconPopup(){
// guessednamesDropdown()
repeatforloopIextra+=1
var dupDivExtra;
if (clonedDivIdExtra==0){
var dupDivExtra=document.getElementById('duplicaterExtra'); //pass kol div hna
}
else{
var dupDivExtra=document.getElementById(clonedDivIdExtra); //pass kol div hna //akher div et3mlt
}
var divExtra=document.getElementById('repeatforloopExtrahidden')
var cloneExtra = divExtra.cloneNode(true); // "deep" clone
jjExtra++;
// if (clonedDivIdExtra==0)
// clone.style.marginLeft='5px';
// else
// clone.style.marginLeft='5px';
window.onclick = elem => {
if (elem.target.tagName.startsWith('LORD-ICON') && elem.target.id.startsWith('addmctnameidExtra')){
// console.log('repeatforloopExtraaa', elem.target.parentElement.parentElement.childNodes[1].value )
cloneExtra.id = 'repeatforloopExtra'+ jjExtra;
cloneExtra.setAttribute('class','repeatforloopclassExtra'+jjExtra);
cloneExtra.setAttribute('name','repeatforloopnameExtra'+jjExtra);
cloneExtra.childNodes[11].id='addmctnameidExtra'+jjExtra;
cloneExtra.childNodes[15].id='deletemctnameidExtra'+jjExtra;
if (elem.target.parentElement.nextElementSibling)
{
$("#"+elem.target.parentElement.parentElement.id).append(cloneExtra);
}
else
{
$("#"+elem.target.parentElement.parentElement.id).append(cloneExtra);
$("#"+elem.target.parentElement.id).insertBefore(cloneExtra,document.getElementById('doneebackground'));
}
}
}
console.log()
if (sectionNumber.startsWith('2.7'))
{
textextra= cloneExtra.children[0]
textextra.style.backgroundColor = "rgba(101, 101, 101, 0.27)";
textextra.style.cursor='not-allowed';
textextra.disabled="disabled";
}
if (sectionNumber.startsWith('2.8'))
{
text2extra= cloneExtra.children[3]
text2extra.style.backgroundColor ="rgba(101, 101, 101, 0.27)";
text2extra.style.cursor='not-allowed';
text2extra.disabled="disabled";
}
}
function deletemctnameiconPopup(){
window.onclick = elem => {
if (elem.target.tagName.startsWith('LORD-ICON') && elem.target.id.startsWith('deletemctnameidExtra'))
{
var numb = elem.target.parentElement.id.match(/\d/g);
if (numb==null)
numb='';
else
numb = numb.join("");
var deletethisdivExtra= document.getElementById('repeatforloopExtra'+ numb);
deletethisdivExtra.parentNode.removeChild(deletethisdivExtra);
}
}
}
//___________________________________________________________________________________________________________
//___________________________________________________________________________________________________________
function colors(){
var ele = document.getElementsByName('fullimage');
var levels = document.getElementsByName('levelsnamelabel')[0];
var levelsin = document.getElementsByName('levelsnameinput')[0]; //number of colors -- color pickers
var drp = document.getElementById("colorpickers");
for (i = 0; i < ele.length; i++) {
if (ele[i].checked)
if (ele[i].value==220){
console.log(ele[i].value);
levels.style.visibility='visible';
levelsin.style.visibility='visible';
}
else
{
levels.style.visibility='hidden';
levelsin.style.visibility='hidden';
drp.innerHTML='';
}
}
}
//___________________________________________________________________________________________________________
//___________________________________________________________________________________________________________
var canvas = document.querySelector("#myCanvas");
var ctx = canvas.getContext("2d");
var drp;
var color = 'rgb(47,255,255)';
//___________________________________________________________________________________________________________
//___________________________________________________________________________________________________________
function change(e){
color = this.value;
allcolors.push( color);
}
//___________________________________________________________________________________________________________
//___________________________________________________________________________________________________________
let hex2rgb= c=> `rgb(${c.match(/\w\w/g).map(x=>+`0x${x}`)})`;
myCanvas.addEventListener("click", e => {
var offset = canvas.getBoundingClientRect();
var x = e.clientX - offset.left;
var y = e.clientY - offset.top;
//a new point is pushed on the last array of ry
ry[ry.length - 1].push({ x: x, y: y, color:hex2rgb(color) });
drawChart();
});
//___________________________________________________________________________________________________________
//___________________________________________________________________________________________________________
// function guessednamesDropdown(){
// //
// $.get('/getguessednamepath/')
// .success(function(arrayofvalues) {
// console.log('arrayofvalues',arrayofvalues)
// var text1name= document.getElementsByName('text1name')
// // Loop through each dropdown
// text1name.forEach((dropdown, index) => {
// // Clear existing options
// dropdown.innerHTML = '';
// // Populate with arrayofvalues
// arrayofvalues.forEach(value => {
// let option = document.createElement('option');
// option.value = value;
// option.text = value;
// dropdown.appendChild(option);
// });
// });
// })
// .error(function(jqXHR, textStatus, errorThrown) {
// PopupElement.textContent='Error occured while retrieving the Legend Guessed Names. Refresh and try again. If the error continues, please contact the ADR team to fix it. ';
// ShowPopUp();
// });
// }
function drawChart() {
ctx.lineWidth = 5;
// for every array in the ry array
for (let index = 0; index < ry.length; index++) {
// for every point in the ry[index]
for (let i = 0; i < ry[index].length; i++) {
firstcircle=[]
let l = ry[index][i];
// draw the circle
if (i==0){
drawCircle(l.x, l.y);
firstcircle=[l.x,l.y]
}
// draw the line
if (i > 0) {
let last = ry[index][i - 1];
ctx.beginPath();
ctx.moveTo(last.x, last.y);
ctx.lineTo(l.x, l.y);
ctx.strokeStyle = l.color;
ctx.stroke();
}
}
}
}
//___________________________________________________________________________________________________________
//___________________________________________________________________________________________________________
function drawCircle(x, y) {
ctx.beginPath();
ctx.arc(x, y,1, 0, Math.PI *2);
ctx.strokeStyle = 'rgb(47,255,255)';
ctx.stroke();
}
//___________________________________________________________________________________________________________
//___________________________________________________________________________________________________________
/*If the plan contains levels, open canvas window*/
/*Set canvas code to be visible on the new window with the pdftoimg as the background*/
var levelsin = document.getElementById('levelcheckbox');
var canvaswindow= document.getElementById('canvaswindow');
var undoButtonId=document.getElementById('undoButtonId');
NewShapeButtonId=document.getElementById('NewShapeButtonId');
var savecanvas=document.getElementById('savecanvas');
levelsin.addEventListener('click',function(){
if (document.getElementsByClassName("selectionsProjs")[0].value.startsWith('1.0'))
{
document.getElementById("all").style.display = "block";
if( document.getElementById('levelcheckbox').checked)
{
$.get( '/canvaspdftoimgBackground/'+pdfname)
.success (function(data){
document.getElementById("all").style.display = "none";
var popup = window.open('');
console.log(popup)
popup.document.write('<html><head><title>ADR Console:Draw on PDF tool</title><link rel="stylesheet" href="static/style.css"></head><body>');
var element = popup.document.createElement('div');
element.setAttribute('id', 'mydiv');
canvaswindow.childNodes[1].height=data[1]; //canvas -->child 3
canvaswindow.childNodes[1].width=data[2];
canvaswindow.childNodes[1].style.width= 0.5*screen.width +'px'
HeightStyleratio= canvaswindow.childNodes[1].height * 0.5*screen.width / canvaswindow.childNodes[1].width ;
canvaswindow.childNodes[1].style.height= HeightStyleratio.toString() + 'px';
element.append(canvaswindow);
console.log(canvaswindow.childNodes)
canvaswindow.removeAttribute('hidden');
var imgDrawon =document.createElement("img");
imgDrawon.src = 'data:image/gif;base64,' +data[0];
console.log('srcc'+imgDrawon.src)
imgDrawon.width=data[2];
imgDrawon.style.width='700px';
imgDrawon.id='imgcanvas';
imgDrawon.alt="Larry";
imgDrawon.onload = function(){
ctx.drawImage(imgDrawon,0,0);
var scale = data[2] / canvaswindow.childNodes[1].style.width.slice(0,-2) ; // get the scale that matches display size
ctx.setTransform(scale,0,0,scale,0,0);
}
undoButtonId.addEventListener("click", e => {
//when undoButtonId is clicked the last point from the last array is deleted
if (ry[ry.length - 1].length > 0)
{
ry[ry.length - 1].pop();
}
else {
//if the last array is empty I delete this array
ry.pop();
//and then I delete the last point from the last array
ry[ry.length - 1].pop();
}
// delete everything
ctx.clearRect(0,0, canvas.width, canvas.height);
//redraw background to draw lines over again
ctx.drawImage(imgDrawon,0,0,canvaswindow.childNodes[1].style.width.slice(0, -2),canvaswindow.childNodes[1].style.height.slice(0, -2));
drawChart();
});
var win = popup.document.body;
win.appendChild(element);
var drp=popup.document.body.childNodes[0].childNodes[0].childNodes[9];//color picker div
NewShapeButtonId.addEventListener('click',function(){
ry.push([]);
});
drp.childNodes[1].addEventListener('click',function(){ //color picker
drp.childNodes[1].onchange=change;
})
})
.error(function(jqXHR, textStatus, errorThrown) {
PopupElement.textContent='Levels are not supported in this Section. ';
ShowPopUp();
document.getElementById('levelcheckbox').checked=false;
});
savecanvas.addEventListener('click',function(){
var image = new Image();
image.id = "pic";
image.src = canvas.toDataURL("image/png");
canvasimg=image.src;
})
}
}
else{
PopupElement.textContent='Levels are not supported in this Section. ';
ShowPopUp();
document.getElementById('levelcheckbox').checked=false;
}
})
//___________________________________________________________________________________________________________
function getSecondData(){
document.getElementById('all').style.display='block';
getmctName()
}
//___________________________________________________________________________________________________________
var section = document.getElementsByClassName("selectionsProjs")[0]
var inputs= document.getElementById('measurementselectionsid');
var selections= document.getElementById('selectionsid');
var measitem= document.getElementById('measureitemsid');
function chooseFirstdrpdwn()
{
inputs.innerHTML='';
selections.innerHTML='';
measitem.innerHTML='';
if (section.value.startsWith('1.0'))
{
var opt = document.createElement("OPTION");
opt.text= 'Select';
opt.value= "";
opt.hidden=true;
inputs.add(opt);
var optn = document.createElement("OPTION");
optn.text= 'Ground Beams';
optn.value= "ground beams";
inputs.add(optn);
var optn1 = document.createElement("OPTION");
optn1.text= 'Pile Caps';
optn1.value= "pile caps";
inputs.add(optn1);
}
if (section.value.startsWith('3.2'))
{
var opt = document.createElement("OPTION");
opt.text= 'Select';
opt.value= "";
opt.hidden=true;
inputs.add(opt);
var optn = document.createElement("OPTION");
optn.text= 'Floor';
optn.value= "Floor";
inputs.add(optn);
var optn1 = document.createElement("OPTION");
optn1.text= 'Wall';
optn1.value= "Wall";
inputs.add(optn1);
var optn2 = document.createElement("OPTION");
optn2.text= 'Internal Doors';
optn2.value= "Internal Doors";
inputs.add(optn2);
}
if (section.value.startsWith('3.3'))
{
var opt = document.createElement("OPTION");
opt.text= 'Select';
opt.value= "";
opt.hidden=true;
inputs.add(opt);
var optn = document.createElement("OPTION");
optn.text= 'Ceiling';
optn.value= "Ceiling";
inputs.add(optn);
}
if (section.value.startsWith('2.7'))
{
var opt = document.createElement("OPTION");
opt.text= 'Select';
opt.value= "";
opt.hidden=true;
inputs.add(opt);
var optn = document.createElement("OPTION");
optn.text= 'Internal Walls';
optn.value= "Internal Walls";
inputs.add(optn);
}
if (section.value.startsWith('2.8'))
{
var opt = document.createElement("OPTION");
opt.text= 'Select';
opt.value= "";
opt.hidden=true;
inputs.add(opt);
var optn = document.createElement("OPTION");
optn.text= 'Single Door';
optn.value= "Single Door";
inputs.add(optn);
var optn1 = document.createElement("OPTION");
optn1.text= 'Double Door';
optn1.value= "Double Door";
inputs.add(optn1);
}
if (section.value.startsWith('2.1'))
{
var opt = document.createElement("OPTION");
opt.text= 'Select';
opt.value= "";
opt.hidden=true;
inputs.add(opt);
var optn = document.createElement("OPTION");
optn.text= 'Column';
optn.value= "Column";
inputs.add(optn);
var optn1 = document.createElement("OPTION");
optn1.text= 'Wall';
optn1.value= "Wall";
inputs.add(optn1);
}
$(inputs).select2({
placeholder:'Select',
closeOnSelect: true,
width:'15ch'
});
$(selections).select2({
placeholder:'Select MC-T Name',
closeOnSelect: true,
width:'23ch'
});
$(measitem).select2({
placeholder:'Select unit',
closeOnSelect: true,
width:'11ch'
});
}
$(inputs).on("change", function (e) {
get3rddropdown();
})
$(selections).on("change", function (e) {
get3rddropdown();
})
$(inputs).css('width', '50px');
//___________________________________________________________________________________________________________
//___________________________________________________________________________________________________________
function summary_to_XML(){
console.log(pdfpath)
$.get('/summarytoXML/'+JSON.stringify([pdfpath,tomeasureproj]))
.success(function(xmllink){
console.log(xmllink)
window.open(xmllink)
})
.error(function(jqXHR, textStatus, errorThrown) {
PopupElement.textContent='Error occured while exporting summary to XML. Refresh and try again. If the error continues, please contact the ADR team to fix it. ';
ShowPopUp();
});
}
var closeButtons = document.querySelectorAll(".closeModal");
var allCloseDivs = document.getElementsByName("tobeclosed");
closeButtons.forEach(function(button) {
button.addEventListener("click", function() {
allCloseDivs.forEach(function(div) {
div.style.display = "none";
});
});
});
//___________________________________________________________________________________________________________
//___________________________________________________________________________________________________________
/* POP-UP code JS*/
// Select modal
var mpopup = document.getElementById('mpopupBox');
// Select close action element
// var close = document.getElementsByClassName("closeModal")[0];
function ShowPopUp(){
// Open modal
mpopup.style.display = "block";
}
// Close modal once close element is clicked
// close.onclick = function() {
// mpopup.style.display = "none";
// };
// Close modal when user clicks outside of the modal box
window.onclick = function(event) {
if (event.target == mpopup) {
mpopup.style.display = "none";
}
};
// closeDialog.onclick = function() {
// dialog_container.style.display = "none";
// };
var dialog_container = document.getElementById('dialog-container');
// Select close action element
// var closeDialog = document.getElementsByClassName("closeModal")[0];
function ShowPopUpWarning(){
// Open modal
dialog_container.style.display = "block";
}
// Close modal once close element is clicked
// closeDialog.onclick = function() {
// console.log()
// dialog_container.style.display = "none";
// };
// Close modal when user clicks outside of the modal box
window.onclick = function(event) {
if (event.target == dialog_container) {
dialog_container.style.display = "none";
}
};
function filterFunction(id) {
var input, filter, ul, li, a, i;
input = document.getElementById(id);
filter = input.value.toUpperCase();
if (id.toString().startsWith('tomeasure'))
a = document.querySelectorAll("#measureContainer .measure-item");
// a = document.getElementById("measureselectid").children;
else
// a = document.getElementById("relvselectid").children;
a = document.querySelectorAll("#relvselectid .relv-item");
// a = div.getElementsByTagName("option");
for (i = 0; i < a.length; i++) {
txtValue = a[i].textContent || a[i].innerText;
if (txtValue.toUpperCase().indexOf(filter) > -1) {
a[i].style.display = "";
} else {
a[i].style.display = "none";
}
}
}
// Call function when show dialog btn is clicked
var duplicaterExtra = document.getElementById("duplicaterExtra");
var overlaymeText = document.getElementById("modal-bodyTextp");
var overlayme = document.getElementById("dialog-container");
document.getElementById("refreshDropboxButtonID").disabled=false;
// if (document.getElementById("refreshDropboxButtonID").disabled==false){
document.getElementById("refreshDropboxButtonID").onclick = function()
{
TopTextModal.textContent='Warning: Dropbox Refresh';
if (document.getElementById("refreshDropboxButtonID").disabled==false)
overlayme.style.display = "block";
overlaymeText.textContent='The console updates projects retrieved from Dropbox automatically at 9:00 am and 9:00 p.m. If you need to access any projects in between, just click on this button. Please note that it will refresh the files related to the project you chose only.';
duplicaterExtra.setAttribute('hidden',true)
};
// Call function when show dialog btn is clicked
var TopTextModal = document.getElementById("TopTextModalWarning");
document.getElementById("refreshAPIbutton").disabled=false;
document.getElementById("refreshAPIbutton").onclick = function()
{
TopTextModal.textContent='Warning: MC Refresh';
if (document.getElementById("refreshAPIbutton").disabled==false)
{
console.log(overlaymeText.textContent)
overlaymeText.textContent='This is not a mandatory button. The system already runs at half-hour intervals to update the dropdowns and MC-Templates from the MC. Using this would manually refresh the data retrieved, disregarding the 30-minute interval.';
overlayme.style.display = "block";
duplicaterExtra.setAttribute('hidden',true)
}
};
document.getElementById("popupforextratext").disabled=false;
document.getElementById("popupforextratext").onclick = function(){
if (sectionNumber.startsWith('2.7'))
{
textextra= document.getElementById("textextra")
textextra.style.backgroundColor = "rgba(101, 101, 101, 0.27)";
// textextra.style.border='2px solid #2f83c6'
textextra.style.cursor='not-allowed';
textextra.disabled="disabled";
}
if (sectionNumber.startsWith('2.8'))
{
text2extra= document.getElementById("text2extra")
text2extra.style.backgroundColor = "rgba(101, 101, 101, 0.27)";
text2extra.style.cursor='not-allowed';
text2extra.disabled="disabled";
}
duplicaterExtra.removeAttribute('hidden');
TopTextModal.textContent='Define Information to Extract from Drawing'
if (document.getElementById("popupforextratext").disabled==false)
{
overlaymeText.textContent='';
overlayme.style.display = "block";
}
};
// }
document.getElementById("confirm").onclick = function(){confirmDialogR()};
function confirmDialogR() {
/* code executed if confirm is clicked */
overlayme.style.display = "none";
console.log(document.getElementById("confirm").parentElement.parentElement.children[0].textContent)
if (document.getElementById("confirm").parentElement.parentElement.children[0].textContent.startsWith('The'))
{
console.log('hereeeeeeeee')
callrefreshDropbox();
}
else if(document.getElementById("confirm").parentElement.parentElement.children[0].textContent.startsWith('This')){
callrefreshAPI();
}
else{
getpopuptext();
}
}
// If cancel btn is clicked , the function cancel() is executed
document.getElementById("cancel").onclick = function(){cancelDialog()};
function cancelDialog() {
overlayme.style.display = "none";
}
var extracted_path;
function callrefreshDropbox(){
console.log('ldropboxx' , extracted_path)
document.getElementById("refreshDropboxButtonID").style.backgroundColor = "gray";
document.getElementById("refreshDropboxButtonID").style.cursor='not-allowed';
document.getElementById("refreshDropboxButtonID").disabled="disabled";
TopTextModal=document.getElementById("TopTextModal");
$.get('/postdropboxprojects/' + encodeURIComponent(JSON.stringify(extracted_path)))
.success(function(stringReturned) {
if (stringReturned.startsWith('Updated'))
{
console.log('DONEEEE')
TopTextModal.textContent= "Success!";
TopTextModal.style.color='green';
PopupElement.textContent=stringReturned;
}
else{
PopupElement.textContent=stringReturned;
}
ShowPopUp();
document.getElementById("refreshDropboxButtonID").style.cursor='pointer';
document.getElementById("refreshDropboxButtonID").style.backgroundColor = "#1680c7";
document.getElementById("refreshDropboxButtonID").disabled = false;
})
.error(function(jqXHR, textStatus, errorThrown) {
PopupElement.textContent='Error occured while retrieving projects from the dropbox. Refresh and try again. If the error continues, please contact the ADR team to fix it. ';
ShowPopUp();
});
}
function refreshAPIbuutton(dataa){
$.get('/refreshAPIAppendNewTables')
.success(function(successData){
if (dataa[1]==='project')
{
// console.log('projjjj')
// displayprjnames();
console.log(dataa[2])
for (let d=0;d<dataa[2].length;d++)
{
console.log(dataa[2][d])
opt=document.createElement("option");
opt.textContent=dataa[2][d];
opt.text=dataa[2][d];
firstdropdown.append(opt);
PrjNamesArray.push(dataa[2][d]);
}
}
else if (dataa[1]==='part')
{ if (firstdropdown.value)
{
console.log(dataa[2])
for (let d=0;d<dataa[2].length;d++)
{
console.log(dataa[2][d])
opt=document.createElement("option");
opt.textContent=dataa[2][d];
opt.text=dataa[2][d];
seconddropdown.append(opt);
// PrjPartsArray.push(data[2][d]);
}
}
}
else if (dataa[1]==='section')
{
if ((firstdropdown.value) && (seconddropdown.value))
{
console.log(dataa[2])
for (let d=0;d<dataa[2].length;d++)
{
console.log(dataa[2][d])
opt=document.createElement("option");
opt.textContent=dataa[2][d];
opt.text=dataa[2][d];
if(!(dataa[2][d].startsWith('1.0') ) || (data[i].startsWith('3.2') ) || (data[i].startsWith('2.8')) || (data[i].startsWith('3.3')) || (data[i].startsWith('2.1')) || (data[i].startsWith('2.7')) )//||data[i].startsWith('2.2')))
{
opt.style.color='#bdbcbc';
opt.style.cursor='not-allowed';
opt.setAttribute('disabled',true)
}
thirddropdown.append(opt);
// PrjPartsArray.push(data[2][d]);
}
}
}
TopTextModal=document.getElementById("TopTextModalWarning");
TopTextModal.textContent= "Success!";
TopTextModal.style.color='green';
PopupElement.textContent='Console is up to date!';
ShowPopUp();
document.getElementById("refreshAPIbutton").style.cursor='pointer';
document.getElementById("refreshAPIbutton").style.backgroundColor = "#003CFF";
document.getElementById("refreshAPIbutton").disabled = false;
document.getElementById('all').style.display='none';
})
.error(function(jqXHR, textStatus, errorThrown) {
PopupElement.textContent='Error occured while retrieving projects. Refresh and try again. If the error continues, please contact the ADR team to fix it. ';
ShowPopUp();
});
}
function callrefreshAPI(){
console.log('l')
document.getElementById("refreshAPIbutton").style.backgroundColor = "gray";
document.getElementById("refreshAPIbutton").style.cursor='not-allowed';
document.getElementById("refreshAPIbutton").disabled="disabled";
if (thirddropdown.value){
console.log('yes')
$.get( '/RetrieveMCTNames/')
.success (function(data){
console.log(data)
MCTNames=data;
// console.log('jjw')
sectionNumber=thirddropdown.value;
MCTNames=MCTNames[sectionNumber.toString().toLowerCase()]
// console.log('pn')
console.log(MCTNames)
})
.error(function(jqXHR, textStatus, errorThrown) {
PopupElement.textContent='Error occured while retrieving the MC-T Names. Refresh and try again. If the error continues, please contact the ADR team to fix it. ';
ShowPopUp();
});
// return MCTNames
}
if ((firstdropdown.value) && (seconddropdown.value))
{
$.getJSON('/refreshAPI', {prjname: firstdropdown.value, prjpart: seconddropdown.value,prjpartid:partsArrIDsonly[seconddropdown.selectedIndex-1],},function(data11){
refreshAPIbuutton(data11)
})
}
else if (firstdropdown.value)
{
$.getJSON('/refreshAPI', {prjname: firstdropdown.value, }
,function(data11){
refreshAPIbuutton(data11)
})
}
else if (!firstdropdown.value){
$.getJSON('/refreshAPI',function(data11){
refreshAPIbuutton(data11)
})
}
}
var groupedValues = [];
function getpopuptext(){
// Select all text input fields inside the modal
const inputs = document.querySelectorAll('.modal-body input[type="text"], .modal-body input[type="number"]');
const values = [];
// Loop through the inputs and add their values to the array
inputs.forEach(input => {
values.push(input.value);
});
console.log("Collected input values:", values);
// Group the values into subarrays of 4
// const groupedValues = [];
for (let i = 0; i < values.length; i += 4) {
groupedValues.push(values.slice(i, i + 4));
}
console.log("Grouped input values:", groupedValues);
return groupedValues;
}
</script>