website/_includes/nav.html (102 lines of code) (raw):
<div id="fixed_header" class="fixedHeaderContainer{% if include.alwayson %} visible{% endif %}">
<header>
<a href="{{ site.url }}{{ site.baseurl }}/"><img src="{{ site.baseurl }}/static/logo.png" alt=""/><h2>{{ site.title }}</h2></a>
<div class="navigationWrapper navigationFull" id="flat_nav">
<nav class="navigation" role="navigation" aria-label="Website navigation">
<ul>
{% for item in site.data.nav %}
<li class="navItem {% if page.collection == item.category or page.category == item.category %}navItemActive{% endif %}">
<a href={{ item.href }}>{{ item.title }}</a>
</li>
{% endfor %}
</ul>
</nav>
</div>
<div class="navigationWrapper navigationSlider" id="navigation_wrap"></div>
</header>
<script>
var event = document.createEvent('Event');
event.initEvent('slide', true, true);
document.addEventListener('slide', function (e) {
document.body.classList.toggle('sliderActive');
}, false);
var navData = [
{% for item in site.data.nav %}
{
href : "{{ item.href }}",
text : "{{ item.title }}",
},
{% endfor %}
];
</script>
<script type="text/javascript">
window.addEventListener('load', function() {
var Nav = React.createClass({displayName: "Nav",
getInitialState: function() {
return {
currentPath: window.location.pathname,
slideoutActive: false,
};
},
getDefaultProps: function() {
return {
data: navData,
}
},
handleClick: function(id) {
this.setState({
slideoutActive: false,
});
document.dispatchEvent(event);
},
handleSlide: function(id) {
this.setState({
slideoutActive: !this.state.slideoutActive,
});
document.dispatchEvent(event);
},
// TODO: Add aria-label, aria-controls, and aira-expanded
render: function() {
var classes = React.addons.classSet({
'navSlideout': true,
'navSlideoutActive': this.state.slideoutActive,
});
var navClasses = React.addons.classSet({
'slidingNav': true,
'slidingNavActive': this.state.slideoutActive,
});
return (
React.createElement("div", null,
React.createElement("div", {className: classes, onClick: this.handleSlide},
React.createElement("i", {className: "fa fa-bars"})
),
React.createElement("nav", {className: navClasses},
React.createElement("ul", null,
this.props.data.map(this.renderNavItems)
)
)
)
);
},
renderNavItems: function(child, index) {
var classes = React.addons.classSet({
'navItem': true,
'navItemActive': this.state.currentPath === child.href,
});
return (
React.createElement("li", {key: index, className: classes},
React.createElement("a", {onClick: this.handleClick, href: child.href}, child.text)
)
);
},
});
function render(navData) {
React.render(
React.createElement(Nav, {data: navData}),
document.getElementById('navigation_wrap')
);
}
render(navData);
});
</script>
</div>