mirror of
https://gitlab.com/wirelos/sprocket-ui.git
synced 2025-12-14 14:01:28 +01:00
styling update
This commit is contained in:
@@ -12,22 +12,8 @@
|
||||
|
||||
<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>
|
||||
<span class="heading">Pixels</span>
|
||||
<div class="content">
|
||||
<ul>
|
||||
<li class="form-row ParamColor"
|
||||
@@ -46,7 +32,7 @@
|
||||
data-name="pattern"
|
||||
data-topic="pixels/pattern"
|
||||
data-default="0"
|
||||
data-entries='[{"text": "Color", "value": "0"}, {"text": "Rainbow", "value": "1"}, {"text": "TheaterChase", "value": "2"}, {"text": "Fade", "value": "5"}]'
|
||||
data-entries='[{"text": "None", "value": "0"}, {"text": "Rainbow", "value": "1"}, {"text": "TheaterChase", "value": "2"}, {"text": "Fade", "value": "5"}]'
|
||||
></li>
|
||||
<!-- <li class="form-row ParamSlider"
|
||||
data-name="totalSteps"
|
||||
@@ -67,38 +53,22 @@
|
||||
</ul>
|
||||
</div>
|
||||
</form>
|
||||
<div class="settings container collapsible open">
|
||||
<span class="heading">WiFi Settings</span>
|
||||
<div class="settings container collapsible">
|
||||
<span class="heading">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>
|
||||
<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> bytes</span><br><br></div>
|
||||
<button class="js-restart">Restart</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
|
||||
@@ -10784,12 +10784,30 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
|
||||
|
||||
|
||||
|
||||
let endpoint = '/pixel';
|
||||
|
||||
__WEBPACK_IMPORTED_MODULE_0_jquery___default()(() => {
|
||||
new __WEBPACK_IMPORTED_MODULE_1__core_App__["a" /* default */](__WEBPACK_IMPORTED_MODULE_0_jquery___default()('body'))
|
||||
.components(__WEBPACK_IMPORTED_MODULE_2__components_exports__)
|
||||
.websocket(new WebSocket('ws://192.168.1.246/pixel'));
|
||||
});
|
||||
.websocket(new WebSocket(endpoint.indexOf('/') === 0 ? "ws://" + window.location.host + endpoint : endpoint));
|
||||
|
||||
// TODO make components
|
||||
__WEBPACK_IMPORTED_MODULE_0_jquery___default()('.collapsible').each((i, container) => {
|
||||
container.querySelector('.heading').addEventListener('click', (item) => {
|
||||
container.classList.toggle('open');
|
||||
});
|
||||
});
|
||||
|
||||
__WEBPACK_IMPORTED_MODULE_0_jquery___default()('.js-restart').click((evt) => {
|
||||
__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.post('/restart');
|
||||
alert('restarting...');
|
||||
});
|
||||
|
||||
__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.get('/heap', (data) => {
|
||||
__WEBPACK_IMPORTED_MODULE_0_jquery___default()('.js-heap').html(data);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
/* let click = element => element.click();
|
||||
let check = element => element.setAttribute('checked', 'checked');
|
||||
@@ -11035,38 +11053,71 @@ class Form extends __WEBPACK_IMPORTED_MODULE_1__core_Component__["a" /* default
|
||||
|
||||
constructor(ctx, node) {
|
||||
super(ctx, node);
|
||||
this.store = new __WEBPACK_IMPORTED_MODULE_3__core_store_RestStore__["a" /* default */](this.config.endpoint);
|
||||
this.render(this.config);
|
||||
|
||||
this.fields = [];
|
||||
let tf1 = new __WEBPACK_IMPORTED_MODULE_2__TextInput_TextInput__["a" /* default */](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);
|
||||
__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.get(this.config.from, (cfg) => {
|
||||
this.node.append(
|
||||
__WEBPACK_IMPORTED_MODULE_0_jquery___default()(this.formTpl({
|
||||
endpoint: this.config.endpoint,
|
||||
fields: this.configToFormRow(cfg)
|
||||
})).submit(evt => this.ajaxFormhandler(evt))
|
||||
);
|
||||
});
|
||||
|
||||
this.node.delegate('click', '.js-submit', this.onSubmit.bind(this));
|
||||
//this.node.delegate('click', '.js-submit', this.onSubmit.bind(this));
|
||||
}
|
||||
|
||||
onSubmit(evt) {
|
||||
formTpl(data) {
|
||||
return `
|
||||
<form action="${data.endpoint}">
|
||||
${data.fields.join('')}
|
||||
<div class="form-row">
|
||||
<button type="submit" class="js-submit">Submit</button>
|
||||
</div>
|
||||
</form>
|
||||
`;
|
||||
}
|
||||
|
||||
formRowTpl(data) {
|
||||
return `
|
||||
<div class="form-row wrapped">
|
||||
<label for="${data.name}">${data.label}</label>
|
||||
<input type="${data.fieldType}" name="${data.name}" id="${data.name}" value="${data.value}"><br>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
configToFormRow (cfg){
|
||||
let arr = [];
|
||||
for (let key in cfg) {
|
||||
arr.push(this.formRowTpl({
|
||||
label: key,
|
||||
name: key,
|
||||
value: cfg[key],
|
||||
fieldType: key.indexOf('assword') > -1 ? 'password' : 'text'
|
||||
}))
|
||||
}
|
||||
return arr;
|
||||
};
|
||||
|
||||
ajaxFormhandler(evt){
|
||||
evt.preventDefault();
|
||||
let data = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(evt.currentTarget)
|
||||
.serializeArray()
|
||||
.reduce((obj, item) => {
|
||||
obj[item.name] = item.value;
|
||||
return obj;
|
||||
}, {});
|
||||
__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.post(this.config.endpoint, { fileName: this.config.filename, config: JSON.stringify(data) });
|
||||
};
|
||||
|
||||
|
||||
/* onSubmit(evt) {
|
||||
let obj = {};
|
||||
|
||||
obj[this.config.name] = this.value;
|
||||
//this.store.save(obj);
|
||||
console.log(this.value);
|
||||
}
|
||||
} */
|
||||
|
||||
}
|
||||
/* harmony export (immutable) */ __webpack_exports__["a"] = Form;
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
.sui {
|
||||
background: #000000;
|
||||
color: #0eb8c0;
|
||||
font-family: "Open Sans";
|
||||
font-family: Tahoma, Geneva, sans-serif;
|
||||
font-size: 16px;
|
||||
}
|
||||
.sui * {
|
||||
@@ -37,6 +37,10 @@
|
||||
display: block;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
.sui h2 {
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
}
|
||||
.container {
|
||||
background: #333333;
|
||||
padding: 16px;
|
||||
@@ -231,6 +235,14 @@ form .form-row input[type="checkbox"] {
|
||||
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 {
|
||||
@@ -245,7 +257,7 @@ form .form-row input[type="checkbox"] {
|
||||
}
|
||||
.sui input[type="text"],
|
||||
.sui input[type="password"] {
|
||||
height: 16px;
|
||||
height: 32px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
color: #eeeeee;
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
<form action="{{endpoint}}">
|
||||
<button class="js-submit">Submit</button>
|
||||
</form>
|
||||
@@ -7,37 +7,70 @@ 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);
|
||||
$.get(this.config.from, (cfg) => {
|
||||
this.node.append(
|
||||
$(this.formTpl({
|
||||
endpoint: this.config.endpoint,
|
||||
fields: this.configToFormRow(cfg)
|
||||
})).submit(evt => this.ajaxFormhandler(evt))
|
||||
);
|
||||
});
|
||||
|
||||
this.node.delegate('click', '.js-submit', this.onSubmit.bind(this));
|
||||
//this.node.delegate('click', '.js-submit', this.onSubmit.bind(this));
|
||||
}
|
||||
|
||||
onSubmit(evt) {
|
||||
formTpl(data) {
|
||||
return `
|
||||
<form action="${data.endpoint}">
|
||||
${data.fields.join('')}
|
||||
<div class="form-row">
|
||||
<button type="submit" class="js-submit">Submit</button>
|
||||
</div>
|
||||
</form>
|
||||
`;
|
||||
}
|
||||
|
||||
formRowTpl(data) {
|
||||
return `
|
||||
<div class="form-row wrapped">
|
||||
<label for="${data.name}">${data.label}</label>
|
||||
<input type="${data.fieldType}" name="${data.name}" id="${data.name}" value="${data.value}"><br>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
configToFormRow (cfg){
|
||||
let arr = [];
|
||||
for (let key in cfg) {
|
||||
arr.push(this.formRowTpl({
|
||||
label: key,
|
||||
name: key,
|
||||
value: cfg[key],
|
||||
fieldType: key.indexOf('assword') > -1 ? 'password' : 'text'
|
||||
}))
|
||||
}
|
||||
return arr;
|
||||
};
|
||||
|
||||
ajaxFormhandler(evt){
|
||||
evt.preventDefault();
|
||||
let data = $(evt.currentTarget)
|
||||
.serializeArray()
|
||||
.reduce((obj, item) => {
|
||||
obj[item.name] = item.value;
|
||||
return obj;
|
||||
}, {});
|
||||
$.post(this.config.endpoint, { fileName: this.config.filename, config: JSON.stringify(data) });
|
||||
};
|
||||
|
||||
|
||||
/* onSubmit(evt) {
|
||||
let obj = {};
|
||||
|
||||
obj[this.config.name] = this.value;
|
||||
//this.store.save(obj);
|
||||
console.log(this.value);
|
||||
}
|
||||
} */
|
||||
|
||||
}
|
||||
@@ -4,12 +4,30 @@ import $ from 'jquery';
|
||||
import App from './core/App';
|
||||
import * as components from './components/exports';
|
||||
|
||||
let endpoint = '/pixel';
|
||||
|
||||
$(() => {
|
||||
new App($('body'))
|
||||
.components(components)
|
||||
.websocket(new WebSocket('ws://192.168.1.246/pixel'));
|
||||
});
|
||||
.websocket(new WebSocket(endpoint.indexOf('/') === 0 ? "ws://" + window.location.host + endpoint : endpoint));
|
||||
|
||||
// TODO make components
|
||||
$('.collapsible').each((i, container) => {
|
||||
container.querySelector('.heading').addEventListener('click', (item) => {
|
||||
container.classList.toggle('open');
|
||||
});
|
||||
});
|
||||
|
||||
$('.js-restart').click((evt) => {
|
||||
$.post('/restart');
|
||||
alert('restarting...');
|
||||
});
|
||||
|
||||
$.get('/heap', (data) => {
|
||||
$('.js-heap').html(data);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
/* let click = element => element.click();
|
||||
let check = element => element.setAttribute('checked', 'checked');
|
||||
|
||||
@@ -12,22 +12,8 @@
|
||||
|
||||
<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>
|
||||
<span class="heading">Pixels</span>
|
||||
<div class="content">
|
||||
<ul>
|
||||
<li class="form-row ParamColor"
|
||||
@@ -46,7 +32,7 @@
|
||||
data-name="pattern"
|
||||
data-topic="pixels/pattern"
|
||||
data-default="0"
|
||||
data-entries='[{"text": "Color", "value": "0"}, {"text": "Rainbow", "value": "1"}, {"text": "TheaterChase", "value": "2"}, {"text": "Fade", "value": "5"}]'
|
||||
data-entries='[{"text": "None", "value": "0"}, {"text": "Rainbow", "value": "1"}, {"text": "TheaterChase", "value": "2"}, {"text": "Fade", "value": "5"}]'
|
||||
></li>
|
||||
<!-- <li class="form-row ParamSlider"
|
||||
data-name="totalSteps"
|
||||
@@ -67,38 +53,22 @@
|
||||
</ul>
|
||||
</div>
|
||||
</form>
|
||||
<div class="settings container collapsible open">
|
||||
<span class="heading">WiFi Settings</span>
|
||||
<div class="settings container collapsible">
|
||||
<span class="heading">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>
|
||||
<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> bytes</span><br><br></div>
|
||||
<button class="js-restart">Restart</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
|
||||
@@ -31,8 +31,18 @@ form {
|
||||
|
||||
}
|
||||
@media screen and (min-width: 768px) {
|
||||
.form-row > input, .form-row > span {
|
||||
flex: 3;
|
||||
.form-row > input, .form-row > span {
|
||||
flex: 3;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 460px) {
|
||||
.form-row {
|
||||
&.wrapped {
|
||||
display: block;
|
||||
* {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@media screen and (min-width: 992px) {
|
||||
|
||||
@@ -2,4 +2,11 @@
|
||||
font-size: 1.2em;
|
||||
display: block;
|
||||
margin-bottom: @default-margin;
|
||||
}
|
||||
|
||||
.sui {
|
||||
h2 {
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
@default-font: "Open Sans";
|
||||
@default-font: Tahoma, Geneva, sans-serif;
|
||||
|
||||
@color-black: #000000;
|
||||
@color-white: #eeeeee;
|
||||
@@ -15,5 +15,5 @@
|
||||
@default-border-color: #555555;
|
||||
@default-font-size: 16px;
|
||||
|
||||
@input-text-height: 16px;
|
||||
@input-text-height: 32px;
|
||||
@input-checkbox-scale: 2;
|
||||
|
||||
Reference in New Issue
Block a user