Skip to content

Commit c2aaaba

Browse files
committed
fix test loading, onPageComplete visibility
1 parent 8ecdac0 commit c2aaaba

File tree

17 files changed

+204
-160
lines changed

17 files changed

+204
-160
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
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.5.7] - in progress
6+
- @action(openConsole)
7+
58
## [0.5.6] - 2016-03-12
69
- fixes for Windows
710
- no need to pass `handleLog` to test runner

lib/atom/editor.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,14 @@ exports.openFolder = openFolder;
102102
var consoleHasOpened = false;
103103
function toggleDevTools() {
104104
if (!consoleHasOpened) {
105-
atom.executeJavaScriptInDevTools(console.clear());
106105
consoleHasOpened = true;
107106
console.log('Atom-CodeRoad: runs on save');
108107
}
109108
atom.toggleDevTools();
110109
}
111110
exports.toggleDevTools = toggleDevTools;
111+
function openDevTools() {
112+
atom.openDevTools();
113+
consoleHasOpened = true;
114+
}
115+
exports.openDevTools = openDevTools;

lib/components/page/page-complete.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ var material_ui_1 = require('material-ui');
44
var _components_1 = require('../_components');
55
exports.PageCompleteMessage = function (_a) {
66
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}))
7+
return (React.createElement("div", {className: 'cr-page-onComplete'}, page.completed && page.onPageComplete ?
8+
React.createElement(material_ui_1.ListItem, {key: 'page-complete'}, React.createElement(_components_1.MarkdownText, {text: page.onPageComplete}))
99
: null));
1010
};

