@@ -12,6 +12,8 @@ export abstract class SelectModal<T> extends Modal {
12
12
skipButton ?: ButtonComponent ;
13
13
submitButton ?: ButtonComponent ;
14
14
15
+ elementWrapper ?: HTMLDivElement ;
16
+
15
17
elements : T [ ] ;
16
18
selectModalElements : SelectModalElement < T > [ ] ;
17
19
@@ -27,18 +29,28 @@ export abstract class SelectModal<T> extends Modal {
27
29
this . skipButton = undefined ;
28
30
this . submitButton = undefined ;
29
31
32
+ this . elementWrapper = undefined ;
33
+
30
34
this . elements = elements ;
31
35
this . selectModalElements = [ ] ;
32
36
33
- this . scope . register ( [ ] , 'ArrowUp' , ( ) => {
37
+ this . scope . register ( [ ] , 'ArrowUp' , ( evt ) => {
34
38
this . highlightUp ( ) ;
39
+ evt . preventDefault ( ) ;
35
40
} ) ;
36
- this . scope . register ( [ ] , 'ArrowDown' , ( ) => {
41
+ this . scope . register ( [ ] , 'ArrowDown' , ( evt ) => {
37
42
this . highlightDown ( ) ;
43
+ evt . preventDefault ( ) ;
38
44
} ) ;
39
45
this . scope . register ( [ ] , 'ArrowRight' , ( ) => {
40
46
this . activateHighlighted ( ) ;
41
47
} ) ;
48
+ this . scope . register ( [ ] , ' ' , ( evt ) => {
49
+ if ( this . elementWrapper && this . elementWrapper === document . activeElement ) {
50
+ this . activateHighlighted ( ) ;
51
+ evt . preventDefault ( ) ;
52
+ }
53
+ } ) ;
42
54
this . scope . register ( [ ] , 'Enter' , ( ) => this . submit ( ) ) ;
43
55
}
44
56
@@ -67,24 +79,17 @@ export abstract class SelectModal<T> extends Modal {
67
79
async onOpen ( ) {
68
80
const { contentEl} = this ;
69
81
70
- /*
71
- contentEl.id = 'media-db-plugin-modal'
72
-
73
- contentEl.on('keydown', '#' + contentEl.id, (ev, delegateTarget) => {
74
- console.log(ev.key);
75
- });
76
- */
77
-
78
82
contentEl . createEl ( 'h2' , { text : this . title } ) ;
79
83
contentEl . createEl ( 'p' , { text : this . description } ) ;
80
84
81
85
contentEl . addClass ( 'media-db-plugin-select-modal' ) ;
82
86
83
- const elementWrapper = contentEl . createDiv ( { cls : 'media-db-plugin-select-wrapper' } ) ;
87
+ this . elementWrapper = contentEl . createDiv ( { cls : 'media-db-plugin-select-wrapper' } ) ;
88
+ this . elementWrapper . tabIndex = 0 ;
84
89
85
90
let i = 0 ;
86
91
for ( const element of this . elements ) {
87
- const selectModalElement = new SelectModalElement ( element , elementWrapper , i , this , false ) ;
92
+ const selectModalElement = new SelectModalElement ( element , this . elementWrapper , i , this , false ) ;
88
93
89
94
this . selectModalElements . push ( selectModalElement ) ;
90
95
@@ -96,11 +101,27 @@ export abstract class SelectModal<T> extends Modal {
96
101
this . selectModalElements . first ( ) ?. element . scrollIntoView ( ) ;
97
102
98
103
const bottomSettingRow = new Setting ( contentEl ) ;
99
- bottomSettingRow . addButton ( btn => this . cancelButton = btn . setButtonText ( 'Cancel' ) . onClick ( ( ) => this . close ( ) ) ) ;
104
+ bottomSettingRow . addButton ( btn => {
105
+ btn . setButtonText ( 'Cancel' ) ;
106
+ btn . onClick ( ( ) => this . close ( ) ) ;
107
+ btn . buttonEl . addClass ( 'media-db-plugin-button' ) ;
108
+ this . cancelButton = btn ;
109
+ } ) ;
100
110
if ( this . addSkipButton ) {
101
- bottomSettingRow . addButton ( btn => this . skipButton = btn . setButtonText ( 'Skip' ) . onClick ( ( ) => this . skip ( ) ) ) ;
111
+ bottomSettingRow . addButton ( btn => {
112
+ btn . setButtonText ( 'Skip' ) ;
113
+ btn . onClick ( ( ) => this . skip ( ) ) ;
114
+ btn . buttonEl . addClass ( 'media-db-plugin-button' ) ;
115
+ this . skipButton = btn ;
116
+ } ) ;
102
117
}
103
- bottomSettingRow . addButton ( btn => this . submitButton = btn . setButtonText ( 'Ok' ) . setCta ( ) . onClick ( ( ) => this . submit ( ) ) ) ;
118
+ bottomSettingRow . addButton ( btn => {
119
+ btn . setButtonText ( 'Ok' ) ;
120
+ btn . setCta ( ) ;
121
+ btn . onClick ( ( ) => this . submit ( ) ) ;
122
+ btn . buttonEl . addClass ( 'media-db-plugin-button' ) ;
123
+ this . submitButton = btn ;
124
+ } ) ;
104
125
}
105
126
106
127
activateHighlighted ( ) {
0 commit comments