0
0
mirror of https://github.com/naturalcrit/homebrewery.git synced 2026-01-09 07:12:40 +00:00

Separate "style" and "metadata" panels

This commit is contained in:
Trevor Buckner
2021-06-05 15:58:31 -04:00
parent 1bc0964aff
commit e67fadef02
15 changed files with 340 additions and 219 deletions

View File

@@ -31,6 +31,7 @@ const EditPage = createClass({
return {
brew : {
text : '',
style : '',
shareId : null,
editId : null,
createdAt : null,
@@ -106,17 +107,8 @@ const EditPage = createClass({
this.refs.editor.update();
},
handleMetadataChange : function(metadata){
this.setState((prevState)=>({
brew : _.merge({}, prevState.brew, metadata),
isPending : true,
}), ()=>this.trySave());
},
handleTextChange : function(text){
//If there are errors, run the validator on everychange to give quick feedback
//If there are errors, run the validator on every change to give quick feedback
let htmlErrors = this.state.htmlErrors;
if(htmlErrors.length) htmlErrors = Markdown.validate(text);
@@ -127,6 +119,21 @@ const EditPage = createClass({
}), ()=>this.trySave());
},
handleStyleChange : function(style){
this.setState((prevState)=>({
brew : _.merge({}, prevState.brew, { style: style }),
isPending : true
}), ()=>this.trySave());
},
handleMetaChange : function(metadata){
this.setState((prevState)=>({
brew : _.merge({}, prevState.brew, metadata),
isPending : true,
}), ()=>this.trySave());
},
hasChanges : function(){
return !_.isEqual(this.state.brew, this.savedBrew);
},
@@ -141,7 +148,6 @@ const EditPage = createClass({
},
handleGoogleClick : function(){
console.log('handlegoogleclick');
if(!global.account?.googleId) {
this.setState({
alertLoginToTransfer : true
@@ -409,11 +415,12 @@ const EditPage = createClass({
<Editor
ref='editor'
brew={this.state.brew}
onChange={this.handleTextChange}
onMetadataChange={this.handleMetadataChange}
onTextChange={this.handleTextChange}
onStyleChange={this.handleStyleChange}
onMetaChange={this.handleMetaChange}
renderer={this.state.brew.renderer}
/>
<BrewRenderer text={this.state.brew.text} errors={this.state.htmlErrors} renderer={this.state.brew.renderer} />
<BrewRenderer text={this.state.brew.text} style={this.state.brew.style} renderer={this.state.brew.renderer} errors={this.state.htmlErrors} />
</SplitPane>
</div>
</div>;

View File

@@ -78,7 +78,13 @@ const HomePage = createClass({
<div className='content'>
<SplitPane onDragFinish={this.handleSplitMove} ref='pane'>
<Editor brew={this.state.brew} onChange={this.handleTextChange} showMetaButton={false} ref='editor'/>
<Editor
ref='editor'
brew={this.state.brew}
onTextChange={this.handleTextChange}
renderer={this.state.brew.renderer}
showEditButtons={false}
/>
<BrewRenderer text={this.state.brew.text} />
</SplitPane>
</div>

View File

@@ -24,6 +24,7 @@ const NewPage = createClass({
return {
brew : {
text : '',
style : '',
shareId : null,
editId : null,
createdAt : null,
@@ -44,6 +45,7 @@ const NewPage = createClass({
return {
brew : {
text : this.props.brew.text || '',
style : this.props.brew.style || '',
gDrive : false,
title : this.props.brew.title || '',
description : this.props.brew.description || '',
@@ -55,7 +57,8 @@ const NewPage = createClass({
isSaving : false,
saveGoogle : (global.account && global.account.googleId ? true : false),
errors : []
errors : [],
htmlErrors : Markdown.validate(this.props.brew.text)
};
},
@@ -66,6 +69,11 @@ const NewPage = createClass({
brew : { text: storage }
});
}
this.setState((prevState)=>({
htmlErrors : Markdown.validate(prevState.brew.text)
}));
document.addEventListener('keydown', this.handleControlKeys);
},
componentWillUnmount : function() {
@@ -88,18 +96,29 @@ const NewPage = createClass({
this.refs.editor.update();
},
handleMetadataChange : function(metadata){
this.setState({
brew : _.merge({}, this.state.brew, metadata)
});
handleTextChange : function(text){
//If there are errors, run the validator on every change to give quick feedback
let htmlErrors = this.state.htmlErrors;
if(htmlErrors.length) htmlErrors = Markdown.validate(text);
this.setState((prevState)=>({
brew : _.merge({}, prevState.brew, { text: text }),
htmlErrors : htmlErrors
}));
localStorage.setItem(KEY, text);
},
handleTextChange : function(text){
this.setState({
brew : { text: text },
errors : Markdown.validate(text)
});
localStorage.setItem(KEY, text);
handleStyleChange : function(style){
this.setState((prevState)=>({
brew : _.merge({}, prevState.brew, { style: style }),
}));
},
handleMetaChange : function(metadata){
this.setState((prevState)=>({
brew : _.merge({}, prevState.brew, metadata),
}));
},
save : async function(){
@@ -190,10 +209,12 @@ const NewPage = createClass({
<Editor
ref='editor'
brew={this.state.brew}
onChange={this.handleTextChange}
onMetadataChange={this.handleMetadataChange}
onTextChange={this.handleTextChange}
onStyleChange={this.handleStyleChange}
onMetaChange={this.handleMetaChange}
renderer={this.state.brew.renderer}
/>
<BrewRenderer text={this.state.brew.text} errors={this.state.errors} />
<BrewRenderer text={this.state.brew.text} errors={this.state.htmlErrors} renderer={this.state.brew.renderer} />
</SplitPane>
</div>
</div>;

View File

@@ -13,6 +13,7 @@ const PrintPage = createClass({
query : {},
brew : {
text : '',
style : '',
renderer : 'legacy'
}
};
@@ -58,6 +59,8 @@ const PrintPage = createClass({
render : function(){
return <div>
<Meta name='robots' content='noindex, nofollow' />
{/* Apply CSS from Style tab */}
<div style={{ display: 'none' }} dangerouslySetInnerHTML={{ __html: `<style> ${this.props.brew.style} </style>` }} />
{this.renderPages()}
</div>;
}

View File

@@ -19,6 +19,7 @@ const SharePage = createClass({
brew : {
title : '',
text : '',
style : '',
shareId : null,
createdAt : null,
updatedAt : null,
@@ -72,7 +73,7 @@ const SharePage = createClass({
</Navbar>
<div className='content'>
<BrewRenderer text={this.props.brew.text} renderer={this.props.brew.renderer} />
<BrewRenderer text={this.props.brew.text} style={this.props.brew.style} renderer={this.props.brew.renderer} />
</div>
</div>;
}