Skip to content

Commit 7d8d086

Browse files
committed
hintPosition in redux state
1 parent d570f39 commit 7d8d086

File tree

33 files changed

+284
-174
lines changed

33 files changed

+284
-174
lines changed

lib/actions/actionTypes.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ exports.SET_PROGRESS = 'SET_PROGRESS';
99
exports.PAGE_COMPLETE = 'PAGE_COMPLETE';
1010
exports.CHAPTER_COMPLETE = 'CHAPTER_COMPLETE';
1111
exports.PROJECT_COMPLETE = 'PROJECT_COMPLETE';
12-
exports.SET_TASK_POSITION = 'SET_TASK_POSITION';
1312
exports.EDITOR_ACTIONS = 'EDITOR_ACTIONS';
1413
exports.SHOW_HINT = 'SHOW_HINT';
1514
exports.SHOW_SOLUTION = 'SHOW_SOLUTION';
15+
exports.SET_HINT_POSITION = 'SET_HINT_POSITION';
1616
exports.RUN_TESTS = 'RUN_TESTS';
1717
exports.TEST_COMPLETE = 'TEST_COMPLETE';
1818
exports.TEST_RESULT = 'TEST_RESULT';

lib/actions/actions.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ exports.showHint = task_actions_1.showHint;
4646
exports.runTests = task_actions_1.runTests;
4747
exports.testComplete = task_actions_1.testComplete;
4848
exports.testResult = task_actions_1.testResult;
49+
exports.setHintPosition = task_actions_1.setHintPosition;
4950
var tutorials_1 = require('./tutorials');
5051
exports.loadTutorials = tutorials_1.loadTutorials;
5152
var alert_1 = require('./alert');

lib/actions/task-actions.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,7 @@ function testComplete() {
1818
return { type: Type.TEST_COMPLETE };
1919
}
2020
exports.testComplete = testComplete;
21+
function setHintPosition(hintPosition) {
22+
return { type: Type.SET_HINT_POSITION, payload: { hintPosition: hintPosition } };
23+
}
24+
exports.setHintPosition = setHintPosition;

lib/components/account/account.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,7 @@ var default_1 = (function (_super) {
1111
_super.apply(this, arguments);
1212
}
1313
default_1.prototype.render = function () {
14-
return (React.createElement("section", {className: 'cr-account'},
15-
React.createElement("h3", null, "Account")
16-
));
14+
return (React.createElement("section", {className: 'cr-account'}, React.createElement("h3", null, "Account")));
1715
};
1816
return default_1;
1917
}(React.Component));

