Marthee commited on
Commit
9b1aa9d
·
verified ·
1 Parent(s): 6a09ed7

Update templates/proposed-GUI.html

Browse files
Files changed (1) hide show
  1. templates/proposed-GUI.html +357 -243
templates/proposed-GUI.html CHANGED
@@ -281,222 +281,189 @@
281
 
282
  </div>
283
  <div id="consoleContent"></div>
284
- <div class="dropdown-content">
285
- <div id="userguidetext">
286
- <div id="textfirstpage">
287
- <label style="font-style: oblique;">
288
- <br> Before using this tool, kindly read the following. </label>
289
-
290
- <br><br>
291
- The tool is divided into two main parts:
292
- <br><br>
293
- <li id="userguideheadings"> First Part </li>
294
- <label id="underlinedLables"> - Inputs: </label>
295
- <br>There are three dropdowns available that will allow you to select the name of the project you wish to measure, the project part, and the project section.
296
-
297
- <br > <br>
298
- <label style="font-style: italic;"> Please ensure that the 'Project Section' you select is correct, as it will affect the code applied to the plan. </label>
299
- <br>
300
- <br>
301
- Select the project you want to measure from the 'To measure' section. Additionally, you have the option to view any relevant documents you might need in Dropbox. (optional).
302
- <br> Important Note: 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, click on the dropbox icon located next to the 'Document to measure' section.
303
- <br>
304
- <br> <label style="font-style: italic;"> * Pixel to Metric conversion important notes:</label>
305
- <br>Once you have selected a specific plan to measure, you will be provided with a PDF containing a colored rectangle. Please open this PDF in Foxit Reader, Adobe, or any software that will allow you to measure shapes on a plan, and measure the given shape’s area and perimeter in the desired metric unit(for 3.2 measure its perimeter only), then input those values in the textboxes that will be shown below the relevant documents.
306
- For the ease of conversion of metric units, you will find a dropdown with ‘m’ or ‘mm’ next to each textbox.
307
- This will enable the code to understand the ratio between pixels and the metric unit you chose.
308
-
309
- <br>
310
- You may think of this rectangle's measurement as a scale check for Bluebeam.
311
- <br> <br>
312
- <head>
313
- <meta charset="UTF-8">
314
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
315
- <title>Dynamic Description</title>
316
- <style>
317
- .description {
318
- display: none;
319
- }
320
- </style>
321
- </head>
322
- <body>
323
- <label for="section-select" style="font-style: italic;">Select Section:</label>
324
- <select id="section-select"
325
- onchange="
326
- document.getElementById('description-section-1-0').style.display = this.value === 'section-1-0' ? 'block' : 'none';
327
- document.getElementById('description-section-3-2').style.display = this.value === 'section-3-2' ? 'block' : 'none';
328
- document.getElementById('description-section-2-8').style.display = this.value === 'section-2-8' ? 'block' : 'none';">
329
- <option value="">--Select Section--</option>
330
- <option value="section-1-0">Section 1.0</option>
331
- <option value="section-3-2">Section 3.2</option>
332
- <option value="section-2-8">Section 2.8</option>
333
- </select>
334
- <div id="description-section-1-0" class="description">
335
- <label style="font-style: italic;">* Notes for section 1.0 measurement:</label>
336
- <p>You can measure multiple levels independently using the checkbox labeled 'Leveled plan' under the Scale document heading.</p>
337
- <p>Leave the checkbox unchecked if you want to measure the entire plan. Please check the box if you want to measure specific areas of the plan or if the plan is divided into levels. Click the save button at the bottom of the page when you have finished.</p>
338
- </div>
339
-
340
- <div id="description-section-3-2" class="description">
341
- <label style="font-style: italic;">* Notes for section 3.2 measurement:</label>
342
- <p>The algorithm is designed to measure the floor finishes for floor plans by detecting each shape individually and measuring its area and perimeter.</p>
343
- <label style="font-weight: 200;">Steps to use:</label>
344
- <div style="margin-left: 20px;">
345
- <ol>
346
- <li>Select Section 3.2 from the drop-down list.</li>
347
- <li>Choose the PDF you wish to measure. A pdf will be downloaded for the next step.</li>
348
- <li>A pop window will appear in which it contains the pdf drawn on it a big blue shape. Measure its perimeter and input the value in the corresponding cell in the console. Be sure to adjust the unit (e.g., m, cm).</li>
349
- <li>Open AutoCAD and import the PDF.</li>
350
- <li>When a pop-up window appears in AutoCAD, ensure the following options are selected:
351
- <ol class="sub-item">
352
- <li>PDF Data to Import:
353
- <ol class="nested-item">
354
- <li>Vector geometry (Solid Fills)</li>
355
- <li>TrueType text</li>
356
- </ol>
357
- </li>
358
- <li>Layers:
359
- <ol class="nested-item">
360
- <li>Use PDF Layers</li>
361
- </ol>
362
- </li>
363
- <li>Import Options:
364
- <ol class="nested-item">
365
- <li>Convert solid fills to hatches</li>
366
- <li>Apply line weight properties</li>
367
- </ol>
368
- </li>
369
- </ol>
370
- </li>
371
- <li>Upload the generated DXF file to the console, input the measured perimeter, and click the green button.</li>
372
- </ol>
373
- </div>
374
- </div>
375
- <div id="description-section-2-8" class="description">
376
- <label style="font-style: italic;">* Notes for section 2.8 measurement:</label>
377
- <p style="font-weight: bold;">Door Detection Algorithm - v.1</p>
378
- <p>The algorithm is designed to detect different symbols of the door and measure its width.</p>
379
-
380
- <div>
381
- <p style="font-weight: bold;">Single Door:</p>
382
- <div style="margin-left: 20px;">
383
- <p>• Can correctly detect more than 85% of the single doors.</p>
384
- <p>• Identify the opening of the door properly and draw a line between the two end points.</p>
385
- <p>• Calculate the width of the opening.</p>
386
  </div>
