Skip to content

Commit 61bdd7c

Browse files
committed
setup progress
1 parent 783a0d6 commit 61bdd7c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

83 files changed

+2393
-46
lines changed

lib/actions/actionTypes.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
"use strict";
2+
exports.SET_PROJECT = 'SET_PROJECT';
3+
exports.VERIFY_SETUP = 'VERIFY_SETUP';
4+
exports.SET_GLOBALS = 'SET_GLOBALS';
5+
exports.LOAD_TUTORIALS = 'LOAD_TUTORIALS';
6+
exports.SET_ROUTE = 'SET_ROUTE';
7+
exports.SET_PAGE = 'SET_PAGE';
8+
exports.NEXT_PAGE = 'NEXT_PAGE';
9+
exports.SET_POSITION = 'SET_POSITION';
10+
exports.SET_PROGRESS = 'SET_PROGRESS';
11+
exports.PAGE_COMPLETE = 'PAGE_COMPLETE';
12+
exports.CHAPTER_COMPLETE = 'CHAPTER_COMPLETE';
13+
exports.PROJECT_COMPLETE = 'PROJECT_COMPLETE';
14+
exports.EDITOR_ACTIONS = 'EDITOR_ACTIONS';
15+
exports.SHOW_HINT = 'SHOW_HINT';
16+
exports.SHOW_SOLUTION = 'SHOW_SOLUTION';
17+
exports.SET_HINT_POSITION = 'SET_HINT_POSITION';
18+
exports.RUN_TESTS = 'RUN_TESTS';
19+
exports.TEST_COMPLETE = 'TEST_COMPLETE';
20+
exports.TEST_RESULT = 'TEST_RESULT';
21+
exports.TOGGLE_LOG = 'CHECK_LOG';
22+
exports.LOG_MESSAGE = 'LOG_MESSAGE';
23+
exports.TOGGLE_ALERT = 'TOGGLE_ALERT';
24+
exports.REPLAY_ALERT = 'SHOW_ALERT';

lib/actions/actions.js

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
"use strict";
2+
var Type = require('./actionTypes');
3+
var store_1 = require('../store/store');
4+
var package_1 = require('../services/package');
5+
function setProject() {
6+
return { type: Type.SET_PROJECT };
7+
}
8+
exports.setProject = setProject;
9+
function setGlobals(packageJson) {
10+
return { type: Type.SET_GLOBALS, payload: { packageJson: packageJson } };
11+
}
12+
exports.setGlobals = setGlobals;
13+
function verifySetup() {
14+
return { type: Type.VERIFY_SETUP };
15+
}
16+
exports.verifySetup = verifySetup;
17+
function setProgress() {
18+
return { type: Type.SET_PROGRESS };
19+
}
20+
exports.setProgress = setProgress;
21+
function setPosition(position) {
22+
return { type: Type.SET_POSITION, payload: { position: position } };
23+
}
24+
exports.setPosition = setPosition;
25+
function loadTutorial(tutorial) {
26+
package_1.default.selectPackage(tutorial.name);
27+
store_1.store.dispatch(setProject());
28+
store_1.store.dispatch(setPosition({ chapter: 0, page: 0 }));
29+
store_1.store.dispatch(setProgress());
30+
}
31+
exports.loadTutorial = loadTutorial;
32+
function toggleLog() {
33+
var open = !store_1.store.getState().log.open;
34+
return { type: Type.TOGGLE_LOG, payload: { open: open } };
35+
}
36+
exports.toggleLog = toggleLog;
37+
function logMessage(message) {
38+
return { type: Type.LOG_MESSAGE, payload: { message: message } };
39+
}
40+
exports.logMessage = logMessage;
41+
var page_actions_1 = require('./page-actions');
42+
exports.setPage = page_actions_1.setPage;
43+
exports.nextPage = page_actions_1.nextPage;
44+
var progress_actions_1 = require('./progress-actions');
45+
exports.pageComplete = progress_actions_1.pageComplete;
46+
exports.chapterComplete = progress_actions_1.chapterComplete;
47+
exports.projectComplete = progress_actions_1.projectComplete;
48+
var task_actions_1 = require('./task-actions');
49+
exports.showHint = task_actions_1.showHint;
50+
exports.runTests = task_actions_1.runTests;
51+
exports.testComplete = task_actions_1.testComplete;
52+
exports.testResult = task_actions_1.testResult;
53+
exports.setHintPosition = task_actions_1.setHintPosition;
54+
var tutorials_1 = require('./tutorials');
55+
exports.loadTutorials = tutorials_1.loadTutorials;
56+
var alert_1 = require('./alert');
57+
exports.toggleAlert = alert_1.toggleAlert;
58+
exports.replayAlert = alert_1.replayAlert;
59+
var routes_1 = require('./routes');
60+
exports.setRoute = routes_1.setRoute;

