Commit 597cad3b authored by Oleg Korshul's avatar Oleg Korshul

ie mode (full version) + unvisible plugin show

parent 46c5b61d
...@@ -195,6 +195,8 @@ ...@@ -195,6 +195,8 @@
ifr.style.overflow = 'hidden'; ifr.style.overflow = 'hidden';
ifr.style.zIndex = -1000; ifr.style.zIndex = -1000;
document.body.appendChild(ifr); document.body.appendChild(ifr);
this.api.sendEvent("asc_onPluginShow", this.current, this.currentVariation);
} }
}, },
......
...@@ -156,6 +156,7 @@ ...@@ -156,6 +156,7 @@
// еще один режим для ie & edge // еще один режим для ie & edge
this.IsUseInputEventOnlyWithCtx = (AscCommon.AscBrowser.isIE) ? true : false; this.IsUseInputEventOnlyWithCtx = (AscCommon.AscBrowser.isIE) ? true : false;
this.IsInitialInputContext = false;
} }
CTextInput.prototype = CTextInput.prototype =
...@@ -359,10 +360,10 @@ ...@@ -359,10 +360,10 @@
if (isFromCompositionEnd !== true) if (isFromCompositionEnd !== true)
{ {
this.putAreaValue("");
this.ieNonCompositionPrefix = ""; this.ieNonCompositionPrefix = "";
this.ieNonCompositionPrefixConfirm = ""; this.ieNonCompositionPrefixConfirm = "";
this.putAreaValue("");
} }
}, },
...@@ -547,6 +548,7 @@ ...@@ -547,6 +548,7 @@
this.Api.End_CompositeInput(); this.Api.End_CompositeInput();
} }
/*
if (this.IsUseInputEventOnlyWithCtx) if (this.IsUseInputEventOnlyWithCtx)
{ {
var ctx = e.target["msGetInputContext"](); var ctx = e.target["msGetInputContext"]();
...@@ -606,6 +608,7 @@ ...@@ -606,6 +608,7 @@
ti_console_log_ms("input_end"); ti_console_log_ms("input_end");
} }
} }
*/
if (c_oCompositionState.end == this.compositionState) if (c_oCompositionState.end == this.compositionState)
{ {
...@@ -635,7 +638,7 @@ ...@@ -635,7 +638,7 @@
ti_console_log("ti: ea space"); ti_console_log("ti: ea space");
} }
if (!AscCommon.AscBrowser.isMozilla) if (!AscCommon.AscBrowser.isMozilla && !this.IsUseInputEventOnlyWithCtx)
{ {
// у мозиллы есть проблемы, если делать тут clear // у мозиллы есть проблемы, если делать тут clear
// например на корейском языке - слетает композиция в некоторых случаях // например на корейском языке - слетает композиция в некоторых случаях
...@@ -917,7 +920,7 @@ ...@@ -917,7 +920,7 @@
this.clear(); this.clear();
var _ret = this.Api.onKeyDown(e); var _ret = this.Api.onKeyDown(e);
if (!e.defaultPrevented && (AscCommon.AscBrowser.isIE || AscCommon.AscBrowser.isChrome)) if (!e.defaultPrevented && AscCommon.AscBrowser.isChrome)
this.isChromeKeysNoKeyPressPresent = true; this.isChromeKeysNoKeyPressPresent = true;
}, },
...@@ -1050,7 +1053,7 @@ ...@@ -1050,7 +1053,7 @@
this.Api.Begin_CompositeInput(); this.Api.Begin_CompositeInput();
this.compositionState = c_oCompositionState.start; this.compositionState = c_oCompositionState.start;
this.isChromeKeysNoKeyPressPresentStartValue = this.getAreaValue(); this.msCheskComposition(e, c_oCompositionState.start);
return; return;
} }
...@@ -1096,6 +1099,7 @@ ...@@ -1096,6 +1099,7 @@
{ {
if (this.IsUseInputEventOnlyWithCtx) if (this.IsUseInputEventOnlyWithCtx)
{ {
this.msCheskComposition(e, c_oCompositionState.process);
return; return;
} }
...@@ -1256,37 +1260,104 @@ ...@@ -1256,37 +1260,104 @@
return false; return false;
}, },
onCompositionEnd : function(e, _data) msCheskComposition : function(e, type)
{ {
if (this.IsUseInputEventOnlyWithCtx) var _locale = e.locale;
if (_locale == undefined || _locale == null)
_locale = "";
var isNoUseCtx = ((_locale.indexOf("zh-Hant") == 0) || (_locale.indexOf("zh-Hans") == 0)) ? true : false;
// этот код нарушает китайский ввод (написать много, и начать выбирать мышкой!!! по короткими частям)
// но пока так. иначе проблемы на корейском
if (this.IsInitialInputContext || !isNoUseCtx)
{ {
if (AscCommon.AscBrowser.isIE && e.target["msGetInputContext"]) var ctx = e.target["msGetInputContext"] ? e.target["msGetInputContext"]() : null;
{ this.IsInitialInputContext = true;
var ctx = e.target["msGetInputContext"]();
if (ctx["compositionStartOffset"] == ctx["compositionEndOffset"]) if (type == c_oCompositionState.end)
{
if (ctx)
{ {
//var _value = this.getAreaValue(); if (undefined != ctx["compositionStartOffset"] && undefined != ctx["compositionEndOffset"] &&
//console.log("natural composite end: " + _value); ctx["compositionEndOffset"] > ctx["compositionStartOffset"])
{
// не натуральный end!!!
type = c_oCompositionState.process;
}
}
}
}
if (e.data == "") var _value = this.getAreaValue();
this.Api.Replace_CompositeText([]); var _data = e.data;
this.Api.End_CompositeInput(); // определяем дату композиции
var _compositionData = _data;
var _compositionConfirm = _value;
this.unlockTarget(); if (this.ieNonCompositionPrefixConfirm != "")
this.TextInputAfterComposition = true; {
if (_value.indexOf(this.ieNonCompositionPrefixConfirm) != 0)
{
// по идее нужно стереть, но мы пока просто заканчиваем ввод
this.externalEndCompositeInput();
return;
}
}
this.clear(true); if ("" != _compositionData)
this.ieNonCompositionPrefixConfirm = this.getAreaValue(); {
var _index = _value.lastIndexOf(_compositionData);
if (-1 != _index)
_compositionConfirm = _compositionConfirm.substr(0, _index);
}
// нужно выставить курсор в конец, а то ie позволяет уйти курсором за пределы композитной даты var _offset = this.ieNonCompositionPrefixConfirm.length - _compositionConfirm.length;
var _pos = this.getAreaPos(); if (_offset < 0)
if (_pos < this.ieNonCompositionPrefixConfirm.length) {
this.clear(); this.ieNonCompositionPrefixConfirm = _compositionConfirm;
}
} var _newConfirm = this.ieNonCompositionPrefixConfirm.substr(this.ieNonCompositionPrefixConfirm.length + _offset);
this.checkCompositionData(_newConfirm);
this.Api.Replace_CompositeText(this.compositionValue);
this.Api.End_CompositeInput();
this.Api.Begin_CompositeInput();
}
else if (_offset > 0)
{
if (_offset >= _compositionData.length)
_compositionData = "";
else
_compositionData = _data.substr(_offset);
}
this.checkCompositionData(_compositionData);
this.Api.Replace_CompositeText(this.compositionValue);
if (type == c_oCompositionState.end)
{
this.Api.End_CompositeInput();
this.unlockTarget();
this.TextInputAfterComposition = true;
this.clear(true);
this.ieNonCompositionPrefixConfirm = _value;
// нужно выставить курсор в конец, а то ie позволяет уйти курсором за пределы композитной даты
var _pos = this.getAreaPos();
if (_pos < this.ieNonCompositionPrefixConfirm.length)
this.clear();
}
},
onCompositionEnd : function(e, _data)
{
if (this.IsUseInputEventOnlyWithCtx)
{
this.msCheskComposition(e, c_oCompositionState.end);
return; return;
} }
...@@ -1380,7 +1451,7 @@ ...@@ -1380,7 +1451,7 @@
externalEndCompositeInput : function() externalEndCompositeInput : function()
{ {
this.clear();
} }
}; };
...@@ -1447,7 +1518,12 @@ ...@@ -1447,7 +1518,12 @@
var _oldNativeFE = t.nativeFocusElement; var _oldNativeFE = t.nativeFocusElement;
t.nativeFocusElement = e.target; t.nativeFocusElement = e.target;
//console.log(t.nativeFocusElement); if (t.compositionState != c_oCompositionState.end)
{
t.Api.End_CompositeInput();
t.externalEndCompositeInput();
}
var _nativeFocusElementNoRemoveOnElementFocus = t.nativeFocusElementNoRemoveOnElementFocus; var _nativeFocusElementNoRemoveOnElementFocus = t.nativeFocusElementNoRemoveOnElementFocus;
t.nativeFocusElementNoRemoveOnElementFocus = false; t.nativeFocusElementNoRemoveOnElementFocus = false;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment