Skip to content

Commit d32ef7a

Browse files
committed
handle toggle topPanel on window close/open
1 parent 20d49d7 commit d32ef7a

40 files changed

+9140
-42
lines changed

.gitignore

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,2 @@
1-
.DS_Store
21
node_modules
3-
npm-debug.log
4-
test
5-
tutorial-builder.mindnode
2+
tutorial/.tmp.*

coderoad.json

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
{
2+
"info": {
3+
"title": "Project Title",
4+
"description": "Project description."
5+
},
6+
"pages": [
7+
{
8+
"title": "Add & Subtract",
9+
"description": "Writing basic functions.\n\nA function has inputs and outputs. The inputs we call \"parameters\" and wrap them in `(` brackets `)`.\n\nThe output is `return`ed from the function.\n\n```\n // input\nfunction doSomething(parameter) {\n // output\n return parameter;\n}\n```\n\nTry making your own basic functions.",
10+
"tasks": [
11+
{
12+
"description": "write a function `addOne` that adds one to a number",
13+
"tests": [
14+
"01/01"
15+
],
16+
"hints": [
17+
"return the parameter + 1",
18+
"second hint"
19+
],
20+
"actions": [
21+
"open('page-01.js')",
22+
"set('// addOne\nfunction addOne(x) {\n return ::>\n}\n')"
23+
]
24+
},
25+
{
26+
"description": "write a function `subtractOne` that subtracts one from a number",
27+
"tests": [
28+
"01/02"
29+
],
30+
"hints": [
31+
"return the parameter - 1"
32+
],
33+
"actions": [
34+
"insert('\n// subtractOne\nfunction subtractOne(x) {\n return ::>\n}\n')"
35+
]
36+
}
37+
],
38+
"onPageComplete": "Continue to learn more about multiply & divide"
39+
},
40+
{
41+
"title": "Divide & Multiply",
42+
"description": "Writing basic functions continued.\n\nWe'll write two more basic functions, this time without any help.",
43+
"tasks": [
44+
{
45+
"description": "write a function `divideOne` divides a number by 1",
46+
"tests": [
47+
"02/01"
48+
],
49+
"actions": [
50+
"open('page-02.js')",
51+
"set('// divideOne\nfunction divideOne(x) {\n return ::>\n}\n')"
52+
]
53+
},
54+
{
55+
"description": "write a function `mutiplyone` that multiplies a number by 1",
56+
"tests": [
57+
"02/02"
58+
],
59+
"actions": [
60+
"insert('\n// multiplyOne\nfunction multiplyOne(x) {\n return ::>\n}\n')"
61+
]
62+
}
63+
]
64+
}
65+
]
66+
}

lib/actions.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ var tutorial_1 = require('./modules/tutorial');
1010
exports.tutorialInit = tutorial_1.tutorialInit;
1111
exports.tutorialLoad = tutorial_1.tutorialLoad;
1212
exports.tutorialPageAdd = tutorial_1.tutorialPageAdd;
13+
var window_1 = require('./modules/window');
14+
exports.windowToggle = window_1.windowToggle;
1315
var alert_1 = require('core-coderoad/lib/alert');
1416
exports.alertOpen = alert_1.alertOpen;
1517
exports.alertClose = alert_1.alertClose;
@@ -22,5 +24,3 @@ exports.editorSave = editor_1.editorSave;
2224
exports.editorSet = editor_1.editorSet;
2325
var route_1 = require('core-coderoad/lib/route');
2426
exports.routeSet = route_1.routeSet;
25-
var window_1 = require('core-coderoad/lib/window');
26-
exports.windowToggle = window_1.windowToggle;

