base stack

This commit is contained in:
2018-11-17 15:26:07 +01:00
commit 52113e4fb8
91 changed files with 22150 additions and 0 deletions

BIN
data/www/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

1351
data/www/gradients.json Normal file

File diff suppressed because it is too large Load Diff

86
data/www/index.html Normal file
View File

@@ -0,0 +1,86 @@
<!DOCTYPE html>
<html>
<head>
<title>ESP Kit</title>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="/favicon-32x32.png">
<link rel="stylesheet" type="text/css" href="styles.css">
<script src="script.js"></script>
</head>
<body class="sui">
<div class="content">
<form class="param-control container collapsible open" action="#" method="POST">
<span class="heading">Pixels</span>
<div class="content">
<ul>
<li class="form-row ParamSelect"
data-label="Hue"
data-name="hue"
data-topic="pixels/hue"
data-default="0"
data-external="/gradients.json"
></li>
<li class="form-row ParamColor"
data-name="color"
data-topic="pixels/color"
data-label="Color">
</li>
<li class="form-row ParamColor"
data-name="color"
data-topic="pixels/color2"
data-label="Color 2">
</li>
<!-- data-entries='[{"text": "Color", "value": "0"}, {"text": "Rainbow", "value": "1"}, {"text": "TheaterChase", "value": "2"}, {"text": "Wipe", "value": "3"}, {"text": "Scanner", "value": "4"}, {"text": "Fade", "value": "5"}]' -->
<li class="form-row ParamSelect"
data-label="Pattern"
data-name="pattern"
data-topic="pixels/pattern"
data-default="0"
data-entries='[{"text": "None", "value": "0"}, {"text": "Rainbow", "value": "1"}, {"text": "TheaterChase", "value": "2"}, {"text": "Color Wipe", "value": "3"}, {"text": "Scanner", "value": "4"}, {"text": "Fade", "value": "5"}, {"text": "Fire", "value": "6"}]'
></li>
<li class="form-row ParamSlider"
data-name="brightness"
data-min="0"
data-max="255"
data-value="64"
data-topic="pixels/brightness"
data-label="Brightness">
</li>
<li class="form-row ParamSlider"
data-name="totalSteps"
data-min="1"
data-max="255"
data-value="16"
data-topic="pixels/totalSteps"
data-label="Steps">
</li>
</ul>
</div>
</form>
<div class="settings container collapsible">
<span class="heading">Settings</span>
<div class="content">
<h2>Network</h2>
<div class="Form" data-fileName="/config.json" data-name="configForm" data-from="/config.json" data-endpoint="/config"></div>
<h2>NeoPixel</h2>
<div class="Form" data-fileName="/pixelConfig.json" data-name="configForm" data-from="/pixelConfig.json" data-endpoint="/config"></div>
</div>
</div>
<div class="settings container collapsible">
<span class="heading">System</span>
<div class="content">
<div><label>Free Heap: </label><span class="js-heap"></span><span>&nbsp;bytes</span><br><br></div>
<form method='POST' action='/update' enctype='multipart/form-data'>
<input type='file' name='update'><input type='submit' value='Update'>
</form>
<br>
<button class="js-restart">Restart</button>
</div>
</div>
</div>
</body>
</html>

12245
data/www/script.js Normal file

File diff suppressed because it is too large Load Diff

308
data/www/styles.css Normal file
View File

