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