68 lines
2.0 KiB
TypeScript
68 lines
2.0 KiB
TypeScript
/*
|
|
* SPDX-FileCopyrightText: 2023 Sascha Nitsch (@grumpydevelop@contentnation.net) https://contentnation.net/en/grumpydevelop
|
|
*
|
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
*/
|
|
|
|
/// <reference path="view.ts" />
|
|
/// <reference path="cameratrigger.ts" />
|
|
class PinMappingView extends View {
|
|
public form: any;
|
|
constructor(app: CameraTrigger) {
|
|
super(app);
|
|
if (!this.app.pinMapping) {
|
|
this.app.getPinMapping(this, this.render);
|
|
} else {
|
|
this.render();
|
|
}
|
|
}
|
|
|
|
finish() {
|
|
this.root.find("input[type=submit]").off("click", this.saveEdit);
|
|
}
|
|
|
|
render() {
|
|
var template = $("#tplPinMapping").html();
|
|
var data:any = {};
|
|
data.l = this.app.lang;
|
|
data.pinmapping = [];
|
|
var keys = Object.keys(this.app.pinMapping);
|
|
keys.forEach(function(key){
|
|
var pin = this.app.pinMapping[key];
|
|
data.pinmapping.push({pin: key, name: pin[0], type: pin[1], inverted: pin[2]});
|
|
});
|
|
var html = Mustache.render(template, data);
|
|
this.root.html(html);
|
|
this.root.find("input[type=submit]").on("click", this, this.saveEdit);
|
|
// set select boxes
|
|
for (var i = 0; i < 8; ++i) {
|
|
this.root.find("select[name=type_d" + i + "]").val(this.app.pinMapping["d" + i][1]);
|
|
}
|
|
}
|
|
|
|
saveEdit(event?: JQuery.TriggeredEvent) {
|
|
if (event && event.data) {
|
|
event.preventDefault();
|
|
event.data.saveEdit();
|
|
return;
|
|
}
|
|
var data = {};
|
|
var keys = Object.keys(this.app.pinMapping);
|
|
var root = this.root;
|
|
keys.forEach(function(key){
|
|
var pin = this.app.pinMapping[key];
|
|
data[key] = [root.find("input[name=name_" + key + "]").val(), root.find("#type_" + key).val(), root.find("input[name=inverted_" + key + "]").prop("checked")===true];
|
|
});
|
|
Api.post("pinmapping", JSON.stringify(data), this, this.success, this.app.error);
|
|
}
|
|
|
|
success(data: PinMappings) {
|
|
this.app.setPinMapping(data);
|
|
$.toast({
|
|
text: this.app.lang.generic.savesuccess,
|
|
position: 'top-right',
|
|
icon: 'success'
|
|
});
|
|
}
|
|
}
|