1
0
mirror of https://github.com/stolksdorf/homebrewery.git synced 2025-12-13 10:15:56 +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

@@ -6,9 +6,10 @@
- Added a button to quickly share your brew to reddit :)
- Disabled Partial Page Rendering unless your brew hits 75 pages or longer
- The brew renderer will now try and use your first page to judge the page size of each of your brews. This allows you now to set landscape and other weird sizes and everthing should work fine :)
- UI on the user page improved slightly
- UI on the user page improved (thanks u/PalaNolho)
- Fixed lists not breaking across columns (thanks u/tyson-nw)
-
- Added a table of contents snippet (thanks u/tullisar)
- Added a multicolumn snippet

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;
}
}
}
}

View File

@@ -1,7 +1,7 @@
{
"name": "homebrewery",
"description": "Create authentic looking D&D homebrews using only markdown",
"version": "2.5.2",
"version": "2.6.0",
"scripts": {
"build": "node_modules/.bin/gulp prod",
"watch": "node_modules/.bin/gulp",