diff --git a/client/homebrew/homebrew.jsx b/client/homebrew/homebrew.jsx index ae711cd..05a31c6 100644 --- a/client/homebrew/homebrew.jsx +++ b/client/homebrew/homebrew.jsx @@ -9,6 +9,7 @@ var EditPage = require('./pages/editPage/editPage.jsx'); var SharePage = require('./pages/sharePage/sharePage.jsx'); var NewPage = require('./pages/newPage/newPage.jsx'); var ErrorPage = require('./pages/errorPage/errorPage.jsx'); +var PrintPage = require('./pages/printPage/printPage.jsx'); var Router; var Homebrew = React.createClass({ @@ -32,35 +33,37 @@ var Homebrew = React.createClass({ Router = CreateRouter({ '/edit/:id' : (args) => { if(!this.props.brew.editId){ - return + return } return }, '/share/:id' : (args) => { if(!this.props.brew.shareId){ - return + return } return }, '/changelog' : (args) => { return }, + '/print/:id' : (args, query) => { + return ; + }, + '/print' : (args, query) => { + return ; + }, '/new' : (args) => { - return + return }, '*' : , }); }, diff --git a/client/homebrew/homebrew.less b/client/homebrew/homebrew.less index 00deebe..6b9423d 100644 --- a/client/homebrew/homebrew.less +++ b/client/homebrew/homebrew.less @@ -2,11 +2,10 @@ .homebrew{ height : 100%; - //TODO: Consider making backgroudn color lighter - background-color : @steel; .page{ display : flex; height : 100%; + background-color : @steel; flex-direction : column; .content{ position : relative; diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index 6e47632..b2a9f63 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -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 + get PDF + + }, + renderNavbar : function(){ return @@ -99,6 +110,7 @@ const NewPage = React.createClass({ {this.renderSaveButton()} + {this.renderLocalPrintButton()} diff --git a/client/homebrew/pages/printPage/printPage.jsx b/client/homebrew/pages/printPage/printPage.jsx new file mode 100644 index 0000000..6aa2922 --- /dev/null +++ b/client/homebrew/pages/printPage/printPage.jsx @@ -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
; + }); + }, + + render : function(){ + return
+ {this.renderPages()} +
+ } +}); + +module.exports = PrintPage; diff --git a/client/homebrew/pages/printPage/printPage.less b/client/homebrew/pages/printPage/printPage.less new file mode 100644 index 0000000..0d9e7b6 --- /dev/null +++ b/client/homebrew/pages/printPage/printPage.less @@ -0,0 +1,3 @@ +.printPage{ + +} \ No newline at end of file diff --git a/server.js b/server.js index d3adab5..514a836 100644 --- a/server.js +++ b/server.js @@ -1,7 +1,6 @@ require('app-module-path').addPath('./shared'); const _ = require('lodash'); - const vitreumRender = require('vitreum/render'); const bodyParser = require('body-parser') const express = require("express"); @@ -10,7 +9,6 @@ app.use(express.static(__dirname + '/build')); app.use(bodyParser.json({limit: '25mb'})); - //Mongoose //TODO: Celean up const mongoose = require('mongoose'); @@ -59,11 +57,23 @@ app.get('/share/:id', (req, res, next)=>{ brew.views = brew.views + 1; brew.save(); - req.brew = sanitizeBrew(brew); + req.brew = sanitizeBrew(brew.toJSON()); 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 var Markdown = require('naturalcrit/markdown.js'); var PHBStyle = '' @@ -91,42 +101,19 @@ app.get('/print/:id', function(req, res){ return res.send(page) }); }); +*/ //Source page String.prototype.replaceAll = function(s,r){return this.split(s).join(r)} -app.get('/source/:id', function(req, res){ - HomebrewModel.find({shareId : req.params.id}, function(err, objs){ - if(err || !objs.length) return res.status(404).send('Could not find Homebrew with that id'); - var brew = null; - if(objs.length) brew = objs[0]; - var text = brew.text.replaceAll('<', '<').replaceAll('>', '>'); +app.get('/source/:id', (req, res)=>{ + HomebrewModel.find({shareId : req.params.id}, (err, brews)=>{ + if(err || !brews.length) return res.status(404).send('Could not find Homebrew with that id'); + const text = brews[0].text.replaceAll('<', '<').replaceAll('>', '>'); return res.send(`
${text}
`); }); }); -/* -//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 app.use((req, res) => { vitreumRender({ @@ -137,7 +124,6 @@ app.use((req, res) => { prerenderWith : './client/homebrew/homebrew.jsx', initialProps: { url: req.originalUrl, - welcomeText : welcomeText, changelog : changelogText, brew : req.brew diff --git a/server/homebrew.model.js b/server/homebrew.model.js index e7d89b9..7dcd582 100644 --- a/server/homebrew.model.js +++ b/server/homebrew.model.js @@ -12,7 +12,7 @@ var HomebrewSchema = mongoose.Schema({ updatedAt : { type: Date, default: Date.now}, lastViewed : { type: Date, default: Date.now}, views : {type:Number, default:0} -}); +}, { versionKey: false });