mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 18:36:30 +01:00 
			
		
		
		
	added option to bring back plain (non-markdown) headings, closes #1678
This commit is contained in:
		| @@ -28,6 +28,16 @@ const TPL = ` | |||||||
|             </select> |             </select> | ||||||
|         </div> |         </div> | ||||||
|     </div> |     </div> | ||||||
|  |      | ||||||
|  |     <div class="form-group row"> | ||||||
|  |         <div class="col-4"> | ||||||
|  |             <label for="heading-style">Heading style</label> | ||||||
|  |             <select class="form-control" id="heading-style"> | ||||||
|  |                 <option value="plain">Plain</option> | ||||||
|  |                 <option value="markdown">Markdown-style</option> | ||||||
|  |             </select> | ||||||
|  |         </div> | ||||||
|  |     </div> | ||||||
|  |  | ||||||
|     <p>Zooming can be controlled with CTRL+- and CTRL+= shortcuts as well.</p> |     <p>Zooming can be controlled with CTRL+- and CTRL+= shortcuts as well.</p> | ||||||
|  |  | ||||||
| @@ -78,6 +88,7 @@ export default class ApperanceOptions { | |||||||
|         this.$themeSelect = $("#theme-select"); |         this.$themeSelect = $("#theme-select"); | ||||||
|         this.$zoomFactorSelect = $("#zoom-factor-select"); |         this.$zoomFactorSelect = $("#zoom-factor-select"); | ||||||
|         this.$nativeTitleBarSelect = $("#native-title-bar-select"); |         this.$nativeTitleBarSelect = $("#native-title-bar-select"); | ||||||
|  |         this.$headingStyle = $("#heading-style"); | ||||||
|         this.$mainFontSize = $("#main-font-size"); |         this.$mainFontSize = $("#main-font-size"); | ||||||
|         this.$treeFontSize = $("#tree-font-size"); |         this.$treeFontSize = $("#tree-font-size"); | ||||||
|         this.$detailFontSize = $("#detail-font-size"); |         this.$detailFontSize = $("#detail-font-size"); | ||||||
| @@ -86,11 +97,7 @@ export default class ApperanceOptions { | |||||||
|         this.$themeSelect.on('change', () => { |         this.$themeSelect.on('change', () => { | ||||||
|             const newTheme = this.$themeSelect.val(); |             const newTheme = this.$themeSelect.val(); | ||||||
|  |  | ||||||
|             for (const clazz of Array.from(this.$body[0].classList)) { // create copy to safely iterate over while removing classes |             this.toggleBodyClass("theme-", newTheme); | ||||||
|                 if (clazz.startsWith("theme-")) { |  | ||||||
|                     this.$body.removeClass(clazz); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             const noteId = $(this).find(":selected").attr("data-note-id"); |             const noteId = $(this).find(":selected").attr("data-note-id"); | ||||||
|  |  | ||||||
| @@ -100,8 +107,6 @@ export default class ApperanceOptions { | |||||||
|                 libraryLoader.requireCss(`api/notes/download/${noteId}`); |                 libraryLoader.requireCss(`api/notes/download/${noteId}`); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             this.$body.addClass("theme-" + newTheme); |  | ||||||
|  |  | ||||||
|             server.put('options/theme/' + newTheme); |             server.put('options/theme/' + newTheme); | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
| @@ -113,6 +118,14 @@ export default class ApperanceOptions { | |||||||
|             server.put('options/nativeTitleBarVisible/' + nativeTitleBarVisible); |             server.put('options/nativeTitleBarVisible/' + nativeTitleBarVisible); | ||||||
|         }); |         }); | ||||||
|  |  | ||||||
|  |         this.$headingStyle.on('change', () => { | ||||||
|  |             const newHeadingStyle = this.$headingStyle.val(); | ||||||
|  |  | ||||||
|  |             this.toggleBodyClass("heading-style-", newHeadingStyle); | ||||||
|  |  | ||||||
|  |             server.put('options/headingStyle/' + newHeadingStyle); | ||||||
|  |         }); | ||||||
|  |  | ||||||
|         this.$mainFontSize.on('change', async () => { |         this.$mainFontSize.on('change', async () => { | ||||||
|             await server.put('options/mainFontSize/' + this.$mainFontSize.val()); |             await server.put('options/mainFontSize/' + this.$mainFontSize.val()); | ||||||
|  |  | ||||||
| @@ -132,6 +145,16 @@ export default class ApperanceOptions { | |||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     toggleBodyClass(prefix, value) { | ||||||
|  |         for (const clazz of Array.from(this.$body[0].classList)) { // create copy to safely iterate over while removing classes | ||||||
|  |             if (clazz.startsWith(prefix)) { | ||||||
|  |                 this.$body.removeClass(clazz); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         this.$body.addClass(prefix + value); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     async optionsLoaded(options) { |     async optionsLoaded(options) { | ||||||
|         const themes = [ |         const themes = [ | ||||||
|             { val: 'white', title: 'White' }, |             { val: 'white', title: 'White' }, | ||||||
| @@ -159,6 +182,8 @@ export default class ApperanceOptions { | |||||||
|  |  | ||||||
|         this.$nativeTitleBarSelect.val(options.nativeTitleBarVisible === 'true' ? 'show' : 'hide'); |         this.$nativeTitleBarSelect.val(options.nativeTitleBarVisible === 'true' ? 'show' : 'hide'); | ||||||
|  |  | ||||||
|  |         this.$headingStyle.val(options.headingStyle); | ||||||
|  |  | ||||||
|         this.$mainFontSize.val(options.mainFontSize); |         this.$mainFontSize.val(options.mainFontSize); | ||||||
|         this.$treeFontSize.val(options.treeFontSize); |         this.$treeFontSize.val(options.treeFontSize); | ||||||
|         this.$detailFontSize.val(options.detailFontSize); |         this.$detailFontSize.val(options.detailFontSize); | ||||||
|   | |||||||
| @@ -49,15 +49,16 @@ const TPL = ` | |||||||
|     } |     } | ||||||
|           |           | ||||||
|     .note-detail-editable-text h2 { font-size: 1.8em; }  |     .note-detail-editable-text h2 { font-size: 1.8em; }  | ||||||
|     .note-detail-editable-text h2::before { content: "##\\2004"; color: var(--muted-text-color); } |  | ||||||
|     .note-detail-editable-text h3 { font-size: 1.6em; } |     .note-detail-editable-text h3 { font-size: 1.6em; } | ||||||
|     .note-detail-editable-text h3::before { content: "###\\2004"; color: var(--muted-text-color); } |  | ||||||
|     .note-detail-editable-text h4 { font-size: 1.4em; } |     .note-detail-editable-text h4 { font-size: 1.4em; } | ||||||
|     .note-detail-editable-text h4:not(.include-note-title)::before { content: "####\\2004"; color: var(--muted-text-color); } |  | ||||||
|     .note-detail-editable-text h5 { font-size: 1.2em; } |     .note-detail-editable-text h5 { font-size: 1.2em; } | ||||||
|     .note-detail-editable-text h5::before { content: "#####\\2004"; color: var(--muted-text-color); } |  | ||||||
|     .note-detail-editable-text h6 { font-size: 1.1em; } |     .note-detail-editable-text h6 { font-size: 1.1em; } | ||||||
|     .note-detail-editable-text h6::before { content: "######\\2004"; color: var(--muted-text-color); } |      | ||||||
|  |     body.heading-style-markdown .note-detail-editable-text h2::before { content: "##\\2004"; color: var(--muted-text-color); } | ||||||
|  |     body.heading-style-markdown .note-detail-editable-text h3::before { content: "###\\2004"; color: var(--muted-text-color); } | ||||||
|  |     body.heading-style-markdown .note-detail-editable-text h4:not(.include-note-title)::before { content: "####\\2004"; color: var(--muted-text-color); } | ||||||
|  |     body.heading-style-markdown .note-detail-editable-text h5::before { content: "#####\\2004"; color: var(--muted-text-color); } | ||||||
|  |     body.heading-style-markdown .note-detail-editable-text h6::before { content: "######\\2004"; color: var(--muted-text-color); } | ||||||
|      |      | ||||||
|     .note-detail-editable-text-editor { |     .note-detail-editable-text-editor { | ||||||
|         padding-top: 10px; |         padding-top: 10px; | ||||||
|   | |||||||
| @@ -14,16 +14,11 @@ const TPL = ` | |||||||
|     .note-detail-readonly-text h5 { font-size: 1.2em; } |     .note-detail-readonly-text h5 { font-size: 1.2em; } | ||||||
|     .note-detail-readonly-text h6 { font-size: 1.1em; } |     .note-detail-readonly-text h6 { font-size: 1.1em; } | ||||||
|      |      | ||||||
|     .note-detail-readonly-text h2 { font-size: 1.8em; }  |     body.heading-style-markdown .note-detail-readonly-text h2::before { content: "##\\2004"; color: var(--muted-text-color); } | ||||||
|     .note-detail-readonly-text h2::before { content: "##\\2004"; color: var(--muted-text-color); } |     body.heading-style-markdown .note-detail-readonly-text h3::before { content: "###\\2004"; color: var(--muted-text-color); } | ||||||
|     .note-detail-readonly-text h3 { font-size: 1.6em; } |     body.heading-style-markdown .note-detail-readonly-text h4:not(.include-note-title)::before { content: "####\\2004"; color: var(--muted-text-color); } | ||||||
|     .note-detail-readonly-text h3::before { content: "###\\2004"; color: var(--muted-text-color); } |     body.heading-style-markdown .note-detail-readonly-text h5::before { content: "#####\\2004"; color: var(--muted-text-color); } | ||||||
|     .note-detail-readonly-text h4 { font-size: 1.4em; } |     body.heading-style-markdown .note-detail-readonly-text h6::before { content: "######\\2004"; color: var(--muted-text-color); } | ||||||
|     .note-detail-readonly-text h4:not(.include-note-title)::before { content: "####\\2004"; color: var(--muted-text-color); } |  | ||||||
|     .note-detail-readonly-text h5 { font-size: 1.2em; } |  | ||||||
|     .note-detail-readonly-text h5::before { content: "#####\\2004"; color: var(--muted-text-color); } |  | ||||||
|     .note-detail-readonly-text h6 { font-size: 1.1em; } |  | ||||||
|     .note-detail-readonly-text h6::before { content: "######\\2004"; color: var(--muted-text-color); } |  | ||||||
|      |      | ||||||
|     .note-detail-readonly-text { |     .note-detail-readonly-text { | ||||||
|         padding-left: 22px; |         padding-left: 22px; | ||||||
|   | |||||||
| @@ -40,7 +40,8 @@ const ALLOWED_OPTIONS = new Set([ | |||||||
|     'nativeTitleBarVisible', |     'nativeTitleBarVisible', | ||||||
|     'attributeListExpanded', |     'attributeListExpanded', | ||||||
|     'promotedAttributesExpanded', |     'promotedAttributesExpanded', | ||||||
|     'similarNotesExpanded' |     'similarNotesExpanded', | ||||||
|  |     'headingStyle' | ||||||
| ]); | ]); | ||||||
|  |  | ||||||
| function getOptions() { | function getOptions() { | ||||||
|   | |||||||
| @@ -19,6 +19,7 @@ function index(req, res) { | |||||||
|     res.render(view, { |     res.render(view, { | ||||||
|         csrfToken: csrfToken, |         csrfToken: csrfToken, | ||||||
|         theme: options.theme, |         theme: options.theme, | ||||||
|  |         headingStyle: options.headingStyle, | ||||||
|         mainFontSize: parseInt(options.mainFontSize), |         mainFontSize: parseInt(options.mainFontSize), | ||||||
|         treeFontSize: parseInt(options.treeFontSize), |         treeFontSize: parseInt(options.treeFontSize), | ||||||
|         detailFontSize: parseInt(options.detailFontSize), |         detailFontSize: parseInt(options.detailFontSize), | ||||||
|   | |||||||
| @@ -84,7 +84,8 @@ const defaultOptions = [ | |||||||
|     { name: 'attributeListExpanded', value: 'false', isSynced: false }, |     { name: 'attributeListExpanded', value: 'false', isSynced: false }, | ||||||
|     { name: 'promotedAttributesExpanded', value: 'true', isSynced: true }, |     { name: 'promotedAttributesExpanded', value: 'true', isSynced: true }, | ||||||
|     { name: 'similarNotesExpanded', value: 'true', isSynced: true }, |     { name: 'similarNotesExpanded', value: 'true', isSynced: true }, | ||||||
|     { name: 'debugModeEnabled', value: 'false', isSynced: false } |     { name: 'debugModeEnabled', value: 'false', isSynced: false }, | ||||||
|  |     { name: 'headingStyle', value: 'markdown', isSynced: true }, | ||||||
| ]; | ]; | ||||||
|  |  | ||||||
| function initStartupOptions() { | function initStartupOptions() { | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|     <link rel="shortcut icon" href="favicon.ico"> |     <link rel="shortcut icon" href="favicon.ico"> | ||||||
|     <title>Trilium Notes</title> |     <title>Trilium Notes</title> | ||||||
| </head> | </head> | ||||||
| <body class="desktop theme-<%= theme %>" style="--main-font-size: <%= mainFontSize %>%; --tree-font-size: <%= treeFontSize %>%; --detail-font-size: <%= detailFontSize %>%;"> | <body class="desktop theme-<%= theme %> heading-style-<%= headingStyle %>" style="--main-font-size: <%= mainFontSize %>%; --tree-font-size: <%= treeFontSize %>%; --detail-font-size: <%= detailFontSize %>%;"> | ||||||
| <noscript>Trilium requires JavaScript to be enabled.</noscript> | <noscript>Trilium requires JavaScript to be enabled.</noscript> | ||||||
|  |  | ||||||
| <script> | <script> | ||||||
|   | |||||||
| @@ -95,7 +95,7 @@ | |||||||
|         } |         } | ||||||
|     </style> |     </style> | ||||||
| </head> | </head> | ||||||
| <body class="mobile theme-<%= theme %>"> | <body class="mobile theme-<%= theme %> heading-style-<%= headingStyle %>"> | ||||||
| <noscript>Trilium requires JavaScript to be enabled.</noscript> | <noscript>Trilium requires JavaScript to be enabled.</noscript> | ||||||
|  |  | ||||||
| <div id="toast-container" class="d-flex flex-column justify-content-center align-items-center"></div> | <div id="toast-container" class="d-flex flex-column justify-content-center align-items-center"></div> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user