@@ -0,0 +1,308 @@
.hidden {
display: none;
}
.shown {
display: block;
}
.disabled {
opacity: 0.65;
}
.sui {
background: #000000;
color: #0eb8c0;
font-family: Tahoma, Geneva, sans-serif;
font-size: 16px;
}
.sui * {
margin: 0;
padding: 0;
-webkit-tap-highlight-color: transparent;
}
.sui > .content {
padding: 16px;
}
@media screen and (min-width: 968px) {
.sui > .content {
margin-right: auto;
margin-left: auto;
width: 50%;
}
}
.sui label {
color: #b3b2b2;
}
.sui button, .sui input[type=file] {
background: #097479;
color: #eeeeee;
font-size: 0.9em;
border: 0;
padding: .8em;
margin: 0 .4em;
}
.heading {
font-size: 1.2em;
display: block;
margin-bottom: 16px;
}
.sui h2 {
font-size: 16px;
font-weight: 400;
}
.container {
background: #333333;
padding: 16px;
border-radius: 2px;
border: solid 1px #555555;
margin-bottom: 8px;
}
.container.collapsible > .heading {
margin-bottom: 0;
}
.container.collapsible > .heading:hover {
cursor: pointer;
}
.container.collapsible > .content {
display: none;
}
.container.collapsible.open > .heading {
margin-bottom: 16px;
}
.container.collapsible.open > .content {
display: block;
}
input[type=range] {
-webkit-appearance: none;
width: 100%;
margin: 8.4px 0;
padding: 0 !important;
background-color: transparent;
}
input[type=range]:focus {
outline: none;
}
input[type=range]::-webkit-slider-runnable-track {
width: 100%;
height: 3.2px;
cursor: pointer;
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
background: #097479;
border-radius: 1.3px;
border: 0.2px solid #010101;
}
input[type=range]::-webkit-slider-thumb {
box-shadow: 0.6px 0.6px 2.8px #000000, 0px 0px 0.6px #0d0d0d;
border: 0.4px solid #000000;
height: 20px;
width: 20px;
border-radius: 50px;
background: #0eb8c0;
cursor: pointer;
-webkit-appearance: none;
margin-top: -8.6px;
}
input[type=range]:focus::-webkit-slider-runnable-track {
background: #0eb4bb;
}
input[type=range]::-moz-range-track {
width: 100%;
height: 3.2px;
cursor: pointer;
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
background: #097479;
border-radius: 1.3px;
border: 0.2px solid #010101;
}
input[type=range]::-moz-range-thumb {
box-shadow: 0.6px 0.6px 2.8px #000000, 0px 0px 0.6px #0d0d0d;
border: 0.4px solid #000000;
height: 20px;
width: 20px;
border-radius: 50px;
background: #0eb8c0;
cursor: pointer;
}
input[type=range]::-ms-track {
width: 100%;
height: 3.2px;
cursor: pointer;
background: transparent;
border-color: transparent;
color: transparent;
}
input[type=range]::-ms-fill-lower {
background: #043437;
border: 0.2px solid #010101;
border-radius: 2.6px;
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
}
input[type=range]::-ms-fill-upper {
background: #097479;
border: 0.2px solid #010101;
border-radius: 2.6px;
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
}
input[type=range]::-ms-thumb {
box-shadow: 0.6px 0.6px 2.8px #000000, 0px 0px 0.6px #0d0d0d;
border: 0.4px solid #000000;
height: 20px;
width: 20px;
border-radius: 50px;
background: #0eb8c0;
cursor: pointer;
height: 3.2px;
}
input[type=range]:focus::-ms-fill-lower {
background: #097479;
}
input[type=range]:focus::-ms-fill-upper {
background: #0eb4bb;
}
.form-row input[type="range"] {
margin-top: 12px;
}
/* The switch - the box around the slider */
.switch {
position: relative;
display: inline;
/* The slider */
/* Rounded sliders */
}
.switch input {
display: none;
}
.switch .slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #7b7b7b;
-webkit-transition: .4s;
transition: .4s;
margin-left: -50px;
margin-top: 4px;
}
.switch .slider:before {
position: absolute;
content: "";
height: 26px;
width: 26px;
left: 4px;
bottom: 4px;
background-color: white;
-webkit-transition: .4s;
transition: .4s;
}
.switch input:checked + .slider {
background-color: #097479;
}
.switch input:focus + .slider {
box-shadow: 0 0 1px #0eb8c0;
}
.switch input:checked + .slider:before {
-webkit-transform: translateX(26px);
-ms-transform: translateX(26px);
transform: translateX(26px);
}
.switch .slider.round {
border-radius: 34px;
height: 34px;
width: 60px;
}
.switch .slider.round:before {
border-radius: 50%;
}
form .form-row {
display: flex;
justify-content: flex-end;
flex-wrap: wrap;
padding: .2em;
}
form .form-row > label {
padding: .5em 1em .5em 0;
flex: 1;
}
form .form-row > label + label {
flex: 0;
}
form .form-row > label.switch + label {
flex: 1;
}
form .form-row > input {
flex: 2;
}
form .form-row > span {
flex: 2;
text-align: right;
}
form .form-row input[type="checkbox"] {
margin-top: 12px;
}
@media screen and (min-width: 768px) {
form .form-row > input,
form .form-row > span {
flex: 3;
}
}
@media screen and (max-width: 460px) {
form .form-row.wrapped {
display: block;
}
form .form-row.wrapped * {
display: block;
}
}
@media screen and (min-width: 992px) {
form .form-row > input,
form .form-row > span {
flex: 4;
}
}
@media screen and (min-width: 1200px) {
form .form-row > input,
form .form-row > span {
flex: 5;
}
}
.sui input[type="text"],
.sui input[type="password"] {
height: 32px;
background: transparent;
border: none;
color: #eeeeee;
border-bottom: solid 1px #097479;
}
.sui input[type="text"]:focus,
.sui input[type="password"]:focus,
.sui input[type="text"]:hover,
.sui input[type="password"]:hover {
outline: none;
border-bottom: 1px solid #0eb8c0;
}
.sui input[type="checkbox"] {
transform: scale(2);
}
.ColorPicker {
background-color: transparent;
border: 0;
height: 42px;
width: 42px;
}
.sui select {
flex: 5;
padding: .5em;
color: #eeeeee;
background: none;
border: none;
border-bottom: solid 1px #097479;
}
.sui select:focus,
.sui select:hover {
outline: none;
border: none;
border-bottom: solid 1px #0eb8c0 !important;
}
.sui select option {
background: #333333;
}