387
- </div>
388
-
389
- <div>
390
- <p style="font-weight: bold;">Double Door:</p>
391
- <div style="margin-left: 20px;">
392
- <p>• Can correctly detect some double doors.</p>
393
- <p>• Calculate the width of the opening.</p>
394
- <p>• Draw a rectangle around the detected door.</p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
395
  </div>
396
- </div>
397
-
398
- <p style="font-weight: bold;">What to Expect in the Next Version?</p>
399
- <div style="margin-left: 20px;">
400
- <p>• Identify the opening of the double door properly and draw a line between the two end points.</p>
401
- <p>• Get the labels beside doors to generate their name.</p>
402
- <p>• Detect more symbols, e.g., "Leaf door".</p>
403
- </div>
404
- </div>
405
 
406
- </body>
407
- <br>
408
- <i id="secondpage" class="fa fa-arrow-right" aria-hidden="true"></i>
409
- <br> <br>
410
- </div>
411
- <div id="textsecondpage" hidden=until-found>
412
-
413
- <br>
414
- <label id="underlinedLables"> - Outputs: </label> <br>
415
- On the right side of the console, the output will be displayed. There are three primary components to it.
416
- You may have a sneak peek of the measured plan in the first section. There are two buttons underneath this picture. You may access the Google sheet that was created by clicking the "Legend and Data created" button. The "Click to view as PDF" second button directs you to the marked-up PDF that was created in Dropbox.
417
- <br>
418
- ONLY IN DROPBOX VIEW. DO NOT DOWNLOAD THE PDF FOR THIS FEATURE.
419
- <br>
420
- <label style="font-style: oblique;" >
421
- 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.
422
- </label>
423
- 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.
424
 
425
- <br> <br>
426
- <li id="userguideheadings" > Second part </li>
427
-
428
- 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’.
429
- <br>Ex. GB-1.
430
- <br> You may find some guessed names already filled in. If so, please double check these names before continuing to add any other names.
431
- <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.
432
- <br> Three dropdown menus and three text boxes are present.
433
-
434
-
435
- <li style="list-style-type:square;"> You can select the type of the shape from the first dropdown: <!--by selecting either: -->
436
- <br> &emsp;&emsp; e.g. (1.0 Substructure) Ground Beam or Pile Cap
437
- <!-- <br> &emsp;&emsp; b. (3.2 Floor Finishes) Floor or Wall -->
438
- </li>
439
- <li style="list-style-type:square;"> In the second dropdown, you will find a list of MC-T Names. Choose Accordingly.</li>
440
- <li style="list-style-type:square;"> The third dropdown menu has the unit of the MC-T Name you have chosen.</li>
441
- <br> Note: If the unit was (m), choose whether you wish to extract perimeter or length data from the third selection.
442
- <br><br><label style="font-style: italic;"> Regarding the MC-T naming process: </label>
443
- Then add the relevant detail and depth to the rows underneath the dropdowns.
444
- You can add/ subtract rows by using the + and - button.
445
-
446
- <br>
447
-
448
- You can add another block and repeat the process for another item by clicking the button next to "Measure using ADR".
449
-
450
-
451
- <br><br>
452
 
