Skip to content

Commit 8a9c83b

Browse files
committed
add page from tab
1 parent 913a74e commit 8a9c83b

26 files changed

+135
-274
lines changed

Diff for: .gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
node_modules
2-
tutorial/.tmp.*
2+
.DS_Store

Diff for: coderoad.json

-66
This file was deleted.

Diff for: lib/actions.js

+3
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ exports.tutorialInit = tutorial_1.tutorialInit;
1111
exports.tutorialLoad = tutorial_1.tutorialLoad;
1212
exports.tutorialBuild = tutorial_1.tutorialBuild;
1313
exports.tutorialPageAdd = tutorial_1.tutorialPageAdd;
14+
exports.tutorialTaskAdd = tutorial_1.tutorialTaskAdd;
15+
exports.tutorialHintAdd = tutorial_1.tutorialHintAdd;
16+
exports.tutorialActionAdd = tutorial_1.tutorialActionAdd;
1417
var window_1 = require('./modules/window');
1518
exports.windowToggle = window_1.windowToggle;
1619
var editor_paths_1 = require('./modules/editor-paths');

Diff for: lib/components/TopPanel/TopPanel.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ var TopPanel = (function (_super) {
4848
}
4949
return (React.createElement(Tabs_1.Tabs, {tabItemContainerStyle: styles.tabs, style: styles.all}, tutorial.pages.map(function (page, index) {
5050
return (React.createElement(Tabs_1.Tab, {style: styles.tab, key: index.toString(), label: page.title.substring(0, 10), onClick: pageSet.bind(_this, index)}));
51-
}), React.createElement(Tabs_1.Tab, {style: Object.assign({}, styles.tab, styles.add), label: '+'})));
51+
}), React.createElement(Tabs_1.Tab, {style: Object.assign({}, styles.tab, styles.add), label: '+', onActive: pageAdd})));
5252
};
5353
TopPanel = __decorate([
5454
react_redux_1.connect(null, function (dispatch) {

Diff for: lib/modules/tutorial/actions.js

+12-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,18 @@ function tutorialBuild() {
2424
}
2525
exports.tutorialBuild = tutorialBuild;
2626
function tutorialPageAdd() {
27-
console.log('called tutorialPageAdd');
2827
return { type: types_1.TUTORIAL_PAGE_ADD };
2928
}
3029
exports.tutorialPageAdd = tutorialPageAdd;
30+
function tutorialTaskAdd(pagePosition, taskPosition) {
31+
return { type: types_1.TUTORIAL_TASK_ADD, payload: { pagePosition: pagePosition, taskPosition: taskPosition } };
32+
}
33+
exports.tutorialTaskAdd = tutorialTaskAdd;
34+
function tutorialActionAdd(pagePosition, taskPosition) {
35+
return { type: types_1.TUTORIAL_ACTION_ADD, payload: { pagePosition: pagePosition, taskPosition: taskPosition } };
36+
}
37+
exports.tutorialActionAdd = tutorialActionAdd;
38+
function tutorialHintAdd(pagePosition, taskPosition) {
39+
return { type: types_1.TUTORIAL_HINT_ADD, payload: { pagePosition: pagePosition, taskPosition: taskPosition } };
40+
}
41+
exports.tutorialHintAdd = tutorialHintAdd;

Diff for: lib/modules/tutorial/index.js

+3
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,8 @@ exports.tutorialInit = actions_1.tutorialInit;
44
exports.tutorialLoad = actions_1.tutorialLoad;
55
exports.tutorialBuild = actions_1.tutorialBuild;
66
exports.tutorialPageAdd = actions_1.tutorialPageAdd;
7+
exports.tutorialTaskAdd = actions_1.tutorialTaskAdd;
8+
exports.tutorialHintAdd = actions_1.tutorialHintAdd;
9+
exports.tutorialActionAdd = actions_1.tutorialActionAdd;
710
var reducer_1 = require('./reducer');
811
exports.reducer = reducer_1.default;

Diff for: lib/modules/tutorial/reducer.js

+12-13
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,23 @@ var types_1 = require('./types');
33
var coderoad_cli_1 = require('coderoad-cli');
44
var fs_1 = require('fs');
55
var path_1 = require('path');
6+
var pageNew_1 = require('./utils/pageNew');
67
var _tutorial = {
7-
title: '',
8-
pages: [{
9-
file: './01/page-01.md',
10-
title: 'Page One',
11-
description: 'page one description',
12-
tasks: [{
13-
tests: ['./01/01.js'],
14-
description: 'first task',
15-
hints: ['hint 1', 'hint 2']
16-
}]
17-
}]
8+
info: {
9+
title: '',
10+
description: '',
11+
},
12+
pages: [].concat(pageNew_1.default(0))
1813
};
1914
function tutorial(t, action) {
2015
if (t === void 0) { t = _tutorial; }
2116
switch (action.type) {
2217
case types_1.TUTORIAL_INIT:
2318
var _a = action.payload, dir = _a.dir, name_1 = _a.name;
2419
coderoad_cli_1.create(dir, name_1);
25-
if (_tutorial.title.length < 1) {
26-
t = Object.assign({}, t, { title: name_1 });
20+
if (_tutorial.info.title.length < 1) {
21+
var info = Object.assign({}, t.info, { title: name_1 });
22+
t = Object.assign({}, t, { info: info });
2723
}
2824
return t;
2925
case types_1.TUTORIAL_BUILD:
@@ -32,6 +28,9 @@ function tutorial(t, action) {
3228
case types_1.TUTORIAL_LOAD:
3329
var data = JSON.parse(fs_1.readFileSync(path_1.join(action.payload.dir, 'coderoad.json'), 'utf8'));
3430
return data;
31+
case types_1.TUTORIAL_PAGE_ADD:
32+
var pages = t.pages.concat(pageNew_1.default(t.pages.length));
33+
return Object.assign({}, t, { pages: pages });
3534
default:
3635
return t;
3736
}

Diff for: lib/modules/tutorial/types.js

+3
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,6 @@ exports.TUTORIAL_INIT = 'TUTORIAL_INIT';
33
exports.TUTORIAL_LOAD = 'TUTORIAL_LOAD';
44
exports.TUTORIAL_BUILD = 'TUTORIAL_BUILD';
55
exports.TUTORIAL_PAGE_ADD = 'TUTORIAL_PAGE_ADD';
6+
exports.TUTORIAL_TASK_ADD = 'TUTORIAL_TASK_ADD';
7+
exports.TUTORIAL_HINT_ADD = 'TUTORIAL_HINT_ADD';
8+
exports.TUTORIAL_ACTION_ADD = 'TUTORIAL_ACTION_ADD';

Diff for: lib/modules/tutorial/utils/pageNew.js

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
"use strict";
2+
function pageNew(index) {
3+
index += 1;
4+
return {
5+
title: "Page " + index,
6+
description: "page " + index + " description",
7+
tasks: [{
8+
tests: ['./01/01'],
9+
description: 'first task description',
10+
hints: [],
11+
actions: [],
12+
}]
13+
};
14+
}
15+
Object.defineProperty(exports, "__esModule", { value: true });
16+
exports.default = pageNew;

Diff for: lib/modules/tutorial/utils/taskUpdate.js

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
"use strict";
2+
function updateTask(tutorial, pagePosition, taskPosition, prop, value) {
3+
tutorial.pages[pagePosition].tasks[taskPosition] = tutorial.pages[pagePosition].tasks[taskPosition][prop].concat(value);
4+
return tutorial;
5+
}
6+
Object.defineProperty(exports, "__esModule", { value: true });
7+
exports.default = updateTask;

Diff for: src/actions.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
export {pageSet} from './modules/page-position';
22
export {pjSave} from './modules/package-json';
33
export {setupVerify, setupPackage} from './modules/setup';
4-
export {tutorialInit, tutorialLoad, tutorialBuild, tutorialPageAdd} from './modules/tutorial';
4+
export {
5+
tutorialInit, tutorialLoad, tutorialBuild, tutorialPageAdd,
6+
tutorialTaskAdd, tutorialHintAdd, tutorialActionAdd
7+
} from './modules/tutorial';
58
export {windowToggle} from './modules/window';
69
export {editorOpenPage, editorOpenTest} from './modules/editor-paths';
710

Diff for: src/components/TopPanel/TopPanel.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ export default class TopPanel extends React.Component<{
5858
<Tab
5959
style={Object.assign({}, styles.tab, styles.add)}
6060
label='+'
61+
onActive={pageAdd}
6162
/>
6263
</Tabs>
6364
);

Diff for: src/modules/tutorial/actions.ts

+14-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import {
2-
TUTORIAL_INIT, TUTORIAL_LOAD, TUTORIAL_BUILD, TUTORIAL_PAGE_ADD
2+
TUTORIAL_INIT, TUTORIAL_LOAD, TUTORIAL_BUILD,
3+
TUTORIAL_PAGE_ADD, TUTORIAL_TASK_ADD, TUTORIAL_HINT_ADD, TUTORIAL_ACTION_ADD
34
} from './types';
45

56
export function tutorialInit() {
@@ -26,6 +27,17 @@ export function tutorialBuild() {
2627
}
2728

2829
export function tutorialPageAdd() {
29-
console.log('called tutorialPageAdd');
3030
return { type: TUTORIAL_PAGE_ADD };
3131
}
32+
33+
export function tutorialTaskAdd(pagePosition: number, taskPosition: number) {
34+
return { type: TUTORIAL_TASK_ADD, payload: { pagePosition, taskPosition } };
35+
}
36+
37+
export function tutorialActionAdd(pagePosition: number, taskPosition: number) {
38+
return { type: TUTORIAL_ACTION_ADD, payload: { pagePosition, taskPosition } };
39+
}
40+
41+
export function tutorialHintAdd(pagePosition: number, taskPosition: number) {
42+
return { type: TUTORIAL_HINT_ADD, payload: { pagePosition, taskPosition } };
43+
}

Diff for: src/modules/tutorial/index.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
1-
export {tutorialInit, tutorialLoad, tutorialBuild, tutorialPageAdd} from './actions';
1+
export {
2+
tutorialInit, tutorialLoad, tutorialBuild, tutorialPageAdd,
3+
tutorialTaskAdd, tutorialHintAdd, tutorialActionAdd
4+
} from './actions';
25
export {default as reducer} from './reducer';

Diff for: src/modules/tutorial/reducer.ts

+28-17
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,56 @@
1-
import {TUTORIAL_INIT, TUTORIAL_BUILD, TUTORIAL_LOAD} from './types';
1+
import {
2+
TUTORIAL_INIT, TUTORIAL_BUILD, TUTORIAL_LOAD,
3+
TUTORIAL_PAGE_ADD, TUTORIAL_TASK_ADD, TUTORIAL_HINT_ADD, TUTORIAL_ACTION_ADD
4+
} from './types';
25
import {create, build} from 'coderoad-cli';
36
import {readFileSync} from 'fs';
47
import {join} from 'path';
8+
// import taskUpdate from './utils/taskUpdate';
9+
import pageNew from './utils/pageNew';
510

6-
const _tutorial = {
7-
title: '',
8-
pages: [{
9-
file: './01/page-01.md',
10-
title: 'Page One',
11-
description: 'page one description',
12-
tasks: [{
13-
tests: ['./01/01.js'],
14-
description: 'first task',
15-
hints: ['hint 1', 'hint 2']
16-
}]
17-
}]
11+
const _tutorial: CR.Tutorial = {
12+
info: {
13+
title: '',
14+
description: '',
15+
},
16+
pages: [].concat(pageNew(0))
1817
};
1918

20-
export default function tutorial(t = _tutorial, action: Action) {
19+
export default function tutorial(t = _tutorial, action: Action): CR.Tutorial {
2120
switch (action.type) {
2221

2322
case TUTORIAL_INIT:
2423
const {dir, name} = action.payload;
2524
create(dir, name);
26-
if (_tutorial.title.length < 1) {
27-
t = Object.assign({}, t, { title: name });
25+
if (_tutorial.info.title.length < 1) {
26+
// no title? save packageJson name as title
27+
const info = Object.assign({}, t.info, { title: name });
28+
t = Object.assign({}, t, {info});
2829
}
2930
return t;
3031

3132
case TUTORIAL_BUILD:
33+
// run CLI build to create a new coderoad.json file
3234
build(action.payload.dir, join('tutorial', 'tutorial.md'));
3335
return t;
3436

3537
case TUTORIAL_LOAD:
38+
// load data from coderoad.json
3639
const data = JSON.parse(readFileSync(
3740
join(action.payload.dir, 'coderoad.json'), 'utf8')
3841
);
3942
// TODO: validate coderoad.json data
40-
4143
return data;
4244

45+
case TUTORIAL_PAGE_ADD:
46+
// add a new page template
47+
const pages = t.pages.concat(pageNew(t.pages.length));
48+
return Object.assign({}, t, {pages});
49+
50+
// case TUTORIAL_ADD_HINT:
51+
// const {pagePosition, taskPosition} = action.payload;
52+
// t.pages[pagePosition].tasks[taskPosition].hints.concat('')
53+
4354
default:
4455
return t;
4556
}

Diff for: src/modules/tutorial/types.ts

+4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
export const TUTORIAL_INIT = 'TUTORIAL_INIT';
22
export const TUTORIAL_LOAD = 'TUTORIAL_LOAD';
33
export const TUTORIAL_BUILD = 'TUTORIAL_BUILD';
4+
45
export const TUTORIAL_PAGE_ADD = 'TUTORIAL_PAGE_ADD';
6+
export const TUTORIAL_TASK_ADD = 'TUTORIAL_TASK_ADD';
7+
export const TUTORIAL_HINT_ADD = 'TUTORIAL_HINT_ADD';
8+
export const TUTORIAL_ACTION_ADD = 'TUTORIAL_ACTION_ADD';

Diff for: src/modules/tutorial/utils/pageNew.ts

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
export default function pageNew(index: number) {
2+
index += 1;
3+
return {
4+
title: `Page ${index}`,
5+
description: `page ${index} description`,
6+
tasks: [{
7+
tests: ['./01/01'],
8+
description: 'first task description',
9+
hints: [],
10+
actions: [],
11+
}]
12+
};
13+
}

Diff for: src/modules/tutorial/utils/taskUpdate.ts

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export default function updateTask(
2+
tutorial: CR.Tutorial,
3+
pagePosition: number, taskPosition: number,
4+
prop: string, value): CR.Tutorial {
5+
tutorial.pages[pagePosition].tasks[taskPosition] = tutorial.pages[pagePosition].tasks[taskPosition][prop].concat(value);
6+
return tutorial;
7+
}

Diff for: tsconfig.json

+2
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@
5252
"src/modules/tutorial/index.ts",
5353
"src/modules/tutorial/reducer.ts",
5454
"src/modules/tutorial/types.ts",
55+
"src/modules/tutorial/utils/pageNew.ts",
56+
"src/modules/tutorial/utils/taskUpdate.ts",
5557
"src/modules/window/actions.ts",
5658
"src/modules/window/index.ts",
5759
"src/modules/window/reducer.ts",

Diff for: tutorial/01/01.js

-29
This file was deleted.

0 commit comments

Comments
 (0)