mirror of
https://github.com/stolksdorf/homebrewery.git
synced 2025-12-14 12:05:57 +00:00
Print page can now load from local storage
This commit is contained in:
@@ -9,6 +9,7 @@ var EditPage = require('./pages/editPage/editPage.jsx');
|
|||||||
var SharePage = require('./pages/sharePage/sharePage.jsx');
|
var SharePage = require('./pages/sharePage/sharePage.jsx');
|
||||||
var NewPage = require('./pages/newPage/newPage.jsx');
|
var NewPage = require('./pages/newPage/newPage.jsx');
|
||||||
var ErrorPage = require('./pages/errorPage/errorPage.jsx');
|
var ErrorPage = require('./pages/errorPage/errorPage.jsx');
|
||||||
|
var PrintPage = require('./pages/printPage/printPage.jsx');
|
||||||
|
|
||||||
var Router;
|
var Router;
|
||||||
var Homebrew = React.createClass({
|
var Homebrew = React.createClass({
|
||||||
@@ -32,35 +33,37 @@ var Homebrew = React.createClass({
|
|||||||
Router = CreateRouter({
|
Router = CreateRouter({
|
||||||
'/edit/:id' : (args) => {
|
'/edit/:id' : (args) => {
|
||||||
if(!this.props.brew.editId){
|
if(!this.props.brew.editId){
|
||||||
return <ErrorPage ver={this.props.version} errorId={args.id}/>
|
return <ErrorPage errorId={args.id}/>
|
||||||
}
|
}
|
||||||
|
|
||||||
return <EditPage
|
return <EditPage
|
||||||
ver={this.props.version}
|
|
||||||
id={args.id}
|
id={args.id}
|
||||||
brew={this.props.brew} />
|
brew={this.props.brew} />
|
||||||
},
|
},
|
||||||
|
|
||||||
'/share/:id' : (args) => {
|
'/share/:id' : (args) => {
|
||||||
if(!this.props.brew.shareId){
|
if(!this.props.brew.shareId){
|
||||||
return <ErrorPage ver={this.props.version} errorId={args.id}/>
|
return <ErrorPage errorId={args.id}/>
|
||||||
}
|
}
|
||||||
|
|
||||||
return <SharePage
|
return <SharePage
|
||||||
ver={this.props.version}
|
|
||||||
id={args.id}
|
id={args.id}
|
||||||
brew={this.props.brew} />
|
brew={this.props.brew} />
|
||||||
},
|
},
|
||||||
'/changelog' : (args) => {
|
'/changelog' : (args) => {
|
||||||
return <SharePage
|
return <SharePage
|
||||||
ver={this.props.version}
|
|
||||||
brew={{title : 'Changelog', text : this.props.changelog}} />
|
brew={{title : 'Changelog', text : this.props.changelog}} />
|
||||||
},
|
},
|
||||||
|
'/print/:id' : (args, query) => {
|
||||||
|
return <PrintPage brew={this.props.brew} query={query}/>;
|
||||||
|
},
|
||||||
|
'/print' : (args, query) => {
|
||||||
|
return <PrintPage query={query}/>;
|
||||||
|
},
|
||||||
'/new' : (args) => {
|
'/new' : (args) => {
|
||||||
return <NewPage ver={this.props.version} />
|
return <NewPage />
|
||||||
},
|
},
|
||||||
'*' : <HomePage
|
'*' : <HomePage
|
||||||
ver={this.props.version}
|
|
||||||
welcomeText={this.props.welcomeText} />,
|
welcomeText={this.props.welcomeText} />,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -2,11 +2,10 @@
|
|||||||
.homebrew{
|
.homebrew{
|
||||||
height : 100%;
|
height : 100%;
|
||||||
|
|
||||||
//TODO: Consider making backgroudn color lighter
|
|
||||||
background-color : @steel;
|
|
||||||
.page{
|
.page{
|
||||||
display : flex;
|
display : flex;
|
||||||
height : 100%;
|
height : 100%;
|
||||||
|
background-color : @steel;
|
||||||
flex-direction : column;
|
flex-direction : column;
|
||||||
.content{
|
.content{
|
||||||
position : relative;
|
position : relative;
|
||||||
|
|||||||
@@ -91,6 +91,17 @@ const NewPage = React.createClass({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
handlePrintClick : function(){
|
||||||
|
localStorage.setItem('print', this.state.text);
|
||||||
|
window.open('/print?dialog=true&local=print','_blank');
|
||||||
|
},
|
||||||
|
|
||||||
|
renderLocalPrintButton : function(){
|
||||||
|
return <Nav.item color='purple' icon='fa-file-pdf-o' onClick={this.handlePrintClick}>
|
||||||
|
get PDF
|
||||||
|
</Nav.item>
|
||||||
|
},
|
||||||
|
|
||||||
renderNavbar : function(){
|
renderNavbar : function(){
|
||||||
return <Navbar ver={this.props.ver}>
|
return <Navbar ver={this.props.ver}>
|
||||||
<Nav.section>
|
<Nav.section>
|
||||||
@@ -99,6 +110,7 @@ const NewPage = React.createClass({
|
|||||||
|
|
||||||
<Nav.section>
|
<Nav.section>
|
||||||
{this.renderSaveButton()}
|
{this.renderSaveButton()}
|
||||||
|
{this.renderLocalPrintButton()}
|
||||||
<IssueNavItem />
|
<IssueNavItem />
|
||||||
</Nav.section>
|
</Nav.section>
|
||||||
</Navbar>
|
</Navbar>
|
||||||
|
|||||||
50
client/homebrew/pages/printPage/printPage.jsx
Normal file
50
client/homebrew/pages/printPage/printPage.jsx
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
const React = require('react');
|
||||||
|
const _ = require('lodash');
|
||||||
|
const cx = require('classnames');
|
||||||
|
|
||||||
|
//const BrewRenderer = require('../../brewRenderer/brewRenderer.jsx');
|
||||||
|
|
||||||
|
var Markdown = require('naturalcrit/markdown.js');
|
||||||
|
|
||||||
|
const PrintPage = React.createClass({
|
||||||
|
getDefaultProps: function() {
|
||||||
|
return {
|
||||||
|
query : {},
|
||||||
|
brew : {
|
||||||
|
text : '',
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
getInitialState: function() {
|
||||||
|
return {
|
||||||
|
brewText: this.props.brew.text
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
componentDidMount: function() {
|
||||||
|
if(this.props.query.local){
|
||||||
|
this.setState({ brewText : localStorage.getItem(this.props.query.local)});
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.props.query.dialog) window.print();
|
||||||
|
},
|
||||||
|
|
||||||
|
renderPages : function(){
|
||||||
|
return _.map(this.state.brewText.split('\\page'), (page, index) => {
|
||||||
|
return <div
|
||||||
|
className='phb'
|
||||||
|
id={`p${index + 1}`}
|
||||||
|
dangerouslySetInnerHTML={{__html:Markdown.render(page)}}
|
||||||
|
key={index} />;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
render : function(){
|
||||||
|
return <div>
|
||||||
|
{this.renderPages()}
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = PrintPage;
|
||||||
3
client/homebrew/pages/printPage/printPage.less
Normal file
3
client/homebrew/pages/printPage/printPage.less
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
.printPage{
|
||||||
|
|
||||||
|
}
|
||||||
50
server.js
50
server.js
@@ -1,7 +1,6 @@
|
|||||||
require('app-module-path').addPath('./shared');
|
require('app-module-path').addPath('./shared');
|
||||||
|
|
||||||
const _ = require('lodash');
|
const _ = require('lodash');
|
||||||
|
|
||||||
const vitreumRender = require('vitreum/render');
|
const vitreumRender = require('vitreum/render');
|
||||||
const bodyParser = require('body-parser')
|
const bodyParser = require('body-parser')
|
||||||
const express = require("express");
|
const express = require("express");
|
||||||
@@ -10,7 +9,6 @@ app.use(express.static(__dirname + '/build'));
|
|||||||
app.use(bodyParser.json({limit: '25mb'}));
|
app.use(bodyParser.json({limit: '25mb'}));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Mongoose
|
//Mongoose
|
||||||
//TODO: Celean up
|
//TODO: Celean up
|
||||||
const mongoose = require('mongoose');
|
const mongoose = require('mongoose');
|
||||||
@@ -59,11 +57,23 @@ app.get('/share/:id', (req, res, next)=>{
|
|||||||
brew.views = brew.views + 1;
|
brew.views = brew.views + 1;
|
||||||
brew.save();
|
brew.save();
|
||||||
|
|
||||||
req.brew = sanitizeBrew(brew);
|
req.brew = sanitizeBrew(brew.toJSON());
|
||||||
return next();
|
return next();
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//Share Page
|
||||||
|
app.get('/print/:id', (req, res, next)=>{
|
||||||
|
HomebrewModel.find({shareId : req.params.id}, (err, brews)=>{
|
||||||
|
if(err || !brews.length){
|
||||||
|
return res.status(400).send(`Can't get that`);
|
||||||
|
}
|
||||||
|
req.brew = sanitizeBrew(brews[0].toJSON());
|
||||||
|
return next();
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
//Print Page
|
//Print Page
|
||||||
var Markdown = require('naturalcrit/markdown.js');
|
var Markdown = require('naturalcrit/markdown.js');
|
||||||
var PHBStyle = '<style>' + require('fs').readFileSync('./phb.standalone.css', 'utf8') + '</style>'
|
var PHBStyle = '<style>' + require('fs').readFileSync('./phb.standalone.css', 'utf8') + '</style>'
|
||||||
@@ -91,42 +101,19 @@ app.get('/print/:id', function(req, res){
|
|||||||
return res.send(page)
|
return res.send(page)
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
*/
|
||||||
|
|
||||||
//Source page
|
//Source page
|
||||||
String.prototype.replaceAll = function(s,r){return this.split(s).join(r)}
|
String.prototype.replaceAll = function(s,r){return this.split(s).join(r)}
|
||||||
app.get('/source/:id', function(req, res){
|
app.get('/source/:id', (req, res)=>{
|
||||||
HomebrewModel.find({shareId : req.params.id}, function(err, objs){
|
HomebrewModel.find({shareId : req.params.id}, (err, brews)=>{
|
||||||
if(err || !objs.length) return res.status(404).send('Could not find Homebrew with that id');
|
if(err || !brews.length) return res.status(404).send('Could not find Homebrew with that id');
|
||||||
var brew = null;
|
const text = brews[0].text.replaceAll('<', '<').replaceAll('>', '>');
|
||||||
if(objs.length) brew = objs[0];
|
|
||||||
var text = brew.text.replaceAll('<', '<').replaceAll('>', '>');
|
|
||||||
return res.send(`<code><pre>${text}</pre></code>`);
|
return res.send(`<code><pre>${text}</pre></code>`);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
//Home and 404, etc.
|
|
||||||
|
|
||||||
app.get('*', function (req, res) {
|
|
||||||
vitreumRender({
|
|
||||||
page: './build/homebrew/bundle.dot',
|
|
||||||
globals:{},
|
|
||||||
prerenderWith : './client/homebrew/homebrew.jsx',
|
|
||||||
initialProps: {
|
|
||||||
url: req.originalUrl,
|
|
||||||
welcomeText : welcomeText,
|
|
||||||
changelog : changelogText,
|
|
||||||
version : projectVersion
|
|
||||||
},
|
|
||||||
clearRequireCache : !process.env.PRODUCTION,
|
|
||||||
}, function (err, page) {
|
|
||||||
return res.send(page)
|
|
||||||
});
|
|
||||||
});
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
//Render Page
|
//Render Page
|
||||||
app.use((req, res) => {
|
app.use((req, res) => {
|
||||||
vitreumRender({
|
vitreumRender({
|
||||||
@@ -137,7 +124,6 @@ app.use((req, res) => {
|
|||||||
prerenderWith : './client/homebrew/homebrew.jsx',
|
prerenderWith : './client/homebrew/homebrew.jsx',
|
||||||
initialProps: {
|
initialProps: {
|
||||||
url: req.originalUrl,
|
url: req.originalUrl,
|
||||||
|
|
||||||
welcomeText : welcomeText,
|
welcomeText : welcomeText,
|
||||||
changelog : changelogText,
|
changelog : changelogText,
|
||||||
brew : req.brew
|
brew : req.brew
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ var HomebrewSchema = mongoose.Schema({
|
|||||||
updatedAt : { type: Date, default: Date.now},
|
updatedAt : { type: Date, default: Date.now},
|
||||||
lastViewed : { type: Date, default: Date.now},
|
lastViewed : { type: Date, default: Date.now},
|
||||||
views : {type:Number, default:0}
|
views : {type:Number, default:0}
|
||||||
});
|
}, { versionKey: false });
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user