svghmi/gen_index_xhtml.ysl2
branchsvghmi
changeset 2847 dffade5c83d3
parent 2846 7b1db17287b6
child 2848 c525b1083653
equal deleted inserted replaced
2846:7b1db17287b6 2847:dffade5c83d3
   457 
   457 
   458     function "scripts"
   458     function "scripts"
   459     {
   459     {
   460         | //(function(){
   460         | //(function(){
   461         |
   461         |
       
   462         | id = idstr => document.getElementById(idstr);
       
   463         |
   462         | var hmi_hash = [«$hmitree/@hash»]; 
   464         | var hmi_hash = [«$hmitree/@hash»]; 
   463 
   465 
   464         /* TODO re-enable
   466         /* TODO re-enable
   465         ||
   467         ||
   466         function evaluate_js_from_descriptions() {
   468         function evaluate_js_from_descriptions() {
   500             |         «$hmitree_match/@index»`if "position()!=last()" > ,`
   502             |         «$hmitree_match/@index»`if "position()!=last()" > ,`
   501                     }
   503                     }
   502                 }
   504                 }
   503             }
   505             }
   504             |     ],
   506             |     ],
   505             |     element: document.getElementById("«@id»"),
   507             |     element: id("«@id»"),
   506             apply "$widget", mode="widget_defs" with "hmi_element",".";
   508             apply "$widget", mode="widget_defs" with "hmi_element",".";
   507             | }`if "position()!=last()" > ,`
   509             | }`if "position()!=last()" > ,`
   508         }
   510         }
   509         | }
   511         | }
   510         |
   512         |
   517         }
   519         }
   518 
   520 
   519         | ]
   521         | ]
   520         |
   522         |
   521 
   523 
       
   524         | var detachable_elements = {
       
   525         foreach "$detachable_elements"{
       
   526         |     "«@id»" : {element: id("«@id»"), parent:id("«../@id»")}`if "position()!=last()" > ,`
       
   527         }
       
   528         | }
       
   529 
       
   530         |
   522         | var page_desc = {
   531         | var page_desc = {
   523 
   532 
   524         foreach "$hmi_pages" {
   533         foreach "$hmi_pages" {
   525             const "desc", "func:parselabel(@inkscape:label)/widget";
   534             const "desc", "func:parselabel(@inkscape:label)/widget";
   526             const "page", ".";
   535             const "page", ".";
   528 
   537 
   529             const "page_all_elements", "func:all_related_elements($page)";
   538             const "page_all_elements", "func:all_related_elements($page)";
   530 
   539 
   531             const "all_page_ids","$page_all_elements[@id = $hmi_elements/@id and @id != $page/@id]/@id";
   540             const "all_page_ids","$page_all_elements[@id = $hmi_elements/@id and @id != $page/@id]/@id";
   532 
   541 
   533             const "shorter_list", "func:sumarized_elements($page_all_elements)";
   542             const "required_detachables", "func:sumarized_elements($page_all_elements)";
   534 
   543 
   535             |     "«$desc/arg[1]/@value»": {
   544             |     "«$desc/arg[1]/@value»": {
   536             |         widget: hmi_widgets["«@id»"],
   545             |         widget: hmi_widgets["«@id»"],
   537             |         bbox: [«$p/@x», «$p/@y», «$p/@w», «$p/@h»],
   546             |         bbox: [«$p/@x», «$p/@y», «$p/@w», «$p/@h»],
   538             |         widgets: [
   547             |         widgets: [
   539             foreach "$all_page_ids" {
   548             foreach "$all_page_ids" {
   540             |             hmi_widgets["«.»"]`if "position()!=last()" > ,`
   549             |             hmi_widgets["«.»"]`if "position()!=last()" > ,`
   541             }
   550             }
   542             |         ],
   551             |         ],
   543             |         required_elements: [
   552             |         required_detachables: [
   544             foreach "$shorter_list" {
   553             foreach "$required_detachables" {
   545             |             "«@id»",
   554             |             detachable_elements["«@id»"]`if "position()!=last()" > ,`
   546             }
   555             }
   547             |         ]
   556             |         ]
   548             |     }`if "position()!=last()" > ,`
   557             |     }`if "position()!=last()" > ,`
   549         }
   558         }
   550         | }
   559         | }
   551 
   560 
   552         |
   561         |
   553         | var default_page = "«$default_page»";
   562         | var default_page = "«$default_page»";
   554         | var svg_root = document.getElementById("«$svg_root_id»");
   563         | var svg_root = id("«$svg_root_id»");
   555         include text svghmi.js
   564         include text svghmi.js
   556         | //})();
   565         | //})();
   557     }
   566     }
   558 
   567 
   559     // template "*", mode="code_from_descs" {
   568     // template "*", mode="code_from_descs" {
   618                         warning > «$widget_type» widget must have a «$name» element
   627                         warning > «$widget_type» widget must have a «$name» element
   619                     }
   628                     }
   620                     // otherwise produce nothing 
   629                     // otherwise produce nothing 
   621                 }
   630                 }
   622                 otherwise {
   631                 otherwise {
   623                     | «$name»_elt: document.getElementById("«$elt_id»"),
   632                     | «$name»_elt: id("«$elt_id»"),
   624                 }
   633                 }
   625             }
   634             }
   626         }
   635         }
   627     }
   636     }
   628 
   637 
   691         |     this.value_elt.textContent = String(value);
   700         |     this.value_elt.textContent = String(value);
   692         | },
   701         | },
   693         const "edit_elt_id","$hmi_element/*[@inkscape:label='edit'][1]/@id";
   702         const "edit_elt_id","$hmi_element/*[@inkscape:label='edit'][1]/@id";
   694         | init: function() {
   703         | init: function() {
   695         if "$edit_elt_id" {
   704         if "$edit_elt_id" {
   696         |     document.getElementById("«$edit_elt_id»").addEventListener(
   705         |     id("«$edit_elt_id»").addEventListener(
   697         |         "click", 
   706         |         "click", 
   698         |         evt => alert('XXX TODO : Edit value'));
   707         |         evt => alert('XXX TODO : Edit value'));
   699         }
   708         }
   700         foreach "$hmi_element/*[regexp:test(@inkscape:label,'^[=+\-].+')]" {
   709         foreach "$hmi_element/*[regexp:test(@inkscape:label,'^[=+\-].+')]" {
   701         |     document.getElementById("«@id»").addEventListener(
   710         |     id("«@id»").addEventListener(
   702         |         "click", 
   711         |         "click", 
   703         |         evt => {let new_val = change_hmi_value(this.indexes[0], "«func:escape_quotes(@inkscape:label)»");
   712         |         evt => {let new_val = change_hmi_value(this.indexes[0], "«func:escape_quotes(@inkscape:label)»");
   704         |                 this.value_elt.textContent = String(new_val);});
   713         |                 this.value_elt.textContent = String(new_val);});
   705                           /* could gray out value until refreshed */
   714                           /* could gray out value until refreshed */
   706         }
   715         }
   729         | choices: [
   738         | choices: [
   730         const "regex",!"'^(\"[^\"].*\"|\-?[0-9]+)(#.*)?$'"!;
   739         const "regex",!"'^(\"[^\"].*\"|\-?[0-9]+)(#.*)?$'"!;
   731         foreach "$hmi_element/*[regexp:test(@inkscape:label,$regex)]" {
   740         foreach "$hmi_element/*[regexp:test(@inkscape:label,$regex)]" {
   732             const "literal", "regexp:match(@inkscape:label,$regex)[2]";
   741             const "literal", "regexp:match(@inkscape:label,$regex)[2]";
   733         |     {
   742         |     {
   734         |         elt:document.getElementById("«@id»"),
   743         |         elt:id("«@id»"),
   735         |         style:"«@style»",
   744         |         style:"«@style»",
   736         |         value:«$literal»
   745         |         value:«$literal»
   737         |     }`if "position()!=last()" > ,`
   746         |     }`if "position()!=last()" > ,`
   738         }
   747         }
   739         | ],
   748         | ],