1
0
mirror of https://github.com/stolksdorf/homebrewery.git synced 2025-12-12 23:45:57 +00:00

Swapped over all urls and refs to old url scheme

This commit is contained in:
Scott Tolksdorf
2016-06-04 18:29:25 -04:00
parent 60092f404c
commit 7ca4e8ffa6
17 changed files with 144 additions and 401 deletions

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -28,20 +28,20 @@ var Homebrew = React.createClass({
},
componentWillMount: function() {
Router = CreateRouter({
'/homebrew/edit/:id' : (args) => {
'/edit/:id' : (args) => {
return <EditPage id={args.id} brew={this.props.brew} />
},
'/homebrew/share/:id' : (args) => {
'/share/:id' : (args) => {
return <SharePage id={args.id} brew={this.props.brew} />
},
'/homebrew/changelog' : (args) => {
'/changelog' : (args) => {
return <SharePage brew={{title : 'Changelog', text : this.props.changelog}} />
},
'/homebrew/new' : (args) => {
'/new' : (args) => {
return <NewPage />
},
'/homebrew*' : <HomePage welcomeText={this.props.welcomeText} />,
'*' : <HomePage welcomeText={this.props.welcomeText} />,
});
},
render : function(){

View File

@@ -2,7 +2,7 @@ var React = require('react');
var Nav = require('naturalcrit/nav/nav.jsx');
module.exports = function(props){
return <Nav.item newTab={true} href='https://github.com/stolksdorf/naturalcrit/issues' color='red' icon='fa-bug'>
return <Nav.item newTab={true} href='https://github.com/stolksdorf/homebrewery/issues' color='red' icon='fa-bug'>
report issue
</Nav.item>
};

View File

@@ -8,10 +8,10 @@ var Navbar = React.createClass({
return <Nav.base>
<Nav.section>
<Nav.logo />
<Nav.item href='/homebrew' className='homebrewLogo'>
<Nav.item href='/' className='homebrewLogo'>
<div>The Homebrewery</div>
</Nav.item>
<Nav.item>v2.1.1</Nav.item>
<Nav.item>v2.2.0</Nav.item>
</Nav.section>
{this.props.children}
</Nav.base>

View File

@@ -2,7 +2,7 @@ var React = require('react');
var Nav = require('naturalcrit/nav/nav.jsx');
module.exports = function(props){
return <Nav.item newTab={true} href={'/homebrew/print/' + props.shareId +'?dialog=true'} color='purple' icon='fa-print'>
return <Nav.item newTab={true} href={'/print/' + props.shareId +'?dialog=true'} color='purple' icon='fa-print'>
print
</Nav.item>
};

View File

@@ -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}`
}}
/>
},

View File

@@ -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({
<Nav.section>
{this.renderSaveButton()}
<RecentlyEdited brew={this.props.brew} />
<Nav.item newTab={true} href={'/homebrew/share/' + this.props.brew.shareId} color='teal' icon='fa-share-alt'>
<Nav.item newTab={true} href={'/share/' + this.props.brew.shareId} color='teal' icon='fa-share-alt'>
Share
</Nav.item>
<PrintLink shareId={this.props.brew.shareId} />

View File

@@ -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 <Navbar>
<Nav.section>
<PatreonNavItem />
<Nav.item newTab={true} href='https://github.com/stolksdorf/naturalcrit/issues' color='red' icon='fa-bug'>
report issue
</Nav.item>
<Nav.item newTab={true} href='/homebrew/changelog' color='purple' icon='fa-file-text-o'>
<IssueNavItem />
<Nav.item newTab={true} href='/changelog' color='purple' icon='fa-file-text-o'>
Changelog
</Nav.item>
<Nav.item href='/homebrew/new' color='green' icon='fa-external-link'>
<Nav.item href='/new' color='green' icon='fa-external-link'>
New Brew
</Nav.item>
</Nav.section>
@@ -77,7 +76,7 @@ var HomePage = React.createClass({
Save current <i className='fa fa-save' />
</div>
<a href='/homebrew/new' className='floatingNewButton'>
<a href='/new' className='floatingNewButton'>
Create your own <i className='fa fa-magic' />
</a>
</div>

View File

@@ -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 <Navbar>
<Nav.section>
@@ -105,9 +105,7 @@ var NewPage = React.createClass({
<Nav.section>
{this.renderSaveButton()}
<Nav.item newTab={true} href='https://github.com/stolksdorf/naturalcrit/issues' color='red' icon='fa-bug'>
report issue
</Nav.item>
<IssueNavItem />
</Nav.section>
</Navbar>
},
@@ -116,7 +114,6 @@ var NewPage = React.createClass({
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'/>

View File

@@ -42,7 +42,7 @@ var SharePage = React.createClass({
<Nav.section>
<RecentlyViewed brew={this.props.brew} />
<PrintLink shareId={this.props.brew.shareId} />
<Nav.item href={'/homebrew/source/' + this.props.brew.shareId} color='teal' icon='fa-code'>
<Nav.item href={'/source/' + this.props.brew.shareId} color='teal' icon='fa-code'>
source
</Nav.item>
</Nav.section>

View File

@@ -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 : <HomebrewIcon />,
desc : 'Make authentic-looking 5e homebrews using Markdown',
show : true,
beta : false
},
{
id : 'homebrew2',
path : '/homebrew',
name : 'The Homebrewery',
icon : <HomebrewIcon />,
desc : 'Make authentic-looking 5e homebrews using Markdown',
show : false,
beta : true
},
{
id : 'homebrewfg2',
path : '/homebrew',
name : 'The Homebrewery',
icon : <HomebrewIcon />,
desc : 'Make authentic-looking 5e homebrews using Markdown',
show : false,
beta : false
}
]
};
},
renderTool : function(tool){
if(!tool.show) return null;
return <a href={tool.path} className={cx('tool', tool.id, {beta : tool.beta})} key={tool.id}>
<div className='content'>
{tool.icon}
<h2>{tool.name}</h2>
<p>{tool.desc}</p>
</div>
</a>;
},
renderTools : function(){
return _.map(this.props.tools, (tool)=>{
return this.renderTool(tool);
});
},
render : function(){
return <div className='main'>
<div className='top'>
<div className='logo'>
<NaturalCritIcon />
<span className='name'>
Natural
<span className='crit'>Crit</span>
</span>
</div>
<p>Top-tier tools for the discerning DM</p>
</div>
<div className='tools'>
{this.renderTools()}
</div>
</div>
}
});
module.exports = Main;

View File

@@ -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();}
}

View File

@@ -4,10 +4,10 @@
<script>global=window</script>
<link href="//netdna.bootstrapcdn.com/font-awesome/4.6.2/css/font-awesome.min.css" rel="stylesheet" />
<link href="//fonts.googleapis.com/css?family=Open+Sans:400,300,600,700" rel="stylesheet" type="text/css" />
<link rel="icon" href="/assets/main/favicon.ico" type="image/x-icon" />
<link rel="icon" href="/assets/homebrew/favicon.ico" type="image/x-icon" />
{{=vitreum.css}}
{{=vitreum.globals}}
<title>Natural Crit - D&D Tools</title>
<title>The Homebrewery - NaturalCrit</title>
</head>
<body>
<div id="reactContainer">{{=vitreum.component}}</div>

View File

@@ -6,7 +6,6 @@ var gulp = require("gulp");
var gulp = vitreumTasks(gulp, {
entryPoints: [
'./client/main',
'./client/homebrew',
'./client/admin'
],

113
server.js
View File

@@ -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 = '<style>' + require('fs').readFileSync('./phb.standalone.css', 'utf8') + '</style>'
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 '<div class="phb print">' + Markdown(pageText) + '</div>';
}).join('\n');
var dialog = '';
if(req.query && req.query.dialog) dialog = 'onload="window.print()"';
var title = '<title>' + brew.title + '</title>';
var page = `<html><head>${title} ${PHBStyle}</head><body ${dialog}>${content}</body></html>`
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('<', '&lt;').replaceAll('>', '&gt;');
return res.send(`<code><pre>${text}</pre></code>`);
});
});
//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);

View File

@@ -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;

View File

@@ -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 = '<style>' + require('fs').readFileSync('./phb.standalone.css', 'utf8') + '</style>'
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 '<div class="phb print">' + Markdown(pageText) + '</div>';
}).join('\n');
var dialog = '';
if(req.query && req.query.dialog) dialog = 'onload="window.print()"';
var title = '<title>' + brew.title + '</title>';
var page = `<html><head>${title} ${PHBStyle}</head><body ${dialog}>${content}</body></html>`
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('<', '&lt;').replaceAll('>', '&gt;');
return res.send(`<code><pre>${text}</pre></code>`);
});
});
//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;
}