svghmi/gen_index_xhtml.xslt
branchsvghmi
changeset 2930 41edcb8e0a01
parent 2926 90f9d9782632
child 2931 f51c0e2e0bcb
--- a/svghmi/gen_index_xhtml.xslt	Tue Apr 14 17:16:25 2020 +0200
+++ b/svghmi/gen_index_xhtml.xslt	Tue Apr 14 17:17:35 2020 +0200
@@ -859,6 +859,8 @@
 </xsl:text>
     <xsl:text>        this.opened = false;
 </xsl:text>
+    <xsl:text>        this.bound_inhibit_click_elsewhere = this.inhibit_click_elsewhere.bind(this);
+</xsl:text>
     <xsl:text>    },
 </xsl:text>
     <xsl:text>    on_selection_click: function(selection) {
@@ -867,7 +869,11 @@
 </xsl:text>
     <xsl:text>        this.close();
 </xsl:text>
-    <xsl:text>        this.set_selection(selection);
+    <xsl:text>        let orig = this.indexes[0];
+</xsl:text>
+    <xsl:text>        let idx = this.offset ? orig - this.offset : orig;
+</xsl:text>
+    <xsl:text>        apply_hmi_value(idx, selection);
 </xsl:text>
     <xsl:text>    },
 </xsl:text>
@@ -963,6 +969,18 @@
 </xsl:text>
     <xsl:text>    },
 </xsl:text>
+    <xsl:text>    inhibit_click_elsewhere: function(e) {
+</xsl:text>
+    <xsl:text>        console.log("inhibit", e);
+</xsl:text>
+    <xsl:text>        console.log(e.target.parentNode, this.text_elt);
+</xsl:text>
+    <xsl:text>        if(e.target.parentNode !== this.text_elt)
+</xsl:text>
+    <xsl:text>            e.stopPropagation();
+</xsl:text>
+    <xsl:text>    },
+</xsl:text>
     <xsl:text>    close: function(){
 </xsl:text>
     <xsl:text>        this.reset_text();
@@ -971,6 +989,10 @@
 </xsl:text>
     <xsl:text>        this.element.appendChild(this.button_elt);
 </xsl:text>
+    <xsl:text>        this.apply_cache();
+</xsl:text>
+    <xsl:text>        document.removeEventListener("click", this.bound_inhibit_click_elsewhere, true);
+</xsl:text>
     <xsl:text>        this.opened = false;
 </xsl:text>
     <xsl:text>    },
@@ -1103,7 +1125,11 @@
 </xsl:text>
     <xsl:text>        this.element.removeChild(this.button_elt);
 </xsl:text>
-    <xsl:text>        /* TODO disable interaction with background */
+    <xsl:text>        this.element.parentNode.appendChild(this.element.parentNode.removeChild(this.element));
+</xsl:text>
+    <xsl:text>        // disable interaction with background
+</xsl:text>
+    <xsl:text>        document.addEventListener("click", this.bound_inhibit_click_elsewhere, true);
 </xsl:text>
     <xsl:text>        this.opened = true;
 </xsl:text>
@@ -1327,7 +1353,11 @@
 </xsl:text>
     <xsl:text>    on_op_click: function(opstr) {
 </xsl:text>
-    <xsl:text>        let new_val = change_hmi_value(this.indexes[0], opstr);
+    <xsl:text>        let orig = this.indexes[0];
+</xsl:text>
+    <xsl:text>        let idx = this.offset ? orig - this.offset : orig;
+</xsl:text>
+    <xsl:text>        let new_val = change_hmi_value(idx, opstr);
 </xsl:text>
     <xsl:text>    },
 </xsl:text>
@@ -1343,7 +1373,11 @@
 </xsl:text>
     <xsl:text>    edit_callback: function(new_val) {
 </xsl:text>
-    <xsl:text>        apply_hmi_value(this.indexes[0], new_val);
+    <xsl:text>        let orig = this.indexes[0];
+</xsl:text>
+    <xsl:text>        let idx = this.offset ? orig - this.offset : orig;
+</xsl:text>
+    <xsl:text>        apply_hmi_value(idx, new_val);
 </xsl:text>
     <xsl:text>    },
 </xsl:text>