0
0
mirror of https://github.com/naturalcrit/homebrewery.git synced 2026-01-13 10:52:46 +00:00

Added smart componenets, page line number highlighting

This commit is contained in:
Scott Tolksdorf
2016-12-26 15:52:32 -05:00
parent 7581d155a6
commit 47396e5c7e
39 changed files with 2028 additions and 119 deletions

View File

@@ -2,11 +2,12 @@ const React = require('react');
const _ = require('lodash');
const cx = require('classnames');
const Markdown = require('naturalcrit/markdown.js');
const Markdown = require('homebrewery/markdown.js');
const ErrorBar = require('./errorBar/errorBar.jsx');
//TODO: move to the brew renderer
const RenderWarnings = require('homebrewery/renderWarnings/renderWarnings.jsx')
const Store = require('homebrewery/brew.store.js');
const PAGE_HEIGHT = 1056;
const PPR_THRESHOLD = 50;
@@ -14,24 +15,19 @@ const PPR_THRESHOLD = 50;
const BrewRenderer = React.createClass({
getDefaultProps: function() {
return {
text : '',
brewText : '',
errors : []
};
},
getInitialState: function() {
const pages = this.props.text.split('\\page');
const pages = this.props.brewText.split('\\page');
return {
viewablePageNumber: 0,
height : 0,
isMounted : false,
usePPR : true,
pages : pages,
usePPR : pages.length >= PPR_THRESHOLD,
errors : []
usePPR : pages.length >= PPR_THRESHOLD
};
},
height : 0,
@@ -49,7 +45,7 @@ const BrewRenderer = React.createClass({
componentWillReceiveProps: function(nextProps) {
if(this.refs.pages && this.refs.pages.firstChild) this.pageHeight = this.refs.pages.firstChild.clientHeight;
const pages = nextProps.text.split('\\page');
const pages = nextProps.brewText.split('\\page');
this.setState({
pages : pages,
usePPR : pages.length >= PPR_THRESHOLD

View File

@@ -0,0 +1,10 @@
const Store = require('homebrewery/brew.store.js');
const BrewRenderer = require('./brewRenderer.jsx');
module.exports = Store.createSmartComponent(BrewRenderer, () => {
return {
brewText : Store.getBrewText(),
errors : Store.getErrors()
}
});

View File

@@ -6,7 +6,6 @@ const CodeEditor = require('naturalcrit/codeEditor/codeEditor.jsx');
const SnippetBar = require('./snippetbar/snippetbar.jsx');
const MetadataEditor = require('./metadataEditor/metadataEditor.jsx');
const splice = function(str, index, inject){
return str.slice(0, index) + inject + str.slice(index);
};
@@ -138,8 +137,3 @@ const Editor = React.createClass({
module.exports = Editor;

View File

@@ -0,0 +1,13 @@
const Actions = require('homebrewery/brew.actions.js');
const Store = require('homebrewery/brew.store.js');
const Editor = require('./editor.jsx')
module.exports = Store.createSmartComponent(Editor, ()=>{
return {
value : Store.getBrewText(),
onChange : Actions.updateBrewText,
metadata : Store.getMetaData(),
onMetadataChange : Actions.updateMetaData,
};
});

View File

@@ -3,12 +3,13 @@ const _ = require('lodash');
const cx = require('classnames');
const CreateRouter = require('pico-router').createRouter;
const Actions = require('homebrewery/brew.actions.js');
const HomePage = require('./pages/homePage/homePage.jsx');
const EditPage = require('./pages/editPage/editPage.jsx');
const UserPage = require('./pages/userPage/userPage.jsx');
const SharePage = require('./pages/sharePage/sharePage.jsx');
const NewPage = require('./pages/newPage/newPage.jsx');
const NewPage = require('./pages/newPage/newPage.jsx');
const ErrorPage = require('./pages/errorPage/errorPage.jsx');
const PrintPage = require('./pages/printPage/printPage.jsx');
@@ -20,21 +21,21 @@ const Homebrew = React.createClass({
welcomeText : '',
changelog : '',
version : '0.0.0',
account : null,
brew : {
title : '',
text : '',
shareId : null,
editId : null,
createdAt : null,
updatedAt : null,
}
account : undefined,
brew : {}
};
},
componentWillMount: function() {
//TODO: remove
global.account = this.props.account;
global.version = this.props.version;
Actions.init({
version : this.props.version,
brew : this.props.brew,
account : this.props.account
});
Router = CreateRouter({
'/edit/:id' : (args) => {

View File

@@ -8,9 +8,11 @@ module.exports = function(props){
</Nav.item>
}
let url = '';
/*
if(typeof window !== 'undefined'){
url = window.location.href
}
*/
return <Nav.item href={`http://naturalcrit.com/login?redirect=${url}`} color='teal' icon='fa-sign-in'>
login
</Nav.item>

View File

@@ -2,24 +2,20 @@ const React = require('react');
const _ = require('lodash');
const Nav = require('naturalcrit/nav/nav.jsx');
const Store = require('homebrewery/brew.store.js');
const Navbar = React.createClass({
getInitialState: function() {
return {
//showNonChromeWarning : false,
ver : '0.0.0'
showNonChromeWarning : false,
};
},
componentDidMount: function() {
//const isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
this.setState({
//showNonChromeWarning : !isChrome,
ver : window.version
showNonChromeWarning : !isChrome,
})
},
/*
renderChromeWarning : function(){
if(!this.state.showNonChromeWarning) return;
return <Nav.item className='warning' icon='fa-exclamation-triangle'>
@@ -29,7 +25,6 @@ const Navbar = React.createClass({
</div>
</Nav.item>
},
*/
render : function(){
return <Nav.base>
<Nav.section>
@@ -37,7 +32,7 @@ const Navbar = React.createClass({
<Nav.item href='/' className='homebrewLogo'>
<div>The Homebrewery</div>
</Nav.item>
<Nav.item>{`v${this.state.ver}`}</Nav.item>
<Nav.item>{`v${Store.getVersion()}`}</Nav.item>
{/*this.renderChromeWarning()*/}
</Nav.section>

View File

@@ -15,7 +15,8 @@ const SplitPane = require('naturalcrit/splitPane/splitPane.jsx');
const Editor = require('../../editor/editor.jsx');
const BrewRenderer = require('../../brewRenderer/brewRenderer.jsx');
const Markdown = require('naturalcrit/markdown.js');
const Markdown = require('homebrewery/markdown.js');
const SAVE_TIMEOUT = 3000;

View File

@@ -1,7 +1,6 @@
const React = require('react');
const _ = require('lodash');
const cx = require('classnames');
const request = require("superagent");
const Nav = require('naturalcrit/nav/nav.jsx');
const Navbar = require('../../navbar/navbar.jsx');
@@ -12,42 +11,34 @@ const AccountNavItem = require('../../navbar/account.navitem.jsx');
const SplitPane = require('naturalcrit/splitPane/splitPane.jsx');
const Editor = require('../../editor/editor.jsx');
const BrewRenderer = require('../../brewRenderer/brewRenderer.jsx');
const Editor = require('../../editor/editor.smart.jsx');
const BrewRenderer = require('../../brewRenderer/brewRenderer.smart.jsx');
const BrewInterface = require('homebrewery/brewInterface/brewInterface.jsx');
const Actions = require('homebrewery/brew.actions.js');
//const Store = require('homebrewery/brew.store.js');
const HomePage = React.createClass({
getDefaultProps: function() {
return {
welcomeText : '',
ver : '0.0.0'
};
},
getInitialState: function() {
return {
text: this.props.welcomeText
};
},
handleSave : function(){
request.post('/api')
.send({
text : this.state.text
})
.end((err, res)=>{
if(err) return;
var brew = res.body;
window.location = '/edit/' + brew.editId;
});
},
handleSplitMove : function(){
this.refs.editor.update();
},
handleTextChange : function(text){
this.setState({
text : text
componentWillMount: function() {
Actions.init({
brew : {
text : this.props.welcomeText
}
});
},
handleSave : function(){
Actions.saveNew();
},
renderNavbar : function(){
return <Navbar ver={this.props.ver}>
<Nav.section>
@@ -70,15 +61,13 @@ const HomePage = React.createClass({
render : function(){
return <div className='homePage page'>
{this.renderNavbar()}
<div className='content'>
<SplitPane onDragFinish={this.handleSplitMove} ref='pane'>
<Editor value={this.state.text} onChange={this.handleTextChange} ref='editor'/>
<BrewRenderer text={this.state.text} />
</SplitPane>
<BrewInterface />
</div>
<div className={cx('floatingSaveButton', {show : this.props.welcomeText != this.state.text})} onClick={this.handleSave}>
<div className={cx('floatingSaveButton', {
//show : Store.getBrewText() !== this.props.welcomeText
})} onClick={this.handleSave}>
Save current <i className='fa fa-save' />
</div>

View File

@@ -3,7 +3,7 @@ const _ = require('lodash');
const cx = require('classnames');
const request = require("superagent");
const Markdown = require('naturalcrit/markdown.js');
const Markdown = require('homebrewery/markdown.js');
const Nav = require('naturalcrit/nav/nav.jsx');
const Navbar = require('../../navbar/navbar.jsx');

View File

@@ -1,7 +1,7 @@
const React = require('react');
const _ = require('lodash');
const cx = require('classnames');
const Markdown = require('naturalcrit/markdown.js');
const Markdown = require('homebrewery/markdown.js');
const PrintPage = React.createClass({
getDefaultProps: function() {