Skip to content

Commit 1bd370f

Browse files
committed
navigate page description
1 parent 259217a commit 1bd370f

File tree

9 files changed

+98
-15
lines changed

9 files changed

+98
-15
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
"use strict";
2+
var _this = this;
3+
var React = require('react');
4+
var index_1 = require('../../index');
5+
var Card_1 = require('material-ui/Card');
6+
var styles = {
7+
margin: '5px'
8+
};
9+
var PageDescription = function (_a) {
10+
var title = _a.title, content = _a.content, open = _a.open, click = _a.click;
11+
var contentArray = content.split('\n\n');
12+
return (React.createElement(Card_1.Card, {style: styles, initiallyExpanded: open || false}, title
13+
? React.createElement(Card_1.CardHeader, {title: title, actAsExpander: true, showExpandableButton: true}) : null, React.createElement(Card_1.CardText, {expandable: true}, contentArray.map(function (c) { return (React.createElement(index_1.Markdown, {onClick: click.bind(_this, c)}, c)); }))));
14+
};
15+
Object.defineProperty(exports, "__esModule", { value: true });
16+
exports.default = PageDescription;

lib/components/Page/index.js

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,21 @@ var __extends = (this && this.__extends) || function (d, b) {
44
function __() { this.constructor = d; }
55
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
66
};
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;
12+
};
13+
var __metadata = (this && this.__metadata) || function (k, v) {
14+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
15+
};
716
var React = require('react');
8-
var index_1 = require('../index');
17+
var react_redux_1 = require('react-redux');
18+
var PageDescription_1 = require('./PageDescription');
919
var Tasks_1 = require('./Tasks');
1020
var Top_1 = require('../TopPanel/Top');
21+
var actions_1 = require('../../actions');
1122
var styles = {
1223
width: '100%',
1324
overflowY: 'scroll',
@@ -24,13 +35,21 @@ var Page = (function (_super) {
2435
Top_1.default.toggle(false);
2536
};
2637
Page.prototype.render = function () {
27-
var _a = this.props, tutorial = _a.tutorial, pagePosition = _a.pagePosition, packageJson = _a.packageJson;
38+
var _a = this.props, tutorial = _a.tutorial, pagePosition = _a.pagePosition, packageJson = _a.packageJson, markdownOpen = _a.markdownOpen;
2839
var page = tutorial.pages[pagePosition];
2940
if (!page) {
3041
return null;
3142
}
32-
return (React.createElement("section", {style: styles, className: 'cr-page'}, React.createElement(index_1.ContentCard, {title: page.title, content: page.description, open: true}), React.createElement(Tasks_1.default, {tasks: page.tasks, page: page, config: packageJson.config, pagePosition: pagePosition})));
43+
return (React.createElement("section", {style: styles, className: 'cr-page'}, React.createElement(PageDescription_1.default, {title: page.title, content: page.description, open: true, click: markdownOpen.bind(this)}), React.createElement(Tasks_1.default, {tasks: page.tasks, page: page, config: packageJson.config, pagePosition: pagePosition})));
3344
};
45+
Page = __decorate([
46+
react_redux_1.connect(null, function (dispatch) {
47+
return {
48+
markdownOpen: function (content) { return dispatch(actions_1.editorMarkdownOpen(null, content)); }
49+
};
50+
}),
51+
__metadata('design:paramtypes', [])
52+
], Page);
3453
return Page;
3554
}(React.Component));
3655
Object.defineProperty(exports, "__esModule", { value: true });

lib/components/common/Markdown.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ function formatText(text) {
2424
}
2525
;
2626
var Markdown = function (_a) {
27-
var style = _a.style, children = _a.children;
28-
return (React.createElement("span", {className: 'cr-markdown', style: style ? style : null, dangerouslySetInnerHTML: { __html: formatText(children) }}));
27+
var style = _a.style, children = _a.children, onClick = _a.onClick;
28+
return (React.createElement("span", {className: 'cr-markdown', onClick: onClick, style: style ? style : null, dangerouslySetInnerHTML: { __html: formatText(children) }}));
2929
};
3030
Object.defineProperty(exports, "__esModule", { value: true });
3131
exports.default = Markdown;

