🎨 Cannot use the Microsoft Input Method to input Chinese https://github.com/siyuan-note/siyuan/issues/13288

This commit is contained in:
Daniel 2024-11-27 10:43:54 +08:00
parent 2fb42c5b8c
commit f441a37d50
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
2 changed files with 15 additions and 2 deletions

View file

@ -2009,6 +2009,15 @@ export class WYSIWYG {
let isComposition = false; // for iPhone
this.element.addEventListener("compositionstart", (event) => {
isComposition = true;
// 微软双拼由于 focusByRange 导致无法输入文字,因此不再 keydown 中记录了,但 keyup 会记录拼音字符,因此使用 isComposition 阻止 keyup 记录。
// 但搜狗输入法选中后继续输入不走 keydownisComposition 阻止了 keyup 记录,因此需在此记录。
const range = getEditorRange(protyle.wysiwyg.element);
const nodeElement = hasClosestBlock(range.startContainer);
if (!isMac() && nodeElement) {
range.insertNode(document.createElement("wbr"));
protyle.wysiwyg.lastHTMLs[nodeElement.getAttribute("data-node-id")] = nodeElement.outerHTML;
nodeElement.querySelector("wbr").remove();
}
event.stopPropagation();
});
@ -2086,8 +2095,10 @@ export class WYSIWYG {
event.key !== "Meta" && event.key !== "Alt" && event.key !== "Control" && event.key !== "CapsLock" &&
!event.ctrlKey && !event.shiftKey && !event.metaKey && !event.altKey &&
!/^F\d{1,2}$/.test(event.key)) {
// 搜狗输入法不走 keydown需重新记录历史状态
// 搜狗输入法不走 keydown没有选中字符后不走 compositionstart需重新记录历史状态
if (!isMac() && nodeElement &&
// 微软双拼 keyup 会记录拼音字符,因此在 compositionstart 记录
!isComposition &&
(typeof protyle.wysiwyg.lastHTMLs[nodeElement.getAttribute("data-node-id")] === "undefined" || range.toString() !== "" || !this.preventKeyup)) {
range.insertNode(document.createElement("wbr"));
protyle.wysiwyg.lastHTMLs[nodeElement.getAttribute("data-node-id")] = nodeElement.outerHTML;

View file

@ -166,7 +166,9 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => {
// 有可能输入 shift+. ,因此需要使用 event.key 来进行判断
if (event.key !== "PageUp" && event.key !== "PageDown" && event.key !== "Home" && event.key !== "End" && event.key.indexOf("Arrow") === -1 &&
event.key !== "Escape" && event.key !== "Shift" && event.key !== "Meta" && event.key !== "Alt" && event.key !== "Control" && event.key !== "CapsLock" &&
!isNotEditBlock(nodeElement) && !/^F\d{1,2}$/.test(event.key)) {
!isNotEditBlock(nodeElement) && !/^F\d{1,2}$/.test(event.key) &&
// 微软双拼使用 compositionstart否则 focusByRange 导致无法输入文字
event.key !== "Process") {
const cloneRange = range.cloneRange();
range.collapse(false);
range.insertNode(document.createElement("wbr"));