crude-docs
Version:
A sample docs generator and easy to use!!
122 lines (105 loc) • 2.35 kB
JavaScript
import React,{Component, Fragment, createContext} from 'react';
import Frame from './layout/mainFrame';
import names from './util/classNames';
import {
Row,
Col,
List,
Icon
} from 'antd';
import './static/main.scss';
import './static/doc.scss';
import {Provider as CurtLinkProvider } from './components/linkContext';
let {Item} = List;
let CurtLinkContext = React.createContext();
export {
CurtLinkContext
}
export default function Doc(props){
let {
article,
docs,
navLink
} = props;
return (
<CurtLinkProvider value={{navLink}}>
<Frame>
<Row className="docpage-body">
<Col span={5} className="outline-wrap">
{docs.map((block, indx)=>(
<OutlineBlock key={indx} block={block} />
))}
</Col>
<Col
className="article-wrap"
span={19}
>
<div
className="md-content"
dangerouslySetInnerHTML={{
__html: article
}}
>
</div>
</Col>
</Row>
</Frame>
</CurtLinkProvider>
);
}
class OutlineBlock extends Component {
constructor(props){
super(props);
this.state = {
open: true
}
}
toggle=()=>{
// this.setState({
// open: !this.state.open
// })
}
render(){
let {block} = this.props;
let {open} = this.state;
return (
<div
className="category-block"
>
<div
className="block-header"
onClick={this.toggle}
>
<h3>{block.title}</h3>
{/* <Icon
type={open? 'up': 'down'}
style={{
fontSize: 16,
fontWeight: 700,
marginLeft: 10
}}
/> */}
</div>
<List
style={{
height: open? 'auto': 0,
transition: 'height 0.2s',
overflow: 'hidden',
}}
size="small"
split={false}
dataSource={block.list}
renderItem={(item,i)=>{
let lk = block.links[i];
return (
<a
href={lk.url}
className={names({active: lk.active})}
>{item[1]}</a>
)
}}
/>
</div>
)
}
}