refactored TabContext => NoteContext

This commit is contained in:
zadam 2021-05-22 12:35:41 +02:00
parent 274cf7312c
commit 79a85a0aa7
60 changed files with 187 additions and 187 deletions

View File

@ -20,7 +20,7 @@ export async function showDialog() {
return false; return false;
} }
appContext.tabManager.getActiveNoteContext().setNote(suggestion.notePath); appContext.tabManager.getActiveContext().setNote(suggestion.notePath);
}); });
// if you open the Jump To dialog soon after using it previously it can often mean that you // if you open the Jump To dialog soon after using it previously it can often mean that you

View File

@ -27,7 +27,7 @@ export async function showDialog() {
} }
$dialog.on('shown.bs.modal', () => { $dialog.on('shown.bs.modal', () => {
const note = appContext.tabManager.getActiveTabNote(); const note = appContext.tabManager.getActiveContextNote();
linkMapService = new LinkMapService(note, $linkMapContainer, getOptions()); linkMapService = new LinkMapService(note, $linkMapContainer, getOptions());
linkMapService.render(); linkMapService.render();

View File

@ -29,7 +29,7 @@ async function convertMarkdownToHtml(text) {
} }
export async function importMarkdownInline() { export async function importMarkdownInline() {
if (appContext.tabManager.getActiveTabNoteType() !== 'text') { if (appContext.tabManager.getActiveContextNoteType() !== 'text') {
return; return;
} }
@ -58,4 +58,4 @@ $importButton.on('click', sendForm);
$dialog.on('shown.bs.modal', () => $importTextarea.trigger('focus')); $dialog.on('shown.bs.modal', () => $importTextarea.trigger('focus'));
utils.bindElShortcut($dialog, 'ctrl+return', sendForm); utils.bindElShortcut($dialog, 'ctrl+return', sendForm);

View File

@ -12,7 +12,7 @@ const $okButton = $("#note-info-ok-button");
export async function showDialog() { export async function showDialog() {
utils.openDialog($dialog); utils.openDialog($dialog);
const activeNoteContext = appContext.tabManager.getActiveNoteContext(); const activeNoteContext = appContext.tabManager.getActiveContext();
const {note} = activeNoteContext; const {note} = activeNoteContext;
const noteComplement = await activeNoteContext.getNoteComplement(); const noteComplement = await activeNoteContext.getNoteComplement();

View File

@ -27,7 +27,7 @@ let note;
let noteRevisionId; let noteRevisionId;
export async function showCurrentNoteRevisions() { export async function showCurrentNoteRevisions() {
await showNoteRevisionsDialog(appContext.tabManager.getActiveTabNoteId()); await showNoteRevisionsDialog(appContext.tabManager.getActiveContextNoteId());
} }
export async function showNoteRevisionsDialog(noteId, noteRevisionId) { export async function showNoteRevisionsDialog(noteId, noteRevisionId) {
@ -41,7 +41,7 @@ async function loadNoteRevisions(noteId, noteRevId) {
$content.empty(); $content.empty();
$titleButtons.empty(); $titleButtons.empty();
note = appContext.tabManager.getActiveTabNote(); note = appContext.tabManager.getActiveContextNote();
revisionItems = await server.get(`notes/${noteId}/revisions`); revisionItems = await server.get(`notes/${noteId}/revisions`);
for (const item of revisionItems) { for (const item of revisionItems) {

View File

@ -7,7 +7,7 @@ const $noteSource = $("#note-source");
export async function showDialog() { export async function showDialog() {
utils.openDialog($dialog); utils.openDialog($dialog);
const noteCompletement = await appContext.tabManager.getActiveNoteContext().getNoteComplement(); const noteCompletement = await appContext.tabManager.getActiveContext().getNoteComplement();
$noteSource.text(formatHtml(noteCompletement.content)); $noteSource.text(formatHtml(noteCompletement.content));
} }

View File

@ -56,7 +56,7 @@ export async function showDialog(ancestorNoteId) {
await froca.reloadNotes([change.noteId]); await froca.reloadNotes([change.noteId]);
appContext.tabManager.getActiveNoteContext().setNote(change.noteId); appContext.tabManager.getActiveContext().setNote(change.noteId);
} }
}); });

View File

@ -5,7 +5,7 @@ import TitleBarButtonsWidget from "../widgets/title_bar_buttons.js";
import StandardTopWidget from "../widgets/standard_top_widget.js"; import StandardTopWidget from "../widgets/standard_top_widget.js";
import SidePaneContainer from "../widgets/containers/side_pane_container.js"; import SidePaneContainer from "../widgets/containers/side_pane_container.js";
import NoteTreeWidget from "../widgets/note_tree.js"; import NoteTreeWidget from "../widgets/note_tree.js";
import TabCachingWidget from "../widgets/tab_caching_widget.js"; import NoteContextCachingWidget from "../widgets/note_context_caching_widget.js";
import NotePathsWidget from "../widgets/note_paths.js"; import NotePathsWidget from "../widgets/note_paths.js";
import NoteTitleWidget from "../widgets/note_title.js"; import NoteTitleWidget from "../widgets/note_title.js";
import OwnedAttributeListWidget from "../widgets/type_property_widgets/owned_attribute_list.js"; import OwnedAttributeListWidget from "../widgets/type_property_widgets/owned_attribute_list.js";

View File

@ -161,7 +161,7 @@ $(window).on('hashchange', function() {
return; return;
} }
appContext.tabManager.switchToTab(ntxId, notePath); appContext.tabManager.switchToNoteContext(ntxId, notePath);
} }
}); });

View File

@ -74,17 +74,17 @@ export default class Entrypoints extends Component {
await ws.waitForMaxKnownEntityChangeId(); await ws.waitForMaxKnownEntityChangeId();
const hoistedNoteId = appContext.tabManager.getActiveNoteContext() const hoistedNoteId = appContext.tabManager.getActiveContext()
? appContext.tabManager.getActiveNoteContext().hoistedNoteId ? appContext.tabManager.getActiveContext().hoistedNoteId
: 'root'; : 'root';
await appContext.tabManager.openTabWithNote(note.noteId, true, null, hoistedNoteId); await appContext.tabManager.openContextWithNote(note.noteId, true, null, hoistedNoteId);
appContext.triggerEvent('focusAndSelectTitle'); appContext.triggerEvent('focusAndSelectTitle');
} }
async toggleNoteHoistingCommand() { async toggleNoteHoistingCommand() {
const noteContext = appContext.tabManager.getActiveNoteContext(); const noteContext = appContext.tabManager.getActiveContext();
if (noteContext.note.noteId === noteContext.hoistedNoteId) { if (noteContext.note.noteId === noteContext.hoistedNoteId) {
await noteContext.unhoist(); await noteContext.unhoist();
@ -95,7 +95,7 @@ export default class Entrypoints extends Component {
} }
async hoistNoteCommand({noteId}) { async hoistNoteCommand({noteId}) {
const noteContext = appContext.tabManager.getActiveNoteContext(); const noteContext = appContext.tabManager.getActiveContext();
if (noteContext.hoistedNoteId !== noteId) { if (noteContext.hoistedNoteId !== noteId) {
await noteContext.setHoistedNoteId(noteId); await noteContext.setHoistedNoteId(noteId);
@ -103,7 +103,7 @@ export default class Entrypoints extends Component {
} }
async unhoistCommand() { async unhoistCommand() {
const activeNoteContext = appContext.tabManager.getActiveNoteContext(); const activeNoteContext = appContext.tabManager.getActiveContext();
if (activeNoteContext) { if (activeNoteContext) {
activeNoteContext.unhoist(); activeNoteContext.unhoist();
@ -194,7 +194,7 @@ export default class Entrypoints extends Component {
} }
async runActiveNoteCommand() { async runActiveNoteCommand() {
const noteContext = appContext.tabManager.getActiveNoteContext(); const noteContext = appContext.tabManager.getActiveContext();
const note = noteContext.note; const note = noteContext.note;
// ctrl+enter is also used elsewhere so make sure we're running only when appropriate // ctrl+enter is also used elsewhere so make sure we're running only when appropriate
@ -220,7 +220,7 @@ export default class Entrypoints extends Component {
$(".tooltip").removeClass("show"); $(".tooltip").removeClass("show");
} }
tabNoteSwitchedEvent() { noteSwitchedEvent() {
this.hideAllTooltips(); this.hideAllTooltips();
} }

View File

@ -10,8 +10,8 @@ import searchService from './search.js';
import CollapsibleWidget from '../widgets/collapsible_widget.js'; import CollapsibleWidget from '../widgets/collapsible_widget.js';
import ws from "./ws.js"; import ws from "./ws.js";
import appContext from "./app_context.js"; import appContext from "./app_context.js";
import TabAwareWidget from "../widgets/tab_aware_widget.js"; import NoteContextAwareWidget from "../widgets/note_context_aware_widget.js";
import TabCachingWidget from "../widgets/tab_caching_widget.js"; import NoteContextCachingWidget from "../widgets/note_context_caching_widget.js";
import BasicWidget from "../widgets/basic_widget.js"; import BasicWidget from "../widgets/basic_widget.js";
/** /**
@ -39,11 +39,11 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null, $contain
/** @property {CollapsibleWidget} */ /** @property {CollapsibleWidget} */
this.CollapsibleWidget = CollapsibleWidget; this.CollapsibleWidget = CollapsibleWidget;
/** @property {TabAwareWidget} */ /** @property {NoteContextAwareWidget} */
this.TabAwareWidget = TabAwareWidget; this.TabAwareWidget = NoteContextAwareWidget;
/** @property {TabCachingWidget} */ /** @property {NoteContextCachingWidget} */
this.TabCachingWidget = TabCachingWidget; this.TabCachingWidget = NoteContextCachingWidget;
/** @property {BasicWidget} */ /** @property {BasicWidget} */
this.BasicWidget = BasicWidget; this.BasicWidget = BasicWidget;
@ -56,7 +56,7 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null, $contain
* @returns {Promise<void>} * @returns {Promise<void>}
*/ */
this.activateNote = async notePath => { this.activateNote = async notePath => {
await appContext.tabManager.getActiveNoteContext().setNote(notePath); await appContext.tabManager.getActiveContext().setNote(notePath);
}; };
/** /**
@ -68,7 +68,7 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null, $contain
this.activateNewNote = async notePath => { this.activateNewNote = async notePath => {
await ws.waitForMaxKnownEntityChangeId(); await ws.waitForMaxKnownEntityChangeId();
await appContext.tabManager.getActiveNoteContext().setNote(notePath); await appContext.tabManager.getActiveContext().setNote(notePath);
appContext.triggerEvent('focusAndSelectTitle'); appContext.triggerEvent('focusAndSelectTitle');
}; };
@ -82,7 +82,7 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null, $contain
this.openTabWithNote = async (notePath, activate) => { this.openTabWithNote = async (notePath, activate) => {
await ws.waitForMaxKnownEntityChangeId(); await ws.waitForMaxKnownEntityChangeId();
await appContext.tabManager.openTabWithNote(notePath, activate); await appContext.tabManager.openContextWithNote(notePath, activate);
if (activate) { if (activate) {
appContext.triggerEvent('focusAndSelectTitle'); appContext.triggerEvent('focusAndSelectTitle');
@ -313,7 +313,7 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null, $contain
* @method * @method
* @returns {NoteShort} active note (loaded into right pane) * @returns {NoteShort} active note (loaded into right pane)
*/ */
this.getActiveTabNote = () => appContext.tabManager.getActiveTabNote(); this.getActiveTabNote = () => appContext.tabManager.getActiveContextNote();
/** /**
* See https://ckeditor.com/docs/ckeditor5/latest/api/module_core_editor_editor-Editor.html for a documentation on the returned instance. * See https://ckeditor.com/docs/ckeditor5/latest/api/module_core_editor_editor-Editor.html for a documentation on the returned instance.
@ -327,7 +327,7 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null, $contain
* @method * @method
* @returns {Promise<string|null>} returns note path of active note or null if there isn't active note * @returns {Promise<string|null>} returns note path of active note or null if there isn't active note
*/ */
this.getActiveTabNotePath = () => appContext.tabManager.getActiveTabNotePath(); this.getActiveTabNotePath = () => appContext.tabManager.getActiveContextNotePath();
/** /**
* @method * @method
@ -340,7 +340,7 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null, $contain
* @method * @method
*/ */
this.protectActiveNote = async () => { this.protectActiveNote = async () => {
const activeNote = appContext.tabManager.getActiveTabNote(); const activeNote = appContext.tabManager.getActiveContextNote();
await protectedSessionService.protectNote(activeNote.noteId, true, false); await protectedSessionService.protectNote(activeNote.noteId, true, false);
}; };
@ -406,7 +406,7 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null, $contain
* @return {Promise} * @return {Promise}
*/ */
this.setHoistedNoteId = (noteId) => { this.setHoistedNoteId = (noteId) => {
const activeNoteContext = appContext.tabManager.getActiveNoteContext(); const activeNoteContext = appContext.tabManager.getActiveContext();
if (activeNoteContext) { if (activeNoteContext) {
activeNoteContext.setHoistedNoteId(noteId); activeNoteContext.setHoistedNoteId(noteId);

View File

@ -16,7 +16,7 @@ function setupGlobs() {
window.glob.getHeaders = server.getHeaders; window.glob.getHeaders = server.getHeaders;
// required for ESLint plugin and CKEditor // required for ESLint plugin and CKEditor
window.glob.getActiveTabNote = () => appContext.tabManager.getActiveTabNote(); window.glob.getActiveTabNote = () => appContext.tabManager.getActiveContextNote();
window.glob.requireLibrary = libraryLoader.requireLibrary; window.glob.requireLibrary = libraryLoader.requireLibrary;
window.glob.ESLINT = libraryLoader.ESLINT; window.glob.ESLINT = libraryLoader.ESLINT;
window.glob.appContext = appContext; // for debugging window.glob.appContext = appContext; // for debugging

View File

@ -2,13 +2,13 @@ import appContext from "./app_context.js";
import treeService from "./tree.js"; import treeService from "./tree.js";
function getHoistedNoteId() { function getHoistedNoteId() {
const activeNoteContext = appContext.tabManager.getActiveNoteContext(); const activeNoteContext = appContext.tabManager.getActiveContext();
return activeNoteContext ? activeNoteContext.hoistedNoteId : 'root'; return activeNoteContext ? activeNoteContext.hoistedNoteId : 'root';
} }
async function unhoist() { async function unhoist() {
const activeNoteContext = appContext.tabManager.getActiveNoteContext(); const activeNoteContext = appContext.tabManager.getActiveContext();
if (activeNoteContext) { if (activeNoteContext) {
await activeNoteContext.unhoist(); await activeNoteContext.unhoist();

View File

@ -64,7 +64,7 @@ ws.subscribeToMessages(async message => {
toastService.showPersistent(toast); toastService.showPersistent(toast);
if (message.result.importedNoteId) { if (message.result.importedNoteId) {
await appContext.tabManager.getActiveNoteContext().setNote(message.result.importedNoteId); await appContext.tabManager.getActiveContext().setNote(message.result.importedNoteId);
} }
} }
}); });

View File

@ -43,7 +43,7 @@ getActionsForScope("window").then(actions => {
server.get('keyboard-shortcuts-for-notes').then(shortcutForNotes => { server.get('keyboard-shortcuts-for-notes').then(shortcutForNotes => {
for (const shortcut in shortcutForNotes) { for (const shortcut in shortcutForNotes) {
utils.bindGlobalShortcut(shortcut, async () => { utils.bindGlobalShortcut(shortcut, async () => {
appContext.tabManager.getActiveNoteContext().setNote(shortcutForNotes[shortcut]); appContext.tabManager.getActiveContext().setNote(shortcutForNotes[shortcut]);
}); });
} }
}); });

View File

@ -85,11 +85,11 @@ function goToLink(e) {
const noteContext = ntxId const noteContext = ntxId
? appContext.tabManager.getNoteContextById(ntxId) ? appContext.tabManager.getNoteContextById(ntxId)
: appContext.tabManager.getActiveNoteContext(); : appContext.tabManager.getActiveContext();
noteContext.setNote(notePath).then(() => { noteContext.setNote(notePath).then(() => {
if (noteContext !== appContext.tabManager.getActiveNoteContext()) { if (noteContext !== appContext.tabManager.getActiveContext()) {
appContext.tabManager.activateTab(noteContext.ntxId); appContext.tabManager.activateNoteContext(noteContext.ntxId);
} }
}); });
} }

View File

@ -27,7 +27,7 @@ export default class MainTreeExecutors extends Component {
} }
async createNoteIntoCommand() { async createNoteIntoCommand() {
const activeNoteContext = appContext.tabManager.getActiveNoteContext(); const activeNoteContext = appContext.tabManager.getActiveContext();
if (!activeNoteContext) { if (!activeNoteContext) {
return; return;

View File

@ -31,7 +31,7 @@ async function autocompleteSourceForCKEditor(queryText) {
} }
async function autocompleteSource(term, cb, options = {}) { async function autocompleteSource(term, cb, options = {}) {
const activeNoteId = appContext.tabManager.getActiveTabNoteId(); const activeNoteId = appContext.tabManager.getActiveContextNoteId();
let results = await server.get('autocomplete' let results = await server.get('autocomplete'
+ '?query=' + encodeURIComponent(term) + '?query=' + encodeURIComponent(term)

View File

@ -20,7 +20,7 @@ class NoteContext extends Component {
} }
setEmpty() { setEmpty() {
this.triggerEvent('tabNoteSwitched', { this.triggerEvent('noteSwitched', {
noteContext: this, noteContext: this,
notePath: this.notePath notePath: this.notePath
}); });
@ -48,7 +48,7 @@ class NoteContext extends Component {
protectedSessionHolder.touchProtectedSessionIfNecessary(this.note); protectedSessionHolder.touchProtectedSessionIfNecessary(this.note);
if (triggerSwitchEvent) { if (triggerSwitchEvent) {
await this.triggerEvent('tabNoteSwitched', { await this.triggerEvent('noteSwitched', {
noteContext: this, noteContext: this,
notePath: this.notePath notePath: this.notePath
}); });
@ -180,7 +180,7 @@ class NoteContext extends Component {
this.noteId = null; this.noteId = null;
this.notePath = null; this.notePath = null;
this.triggerEvent('tabNoteSwitched', { this.triggerEvent('noteSwitched', {
noteContext: this, noteContext: this,
notePath: this.notePath notePath: this.notePath
}); });

View File

@ -20,7 +20,7 @@ async function createNote(parentNotePath, options = {}) {
options.isProtected = false; options.isProtected = false;
} }
if (appContext.tabManager.getActiveTabNoteType() !== 'text') { if (appContext.tabManager.getActiveContextNoteType() !== 'text') {
options.saveSelection = false; options.saveSelection = false;
} }
@ -48,7 +48,7 @@ async function createNote(parentNotePath, options = {}) {
await ws.waitForMaxKnownEntityChangeId(); await ws.waitForMaxKnownEntityChangeId();
if (options.activate) { if (options.activate) {
const activeNoteContext = appContext.tabManager.getActiveNoteContext(); const activeNoteContext = appContext.tabManager.getActiveContext();
await activeNoteContext.setNote(`${parentNotePath}/${note.noteId}`); await activeNoteContext.setNote(`${parentNotePath}/${note.noteId}`);
if (options.focus === 'title') { if (options.focus === 'title') {
@ -90,7 +90,7 @@ async function duplicateSubtree(noteId, parentNotePath) {
await ws.waitForMaxKnownEntityChangeId(); await ws.waitForMaxKnownEntityChangeId();
const activeNoteContext = appContext.tabManager.getActiveNoteContext(); const activeNoteContext = appContext.tabManager.getActiveContext();
activeNoteContext.setNote(`${parentNotePath}/${note.noteId}`); activeNoteContext.setNote(`${parentNotePath}/${note.noteId}`);
const origNote = await froca.getNote(noteId); const origNote = await froca.getNote(noteId);

View File

@ -35,7 +35,7 @@ export default class RootCommandExecutor extends Component {
} }
async editBranchPrefixCommand() { async editBranchPrefixCommand() {
const notePath = appContext.tabManager.getActiveTabNotePath(); const notePath = appContext.tabManager.getActiveContextNotePath();
if (notePath) { if (notePath) {
const editBranchPrefixDialog = await import("../dialogs/branch_prefix.js"); const editBranchPrefixDialog = await import("../dialogs/branch_prefix.js");
@ -64,7 +64,7 @@ export default class RootCommandExecutor extends Component {
async showSQLConsoleCommand() { async showSQLConsoleCommand() {
const sqlConsoleNote = await dateNoteService.createSqlConsole(); const sqlConsoleNote = await dateNoteService.createSqlConsole();
const noteContext = await appContext.tabManager.openTabWithNote(sqlConsoleNote.noteId, true); const noteContext = await appContext.tabManager.openContextWithNote(sqlConsoleNote.noteId, true);
appContext.triggerEvent('focusOnDetail', {ntxId: noteContext.ntxId}); appContext.triggerEvent('focusOnDetail', {ntxId: noteContext.ntxId});
} }
@ -72,7 +72,7 @@ export default class RootCommandExecutor extends Component {
async searchNotesCommand({searchString, ancestorNoteId}) { async searchNotesCommand({searchString, ancestorNoteId}) {
const searchNote = await dateNoteService.createSearchNote({searchString, ancestorNoteId}); const searchNote = await dateNoteService.createSearchNote({searchString, ancestorNoteId});
const noteContext = await appContext.tabManager.openTabWithNote(searchNote.noteId, true); const noteContext = await appContext.tabManager.openContextWithNote(searchNote.noteId, true);
appContext.triggerCommand('focusOnSearchDefinition', {ntxId: noteContext.ntxId}); appContext.triggerCommand('focusOnSearchDefinition', {ntxId: noteContext.ntxId});
} }
@ -88,7 +88,7 @@ export default class RootCommandExecutor extends Component {
} }
openNoteExternallyCommand() { openNoteExternallyCommand() {
const noteId = appContext.tabManager.getActiveTabNoteId(); const noteId = appContext.tabManager.getActiveContextNoteId();
if (noteId) { if (noteId) {
openService.openNoteExternally(noteId); openService.openNoteExternally(noteId);

View File

@ -4,7 +4,7 @@ const REQUEST_LOGGING_ENABLED = false;
async function getHeaders(headers) { async function getHeaders(headers) {
const appContext = (await import('./app_context.js')).default; const appContext = (await import('./app_context.js')).default;
const activeNoteContext = appContext.tabManager ? appContext.tabManager.getActiveNoteContext() : null; const activeNoteContext = appContext.tabManager ? appContext.tabManager.getActiveContext() : null;
// headers need to be lowercase because node.js automatically converts them to lower case // headers need to be lowercase because node.js automatically converts them to lower case
// also avoiding using underscores instead of dashes since nginx filters them out by default // also avoiding using underscores instead of dashes since nginx filters them out by default

View File

@ -5,7 +5,7 @@ import options from "./options.js";
import froca from "./froca.js"; import froca from "./froca.js";
import treeService from "./tree.js"; import treeService from "./tree.js";
import utils from "./utils.js"; import utils from "./utils.js";
import NoteContext from "./tab_context.js"; import NoteContext from "./note_context.js";
import appContext from "./app_context.js"; import appContext from "./app_context.js";
export default class TabManager extends Component { export default class TabManager extends Component {
@ -104,12 +104,12 @@ export default class TabManager extends Component {
await this.tabsUpdate.allowUpdateWithoutChange(async () => { await this.tabsUpdate.allowUpdateWithoutChange(async () => {
for (const tab of filteredTabs) { for (const tab of filteredTabs) {
await this.openTabWithNote(tab.notePath, tab.active, tab.ntxId, tab.hoistedNoteId, tab.mainNtxId); await this.openContextWithNote(tab.notePath, tab.active, tab.ntxId, tab.hoistedNoteId, tab.mainNtxId);
} }
}); });
} }
tabNoteSwitchedEvent({noteContext}) { noteSwitchedEvent({noteContext}) {
if (noteContext.isActive()) { if (noteContext.isActive()) {
this.setCurrentNotePathToHash(); this.setCurrentNotePathToHash();
} }
@ -118,7 +118,7 @@ export default class TabManager extends Component {
} }
setCurrentNotePathToHash() { setCurrentNotePathToHash() {
const activeNoteContext = this.getActiveNoteContext(); const activeNoteContext = this.getActiveContext();
if (window.history.length === 0 // first history entry if (window.history.length === 0 // first history entry
|| (activeNoteContext && activeNoteContext.notePath !== treeService.getHashValueFromAddress()[0])) { || (activeNoteContext && activeNoteContext.notePath !== treeService.getHashValueFromAddress()[0])) {
@ -155,50 +155,50 @@ export default class TabManager extends Component {
} }
/** @returns {NoteContext} */ /** @returns {NoteContext} */
getActiveNoteContext() { getActiveContext() {
return this.activeTabId return this.activeTabId
? this.getNoteContextById(this.activeTabId) ? this.getNoteContextById(this.activeTabId)
: null; : null;
} }
/** @returns {string|null} */ /** @returns {string|null} */
getActiveTabNotePath() { getActiveContextNotePath() {
const activeContext = this.getActiveNoteContext(); const activeContext = this.getActiveContext();
return activeContext ? activeContext.notePath : null; return activeContext ? activeContext.notePath : null;
} }
/** @return {NoteShort} */ /** @return {NoteShort} */
getActiveTabNote() { getActiveContextNote() {
const activeContext = this.getActiveNoteContext(); const activeContext = this.getActiveContext();
return activeContext ? activeContext.note : null; return activeContext ? activeContext.note : null;
} }
/** @return {string|null} */ /** @return {string|null} */
getActiveTabNoteId() { getActiveContextNoteId() {
const activeNote = this.getActiveTabNote(); const activeNote = this.getActiveContextNote();
return activeNote ? activeNote.noteId : null; return activeNote ? activeNote.noteId : null;
} }
/** @return {string|null} */ /** @return {string|null} */
getActiveTabNoteType() { getActiveContextNoteType() {
const activeNote = this.getActiveTabNote(); const activeNote = this.getActiveContextNote();
return activeNote ? activeNote.type : null; return activeNote ? activeNote.type : null;
} }
async switchToTab(ntxId, notePath) { async switchToNoteContext(ntxId, notePath) {
const noteContext = this.noteContexts.find(nc => nc.ntxId === ntxId) const noteContext = this.noteContexts.find(nc => nc.ntxId === ntxId)
|| await this.openEmptyTab(); || await this.openEmptyTab();
this.activateTab(noteContext.ntxId); this.activateNoteContext(noteContext.ntxId);
await noteContext.setNote(notePath); await noteContext.setNote(notePath);
} }
async openAndActivateEmptyTab() { async openAndActivateEmptyTab() {
const noteContext = await this.openEmptyTab(); const noteContext = await this.openEmptyTab();
await this.activateTab(noteContext.ntxId); await this.activateNoteContext(noteContext.ntxId);
await noteContext.setEmpty(); await noteContext.setEmpty();
} }
@ -214,7 +214,7 @@ export default class TabManager extends Component {
this.child(noteContext); this.child(noteContext);
await this.triggerEvent('newTabOpened', {noteContext}); await this.triggerEvent('newNoteContextCreated', {noteContext});
return noteContext; return noteContext;
} }
@ -223,7 +223,7 @@ export default class TabManager extends Component {
* If the requested notePath is within current note hoisting scope then keep the note hoisting also for the new tab. * If the requested notePath is within current note hoisting scope then keep the note hoisting also for the new tab.
*/ */
async openTabWithNoteWithHoisting(notePath) { async openTabWithNoteWithHoisting(notePath) {
const noteContext = this.getActiveNoteContext(); const noteContext = this.getActiveContext();
let hoistedNoteId = 'root'; let hoistedNoteId = 'root';
if (noteContext) { if (noteContext) {
@ -234,10 +234,10 @@ export default class TabManager extends Component {
} }
} }
return this.openTabWithNote(notePath, false, null, hoistedNoteId); return this.openContextWithNote(notePath, false, null, hoistedNoteId);
} }
async openTabWithNote(notePath, activate, ntxId, hoistedNoteId = 'root', mainNtxId = null) { async openContextWithNote(notePath, activate, ntxId, hoistedNoteId = 'root', mainNtxId = null) {
const noteContext = await this.openEmptyTab(ntxId, hoistedNoteId, mainNtxId); const noteContext = await this.openEmptyTab(ntxId, hoistedNoteId, mainNtxId);
if (notePath) { if (notePath) {
@ -245,9 +245,9 @@ export default class TabManager extends Component {
} }
if (activate) { if (activate) {
this.activateTab(noteContext.ntxId, false); this.activateNoteContext(noteContext.ntxId, false);
await this.triggerEvent('tabNoteSwitchedAndActivated', { await this.triggerEvent('noteSwitchedAndActivated', {
noteContext, noteContext,
notePath: noteContext.notePath // resolved note path notePath: noteContext.notePath // resolved note path
}); });
@ -259,7 +259,7 @@ export default class TabManager extends Component {
async activateOrOpenNote(noteId) { async activateOrOpenNote(noteId) {
for (const noteContext of this.getNoteContexts()) { for (const noteContext of this.getNoteContexts()) {
if (noteContext.note && noteContext.note.noteId === noteId) { if (noteContext.note && noteContext.note.noteId === noteId) {
this.activateTab(noteContext.ntxId); this.activateNoteContext(noteContext.ntxId);
return; return;
} }
@ -267,10 +267,10 @@ export default class TabManager extends Component {
// if no tab with this note has been found we'll create new tab // if no tab with this note has been found we'll create new tab
await this.openTabWithNote(noteId, true); await this.openContextWithNote(noteId, true);
} }
activateTab(ntxId, triggerEvent = true) { activateNoteContext(ntxId, triggerEvent = true) {
if (ntxId === this.activeTabId) { if (ntxId === this.activeTabId) {
return; return;
} }
@ -288,7 +288,7 @@ export default class TabManager extends Component {
this.setCurrentNotePathToHash(); this.setCurrentNotePathToHash();
} }
async removeTab(ntxId) { async removeNoteContext(ntxId) {
const mainNoteContextToRemove = this.getNoteContextById(ntxId).getMainNoteContext(); const mainNoteContextToRemove = this.getNoteContextById(ntxId).getMainNoteContext();
// close dangling autocompletes after closing the tab // close dangling autocompletes after closing the tab
@ -314,7 +314,7 @@ export default class TabManager extends Component {
this.children = this.children.filter(nc => !ntxIdsToRemove.includes(nc.ntxId)); this.children = this.children.filter(nc => !ntxIdsToRemove.includes(nc.ntxId));
this.triggerEvent('tabRemoved', {ntxIds: ntxIdsToRemove}); this.triggerEvent('noteContextRemoved', {ntxIds: ntxIdsToRemove});
this.tabsUpdate.scheduleUpdate(); this.tabsUpdate.scheduleUpdate();
} }
@ -335,18 +335,18 @@ export default class TabManager extends Component {
const oldIdx = this.mainNoteContexts.findIndex(nc => nc.ntxId === this.activeTabId); const oldIdx = this.mainNoteContexts.findIndex(nc => nc.ntxId === this.activeTabId);
const newActiveTabId = this.mainNoteContexts[oldIdx === this.noteContexts.length - 1 ? 0 : oldIdx + 1].ntxId; const newActiveTabId = this.mainNoteContexts[oldIdx === this.noteContexts.length - 1 ? 0 : oldIdx + 1].ntxId;
this.activateTab(newActiveTabId); this.activateNoteContext(newActiveTabId);
} }
activatePreviousTabCommand() { activatePreviousTabCommand() {
const oldIdx = this.mainNoteContexts.findIndex(nc => nc.ntxId === this.activeTabId); const oldIdx = this.mainNoteContexts.findIndex(nc => nc.ntxId === this.activeTabId);
const newActiveTabId = this.mainNoteContexts[oldIdx === 0 ? this.noteContexts.length - 1 : oldIdx - 1].ntxId; const newActiveTabId = this.mainNoteContexts[oldIdx === 0 ? this.noteContexts.length - 1 : oldIdx - 1].ntxId;
this.activateTab(newActiveTabId); this.activateNoteContext(newActiveTabId);
} }
closeActiveTabCommand() { closeActiveTabCommand() {
this.removeTab(this.activeTabId); this.removeNoteContext(this.activeTabId);
} }
beforeUnloadEvent() { beforeUnloadEvent() {
@ -361,14 +361,14 @@ export default class TabManager extends Component {
async removeAllTabsCommand() { async removeAllTabsCommand() {
for (const ntxIdToRemove of this.noteContexts.map(nc => nc.ntxId)) { for (const ntxIdToRemove of this.noteContexts.map(nc => nc.ntxId)) {
await this.removeTab(ntxIdToRemove); await this.removeNoteContext(ntxIdToRemove);
} }
} }
async removeAllTabsExceptForThisCommand({ntxId}) { async removeAllTabsExceptForThisCommand({ntxId}) {
for (const ntxIdToRemove of this.noteContexts.map(nc => nc.ntxId)) { for (const ntxIdToRemove of this.noteContexts.map(nc => nc.ntxId)) {
if (ntxIdToRemove !== ntxId) { if (ntxIdToRemove !== ntxId) {
await this.removeTab(ntxIdToRemove); await this.removeNoteContext(ntxIdToRemove);
} }
} }
} }
@ -376,7 +376,7 @@ export default class TabManager extends Component {
moveTabToNewWindowCommand({ntxId}) { moveTabToNewWindowCommand({ntxId}) {
const {notePath, hoistedNoteId} = this.getNoteContextById(ntxId); const {notePath, hoistedNoteId} = this.getNoteContextById(ntxId);
this.removeTab(ntxId); this.removeNoteContext(ntxId);
this.triggerCommand('openInWindow', {notePath, hoistedNoteId}); this.triggerCommand('openInWindow', {notePath, hoistedNoteId});
} }

View File

@ -39,7 +39,7 @@ class TreeContextMenu {
const note = await froca.getNote(this.node.data.noteId); const note = await froca.getNote(this.node.data.noteId);
const branch = froca.getBranch(this.node.data.branchId); const branch = froca.getBranch(this.node.data.branchId);
const isNotRoot = note.noteId !== 'root'; const isNotRoot = note.noteId !== 'root';
const isHoisted = note.noteId === appContext.tabManager.getActiveNoteContext().hoistedNoteId; const isHoisted = note.noteId === appContext.tabManager.getActiveContext().hoistedNoteId;
const parentNote = isNotRoot ? await froca.getNote(branch.parentNoteId) : null; const parentNote = isNotRoot ? await froca.getNote(branch.parentNoteId) : null;
// some actions don't support multi-note so they are disabled when notes are selected // some actions don't support multi-note so they are disabled when notes are selected

View File

@ -5,7 +5,7 @@ import linkService from "../../services/link.js";
import attributeAutocompleteService from "../../services/attribute_autocomplete.js"; import attributeAutocompleteService from "../../services/attribute_autocomplete.js";
import noteAutocompleteService from "../../services/note_autocomplete.js"; import noteAutocompleteService from "../../services/note_autocomplete.js";
import promotedAttributeDefinitionParser from '../../services/promoted_attribute_definition_parser.js'; import promotedAttributeDefinitionParser from '../../services/promoted_attribute_definition_parser.js';
import TabAwareWidget from "../tab_aware_widget.js"; import NoteContextAwareWidget from "../note_context_aware_widget.js";
import SpacedUpdate from "../../services/spaced_update.js"; import SpacedUpdate from "../../services/spaced_update.js";
import utils from "../../services/utils.js"; import utils from "../../services/utils.js";
@ -222,7 +222,7 @@ const ATTR_HELP = {
} }
}; };
export default class AttributeDetailWidget extends TabAwareWidget { export default class AttributeDetailWidget extends NoteContextAwareWidget {
async refresh() { async refresh() {
// switching note/tab should close the widget // switching note/tab should close the widget

View File

@ -1,4 +1,4 @@
import TabAwareWidget from "../tab_aware_widget.js"; import NoteContextAwareWidget from "../note_context_aware_widget.js";
import noteAutocompleteService from "../../services/note_autocomplete.js"; import noteAutocompleteService from "../../services/note_autocomplete.js";
import server from "../../services/server.js"; import server from "../../services/server.js";
import contextMenuService from "../../services/context_menu.js"; import contextMenuService from "../../services/context_menu.js";
@ -176,7 +176,7 @@ const editorConfig = {
mention: mentionSetup mention: mentionSetup
}; };
export default class AttributeEditorWidget extends TabAwareWidget { export default class AttributeEditorWidget extends NoteContextAwareWidget {
constructor(attributeDetailWidget) { constructor(attributeDetailWidget) {
super(); super();

View File

@ -1,4 +1,4 @@
import TabAwareWidget from "./tab_aware_widget.js"; import NoteContextAwareWidget from "./note_context_aware_widget.js";
import options from "../services/options.js"; import options from "../services/options.js";
const WIDGET_TPL = ` const WIDGET_TPL = `
@ -29,7 +29,7 @@ const WIDGET_TPL = `
</div> </div>
</div>`; </div>`;
export default class CollapsibleWidget extends TabAwareWidget { export default class CollapsibleWidget extends NoteContextAwareWidget {
get widgetTitle() { return "Untitled widget"; } get widgetTitle() { return "Untitled widget"; }
get headerActions() { return []; } get headerActions() { return []; }

View File

@ -56,7 +56,7 @@ export default class CalendarWidget extends CollapsibleWidget {
const note = await dateNoteService.getDateNote(date); const note = await dateNoteService.getDateNote(date);
if (note) { if (note) {
appContext.tabManager.getActiveNoteContext().setNote(note.noteId); appContext.tabManager.getActiveContext().setNote(note.noteId);
} }
else { else {
alert("Cannot find day note"); alert("Cannot find day note");

View File

@ -1,4 +1,4 @@
import TabAwareWidget from "../tab_aware_widget.js"; import NoteContextAwareWidget from "../note_context_aware_widget.js";
const TPL = ` const TPL = `
<div class="section-container"> <div class="section-container">
@ -57,7 +57,7 @@ const TPL = `
<div class="section-body-container"></div> <div class="section-body-container"></div>
</div>`; </div>`;
export default class CollapsibleSectionContainer extends TabAwareWidget { export default class CollapsibleSectionContainer extends NoteContextAwareWidget {
constructor() { constructor() {
super(); super();

View File

@ -14,14 +14,14 @@ export default class PaneContainer extends FlexContainer {
this.css('flex-grow', '1'); this.css('flex-grow', '1');
} }
async newTabOpenedEvent({noteContext}) { async newNoteContextCreatedEvent({noteContext}) {
const widget = this.widgetFactory(); const widget = this.widgetFactory();
const $renderedWidget = widget.render(); const $renderedWidget = widget.render();
$renderedWidget.attr("data-tab-id", noteContext.ntxId); $renderedWidget.attr("data-tab-id", noteContext.ntxId);
$renderedWidget.on('click', () => appContext.tabManager.activateTab(noteContext.ntxId)); $renderedWidget.on('click', () => appContext.tabManager.activateNoteContext(noteContext.ntxId));
this.$widget.append($renderedWidget); this.$widget.append($renderedWidget);
@ -35,9 +35,9 @@ export default class PaneContainer extends FlexContainer {
} }
async openNewPaneCommand() { async openNewPaneCommand() {
const noteContext = await appContext.tabManager.openEmptyTab(null, 'root', appContext.tabManager.getActiveNoteContext().ntxId); const noteContext = await appContext.tabManager.openEmptyTab(null, 'root', appContext.tabManager.getActiveContext().ntxId);
await appContext.tabManager.activateTab(noteContext.ntxId); await appContext.tabManager.activateNoteContext(noteContext.ntxId);
await noteContext.setEmpty(); await noteContext.setEmpty();
} }
@ -49,7 +49,7 @@ export default class PaneContainer extends FlexContainer {
toggleInt(show) {} // not needed toggleInt(show) {} // not needed
toggleExt(show) { toggleExt(show) {
const activeTabId = appContext.tabManager.getActiveNoteContext().getMainNoteContext().ntxId; const activeTabId = appContext.tabManager.getActiveContext().getMainNoteContext().ntxId;
for (const ntxId in this.widgets) { for (const ntxId in this.widgets) {
const noteContext = appContext.tabManager.getNoteContextById(ntxId); const noteContext = appContext.tabManager.getNoteContextById(ntxId);
@ -69,7 +69,7 @@ export default class PaneContainer extends FlexContainer {
* activation further note switches are always propagated to the tabs. * activation further note switches are always propagated to the tabs.
*/ */
handleEventInChildren(name, data) { handleEventInChildren(name, data) {
if (['tabNoteSwitched', 'tabNoteSwitchedAndActivated'].includes(name)) { if (['noteSwitched', 'noteSwitchedAndActivated'].includes(name)) {
// this event is propagated only to the widgets of a particular tab // this event is propagated only to the widgets of a particular tab
const widget = this.widgets[data.noteContext.ntxId]; const widget = this.widgets[data.noteContext.ntxId];
@ -79,7 +79,7 @@ export default class PaneContainer extends FlexContainer {
const promises = []; const promises = [];
if (appContext.tabManager.getActiveNoteContext().getMainNoteContext() === data.noteContext.getMainNoteContext()) { if (appContext.tabManager.getActiveContext().getMainNoteContext() === data.noteContext.getMainNoteContext()) {
promises.push(widget.handleEvent('activeTabChanged', data)); promises.push(widget.handleEvent('activeTabChanged', data));
} }
@ -95,14 +95,14 @@ export default class PaneContainer extends FlexContainer {
continue; continue;
} }
if (subNoteContext === data.noteContext && (subWidget.hasBeenAlreadyShown || name === 'tabNoteSwitchedAndActivated')) { if (subNoteContext === data.noteContext && (subWidget.hasBeenAlreadyShown || name === 'noteSwitchedAndActivated')) {
subWidget.hasBeenAlreadyShown = true; subWidget.hasBeenAlreadyShown = true;
promises.push(widget.handleEvent('tabNoteSwitched', data)); promises.push(widget.handleEvent('noteSwitched', data));
} }
} }
if (name === 'tabNoteSwitchedAndActivated') { if (name === 'noteSwitchedAndActivated') {
this.toggleExt(true); this.toggleExt(true);
} }

View File

@ -12,7 +12,7 @@ export default class RootContainer extends FlexContainer {
refresh() { refresh() {
this.$widget.removeClass(); // remove all classes this.$widget.removeClass(); // remove all classes
const note = appContext.tabManager.getActiveTabNote(); const note = appContext.tabManager.getActiveContextNote();
if (note) { if (note) {
this.$widget.addClass(note.getCssClass()); this.$widget.addClass(note.getCssClass());
@ -41,7 +41,7 @@ export default class RootContainer extends FlexContainer {
this.setZenMode(!this.isZenModeActive); this.setZenMode(!this.isZenModeActive);
} }
tabNoteSwitchedEvent() { noteSwitchedEvent() {
this.refresh(); this.refresh();
} }
@ -49,7 +49,7 @@ export default class RootContainer extends FlexContainer {
this.refresh(); this.refresh();
} }
tabNoteSwitchedAndActivatedEvent() { noteSwitchedAndActivatedEvent() {
this.refresh(); this.refresh();
} }

View File

@ -7,7 +7,7 @@ export default class ScrollingContainer extends Container {
this.css('height: 100%; overflow: auto;'); this.css('height: 100%; overflow: auto;');
} }
async tabNoteSwitchedEvent({noteContext, notePath}) { async noteSwitchedEvent({noteContext, notePath}) {
// if notePath does not match then the noteContext has been switched to another note in the mean time // if notePath does not match then the noteContext has been switched to another note in the mean time
if (noteContext.notePath === notePath) { if (noteContext.notePath === notePath) {
this.$widget.scrollTop(0); this.$widget.scrollTop(0);

View File

@ -13,7 +13,7 @@ class MobileDetailMenuWidget extends BasicWidget {
this.overflowing(); this.overflowing();
this.$widget.on("click", async e => { this.$widget.on("click", async e => {
const note = appContext.tabManager.getActiveTabNote(); const note = appContext.tabManager.getActiveContextNote();
contextMenu.show({ contextMenu.show({
x: e.pageX, x: e.pageX,
@ -26,10 +26,10 @@ class MobileDetailMenuWidget extends BasicWidget {
], ],
selectMenuItemHandler: async ({command}) => { selectMenuItemHandler: async ({command}) => {
if (command === "insertChildNote") { if (command === "insertChildNote") {
noteCreateService.createNote(appContext.tabManager.getActiveTabNotePath()); noteCreateService.createNote(appContext.tabManager.getActiveContextNotePath());
} }
else if (command === "delete") { else if (command === "delete") {
const notePath = appContext.tabManager.getActiveTabNotePath(); const notePath = appContext.tabManager.getActiveContextNotePath();
const branchId = await treeService.getBranchIdFromNotePath(notePath); const branchId = await treeService.getBranchIdFromNotePath(notePath);
if (!branchId) { if (!branchId) {

View File

@ -1,4 +1,4 @@
import TabAwareWidget from "./tab_aware_widget.js"; import NoteContextAwareWidget from "./note_context_aware_widget.js";
import protectedSessionService from "../services/protected_session.js"; import protectedSessionService from "../services/protected_session.js";
import utils from "../services/utils.js"; import utils from "../services/utils.js";
@ -100,7 +100,7 @@ const TPL = `
</div> </div>
</div>`; </div>`;
export default class NoteActionsWidget extends TabAwareWidget { export default class NoteActionsWidget extends NoteContextAwareWidget {
doRender() { doRender() {
this.$widget = $(TPL); this.$widget = $(TPL);
this.overflowing(); this.overflowing();

View File

@ -1,7 +1,7 @@
import BasicWidget from "./basic_widget.js"; import BasicWidget from "./basic_widget.js";
import appContext from "../services/app_context.js"; import appContext from "../services/app_context.js";
export default class TabAwareWidget extends BasicWidget { export default class NoteContextAwareWidget extends BasicWidget {
isTab(ntxId) { isTab(ntxId) {
if (Array.isArray(ntxId)) { if (Array.isArray(ntxId)) {
return this.noteContext && ntxId.includes(this.noteContext.ntxId); return this.noteContext && ntxId.includes(this.noteContext.ntxId);
@ -59,7 +59,7 @@ export default class TabAwareWidget extends BasicWidget {
async refreshWithNote(note) {} async refreshWithNote(note) {}
async tabNoteSwitchedEvent({noteContext, notePath}) { async noteSwitchedEvent({noteContext, notePath}) {
// if notePath does not match then the noteContext has been switched to another note in the mean time // if notePath does not match then the noteContext has been switched to another note in the mean time
if (noteContext.notePath === notePath) { if (noteContext.notePath === notePath) {
await this.noteSwitched(); await this.noteSwitched();
@ -81,7 +81,7 @@ export default class TabAwareWidget extends BasicWidget {
} }
// when note is both switched and activated, this should not produce double refresh // when note is both switched and activated, this should not produce double refresh
async tabNoteSwitchedAndActivatedEvent({noteContext, notePath}) { async noteSwitchedAndActivatedEvent({noteContext, notePath}) {
this.noteContext = noteContext; this.noteContext = noteContext;
// if notePath does not match then the noteContext has been switched to another note in the mean time // if notePath does not match then the noteContext has been switched to another note in the mean time
@ -107,7 +107,7 @@ export default class TabAwareWidget extends BasicWidget {
async lazyLoadedEvent() { async lazyLoadedEvent() {
if (!this.noteContext) { // has not been loaded yet if (!this.noteContext) { // has not been loaded yet
this.noteContext = appContext.tabManager.getActiveNoteContext(); this.noteContext = appContext.tabManager.getActiveContext();
} }
await this.refresh(); await this.refresh();

View File

@ -1,7 +1,7 @@
import TabAwareWidget from "./tab_aware_widget.js"; import NoteContextAwareWidget from "./note_context_aware_widget.js";
import keyboardActionsService from "../services/keyboard_actions.js"; import keyboardActionsService from "../services/keyboard_actions.js";
export default class TabCachingWidget extends TabAwareWidget { export default class NoteContextCachingWidget extends NoteContextAwareWidget {
constructor(widgetFactory) { constructor(widgetFactory) {
super(); super();
@ -13,7 +13,7 @@ export default class TabCachingWidget extends TabAwareWidget {
return this.$widget = $(`<div class="marker" style="display: none;">`); return this.$widget = $(`<div class="marker" style="display: none;">`);
} }
async newTabOpenedEvent({noteContext}) { async newNoteContextCreatedEvent({noteContext}) {
const {ntxId} = noteContext; const {ntxId} = noteContext;
if (this.widgets[ntxId]) { if (this.widgets[ntxId]) {
@ -34,7 +34,7 @@ export default class TabCachingWidget extends TabAwareWidget {
this.child(this.widgets[ntxId]); // add as child only once it is ready (rendered with noteContext) this.child(this.widgets[ntxId]); // add as child only once it is ready (rendered with noteContext)
} }
tabRemovedEvent({ntxIds}) { noteContextRemovedEvent({ntxIds}) {
for (const ntxId of ntxIds) { for (const ntxId of ntxIds) {
const widget = this.widgets[ntxId]; const widget = this.widgets[ntxId];
@ -65,7 +65,7 @@ export default class TabCachingWidget extends TabAwareWidget {
* activation further note switches are always propagated to the tabs. * activation further note switches are always propagated to the tabs.
*/ */
handleEventInChildren(name, data) { handleEventInChildren(name, data) {
if (['tabNoteSwitched', 'tabNoteSwitchedAndActivated'].includes(name)) { if (['noteSwitched', 'noteSwitchedAndActivated'].includes(name)) {
// this event is propagated only to the widgets of a particular tab // this event is propagated only to the widgets of a particular tab
let widget = this.widgets[data.noteContext.ntxId]; let widget = this.widgets[data.noteContext.ntxId];
@ -73,10 +73,10 @@ export default class TabCachingWidget extends TabAwareWidget {
widget = this.widgets[data.noteContext.mainNtxId]; widget = this.widgets[data.noteContext.mainNtxId];
} }
if (widget && (widget.hasBeenAlreadyShown || name === 'tabNoteSwitchedAndActivated')) { if (widget && (widget.hasBeenAlreadyShown || name === 'noteSwitchedAndActivated')) {
widget.hasBeenAlreadyShown = true; widget.hasBeenAlreadyShown = true;
return widget.handleEvent('tabNoteSwitched', data); return widget.handleEvent('noteSwitched', data);
} }
else { else {
return Promise.resolve(); return Promise.resolve();

View File

@ -1,4 +1,4 @@
import TabAwareWidget from "./tab_aware_widget.js"; import NoteContextAwareWidget from "./note_context_aware_widget.js";
import utils from "../services/utils.js"; import utils from "../services/utils.js";
import protectedSessionHolder from "../services/protected_session_holder.js"; import protectedSessionHolder from "../services/protected_session_holder.js";
import SpacedUpdate from "../services/spaced_update.js"; import SpacedUpdate from "../services/spaced_update.js";
@ -48,7 +48,7 @@ const typeWidgetClasses = {
'book': BookTypeWidget 'book': BookTypeWidget
}; };
export default class NoteDetailWidget extends TabAwareWidget { export default class NoteDetailWidget extends NoteContextAwareWidget {
constructor() { constructor() {
super(); super();
@ -82,7 +82,7 @@ export default class NoteDetailWidget extends TabAwareWidget {
this.$widget.on("dragleave", e => e.preventDefault()); this.$widget.on("dragleave", e => e.preventDefault());
this.$widget.on("drop", async e => { this.$widget.on("drop", async e => {
const activeNote = appContext.tabManager.getActiveTabNote(); const activeNote = appContext.tabManager.getActiveContextNote();
if (!activeNote) { if (!activeNote) {
return; return;
@ -122,7 +122,7 @@ export default class NoteDetailWidget extends TabAwareWidget {
await typeWidget.handleEvent('setNoteContext', {noteContext: this.noteContext}); await typeWidget.handleEvent('setNoteContext', {noteContext: this.noteContext});
// this is happening in update() so note has been already set and we need to reflect this // this is happening in update() so note has been already set and we need to reflect this
await typeWidget.handleEvent('tabNoteSwitched', { await typeWidget.handleEvent('noteSwitched', {
noteContext: this.noteContext, noteContext: this.noteContext,
notePath: this.noteContext.notePath notePath: this.noteContext.notePath
}); });
@ -291,14 +291,14 @@ export default class NoteDetailWidget extends TabAwareWidget {
} }
async cutIntoNoteCommand() { async cutIntoNoteCommand() {
const note = appContext.tabManager.getActiveTabNote(); const note = appContext.tabManager.getActiveContextNote();
if (!note) { if (!note) {
return; return;
} }
// without await as this otherwise causes deadlock through component mutex // without await as this otherwise causes deadlock through component mutex
noteCreateService.createNote(appContext.tabManager.getActiveTabNotePath(), { noteCreateService.createNote(appContext.tabManager.getActiveContextNotePath(), {
isProtected: note.isProtected, isProtected: note.isProtected,
saveSelection: true saveSelection: true
}); });

View File

@ -1,4 +1,4 @@
import TabAwareWidget from "./tab_aware_widget.js"; import NoteContextAwareWidget from "./note_context_aware_widget.js";
import attributeService from "../services/attributes.js"; import attributeService from "../services/attributes.js";
const TPL = ` const TPL = `
@ -75,7 +75,7 @@ const TPL = `
</div> </div>
</div>`; </div>`;
export default class NoteIconWidget extends TabAwareWidget { export default class NoteIconWidget extends NoteContextAwareWidget {
doRender() { doRender() {
this.$widget = $(TPL); this.$widget = $(TPL);
this.overflowing(); this.overflowing();

View File

@ -1,4 +1,4 @@
import TabAwareWidget from "./tab_aware_widget.js"; import NoteContextAwareWidget from "./note_context_aware_widget.js";
import NoteListRenderer from "../services/note_list_renderer.js"; import NoteListRenderer from "../services/note_list_renderer.js";
const TPL = ` const TPL = `
@ -20,7 +20,7 @@ const TPL = `
</div> </div>
</div>`; </div>`;
export default class NoteListWidget extends TabAwareWidget { export default class NoteListWidget extends NoteContextAwareWidget {
isEnabled() { isEnabled() {
return super.isEnabled() return super.isEnabled()
&& ['book', 'text', 'code'].includes(this.note.type) && ['book', 'text', 'code'].includes(this.note.type)

View File

@ -1,4 +1,4 @@
import TabAwareWidget from "./tab_aware_widget.js"; import NoteContextAwareWidget from "./note_context_aware_widget.js";
import treeService from "../services/tree.js"; import treeService from "../services/tree.js";
import linkService from "../services/link.js"; import linkService from "../services/link.js";
@ -36,7 +36,7 @@ const TPL = `
</ul> </ul>
</div>`; </div>`;
export default class NotePathsWidget extends TabAwareWidget { export default class NotePathsWidget extends NoteContextAwareWidget {
doRender() { doRender() {
this.$widget = $(TPL); this.$widget = $(TPL);
this.overflowing(); this.overflowing();

View File

@ -1,4 +1,4 @@
import TabAwareWidget from "./tab_aware_widget.js"; import NoteContextAwareWidget from "./note_context_aware_widget.js";
import utils from "../services/utils.js"; import utils from "../services/utils.js";
import protectedSessionHolder from "../services/protected_session_holder.js"; import protectedSessionHolder from "../services/protected_session_holder.js";
import server from "../services/server.js"; import server from "../services/server.js";
@ -27,7 +27,7 @@ const TPL = `
<input autocomplete="off" value="" placeholder="type note's title here..." class="note-title" tabindex="100"> <input autocomplete="off" value="" placeholder="type note's title here..." class="note-title" tabindex="100">
</div>`; </div>`;
export default class NoteTitleWidget extends TabAwareWidget { export default class NoteTitleWidget extends NoteContextAwareWidget {
constructor() { constructor() {
super(); super();

View File

@ -5,7 +5,7 @@ import contextMenu from "../services/context_menu.js";
import froca from "../services/froca.js"; import froca from "../services/froca.js";
import branchService from "../services/branches.js"; import branchService from "../services/branches.js";
import ws from "../services/ws.js"; import ws from "../services/ws.js";
import TabAwareWidget from "./tab_aware_widget.js"; import NoteContextAwareWidget from "./note_context_aware_widget.js";
import server from "../services/server.js"; import server from "../services/server.js";
import noteCreateService from "../services/note_create.js"; import noteCreateService from "../services/note_create.js";
import toastService from "../services/toast.js"; import toastService from "../services/toast.js";
@ -197,7 +197,7 @@ const TPL = `
const MAX_SEARCH_RESULTS_IN_TREE = 100; const MAX_SEARCH_RESULTS_IN_TREE = 100;
export default class NoteTreeWidget extends TabAwareWidget { export default class NoteTreeWidget extends NoteContextAwareWidget {
constructor(treeName) { constructor(treeName) {
super(); super();
@ -395,7 +395,7 @@ export default class NoteTreeWidget extends TabAwareWidget {
const notePath = treeService.getNotePath(data.node); const notePath = treeService.getNotePath(data.node);
const activeNoteContext = appContext.tabManager.getActiveNoteContext(); const activeNoteContext = appContext.tabManager.getActiveContext();
await activeNoteContext.setNote(notePath); await activeNoteContext.setNote(notePath);
if (utils.isMobile()) { if (utils.isMobile()) {
@ -525,7 +525,7 @@ export default class NoteTreeWidget extends TabAwareWidget {
} }
const note = await froca.getNote(node.data.noteId); const note = await froca.getNote(node.data.noteId);
const activeNoteContext = appContext.tabManager.getActiveNoteContext(); const activeNoteContext = appContext.tabManager.getActiveContext();
const $span = $(node.span); const $span = $(node.span);
@ -810,7 +810,7 @@ export default class NoteTreeWidget extends TabAwareWidget {
} }
async scrollToActiveNoteEvent() { async scrollToActiveNoteEvent() {
const activeContext = appContext.tabManager.getActiveNoteContext(); const activeContext = appContext.tabManager.getActiveContext();
if (activeContext && activeContext.notePath) { if (activeContext && activeContext.notePath) {
this.tree.$container.focus(); this.tree.$container.focus();
@ -1162,7 +1162,7 @@ export default class NoteTreeWidget extends TabAwareWidget {
// this should be done by NoteContext / TabManager and note tree should only listen to // this should be done by NoteContext / TabManager and note tree should only listen to
// changes in active note and just set the "active" state // changes in active note and just set the "active" state
// We don't await since that can bring up infinite cycles when e.g. custom widget does some backend requests which wait for max sync ID processed // We don't await since that can bring up infinite cycles when e.g. custom widget does some backend requests which wait for max sync ID processed
appContext.tabManager.getActiveNoteContext().setNote(nextNotePath).then(() => { appContext.tabManager.getActiveContext().setNote(nextNotePath).then(() => {
const newActiveNode = this.getActiveNode(); const newActiveNode = this.getActiveNode();
// return focus if the previously active node was also focused // return focus if the previously active node was also focused

View File

@ -1,6 +1,6 @@
import server from '../services/server.js'; import server from '../services/server.js';
import mimeTypesService from '../services/mime_types.js'; import mimeTypesService from '../services/mime_types.js';
import TabAwareWidget from "./tab_aware_widget.js"; import NoteContextAwareWidget from "./note_context_aware_widget.js";
const NOTE_TYPES = [ const NOTE_TYPES = [
{ type: "file", title: "File", selectable: false }, { type: "file", title: "File", selectable: false },
@ -31,7 +31,7 @@ const TPL = `
</div> </div>
`; `;
export default class NoteTypeWidget extends TabAwareWidget { export default class NoteTypeWidget extends NoteContextAwareWidget {
doRender() { doRender() {
this.$widget = $(TPL); this.$widget = $(TPL);
this.overflowing(); this.overflowing();

View File

@ -1,4 +1,4 @@
import TabAwareWidget from "./tab_aware_widget.js"; import NoteContextAwareWidget from "./note_context_aware_widget.js";
import server from "../services/server.js"; import server from "../services/server.js";
import fileWatcher from "../services/file_watcher.js"; import fileWatcher from "../services/file_watcher.js";
@ -19,7 +19,7 @@ const TPL = `
</div> </div>
</div>`; </div>`;
export default class NoteUpdateStatusWidget extends TabAwareWidget { export default class NoteUpdateStatusWidget extends NoteContextAwareWidget {
isEnabled() { isEnabled() {
return super.isEnabled() return super.isEnabled()
&& !!fileWatcher.getFileModificationStatus(this.noteId); && !!fileWatcher.getFileModificationStatus(this.noteId);

View File

@ -98,13 +98,13 @@ export default class QuickSearchWidget extends BasicWidget {
if (!e.target || e.target.nodeName !== 'A') { if (!e.target || e.target.nodeName !== 'A') {
// click on the link is handled by link handling but we want the whole item clickable // click on the link is handled by link handling but we want the whole item clickable
appContext.tabManager.getActiveNoteContext().setNote(note.noteId); appContext.tabManager.getActiveContext().setNote(note.noteId);
} }
}); });
utils.bindElShortcut($link, 'return', () => { utils.bindElShortcut($link, 'return', () => {
this.$dropdownToggle.dropdown("hide"); this.$dropdownToggle.dropdown("hide");
appContext.tabManager.getActiveNoteContext().setNote(note.noteId); appContext.tabManager.getActiveContext().setNote(note.noteId);
}); });
this.$dropdownMenu.append($link); this.$dropdownMenu.append($link);
@ -131,7 +131,7 @@ export default class QuickSearchWidget extends BasicWidget {
async showInFullSearch() { async showInFullSearch() {
const searchNote = await dateNotesService.createSearchNote({searchString: this.$searchString.val()}); const searchNote = await dateNotesService.createSearchNote({searchString: this.$searchString.val()});
await appContext.tabManager.getActiveNoteContext().setNote(searchNote.noteId); await appContext.tabManager.getActiveContext().setNote(searchNote.noteId);
} }
quickSearchEvent() { quickSearchEvent() {

View File

@ -1,4 +1,4 @@
import TabAwareWidget from "./tab_aware_widget.js"; import NoteContextAwareWidget from "./note_context_aware_widget.js";
import NoteListRenderer from "../services/note_list_renderer.js"; import NoteListRenderer from "../services/note_list_renderer.js";
const TPL = ` const TPL = `
@ -33,7 +33,7 @@ const TPL = `
</div> </div>
</div>`; </div>`;
export default class SearchResultWidget extends TabAwareWidget { export default class SearchResultWidget extends NoteContextAwareWidget {
isEnabled() { isEnabled() {
return super.isEnabled() return super.isEnabled()
&& this.note.type === 'search'; && this.note.type === 'search';

View File

@ -1,7 +1,7 @@
import linkService from "../services/link.js"; import linkService from "../services/link.js";
import server from "../services/server.js"; import server from "../services/server.js";
import froca from "../services/froca.js"; import froca from "../services/froca.js";
import TabAwareWidget from "./tab_aware_widget.js"; import NoteContextAwareWidget from "./note_context_aware_widget.js";
import options from "../services/options.js"; import options from "../services/options.js";
const TPL = ` const TPL = `
@ -39,7 +39,7 @@ const TPL = `
</div> </div>
`; `;
export default class SimilarNotesWidget extends TabAwareWidget { export default class SimilarNotesWidget extends NoteContextAwareWidget {
isEnabled() { isEnabled() {
return super.isEnabled() return super.isEnabled()
&& this.note.type !== 'search' && this.note.type !== 'search'

View File

@ -1,4 +1,4 @@
import TabAwareWidget from "./tab_aware_widget.js"; import NoteContextAwareWidget from "./note_context_aware_widget.js";
const TPL = ` const TPL = `
<div class="sql-result-widget"> <div class="sql-result-widget">
@ -11,7 +11,7 @@ const TPL = `
<div class="sql-console-result-container"></div> <div class="sql-console-result-container"></div>
</div>`; </div>`;
export default class SqlResultWidget extends TabAwareWidget { export default class SqlResultWidget extends NoteContextAwareWidget {
isEnabled() { isEnabled() {
return this.note return this.note
&& this.note.mime === 'text/x-sqlite;schema=trilium' && this.note.mime === 'text/x-sqlite;schema=trilium'

View File

@ -1,4 +1,4 @@
import TabAwareWidget from "./tab_aware_widget.js"; import NoteContextAwareWidget from "./note_context_aware_widget.js";
import treeService from "../services/tree.js"; import treeService from "../services/tree.js";
import linkService from "../services/link.js"; import linkService from "../services/link.js";
import hoistedNoteService from "../services/hoisted_note.js"; import hoistedNoteService from "../services/hoisted_note.js";
@ -33,7 +33,7 @@ const TPL = `
<span class="sql-table-schemas"></span> <span class="sql-table-schemas"></span>
</div>`; </div>`;
export default class SqlTableSchemasWidget extends TabAwareWidget { export default class SqlTableSchemasWidget extends NoteContextAwareWidget {
isEnabled() { isEnabled() {
return this.note return this.note
&& this.note.mime === 'text/x-sqlite;schema=trilium' && this.note.mime === 'text/x-sqlite;schema=trilium'

View File

@ -409,13 +409,13 @@ export default class TabRowWidget extends BasicWidget {
closeActiveTabCommand({$el}) { closeActiveTabCommand({$el}) {
const ntxId = $el.closest(".note-tab").attr('data-tab-id'); const ntxId = $el.closest(".note-tab").attr('data-tab-id');
appContext.tabManager.removeTab(ntxId); appContext.tabManager.removeNoteContext(ntxId);
} }
setTabCloseEvent($tab) { setTabCloseEvent($tab) {
$tab.on('mousedown', e => { $tab.on('mousedown', e => {
if (e.which === 2) { if (e.which === 2) {
appContext.tabManager.removeTab($tab.attr('data-tab-id')); appContext.tabManager.removeNoteContext($tab.attr('data-tab-id'));
return true; // event has been handled return true; // event has been handled
} }
@ -427,7 +427,7 @@ export default class TabRowWidget extends BasicWidget {
} }
activeTabChangedEvent() { activeTabChangedEvent() {
let activeNoteContext = appContext.tabManager.getActiveNoteContext(); let activeNoteContext = appContext.tabManager.getActiveContext();
if (!activeNoteContext) { if (!activeNoteContext) {
return; return;
@ -444,7 +444,7 @@ export default class TabRowWidget extends BasicWidget {
if (tabEl) tabEl.setAttribute('active', ''); if (tabEl) tabEl.setAttribute('active', '');
} }
newTabOpenedEvent({noteContext}) { newNoteContextCreatedEvent({noteContext}) {
if (!noteContext.mainNtxId) { if (!noteContext.mainNtxId) {
this.addTab(noteContext.ntxId); this.addTab(noteContext.ntxId);
} }
@ -478,7 +478,7 @@ export default class TabRowWidget extends BasicWidget {
return $tab.attr('data-tab-id'); return $tab.attr('data-tab-id');
} }
tabRemovedEvent({ntxIds}) { noteContextRemovedEvent({ntxIds}) {
for (const ntxId of ntxIds) { for (const ntxId of ntxIds) {
this.removeTab(ntxId); this.removeTab(ntxId);
} }
@ -517,7 +517,7 @@ export default class TabRowWidget extends BasicWidget {
this.draggabillies.push(draggabilly); this.draggabillies.push(draggabilly);
draggabilly.on('pointerDown', _ => { draggabilly.on('pointerDown', _ => {
appContext.tabManager.activateTab(tabEl.getAttribute('data-tab-id')); appContext.tabManager.activateNoteContext(tabEl.getAttribute('data-tab-id'));
}); });
draggabilly.on('dragStart', _ => { draggabilly.on('dragStart', _ => {
@ -611,13 +611,13 @@ export default class TabRowWidget extends BasicWidget {
return closestIndex; return closestIndex;
}; };
tabNoteSwitchedAndActivatedEvent({noteContext}) { noteSwitchedAndActivatedEvent({noteContext}) {
this.activeTabChangedEvent(); this.activeTabChangedEvent();
this.updateTabById(noteContext.mainNtxId || noteContext.ntxId); this.updateTabById(noteContext.mainNtxId || noteContext.ntxId);
} }
tabNoteSwitchedEvent({noteContext}) { noteSwitchedEvent({noteContext}) {
this.updateTabById(noteContext.mainNtxId || noteContext.ntxId); this.updateTabById(noteContext.mainNtxId || noteContext.ntxId);
} }

View File

@ -1,5 +1,5 @@
import server from "../../services/server.js"; import server from "../../services/server.js";
import TabAwareWidget from "../tab_aware_widget.js"; import NoteContextAwareWidget from "../note_context_aware_widget.js";
import toastService from "../../services/toast.js"; import toastService from "../../services/toast.js";
import openService from "../../services/open.js"; import openService from "../../services/open.js";
import utils from "../../services/utils.js"; import utils from "../../services/utils.js";
@ -54,7 +54,7 @@ const TPL = `
</table> </table>
</div>`; </div>`;
export default class FilePropertiesWidget extends TabAwareWidget { export default class FilePropertiesWidget extends NoteContextAwareWidget {
static getType() { return "file"; } static getType() { return "file"; }
isEnabled() { isEnabled() {

View File

@ -1,5 +1,5 @@
import server from "../../services/server.js"; import server from "../../services/server.js";
import TabAwareWidget from "../tab_aware_widget.js"; import NoteContextAwareWidget from "../note_context_aware_widget.js";
import toastService from "../../services/toast.js"; import toastService from "../../services/toast.js";
import openService from "../../services/open.js"; import openService from "../../services/open.js";
import utils from "../../services/utils.js"; import utils from "../../services/utils.js";
@ -36,7 +36,7 @@ const TPL = `
<input type="file" class="image-upload-new-revision-input" style="display: none"> <input type="file" class="image-upload-new-revision-input" style="display: none">
</div>`; </div>`;
export default class ImagePropertiesWidget extends TabAwareWidget { export default class ImagePropertiesWidget extends NoteContextAwareWidget {
static getType() { return "image"; } static getType() { return "image"; }
isEnabled() { isEnabled() {

View File

@ -1,4 +1,4 @@
import TabAwareWidget from "../tab_aware_widget.js"; import NoteContextAwareWidget from "../note_context_aware_widget.js";
import AttributeDetailWidget from "../attribute_widgets/attribute_detail.js"; import AttributeDetailWidget from "../attribute_widgets/attribute_detail.js";
import attributeRenderer from "../../services/attribute_renderer.js"; import attributeRenderer from "../../services/attribute_renderer.js";
@ -20,7 +20,7 @@ const TPL = `
<div class="inherited-attributes-container"></div> <div class="inherited-attributes-container"></div>
</div>`; </div>`;
export default class InheritedAttributesWidget extends TabAwareWidget { export default class InheritedAttributesWidget extends NoteContextAwareWidget {
constructor() { constructor() {
super(); super();

View File

@ -1,4 +1,4 @@
import TabAwareWidget from "../tab_aware_widget.js"; import NoteContextAwareWidget from "../note_context_aware_widget.js";
const TPL = ` const TPL = `
<div class="note-properties-widget"> <div class="note-properties-widget">
@ -14,7 +14,7 @@ const TPL = `
</div> </div>
</div>`; </div>`;
export default class NotePropertiesWidget extends TabAwareWidget { export default class NotePropertiesWidget extends NoteContextAwareWidget {
static getType() { return "note-properties"; } static getType() { return "note-properties"; }
isEnabled() { isEnabled() {

View File

@ -1,4 +1,4 @@
import TabAwareWidget from "../tab_aware_widget.js"; import NoteContextAwareWidget from "../note_context_aware_widget.js";
import AttributeDetailWidget from "../attribute_widgets/attribute_detail.js"; import AttributeDetailWidget from "../attribute_widgets/attribute_detail.js";
import AttributeEditorWidget from "../attribute_widgets/attribute_editor.js"; import AttributeEditorWidget from "../attribute_widgets/attribute_editor.js";
@ -21,7 +21,7 @@ const TPL = `
</div> </div>
`; `;
export default class OwnedAttributeListWidget extends TabAwareWidget { export default class OwnedAttributeListWidget extends NoteContextAwareWidget {
constructor() { constructor() {
super(); super();

View File

@ -2,7 +2,7 @@ import server from "../../services/server.js";
import ws from "../../services/ws.js"; import ws from "../../services/ws.js";
import treeService from "../../services/tree.js"; import treeService from "../../services/tree.js";
import noteAutocompleteService from "../../services/note_autocomplete.js"; import noteAutocompleteService from "../../services/note_autocomplete.js";
import TabAwareWidget from "../tab_aware_widget.js"; import NoteContextAwareWidget from "../note_context_aware_widget.js";
const TPL = ` const TPL = `
<div> <div>
@ -34,7 +34,7 @@ const TPL = `
</div> </div>
`; `;
export default class PromotedAttributesWidget extends TabAwareWidget { export default class PromotedAttributesWidget extends NoteContextAwareWidget {
doRender() { doRender() {
this.$widget = $(TPL); this.$widget = $(TPL);
this.overflowing(); this.overflowing();

View File

@ -1,5 +1,5 @@
import server from "../../services/server.js"; import server from "../../services/server.js";
import TabAwareWidget from "../tab_aware_widget.js"; import NoteContextAwareWidget from "../note_context_aware_widget.js";
import froca from "../../services/froca.js"; import froca from "../../services/froca.js";
import ws from "../../services/ws.js"; import ws from "../../services/ws.js";
import toastService from "../../services/toast.js"; import toastService from "../../services/toast.js";
@ -199,7 +199,7 @@ for (const clazz of [
ACTION_CLASSES[clazz.actionName] = clazz; ACTION_CLASSES[clazz.actionName] = clazz;
} }
export default class SearchDefinitionWidget extends TabAwareWidget { export default class SearchDefinitionWidget extends NoteContextAwareWidget {
static getType() { return "search"; } static getType() { return "search"; }
isEnabled() { isEnabled() {

View File

@ -23,7 +23,7 @@ export default class AbstractTextTypeWidget extends TypeWidget {
const noteId = this.getNoteIdFromImage(imgSrc); const noteId = this.getNoteIdFromImage(imgSrc);
if (noteId) { if (noteId) {
appContext.tabManager.getActiveNoteContext().setNote(noteId); appContext.tabManager.getActiveContext().setNote(noteId);
} else { } else {
window.open(imgSrc, '_blank'); window.open(imgSrc, '_blank');
} }

View File

@ -61,7 +61,7 @@ export default class EmptyTypeWidget extends TypeWidget {
return false; return false;
} }
appContext.tabManager.getActiveNoteContext().setNote(suggestion.notePath); appContext.tabManager.getActiveContext().setNote(suggestion.notePath);
}); });
noteAutocompleteService.showRecentNotes(this.$autoComplete); noteAutocompleteService.showRecentNotes(this.$autoComplete);

View File

@ -1,6 +1,6 @@
import TabAwareWidget from "../tab_aware_widget.js"; import NoteContextAwareWidget from "../note_context_aware_widget.js";
export default class TypeWidget extends TabAwareWidget { export default class TypeWidget extends NoteContextAwareWidget {
// for overriding // for overriding
static getType() {} static getType() {}