@@ -6,13 +6,11 @@ import { Dialog } from '@jupyterlab/apputils';
6
6
7
7
import { Widget } from '@lumino/widgets' ;
8
8
import { Message } from '@lumino/messaging' ;
9
- // import { PromiseDelegate } from '@lumino/coreutils';
10
- // import { ArrayExt } from '@lumino/algorithm';
11
9
12
10
import checkSVGstr from '../style/icon/jupyter_checkmark.svg' ;
13
11
14
12
/**
15
- * The class name for confirmation box
13
+ * The class name for message
16
14
*/
17
15
// const CONFIRM_CLASS = 'jp-codeSnippet-confirm';
18
16
const CONFIRM_CONTENT = 'jp-codeSnippet-Message-content' ;
@@ -26,26 +24,28 @@ const CODE_SNIPPET_CONFIRM_TEXT = 'jp-codeSnippet-confirm-text';
26
24
*
27
25
* @returns A promise that resolves with whether the dialog was accepted.
28
26
*/
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 ) ,
32
30
buttons : [ ] ,
33
31
} ) ;
34
32
return confirmMessage . launch ( ) ;
35
33
}
36
34
37
35
/**
38
- * A widget used to show confirmation message.
36
+ * A widget used to show message.
39
37
*/
40
- export class ConfirmMessage < T > extends Dialog < any > {
38
+ export class CodeSnippetMessage < T > extends Dialog < any > {
41
39
constructor ( options : Partial < Dialog . IOptions < T > > = { } ) {
42
40
super ( options ) ;
43
41
this . children ( ) . next ( ) . addClass ( CONFIRM_CONTENT ) ;
44
42
}
45
43
46
44
protected onAfterAttach ( msg : Message ) : void {
47
45
const node = this . node ;
46
+
48
47
node . addEventListener ( 'click' , this , true ) ;
48
+ document . addEventListener ( 'keydown' , this , false ) ;
49
49
}
50
50
51
51
/**
@@ -54,12 +54,35 @@ export class ConfirmMessage<T> extends Dialog<any> {
54
54
protected onAfterDetach ( msg : Message ) : void {
55
55
const node = this . node ;
56
56
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
+ }
57
80
}
58
81
}
59
82
60
83
class MessageHandler extends Widget {
61
- constructor ( ) {
62
- super ( { node : Private . createConfirmMessageNode ( ) } ) ;
84
+ constructor ( type : string ) {
85
+ super ( { node : Private . createMessageNode ( type ) } ) ;
63
86
this . addClass ( CONFIRM_BODY ) ;
64
87
}
65
88
}
@@ -69,14 +92,20 @@ class MessageHandler extends Widget {
69
92
*/
70
93
namespace Private {
71
94
// create a confirm message when new snippet is created successfully
72
- export function createConfirmMessageNode ( ) : HTMLElement {
95
+ export function createMessageNode ( type : string ) : HTMLElement {
73
96
const body = document . createElement ( 'div' ) ;
74
97
body . innerHTML = checkSVGstr ;
75
98
76
99
const messageContainer = document . createElement ( 'div' ) ;
77
100
messageContainer . className = CODE_SNIPPET_CONFIRM_TEXT ;
78
101
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
+ }
80
109
messageContainer . appendChild ( message ) ;
81
110
body . append ( messageContainer ) ;
82
111
return body ;
0 commit comments