You've already forked joplin
mirror of
https://github.com/laurent22/joplin.git
synced 2025-07-03 23:50:33 +02:00
75 lines
2.7 KiB
TypeScript
75 lines
2.7 KiB
TypeScript
import { CommandContext, CommandDeclaration, CommandRuntime } from '../services/CommandService';
|
|
import getActivePluginEditorView from '../services/plugins/utils/getActivePluginEditorView';
|
|
import Logger from '@joplin/utils/Logger';
|
|
import getActivePluginEditorViews from '../services/plugins/utils/getActivePluginEditorViews';
|
|
import PluginService from '../services/plugins/PluginService';
|
|
import WebviewController from '../services/plugins/WebviewController';
|
|
import Setting from '../models/Setting';
|
|
|
|
const logger = Logger.create('showEditorPlugin');
|
|
|
|
export const declaration: CommandDeclaration = {
|
|
name: 'showEditorPlugin',
|
|
label: () => 'Show editor plugin',
|
|
iconName: 'fas fa-eye',
|
|
};
|
|
|
|
export const runtime = (): CommandRuntime => {
|
|
return {
|
|
execute: async (context: CommandContext, editorViewId = '', show = true) => {
|
|
logger.info('View:', editorViewId, 'Show:', show);
|
|
|
|
const pluginStates = context.state.pluginService.plugins;
|
|
const windowId = context.state.windowId;
|
|
if (!editorViewId) {
|
|
const { editorPlugin, editorView } = getActivePluginEditorView(pluginStates, windowId);
|
|
|
|
if (!editorPlugin) {
|
|
logger.warn('No editor plugin to toggle to');
|
|
return;
|
|
}
|
|
|
|
editorViewId = editorView.id;
|
|
}
|
|
|
|
const activePlugins = getActivePluginEditorViews(pluginStates, windowId);
|
|
const editorPluginData = activePlugins.find(({ editorView }) => editorView.id === editorViewId);
|
|
if (!editorPluginData) {
|
|
logger.warn(`No editor view with ID ${editorViewId} is active.`);
|
|
return;
|
|
}
|
|
const { editorView } = editorPluginData;
|
|
const controller = PluginService.instance().viewControllerByViewId(editorView.id) as WebviewController;
|
|
if (!controller) {
|
|
throw new Error(`No controller registered for editor view ${editorView.id}`);
|
|
}
|
|
|
|
const previousVisible = editorView.parentWindowId === windowId && controller.isVisible();
|
|
|
|
if (show && previousVisible) {
|
|
logger.info(`Editor is already visible: ${editorViewId}`);
|
|
return;
|
|
} else if (!show && !previousVisible) {
|
|
logger.info(`Editor is already hidden: ${editorViewId}`);
|
|
return;
|
|
}
|
|
|
|
const getUpdatedShownViewIds = () => {
|
|
let newShownViewTypeIds = [...Setting.value('plugins.shownEditorViewIds')];
|
|
// Always filter out the current view, even if show is false. This prevents
|
|
// the view ID from being present multiple times.
|
|
const viewIdsWithoutCurrent = newShownViewTypeIds.filter(id => id !== editorView.editorTypeId);
|
|
newShownViewTypeIds = viewIdsWithoutCurrent;
|
|
|
|
if (show) {
|
|
newShownViewTypeIds.push(editorView.editorTypeId);
|
|
}
|
|
return newShownViewTypeIds;
|
|
};
|
|
Setting.setValue('plugins.shownEditorViewIds', getUpdatedShownViewIds());
|
|
|
|
controller.setOpened(show);
|
|
},
|
|
};
|
|
};
|