diff --git a/client/main/favicon.ico b/client/homebrew/favicon.ico similarity index 100% rename from client/main/favicon.ico rename to client/homebrew/favicon.ico diff --git a/client/homebrew/homebrew.jsx b/client/homebrew/homebrew.jsx index 184cc67..8e51720 100644 --- a/client/homebrew/homebrew.jsx +++ b/client/homebrew/homebrew.jsx @@ -28,20 +28,20 @@ var Homebrew = React.createClass({ }, componentWillMount: function() { Router = CreateRouter({ - '/homebrew/edit/:id' : (args) => { + '/edit/:id' : (args) => { return }, - '/homebrew/share/:id' : (args) => { + '/share/:id' : (args) => { return }, - '/homebrew/changelog' : (args) => { + '/changelog' : (args) => { return }, - '/homebrew/new' : (args) => { + '/new' : (args) => { return }, - '/homebrew*' : , + '*' : , }); }, render : function(){ diff --git a/client/homebrew/navbar/issue.navitem.jsx b/client/homebrew/navbar/issue.navitem.jsx index 12716d2..3631ce7 100644 --- a/client/homebrew/navbar/issue.navitem.jsx +++ b/client/homebrew/navbar/issue.navitem.jsx @@ -2,7 +2,7 @@ var React = require('react'); var Nav = require('naturalcrit/nav/nav.jsx'); module.exports = function(props){ - return + return report issue }; \ No newline at end of file diff --git a/client/homebrew/navbar/navbar.jsx b/client/homebrew/navbar/navbar.jsx index 17e0460..d824867 100644 --- a/client/homebrew/navbar/navbar.jsx +++ b/client/homebrew/navbar/navbar.jsx @@ -8,10 +8,10 @@ var Navbar = React.createClass({ return - +
The Homebrewery
- v2.1.1 + v2.2.0
{this.props.children}
diff --git a/client/homebrew/navbar/print.navitem.jsx b/client/homebrew/navbar/print.navitem.jsx index 1b1796c..439cda4 100644 --- a/client/homebrew/navbar/print.navitem.jsx +++ b/client/homebrew/navbar/print.navitem.jsx @@ -2,7 +2,7 @@ var React = require('react'); var Nav = require('naturalcrit/nav/nav.jsx'); module.exports = function(props){ - return + return print }; \ No newline at end of file diff --git a/client/homebrew/navbar/recent.navitem.jsx b/client/homebrew/navbar/recent.navitem.jsx index 703c029..76be741 100644 --- a/client/homebrew/navbar/recent.navitem.jsx +++ b/client/homebrew/navbar/recent.navitem.jsx @@ -90,7 +90,7 @@ module.exports = { currentBrew={{ id : this.props.brew.shareId, title : this.props.brew.title, - url : `/homebrew/share/${this.props.brew.shareId}` + url : `/share/${this.props.brew.shareId}` }} /> }, @@ -110,7 +110,7 @@ module.exports = { currentBrew={{ id : this.props.brew.editId, title : this.props.brew.title, - url : `/homebrew/edit/${this.props.brew.editId}` + url : `/edit/${this.props.brew.editId}` }} /> }, diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index ef81126..5c6bda6 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -92,10 +92,10 @@ var EditPage = React.createClass({ if(!confirm("are you sure you want to delete this brew?")) return; if(!confirm("are you REALLY sure? You will not be able to recover it")) return; - request.get('/homebrew/api/remove/' + this.props.brew.editId) + request.get('/api/remove/' + this.props.brew.editId) .send() .end(function(err, res){ - window.location.href = '/homebrew'; + window.location.href = '/'; }); }, @@ -118,7 +118,7 @@ var EditPage = React.createClass({ }); request - .put('/homebrew/api/update/' + this.props.brew.editId) + .put('/api/update/' + this.props.brew.editId) .send({ text : this.state.text, title : this.state.title @@ -177,7 +177,7 @@ var EditPage = React.createClass({ {this.renderSaveButton()} - + Share diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index 0e95c50..c489de3 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -6,6 +6,7 @@ var request = require("superagent"); var Nav = require('naturalcrit/nav/nav.jsx'); var Navbar = require('../../navbar/navbar.jsx'); var PatreonNavItem = require('../../navbar/patreon.navitem.jsx'); +var IssueNavItem = require('../../navbar/issue.navitem.jsx'); var SplitPane = require('naturalcrit/splitPane/splitPane.jsx'); @@ -26,7 +27,7 @@ var HomePage = React.createClass({ }; }, handleSave : function(){ - request.post('/homebrew/api') + request.post('/api') .send({ title : 'Change This', text : this.state.text @@ -34,7 +35,7 @@ var HomePage = React.createClass({ .end((err, res)=>{ if(err) return; var brew = res.body; - window.location = '/homebrew/edit/' + brew.editId; + window.location = '/edit/' + brew.editId; }); }, handleSplitMove : function(){ @@ -49,13 +50,11 @@ var HomePage = React.createClass({ return - - report issue - - + + Changelog - + New Brew @@ -77,7 +76,7 @@ var HomePage = React.createClass({ Save current - + Create your own diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index 62eda48..daa0c40 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -6,6 +6,7 @@ var request = require("superagent"); var Nav = require('naturalcrit/nav/nav.jsx'); var Navbar = require('../../navbar/navbar.jsx'); var EditTitle = require('../../navbar/editTitle.navitem.jsx'); +var IssueNavItem = require('../../navbar/issue.navitem.jsx'); var SplitPane = require('naturalcrit/splitPane/splitPane.jsx'); @@ -64,7 +65,7 @@ var NewPage = React.createClass({ this.setState({ isSaving : true }); - request.post('/homebrew/api') + request.post('/api') .send({ title : this.state.title, text : this.state.text @@ -80,7 +81,7 @@ var NewPage = React.createClass({ window.onbeforeunload = function(){}; var brew = res.body; localStorage.removeItem(KEY); - window.location = '/homebrew/edit/' + brew.editId; + window.location = '/edit/' + brew.editId; }) }, @@ -96,7 +97,6 @@ var NewPage = React.createClass({ } }, - renderNavbar : function(){ return @@ -105,9 +105,7 @@ var NewPage = React.createClass({ {this.renderSaveButton()} - - report issue - + }, @@ -116,7 +114,6 @@ var NewPage = React.createClass({ return
{this.renderNavbar()} -
diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx index f1333b7..aa9c860 100644 --- a/client/homebrew/pages/sharePage/sharePage.jsx +++ b/client/homebrew/pages/sharePage/sharePage.jsx @@ -42,7 +42,7 @@ var SharePage = React.createClass({ - + source diff --git a/client/main/main.jsx b/client/main/main.jsx deleted file mode 100644 index 43fb07c..0000000 --- a/client/main/main.jsx +++ /dev/null @@ -1,86 +0,0 @@ -var React = require('react'); -var _ = require('lodash'); -var cx = require('classnames'); - -var Router = require('pico-router'); - -var NaturalCritIcon = require('naturalcrit/svg/naturalcrit.svg.jsx'); -var HomebrewIcon = require('naturalcrit/svg/homebrew.svg.jsx'); - -var Main = React.createClass({ - getDefaultProps: function() { - return { - tools : [ - { - id : 'homebrew', - path : '/homebrew', - name : 'The Homebrewery', - icon : , - desc : 'Make authentic-looking 5e homebrews using Markdown', - - show : true, - beta : false - }, - { - id : 'homebrew2', - path : '/homebrew', - name : 'The Homebrewery', - icon : , - desc : 'Make authentic-looking 5e homebrews using Markdown', - - show : false, - beta : true - }, - { - id : 'homebrewfg2', - path : '/homebrew', - name : 'The Homebrewery', - icon : , - desc : 'Make authentic-looking 5e homebrews using Markdown', - - show : false, - beta : false - } - - ] - }; - }, - - renderTool : function(tool){ - if(!tool.show) return null; - - return -
- {tool.icon} -

{tool.name}

-

{tool.desc}

-
-
; - }, - - renderTools : function(){ - return _.map(this.props.tools, (tool)=>{ - return this.renderTool(tool); - }); - }, - - render : function(){ - return
-
-
- - - Natural - Crit - -
-

Top-tier tools for the discerning DM

-
-
- {this.renderTools()} -
-
- } -}); - -module.exports = Main; diff --git a/client/main/main.less b/client/main/main.less deleted file mode 100644 index 21f13ed..0000000 --- a/client/main/main.less +++ /dev/null @@ -1,136 +0,0 @@ -@import 'naturalcrit/styles/core.less'; -.main{ - height : 100vh; - background-color : white; - .top{ - .fadeInTop(1s); - .delay(0.5); - margin-bottom : 100px; - padding-top : 100px; - text-align : center; - .logo{ - font-size : 4em; - color : black; - svg{ - height : .9em; - margin-right : .2em; - cursor : pointer; - fill : black; - } - .name{ - font-family : 'CodeLight'; - .crit{ - font-family : 'CodeBold'; - } - } - } - p{ - margin-top : 10px; - font-size : 1.3em; - font-style : italic; - color : @grey; - } - } - .tools{ - width : 100%; - text-align : center; - .tool{ - .sequentialDelay(0.5s, 1s); - .fadeInDown(1s); - .keep(); - display : inline-block; - cursor : pointer; - opacity : 0; - color : black; - text-align : center; - text-decoration : none; - &+.tool{ - border-left : 1px solid #666; - } - .content{ - .addSketch(360px); - .animateAll(0.5s); - position : relative; - width : 320px; - padding : 35px; - &:hover{ - svg, h2{ - .transform(scale(1.3)); - } - } - h2{ - .animateAll(0.5s); - font-family : 'CodeBold'; - font-size : 2em; - } - p{ - max-width : 300px; - margin : 20px auto; - line-height : 1.5em; - } - svg{ - .animateAll(0.5s); - height : 10em; - } - } - .content:hover{ - background-color : fade(@teal, 20%); - } - //Beta styles - &.beta{ - cursor : initial; - .content{ - &:hover{ - svg, h2{ - .transform(scale(1.0)); - } - } - svg, h2{ - opacity : 0.3; - } - &:after{ - .animateAll(); - content : "beta!"; - position : absolute; - display : block; - top : 120px; - left : 0px; - width : 100%; - padding : 10px 0px; - //opacity : 0; - background-color : fade(@grey, 50%); - font-size : 2em; - font-weight : 800; - text-align : center; - text-transform : uppercase; - } - } - } - } - } -} -.addSketch(@length, @color : black){ - path, line, polyline, circle, rect, polygon { - .sketch(@length, @color, 4s); - stroke-dasharray : @length; - stroke-dashoffset : 0px; - stroke : @color; - stroke-width : 0.5px; - fill : @color; - //.animateAll(3s); - } -} -.sketch(@length, @color : black, @duration : 3s, @easing : @defaultEasing){ - .createAnimation(sketch, @duration, @easing); - .sketchKeyFrames(){ - 0% { stroke-dashoffset : @length; fill: transparent;} - 50% { stroke-dashoffset : @length; fill: transparent;} - 80% { stroke-dashoffset : 0px; fill: transparent;} - 100% { stroke-dashoffset : 0px; fill:@color;} - } - @-webkit-keyframes sketch {.sketchKeyFrames();} - @-moz-keyframes sketch {.sketchKeyFrames();} - @-ms-keyframes sketch {.sketchKeyFrames();} - @-o-keyframes sketch {.sketchKeyFrames();} - @keyframes sketch {.sketchKeyFrames();} -} \ No newline at end of file diff --git a/client/template.dot b/client/template.dot index cd1309a..a31d074 100644 --- a/client/template.dot +++ b/client/template.dot @@ -4,10 +4,10 @@ - + {{=vitreum.css}} {{=vitreum.globals}} - Natural Crit - D&D Tools + The Homebrewery - NaturalCrit
{{=vitreum.component}}
diff --git a/gulpfile.js b/gulpfile.js index b054f1d..90b6e82 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -6,7 +6,6 @@ var gulp = require("gulp"); var gulp = vitreumTasks(gulp, { entryPoints: [ - './client/main', './client/homebrew', './client/admin' ], diff --git a/server.js b/server.js index 93064a9..8ae82b3 100644 --- a/server.js +++ b/server.js @@ -43,17 +43,120 @@ app.get('/admin', function(req, res){ //Populate homebrew routes app = require('./server/homebrew.api.js')(app); -app = require('./server/homebrew.server.js')(app); +//app = require('./server/homebrew.server.js')(app); + +var HomebrewModel = require('./server/homebrew.model.js').model; + +//Edit Page +app.get('/edit/:id', function(req, res){ + HomebrewModel.find({editId : 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 errObj = {text: "# oops\nCould not find the homebrew."} + if(objs.length){ + resObj = objs[0]; + } + + vitreumRender({ + page: './build/homebrew/bundle.dot', + globals:{}, + prerenderWith : './client/homebrew/homebrew.jsx', + initialProps: { + url: req.originalUrl, + brew : resObj || errObj + }, + clearRequireCache : !process.env.PRODUCTION, + }, function (err, page) { + return res.send(page) + }); + }) +}); + + +//Share Page +app.get('/share/: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 resObj = null; + var errObj = {text: "# oops\nCould not find the homebrew."} + + if(objs.length){ + resObj = objs[0]; + resObj.lastViewed = new Date(); + resObj.views = resObj.views + 1; + resObj.save(); + } + + vitreumRender({ + page: './build/homebrew/bundle.dot', + globals:{}, + prerenderWith : './client/homebrew/homebrew.jsx', + initialProps: { + url: req.originalUrl, + brew : resObj || errObj + }, + clearRequireCache : !process.env.PRODUCTION, + }, function (err, page) { + return res.send(page) + }); + }) +}); + +//Print Page +var Markdown = require('marked'); +var PHBStyle = '' +app.get('/print/: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 content = _.map(brew.text.split('\\page'), function(pageText){ + return '
' + Markdown(pageText) + '
'; + }).join('\n'); + + var dialog = ''; + if(req.query && req.query.dialog) dialog = 'onload="window.print()"'; + + var title = '' + brew.title + ''; + var page = `${title} ${PHBStyle}${content}` + + 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('>', '>'); + return res.send(`
${text}
`); + }); +}); + +//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('*', function (req, res) { vitreumRender({ - page: './build/main/bundle.dot', + page: './build/homebrew/bundle.dot', globals:{}, - prerenderWith : './client/main/main.jsx', + prerenderWith : './client/homebrew/homebrew.jsx', initialProps: { - url: req.originalUrl + url: req.originalUrl, + welcomeText : welcomeText, + changelog : changelogText }, clearRequireCache : !process.env.PRODUCTION, }, function (err, page) { @@ -62,6 +165,8 @@ app.get('*', function (req, res) { }); + + var port = process.env.PORT || 8000; app.listen(port); console.log('Listening on localhost:' + port); \ No newline at end of file diff --git a/server/homebrew.api.js b/server/homebrew.api.js index f3020de..238acb0 100644 --- a/server/homebrew.api.js +++ b/server/homebrew.api.js @@ -30,13 +30,13 @@ var getTopBrews = function(cb){ module.exports = function(app){ - app.get('/homebrew/top', function(req, res){ + app.get('/api/top', function(req, res){ getTopBrews(function(topBrews){ return res.json(topBrews); }); }); - app.post('/homebrew/api', function(req, res){ + app.post('/api', function(req, res){ var newHomebrew = new HomebrewModel(req.body); newHomebrew.save(function(err, obj){ if(err) return; @@ -44,7 +44,7 @@ module.exports = function(app){ }) }); - app.put('/homebrew/api/update/:id', function(req, res){ + app.put('/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]; @@ -58,7 +58,7 @@ module.exports = function(app){ }); }); - app.get('/homebrew/api/remove/:id', function(req, res){ + app.get('/api/remove/: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]; @@ -70,7 +70,7 @@ module.exports = function(app){ }); //Removes all empty brews that are older than 3 days and that are shorter than a tweet - app.get('/homebrew/api/invalid', mw.adminOnly, function(req, res){ + app.get('/api/invalid', mw.adminOnly, function(req, res){ var invalidBrewQuery = HomebrewModel.find({ '$where' : "this.text.length < 140", createdAt: { @@ -94,7 +94,7 @@ module.exports = function(app){ }); - app.get('/homebrew/api/search', mw.adminOnly, function(req, res){ + app.get('/api/search', mw.adminOnly, function(req, res){ var page = req.query.page || 0; var count = req.query.count || 20; diff --git a/server/homebrew.server.js b/server/homebrew.server.js deleted file mode 100644 index 27d6699..0000000 --- a/server/homebrew.server.js +++ /dev/null @@ -1,135 +0,0 @@ -var _ = require('lodash'); -var vitreumRender = require('vitreum/render'); -var HomebrewModel = require('./homebrew.model.js').model; - - - - -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 - app.get('/homebrew/edit/:id', function(req, res){ - HomebrewModel.find({editId : 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 errObj = {text: "# oops\nCould not find the homebrew."} - if(objs.length){ - resObj = objs[0]; - } - - vitreumRender({ - page: './build/homebrew/bundle.dot', - globals:{}, - prerenderWith : './client/homebrew/homebrew.jsx', - initialProps: { - url: req.originalUrl, - brew : resObj || errObj - }, - clearRequireCache : !process.env.PRODUCTION, - }, function (err, page) { - return res.send(page) - }); - }) - }); - - - //Share Page - app.get('/homebrew/share/: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 resObj = null; - var errObj = {text: "# oops\nCould not find the homebrew."} - - if(objs.length){ - resObj = objs[0]; - resObj.lastViewed = new Date(); - resObj.views = resObj.views + 1; - resObj.save(); - } - - vitreumRender({ - page: './build/homebrew/bundle.dot', - globals:{}, - prerenderWith : './client/homebrew/homebrew.jsx', - initialProps: { - url: req.originalUrl, - brew : resObj || errObj - }, - clearRequireCache : !process.env.PRODUCTION, - }, function (err, page) { - return res.send(page) - }); - }) - }); - - //Print Page - var Markdown = require('marked'); - var PHBStyle = '' - app.get('/homebrew/print/: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 content = _.map(brew.text.split('\\page'), function(pageText){ - return '
' + Markdown(pageText) + '
'; - }).join('\n'); - - var dialog = ''; - if(req.query && req.query.dialog) dialog = 'onload="window.print()"'; - - var title = '' + brew.title + ''; - var page = `${title} ${PHBStyle}${content}` - - return res.send(page) - }); - }); - - //Source page - String.prototype.replaceAll = function(s,r){return this.split(s).join(r)} - app.get('/homebrew/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('>', '>'); - return res.send(`
${text}
`); - }); - }); - - //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', - globals:{}, - prerenderWith : './client/homebrew/homebrew.jsx', - initialProps: { - url: req.originalUrl, - welcomeText : welcomeText, - changelog : changelogText - }, - clearRequireCache : !process.env.PRODUCTION, - }, function (err, page) { - return res.send(page) - }); - }); - - return app; -} \ No newline at end of file