mirror of
https://gitlab.com/wirelos/sprocket-ui.git
synced 2025-12-14 05:56:50 +01:00
some changes
This commit is contained in:
BIN
data/favicon-32x32.png
Normal file
BIN
data/favicon-32x32.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.1 KiB |
BIN
data/favicon.ico
Normal file
BIN
data/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
107
data/index.html
Normal file
107
data/index.html
Normal file
@@ -0,0 +1,107 @@
|
||||
<!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"
|
||||
data-endpoint="ws://192.168.1.246/pixel">
|
||||
</li>
|
||||
<li class="form-row ParamColor"
|
||||
data-mode="2"
|
||||
data-name="color2"
|
||||
data-label="Color 2"
|
||||
data-endpoint="/pixel">
|
||||
</li>
|
||||
<li class="form-row LedStripPatternSwitch"
|
||||
data-group="stripPattern"
|
||||
data-id="1"
|
||||
data-mode="3"
|
||||
data-name="Rainbow"
|
||||
data-label="Rainbow"
|
||||
data-endpoint="ws://192.168.1.246/pixel">
|
||||
</li>
|
||||
<li class="form-row LedStripPatternSwitch"
|
||||
data-group="stripPattern"
|
||||
data-name="TheaterChase"
|
||||
data-label="Theater Chase"
|
||||
data-id="2"
|
||||
data-mode="3"
|
||||
data-endpoint="ws://192.168.1.246/pixel">
|
||||
</li>
|
||||
<li class="form-row LedStripPatternSwitch"
|
||||
data-group="stripPattern"
|
||||
data-name="Scanner"
|
||||
data-label="Scanner"
|
||||
data-id="4"
|
||||
data-mode="3"
|
||||
data-endpoint="ws://192.168.1.246/pixel">
|
||||
</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>
|
||||
93
data/matrix.html
Normal file
93
data/matrix.html
Normal file
@@ -0,0 +1,93 @@
|
||||
<!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-name="color"
|
||||
data-label="Color"
|
||||
data-endpoint="/patterns">
|
||||
</li>
|
||||
<li class="form-row LedStripPatternSwitch"
|
||||
data-group="stripPattern"
|
||||
data-name="Rainbow"
|
||||
data-label="Rainbow"
|
||||
data-endpoint="/strip/pattern">
|
||||
</li>
|
||||
<li class="form-row LedStripPatternSwitch"
|
||||
data-group="stripPattern"
|
||||
data-name="Scanner"
|
||||
data-label="Scanner"
|
||||
data-endpoint="/strip/pattern">
|
||||
</li>
|
||||
<li class="form-row LedStripPatternSwitch"
|
||||
data-group="stripPattern"
|
||||
data-name="TheaterChase"
|
||||
data-label="Theater Chase"
|
||||
data-endpoint="/strip/pattern">
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</form>
|
||||
<div class="settings container collapsible open">
|
||||
<span class="heading">WiFi Settings</span>
|
||||
<div class="content">
|
||||
<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>
|
||||
12063
data/script.js
Normal file
12063
data/script.js
Normal file
File diff suppressed because it is too large
Load Diff
273
data/styles.css
Normal file
273
data/styles.css
Normal file
@@ -0,0 +1,273 @@
|
||||
.hidden {
|
||||
display: none;
|
||||
}
|
||||
.shown {
|
||||
display: block;
|
||||
}
|
||||
.disabled {
|
||||
opacity: 0.65;
|
||||
}
|
||||
.sui {
|
||||
background: #000000;
|
||||
color: #0eb8c0;
|
||||
font-family: "Open Sans";
|
||||
font-size: 16px;
|
||||
}
|
||||
.sui * {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
}
|
||||
.sui > .content {
|
||||
padding: 16px;
|
||||
}
|
||||
.sui label {
|
||||
color: #b3b2b2;
|
||||
}
|
||||
.sui button {
|
||||
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;
|
||||
}
|
||||
.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;
|
||||
}
|
||||
/* 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 (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 {
|
||||
padding: .5em;
|
||||
}
|
||||
.sui input[type="text"],
|
||||
.sui input[type="password"] {
|
||||
height: 16px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
color: #eeeeee;
|
||||
}
|
||||
.sui input[type="text"]:focus,
|
||||
.sui input[type="password"]:focus,
|
||||
.sui input[type="text"]:hover,
|
||||
.sui input[type="password"]:hover {
|
||||
outline: none;
|
||||
border-bottom: solid 1px #097479;
|
||||
box-shadow: 3px #097479;
|
||||
}
|
||||
.sui input[type="checkbox"] {
|
||||
transform: scale(2);
|
||||
}
|
||||
.ColorPicker {
|
||||
flex: none !important;
|
||||
background-color: transparent;
|
||||
border: 0;
|
||||
height: 50px;
|
||||
width: 75px;
|
||||
}
|
||||
2580
package-lock.json
generated
2580
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
10
package.json
10
package.json
@@ -4,18 +4,18 @@
|
||||
"description": "template project for websprockets",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"clear": "rimraf target",
|
||||
"setup": "yarn clear && mkdirp target",
|
||||
"clear": "rimraf data",
|
||||
"setup": "yarn clear && mkdirp data",
|
||||
"test": "echo \"no test specified\" && exit 0",
|
||||
"dev": "yarn setup && yarn build:frontend && npm-run-all --parallel watch:*",
|
||||
"build:js": "webpack",
|
||||
"build:css": "lessc src/styles/main.less target/styles.css",
|
||||
"build:html": "cp -r src/pages/* target/",
|
||||
"build:css": "lessc src/styles/main.less data/styles.css",
|
||||
"build:html": "cp -r src/pages/* data/",
|
||||
"build:frontend": "yarn setup && yarn build:css && yarn build:html && yarn build:js",
|
||||
"watch:html": "nodemon -q -w src/pages/ --ext \".\" --exec \"npm run build:html\"",
|
||||
"watch:css": "nodemon -q -w src/styles --ext \".\" --exec \"npm run build:css\"",
|
||||
"watch:js": "nodemon -q -w src/app --ext \".\" --exec \"npm run build:js\"",
|
||||
"watch:livereload": "cd target && live-server --port=3000",
|
||||
"watch:livereload": "cd data && live-server --port=3000",
|
||||
"docker:build": "docker build -t wirelos/sprocket-ui .",
|
||||
"docker:run": "docker run -p 8080:8080 -d registry.gitlab.com/wirelos/sprocket-ui",
|
||||
"docker:release": "docker tag wirelos/sprocket-ui registry.gitlab.com/wirelos/sprocket-ui && docker push registry.gitlab.com/wirelos/sprocket-ui"
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
import $ from 'jquery';
|
||||
import Switch from './base/Switch/Switch';
|
||||
import Store from '../core/store/RestStore';
|
||||
import RestStore from '../core/store/RestStore';
|
||||
|
||||
export default class LedStripPatternSwitch extends Switch {
|
||||
|
||||
constructor(ctx, node) {
|
||||
super(ctx, node);
|
||||
this.store = new Store(this.config.endpoint);
|
||||
this.store = new RestStore(this.config.endpoint);
|
||||
|
||||
this.ws = new WebSocket(this.config.endpoint.indexOf('/') === 0 ? "ws://" + window.location.host + this.config.endpoint : this.config.endpoint );
|
||||
|
||||
this.modes = ["init", "Color", "Pattern", "octoPrint"];
|
||||
this.patterns = [ "none", "Rainbow", "Scanner", "ColorWipe", "TheaterChase"];
|
||||
}
|
||||
@@ -14,18 +17,23 @@ export default class LedStripPatternSwitch extends Switch {
|
||||
onClick(evt) {
|
||||
// FIXME separate mode from pattern
|
||||
let payload = {
|
||||
id: this.patterns.indexOf(this.config.name),
|
||||
pattern: this.config.name.substring(0,1),
|
||||
group: this.config.group,
|
||||
mode: 'P',
|
||||
state: this.state
|
||||
//id: this.patterns.indexOf(this.config.name),
|
||||
//pattern: this.config.name.substring(0,1),
|
||||
//group: this.config.group,
|
||||
//mode: 'P',
|
||||
//state: this.state
|
||||
value: ''+this.config.id,
|
||||
mode: ''+this.config.mode,
|
||||
foo: this.value
|
||||
};
|
||||
this.ctx.mediator.trigger('/ledStripPreset/switched', payload);
|
||||
}
|
||||
|
||||
subscribe() {
|
||||
this.ctx.mediator.on('/ledStripPreset/switched', (payload) => {
|
||||
this.store.save(payload);
|
||||
//this.store.save(payload);
|
||||
console.log(payload);
|
||||
this.ws.send(JSON.stringify(payload));
|
||||
if (payload.state
|
||||
&& payload.id !== this.patterns.indexOf(this.config.name)
|
||||
&& payload.group === this.config.group) {
|
||||
|
||||
@@ -7,7 +7,7 @@ export default class ParamColor extends ColorPicker {
|
||||
constructor(ctx, node) {
|
||||
super(ctx, node);
|
||||
//this.store = new Store(this.config.endpoint);
|
||||
this.ws = new WebSocket(this.config.endpoint.indexOf('/') > -1 ? "ws://" + window.location.host + this.config.endpoint : this.config.endpoint );
|
||||
this.ws = new WebSocket(this.config.endpoint.indexOf('/') === 0 ? "ws://" + window.location.host + this.config.endpoint : this.config.endpoint );
|
||||
this.ws.onopen = (event) => {
|
||||
console.log('open ' + this.config.endpoint);
|
||||
};
|
||||
@@ -20,8 +20,12 @@ export default class ParamColor extends ColorPicker {
|
||||
/*this.store.save({
|
||||
rgb: parseInt(this.value.replace('#', '0x'))
|
||||
});*/
|
||||
let cmd = this.config.id + parseInt(this.value.replace('#', '0x'));
|
||||
this.ws.send(cmd);
|
||||
//let cmd = this.config.id + parseInt(this.value.replace('#', '0x'));
|
||||
console.log(parseInt(this.value.replace('#', '0x')));
|
||||
this.ws.send(JSON.stringify({
|
||||
mode: this.config.mode,
|
||||
value: parseInt(this.value.replace('#', '0x'))
|
||||
}));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -8,7 +8,7 @@ export default class ParamWs extends TextInput {
|
||||
super(ctx, node);
|
||||
//this.store = new Store(this.config.endpoint);
|
||||
|
||||
this.ws = new WebSocket(this.config.endpoint.indexOf('/') > -1 ? "ws://" + window.location.host + this.config.endpoint : this.config.endpoint );
|
||||
this.ws = new WebSocket(this.config.endpoint.indexOf('/') === 0 ? "ws://" + window.location.host + this.config.endpoint : this.config.endpoint );
|
||||
this.ws.onopen = (event) => {
|
||||
console.log('open ' + this.config.endpoint);
|
||||
};
|
||||
|
||||
3
src/app/components/base/Form/Form.html
Normal file
3
src/app/components/base/Form/Form.html
Normal file
@@ -0,0 +1,3 @@
|
||||
<form action="{{endpoint}}">
|
||||
<button class="js-submit">Submit</button>
|
||||
</form>
|
||||
43
src/app/components/base/Form/Form.js
Normal file
43
src/app/components/base/Form/Form.js
Normal file
@@ -0,0 +1,43 @@
|
||||
import $ from 'jquery';
|
||||
import Component from '../../../core/Component';
|
||||
import TextInput from '../TextInput/TextInput';
|
||||
import Store from '../../../core/store/RestStore';
|
||||
|
||||
export default class Form extends Component {
|
||||
|
||||
constructor(ctx, node) {
|
||||
super(ctx, node);
|
||||
this.store = new Store(this.config.endpoint);
|
||||
this.render(this.config);
|
||||
|
||||
this.fields = [];
|
||||
let tf1 = new TextInput(ctx);
|
||||
tf1.config = {
|
||||
name: 'ssid',
|
||||
label: 'SSID',
|
||||
placeholder: 'some AP'
|
||||
};
|
||||
tf1.value = 'MyAp';
|
||||
|
||||
this.fields.push(tf1);
|
||||
this.fields.forEach((f) => {
|
||||
f.render({
|
||||
name: 'ssid',
|
||||
label: 'SSID',
|
||||
placeholder: 'some AP'
|
||||
});
|
||||
this.node.prepend(f);
|
||||
});
|
||||
|
||||
this.node.delegate('click', '.js-submit', this.onSubmit.bind(this));
|
||||
}
|
||||
|
||||
onSubmit(evt) {
|
||||
let obj = {};
|
||||
|
||||
obj[this.config.name] = this.value;
|
||||
//this.store.save(obj);
|
||||
console.log(this.value);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
export { default as Form } from './base/Form/Form'
|
||||
export { default as Switch } from './base/Switch/Switch'
|
||||
export { default as Slider } from './base/Slider/Slider'
|
||||
export { default as TextInput } from './base/TextInput/TextInput'
|
||||
|
||||
@@ -7,9 +7,9 @@ export default class Component {
|
||||
|
||||
constructor(ctx, node, template) {
|
||||
this.ctx = ctx;
|
||||
this.node = node;
|
||||
this.node = node ? node : $();
|
||||
this.component = this.constructor.name;
|
||||
this.config = this.node.data();
|
||||
this.config = this.node.data() || {name: 'none'};
|
||||
this.data = {};
|
||||
this.markup = template;
|
||||
}
|
||||
@@ -33,6 +33,7 @@ export default class Component {
|
||||
render(data) {
|
||||
if (data) data.helpers = this.templateHelpers();
|
||||
let rendered = Mustache.render(this.markup, data);
|
||||
if(!this.node) this.node = $(rendered);
|
||||
this.node.html(rendered);
|
||||
this.bindData();
|
||||
}
|
||||
|
||||
@@ -31,34 +31,40 @@
|
||||
<div class="content">
|
||||
<ul>
|
||||
<li class="form-row ParamColor"
|
||||
data-id="C"
|
||||
data-mode="2"
|
||||
data-name="color"
|
||||
data-label="Color"
|
||||
data-endpoint="/patterns">
|
||||
data-endpoint="ws://192.168.1.246/pixel">
|
||||
</li>
|
||||
<li class="form-row ParamColor"
|
||||
data-id="D"
|
||||
data-mode="2"
|
||||
data-name="color2"
|
||||
data-label="Color 2"
|
||||
data-endpoint="/patterns">
|
||||
data-endpoint="/pixel">
|
||||
</li>
|
||||
<li class="form-row LedStripPatternSwitch"
|
||||
data-group="stripPattern"
|
||||
data-id="1"
|
||||
data-mode="3"
|
||||
data-name="Rainbow"
|
||||
data-label="Rainbow"
|
||||
data-endpoint="/strip/pattern">
|
||||
</li>
|
||||
<li class="form-row LedStripPatternSwitch"
|
||||
data-group="stripPattern"
|
||||
data-name="Scanner"
|
||||
data-label="Scanner"
|
||||
data-endpoint="/strip/pattern">
|
||||
data-endpoint="ws://192.168.1.246/pixel">
|
||||
</li>
|
||||
<li class="form-row LedStripPatternSwitch"
|
||||
data-group="stripPattern"
|
||||
data-name="TheaterChase"
|
||||
data-label="Theater Chase"
|
||||
data-endpoint="/strip/pattern">
|
||||
data-id="2"
|
||||
data-mode="3"
|
||||
data-endpoint="ws://192.168.1.246/pixel">
|
||||
</li>
|
||||
<li class="form-row LedStripPatternSwitch"
|
||||
data-group="stripPattern"
|
||||
data-name="Scanner"
|
||||
data-label="Scanner"
|
||||
data-id="4"
|
||||
data-mode="3"
|
||||
data-endpoint="ws://192.168.1.246/pixel">
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -66,6 +72,7 @@
|
||||
<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>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
module.exports = {
|
||||
entry: './src/app/main.js',
|
||||
output: {
|
||||
filename: './target/script.js'
|
||||
filename: './data/script.js'
|
||||
},
|
||||
module: {
|
||||
loaders: [{
|
||||
|
||||
Reference in New Issue
Block a user