Skip to content

Commit dc10ca4

Browse files
committed
AI 兼容性、移动端/iPad 体验,以及工具栏界面的细节打磨。
AI 兼容性 优化自定义模型的 API 地址解析逻辑,不再强依赖 v1 协议。 支持直接填写完整的 .../chat/completions 地址,插件将原样使用。 支持 .../v1、.../v3 等版本根地址,自动补全为对应的 .../chat/completions。 对仅填写基础地址的情况增加更稳健的智能探测与回退策略,提升对不同厂商接口的兼容性。 已验证可正常兼容火山引擎 https://ark.cn-beijing.volces.com/api/v3 这类地址。 移动端 / iPad AI 体验优化 移动端点击 AI 主按钮时,始终弹出菜单,不再直接执行上一次 AI 指令,降低误触风险。 AI 菜单中的“触发 AI 行内补全”改为可直接点击的动作,不再只是快捷键提示。 部分 AI 改写类指令在移动端不再强依赖选中文本;无选区时会优先使用当前光标所在段落/块作为上下文。 AI Custom Rewrite 针对移动端优化为“回车换行 + 单独发送按钮”,避免误发送。 AI 菜单在成功触发指令后才会关闭;若只是弹出提示或条件不满足,菜单会保持打开。 AI 生成期间,工具栏 AI 按钮会进入忙碌态并临时禁用,避免连续点击重复触发。 工具栏移动端布局优化 手机上启用 AI 功能后,AI 按钮自动切换为更紧凑的显示方式,减少对主工具栏宽度的挤占。 调整 shouldMoveButtonToMoreMenu 的移动端判断策略,额外预留一个按钮位,避免最后一个按钮贴边难点。 优化手机端 More/更多入口的可达性,减轻横向滑动与 Obsidian 侧边栏手势冲突的问题。 界面与视觉改进 glass 风格调整为优先复用 Obsidian 官方的 raised/glassy CSS 变量,不再依赖额外 JS 注入,兼容新版原生视觉体系。 Changelog / 更新日志窗口标题现在会显示插件名称,信息更完整清晰。 英文 tooltip 中不再显示 Editing Toolbar: 前缀,提示内容更简洁。 国际化改进 修复工具栏 tooltip 在中文环境下仍显示英文的问题。 工具栏按钮、子菜单、预览按钮及部分 AI 可访问性标签补齐国际化。 补充一批默认工具栏命令和 AI 文案的中英文翻译。
1 parent 7fac3f2 commit dc10ca4

2 files changed

Lines changed: 129 additions & 27 deletions

File tree

Editing-Toolbar-Test-Vault/.obsidian/plugins/editing-toolbar/styles.css

Lines changed: 128 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,18 @@
3535
gap: calc(var(--toolbar-icon-size) / 15) !important;
3636
}
3737

38-
38+
:is(#editingToolbarModalBar, #editingToolbarPopoverBar).editingToolbarCustomAesthetic button[class^=editingToolbarCommandsubItem]>.subitem::before {
39+
40+
content: '';
41+
position: absolute;
42+
inset: 0;
43+
z-index: -1;
44+
45+
backdrop-filter: blur(12px);
46+
-webkit-backdrop-filter: blur(12px); /* Safari 兼容 */
47+
48+
border-radius: inherit; /* 继承父元素圆角 */
49+
}
3950
#editingToolbarModalBar.editingToolbarCustomAesthetic
4051
{
4152
padding:calc(var(--toolbar-icon-size) / 4);
@@ -215,20 +226,23 @@ editingToolbar CLASS CHANGES
215226
background-color: var(--color-base-10, --background-primary);
216227
}
217228

218-
/*
219-
#editingToolbarModalBar.editingToolbarGlassAesthetic {
220-
backdrop-filter: blur(6px);
221-
-webkit-backdrop-filter: blur(6px);
222-
box-shadow: none;
223-
background-color: transparent;
224-
} */
225229

226-
#editingToolbarModalBar.editingToolbarGlassAesthetic~#editingToolbarPopoverBar {
227-
backdrop-filter: blur(6px);
228-
-webkit-backdrop-filter: blur(6px);
230+
:is(#editingToolbarModalBar, #editingToolbarPopoverBar).editingToolbarGlassAesthetic {
231+
backdrop-filter: var(--raised-blur, blur(6px));
232+
-webkit-backdrop-filter: var(--raised-blur, blur(6px));
233+
box-shadow: var(--raised-shadow, none);
234+
background-clip: padding-box;
235+
border: var(--raised-mask-border-width, 1px) solid transparent;
236+
background-color: var(--raised-background, color-mix(in srgb, var(--background-secondary) 60%, transparent));
237+
}
238+
239+
.is-phone:not(.is-floating-nav) :is(#editingToolbarModalBar, #editingToolbarPopoverBar).editingToolbarGlassAesthetic {
240+
--raised-background: transparent;
241+
}
242+
243+
:is(#editingToolbarModalBar, #editingToolbarPopoverBar).editingToolbarGlassAesthetic :is(.editingToolbarCommandItem, button[class^=editingToolbarCommandsubItem]) {
244+
background-color: transparent;
229245
box-shadow: none;
230-
border: 1px solid var(--background-modifier-border-hover);
231-
background-color: color-mix(in srgb, var(--background-secondary) 60%, transparent);
232246
}
233247

