svghmi/gen_index_xhtml.xslt
branchsvghmi
changeset 3150 5a1bb6ec48a0
parent 3147 910290aec533
child 3151 8e5d383a58cb
equal deleted inserted replaced
3149:d32e6246cd59 3150:5a1bb6ec48a0
   972     <xsl:text> */
   972     <xsl:text> */
   973 </xsl:text>
   973 </xsl:text>
   974     <xsl:text>
   974     <xsl:text>
   975 </xsl:text>
   975 </xsl:text>
   976     <xsl:variable name="translations" select="ns:GetTranslations($translatable_strings)"/>
   976     <xsl:variable name="translations" select="ns:GetTranslations($translatable_strings)"/>
   977     <xsl:text>var langs = [ "default",</xsl:text>
   977     <xsl:text>var langs = [ ["Default", "C"],</xsl:text>
   978     <xsl:for-each select="$translations/langs/lang">
   978     <xsl:for-each select="$translations/langs/lang">
   979       <xsl:text>"</xsl:text>
   979       <xsl:text>["</xsl:text>
   980       <xsl:value-of select="."/>
   980       <xsl:value-of select="."/>
   981       <xsl:text>"</xsl:text>
   981       <xsl:text>","</xsl:text>
       
   982       <xsl:value-of select="@code"/>
       
   983       <xsl:text>"]</xsl:text>
   982       <xsl:if test="position()!=last()">
   984       <xsl:if test="position()!=last()">
   983         <xsl:text>,</xsl:text>
   985         <xsl:text>,</xsl:text>
   984       </xsl:if>
   986       </xsl:if>
   985     </xsl:for-each>
   987     </xsl:for-each>
   986     <xsl:text>];
   988     <xsl:text>];
  4500 </xsl:text>
  4502 </xsl:text>
  4501     <xsl:text>    init() {
  4503     <xsl:text>    init() {
  4502 </xsl:text>
  4504 </xsl:text>
  4503     <xsl:text>        this.spread_json_data_bound = this.spread_json_data.bind(this);
  4505     <xsl:text>        this.spread_json_data_bound = this.spread_json_data.bind(this);
  4504 </xsl:text>
  4506 </xsl:text>
       
  4507     <xsl:text>        this.handle_http_response_bound = this.handle_http_response.bind(this);
       
  4508 </xsl:text>
       
  4509     <xsl:text>        this.fetch_error_bound = this.fetch_error.bind(this);
       
  4510 </xsl:text>
       
  4511     <xsl:text>        this.promised = false;
       
  4512 </xsl:text>
  4505     <xsl:text>    }
  4513     <xsl:text>    }
  4506 </xsl:text>
  4514 </xsl:text>
  4507     <xsl:text>
  4515     <xsl:text>
  4508 </xsl:text>
  4516 </xsl:text>
  4509     <xsl:text>    handle_http_response(response) {
  4517     <xsl:text>    handle_http_response(response) {
  4518 </xsl:text>
  4526 </xsl:text>
  4519     <xsl:text>    }
  4527     <xsl:text>    }
  4520 </xsl:text>
  4528 </xsl:text>
  4521     <xsl:text>
  4529     <xsl:text>
  4522 </xsl:text>
  4530 </xsl:text>
       
  4531     <xsl:text>    fetch_error(e){
       
  4532 </xsl:text>
       
  4533     <xsl:text>        console.log("HTTP fetch error, message = " + e.message + "Widget:" + this.element_id);
       
  4534 </xsl:text>
       
  4535     <xsl:text>    }
       
  4536 </xsl:text>
       
  4537     <xsl:text>
       
  4538 </xsl:text>
  4523     <xsl:text>    do_http_request(...opt) {
  4539     <xsl:text>    do_http_request(...opt) {
  4524 </xsl:text>
  4540 </xsl:text>
       
  4541     <xsl:text>        this.abort_controller = new AbortController();
       
  4542 </xsl:text>
  4525     <xsl:text>        const query = {
  4543     <xsl:text>        const query = {
  4526 </xsl:text>
  4544 </xsl:text>
  4527     <xsl:text>            args: this.args,
  4545     <xsl:text>            args: this.args,
  4528 </xsl:text>
  4546 </xsl:text>
  4529     <xsl:text>            range: this.cache[1],
  4547     <xsl:text>            range: this.cache[1],
  4544 </xsl:text>
  4562 </xsl:text>
  4545     <xsl:text>             method: 'POST',
  4563     <xsl:text>             method: 'POST',
  4546 </xsl:text>
  4564 </xsl:text>
  4547     <xsl:text>             body: JSON.stringify(query),
  4565     <xsl:text>             body: JSON.stringify(query),
  4548 </xsl:text>
  4566 </xsl:text>
  4549     <xsl:text>             headers: {'Content-Type': 'application/json'}
  4567     <xsl:text>             headers: {'Content-Type': 'application/json'},
       
  4568 </xsl:text>
       
  4569     <xsl:text>             signal: this.abort_controller.signal
  4550 </xsl:text>
  4570 </xsl:text>
  4551     <xsl:text>        };
  4571     <xsl:text>        };
  4552 </xsl:text>
  4572 </xsl:text>
  4553     <xsl:text>
  4573     <xsl:text>
  4554 </xsl:text>
  4574 </xsl:text>
  4555     <xsl:text>        fetch(this.args[0], options)
  4575     <xsl:text>        return fetch(this.args[0], options)
  4556 </xsl:text>
  4576 </xsl:text>
  4557     <xsl:text>            .then(this.handle_http_response)
  4577     <xsl:text>                .then(this.handle_http_response_bound)
  4558 </xsl:text>
  4578 </xsl:text>
  4559     <xsl:text>            .then(this.spread_json_data_bound);
  4579     <xsl:text>                .then(this.spread_json_data_bound)
  4560 </xsl:text>
  4580 </xsl:text>
  4561     <xsl:text>
  4581     <xsl:text>                .catch(this.fetch_error_bound);
  4562 </xsl:text>
  4582 </xsl:text>
  4563     <xsl:text>    }
  4583     <xsl:text>
       
  4584 </xsl:text>
       
  4585     <xsl:text>    }
       
  4586 </xsl:text>
       
  4587     <xsl:text>    unsub(){
       
  4588 </xsl:text>
       
  4589     <xsl:text>        this.abort_controller.abort();
       
  4590 </xsl:text>
       
  4591     <xsl:text>        super.unsub();
       
  4592 </xsl:text>
       
  4593     <xsl:text>    }
       
  4594 </xsl:text>
       
  4595     <xsl:text>
  4564 </xsl:text>
  4596 </xsl:text>
  4565     <xsl:text>    dispatch(value, oldval, index) {
  4597     <xsl:text>    dispatch(value, oldval, index) {
  4566 </xsl:text>
  4598 </xsl:text>
  4567     <xsl:text>        this.cache[index] = value;
  4599     <xsl:text>
  4568 </xsl:text>
  4600 </xsl:text>
  4569     <xsl:text>        this.do_http_request();
  4601     <xsl:text>        if(this.cache[index] != value)
       
  4602 </xsl:text>
       
  4603     <xsl:text>            this.cache[index] = value;
       
  4604 </xsl:text>
       
  4605     <xsl:text>        else
       
  4606 </xsl:text>
       
  4607     <xsl:text>            return;
       
  4608 </xsl:text>
       
  4609     <xsl:text>
       
  4610 </xsl:text>
       
  4611     <xsl:text>        if(!this.promised){
       
  4612 </xsl:text>
       
  4613     <xsl:text>            this.promised = true;
       
  4614 </xsl:text>
       
  4615     <xsl:text>            this.do_http_request().finally(() =&gt; {
       
  4616 </xsl:text>
       
  4617     <xsl:text>                this.promised = false;
       
  4618 </xsl:text>
       
  4619     <xsl:text>            });
       
  4620 </xsl:text>
       
  4621     <xsl:text>        }
  4570 </xsl:text>
  4622 </xsl:text>
  4571     <xsl:text>    }
  4623     <xsl:text>    }
  4572 </xsl:text>
  4624 </xsl:text>
  4573     <xsl:text>    make_on_click(...options){
  4625     <xsl:text>    make_on_click(...options){
  4574 </xsl:text>
  4626 </xsl:text>
  4788   </xsl:template>
  4840   </xsl:template>
  4789   <xsl:template mode="json_table_render" match="svg:g">
  4841   <xsl:template mode="json_table_render" match="svg:g">
  4790     <xsl:param name="expressions"/>
  4842     <xsl:param name="expressions"/>
  4791     <xsl:param name="widget_elts"/>
  4843     <xsl:param name="widget_elts"/>
  4792     <xsl:param name="label"/>
  4844     <xsl:param name="label"/>
  4793     <xsl:variable name="gid" select="@id"/>
       
  4794     <xsl:variable name="varprefix">
  4845     <xsl:variable name="varprefix">
  4795       <xsl:text>obj_</xsl:text>
  4846       <xsl:text>obj_</xsl:text>
  4796       <xsl:value-of select="$gid"/>
  4847       <xsl:value-of select="@id"/>
  4797       <xsl:text>_</xsl:text>
  4848       <xsl:text>_</xsl:text>
  4798     </xsl:variable>
  4849     </xsl:variable>
  4799     <xsl:text>        try {
  4850     <xsl:text>        try {
  4800 </xsl:text>
  4851 </xsl:text>
  4801     <xsl:for-each select="$expressions/expression">
  4852     <xsl:for-each select="$expressions/expression">
  4808 </xsl:text>
  4859 </xsl:text>
  4809       <xsl:text>         if(</xsl:text>
  4860       <xsl:text>         if(</xsl:text>
  4810       <xsl:value-of select="$varprefix"/>
  4861       <xsl:value-of select="$varprefix"/>
  4811       <xsl:value-of select="position()"/>
  4862       <xsl:value-of select="position()"/>
  4812       <xsl:text> == undefined) {
  4863       <xsl:text> == undefined) {
  4813 </xsl:text>
       
  4814       <xsl:text>              console.log("</xsl:text>
       
  4815       <xsl:value-of select="$varprefix"/>
       
  4816       <xsl:value-of select="position()"/>
       
  4817       <xsl:text> = </xsl:text>
       
  4818       <xsl:value-of select="@content"/>
       
  4819       <xsl:text>");
       
  4820 </xsl:text>
  4864 </xsl:text>
  4821       <xsl:text>              throw null;
  4865       <xsl:text>              throw null;
  4822 </xsl:text>
  4866 </xsl:text>
  4823       <xsl:text>         }
  4867       <xsl:text>         }
  4824 </xsl:text>
  4868 </xsl:text>
  4845       <xsl:with-param name="widget_elts" select="$widget_elts"/>
  4889       <xsl:with-param name="widget_elts" select="$widget_elts"/>
  4846     </xsl:apply-templates>
  4890     </xsl:apply-templates>
  4847     <xsl:text>        } catch(err) {
  4891     <xsl:text>        } catch(err) {
  4848 </xsl:text>
  4892 </xsl:text>
  4849     <xsl:text>          id("</xsl:text>
  4893     <xsl:text>          id("</xsl:text>
  4850     <xsl:value-of select="$gid"/>
  4894     <xsl:value-of select="@id"/>
  4851     <xsl:text>").style = "display:none";
  4895     <xsl:text>").style = "display:none";
  4852 </xsl:text>
  4896 </xsl:text>
  4853     <xsl:text>        }
  4897     <xsl:text>        }
  4854 </xsl:text>
  4898 </xsl:text>
  4855   </xsl:template>
  4899   </xsl:template>
  4875 </xsl:text>
  4919 </xsl:text>
  4876     <xsl:text>    spread_json_data: function(janswer) {
  4920     <xsl:text>    spread_json_data: function(janswer) {
  4877 </xsl:text>
  4921 </xsl:text>
  4878     <xsl:text>        let [range,position,jdata] = janswer;
  4922     <xsl:text>        let [range,position,jdata] = janswer;
  4879 </xsl:text>
  4923 </xsl:text>
  4880     <xsl:text>        this.apply_hmi_value(1, range);
  4924     <xsl:text>        [[1, range], [2, position], [3, this.visible]].map(([i,v]) =&gt; {
  4881 </xsl:text>
  4925 </xsl:text>
  4882     <xsl:text>        this.apply_hmi_value(2, position);
  4926     <xsl:text>             this.apply_hmi_value(i,v);
  4883 </xsl:text>
  4927 </xsl:text>
  4884     <xsl:text>        this.apply_hmi_value(3, this.visible);
  4928     <xsl:text>             this.cache[i] = v;
       
  4929 </xsl:text>
       
  4930     <xsl:text>        });
  4885 </xsl:text>
  4931 </xsl:text>
  4886     <xsl:apply-templates mode="json_table_render_except_comments" select="$data_elt">
  4932     <xsl:apply-templates mode="json_table_render_except_comments" select="$data_elt">
  4887       <xsl:with-param name="expressions" select="$initexpr_ns"/>
  4933       <xsl:with-param name="expressions" select="$initexpr_ns"/>
  4888       <xsl:with-param name="widget_elts" select="$hmi_element/*[@inkscape:label = 'data']/descendant::svg:*"/>
  4934       <xsl:with-param name="widget_elts" select="$hmi_element/*[@inkscape:label = 'data']/descendant::svg:*"/>
  4889     </xsl:apply-templates>
  4935     </xsl:apply-templates>
  7169 </xsl:text>
  7215 </xsl:text>
  7170           <xsl:text>
  7216           <xsl:text>
  7171 </xsl:text>
  7217 </xsl:text>
  7172           <xsl:text>function switch_langnum(langnum) {
  7218           <xsl:text>function switch_langnum(langnum) {
  7173 </xsl:text>
  7219 </xsl:text>
  7174           <xsl:text>    if(langnum == current_lang) {
  7220           <xsl:text>    langnum = Math.max(0, Math.min(langs.length - 1, langnum));
  7175 </xsl:text>
  7221 </xsl:text>
  7176           <xsl:text>        return;
  7222           <xsl:text>
       
  7223 </xsl:text>
       
  7224           <xsl:text>    for (let translation of translations) {
       
  7225 </xsl:text>
       
  7226           <xsl:text>        let [objs, msgs] = translation;
       
  7227 </xsl:text>
       
  7228           <xsl:text>        let msg = msgs[langnum];
       
  7229 </xsl:text>
       
  7230           <xsl:text>        for (let obj of objs) {
       
  7231 </xsl:text>
       
  7232           <xsl:text>            multiline_to_svg_text(obj, msg);
       
  7233 </xsl:text>
       
  7234           <xsl:text>            obj.setAttribute("lang",langnum);
       
  7235 </xsl:text>
       
  7236           <xsl:text>        }
  7177 </xsl:text>
  7237 </xsl:text>
  7178           <xsl:text>    }
  7238           <xsl:text>    }
  7179 </xsl:text>
  7239 </xsl:text>
  7180           <xsl:text>
  7240           <xsl:text>    return langnum;
  7181 </xsl:text>
  7241 </xsl:text>
  7182           <xsl:text>    for (let translation of translations) {
  7242           <xsl:text>}
  7183 </xsl:text>
  7243 </xsl:text>
  7184           <xsl:text>        let [objs, msgs, orig] = translation;
  7244           <xsl:text>
  7185 </xsl:text>
  7245 </xsl:text>
  7186           <xsl:text>        let msg = langnum == 0 ? orig : msgs[langnum - 1];
  7246           <xsl:text>// backup original texts
  7187 </xsl:text>
  7247 </xsl:text>
  7188           <xsl:text>        for (let obj of objs) {
  7248           <xsl:text>for (let translation of translations) {
  7189 </xsl:text>
  7249 </xsl:text>
  7190           <xsl:text>            multiline_to_svg_text(obj, msg);
  7250           <xsl:text>    let [objs, msgs] = translation;
  7191 </xsl:text>
  7251 </xsl:text>
  7192           <xsl:text>            obj.setAttribute("lang",langnum);
  7252           <xsl:text>    msgs.unshift(svg_text_to_multiline(objs[0])); 
  7193 </xsl:text>
  7253 </xsl:text>
  7194           <xsl:text>        }
  7254           <xsl:text>}
       
  7255 </xsl:text>
       
  7256           <xsl:text>
       
  7257 </xsl:text>
       
  7258           <xsl:text>var lang_local_index = hmi_local_index("lang");
       
  7259 </xsl:text>
       
  7260           <xsl:text>var langcode_local_index = hmi_local_index("lang_code");
       
  7261 </xsl:text>
       
  7262           <xsl:text>var langname_local_index = hmi_local_index("lang_name");
       
  7263 </xsl:text>
       
  7264           <xsl:text>subscribers(lang_local_index).add({
       
  7265 </xsl:text>
       
  7266           <xsl:text>    indexes: [lang_local_index],
       
  7267 </xsl:text>
       
  7268           <xsl:text>    new_hmi_value: function(index, value, oldval) {
       
  7269 </xsl:text>
       
  7270           <xsl:text>        let current_lang =  switch_langnum(value);
       
  7271 </xsl:text>
       
  7272           <xsl:text>        let [langname,langcode] = langs[current_lang];
       
  7273 </xsl:text>
       
  7274           <xsl:text>        apply_hmi_value(langcode_local_index, langcode);
       
  7275 </xsl:text>
       
  7276           <xsl:text>        apply_hmi_value(langname_local_index, langname);
       
  7277 </xsl:text>
       
  7278           <xsl:text>        switch_page();
  7195 </xsl:text>
  7279 </xsl:text>
  7196           <xsl:text>    }
  7280           <xsl:text>    }
  7197 </xsl:text>
  7281 </xsl:text>
  7198           <xsl:text>    current_lang = langnum;
  7282           <xsl:text>});
       
  7283 </xsl:text>
       
  7284           <xsl:text>
       
  7285 </xsl:text>
       
  7286           <xsl:text>function setup_lang(){
       
  7287 </xsl:text>
       
  7288           <xsl:text>    let current_lang = cache[lang_local_index];
       
  7289 </xsl:text>
       
  7290           <xsl:text>    let new_lang = switch_langnum(current_lang);
       
  7291 </xsl:text>
       
  7292           <xsl:text>    if(current_lang != new_lang){
       
  7293 </xsl:text>
       
  7294           <xsl:text>        apply_hmi_value(lang_local_index, new_lang);
       
  7295 </xsl:text>
       
  7296           <xsl:text>    }
  7199 </xsl:text>
  7297 </xsl:text>
  7200           <xsl:text>}
  7298           <xsl:text>}
  7201 </xsl:text>
  7299 </xsl:text>
  7202           <xsl:text>
  7300           <xsl:text>
  7203 </xsl:text>
  7301 </xsl:text>
  7204           <xsl:text>// backup original texts
  7302           <xsl:text>setup_lang();
  7205 </xsl:text>
       
  7206           <xsl:text>for (let translation of translations) {
       
  7207 </xsl:text>
       
  7208           <xsl:text>    let [objs] = translation;
       
  7209 </xsl:text>
       
  7210           <xsl:text>    translation.push(svg_text_to_multiline(objs[0])); 
       
  7211 </xsl:text>
       
  7212           <xsl:text>}
       
  7213 </xsl:text>
       
  7214           <xsl:text>
       
  7215 </xsl:text>
       
  7216           <xsl:text>var lang_local_index = hmi_local_index("lang");
       
  7217 </xsl:text>
       
  7218           <xsl:text>subscribers(lang_local_index).add({
       
  7219 </xsl:text>
       
  7220           <xsl:text>    indexes: [lang_local_index],
       
  7221 </xsl:text>
       
  7222           <xsl:text>    new_hmi_value: function(index, value, oldval) {
       
  7223 </xsl:text>
       
  7224           <xsl:text>        switch_langnum(value);
       
  7225 </xsl:text>
       
  7226           <xsl:text>        switch_page();
       
  7227 </xsl:text>
       
  7228           <xsl:text>    }
       
  7229 </xsl:text>
       
  7230           <xsl:text>});
       
  7231 </xsl:text>
       
  7232           <xsl:text>var current_lang = 0;
       
  7233 </xsl:text>
       
  7234           <xsl:text>switch_langnum(cache[lang_local_index]);
       
  7235 </xsl:text>
  7303 </xsl:text>
  7236           <xsl:text>
  7304           <xsl:text>
  7237 </xsl:text>
  7305 </xsl:text>
  7238           <xsl:text>function update_subscriptions() {
  7306           <xsl:text>function update_subscriptions() {
  7239 </xsl:text>
  7307 </xsl:text>