1
0
mirror of https://github.com/stolksdorf/homebrewery.git synced 2025-12-18 15:21:28 +00:00

Added in new page, however edit page is still broken

This commit is contained in:
Scott Tolksdorf
2016-05-09 13:17:17 -04:00
parent eca3ada8eb
commit 15ad171c2d
6 changed files with 182 additions and 46 deletions

View File

@@ -7,6 +7,7 @@ var CreateRouter = require('pico-router').createRouter;
var HomePage = require('./pages/homePage/homePage.jsx'); var HomePage = require('./pages/homePage/homePage.jsx');
var EditPage = require('./pages/editPage/editPage.jsx'); 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 Router; var Router;
var Homebrew = React.createClass({ var Homebrew = React.createClass({
@@ -36,6 +37,9 @@ var Homebrew = React.createClass({
'/homebrew/changelog' : (args) => { '/homebrew/changelog' : (args) => {
return <SharePage entry={{text : this.props.changelog}} /> return <SharePage entry={{text : this.props.changelog}} />
}, },
'/homebrew/new' : (args) => {
return <NewPage />
},
'/homebrew*' : <HomePage welcomeText={this.props.welcomeText} />, '/homebrew*' : <HomePage welcomeText={this.props.welcomeText} />,
}); });
}, },

View File

