diff --git a/common/data.ts b/common/data.ts index 3696358..d7b1eb6 100644 --- a/common/data.ts +++ b/common/data.ts @@ -60,6 +60,10 @@ interface HeadingDecoratorSettings { unorderedLevelHeadings: string; } +interface SourceHeadingDecoratorSettngs extends HeadingDecoratorSettings { + hideNumberSigns?: boolean; +} + export type HeadingPluginSettings = { metadataKeyword: string; folderBlacklist: string[]; @@ -69,7 +73,11 @@ export type HeadingPluginSettings = { enabledInSource: boolean; enabledInOutline: boolean; enabledInFileExplorer: boolean; -} & Record; +} & Record< + Exclude, + HeadingDecoratorSettings +> & + Record<"sourceSettings", SourceHeadingDecoratorSettngs>; export type HeadingPluginData = Omit< HeadingPluginSettings, @@ -99,6 +107,7 @@ export const beforeDecoratorClassName = "before-heading-decorator"; export const beforeInsideDecoratorClassName = "before-inside-heading-decorator"; export const afterDecoratorClassName = "after-heading-decorator"; export const afterInsideDecoratorClassName = "after-inside-heading-decorator"; +export const hideSourceNumberSignsClassName = "hide-source-number-signs"; export const headingsSelector = ".el-h1 h1, .el-h2 h2, .el-h3 h3, .el-h4 h4, .el-h5 h5, .el-h6 h6"; export const defaultHeadingTuple: HeadingTuple = [ @@ -184,6 +193,19 @@ export function defaultHeadingDecoratorSettings(): HeadingDecoratorSettings { }; } +/** + * Default source settings for source heading decorator. + * + * @returns default source settings for heading decorator. + */ +export function defaultSourceHeadingDecoratorSettings(): SourceHeadingDecoratorSettngs { + const settings = defaultHeadingDecoratorSettings(); + return { + ...settings, + hideNumberSigns: false, + }; +} + /** * Get unordered level headings from settings. * diff --git a/components/view.ts b/components/view.ts index 97aae8f..a8cf70d 100644 --- a/components/view.ts +++ b/components/view.ts @@ -13,6 +13,7 @@ import { getUnorderedLevelHeadings, getOrderedCustomIdents, findFirstCharacterIndex, + hideSourceNumberSignsClassName, } from "../common/data"; import { Counter, Querier } from "../common/counter"; import { Heading } from "../common/heading"; @@ -180,14 +181,45 @@ export class HeadingViewPlugin implements PluginValue { block: false, }); + let hideDeco: Decoration | null = null; + if (!isLivePreviwMode) { + const hideNumberSigns = pluginData.sourceSettings.hideNumberSigns; + if (hideNumberSigns) { + hideDeco = Decoration.mark({ + class: hideSourceNumberSignsClassName, + }); + } + } + if (position === "before-inside") { const charIndex = isLivePreviwMode ? findFirstCharacterIndex(lineText) : 0; builder.add(line.from + charIndex, line.from + charIndex, deco); + + if (hideDeco) { + const cIndex = findFirstCharacterIndex(lineText); + if (cIndex > 0) { + builder.add(line.from, line.from + cIndex, hideDeco); + } + } } else if (position === "before") { builder.add(line.from, line.from, deco); + + if (hideDeco) { + const cIndex = findFirstCharacterIndex(lineText); + if (cIndex > 0) { + builder.add(line.from, line.from + cIndex, hideDeco); + } + } } else { + if (hideDeco) { + const cIndex = findFirstCharacterIndex(lineText); + if (cIndex > 0) { + builder.add(line.from, line.from + cIndex, hideDeco); + } + } + builder.add(line.to, line.to, deco); } } diff --git a/main.ts b/main.ts index 64c1675..2658654 100644 --- a/main.ts +++ b/main.ts @@ -20,6 +20,7 @@ import { headingsSelector, orderedStyleTypeOptions, defaultHeadingDecoratorSettings, + defaultSourceHeadingDecoratorSettings, getUnorderedLevelHeadings, getOrderedCustomIdents, diffLevel, @@ -72,7 +73,7 @@ const DEFAULT_SETTINGS: HeadingPluginSettings = { enabledInPreview: true, previewSettings: defaultHeadingDecoratorSettings(), enabledInSource: false, - sourceSettings: defaultHeadingDecoratorSettings(), + sourceSettings: defaultSourceHeadingDecoratorSettings(), enabledInOutline: false, outlineSettings: defaultHeadingDecoratorSettings(), enabledInFileExplorer: false, @@ -1348,6 +1349,27 @@ class HeadingSettingTab extends PluginSettingTab { }) ); + if (settingsType === "sourceSettings") { + new Setting(containerEl).setName("Other").setHeading(); + + //* hideNumberSigns + new Setting(containerEl) + .setName("Hide number signs on inactive lines") + .setDesc( + "Hide number signs (#) on inactive lines similar to live preview." + ) + .addToggle((toggle) => { + toggle + .setValue( + this.plugin.settings[settingsType].hideNumberSigns ?? false + ) + .onChange(async (value) => { + this.plugin.settings[settingsType].hideNumberSigns = value; + await this.plugin.saveSettings(); + }); + }); + } + //* Scroll back to the top containerEl.scrollTo({ top: 0, behavior: "smooth" }); } diff --git a/styles.css b/styles.css index 125d45b..0fc2082 100644 --- a/styles.css +++ b/styles.css @@ -262,6 +262,14 @@ body { .custom-heading-decorator.source-custom-heading-decorator[data-decorator-opacity="100%"] { opacity: 100%; } + +.hide-source-number-signs { + display: none; +} +.cm-focused .cm-active .hide-source-number-signs, +.cm-focused .cm-active .hide-source-number-signs { + display: unset; +} /* source end */ /* outline start */