it('should copy when clicked', () => { let button = ToolbarItems.createCopyButton(panel); let count = panel.content.widgets.length; Widget.attach(button, document.body); button.node.click(); expect(panel.content.widgets.length).to.be(count); expect(clipboard.hasData(JUPYTER_CELL_MIME)).to.be(true); button.dispose(); });
it('should cut when clicked', () => { let button = ToolbarItems.createCutButton(panel); let count = panel.content.childCount(); Widget.attach(button, document.body); button.node.click(); expect(panel.content.childCount()).to.be(count - 1); expect(clipboard.hasData(JUPYTER_CELL_MIME)).to.be(true); button.dispose(); });
/** * Copy or cut the selected cell data to a clipboard. * * @param widget - The target notebook widget. * * @param clipboard - The clipboard object. * * @param cut - Whether to copy or cut. */ function copyOrCut(widget: Notebook, clipboard: IClipboard, cut: boolean): void { if (!widget.model || !widget.activeCell) { return; } widget.mode = 'command'; clipboard.clear(); let data: nbformat.IBaseCell[] = []; each(widget.widgets, child => { if (widget.isSelected(child)) { data.push(child.model.toJSON()); } }); clipboard.setData(JUPYTER_CELL_MIME, data); if (cut) { deleteCells(widget); } else { widget.deselectAll(); } }
function paste(widget: Notebook, clipboard: IClipboard): void { if (!widget.model || !widget.activeCell) { return; } if (!clipboard.hasData(JUPYTER_CELL_MIME)) { return; } let values = clipboard.getData(JUPYTER_CELL_MIME) as nbformat.IBaseCell[]; let model = widget.model; let newCells: ICellModel[] = []; widget.mode = 'command'; each(values, cell => { switch (cell.cell_type) { case 'code': newCells.push(model.contentFactory.createCodeCell({ cell })); break; case 'markdown': newCells.push(model.contentFactory.createMarkdownCell({ cell })); break; default: newCells.push(model.contentFactory.createRawCell({ cell })); break; } }); let index = widget.activeCellIndex; let cells = widget.model.cells; cells.beginCompoundOperation(); each(newCells, cell => { cells.insert(++index, cell); }); cells.endCompoundOperation(); widget.activeCellIndex += newCells.length; widget.deselectAll(); }
afterEach(() => { widget.dispose(); clipboard.clear(); });
it('should be a no-op if there is no model', () => { widget.model = null; NotebookActions.cut(widget, clipboard); expect(clipboard.hasData(JUPYTER_CELL_MIME)).to.be(false); });