|  | @@ -4,19 +4,21 @@
 | 
	
		
			
				|  |  |          <meta charset="utf-8"/>
 | 
	
		
			
				|  |  |          <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
 | 
	
		
			
				|  |  |          <meta name="apple-mobile-web-app-capable" content="yes" />
 | 
	
		
			
				|  |  | +        <link rel="stylesheet" href="/test/bootstrap.min.css"> <!-- TODO delete -->
 | 
	
		
			
				|  |  |          <link rel="stylesheet" href="/bootstrap.css">
 | 
	
		
			
				|  |  |          <link rel="stylesheet" href="/style.css">
 | 
	
		
			
				|  |  |          <script src="/jquery.js"></script>
 | 
	
		
			
				|  |  |          <script src="/bootstrap.js"></script>
 | 
	
		
			
				|  |  |          <script src="/popper.js"></script>
 | 
	
		
			
				|  |  | -        <script src="/code.js"></script>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          <!-- TODO delete -->
 | 
	
		
			
				|  |  | -        <link rel="stylesheet" href="/test/bootstrap.min.css">
 | 
	
		
			
				|  |  |          <script src="/test/jquery.min.js"></script>
 | 
	
		
			
				|  |  |          <script src="/test/bootstrap.min.js"></script>
 | 
	
		
			
				|  |  |          <script src="/test/popper.min.js"></script>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        <script src="/code.js"></script>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          <title>esp32-wifi-manager</title>
 | 
	
		
			
				|  |  |      </head>
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -31,6 +33,9 @@
 | 
	
		
			
				|  |  |              <li class="nav-item">
 | 
	
		
			
				|  |  |                  <a class="nav-link" data-toggle="tab" href="#tab-audio">Audio + LMS</a>
 | 
	
		
			
				|  |  |              </li>
 | 
	
		
			
				|  |  | +            <li class="nav-item">
 | 
	
		
			
				|  |  | +                <a class="nav-link" data-toggle="tab" href="#tab-gpio">GPIO</a>
 | 
	
		
			
				|  |  | +            </li>
 | 
	
		
			
				|  |  |              <li class="nav-item">
 | 
	
		
			
				|  |  |                  <a class="nav-link" data-toggle="tab" href="#tab-system">System</a>
 | 
	
		
			
				|  |  |              </li>
 | 
	
	
		
			
				|  | @@ -67,8 +72,8 @@
 | 
	
		
			
				|  |  |                          <input id="manual_pwd" type="password" placeholder="Password" value="">
 | 
	
		
			
				|  |  |                      </section>
 | 
	
		
			
				|  |  |                      <div class="buttons">
 | 
	
		
			
				|  |  | -                        <input id="manual_join" type="button" value="Join" data-connect="manual" />
 | 
	
		
			
				|  |  | -                        <input id="manual_cancel" type="button" value="Cancel"/>
 | 
	
		
			
				|  |  | +                        <input id="manual_join" type="button" class="btn btn-success" value="Join" data-connect="manual" />
 | 
	
		
			
				|  |  | +                        <input id="manual_cancel" type="button" class="btn btn-danger" value="Cancel"/>
 | 
	
		
			
				|  |  |                      </div>
 | 
	
		
			
				|  |  |                  </div>
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -81,8 +86,8 @@
 | 
	
		
			
				|  |  |                          <input id="pwd" type="password" placeholder="Password" value="">
 | 
	
		
			
				|  |  |                      </section>
 | 
	
		
			
				|  |  |                      <div class="buttons">
 | 
	
		
			
				|  |  | -                        <input id="join" type="button" value="Join" />
 | 
	
		
			
				|  |  | -                        <input id="cancel" type="button" value="Cancel"/>
 | 
	
		
			
				|  |  | +                        <input id="join" type="button" class="btn btn-success" value="Join" />
 | 
	
		
			
				|  |  | +                        <input id="cancel" type="button" class="btn btn-danger" value="Cancel"/>
 | 
	
		
			
				|  |  |                      </div>
 | 
	
		
			
				|  |  |                  </div>
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -105,7 +110,7 @@
 | 
	
		
			
				|  |  |                          </div>
 | 
	
		
			
				|  |  |                      </section>
 | 
	
		
			
				|  |  |                      <div class="buttons">
 | 
	
		
			
				|  |  | -                        <input id="ok-connect" type="button" value="OK" class="ctr" />
 | 
	
		
			
				|  |  | +                        <input id="ok-connect" type="button" value="OK" class="btn btn-success" />
 | 
	
		
			
				|  |  |                      </div>
 | 
	
		
			
				|  |  |                  </div>
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -117,7 +122,7 @@
 | 
	
		
			
				|  |  |                          <h2></h2>
 | 
	
		
			
				|  |  |                          <section>
 | 
	
		
			
				|  |  |                              <div class="buttons">
 | 
	
		
			
				|  |  | -                                <input id="disconnect" type="button" value="Disconnect" class="ctr"/>
 | 
	
		
			
				|  |  | +                                <input id="disconnect" type="button" value="Disconnect" class="btn btn-danger"/>
 | 
	
		
			
				|  |  |                              </div>
 | 
	
		
			
				|  |  |                          </section>
 | 
	
		
			
				|  |  |                          <h2>IP Address</h2>
 | 
	
	
		
			
				|  | @@ -127,15 +132,15 @@
 | 
	
		
			
				|  |  |                              <div class="ape">Default Gateway:<div id="gw" class="fr"></div></div>
 | 
	
		
			
				|  |  |                          </section>
 | 
	
		
			
				|  |  |                          <div class="buttons">
 | 
	
		
			
				|  |  | -                            <input id="ok-details" type="button" value="OK" class="ctr" />
 | 
	
		
			
				|  |  | +                            <input id="ok-details" type="button" value="OK" class="btn btn-success" />
 | 
	
		
			
				|  |  |                          </div>
 | 
	
		
			
				|  |  |                      </div>					
 | 
	
		
			
				|  |  |                      <div id="diag-disconnect" class="diag-box">
 | 
	
		
			
				|  |  |                          <div class="diag-box-win">
 | 
	
		
			
				|  |  |                              <p>Are you sure you would like to disconnect from this wifi?</p>
 | 
	
		
			
				|  |  |                              <div class="buttons">
 | 
	
		
			
				|  |  | -                                <input id="no-disconnect" type="button" value="No" />
 | 
	
		
			
				|  |  | -                                <input id="yes-disconnect" type="button" value="Yes" />
 | 
	
		
			
				|  |  | +                                <input id="no-disconnect" type="button" value="No" class="btn btn-success" />
 | 
	
		
			
				|  |  | +                                <input id="yes-disconnect" type="button" value="Yes" class="btn btn-danger" />
 | 
	
		
			
				|  |  |                              </div>
 | 
	
		
			
				|  |  |                          </div>
 | 
	
		
			
				|  |  |                      </div>
 | 
	
	
		
			
				|  | @@ -143,58 +148,70 @@
 | 
	
		
			
				|  |  |              </div>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              <div class="tab-pane fade" id="tab-startup">
 | 
	
		
			
				|  |  | -                <h2>Run squeezelite automatically at boot</h2>
 | 
	
		
			
				|  |  | -                <div id="autoexec" class="toggle">
 | 
	
		
			
				|  |  | -                    <label>
 | 
	
		
			
				|  |  | -                        <input id="autoexec-cb" type="checkbox" checked="checked" onclick='handleClick(this);'/><span class="slider"></span>
 | 
	
		
			
				|  |  | -                    </label>
 | 
	
		
			
				|  |  | +                <h1>Run squeezelite automatically at boot</h1>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                <div class="custom-control custom-switch">
 | 
	
		
			
				|  |  | +                      <input type="checkbox" class="custom-control-input" id="autoexec-cb" checked="checked">
 | 
	
		
			
				|  |  | +                      <label class="custom-control-label" for="autoexec-cb"></label>
 | 
	
		
			
				|  |  |                  </div>
 | 
	
		
			
				|  |  |              </div>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              <div class="tab-pane fade" id="tab-audio">
 | 
	
		
			
				|  |  | -                <div id="autoexec-command">
 | 
	
		
			
				|  |  | -                    <div id="audioout" class="toggle-buttons">
 | 
	
		
			
				|  |  | -                        <h2>Audio output</h2>
 | 
	
		
			
				|  |  | -                        <input type="radio" id="i2s" name="audio" checked='checked' />
 | 
	
		
			
				|  |  | -                        <label for="i2s">I2S</label>
 | 
	
		
			
				|  |  | -                        <input type="radio" id="spdif" name="audio" />
 | 
	
		
			
				|  |  | -                        <label for="spdif">SPDIF</label>
 | 
	
		
			
				|  |  | -                        <input type="radio" id="bt" name="audio" />
 | 
	
		
			
				|  |  | -                        <label for="bt">Bluetooth</label>
 | 
	
		
			
				|  |  | -                    </div>
 | 
	
		
			
				|  |  | -                    <div id="btsinkdiv">
 | 
	
		
			
				|  |  | -                        <input id="btsink" type="text" value="BT sink name" />
 | 
	
		
			
				|  |  | -                    </div>
 | 
	
		
			
				|  |  | -                    <div>
 | 
	
		
			
				|  |  | -                        <h2>Player name</h2>
 | 
	
		
			
				|  |  | -                        <input id="player" type="text" value="squeezelite" />
 | 
	
		
			
				|  |  | -                    </div>
 | 
	
		
			
				|  |  | -                    <div>
 | 
	
		
			
				|  |  | -                        <h2>Optional setting (e.g. for LMS IP address)</h2>
 | 
	
		
			
				|  |  | -                        <input id="optional" type="text" value="" placeholder="-s 192.168.0.1" />
 | 
	
		
			
				|  |  | +                <div id="audioout">
 | 
	
		
			
				|  |  | +                    <h1>Audio output</h1>
 | 
	
		
			
				|  |  | +                    <div class="form-group">
 | 
	
		
			
				|  |  | +                        <div class="custom-control custom-radio">
 | 
	
		
			
				|  |  | +                            <input type="radio" id="i2s" name="audio" class="custom-control-input" checked='checked' />
 | 
	
		
			
				|  |  | +                            <label for="i2s" class="custom-control-label">I2S</label>
 | 
	
		
			
				|  |  | +                        </div>
 | 
	
		
			
				|  |  | +                        <div class="custom-control custom-radio">
 | 
	
		
			
				|  |  | +                            <input type="radio" id="spdif" name="audio" class="custom-control-input" />
 | 
	
		
			
				|  |  | +                            <label for="spdif" class="custom-control-label">SPDIF</label>
 | 
	
		
			
				|  |  | +                        </div>
 | 
	
		
			
				|  |  | +                        <div class="custom-control custom-radio">
 | 
	
		
			
				|  |  | +                            <input type="radio" id="bt" name="audio" class="custom-control-input" />
 | 
	
		
			
				|  |  | +                            <label for="bt" class="custom-control-label">Bluetooth</label>
 | 
	
		
			
				|  |  | +                        </div>
 | 
	
		
			
				|  |  |                      </div>
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  | +                <div id="btsinkdiv">
 | 
	
		
			
				|  |  | +                    <input id="btsink" type="text" value="BT sink name" />
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  | +                <div>
 | 
	
		
			
				|  |  | +                    <h1>Player name</h1>
 | 
	
		
			
				|  |  | +                    <input id="player" type="text" value="squeezelite" />
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  | +                <div>
 | 
	
		
			
				|  |  | +                    <h1>Optional setting (e.g. for LMS IP address)</h1>
 | 
	
		
			
				|  |  | +                    <input id="optional" type="text" value="" placeholder="-s 192.168.0.1" />
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                    <div class="buttons">
 | 
	
		
			
				|  |  | -                        <input id="generate-command" type="button" value="Generate" />
 | 
	
		
			
				|  |  | -                    </div>
 | 
	
		
			
				|  |  | +                <div class="buttons">
 | 
	
		
			
				|  |  | +                    <input id="generate-command" type="button" class="btn btn-success" value="Generate" />
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                    <h2>Squeezelite command to run</h2>
 | 
	
		
			
				|  |  | -                    <section id="command-list">
 | 
	
		
			
				|  |  | -                        <textarea id="autoexec1" maxlength="120">squeezelite -o I2S -b 500:2000 -d all=info -M esp32</textarea>
 | 
	
		
			
				|  |  | -                    </section>
 | 
	
		
			
				|  |  | +                <h1>Squeezelite command to run</h1>
 | 
	
		
			
				|  |  | +                <section id="command-list">
 | 
	
		
			
				|  |  | +                    <textarea id="autoexec1" maxlength="120">squeezelite -o I2S -b 500:2000 -d all=info -M esp32</textarea>
 | 
	
		
			
				|  |  | +                </section>
 | 
	
		
			
				|  |  | +                <div class="buttons">
 | 
	
		
			
				|  |  | +                    <input id="save-autoexec1" type="button" class="btn btn-success" value="Save" />
 | 
	
		
			
				|  |  |                  </div>
 | 
	
		
			
				|  |  |              </div>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +            <div class="tab-pane fade" id="tab-gpio">
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |              <div class="tab-pane fade" id="tab-system">
 | 
	
		
			
				|  |  |                  <div id="recoverydiv">
 | 
	
		
			
				|  |  | -                    <h2>Check for firmware upgrade</h2>
 | 
	
		
			
				|  |  | +                    <h1>Check for firmware upgrade</h1>
 | 
	
		
			
				|  |  |                      <div class="buttons">
 | 
	
		
			
				|  |  | -                        <input type="button" id="fwcheck" value="Check" onclick='handleClick(this);' />
 | 
	
		
			
				|  |  | +                        <input type="button" id="fwcheck" class="btn btn-primary" value="Check" />
 | 
	
		
			
				|  |  |                          <p><span id="currentfw">Currently running: 0.1</span> - <span id="latestfw">latest available version: 0.2</span></p>
 | 
	
		
			
				|  |  |                      </div>
 | 
	
		
			
				|  |  | -                    <h2>Reboot to recovery system to perform firmware upgrade</h2>
 | 
	
		
			
				|  |  | +                    <h1>Reboot to recovery system to perform firmware upgrade</h1>
 | 
	
		
			
				|  |  |                      <div class="buttons">
 | 
	
		
			
				|  |  | -                        <input type="button" id="recovery" value="Recovery" onclick='handleClick(this);' />
 | 
	
		
			
				|  |  | +                        <input type="button" id="recovery" class="btn btn-primary" value="Recovery" />
 | 
	
		
			
				|  |  |                      </div>
 | 
	
		
			
				|  |  |                  </div>
 | 
	
		
			
				|  |  |                  <div id="otadiv">
 | 
	
	
		
			
				|  | @@ -205,9 +222,9 @@
 | 
	
		
			
				|  |  |                          <span id="file_info"></span>
 | 
	
		
			
				|  |  |                          <input type="submit" id="update" disabled="" value="Upload">
 | 
	
		
			
				|  |  |                      </form>
 | 
	
		
			
				|  |  | -                    <h2>Reboot system with new firmware</h2>
 | 
	
		
			
				|  |  | +                    <h1>Reboot system with new firmware</h1>
 | 
	
		
			
				|  |  |                      <div class="buttons">
 | 
	
		
			
				|  |  | -                        <input type="button" id="reboot" value="Reboot" onclick='handleClick(this);' />
 | 
	
		
			
				|  |  | +                        <input type="button" id="reboot" class="btn btn-primary" value="Reboot" />
 | 
	
		
			
				|  |  |                      </div>
 | 
	
		
			
				|  |  |                  </div>
 | 
	
		
			
				|  |  |              </div>
 |