lib/actions/alert.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
"use strict";
2+
var store_1 = require('../store/store');
3+
var Type = require('./actionTypes');
4+
var _ = require('lodash');
5+
function toggleAlert(alert) {
6+
var isOpen = store_1.store.getState().alert.open;
7+
if (!alert) {
8+
alert = { message: '', action: '', open: false };
9+
}
10+
else {
11+
alert = _.assign(alert, { open: !isOpen });
12+
}
13+
return { type: Type.TOGGLE_ALERT, payload: { alert: alert } };
14+
}
15+
exports.toggleAlert = toggleAlert;
16+
function replayAlert() {
17+
return { type: Type.REPLAY_ALERT };
18+
}
19+
exports.replayAlert = replayAlert;

lib/actions/page-actions.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
"use strict";
2+
var Type = require('./actionTypes');
3+
var store_1 = require('../store/store');
4+
var package_1 = require('../services/package');
5+
var _ = require('lodash');
6+
function setPage(selectedPosition) {
7+
if (selectedPosition === void 0) { selectedPosition = { chapter: 0, page: 0 }; }
8+
if (selectedPosition.completed) {
9+
return { type: Type.SET_ROUTE, payload: { route: 'final' } };
10+
}
11+
var page = package_1.default.getPage(selectedPosition);
12+
var tasks = package_1.default.getTasks(selectedPosition);
13+
var taskTests = _.flatten(tasks.map(function (task) { return task.tests || []; }));
14+
var actions = tasks.map(function (task) { return task.actions || []; });
15+
return { type: Type.SET_PAGE, payload: { page: page, tasks: tasks, position: selectedPosition, taskTests: taskTests, actions: actions } };
16+
}
17+
exports.setPage = setPage;
18+
function nextPage() {
19+
var position = store_1.store.getState().position;
20+
var nextPosition = package_1.default.getNextPosition(position);
21+
return setPage(nextPosition);
22+
}
23+
exports.nextPage = nextPage;

lib/actions/progress-actions.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
"use strict";
2+
var Type = require('./actionTypes');
3+
var store_1 = require('../store/store');
4+
function pageComplete() {
5+
var position = store_1.store.getState().position;
6+
var pageLength = store_1.store.getState().progress.chapters[position.chapter].pages.length;
7+
if (position.page >= pageLength - 1) {
8+
return chapterComplete();
9+
}
10+
return { type: Type.PAGE_COMPLETE, payload: { position: position } };
11+
}
12+
exports.pageComplete = pageComplete;
13+
function chapterComplete() {
14+
var chapter = store_1.store.getState().position.chapter;
15+
var chapterLength = store_1.store.getState().progress.chapters.length;
16+
if (chapter >= chapterLength - 1) {
17+
return projectComplete();
18+
}
19+
return { type: Type.CHAPTER_COMPLETE, payload: { chapter: chapter } };
20+
}
21+
exports.chapterComplete = chapterComplete;
22+
function projectComplete() {
23+
return { type: Type.PROJECT_COMPLETE };
24+
}
25+
exports.projectComplete = projectComplete;

lib/actions/routes.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
"use strict";
2+
var store_1 = require('../store/store');
3+
var Type = require('./actionTypes');
4+
var Action = require('./actions');
5+
var previous = null;
6+
function setRoute(route) {
7+
if (route && route !== previous) {
8+
switch (route) {
9+
case 'tutorials':
10+
console.log('load');
11+
store_1.store.dispatch(Action.loadTutorials());
12+
}
13+
previous = route;
14+
return { type: Type.SET_ROUTE, payload: { route: route } };
15+
}
16+
}
17+
exports.setRoute = setRoute;

lib/actions/task-actions.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
"use strict";
2+
var Type = require('./actionTypes');
3+
var store_1 = require('../store/store');
4+
function showHint() {
5+
return { type: Type.SHOW_HINT };
6+
}
7+
exports.showHint = showHint;
8+
function runTests() {
9+
return { type: Type.RUN_TESTS };
10+
}
11+
exports.runTests = runTests;
12+
function testResult(result) {
13+
var actions = store_1.store.getState().editorActions;
14+
return { type: Type.TEST_RESULT, payload: { result: result, actions: actions } };
15+
}
16+
exports.testResult = testResult;
17+
function testComplete() {
18+
return { type: Type.TEST_COMPLETE };
19+
}
20+
exports.testComplete = testComplete;
21+
function setHintPosition(hintPosition) {
22+
return { type: Type.SET_HINT_POSITION, payload: { hintPosition: hintPosition } };
23+
}
24+
exports.setHintPosition = setHintPosition;

lib/actions/tutorials.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
"use strict";
2+
var Type = require('./actionTypes');
3+
function loadTutorials() {
4+
return { type: Type.LOAD_TUTORIALS };
5+
}
6+
exports.loadTutorials = loadTutorials;

