diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx
index e5040cd..96605f2 100644
--- a/client/homebrew/brewRenderer/brewRenderer.jsx
+++ b/client/homebrew/brewRenderer/brewRenderer.jsx
@@ -9,7 +9,7 @@ var PAGE_HEIGHT = 1056 + 30;
var BrewRenderer = React.createClass({
getDefaultProps: function() {
return {
- brewText : ''
+ text : ''
};
},
getInitialState: function() {
@@ -68,7 +68,7 @@ var BrewRenderer = React.createClass({
},
renderPages : function(){
- var pages = this.props.brewText.split('\\page');
+ var pages = this.props.text.split('\\page');
this.totalPages = pages.length;
return _.map(pages, (page, index)=>{
diff --git a/client/homebrew/brewRenderer/brewRenderer.less b/client/homebrew/brewRenderer/brewRenderer.less
index 664d33c..1608751 100644
--- a/client/homebrew/brewRenderer/brewRenderer.less
+++ b/client/homebrew/brewRenderer/brewRenderer.less
@@ -1,31 +1,23 @@
+
@import (less) './client/homebrew/phbStyle/phb.style.less';
-
-
.pane{
- position: relative;
+ position : relative;
}
-
.brewRenderer{
- overflow-y: scroll;
-
- //height : calc(~"100%");
-
+ overflow-y : scroll;
.pageInfo{
- background-color: #333;
- color : White;
- position: absolute;
- padding: 8px 10px;
- font-weight: 800;
- font-size: 10px;
- z-index : 1000;
-
- bottom: 0;
- right : 17px;
+ position : absolute;
+ right : 17px;
+ bottom : 0;
+ z-index : 1000;
+ padding : 8px 10px;
+ background-color : #333;
+ font-size : 10px;
+ font-weight : 800;
+ color : white;
}
-
.pages{
- margin: 30px 0px;
-
+ margin : 30px 0px;
&>.phb{
margin-right : auto;
margin-bottom : 30px;
@@ -33,6 +25,4 @@
box-shadow : 1px 4px 14px #000;
}
}
-
-
}
\ No newline at end of file
diff --git a/client/homebrew/editor/editor.less b/client/homebrew/editor/editor.less
index 3e4a8b3..f10e646 100644
--- a/client/homebrew/editor/editor.less
+++ b/client/homebrew/editor/editor.less
@@ -1,74 +1,51 @@
.editor{
- position : relative;
-
- width : 100%;
-
- //height : 500px;
-
+ position : relative;
+ width : 100%;
.snippetBar{
- padding : 5px;
- background-color: #ddd;
-
- display: flex;
-
- align-items: center;
-
-
+ display : flex;
+ padding : 5px;
+ background-color : #ddd;
+ align-items : center;
.snippetGroup{
.animate(background-color);
-
+ margin : 0px 10px;
+ padding : 5px;
+ font-size : 15px;
border-radius : 5px;
&:hover, &.selected{
- background-color: #999;
+ background-color : #999;
}
- padding : 5px;
- font-size: 15px;
- margin: 0px 10px;
-
.text{
- line-height: 20px;
-
+ line-height : 20px;
.groupName{
- margin-left: 6px;
- font-size: 12px;
-
+ margin-left : 6px;
+ font-size : 12px;
}
}
-
- //cursor : pointer;
-
&:hover{
.dropdown{
- visibility: visible;
+ visibility : visible;
}
}
-
-
.dropdown{
- position: absolute;
- z-index : 1000;
- background-color: #ddd;
- padding : 5px;
- visibility: hidden;
-
+ position : absolute;
+ visibility : hidden;
+ z-index : 1000;
+ padding : 5px;
+ background-color : #ddd;
.snippet{
- font-size: 13px;
- padding : 10px;
.animate(background-color);
- cursor : pointer;
+ padding : 10px;
+ cursor : pointer;
+ font-size : 13px;
&:hover{
- background-color: #999;
+ background-color : #999;
}
}
-
}
-
}
-
-
}
-
.codeEditor{
height : 100%;
}
diff --git a/client/homebrew/homebrew.jsx b/client/homebrew/homebrew.jsx
index 0ec2682..f1bc168 100644
--- a/client/homebrew/homebrew.jsx
+++ b/client/homebrew/homebrew.jsx
@@ -17,7 +17,8 @@ var Homebrew = React.createClass({
welcomeText : "",
changelog : "",
brew : {
- text : "",
+ title : '',
+ text : '',
shareId : null,
editId : null,
createdAt : null,
@@ -28,14 +29,14 @@ var Homebrew = React.createClass({
componentWillMount: function() {
Router = CreateRouter({
'/homebrew/edit/:id' : (args) => {
- return
+ return
},
'/homebrew/share/:id' : (args) => {
- return
+ return
},
'/homebrew/changelog' : (args) => {
- return
+ return
},
'/homebrew/new' : (args) => {
return
diff --git a/client/homebrew/navbar/redditShare.navitem.jsx b/client/homebrew/navbar/issue.navitem.jsx
similarity index 99%
rename from client/homebrew/navbar/redditShare.navitem.jsx
rename to client/homebrew/navbar/issue.navitem.jsx
index a9839dd..b78ca83 100644
--- a/client/homebrew/navbar/redditShare.navitem.jsx
+++ b/client/homebrew/navbar/issue.navitem.jsx
@@ -10,7 +10,6 @@ const MAX_URL_SIZE = 2083;
const MAIN_URL = "https://www.reddit.com/r/UnearthedArcana/submit?selftext=true"
-
var RedditShare = React.createClass({
getDefaultProps: function() {
return {
diff --git a/client/homebrew/navbar/navbar.less b/client/homebrew/navbar/navbar.less
index 3c44101..d95678c 100644
--- a/client/homebrew/navbar/navbar.less
+++ b/client/homebrew/navbar/navbar.less
@@ -39,4 +39,11 @@
}
}
}
+ .brewTitle.navItem{
+ font-size : 12px;
+ font-weight : 800;
+ color : white;
+ text-align : center;
+ text-transform: initial;
+ }
}
\ No newline at end of file
diff --git a/client/homebrew/navbar/print.navitem.jsx b/client/homebrew/navbar/print.navitem.jsx
new file mode 100644
index 0000000..b78ca83
--- /dev/null
+++ b/client/homebrew/navbar/print.navitem.jsx
@@ -0,0 +1,51 @@
+var React = require('react');
+var _ = require('lodash');
+var cx = require('classnames');
+
+//var striptags = require('striptags');
+
+var Nav = require('naturalcrit/nav/nav.jsx');
+
+const MAX_URL_SIZE = 2083;
+const MAIN_URL = "https://www.reddit.com/r/UnearthedArcana/submit?selftext=true"
+
+
+var RedditShare = React.createClass({
+ getDefaultProps: function() {
+ return {
+ brew : {
+ title : '',
+ sharedId : '',
+ text : ''
+ }
+ };
+ },
+
+ getText : function(){
+
+ },
+
+
+ handleClick : function(){
+ var url = [
+ MAIN_URL,
+ 'title=' + encodeURIComponent(this.props.brew.title ? this.props.brew.title : 'Check out my brew!'),
+
+ 'text=' + encodeURIComponent(this.props.brew.text)
+
+
+ ].join('&');
+
+ window.open(url, '_blank');
+ },
+
+
+ render : function(){
+ return
+ share on reddit
+
+ },
+
+});
+
+module.exports = RedditShare;
\ No newline at end of file
diff --git a/client/homebrew/navbar/reddit.navitem.jsx b/client/homebrew/navbar/reddit.navitem.jsx
new file mode 100644
index 0000000..b78ca83
--- /dev/null
+++ b/client/homebrew/navbar/reddit.navitem.jsx
@@ -0,0 +1,51 @@
+var React = require('react');
+var _ = require('lodash');
+var cx = require('classnames');
+
+//var striptags = require('striptags');
+
+var Nav = require('naturalcrit/nav/nav.jsx');
+
+const MAX_URL_SIZE = 2083;
+const MAIN_URL = "https://www.reddit.com/r/UnearthedArcana/submit?selftext=true"
+
+
+var RedditShare = React.createClass({
+ getDefaultProps: function() {
+ return {
+ brew : {
+ title : '',
+ sharedId : '',
+ text : ''
+ }
+ };
+ },
+
+ getText : function(){
+
+ },
+
+
+ handleClick : function(){
+ var url = [
+ MAIN_URL,
+ 'title=' + encodeURIComponent(this.props.brew.title ? this.props.brew.title : 'Check out my brew!'),
+
+ 'text=' + encodeURIComponent(this.props.brew.text)
+
+
+ ].join('&');
+
+ window.open(url, '_blank');
+ },
+
+
+ render : function(){
+ return
+ share on reddit
+
+ },
+
+});
+
+module.exports = RedditShare;
\ No newline at end of file
diff --git a/client/homebrew/navbar/source.navitem.jsx b/client/homebrew/navbar/source.navitem.jsx
new file mode 100644
index 0000000..b78ca83
--- /dev/null
+++ b/client/homebrew/navbar/source.navitem.jsx
@@ -0,0 +1,51 @@
+var React = require('react');
+var _ = require('lodash');
+var cx = require('classnames');
+
+//var striptags = require('striptags');
+
+var Nav = require('naturalcrit/nav/nav.jsx');
+
+const MAX_URL_SIZE = 2083;
+const MAIN_URL = "https://www.reddit.com/r/UnearthedArcana/submit?selftext=true"
+
+
+var RedditShare = React.createClass({
+ getDefaultProps: function() {
+ return {
+ brew : {
+ title : '',
+ sharedId : '',
+ text : ''
+ }
+ };
+ },
+
+ getText : function(){
+
+ },
+
+
+ handleClick : function(){
+ var url = [
+ MAIN_URL,
+ 'title=' + encodeURIComponent(this.props.brew.title ? this.props.brew.title : 'Check out my brew!'),
+
+ 'text=' + encodeURIComponent(this.props.brew.text)
+
+
+ ].join('&');
+
+ window.open(url, '_blank');
+ },
+
+
+ render : function(){
+ return
+ share on reddit
+
+ },
+
+});
+
+module.exports = RedditShare;
\ No newline at end of file
diff --git a/client/homebrew/pageContainer/pageContainer.less b/client/homebrew/pageContainer/pageContainer.less
index 32d9d86..9d06624 100644
--- a/client/homebrew/pageContainer/pageContainer.less
+++ b/client/homebrew/pageContainer/pageContainer.less
@@ -1,15 +1,9 @@
-@import (less) './client/homebrew/phbStyle/phb.style.less';
+@import (less) './client/homebrew/phbStyle/phb.style.less';
.pageContainer{
background-color : @steel;
-// overflow-y: scroll;
-
-//height :100%;
-
-
.pages{
- padding : 30px 0px;
-
+ padding : 30px 0px;
&>.phb{
margin-right : auto;
margin-bottom : 30px;
@@ -17,5 +11,4 @@
box-shadow : 1px 4px 14px #000;
}
}
-
}
\ No newline at end of file
diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx
index 2496bcc..22f51ba 100644
--- a/client/homebrew/pages/editPage/editPage.jsx
+++ b/client/homebrew/pages/editPage/editPage.jsx
@@ -1,16 +1,32 @@
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 EditTitle = require('../../navbar/editTitle.navitem.jsx');
+
+
+var SplitPane = require('naturalcrit/splitPane/splitPane.jsx');
+var Editor = require('../../editor/editor.jsx');
+var BrewRenderer = require('../../brewRenderer/brewRenderer.jsx');
+
+
+
+
+
var Statusbar = require('../../statusbar/statusbar.jsx');
var PageContainer = require('../../pageContainer/pageContainer.jsx');
var Editor = require('../../editor/editor.jsx');
-var FullClassGen = require('../../editor/snippets/fullclass.gen.js');
-var request = require("superagent");
-var SAVE_TIMEOUT = 3000;
+
+const SAVE_TIMEOUT = 3000;
@@ -18,8 +34,9 @@ var EditPage = React.createClass({
getDefaultProps: function() {
return {
id : null,
- entry : {
- text : "",
+ brew : {
+ title : '',
+ text : '',
shareId : null,
editId : null,
createdAt : null,
@@ -30,9 +47,13 @@ var EditPage = React.createClass({
getInitialState: function() {
return {
- text: this.props.entry.text,
+ title : this.props.brew.title,
+ text: this.props.brew.text,
+ isSaving : false,
+ errors : null,
pending : false,
- lastUpdated : this.props.entry.updatedAt
+
+ lastUpdated : this.props.brew.updatedAt
};
},
@@ -43,6 +64,21 @@ var EditPage = React.createClass({
return "You have unsaved changes!";
}
},
+ componentWillUnmount: function() {
+ window.onbeforeunload = function(){};
+ },
+
+ handleSplitMove : function(){
+ this.refs.editor.update();
+ },
+
+ handleTitleChange : function(title){
+ this.setState({
+ title : title,
+ pending : true
+ });
+ this.save();
+ },
handleTextChange : function(text){
this.setState({
@@ -52,9 +88,20 @@ var EditPage = React.createClass({
this.save();
},
+ handleDelete : function(){
+ 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)
+ .send()
+ .end(function(err, res){
+ window.location.href = '/homebrew';
+ });
+ },
+
save : _.debounce(function(){
request
- .put('/homebrew/update/' + this.props.id)
+ .put('/homebrew/api/update/' + this.props.id)
.send({text : this.state.text})
.end((err, res) => {
this.setState({
@@ -64,25 +111,44 @@ var EditPage = React.createClass({
})
}, SAVE_TIMEOUT),
+
+
+ renderNavbar : function(){
+ return
+
+
+
+
+
+
+ report issue
+
+
+
+ Share
+
+
+
+ print
+
+
+
+ Delete
+
+
+
+
+ },
+
render : function(){
- return
+ return
+ {this.renderNavbar()}
-
-
-
-
-
}
diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx
index 8cbb966..5c64159 100644
--- a/client/homebrew/pages/homePage/homePage.jsx
+++ b/client/homebrew/pages/homePage/homePage.jsx
@@ -4,7 +4,6 @@ var cx = require('classnames');
var Nav = require('naturalcrit/nav/nav.jsx');
var Navbar = require('../../navbar/navbar.jsx');
-var RedditShare = require('../../navbar/redditShare.navitem.jsx');
@@ -14,64 +13,35 @@ var BrewRenderer = require('../../brewRenderer/brewRenderer.jsx');
-
-
-
var HomePage = React.createClass({
-
getDefaultProps: function() {
return {
welcomeText : ""
};
},
-
getInitialState: function() {
return {
text: this.props.welcomeText
};
},
-
-
handleSplitMove : function(){
this.refs.editor.update();
},
-
handleTextChange : function(text){
this.setState({
text : text
});
-
- //localStorage.setItem(KEY, text);
},
-
renderNavbar : function(){
return
- Bad Ass Brew
-
-
-
-
-
-
-
+
report issue
-
+
Changelog
-
+
New Brew
@@ -85,45 +55,15 @@ var HomePage = React.createClass({
-
+
-
-
- {/*
Create your own
- */}
}
});
module.exports = HomePage;
-
-/*
-
-
-
-
-
-
-
-*/
-
-
-
-/* Test code
-
-*/
\ No newline at end of file
diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx
index 8aaa014..1184e9c 100644
--- a/client/homebrew/pages/newPage/newPage.jsx
+++ b/client/homebrew/pages/newPage/newPage.jsx
@@ -32,8 +32,9 @@ var NewPage = React.createClass({
text : storage
})
}
- window.onbeforeunload = function(e){
- //return "Your homebrew isn't saved. Are you sure you want to leave?";
+ window.onbeforeunload = (e)=>{
+ if(this.state.text == '') return;
+ return "Your homebrew isn't saved. Are you sure you want to leave?";
};
},
@@ -104,15 +105,9 @@ var NewPage = React.createClass({
{this.renderSaveButton()}
-
-
+
report issue
-
},
@@ -125,7 +120,7 @@ var NewPage = React.createClass({
-
+
diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx
index b5a9bdf..49d0bbd 100644
--- a/client/homebrew/pages/sharePage/sharePage.jsx
+++ b/client/homebrew/pages/sharePage/sharePage.jsx
@@ -2,18 +2,22 @@ var React = require('react');
var _ = require('lodash');
var cx = require('classnames');
-var Statusbar = require('../../statusbar/statusbar.jsx');
+var Nav = require('naturalcrit/nav/nav.jsx');
+var Navbar = require('../../navbar/navbar.jsx');
-var PageContainer = require('../../pageContainer/pageContainer.jsx');
+var BrewRenderer = require('../../brewRenderer/brewRenderer.jsx');
+
+var replaceAll = function(str, find, replace) {
+ return str.replace(new RegExp(find, 'g'), replace);
+}
var SharePage = React.createClass({
getDefaultProps: function() {
return {
- id : null,
- entry : {
- text : "",
+ brew : {
+ title : '',
+ text : '',
shareId : null,
- editId : null,
createdAt : null,
updatedAt : null,
views : 0
@@ -21,20 +25,38 @@ var SharePage = React.createClass({
};
},
- render : function(){
- return(
-
-
+ openSourceWindow : function(){
+ var sourceWindow = window.open();
+ var content = replaceAll(this.props.brew.text, '<', '<');
+ content = replaceAll(content, '>', '>');
+ sourceWindow.document.write('
' + content + '
');
+ },
-
+
+ render : function(){
+
+ console.log('brew', this.props.brew);
+
+ return
+
+
+ {this.props.brew.title}
+
+
+
+
+ print
+
+
+ source
+
+
+
+
+
+
- );
+
}
});
diff --git a/server/homebrew.model.js b/server/homebrew.model.js
index 2ed1ee8..9cc4ef9 100644
--- a/server/homebrew.model.js
+++ b/server/homebrew.model.js
@@ -5,6 +5,7 @@ var _ = require('lodash');
var HomebrewSchema = mongoose.Schema({
shareId : {type : String, default: shortid.generate},
editId : {type : String, default: shortid.generate},
+ title : {type : String, default : ""},
text : {type : String, default : ""},
createdAt : { type: Date, default: Date.now },
diff --git a/todo.md b/todo.md
index 17b5c5c..e936161 100644
--- a/todo.md
+++ b/todo.md
@@ -8,7 +8,7 @@ X Add `infoBox` to BrewRenderer to show views, and current pages
- remove old status bar
X remove jsoneditor (if we don't need it)
X Add in markdown editor
-- Add the '/new' page and force save to reduce database size
+X Add the '/new' page and force save to reduce database size
X Add pagniation and query to the homebrew api
X Update the admin page with pagnition and a query box
X Test the old/small brew filtering for deleteion
@@ -17,8 +17,10 @@ X Partial rendering kills style tags on unrendered pages. Detect if pages have s
- Add in brew title, use for metadata?
- Add in specific entry point rendering in server.js
- Add in a tutorial page?
-- Add in a localstorage fallback on the `/new` page, clear it when they save
+X Add in a localstorage fallback on the `/new` page, clear it when they save
X Rename `/client/naturalCrit` -> `/client/main`
+- Move snippets into their new groups
+- Replace pseudo-elements with encoded images
## v1.6
- Add error handling to the saving wdiget in the status bar