diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx
index ecb748ed2..b81bbb3ba 100644
--- a/client/homebrew/brewRenderer/brewRenderer.jsx
+++ b/client/homebrew/brewRenderer/brewRenderer.jsx
@@ -3,13 +3,15 @@ var _ = require('lodash');
var cx = require('classnames');
var Markdown = require('naturalcrit/markdown.js');
+var ErrorBar = require('./errorBar/errorBar.jsx');
var PAGE_HEIGHT = 1056 + 30;
var BrewRenderer = React.createClass({
getDefaultProps: function() {
return {
- text : ''
+ text : '',
+ errors : []
};
},
getInitialState: function() {
@@ -75,20 +77,6 @@ var BrewRenderer = React.createClass({
},
renderPage : function(pageText, index){
-
- var html = Markdown.render(pageText)
-
- var checkHTML = function(html) {
- var doc = document.createElement('div');
- doc.innerHTML = html;
- console.log(doc.innerHTML);
- return ( doc.innerHTML === html );
- }
-
- console.log('page', index, checkHTML(html));
-
-
-
return
},
@@ -96,17 +84,6 @@ var BrewRenderer = React.createClass({
var pages = this.props.text.split('\\page');
this.totalPages = pages.length;
-
- //TESTING VALIDATION
- try{
- var temp = Markdown.validate(this.props.text);
-
- console.log(temp);
- }catch(e){
- console.log('ERR', e);
- }
-
-
return _.map(pages, (page, index)=>{
if(this.shouldRender(page, index)){
return this.renderPage(page, index);
@@ -122,6 +99,8 @@ var BrewRenderer = React.createClass({
ref='main'
style={{height : this.state.height}}>
+
+
{this.renderPages()}
diff --git a/client/homebrew/brewRenderer/errorBar/errorBar.jsx b/client/homebrew/brewRenderer/errorBar/errorBar.jsx
new file mode 100644
index 000000000..123eaf728
--- /dev/null
+++ b/client/homebrew/brewRenderer/errorBar/errorBar.jsx
@@ -0,0 +1,72 @@
+var React = require('react');
+var _ = require('lodash');
+var cx = require('classnames');
+
+var ErrorBar = React.createClass({
+ getDefaultProps: function() {
+ return {
+ errors : []
+ };
+ },
+
+ hasOpenError : false,
+ hasCloseError : false,
+ hasMatchError : false,
+
+ renderErrors : function(){
+ this.hasOpenError = false;
+ this.hasCloseError = false;
+ this.hasMatchError = false;
+
+
+ var errors = _.map(this.props.errors, (err, idx) => {
+ if(err.id == 'OPEN') this.hasOpenError = true;
+ if(err.id == 'CLOSE') this.hasCloseError = true;
+ if(err.id == 'MISMATCH') this.hasMatchError = true;
+ return
+ Line {err.line} : {err.text}, '{err.type}' tag
+
+ });
+
+ return
+ },
+
+ renderProtip : function(){
+ var msg = [];
+ if(this.hasOpenError){
+ msg.push(
+ An unmatched opening tag means there's an opened tag that isn't closed, you need to close a tag, like this {'
'}. Make sure to match types!
+ );
+ }
+
+ if(this.hasCloseError){
+ msg.push(
+ An unmatched closing tag means you closed a tag without opening it. Either remove it, you check to where you think you opened it.
+
);
+ }
+
+ if(this.hasMatchError){
+ msg.push(
+ A type mismatch means you closed a tag, but the last open tag was a different type.
+
);
+ }
+ return
+
Protips!
+ {msg}
+
+ },
+
+ render : function(){
+ if(!this.props.errors.length) return null;
+
+ return
+
+
There are HTML errors in your markup
+ {this.renderErrors()}
+
+ {this.renderProtip()}
+
+ }
+});
+
+module.exports = ErrorBar;
diff --git a/client/homebrew/brewRenderer/errorBar/errorBar.less b/client/homebrew/brewRenderer/errorBar/errorBar.less
new file mode 100644
index 000000000..79d2a0ccc
--- /dev/null
+++ b/client/homebrew/brewRenderer/errorBar/errorBar.less
@@ -0,0 +1,56 @@
+
+.errorBar{
+ position : absolute;
+ z-index : 10000;
+ box-sizing : border-box;
+ width : 100%;
+ margin-right : 13px;
+ padding : 20px;
+ padding-bottom : 10px;
+ padding-left : 100px;
+ background-color : @red;
+ color : white;
+ i{
+ position : absolute;
+ left : 30px;
+ opacity : 0.8;
+ font-size : 3em;
+ }
+ h3{
+ font-size : 1.1em;
+ font-weight : 800;
+ }
+ ul{
+ margin-top : 15px;
+ font-size : 0.8em;
+ list-style-position : inside;
+ list-style-type : disc;
+ li{
+ line-height : 1.6em;
+ }
+ }
+ hr{
+ box-sizing : border-box;
+ height : 2px;
+ width : 150%;
+ margin-top : 25px;
+ margin-bottom : 15px;
+ margin-left : -100px;
+ background-color : darken(@red, 8%);
+ border : none;
+ }
+ .protips{
+ margin-left : -80px;
+ font-size : 0.6em;
+ &>div{
+ margin-bottom : 10px;
+ line-height : 1.2em;
+ }
+ h4{
+ opacity : 0.8;
+ font-weight : 800;
+ line-height : 1.5em;
+ text-transform : uppercase;
+ }
+ }
+}
\ No newline at end of file
diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx
index d664f88dc..242d2c736 100644
--- a/client/homebrew/pages/newPage/newPage.jsx
+++ b/client/homebrew/pages/newPage/newPage.jsx
@@ -8,7 +8,7 @@ var Navbar = require('../../navbar/navbar.jsx');
var EditTitle = require('../../navbar/editTitle.navitem.jsx');
var IssueNavItem = require('../../navbar/issue.navitem.jsx');
-
+var Markdown = require('naturalcrit/markdown.js');
var SplitPane = require('naturalcrit/splitPane/splitPane.jsx');
var Editor = require('../../editor/editor.jsx');
var BrewRenderer = require('../../brewRenderer/brewRenderer.jsx');
@@ -22,7 +22,8 @@ var NewPage = React.createClass({
ver : '0.0.0',
title : '',
text: '',
- isSaving : false
+ isSaving : false,
+ errors : []
};
},
@@ -57,7 +58,8 @@ var NewPage = React.createClass({
handleTextChange : function(text){
this.setState({
- text : text
+ text : text,
+ errors : Markdown.validate(text)
});
localStorage.setItem(KEY, text);
},
@@ -66,6 +68,7 @@ var NewPage = React.createClass({
this.setState({
isSaving : true
});
+
request.post('/api')
.send({
title : this.state.title,
@@ -112,13 +115,13 @@ var NewPage = React.createClass({
},
render : function(){
+ console.log(this.state.errors);
return
{this.renderNavbar()}
-
-
+
diff --git a/shared/naturalcrit/markdown.js b/shared/naturalcrit/markdown.js
index fb4657f53..fcb8d6ef2 100644
--- a/shared/naturalcrit/markdown.js
+++ b/shared/naturalcrit/markdown.js
@@ -47,7 +47,8 @@ module.exports = {
errors.push({
line : lineNumber,
type : type,
- err : 'Unmatched closing tag'
+ text : 'Unmatched closing tag',
+ id : 'CLOSE'
});
}else if(_.last(acc).type == type){
acc.pop();
@@ -55,7 +56,8 @@ module.exports = {
errors.push({
line : _.last(acc).line + ' to ' + lineNumber,
type : type,
- err : 'Type mismatch on closing tag'
+ text : 'Type mismatch on closing tag',
+ id : 'MISMATCH'
});
acc.pop();
}
@@ -69,7 +71,8 @@ module.exports = {
errors.push({
line : unmatched.line,
type : unmatched.type,
- err : "Unmatched opening tag"
+ text : "Unmatched opening tag",
+ id : 'OPEN'
})
});