From ca71190a8e509469b33b11b383213070d812d998 Mon Sep 17 00:00:00 2001 From: adpatter <77470591+adpatter@users.noreply.github.com> Date: Sun, 14 Feb 2021 04:34:18 -0500 Subject: [PATCH] Modify Signals to render a HTML button without React. (#148) --- basics/signals/README.md | 105 ++++++++++++++------------------- basics/signals/package.json | 16 ++--- basics/signals/preview.png | Bin 31216 -> 39183 bytes basics/signals/src/button.ts | 37 ++++++++++++ basics/signals/src/button.tsx | 37 ------------ basics/signals/src/panel.ts | 21 ++++--- basics/signals/style/index.css | 4 +- 7 files changed, 104 insertions(+), 116 deletions(-) mode change 100755 => 100644 basics/signals/preview.png create mode 100644 basics/signals/src/button.ts delete mode 100644 basics/signals/src/button.tsx diff --git a/basics/signals/README.md b/basics/signals/README.md index 6f9f32fb..c2b0b21d 100644 --- a/basics/signals/README.md +++ b/basics/signals/README.md @@ -1,19 +1,18 @@ # Signals -> Use Signals to allow Widgets communicate with each others. +> Use Signals to allow Widgets to communicate with each others. - [Lumino Signaling 101](#lumino-signaling-101) -- [A simple React Button](#a-simple-react-button) +- [A simple HTML Button](#a-simple-html-button) - [Subscribing to a Signal](#subscribing-to-a-signal) ![Button with Signal](preview.png) ## Lumino Signaling 101 -Communication between different components of JupyterLab is a key ingredient in building an -extension. +Communication between different components of JupyterLab is a key ingredient in building an extension. -In this extension, a simple button will be added to print something to the console. +In this extension, a simple HTML button will be added to print something to the console. JupyterLab's Lumino engine uses the `ISignal` interface and the `Signal` class that implements this interface for communication @@ -21,30 +20,30 @@ JupyterLab's Lumino engine uses the `ISignal` interface and the The basic concept is as follows: -First, a widget (`button.tsx`), in this case the one that contains +First, a widget (`ButtonWidget` in `button.ts`), in this case the one that contains some visual elements such as a button, defines a `_stateChanged` signal: ```ts -// src/button.tsx#L36-L36 +// src/button.ts#L32-L32 -private _stateChanged = new Signal(this); +private _stateChanged = new Signal(this); ``` That private signal is exposed to other widgets via a public accessor method. ```ts -// src/button.tsx#L15-L17 +// src/button.ts#L34-L36 -public get stateChanged(): ISignal { +public get stateChanged(): ISignal { return this._stateChanged; } ``` -Another widget, in this case the panel (`panel.ts`) that boxes several different widgets, -subscribes to the `stateChanged` signal and links some function to it: +Another widget, in this case the panel (`SignalExamplePanel` in `panel.ts`) that can box several different widgets, +subscribes to the `stateChanged` signal and links a function to it: ```ts -// src/panel.ts#L29-L29 +// src/panel.ts#L33-L33 this._widget.stateChanged.connect(this._logMessage, this); ``` @@ -52,55 +51,36 @@ this._widget.stateChanged.connect(this._logMessage, this); The `_logMessage` is executed when the signal is triggered from the first widget with: ```ts -// src/button.tsx#L28-L28 +// src/button.ts#L24-L24 this._stateChanged.emit(this._count); ``` Let's look at the implementations details. -## A simple React Button +## A Simple HTML Button -Start with a file called `src/button.tsx`. The `tsx` extension allows to use -HTML-like syntax with the tag notation `<>` to represent some visual elements -(note that you have to add a line: `"jsx": "react",` to the -`tsconfig.json` file). This is a special syntax used by [React](https://reactjs.org/tutorial/tutorial.html). +Start with a file called `src/button.ts`. -You can also try the [React Widget example](./../../react/react-widget) for more details. +NB: For a React widget, you can try the [React Widget example](./../../react/react-widget) for more details. -`button.tsx` contains one major class `ButtonWidget` that extends the -`ReactWidget` class provided by JupyterLab. +`button.ts` contains one class `ButtonWidget` that extends the +`Widget` class provided by Lumino. -`ReactWidget` defines a `render()` method that defines some React elements such as a button. -This is the recommended way to include React component inside the JupyterLab widget based UI. +The constructor argument of the `ButtonWidget` class is assigned a default `HTMLButtonElement` node (e.g., ``). The Widget's `node` property references its respective `HTMLElement`. For example, you can set the content of the button with `this.node.textContent = 'Click me'`. ```ts -// src/button.tsx#L19-L34 - -protected render(): React.ReactElement { - return ( - - ); -} +// src/button.ts#L11-L11 + +constructor(options = { node: document.createElement('button') }) { ``` -`ButtonWidget` also contain a private attribute `_count` of type `ICount`. +`ButtonWidget` also contains a private attribute `_count` of type `ICount`. ```ts -// src/button.tsx#L11-L13 +// src/button.ts#L28-L30 -protected _count: ICount = { +private _count: ICount = { clickCount: 0 }; ``` @@ -109,9 +89,9 @@ protected _count: ICount = { `Signal`. ```ts -// src/button.tsx#L36-L36 +// src/button.ts#L32-L32 -private _stateChanged = new Signal(this); +private _stateChanged = new Signal(this); ``` A signal object can be triggered and then emits an actual signal. @@ -119,19 +99,17 @@ A signal object can be triggered and then emits an actual signal. Other Widgets can subscribe to such a signal and react when a message is emitted. -The button `onClick` event will increment the `_count` +The button `click` event will increment the `_count` private attribute and will trigger the `_stateChanged` signal passing the `_count` variable. ```ts -// src/button.tsx#L24-L29 +// src/button.ts#L22-L25 -onClick={(): void => { - this._count = { - clickCount: this._count.clickCount + 1 - }; +this.node.addEventListener('click', () => { + this._count.clickCount = this._count.clickCount + 1; this._stateChanged.emit(this._count); -}} +}); ``` ## Subscribing to a Signal @@ -141,14 +119,17 @@ The `panel.ts` class defines an extension panel that displays the This is done in the constructor. ```ts -// src/panel.ts#L18-L30 +// src/panel.ts#L19-L34 constructor(translator?: ITranslator) { super(); this._translator = translator || nullTranslator; this._trans = this._translator.load('jupyterlab'); this.addClass(PANEL_CLASS); - this.id = 'SignalExamplePanel'; + + // This ensures the id of the DOM node is unique for each Panel instance. + this.id = 'SignalExamplePanel_' + SignalExamplePanel._id++; + this.title.label = this._trans.__('Signal Example View'); this.title.closable = true; @@ -162,7 +143,7 @@ Subscription to a signal is done using the `connect` method of the `stateChanged` attribute. ```ts -// src/panel.ts#L29-L29 +// src/panel.ts#L33-L33 this._widget.stateChanged.connect(this._logMessage, this); ``` @@ -171,7 +152,8 @@ It registers the `_logMessage` function which is triggered when the signal is em **Note** -> From the official [JupyterLab Documentation](https://jupyterlab.readthedocs.io/en/stable/developer/patterns.html#signals): +From the official [JupyterLab Documentation](https://jupyterlab.readthedocs.io/en/stable/developer/patterns.html#signals): + > Wherever possible as signal connection should be made with the pattern `.connect(this._onFoo, this)`. > Providing the `this` context enables the connection to be properly cleared by `clearSignalData(this)`. > Using a private method avoids allocating a closure for each connection. @@ -180,16 +162,16 @@ The `_logMessage` function receives as parameters the emitter (of type `ButtonWi and the count (of type `ICount`) sent by the signal emitter. ```ts -// src/panel.ts#L32-L32 +// src/panel.ts#L36-L36 private _logMessage(emitter: ButtonWidget, count: ICount): void { ``` -In our case, that function writes `Button has been clicked ... times.` text +In our case, that function writes `The big red button has been clicked ... times.` text to the browser console and in an alert when the big red button is clicked. ```ts -// src/panel.ts#L32-L39 +// src/panel.ts#L36-L44 private _logMessage(emitter: ButtonWidget, count: ICount): void { console.log('Hey, a Signal has been received from', emitter); @@ -199,6 +181,7 @@ private _logMessage(emitter: ButtonWidget, count: ICount): void { window.alert( `The big red button has been clicked ${count.clickCount} times.` ); +} ``` There it is. Signaling is conceptually important for building extensions. diff --git a/basics/signals/package.json b/basics/signals/package.json index 66cd9c26..f5d9361a 100644 --- a/basics/signals/package.json +++ b/basics/signals/package.json @@ -44,14 +44,17 @@ "watch:src": "tsc -w" }, "dependencies": { - "@jupyterlab/application": "^3.0.0-rc.15", - "@jupyterlab/launcher": "^3.0.0-rc.15", - "@jupyterlab/mainmenu": "^3.0.0-rc.15", - "@jupyterlab/translation": "^3.0.0-rc.15", + "@jupyterlab/application": "^3.0.3", + "@jupyterlab/apputils": "^3.0.3", + "@jupyterlab/launcher": "^3.0.3", + "@jupyterlab/mainmenu": "^3.0.3", + "@jupyterlab/translation": "^3.0.3", "@lumino/algorithm": "^1.3.3", "@lumino/coreutils": "^1.5.3", "@lumino/datagrid": "^0.3.1", - "@lumino/disposable": "^1.4.3" + "@lumino/disposable": "^1.4.3", + "@lumino/signaling": "^1.3.3", + "@lumino/widgets": "^1.16.1" }, "devDependencies": { "@jupyterlab/builder": "^3.0.0-rc.15", @@ -63,7 +66,6 @@ "eslint-plugin-prettier": "^3.1.2", "eslint-plugin-react": "^7.18.3", "npm-run-all": "^4.1.5", - "prettier": "^1.19.0", "rimraf": "^3.0.2", "typescript": "~4.1.3" }, @@ -74,4 +76,4 @@ "extension": true, "outputDir": "jupyterlab_examples_signals/labextension" } -} \ No newline at end of file +} diff --git a/basics/signals/preview.png b/basics/signals/preview.png old mode 100755 new mode 100644 index 2c3810c0d98d7e2127568ea42f9e25dc507e9b88..4ca8238d73c1bbcc97908ad296d6a76b414a06fa GIT binary patch literal 39183 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

?@NQ$01&!I(0GsxGujE7fxx8p#AAY`w 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 { + this._count.clickCount = this._count.clickCount + 1; + this._stateChanged.emit(this._count); + }); + } + + private _count: ICount = { + clickCount: 0 + }; + + private _stateChanged = new Signal(this); + + public get stateChanged(): ISignal { + return this._stateChanged; + } +} diff --git a/basics/signals/src/button.tsx b/basics/signals/src/button.tsx deleted file mode 100644 index d32bbf1a..00000000 --- a/basics/signals/src/button.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { ReactWidget } from '@jupyterlab/apputils'; -import { ISignal, Signal } from '@lumino/signaling'; - -import * as React from 'react'; - -export interface ICount { - clickCount: number; -} - -export class ButtonWidget extends ReactWidget { - protected _count: ICount = { - clickCount: 0 - }; - - public get stateChanged(): ISignal { - return this._stateChanged; - } - - protected render(): React.ReactElement { - return ( - - ); - } - - private _stateChanged = new Signal(this); -} diff --git a/basics/signals/src/panel.ts b/basics/signals/src/panel.ts index ff5be3df..c38d361f 100644 --- a/basics/signals/src/panel.ts +++ b/basics/signals/src/panel.ts @@ -3,24 +3,28 @@ import { nullTranslator, TranslationBundle } from '@jupyterlab/translation'; -import { StackedPanel } from '@lumino/widgets'; + +import { Panel } from '@lumino/widgets'; import { ButtonWidget, ICount } from './button'; -/** - * The class name added to console panels. - */ -const PANEL_CLASS = 'jp-tutorial-view'; + +const PANEL_CLASS = 'jp-SignalExamplePanel'; /** - * A panel which contains a console and the ability to add other children. + * A panel which contains a ButtonWidget and the ability to add other children. */ -export class SignalExamplePanel extends StackedPanel { +export class SignalExamplePanel extends Panel { + static _id = 0; + constructor(translator?: ITranslator) { super(); this._translator = translator || nullTranslator; this._trans = this._translator.load('jupyterlab'); this.addClass(PANEL_CLASS); - this.id = 'SignalExamplePanel'; + + // This ensures the id of the DOM node is unique for each Panel instance. + this.id = 'SignalExamplePanel_' + SignalExamplePanel._id++; + this.title.label = this._trans.__('Signal Example View'); this.title.closable = true; @@ -40,7 +44,6 @@ export class SignalExamplePanel extends StackedPanel { } private _widget: ButtonWidget; - private _translator: ITranslator; private _trans: TranslationBundle; } diff --git a/basics/signals/style/index.css b/basics/signals/style/index.css index de04ac60..52582a1d 100644 --- a/basics/signals/style/index.css +++ b/basics/signals/style/index.css @@ -1,8 +1,8 @@ -.jp-tutorial-view { +.jp-SignalExamplePanel { background-color: AliceBlue; } -.jp-tutorial-button { +.jp-ButtonWidget { background-color: red; border-radius: 12px; border: none;