Files
esp8266-laser/frontend/scripts/zMain.js
2017-11-25 00:42:04 +01:00

93 lines
3.0 KiB
JavaScript

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;
};
// init collapsible containers
Sui.select('.collapsible').forEach((container) => {
container.querySelector('.heading').addEventListener('click', (item) => {
container.classList.toggle('open');
});
});
// init actuators
[{
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',
onResponse: debugResponse,
data: function() {
let payload = {},
motorValue = this.value,
motorNr = this.getAttribute('data-motor-nr'),
actuatorId = 'motor' + motorNr;
// update actuator value label
Sui.select('[data-actuator-id=\"'+ actuatorId + '\"]')
.forEach( element => element.innerHTML = motorValue);
// add actuator to payload
payload[actuatorId] = motorValue;
return Sui.util.serialize(payload);
}
}, {
api: '/spirograph',
method: 'POST',
selector: '.slider.laser',
event: 'change',
onResponse: debugResponse,
data: function() {
// update actuator value label
Sui.select('[data-actuator-id="laser"]')
.forEach( element => element.innerHTML = this.value );
// return payload
return Sui.util.serialize({
laser: this.value
});
}
}].forEach(Sui.link({
api: {
MOTOR: '/spirograph', // {motorNr}/{value}
LASER: '/spirograph', // {value}
PRESET: '/presetMode'
}
}));
});