diff --git a/lib/ace/keyboard/textinput.js b/lib/ace/keyboard/textinput.js index dfad806b..4e07d24a 100644 --- a/lib/ace/keyboard/textinput.js +++ b/lib/ace/keyboard/textinput.js @@ -78,17 +78,25 @@ var TextInput = function(parentNode, host) { var tempStyle = ''; function resetValue() { + if (inCompostion) + return; text.value = PLACEHOLDER; //http://code.google.com/p/chromium/issues/detail?id=76516 - if (useragent.isWebKit && !resetTimeout) + if (!resetTimeout) { resetTimeout = setTimeout(function(){ - text.value = PLACEHOLDER; - resetSelection(); resetTimeout = null; + if (inCompostion) + return; + if (useragent.isWebKit) + text.value = PLACEHOLDER; + resetSelection(); }); + } }; function resetSelection(isEmpty) { + if (inCompostion) + return; var selectionStart = isEmpty ? 2 : 1; var selectionEnd = 2; // on firefox this throws if textarea is hidden @@ -125,31 +133,30 @@ var TextInput = function(parentNode, host) { var onInput = function(e) { if (inCompostion) return; + var data = text.value; + resetValue(); if (pasted) { - var data = text.value; - resetValue(); + resetSelection(); if (data) host.onPaste(data); pasted = false; - return; + } else if (data == PLACEHOLDER[0]) { + host.execCommand("del", {source: "ace"}); + } else { + if (data.substring(0, 2) == PLACEHOLDER) + data = data.substr(2); + else if (data[0] == PLACEHOLDER[0]) + data = data.substr(1); + + if (data) { + // can happen if undo in textarea isn't stopped + if (data[data.length - 1] == PLACEHOLDER[0]) + data = data.slice(0, -1); + if (data) + host.onTextInput(data); + } } - - var data = text.value; - if (data.substring(0, 2) == PLACEHOLDER) - data = data.substr(2); - else - data = data.substr(1); - - resetValue(); - if (data) { - // can happen if undo in textarea isn't stopped - if (data[data.length - 1] == PLACEHOLDER[0]) - data = data.slice(0, -1); - if (data) - host.onTextInput(data); - } else - host.onDelete(); }; var onCompositionStart = function(e) { @@ -238,6 +245,8 @@ var TextInput = function(parentNode, host) { var data = clipboardData.getData("Text"); if (data) host.onPaste(data); + if (useragent.isIE) + setTimeout(resetSelection); event.preventDefault(e); } else {