if (! MIM.debug_nodes)
{
MIM.debug_nodes = new Array ();
- MIM.debug_nodes['status'] = document.getElementById ('status');
- MIM.debug_nodes['range'] = document.getElementById ('range');
MIM.debug_nodes['keydown'] = document.getElementById ('keydown');
MIM.debug_nodes['keypress'] = document.getElementById ('keypress');
- MIM.debug_nodes['keyseq'] = document.getElementById ('keyseq');
+ MIM.debug_nodes['status0'] = document.getElementById ('status0');
+ MIM.debug_nodes['status1'] = document.getElementById ('status1');
+ MIM.debug_nodes['keyseq0'] = document.getElementById ('keyseq0');
+ MIM.debug_nodes['keyseq1'] = document.getElementById ('keyseq1');
+ MIM.debug_nodes['range0'] = document.getElementById ('range0');
+ MIM.debug_nodes['range1'] = document.getElementById ('range1');
}
var target = event.target;
var code = event.keyCode;
var ch = event.type == 'keydown' ? 0 : event.charCode;
var key = MIM.decode_key (event);
var keyseq = "";
+ var index;
MIM.debug_nodes[event.type].innerHTML = "" + code + "/" + ch + " : " + key;
- MIM.debug_nodes['status'].innerHTML = ic.im.status;
+ index = (event.type == 'keydown' ? '0' : '1');
+ MIM.debug_nodes['status' + index].innerHTML = ic.im.status;
for (var i = 0; i < ic.keyseq.length; i++)
keyseq += ic.keyseq[i];
- MIM.debug_nodes['keyseq'].innerHTML = keyseq + ":" + ic.keyseq.length;
- MIM.debug_nodes['range'].innerHTML = "" + ic.range[0] + "," + ic.range[1];;
+ MIM.debug_nodes['keyseq' + index].innerHTML
+ = keyseq + ":" + ic.keyseq.length;
+ MIM.debug_nodes['range' + index].innerHTML
+ = "" + ic.range[0] + ":" + ic.range[1];
};
MIM.get_range = function (target, range)
{
- if (target.selectionStart != null)
+ if (target.selectionStart != null) // for Mozilla
{
- // for Mozilla
range[0] = target.selectionStart;
range[1] = target.selectionEnd;
- return true;
}
- if (document.selection != null)
+ else // for IE
{
- target.focus();
-
- var range = document.selection.createRange ();
- var bookmark = range.getBookmark ();
- var value = target.value;
- var saved_value = value;
- var marker = "_#_MARKER_#_";
- while (value.indexOf (marker) != -1)
- marker += "#_";
- var parent = range.parentElement ();
- if (parent == null || parent.type != "textarea")
- {
- range[0] = range[1] = 0;
- }
- else
- {
- range.text = marker + range.text + marker;
- contents = this.element.value;
- range[0] = contents.indexOf (marker);
- contents = contents.replace(marker, "");
- range[1] = contents.indexOf(marker);
- target.value = originalContents;
- range.moveToBookmark (bookmark);
- range.select ();
- }
- return true;
+ var r = document.selection.createRange ();
+ var rr = r.duplicate ();
+
+ rr.moveToElementText (target);
+ rr.setEndPoint ('EndToEnd', range);
+ range[0] = rr.text.length - r.text.length;
+ range[1] = rr.text.length;
}
- return false;
-};
+}
MIM.set_caret = function (target, pos)
{
- if(/*@cc_on ! @*/ false) // IE
- {
- var range = target.createTextRange ();
- range.move ('character', pos);
- ranges.elect ();
- return true;
- }
if (target.selectionStart != null) // Mozilla
{
target.focus ();
target.setSelectionRange (pos, pos);
- return true;
}
- // Unknown
- target.focus ();
- return false;
+ else // IE
+ {
+ var range = target.createTextRange ();
+ range.move ('character', pos);
+ range.select ();
+ }
};
MIM.ic = function (im, target)
this.target = target;
this.key = false;
this.keyseq = new Array ();
- this.range = new Array (-1, -1);
+ this.range = new Array (0, 0);
return this;
};
this.key = false;
while (this.keyseq.length > 0)
this.keyseq.pop ();
- this.range[0] = this.range[1] = -1;
};
-MIM.ic.prototype.check_caret = function ()
+MIM.ic.prototype.check_range = function ()
{
- var from = this.range[0];
- var to = this.range[1];
+ var from = this.range[0], to = this.range[1];
MIM.get_range (this.target, this.range);
- if (from >= 0)
- {
- if (this.range[0] != this.range[1] || to != this.range[0])
- this.reset ();
- else
- this.range[0] = from;
- }
+ if (this.range[0] != this.range[1] || to != this.range[1])
+ this.reset ();
+ else
+ this.range[0] = from;
};
MIM.insert = function (ic, insert)
{
MIM.insert (ic, map['_target_text']);
if (! ('_has_child' in map))
- ic.reset ();
+ {
+ ic.reset ();
+ ic.range[0] = ic.range[1];
+ }
event.preventDefault ();
//document.getElementById ('text').value
//= keyseq_string (ic.keyseq) + " handled";
MIM.keydown = function (event)
{
- if (! (event.target.type == "text" || event.target.type == "textarea"))
+ var target = event.target;
+ if (! (target.type == "text" || target.type == "textarea"))
return;
- var ic = event.target.mim_ic;
+ var ic = target.mim_ic;
if (! ic || ic.im != MIM.current_im)
{
- ic = new MIM.ic (MIM.current_im, event.target);
- event.target.mim_ic = ic;
+ ic = new MIM.ic (MIM.current_im, target);
+ target.mim_ic = ic;
+ MIM.add_event_listener (target, 'blur', MIM.reset_ic);
}
- MIM.add_event_listener (event.target, 'blur', MIM.reset_ic);
- MIM.debug_print (event, ic);
if (ic.im.status < 0)
return;
- ic.check_caret ();
+ ic.check_range ();
+ MIM.debug_print (event, ic);
ic.key = MIM.decode_key (event);
};
var ic = event.target.mim_ic;
var i;
- MIM.debug_print (event, ic);
- if (ic.im.status < 0)
- return;
- if (! ic.key)
- ic.key = MIM.decode_key (event);
- if (! ic.key)
- {
- ic.reset ();
+ try {
+ if (ic.im.status < 0)
return;
- }
- ic.keyseq.push (ic.key);
- if (ic.im.status == 1) // Still loading.
- return;
- MIM.handle_keyseq (event, ic);
+ if (! ic.key)
+ ic.key = MIM.decode_key (event);
+ if (! ic.key)
+ {
+ ic.reset ();
+ return;
+ }
+ ic.keyseq.push (ic.key);
+ if (ic.im.status == 1) // Still loading.
+ return;
+ MIM.handle_keyseq (event, ic);
+ } finally {
+ MIM.debug_print (event, ic);
+ }
return;
};
MIM.server = 'http://localhost/mim';
MIM.current_im = MIM.register ('latin', 'post', 'latn-post.js');
MIM.register ('th', 'kesmanee', 'th-kesmanee.js');
- MIM.load_sync (MIM.current_im);
+ MIM.load (MIM.current_im);
};
MIM.init_debug = function ()