website/_includes/nav_blog.html (75 lines of code) (raw):
<nav class='toc' id="blog_nav"></nav>
<script>
{% assign posts = site.posts limit 10 %}
var blognavData = [
{% for post in posts %}
{
key : "{{ site.baseurl }}{{ post.url }}",
title : "{{ post.title }}",
url : "{{ site.baseurl }}{{ post.url }}",
}{% unless forloop.last %},{% endunless %}
{% endfor %}
];
</script>
<script type="text/javascript">
var BlogNav = React.createClass({displayName: "BlogNav",
getInitialState: function() {
return {
toggleActive: false,
};
},
getDefaultProps: function() {
return {
currentDoc: "{{ page.title }}",
data: blognavData,
}
},
handleSlide: function(id) {
this.setState({
toggleActive: !this.state.toggleActive,
});
},
render: function() {
var classes = React.addons.classSet({
'navToggle': true,
'navToggleActive': this.state.toggleActive,
});
var navClasses = React.addons.classSet({
'toggleNav': true,
'toggleNavActive': this.state.toggleActive,
});
return (
React.createElement("div", {className: navClasses},
React.createElement("section", null,
React.createElement("h3", null, "Recent Posts"),
React.createElement("ul", null,
this.props.data.map(this.renderNavItems),
React.createElement("li", null, React.createElement("a", {href: "/blog/all.html"}, "All posts"))
)
),
React.createElement("div", {className: classes, onClick: this.handleSlide}, React.createElement("i", {className: "fa fa-chevron-circle-down"}))
)
);
},
renderNavItems: function(child, index) {
var itemClasses = React.addons.classSet({
'navListItem': true,
'navListItemActive': this.props.currentDoc === child.title,
});
var classes = React.addons.classSet({
'navItem': true,
'navItemActive': this.props.currentDoc === child.title,
});
return (
React.createElement("li", {className: itemClasses, key: index}, React.createElement("a", {className: classes, href: child.url}, child.title))
);
},
});
function blogNavRender(blognavData) {
React.render(
React.createElement(BlogNav, {data: blognavData}),
document.getElementById('blog_nav')
);
}
// blogNavRender(blognavData); FIXME: uncomment when we have blog posts
</script>