From d15f9572393ee1adc3c4e7d86aee54ff9d4361a3 Mon Sep 17 00:00:00 2001 From: Jeffrey Chen <78434827+TCOTC@users.noreply.github.com> Date: Mon, 17 Nov 2025 09:20:27 +0800 Subject: [PATCH 1/3] :lipstick: Show native window controls on macOS crash dialog (#16357) --- app/electron/error.html | 25 +++++++++++++++++++++++-- app/electron/main.js | 4 +++- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/app/electron/error.html b/app/electron/error.html index 4dc3cd3d0..d8f970c67 100644 --- a/app/electron/error.html +++ b/app/electron/error.html @@ -91,7 +91,7 @@ .drag { -webkit-app-region: drag; - height: 22px; + height: 32px; cursor: pointer; position: fixed; top: 0; @@ -180,7 +180,28 @@ } (() => { - document.querySelector('#icon').innerHTML = ` SiYuan v${getSearch('v')}` + if (process.platform === 'darwin') { + document.getElementById('min').style.display = 'none'; + document.getElementById('close').style.display = 'none'; + document.querySelector('.drag').style.right = '0'; + document.querySelector('#icon').style.left = '74px'; + } else { + document.querySelector('#icon').style.right = '70px'; + } + + const os = require('os') + const platformMap = { + 'darwin': 'macOS', + 'win32': 'Windows', + 'linux': 'Linux' + } + const platform = platformMap[process.platform] || process.platform + const release = os.release() + const arch = os.arch() + const cpus = os.cpus() + const cpuModel = cpus.length > 0 ? cpus[0].model : '' + const systemInfo = `· ${platform} ${release} · ${arch} · ${cpuModel}` + document.querySelector('#icon').innerHTML = ` SiYuan v${getSearch('v')} ${systemInfo}` document.getElementById('title').innerHTML = decodeURIComponent(getSearch('title')) document.getElementById('content').innerHTML = decodeURIComponent(getSearch('content')) diff --git a/app/electron/main.js b/app/electron/main.js index 5b33329fa..5dc444b7b 100644 --- a/app/electron/main.js +++ b/app/electron/main.js @@ -196,7 +196,9 @@ const showErrorWindow = (title, content) => { const errWindow = new BrowserWindow({ width: Math.floor(screen.getPrimaryDisplay().size.width * 0.5), height: Math.floor(screen.getPrimaryDisplay().workAreaSize.height * 0.8), - frame: false, + frame: "darwin" === process.platform, + titleBarStyle: "hidden", + fullscreenable: false, icon: path.join(appDir, "stage", "icon-large.png"), webPreferences: { nodeIntegration: true, webviewTag: true, webSecurity: false, contextIsolation: false, From 8cfae95f29528bcf085d22fc7c505c53a7739048 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Mon, 17 Nov 2025 10:14:48 +0800 Subject: [PATCH 2/3] :art: Improve HTML content rendering for database template fields https://github.com/siyuan-note/siyuan/issues/16362 Signed-off-by: Daniel <845765@qq.com> --- kernel/sql/av.go | 9 +++++++-- kernel/util/misc.go | 25 +++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/kernel/sql/av.go b/kernel/sql/av.go index 76850beb2..fc6d095c9 100644 --- a/kernel/sql/av.go +++ b/kernel/sql/av.go @@ -111,7 +111,7 @@ func renderView(attrView *av.AttributeView, view *av.View, query string, depth * return } -func RenderTemplateField(ial map[string]string, keyValues []*av.KeyValues, tplContent string) (ret string, err error) { +func renderTemplateField(ial map[string]string, keyValues []*av.KeyValues, tplContent string) (ret string, err error) { if "" == ial["id"] { block := getBlockValue(keyValues) if nil != block { @@ -267,6 +267,11 @@ func RenderTemplateField(ial map[string]string, keyValues []*av.KeyValues, tplCo ret = buf.String() if ret == "" { ret = "" + return + } + + if util.HasUnclosedHtmlTag(ret) { + ret = util.EscapeHTML(ret) } return } @@ -623,7 +628,7 @@ func fillAttributeViewTemplateValues(attrView *av.AttributeView, view *av.View, ial = map[string]string{} } - content, renderErr := RenderTemplateField(ial, keyValues, value.Template.Content) + content, renderErr := renderTemplateField(ial, keyValues, value.Template.Content) if nil != renderErr { key, _ := attrView.GetKey(value.KeyID) keyName := "" diff --git a/kernel/util/misc.go b/kernel/util/misc.go index 870633ac5..f14d4dea4 100644 --- a/kernel/util/misc.go +++ b/kernel/util/misc.go @@ -100,6 +100,31 @@ func UnescapeHTML(s string) (ret string) { return } +func HasUnclosedHtmlTag(htmlStr string) bool { + tagRe := regexp.MustCompile(`<(/?)([a-zA-Z0-9]+)[^>]*?>`) + selfClosing := map[string]bool{ + "br": true, "img": true, "hr": true, "input": true, "meta": true, "link": true, + } + stack := []string{} + matches := tagRe.FindAllStringSubmatch(htmlStr, -1) + for _, m := range matches { + isClose := m[1] == "/" + tag := strings.ToLower(m[2]) + if selfClosing[tag] { + continue + } + if !isClose { + stack = append(stack, tag) + } else { + if len(stack) == 0 || stack[len(stack)-1] != tag { + return true // 闭合标签不匹配 + } + stack = stack[:len(stack)-1] + } + } + return len(stack) != 0 +} + func Reverse(s string) string { runes := []rune(s) for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 { From a3bb6cf4a63b46f619633cb4ffd2ca0645f1c8b5 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Mon, 17 Nov 2025 10:28:06 +0800 Subject: [PATCH 3/3] :art: Improve HTML content rendering for database template fields https://github.com/siyuan-note/siyuan/issues/16362 Signed-off-by: Daniel <845765@qq.com> --- kernel/util/misc.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/kernel/util/misc.go b/kernel/util/misc.go index f14d4dea4..2f0b14c62 100644 --- a/kernel/util/misc.go +++ b/kernel/util/misc.go @@ -101,6 +101,25 @@ func UnescapeHTML(s string) (ret string) { } func HasUnclosedHtmlTag(htmlStr string) bool { + // 检查未闭合注释 + openIdx := 0 + for { + start := strings.Index(htmlStr[openIdx:], "") + if end == -1 { + return true // 存在未闭合注释 + } + openIdx = start + 4 + end + 3 + } + + // 去除所有注释内容 + commentRe := regexp.MustCompile(``) + htmlStr = commentRe.ReplaceAllString(htmlStr, "") + tagRe := regexp.MustCompile(`<(/?)([a-zA-Z0-9]+)[^>]*?>`) selfClosing := map[string]bool{ "br": true, "img": true, "hr": true, "input": true, "meta": true, "link": true,