svghmi/svghmi.js
branchsvghmi
changeset 3144 2af6afaccaf2
parent 3142 2637bb6a6bb0
child 3148 b8c0dfdf364b
equal deleted inserted replaced
3143:8388e6d4aa61 3144:2af6afaccaf2
   209 function multiline_to_svg_text(elt, str) {
   209 function multiline_to_svg_text(elt, str) {
   210     str.split('\\\\n').map((line,i) => {elt.children[i].textContent = line;});
   210     str.split('\\\\n').map((line,i) => {elt.children[i].textContent = line;});
   211 }
   211 }
   212 
   212 
   213 function switch_langnum(langnum) {
   213 function switch_langnum(langnum) {
   214     if(langnum == current_lang) {
   214     langnum = Math.max(0, Math.min(langs.length - 1, langnum));
   215         return;
       
   216     }
       
   217 
   215 
   218     for (let translation of translations) {
   216     for (let translation of translations) {
   219         let [objs, msgs, orig] = translation;
   217         let [objs, msgs] = translation;
   220         let msg = langnum == 0 ? orig : msgs[langnum - 1];
   218         let msg = msgs[langnum];
   221         for (let obj of objs) {
   219         for (let obj of objs) {
   222             multiline_to_svg_text(obj, msg);
   220             multiline_to_svg_text(obj, msg);
   223             obj.setAttribute("lang",langnum);
   221             obj.setAttribute("lang",langnum);
   224         }
   222         }
   225     }
   223     }
   226     current_lang = langnum;
   224     return langnum;
   227 }
   225 }
   228 
   226 
   229 // backup original texts
   227 // backup original texts
   230 for (let translation of translations) {
   228 for (let translation of translations) {
   231     let [objs] = translation;
   229     let [objs, msgs] = translation;
   232     translation.push(svg_text_to_multiline(objs[0])); 
   230     msgs.unshift(svg_text_to_multiline(objs[0])); 
   233 }
   231 }
   234 
   232 
   235 var lang_local_index = hmi_local_index("lang");
   233 var lang_local_index = hmi_local_index("lang");
       
   234 var langcode_local_index = hmi_local_index("lang_code");
       
   235 var langname_local_index = hmi_local_index("lang_name");
   236 subscribers(lang_local_index).add({
   236 subscribers(lang_local_index).add({
   237     indexes: [lang_local_index],
   237     indexes: [lang_local_index],
   238     new_hmi_value: function(index, value, oldval) {
   238     new_hmi_value: function(index, value, oldval) {
   239         switch_langnum(value);
   239         let current_lang =  switch_langnum(value);
       
   240         let [langname,langcode] = langs[current_lang];
       
   241         apply_hmi_value(langcode_local_index, langcode);
       
   242         apply_hmi_value(langname_local_index, langname);
   240         switch_page();
   243         switch_page();
   241     }
   244     }
   242 });
   245 });
   243 var current_lang = 0;
   246 
   244 switch_langnum(cache[lang_local_index]);
   247 function setup_lang(){
       
   248     let current_lang = cache[lang_local_index];
       
   249     let new_lang = switch_langnum(current_lang);
       
   250     if(current_lang != new_lang){
       
   251         apply_hmi_value(lang_local_index, new_lang);
       
   252     }
       
   253 }
       
   254 
       
   255 setup_lang();
   245 
   256 
   246 function update_subscriptions() {
   257 function update_subscriptions() {
   247     let delta = [];
   258     let delta = [];
   248     for(let index in subscriptions){
   259     for(let index in subscriptions){
   249         let widgets = subscribers(index);
   260         let widgets = subscribers(index);