106
data/www/test-controls.html Normal file
View File

@@ -0,0 +1,106 @@
<!DOCTYPE html>
<html>
<head>
<title>ESP Kit</title>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-32x32.png">
<link rel="stylesheet" type="text/css" href="styles.css">
<script src="script.js"></script>
</head>
<body class="sui">
<div class="content">
<!-- <form class="param-control container open collapsible">
<span class="heading">Debug</span>
<div class="content">
<ul>
<li class="form-row ParamWs"
data-name="scrollText"
data-label="Audio"
data-placeholder="some scroll text"
data-endpoint="audiosprocket.lan/audio">
</li>
</ul>
<br>
</div>
</form> -->
<form class="param-control container collapsible open" action="#" method="POST">
<span class="heading">Strip</span>
<div class="content">
<ul>
<li class="form-row ParamColor"
data-mode="2"
data-name="color"
data-label="Color">
</li>
<li class="form-row ParamColor"
data-mode="2"
data-name="color2"
data-label="Color 2">
</li>
<li class="form-row ParamSelect"
data-label="Pattern"
data-name="pattern"
></li>
<li class="form-row LedStripPatternSwitch"
data-group="stripPattern"
data-id="1"
data-mode="3"
data-name="Rainbow"
data-label="Rainbow">
</li>
<li class="form-row LedStripPatternSwitch"
data-group="stripPattern"
data-name="TheaterChase"
data-label="Theater Chase"
data-id="2"
data-mode="3">
</li>
<li class="form-row LedStripPatternSwitch"
data-group="stripPattern"
data-name="Scanner"
data-label="Scanner"
data-id="4"
data-mode="3">
</li>
</ul>
</div>
</form>
<div class="settings container collapsible open">
<span class="heading">WiFi Settings</span>
<div class="content">
<!-- <div class="Form" data-name="configForm" data-endpoint="/config.json"></div> -->
<form action="/wifiConfig" method="POST">
<!-- <li class="form-row">
<label for="ap">AP Mode</label>
<label class="switch ap-mode">
<input type="checkbox" name="apMode">
<span class="slider round" data-bind="apMode" data-state="false"></span>
</label>
</li -->
<li class="form-row">
<label for="ssid">SSID</label>
<input type="text" name="ssid" placeholder="Default AP: Th1ngs4P">
</li>
<li class="form-row">
<label for="password">PW</label>
<input type="password" name="password" placeholder="Default: th3r31sn0sp00n">
</li>
<li class="form-row">
<label for="hostName">Hostname</label>
<input type="text" name="hostName" placeholder="Default: 192.168.1.143">
</li>
<li class="form-row">
<button type="submit">Save</button>
</li>
</ul>
</form>
</div>
</div>
</div>
</body>
</html>