0
0
mirror of https://github.com/naturalcrit/homebrewery.git synced 2025-12-30 21:52:43 +00:00
This commit is contained in:
Scott Tolksdorf
2018-04-08 22:23:03 -04:00
parent bf27250990
commit ed1b5252be
51 changed files with 2837 additions and 2852 deletions

View File

@@ -6,54 +6,54 @@ const Markdown = require('naturalcrit/markdown.js');
const ErrorBar = require('./errorBar/errorBar.jsx');
//TODO: move to the brew renderer
const RenderWarnings = require('homebrewery/renderWarnings/renderWarnings.jsx')
const RenderWarnings = require('homebrewery/renderWarnings/renderWarnings.jsx');
const PAGE_HEIGHT = 1056;
const PPR_THRESHOLD = 50;
const BrewRenderer = React.createClass({
getDefaultProps: function() {
getDefaultProps : function() {
return {
text : '',
text : '',
errors : []
};
},
getInitialState: function() {
getInitialState : function() {
const pages = this.props.text.split('\\page');
return {
viewablePageNumber: 0,
height : 0,
isMounted : false,
viewablePageNumber : 0,
height : 0,
isMounted : false,
usePPR : true,
pages : pages,
pages : pages,
usePPR : pages.length >= PPR_THRESHOLD,
errors : []
};
},
height : 0,
height : 0,
pageHeight : PAGE_HEIGHT,
lastRender : <div></div>,
componentDidMount: function() {
componentDidMount : function() {
this.updateSize();
window.addEventListener("resize", this.updateSize);
window.addEventListener('resize', this.updateSize);
},
componentWillUnmount: function() {
window.removeEventListener("resize", this.updateSize);
componentWillUnmount : function() {
window.removeEventListener('resize', this.updateSize);
},
componentWillReceiveProps: function(nextProps) {
componentWillReceiveProps : function(nextProps) {
if(this.refs.pages && this.refs.pages.firstChild) this.pageHeight = this.refs.pages.firstChild.clientHeight;
const pages = nextProps.text.split('\\page');
this.setState({
pages : pages,
pages : pages,
usePPR : pages.length >= PPR_THRESHOLD
})
});
},
updateSize : function() {
@@ -62,7 +62,7 @@ const BrewRenderer = React.createClass({
}, 1);
this.setState({
height : this.refs.main.parentNode.clientHeight,
height : this.refs.main.parentNode.clientHeight,
isMounted : true
});
},
@@ -76,7 +76,7 @@ const BrewRenderer = React.createClass({
shouldRender : function(pageText, index){
if(!this.state.isMounted) return false;
var viewIndex = this.state.viewablePageNumber;
const viewIndex = this.state.viewablePageNumber;
if(index == viewIndex - 3) return true;
if(index == viewIndex - 2) return true;
if(index == viewIndex - 1) return true;
@@ -94,7 +94,7 @@ const BrewRenderer = React.createClass({
renderPageInfo : function(){
return <div className='pageInfo'>
{this.state.viewablePageNumber + 1} / {this.state.pages.length}
</div>
</div>;
},
renderPPRmsg : function(){
@@ -102,17 +102,17 @@ const BrewRenderer = React.createClass({
return <div className='ppr_msg'>
Partial Page Renderer enabled, because your brew is so large. May effect rendering.
</div>
</div>;
},
renderDummyPage : function(index){
return <div className='phb' id={`p${index + 1}`} key={index}>
<i className='fa fa-spinner fa-spin' />
</div>
</div>;
},
renderPage : function(pageText, index){
return <div className='phb' id={`p${index + 1}`} dangerouslySetInnerHTML={{__html:Markdown.render(pageText)}} key={index} />
return <div className='phb' id={`p${index + 1}`} dangerouslySetInnerHTML={{ __html: Markdown.render(pageText) }} key={index} />;
},
renderPages : function(){
@@ -120,7 +120,7 @@ const BrewRenderer = React.createClass({
return _.map(this.state.pages, (page, index)=>{
if(this.shouldRender(page, index)){
return this.renderPage(page, index);
}else{
} else {
return this.renderDummyPage(index);
}
});
@@ -136,7 +136,7 @@ const BrewRenderer = React.createClass({
return <div className='brewRenderer'
onScroll={this.handleScroll}
ref='main'
style={{height : this.state.height}}>
style={{ height: this.state.height }}>
<ErrorBar errors={this.props.errors} />
<RenderWarnings />
@@ -146,7 +146,7 @@ const BrewRenderer = React.createClass({
</div>
{this.renderPageInfo()}
{this.renderPPRmsg()}
</div>
</div>;
}
});

View File

@@ -1,15 +1,15 @@
var React = require('react');
var _ = require('lodash');
var cx = require('classnames');
const React = require('react');
const _ = require('lodash');
const cx = require('classnames');
var ErrorBar = React.createClass({
getDefaultProps: function() {
const ErrorBar = React.createClass({
getDefaultProps : function() {
return {
errors : []
};
},
hasOpenError : false,
hasOpenError : false,
hasCloseError : false,
hasMatchError : false,
@@ -19,20 +19,20 @@ var ErrorBar = React.createClass({
this.hasMatchError = false;
var errors = _.map(this.props.errors, (err, idx) => {
const errors = _.map(this.props.errors, (err, idx)=>{
if(err.id == 'OPEN') this.hasOpenError = true;
if(err.id == 'CLOSE') this.hasCloseError = true;
if(err.id == 'MISMATCH') this.hasMatchError = true;
return <li key={idx}>
Line {err.line} : {err.text}, '{err.type}' tag
</li>
</li>;
});
return <ul>{errors}</ul>
return <ul>{errors}</ul>;
},
renderProtip : function(){
var msg = [];
const msg = [];
if(this.hasOpenError){
msg.push(<div>
An unmatched opening tag means there's an opened tag that isn't closed, you need to close a tag, like this {'</div>'}. Make sure to match types!
@@ -53,7 +53,7 @@ var ErrorBar = React.createClass({
return <div className='protips'>
<h4>Protips!</h4>
{msg}
</div>
</div>;
},
render : function(){
@@ -66,7 +66,7 @@ var ErrorBar = React.createClass({
{this.renderErrors()}
<hr />
{this.renderProtip()}
</div>
</div>;
}
});