@@ -6,13 +6,11 @@ import { Dialog } from '@jupyterlab/apputils';
66
77import { Widget } from '@lumino/widgets' ;
88import { Message } from '@lumino/messaging' ;
9- // import { PromiseDelegate } from '@lumino/coreutils';
10- // import { ArrayExt } from '@lumino/algorithm';
119
1210import checkSVGstr from '../style/icon/jupyter_checkmark.svg' ;
1311
1412/**
15- * The class name for confirmation box
13+ * The class name for message
1614 */
1715// const CONFIRM_CLASS = 'jp-codeSnippet-confirm';
1816const CONFIRM_CONTENT = 'jp-codeSnippet-Message-content' ;
@@ -26,26 +24,28 @@ const CODE_SNIPPET_CONFIRM_TEXT = 'jp-codeSnippet-confirm-text';
2624 *
2725 * @returns A promise that resolves with whether the dialog was accepted.
2826 */
29- export function showMessage < T > ( ) : Promise < Dialog . IResult < T > > {
30- const confirmMessage = new ConfirmMessage ( {
31- body : new MessageHandler ( ) ,
27+ export function showMessage < T > ( type : string ) : Promise < Dialog . IResult < T > > {
28+ const confirmMessage = new CodeSnippetMessage ( {
29+ body : new MessageHandler ( type ) ,
3230 buttons : [ ] ,
3331 } ) ;
3432 return confirmMessage . launch ( ) ;
3533}
3634
3735/**
38- * A widget used to show confirmation message.
36+ * A widget used to show message.
3937 */
40- export class ConfirmMessage < T > extends Dialog < any > {
38+ export class CodeSnippetMessage < T > extends Dialog < any > {
4139 constructor ( options : Partial < Dialog . IOptions < T > > = { } ) {
4240 super ( options ) ;
4341 this . children ( ) . next ( ) . addClass ( CONFIRM_CONTENT ) ;
4442 }
4543
4644 protected onAfterAttach ( msg : Message ) : void {
4745 const node = this . node ;
46+
4847 node . addEventListener ( 'click' , this , true ) ;
48+ document . addEventListener ( 'keydown' , this , false ) ;
4949 }
5050
5151 /**
@@ -54,12 +54,35 @@ export class ConfirmMessage<T> extends Dialog<any> {
5454 protected onAfterDetach ( msg : Message ) : void {
5555 const node = this . node ;
5656 node . removeEventListener ( 'click' , this , true ) ;
57+ document . removeEventListener ( 'keydown' , this , false ) ;
58+ }
59+
60+ handleEvent ( event : Event ) : void {
61+ switch ( event . type ) {
62+ case 'keydown' :
63+ this . _evtKeydown ( event as KeyboardEvent ) ;
64+ break ;
65+ case 'click' :
66+ this . _evtClick ( event as MouseEvent ) ;
67+ break ;
68+ }
69+ }
70+
71+ protected _evtKeydown ( event : KeyboardEvent ) : void {
72+ // Check for escape key
73+ switch ( event . key ) {
74+ case 'Escape' :
75+ event . stopPropagation ( ) ;
76+ event . preventDefault ( ) ;
77+ this . reject ( ) ;
78+ break ;
79+ }
5780 }
5881}
5982
6083class MessageHandler extends Widget {
61- constructor ( ) {
62- super ( { node : Private . createConfirmMessageNode ( ) } ) ;
84+ constructor ( type : string ) {
85+ super ( { node : Private . createMessageNode ( type ) } ) ;
6386 this . addClass ( CONFIRM_BODY ) ;
6487 }
6588}
@@ -69,14 +92,20 @@ class MessageHandler extends Widget {
6992 */
7093namespace Private {
7194 // create a confirm message when new snippet is created successfully
72- export function createConfirmMessageNode ( ) : HTMLElement {
95+ export function createMessageNode ( type : string ) : HTMLElement {
7396 const body = document . createElement ( 'div' ) ;
7497 body . innerHTML = checkSVGstr ;
7598
7699 const messageContainer = document . createElement ( 'div' ) ;
77100 messageContainer . className = CODE_SNIPPET_CONFIRM_TEXT ;
78101 const message = document . createElement ( 'text' ) ;
79- message . textContent = 'Saved as Snippet!' ;
102+ if ( type === 'confirm' ) {
103+ message . textContent = 'Saved as Snippet!' ;
104+ } else if ( type === 'copy' ) {
105+ message . textContent = 'Saved to Clipboard!' ;
106+ } else if ( type === 'download' ) {
107+ message . textContent = 'Downloaded the Snippet!' ;
108+ }
80109 messageContainer . appendChild ( message ) ;
81110 body . append ( messageContainer ) ;
82111 return body ;
0 commit comments