mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 10:26:08 +01:00 
			
		
		
		
	added "auto book" displayed on the empty text pages as a replacement for children overview
This commit is contained in:
		| @@ -1,6 +1,6 @@ | |||||||
| 'use strict'; | 'use strict'; | ||||||
|  |  | ||||||
| const electron = require('electron'); | const {app, globalShortcut, BrowserWindow} = require('electron'); | ||||||
| const path = require('path'); | const path = require('path'); | ||||||
| const log = require('./src/services/log'); | const log = require('./src/services/log'); | ||||||
| const sqlInit = require('./src/services/sql_init'); | const sqlInit = require('./src/services/sql_init'); | ||||||
| @@ -12,9 +12,6 @@ const appIconService = require('./src/services/app_icon'); | |||||||
| const windowStateKeeper = require('electron-window-state'); | const windowStateKeeper = require('electron-window-state'); | ||||||
| const contextMenu = require('electron-context-menu'); | const contextMenu = require('electron-context-menu'); | ||||||
|  |  | ||||||
| const app = electron.app; |  | ||||||
| const globalShortcut = electron.globalShortcut; |  | ||||||
|  |  | ||||||
| // Adds debug features like hotkeys for triggering dev tools and reload | // Adds debug features like hotkeys for triggering dev tools and reload | ||||||
| require('electron-debug')(); | require('electron-debug')(); | ||||||
|  |  | ||||||
| @@ -66,7 +63,7 @@ async function createMainWindow() { | |||||||
|         defaultHeight: 800 |         defaultHeight: 800 | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     const win = new electron.BrowserWindow({ |     const win = new BrowserWindow({ | ||||||
|         x: mainWindowState.x, |         x: mainWindowState.x, | ||||||
|         y: mainWindowState.y, |         y: mainWindowState.y, | ||||||
|         width: mainWindowState.width, |         width: mainWindowState.width, | ||||||
|   | |||||||
| @@ -94,7 +94,7 @@ class NoteDetailBook { | |||||||
|  |  | ||||||
|     setZoom(zoomLevel) { |     setZoom(zoomLevel) { | ||||||
|         if (!(zoomLevel in ZOOMS)) { |         if (!(zoomLevel in ZOOMS)) { | ||||||
|             zoomLevel = 1; |             zoomLevel = this.getDefaultZoomLevel(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         this.zoomLevel = zoomLevel; |         this.zoomLevel = zoomLevel; | ||||||
| @@ -109,7 +109,18 @@ class NoteDetailBook { | |||||||
|     async render() { |     async render() { | ||||||
|         this.$content.empty(); |         this.$content.empty(); | ||||||
|  |  | ||||||
|         const zoomLevel = parseInt(await this.ctx.note.getLabelValue('bookZoomLevel')) || 1; |         if (this.isAutoBook()) { | ||||||
|  |             const $addTextLink = $('<a href="javascript:">here</a>').click(() => { | ||||||
|  |                 this.ctx.renderComponent(true); | ||||||
|  |             }); | ||||||
|  |  | ||||||
|  |             this.$content.append($('<div class="note-book-auto-message"></div>') | ||||||
|  |                 .append(`This note doesn't have any content so we display it's children. Click `) | ||||||
|  |                 .append($addTextLink) | ||||||
|  |                 .append(' if you want to add some text.')) | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         const zoomLevel = parseInt(await this.ctx.note.getLabelValue('bookZoomLevel')) || this.getDefaultZoomLevel(); | ||||||
|         this.setZoom(zoomLevel); |         this.setZoom(zoomLevel); | ||||||
|  |  | ||||||
|         await this.renderIntoElement(this.ctx.note, this.$content); |         await this.renderIntoElement(this.ctx.note, this.$content); | ||||||
| @@ -148,7 +159,7 @@ class NoteDetailBook { | |||||||
|  |  | ||||||
|             const $content = $("<div>").html(fullNote.content); |             const $content = $("<div>").html(fullNote.content); | ||||||
|  |  | ||||||
|             if (!fullNote.content.toLowerCase().includes("<img") && $content.text().trim() === "") { |             if (utils.isHtmlEmpty(fullNote.content)) { | ||||||
|                 return ""; |                 return ""; | ||||||
|             } |             } | ||||||
|             else { |             else { | ||||||
| @@ -208,6 +219,15 @@ class NoteDetailBook { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** @return {boolean} true if this is "auto book" activated (empty text note) and not explicit book note */ | ||||||
|  |     isAutoBook() { | ||||||
|  |         return this.ctx.note.type !== 'book'; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     getDefaultZoomLevel() { | ||||||
|  |         return this.isAutoBook() ? 3 : 1; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     getContent() {} |     getContent() {} | ||||||
|  |  | ||||||
|     show() { |     show() { | ||||||
|   | |||||||
| @@ -115,13 +115,13 @@ class TabContext { | |||||||
|         await this.initComponent(); |         await this.initComponent(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     async initComponent() { |     async initComponent(disableAutoBook = false) { | ||||||
|         const type = this.getComponentType(); |         this.type = this.getComponentType(disableAutoBook); | ||||||
|  |  | ||||||
|         if (!(type in this.components)) { |         if (!(this.type in this.components)) { | ||||||
|             const clazz = await import(componentClasses[type]); |             const clazz = await import(componentClasses[this.type]); | ||||||
|  |  | ||||||
|             this.components[type] = new clazz.default(this); |             this.components[this.type] = new clazz.default(this); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -208,11 +208,11 @@ class TabContext { | |||||||
|         this.setTitleBar(); |         this.setTitleBar(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     async renderComponent() { |     async renderComponent(disableAutoBook = false) { | ||||||
|         await this.initComponent(); |         await this.initComponent(disableAutoBook); | ||||||
|  |  | ||||||
|         for (const componentType in this.components) { |         for (const componentType in this.components) { | ||||||
|             if (componentType !== this.getComponentType()) { |             if (componentType !== this.type) { | ||||||
|                 this.components[componentType].cleanup(); |                 this.components[componentType].cleanup(); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @@ -281,18 +281,20 @@ class TabContext { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     getComponent() { |     getComponent() { | ||||||
|         const type = this.getComponentType(); |         return this.components[this.type]; | ||||||
|  |  | ||||||
|         return this.components[type]; |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     getComponentType() { |     getComponentType(disableAutoBook) { | ||||||
|         if (!this.note) { |         if (!this.note) { | ||||||
|             return "empty"; |             return "empty"; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         let type = this.note.type; |         let type = this.note.type; | ||||||
|  |  | ||||||
|  |         if (type === 'text' && !disableAutoBook && utils.isHtmlEmpty(this.note.content) && this.note.hasChildren()) { | ||||||
|  |             type = 'book'; | ||||||
|  |         } | ||||||
|  |  | ||||||
|         if (this.note.isProtected) { |         if (this.note.isProtected) { | ||||||
|             if (protectedSessionHolder.isProtectedSessionAvailable()) { |             if (protectedSessionHolder.isProtectedSessionAvailable()) { | ||||||
|                 protectedSessionHolder.touchProtectedSession(); |                 protectedSessionHolder.touchProtectedSession(); | ||||||
|   | |||||||
| @@ -201,6 +201,10 @@ function closeActiveDialog() { | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | function isHtmlEmpty(html) { | ||||||
|  |     return $(html).text().trim().length === 0 && !html.toLowerCase().includes('<img'); | ||||||
|  | } | ||||||
|  |  | ||||||
| export default { | export default { | ||||||
|     reloadApp, |     reloadApp, | ||||||
|     parseDate, |     parseDate, | ||||||
| @@ -231,5 +235,6 @@ export default { | |||||||
|     getCookie, |     getCookie, | ||||||
|     getNoteTypeClass, |     getNoteTypeClass, | ||||||
|     getMimeTypeClass, |     getMimeTypeClass, | ||||||
|     closeActiveDialog |     closeActiveDialog, | ||||||
|  |     isHtmlEmpty | ||||||
| }; | }; | ||||||
| @@ -837,4 +837,13 @@ a.external:not(.no-arrow):after, a[href^="http://"]:not(.no-arrow):after, a[href | |||||||
|  |  | ||||||
| .note-book-content { | .note-book-content { | ||||||
|     flex-grow: 1; |     flex-grow: 1; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .note-book-auto-message { | ||||||
|  |     background-color: var(--more-accented-background-color); | ||||||
|  |     text-align: center; | ||||||
|  |     width: 100%; | ||||||
|  |     border-radius: 10px; | ||||||
|  |     padding: 5px; | ||||||
|  |     margin-top: 5px; | ||||||
| } | } | ||||||
| @@ -22,6 +22,7 @@ const BUILTIN_ATTRIBUTES = [ | |||||||
|     { type: 'label', name: 'run', isDangerous: true }, |     { type: 'label', name: 'run', isDangerous: true }, | ||||||
|     { type: 'label', name: 'customRequestHandler', isDangerous: true }, |     { type: 'label', name: 'customRequestHandler', isDangerous: true }, | ||||||
|     { type: 'label', name: 'customResourceProvider', isDangerous: true }, |     { type: 'label', name: 'customResourceProvider', isDangerous: true }, | ||||||
|  |     { type: 'label', name: 'bookZoomLevel', isDangerous: false }, | ||||||
|  |  | ||||||
|     // relation names |     // relation names | ||||||
|     { type: 'relation', name: 'runOnNoteView', isDangerous: true }, |     { type: 'relation', name: 'runOnNoteView', isDangerous: true }, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user