Skip to content

Commit 805d9d3

Browse files
committed
Modal keyboard navigation changes
1 parent 5aa9108 commit 805d9d3

File tree

6 files changed

+79
-31
lines changed

6 files changed

+79
-31
lines changed

src/modals/MediaDbAdvancedSearchModal.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -96,14 +96,19 @@ export class MediaDbAdvancedSearchModal extends Modal {
9696
contentEl.createDiv({cls: 'media-db-plugin-spacer'});
9797

9898
new Setting(contentEl)
99-
.addButton(btn => btn.setButtonText('Cancel').onClick(() => this.close()))
10099
.addButton(btn => {
101-
return (this.searchBtn = btn
102-
.setButtonText('Ok')
103-
.setCta()
104-
.onClick(() => {
105-
this.search();
106-
}));
100+
btn.setButtonText('Cancel');
101+
btn.onClick(() => this.close());
102+
btn.buttonEl.addClass('media-db-plugin-button');
103+
})
104+
.addButton(btn => {
105+
btn.setButtonText('Ok');
106+
btn.setCta();
107+
btn.onClick(() => {
108+
this.search();
109+
});
110+
btn.buttonEl.addClass('media-db-plugin-button');
111+
this.searchBtn = btn;
107112
});
108113
}
109114

src/modals/MediaDbFolderImportModal.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,20 @@ export class MediaDbFolderImportModal extends Modal {
7676
contentEl.createDiv({cls: 'media-db-plugin-spacer'});
7777

7878
new Setting(contentEl)
79-
.addButton(btn => btn.setButtonText('Cancel').onClick(() => this.close()))
80-
.addButton(btn => btn.setButtonText('Ok').setCta().onClick(() => this.submit()));
79+
.addButton(btn => {
80+
btn.setButtonText('Cancel');
81+
btn.onClick(() => this.close());
82+
btn.buttonEl.addClass('media-db-plugin-button');
83+
})
84+
.addButton(btn => {
85+
btn.setButtonText('Ok');
86+
btn.setCta();
87+
btn.onClick(() => {
88+
this.submit();
89+
});
90+
btn.buttonEl.addClass('media-db-plugin-button');
91+
this.searchBtn = btn;
92+
});
8193
}
8294

8395
onClose() {

src/modals/MediaDbIdSearchModal.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,19 @@ export class MediaDbIdSearchModal extends Modal {
8484
contentEl.createDiv({cls: 'media-db-plugin-spacer'});
8585

8686
new Setting(contentEl)
87-
.addButton(btn => btn.setButtonText('Cancel').onClick(() => this.close()))
8887
.addButton(btn => {
89-
return (this.searchBtn = btn
90-
.setButtonText('Ok')
91-
.setCta()
92-
.onClick(() => {
93-
this.search();
94-
}));
88+
btn.setButtonText('Cancel');
89+
btn.onClick(() => this.close());
90+
btn.buttonEl.addClass('media-db-plugin-button');
91+
})
92+
.addButton(btn => {
93+
btn.setButtonText('Ok');
94+
btn.setCta();
95+
btn.onClick(() => {
96+
this.search();
97+
});
98+
btn.buttonEl.addClass('media-db-plugin-button');
99+
this.searchBtn = btn;
95100
});
96101
}
97102

src/modals/MediaDbSearchResultModal.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ export class MediaDbSearchResultModal extends SelectModal<MediaTypeModel> {
5959
}
6060

6161
onClose() {
62+
console.log('close');
6263
this.closeCallback();
6364
}
6465
}

src/modals/SelectModal.ts

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ export abstract class SelectModal<T> extends Modal {
1212
skipButton?: ButtonComponent;
1313
submitButton?: ButtonComponent;
1414

15+
elementWrapper?: HTMLDivElement;
16+
1517
elements: T[];
1618
selectModalElements: SelectModalElement<T>[];
1719

@@ -27,18 +29,28 @@ export abstract class SelectModal<T> extends Modal {
2729
this.skipButton = undefined;
2830
this.submitButton = undefined;
2931

32+
this.elementWrapper = undefined;
33+
3034
this.elements = elements;
3135
this.selectModalElements = [];
3236

33-
this.scope.register([], 'ArrowUp', () => {
37+
this.scope.register([], 'ArrowUp', (evt) => {
3438
this.highlightUp();
39+
evt.preventDefault();
3540
});
36-
this.scope.register([], 'ArrowDown', () => {
41+
this.scope.register([], 'ArrowDown', (evt) => {
3742
this.highlightDown();
43+
evt.preventDefault();
3844
});
3945
this.scope.register([], 'ArrowRight', () => {
4046
this.activateHighlighted();
4147
});
48+
this.scope.register([], ' ', (evt) => {
49+
if (this.elementWrapper && this.elementWrapper === document.activeElement) {
50+
this.activateHighlighted();
51+
evt.preventDefault();
52+
}
53+
});
4254
this.scope.register([], 'Enter', () => this.submit());
4355
}
4456

@@ -67,24 +79,17 @@ export abstract class SelectModal<T> extends Modal {
6779
async onOpen() {
6880
const {contentEl} = this;
6981

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-
7882
contentEl.createEl('h2', {text: this.title});
7983
contentEl.createEl('p', {text: this.description});
8084

8185
contentEl.addClass('media-db-plugin-select-modal');
8286

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;
8489

8590
let i = 0;
8691
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);
8893

8994
this.selectModalElements.push(selectModalElement);
9095

@@ -96,11 +101,27 @@ export abstract class SelectModal<T> extends Modal {
96101
this.selectModalElements.first()?.element.scrollIntoView();
97102

98103
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+
});
100110
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+
});
102117
}
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+
});
104125
}
105126

106127
activateHighlighted() {

styles.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,4 +105,8 @@ small.media-db-plugin-list-text{
105105
margin-bottom: 5px;
106106
}
107107

108+
.media-db-plugin-button:focus {
109+
outline: 1px solid white;
110+
}
111+
108112
/* endregion */

0 commit comments

Comments
 (0)