Skip to content

Commit a2c920b

Browse files
Add screen reader mode support, deprecate keyboard controls toggle (#15)
Adds MakeCodeFrameDriver.toggleScreenReaderMode() sending the new "togglescreenreadermode" action and an optional screenReaderMode field on the info response, both supported by the next MakeCode release. toggleKeyboardControls() remains for API compatibility but is deprecated as current MakeCode versions keep keyboard controls always enabled, so it does nothing. The storybook toolbar button now exercises the screen reader toggle, and the editor stories' version control gains a "local" option pointing at a locally running pxt-microbit dev server for testing unreleased editor changes.
1 parent c8a5383 commit a2c920b

6 files changed

Lines changed: 49 additions & 9 deletions

File tree

src/stories/MakeCodeToolbar.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,8 @@ const MakeCodeToolbar = ({
104104
<button onClick={() => driver.current!.toggleDebugSloMo()}>
105105
Toggle debug slow mo
106106
</button>
107-
<button onClick={() => driver.current!.toggleKeyboardControls()}>
108-
Keyboard controls
107+
<button onClick={() => driver.current!.toggleScreenReaderMode()}>
108+
Screen reader mode
109109
</button>
110110
<button onClick={() => driver.current!.toggleGreenScreen()}>
111111
Green screen

src/stories/config.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,18 @@
11
export const controllerId = 'MicrobitStorybook';
2+
3+
// A locally running pxt-microbit dev server (`pxt serve`), selectable via the
4+
// "version" control in the editor stories for testing unreleased editor changes.
5+
// We point at /index.html because the dev server's redirect from / drops the
6+
// query string, losing controller=1 and leaving the editor in sandbox layout.
7+
export const localPxtBaseUrl = 'http://localhost:3232/index.html';
8+
9+
/**
10+
* Maps the story "version" control value ('default' | 'beta' | 'local') to
11+
* baseUrl/version values understood by the frame driver.
12+
*/
13+
export const editorVersionArgs = (
14+
version: string | undefined
15+
): { baseUrl?: string; version?: string } =>
16+
version === 'local'
17+
? { baseUrl: localPxtBaseUrl }
18+
: { version: version === 'default' ? undefined : version };

src/stories/react/MakeCodeFrame.stories.tsx

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@ import {
77
MakeCodeFrameProps,
88
} from '../../react/MakeCodeFrame.js';
99
import { MakeCodeProject } from '../../vanilla/pxt.js';
10-
import { controllerId } from '../config.js';
10+
import {
11+
controllerId,
12+
editorVersionArgs,
13+
localPxtBaseUrl,
14+
} from '../config.js';
1115
import StoryWrapper from '../StoryWrapper.js';
1216
import MakeCodeToolbar from '../MakeCodeToolbar.js';
1317

@@ -16,10 +20,13 @@ const meta: Meta<typeof MakeCodeFrame> = {
1620
component: MakeCodeFrame,
1721
argTypes: {
1822
version: {
19-
options: ['default', 'beta'],
23+
options: ['default', 'beta', 'local'],
2024
defaultValue: undefined,
2125
name: 'version',
22-
control: { type: 'radio' },
26+
control: {
27+
type: 'radio',
28+
labels: { local: `local (${localPxtBaseUrl})` },
29+
},
2330
},
2431
},
2532
};
@@ -73,7 +80,7 @@ export const MakeCodeEditorWithControlsStory: Story = {
7380
return (
7481
<StoryWrapper>
7582
<MakeCodeEditorWithControls
76-
version={version === 'default' ? undefined : version}
83+
{...editorVersionArgs(version)}
7784
// TODO: make this an argument and perhaps a real prop
7885
queryParams={{ hideMenu: '' }}
7986
/>
@@ -94,7 +101,7 @@ export const MakeCodeEditorControllerAppModeStory: Story = {
94101
<MakeCodeEditorWithControls
95102
controller={2}
96103
controllerId={controllerId}
97-
version={version === 'default' ? undefined : version}
104+
{...editorVersionArgs(version)}
98105
// App specific events
99106
onDownload={(download) => console.log('download', download)}
100107
onSave={(save) => console.log('save', save)}

src/stories/vanilla/makecode-frame-driver.stories.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
Options,
88
} from '../../vanilla/makecode-frame-driver.js';
99
import { MakeCodeProject } from '../../vanilla/pxt.js';
10+
import { editorVersionArgs } from '../config.js';
1011
import MakeCodeToolbar from '../MakeCodeToolbar.js';
1112
import StoryWrapper from '../StoryWrapper.js';
1213

@@ -39,9 +40,11 @@ const renderEditor = (args: StoryArgs) => {
3940
// Create an iframe element.
4041
const iframe = document.createElement('iframe');
4142
iframe.allow = 'usb; autoplay; camera; microphone;';
43+
const { baseUrl = 'https://makecode.microbit.org', version } =
44+
editorVersionArgs(args.options?.version);
4245
iframe.src = createMakeCodeURL(
43-
'https://makecode.microbit.org',
44-
args.options?.version === 'default' ? undefined : args.options?.version,
46+
baseUrl,
47+
version,
4548
args.options?.lang,
4649
args.options?.controller ?? 1,
4750
args.options?.queryParams

src/vanilla/makecode-frame-driver.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -756,13 +756,24 @@ export class MakeCodeFrameDriver {
756756
} as EditorMessageSetHighContrastRequest);
757757
}
758758

759+
/**
760+
* @deprecated Keyboard controls are always enabled in current MakeCode
761+
* versions so this does nothing.
762+
*/
759763
async toggleKeyboardControls(): Promise<void> {
760764
await this.sendRequest({
761765
type: 'pxteditor',
762766
action: 'togglekeyboardcontrols',
763767
});
764768
}
765769

770+
async toggleScreenReaderMode(): Promise<void> {
771+
await this.sendRequest({
772+
type: 'pxteditor',
773+
action: 'togglescreenreadermode',
774+
});
775+
}
776+
766777
async toggleGreenScreen(): Promise<void> {
767778
await this.sendRequest({
768779
type: 'pxteditor',

src/vanilla/pxt.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ export interface EditorMessageRequest extends EditorMessage {
185185
| 'sethighcontrast' // EditorMessageSetHighContrastRequest
186186
| 'togglegreenscreen'
187187
| 'togglekeyboardcontrols'
188+
| 'togglescreenreadermode'
188189
| 'settracestate' //
189190
| 'setsimulatorfullscreen' // EditorMessageSimulatorFullScreenRequest
190191
| 'print' // print code
@@ -545,6 +546,7 @@ export interface InfoMessage {
545546
locale: string;
546547
availableLocales?: string[];
547548
keyboardControls: boolean;
549+
screenReaderMode?: boolean;
548550
}
549551

550552
export interface PackageExtensionData {

0 commit comments

Comments
 (0)