mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2026-01-13 10:52:46 +00:00
Moving code between renderer and view
This commit is contained in:
@@ -48,10 +48,10 @@ const SmartNav = Store.createSmartComponent(React.createClass({
|
|||||||
<Nav.section>
|
<Nav.section>
|
||||||
<Items.ContinousSave />
|
<Items.ContinousSave />
|
||||||
<Items.Issue />
|
<Items.Issue />
|
||||||
<Nav.item newTab={true} href={'/share/' + Store.getBrew().shareId} color='teal' icon='fa-share-alt'>
|
<Nav.item newTab={true} href={'/share/' + this.props.brew.shareId} color='teal' icon='fa-share-alt'>
|
||||||
Share
|
Share
|
||||||
</Nav.item>
|
</Nav.item>
|
||||||
<Items.Print />
|
<Items.Print shareId={this.props.brew.shareId} />
|
||||||
<Items.Account />
|
<Items.Account />
|
||||||
</Nav.section>
|
</Nav.section>
|
||||||
</Navbar>
|
</Navbar>
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
const React = require('react');
|
const React = require('react');
|
||||||
const _ = require('lodash');
|
const _ = require('lodash');
|
||||||
const cx = require('classnames');
|
const cx = require('classnames');
|
||||||
|
|
||||||
|
|
||||||
|
const BrewRenderer = require('homebrewery/brewRenderer/brewRenderer.jsx');
|
||||||
|
|
||||||
const Markdown = require('homebrewery/markdown.js');
|
const Markdown = require('homebrewery/markdown.js');
|
||||||
|
|
||||||
const Headtags = require('vitreum/headtags');
|
const Headtags = require('vitreum/headtags');
|
||||||
@@ -30,7 +34,7 @@ const PrintPage = React.createClass({
|
|||||||
});
|
});
|
||||||
}catch(e){}
|
}catch(e){}
|
||||||
}
|
}
|
||||||
if(this.props.query.dialog) window.print();
|
//if(this.props.query.dialog) window.print();
|
||||||
},
|
},
|
||||||
//TODO: Print page shouldn't replicate functionality in brew renderer
|
//TODO: Print page shouldn't replicate functionality in brew renderer
|
||||||
renderStyle : function(){
|
renderStyle : function(){
|
||||||
@@ -58,8 +62,9 @@ const PrintPage = React.createClass({
|
|||||||
return <div className='printPage'>
|
return <div className='printPage'>
|
||||||
<Headtags.title>{this.state.brew.title}</Headtags.title>
|
<Headtags.title>{this.state.brew.title}</Headtags.title>
|
||||||
{this.renderPrintInstructions()}
|
{this.renderPrintInstructions()}
|
||||||
{this.renderStyle()}
|
|
||||||
{this.renderPages()}
|
<BrewRenderer text={this.state.brew.text} style={this.state.brew.style} />
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ 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');
|
||||||
|
|
||||||
const BrewRenderer = require('homebrewery/brewRenderer/brewRenderer.jsx');
|
const BrewView = require('homebrewery/BrewView/BrewView.jsx');
|
||||||
const Utils = require('homebrewery/utils.js');
|
const Utils = require('homebrewery/utils.js');
|
||||||
|
|
||||||
const Actions = require('homebrewery/brew.actions.js');
|
const Actions = require('homebrewery/brew.actions.js');
|
||||||
@@ -56,7 +56,7 @@ const SharePage = React.createClass({
|
|||||||
</Nav.section>
|
</Nav.section>
|
||||||
|
|
||||||
<Nav.section>
|
<Nav.section>
|
||||||
<ReportIssue />
|
<ReportIssue collaspe={true} />
|
||||||
<PrintLink shareId={brew.shareId} />
|
<PrintLink shareId={brew.shareId} />
|
||||||
<Nav.item href={'/source/' + brew.shareId} color='teal' icon='fa-code'>
|
<Nav.item href={'/source/' + brew.shareId} color='teal' icon='fa-code'>
|
||||||
source
|
source
|
||||||
@@ -65,7 +65,7 @@ const SharePage = React.createClass({
|
|||||||
</Nav.section>
|
</Nav.section>
|
||||||
</Navbar>
|
</Navbar>
|
||||||
<div className='content'>
|
<div className='content'>
|
||||||
<BrewRenderer brew={brew} />
|
<BrewView brew={brew}/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,28 +5,21 @@ const cx = require('classnames');
|
|||||||
const OldBrewRenderer = require('depricated/brewRendererOld/brewRendererOld.jsx');
|
const OldBrewRenderer = require('depricated/brewRendererOld/brewRendererOld.jsx');
|
||||||
|
|
||||||
const Markdown = require('homebrewery/markdown.js');
|
const Markdown = require('homebrewery/markdown.js');
|
||||||
const ErrorBar = require('./errorBar/errorBar.jsx');
|
|
||||||
|
|
||||||
const RenderWarnings = require('homebrewery/renderWarnings/renderWarnings.jsx')
|
const PPR_RANGE = 0;
|
||||||
const Store = require('homebrewery/brew.store.js');
|
|
||||||
|
|
||||||
|
|
||||||
const PAGE_HEIGHT = 1056;
|
|
||||||
const PPR_THRESHOLD = 50;
|
|
||||||
|
|
||||||
const BrewRenderer = React.createClass({
|
const BrewRenderer = React.createClass({
|
||||||
getDefaultProps: function() {
|
getDefaultProps: function() {
|
||||||
return {
|
return {
|
||||||
brew : {
|
text : '',
|
||||||
text : '',
|
style : '',
|
||||||
style : ''
|
|
||||||
},
|
|
||||||
|
|
||||||
|
//usePPR : false // TODO: maybe make this into an page index to render
|
||||||
|
|
||||||
//TODO: maybe remove?
|
pprPage : false
|
||||||
errors : []
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
/*
|
||||||
getInitialState: function() {
|
getInitialState: function() {
|
||||||
const pages = this.props.brew.text.split('\\page');
|
const pages = this.props.brew.text.split('\\page');
|
||||||
|
|
||||||
@@ -40,8 +33,12 @@ const BrewRenderer = React.createClass({
|
|||||||
},
|
},
|
||||||
height : 0,
|
height : 0,
|
||||||
pageHeight : PAGE_HEIGHT,
|
pageHeight : PAGE_HEIGHT,
|
||||||
|
|
||||||
|
*/
|
||||||
lastRender : <div></div>,
|
lastRender : <div></div>,
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
componentDidMount: function() {
|
componentDidMount: function() {
|
||||||
this.updateSize();
|
this.updateSize();
|
||||||
window.addEventListener('resize', this.updateSize);
|
window.addEventListener('resize', this.updateSize);
|
||||||
@@ -72,11 +69,8 @@ const BrewRenderer = React.createClass({
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
handleScroll : function(e){
|
|
||||||
this.setState({
|
*/
|
||||||
viewablePageNumber : Math.floor(e.target.scrollTop / this.pageHeight)
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
shouldRender : function(pageText, index){
|
shouldRender : function(pageText, index){
|
||||||
if(!this.state.isMounted) return false;
|
if(!this.state.isMounted) return false;
|
||||||
@@ -92,12 +86,8 @@ const BrewRenderer = React.createClass({
|
|||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
|
|
||||||
renderPageInfo : function(){
|
|
||||||
return <div className='pageInfo'>
|
|
||||||
{this.state.viewablePageNumber + 1} / {this.state.pages.length}
|
|
||||||
</div>
|
|
||||||
},
|
|
||||||
|
|
||||||
|
/*
|
||||||
renderPPRmsg : function(){
|
renderPPRmsg : function(){
|
||||||
if(!this.state.usePPR) return;
|
if(!this.state.usePPR) return;
|
||||||
|
|
||||||
@@ -105,18 +95,25 @@ const BrewRenderer = React.createClass({
|
|||||||
Partial Page Renderer enabled, because your brew is so large. May effect rendering.
|
Partial Page Renderer enabled, because your brew is so large. May effect rendering.
|
||||||
</div>
|
</div>
|
||||||
},
|
},
|
||||||
|
*/
|
||||||
|
|
||||||
renderDummyPage : function(index){
|
|
||||||
return <div className='phb v2' id={`p${index + 1}`} key={index}>
|
|
||||||
<i className='fa fa-spinner fa-spin' />
|
|
||||||
</div>
|
|
||||||
},
|
|
||||||
|
|
||||||
renderPage : function(pageText, index){
|
renderPage : function(pageText, index){
|
||||||
return <div className='phb v2' id={`p${index + 1}`} dangerouslySetInnerHTML={{__html:Markdown.render(pageText)}} key={index} />
|
const html = Markdown.render(pageText);
|
||||||
|
return <div className='phb v2' id={`p${index + 1}`} dangerouslySetInnerHTML={{__html:html}} key={index} />
|
||||||
|
},
|
||||||
|
|
||||||
|
renderPPR : function(pages, pprPageIndex){
|
||||||
|
return _.map(pages, (page, index)=>{
|
||||||
|
if(_.inRange(index, pprPageIndex - PPR_RANGE, pprPageIndex + PPR_RANGE +1)){
|
||||||
|
this.renderPage(page, index);
|
||||||
|
}
|
||||||
|
return <div className='phb v2' id={`p${index + 1}`} key={index} />;
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
renderPages : function(){
|
renderPages : function(){
|
||||||
|
/*
|
||||||
if(this.state.usePPR){
|
if(this.state.usePPR){
|
||||||
return _.map(this.state.pages, (page, index)=>{
|
return _.map(this.state.pages, (page, index)=>{
|
||||||
if(this.shouldRender(page, index)){
|
if(this.shouldRender(page, index)){
|
||||||
@@ -126,38 +123,32 @@ const BrewRenderer = React.createClass({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if(this.props.errors && this.props.errors.length) return this.lastRender;
|
*/
|
||||||
this.lastRender = _.map(this.state.pages, (page, index)=>{
|
const pages = this.props.text.split('\\page');
|
||||||
return this.renderPage(page, index);
|
|
||||||
});
|
console.log(this.props.pprPage);
|
||||||
return this.lastRender;
|
|
||||||
|
if(this.props.pprPage !== false) return this.renderPPR(pages, this.props.pprPage);
|
||||||
|
|
||||||
|
return _.map(pages, (page, index)=>this.renderPage(page, index));
|
||||||
|
|
||||||
|
//TODO: See if you need error handling?
|
||||||
|
//if(this.props.errors && this.props.errors.length) return this.lastRender;
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
//TODO: This is pretty bad
|
//TODO: This is pretty bad
|
||||||
renderStyle : function(){
|
renderStyle : function(){
|
||||||
return <style>{this.props.brew.style.replace(/;/g, ' !important;')}</style>
|
return <style>{this.props.style.replace(/;/g, ' !important;')}</style>
|
||||||
},
|
},
|
||||||
|
|
||||||
render : function(){
|
render : function(){
|
||||||
if(this.props.brew.version == 1) return <OldBrewRenderer value={this.props.brew.text} />;
|
//if(this.props.brew.version == 1) return <OldBrewRenderer value={this.props.brew.text} />;
|
||||||
|
|
||||||
|
|
||||||
return <div className='brewRenderer'
|
|
||||||
onScroll={this.handleScroll}
|
|
||||||
ref='main'
|
|
||||||
style={{height : this.state.height}}>
|
|
||||||
|
|
||||||
<ErrorBar errors={this.props.errors} />
|
|
||||||
<RenderWarnings />
|
|
||||||
|
|
||||||
|
|
||||||
|
return <div className='brewRenderer'>
|
||||||
{this.renderStyle()}
|
{this.renderStyle()}
|
||||||
|
{this.renderPages()}
|
||||||
<div className='pages' ref='pages'>
|
|
||||||
{this.renderPages()}
|
|
||||||
</div>
|
|
||||||
{this.renderPageInfo()}
|
|
||||||
{this.renderPPRmsg()}
|
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,39 +1,2 @@
|
|||||||
|
|
||||||
@import (less) './shared/homebrewery/phb_style/phb.less';
|
@import (less) './shared/homebrewery/phb_style/phb.less';
|
||||||
.pane{
|
|
||||||
position : relative;
|
|
||||||
}
|
|
||||||
.brewRenderer{
|
|
||||||
overflow-y : scroll;
|
|
||||||
.pageInfo{
|
|
||||||
position : absolute;
|
|
||||||
right : 17px;
|
|
||||||
bottom : 0;
|
|
||||||
z-index : 1000;
|
|
||||||
padding : 8px 10px;
|
|
||||||
background-color : #333;
|
|
||||||
font-size : 10px;
|
|
||||||
font-weight : 800;
|
|
||||||
color : white;
|
|
||||||
}
|
|
||||||
.ppr_msg{
|
|
||||||
position : absolute;
|
|
||||||
left : 0px;
|
|
||||||
bottom : 0;
|
|
||||||
z-index : 1000;
|
|
||||||
padding : 8px 10px;
|
|
||||||
background-color : #333;
|
|
||||||
font-size : 10px;
|
|
||||||
font-weight : 800;
|
|
||||||
color : white;
|
|
||||||
}
|
|
||||||
.pages{
|
|
||||||
margin : 30px 0px;
|
|
||||||
&>.phb{
|
|
||||||
margin-right : auto;
|
|
||||||
margin-bottom : 30px;
|
|
||||||
margin-left : auto;
|
|
||||||
box-shadow : 1px 4px 14px #000;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
82
shared/homebrewery/brewView/brewView.jsx
Normal file
82
shared/homebrewery/brewView/brewView.jsx
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
|
||||||
|
const React = require('react');
|
||||||
|
const _ = require('lodash');
|
||||||
|
const cx = require('classnames');
|
||||||
|
|
||||||
|
|
||||||
|
//const ErrorBar = require('./errorBar/errorBar.jsx');
|
||||||
|
|
||||||
|
const RenderWarnings = require('homebrewery/renderWarnings/renderWarnings.jsx');
|
||||||
|
//const Store = require('homebrewery/brew.store.js');
|
||||||
|
|
||||||
|
const PAGE_HEIGHT = 1056;
|
||||||
|
|
||||||
|
|
||||||
|
const BrewRenderer = require('../brewRenderer/brewRenderer.jsx');
|
||||||
|
|
||||||
|
|
||||||
|
const BrewView = React.createClass({
|
||||||
|
getDefaultProps: function() {
|
||||||
|
return {
|
||||||
|
brew : {
|
||||||
|
text : '',
|
||||||
|
style : ''
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
},
|
||||||
|
getInitialState: function() {
|
||||||
|
const pages = this.props.brew.text.split('\\page');
|
||||||
|
|
||||||
|
return {
|
||||||
|
viewablePageNumber: 0,
|
||||||
|
//height : 0,
|
||||||
|
//isMounted : false,
|
||||||
|
pages : pages,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
//height : 0,
|
||||||
|
pageHeight : PAGE_HEIGHT,
|
||||||
|
|
||||||
|
componentWillReceiveProps: function(nextProps) {
|
||||||
|
//if(this.refs.pages && this.refs.pages.firstChild) this.pageHeight = this.refs.pages.firstChild.clientHeight;
|
||||||
|
|
||||||
|
const pages = nextProps.brew.text.split('\\page');
|
||||||
|
this.setState({
|
||||||
|
pages : pages,
|
||||||
|
//usePPR : pages.length >= PPR_THRESHOLD
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
handleScroll : function(e){
|
||||||
|
this.setState({
|
||||||
|
viewablePageNumber : Math.floor(e.target.scrollTop / PAGE_HEIGHT) //this.pageHeight)
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
renderPageInfo : function(){
|
||||||
|
return <div className='pageInfo'>
|
||||||
|
{this.state.viewablePageNumber + 1} / {this.state.pages.length}
|
||||||
|
</div>
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
render: function(){
|
||||||
|
return <div className='brewView' onScroll={this.handleScroll}>
|
||||||
|
|
||||||
|
<BrewRenderer
|
||||||
|
text={this.props.brew.text}
|
||||||
|
style={this.props.brew.style}
|
||||||
|
pprPage={2}
|
||||||
|
/>
|
||||||
|
|
||||||
|
|
||||||
|
{this.renderPageInfo()}
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = BrewView;
|
||||||
42
shared/homebrewery/brewView/brewView.less
Normal file
42
shared/homebrewery/brewView/brewView.less
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
.pane{
|
||||||
|
position : relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.brewView{
|
||||||
|
overflow-y : scroll;
|
||||||
|
height : 100%;
|
||||||
|
|
||||||
|
.pageInfo{
|
||||||
|
position : absolute;
|
||||||
|
right : 17px;
|
||||||
|
bottom : 0;
|
||||||
|
z-index : 1000;
|
||||||
|
padding : 8px 10px;
|
||||||
|
background-color : #333;
|
||||||
|
font-size : 10px;
|
||||||
|
font-weight : 800;
|
||||||
|
color : white;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
.ppr_msg{
|
||||||
|
position : absolute;
|
||||||
|
left : 0px;
|
||||||
|
bottom : 0;
|
||||||
|
z-index : 1000;
|
||||||
|
padding : 8px 10px;
|
||||||
|
background-color : #333;
|
||||||
|
font-size : 10px;
|
||||||
|
font-weight : 800;
|
||||||
|
color : white;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
.brewRenderer{
|
||||||
|
margin : 30px 0px;
|
||||||
|
&>.phb{
|
||||||
|
margin-right : auto;
|
||||||
|
margin-bottom : 30px;
|
||||||
|
margin-left : auto;
|
||||||
|
box-shadow : 1px 4px 14px #000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
11
shared/homebrewery/brewView/brewView.smart.jsx
Normal file
11
shared/homebrewery/brewView/brewView.smart.jsx
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
//const Actions = require('homebrewery/brew.actions.js');
|
||||||
|
const Store = require('homebrewery/brew.store.js');
|
||||||
|
|
||||||
|
const BrewView = require('./brewView.jsx')
|
||||||
|
|
||||||
|
module.exports = Store.createSmartComponent(BrewView, ()=>{
|
||||||
|
return {
|
||||||
|
brew : Store.getBrew()
|
||||||
|
|
||||||
|
};
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user