lib/components/page/page.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ var default_1 = (function (_super) {
2828
var _a = this.props, page = _a.page, taskPosition = _a.taskPosition, hintPosition = _a.hintPosition, tasks = _a.tasks, runTests = _a.runTests;
2929
var currentTask = taskPosition <= tasks.length ? tasks[taskPosition] : null;
3030
var allComplete = taskPosition >= tasks.length;
31-
return (React.createElement(material_ui_1.Paper, {style: pageStyle, zDepth: 1, className: 'cr-page'}, React.createElement(content_1.default, {page: page}), React.createElement(material_ui_1.Divider, null), React.createElement(task_1.Tasks, {tasks: tasks, taskPosition: taskPosition, runTests: runTests}), React.createElement(hint_1.default, {task: currentTask, hintPosition: hintPosition}), React.createElement(page_complete_1.PageCompleteMessage, {page: page}), React.createElement("div", {ref: 'listEnd'}), React.createElement(toolbar_1.default, {tasks: tasks, taskPosition: taskPosition})));
31+
return (React.createElement(material_ui_1.Paper, {style: pageStyle, zDepth: 1, className: 'cr-page'}, React.createElement(content_1.default, {page: page}), React.createElement(material_ui_1.Divider, null), React.createElement(task_1.Tasks, {tasks: tasks, taskPosition: taskPosition, runTests: runTests}), React.createElement(hint_1.default, {task: currentTask, hintPosition: hintPosition}), React.createElement(page_complete_1.PageCompleteMessage, {page: page}), React.createElement("div", {className: 'listEnd', ref: 'listEnd'}), React.createElement(toolbar_1.default, {tasks: tasks, taskPosition: taskPosition})));
3232
};
3333
return default_1;
3434
}(React.Component));
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
"use strict";
2+
var parser_1 = require('./parser');
3+
function getCommand(actionString) {
4+
var command = actionString.substring(0, actionString.indexOf('('));
5+
if (!command.length) {
6+
console.log('Error loading editor action command ', actionString);
7+
}
8+
else {
9+
return command;
10+
}
11+
}
12+
exports.getCommand = getCommand;
13+
function getParams(actionString) {
14+
var command = getCommand(actionString);
15+
var params = actionString.substring(command.length + 1, actionString.length - 1);
16+
if (!params.length) {
17+
console.error('Error loading editor action params ', actionString);
18+
return null;
19+
}
20+
var paramsList = parser_1.parseParams.getParams(params);
21+
return paramsList;
22+
}
23+
exports.getParams = getParams;
24+
function createObjectFromKeyValString(string) {
25+
var keyValList = string.split(/[:,]/);
26+
var obj = {};
27+
for (var i = 0; i < keyValList.length; i += 2) {
28+
var key = keyValList[i].trim();
29+
var val = keyValList[i + 1].trim();
30+
if (!val.match(/^["'].+["']$/)) {
31+
val = JSON.parse(val);
32+
}
33+
else {
34+
val = val.substring(1, val.length - 1);
35+
}
36+
obj[key] = val;
37+
}
38+
return obj;
39+
}
40+
function getOptions(paramString) {
41+
var hasOptions = paramString.match(/\{(.+)?\}/);
42+
var options = {};
43+
var param = paramString;
44+
if (!!hasOptions) {
45+
options = createObjectFromKeyValString(hasOptions[1]);
46+
param = paramString.split(/, ?{/)[0];
47+
}
48+
return {
49+
options: options,
50+
param: param
51+
};
52+
}
53+
exports.getOptions = getOptions;
Lines changed: 18 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,19 @@
11
"use strict";
22
var Editor = require('../../atom/editor');
3-
var parser_1 = require('./parser');
4-
var EditorAction = {
3+
var action_helpers_1 = require('./action-helpers');
4+
var Type = {
55
open: 'open',
66
set: 'set',
7-
insert: 'insert'
7+
insert: 'insert',
8+
openConsole: 'openConsole'
89
};
9-
function getCommand(actionString) {
10-
var command = actionString.substring(0, actionString.indexOf('('));
11-
if (!command.length) {
12-
console.log('Error loading editor action command ', actionString);
13-
}
14-
else {
15-
return command;
16-
}
17-
}
18-
exports.getCommand = getCommand;
19-
function getParams(actionString) {
20-
var command = getCommand(actionString);
21-
var params = actionString.substring(command.length + 1, actionString.length - 1);
22-
if (!params.length) {
23-
console.error('Error loading editor action params ', actionString);
24-
return null;
25-
}
26-
var paramsList = parser_1.parseParams.getParams(params);
27-
return paramsList;
28-
}
29-
exports.getParams = getParams;
30-
function createObjectFromKeyValString(string) {
31-
var keyValList = string.split(/[:,]/);
32-
var obj = {};
33-
for (var i = 0; i < keyValList.length; i += 2) {
34-
var key = keyValList[i].trim();
35-
var val = keyValList[i + 1].trim();
36-
if (!val.match(/^["'].+["']$/)) {
37-
val = JSON.parse(val);
38-
}
39-
else {
40-
val = val.substring(1, val.length - 1);
41-
}
42-
obj[key] = val;
43-
}
44-
return obj;
45-
}
46-
function getOptions(paramString) {
47-
var hasOptions = paramString.match(/\{(.+)?\}/);
48-
var options = {};
49-
var param = paramString;
50-
if (!!hasOptions) {
51-
options = createObjectFromKeyValString(hasOptions[1]);
52-
param = paramString.split(/, ?{/)[0];
53-
}
54-
return {
55-
options: options,
56-
param: param
57-
};
58-
}
59-
exports.getOptions = getOptions;
6010
function editorActions(actionString) {
6111
return new Promise(function (resolve, reject) {
62-
var command = getCommand(actionString);
63-
var params = getParams(actionString);
12+
var command = action_helpers_1.getCommand(actionString);
13+
var params = action_helpers_1.getParams(actionString);
6414
switch (command) {
65-
case EditorAction.open:
66-
var obj = getOptions(params[0]);
15+
case Type.open:
16+
var obj = action_helpers_1.getOptions(params[0]);
6717
var file = obj.param;
6818
var options = obj.options;
6919
if (params.length === 1) {
@@ -73,7 +23,7 @@ function editorActions(actionString) {
7323
}, 100);
7424
}
7525
break;
76-
case EditorAction.set:
26+
case Type.set:
7727
if (params.length === 1) {
7828
var content_1 = params[0];
7929
setTimeout(function () {
@@ -82,7 +32,7 @@ function editorActions(actionString) {
8232
});
8333
}
8434
break;
85-
case EditorAction.insert:
35+
case Type.insert:
8636
if (params.length === 1) {
8737
var content_2 = params[0];
8838
setTimeout(function () {
@@ -91,6 +41,14 @@ function editorActions(actionString) {
9141
});
9242
}
9343
break;
44+
case Type.openConsole:
45+
if (params.length === 0) {
46+
setTimeout(function () {
47+
Editor.openDevTools();
48+
resolve(true);
49+
});
50+
}
51+
break;
9452
default:
9553
console.log('Invalid editor action command');
9654
reject(false);
@@ -100,7 +58,3 @@ function editorActions(actionString) {
10058
});
10159
}
10260
exports.editorActions = editorActions;
103-
function openFolder() {
104-
atom.open();
105-
}
106-
exports.openFolder = openFolder;

lib/reducers/task-tests/concat-tests.js

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,30 @@
11
"use strict";
22
var fs = require('fs');
3+
function unlink(targetFile) {
4+
return new Promise(function (resolve) {
5+
if (fs.existsSync(targetFile)) {
6+
fs.unlink(targetFile);
7+
}
8+
resolve();
9+
});
10+
}
311
function concatTests(targetFile, files) {
412
console.log('files', files);
5-
if (fs.existsSync(targetFile)) {
6-
fs.unlink(targetFile);
7-
}
8-
files.forEach(function (test) { return readAppend(targetFile, test); });
13+
unlink(targetFile).then(function () {
14+
files.forEach(function (test) {
15+
return new Promise(function (resolve) {
16+
resolve(readAppend(targetFile, test));
17+
});
18+
});
19+
});
920
return targetFile;
1021
}
1122
exports.concatTests = concatTests;
1223
function readAppend(targetFile, file) {
1324
try {
1425
var data = fs.readFileSync(file, 'utf8');
1526
fs.appendFileSync(targetFile, data, 'utf8');
16-
return;
27+
return true;
1728
}
1829
catch (e) {
1930
console.log('Error reading test file', e);

package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,7 @@
5858
},
5959
"scripts": {
6060
"test": "ava",
61-
"styles": "lessc src/components/_app.less styles/styles.css",
6261
"compile": "tsc",
63-
"build": "npm run styles && npm run compile"
62+
"build": "npm run compile"
6463
}
6564
}

src/atom/editor.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,9 +115,14 @@ let consoleHasOpened = false;
115115
export function toggleDevTools() {
116116
if (!consoleHasOpened) {
117117
// clear console on first run
118-
atom.executeJavaScriptInDevTools(console.clear());
118+
// atom.executeJavaScriptInDevTools(console.clear());
119119
consoleHasOpened = true;
120-
console.log('Atom-CodeRoad: runs on save')
120+
console.log('Atom-CodeRoad: runs on save');
121121
}
122122
atom.toggleDevTools();
123123
}
124+
125+
export function openDevTools() {
126+
atom.openDevTools();
127+
consoleHasOpened = true;
128+
}

src/components/_app.less

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
@import 'ui-variables';
12
@import './routes/_routes';
23
@import './menu/_menu';
34
@import './page/_chapter';
@@ -6,9 +7,6 @@
67
@import './alert/_alert';
78
@import './start/_start';
89

9-
@import "ui-variables";
10-
@import "ui-mixins";
11-
1210
atom-panel-container > atom-panel > #crv {
1311
animation: slide 0.3s forwards;
1412
animation-timing-function: ease-in-out;

src/components/page/_page.less

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
.cr-page {
22
position: relative;
3+
&-listEnd {
4+
height: 70px;
5+
}
6+
&-onComplete {
7+
margin-bottom: 70px;
8+
}
39
&-toolbar {
410
position: fixed;
511
bottom: 0;
612
right: 0;
713
height: 60px;
814
width: 400px;
9-
&-completed {
10-
height: 200px;
11-
}
1215
}
1316
}
1417
.cr-tasks {

src/components/page/page-complete.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ import {ListItem} from 'material-ui';
33
import {MarkdownText} from '../_components';
44

55
export const PageCompleteMessage = ({page}) => (
6-
<div className='cr-task-onComplete-description'>
6+
<div className='cr-page-onComplete'>
77
{page.completed && page.onPageComplete ?
8-
<ListItem className='cr-task-onComplete' key='page-complete'>
8+
<ListItem key='page-complete'>
99
<MarkdownText text={page.onPageComplete} />
1010
</ListItem>
1111
: null}

src/components/page/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ render() {
4141
<Tasks tasks={tasks} taskPosition={taskPosition} runTests={runTests} />
4242
<Hints task={currentTask} hintPosition={hintPosition} />
4343
<PageCompleteMessage page={page} />
44-
<div ref='listEnd'></div>
44+
<div className='listEnd' ref='listEnd'></div>
4545

4646
<PageToolbar tasks={tasks} taskPosition={taskPosition} />
4747
</Paper>
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import {parseParams} from './parser';
2+
3+
export function getCommand(actionString: string): string {
4+
// content before bracket
5+
let command = actionString.substring(0, actionString.indexOf('('));
6+
if (!command.length) {
7+
console.log('Error loading editor action command ', actionString);
8+
} else {
9+
return command;
10+
}
11+
}
12+
13+
14+
export function getParams(actionString: string): string[] {
15+
// content in brackets, split by comma
16+
let command = getCommand(actionString);
17+
let params = actionString.substring(command.length + 1, actionString.length - 1); // trim brackets
18+
if (!params.length) {
19+
console.error('Error loading editor action params ', actionString);
20+
return null;
21+
}
22+
let paramsList: string[] = parseParams.getParams(params);
23+
return paramsList;
24+
}
25+
26+
function createObjectFromKeyValString(string: string): Object {
27+
let keyValList: string[] = string.split(/[:,]/);
28+
let obj = {};
29+
for (let i = 0; i < keyValList.length; i += 2) {
30+
let key = keyValList[i].trim();
31+
let val = keyValList[i + 1].trim();
32+
if (!val.match(/^["'].+["']$/)) {
33+
// not a string
34+
val = JSON.parse(val);
35+
} else {
36+
// string, remove extra quotes
37+
val = val.substring(1, val.length - 1);
38+
}
39+
obj[key] = val;
40+
}
41+
return obj;
42+
}
43+
44+
export function getOptions(paramString: string): { param: string, options: Object } {
45+
let hasOptions = paramString.match(/\{(.+)?\}/);
46+
let options = {};
47+
let param = paramString;
48+
if (!!hasOptions) {
49+
options = createObjectFromKeyValString(hasOptions[1]);
50+
param = paramString.split(/, ?{/)[0];
51+
}
52+
return {
53+
options,
54+
param
55+
};
56+
}

0 commit comments

Comments
 (0)