Skip to content

Commit de8cd96

Browse files
committed
Fold visualization codes by default
1 parent 2b0bea9 commit de8cd96

File tree

8 files changed

+92
-53
lines changed

8 files changed

+92
-53
lines changed

package-lock.json

Lines changed: 10 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
"query-string": "^6.2.0",
7676
"raw-loader": "^0.5.1",
7777
"react": "^16.3.1",
78-
"react-ace": "^6.1.4",
78+
"react-ace": "^6.3.2",
7979
"react-chartjs-2": "^2.7.0",
8080
"react-dom": "^16.3.1",
8181
"react-helmet": "^5.2.0",

src/frontend/components/CodeEditor/index.jsx

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,11 @@
11
import React from 'react';
2-
import AceEditor from 'react-ace';
3-
import 'brace/mode/plain_text';
4-
import 'brace/mode/markdown';
5-
import 'brace/mode/json';
6-
import 'brace/mode/javascript';
7-
import 'brace/mode/c_cpp';
8-
import 'brace/mode/java';
9-
import 'brace/theme/tomorrow_night_eighties';
10-
import 'brace/ext/searchbox';
112
import faTrashAlt from '@fortawesome/fontawesome-free-solid/faTrashAlt';
123
import faUser from '@fortawesome/fontawesome-free-solid/faUser';
134
import { classes, extension } from '/common/util';
145
import { actions } from '/reducers';
156
import { connect } from 'react-redux';
167
import { languages } from '/common/config';
17-
import { Button, Ellipsis } from '/components';
8+
import { Button, Ellipsis, FoldableAceEditor } from '/components';
189
import styles from './stylesheet.scss';
1910

