@jupyterlab/notebook
Version:
JupyterLab - Notebook
82 lines (73 loc) • 2.28 kB
text/typescript
/*
* Copyright (c) Jupyter Development Team.
* Distributed under the terms of the Modified BSD License.
*/
import { Widget } from '@lumino/widgets';
import { Message } from '@lumino/messaging';
import { Notebook } from './widget';
import { NotebookActions } from './actions';
const NOTEBOOK_FOOTER_CLASS = 'jp-Notebook-footer';
/**
* A footer widget added after the last cell of the notebook.
*/
export class NotebookFooter extends Widget {
/**
* Construct a footer widget.
*/
constructor(protected notebook: Notebook) {
super({ node: document.createElement('button') });
const trans = notebook.translator.load('jupyterlab');
this.addClass(NOTEBOOK_FOOTER_CLASS);
this.node.setAttribute('tabindex', '-1');
this.node.innerText = trans.__('Click to add a cell.');
}
/**
* Handle incoming events.
*/
handleEvent(event: Event): void {
switch (event.type) {
case 'click':
this.onClick();
break;
case 'keydown':
if ((event as KeyboardEvent).key === 'ArrowUp') {
this.onArrowUp();
break;
}
}
}
/**
* On single click (mouse event), insert a cell below (at the end of the notebook as default behavior).
*/
protected onClick(): void {
if (this.notebook.widgets.length > 0) {
this.notebook.activeCellIndex = this.notebook.widgets.length - 1;
}
NotebookActions.insertBelow(this.notebook);
// Focus on the created cell.
void NotebookActions.focusActiveCell(this.notebook);
}
/**
* On arrow up key pressed (keydown keyboard event).
* @deprecated To be removed in v5, this is a no-op
*/
protected onArrowUp(): void {
// The specific behavior has been removed in https://github.com/jupyterlab/jupyterlab/pull/14796
}
/*
* Handle `after-detach` messages for the widget.
*/
protected onAfterAttach(msg: Message): void {
super.onAfterAttach(msg);
this.node.addEventListener('click', this);
this.node.addEventListener('keydown', this);
}
/**
* Handle `before-detach` messages for the widget.
*/
protected onBeforeDetach(msg: Message): void {
this.node.removeEventListener('click', this);
this.node.removeEventListener('keydown', this);
super.onBeforeDetach(msg);
}
}