234248
#editingToolbarModalBar.editingToolbarGlassAesthetic:not(.top) button[class^=editingToolbarCommandsubItem] {
@@ -247,13 +261,6 @@ editingToolbar CLASS CHANGES
247261
height: 28px;
248262
}
249263

250-
#editingToolbarModalBar.editingToolbarGlassAesthetic:not(.top) {
251-
backdrop-filter: blur(6px);
252-
-webkit-backdrop-filter: blur(6px);
253-
box-shadow: none;
254-
border: 1px solid var(--background-modifier-border-hover);
255-
background-color: color-mix(in srgb, var(--background-secondary) 60%, transparent);
256-
}
257264

258265
/*----------------------------------------------------------------
259266
editingToolbar ICONS
@@ -461,12 +468,12 @@ button[class^=editingToolbarCommandsubItem]::after {
461468
align-items: center;
462469
}
463470

464-
/*
471+
465472
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button[class^=editingToolbarCommandsubItem]>.subitem .menu-item {
466473
margin-left: 2px;
467474
margin-right: 2px;
468-
padding: 0px 4px 0px 4px;
469-
} */
475+
padding: 6px 8px;
476+
}
470477

471478

472479

@@ -619,7 +626,54 @@ button[class^=editingToolbarCommandsubItem]::after {
619626
border-left: none;
620627
}
621628

