Skip to content

Commit d6096ff

Browse files
committed
remove chapters, pages only
1 parent 0ba8a5b commit d6096ff

File tree

35 files changed

+159
-355
lines changed

35 files changed

+159
-355
lines changed

CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22
All notable changes to this project will be documented in this file.
33
This project adheres to [Semantic Versioning](http://semver.org/).
44

5+
## [0.9]
6+
- remove chapters, now only pages
7+
- bug fixes
8+
59
## [0.8.0] - 2016-04-27
610
- save tutorial progress to localStorage
711
- check for tutorial package updates

lib/actions/_types.js

-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
"use strict";
22
exports.ALERT_REPLAY = 'ALERT_REPLAY';
33
exports.ALERT_TOGGLE = 'ALERT_TOGGLE';
4-
exports.COMPLETE_CHAPTER = 'COMPLETE_CHAPTER';
54
exports.COMPLETE_PAGE = 'COMPLETE_PAGE';
65
exports.COMPLETE_TUTORIAL = 'COMPLETE_TUTORIAL';
76
exports.HINT_POSITION_SET = 'HINT_POSITION_SET';

lib/actions/index.js

-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ exports.alertReplay = alert_1.alertReplay;
55
var progress_1 = require('./progress');
66
exports.progressLoad = progress_1.progressLoad;
77
exports.completePage = progress_1.completePage;
8-
exports.completeChapter = progress_1.completeChapter;
98
exports.completeTutorial = progress_1.completeTutorial;
109
var hint_1 = require('./hint');
1110
exports.hintShow = hint_1.hintShow;

lib/actions/page.js

+3-12
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,18 @@ var test_1 = require('./test');
33
var _types_1 = require('./_types');
44
var store_1 = require('../store');
55
var _position = {
6-
chapter: 0,
76
page: 0,
87
};
98
function pageNext() {
109
var position = null;
11-
var _a = store_1.default.getState().position, page = _a.page, chapter = _a.chapter;
12-
var chapters = store_1.default.getState().tutorial.chapters;
13-
if (page < chapters[chapter].pages.length - 1) {
10+
var page = store_1.default.getState().position.page;
11+
var pages = store_1.default.getState().tutorial.pages;
12+
if (page < pages.length - 1) {
1413
store_1.default.dispatch(test_1.testsLoad());
1514
position = {
16-
chapter: chapter,
1715
page: page + 1,
1816
};
1917
}
20-
else if (chapter < chapters.length - 1) {
21-
store_1.default.dispatch(test_1.testsLoad());
22-
position = {
23-
chapter: chapter + 1,
24-
page: 0,
25-
};
26-
}
2718
else {
2819
return {
2920
payload: { route: 'final' },

lib/actions/progress.js

+3-15
Original file line numberDiff line numberDiff line change
@@ -14,28 +14,16 @@ function isTrue(x) {
1414
}
1515
function completePage() {
1616
var position = store_1.default.getState().position;
17-
var chapter = store_1.default.getState().progress.chapters[position.chapter];
18-
if (chapter.pages.every(function (x) { return x; })) {
19-
store_1.default.dispatch(completeChapter());
17+
var progress = store_1.default.getState().progress;
18+
if (progress.pages.every(function (x) { return x.completed; })) {
19+
store_1.default.dispatch(completeTutorial());
2020
}
2121
return {
2222
payload: { position: position },
2323
type: _types_1.COMPLETE_PAGE,
2424
};
2525
}
2626
exports.completePage = completePage;
27-
function completeChapter() {
28-
var chapter = store_1.default.getState().position.chapter;
29-
var progress = store_1.default.getState().progress;
30-
if (progress.chapters.every(function (x) { return x.completed; })) {
31-
store_1.default.dispatch(completeTutorial());
32-
}
33-
return {
34-
payload: { chapter: chapter },
35-
type: _types_1.COMPLETE_CHAPTER,
36-
};
37-
}
38-
exports.completeChapter = completeChapter;
3927
function completeTutorial() {
4028
return { type: _types_1.COMPLETE_TUTORIAL };
4129
}

lib/components/App.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ var App = (function (_super) {
3535
_super.apply(this, arguments);
3636
}
3737
App.prototype.render = function () {
38-
return (React.createElement("section", {className: 'cr', key: 'main', style: { height: height }}, React.createElement(index_1.AppMenu, __assign({}, this.props.store)), React.createElement(Routes_1.Routes, __assign({}, this.props.store)), React.createElement(index_1.Alert, __assign({}, this.props.store))));
38+
var store = this.props.store;
39+
console.log(store);
40+
return (React.createElement("section", {className: 'cr', key: 'main', style: { height: height }}, React.createElement(index_1.AppMenu, __assign({}, store)), React.createElement(Routes_1.Routes, __assign({}, store)), React.createElement(index_1.Alert, __assign({}, store))));
3941
};
4042
App = __decorate([
4143
react_redux_1.connect(function (store) {

lib/components/Page/Chapter/index.js

-14
This file was deleted.

lib/components/Progress/ProgressChapter/index.js

-16
This file was deleted.

lib/components/Progress/ProgressPage/index.js

+9-12
Original file line numberDiff line numberDiff line change
@@ -29,22 +29,19 @@ var ProgressPage = (function (_super) {
2929
_super.apply(this, arguments);
3030
}
3131
ProgressPage.prototype.canActivate = function (isActive) {
32-
var _a = this.props, chapterIndex = _a.chapterIndex, pageIndex = _a.pageIndex, position = _a.position, progress = _a.progress;
33-
var completed = progress.chapters[chapterIndex].pages[pageIndex];
34-
var currentChapter = chapterIndex === position.chapter;
35-
var earlierOrCurrentPage = pageIndex <= position.page;
36-
return isActive || completed ||
37-
(currentChapter && earlierOrCurrentPage);
32+
var _a = this.props, index = _a.index, position = _a.position, progress = _a.progress;
33+
var completed = progress.pages[index];
34+
return isActive || completed;
3835
};
3936
ProgressPage.prototype.render = function () {
40-
var _a = this.props, page = _a.page, position = _a.position, chapterIndex = _a.chapterIndex, pageIndex = _a.pageIndex, progress = _a.progress, selectPage = _a.selectPage;
41-
var isActive = chapterIndex === position.chapter && pageIndex === position.page;
37+
console.log(this.props);
38+
var _a = this.props, page = _a.page, position = _a.position, index = _a.index, progress = _a.progress, selectPage = _a.selectPage;
39+
var isActive = index === position.page;
4240
var canActivate = this.canActivate(isActive);
43-
var completed = progress.chapters[chapterIndex].pages[pageIndex];
44-
return (React.createElement(List_1.ListItem, {key: pageIndex, style: Object.assign({}, styles, !canActivate ? { color: colors_1.grey400 } : {}), primaryText: (pageIndex + 1) + ". " + page.title, secondaryText: canActivate ? page.description : '', leftIcon: progressIcon_1.progressIcon(completed, isActive), onClick: canActivate
41+
var completed = progress.pages[index];
42+
return (React.createElement(List_1.ListItem, {key: index, style: Object.assign({}, styles, !canActivate ? { color: colors_1.grey400 } : {}), primaryText: (index + 1) + ". " + page.title, secondaryText: canActivate ? page.description : '', leftIcon: progressIcon_1.progressIcon(completed, isActive), onClick: canActivate
4543
? selectPage.bind(this, {
46-
chapter: chapterIndex,
47-
page: pageIndex
44+
page: index
4845
})
4946
: function () { return; }}));
5047
};

lib/components/Progress/index.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ var React = require('react');
33
var Paper_1 = require('material-ui/Paper');
44
var List_1 = require('material-ui/List');
55
var Subheader_1 = require('material-ui/Subheader');
6-
var ProgressChapter_1 = require('./ProgressChapter');
6+
var ProgressPage_1 = require('./ProgressPage');
77
var pageStyle = {
88
width: '100%',
99
margin: '0px',
1010
};
1111
exports.Progress = function (_a) {
1212
var progress = _a.progress, position = _a.position, info = _a.info, tutorial = _a.tutorial;
13-
return (React.createElement(Paper_1.default, {style: pageStyle}, React.createElement(List_1.List, null, React.createElement(Subheader_1.default, null, info.name), tutorial.chapters.map(function (chapter, chapterIndex) { return (React.createElement(ProgressChapter_1.ProgressChapter, {key: chapterIndex, chapter: chapter, chapterIndex: chapterIndex, position: position, progress: progress})); }))));
13+
return (React.createElement(Paper_1.default, {style: pageStyle}, React.createElement(List_1.List, null, React.createElement(Subheader_1.default, null, info.name), tutorial.pages.map(function (page, index) { return (React.createElement(ProgressPage_1.ProgressPage, {key: index, index: index, page: page, position: position, progress: progress})); }))));
1414
};

lib/components/Tutorials/SelectTutorial/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ var SelectTutorial = (function (_super) {
4141
return {
4242
selectTutorial: function (name) {
4343
dispatch(actions_1.tutorialSet(name));
44-
dispatch(actions_1.positionSet({ chapter: 0, page: 0 }));
44+
dispatch(actions_1.positionSet({ page: 0 }));
4545
dispatch(actions_1.progressLoad());
4646
dispatch(actions_1.routeSet('progress'));
4747
},

lib/reducers/alert/index.js

-4
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,6 @@ function alertReducer(alert, action) {
5555
return setAlert({
5656
message: "Page " + (action.payload.position.page + 1) + " Complete",
5757
});
58-
case _types_1.COMPLETE_CHAPTER:
59-
return setAlert({
60-
message: "Chapter " + (action.payload.chapter + 1) + " Complete",
61-
});
6258
case _types_1.COMPLETE_TUTORIAL:
6359
return setAlert({
6460
message: 'Tutorial Complete',

lib/reducers/page/index.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@ function pageReducer(p, action) {
1111
if (p === void 0) { p = _page; }
1212
switch (action.type) {
1313
case _types_1.PAGE_SET:
14-
var _a = action.payload.position, chapter = _a.chapter, page = _a.page;
15-
var _b = store_1.default.getState().tutorial
16-
.chapters[chapter].pages[page], title = _b.title, description = _b.description, onPageComplete = _b.onPageComplete, completed = _b.completed;
14+
var page = action.payload.position.page;
15+
var _a = store_1.default.getState().tutorial.pages[page], title = _a.title, description = _a.description, onPageComplete = _a.onPageComplete, completed = _a.completed;
1716
editor_1.clearConsole();
1817
return {
1918
title: title,

lib/reducers/position/index.js

+4-10
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,18 @@
22
var _types_1 = require('../../actions/_types');
33
var store_1 = require('../../store');
44
var _position = {
5-
chapter: 0,
65
page: 0,
76
};
87
function positionReducer(position, action) {
98
if (position === void 0) { position = _position; }
109
switch (action.type) {
1110
case _types_1.POSITION_LOAD:
12-
var chapters = store_1.default.getState().progress.chapters;
13-
var chapter = chapters.indexOf(function (x) { return !x.completed; });
14-
if (chapter < 0) {
15-
chapter = chapters.length - 1;
16-
}
17-
var progressPage = chapters[chapter].pages;
18-
var page = progressPage.indexOf(function (x) { return !x; });
11+
var pages = store_1.default.getState().progress.pages;
12+
var page = pages.indexOf(function (x) { return !x; });
1913
if (page < 0) {
20-
page = progressPage.length - 1;
14+
page = pages.length - 1;
2115
}
22-
return { chapter: chapter, page: page };
16+
return { page: page };
2317
case _types_1.PAGE_SET:
2418
case _types_1.POSITION_SET:
2519
return action.payload.position;

lib/reducers/progress/index.js

+4-16
Original file line numberDiff line numberDiff line change
@@ -4,35 +4,23 @@ var local_storage_1 = require('./local-storage');
44
var store_1 = require('../../store');
55
var _progress = {
66
completed: false,
7-
chapters: []
7+
pages: []
88
};
99
function progressReducer(progress, action) {
1010
if (progress === void 0) { progress = _progress; }
1111
switch (action.type) {
1212
case _types_1.PROGRESS_LOAD:
13-
var tutorial = store_1.default.getState().tutorial;
1413
var saved = local_storage_1.loadProgressFromLocalStorage();
1514
if (saved) {
1615
return saved;
1716
}
1817
return {
1918
completed: false,
20-
chapters: !tutorial.chapters
21-
? []
22-
: tutorial.chapters.map(function (chapter) {
23-
return {
24-
completed: false,
25-
pages: chapter.pages.map(function () { return false; })
26-
};
27-
})
19+
pages: store_1.default.getState().tutorial.pages.map(function () { return false; })
2820
};
2921
case _types_1.COMPLETE_PAGE:
30-
var _a = action.payload.position, chapter = _a.chapter, page = _a.page;
31-
progress.chapters[chapter].pages[page] = true;
32-
local_storage_1.saveToLocalStorage(progress);
33-
return progress;
34-
case _types_1.COMPLETE_CHAPTER:
35-
progress.chapters[action.payload.chapter].completed = true;
22+
var page = action.payload.position.page;
23+
progress.pages[page] = true;
3624
local_storage_1.saveToLocalStorage(progress);
3725
return progress;
3826
case _types_1.COMPLETE_TUTORIAL:

lib/reducers/tasks/index.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ function tasksReducer(tasks, action) {
1313
if (tasks === void 0) { tasks = _tasks; }
1414
switch (action.type) {
1515
case _types_1.PAGE_SET:
16-
var _a = action.payload.position, chapter = _a.chapter, page = _a.page;
17-
return config_task_tests_1.configTaskTests(store_1.default.getState().tutorial.chapters[chapter].pages[page].tasks || []);
16+
var page = action.payload.position.page;
17+
return config_task_tests_1.configTaskTests(store_1.default.getState().tutorial.pages[page].tasks || []);
1818
default:
1919
return tasks;
2020
}

lib/reducers/tutorial/index.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ var store_1 = require('../../store');
66
var _tutorial = {
77
name: null,
88
info: null,
9-
chapters: [],
9+
pages: [],
1010
packageJson: null,
1111
config: null,
1212
};
@@ -19,11 +19,11 @@ function tutorialReducer(tutorial, action) {
1919
var packagePath = path_1.join(dir, 'node_modules', name_1);
2020
var packageJson = require(path_1.join(packagePath, 'package.json'));
2121
var config = tutorial_config_1.tutorialConfig(packageJson);
22-
var _a = require(path_1.join(packagePath, packageJson.main)), info = _a.info, chapters = _a.chapters;
22+
var _a = require(path_1.join(packagePath, packageJson.main)), info = _a.info, pages = _a.pages;
2323
return {
2424
name: packageJson.name,
2525
info: info,
26-
chapters: chapters,
26+
pages: pages,
2727
packageJson: packageJson,
2828
config: config,
2929
};

src/actions/_types.ts

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
export const ALERT_REPLAY = 'ALERT_REPLAY';
22
export const ALERT_TOGGLE = 'ALERT_TOGGLE';
3-
export const COMPLETE_CHAPTER = 'COMPLETE_CHAPTER';
43
export const COMPLETE_PAGE = 'COMPLETE_PAGE';
54
export const COMPLETE_TUTORIAL = 'COMPLETE_TUTORIAL';
65
export const HINT_POSITION_SET = 'HINT_POSITION_SET';

src/actions/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
export {alertToggle, alertReplay} from './alert';
22
export {
3-
progressLoad, completePage, completeChapter, completeTutorial
3+
progressLoad, completePage, completeTutorial
44
} from './progress';
55
export {hintShow, hintPositionSet} from './hint';
66
export {pageSet, pageNext} from './page';

src/actions/page.ts

+3-11
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,18 @@ import {ROUTE_SET, PAGE_SET} from './_types';
33
import store from '../store';
44

55
const _position = {
6-
chapter: 0,
76
page: 0,
87
};
98

109
export function pageNext(): Action {
1110
let position = null;
12-
const {page, chapter} = store.getState().position;
13-
const {chapters} = store.getState().tutorial;
14-
if (page < chapters[chapter].pages.length - 1) {
11+
const {page} = store.getState().position;
12+
const {pages} = store.getState().tutorial;
13+
if (page < pages.length - 1) {
1514
store.dispatch(testsLoad());
1615
position = {
17-
chapter,
1816
page: page + 1,
1917
};
20-
} else if (chapter < chapters.length - 1) {
21-
store.dispatch(testsLoad());
22-
position = {
23-
chapter: chapter + 1,
24-
page: 0,
25-
};
2618
} else {
2719
return {
2820
payload: { route: 'final' },

src/actions/progress.ts

+5-18
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {
2-
PROGRESS_LOAD, COMPLETE_PAGE, COMPLETE_CHAPTER, COMPLETE_TUTORIAL
2+
PROGRESS_LOAD, COMPLETE_PAGE, COMPLETE_TUTORIAL
33
} from './_types';
44
import {positionLoad} from './position';
55
import store from '../store';
@@ -17,27 +17,14 @@ function isTrue(x) {
1717

1818
export function completePage(): Action {
1919
const position: CR.Position = store.getState().position;
20-
const chapter = store.getState().progress.chapters[position.chapter];
21-
// all pages are true, chapter complete
22-
if (chapter.pages.every(x => x)) {
23-
store.dispatch(completeChapter());
24-
}
25-
return {
26-
payload: { position },
27-
type: COMPLETE_PAGE,
28-
};
29-
}
30-
31-
export function completeChapter(): Action {
32-
const chapter: number = store.getState().position.chapter;
3320
const progress = store.getState().progress;
34-
// all chapters complete, tutorial complete
35-
if (progress.chapters.every(x => x.completed)) {
21+
// all pages are true, tutorial complete
22+
if (progress.pages.every(x => x.completed)) {
3623
store.dispatch(completeTutorial());
3724
}
3825
return {
39-
payload: { chapter },
40-
type: COMPLETE_CHAPTER,
26+
payload: { position },
27+
type: COMPLETE_PAGE,
4128
};
4229
}
4330

0 commit comments

Comments
 (0)