mirror of
https://github.com/Microsoft/vscode
synced 2024-09-13 21:55:38 +00:00
Collapsing markdown, adding actions to menu and keybindings
This commit is contained in:
parent
13001de3b7
commit
4b8e0c732c
|
@ -18,7 +18,7 @@ export const BOTTOM_CELL_TOOLBAR_OFFSET = 12;
|
|||
export const CELL_STATUSBAR_HEIGHT = 22;
|
||||
|
||||
// Margin above editor
|
||||
export const EDITOR_TOP_MARGIN = 6;
|
||||
export const CELL_TOP_MARGIN = 6;
|
||||
export const CELL_BOTTOM_MARGIN = 6;
|
||||
|
||||
// Top and bottom padding inside the monaco editor in a cell, which are included in `cell.editorHeight`
|
||||
|
@ -27,4 +27,4 @@ export const EDITOR_BOTTOM_PADDING = 4;
|
|||
|
||||
export const CELL_OUTPUT_PADDING = 14;
|
||||
|
||||
export const COLLAPSED_INDICATOR_HEIGHT = 40;
|
||||
export const COLLAPSED_INDICATOR_HEIGHT = 24;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { KeyCode, KeyMod, KeyChord } from 'vs/base/common/keyCodes';
|
||||
import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { EditorContextKeys } from 'vs/editor/common/editorContextKeys';
|
||||
import { getIconClasses } from 'vs/editor/common/services/getIconClasses';
|
||||
|
@ -18,12 +18,12 @@ import { InputFocusedContext, InputFocusedContextKey } from 'vs/platform/context
|
|||
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';
|
||||
import { IQuickInputService, IQuickPickItem, QuickPickInput } from 'vs/platform/quickinput/common/quickInput';
|
||||
import { BaseCellRenderTemplate, CellEditState, ICellViewModel, INotebookEditor, NOTEBOOK_CELL_EDITABLE, NOTEBOOK_CELL_MARKDOWN_EDIT_MODE, NOTEBOOK_CELL_TYPE, NOTEBOOK_EDITOR_EDITABLE, NOTEBOOK_EDITOR_EXECUTING_NOTEBOOK, NOTEBOOK_EDITOR_FOCUSED, NOTEBOOK_EDITOR_RUNNABLE, NOTEBOOK_IS_ACTIVE_EDITOR, NOTEBOOK_CELL_HAS_OUTPUTS, CellFocusMode, NOTEBOOK_OUTPUT_FOCUSED, NOTEBOOK_CELL_LIST_FOCUSED } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
|
||||
import { CellKind, NOTEBOOK_EDITOR_CURSOR_BOUNDARY, NotebookCellRunState, CellUri } from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
import { INotebookService } from 'vs/workbench/contrib/notebook/common/notebookService';
|
||||
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
||||
import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService';
|
||||
import { BaseCellRenderTemplate, CellCollapseState, CellEditState, CellFocusMode, ICellViewModel, INotebookEditor, NOTEBOOK_CELL_CONTENT_COLLAPSED, NOTEBOOK_CELL_EDITABLE, NOTEBOOK_CELL_HAS_OUTPUTS, NOTEBOOK_CELL_LIST_FOCUSED, NOTEBOOK_CELL_MARKDOWN_EDIT_MODE, NOTEBOOK_CELL_OUTPUT_COLLAPSED, NOTEBOOK_CELL_TYPE, NOTEBOOK_EDITOR_EDITABLE, NOTEBOOK_EDITOR_EXECUTING_NOTEBOOK, NOTEBOOK_EDITOR_FOCUSED, NOTEBOOK_EDITOR_RUNNABLE, NOTEBOOK_IS_ACTIVE_EDITOR, NOTEBOOK_OUTPUT_FOCUSED } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
|
||||
import { CellViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/notebookViewModel';
|
||||
import { CellKind, CellUri, NotebookCellRunState, NOTEBOOK_EDITOR_CURSOR_BOUNDARY } from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
import { INotebookService } from 'vs/workbench/contrib/notebook/common/notebookService';
|
||||
import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService';
|
||||
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
||||
|
||||
// Notebook Commands
|
||||
const EXECUTE_NOTEBOOK_COMMAND_ID = 'notebook.execute';
|
||||
|
@ -72,6 +72,11 @@ const CENTER_ACTIVE_CELL = 'notebook.centerActiveCell';
|
|||
const FOCUS_IN_OUTPUT_COMMAND_ID = 'notebook.cell.focusInOutput';
|
||||
const FOCUS_OUT_OUTPUT_COMMAND_ID = 'notebook.cell.focusOutOutput';
|
||||
|
||||
const COLLAPSE_CELL_CONTENT_COMMAND_ID = 'notebook.cell.collapseCellContent';
|
||||
const COLLAPSE_CELL_OUTPUT_COMMAND_ID = 'notebook.cell.collapseCellOutput';
|
||||
const EXPAND_CELL_CONTENT_COMMAND_ID = 'notebook.cell.expandCellContent';
|
||||
const EXPAND_CELL_OUTPUT_COMMAND_ID = 'notebook.cell.expandCellOutput';
|
||||
|
||||
export const NOTEBOOK_ACTIONS_CATEGORY = { value: localize('notebookActions.category', "Notebook"), original: 'Notebook' };
|
||||
|
||||
export const CELL_TITLE_CELL_GROUP_ID = 'inline/cell';
|
||||
|
@ -1394,7 +1399,7 @@ registerAction2(class extends NotebookCellAction {
|
|||
super(
|
||||
{
|
||||
id: JOIN_CELL_ABOVE_COMMAND_ID,
|
||||
title: localize('notebookActions.joinCellAbove', "Join with Previous Cell"),
|
||||
title: localize('notebookActions.joinCellAbove', "Join With Previous Cell"),
|
||||
keybinding: {
|
||||
when: NOTEBOOK_EDITOR_FOCUSED,
|
||||
primary: KeyMod.WinCtrl | KeyMod.Alt | KeyMod.Shift | KeyCode.KEY_J,
|
||||
|
@ -1413,7 +1418,7 @@ registerAction2(class extends NotebookCellAction {
|
|||
super(
|
||||
{
|
||||
id: JOIN_CELL_BELOW_COMMAND_ID,
|
||||
title: localize('notebookActions.joinCellBelow', "Join with Next Cell"),
|
||||
title: localize('notebookActions.joinCellBelow', "Join With Next Cell"),
|
||||
keybinding: {
|
||||
when: NOTEBOOK_EDITOR_FOCUSED,
|
||||
primary: KeyMod.WinCtrl | KeyMod.Alt | KeyCode.KEY_J,
|
||||
|
@ -1452,3 +1457,95 @@ registerAction2(class extends NotebookCellAction {
|
|||
return context.notebookEditor.revealInCenter(context.cell);
|
||||
}
|
||||
});
|
||||
|
||||
registerAction2(class extends NotebookCellAction {
|
||||
constructor() {
|
||||
super({
|
||||
id: COLLAPSE_CELL_CONTENT_COMMAND_ID,
|
||||
title: localize('notebookActions.collapseCellContent', "Collapse Cell Content"),
|
||||
keybinding: {
|
||||
when: ContextKeyExpr.and(NOTEBOOK_CELL_LIST_FOCUSED, NOTEBOOK_CELL_CONTENT_COLLAPSED.toNegated(), InputFocusedContext.toNegated()),
|
||||
primary: KeyChord(KeyCode.KEY_C, KeyCode.KEY_C),
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
},
|
||||
menu: {
|
||||
id: MenuId.NotebookCellTitle,
|
||||
when: ContextKeyExpr.and(NOTEBOOK_CELL_LIST_FOCUSED, NOTEBOOK_CELL_CONTENT_COLLAPSED.toNegated()),
|
||||
group: '3_collapse',
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async runWithContext(accessor: ServicesAccessor, context: INotebookCellActionContext): Promise<void> {
|
||||
context.cell.collapseState = CellCollapseState.Collapsed;
|
||||
}
|
||||
});
|
||||
|
||||
registerAction2(class extends NotebookCellAction {
|
||||
constructor() {
|
||||
super({
|
||||
id: EXPAND_CELL_CONTENT_COMMAND_ID,
|
||||
title: localize('notebookActions.expandCellContent', "Expand Cell Content"),
|
||||
keybinding: {
|
||||
when: ContextKeyExpr.and(NOTEBOOK_CELL_LIST_FOCUSED, NOTEBOOK_CELL_CONTENT_COLLAPSED),
|
||||
primary: KeyChord(KeyCode.KEY_C, KeyCode.KEY_C),
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
},
|
||||
menu: {
|
||||
id: MenuId.NotebookCellTitle,
|
||||
when: ContextKeyExpr.and(NOTEBOOK_CELL_LIST_FOCUSED, NOTEBOOK_CELL_CONTENT_COLLAPSED),
|
||||
group: '3_collapse',
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async runWithContext(accessor: ServicesAccessor, context: INotebookCellActionContext): Promise<void> {
|
||||
context.cell.collapseState = CellCollapseState.Normal;
|
||||
}
|
||||
});
|
||||
|
||||
registerAction2(class extends NotebookCellAction {
|
||||
constructor() {
|
||||
super({
|
||||
id: COLLAPSE_CELL_OUTPUT_COMMAND_ID,
|
||||
title: localize('notebookActions.collapseCellOutput', "Collapse Cell Output"),
|
||||
keybinding: {
|
||||
when: ContextKeyExpr.and(NOTEBOOK_CELL_LIST_FOCUSED, NOTEBOOK_CELL_OUTPUT_COLLAPSED.toNegated(), InputFocusedContext.toNegated()),
|
||||
primary: KeyChord(KeyCode.KEY_C, KeyCode.KEY_O),
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
},
|
||||
menu: {
|
||||
id: MenuId.NotebookCellTitle,
|
||||
when: ContextKeyExpr.and(NOTEBOOK_CELL_LIST_FOCUSED, NOTEBOOK_CELL_OUTPUT_COLLAPSED.toNegated()),
|
||||
group: '3_collapse',
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async runWithContext(accessor: ServicesAccessor, context: INotebookCellActionContext): Promise<void> {
|
||||
context.cell.collapseState = CellCollapseState.Collapsed;
|
||||
}
|
||||
});
|
||||
|
||||
registerAction2(class extends NotebookCellAction {
|
||||
constructor() {
|
||||
super({
|
||||
id: EXPAND_CELL_OUTPUT_COMMAND_ID,
|
||||
title: localize('notebookActions.expandCellOutput', "Expand Cell Output"),
|
||||
keybinding: {
|
||||
when: ContextKeyExpr.and(NOTEBOOK_CELL_LIST_FOCUSED, NOTEBOOK_CELL_OUTPUT_COLLAPSED),
|
||||
primary: KeyChord(KeyCode.KEY_C, KeyCode.KEY_C),
|
||||
weight: KeybindingWeight.WorkbenchContrib
|
||||
},
|
||||
menu: {
|
||||
id: MenuId.NotebookCellTitle,
|
||||
when: ContextKeyExpr.and(NOTEBOOK_CELL_LIST_FOCUSED, NOTEBOOK_CELL_OUTPUT_COLLAPSED),
|
||||
group: '3_collapse',
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async runWithContext(accessor: ServicesAccessor, context: INotebookCellActionContext): Promise<void> {
|
||||
context.cell.collapseState = CellCollapseState.Normal;
|
||||
}
|
||||
});
|
||||
|
|
|
@ -212,10 +212,13 @@
|
|||
}
|
||||
|
||||
.monaco-workbench .notebookOverlay > .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row .cell-collapsed-part {
|
||||
font-size: 30px;
|
||||
opacity: 0.9;
|
||||
text-decoration: underline;
|
||||
cursor: pointer;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.monaco-workbench .notebookOverlay > .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row.collapsed .cell-focus-indicator,
|
||||
.monaco-workbench .notebookOverlay > .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row.collapsed .notebook-folding-indicator,
|
||||
.monaco-workbench .notebookOverlay > .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row.collapsed > .monaco-toolbar {
|
||||
display: none;
|
||||
}
|
||||
|
|
|
@ -48,6 +48,8 @@ export const NOTEBOOK_CELL_RUNNABLE = new RawContextKey<boolean>('notebookCellRu
|
|||
export const NOTEBOOK_CELL_MARKDOWN_EDIT_MODE = new RawContextKey<boolean>('notebookCellMarkdownEditMode', false); // bool
|
||||
export const NOTEBOOK_CELL_RUN_STATE = new RawContextKey<string>('notebookCellRunState', undefined); // idle, running
|
||||
export const NOTEBOOK_CELL_HAS_OUTPUTS = new RawContextKey<boolean>('notebookCellHasOutputs', false); // bool
|
||||
export const NOTEBOOK_CELL_CONTENT_COLLAPSED = new RawContextKey<boolean>('notebookCellContentIsCollapsed', false); // bool
|
||||
export const NOTEBOOK_CELL_OUTPUT_COLLAPSED = new RawContextKey<boolean>('notebookCellOutputIsCollapsed', false); // bool
|
||||
|
||||
// Kernels
|
||||
|
||||
|
@ -111,6 +113,7 @@ export interface ICellViewModel {
|
|||
readonly id: string;
|
||||
readonly textBuffer: IReadonlyTextBuffer;
|
||||
collapseState: CellCollapseState;
|
||||
outputCollapseState: CellCollapseState;
|
||||
dragging: boolean;
|
||||
handle: number;
|
||||
uri: URI;
|
||||
|
|
|
@ -27,7 +27,7 @@ import { contrastBorder, editorBackground, focusBorder, foreground, registerColo
|
|||
import { registerThemingParticipant } from 'vs/platform/theme/common/themeService';
|
||||
import { EditorMemento } from 'vs/workbench/browser/parts/editor/baseEditor';
|
||||
import { EditorOptions, IEditorMemento } from 'vs/workbench/common/editor';
|
||||
import { CELL_MARGIN, CELL_RUN_GUTTER, EDITOR_BOTTOM_PADDING, EDITOR_TOP_MARGIN, EDITOR_TOP_PADDING, SCROLLABLE_ELEMENT_PADDING_TOP, BOTTOM_CELL_TOOLBAR_HEIGHT, CELL_BOTTOM_MARGIN, CODE_CELL_LEFT_MARGIN, COLLAPSED_INDICATOR_HEIGHT } from 'vs/workbench/contrib/notebook/browser/constants';
|
||||
import { CELL_MARGIN, CELL_RUN_GUTTER, EDITOR_BOTTOM_PADDING, CELL_TOP_MARGIN, EDITOR_TOP_PADDING, SCROLLABLE_ELEMENT_PADDING_TOP, BOTTOM_CELL_TOOLBAR_HEIGHT, CELL_BOTTOM_MARGIN, CODE_CELL_LEFT_MARGIN, COLLAPSED_INDICATOR_HEIGHT } from 'vs/workbench/contrib/notebook/browser/constants';
|
||||
import { CellEditState, CellFocusMode, ICellRange, ICellViewModel, INotebookCellList, INotebookEditor, INotebookEditorContribution, INotebookEditorMouseEvent, NotebookLayoutInfo, NOTEBOOK_EDITOR_EDITABLE, NOTEBOOK_EDITOR_EXECUTING_NOTEBOOK, NOTEBOOK_EDITOR_FOCUSED, NOTEBOOK_EDITOR_RUNNABLE, NOTEBOOK_HAS_MULTIPLE_KERNELS, NOTEBOOK_OUTPUT_FOCUSED, INotebookDeltaDecoration } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
|
||||
import { NotebookEditorExtensionsRegistry } from 'vs/workbench/contrib/notebook/browser/notebookEditorExtensions';
|
||||
import { NotebookCellList } from 'vs/workbench/contrib/notebook/browser/view/notebookCellList';
|
||||
|
@ -1705,7 +1705,7 @@ registerThemingParticipant((theme, collector) => {
|
|||
if (focusedCellBackgroundColor) {
|
||||
collector.addRule(`.notebookOverlay .code-cell-row.focused .cell-focus-indicator,
|
||||
.notebookOverlay .markdown-cell-row.focused { background-color: ${focusedCellBackgroundColor} !important; }`);
|
||||
collector.addRule(`.notebookOverlay .code-cell-row.focused.collapsed { background-color: ${focusedCellBackgroundColor} !important; }`);
|
||||
collector.addRule(`.notebookOverlay .code-cell-row.focused.collapsed .cell-collapsed-part { background-color: ${focusedCellBackgroundColor} !important; }`);
|
||||
}
|
||||
|
||||
const cellHoverBackgroundColor = theme.getColor(cellHoverBackground);
|
||||
|
@ -1788,7 +1788,7 @@ registerThemingParticipant((theme, collector) => {
|
|||
// Cell Margin
|
||||
collector.addRule(`.notebookOverlay .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row > div.cell { margin: 0px ${CELL_MARGIN * 2}px 0px ${CELL_MARGIN}px; }`);
|
||||
collector.addRule(`.notebookOverlay .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row > div.cell.code { margin-left: ${CODE_CELL_LEFT_MARGIN}px; }`);
|
||||
collector.addRule(`.notebookOverlay .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row { padding-top: ${EDITOR_TOP_MARGIN}px; }`);
|
||||
collector.addRule(`.notebookOverlay .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row { padding-top: ${CELL_TOP_MARGIN}px; }`);
|
||||
collector.addRule(`.notebookOverlay .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .markdown-cell-row { padding-bottom: ${CELL_BOTTOM_MARGIN}px; }`);
|
||||
collector.addRule(`.notebookOverlay .output { margin: 0px ${CELL_MARGIN}px 0px ${CODE_CELL_LEFT_MARGIN + CELL_RUN_GUTTER}px; }`);
|
||||
collector.addRule(`.notebookOverlay .output { width: calc(100% - ${CODE_CELL_LEFT_MARGIN + CELL_RUN_GUTTER + (CELL_MARGIN * 2)}px); }`);
|
||||
|
@ -1796,7 +1796,7 @@ registerThemingParticipant((theme, collector) => {
|
|||
collector.addRule(`.notebookOverlay .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row > div.cell.markdown { padding-left: ${CELL_RUN_GUTTER}px; }`);
|
||||
collector.addRule(`.notebookOverlay .cell .run-button-container { width: ${CELL_RUN_GUTTER}px; }`);
|
||||
collector.addRule(`.notebookOverlay .cell-drag-image .cell-editor-container > div { padding: ${EDITOR_TOP_PADDING}px 16px ${EDITOR_BOTTOM_PADDING}px 16px; }`);
|
||||
collector.addRule(`.notebookOverlay .monaco-list .monaco-list-row .cell-focus-indicator-top { height: ${EDITOR_TOP_MARGIN}px; }`);
|
||||
collector.addRule(`.notebookOverlay .monaco-list .monaco-list-row .cell-focus-indicator-top { height: ${CELL_TOP_MARGIN}px; }`);
|
||||
collector.addRule(`.notebookOverlay .monaco-list .monaco-list-row .cell-focus-indicator-side { bottom: ${BOTTOM_CELL_TOOLBAR_HEIGHT}px; }`);
|
||||
collector.addRule(`.notebookOverlay .monaco-list .monaco-list-row.code-cell-row .cell-focus-indicator-left { width: ${CODE_CELL_LEFT_MARGIN + CELL_RUN_GUTTER}px; }`);
|
||||
collector.addRule(`.notebookOverlay .monaco-list .monaco-list-row.markdown-cell-row .cell-focus-indicator-left { width: ${CODE_CELL_LEFT_MARGIN}px; }`);
|
||||
|
@ -1804,6 +1804,5 @@ registerThemingParticipant((theme, collector) => {
|
|||
collector.addRule(`.notebookOverlay .monaco-list .monaco-list-row .cell-focus-indicator-bottom { height: ${CELL_BOTTOM_MARGIN}px; }`);
|
||||
collector.addRule(`.notebookOverlay .monaco-list .monaco-list-row .cell-shadow-container-bottom { top: ${CELL_BOTTOM_MARGIN}px; }`);
|
||||
|
||||
collector.addRule(`.monaco-workbench .notebookOverlay > .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row.collapsed { height: ${COLLAPSED_INDICATOR_HEIGHT}px; }`);
|
||||
collector.addRule(`.monaco-workbench .notebookOverlay > .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row.collapsed .cell-collapsed-part { margin-left: ${CODE_CELL_LEFT_MARGIN + CELL_RUN_GUTTER}px; }`);
|
||||
collector.addRule(`.monaco-workbench .notebookOverlay > .cell-list-container > .monaco-list > .monaco-scrollable-element > .monaco-list-rows > .monaco-list-row.collapsed .cell-collapsed-part { margin-left: ${CODE_CELL_LEFT_MARGIN + CELL_RUN_GUTTER}px; height: ${COLLAPSED_INDICATOR_HEIGHT}px; }`);
|
||||
});
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
|
||||
import { INotebookTextModel, NotebookCellRunState } from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
import { BaseCellViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/baseCellViewModel';
|
||||
import { NOTEBOOK_CELL_TYPE, NOTEBOOK_VIEW_TYPE, NOTEBOOK_CELL_EDITABLE, NOTEBOOK_CELL_RUNNABLE, NOTEBOOK_CELL_MARKDOWN_EDIT_MODE, NOTEBOOK_CELL_RUN_STATE, NOTEBOOK_CELL_HAS_OUTPUTS, CellViewModelStateChangeEvent, CellEditState } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
|
||||
import { NOTEBOOK_CELL_TYPE, NOTEBOOK_VIEW_TYPE, NOTEBOOK_CELL_EDITABLE, NOTEBOOK_CELL_RUNNABLE, NOTEBOOK_CELL_MARKDOWN_EDIT_MODE, NOTEBOOK_CELL_RUN_STATE, NOTEBOOK_CELL_HAS_OUTPUTS, CellViewModelStateChangeEvent, CellEditState, NOTEBOOK_CELL_CONTENT_COLLAPSED, CellCollapseState, NOTEBOOK_CELL_OUTPUT_COLLAPSED } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
|
||||
import { CodeCellViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/codeCellViewModel';
|
||||
import { MarkdownCellViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/markdownCellViewModel';
|
||||
import { Disposable, DisposableStore } from 'vs/base/common/lifecycle';
|
||||
|
@ -19,6 +19,8 @@ export class CellContextKeyManager extends Disposable {
|
|||
private cellRunnable: IContextKey<boolean>;
|
||||
private cellRunState: IContextKey<string>;
|
||||
private cellHasOutputs: IContextKey<boolean>;
|
||||
private cellContentCollapsed: IContextKey<boolean>;
|
||||
private cellOutputCollapsed: IContextKey<boolean>;
|
||||
|
||||
private markdownEditMode: IContextKey<boolean>;
|
||||
|
||||
|
@ -38,6 +40,8 @@ export class CellContextKeyManager extends Disposable {
|
|||
this.markdownEditMode = NOTEBOOK_CELL_MARKDOWN_EDIT_MODE.bindTo(this.contextKeyService);
|
||||
this.cellRunState = NOTEBOOK_CELL_RUN_STATE.bindTo(this.contextKeyService);
|
||||
this.cellHasOutputs = NOTEBOOK_CELL_HAS_OUTPUTS.bindTo(this.contextKeyService);
|
||||
this.cellContentCollapsed = NOTEBOOK_CELL_CONTENT_COLLAPSED.bindTo(this.contextKeyService);
|
||||
this.cellOutputCollapsed = NOTEBOOK_CELL_OUTPUT_COLLAPSED.bindTo(this.contextKeyService);
|
||||
|
||||
this.updateForElement(element);
|
||||
}
|
||||
|
@ -59,6 +63,7 @@ export class CellContextKeyManager extends Disposable {
|
|||
|
||||
this.updateForMetadata();
|
||||
this.updateForEditState();
|
||||
this.updateForCollapseState();
|
||||
this.updateForOutputs();
|
||||
|
||||
this.viewType.set(this.element.viewType);
|
||||
|
@ -72,6 +77,10 @@ export class CellContextKeyManager extends Disposable {
|
|||
if (e.editStateChanged) {
|
||||
this.updateForEditState();
|
||||
}
|
||||
|
||||
if (e.collapseStateChanged) {
|
||||
this.updateForCollapseState();
|
||||
}
|
||||
}
|
||||
|
||||
private updateForMetadata() {
|
||||
|
@ -91,6 +100,11 @@ export class CellContextKeyManager extends Disposable {
|
|||
}
|
||||
}
|
||||
|
||||
private updateForCollapseState() {
|
||||
this.cellContentCollapsed.set(this.element.collapseState === CellCollapseState.Collapsed);
|
||||
this.cellOutputCollapsed.set(this.element.outputCollapseState === CellCollapseState.Collapsed);
|
||||
}
|
||||
|
||||
private updateForOutputs() {
|
||||
if (this.element instanceof CodeCellViewModel) {
|
||||
this.cellHasOutputs.set(this.element.outputs.length > 0);
|
||||
|
|
|
@ -27,6 +27,7 @@ import { ITextModel } from 'vs/editor/common/model';
|
|||
import * as modes from 'vs/editor/common/modes';
|
||||
import { tokenizeLineToHTML } from 'vs/editor/common/modes/textToHtmlTokenizer';
|
||||
import { IModeService } from 'vs/editor/common/services/modeService';
|
||||
import { localize } from 'vs/nls';
|
||||
import { MenuEntryActionViewItem, SubmenuEntryActionViewItem } from 'vs/platform/actions/browser/menuEntryActionViewItem';
|
||||
import { IMenu, MenuItemAction, SubmenuItemAction } from 'vs/platform/actions/common/actions';
|
||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||
|
@ -36,7 +37,7 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti
|
|||
import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';
|
||||
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
|
||||
import { INotificationService } from 'vs/platform/notification/common/notification';
|
||||
import { BOTTOM_CELL_TOOLBAR_HEIGHT, CELL_BOTTOM_MARGIN, EDITOR_BOTTOM_PADDING, EDITOR_TOOLBAR_HEIGHT, EDITOR_TOP_MARGIN, EDITOR_TOP_PADDING } from 'vs/workbench/contrib/notebook/browser/constants';
|
||||
import { BOTTOM_CELL_TOOLBAR_HEIGHT, CELL_BOTTOM_MARGIN, EDITOR_BOTTOM_PADDING, EDITOR_TOOLBAR_HEIGHT, CELL_TOP_MARGIN, EDITOR_TOP_PADDING } from 'vs/workbench/contrib/notebook/browser/constants';
|
||||
import { CancelCellAction, ChangeCellLanguageAction, ExecuteCellAction, INotebookCellActionContext } from 'vs/workbench/contrib/notebook/browser/contrib/coreActions';
|
||||
import { BaseCellRenderTemplate, CellCollapseState, CellEditState, CodeCellRenderTemplate, ICellViewModel, INotebookCellList, INotebookEditor, isCodeCellRenderTemplate, MarkdownCellRenderTemplate } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
|
||||
import { CellContextKeyManager } from 'vs/workbench/contrib/notebook/browser/view/renderers/cellContextKeys';
|
||||
|
@ -47,7 +48,7 @@ import { CodeCellViewModel } from 'vs/workbench/contrib/notebook/browser/viewMod
|
|||
import { MarkdownCellViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/markdownCellViewModel';
|
||||
import { CellViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/notebookViewModel';
|
||||
import { CellKind, NotebookCellMetadata, NotebookCellRunState } from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
import { VerticalSeparator, createAndFillInActionBarActionsWithVerticalSeparators, VerticalSeparatorViewItem } from './cellActionView';
|
||||
import { createAndFillInActionBarActionsWithVerticalSeparators, VerticalSeparator, VerticalSeparatorViewItem } from './cellActionView';
|
||||
|
||||
const $ = DOM.$;
|
||||
|
||||
|
@ -271,14 +272,14 @@ abstract class AbstractCellRenderer {
|
|||
if (actions.primary.length || actions.secondary.length) {
|
||||
templateData.container.classList.add('cell-has-toolbar-actions');
|
||||
if (isCodeCellRenderTemplate(templateData)) {
|
||||
templateData.focusIndicator.style.top = `${EDITOR_TOOLBAR_HEIGHT + EDITOR_TOP_MARGIN}px`;
|
||||
templateData.focusIndicatorRight.style.top = `${EDITOR_TOOLBAR_HEIGHT + EDITOR_TOP_MARGIN}px`;
|
||||
templateData.focusIndicator.style.top = `${EDITOR_TOOLBAR_HEIGHT + CELL_TOP_MARGIN}px`;
|
||||
templateData.focusIndicatorRight.style.top = `${EDITOR_TOOLBAR_HEIGHT + CELL_TOP_MARGIN}px`;
|
||||
}
|
||||
} else {
|
||||
templateData.container.classList.remove('cell-has-toolbar-actions');
|
||||
if (isCodeCellRenderTemplate(templateData)) {
|
||||
templateData.focusIndicator.style.top = `${EDITOR_TOP_MARGIN}px`;
|
||||
templateData.focusIndicatorRight.style.top = `${EDITOR_TOP_MARGIN}px`;
|
||||
templateData.focusIndicator.style.top = `${CELL_TOP_MARGIN}px`;
|
||||
templateData.focusIndicatorRight.style.top = `${CELL_TOP_MARGIN}px`;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -312,16 +313,14 @@ abstract class AbstractCellRenderer {
|
|||
}
|
||||
|
||||
protected setupCollapsedPart(templateData: BaseCellRenderTemplate): void {
|
||||
templateData.collapsedPart.textContent = '...';
|
||||
templateData.collapsedPart.textContent = localize('collapsedCellShowLabel', "Reveal");
|
||||
DOM.hide(templateData.collapsedPart);
|
||||
templateData.disposables.add(domEvent(templateData.container, DOM.EventType.DBLCLICK)(() => {
|
||||
templateData.disposables.add(domEvent(templateData.collapsedPart, DOM.EventType.CLICK)(() => {
|
||||
if (!templateData.currentRenderedCell) {
|
||||
return;
|
||||
}
|
||||
|
||||
templateData.currentRenderedCell.collapseState = templateData.currentRenderedCell.collapseState === CellCollapseState.Collapsed ?
|
||||
CellCollapseState.Normal :
|
||||
CellCollapseState.Collapsed;
|
||||
templateData.currentRenderedCell.collapseState = CellCollapseState.Normal;
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -114,13 +114,13 @@ export class CodeCell extends Disposable {
|
|||
|
||||
if (e.collapseStateChanged) {
|
||||
// meh
|
||||
this.viewCell.layoutChange({ });
|
||||
this.viewCell.layoutChange({});
|
||||
this.relayoutCell();
|
||||
}
|
||||
}));
|
||||
|
||||
this._register(viewCell.onDidChangeLayout((e) => {
|
||||
if (e.outerWidth === undefined) {
|
||||
if (e.outerWidth !== undefined) {
|
||||
const layoutInfo = templateData.editor!.getLayoutInfo();
|
||||
if (layoutInfo.width !== viewCell.layoutInfo.editorWidth) {
|
||||
this.onCellWidthChange();
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { hide, IDimension, show, toggleClass, addClass, removeClass } from 'vs/base/browser/dom';
|
||||
import * as DOM from 'vs/base/browser/dom';
|
||||
import { raceCancellation } from 'vs/base/common/async';
|
||||
import { CancellationTokenSource } from 'vs/base/common/cancellation';
|
||||
import { renderCodicons } from 'vs/base/common/codicons';
|
||||
|
@ -12,7 +12,7 @@ import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditorWidget';
|
|||
import { IEditorOptions } from 'vs/editor/common/config/editorOptions';
|
||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { EDITOR_BOTTOM_PADDING, EDITOR_TOP_PADDING } from 'vs/workbench/contrib/notebook/browser/constants';
|
||||
import { CellEditState, CellFocusMode, INotebookEditor, MarkdownCellRenderTemplate, ICellViewModel } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
|
||||
import { CellEditState, CellFocusMode, INotebookEditor, MarkdownCellRenderTemplate, ICellViewModel, CellCollapseState } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
|
||||
import { CellFoldingState } from 'vs/workbench/contrib/notebook/browser/contrib/fold/foldingModel';
|
||||
import { MarkdownCellViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/markdownCellViewModel';
|
||||
import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
|
||||
|
@ -50,7 +50,7 @@ export class StatefulMarkdownCell extends Disposable {
|
|||
if (e.editStateChanged) {
|
||||
this.localDisposables.clear();
|
||||
this.viewUpdate();
|
||||
} else if (e.contentChanged) {
|
||||
} else if (e.contentChanged || e.collapseStateChanged) {
|
||||
this.viewUpdate();
|
||||
}
|
||||
}));
|
||||
|
@ -66,7 +66,7 @@ export class StatefulMarkdownCell extends Disposable {
|
|||
this.focusEditorIfNeeded();
|
||||
}
|
||||
|
||||
toggleClass(templateData.container, 'cell-editor-focus', viewCell.focusMode === CellFocusMode.Editor);
|
||||
templateData.container.classList.toggle('cell-editor-focus', viewCell.focusMode === CellFocusMode.Editor);
|
||||
};
|
||||
this._register(viewCell.onDidChangeState((e) => {
|
||||
if (!e.focusModeChanged) {
|
||||
|
@ -105,13 +105,13 @@ export class StatefulMarkdownCell extends Disposable {
|
|||
this._register(viewCell.onCellDecorationsChanged((e) => {
|
||||
e.added.forEach(options => {
|
||||
if (options.className) {
|
||||
addClass(templateData.container, options.className);
|
||||
DOM.addClass(templateData.container, options.className);
|
||||
}
|
||||
});
|
||||
|
||||
e.removed.forEach(options => {
|
||||
if (options.className) {
|
||||
removeClass(templateData.container, options.className);
|
||||
DOM.removeClass(templateData.container, options.className);
|
||||
}
|
||||
});
|
||||
}));
|
||||
|
@ -120,7 +120,7 @@ export class StatefulMarkdownCell extends Disposable {
|
|||
|
||||
viewCell.getCellDecorations().forEach(options => {
|
||||
if (options.className) {
|
||||
addClass(templateData.container, options.className);
|
||||
DOM.addClass(templateData.container, options.className);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -128,19 +128,31 @@ export class StatefulMarkdownCell extends Disposable {
|
|||
}
|
||||
|
||||
private viewUpdate(): void {
|
||||
if (this.viewCell.editState === CellEditState.Editing) {
|
||||
if (this.viewCell.collapseState === CellCollapseState.Collapsed) {
|
||||
this.viewUpdateCollapsed();
|
||||
} else if (this.viewCell.editState === CellEditState.Editing) {
|
||||
this.viewUpdateEditing();
|
||||
} else {
|
||||
this.viewUpdatePreview();
|
||||
}
|
||||
}
|
||||
|
||||
private viewUpdateCollapsed(): void {
|
||||
DOM.show(this.templateData.collapsedPart);
|
||||
DOM.hide(this.editorPart);
|
||||
DOM.hide(this.markdownContainer);
|
||||
this.templateData.container.classList.toggle('collapsed', true);
|
||||
}
|
||||
|
||||
private viewUpdateEditing(): void {
|
||||
// switch to editing mode
|
||||
let editorHeight: number;
|
||||
|
||||
show(this.editorPart);
|
||||
hide(this.markdownContainer);
|
||||
DOM.show(this.editorPart);
|
||||
DOM.hide(this.markdownContainer);
|
||||
DOM.hide(this.templateData.collapsedPart);
|
||||
this.templateData.container.classList.toggle('collapsed', false);
|
||||
|
||||
if (this.editor) {
|
||||
editorHeight = this.editor!.getContentHeight();
|
||||
|
||||
|
@ -216,8 +228,11 @@ export class StatefulMarkdownCell extends Disposable {
|
|||
|
||||
private viewUpdatePreview(): void {
|
||||
this.viewCell.detachTextEditor();
|
||||
hide(this.editorPart);
|
||||
show(this.markdownContainer);
|
||||
DOM.hide(this.editorPart);
|
||||
DOM.hide(this.templateData.collapsedPart);
|
||||
DOM.show(this.markdownContainer);
|
||||
this.templateData.container.classList.toggle('collapsed', false);
|
||||
|
||||
this.renderedEditors.delete(this.viewCell);
|
||||
|
||||
this.markdownContainer.innerHTML = '';
|
||||
|
@ -259,7 +274,7 @@ export class StatefulMarkdownCell extends Disposable {
|
|||
}
|
||||
}
|
||||
|
||||
private layoutEditor(dimension: IDimension): void {
|
||||
private layoutEditor(dimension: DOM.IDimension): void {
|
||||
this.editor?.layout(dimension);
|
||||
this.templateData.statusBarContainer.style.width = `${dimension.width}px`;
|
||||
}
|
||||
|
|
|
@ -70,6 +70,16 @@ export abstract class BaseCellViewModel extends Disposable {
|
|||
this._onDidChangeState.fire({ collapseStateChanged: true });
|
||||
}
|
||||
|
||||
private _outputCollapseState: CellCollapseState = CellCollapseState.Normal;
|
||||
public get outputCollapseState(): CellCollapseState {
|
||||
return this._outputCollapseState;
|
||||
}
|
||||
|
||||
public set outputCollapseState(v: CellCollapseState) {
|
||||
this._collapseState = v;
|
||||
this._onDidChangeState.fire({ collapseStateChanged: true });
|
||||
}
|
||||
|
||||
private _focusMode: CellFocusMode = CellFocusMode.Container;
|
||||
get focusMode() {
|
||||
return this._focusMode;
|
||||
|
|
|
@ -8,7 +8,7 @@ import * as UUID from 'vs/base/common/uuid';
|
|||
import * as editorCommon from 'vs/editor/common/editorCommon';
|
||||
import * as model from 'vs/editor/common/model';
|
||||
import { PrefixSumComputer } from 'vs/editor/common/viewModel/prefixSumComputer';
|
||||
import { BOTTOM_CELL_TOOLBAR_HEIGHT, CELL_MARGIN, CELL_RUN_GUTTER, CELL_STATUSBAR_HEIGHT, EDITOR_BOTTOM_PADDING, EDITOR_TOOLBAR_HEIGHT, EDITOR_TOP_MARGIN, EDITOR_TOP_PADDING, CELL_BOTTOM_MARGIN, CODE_CELL_LEFT_MARGIN, BOTTOM_CELL_TOOLBAR_OFFSET, COLLAPSED_INDICATOR_HEIGHT } from 'vs/workbench/contrib/notebook/browser/constants';
|
||||
import { BOTTOM_CELL_TOOLBAR_HEIGHT, CELL_MARGIN, CELL_RUN_GUTTER, CELL_STATUSBAR_HEIGHT, EDITOR_BOTTOM_PADDING, EDITOR_TOOLBAR_HEIGHT, CELL_TOP_MARGIN, EDITOR_TOP_PADDING, CELL_BOTTOM_MARGIN, CODE_CELL_LEFT_MARGIN, BOTTOM_CELL_TOOLBAR_OFFSET, COLLAPSED_INDICATOR_HEIGHT } from 'vs/workbench/contrib/notebook/browser/constants';
|
||||
import { CellEditState, CellFindMatch, CodeCellLayoutChangeEvent, CodeCellLayoutInfo, ICellViewModel, NotebookLayoutInfo, CodeCellLayoutState, CellCollapseState } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
|
||||
import { NotebookCellTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookCellTextModel';
|
||||
import { CellKind, NotebookCellOutputsSplice, INotebookSearchOptions } from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
|
@ -122,7 +122,7 @@ export class CodeCellViewModel extends BaseCellViewModel implements ICellViewMod
|
|||
}
|
||||
|
||||
const indicatorHeight = editorHeight + CELL_STATUSBAR_HEIGHT + outputTotalHeight;
|
||||
const outputContainerOffset = EDITOR_TOOLBAR_HEIGHT + EDITOR_TOP_MARGIN + editorHeight + CELL_STATUSBAR_HEIGHT;
|
||||
const outputContainerOffset = EDITOR_TOOLBAR_HEIGHT + CELL_TOP_MARGIN + editorHeight + CELL_STATUSBAR_HEIGHT;
|
||||
const bottomToolbarOffset = totalHeight - BOTTOM_CELL_TOOLBAR_HEIGHT - BOTTOM_CELL_TOOLBAR_OFFSET;
|
||||
const editorWidth = state.outerWidth !== undefined ? this.computeEditorWidth(state.outerWidth) : this._layoutInfo?.editorWidth;
|
||||
|
||||
|
@ -140,8 +140,8 @@ export class CodeCellViewModel extends BaseCellViewModel implements ICellViewMod
|
|||
} else {
|
||||
const indicatorHeight = COLLAPSED_INDICATOR_HEIGHT + outputTotalHeight;
|
||||
const outputContainerOffset = COLLAPSED_INDICATOR_HEIGHT;
|
||||
const totalHeight = COLLAPSED_INDICATOR_HEIGHT + BOTTOM_CELL_TOOLBAR_HEIGHT + CELL_BOTTOM_MARGIN;
|
||||
const bottomToolbarOffset = totalHeight - BOTTOM_CELL_TOOLBAR_HEIGHT;
|
||||
const totalHeight = CELL_TOP_MARGIN + COLLAPSED_INDICATOR_HEIGHT + CELL_BOTTOM_MARGIN + BOTTOM_CELL_TOOLBAR_HEIGHT + outputTotalHeight;
|
||||
const bottomToolbarOffset = totalHeight - BOTTOM_CELL_TOOLBAR_HEIGHT - BOTTOM_CELL_TOOLBAR_OFFSET;
|
||||
|
||||
this._layoutInfo = {
|
||||
fontInfo: state.font || null,
|
||||
|
@ -207,7 +207,7 @@ export class CodeCellViewModel extends BaseCellViewModel implements ICellViewMod
|
|||
}
|
||||
|
||||
private computeTotalHeight(editorHeight: number, outputsTotalHeight: number): number {
|
||||
return EDITOR_TOOLBAR_HEIGHT + EDITOR_TOP_MARGIN + editorHeight + CELL_STATUSBAR_HEIGHT + outputsTotalHeight + BOTTOM_CELL_TOOLBAR_HEIGHT + CELL_BOTTOM_MARGIN;
|
||||
return EDITOR_TOOLBAR_HEIGHT + CELL_TOP_MARGIN + editorHeight + CELL_STATUSBAR_HEIGHT + outputsTotalHeight + BOTTOM_CELL_TOOLBAR_HEIGHT + CELL_BOTTOM_MARGIN;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -8,8 +8,8 @@ import { Emitter, Event } from 'vs/base/common/event';
|
|||
import * as UUID from 'vs/base/common/uuid';
|
||||
import * as editorCommon from 'vs/editor/common/editorCommon';
|
||||
import * as model from 'vs/editor/common/model';
|
||||
import { BOTTOM_CELL_TOOLBAR_HEIGHT, CELL_MARGIN, CELL_STATUSBAR_HEIGHT, EDITOR_TOP_MARGIN, CELL_BOTTOM_MARGIN, CODE_CELL_LEFT_MARGIN, BOTTOM_CELL_TOOLBAR_OFFSET } from 'vs/workbench/contrib/notebook/browser/constants';
|
||||
import { CellFindMatch, ICellViewModel, MarkdownCellLayoutChangeEvent, MarkdownCellLayoutInfo, NotebookLayoutInfo } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
|
||||
import { BOTTOM_CELL_TOOLBAR_HEIGHT, CELL_MARGIN, CELL_STATUSBAR_HEIGHT, CELL_TOP_MARGIN, CELL_BOTTOM_MARGIN, CODE_CELL_LEFT_MARGIN, BOTTOM_CELL_TOOLBAR_OFFSET, COLLAPSED_INDICATOR_HEIGHT } from 'vs/workbench/contrib/notebook/browser/constants';
|
||||
import { CellCollapseState, CellFindMatch, ICellViewModel, MarkdownCellLayoutChangeEvent, MarkdownCellLayoutInfo, NotebookLayoutInfo } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
|
||||
import { MarkdownRenderer } from 'vs/workbench/contrib/notebook/browser/view/renderers/mdRenderer';
|
||||
import { BaseCellViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/baseCellViewModel';
|
||||
import { EditorFoldingStateDelegate } from 'vs/workbench/contrib/notebook/browser/contrib/fold/foldingModel';
|
||||
|
@ -45,7 +45,7 @@ export class MarkdownCellViewModel extends BaseCellViewModel implements ICellVie
|
|||
set editorHeight(newHeight: number) {
|
||||
this._editorHeight = newHeight;
|
||||
|
||||
this.totalHeight = this._editorHeight + EDITOR_TOP_MARGIN + CELL_BOTTOM_MARGIN + BOTTOM_CELL_TOOLBAR_HEIGHT + CELL_STATUSBAR_HEIGHT;
|
||||
this.totalHeight = this._editorHeight + CELL_TOP_MARGIN + CELL_BOTTOM_MARGIN + BOTTOM_CELL_TOOLBAR_HEIGHT + CELL_STATUSBAR_HEIGHT;
|
||||
}
|
||||
|
||||
get editorHeight() {
|
||||
|
@ -92,16 +92,31 @@ export class MarkdownCellViewModel extends BaseCellViewModel implements ICellVie
|
|||
|
||||
layoutChange(state: MarkdownCellLayoutChangeEvent) {
|
||||
// recompute
|
||||
const editorWidth = state.outerWidth !== undefined ? this.computeEditorWidth(state.outerWidth) : this._layoutInfo.editorWidth;
|
||||
const totalHeight = state.totalHeight === undefined ? this._layoutInfo.totalHeight : state.totalHeight;
|
||||
|
||||
this._layoutInfo = {
|
||||
fontInfo: state.font || this._layoutInfo.fontInfo,
|
||||
editorWidth,
|
||||
editorHeight: this._editorHeight,
|
||||
bottomToolbarOffset: totalHeight - BOTTOM_CELL_TOOLBAR_HEIGHT - BOTTOM_CELL_TOOLBAR_OFFSET,
|
||||
totalHeight
|
||||
};
|
||||
if (this.collapseState === CellCollapseState.Normal) {
|
||||
const editorWidth = state.outerWidth !== undefined ? this.computeEditorWidth(state.outerWidth) : this._layoutInfo.editorWidth;
|
||||
const totalHeight = state.totalHeight === undefined ? this._layoutInfo.totalHeight : state.totalHeight;
|
||||
|
||||
this._layoutInfo = {
|
||||
fontInfo: state.font || this._layoutInfo.fontInfo,
|
||||
editorWidth,
|
||||
editorHeight: this._editorHeight,
|
||||
bottomToolbarOffset: totalHeight - BOTTOM_CELL_TOOLBAR_HEIGHT - BOTTOM_CELL_TOOLBAR_OFFSET,
|
||||
totalHeight
|
||||
};
|
||||
} else {
|
||||
const editorWidth = state.outerWidth !== undefined ? this.computeEditorWidth(state.outerWidth) : this._layoutInfo.editorWidth;
|
||||
const totalHeight = CELL_TOP_MARGIN + COLLAPSED_INDICATOR_HEIGHT + BOTTOM_CELL_TOOLBAR_HEIGHT + CELL_BOTTOM_MARGIN;
|
||||
state.totalHeight = totalHeight;
|
||||
|
||||
this._layoutInfo = {
|
||||
fontInfo: state.font || this._layoutInfo.fontInfo,
|
||||
editorWidth,
|
||||
editorHeight: this._editorHeight,
|
||||
bottomToolbarOffset: totalHeight - BOTTOM_CELL_TOOLBAR_HEIGHT - BOTTOM_CELL_TOOLBAR_OFFSET,
|
||||
totalHeight
|
||||
};
|
||||
}
|
||||
|
||||
this._onDidChangeLayout.fire(state);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue