diff --git a/app/src/protyle/toolbar/index.ts b/app/src/protyle/toolbar/index.ts
index b348cb504..9275b7715 100644
--- a/app/src/protyle/toolbar/index.ts
+++ b/app/src/protyle/toolbar/index.ts
@@ -1226,24 +1226,24 @@ export class Toolbar {
hideElements(["hint"], protyle);
window.siyuan.menus.menu.remove();
this.range = getEditorRange(nodeElement);
- let html = `
+ this.subElement.innerHTML = `
`;
@@ -1269,47 +1269,41 @@ export class Toolbar {
});
inputElement.addEventListener("input", (event) => {
const lowerCaseValue = inputElement.value.toLowerCase();
- let html = `
${window.siyuan.languages.clear}
`;
+ const matchLanguages = hljsLanguages.filter(item => item.includes(lowerCaseValue));
+ let html = "";
+ // sort
let matchInput = false;
- if (inputElement.value.trim()) {
- const matchLanguages = hljsLanguages.filter(item => item.includes(lowerCaseValue));
- // sort
- matchLanguages.sort((a, b) => {
- if (a.startsWith(lowerCaseValue) && b.startsWith(lowerCaseValue)) {
- if (a.length < b.length) {
- return -1;
- } else if (a.length === b.length) {
- return 0;
- } else {
- return 1;
- }
- } else if (a.startsWith(lowerCaseValue)) {
+ matchLanguages.sort((a, b) => {
+ if (a.startsWith(lowerCaseValue) && b.startsWith(lowerCaseValue)) {
+ if (a.length < b.length) {
return -1;
- } else if (b.startsWith(lowerCaseValue)) {
- return 1;
- } else {
+ } else if (a.length === b.length) {
return 0;
+ } else {
+ return 1;
}
- }).forEach((item) => {
- if (inputElement.value === item) {
- matchInput = true;
- }
- html += `
${item.replace(lowerCaseValue, "" + lowerCaseValue + "")}
`;
- });
- if (!matchInput) {
- html += `
${escapeHtml(inputElement.value.replace(/`| /g, "_"))}
`;
+ } else if (a.startsWith(lowerCaseValue)) {
+ return -1;
+ } else if (b.startsWith(lowerCaseValue)) {
+ return 1;
+ } else {
+ return 0;
}
- } else {
- hljsLanguages.forEach((item, index) => {
- html += `
${item}
`;
- });
+ }).forEach((item) => {
+ if (inputElement.value === item) {
+ matchInput = true;
+ }
+ html += `
${item.replace(lowerCaseValue, "" + lowerCaseValue + "")}
`;
+ });
+ if (inputElement.value.trim() && !matchInput) {
+ html = `
${escapeHtml(inputElement.value.replace(/`| /g, "_"))}
${html}`;
}
+ html = `
${window.siyuan.languages.clear}
` + html;
listElement.innerHTML = html;
- for (const item of listElement.children) {
- if (item.getAttribute("data-id") !== "clear" && item.getBoundingClientRect().height !== 0) {
- item.classList.add("b3-list-item--focus");
- break;
- }
+ if (listElement.childElementCount > 2 && !matchInput && inputElement.value.trim()) {
+ listElement.firstElementChild.nextElementSibling.nextElementSibling.classList.add("b3-list-item--focus");
+ } else {
+ listElement.firstElementChild.nextElementSibling.classList.add("b3-list-item--focus");
}
event.stopPropagation();
});
@@ -1330,12 +1324,6 @@ export class Toolbar {
/// #else
setPosition(this.subElement, 0, 0);
/// #endif
- for (const item of listElement.children) {
- if (item.getBoundingClientRect().height !== 0) {
- item.classList.add("b3-list-item--focus");
- break;
- }
- }
this.element.classList.add("fn__none");
inputElement.select();
}
@@ -1767,24 +1755,17 @@ ${item.name}
private updateLanguage(languageElements: HTMLElement[], protyle: IProtyle, selectedLang: string) {
const currentLang = selectedLang === window.siyuan.languages.clear ? "" : selectedLang;
-
+
if (protyle.app && protyle.app.plugins) {
- const languageChanges = languageElements.map(element => {
- return {
- oldLanguage: element.textContent || "",
- languageElement: element
- };
- });
- const eventDetail = {
- language: currentLang,
- languageChanges: languageChanges,
- protyle: protyle
- };
protyle.app.plugins.forEach((plugin: any) => {
- plugin.eventBus.emit("code-languages-change", eventDetail);
+ plugin.eventBus.emit("code-language-change", {
+ language: currentLang,
+ languageElements,
+ protyle: protyle
+ });
});
}
-
+
if (!Constants.SIYUAN_RENDER_CODE_LANGUAGES.includes(currentLang)) {
window.siyuan.storage[Constants.LOCAL_CODELANG] = currentLang;
setStorageVal(Constants.LOCAL_CODELANG, window.siyuan.storage[Constants.LOCAL_CODELANG]);
diff --git a/app/src/types/index.d.ts b/app/src/types/index.d.ts
index 67cbdf62d..d4eb13657 100644
--- a/app/src/types/index.d.ts
+++ b/app/src/types/index.d.ts
@@ -86,7 +86,7 @@ type TEventBus = "ws-main" | "sync-start" | "sync-end" | "sync-fail" |
"destroy-protyle" |
"lock-screen" |
"mobile-keyboard-show" | "mobile-keyboard-hide" |
- "code-languages-prepare" | "code-languages-change"
+ "code-language-before" | "code-language-change"
type TAVView = "table" | "gallery"
type TAVCol =
"text"