mirror of
https://github.com/stolksdorf/homebrewery.git
synced 2025-12-13 06:55:57 +00:00
Greatly improved the user page UI
This commit is contained in:
@@ -6,9 +6,10 @@
|
|||||||
- Added a button to quickly share your brew to reddit :)
|
- Added a button to quickly share your brew to reddit :)
|
||||||
- Disabled Partial Page Rendering unless your brew hits 75 pages or longer
|
- 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 :)
|
- 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)
|
- Fixed lists not breaking across columns (thanks u/tyson-nw)
|
||||||
-
|
- Added a table of contents snippet (thanks u/tullisar)
|
||||||
|
- Added a multicolumn snippet
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ const BrewRenderer = React.createClass({
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
getInitialState: function() {
|
getInitialState: function() {
|
||||||
|
const pages = this.props.text.split('\\page');
|
||||||
|
|
||||||
return {
|
return {
|
||||||
viewablePageNumber: 0,
|
viewablePageNumber: 0,
|
||||||
height : 0,
|
height : 0,
|
||||||
@@ -23,7 +25,8 @@ const BrewRenderer = React.createClass({
|
|||||||
|
|
||||||
usePPR : true,
|
usePPR : true,
|
||||||
|
|
||||||
pages : [],
|
pages : pages,
|
||||||
|
usePPR : pages.length >= PPR_THRESHOLD,
|
||||||
|
|
||||||
errors : []
|
errors : []
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ const cx = require('classnames');
|
|||||||
const Nav = require('naturalcrit/nav/nav.jsx');
|
const Nav = require('naturalcrit/nav/nav.jsx');
|
||||||
const Navbar = require('../../navbar/navbar.jsx');
|
const Navbar = require('../../navbar/navbar.jsx');
|
||||||
const PrintLink = require('../../navbar/print.navitem.jsx');
|
const PrintLink = require('../../navbar/print.navitem.jsx');
|
||||||
|
const ReportIssue = require('../../navbar/issue.navitem.jsx');
|
||||||
//const RecentlyViewed = require('../../navbar/recent.navitem.jsx').viewed;
|
//const RecentlyViewed = require('../../navbar/recent.navitem.jsx').viewed;
|
||||||
const Account = require('../../navbar/account.navitem.jsx');
|
const Account = require('../../navbar/account.navitem.jsx');
|
||||||
|
|
||||||
@@ -34,10 +35,12 @@ const SharePage = React.createClass({
|
|||||||
},
|
},
|
||||||
handleControlKeys : function(e){
|
handleControlKeys : function(e){
|
||||||
if(!(e.ctrlKey || e.metaKey)) return;
|
if(!(e.ctrlKey || e.metaKey)) return;
|
||||||
e.stopPropagation();
|
|
||||||
e.preventDefault();
|
|
||||||
const P_KEY = 80;
|
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(){
|
render : function(){
|
||||||
@@ -48,6 +51,7 @@ const SharePage = React.createClass({
|
|||||||
</Nav.section>
|
</Nav.section>
|
||||||
|
|
||||||
<Nav.section>
|
<Nav.section>
|
||||||
|
<ReportIssue />
|
||||||
{/*<RecentlyViewed brew={this.props.brew} />*/}
|
{/*<RecentlyViewed brew={this.props.brew} />*/}
|
||||||
<PrintLink shareId={this.props.brew.shareId} />
|
<PrintLink shareId={this.props.brew.shareId} />
|
||||||
<Nav.item href={'/source/' + this.props.brew.shareId} color='teal' icon='fa-code'>
|
<Nav.item href={'/source/' + this.props.brew.shareId} color='teal' icon='fa-code'>
|
||||||
|
|||||||
@@ -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(){
|
render : function(){
|
||||||
const brew = this.props.brew;
|
const brew = this.props.brew;
|
||||||
return <div className='brewItem'title={brew.description}>
|
return <div className='brewItem'>
|
||||||
<h4>{brew.title}</h4>
|
<h2>{brew.title}</h2>
|
||||||
<p className='description' ><em>{brew.description}</em></p>
|
<p className='description' >{brew.description}</p>
|
||||||
<hr />
|
<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>
|
<div className='info'>
|
||||||
{(!!brew.editId ? <a href={`/edit/${brew.editId}`} target='_blank'>Edit link</a> : null)}
|
<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>
|
</div>
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,21 +1,60 @@
|
|||||||
|
|
||||||
.brewItem{
|
.brewItem{
|
||||||
|
position : relative;
|
||||||
display : inline-block;
|
display : inline-block;
|
||||||
vertical-align : top;
|
vertical-align : top;
|
||||||
box-sizing : border-box;
|
box-sizing : border-box;
|
||||||
width : 30%;
|
box-sizing : border-box;
|
||||||
|
overflow : hidden;
|
||||||
|
width : 48%;
|
||||||
|
margin-right : 15px;
|
||||||
margin-bottom : 15px;
|
margin-bottom : 15px;
|
||||||
|
padding : 5px 15px 5px 8px;
|
||||||
padding-right : 15px;
|
padding-right : 15px;
|
||||||
|
border : 1px solid #c9ad6a;
|
||||||
|
border-radius : 5px;
|
||||||
-webkit-column-break-inside : avoid;
|
-webkit-column-break-inside : avoid;
|
||||||
page-break-inside : avoid;
|
page-break-inside : avoid;
|
||||||
break-inside : avoid;
|
break-inside : avoid;
|
||||||
p.description{
|
h4{
|
||||||
//overflow : hidden;
|
margin-bottom : 5px;
|
||||||
//width : 90%;
|
font-size : 2.2em;
|
||||||
//text-overflow : ellipsis;
|
|
||||||
white-space : nowrap;
|
|
||||||
}
|
}
|
||||||
a{
|
.info{
|
||||||
margin-right : 10px;
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -26,9 +26,11 @@ const UserPage = React.createClass({
|
|||||||
},
|
},
|
||||||
|
|
||||||
renderBrews : function(brews){
|
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}/>
|
return <BrewItem brew={brew} key={idx}/>
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -27,6 +27,7 @@
|
|||||||
font-size : 1.3em;
|
font-size : 1.3em;
|
||||||
font-style : italic;
|
font-style : italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "homebrewery",
|
"name": "homebrewery",
|
||||||
"description": "Create authentic looking D&D homebrews using only markdown",
|
"description": "Create authentic looking D&D homebrews using only markdown",
|
||||||
"version": "2.5.2",
|
"version": "2.6.0",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "node_modules/.bin/gulp prod",
|
"build": "node_modules/.bin/gulp prod",
|
||||||
"watch": "node_modules/.bin/gulp",
|
"watch": "node_modules/.bin/gulp",
|
||||||
|
|||||||
Reference in New Issue
Block a user