arg name="supported_types" accepts="string" > keypad can input those types
emit "declarations:keypad" {
foreach "$keypads_descs"{
const "g", "$geometry[@Id = $keypad_id]";
| "«@value»":["«$keypad_id»", «$g/@x», «$g/@y»],
var syms = symbols.split(" ");
this.editstr += syms[this.shift?syms.length-1:0];
let coercedval = (typeof this.initial) == "number" ? Number(this.editstr) : this.editstr;
if(typeof coercedval == 'number' && isNaN(coercedval)){
// revert to initial so it explicitely shows input was ignored
this.editstr = String(this.initial);
let callback_obj = this.result_callback_obj;
callback_obj.edit_callback(coercedval);
this.editstr = this.editstr.slice(0,this.editstr.length-1);
if(this.editstr[0] == "-")
this.editstr = this.editstr.slice(1,this.editstr.length);
this.editstr = "-" + this.editstr;
if(this.editstr.indexOf(".") == "-1"){
this.shift = !this.shift;
result_callback_obj = undefined;
start_edit(info, valuetype, callback_obj, initial,size) {
show_modal.call(this,size);
this.editstr = String(initial);
this.result_callback_obj = callback_obj;
this.Info_elt.textContent = info;
if(this.editstr != this._editstr){
this._editstr = this.editstr;
this.Value_elt.textContent = this.editstr;
if(this.Shift_sub && this.shift != this._shift){
this._shift = this.shift;
(this.shift?this.activate_activable:this.inactivate_activable)(this.Shift_sub);
if(this.CapsLock_sub && this.caps != this._caps){
(this.caps?this.activate_activable:this.inactivate_activable)(this.CapsLock_sub);
labels("Esc Enter BackSpace Keys Info Value");
optional_labels("Sign Space NumDot");
activable_labels("CapsLock Shift");
foreach "$hmi_element/*[@inkscape:label = 'Keys']/*" {
| id("«@id»").setAttribute("onclick", "hmi_widgets['«$hmi_element/@id»'].on_key_click('«func:escape_quotes(@inkscape:label)»')");
foreach "str:split('Esc Enter BackSpace Sign Space NumDot CapsLock Shift')" {
| this.«.»_elt.setAttribute("onclick", "hmi_widgets['«$hmi_element/@id»'].on_«.»_click()");
const "g", "$geometry[@Id = $hmi_element/@id]";
| coordinates: [«$g/@x», «$g/@y»],