lib/components/AppMenu/CloseWindow.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ var React = require('react');
1717
var react_redux_1 = require('react-redux');
1818
var IconButton_1 = require('material-ui/IconButton');
1919
var close_1 = require('material-ui/svg-icons/navigation/close');
20+
var actions_1 = require('../../actions');
2021
var CloseWindow = (function (_super) {
2122
__extends(CloseWindow, _super);
2223
function CloseWindow() {
@@ -28,7 +29,7 @@ var CloseWindow = (function (_super) {
2829
CloseWindow = __decorate([
2930
react_redux_1.connect(null, function (dispatch) {
3031
return {
31-
windowToggle: function () { return dispatch({ type: 'WINDOW_TOGGLE' }); }
32+
windowToggle: function () { return dispatch(actions_1.windowToggle()); }
3233
};
3334
}),
3435
__metadata('design:paramtypes', [])

lib/components/Page/Tasks/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ var styles = {
1616
}
1717
};
1818
var Tasks = function (_a) {
19-
var tasks = _a.tasks, page = _a.page;
20-
return (React.createElement("div", null, tasks.map(function (task, index) { return (React.createElement(Card_1.Card, {style: styles.card}, React.createElement(Card_1.CardTitle, null, "Task ", index + 1, React.createElement(Tests_1.default, {style: { float: 'right' }, tests: task.tests})), React.createElement(Tabs_1.Tabs, {tabItemContainerStyle: styles.tabBar}, React.createElement(Tabs_1.Tab, {label: 'Description'}, React.createElement(Task_1.default, {key: index.toString(), index: index, task: task})), React.createElement(Tabs_1.Tab, {label: 'Actions'}, React.createElement(TaskActions_1.default, {actions: task.actions})), React.createElement(Tabs_1.Tab, {label: 'Hints'}, React.createElement(Hints_1.default, {hints: task.hints}))))); }), React.createElement(TasksComplete_1.default, {page: page})));
19+
var tasks = _a.tasks, page = _a.page, config = _a.config;
20+
return (React.createElement("div", null, tasks.map(function (task, index) { return (React.createElement(Card_1.Card, {style: styles.card}, React.createElement(Card_1.CardTitle, null, "Task ", index + 1, React.createElement(Tests_1.default, {style: { float: 'right' }, tests: task.tests, config: config})), React.createElement(Tabs_1.Tabs, {tabItemContainerStyle: styles.tabBar}, React.createElement(Tabs_1.Tab, {label: 'Description'}, React.createElement(Task_1.default, {key: index.toString(), index: index, task: task})), React.createElement(Tabs_1.Tab, {label: 'Actions'}, React.createElement(TaskActions_1.default, {actions: task.actions})), React.createElement(Tabs_1.Tab, {label: 'Hints'}, React.createElement(Hints_1.default, {hints: task.hints}))))); }), React.createElement(TasksComplete_1.default, {page: page})));
2121
};
2222
Object.defineProperty(exports, "__esModule", { value: true });
2323
exports.default = Tasks;

lib/components/Page/Tests/index.js

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,45 @@
11
"use strict";
2-
var React = require('react');
3-
var Tests = function (_a) {
4-
var tests = _a.tests, style = _a.style;
5-
return (React.createElement("div", {style: style}, tests.map(function (test) { return React.createElement("p", null, test); })));
2+
var __extends = (this && this.__extends) || function (d, b) {
3+
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
4+
function __() { this.constructor = d; }
5+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
6+
};
7+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
8+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
9+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
10+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
11+
return c > 3 && r && Object.defineProperty(target, key, r), r;
612
};
13+
var __metadata = (this && this.__metadata) || function (k, v) {
14+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
15+
};
16+
var React = require('react');
17+
var react_redux_1 = require('react-redux');
18+
var path_1 = require('path');
19+
var actions_1 = require('../../../actions');
20+
var config_options_1 = require('../../../config-options');
21+
var Tests = (function (_super) {
22+
__extends(Tests, _super);
23+
function Tests() {
24+
_super.apply(this, arguments);
25+
}
26+
Tests.prototype.render = function () {
27+
var _this = this;
28+
var _a = this.props, tests = _a.tests, config = _a.config, style = _a.style, open = _a.open;
29+
var suffix = config_options_1.default[config.language].suffix;
30+
return (React.createElement("div", {style: style}, tests.map(function (test) { return (React.createElement("button", {onClick: open.bind(_this, test.concat('.' + suffix))}, test)); })));
31+
};
32+
Tests = __decorate([
33+
react_redux_1.connect(null, function (dispatch) {
34+
return {
35+
open: function (file) {
36+
dispatch(actions_1.editorOpen(path_1.join('tutorial', file)));
37+
}
38+
};
39+
}),
40+
__metadata('design:paramtypes', [])
41+
], Tests);
42+
return Tests;
43+
}(React.Component));
744
Object.defineProperty(exports, "__esModule", { value: true });
845
exports.default = Tests;

lib/components/Page/index.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,16 @@ var Page = (function (_super) {
2020
Page.prototype.componentDidMount = function () {
2121
Top_1.default.toggle(true);
2222
};
23+
Page.prototype.componentDidUnmount = function () {
24+
Top_1.default.toggle(false);
25+
};
2326
Page.prototype.render = function () {
24-
var _a = this.props, tutorial = _a.tutorial, pagePosition = _a.pagePosition;
27+
var _a = this.props, tutorial = _a.tutorial, pagePosition = _a.pagePosition, packageJson = _a.packageJson;
2528
var page = tutorial.pages[pagePosition];
2629
if (!page) {
2730
return null;
2831
}
29-
return (React.createElement("section", {style: styles, className: 'cr-page'}, React.createElement(index_1.ContentCard, {title: page.title, content: page.description}), React.createElement(Tasks_1.default, {tasks: page.tasks, page: page})));
32+
return (React.createElement("section", {style: styles, className: 'cr-page'}, React.createElement(index_1.ContentCard, {title: page.title, content: page.description}), React.createElement(Tasks_1.default, {tasks: page.tasks, page: page, config: packageJson.config})));
3033
};
3134
return Page;
3235
}(React.Component));

lib/components/TopPanel/Top.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ var Top = {
77
_this.top = document.createElement('div');
88
_this.top.setAttribute('id', 'crb-top');
99
_this.top.style.height = '33px';
10-
_this.top.hidden = true;
10+
Top.toggle(false);
1111
return _this.top;
1212
},
1313
toggle: function (open) {
14-
_this.top.hidden = !open || !_this.top.hidden;
14+
_this.top.hidden = !open;
1515
},
1616
unmount: function () {
1717
ReactDOM.unmountComponentAtNode(_this.root);

lib/config-options.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
"use strict";
22
var tutorialConfigOptions = {
33
JS: {
4+
suffix: 'js',
45
runners: [
56
'mocha-coderoad'
67
]
78
},
89
Python: {
10+
suffix: 'py',
911
runners: [
1012
'pytest-coderoad'
1113
]

lib/modules/window/actions.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
"use strict";
2+
var types_1 = require('./types');
3+
function windowToggle() {
4+
return function (dispatch, getState) {
5+
var route = getState().route;
6+
dispatch({ type: types_1.WINDOW_TOGGLE, payload: { route: route } });
7+
};
8+
}
9+
exports.windowToggle = windowToggle;

0 commit comments

Comments
 (0)