mirror of
https://github.com/outline/outline.git
synced 2026-06-13 11:25:03 +03:00
fix: Mermaid persisted as last used language (#12601)
* fix: Mermaid persisted as last used language * Suppress mermaid in getFrequentCodeLanguages too
This commit is contained in:
@@ -1,4 +1,11 @@
|
||||
import { getRefractorLangForLanguage, getLabelForLanguage } from "./code";
|
||||
import Storage from "../../utils/Storage";
|
||||
import {
|
||||
getRefractorLangForLanguage,
|
||||
getLabelForLanguage,
|
||||
setRecentlyUsedCodeLanguage,
|
||||
getRecentlyUsedCodeLanguage,
|
||||
getFrequentCodeLanguages,
|
||||
} from "./code";
|
||||
|
||||
describe("getRefractorLangForLanguage", () => {
|
||||
it("should return the correct lang identifier for a given language", () => {
|
||||
@@ -26,3 +33,46 @@ describe("getLabelForLanguage", () => {
|
||||
expect(getLabelForLanguage("")).toBe("Plain text");
|
||||
});
|
||||
});
|
||||
|
||||
describe("setRecentlyUsedCodeLanguage", () => {
|
||||
beforeEach(() => {
|
||||
Storage.clear();
|
||||
});
|
||||
|
||||
it("should remember the last selected code language", () => {
|
||||
setRecentlyUsedCodeLanguage("javascript");
|
||||
expect(getRecentlyUsedCodeLanguage()).toBe("javascript");
|
||||
});
|
||||
|
||||
it("should not remember mermaid as the last selected code language", () => {
|
||||
setRecentlyUsedCodeLanguage("javascript");
|
||||
setRecentlyUsedCodeLanguage("mermaid");
|
||||
expect(getRecentlyUsedCodeLanguage()).toBe("javascript");
|
||||
});
|
||||
|
||||
it("should not remember mermaidjs as the last selected code language", () => {
|
||||
setRecentlyUsedCodeLanguage("javascript");
|
||||
setRecentlyUsedCodeLanguage("mermaidjs");
|
||||
expect(getRecentlyUsedCodeLanguage()).toBe("javascript");
|
||||
});
|
||||
|
||||
it("should ignore mermaid that was already persisted", () => {
|
||||
Storage.set("rme-code-language", "mermaid");
|
||||
expect(getRecentlyUsedCodeLanguage()).toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
||||
describe("getFrequentCodeLanguages", () => {
|
||||
beforeEach(() => {
|
||||
Storage.clear();
|
||||
});
|
||||
|
||||
it("should exclude mermaid that was already persisted", () => {
|
||||
Storage.set("frequent-code-languages", {
|
||||
javascript: 3,
|
||||
mermaid: 5,
|
||||
mermaidjs: 2,
|
||||
});
|
||||
expect(getFrequentCodeLanguages()).toEqual(["javascript"]);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -374,12 +374,23 @@ export const getRefractorLangForLanguage = (
|
||||
export const getLoaderForLanguage = (language: string) =>
|
||||
codeLanguages[language as keyof typeof codeLanguages]?.loader;
|
||||
|
||||
// Mermaid diagrams have a separate insertion entry point, so they should never
|
||||
// be remembered as a recently or frequently used code language.
|
||||
const nonPersistableLanguages = ["mermaid", "mermaidjs"];
|
||||
|
||||
const isPersistableCodeLanguage = (language: string) =>
|
||||
!nonPersistableLanguages.includes(language);
|
||||
|
||||
/**
|
||||
* Set the most recent code language used.
|
||||
*
|
||||
* @param language The language identifier.
|
||||
*/
|
||||
export const setRecentlyUsedCodeLanguage = (language: string) => {
|
||||
if (!isPersistableCodeLanguage(language)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const frequentLangs = (Storage.get(StorageKey) ?? {}) as Record<
|
||||
string,
|
||||
number
|
||||
@@ -416,8 +427,12 @@ export const setRecentlyUsedCodeLanguage = (language: string) => {
|
||||
*
|
||||
* @returns The most recent code language used, or undefined if none is set.
|
||||
*/
|
||||
export const getRecentlyUsedCodeLanguage = () =>
|
||||
Storage.get(RecentlyUsedStorageKey) as keyof typeof codeLanguages | undefined;
|
||||
export const getRecentlyUsedCodeLanguage = () => {
|
||||
const language = Storage.get(RecentlyUsedStorageKey) as
|
||||
| keyof typeof codeLanguages
|
||||
| undefined;
|
||||
return language && isPersistableCodeLanguage(language) ? language : undefined;
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the most frequent code languages used.
|
||||
@@ -425,17 +440,20 @@ export const getRecentlyUsedCodeLanguage = () =>
|
||||
* @returns An array of the most frequent code languages used.
|
||||
*/
|
||||
export const getFrequentCodeLanguages = () => {
|
||||
const recentLang = Storage.get(RecentlyUsedStorageKey);
|
||||
const frequentLangEntries = Object.entries(Storage.get(StorageKey) ?? {}) as [
|
||||
keyof typeof codeLanguages,
|
||||
number,
|
||||
][];
|
||||
const recentLang = getRecentlyUsedCodeLanguage();
|
||||
const frequentLangEntries = (
|
||||
Object.entries(Storage.get(StorageKey) ?? {}) as [
|
||||
keyof typeof codeLanguages,
|
||||
number,
|
||||
][]
|
||||
).filter(([lang]) => isPersistableCodeLanguage(lang));
|
||||
|
||||
const frequentLangs = sortFrequencies(frequentLangEntries)
|
||||
.slice(0, frequentLanguagesToGet)
|
||||
.map(([lang]) => lang);
|
||||
|
||||
const isRecentLangPresent = frequentLangs.includes(recentLang);
|
||||
const isRecentLangPresent =
|
||||
!!recentLang && frequentLangs.includes(recentLang);
|
||||
if (recentLang && !isRecentLangPresent) {
|
||||
frequentLangs.pop();
|
||||
frequentLangs.push(recentLang);
|
||||
|
||||
Reference in New Issue
Block a user