{
if (! Xex.LogNode)
return;
- var str = '';
- if (indent != undefined)
- for (var i = 0; i <= indent; i++)
- str += ' ';
- Xex.LogNode.value = str + arg + "\n" + Xex.LogNode.value;
+ if (! arg)
+ Xex.LogNode.value = '';
+ else
+ {
+ var str = '';
+ if (indent != undefined)
+ for (var i = 0; i <= indent; i++)
+ str += ' ';
+ Xex.LogNode.value = str + arg + "\n" + Xex.LogNode.value;
+ }
}
};
return;
};
-MIM.Lang = {
- European: new Array ('de', 'fr'),
- MiddleEast: new Array ('ar', 'he'),
- SouthAsia: new Array ('hi'),
- SouthEastAsia: new Array ('th'),
- EastAsia: new Array ('ja', 'zh'),
- Other: new Array ()
-};
+(function () {
+ var lang_category = {
+ European: {
+ cs: { name: 'Czech' },
+ da: { name: 'Danish' },
+ el: { name: 'Greek' },
+ eo: { name: 'Esperanto' },
+ fr: { name: 'French' },
+ hr: { name: 'Croatian' },
+ hy: { name: 'Armenian' },
+ kk: { name: 'Kazakh' },
+ ru: { name: 'Russian' },
+ sk: { name: 'Slovak' },
+ sr: { name: 'Serbian' },
+ sv: { name: 'Swedish' },
+ vi: { name: 'Vietnamese' },
+ yi: { name: 'Yiddish' } },
+ MiddleEast: {
+ ar: { name: 'Arabic' },
+ dv: { name: 'Divehi' },
+ fa: { name: 'Persian' },
+ he: { name: 'Hebrew' },
+ kk: { name: 'Kazakh' },
+ ps: { name: 'Pushto' },
+ ug: { name: 'Uighur' },
+ yi: { name: 'Yiddish' } },
+ SouthAsia: {
+ as: { name: 'Assamese' },
+ bn: { name: 'Bengali' },
+ bo: { name: 'Tibetan' },
+ gu: { name: 'Gujarati' },
+ hi: { name: 'Hindi' },
+ kn: { name: 'Kannada' },
+ ks: { name: 'Kashmiri' },
+ ml: { name: 'Malayalam' },
+ mr: { name: 'Marathi' },
+ ne: { name: 'Nepali' },
+ or: { name: 'Oriya' },
+ pa: { name: 'Panjabi' },
+ sa: { name: 'Sanskirit' },
+ sd: { name: 'Sindhi' },
+ si: { name: 'Sinhalese' },
+ ta: { name: 'Tamil' },
+ te: { name: 'Telugu' },
+ ur: { name: 'Urdu' } },
+ SouthEastAsia: {
+ km: { name: 'Khmer'},
+ lo: { name: 'Lao' },
+ my: { name: 'Burmese' },
+ tai: { name: 'Tai Viet' },
+ th: { name: 'Thai' },
+ vi: { name: 'Vietanamese' } },
+ EastAsia: {
+ ii: { name: 'Yii' },
+ ja: { name: 'Japanese' },
+ ko: { name: 'Korean' },
+ zh: { name: 'Chinese' } },
+ Other: {
+ am: { name: 'Amharic' },
+ ath: { name: 'Carrier' },
+ bla: { name: 'Blackfoot' },
+ cr: { name: 'Cree' },
+ eo: { name: 'Esperanto' },
+ iu: { name: 'Inuktitut' },
+ nsk: { name: 'Naskapi' },
+ oj: { name: 'Ojibwe' } }
+ };
+
+ function categorize_im ()
+ {
+ var cat, lang, list, name;
+ for (lang in MIM.imlist)
+ {
+ list = null;
+ for (cat in lang_category)
+ if (lang_category[cat][lang])
+ {
+ list = lang_category[cat][lang].list;
+ if (! list)
+ list = lang_category[cat][lang].list = {};
+ break;
+ }
+ if (list)
+ for (name in MIM.imlist[lang])
+ list[name] = MIM.imlist[lang][name];
+ }
+ }
-// Other
-// am
-// ath
-// bla
-// cr
-// el
-// eo
-// iu
-// nsk
-// oj
-
-// Middle Eastern
-// ar
-// dv
-// fa
-// he
-// hi
-// kk
-// ps
-// ug
-// yi*
-
-// South Asian
-// as
-// bn
-// bo
-// gu
-// kn
-// ks
-// ml
-// mr
-// ne
-// or
-// pa
-// sd
-// sa
-// si
-// ta
-// te
-// ur
-
-// European
-// cs
-// da
-// eo
-// fr
-// hr
-// hy
-// kk
-// ru
-// sk
-// sr
-// sv
-// vi*
-// yi*
-
-// East Asian
-// ii
-// ja
-// ko
-// zh
-
-// SouthEast Asian
-// km
-// lo
-// my
-// tai
-// th
-// vi*
-
-MIM.select_im = function (event)
-{
- var target = event.target.parentNode;
- while (target.tagName != "mim-select-im")
- target = target.parentNode;
- var idx = 0;
- var im = false;
- for (var lang in MIM.imlist)
- for (var name in MIM.imlist[lang])
- if (idx++ == target.selectedIndex)
- {
- im = MIM.imlist[lang][name];
- break;
- }
- document.getElementsByTagName ('body')[0].removeChild (target);
- target.target.focus ();
- if (im && im != MIM.current)
- {
- MIM.current = im;
- Xex.Log ('select IM: ' + im.name);
- }
-};
+ var destroy_timer;
-MIM.destroy_menu = function (event)
-{
- if (event.target.tagName == "mim-select-im")
- document.getElementsByTagName ('body')[0].removeChild (event.target);
-};
+ function destroy ()
+ {
+ clearTimeout (destroy_timer);
+ var target = document.getElementById ('mim-menu');
+ if (target)
+ document.getElementsByTagName ('body')[0].removeChild (target);
+ }
-MIM.select_menu = function (event)
-{
- var target = event.target;
- var sel;
+ function destroy_menu () { destroy_timer = setTimeout (destroy, 1000); }
- if (! ((target.type == "text" || target.type == "textarea")
- && event.which == 1 && event.ctrlKey))
- return;
- if (! sel)
- {
- sel = document.createElement ('select');
- sel.onclick = MIM.select_im;
- sel.onmouseout = MIM.destroy_menu;
- sel.style.position='absolute';
- sel.style.left = (event.clientX - 10) + "px";
- sel.style.top = (event.clientY - 10) + "px";
- sel.target = target;
- var idx = 0;
- for (var lang in MIM.imlist)
- for (var name in MIM.imlist[lang])
+ var last_target;
+
+ function show_submenu (event)
+ {
+ if (destroy_timer)
+ clearTimeout (destroy_timer);
+ var target = event.target;
+ if (target.menu_level)
+ {
+ if (last_target && last_target.menu_level <= target.menu_level)
{
- var option = document.createElement ('option');
- var imname = lang + "-" + name;
- option.appendChild (document.createTextNode (imname));
- option.value = imname;
- sel.appendChild (option);
- if (MIM.imlist[lang][name] == MIM.current)
- sel.selectedIndex = idx;
- idx++;
+ last_target.style.backgroundColor = 'white';
+ var uls = last_target.getElementsByTagName ('ul');
+ for (var i = 0; i < uls.length; i++)
+ uls[i].style.visibility = 'hidden';
}
- sel.size = idx;
- }
- document.getElementsByTagName ('body')[0].appendChild (sel);
-};
+ last_target = target;
+ target.style.backgroundColor = 'yellow';
+ target.lastChild.style.visibility = 'visible';
+ target.lastChild.style.left = target.clientWidth + 'px';
+ event.preventDefault ();
+ }
+ }
+
+ function hide_submenu (event)
+ {
+ var target = event.target;
+ target.style.backgroundColor = 'white';
+ for (var ul = target.firstChild; ul; ul = ul.nextSibling)
+ if (ul.tagName == 'UL')
+ ul.style.visibility = 'hidden';
+ }
+
+ function select_im (event)
+ {
+ var target = event.target.parentNode;
+ while (target.tagName != "mim-menu")
+ target = target.parentNode;
+ var idx = 0;
+ var im = false;
+ for (var lang in MIM.imlist)
+ for (var name in MIM.imlist[lang])
+ if (idx++ == target.selectedIndex)
+ {
+ im = MIM.imlist[lang][name];
+ break;
+ }
+ document.getElementsByTagName ('body')[0].removeChild (target);
+ target.target.focus ();
+ if (im && im != MIM.current)
+ {
+ MIM.current = im;
+ Xex.Log ('select IM: ' + im.name);
+ }
+ }
-MIM.select_menu = function (event)
-{
- var target = event.target;
var menu;
- if (! ((target.type == "text" || target.type == "textarea")
- && event.which == 1 && event.ctrlKey))
- return;
- if (! menu)
- {
- menu = document.createElement ('ul');
- menu.style.margin = '0';
- menu.style.padding = '0';
- menu.id = 'mim-select-im';
- menu.onclick = MIM.select_im;
- menu.onmouseout = MIM.destroy_menu;
- menu.style.position='absolute';
- menu.style.left = (event.clientX - 10) + "px";
- menu.style.top = (event.clientY - 10) + "px";
- menu.style['border-bottom'] = '1px solid #ccc';
- menu.style['background-color'] = 'white';
- menu.target = target;
- var idx = 0;
- for (var lang in MIM.imlist)
- {
- var li = document.createElement ('li');
- li.style.position = 'relative';
- li.style['list-style']= 'none';
- li.style.margin = '0';
- li.style.padding = '0';
- li.onmouseover = function ()
+ function create_menu (event)
+ {
+ var target = event.target;
+
+ if (! ((target.type == "text" || target.type == "textarea")
+ && event.which == 1 && event.ctrlKey))
+ return;
+ if (! menu)
+ {
+ categorize_im ();
+ menu = document.createElement ('ul');
+ menu.style.fontFamily = 'sans-serif';
+ menu.style.fontWeight = 'bold';
+ menu.style.margin = '0px';
+ menu.style.padding = '0px';
+ menu.style.border = '1px solid gray';
+ menu.style.borderBottom = 'none';
+ menu.style.backgroundColor = 'white';
+ menu.style.position='absolute';
+ menu.style.left = (event.clientX - 10) + "px";
+ menu.style.top = (event.clientY - 10) + "px";
+ //menu.style.width = '100px';
+ menu.id = 'mim-menu';
+ menu.onclick = select_im;
+ menu.onmouseout = destroy_menu;
+ menu.target = target;
+ var idx = 0;
+ for (var catname in lang_category)
{
- this.style.backgroundColor = 'yellow';
- var children = this.getElementsByTagName ('ul');
- for (var i = children.length - 1; i >= 0; i--)
+ var cat = lang_category[catname];
+ var li = document.createElement ('li');
+ li.menu_level = 1;
+ li.style.position = 'relative';
+ li.style.listStyle= 'none';
+ li.style.margin = '0';
+ li.style.padding = '1px';
+ li.style.borderBottom = '1px solid gray';
+ li.onmouseover = show_submenu;
+ //li.onmouseout = hide_submenu;
+ li.appendChild (document.createTextNode (catname));
+ var sub = document.createElement ('ul');
+ sub.style.position = 'absolute';
+ sub.style.margin = '0px';
+ sub.style.padding = '0px';
+ sub.style.border = '1px solid gray';
+ sub.style.borderBottom = 'none';
+ sub.style.top = '-1px';
+ //sub.style.width = '100px';
+ sub.style.listStyle = 'disc inside';
+ sub.style.visibility = 'hidden';
+ sub.style.backgroundColor = 'white';
+ li.appendChild (sub);
+ for (var langname in cat)
{
- children[i].display = 'block';
- children[i].visibility = 'visible';
- children[i].left = '100px';
- }
- children = this.getElementsByTagName ('li');
- for (var i = children.length - 1; i >= 0; i--)
- {
- children[i].display = 'block';
- children[i].visibility = 'visible';
- children[i].left = '100px';
+ var lang = cat[langname];
+ if (! lang.list)
+ continue;
+ var sub_li = document.createElement ('li');
+ sub_li.menu_level = 2;
+ sub_li.style.position = 'relative';
+ sub_li.style.padding = '1px';
+ sub_li.style.borderBottom = '1px solid gray';
+ sub_li.style.listStyle= 'none';
+ sub_li.style.backgroundColor = 'white';
+ //sub_li.onmouseover = show_submenu;
+ //sub_li.onmouseout = hide_submenu;
+ sub_li.appendChild (document.createTextNode (lang.name));
+ sub.appendChild (sub_li);
+ var subsub = document.createElement ('ul');
+ subsub.style.position = 'absolute';
+ subsub.style.margin = '0px';
+ subsub.style.padding = '0px';
+ subsub.style.border = '1px solid gray';
+ subsub.style.borderBottom = 'none';
+ subsub.style.top = '-1px';
+ //subsub.style.width = '100px';
+ //subsub.style.listStyle = 'disc inside';
+ subsub.style.visibility = 'hidden';
+ subsub.style.backgroundColor = 'white';
+ for (var name in lang.list)
+ {
+ var im = lang.list[name];
+ var subsub_li = document.createElement ('li');
+ subsub_li.menu_level = 3;
+ subsub_li.style.position = 'relative';
+ subsub_li.style.padding = '1px';
+ subsub_li.style.borderBottom = '1px solid gray';
+ subsub_li.style.listStyle= 'none';
+ subsub_li.style.backgroundColor = 'white';
+ //subsub_li.onmouseover = show_submenu;
+ //subsub_li.onmouseout = hide_submenu;
+ subsub_li.appendChild (document.createTextNode (im.name));
+ subsub_li.im = im;
+ subsub.appendChild (subsub_li);
+ }
+ sub_li.appendChild (subsub);
+ idx++;
}
- };
- li.onmouseout = function () { this.style.backgroundColor = 'white'; };
- li.appendChild (document.createTextNode (lang));
- var sub = document.createElement ('ul');
- sub.style.position = 'absolute';
- sub.style.top = '0px';
- sub.style.visibility = 'hidden';
- li.appendChild (sub);
- for (var name in MIM.imlist[lang])
- {
- var sub_li = document.createElement ('li');
- var imname = ' ' + lang + "-" + name;
- sub_li.style.position = 'absolute';
- sub_li.style.top = '0px';
- sub_li.style['list-style']= 'none';
- //sub_li.style.visibility = 'hidden';
- sub_li.appendChild (document.createTextNode (imname));
- sub.appendChild (sub_li);
- if (MIM.imlist[lang][name] == MIM.current)
- menu.selectedIndex = idx;
- idx++;
- }
- menu.appendChild (li);
- }
- menu.size = idx;
- }
- document.getElementsByTagName ('body')[0].appendChild (menu);
-};
+ menu.appendChild (li);
+ }
+ document.mimmenu = menu;
+ }
+ document.getElementsByTagName ('body')[0].appendChild (menu);
+ };
+
+ MIM.init = function ()
+ {
+ MIM.add_event_listener (window, 'keydown', MIM.keydown);
+ MIM.add_event_listener (window, 'keypress', MIM.keypress);
+ MIM.add_event_listener (window, 'mousedown', create_menu);
+ if (window.location == 'http://localhost/mim/index.html')
+ MIM.server = 'http://localhost/mim';
+ MIM.current = MIM.imlist['vi']['telex'];
+ };
+}) ();
MIM.test = function ()
{
}
-MIM.init = function ()
-{
- MIM.add_event_listener (window, 'keydown', MIM.keydown);
- MIM.add_event_listener (window, 'keypress', MIM.keypress);
- MIM.add_event_listener (window, 'mousedown', MIM.select_menu);
- if (window.location == 'http://localhost/mim/index.html')
- MIM.server = 'http://localhost/mim';
- MIM.current = MIM.imlist['vi']['telex'];
-};
-
MIM.init_debug = function ()
{
MIM.debug = true;
Xex.LogNode = document.getElementById ('log');
+ Xex.Log (null);
MIM.init ();
};