lib/atom/actions.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
"use strict";
2+
function closeAllPanels() {
3+
var editors = atom.workspace.getTextEditors();
4+
editors.forEach(function (editor) {
5+
editor.destroy();
6+
});
7+
}
8+
exports.closeAllPanels = closeAllPanels;
9+
function quit() {
10+
}
11+
exports.quit = quit;
12+
function openFolder() {
13+
atom.open();
14+
}
15+
exports.openFolder = openFolder;
16+
var consoleHasOpened = false;
17+
function toggleDevTools() {
18+
if (!consoleHasOpened) {
19+
consoleHasOpened = true;
20+
console.log('Atom-CodeRoad: runs on save');
21+
}
22+
atom.toggleDevTools();
23+
}
24+
exports.toggleDevTools = toggleDevTools;
25+
function openDevTools() {
26+
atom.openDevTools();
27+
consoleHasOpened = true;
28+
}
29+
exports.openDevTools = openDevTools;
30+
function openTerminal() {
31+
if (atom.packages.isPackageActive('terminal-plus')) {
32+
if (!document.getElementsByClassName('xterm')[0]) {
33+
atom.commands.dispatch(document.getElementsByTagName('atom-workspace')[0], 'terminal-plus:toggle');
34+
}
35+
return true;
36+
}
37+
return false;
38+
}
39+
exports.openTerminal = openTerminal;

lib/atom/editor.js

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
"use strict";
2+
var fs = require('fs');
3+
var exists_1 = require('../services/exists');
4+
var getEditorCount = 0;
5+
function save() {
6+
var editor = findEditor();
7+
editor.save();
8+
}
9+
exports.save = save;
10+
function findEditor() {
11+
var editor = atom.workspace.getActiveTextEditor();
12+
var max = 1000;
13+
if (!editor) {
14+
getEditorCount += 1;
15+
setTimeout(function () {
16+
return findEditor();
17+
}, 10);
18+
}
19+
else if (getEditorCount > max) {
20+
console.log('Failed to find active editor');
21+
return null;
22+
}
23+
else {
24+
getEditorCount = 0;
25+
return editor;
26+
}
27+
}
28+
exports.findEditor = findEditor;
29+
function getEditor() {
30+
return new Promise(function (resolve, reject) {
31+
resolve(findEditor());
32+
});
33+
}
34+
exports.getEditor = getEditor;
35+
function open(filePath, options) {
36+
if (options === void 0) { options = {}; }
37+
if (exists_1.fileExists(filePath)) {
38+
fs.unlink(filePath);
39+
}
40+
atom.workspace.open(filePath, options);
41+
return true;
42+
}
43+
exports.open = open;
44+
function set(text) {
45+
return getEditor().then(function (editor) {
46+
editor.setText(text);
47+
editor.insertNewline();
48+
editor.moveToBottom();
49+
editor.save();
50+
setCursorPosition(editor);
51+
});
52+
}
53+
exports.set = set;
54+
function insert(text, options) {
55+
if (options === void 0) { options = {}; }
56+
options = Object.assign(options, {
57+
autoIndent: true
58+
});
59+
return getEditor().then(function (editor) {
60+
editor.moveToBottom();
61+
editor.insertText(text, options);
62+
editor.insertNewline();
63+
editor.moveToBottom();
64+
editor.save();
65+
setCursorPosition(editor);
66+
});
67+
}
68+
exports.insert = insert;
69+
function setCursorPosition(editor) {
70+
editor.scan(/::>/g, function (match) {
71+
var start = match.range.start;
72+
match.replace('');
73+
editor.setCursorScreenPosition(start, { autoscroll: true });
74+
});
75+
}

lib/atom/main.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
'use strict';
2+
var render_1 = require('../components/render');
3+
var polyfills_1 = require('../services/polyfills');
4+
var subscriptions_1 = require('./subscriptions');
5+
function setDir() {
6+
if (atom.project.rootDirectories.length > 0) {
7+
return atom.project.rootDirectories[0].path;
8+
}
9+
else {
10+
return null;
11+
}
12+
}
13+
function setWin() {
14+
return navigator.appVersion.indexOf('Win') > -1;
15+
}
16+
var Main = (function () {
17+
function Main() {
18+
window.coderoad = {
19+
dir: setDir(),
20+
win: setWin()
21+
};
22+
polyfills_1.default();
23+
this.root = render_1.initRoot();
24+
}
25+
Main.prototype.activate = function () {
26+
atom.workspace.addRightPanel({
27+
item: this.root,
28+
priority: 0
29+
});
30+
subscriptions_1.onActivate();
31+
render_1.render(this.root);
32+
};
33+
Main.prototype.consumeStatusBar = function (statusBar) {
34+
this.statusBarTile = subscriptions_1.addToStatusBar(statusBar);
35+
};
36+
Main.prototype.deactivate = function () {
37+
if (this.statusBarTile) {
38+
this.statusBarTile.destroy();
39+
this.statusBarTile = null;
40+
}
41+
subscriptions_1.onDeactivate();
42+
};
43+
Main.prototype.toggle = function () {
44+
render_1.togglePanel();
45+
};
46+
return Main;
47+
}());
48+
;
49+
module.exports = new Main();

0 commit comments

Comments
 (0)