Skip to content

Commit e1e8c08

Browse files
HKalbasishepmaster
authored andcommitted
Rename advanced editor to Ace
1 parent 306fdf2 commit e1e8c08

12 files changed

+169
-81
lines changed

ui/frontend/ConfigMenu.tsx

+8-8
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,17 @@ interface ConfigMenuProps {
2222
}
2323

2424
const ConfigMenu: React.SFC<ConfigMenuProps> = () => {
25-
const keybinding = useSelector((state: State) => state.configuration.keybinding);
26-
const theme = useSelector((state: State) => state.configuration.theme);
25+
const keybinding = useSelector((state: State) => state.configuration.ace.keybinding);
26+
const aceTheme = useSelector((state: State) => state.configuration.ace.theme);
2727
const orientation = useSelector((state: State) => state.configuration.orientation);
2828
const editorStyle = useSelector((state: State) => state.configuration.editor);
29-
const pairCharacters = useSelector((state: State) => state.configuration.pairCharacters);
29+
const pairCharacters = useSelector((state: State) => state.configuration.ace.pairCharacters);
3030
const assemblyFlavor = useSelector((state: State) => state.configuration.assemblyFlavor);
3131
const demangleAssembly = useSelector((state: State) => state.configuration.demangleAssembly);
3232
const processAssembly = useSelector((state: State) => state.configuration.processAssembly);
3333

3434
const dispatch = useDispatch();
35-
const changeTheme = useCallback((t) => dispatch(actions.changeTheme(t)), [dispatch]);
35+
const changeAceTheme = useCallback((t) => dispatch(actions.changeAceTheme(t)), [dispatch]);
3636
const changeKeybinding = useCallback((k) => dispatch(actions.changeKeybinding(k)), [dispatch]);
3737
const changeOrientation = useCallback((o) => dispatch(actions.changeOrientation(o)), [dispatch]);
3838
const changeEditorStyle = useCallback((e) => dispatch(actions.changeEditor(e)), [dispatch]);
@@ -48,11 +48,11 @@ const ConfigMenu: React.SFC<ConfigMenuProps> = () => {
4848
id="editor-style"
4949
name="Style"
5050
a={Editor.Simple}
51-
b={Editor.Advanced}
51+
b={Editor.Ace}
5252
value={editorStyle}
5353
onChange={changeEditorStyle} />
5454

55-
{editorStyle === Editor.Advanced && (
55+
{editorStyle === Editor.Ace && (
5656
<Fragment>
5757
<SelectConfig
5858
name="Keybinding"
@@ -64,8 +64,8 @@ const ConfigMenu: React.SFC<ConfigMenuProps> = () => {
6464

6565
<SelectConfig
6666
name="Theme"
67-
value={theme}
68-
onChange={changeTheme}
67+
value={aceTheme}
68+
onChange={changeAceTheme}
6969
>
7070
{ACE_THEMES.map(t => <option key={t} value={t}>{t}</option>)}
7171
</SelectConfig>

ui/frontend/Editor.module.css

-14
This file was deleted.

ui/frontend/Playground.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import React, { useCallback, useEffect, useRef } from 'react';
22
import { useDispatch, useSelector } from 'react-redux';
33
import Split from 'split-grid';
44

5-
import Editor from './Editor';
5+
import Editor from './editor/Editor';
66
import Header from './Header';
77
import Notifications from './Notifications';
88
import Output from './Output';

ui/frontend/actions.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ export enum ActionType {
6363
SetPage = 'SET_PAGE',
6464
ChangeEditor = 'CHANGE_EDITOR',
6565
ChangeKeybinding = 'CHANGE_KEYBINDING',
66-
ChangeTheme = 'CHANGE_THEME',
66+
ChangeAceTheme = 'CHANGE_ACE_THEME',
6767
ChangePairCharacters = 'CHANGE_PAIR_CHARACTERS',
6868
ChangeOrientation = 'CHANGE_ORIENTATION',
6969
ChangeAssemblyFlavor = 'CHANGE_ASSEMBLY_FLAVOR',
@@ -138,8 +138,8 @@ export const changeEditor = (editor: Editor) =>
138138
export const changeKeybinding = (keybinding: string) =>
139139
createAction(ActionType.ChangeKeybinding, { keybinding });
140140

141-
export const changeTheme = (theme: string) =>
142-
createAction(ActionType.ChangeTheme, { theme });
141+
export const changeAceTheme = (theme: string) =>
142+
createAction(ActionType.ChangeAceTheme, { theme });
143143

144144
export const changePairCharacters = (pairCharacters: PairCharacters) =>
145145
createAction(ActionType.ChangePairCharacters, { pairCharacters });
@@ -816,7 +816,7 @@ export type Action =
816816
| ReturnType<typeof changeOrientation>
817817
| ReturnType<typeof changePrimaryAction>
818818
| ReturnType<typeof changeProcessAssembly>
819-
| ReturnType<typeof changeTheme>
819+
| ReturnType<typeof changeAceTheme>
820820
| ReturnType<typeof requestExecute>
821821
| ReturnType<typeof receiveExecuteSuccess>
822822
| ReturnType<typeof receiveExecuteFailure>

ui/frontend/AdvancedEditor.tsx renamed to ui/frontend/editor/AceEditor.tsx

+19-19
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
22
import { connect } from 'react-redux';
3-
import { aceResizeKey, offerCrateAutocompleteOnUse } from './selectors';
3+
import { aceResizeKey, offerCrateAutocompleteOnUse } from '../selectors';
44

5-
import State from './state';
6-
import { AceResizeKey, CommonEditorProps, Crate, PairCharacters, Position, Selection } from './types';
5+
import State from '../state';
6+
import { AceResizeKey, CommonEditorProps, Crate, PairCharacters, Position, Selection } from '../types';
77

88
import styles from './Editor.module.css';
99

1010
type Ace = typeof import('ace-builds');
11-
type AceEditor = import('ace-builds').Ace.Editor;
11+
type AceModule = import('ace-builds').Ace.Editor;
1212
type AceCompleter = import('ace-builds').Ace.Completer;
1313

14-
const displayExternCrateAutocomplete = (editor: AceEditor, autocompleteOnUse: boolean) => {
14+
const displayExternCrateAutocomplete = (editor: AceModule, autocompleteOnUse: boolean) => {
1515
const { session } = editor;
1616
const pos = editor.getCursorPosition();
1717
const line = session.getLine(pos.row);
@@ -55,11 +55,11 @@ function useRafDebouncedFunction<A extends any[]>(fn: (...args: A) => void, onCa
5555
}, [fn, onCall, timeout]);
5656
}
5757

58-
interface AdvancedEditorProps extends AdvancedEditorAsyncProps {
58+
interface AceEditorProps extends AceEditorAsyncProps {
5959
ace: Ace;
6060
}
6161

62-
interface AdvancedEditorProps {
62+
interface AceEditorProps {
6363
ace: Ace;
6464
autocompleteOnUse: boolean;
6565
code: string;
@@ -75,16 +75,16 @@ interface AdvancedEditorProps {
7575
}
7676

7777
// Run an effect when the editor or prop changes
78-
function useEditorProp<T>(editor: AceEditor, prop: T, whenPresent: (editor: AceEditor, prop: T) => void) {
78+
function useEditorProp<T>(editor: AceModule, prop: T, whenPresent: (editor: AceModule, prop: T) => void) {
7979
useEffect(() => {
8080
if (editor) {
8181
return whenPresent(editor, prop);
8282
}
8383
}, [editor, prop, whenPresent]);
8484
}
8585

86-
const AdvancedEditor: React.SFC<AdvancedEditorProps> = props => {
87-
const [editor, setEditor] = useState<AceEditor>(null);
86+
const AceEditor: React.SFC<AceEditorProps> = props => {
87+
const [editor, setEditor] = useState<AceModule>(null);
8888
const child = useRef<HTMLDivElement>(null);
8989

9090
useEffect(() => {
@@ -292,7 +292,7 @@ const AdvancedEditor: React.SFC<AdvancedEditorProps> = props => {
292292
}, []));
293293

294294
return (
295-
<div className={styles.advanced} ref={child} />
295+
<div className={styles.ace} ref={child} />
296296
);
297297
};
298298

@@ -315,7 +315,7 @@ enum LoadState {
315315
//
316316
// Themes and keybindings can be changed at runtime.
317317

318-
interface AdvancedEditorAsyncProps {
318+
interface AceEditorAsyncProps {
319319
autocompleteOnUse: boolean;
320320
code: string;
321321
execute: () => any;
@@ -329,7 +329,7 @@ interface AdvancedEditorAsyncProps {
329329
pairCharacters: PairCharacters;
330330
}
331331

332-
class AdvancedEditorAsync extends React.Component<AdvancedEditorAsyncProps, AdvancedEditorAsyncState> {
332+
class AceEditorAsync extends React.Component<AceEditorAsyncProps, AceEditorAsyncState> {
333333
public constructor(props) {
334334
super(props);
335335
this.state = {
@@ -342,7 +342,7 @@ class AdvancedEditorAsync extends React.Component<AdvancedEditorAsyncProps, Adva
342342
public render() {
343343
if (this.isLoaded()) {
344344
const { ace, theme, keybinding } = this.state;
345-
return <AdvancedEditor {...this.props} ace={ace} theme={theme} keybinding={keybinding} />;
345+
return <AceEditor {...this.props} ace={ace} theme={theme} keybinding={keybinding} />;
346346
} else {
347347
return <div>Loading the ACE editor...</div>;
348348
}
@@ -447,13 +447,13 @@ class AdvancedEditorAsync extends React.Component<AdvancedEditorAsyncProps, Adva
447447

448448
private async requireLibraries() {
449449
return import(
450-
/* webpackChunkName: "advanced-editor" */
451-
'./advanced-editor'
450+
/* webpackChunkName: "ace-editor" */
451+
'./ace-editor'
452452
);
453453
}
454454
}
455455

456-
interface AdvancedEditorAsyncState {
456+
interface AceEditorAsyncState {
457457
theme?: string;
458458
keybinding?: string;
459459
themeState: LoadState;
@@ -472,7 +472,7 @@ interface PropsFromState {
472472
}
473473

474474
const mapStateToProps = (state: State) => {
475-
const { configuration: { theme, keybinding, pairCharacters } } = state;
475+
const { configuration: { ace: { theme, keybinding, pairCharacters } } } = state;
476476

477477
return {
478478
theme,
@@ -483,4 +483,4 @@ const mapStateToProps = (state: State) => {
483483
};
484484
};
485485

486-
export default connect<PropsFromState, undefined, CommonEditorProps>(mapStateToProps)(AdvancedEditorAsync);
486+
export default connect<PropsFromState, undefined, CommonEditorProps>(mapStateToProps)(AceEditorAsync);

ui/frontend/editor/Editor.module.css

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
.container {
2+
composes: -autoSize from '../shared.module.css';
3+
position: relative;
4+
}
5+
6+
.ace {
7+
composes: -bodyMonospace -autoSize from '../shared.module.css';
8+
position: absolute;
9+
}
10+
11+
.simple {
12+
composes: ace;
13+
border: none;
14+
}

ui/frontend/Editor.tsx renamed to ui/frontend/editor/Editor.tsx

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import React, { useCallback } from 'react';
22
import { useSelector, useDispatch } from 'react-redux';
33

4-
import * as actions from './actions';
5-
import AdvancedEditor from './AdvancedEditor';
6-
import { CommonEditorProps, Editor as EditorType, Position, Selection } from './types';
7-
import { State } from './reducers';
4+
import * as actions from '../actions';
5+
import AceEditor from './AceEditor';
6+
import { CommonEditorProps, Editor as EditorType, Position, Selection } from '../types';
7+
import { State } from '../reducers';
88

99
import styles from './Editor.module.css';
1010

@@ -118,7 +118,7 @@ const Editor: React.SFC = () => {
118118
const execute = useCallback(() => dispatch(actions.performPrimaryAction()), [dispatch]);
119119
const onEditCode = useCallback((c) => dispatch(actions.editCode(c)), [dispatch]);
120120

121-
const SelectedEditor = editor === EditorType.Simple ? SimpleEditor : AdvancedEditor;
121+
const SelectedEditor = editor === EditorType.Simple ? SimpleEditor : AceEditor;
122122

123123
return (
124124
<div className={styles.container}>
File renamed without changes.

ui/frontend/local_storage.spec.ts

+13-2
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,24 @@ describe('restoring saved state', () => {
2020

2121
test('serialized data is kept', () => {
2222
const parsed = easyDeserialize({
23-
configuration: { theme: 'xcode' },
23+
configuration: { orientation: 'vertical' },
2424
code: 'not default code',
2525
notifications: { seenRustSurvey2018: true },
2626
});
2727

28-
expect(parsed.configuration.theme).toEqual('xcode');
28+
expect(parsed.configuration.orientation).toEqual('vertical');
2929
expect(parsed.code).toEqual('not default code');
3030
expect(parsed.notifications.seenRustSurvey2018).toBe(true);
3131
});
32+
33+
test('data is migrated', () => {
34+
const parsed = easyDeserialize({
35+
configuration: { editor: 'advanced', theme: 'xcode', keybinding: 'vi', pairCharacters: 'disabled' },
36+
});
37+
38+
expect(parsed.configuration.editor).toEqual('ace');
39+
expect(parsed.configuration.ace.theme).toEqual('xcode');
40+
expect(parsed.configuration.ace.keybinding).toEqual('vi');
41+
expect(parsed.configuration.ace.pairCharacters).toEqual('disabled');
42+
});
3243
});

0 commit comments

Comments
 (0)