lib/subscriptions.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@ function onActivate() {
1212
}));
1313
atom.workspace.observeTextEditors(function (editor) {
1414
subscriptions.add(editor.onDidSave(function () {
15-
store_1.default.dispatch(actions_1.tutorialBuild());
16-
store_1.default.dispatch(actions_1.tutorialLoad());
15+
if (store_1.default.getState().window) {
16+
store_1.default.dispatch(actions_1.tutorialBuild());
17+
store_1.default.dispatch(actions_1.tutorialLoad());
18+
}
1719
}));
1820
});
1921
return subscriptions;
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import * as React from 'react';
2+
import {Markdown} from '../../index';
3+
import {Card, CardHeader, CardText} from 'material-ui/Card';
4+
5+
const styles = {
6+
margin: '5px'
7+
};
8+
9+
const PageDescription: React.StatelessComponent<{
10+
title: string, content: string, open?: boolean, click: any
11+
}> = ({title, content, open, click}) => {
12+
const contentArray = content.split('\n\n');
13+
return (
14+
<Card
15+
style={styles}
16+
initiallyExpanded={open || false}
17+
>
18+
{title
19+
? <CardHeader
20+
title={title}
21+
actAsExpander={true}
22+
showExpandableButton={true}
23+
/> : null}
24+
<CardText expandable={true}>
25+
{contentArray.map((c: string) => (
26+
<Markdown onClick={click.bind(this, c)}>{c}</Markdown>
27+
))}
28+
</CardText>
29+
</Card>
30+
);
31+
};
32+
export default PageDescription;

src/components/Page/index.tsx

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,26 @@
11
import * as React from 'react';
2+
import {connect} from 'react-redux';
23
import Divider from 'material-ui/Divider';
34
import {Card} from 'material-ui/Card';
4-
import {ContentCard} from '../index';
5+
import PageDescription from './PageDescription';
56
import Tasks from './Tasks';
67
import Top from '../TopPanel/Top';
8+
import {editorMarkdownOpen} from '../../actions';
79

810
const styles = {
911
width: '100%',
1012
overflowY: 'scroll',
1113
};
1214

15+
16+
@connect(null, dispatch => {
17+
return {
18+
markdownOpen: (content: string) => dispatch(editorMarkdownOpen(null, content))
19+
};
20+
})
1321
export default class Page extends React.Component<{
14-
tutorial: CR.Tutorial, pagePosition: number, packageJson: PackageJson
22+
tutorial: CR.Tutorial, pagePosition: number, packageJson: PackageJson,
23+
markdownOpen?: (content: string) => any
1524
}, {}> {
1625
componentDidMount() {
1726
Top.toggle(true);
@@ -20,17 +29,18 @@ export default class Page extends React.Component<{
2029
Top.toggle(false);
2130
}
2231
render() {
23-
const {tutorial, pagePosition, packageJson} = this.props;
32+
const {tutorial, pagePosition, packageJson, markdownOpen} = this.props;
2433
const page = tutorial.pages[pagePosition];
2534

2635
if (!page) { return null; }
2736

2837
return (
2938
<section style={styles} className='cr-page'>
30-
<ContentCard
39+
<PageDescription
3140
title={page.title}
3241
content={page.description}
3342
open={true}
43+
click={markdownOpen.bind(this)}
3444
/>
3545
<Tasks
3646
tasks={page.tasks}

src/components/common/Markdown.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,11 @@ function formatText(text: string): string {
2727
};
2828

2929
const Markdown: React.StatelessComponent<{
30-
children?: string, style?: Object
31-
}> = ({style, children}) => (
30+
children?: string, style?: Object, onClick?: any
31+
}> = ({style, children, onClick}) => (
3232
<span
3333
className='cr-markdown'
34+
onClick={onClick}
3435
style={style ? style : null}
3536
dangerouslySetInnerHTML={
3637
{__html: formatText(children)}

src/subscriptions.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ export function onActivate(): AtomCore.Disposable {
1919
atom.workspace.observeTextEditors((editor: AtomCore.IEditor) => {
2020
subscriptions.add(
2121
editor.onDidSave(() => {
22-
store.dispatch(tutorialBuild());
23-
store.dispatch(tutorialLoad());
22+
if (store.getState().window) {
23+
store.dispatch(tutorialBuild());
24+
store.dispatch(tutorialLoad());
25+
}
2426
}));
2527
});
2628

tsconfig.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
"src/components/Page/EditPage/index.tsx",
8686
"src/components/Page/Hints/index.tsx",
8787
"src/components/Page/index.tsx",
88+
"src/components/Page/PageDescription/index.tsx",
8889
"src/components/Page/Task/index.tsx",
8990
"src/components/Page/Task/taskCheckbox.tsx",
9091
"src/components/Page/TaskActions/index.tsx",

0 commit comments

Comments
 (0)