Skip to content

Commit 7652ed0

Browse files
committed
fix: Improves appearance of Editor suggester
1 parent 72c2bc3 commit 7652ed0

File tree

1 file changed

+38
-19
lines changed

1 file changed

+38
-19
lines changed

src/suggest/suggest.ts

+38-19
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,48 @@
1-
import {Editor, EditorPosition, EditorSuggest, EditorSuggestContext, EditorSuggestTriggerInfo} from "obsidian";
2-
import {Admonition} from "src/@types";
1+
import {
2+
Editor,
3+
EditorPosition,
4+
EditorSuggest,
5+
EditorSuggestContext,
6+
EditorSuggestTriggerInfo
7+
} from "obsidian";
8+
import { Admonition } from "src/@types";
39
import ObsidianAdmonition from "src/main";
410

5-
abstract class AdmonitionOrCalloutSuggester extends EditorSuggest<[string, Admonition]> {
11+
abstract class AdmonitionOrCalloutSuggester extends EditorSuggest<
12+
[string, Admonition]
13+
> {
614
constructor(public plugin: ObsidianAdmonition) {
715
super(plugin.app);
816
}
917
getSuggestions(ctx: EditorSuggestContext) {
1018
if (!ctx.query?.length) return Object.entries(this.plugin.admonitions);
1119

1220
return Object.entries(this.plugin.admonitions).filter((p) =>
13-
p[0].toLowerCase().contains(ctx.query.toLowerCase()));
21+
p[0].toLowerCase().contains(ctx.query.toLowerCase())
22+
);
1423
}
15-
renderSuggestion([text, item]: [text: string, item: Admonition], el: HTMLElement) {
16-
el.addClass("admonition-suggester-item")
17-
el.style.setProperty("--callout-color", item.color)
18-
el.createSpan({ text })
19-
const iconDiv = createDiv("suggestion-flair admonition-suggester-icon");
24+
renderSuggestion(
25+
[text, item]: [text: string, item: Admonition],
26+
el: HTMLElement
27+
) {
28+
el.addClasses(["admonition-suggester-item", "mod-complex"]);
29+
el.style.setProperty("--callout-color", item.color);
30+
el.createSpan({ text });
31+
const iconDiv = el.createDiv("suggestion-aux").createDiv({
32+
cls: "suggestion-flair",
33+
attr: {
34+
style: `color: rgb(var(--callout-color))`
35+
}
36+
});
2037
let iconEl = this.plugin.iconManager.getIconNode(item.icon);
2138
// Unpack the icon if it's an Obsidian one, as they're wrapped with an extra <div>
2239
if (iconEl instanceof HTMLDivElement && iconEl.childElementCount == 1)
23-
iconEl = iconEl.firstElementChild
40+
iconEl = iconEl.firstElementChild;
2441
else if (iconEl !== null) {
25-
iconEl.removeClass("svg-inline--fa")
26-
iconEl.addClass("svg-icon")
27-
iconEl.addClass("svg-icon")
42+
iconEl.removeClass("svg-inline--fa");
43+
iconEl.addClass("svg-icon");
2844
}
29-
iconDiv
30-
.appendChild(iconEl ?? createDiv())
31-
32-
el.prepend(iconDiv);
45+
iconDiv.appendChild(iconEl ?? createDiv());
3346
}
3447
onTrigger(
3548
cursor: EditorPosition,
@@ -70,7 +83,10 @@ abstract class AdmonitionOrCalloutSuggester extends EditorSuggest<[string, Admon
7083

7184
export class CalloutSuggest extends AdmonitionOrCalloutSuggester {
7285
offset = 4;
73-
selectSuggestion([text]: [text: string, item: Admonition], evt: MouseEvent | KeyboardEvent): void {
86+
selectSuggestion(
87+
[text]: [text: string, item: Admonition],
88+
evt: MouseEvent | KeyboardEvent
89+
): void {
7490
if (!this.context) return;
7591

7692
const line = this.context.editor
@@ -109,7 +125,10 @@ export class CalloutSuggest extends AdmonitionOrCalloutSuggester {
109125
}
110126
export class AdmonitionSuggest extends AdmonitionOrCalloutSuggester {
111127
offset = 6;
112-
selectSuggestion([text]: [text: string, item: Admonition], evt: MouseEvent | KeyboardEvent): void {
128+
selectSuggestion(
129+
[text]: [text: string, item: Admonition],
130+
evt: MouseEvent | KeyboardEvent
131+
): void {
113132
if (!this.context) return;
114133

115134
this.context.editor.replaceRange(

0 commit comments

Comments
 (0)