From b51204cc1c67100e38efbf223a70151a7a2f9b06 Mon Sep 17 00:00:00 2001
From: Scott Lahteine <sourcetree@thinkyhead.com>
Date: Thu, 5 Feb 2015 20:28:39 -0800
Subject: [PATCH] Add fieldsets and make them into tabs

---
 Marlin/configurator/css/configurator.css | 34 +++++++++++++++-
 Marlin/configurator/index.html           | 51 ++++++++++++++----------
 Marlin/configurator/js/configurator.js   | 24 +++++++++++
 3 files changed, 86 insertions(+), 23 deletions(-)

diff --git a/Marlin/configurator/css/configurator.css b/Marlin/configurator/css/configurator.css
index 2409508e6a..418000deee 100644
--- a/Marlin/configurator/css/configurator.css
+++ b/Marlin/configurator/css/configurator.css
@@ -12,7 +12,7 @@ p { width: 80%; color: #FF0; }
 #help strong { color: #0DD; }
 img { display: none; }
 label, input, select, textarea { display: block; float: left; margin: 1px 0; }
-label.newline, textarea { clear: both; }
+label.newline, textarea, fieldset { clear: both; }
 label { width: 130px; height: 1em; padding: 10px 480px 10px 1em; margin-right: -470px; text-align: right; }
 input[type="text"], select { margin: 0.75em 0 0; }
 input[type="checkbox"], input[type="radio"], input[type="file"] { margin: 1em 0 0; }
@@ -25,4 +25,34 @@ input:disabled { color: #BBB; }
 h1, h2, h3, h4, h5, h6 { clear: both; }
 h2 { margin: 0; padding: 1em 0 0; }
 #serial_stepper { padding-top: 0.75em; display: block; float: left; }
-#SERIAL_PORT { display: none; }
\ No newline at end of file
+#SERIAL_PORT { display: none; }
+
+ul.tabs { display: inline; list-style: none; }
+ul.tabs li { display: inline; }
+ul.tabs li a,
+ul.tabs li a.active:hover,
+ul.tabs li a.active:active {
+	display: block;
+	float: left;
+	background: #666;
+	color: #CCC;
+	font-size: 150%;
+	border-radius: 0.25em 0.25em 0 0;
+	margin: 0 4px 0 0;
+	padding: 2px 4px;
+	text-decoration: none;
+	}
+ul.tabs li a.active:link,
+ul.tabs li a.active:visited {
+	background: #DDD;
+	color: #900;
+	cursor: default;
+	}
+ul.tabs li a:hover,
+ul.tabs li a:active {
+	background: #777;
+	color: #DDD;
+	}
+
+fieldset { display: none; border: 1px solid #AAA; border-radius: 1em; }
+fieldset legend { display: none; }
diff --git a/Marlin/configurator/index.html b/Marlin/configurator/index.html
index aa2c106a69..66be7514c6 100644
--- a/Marlin/configurator/index.html
+++ b/Marlin/configurator/index.html
@@ -19,43 +19,52 @@
         <li><strong>HELP</strong> - This is the help region</li>
       </ul>
 
+      <div id="tabs"></div>
+
       <form id="config_form">
 
         <label>Drop Files Here:</label><input type="file" id="file-upload" />
 
-        <label class="newline">Serial Port:</label><select name="SERIAL_PORT"></select><div id="serial_stepper"></div>
+        <fieldset id="machine">
+          <legend>Machine</legend>
 
-        <label>Baud Rate:</label><select name="BAUDRATE"></select>
+          <label class="newline">Serial Port:</label><select name="SERIAL_PORT"></select><div id="serial_stepper"></div>
 
-        <label>AT90USB BT IF:</label>
-          <input name="BTENABLED" type="checkbox" value="1" checked />
+          <label>Baud Rate:</label><select name="BAUDRATE"></select>
 
-        <label class="newline">Motherboard:</label><select name="MOTHERBOARD"></select>
+          <label>AT90USB BT IF:</label>
+            <input name="BTENABLED" type="checkbox" value="1" checked />
 
-        <label class="newline">Custom Name:</label><input name="CUSTOM_MENDEL_NAME" class="switchable" type="text" size="14" maxlength="12" value="" />
+          <label class="newline">Motherboard:</label><select name="MOTHERBOARD"></select>
 
-        <label class="newline">Machine UUID:</label><input name="MACHINE_UUID" class="switchable" type="text" size="38" maxlength="36" value="" />
+          <label class="newline">Custom Name:</label><input name="CUSTOM_MENDEL_NAME" class="switchable" type="text" size="14" maxlength="12" value="" />
 
-        <label class="newline">Extruders:</label><select name="EXTRUDERS"></select>
+          <label class="newline">Machine UUID:</label><input name="MACHINE_UUID" class="switchable" type="text" size="38" maxlength="36" value="" />
 
-        <label class="newline">Power Supply:</label><select name="POWER_SUPPLY"></select>
+          <label class="newline">Extruders:</label><select name="EXTRUDERS"></select>
 
-        <label>PS Default Off:</label>
-          <input name="PS_DEFAULT_OFF" type="checkbox" value="1" checked />
+          <label class="newline">Power Supply:</label><select name="POWER_SUPPLY"></select>
 
-        <label class="newline">Temp Sensor 0:</label><select name="TEMP_SENSOR_0"></select>
-        <label class="newline">Temp Sensor 1:</label><select name="TEMP_SENSOR_1"></select>
-        <label class="newline">Temp Sensor 2:</label><select name="TEMP_SENSOR_2"></select>
-        <label class="newline">Bed Temp Sensor:</label><select name="TEMP_SENSOR_BED"></select>
+          <label>PS Default Off:</label>
+            <input name="PS_DEFAULT_OFF" type="checkbox" value="1" checked />
+        </fieldset>
 
-        <label class="newline">Redundant Sensor:</label>
-          <input name="TEMP_SENSOR_1_AS_REDUNDANT" type="checkbox" value="1" checked />
+        <fieldset id="temperature">
+          <legend>Temperature</legend>
+          <label class="newline">Temp Sensor 0:</label><select name="TEMP_SENSOR_0"></select>
+          <label class="newline">Temp Sensor 1:</label><select name="TEMP_SENSOR_1"></select>
+          <label class="newline">Temp Sensor 2:</label><select name="TEMP_SENSOR_2"></select>
+          <label class="newline">Bed Temp Sensor:</label><select name="TEMP_SENSOR_BED"></select>
 
-        <label>Max Diff:</label>
-          <input name="MAX_REDUNDANT_TEMP_SENSOR_DIFF" type="text" size="3" maxlength="2" />
+          <label class="newline">Redundant Sensor:</label>
+            <input name="TEMP_SENSOR_1_AS_REDUNDANT" type="checkbox" value="1" checked />
 
-        <label class="newline">Temp Residency Time (s):</label>
-          <input name="TEMP_RESIDENCY_TIME" type="text" size="3" maxlength="2" />
+          <label>Max Diff:</label>
+            <input name="MAX_REDUNDANT_TEMP_SENSOR_DIFF" type="text" size="3" maxlength="2" />
+
+          <label class="newline">Temp Residency Time (s):</label>
+            <input name="TEMP_RESIDENCY_TIME" type="text" size="3" maxlength="2" />
+        </fieldset>
 
         <h2>Marlin/Configuration.h</h2>
         <pre id="config_text" class="prettyprint linenums"></pre>
diff --git a/Marlin/configurator/js/configurator.js b/Marlin/configurator/js/configurator.js
index dd7de6f8e1..2dfa2d2178 100644
--- a/Marlin/configurator/js/configurator.js
+++ b/Marlin/configurator/js/configurator.js
@@ -75,6 +75,30 @@ var configuratorApp = (function(){
     init: function() {
       self = this; // a 'this' for use when 'this' is something else
 
+      // Make tabs for the fieldsets
+      var $fset = $('#config_form fieldset');
+      var $tabs = $('<ul>',{class:'tabs'}), ind = 1;
+      $('#config_form fieldset').each(function(){
+        var tabID = 'TAB'+ind;
+        $(this).addClass(tabID);
+        var $leg = $(this).find('legend');
+        var $link = $('<a>',{href:'#'+ind,id:tabID}).text($leg.text());
+        $tabs.append($('<li>').append($link));
+        $link.click(function(e){
+          e.preventDefault;
+          var ind = this.id;
+          $tabs.find('.active').removeClass('active');
+          $(this).addClass('active');
+          $fset.hide();
+          $fset.filter('.'+this.id).show();
+          return false;
+        });
+        ind++;
+      });
+      $tabs.appendTo('#tabs');
+      $('<br>',{class:'clear'}).appendTo('#tabs');
+      $tabs.find('a:first').trigger('click');
+
       // Make a droppable file uploader
       var $uploader = $('#file-upload');
       var fileUploader = new BinaryFileUploader({