diff --git a/package-lock.json b/package-lock.json index a963ddf57..83323462b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9296,9 +9296,9 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "simple-node-logger": { - "version": "18.12.23", - "resolved": "https://registry.npmjs.org/simple-node-logger/-/simple-node-logger-18.12.23.tgz", - "integrity": "sha512-HmqRYDNfdHcrV81UoMQij4mCOn1vjh3GdJJbWeb7aW72vEDU1SStbZI9uV4Tv0zXZ8ADDT3i7keGPZ73n6h4lA==", + "version": "18.12.24", + "resolved": "https://registry.npmjs.org/simple-node-logger/-/simple-node-logger-18.12.24.tgz", + "integrity": "sha512-4dTqpYecHsvPjWo+i+J3pLty8WJDNbxOVesNj5ch8pYH95LIGAFH4dxMSqyf+Os0RTchXifEtI/mfm3AVJftmg==", "requires": { "lodash": "^4.17.12", "moment": "^2.20.1" diff --git a/package.json b/package.json index 86b65594e..4e64f3ad3 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "semver": "7.1.1", "serve-favicon": "2.5.0", "session-file-store": "1.3.1", - "simple-node-logger": "18.12.23", + "simple-node-logger": "18.12.24", "sqlite": "3.0.3", "sqlite3": "4.1.1", "string-similarity": "4.0.1", diff --git a/src/public/javascripts/services/tab_context.js b/src/public/javascripts/services/tab_context.js index 7a3e84566..c7ed02219 100644 --- a/src/public/javascripts/services/tab_context.js +++ b/src/public/javascripts/services/tab_context.js @@ -28,21 +28,8 @@ class TabContext extends Component { this.tabRow = tabRow; this.tabId = state.tabId || utils.randomString(4); this.$tab = $(this.tabRow.addTab(this.tabId)); - this.initialized = false; this.state = state; - } - async initTabContent() { - if (this.initialized) { - return; - } - - this.initialized = true; - - this.$tabContent = $("
"); // FIXME - - this.noteChangeDisabled = false; - this.isNoteChanged = false; this.attributes = new Attributes(this.appContext, this); this.children.push(this.attributes); @@ -77,35 +64,15 @@ class TabContext extends Component { bundleService.executeRelationBundles(this.note, 'runOnNoteView', this); - // after loading new note make sure editor is scrolled to the top - // FIXME - //this.getComponent().scrollToTop(); - appContext.trigger('activeNoteChanged'); } async show() { - if (!this.initialized) { - await this.initTabContent(); - - if (this.notePath) { - await this.setNote(this.notePath); - } - else { - // FIXME - await this.renderComponent(); // render empty page - } - } - } - - async renderComponent(disableAutoBook = false) { - // FIXME + await this.setNote(this.notePath); } hide() { - if (this.initialized) { - this.$tabContent.hide(); - } + // FIXME } isActive() { @@ -124,14 +91,6 @@ class TabContext extends Component { this.$tab.addClass(utils.getMimeTypeClass(this.note.mime)); } - getComponent() { - // FIXME - } - - getComponentType(disableAutoBook) { - // FIXME - } - async activate() { await this.tabRow.activateTab(this.$tab[0]); } @@ -176,35 +135,6 @@ class TabContext extends Component { } } - noteChanged() { - if (this.noteChangeDisabled) { - return; - } - - this.isNoteChanged = true; - - // FIXME: trigger noteChanged event - //this.$savedIndicator.fadeOut(); - } - - async remove() { - if (this.$tabContent) { - // sometimes there are orphan autocompletes after closing the tab - this.cleanup(); - - await this.saveNoteIfChanged(); - this.$tabContent.remove(); - } - } - - cleanup() { - if (this.$tabContent && utils.isDesktop()) { - this.$tabContent.find('.aa-input').autocomplete('close'); - - $('.note-tooltip').remove(); - } - } - getTabState() { if (!this.notePath) { return null; diff --git a/src/public/javascripts/widgets/detail/note_detail_text.js b/src/public/javascripts/widgets/detail/note_detail_text.js index 7e8e32d1b..0d8fbbc64 100644 --- a/src/public/javascripts/widgets/detail/note_detail_text.js +++ b/src/public/javascripts/widgets/detail/note_detail_text.js @@ -2,6 +2,7 @@ import libraryLoader from "../../services/library_loader.js"; import treeService from '../../services/tree.js'; import noteAutocompleteService from '../../services/note_autocomplete.js'; import mimeTypesService from '../../services/mime_types.js'; +import TabAwareWidget from "../tab_aware_widget.js"; const ENABLE_INSPECTOR = false; @@ -71,19 +72,14 @@ const TPL = `
`; -class NoteDetailText { - /** - * @param {TabContext} ctx - */ - constructor(ctx, $parent) { - this.$component = $(TPL); - $parent.append(this.$component); - this.ctx = ctx; - this.$editorEl = this.$component.find('.note-detail-text-editor'); +class NoteDetailText extends TabAwareWidget { + render() { + this.$widget = $(TPL); + this.$editor = this.$widget.find('.note-detail-text-editor'); this.textEditorPromise = null; this.textEditor = null; - this.$component.on("dblclick", "img", e => { + this.$widget.on("dblclick", "img", e => { const $img = $(e.target); const src = $img.prop("src"); @@ -98,22 +94,24 @@ class NoteDetailText { window.open(src, '_blank'); } }); - } - async render() { if (!this.textEditorPromise) { this.textEditorPromise = this.initEditor(); } + return this.$widget; + } + + async activeNoteChanged() { await this.textEditorPromise; // lazy loading above can take time and tab might have been already switched to another note - if (this.ctx.note && this.ctx.note.type === 'text') { + if (this.tabContext.note && this.tabContext.note.type === 'text') { this.textEditor.isReadOnly = await this.isReadOnly(); - this.$component.show(); + this.$widget.show(); - this.textEditor.setData(this.ctx.note.content); + this.textEditor.setData(this.tabContext.note.content); } } @@ -132,10 +130,10 @@ class NoteDetailText { // CKEditor since version 12 needs the element to be visible before initialization. At the same time // we want to avoid flicker - i.e. show editor only once everything is ready. That's why we have separate - // display of $component in both branches. - this.$component.show(); + // display of $widget in both branches. + this.$widget.show(); - const textEditorInstance = await BalloonEditor.create(this.$editorEl[0], { + const textEditorInstance = await BalloonEditor.create(this.$editor[0], { placeholder: "Type the content of your note here ...", mention: mentionSetup, codeBlock: { @@ -150,7 +148,7 @@ class NoteDetailText { this.textEditor = textEditorInstance; - this.onNoteChange(() => this.ctx.noteChanged()); + //this.onNoteChange(() => this.tabContext.noteChanged()); } getContent() { @@ -170,13 +168,13 @@ class NoteDetailText { } async isReadOnly() { - const attributes = await this.ctx.attributes.getAttributes(); + const attributes = await this.tabContext.attributes.getAttributes(); return attributes.some(attr => attr.type === 'label' && attr.name === 'readOnly'); } focus() { - this.$editorEl.trigger('focus'); + this.$editor.trigger('focus'); } show() {} @@ -196,8 +194,8 @@ class NoteDetailText { } scrollToTop() { - this.$component.scrollTop(0); + this.$widget.scrollTop(0); } } -export default NoteDetailText \ No newline at end of file +export default NoteDetailText; \ No newline at end of file diff --git a/src/public/javascripts/widgets/note_detail.js b/src/public/javascripts/widgets/note_detail.js index d13fb4b84..0be66791d 100644 --- a/src/public/javascripts/widgets/note_detail.js +++ b/src/public/javascripts/widgets/note_detail.js @@ -92,7 +92,10 @@ export default class NoteDetailWidget extends TabAwareWidget { if (!(this.type in this.components)) { const clazz = await import(componentClasses[this.type]); - this.components[this.type] = new clazz.default(this, this.$widget); + this.components[this.type] = new clazz.default(this); + this.children.push(this.components[this.type]); + + this.$widget.append(this.components[this.type].render()); } } diff --git a/src/public/javascripts/widgets/tab_aware_widget.js b/src/public/javascripts/widgets/tab_aware_widget.js index c6d253067..47aae7526 100644 --- a/src/public/javascripts/widgets/tab_aware_widget.js +++ b/src/public/javascripts/widgets/tab_aware_widget.js @@ -1,11 +1,11 @@ import BasicWidget from "./basic_widget.js"; export default class TabAwareWidget extends BasicWidget { - constructor(appContext) { + constructor(appContext, tabContext = null) { super(appContext); /** @var {TabContext} */ - this.tabContext = null; + this.tabContext = tabContext; } // to override