453
- <head>
454
- <meta charset="UTF-8">
455
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
456
- <title>Dynamic Description</title>
457
- <style>
458
- .description {
459
- display: none;
460
- }
461
- </style>
462
- </head>
463
- <body>
464
- <label for="section-select" style="font-style: italic;">Further Output Notes:</label>
465
- <select id="section-select"
466
- onchange="
467
- document.getElementById('Output-section-3-2').style.display = this.value === 'section-3-2' ? 'block' : 'none';">
468
- <option value="">--Select Section--</option>
469
- <option value="section-3-2">Section 3.2</option>
470
- </select>
471
- <div id="Output-section-3-2" class="description">
472
- <label style="font-style: italic;">* Output Notes for section 3.2 measurement:</label>
473
- <p>Image will appear contains the pdf and its annotations.Below this image, will be the same output buttons as all other sections.If the user wants to download the PDF file and open it in Bluebeam, </p>
474
- <label style="font-weight: 200;">They need to follow these steps:</label>
475
- <div style="margin-left: 20px;">
476
- <ol>
477
- <li>Download the output PDF file.</li>
478
- <li>Open the file in Bluebeam.</li>
479
- <li>Set the scale of the PDF in Bluebeam by navigating to Tools → Measure → Set Scale.</li>
480
- <li>After setting the scale, all annotations will appear and dynamically update in the measurement column, along with their corresponding labels.</li>
481
- <li>This section works correctly only if the PDF was originally created in AutoCAD.</li>
482
- <li>Double check the required items in the pop up window in AutoCAD while importing the pdf, if something is missing in it, the markups might appear as X shapes.</li>
483
- </ol>
484
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
485
  </div>
486
- </body>
487
-
488
- <i id="firstpage" class="fa fa-arrow-left" aria-hidden="true"></i>
489
- <br> <br>
490
-
491
  </div>
492
-
493
- </div>
494
  </div>
495
  <!-- POP-UP code -- to handle errors -->
496
  <!-- Link to trigger modal -->
497
 
498
  <!-- Modal popup box -->
499
- <div id="mpopupBox" class="mpopup">
500
  <!-- Modal content -->
501
  <div class="modal-content">
502
  <div class="modal-header">
@@ -515,7 +482,7 @@
515
 
516
 
517
 
518
- <div id="dialog-container" class="overlay">
519
  <!-- Modal content -->
520
  <div class="modal-content">
521
  <div class="modal-header">
@@ -614,6 +581,22 @@
614
 
615
  ///////////////////////////////////////////////BEGIN JS CODE//////////////////////////////////////////////////
616
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
617
 
618
  function updateProgressBar(value) {
619
  const progressBar = document.getElementById('progress');
@@ -832,31 +815,38 @@ function displayprojsections(projectid,Partid){
832
  relvSelect.removeChild(relvSelect.firstChild);
833
  }
834
  }
