mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2026-01-03 17:02:40 +00:00
With the style panel we added a `page` css class alongside the `phb` and `phb3` classes so users can write CSS that targets all pages no matter the base CSS loaded. This wasn't applied to the print page. Funnily enough, the rest of the site uses `.page` just to display the website, and I didn't realize there was a conflict until now because otherwise, the brew is usually hidden in an iFrame.
70 lines
1.7 KiB
JavaScript
70 lines
1.7 KiB
JavaScript
require('./printPage.less');
|
|
const React = require('react');
|
|
const createClass = require('create-react-class');
|
|
const _ = require('lodash');
|
|
const cx = require('classnames');
|
|
const { Meta } = require('vitreum/headtags');
|
|
const MarkdownLegacy = require('naturalcrit/markdownLegacy.js');
|
|
const Markdown = require('naturalcrit/markdown.js');
|
|
|
|
const PrintPage = createClass({
|
|
getDefaultProps : function() {
|
|
return {
|
|
query : {},
|
|
brew : {
|
|
text : '',
|
|
style : '',
|
|
renderer : 'legacy'
|
|
}
|
|
};
|
|
},
|
|
|
|
getInitialState : function() {
|
|
return {
|
|
brewText : this.props.brew.text
|
|
};
|
|
},
|
|
|
|
componentDidMount : function() {
|
|
if(this.props.query.local){
|
|
this.setState((prevState, prevProps)=>({
|
|
brewText : localStorage.getItem(prevProps.query.local)
|
|
}));
|
|
}
|
|
|
|
if(this.props.query.dialog) window.print();
|
|
},
|
|
|
|
renderPages : function(){
|
|
if(this.props.brew.renderer == 'legacy') {
|
|
return _.map(this.state.brewText.split('\\page'), (page, index)=>{
|
|
return <div
|
|
className='phb page'
|
|
id={`p${index + 1}`}
|
|
dangerouslySetInnerHTML={{ __html: MarkdownLegacy.render(page) }}
|
|
key={index} />;
|
|
});
|
|
} else {
|
|
return _.map(this.state.brewText.split(/^\\page/gm), (page, index)=>{
|
|
return <div
|
|
className='phb3 page'
|
|
id={`p${index + 1}`}
|
|
dangerouslySetInnerHTML={{ __html: Markdown.render(page) }}
|
|
key={index} />;
|
|
});
|
|
}
|
|
|
|
},
|
|
|
|
render : function(){
|
|
return <div>
|
|
<Meta name='robots' content='noindex, nofollow' />
|
|
{/* Apply CSS from Style tab */}
|
|
<div style={{ display: 'none' }} dangerouslySetInnerHTML={{ __html: `<style> ${this.props.brew.style} </style>` }} />
|
|
{this.renderPages()}
|
|
</div>;
|
|
}
|
|
});
|
|
|
|
module.exports = PrintPage;
|