fix typing on ie8

This commit is contained in:
nightwing 2012-12-06 01:48:14 +04:00
commit d11b01c313

View file

@ -88,16 +88,37 @@ var TextInput = function(parentNode, host) {
}
}
if (useragent.isOldIE) {
event.addListener(text, "propertychange", function(e){
if (text.value != "" && text.value != PLACEHOLDER)
onInput(e);
});
var propchangeTimeout;
var propertyChangeCounter = 0;
var onPropertyChange = function(e){
if (propertyChangeCounter)
return;
var data = text.value;
if (inCompostion || !data || data == PLACEHOLDER)
return;
// can happen either after delete or during insert operation
if (e && data == PLACEHOLDER[0]) {
if (!propchangeTimeout) {
propchangeTimeout = setTimeout(function() {
onPropertyChange();
propchangeTimeout = null;
});
}
return;
}
sendText(data);
propertyChangeCounter++
resetValue();
propertyChangeCounter--
}
event.addListener(text, "propertychange", onPropertyChange);
var keytable = { 13:1, 27:1 };
event.addListener(text, "keyup", function (e) {
if (inCompostion && (!text.value || keytable[e.keyCode]))
setTimeout(onCompositionEnd, 0);
if ((text.value.charCodeAt(0)|0) < 129) {
if ((text.value.charCodeAt(0)||0) < 129) {
return;
}
inCompostion ? onCompositionUpdate() : onCompositionStart();
@ -147,12 +168,7 @@ var TextInput = function(parentNode, host) {
}
};
var onInput = function(e) {
if (inCompostion)
return;
var data = text.value;
resetValue();
var sendText = function(data) {
if (pasted) {
resetSelection();
if (data)
@ -165,16 +181,24 @@ var TextInput = function(parentNode, host) {
data = data.substr(2);
else if (data[0] == PLACEHOLDER[0])
data = data.substr(1);
else if (data[data.length - 1] == PLACEHOLDER[0])
data = data.slice(0, -1);
// can happen if undo in textarea isn't stopped
if (data[data.length - 1] == PLACEHOLDER[0])
data = data.slice(0, -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);
}
if (data)
host.onTextInput(data);
}
};
var onInput = function(e) {
if (inCompostion)
return;
var data = text.value;
resetValue();
sendText(data);
};
var onCompositionStart = function(e) {
inCompostion = true;