@@ -2,30 +2,20 @@ var React = require('react');
var _ = require('lodash'); var _ = require('lodash');
var cx = require('classnames'); var cx = require('classnames');
//var Statusbar = require('../statusbar/statusbar.jsx');
//var PageContainer = require('../pageContainer/pageContainer.jsx');
//var Editor = require('../editor/editor.jsx');
var Nav = require('naturalcrit/nav/nav.jsx'); var Nav = require('naturalcrit/nav/nav.jsx');
var Navbar = require('../../navbar/navbar.jsx'); var Navbar = require('../../navbar/navbar.jsx');
var RedditShare = require('../../navbar/redditShare.navitem.jsx'); var RedditShare = require('../../navbar/redditShare.navitem.jsx');
var SplitPane = require('naturalcrit/splitPane/splitPane.jsx'); var SplitPane = require('naturalcrit/splitPane/splitPane.jsx');
//var CodeEditor = require('naturalcrit/codeEditor/codeEditor.jsx');
var Editor = require('../../editor/editor.jsx'); var Editor = require('../../editor/editor.jsx');
var BrewRenderer = require('../../brewRenderer/brewRenderer.jsx'); var BrewRenderer = require('../../brewRenderer/brewRenderer.jsx');
//var KEY = 'naturalCrit-homebrew';
var HomePage = React.createClass({ var HomePage = React.createClass({
@@ -41,16 +31,6 @@ var HomePage = React.createClass({
}; };
}, },
componentDidMount: function() {
/*
var storage = localStorage.getItem(KEY);
if(storage){
this.setState({
text : storage
})
}
*/
},
handleSplitMove : function(){ handleSplitMove : function(){
this.refs.editor.update(); this.refs.editor.update();
@@ -72,6 +52,8 @@ var HomePage = React.createClass({
<Nav.section> <Nav.section>
<RedditShare brew={{text : this.state.text}}/> <RedditShare brew={{text : this.state.text}}/>
<Nav.item <Nav.item
newTab={true} newTab={true}
href='https://github.com/stolksdorf/naturalcrit/issues' href='https://github.com/stolksdorf/naturalcrit/issues'
@@ -80,6 +62,7 @@ var HomePage = React.createClass({
report issue report issue
</Nav.item> </Nav.item>
<Nav.item <Nav.item
newTab={true}
href='/homebrew/changelog' href='/homebrew/changelog'
color='purple' color='purple'
icon='fa-file-text-o'> icon='fa-file-text-o'>
@@ -96,26 +79,24 @@ var HomePage = React.createClass({
}, },
render : function(){ render : function(){
return( return <div className='homePage page'>
<div className='homePage page'> {this.renderNavbar()}
{this.renderNavbar()}
<div className='content'> <div className='content'>
<SplitPane onDragFinish={this.handleSplitMove} ref='pane'> <SplitPane onDragFinish={this.handleSplitMove} ref='pane'>
<Editor value={this.state.text} onChange={this.handleTextChange} ref='editor'/> <Editor value={this.state.text} onChange={this.handleTextChange} ref='editor'/>
<BrewRenderer brewText={this.state.text} /> <BrewRenderer brewText={this.state.text} />
</SplitPane> </SplitPane>
</div>
{/*
<a href='/homebrew/new' className='floatingNewButton'>
Create your own <i className='fa fa-magic' />
</a>
*/}
</div> </div>
);
{/*
<a href='/homebrew/new' className='floatingNewButton'>
Create your own <i className='fa fa-magic' />
</a>
*/}
</div>
} }
}); });

View File

@@ -0,0 +1,129 @@
var React = require('react');
var _ = require('lodash');
var cx = require('classnames');
var request = require("superagent");
var Nav = require('naturalcrit/nav/nav.jsx');
var Navbar = require('../../navbar/navbar.jsx');
var SplitPane = require('naturalcrit/splitPane/splitPane.jsx');
var Editor = require('../../editor/editor.jsx');
var BrewRenderer = require('../../brewRenderer/brewRenderer.jsx');
const KEY = 'naturalCrit-homebrew-new';
var NewPage = React.createClass({
getInitialState: function() {
return {
title : 'EDIT ME',
text: '',
isSaving : false
};
},
componentDidMount: function() {
var storage = localStorage.getItem(KEY);
if(storage){
this.setState({
text : storage
})
}
window.onbeforeunload = function(e){
return "Your homebrew isn't saved. Are you sure you want to leave?";
};
},
componentWillUnmount: function() {
window.onbeforeunload = function(){};
},
handleSplitMove : function(){
this.refs.editor.update();
},
handleTextChange : function(text){
this.setState({
text : text
});
localStorage.setItem(KEY, text);
},
handleSave : function(){
this.setState({
isSaving : true
});
request.post('/homebrew/api')
.send({
title : this.state.title,
text : this.state.text
})
.end((err, res)=>{
if(err){
this.setState({
isSaving : false
});
return;
}
window.onbeforeunload = function(){};
var brew = res.body;
localStorage.removeItem(KEY);
window.location = '/homebrew/edit/' + brew.editId;
})
},
renderSaveButton : function(){
if(this.state.isSaving){
return <Nav.item icon='fa-spinner sa-spin' className='saveButton'>
save...
</Nav.item>
}else{
return <Nav.item icon='fa-save' className='saveButton' onClick={this.handleSave}>
save
</Nav.item>
}
},
renderNavbar : function(){
return <Navbar>
<Nav.section>
<Nav.item>{this.state.title}</Nav.item>
</Nav.section>
<Nav.section>
{this.renderSaveButton()}
<Nav.item
newTab={true}
href='https://github.com/stolksdorf/naturalcrit/issues'
color='red'
icon='fa-bug'>
report issue
</Nav.item>
</Nav.section>
</Navbar>
},
render : function(){
return <div className='newPage page'>
{this.renderNavbar()}
<div className='content'>
<SplitPane onDragFinish={this.handleSplitMove} ref='pane'>
<Editor value={this.state.text} onChange={this.handleTextChange} ref='editor'/>
<BrewRenderer brewText={this.state.text} />
</SplitPane>
</div>
</div>
}
});
module.exports = NewPage;

View File

@@ -0,0 +1,10 @@
.newPage{
.saveButton{
background-color: @orange;
&:hover{
background-color: @green;
}
}
}

View File

@@ -34,9 +34,17 @@ module.exports = function(app){
getTopBrews(function(topBrews){ getTopBrews(function(topBrews){
return res.json(topBrews); return res.json(topBrews);
}); });
}) });
app.put('/homebrew/update/:id', function(req, res){ app.post('/homebrew/api', function(req, res){
var newHomebrew = new HomebrewModel(req.body);
newHomebrew.save(function(err, obj){
if(err) return;
return res.json(obj);
})
});
app.put('/homebrew/api/update/:id', function(req, res){
HomebrewModel.find({editId : req.params.id}, function(err, objs){ HomebrewModel.find({editId : req.params.id}, function(err, objs){
if(!objs.length || err) return res.status(404).send("Can not find homebrew with that id"); if(!objs.length || err) return res.status(404).send("Can not find homebrew with that id");
var resEntry = objs[0]; var resEntry = objs[0];

View File

@@ -2,16 +2,19 @@ var _ = require('lodash');
var vitreumRender = require('vitreum/render'); var vitreumRender = require('vitreum/render');
var HomebrewModel = require('./homebrew.model.js').model; var HomebrewModel = require('./homebrew.model.js').model;
var changelogText = require('fs').readFileSync('./changelog.md', 'utf8');
module.exports = function(app){ module.exports = function(app){
/*
app.get('/homebrew/new', function(req, res){ app.get('/homebrew/new', function(req, res){
var newHomebrew = new HomebrewModel(); var newHomebrew = new HomebrewModel();
newHomebrew.save(function(err, obj){ newHomebrew.save(function(err, obj){
return res.redirect('/homebrew/edit/' + obj.editId); return res.redirect('/homebrew/edit/' + obj.editId);
}) })
}) })
*/
//Edit Page //Edit Page
@@ -78,16 +81,16 @@ module.exports = function(app){
HomebrewModel.find({shareId : req.params.id}, function(err, objs){ 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'); if(err || !objs.length) return res.status(404).send('Could not find Homebrew with that id');
var resObj = null; var brew = null;
if(objs.length){ if(objs.length){
resObj = objs[0]; brew = objs[0];
} }
var content = _.map(resObj.text.split('\\page'), function(pageText){ var content = _.map(brew.text.split('\\page'), function(pageText){
return '<div class="phb">' + Markdown(pageText) + '</div>'; return '<div class="phb">' + Markdown(pageText) + '</div>';
}).join('\n'); }).join('\n');
var title = '<title>' + resObj.text.split('\n')[0] + '</title>'; var title = '<title>' + brew.text.split('\n')[0] + '</title>';
var page = '<html><head>' + title + PHBStyle + '</head><body>' + content +'</body></html>' var page = '<html><head>' + title + PHBStyle + '</head><body>' + content +'</body></html>'
return res.send(page) return res.send(page)
@@ -96,6 +99,7 @@ module.exports = function(app){
//Home and 404, etc. //Home and 404, etc.
var welcomeText = require('fs').readFileSync('./client/homebrew/pages/homePage/welcome_msg.txt', 'utf8'); var welcomeText = require('fs').readFileSync('./client/homebrew/pages/homePage/welcome_msg.txt', 'utf8');
var changelogText = require('fs').readFileSync('./changelog.md', 'utf8');
app.get('/homebrew*', function (req, res) { app.get('/homebrew*', function (req, res) {
vitreumRender({ vitreumRender({
page: './build/homebrew/bundle.dot', page: './build/homebrew/bundle.dot',