629+
@media screen and (max-width: 768px) {
630+
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button.editingToolbarCommandsubItem-ai.editing-toolbar-ai-button-inline {
631+
gap: 2px;
632+
justify-content: center;
633+
padding-left: 4px !important;
634+
padding-right: 4px !important;
635+
}
636+
637+
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button.editingToolbarCommandsubItem-ai.editing-toolbar-ai-button-inline .editing-toolbar-ai-button-label {
638+
display: none;
639+
}
622640

641+
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button.editingToolbarCommandsubItem-ai.editing-toolbar-ai-button-inline .editing-toolbar-ai-button-arrow {
642+
width: 10px;
643+
min-height: 14px;
644+
margin-left: 0;
645+
padding-left: 2px;
646+
border-left: none;
647+
}
648+
}
649+
650+
651+
.workspace-leaf-content:has(.cm-ai-loading, .cm-ai-result-panel[data-phase="streaming"])
652+
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button.editingToolbarCommandsubItem-ai,
653+
body:has(.workspace-leaf.mod-active .cm-ai-loading, .workspace-leaf.mod-active .cm-ai-result-panel[data-phase="streaming"])
654+
:is(#editingToolbarModalBar[data-toolbar-style="fixed"], #editingToolbarModalBar[data-toolbar-style="mobile"], #editingToolbarPopoverBar[data-toolbar-style="fixed"], #editingToolbarPopoverBar[data-toolbar-style="mobile"]) button.editingToolbarCommandsubItem-ai {
655+
opacity: 0.72;
656+
pointer-events: none;
657+
}
658+
659+
.workspace-leaf-content:has(.cm-ai-loading, .cm-ai-result-panel[data-phase="streaming"])
660+
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button.editingToolbarCommandsubItem-ai > svg,
661+
body:has(.workspace-leaf.mod-active .cm-ai-loading, .workspace-leaf.mod-active .cm-ai-result-panel[data-phase="streaming"])
662+
:is(#editingToolbarModalBar[data-toolbar-style="fixed"], #editingToolbarModalBar[data-toolbar-style="mobile"], #editingToolbarPopoverBar[data-toolbar-style="fixed"], #editingToolbarPopoverBar[data-toolbar-style="mobile"]) button.editingToolbarCommandsubItem-ai > svg {
663+
animation: cm-ai-spin 0.8s linear infinite;
664+
}
665+
666+
.workspace-leaf-content:has(.cm-ai-loading, .cm-ai-result-panel[data-phase="streaming"])
667+
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button.editingToolbarCommandsubItem-ai .editing-toolbar-ai-button-label,
668+
.workspace-leaf-content:has(.cm-ai-loading, .cm-ai-result-panel[data-phase="streaming"])
669+
:is(#editingToolbarModalBar, #editingToolbarPopoverBar) button.editingToolbarCommandsubItem-ai .editing-toolbar-ai-button-arrow,
670+
body:has(.workspace-leaf.mod-active .cm-ai-loading, .workspace-leaf.mod-active .cm-ai-result-panel[data-phase="streaming"])
671+
:is(#editingToolbarModalBar[data-toolbar-style="fixed"], #editingToolbarModalBar[data-toolbar-style="mobile"], #editingToolbarPopoverBar[data-toolbar-style="fixed"], #editingToolbarPopoverBar[data-toolbar-style="mobile"]) button.editingToolbarCommandsubItem-ai .editing-toolbar-ai-button-label,
672+
body:has(.workspace-leaf.mod-active .cm-ai-loading, .workspace-leaf.mod-active .cm-ai-result-panel[data-phase="streaming"])
673+
:is(#editingToolbarModalBar[data-toolbar-style="fixed"], #editingToolbarModalBar[data-toolbar-style="mobile"], #editingToolbarPopoverBar[data-toolbar-style="fixed"], #editingToolbarPopoverBar[data-toolbar-style="mobile"]) button.editingToolbarCommandsubItem-ai .editing-toolbar-ai-button-arrow {
674+
color: var(--text-muted);
675+
}
676+
623677
.menu.editing-toolbar-ai-dropdown-menu .menu-item.is-disabled {
624678
opacity: 0.72;
625679
}
@@ -692,6 +746,43 @@ button[class^=editingToolbarCommandsubItem]::after {
692746
color: var(--text-faint);
693747
}
694748

749+
.editing-toolbar-ai-inline-prompt-actions {
750+
display: flex;
751+
justify-content: flex-end;
752+
gap: 8px;
753+
margin-top: 10px;
754+
}
755+
756+
.editing-toolbar-ai-inline-prompt-action {
757+
min-width: 72px;
758+
padding: 8px 12px;
759+
border: 1px solid var(--background-modifier-border);
760+
border-radius: 10px;
761+
background: var(--background-secondary);
762+
color: var(--text-normal);
763+
cursor: pointer;
764+
}
765+
766+
.editing-toolbar-ai-inline-prompt-action:hover:not(:disabled) {
767+
background: var(--background-modifier-hover);
768+
}
769+
770+
.editing-toolbar-ai-inline-prompt-action.mod-cta {
771+
border-color: var(--interactive-accent);
772+
background: var(--interactive-accent);
773+
color: var(--text-on-accent, #fff);
774+
}
775+
776+
.editing-toolbar-ai-inline-prompt-action:disabled {
777+
opacity: 0.55;
778+
cursor: not-allowed;
779+
}
780+
781+
.is-mobile .editing-toolbar-ai-inline-prompt-action {
782+
flex: 1;
783+
}
784+
785+
695786
.editingToolbarSettingsTabsContainer .editingToolbarCommandItem .setting-item-info {
696787

697788
flex: 30%;
@@ -1004,8 +1095,8 @@ transition: none ;
10041095

10051096
@media screen and (max-width: 768px) {
10061097
#editingToolbarPopoverBar {
1007-
left: 50%;
1008-
transform: translateX(-50%);
1098+
left: 15%;
1099+
transform: translateX(-15%);
10091100
right: unset;
10101101
}
10111102
}
@@ -1733,8 +1824,16 @@ body.auto-hide-header .workspace-tab-header-container + .workspace-tab-container
17331824
.is-phone #editingToolbarModalBar.top
17341825
{
17351826
margin-right:0px;
1827+
padding:0;
17361828
}
17371829

1830+
1831+
.is-phone #editingToolbarModalBar.top::-webkit-scrollbar {
1832+
display: none;
1833+
}
1834+
1835+
1836+
17381837
.is-phone .mod-root .workspace-leaf-content[data-type="markdown"] .view-content:has(.editingToolbarModalBar){
17391838
mask-image: none;
17401839
}
@@ -1746,8 +1845,11 @@ body.auto-hide-header .workspace-tab-header-container + .workspace-tab-container
17461845
display:none;
17471846
}
17481847

1848+
1849+
17491850
.is-phone .markdown-source-view.mod-cm6 #editingToolbarPopoverBar {
1750-
margin-top: calc(var(--toolbar-icon-size) + var(--view-header-height) + 20px);
1851+
/* margin-top: calc(var(--toolbar-icon-size) + var(--view-header-height) + 20px); */
1852+
margin-top: calc(var(--safe-area-inset-top) + var(--view-header-height) + var(--toolbar-icon-size) + 10px);
17511853
}
17521854

17531855
.is-phone .mod-root .workspace-leaf-content .view-content:has(.editingToolbarModalBar) .markdown-source-view > .cm-editor > .cm-scroller {

manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"id": "editing-toolbar",
33
"name": "Editing Toolbar",
4-
"version": "4.0.2",
4+
"version": "4.0.3",
55
"minAppVersion": "0.14.0",
66
"description": "The Obsidian Editing Toolbar is modified from cmenu, which provides more powerful customization settings and has many built-in editing commands to be a MS Word-like toolbar editing experience.",
77
"author": "Cuman",

0 commit comments

Comments
 (0)