UNPKG

1.6 kBPlain TextView Raw
1import { IDisposable, DisposableDelegate } from '@lumino/disposable';
2
3import { ISignal, Signal } from '@lumino/signaling';
4
5import { ToolbarButton } from '@jupyterlab/apputils';
6
7import { DocumentRegistry } from '@jupyterlab/docregistry';
8
9import { IObservableJSON } from '@jupyterlab/observables';
10
11import { NotebookPanel, INotebookModel } from '@jupyterlab/notebook';
12
13import { PACKAGE_NAME, CONFIGURED_CLASS } from '.';
14
15import { ICONS } from './icons';
16
17/**
18 * A notebook widget extension that adds a button to the toolbar.
19 */
20export class NotebookFontsButton
21 implements DocumentRegistry.IWidgetExtension<NotebookPanel, INotebookModel> {
22 readonly widgetRequested: ISignal<any, void> = new Signal<any, void>(this);
23 /**
24 * Create a new extension object.
25 */
26 createNew(
27 panel: NotebookPanel,
28 context: DocumentRegistry.IContext<INotebookModel>
29 ): IDisposable {
30 let button = new ToolbarButton({
31 icon: ICONS.fonts,
32 onClick: () => {
33 (this.widgetRequested as Signal<any, void>).emit(void 0);
34 },
35 tooltip: 'Customize Notebook Fonts'
36 });
37
38 const metaUpdated = (metadata: IObservableJSON) => {
39 const hasMeta = !!metadata.get(PACKAGE_NAME);
40 if (hasMeta) {
41 button.addClass(CONFIGURED_CLASS);
42 } else {
43 button.removeClass(CONFIGURED_CLASS);
44 }
45 };
46
47 if (panel.model) {
48 panel.model.metadata.changed.connect(metaUpdated);
49 metaUpdated(panel.model.metadata);
50 }
51
52 panel.toolbar.insertItem(9, 'fonts', button);
53
54 return new DisposableDelegate(() => {
55 button.dispose();
56 });
57 }
58}