835
- $.get('/getprojectsections/'+JSON.stringify([projectid,Partid]))
836
- .success(function(data){
837
  document.getElementById("all").style.display = "none";
838
- for (let i=0;i<data.length;i++)
839
- {
840
- valueDoesNotExist=isValueNotInDropdown(thirddropdown, data[i])
841
- if (valueDoesNotExist)
842
- {
843
- opt=document.createElement("option");
844
- opt.value=data[i];
845
- opt.text=data[i];
846
- thirddropdown.append(opt);
847
 
848
- if(!(data[i].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')))
849
- {
850
- opt.style.color='#bdbcbc';
851
- opt.style.cursor='not-allowed';
852
- opt.setAttribute('disabled',true)
 
 
 
 
 
 
 
 
853
  }
 
 
 
 
 
 
 
 
 
854
  PrjSectionsArray.push(data[i]);
855
-
856
- }
857
- }
858
  })
859
- .error(function(jqXHR, textStatus, errorThrown) {
860
  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. ';
861
  ShowPopUp();
862
  });
@@ -1070,16 +1060,16 @@ document.getElementById('duplicater').childNodes[1].value=[0,0]
1070
  //___________________________________________________________________________________________________________
1071
  //___________________________________________________________________________________________________________
1072
  /*Tab View of User Guide*/
1073
- document.getElementById('secondpage').addEventListener('click',function(){
1074
- document.getElementById('textsecondpage').removeAttribute('hidden');
1075
- document.getElementById('textfirstpage').setAttribute('hidden',true)
1076
 
1077
- });
1078
- document.getElementById('firstpage').addEventListener('click',function(){
1079
- document.getElementById('textfirstpage').removeAttribute('hidden');
1080
- document.getElementById('textsecondpage').setAttribute('hidden',true)
1081
 
1082
- });
1083
  function w3_open() {
1084
  document.getElementById("home").style.marginLeft = "25%";
1085
  document.getElementById("legends").style.marginLeft = "25%";
@@ -1446,12 +1436,112 @@ console.log('ayhaga', clone.children[5])
1446
 
1447
 
1448
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1449
 
1450
  //___________________________________________________________________________________________________________
1451
  //___________________________________________________________________________________________________________
1452
  /*User Guide button toggle*/
1453
  function userguideclick(){
 
1454
  var acc = document.getElementsByClassName("dropdown-content")[0];
 
1455
  var i;
1456
  acc.classList.toggle("active");
1457
 
@@ -1463,8 +1553,19 @@ function userguideclick(){
1463
  acc.style.display = "block";
1464
  acc.style.backgroundColor=(0, 153, 255);
1465
  }
 
 
 
 
 
 
 
 
 
 
1466
  }
1467
- //to be retrieved from python code
 
1468
  var areainpixels=0;
1469
  var prminpixels=0;
1470
 
@@ -1485,6 +1586,7 @@ projsec.addEventListener('input',function(){
1485
  var ratioAunit=1;
1486
  var ratioPunit=1;
1487
  var pdfnames='';
 
1488
  //___________________________________________________________________________________________________________
1489
  //___________________________________________________________________________________________________________
1490
  function getSelectValues(select) {
@@ -3660,7 +3762,16 @@ function summary_to_XML(){
3660
  ShowPopUp();
3661
  });
3662
  }
 
 
3663
 
 
 
 
 
 
 
 
3664
  //___________________________________________________________________________________________________________
3665
  //___________________________________________________________________________________________________________
3666
  /* POP-UP code JS*/
@@ -3668,34 +3779,37 @@ function summary_to_XML(){
3668
 
3669
  var mpopup = document.getElementById('mpopupBox');
3670
  // Select close action element
3671
- var close = document.getElementsByClassName("closeModal")[0];
3672
  function ShowPopUp(){
3673
  // Open modal
3674
  mpopup.style.display = "block";
3675
  }
3676
  // Close modal once close element is clicked
3677
- close.onclick = function() {
3678
- mpopup.style.display = "none";
3679
- };
3680
  // Close modal when user clicks outside of the modal box
3681
  window.onclick = function(event) {
3682
  if (event.target == mpopup) {
3683
  mpopup.style.display = "none";
3684
  }
3685
  };
3686
-
 
 
3687
 
3688
  var dialog_container = document.getElementById('dialog-container');
3689
  // Select close action element
3690
- var closeDialog = document.getElementsByClassName("closeModal")[1];
3691
  function ShowPopUpWarning(){
3692
  // Open modal
3693
  dialog_container.style.display = "block";
3694
  }
3695
  // Close modal once close element is clicked
3696
- closeDialog.onclick = function() {
3697
- dialog_container.style.display = "none";
3698
- };
 
3699
  // Close modal when user clicks outside of the modal box
3700
  window.onclick = function(event) {
3701
  if (event.target == dialog_container) {
 
281
 
282
  </div>
283
  <div id="consoleContent"></div>
284
+ <div class="dropdown-content" id="dropdown-contentUserguideId" name="tobeclosed">
285
+ <div id="userguidetext" >
286
+ <div id="UserguideRibbon">
287
+ <label id="UserGuideHeader"> User Guide Text: Before using this tool, kindly read the following carefully. </label>
288
+ <button id="homeguidebutton" style="background-color: transparent; border: none;" onclick="ShowSectionUserguide(this)">
289
+ <i class="fa fa-home fa-lg" id="userguideHome"></i>
290
+ </button>
291
+
292
+ <div class="Userguidecontainer" id="UserGuidetoggle" onclick="userguidetoggleFunction()">
293
+ <div class="UserGuidebar1"></div>
294
+ <div class="UserGuidebar2"></div>
295
+ <div class="UserGuidebar3"></div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
296
  </div>
297
+
298
+
299
+ <button type="button" class="closeModal" id="userguideClose" data-dismiss="modal">&times;</button>
300
+ <button style="background-color: transparent; border: none;" id="userguideTableMaya" onclick="userguideMayaTableClick()">
301
+ <i class="fa fa-th fa-lg" aria-hidden="true"></i>
302
+ </button>
303
+ <div id="UserGuideSideBar">
304
+ <div id="UserGuidemenuOptions">
305
+ <li onclick="ShowSectionUserguide(this)">1.0 Substructure</li>
306
+ <li onclick="ShowSectionUserguide(this)">2.1 Frames</li>
307
+ <li onclick="ShowSectionUserguide(this)">2.2 Upper Floor</li>
308
+ <li onclick="ShowSectionUserguide(this)">2.3 Roof</li>
309
+ <li onclick="ShowSectionUserguide(this)">2.4 Stairs</li>
310
+ <li onclick="ShowSectionUserguide(this)">2.5 External Walls</li>
311
+ <li onclick="ShowSectionUserguide(this)">2.6 External Openings</li>
312
+ <li onclick="ShowSectionUserguide(this)">2.7 Internal Walls</li>
313
+ <li onclick="ShowSectionUserguide(this)">2.8 Internal Openings</li>
314
+ <li onclick="ShowSectionUserguide(this)">3.1 Wall Finishes</li>
315
+ <li onclick="ShowSectionUserguide(this)">3.2 Floor Finishes</li>
316
+ <li onclick="ShowSectionUserguide(this)">3.3 Ceiling Finishes</li>
317
+ <li onclick="ShowSectionUserguide(this)">4.0 Fittings, Furnishings and Equipments</li>
318
+ <li onclick="ShowSectionUserguide(this)">5.0 Services</li>
319
+ <li onclick="ShowSectionUserguide(this)">5.1 Sanitary</li>
320
+ <li onclick="ShowSectionUserguide(this)">7.0 Works to existing buildings</li>
321
+ <li onclick="ShowSectionUserguide(this)">8.1 Site Preparation Works</li>
322
+ <li onclick="ShowSectionUserguide(this)">8.2 Roads, Paths, Pavings</li>
323
+ <li onclick="ShowSectionUserguide(this)">8.3 Soft Landscaping</li>
324
+ <li onclick="ShowSectionUserguide(this)">8.4 Fencing, Railing, Walls</li>
325
+ <li onclick="ShowSectionUserguide(this)">8.5 External Fixtures</li>
326
+ <li onclick="ShowSectionUserguide(this)">8.6 External Drainage</li>
327
+ <li onclick="ShowSectionUserguide(this)">8.7 External Services</li>
328
+ <li onclick="ShowSectionUserguide(this)">8.8 Minor Buildings</li>
329
+
330
+ </div>
331
  </div>
332
+ </div>
 
 
 
 
 
 
 
 
333
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
334
 
335
+ <div id="textfirstpage">
336
+ <label style="font-weight: bold;">
337
+ 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.
338
+ </label>
339
+ <br>
340
+ <label style="font-style: italic;">
341
+ 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.
342
+ <br>
343
+ 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
344
+ planned for the ADR console, along with the sections where they are applied.
345
+ </label>
346
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
347
 
348
+ <br>
349
+ The tool is divided into two main parts:
350
+ <br><br>
351
+ <i class="fa fa-circle" aria-hidden="true"> </i> <label id="userguideheadings"> First Part </label>
352
+ <br>
353
+ <div style="margin-left: 40px;">
354
+ 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
355
+ <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.
356
+
357
+ <br>
358
+ <label id="underlinedLables">Inputs: </label>
359
+ <br>
360
+
361
+ <li>
362
+ Use the three dropdown menus to select the project name, part, and section to measure.
363
+ <br>
364
+ <img src="static/images/Dropdowns_3.png" alt="Dropdown menus example" style="margin-top: 10px; width:240px;">
365
+ <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>
366
+ <br>
367
+ </li>
368
+ <li>
369
+ <label style="font-size: 15px;"> Document To Measure: </label>
370
+ <br>
371
+ 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.
372
+
373
+ <br>
374
+ <li>
375
+ 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:
376
+ <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.
377
+ </li>
378
+ <br>
379
+ <label style="font-style: italic;"> Pixel-to-Metric conversion important notes:</label>
380
+ <br>
381
+ 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.
382
+ 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.
383
+ <br>
384
+ This rectangle serves as a scale check for Bluebeam. Refer to the relevant section for further details.
385
+ <br>
386
+ <li>
387
+ 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.
388
+ </li>
389
+ </li>
390
+ <label id="underlinedLables">Outputs: </label> <br>
391
+ The right panel displays results in three sections:
392
+ <li>A preview of the measured plan, which you can click to expand.</li>
393
+ <li>Three buttons:
394
+ <li> <label style="font-weight: bold;" >"Legend and Data Created" </label> – Access the Google Sheet legend.</li>
395
+ <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>
396
+ <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>
397
+ </li>
398
+
399
+ <br>
400
+ <label style="font-weight: bold;" > ONLY IN DROPBOX VIEW. DO NOT DOWNLOAD THE PDF FOR THIS FEATURE. </label>
401
+ <br>
402
+ <label style="font-style: oblique;" >
403
+ 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.
404
+ </label>
405
+ 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.
406
+ </div>
407
+ <br>
408
+ <i class="fa fa-circle" aria-hidden="true"> </i> <label id="userguideheadings"> Second Part </label>
409
+ <br><br>
410
+ <div style="margin-left: 40px;">
411
+ 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’.
412
+ <br>Ex. GB-1.
413
+ <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.
414
+ <br> Three dropdown menus and three text boxes are present.
415
+
416
+
417
+ <li style="list-style-type:square;"> You can select the type of the shape from the first dropdown: <!--by selecting either: -->
418
+ <br> &emsp;&emsp; e.g. (1.0 Substructure) Ground Beam or Pile Cap. Refer to the relevant section for more details.
419
+ <!-- <br> &emsp;&emsp; b. (3.2 Floor Finishes) Floor or Wall -->
420
+ </li>
421
+ <li style="list-style-type:square;"> In the second dropdown, you will find a list of MC-T Names. Choose Accordingly.</li>
422
+ <li style="list-style-type:square;"> The third dropdown menu has the unit of the MC-T Name you have chosen.</li>
423
+ <br> Note: If the unit was (m), choose whether you wish to extract perimeter or length data from the third selection.
424
+ <br><br><label style="font-style: italic;"> Regarding the MC-T naming process: </label>
425
+ Then add the relevant detail and depth to the rows underneath the dropdowns.
426
+ You can add/ subtract rows by using the + and - button.
427
+
428
+ <br>
429
+
430
+ You can add another block and repeat the process for another item by clicking the button next to "Measure using ADR".
431
+
432
+ </div>
433
+
434
+
435
+ </div>
436
+ <div id="1_0textUserGuide" hidden class="othesectionsuserguide">
437
+ User guide in progress...
438
+
439
+ </div>
440
+ <div id="2_1textUserGuide" hidden class="othesectionsuserguide">
441
+ User guide in progress...
442
+
443
+ </div>
444
+ <div id="2_7textUserGuide" hidden class="othesectionsuserguide">
445
+ User guide in progress...
446
+
447
+ </div>
448
+ <div id="2_8textUserGuide" hidden class="othesectionsuserguide">
449
+ User guide in progress...
450
+
451
+ </div>
452
+ <div id="3_2textUserGuide" hidden class="othesectionsuserguide">
453
+ User guide in progress...
454
+
455
+ </div>
456
+ <div id="3_3textUserGuide" hidden class="othesectionsuserguide">
457
+ User guide in progress...
458
+
459
  </div>
 
 
 
 
 
460
  </div>
 
 
461
  </div>
462
  <!-- POP-UP code -- to handle errors -->
463
  <!-- Link to trigger modal -->
464
 
465
  <!-- Modal popup box -->
466
+ <div id="mpopupBox" class="mpopup" name="tobeclosed">
467
  <!-- Modal content -->
468
  <div class="modal-content">
469
  <div class="modal-header">
 
482
 
483
 
484
 
485
+ <div id="dialog-container" class="overlay" name="tobeclosed">
486
  <!-- Modal content -->
487
  <div class="modal-content">
488
  <div class="modal-header">
 
581
 
582
  ///////////////////////////////////////////////BEGIN JS CODE//////////////////////////////////////////////////
583
 
584
+ var ActiveSections=['1.0','2.1','2.7','2.8','3.2','3.3']
585
+
586
+ var menuItems = document.querySelectorAll("#UserGuidemenuOptions li");
587
+
588
+ menuItems.forEach(function (item) {
589
+ // Extract the section number (first part of the text)
590
+ var sectionNumber = item.textContent.trim().split(" ")[0];
591
+
592
+ // If the section is not in ActiveSections, disable it
593
+ if (!ActiveSections.includes(sectionNumber)) {
594
+ item.id = "disabledSection"; // Assign ID
595
+ item.style.color = "#bdbcbc"; // Greyed-out text
596
+ item.style.cursor = "not-allowed"; // Change cursor
597
+ item.onclick = null; // Disable clicking
598
+ }
599
+ });
600
 
601
  function updateProgressBar(value) {
602
  const progressBar = document.getElementById('progress');
 
815
  relvSelect.removeChild(relvSelect.firstChild);
816
  }
817
  }
818
+ $.get('/getprojectsections/' + JSON.stringify([projectid, Partid]))
819
+ .done(function(data) {
820
  document.getElementById("all").style.display = "none";
 
 
 
 
 
 
 
 
 
821
 
822
+ for (let i = 0; i < data.length; i++) {
823
+ let valueDoesNotExist = isValueNotInDropdown(thirddropdown, data[i]);
824
+
825
+ if (valueDoesNotExist) {
826
+ let opt = document.createElement("option");
827
+ opt.value = data[i];
828
+ opt.text = data[i];
829
+
830
+ let isActive = false;
831
+ for (let d = 0; d < ActiveSections.length; d++) {
832
+ if (data[i].startsWith(ActiveSections[d])) {
833
+ isActive = true;
834
+ break; // Exit loop early if active
835
  }
836
+ }
837
+
838
+ if (!isActive) {
839
+ opt.style.color = '#bdbcbc';
840
+ opt.style.cursor = 'not-allowed';
841
+ opt.setAttribute('disabled', true);
842
+ }
843
+
844
+ thirddropdown.append(opt);
845
  PrjSectionsArray.push(data[i]);
846
+ }
847
+ }
 
848
  })
849
+ .fail(function(jqXHR, textStatus, errorThrown) {
850
  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. ';
851
  ShowPopUp();
852
  });
 
1060
  //___________________________________________________________________________________________________________
1061
  //___________________________________________________________________________________________________________
1062
  /*Tab View of User Guide*/
1063
+ // document.getElementById('secondpage').addEventListener('click',function(){
1064
+ // document.getElementById('textsecondpage').removeAttribute('hidden');
1065
+ // document.getElementById('textfirstpage').setAttribute('hidden',true)
1066
 
1067
+ // });
1068
+ // document.getElementById('firstpage').addEventListener('click',function(){
1069
+ // document.getElementById('textfirstpage').removeAttribute('hidden');
1070
+ // document.getElementById('textsecondpage').setAttribute('hidden',true)
1071
 
1072
+ // });
1073
  function w3_open() {
1074
  document.getElementById("home").style.marginLeft = "25%";
1075
  document.getElementById("legends").style.marginLeft = "25%";
 
1436
 
1437
 
1438
  }
1439
+ function userguidetoggleFunction() {
1440
+ var dropdownContentUserguideId = document.getElementById("dropdown-contentUserguideId");
1441
+ var UserGuideSideBar = document.getElementById('UserGuideSideBar');
1442
+ var UserGuidetoggle = document.getElementById('UserGuidetoggle');
1443
+
1444
+ var isOpen = UserGuideSideBar.style.display === "block";
1445
+
1446
+ // **Close the dropdown when opening User Guide**
1447
+ dropdownContentUserguideId.classList.remove("active");
1448
+
1449
+ // **Toggle the sidebar visibility properly**
1450
+ if (isOpen) {
1451
+ UserGuideSideBar.style.display = "none";
1452
+ UserGuideSideBar.classList.remove('UserGuideslide-in');
1453
+ UserGuideSideBar.classList.add('UserGuideslide-out');
1454
+ UserGuidetoggle.classList.remove("change");
1455
+ } else {
1456
+ UserGuideSideBar.style.display = "block";
1457
+ UserGuideSideBar.style.width = "25%";
1458
+ UserGuideSideBar.classList.add('UserGuideslide-in');
1459
+ UserGuideSideBar.classList.remove('UserGuideslide-out');
1460
+ UserGuidetoggle.classList.add("change");
1461
+ }
1462
+ }
1463
+
1464
+ function ShowSectionUserguide(element) {
1465
+ var textFirstPage = document.getElementById('textfirstpage');
1466
+ var UserGuideSideBar = document.getElementById('UserGuideSideBar');
1467
+ var UserGuidetoggle = document.getElementById('UserGuidetoggle');
1468
+ var isOpen = UserGuideSideBar.style.display === "block";
1469
+
1470
+
1471
+
1472
+ // **If clicking home and already on home, only toggle icon**
1473
+ if (element.id === 'homeguidebutton' || element.parentElement?.id === 'homeguidebutton') {
1474
+ if (textFirstPage.style.display === 'block') {
1475
+ return; // Exit function to prevent further toggling
1476
+ }
1477
+ hideAllSections();
1478
+ textFirstPage.style.display = 'block';
1479
+ return;
1480
+ }
1481
+
1482
+ // **If clicking a section, hide sidebar and update content**
1483
+ if (element.tagName === 'LI') {
1484
+ hideAllSections();
1485
+ // **Toggle the sidebar visibility properly**
1486
+ if (isOpen) {
1487
+ UserGuideSideBar.style.display = "none";
1488
+ UserGuideSideBar.classList.remove('UserGuideslide-in');
1489
+ UserGuideSideBar.classList.add('UserGuideslide-out');
1490
+ UserGuidetoggle.classList.remove("change");
1491
+ } else {
1492
+ UserGuideSideBar.style.display = "block";
1493
+ UserGuideSideBar.style.width = "25%";
1494
+ UserGuideSideBar.classList.add('UserGuideslide-in');
1495
+ UserGuideSideBar.classList.remove('UserGuideslide-out');
1496
+ UserGuidetoggle.classList.add("change");
1497
+ }
1498
+
1499
+ if (element.textContent.startsWith('1.0')) {
1500
+ document.getElementById('1_0textUserGuide').style.display = 'block';
1501
+ document.getElementById('1_0textUserGuide').removeAttribute('hidden');
1502
+
1503
+ }
1504
+ else if (element.textContent.startsWith('2.1')) {
1505
+ document.getElementById('2_1textUserGuide').style.display = 'block';
1506
+ document.getElementById('2_1textUserGuide').removeAttribute('hidden');
1507
+ }
1508
+ else if (element.textContent.startsWith('2.7')) {
1509
+ document.getElementById('2_7textUserGuide').style.display = 'block';
1510
+ document.getElementById('2_7textUserGuide').removeAttribute('hidden');
1511
+ }
1512
+ else if (element.textContent.startsWith('2.8')) {
1513
+ document.getElementById('2_8textUserGuide').style.display = 'block';
1514
+ document.getElementById('2_8textUserGuide').removeAttribute('hidden');
1515
+ }
1516
+ else if (element.textContent.startsWith('3.2')) {
1517
+ document.getElementById('3_2textUserGuide').style.display = 'block';
1518
+ document.getElementById('3_2textUserGuide').removeAttribute('hidden');
1519
+ }
1520
+ else if (element.textContent.startsWith('3.3')) {
1521
+ document.getElementById('3_3textUserGuide').style.display = 'block';
1522
+ document.getElementById('3_3textUserGuide').removeAttribute('hidden');
1523
+ }
1524
+ }
1525
+ }
1526
+
1527
+ // Function to hide all sections before showing the selected one
1528
+ function hideAllSections() {
1529
+ document.getElementById('textfirstpage').style.display = 'none';
1530
+ document.getElementById('1_0textUserGuide').style.display = 'none';
1531
+ document.getElementById('2_1textUserGuide').style.display = 'none';
1532
+ document.getElementById('2_7textUserGuide').style.display = 'none';
1533
+ document.getElementById('2_8textUserGuide').style.display = 'none';
1534
+ document.getElementById('3_2textUserGuide').style.display = 'none';
1535
+ document.getElementById('3_3textUserGuide').style.display = 'none';
1536
+ }
1537
 
1538
  //___________________________________________________________________________________________________________
1539
  //___________________________________________________________________________________________________________
1540
  /*User Guide button toggle*/
1541
  function userguideclick(){
1542
+ document.getElementById('textfirstpage').style.display='block'
1543
  var acc = document.getElementsByClassName("dropdown-content")[0];
1544
+ var userguideClose=document.getElementById("userguideClose")
1545
  var i;
1546
  acc.classList.toggle("active");
1547
 
 
1553
  acc.style.display = "block";
1554
  acc.style.backgroundColor=(0, 153, 255);
1555
  }
1556
+
1557
+ close.onclick = function() {
1558
+ acc.style.display = "none";
1559
+ };
1560
+
1561
+ }
1562
+ function userguideMayaTableClick(){
1563
+ var userguideTableMaya=document.getElementById('userguideTableMaya')
1564
+ window.open('https://docs.google.com/spreadsheets/d/10TjB8EbSiDHybo9YsDDzekxi8iQECpprXdqptHCZzec/edit?gid=875423041#gid=875423041');
1565
+
1566
  }
1567
+
1568
+ //to be retrieved from python code
1569
  var areainpixels=0;
1570
  var prminpixels=0;
1571
 
 
1586
  var ratioAunit=1;
1587
  var ratioPunit=1;
1588
  var pdfnames='';
1589
+
1590
  //___________________________________________________________________________________________________________
1591
  //___________________________________________________________________________________________________________
1592
  function getSelectValues(select) {
 
3762
  ShowPopUp();
3763
  });
3764
  }
3765
+ var closeButtons = document.querySelectorAll(".closeModal");
3766
+ var allCloseDivs = document.getElementsByName("tobeclosed");
3767
 
3768
+ closeButtons.forEach(function(button) {
3769
+ button.addEventListener("click", function() {
3770
+ allCloseDivs.forEach(function(div) {
3771
+ div.style.display = "none";
3772
+ });
3773
+ });
3774
+ });
3775
  //___________________________________________________________________________________________________________
3776
  //___________________________________________________________________________________________________________
3777
  /* POP-UP code JS*/
 
3779
 
3780
  var mpopup = document.getElementById('mpopupBox');
3781
  // Select close action element
3782
+ // var close = document.getElementsByClassName("closeModal")[0];
3783
  function ShowPopUp(){
3784
  // Open modal
3785
  mpopup.style.display = "block";
3786
  }
3787
  // Close modal once close element is clicked
3788
+ // close.onclick = function() {
3789
+ // mpopup.style.display = "none";
3790
+ // };
3791
  // Close modal when user clicks outside of the modal box
3792
  window.onclick = function(event) {
3793
  if (event.target == mpopup) {
3794
  mpopup.style.display = "none";
3795
  }
3796
  };
3797
+ // closeDialog.onclick = function() {
3798
+ // dialog_container.style.display = "none";
3799
+ // };
3800
 
3801
  var dialog_container = document.getElementById('dialog-container');
3802
  // Select close action element
3803
+ // var closeDialog = document.getElementsByClassName("closeModal")[0];
3804
  function ShowPopUpWarning(){
3805
  // Open modal
3806
  dialog_container.style.display = "block";
3807
  }
3808
  // Close modal once close element is clicked
3809
+ // closeDialog.onclick = function() {
3810
+ // console.log()
3811
+ // dialog_container.style.display = "none";
3812
+ // };
3813
  // Close modal when user clicks outside of the modal box
3814
  window.onclick = function(event) {
3815
  if (event.target == dialog_container) {