fix(Nav): Avatar should light up brownie #10581
This commit is contained in:
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 };
|
|
30
common/app/components/Nav/Avatar-Points-Nav-Item.jsx
Normal file
30
common/app/components/Nav/Avatar-Points-Nav-Item.jsx
Normal 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
|
||||||
|
};
|
@ -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>
|
||||||
|
@ -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>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
@ -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') [ #{user.points} ]
|
|
||||||
li.hidden-xs.hidden-sm.avatar
|
|
||||||
a(href='/settings')
|
a(href='/settings')
|
||||||
|
span.brownie-points-nav [ #{user.points} ]
|
||||||
|
span.hidden-xs.hidden-sm.avatar
|
||||||
img.profile-picture.float-right(src='#{user.picture}')
|
img.profile-picture.float-right(src='#{user.picture}')
|
||||||
|
Reference in New Issue
Block a user