0
0
mirror of https://github.com/naturalcrit/homebrewery.git synced 2026-01-16 14:42:45 +00:00

Display name of write in theme next to write-in

Clear user's active ThemeBundle when an incomplete/broken/invalid writein.

Needs theming help.
This commit is contained in:
David Bolack
2025-01-07 22:11:01 -06:00
parent e7f8cda6ae
commit 74122d9057
6 changed files with 32 additions and 8 deletions

View File

@@ -454,6 +454,7 @@ const Editor = createClass({
rerenderParent={this.rerenderParent} /> rerenderParent={this.rerenderParent} />
<MetadataEditor <MetadataEditor
metadata={this.props.brew} metadata={this.props.brew}
themeBundle={this.props.themeBundle}
onChange={this.props.onMetaChange} onChange={this.props.onMetaChange}
reportError={this.props.reportError} reportError={this.props.reportError}
userThemes={this.props.userThemes}/> userThemes={this.props.userThemes}/>

View File

@@ -53,8 +53,8 @@ const MetadataEditor = createClass({
return { return {
showThumbnail : true, showThumbnail : true,
showThemeWritein : mergedThemes[this.props.metadata.renderer][this.props.metadata.theme] ? false : true, showThemeWritein : mergedThemes[this.props.metadata.renderer][this.props.metadata.theme] ? false : true,
lastThemePulldown : mergedThemes[this.props.metadata.renderer][this.props.metadata.theme] ? mergedThemes[this.props.metadata.renderer][this.props.metadata.theme] : '', lastThemePulldown : mergedThemes[this.props.metadata.renderer][this.props.metadata.theme] ? mergedThemes[this.props.metadata.renderer][this.props.metadata.theme].path : '',
lastThemeWriteIn : mergedThemes[this.props.metadata.renderer][this.props.metadata.theme] ? '' : mergedThemes[this.props.metadata.renderer][this.props.metadata.theme] lastThemeWriteIn : mergedThemes[this.props.metadata.renderer][this.props.metadata.theme] ? '' : this.props.metadata.theme
}; };
}, },
@@ -244,7 +244,7 @@ const MetadataEditor = createClass({
const currentRenderer = this.props.metadata.renderer; const currentRenderer = this.props.metadata.renderer;
const currentTheme = mergedThemes[`${_.upperFirst(this.props.metadata.renderer)}`][this.props.metadata.theme] const currentTheme = mergedThemes[`${_.upperFirst(this.props.metadata.renderer)}`][this.props.metadata.theme]
?? { name: `!!! Manually selected theme !!! ID=${this.props.metadata.theme}` }; ?? { name: `${this.props.themeBundle?.path || ''}`, author: '!!!' };
let dropdown; let dropdown;
if(currentRenderer == 'legacy') { if(currentRenderer == 'legacy') {
@@ -273,12 +273,15 @@ const MetadataEditor = createClass({
renderThemeWritein : function(){ renderThemeWritein : function(){
if(!this.state.showThemeWritein) return; if(!this.state.showThemeWritein) return;
return <input type='text' return <div>
<input type='text'
default='' default=''
placeholder='Enter share id' placeholder='Enter share id'
className='value' className='value'
defaultValue={this.state.lastThemeWriteIn || this.props.metadata.theme} defaultValue={this.state.lastThemeWriteIn || this.props.metadata.theme}
onChange={(e)=>this.handleThemeWritein(e)} />; onChange={(e)=>this.handleThemeWritein(e)} />
<span class='userThemeName'>{`${this.state.lastThemeWriteIn ? this.props.themeBundle?.path || '' : ''}`}</span>
</div>;
}, },
renderLanguageDropdown : function(){ renderLanguageDropdown : function(){

View File

@@ -1,5 +1,9 @@
@import 'naturalcrit/styles/colors.less'; @import 'naturalcrit/styles/colors.less';
.userThemeName {
padding-left: 10px;
padding-right: 10px;
}
.metadataEditor { .metadataEditor {
position : absolute; position : absolute;

View File

@@ -443,6 +443,7 @@ const EditPage = createClass({
reportError={this.errorReported} reportError={this.errorReported}
renderer={this.state.brew.renderer} renderer={this.state.brew.renderer}
userThemes={this.props.userThemes} userThemes={this.props.userThemes}
themeBundle={this.state.themeBundle}
snippetBundle={this.state.themeBundle.snippets} snippetBundle={this.state.themeBundle.snippets}
updateBrew={this.updateBrew} updateBrew={this.updateBrew}
onCursorPageChange={this.handleEditorCursorPageChange} onCursorPageChange={this.handleEditorCursorPageChange}

View File

@@ -279,6 +279,7 @@ const api = {
let currentTheme; let currentTheme;
const completeStyles = []; const completeStyles = [];
const completeSnippets = []; const completeSnippets = [];
let themePath = '';
while (req.params.id) { while (req.params.id) {
//=== User Themes ===// //=== User Themes ===//
@@ -292,6 +293,7 @@ const api = {
currentTheme = req.brew; currentTheme = req.brew;
splitTextStyleAndMetadata(currentTheme); splitTextStyleAndMetadata(currentTheme);
if(themePath === '') themePath = currentTheme.title;
// If there is anything in the snippets or style members, append them to the appropriate array // If there is anything in the snippets or style members, append them to the appropriate array
// if(currentTheme?.snippets) completeSnippets.push(JSON.parse(currentTheme.snippets)); // if(currentTheme?.snippets) completeSnippets.push(JSON.parse(currentTheme.snippets));
@@ -301,6 +303,7 @@ const api = {
req.params.renderer = currentTheme.renderer; req.params.renderer = currentTheme.renderer;
} else { } else {
//=== Static Themes ===// //=== Static Themes ===//
if(themePath === '') themePath = req.params.id;
const localSnippets = `${req.params.renderer}_${req.params.id}`; // Just log the name for loading on client const localSnippets = `${req.params.renderer}_${req.params.id}`; // Just log the name for loading on client
const localStyle = `@import url(\"/themes/${req.params.renderer}/${req.params.id}/style.css\");`; const localStyle = `@import url(\"/themes/${req.params.renderer}/${req.params.id}/style.css\");`;
completeSnippets.push(localSnippets); completeSnippets.push(localSnippets);
@@ -313,7 +316,8 @@ const api = {
const returnObj = { const returnObj = {
// Reverse the order of the arrays so they are listed oldest parent to youngest child. // Reverse the order of the arrays so they are listed oldest parent to youngest child.
styles : completeStyles.reverse(), styles : completeStyles.reverse(),
snippets : completeSnippets.reverse() snippets : completeSnippets.reverse(),
path : themePath
}; };
res.setHeader('Content-Type', 'application/json'); res.setHeader('Content-Type', 'application/json');

View File

@@ -44,8 +44,13 @@ const fetchThemeBundle = async (obj, renderer, theme)=>{
.catch((err)=>{ .catch((err)=>{
obj.setState({ error: err }); obj.setState({ error: err });
}); });
if(!res) return; if(!res) {
obj.setState((prevState)=>({
...prevState,
themeBundle : {}
}));
return;
}
const themeBundle = res.body; const themeBundle = res.body;
themeBundle.joinedStyles = themeBundle.styles.map((style)=>`<style>${style}</style>`).join('\n\n'); themeBundle.joinedStyles = themeBundle.styles.map((style)=>`<style>${style}</style>`).join('\n\n');
obj.setState((prevState)=>({ obj.setState((prevState)=>({
@@ -54,8 +59,14 @@ const fetchThemeBundle = async (obj, renderer, theme)=>{
})); }));
}; };
const fetchBrewAsThemeJSON = async (renderer, theme)=>{
if(!renderer || !theme) return;
}
export { export {
splitTextStyleAndMetadata, splitTextStyleAndMetadata,
printCurrentBrew, printCurrentBrew,
fetchThemeBundle, fetchThemeBundle,
fetchBrewAsThemeJSON
}; };