lib/components/app/app.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,7 @@ var default_1 = (function (_super) {
3030
};
3131
default_1.prototype.render = function () {
3232
var state = this.props.state;
33-
return (React.createElement("section", {className: 'cr'},
34-
React.createElement(_components_1.Menu, {route: state.route, position: state.position}),
35-
React.createElement(_components_1.Router, {state: state}),
36-
React.createElement(_components_1.Alert, {alert: state.alert})));
33+
return (React.createElement("section", {className: 'cr'}, React.createElement(_components_1.Menu, {route: state.route, position: state.position}), React.createElement(_components_1.Router, {state: state}), React.createElement(_components_1.Alert, {alert: state.alert})));
3734
};
3835
default_1.childContextTypes = {
3936
muiTheme: React.PropTypes.object,

lib/components/app/router.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ var default_1 = (function (_super) {
1414
default_1.prototype.chooseRoute = function (state) {
1515
switch (state.route) {
1616
case 'page':
17-
return React.createElement(_components_1.Page, {page: state.page, tasks: state.tasks, taskPosition: state.taskPosition, editorActions: state.editorActions, runTests: state.runTests, log: state.log});
17+
return React.createElement(_components_1.Page, {page: state.page, tasks: state.tasks, taskPosition: state.taskPosition, hintPosition: state.hintPosition, editorActions: state.editorActions, runTests: state.runTests, log: state.log});
1818
case 'progress':
1919
return React.createElement(_components_1.Progress, {progress: state.progress, position: state.position});
2020
case 'projects':

lib/components/menu/menu.js

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,7 @@ var default_1 = (function (_super) {
3939
default_1.prototype.menuOptions = function () {
4040
switch (this.props.route) {
4141
case 'page':
42-
return (React.createElement("div", null,
43-
React.createElement(material_ui_1.MenuItem, {primaryText: 'progress', onClick: this.props.routeToProgress}),
44-
React.createElement(material_ui_1.MenuItem, {primaryText: 'projects', onClick: this.props.routeToProjects})));
42+
return (React.createElement("div", null, React.createElement(material_ui_1.MenuItem, {primaryText: 'progress', onClick: this.props.routeToProgress}), React.createElement(material_ui_1.MenuItem, {primaryText: 'projects', onClick: this.props.routeToProjects})));
4543
case 'progress':
4644
return React.createElement(material_ui_1.MenuItem, {primaryText: 'projects', onClick: this.props.routeToProjects});
4745
default: return null;
@@ -51,17 +49,7 @@ var default_1 = (function (_super) {
5149
render_1.togglePanel();
5250
};
5351
default_1.prototype.render = function () {
54-
return (React.createElement(material_ui_1.AppBar, {title: 'CodeRoad', className: 'cr-menu-bar', iconElementLeft: React.createElement(material_ui_1.IconButton, {onClick: this.closePanel},
55-
React.createElement(NavigationClose, null)
56-
), iconElementRight: React.createElement(material_ui_1.IconMenu, {iconButtonElement: React.createElement(material_ui_1.IconButton, null,
57-
React.createElement(MoreVertIcon, null)
58-
), targetOrigin: { horizontal: 'right', vertical: 'top' }, anchorOrigin: { horizontal: 'right', vertical: 'top' }},
59-
this.menuOptions(),
60-
window.coderoad.issuesPath ? React.createElement(material_ui_1.MenuItem, null,
61-
React.createElement("a", {href: window.coderoad.issuesPath}, "post issue")
62-
) : null,
63-
React.createElement(material_ui_1.Divider, null),
64-
React.createElement(material_ui_1.MenuItem, {primaryText: 'quit', onClick: this.props.quit}))}));
52+
return (React.createElement(material_ui_1.AppBar, {title: 'CodeRoad', className: 'cr-menu-bar', iconElementLeft: React.createElement(material_ui_1.IconButton, {onClick: this.closePanel}, React.createElement(NavigationClose, null)), iconElementRight: React.createElement(material_ui_1.IconMenu, {iconButtonElement: React.createElement(material_ui_1.IconButton, null, React.createElement(MoreVertIcon, null)), targetOrigin: { horizontal: 'right', vertical: 'top' }, anchorOrigin: { horizontal: 'right', vertical: 'top' }}, this.menuOptions(), window.coderoad.issuesPath ? React.createElement(material_ui_1.MenuItem, null, React.createElement("a", {href: window.coderoad.issuesPath}, "post issue")) : null, React.createElement(material_ui_1.Divider, null), React.createElement(material_ui_1.MenuItem, {primaryText: 'quit', onClick: this.props.quit}))}));
6553
};
6654
default_1 = __decorate([
6755
react_redux_1.connect(null, function (dispatch) {

lib/components/page/chapter.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,5 @@ var _components_1 = require('../_components');
44
Object.defineProperty(exports, "__esModule", { value: true });
55
exports.default = function (_a) {
66
var chapter = _a.chapter;
7-
return (React.createElement("section", {className: 'cr-chapter'},
8-
React.createElement(_components_1.MarkdownText, {text: chapter.title})
9-
));
7+
return (React.createElement("section", {className: 'cr-chapter'}, React.createElement(_components_1.MarkdownText, {text: chapter.title})));
108
};

lib/components/page/content.js

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,7 @@ var _components_1 = require('../_components');
44
var material_ui_1 = require('material-ui');
55
function default_1(_a) {
66
var page = _a.page;
7-
return (React.createElement(material_ui_1.Card, null,
8-
React.createElement(material_ui_1.CardHeader, {title: page.title}),
9-
React.createElement(material_ui_1.CardText, null,
10-
React.createElement(_components_1.MarkdownText, {text: page.description})
11-
)));
7+
return (React.createElement(material_ui_1.Card, null, React.createElement(material_ui_1.CardHeader, {title: page.title}), React.createElement(material_ui_1.CardText, null, React.createElement(_components_1.MarkdownText, {text: page.description}))));
128
}
139
Object.defineProperty(exports, "__esModule", { value: true });
1410
exports.default = default_1;

lib/components/page/edit.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
66
exports.default = function (editPath) {
77
if (editPath && window.coderoad.edit) {
88
var repoPath = path.join(window.coderoad.repo, 'edit', 'master', editPath);
9-
return React.createElement("a", {href: repoPath},
10-
React.createElement(Edit, {style: { position: 'absolute', top: '10px', right: '10px' }})
11-
);
9+
return React.createElement("a", {href: repoPath}, React.createElement(Edit, {style: { position: 'absolute', top: '10px', right: '10px' }}));
1210
}
1311
};

lib/components/page/page-complete.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
"use strict";
2+
var React = require('react');
3+
var material_ui_1 = require('material-ui');
4+
var _components_1 = require('../_components');
5+
exports.PageCompleteMessage = function (_a) {
6+
var page = _a.page;
7+
return (React.createElement("div", {className: 'cr-task-onComplete-description'}, page.completed && page.onPageComplete ?
8+
React.createElement(material_ui_1.ListItem, {className: 'cr-task-onComplete', key: 'page-complete'}, React.createElement(_components_1.MarkdownText, {text: page.onPageComplete}))
9+
: null));
10+
};

lib/components/page/page.js

Lines changed: 36 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -63,109 +63,68 @@ var default_1 = (function (_super) {
6363
__extends(default_1, _super);
6464
function default_1() {
6565
_super.call(this);
66-
this.state = {
67-
hintPos: -1,
68-
taskPos: 0
69-
};
7066
}
7167
default_1.prototype.componentDidUpdate = function () {
72-
var taskPosition = this.props.taskPosition;
68+
var _a = this.props, taskPosition = _a.taskPosition, hintPosition = _a.hintPosition;
7369
if (taskPosition > 0 && taskPosition < this.props.tasks.length) {
74-
ReactDOM.findDOMNode(this.refs['task' + taskPosition]).scrollIntoView();
70+
ReactDOM.findDOMNode(this.refs.listEnd).scrollIntoView();
7571
}
76-
if (this.state.taskPos !== taskPosition) {
77-
this.setState({
78-
hintPos: -1,
79-
taskPos: taskPosition
80-
});
81-
}
82-
else if (this.state.hintPos > -1) {
83-
ReactDOM.findDOMNode(this.refs['hint' + this.state.hintPos]).scrollIntoView();
72+
if (hintPosition > -1) {
73+
ReactDOM.findDOMNode(this.refs.listEnd).scrollIntoView();
8474
}
8575
else if (this.props.page.completed && this.props.page.onPageComplete) {
86-
ReactDOM.findDOMNode(this.refs.onPageComplete).scrollIntoView();
76+
ReactDOM.findDOMNode(this.refs.listEnd).scrollIntoView();
8777
}
8878
};
8979
default_1.prototype.displayHint = function (task) {
80+
var hintPosition = this.props.hintPosition;
9081
if (task && task.hints && task.hints.length) {
91-
if (this.state.hintPos < task.hints.length - 1) {
92-
this.setState({ hintPos: this.state.hintPos += 1, taskPos: this.state.taskPos });
82+
if (hintPosition < task.hints.length - 1) {
83+
this.props.showHint(hintPosition + 1);
9384
}
9485
}
9586
else {
96-
this.setState({ hintPos: -1, taskPos: this.state.taskPos });
87+
this.props.showHint(-1);
9788
}
9889
};
9990
default_1.prototype.render = function () {
10091
var _this = this;
101-
var page = this.props.page;
102-
var taskPosition = this.props.taskPosition;
92+
var _a = this.props, page = _a.page, taskPosition = _a.taskPosition, hintPosition = _a.hintPosition;
10393
var tasks = visibleTasks(this.props.tasks, taskPosition);
10494
var currentTask = taskPosition <= tasks.length ? tasks[taskPosition] : null;
10595
var allComplete = taskPosition >= tasks.length;
106-
return (React.createElement(material_ui_2.Paper, {style: style, zDepth: 1, className: 'cr-page'},
107-
React.createElement(content_1.default, {page: page}),
108-
React.createElement(material_ui_1.Divider, null),
109-
React.createElement(material_ui_1.List, {subheader: 'Tasks', className: 'cr-tasks', ref: 'tasks'},
110-
tasks.map(function (task, index) {
111-
var isCurrentTask = index === taskPosition;
112-
var isDisabledTask = index > taskPosition;
113-
var isCompletedTask = index < taskPosition;
114-
var isFinalTask = index >= tasks.length - 1;
115-
var hints = hintsShown(task, _this.state.hintPos);
116-
return (React.createElement("div", null,
117-
React.createElement(material_ui_1.ListItem, {ref: 'task' + index, className: classnames({
118-
'cr-task': true,
119-
'isCompletedTask': isCompletedTask,
120-
'isCurrentTask': isCurrentTask,
121-
'isDisabledTask': isDisabledTask
122-
})},
123-
React.createElement(TaskCheckbox, {index: index, taskPosition: taskPosition, runTests: _this.props.runTests}),
124-
React.createElement("span", {className: 'cr-task-index'},
125-
index + 1,
126-
"."),
127-
React.createElement("div", {className: 'cr-task-description'},
128-
React.createElement(_components_1.MarkdownText, {text: task.description})
129-
)),
130-
isCurrentTask && hints ?
131-
hints.map(function (hint, indexHint) {
132-
return React.createElement(material_ui_1.ListItem, {className: 'cr-task-hint', ref: 'hint' + indexHint},
133-
React.createElement("div", {class: 'cr-task-hint-box'},
134-
React.createElement("span", {className: 'cr-task-hint-index'},
135-
indexHint + 1,
136-
"."),
137-
React.createElement("div", {className: 'cr-task-hint-description'},
138-
React.createElement(_components_1.MarkdownText, {text: hint})
139-
))
140-
);
141-
})
142-
: null,
143-
isFinalTask ? null : React.createElement(material_ui_1.Divider, null)));
144-
}),
145-
page.completed && !!page.onPageComplete ? React.createElement(material_ui_1.ListItem, {className: 'cr-task-onComplete', ref: 'onPageComplete'},
146-
React.createElement("div", {className: 'cr-task-onComplete-description'},
147-
React.createElement(_components_1.MarkdownText, {text: page.onPageComplete})
148-
)
149-
) : null),
150-
React.createElement("section", {className: 'cr-page-toolbar'},
151-
React.createElement(material_ui_2.LinearProgress, {mode: 'determinate', value: taskProgress(taskPosition, tasks.length), style: { height: '6px' }}),
152-
React.createElement(material_ui_2.Toolbar, null,
153-
currentTask && currentTask.hints && currentTask.hints.length ?
154-
React.createElement(material_ui_2.ToolbarGroup, {float: 'left'}, this.state.hintPos <= currentTask.hints.length - 2 ?
155-
React.createElement(material_ui_2.FlatButton, {className: 'cr-task-showHint', icon: React.createElement(InfoOutline, null), onClick: this.displayHint.bind(this, currentTask)})
156-
: React.createElement(material_ui_2.FlatButton, {className: 'cr-task-showHint-disabled', icon: React.createElement(Info, null), disabled: true}))
157-
: null,
158-
React.createElement(material_ui_2.ToolbarGroup, {float: 'right'}, allComplete ?
159-
React.createElement(material_ui_2.RaisedButton, {label: 'Continue', primary: true, onClick: this.props.callNextPage})
160-
:
161-
React.createElement(material_ui_2.RaisedButton, {label: 'Run', secondary: true, onClick: this.props.callRunTests}))))));
96+
return (React.createElement(material_ui_2.Paper, {style: style, zDepth: 1, className: 'cr-page'}, React.createElement(content_1.default, {page: page}), React.createElement(material_ui_1.Divider, null), React.createElement(material_ui_1.List, {subheader: 'Tasks', className: 'cr-tasks', ref: 'tasks'}, tasks.map(function (task, index) {
97+
var isCurrentTask = index === taskPosition;
98+
var isDisabledTask = index > taskPosition;
99+
var isCompletedTask = index < taskPosition;
100+
var isFinalTask = index >= tasks.length - 1;
101+
var hints = hintsShown(task, hintPosition);
102+
return (React.createElement("div", null, React.createElement(material_ui_1.ListItem, {ref: 'task' + index, className: classnames({
103+
'cr-task': true,
104+
'isCompletedTask': isCompletedTask,
105+
'isCurrentTask': isCurrentTask,
106+
'isDisabledTask': isDisabledTask
107+
})}, React.createElement(TaskCheckbox, {index: index, taskPosition: taskPosition, runTests: _this.props.runTests}), React.createElement("span", {className: 'cr-task-index'}, index + 1, "."), React.createElement("div", {className: 'cr-task-description'}, React.createElement(_components_1.MarkdownText, {text: task.description}))), isCurrentTask && hints ?
108+
hints.map(function (hint, indexHint) {
109+
return React.createElement(material_ui_1.ListItem, {className: 'cr-task-hint', ref: 'hint' + indexHint}, React.createElement("div", {class: 'cr-task-hint-box'}, React.createElement("span", {className: 'cr-task-hint-index'}, indexHint + 1, "."), React.createElement("div", {className: 'cr-task-hint-description'}, React.createElement(_components_1.MarkdownText, {text: hint}))));
110+
})
111+
: null, isFinalTask ? null : React.createElement(material_ui_1.Divider, null)));
112+
}), page.completed && !!page.onPageComplete ? React.createElement(material_ui_1.ListItem, {className: 'cr-task-onComplete', ref: 'onPageComplete'}, React.createElement("div", {className: 'cr-task-onComplete-description'}, React.createElement(_components_1.MarkdownText, {text: page.onPageComplete}))) : null, React.createElement("div", {ref: 'listEnd'})), React.createElement("section", {className: 'cr-page-toolbar'}, React.createElement(material_ui_2.LinearProgress, {mode: 'determinate', value: taskProgress(taskPosition, tasks.length), style: { height: '6px' }}), React.createElement(material_ui_2.Toolbar, null, currentTask && currentTask.hints && currentTask.hints.length ?
113+
React.createElement(material_ui_2.ToolbarGroup, {float: 'left'}, hintPosition <= currentTask.hints.length - 2 ?
114+
React.createElement(material_ui_2.FlatButton, {className: 'cr-task-showHint', icon: React.createElement(InfoOutline, null), onClick: this.displayHint.bind(this, currentTask)})
115+
: React.createElement(material_ui_2.FlatButton, {className: 'cr-task-showHint-disabled', icon: React.createElement(Info, null), disabled: true}))
116+
: null, React.createElement(material_ui_2.ToolbarGroup, {float: 'right'}, allComplete ?
117+
React.createElement(material_ui_2.RaisedButton, {label: 'Continue', primary: true, onClick: this.props.callNextPage})
118+
:
119+
React.createElement(material_ui_2.RaisedButton, {label: 'Run', secondary: true, onClick: this.props.callRunTests}))))));
162120
};
163121
default_1 = __decorate([
164122
react_redux_1.connect(null, function (dispatch, state) {
165123
return {
166124
callNextPage: function () { return dispatch(Action.nextPage()); },
167125
callRunTests: function () { return dispatch(Action.runTests()); },
168-
toggleLog: function () { return dispatch(Action.toggleLog()); }
126+
toggleLog: function () { return dispatch(Action.toggleLog()); },
127+
showHint: function (newHintPos) { return dispatch(Action.setHintPosition(newHintPos)); }
169128
};
170129
}),
171130
__metadata('design:paramtypes', [])

0 commit comments

Comments
 (0)