mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-08 17:19:48 +01:00
Move hasExecutionOrder to cell level
This commit is contained in:
Vendored
+8
-2
@@ -1659,6 +1659,12 @@ declare module 'vscode' {
|
||||
*/
|
||||
breakpointMargin?: boolean;
|
||||
|
||||
/**
|
||||
* Whether the [execution order](#NotebookCellMetadata.executionOrder) indicator will be displayed.
|
||||
* Defaults to true.
|
||||
*/
|
||||
hasExecutionOrder?: boolean;
|
||||
|
||||
/**
|
||||
* The order in which this cell was executed.
|
||||
*/
|
||||
@@ -1727,10 +1733,10 @@ declare module 'vscode' {
|
||||
cellRunnable?: boolean;
|
||||
|
||||
/**
|
||||
* Whether the [execution order](#NotebookCellMetadata.executionOrder) indicator will be displayed.
|
||||
* Default value for [cell hasExecutionOrder metadata](#NotebookCellMetadata.hasExecutionOrder).
|
||||
* Defaults to true.
|
||||
*/
|
||||
hasExecutionOrder?: boolean;
|
||||
cellHasExecutionOrder?: boolean;
|
||||
|
||||
displayOrder?: GlobPattern[];
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ import { StatefullMarkdownCell } from 'vs/workbench/contrib/notebook/browser/vie
|
||||
import { CodeCellViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/codeCellViewModel';
|
||||
import { MarkdownCellViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/markdownCellViewModel';
|
||||
import { CellViewModel } from 'vs/workbench/contrib/notebook/browser/viewModel/notebookViewModel';
|
||||
import { CellKind, NotebookCellRunState } from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
import { CellKind, NotebookCellRunState, NotebookCellMetadata } from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
|
||||
const $ = DOM.$;
|
||||
|
||||
@@ -1006,7 +1006,7 @@ export class CodeCellRenderer extends AbstractCellRenderer implements IListRende
|
||||
|
||||
const metadata = element.getEvaluatedMetadata(this.notebookEditor.viewModel!.notebookDocument.metadata);
|
||||
DOM.toggleClass(templateData.cellContainer, 'runnable', !!metadata.runnable);
|
||||
this.renderExecutionOrder(element, templateData);
|
||||
this.updateExecutionOrder(metadata, templateData);
|
||||
cellEditableKey.set(!!metadata.editable);
|
||||
cellRunnableKey.set(!!metadata.runnable);
|
||||
templateData.cellStatusMessageContainer.textContent = metadata?.statusMessage || '';
|
||||
@@ -1040,12 +1040,12 @@ export class CodeCellRenderer extends AbstractCellRenderer implements IListRende
|
||||
this.updateForRunState(metadata.runState, templateData);
|
||||
}
|
||||
|
||||
private renderExecutionOrder(element: CodeCellViewModel, templateData: CodeCellRenderTemplate): void {
|
||||
const hasExecutionOrder = this.notebookEditor.viewModel!.notebookDocument.metadata?.hasExecutionOrder;
|
||||
if (hasExecutionOrder) {
|
||||
const executionOrdeerLabel = typeof element.metadata?.executionOrder === 'number' ? `[${element.metadata.executionOrder}]` :
|
||||
private updateExecutionOrder(metadata: NotebookCellMetadata, templateData: CodeCellRenderTemplate): void {
|
||||
if (metadata.hasExecutionOrder) {
|
||||
const executionOrderLabel = typeof metadata.executionOrder === 'number' ?
|
||||
`[${metadata.executionOrder}]` :
|
||||
'[ ]';
|
||||
templateData.executionOrderLabel.innerText = executionOrdeerLabel;
|
||||
templateData.executionOrderLabel.innerText = executionOrderLabel;
|
||||
} else {
|
||||
templateData.executionOrderLabel.innerText = '';
|
||||
}
|
||||
|
||||
@@ -88,10 +88,10 @@ export class CodeCell extends Disposable {
|
||||
}));
|
||||
updateForFocusMode();
|
||||
|
||||
templateData.editor?.updateOptions({ readOnly: !(viewCell.getEvaluatedMetadata(notebookEditor.viewModel?.metadata).editable) });
|
||||
templateData.editor?.updateOptions({ readOnly: !(viewCell.getEvaluatedMetadata(notebookEditor.viewModel!.metadata).editable) });
|
||||
this._register(viewCell.onDidChangeState((e) => {
|
||||
if (e.metadataChanged) {
|
||||
templateData.editor?.updateOptions({ readOnly: !(viewCell.getEvaluatedMetadata(notebookEditor.viewModel?.metadata).editable) });
|
||||
templateData.editor?.updateOptions({ readOnly: !(viewCell.getEvaluatedMetadata(notebookEditor.viewModel!.metadata).editable) });
|
||||
}
|
||||
}));
|
||||
|
||||
|
||||
@@ -17,11 +17,6 @@ import { CellEditState, CellFocusMode, CursorAtBoundary, CellViewModelStateChang
|
||||
import { CellKind, NotebookCellMetadata, NotebookDocumentMetadata } from 'vs/workbench/contrib/notebook/common/notebookCommon';
|
||||
import { NotebookCellTextModel } from 'vs/workbench/contrib/notebook/common/model/notebookCellTextModel';
|
||||
|
||||
export const NotebookCellMetadataDefaults = {
|
||||
editable: true,
|
||||
runnable: true
|
||||
};
|
||||
|
||||
export abstract class BaseCellViewModel extends Disposable {
|
||||
protected readonly _onDidChangeEditorAttachState = new Emitter<void>();
|
||||
// Do not merge this event with `onDidChangeState` as we are using `Event.once(onDidChangeEditorAttachState)` elsewhere.
|
||||
@@ -344,20 +339,22 @@ export abstract class BaseCellViewModel extends Disposable {
|
||||
return cellMatches;
|
||||
}
|
||||
|
||||
getEvaluatedMetadata(documentMetadata: NotebookDocumentMetadata | undefined): NotebookCellMetadata {
|
||||
const editable: boolean = this.metadata?.editable === undefined
|
||||
? (documentMetadata?.cellEditable === undefined ? NotebookCellMetadataDefaults.editable : documentMetadata?.cellEditable)
|
||||
: this.metadata?.editable;
|
||||
getEvaluatedMetadata(documentMetadata: NotebookDocumentMetadata): NotebookCellMetadata {
|
||||
const editable = this.metadata?.editable ??
|
||||
documentMetadata.cellEditable;
|
||||
|
||||
const runnable: boolean = this.metadata?.runnable === undefined
|
||||
? (documentMetadata?.cellRunnable === undefined ? NotebookCellMetadataDefaults.runnable : documentMetadata?.cellRunnable)
|
||||
: this.metadata?.runnable;
|
||||
const runnable = this.metadata?.runnable ??
|
||||
documentMetadata.cellRunnable;
|
||||
|
||||
const hasExecutionOrder = this.metadata?.hasExecutionOrder ??
|
||||
documentMetadata.cellHasExecutionOrder;
|
||||
|
||||
return {
|
||||
...(this.metadata || {}),
|
||||
...{
|
||||
editable,
|
||||
runnable
|
||||
runnable,
|
||||
hasExecutionOrder
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ export const notebookDocumentMetadataDefaults: Required<NotebookDocumentMetadata
|
||||
runnable: true,
|
||||
cellEditable: true,
|
||||
cellRunnable: true,
|
||||
hasExecutionOrder: true,
|
||||
cellHasExecutionOrder: true,
|
||||
displayOrder: NOTEBOOK_DISPLAY_ORDER,
|
||||
custom: {}
|
||||
};
|
||||
@@ -65,7 +65,7 @@ export interface NotebookDocumentMetadata {
|
||||
runnable: boolean;
|
||||
cellEditable: boolean;
|
||||
cellRunnable: boolean;
|
||||
hasExecutionOrder: boolean;
|
||||
cellHasExecutionOrder: boolean;
|
||||
displayOrder?: GlobPattern[];
|
||||
custom?: { [key: string]: any };
|
||||
}
|
||||
@@ -81,6 +81,7 @@ export interface NotebookCellMetadata {
|
||||
editable?: boolean;
|
||||
runnable?: boolean;
|
||||
breakpointMargin?: boolean;
|
||||
hasExecutionOrder?: boolean;
|
||||
executionOrder?: number;
|
||||
statusMessage?: string;
|
||||
runState?: NotebookCellRunState;
|
||||
|
||||
@@ -154,9 +154,9 @@ suite('NotebookViewModel', () => {
|
||||
[['var e = 5;'], 'javascript', CellKind.Code, [], { editable: false, runnable: false }],
|
||||
],
|
||||
(editor, viewModel) => {
|
||||
viewModel.notebookDocument.metadata = { editable: true, runnable: true, cellRunnable: true, cellEditable: true, hasExecutionOrder: true };
|
||||
viewModel.notebookDocument.metadata = { editable: true, runnable: true, cellRunnable: true, cellEditable: true, cellHasExecutionOrder: true };
|
||||
|
||||
const defaults = {};
|
||||
const defaults = { hasExecutionOrder: true };
|
||||
|
||||
assert.deepEqual(viewModel.viewCells[0].getEvaluatedMetadata(viewModel.metadata), <NotebookCellMetadata>{
|
||||
editable: true,
|
||||
@@ -188,7 +188,7 @@ suite('NotebookViewModel', () => {
|
||||
...defaults
|
||||
});
|
||||
|
||||
viewModel.notebookDocument.metadata = { editable: true, runnable: true, cellRunnable: false, cellEditable: true, hasExecutionOrder: true };
|
||||
viewModel.notebookDocument.metadata = { editable: true, runnable: true, cellRunnable: false, cellEditable: true, cellHasExecutionOrder: true };
|
||||
|
||||
assert.deepEqual(viewModel.viewCells[0].getEvaluatedMetadata(viewModel.metadata), <NotebookCellMetadata>{
|
||||
editable: true,
|
||||
@@ -220,7 +220,7 @@ suite('NotebookViewModel', () => {
|
||||
...defaults
|
||||
});
|
||||
|
||||
viewModel.notebookDocument.metadata = { editable: true, runnable: true, cellRunnable: false, cellEditable: false, hasExecutionOrder: true };
|
||||
viewModel.notebookDocument.metadata = { editable: true, runnable: true, cellRunnable: false, cellEditable: false, cellHasExecutionOrder: true };
|
||||
|
||||
assert.deepEqual(viewModel.viewCells[0].getEvaluatedMetadata(viewModel.metadata), <NotebookCellMetadata>{
|
||||
editable: false,
|
||||
|
||||
Reference in New Issue
Block a user