fix(Nav): Avatar should light up brownie #10581

This commit is contained in:
Adegbuyi Ademola
2016-09-24 18:07:13 +01:00
parent a54d3a6ea4
commit f1a1166173
6 changed files with 72 additions and 106 deletions

View File

@ -156,8 +156,13 @@ h1, h2, h3, h4, h5, h6, p, li {
.navbar > .container { .navbar > .container {
width: auto; width: auto;
padding-left: 0px;
padding-right: 0px; padding-right: 0px;
@media (max-width: 767px) {
// container default padding size
padding-left: 15px;
padding-right: 15px;
}
} }
.nav-height { .nav-height {
@ -318,7 +323,7 @@ h1, h2, h3, h4, h5, h6, p, li {
} }
} }
li.avatar, li.avatar > a { padding:0; margin:0 } li.avatar-points, li.avatar-points > a { padding:0; margin:0 }
.thin-progress-bar { .thin-progress-bar {
height: 8px; height: 8px;
@ -474,8 +479,14 @@ thead {
} }
.brownie-points-nav { .brownie-points-nav {
@media (min-width: 991px) and (max-width: 999px) { @media (min-width: 991px) and (max-width: 1030px) {
margin-right: -10px; float: none !important;
padding-right: 10px;
display: inline-block;
}
@media (min-width: 991px) {
float: left;
padding: 15px;
} }
} }

View File

@ -1,22 +0,0 @@
import React, { PropTypes } from 'react';
import { Link } from 'react-router';
// this is separated out to prevent react bootstrap's
// NavBar from injecting unknown props to the li component
export default function AvatarNavItem({ picture }) {
return (
<li
className='hidden-xs hidden-sm avatar'
key='user'
>
<Link to='/settings'>
<img
className='profile-picture float-right'
src={ picture }
/>
</Link>
</li>
);
}
AvatarNavItem.propTypes = { picture: PropTypes.string };

View File

@ -0,0 +1,30 @@
import React, { PropTypes } from 'react';
import { Link } from 'react-router';
// this is separated out to prevent react bootstrap's
// NavBar from injecting unknown props to the li component
export default function AvatarPointsNavItem({ picture, points }) {
return (
<li
className='avatar-points'
key='user'
>
<Link to='/settings'>
<span className='brownie-points-nav'>
[ { points || 1 } ]
</span>
<span className='hidden-xs hidden-sm avatar'>
<img
className='profile-picture float-right'
src={ picture }
/>
</span>
</Link>
</li>
);
}
AvatarPointsNavItem.propTypes = {
picture: PropTypes.string,
points: React.PropTypes.number
};

View File

@ -10,8 +10,7 @@ import {
} from 'react-bootstrap'; } from 'react-bootstrap';
import navLinks from './links.json'; import navLinks from './links.json';
import PointsNavItem from './Points-Nav-Item.jsx'; import AvatarPointsNavItem from './Avatar-Points-Nav-Item.jsx';
import AvatarNavItem from './Avatar-Nav-Item.jsx';
const fCClogo = 'https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg'; const fCClogo = 'https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg';
@ -163,30 +162,17 @@ export default class extends React.Component {
}); });
} }
renderPoints(username, points, shouldShowSignIn) { renderSignIn(username, points, picture, shouldShowSignIn) {
if (!username || !shouldShowSignIn) {
return null;
}
return (
<LinkContainer
eventKey={ navLinks.length + 1 }
key='points'
to='/settings'
>
<PointsNavItem
className='brownie-points-nav'
points={ points }
/>
</LinkContainer>
);
}
renderSignIn(username, picture, shouldShowSignIn) {
if (!shouldShowSignIn) { if (!shouldShowSignIn) {
return null; return null;
} }
if (username) { if (username) {
return <AvatarNavItem picture={ picture } />; return (
<AvatarPointsNavItem
picture={ picture }
points={ points }
/>
);
} else { } else {
return ( return (
<NavItem <NavItem
@ -216,6 +202,8 @@ export default class extends React.Component {
className='nav-height' className='nav-height'
fixedTop={ true } fixedTop={ true }
> >
<Navbar.Header>
<Navbar.Toggle children={ toggleButtonChild } />
<NavbarBrand> <NavbarBrand>
<a <a
href='/challenges/current-challenge' href='/challenges/current-challenge'
@ -228,7 +216,7 @@ export default class extends React.Component {
/> />
</a> </a>
</NavbarBrand> </NavbarBrand>
<Navbar.Toggle children={ toggleButtonChild } /> </Navbar.Header>
<Navbar.Collapse> <Navbar.Collapse>
<Nav <Nav
className='hamburger-dropdown' className='hamburger-dropdown'
@ -238,8 +226,7 @@ export default class extends React.Component {
{ this.renderMapLink(isOnMap, toggleMapDrawer) } { this.renderMapLink(isOnMap, toggleMapDrawer) }
{ this.renderChat(toggleMainChat) } { this.renderChat(toggleMainChat) }
{ this.renderLinks() } { this.renderLinks() }
{ this.renderPoints(username, points, shouldShowSignIn) } { this.renderSignIn(username, points, picture, shouldShowSignIn) }
{ this.renderSignIn(username, picture, shouldShowSignIn) }
</Nav> </Nav>
</Navbar.Collapse> </Navbar.Collapse>
</Navbar> </Navbar>

View File

@ -1,40 +0,0 @@
import React from 'react';
export default React.createClass({
displayName: 'Points',
propTypes: {
'aria-controls': React.PropTypes.string,
className: React.PropTypes.string,
href: React.PropTypes.string,
onClick: React.PropTypes.func,
points: React.PropTypes.number,
title: React.PropTypes.node
},
render() {
let {
href,
title,
points,
'aria-controls': ariaControls, // eslint-disable-line react/prop-types
className,
onClick
} = this.props;
let linkProps = {
title,
href,
onClick,
className,
ref: 'anchor',
'aria-controls': ariaControls
};
return (
<li role='presentation'>
<a { ...linkProps }>[ { points || 1 } ]</a>
</li>
);
}
});

View File

@ -23,8 +23,8 @@ nav.navbar.navbar-default.navbar-fixed-top.nav-height
li li
a(href='/signup') Sign Up a(href='/signup') Sign Up
else else
li.brownie-points-nav li.avatar-points
a(href='/settings') [&thinsp;#{user.points}&thinsp;]
li.hidden-xs.hidden-sm.avatar
a(href='/settings') a(href='/settings')
span.brownie-points-nav [&thinsp;#{user.points}&thinsp;]
span.hidden-xs.hidden-sm.avatar
img.profile-picture.float-right(src='#{user.picture}') img.profile-picture.float-right(src='#{user.picture}')