зеркало из https://github.com/microsoft/gather.git
UI: Enabled the revision browser for Jupyter Lab once again
This commit is contained in:
Родитель
bcdeeed8e1
Коммит
60cb46c4b5
|
@ -0,0 +1,100 @@
|
||||||
|
import { nbformat } from "@jupyterlab/coreutils";
|
||||||
|
import { RenderMimeRegistry, standardRendererFactories } from "@jupyterlab/rendermime";
|
||||||
|
import { PanelLayout, Widget } from "@phosphor/widgets";
|
||||||
|
import { GatherModel, GatherState } from "../model/model";
|
||||||
|
import { log } from "../util/log";
|
||||||
|
import { DisplayData } from "../widgets/displaydata";
|
||||||
|
import { buildHistoryModel, HistoryViewer } from "../widgets/history";
|
||||||
|
import { IOutputRenderer } from "../widgets/revision";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class for the revision browser widget.
|
||||||
|
*/
|
||||||
|
const REVISION_BROWSER_CLASS = "jp-Notebook-revisionbrowser";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class for output areas in the revision browser.
|
||||||
|
*/
|
||||||
|
const REVISION_OUTPUT_CLASS = "jp-Notebook-revisionbrowser-output";
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renders output models for notebooks as new cells.
|
||||||
|
*/
|
||||||
|
class OutputRenderer implements IOutputRenderer {
|
||||||
|
/**
|
||||||
|
* Render HTML element for this output.
|
||||||
|
*/
|
||||||
|
render(output: nbformat.IOutput): HTMLElement {
|
||||||
|
let widget = new DisplayData({
|
||||||
|
model: output,
|
||||||
|
rendermime: new RenderMimeRegistry({ initialFactories: standardRendererFactories })
|
||||||
|
});
|
||||||
|
widget.addClass(REVISION_OUTPUT_CLASS);
|
||||||
|
return widget.node;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Window that lets the user browse revisions of code.
|
||||||
|
*/
|
||||||
|
export class RevisionBrowser extends Widget {
|
||||||
|
/**
|
||||||
|
* Construct a new revision browser.
|
||||||
|
*/
|
||||||
|
constructor(gatherModel: GatherModel) {
|
||||||
|
super();
|
||||||
|
this.id = "revision-browser";
|
||||||
|
this.title.label = "Revision browser";
|
||||||
|
this.title.icon = "jp-HistoryIcon";
|
||||||
|
this.title.closable = true;
|
||||||
|
this.addClass(REVISION_BROWSER_CLASS);
|
||||||
|
|
||||||
|
this._gatherModel = gatherModel;
|
||||||
|
this._outputRenderer = new OutputRenderer();
|
||||||
|
this.layout = new PanelLayout();
|
||||||
|
|
||||||
|
this.attachSliceWidgets(gatherModel);
|
||||||
|
}
|
||||||
|
|
||||||
|
attachSliceWidgets(model: GatherModel) {
|
||||||
|
let defSelections = model.selectedDefs;
|
||||||
|
let outputSelections = model.selectedOutputs;
|
||||||
|
let slices;
|
||||||
|
let cellPersistentId;
|
||||||
|
if (defSelections.length > 0) {
|
||||||
|
slices = model.getSelectedDefSlices(defSelections[0]);
|
||||||
|
cellPersistentId = defSelections[0].cell.persistentId;
|
||||||
|
} else if (outputSelections.length > 0) {
|
||||||
|
slices = model.getSelectedOutputSlices(outputSelections[0]);
|
||||||
|
cellPersistentId = outputSelections[0].cell.persistentId;
|
||||||
|
}
|
||||||
|
log("Bringing up the revision browser for selection", {
|
||||||
|
cellPersistendId: cellPersistentId, slices,
|
||||||
|
selectedDefs: model.selectedDefs,
|
||||||
|
selectedOutputs: model.selectedOutputs
|
||||||
|
});
|
||||||
|
if (slices && cellPersistentId) {
|
||||||
|
// Only show output if the selection was output.
|
||||||
|
let includeOutput = model.selectedOutputs.length >= 1;
|
||||||
|
let historyModel = buildHistoryModel(
|
||||||
|
model, cellPersistentId, slices, includeOutput);
|
||||||
|
let historyViewer = new HistoryViewer({
|
||||||
|
model: historyModel,
|
||||||
|
outputRenderer: this._outputRenderer
|
||||||
|
});
|
||||||
|
(this.layout as PanelLayout).addWidget(historyViewer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dismiss this widget.
|
||||||
|
*/
|
||||||
|
dismiss() {
|
||||||
|
log("Dismissing revision browser");
|
||||||
|
this._gatherModel.requestStateChange(GatherState.SELECTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
private _gatherModel: GatherModel;
|
||||||
|
private _outputRenderer: OutputRenderer;
|
||||||
|
}
|
Загрузка…
Ссылка в новой задаче