This commit is contained in:
2017-11-25 00:42:04 +01:00
parent 99b662ab6a
commit d7e9e22828
10 changed files with 362 additions and 225 deletions

View File

@@ -96,22 +96,18 @@ var $ = function(selector){
},
link: (node) => {
return (actuator) => {
let update = function(endpoint, method, props) {
let update = actuator.handler || function(actuator) {
Sui.http.ajax({
method: method,
endpoint: node.api[endpoint],
data: props,
method: actuator.method,
endpoint: actuator.api,
data: actuator.data ?
actuator.data.call(this) : [this.value],
cache: false
}, actuator.onResponse || null);
};
Sui.select(actuator.selector).forEach( (domEl) =>{
let handle = function(event) {
update.call(this,
actuator.api,
actuator.method,
actuator.data ?
actuator.data.call(this) : [this.value]
);
update.call(this, actuator);
}
domEl.addEventListener(actuator.event, handle)
});
@@ -161,7 +157,20 @@ var $ = function(selector){
request.send(postData);
}
}
};Sui.ready(() => {
};
let click = element => element.click();
let check = element => element.setAttribute('checked','checked');
let uncheck = element => element.removeAttribute('checked');
let switchElementState = element => {
let state = element.getAttribute('data-state') == 'false';
element.setAttribute('data-state', state);
return state;
};
let bindData = (element, attribute, data) => {
element.setAttribute('data-' + attribute, data);
};
Sui.ready(() => {
let debugResponse = (data) => {
document.querySelector('#response').innerHTML = data;
};
@@ -175,7 +184,33 @@ var $ = function(selector){
// init actuators
[{
api: 'MOTOR',
api: '/wificonfig',
method: 'POST',
selector: '.switch.ap-mode .slider',
event: 'click',
onResponse: debugResponse,
handler: function() {
let nextState = switchElementState(this);
/*let bindingName = this.getAttribute('data-bind');
Sui.select('.switch.ap-mode [name="'+ bindingName+'"]')
.forEach(check);*/
console.log(nextState);
}
},{
api: '/presetMode',
method: 'POST',
selector: '.switch.preset-mode .slider',
event: 'click',
onResponse: debugResponse,
data: function() {
let state = switchElementState(this);
console.log(state);
return Sui.util.serialize({
mode: state ? 1 : 0
});
}
},{
api: '/spirograph',
method: 'POST',
selector: '.slider.motor',
event: 'change',
@@ -193,7 +228,7 @@ var $ = function(selector){
return Sui.util.serialize(payload);
}
}, {
api: 'LASER',
api: '/spirograph',
method: 'POST',
selector: '.slider.laser',
event: 'change',
@@ -210,7 +245,8 @@ var $ = function(selector){
}].forEach(Sui.link({
api: {
MOTOR: '/spirograph', // {motorNr}/{value}
LASER: '/spirograph' // {value}
LASER: '/spirograph', // {value}
PRESET: '/presetMode'
}
}));
});