diff --git a/client/homebrew/homebrew.jsx b/client/homebrew/homebrew.jsx index 8bb19e0..0ec2682 100644 --- a/client/homebrew/homebrew.jsx +++ b/client/homebrew/homebrew.jsx @@ -7,6 +7,7 @@ var CreateRouter = require('pico-router').createRouter; var HomePage = require('./pages/homePage/homePage.jsx'); var EditPage = require('./pages/editPage/editPage.jsx'); var SharePage = require('./pages/sharePage/sharePage.jsx'); +var NewPage = require('./pages/newPage/newPage.jsx'); var Router; var Homebrew = React.createClass({ @@ -36,6 +37,9 @@ var Homebrew = React.createClass({ '/homebrew/changelog' : (args) => { return }, + '/homebrew/new' : (args) => { + return + }, '/homebrew*' : , }); }, diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index c497c9b..8cbb966 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -2,30 +2,20 @@ var React = require('react'); var _ = require('lodash'); 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 Navbar = require('../../navbar/navbar.jsx'); - var RedditShare = require('../../navbar/redditShare.navitem.jsx'); + + var SplitPane = require('naturalcrit/splitPane/splitPane.jsx'); - - - -//var CodeEditor = require('naturalcrit/codeEditor/codeEditor.jsx'); - var Editor = require('../../editor/editor.jsx'); var BrewRenderer = require('../../brewRenderer/brewRenderer.jsx'); -//var KEY = 'naturalCrit-homebrew'; + 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(){ this.refs.editor.update(); @@ -72,6 +52,8 @@ var HomePage = React.createClass({ + + @@ -96,26 +79,24 @@ var HomePage = React.createClass({ }, render : function(){ - return( -
- {this.renderNavbar()} + return
+ {this.renderNavbar()} -
- - - - +
+ + + + -
- - {/* - - Create your own - - */}
- ); + + {/* + + Create your own + + */} +
} }); diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx new file mode 100644 index 0000000..d9dc824 --- /dev/null +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -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 + save... + + }else{ + return + save + + } + }, + + + renderNavbar : function(){ + return + + {this.state.title} + + + + {this.renderSaveButton()} + + + report issue + + + + + }, + + render : function(){ + return
+ {this.renderNavbar()} + + +
+ + + + +
+
+ } +}); + +module.exports = NewPage; diff --git a/client/homebrew/pages/newPage/newPage.less b/client/homebrew/pages/newPage/newPage.less new file mode 100644 index 0000000..557cc6d --- /dev/null +++ b/client/homebrew/pages/newPage/newPage.less @@ -0,0 +1,10 @@ +.newPage{ + + .saveButton{ + background-color: @orange; + &:hover{ + background-color: @green; + } + } + +} \ No newline at end of file diff --git a/server/homebrew.api.js b/server/homebrew.api.js index 2cfae7e..5d955a9 100644 --- a/server/homebrew.api.js +++ b/server/homebrew.api.js @@ -34,9 +34,17 @@ module.exports = function(app){ getTopBrews(function(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){ if(!objs.length || err) return res.status(404).send("Can not find homebrew with that id"); var resEntry = objs[0]; diff --git a/server/homebrew.server.js b/server/homebrew.server.js index acd2001..727212c 100644 --- a/server/homebrew.server.js +++ b/server/homebrew.server.js @@ -2,16 +2,19 @@ var _ = require('lodash'); var vitreumRender = require('vitreum/render'); var HomebrewModel = require('./homebrew.model.js').model; -var changelogText = require('fs').readFileSync('./changelog.md', 'utf8'); + module.exports = function(app){ + + /* app.get('/homebrew/new', function(req, res){ var newHomebrew = new HomebrewModel(); newHomebrew.save(function(err, obj){ return res.redirect('/homebrew/edit/' + obj.editId); }) }) + */ //Edit Page @@ -78,16 +81,16 @@ module.exports = function(app){ 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 resObj = null; + var brew = null; 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 '
' + Markdown(pageText) + '
'; }).join('\n'); - var title = '' + resObj.text.split('\n')[0] + ''; + var title = '' + brew.text.split('\n')[0] + ''; var page = '' + title + PHBStyle + '' + content +'' return res.send(page) @@ -96,6 +99,7 @@ module.exports = function(app){ //Home and 404, etc. 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) { vitreumRender({ page: './build/homebrew/bundle.dot',