svghmi/svghmi.js
branchsvghmi
changeset 3142 2637bb6a6bb0
parent 3137 ac3ec66e9c6d
child 3144 2af6afaccaf2
child 3145 80ebb88cf7b7
equal deleted inserted replaced
3141:6d4c1e6560ac 3142:2637bb6a6bb0
     1 // svghmi.js
     1 // svghmi.js
     2 
     2 
     3 var updates = {};
       
     4 var need_cache_apply = [];
     3 var need_cache_apply = [];
     5 
       
     6 
     4 
     7 function dispatch_value(index, value) {
     5 function dispatch_value(index, value) {
     8     let widgets = subscribers(index);
     6     let widgets = subscribers(index);
     9 
     7 
    10     let oldval = cache[index];
     8     let oldval = cache[index];
   202     new_hmi_value: function(index, value, oldval) {
   200     new_hmi_value: function(index, value, oldval) {
   203         apply_hmi_value(heartbeat_index, value+1);
   201         apply_hmi_value(heartbeat_index, value+1);
   204     }
   202     }
   205 });
   203 });
   206 
   204 
   207 var translated = false;
   205 function svg_text_to_multiline(elt) {
       
   206     return(Array.prototype.map.call(elt.children, x=>x.textContent).join("\\\\n")); 
       
   207 }
       
   208 
       
   209 function multiline_to_svg_text(elt, str) {
       
   210     str.split('\\\\n').map((line,i) => {elt.children[i].textContent = line;});
       
   211 }
   208 
   212 
   209 function switch_langnum(langnum) {
   213 function switch_langnum(langnum) {
   210     if(langnum == current_lang) {
   214     if(langnum == current_lang) {
   211         return;
   215         return;
   212     }
       
   213 
       
   214     if (!translated) {
       
   215         translated = true;
       
   216         for (let translation of translations) {
       
   217             let [objs] = translation;
       
   218             translation.push(Array.prototype.map.call(objs[0].children, x=>x.textContent).join("\\\\n")); 
       
   219         }
       
   220     }
   216     }
   221 
   217 
   222     for (let translation of translations) {
   218     for (let translation of translations) {
   223         let [objs, msgs, orig] = translation;
   219         let [objs, msgs, orig] = translation;
   224         let msg = langnum == 0 ? orig : msgs[langnum - 1];
   220         let msg = langnum == 0 ? orig : msgs[langnum - 1];
   225         for (let obj of objs) {
   221         for (let obj of objs) {
   226             msg.split('\\\\n').map((line,i) => {obj.children[i].textContent = line;});
   222             multiline_to_svg_text(obj, msg);
       
   223             obj.setAttribute("lang",langnum);
   227         }
   224         }
   228     }
   225     }
   229     current_lang = langnum;
   226     current_lang = langnum;
   230 }
   227 }
       
   228 
       
   229 // backup original texts
       
   230 for (let translation of translations) {
       
   231     let [objs] = translation;
       
   232     translation.push(svg_text_to_multiline(objs[0])); 
       
   233 }
       
   234 
   231 var lang_local_index = hmi_local_index("lang");
   235 var lang_local_index = hmi_local_index("lang");
   232 subscribers(lang_local_index).add({
   236 subscribers(lang_local_index).add({
   233     indexes: [lang_local_index],
   237     indexes: [lang_local_index],
   234     new_hmi_value: function(index, value, oldval) {
   238     new_hmi_value: function(index, value, oldval) {
   235         switch_langnum(value);
   239         switch_langnum(value);
       
   240         switch_page();
   236     }
   241     }
   237 });
   242 });
   238 var current_lang = 0;
   243 var current_lang = 0;
   239 switch_langnum(cache[lang_local_index]);
   244 switch_langnum(cache[lang_local_index]);
   240 
   245 
   395     current_page_index = page_index;
   400     current_page_index = page_index;
   396 
   401 
   397     jumps_need_update = true;
   402     jumps_need_update = true;
   398 
   403 
   399     requestHMIAnimation();
   404     requestHMIAnimation();
   400 
       
   401     jump_history.push([page_name, page_index]);
   405     jump_history.push([page_name, page_index]);
   402     if(jump_history.length > 42)
   406     if(jump_history.length > 42)
   403         jump_history.shift();
   407         jump_history.shift();
   404 
   408 
   405     return true;
   409     return true;