mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2025-12-31 17:22:45 +00:00
Rework detection of user brews to look up themeid in static themes list before assuming is a user brew.
Ended up being a fairly straightforward change. A few ternaries got smooshed or inverted. Passes builtin and local tests. Need to compare on the test instance.
This commit is contained in:
@@ -188,26 +188,23 @@ const BrewRenderer = (props)=>{
|
|||||||
document.dispatchEvent(new MouseEvent('click'));
|
document.dispatchEvent(new MouseEvent('click'));
|
||||||
};
|
};
|
||||||
|
|
||||||
let brewThemeRendererPath = props?.renderer ? props.renderer : 'Legacy';
|
let brewThemeRendererPath = `${props?.renderer ? _.upperFirst(props.renderer) : 'V3'}`;
|
||||||
// Correct for casing vs theme.json
|
|
||||||
if(brewThemeRendererPath == 'legacy') { brewThemeRendererPath = 'Legacy'; }
|
|
||||||
if(props?.theme && (props?.theme[0] === '#')) {
|
|
||||||
brewThemeRendererPath = 'Brew';
|
|
||||||
}
|
|
||||||
let themePath = props.theme ?? '5ePHB';
|
let themePath = props.theme ?? '5ePHB';
|
||||||
const Themes = { ...staticThemes, ...props.userThemes };
|
const Themes = { ...staticThemes, ...props.userThemes };
|
||||||
const baseThemePath = (themePath && themePath[0] !== '#') ? Themes[brewThemeRendererPath][themePath].baseTheme : 'Brew';
|
let staticOrUserParent;
|
||||||
|
let baseThemePath = null;
|
||||||
|
|
||||||
// Override static theme values if a Brew theme.
|
if (!Themes[brewThemeRendererPath].hasOwnProperty(themePath)) {
|
||||||
|
|
||||||
if(themePath && themePath[0] === '#') {
|
|
||||||
themePath = themePath.slice(1);
|
|
||||||
brewThemeRendererPath = '';
|
brewThemeRendererPath = '';
|
||||||
|
staticOrUserParent = `/cssParent/${themePath}`;
|
||||||
|
baseThemePath = 'Brew';
|
||||||
} else {
|
} else {
|
||||||
|
baseThemePath = Themes[brewThemeRendererPath][themePath].baseTheme
|
||||||
brewThemeRendererPath += '/';
|
brewThemeRendererPath += '/';
|
||||||
}
|
staticOrUserParent = `/css/${brewThemeRendererPath}${baseThemePath}`;
|
||||||
|
|
||||||
const staticOrUserParent = (props.theme && props?.theme[0] == '#') ? `/cssParent/${themePath}` : `/css/${brewThemeRendererPath}${baseThemePath}`;
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
@@ -238,7 +235,7 @@ const BrewRenderer = (props)=>{
|
|||||||
tabIndex={-1}
|
tabIndex={-1}
|
||||||
style={{ height: state.height }}>
|
style={{ height: state.height }}>
|
||||||
|
|
||||||
<link href={`/css/${props?.renderer ? props.renderer : 'Legacy'}/Blank`} type='text/css' rel='stylesheet'/>
|
<link href={`/css/${props?.renderer ? props.renderer : 'V3'}/Blank`} type='text/css' rel='stylesheet'/>
|
||||||
{baseThemePath &&
|
{baseThemePath &&
|
||||||
<link href={staticOrUserParent} type='text/css' rel='stylesheet'/>
|
<link href={staticOrUserParent} type='text/css' rel='stylesheet'/>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -213,8 +213,7 @@ const MetadataEditor = createClass({
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const currentThemePath = this.props.metadata?.theme && this.props.metadata.theme[0] === '#' ? 'Brew' : this.props.metadata.renderer;
|
const currentThemePath = this.props.metadata?.theme && Themes[_.upperFirst(this.props.metadata.renderer)].hasOwnProperty(this.props.metadata?.theme) ? this.props.metadata.renderer : 'Brew';
|
||||||
// const currentTheme = mergedThemes[`${_.upperFirst(currentThemePath)}`][this.props.metadata.theme];
|
|
||||||
const currentTheme = mergedThemes[`${_.upperFirst(currentThemePath)}`].hasOwnProperty(this.props.metadata.theme) ? mergedThemes[`${_.upperFirst(currentThemePath)}`][this.props.metadata.theme] : { name: `!!! THEME MISSING !!! ID=${this.props.metadata.theme.slice(1)}`};
|
const currentTheme = mergedThemes[`${_.upperFirst(currentThemePath)}`].hasOwnProperty(this.props.metadata.theme) ? mergedThemes[`${_.upperFirst(currentThemePath)}`][this.props.metadata.theme] : { name: `!!! THEME MISSING !!! ID=${this.props.metadata.theme.slice(1)}`};
|
||||||
let dropdown;
|
let dropdown;
|
||||||
|
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ const Snippetbar = createClass({
|
|||||||
|
|
||||||
compileSnippets : function(rendererPath, themePath, snippets) {
|
compileSnippets : function(rendererPath, themePath, snippets) {
|
||||||
let compiledSnippets = snippets;
|
let compiledSnippets = snippets;
|
||||||
const baseSnippetsPath = themePath && (themePath[0] === '#') ? false : Themes[rendererPath][themePath].baseSnippets;
|
const baseSnippetsPath = themePath && (Themes[rendererPath].hasOwnProperty(themePath)) ? Themes[rendererPath][themePath].baseSnippets : false;
|
||||||
|
|
||||||
const objB = _.keyBy(compiledSnippets, 'groupName');
|
const objB = _.keyBy(compiledSnippets, 'groupName');
|
||||||
|
|
||||||
|
|||||||
@@ -89,13 +89,13 @@ const api = {
|
|||||||
|
|
||||||
if(brews) {
|
if(brews) {
|
||||||
for await (const brew of brews) {
|
for await (const brew of brews) {
|
||||||
userThemes.Brew[`#${brew.shareId}`] = {
|
userThemes.Brew[brew.shareId] = {
|
||||||
name : brew.title,
|
name : brew.title,
|
||||||
renderer : 'V3',
|
renderer : 'V3',
|
||||||
baseTheme : '',
|
baseTheme : '',
|
||||||
baseSnippets : false,
|
baseSnippets : false,
|
||||||
author : brew.authors[0],
|
author : brew.authors[0],
|
||||||
path : `#${brew.shareId}`,
|
path : brew.shareId,
|
||||||
thumbnail : brew.thumbnail.length > 0 ? brew.thumbnail : '/assets/naturalCritLogoWhite.svg'
|
thumbnail : brew.thumbnail.length > 0 ? brew.thumbnail : '/assets/naturalCritLogoWhite.svg'
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -285,7 +285,7 @@ const api = {
|
|||||||
const brew = req.brew;
|
const brew = req.brew;
|
||||||
splitTextStyleAndMetadata(brew);
|
splitTextStyleAndMetadata(brew);
|
||||||
res.setHeader('Content-Type', 'text/css');
|
res.setHeader('Content-Type', 'text/css');
|
||||||
const themePath = req.brew.theme[0] != '#' ? `/css/${req.brew.renderer}/${req.brew.theme}` : `/css/${req.brew.theme.slice(1)}`;
|
const themePath = themes[_.upperFirst(req.brew.renderer)].hasOwnProperty(req.brew.theme) ? `/css/${req.brew.renderer}/${req.brew.theme}` : `/css/${req.brew.theme}`;
|
||||||
// Drop Parent theme if it has already been loaded.
|
// Drop Parent theme if it has already been loaded.
|
||||||
// This assumes the continued use of the V3/5ePHB and V3/Blank themes for the app.
|
// This assumes the continued use of the V3/5ePHB and V3/Blank themes for the app.
|
||||||
const parentThemeImport = ((req.brew.theme != '5ePHB') && (req.brew.theme != 'Blank')) ? `@import url(\"${themePath}\");\n\n`:'';
|
const parentThemeImport = ((req.brew.theme != '5ePHB') && (req.brew.theme != 'Blank')) ? `@import url(\"${themePath}\");\n\n`:'';
|
||||||
@@ -296,7 +296,7 @@ const api = {
|
|||||||
const brew = req.brew;
|
const brew = req.brew;
|
||||||
splitTextStyleAndMetadata(brew);
|
splitTextStyleAndMetadata(brew);
|
||||||
res.setHeader('Content-Type', 'text/css');
|
res.setHeader('Content-Type', 'text/css');
|
||||||
const themePath = req.brew.theme[0] != '#' ? `/css/${req.brew.renderer}/${req.brew.theme}` : `/css/${req.brew.theme.slice(1)}`;
|
const themePath = themes[_.upperFirst(req.brew.renderer)].hasOwnProperty(req.brew.theme) ? `/css/${req.brew.renderer}/${req.brew.theme}` : `/css/${req.brew.theme}`;
|
||||||
const parentThemeImport = `@import url(\"${themePath}\");\n\n`;
|
const parentThemeImport = `@import url(\"${themePath}\");\n\n`;
|
||||||
const themeLocationComment = `/* From Brew: ${req.protocol}://${req.get('host')}/share/${req.brew.shareId} */\n\n`;
|
const themeLocationComment = `/* From Brew: ${req.protocol}://${req.get('host')}/share/${req.brew.shareId} */\n\n`;
|
||||||
return res.status(200).send(req.brew.renderer == 'legacy' ? '' : `${parentThemeImport}${themeLocationComment}`);
|
return res.status(200).send(req.brew.renderer == 'legacy' ? '' : `${parentThemeImport}${themeLocationComment}`);
|
||||||
|
|||||||
@@ -604,7 +604,7 @@ brew`);
|
|||||||
describe('getBrewThemeWithUserParent', ()=>{
|
describe('getBrewThemeWithUserParent', ()=>{
|
||||||
it('should collect parent theme and brew style - returning as css with user-theme parent imported.', async ()=>{
|
it('should collect parent theme and brew style - returning as css with user-theme parent imported.', async ()=>{
|
||||||
const toBrewPromise = (brew)=>new Promise((res)=>res({ toObject: ()=>brew }));
|
const toBrewPromise = (brew)=>new Promise((res)=>res({ toObject: ()=>brew }));
|
||||||
model.get = jest.fn(()=>toBrewPromise({ title: 'test brew', renderer: 'V3', shareId: 'iAmAUserTheme', theme: '#IamATheme', style: 'I Have a style!' }));
|
model.get = jest.fn(()=>toBrewPromise({ title: 'test brew', renderer: 'V3', shareId: 'iAmAUserTheme', theme: 'IamATheme', style: 'I Have a style!' }));
|
||||||
const fn = api.getBrew('share', true);
|
const fn = api.getBrew('share', true);
|
||||||
const req = { brew: {}, get: ()=>{return 'localhost';}, protocol: 'https' };
|
const req = { brew: {}, get: ()=>{return 'localhost';}, protocol: 'https' };
|
||||||
const next = jest.fn();
|
const next = jest.fn();
|
||||||
|
|||||||
Reference in New Issue
Block a user