0
0
mirror of https://github.com/naturalcrit/homebrewery.git synced 2026-01-03 19:12:41 +00:00

Greatly improved the user page UI

This commit is contained in:
Scott Tolksdorf
2016-12-03 16:27:15 -05:00
parent be783e5f6b
commit e5ffb7c629
8 changed files with 96 additions and 30 deletions

View File

@@ -16,6 +16,8 @@ const BrewRenderer = React.createClass({
};
},
getInitialState: function() {
const pages = this.props.text.split('\\page');
return {
viewablePageNumber: 0,
height : 0,
@@ -23,7 +25,8 @@ const BrewRenderer = React.createClass({
usePPR : true,
pages : [],
pages : pages,
usePPR : pages.length >= PPR_THRESHOLD,
errors : []
};

View File

@@ -5,6 +5,7 @@ const cx = require('classnames');
const Nav = require('naturalcrit/nav/nav.jsx');
const Navbar = require('../../navbar/navbar.jsx');
const PrintLink = require('../../navbar/print.navitem.jsx');
const ReportIssue = require('../../navbar/issue.navitem.jsx');
//const RecentlyViewed = require('../../navbar/recent.navitem.jsx').viewed;
const Account = require('../../navbar/account.navitem.jsx');
@@ -34,10 +35,12 @@ const SharePage = React.createClass({
},
handleControlKeys : function(e){
if(!(e.ctrlKey || e.metaKey)) return;
e.stopPropagation();
e.preventDefault();
const P_KEY = 80;
if(e.keyCode == P_KEY) window.open(`/print/${this.props.brew.shareId}?dialog=true`, '_blank').focus();
if(e.keyCode == P_KEY){
window.open(`/print/${this.props.brew.shareId}?dialog=true`, '_blank').focus();
e.stopPropagation();
e.preventDefault();
}
},
render : function(){
@@ -48,6 +51,7 @@ const SharePage = React.createClass({
</Nav.section>
<Nav.section>
<ReportIssue />
{/*<RecentlyViewed brew={this.props.brew} />*/}
<PrintLink shareId={this.props.brew.shareId} />
<Nav.item href={'/source/' + this.props.brew.shareId} color='teal' icon='fa-code'>

View File

@@ -15,23 +15,39 @@ const BrewItem = React.createClass({
};
},
renderEditLink: function(){
if(!this.props.brew.editId) return;
return <a href={`/edit/${this.props.brew.editId}`} target='_blank'>
<i className='fa fa-pencil' />
</a>
},
render : function(){
const brew = this.props.brew;
return <div className='brewItem'title={brew.description}>
<h4>{brew.title}</h4>
<p className='description' ><em>{brew.description}</em></p>
return <div className='brewItem'>
<h2>{brew.title}</h2>
<p className='description' >{brew.description}</p>
<hr />
<ul>
<li><strong>Authors: </strong> {brew.authors.join(', ')}</li>
<li>
<strong>Last updated: </strong>
{moment(brew.updatedAt).fromNow()}
</li>
<li><strong>Views: </strong> {brew.views} </li>
</ul>
<a href={`/share/${brew.shareId}`} target='_blank'>Share link</a>
{(!!brew.editId ? <a href={`/edit/${brew.editId}`} target='_blank'>Edit link</a> : null)}
<div className='info'>
<span>
<i className='fa fa-user' /> {brew.authors.join(', ')}
</span>
<span>
<i className='fa fa-eye' /> {brew.views}
</span>
<span>
<i className='fa fa-refresh' /> {moment(brew.updatedAt).fromNow()}
</span>
</div>
<div className='links'>
<a href={`/share/${brew.shareId}`} target='_blank'>
<i className='fa fa-share-alt' />
</a>
{this.renderEditLink()}
</div>
</div>
}
});

View File

@@ -1,21 +1,60 @@
.brewItem{
position : relative;
display : inline-block;
vertical-align : top;
box-sizing : border-box;
width : 30%;
box-sizing : border-box;
overflow : hidden;
width : 48%;
margin-right : 15px;
margin-bottom : 15px;
padding : 5px 15px 5px 8px;
padding-right : 15px;
border : 1px solid #c9ad6a;
border-radius : 5px;
-webkit-column-break-inside : avoid;
page-break-inside : avoid;
break-inside : avoid;
p.description{
//overflow : hidden;
//width : 90%;
//text-overflow : ellipsis;
white-space : nowrap;
h4{
margin-bottom : 5px;
font-size : 2.2em;
}
a{
margin-right : 10px;
.info{
font-family : ScalySans;
font-size : 1.2em;
&>span{
margin-right : 15px;
}
}
&:hover{
.links{
opacity : 1;
}
}
&:nth-child(2n + 1){
margin-right : 0px;
}
.links{
.animate(opacity);
position : absolute;
top : 0px;
right : 0px;
height : 100%;
width : 2em;
opacity : 0;
background-color : fade(black, 60%);
text-align : center;
a{
.animate(opacity);
display : block;
margin : 8px 0px;
opacity : 0.6;
font-size : 1.3em;
color : white;
&:hover{
opacity : 1;
}
}
}
}

View File

@@ -26,9 +26,11 @@ const UserPage = React.createClass({
},
renderBrews : function(brews){
if(!brews || !brews.length) return <div className='noBrews'>No Brews.</div>
if(!brews || !brews.length) return <div className='noBrews'>No Brews.</div>;
return _.map(brews, (brew, idx) => {
const sortedBrews = _.sortBy(brews, (brew)=>{ return brew.title; });
return _.map(sortedBrews, (brew, idx) => {
return <BrewItem brew={brew} key={idx}/>
});
},

View File

@@ -27,6 +27,7 @@
font-size : 1.3em;
font-style : italic;
}
}
}
}