2011
@connect(({ env, player }) => ({ env, player }), actions, null, { withRef: true })
@@ -38,7 +29,7 @@ class CodeEditor extends React.Component {
3829
render() {
3930
const { className, file, onClickDelete } = this.props;
4031
const { user } = this.props.env;
41-
const { lineIndicator } = this.props.player;
32+
const { lineIndicator, buildAt } = this.props.player;
4233

4334
if (!file) return null;
4435

@@ -51,7 +42,7 @@ class CodeEditor extends React.Component {
5142

5243
return (
5344
<div className={classes(styles.code_editor, className)}>
54-
<AceEditor
45+
<FoldableAceEditor
5546
className={styles.ace_editor}
5647
ref={this.aceEditorRef}
5748
mode={mode}
@@ -69,6 +60,7 @@ class CodeEditor extends React.Component {
6960
inFront: true,
7061
_key: lineIndicator.cursor,
7162
}] : []}
63+
foldAt={buildAt}
7264
value={file.content} />
7365
<div className={classes(styles.contributors_viewer, className)}>
7466
<span className={classes(styles.contributor, styles.label)}>Contributed by</span>
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import React from 'react';
2+
import AceEditor from 'react-ace';
3+
import 'brace/mode/plain_text';
4+
import 'brace/mode/markdown';
5+
import 'brace/mode/json';
6+
import 'brace/mode/javascript';
7+
import 'brace/mode/c_cpp';
8+
import 'brace/mode/java';
9+
import 'brace/theme/tomorrow_night_eighties';
10+
import 'brace/ext/searchbox';
11+
12+
class FoldableAceEditor extends AceEditor {
13+
componentDidMount() {
14+
super.componentDidMount();
15+
16+
this.foldTracers();
17+
}
18+
19+
componentDidUpdate(prevProps, prevState, snapshot) {
20+
super.componentDidUpdate(prevProps, prevState, snapshot);
21+
22+
if (prevProps.foldAt !== this.props.foldAt) {
23+
this.foldTracers();
24+
}
25+
}
26+
27+
foldTracers() {
28+
const session = this.editor.getSession();
29+
for (let row = 0; row < session.getLength(); row++) {
30+
if (!/^\s*\/\/.+{\s*$/.test(session.getLine(row))) continue;
31+
const range = session.getFoldWidgetRange(row);
32+
if (range) {
33+
session.addFold('...', range);
34+
row = range.end.row;
35+
}
36+
}
37+
}
38+
}
39+
40+
export default FoldableAceEditor;

src/frontend/components/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export { default as CodeEditor } from './CodeEditor';
55
export { default as Divider } from './Divider';
66
export { default as Ellipsis } from './Ellipsis';
77
export { default as ExpandableListItem } from './ExpandableListItem';
8+
export { default as FoldableAceEditor } from './FoldableAceEditor';
89
export { default as Header } from './Header';
910
export { default as ListItem } from './ListItem';
1011
export { default as Navigator } from './Navigator';

src/frontend/files/skeletons/code.cpp

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
1-
// import visualization libraries
1+
// import visualization libraries {
22
#include "algorithm-visualizer/Array2DTracer.h"
33
#include "algorithm-visualizer/LogTracer.h"
4+
// }
45

56
#include <vector>
67
#include <string>
78

8-
// define tracer variables
9+
// define tracer variables {
910
Array2DTracer array2dTracer = Array2DTracer("Grid");
1011
LogTracer logTracer = LogTracer("Console");
12+
// }
1113

1214
// define input variables
1315
std::vector<std::string> messages{
@@ -22,18 +24,18 @@ std::vector<std::string> messages{
2224
void highlight(int line) {
2325
if (line >= messages.size()) return;
2426
std::string message = messages[line];
25-
{
26-
logTracer.print(message);
27-
array2dTracer.selectRow(line, 0, message.size() - 1).delay();
28-
array2dTracer.deselectRow(line, 0, message.size() - 1);
29-
}
27+
// visualize {
28+
logTracer.print(message);
29+
array2dTracer.selectRow(line, 0, message.size() - 1).delay();
30+
array2dTracer.deselectRow(line, 0, message.size() - 1);
31+
// }
3032
highlight(line + 1);
3133
}
3234

3335
int main() {
34-
{
35-
array2dTracer.set(messages).delay();
36-
}
36+
// visualize {
37+
array2dTracer.set(messages).delay();
38+
// }
3739
highlight(0);
3840
return 0;
3941
}

src/frontend/files/skeletons/code.java

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1-
// import visualization libraries
1+
// import visualization libraries {
22
import org.algorithm_visualizer.*;
3+
// }
34

45
class Main {
5-
// define tracer variables
6+
// define tracer variables {
67
Array2DTracer array2dTracer = new Array2DTracer("Grid");
78
LogTracer logTracer = new LogTracer("Console");
9+
// }
810

911
// define input variables
1012
String[] messages = {
@@ -19,18 +21,18 @@ class Main {
1921
void highlight(int line) {
2022
if (line >= messages.length) return;
2123
String message = messages[line];
22-
{
23-
logTracer.print(message);
24-
array2dTracer.selectRow(line, 0, message.length() - 1).delay();
25-
array2dTracer.deselectRow(line, 0, message.length() - 1);
26-
}
24+
// visualize {
25+
logTracer.print(message);
26+
array2dTracer.selectRow(line, 0, message.length() - 1).delay();
27+
array2dTracer.deselectRow(line, 0, message.length() - 1);
28+
// }
2729
highlight(line + 1);
2830
}
2931

3032
Main() {
31-
{
32-
array2dTracer.set(messages).delay();
33-
}
33+
// visualize {
34+
array2dTracer.set(messages).delay();
35+
// }
3436
highlight(0);
3537
}
3638

src/frontend/files/skeletons/code.js

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
// import visualization libraries
1+
// import visualization libraries {
22
import { Array2DTracer, LogTracer } from 'algorithm-visualizer';
3+
// }
34

4-
// define tracer variables
5+
// define tracer variables {
56
const array2dTracer = new Array2DTracer('Grid');
67
const logTracer = new LogTracer('Console');
8+
// }
79

810
// define input variables
911
const messages = [
@@ -18,17 +20,17 @@ const messages = [
1820
function highlight(line) {
1921
if (line >= messages.length) return;
2022
const message = messages[line];
21-
{
22-
logTracer.print(message);
23-
array2dTracer.selectRow(line, 0, message.length - 1).delay();
24-
array2dTracer.deselectRow(line, 0, message.length - 1);
25-
}
23+
// visualize {
24+
logTracer.print(message);
25+
array2dTracer.selectRow(line, 0, message.length - 1).delay();
26+
array2dTracer.deselectRow(line, 0, message.length - 1);
27+
// }
2628
highlight(line + 1);
2729
}
2830

2931
(function main() {
30-
{
31-
array2dTracer.set(messages).delay();
32-
}
32+
// visualize {
33+
array2dTracer.set(messages).delay();
34+
// }
3335
highlight(0);
3436
})();

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy