Vanessa 2025-12-13 00:18:01 +08:00
parent 168e492c81
commit 87a0168222
4 changed files with 68 additions and 11 deletions

View file

@ -359,8 +359,6 @@ const initMainWindow = () => {
});
});
currentWindow.webContents.session.setSpellCheckerLanguages(["en-US"]);
// 发起互联网服务请求时绕过安全策略 https://github.com/siyuan-note/siyuan/issues/5516
currentWindow.webContents.session.webRequest.onBeforeSendHeaders((details, cb) => {
if (-1 < details.url.toLowerCase().indexOf("bili")) {
@ -787,6 +785,9 @@ app.whenReady().then(() => {
if (data.cmd === "getContentsId") {
return event.sender.id;
}
if (data.cmd === "getSpellCheckerLanguages") {
return event.sender.session.getSpellCheckerLanguages();
}
if (data.cmd === "setProxy") {
return setProxy(data.proxyURL, event.sender);
}
@ -894,6 +895,11 @@ app.whenReady().then(() => {
case "showItemInFolder":
shell.showItemInFolder(data.filePath);
break;
case "setSpellCheckerLanguages":
BrowserWindow.getAllWindows().forEach(item => {
item.webContents.session.setSpellCheckerLanguages(data.languages);
});
break;
case "openPath":
shell.openPath(data.filePath);
break;

View file

@ -114,6 +114,10 @@ const winOnMaxRestore = async () => {
export const initWindow = async (app: App) => {
/// #if !BROWSER
ipcRenderer.send(Constants.SIYUAN_CMD, {
cmd: "setSpellCheckerLanguages",
languages: window.siyuan.config.editor.spellcheckLanguages
});
const winOnClose = (close = false) => {
exportLayout({
cb() {

View file

@ -1,4 +1,7 @@
import {getAllModels} from "../layout/getAll";
/// #if !BROWSER
import {ipcRenderer} from "electron";
/// #endif
import {setInlineStyle} from "../util/assets";
import {fetchPost} from "../util/fetch";
import {confirmDialog} from "../dialog/confirmDialog";
@ -97,14 +100,17 @@ export const editor = {
<span class="fn__space"></span>
<input class="b3-switch fn__flex-center" id="listItemDotNumberClickFocus" type="checkbox"${window.siyuan.config.editor.listItemDotNumberClickFocus ? " checked" : ""}/>
</label>
<label class="fn__flex b3-label">
<div class="fn__flex-1">
${window.siyuan.languages.spellcheck}
<div class="b3-label__text">${window.siyuan.languages.spellcheckTip}</div>
</div>
<span class="fn__space"></span>
<input class="b3-switch fn__flex-center" id="spellcheck" type="checkbox"${window.siyuan.config.editor.spellcheck ? " checked" : ""}/>
</label>
<div class="b3-label">
<label class="fn__flex">
<div class="fn__flex-1">
${window.siyuan.languages.spellcheck}
<div class="b3-label__text">${window.siyuan.languages.spellcheckTip}</div>
</div>
<span class="fn__space"></span>
<input class="b3-switch fn__flex-center" id="spellcheck" type="checkbox"${window.siyuan.config.editor.spellcheck ? " checked" : ""}/>
</label>
<div class="b3-chips fn__none" id="spellcheckLanguages"></div>
</div>
<label class="fn__flex b3-label">
<div class="fn__flex-1">
${window.siyuan.languages.onlySearchForDoc}
@ -366,7 +372,33 @@ export const editor = {
<input class="b3-switch fn__flex-center" id="editorMarkdownInlineMark" type="checkbox"${window.siyuan.config.editor.markdown.inlineMark ? " checked" : ""}/>
</label>`;
},
bindEvent: () => {
bindEvent: async () => {
/// #if !BROWSER
const languages: string[] = await ipcRenderer.invoke(Constants.SIYUAN_GET, {
cmd: "getSpellCheckerLanguages",
});
let spellcheckLanguagesHTML = "";
languages.forEach(item => {
spellcheckLanguagesHTML = `<div class="fn__pointer b3-chip b3-chip--middle${window.siyuan.config.editor.spellcheckLanguages.includes(item) ? " b3-chip--current" : ""}">${item}</div>`;
});
const spellcheckLanguagesElement = editor.element.querySelector("#spellcheckLanguages");
spellcheckLanguagesElement.innerHTML = spellcheckLanguagesHTML;
spellcheckLanguagesElement.addEventListener("click", (event) => {
const target = event.target as Element;
if (target.classList.contains("b3-chip")) {
target.classList.toggle("b3-chip--current");
ipcRenderer.send(Constants.SIYUAN_CMD, {
cmd: "setSpellCheckerLanguages",
languages: Array.from(spellcheckLanguagesElement.querySelectorAll(".b3-chip--current")).map(item => item.textContent)
});
setEditor();
}
});
if (window.siyuan.config.editor.spellcheck) {
spellcheckLanguagesElement.classList.remove("fn__none");
}
/// #endif
const fontFamilyElement = editor.element.querySelector("#fontFamily") as HTMLSelectElement;
fontFamilyElement.addEventListener("click", () => {
fetchPost("/api/system/getSysFonts", {}, (response) => {
@ -444,6 +476,12 @@ export const editor = {
listLogicalOutdent: (editor.element.querySelector("#listLogicalOutdent") as HTMLInputElement).checked,
listItemDotNumberClickFocus: (editor.element.querySelector("#listItemDotNumberClickFocus") as HTMLInputElement).checked,
spellcheck: (editor.element.querySelector("#spellcheck") as HTMLInputElement).checked,
/// #if !BROWSER
spellcheckLanguages: Array.from(spellcheckLanguagesElement.querySelectorAll(".b3-chip--current")).map(item => item.textContent),
/// #else
// @ts-ignore
spellcheckLanguages: window.siyuan.config.editor.spellcheckLanguages,
/// #endif
onlySearchForDoc: (editor.element.querySelector("#onlySearchForDoc") as HTMLInputElement).checked,
floatWindowMode: parseInt((editor.element.querySelector("#floatWindowMode") as HTMLSelectElement).value),
plantUMLServePath: (editor.element.querySelector("#plantUMLServePath") as HTMLInputElement).value,
@ -472,6 +510,11 @@ export const editor = {
editor.element.querySelectorAll("input.b3-switch, select.b3-select, input.b3-slider").forEach((item) => {
item.addEventListener("change", () => {
setEditor();
/// #if !BROWSER
if (item.id === "spellcheck") {
spellcheckLanguagesElement.classList.toggle("fn__none");
}
/// #endif
});
});
editor.element.querySelectorAll("textarea.b3-text-field, input.b3-text-field, input.b3-slider").forEach((item) => {

View file

@ -495,6 +495,10 @@ declare namespace Config {
* Whether to enable spell checking
*/
spellcheck: boolean;
/**
* Support spell check languages
*/
spellcheckLanguages: string[];
/**
* Whether to enable virtual references
*/