From 5f52f0727ea07f445b9fa556ca0fbef034adb541 Mon Sep 17 00:00:00 2001 From: handa Date: Mon, 15 Mar 2010 00:11:03 +0000 Subject: [PATCH] *** empty log message *** --- xex.html | 2 +- xex.js | 94 +++++++++++++++++++++++++++++++++++++++++++++++++------------- 2 files changed, 75 insertions(+), 21 deletions(-) diff --git a/xex.html b/xex.html index b62260f..f60ee20 100644 --- a/xex.html +++ b/xex.html @@ -4,7 +4,7 @@ diff --git a/xex.js b/xex.js index 4ad5b75..4f567b0 100644 --- a/xex.js +++ b/xex.js @@ -2,7 +2,7 @@ var Xex = { LogNode: null, - Log: function (arg, indent) + Log: function (arg, indent, cont) { if (! Xex.LogNode) return; @@ -14,7 +14,9 @@ var Xex = { if (indent != undefined) for (var i = 0; i <= indent; i++) str += ' '; - Xex.LogNode.value += "\n" + str + arg; + if (! cont) + Xex.LogNode.value += "\n"; + Xex.LogNode.value += str + arg; Xex.LogNode.scrollTop = Xex.LogNode.scrollHeight; } } @@ -2021,6 +2023,38 @@ MIM.State = function (name) } return this.Current (); } + + MIM.Candidates.prototype.CurrentGroup = function (selector) + { + var col, start, end + if (this.column > 0) + { + col = this.index % this.column; + start = this.index - col; + end = start + this.column; + if (end > this.total) + end = this.total; + } + else + { + start = this.blocks[this.row].Index; + col = this.index - start; + end = start + this.blocks[this.row].Count (); + } + var group = new Array (); + group.push (col); + var row = this.row; + var block = this.blocks[row++]; + while (start < end) + { + var c = block.get (start - block.Index); + group.push (c); + start++; + if (start == block.Index + block.Count ()) + block = this.blocks[row++]; + } + return group; + } }) (); MIM.im_domain = new Xex.Domain ('input-method', null, null); @@ -2496,7 +2530,7 @@ MIM.im_domain.DefType (MIM.State.prototype); if (out.index > this.key_head) { this.key_head = out.index; - Xex.Log (' with submap for ' + this.key_head + 'keys'); + Xex.Log (' with submap for ' + this.key_head + 'keys', false, true); restore_state.call (this); this.keymap = sub; if (sub.map_actions) @@ -2529,7 +2563,7 @@ MIM.im_domain.DefType (MIM.State.prototype); } else { - Xex.Log (' without submap'); + Xex.Log (' without submap', false, true); this.keymap = sub; var current_state = this.state; var map = this.keymap; @@ -2682,6 +2716,7 @@ MIM.im_domain.DefType (MIM.State.prototype); { this.preedit_replace (this.cursor_pos, this.cursor_pos, text, candidates); this.changed = MIM.ChangedStatus.Preedit | MIM.ChangedStatus.CursorPos; + this.candidates = candidates; }, rep: function (old_text, new_text, candidates) @@ -2844,7 +2879,6 @@ MIM.im_domain.DefType (MIM.State.prototype); this.key_unhandled = false; this.keys.val.push (key); var count = 0; - Xex.Log ("keyhead=" + this.key_head + " len="+this.keys.val.length); while (this.key_head < this.keys.val.length) { if (! handle_key.call (this)) @@ -2884,6 +2918,14 @@ MIM.im_domain.DefType (MIM.State.prototype); //this.keys.val.splice (0, this.keys.val.length); this.key_head = this.state_key_head = this.commit_key_head = 0; } + MIM.show (this); + if (false && (this.changed & MIM.ChangedStatus.Candidate)) + { + if (this.candidate_show) + MIM.show (this); + else + MIM.hide (this); + } return (! this.key_unhandled && this.produced.length == 0); } @@ -3153,18 +3195,20 @@ MIM.update = function (target, ic) function copy_style (from, to) { var from_style = getComputedStyle(from,''); - for(var name in style_props) to.style[name] = from_style.getPropertyValue (style_props[name]); - to.style.left = from.offsetLeft + 'px'; to.style.top = from.offsetTop + 'px'; to.style.width = from.offsetWidth; to.style.height = from.offsetHeight; } - MIM.show = function (target, ic) + MIM.show = function (ic) { + Xex.Log ('show:' + ic.candidates); + if (! ic.candidates) + return; + var target = ic.target; if (! ic.div_node) { ic.target_top = 0; @@ -3175,32 +3219,43 @@ MIM.update = function (target, ic) ic.target_left += elm.offsetLeft; } ic.div_node = document.createElement ('div'); + copy_style (target, ic.div_node); ic.div_node.style.visibility="hidden"; ic.div_node.style.position = "absolute"; document.getElementsByTagName ('body')[0].appendChild (ic.div_node); ic.div_node_first = document.createElement ('span'); ic.div_node_last = document.createElement('span'); ic.div_node_last.innerHTML = '.'; - ic.can_node = document.createElement ('div'); - ic.can_node.appendChild (document.createTextNode ('1. abc')); - ic.can_node.appendChild (document.createTextNode ('2. def')); + ic.div_node.appendChild (ic.div_node_first); + ic.div_node.appendChild (ic.div_node_last); + ic.can_node = document.createElement ('table'); ic.can_node.style.position = 'absolute'; ic.can_node.style.display = 'none'; + ic.can_node.style.backgroundColor = "white"; + ic.can_node.style.border = "1px solid black"; document.getElementsByTagName ('body')[0].appendChild (ic.can_node); } - copy_style (target, ic.div_node); - ic.div_node.innerHTML = ''; + ic.can_node.innerHTML = ''; + var tr = document.createElement ('tr'); + ic.can_node.appendChild (tr); + var group = ic.candidates.CurrentGroup (); + for (var i = 1; i < group.length; i++) + { + var td = document.createElement ('td'); + td.nowrap = true; + td.innerHTML = i + '.' + group[i]; + if (i == group[0] + 1) + td.style.backgroundColor = 'lightblue'; + ic.can_node.appendChild (td); + } ic.div_node_first.innerHTML = target.value.substr (0, ic.range[0]); - ic.div_node.appendChild (ic.div_node_first); - ic.div_node.appendChild (ic.div_node_last); - Xex.Log (ic.div_node.firstChild.innerHTML); var x = ic.target_left + ic.div_node.lastChild.offsetLeft; - var y = ic.target_top + ic.div_node.lastChild.offsetTop - target.scrollTop; + var y = (ic.target_top + ic.div_node.lastChild.offsetTop + + ic.div_node.lastChild.offsetHeight - target.scrollTop + 10); ic.can_node.style.left = x + 'px'; ic.can_node.style.top = y + 'px'; ic.can_node.style.display = 'block'; - Xex.Log ("x:" + x + "px y:" + y + "px"); } }) (); @@ -3263,7 +3318,7 @@ MIM.keydown = function (event) if (! MIM.get_range (target, ic)) ic.reset (); } - MIM.show (target, ic); + //MIM.show (target, ic); MIM.debug_print (event, ic); ic.key = MIM.decode_key_event (event); if (ic.key) @@ -3306,7 +3361,6 @@ MIM.keypress = function (event) Xex.Log ("filtering " + ic.key); try { var result = ic.Filter (ic.key); - Xex.Log ("result = " + result); } catch (e) { Xex.Log ('Error:' + e); throw (e); -- 1.7.10.4