From 41fa0f2c7753f24eedc2d7683e4a7d4e6b8de7c2 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sun, 9 Oct 2022 21:49:25 +1300 Subject: [PATCH 01/14] Apply defaults on load and before saving --- server/homebrew.api.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/server/homebrew.api.js b/server/homebrew.api.js index 293e8f873..d6762d6c2 100644 --- a/server/homebrew.api.js +++ b/server/homebrew.api.js @@ -9,6 +9,18 @@ const yaml = require('js-yaml'); const asyncHandler = require('express-async-handler'); const { nanoid } = require('nanoid'); +const DEFAULT_BREW = { + title : 'Untitled Brew', + description : '', + renderer : 'V3', + tags : [], + systems : [], + thumbnail : '', + published : false, + pageCount : 1, + theme : '5ePHB' +}; + // const getTopBrews = (cb) => { // HomebrewModel.find().sort({ views: -1 }).limit(5).exec(function(err, brews) { // cb(brews); @@ -66,6 +78,8 @@ const getBrew = (accessType)=>{ if(typeof stub.tags === 'string') { stub.tags = []; } + + _.defaults(stub, DEFAULT_BREW); req.brew = stub; next(); @@ -130,6 +144,8 @@ const beforeNewSave = (account, brew)=>{ brew.authors = (account) ? [account.username] : []; brew.text = mergeBrewText(brew); + + _.defaults(brew, DEFAULT_BREW); }; const newGoogleBrew = async (account, brew, res)=>{ From 9fd5fea50c6086f07004225b753d4e1d037a52bd Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sun, 9 Oct 2022 21:50:11 +1300 Subject: [PATCH 02/14] Remove obsolete code in app.js --- server/app.js | 1 - 1 file changed, 1 deletion(-) diff --git a/server/app.js b/server/app.js index a3f66bb2c..57be820c0 100644 --- a/server/app.js +++ b/server/app.js @@ -29,7 +29,6 @@ const splitTextStyleAndMetadata = (brew)=>{ brew.style = brew.text.slice(7, index - 1); brew.text = brew.text.slice(index + 5); } - _.defaults(brew, { 'renderer': 'legacy', 'theme': '5ePHB' }); }; const sanitizeBrew = (brew, accessType)=>{ From 9ad915c14a2cc3f0a4d82a1b9e9aa164d19d0f2f Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sun, 9 Oct 2022 21:50:31 +1300 Subject: [PATCH 03/14] Remove unnecessary & incorrect default setting --- server/homebrew.model.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/server/homebrew.model.js b/server/homebrew.model.js index a514e3fd8..3a4f9b9a6 100644 --- a/server/homebrew.model.js +++ b/server/homebrew.model.js @@ -46,8 +46,6 @@ HomebrewSchema.statics.get = function(query, fields=null){ unzipped = zlib.inflateRawSync(brews[0].textBin); brews[0].text = unzipped.toString(); } - if(!brews[0].renderer) - brews[0].renderer = 'legacy'; return resolve(brews[0]); }); }); From 52a79b4f755c82e98002ee5be11fbcbd9ebe2d77 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Thu, 20 Oct 2022 19:11:31 +1300 Subject: [PATCH 04/14] Add default loading properties using custom assign --- server/homebrew.api.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/server/homebrew.api.js b/server/homebrew.api.js index d6762d6c2..8d19e915c 100644 --- a/server/homebrew.api.js +++ b/server/homebrew.api.js @@ -9,6 +9,7 @@ const yaml = require('js-yaml'); const asyncHandler = require('express-async-handler'); const { nanoid } = require('nanoid'); +// Default brew properties in most cases const DEFAULT_BREW = { title : 'Untitled Brew', description : '', @@ -20,6 +21,11 @@ const DEFAULT_BREW = { pageCount : 1, theme : '5ePHB' }; +// Default brew properties for loading +const DEFAULT_BREW_LOAD = { + renderer : 'legacy', + published : true +}; // const getTopBrews = (cb) => { // HomebrewModel.find().sort({ views: -1 }).limit(5).exec(function(err, brews) { @@ -79,7 +85,11 @@ const getBrew = (accessType)=>{ stub.tags = []; } - _.defaults(stub, DEFAULT_BREW); + // Use _.assignWith instead of _.defaults - does this need to be replicated at all other uses of _.defaults??? + _.assignWith(stub, DEFAULT_BREW_LOAD, DEFAULT_BREW, (objValue, srcValue)=>{ + if(typeof objValue === 'boolean') return objValue; + return objValue || srcValue; + }); req.brew = stub; next(); From f470a6185a7a760204274d8bea1a302be54d874c Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Wed, 14 Dec 2022 19:23:16 +1300 Subject: [PATCH 05/14] Move default brew to app.js --- server/app.js | 5 ++++- server/brewDefaults.js | 24 ++++++++++++++++++++++++ server/homebrew.api.js | 20 ++------------------ 3 files changed, 30 insertions(+), 19 deletions(-) create mode 100644 server/brewDefaults.js diff --git a/server/app.js b/server/app.js index b24054187..dc4e0c8ac 100644 --- a/server/app.js +++ b/server/app.js @@ -15,6 +15,8 @@ const serveCompressedStaticAssets = require('./static-assets.mv.js'); const sanitizeFilename = require('sanitize-filename'); const asyncHandler = require('express-async-handler'); +const { DEFAULT_BREW } = require('./brewDefaults.js'); + const splitTextStyleAndMetadata = (brew)=>{ brew.text = brew.text.replaceAll('\r\n', '\n'); if(brew.text.startsWith('```metadata')) { @@ -405,6 +407,7 @@ if(isLocalEnvironment){ //Render the page const templateFn = require('./../client/template.js'); app.use(asyncHandler(async (req, res, next)=>{ + const brew = _.defaults(req.brew, DEFAULT_BREW); // Create configuration object const configuration = { local : isLocalEnvironment, @@ -414,7 +417,7 @@ app.use(asyncHandler(async (req, res, next)=>{ const props = { version : require('./../package.json').version, url : req.originalUrl, - brew : req.brew, + brew : brew, brews : req.brews, googleBrews : req.googleBrews, account : req.account, diff --git a/server/brewDefaults.js b/server/brewDefaults.js new file mode 100644 index 000000000..762e345f7 --- /dev/null +++ b/server/brewDefaults.js @@ -0,0 +1,24 @@ +const _ = require('lodash'); + +// Default brew properties in most cases +const DEFAULT_BREW = { + title : 'Untitled Brew', + description : '', + renderer : 'V3', + tags : [], + systems : [], + thumbnail : '', + published : false, + pageCount : 1, + theme : '5ePHB' +}; +// Default brew properties for loading +const DEFAULT_BREW_LOAD = _.defaults({ + renderer : 'legacy', + published : true +}, DEFAULT_BREW); + +module.exports = { + DEFAULT_BREW, + DEFAULT_BREW_LOAD +}; \ No newline at end of file diff --git a/server/homebrew.api.js b/server/homebrew.api.js index abcbfc7de..9a4007a11 100644 --- a/server/homebrew.api.js +++ b/server/homebrew.api.js @@ -9,23 +9,7 @@ const yaml = require('js-yaml'); const asyncHandler = require('express-async-handler'); const { nanoid } = require('nanoid'); -// Default brew properties in most cases -const DEFAULT_BREW = { - title : 'Untitled Brew', - description : '', - renderer : 'V3', - tags : [], - systems : [], - thumbnail : '', - published : false, - pageCount : 1, - theme : '5ePHB' -}; -// Default brew properties for loading -const DEFAULT_BREW_LOAD = { - renderer : 'legacy', - published : true -}; +const { DEFAULT_BREW, DEFAULT_BREW_LOAD } = require('./brewDefaults.js'); // const getTopBrews = (cb) => { // HomebrewModel.find().sort({ views: -1 }).limit(5).exec(function(err, brews) { @@ -89,7 +73,7 @@ const getBrew = (accessType, stubOnly = false)=>{ } // Use _.assignWith instead of _.defaults - does this need to be replicated at all other uses of _.defaults??? - _.assignWith(stub, DEFAULT_BREW_LOAD, DEFAULT_BREW, (objValue, srcValue)=>{ + _.assignWith(stub, DEFAULT_BREW_LOAD, (objValue, srcValue)=>{ if(typeof objValue === 'boolean') return objValue; return objValue || srcValue; }); From 0dc491adfcf60713e365f1b9aba9540e0c67d210 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Wed, 14 Dec 2022 21:26:11 +1300 Subject: [PATCH 06/14] Apply default to NewPage --- client/homebrew/pages/newPage/newPage.jsx | 24 ++++------------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index 251f169c9..369070f99 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -17,6 +17,8 @@ const SplitPane = require('naturalcrit/splitPane/splitPane.jsx'); const Editor = require('../../editor/editor.jsx'); const BrewRenderer = require('../../brewRenderer/brewRenderer.jsx'); +const { DEFAULT_BREW } = require('../../../../server/brewDefaults.js'); + const BREWKEY = 'homebrewery-new'; const STYLEKEY = 'homebrewery-new-style'; const METAKEY = 'homebrewery-new-meta'; @@ -26,30 +28,12 @@ const NewPage = createClass({ displayName : 'NewPage', getDefaultProps : function() { return { - brew : { - text : '', - style : undefined, - title : '', - description : '', - renderer : 'V3', - theme : '5ePHB' - } + brew : DEFAULT_BREW }; }, getInitialState : function() { - let brew = this.props.brew; - - if(this.props.brew.shareId) { - brew = { - text : brew.text ?? '', - style : brew.style ?? undefined, - title : brew.title ?? '', - description : brew.description ?? '', - renderer : brew.renderer ?? 'legacy', - theme : brew.theme ?? '5ePHB' - }; - } + const brew = this.props.brew; return { brew : brew, From bb5978dfeaa964a15fc17ca606eeb261896f2da3 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Wed, 14 Dec 2022 21:26:20 +1300 Subject: [PATCH 07/14] Apply default to SharePage --- client/homebrew/pages/sharePage/sharePage.jsx | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx index eb092b11e..232c2a1e3 100644 --- a/client/homebrew/pages/sharePage/sharePage.jsx +++ b/client/homebrew/pages/sharePage/sharePage.jsx @@ -12,21 +12,13 @@ const Account = require('../../navbar/account.navitem.jsx'); const BrewRenderer = require('../../brewRenderer/brewRenderer.jsx'); +const { DEFAULT_BREW_LOAD } = require('../../../../server/brewDefaults.js'); const SharePage = createClass({ displayName : 'SharePage', getDefaultProps : function() { return { - brew : { - title : '', - text : '', - style : '', - shareId : null, - createdAt : null, - updatedAt : null, - views : 0, - renderer : '' - } + brew : DEFAULT_BREW_LOAD }; }, From 8e42c09721693f55ece13bac6be39d742425dbb1 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Wed, 14 Dec 2022 21:26:31 +1300 Subject: [PATCH 08/14] Apply default to HomePage --- client/homebrew/pages/homePage/homePage.jsx | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index f634a9387..7e9d9c3b4 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -18,16 +18,14 @@ const SplitPane = require('naturalcrit/splitPane/splitPane.jsx'); const Editor = require('../../editor/editor.jsx'); const BrewRenderer = require('../../brewRenderer/brewRenderer.jsx'); - +const { DEFAULT_BREW } = require('../../../../server/brewDefaults.js'); const HomePage = createClass({ displayName : 'HomePage', getDefaultProps : function() { return { - brew : { - text : '', - }, - ver : '0.0.0' + brew : DEFAULT_BREW, + ver : '0.0.0' }; }, getInitialState : function() { From a89b20584fed8c29b747f8fd4d7adf78c5d7690c Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Wed, 14 Dec 2022 21:26:40 +1300 Subject: [PATCH 09/14] Apply default to EditPage --- client/homebrew/pages/editPage/editPage.jsx | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index 0ae7cdba0..25a379c83 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -21,6 +21,8 @@ const BrewRenderer = require('../../brewRenderer/brewRenderer.jsx'); const Markdown = require('naturalcrit/markdown.js'); +const { DEFAULT_BREW_LOAD } = require('../../../../server/brewDefaults.js'); + const googleDriveActive = require('../../googleDrive.png'); const googleDriveInactive = require('../../googleDriveMono.png'); @@ -30,24 +32,7 @@ const EditPage = createClass({ displayName : 'EditPage', getDefaultProps : function() { return { - brew : { - text : '', - style : '', - shareId : null, - editId : null, - createdAt : null, - updatedAt : null, - gDrive : false, - trashed : false, - - title : '', - description : '', - tags : '', - published : false, - authors : [], - systems : [], - renderer : 'legacy' - } + brew : DEFAULT_BREW_LOAD }; }, From 32506860ddaa838e6dd595d6e4e836ae9a3eb03a Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Wed, 14 Dec 2022 21:26:57 +1300 Subject: [PATCH 10/14] Add additional fields to default --- server/brewDefaults.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/server/brewDefaults.js b/server/brewDefaults.js index 762e345f7..72dc37c0a 100644 --- a/server/brewDefaults.js +++ b/server/brewDefaults.js @@ -2,6 +2,9 @@ const _ = require('lodash'); // Default brew properties in most cases const DEFAULT_BREW = { + text : '', + editId : null, + shareId : null, title : 'Untitled Brew', description : '', renderer : 'V3', @@ -13,10 +16,13 @@ const DEFAULT_BREW = { theme : '5ePHB' }; // Default brew properties for loading -const DEFAULT_BREW_LOAD = _.defaults({ - renderer : 'legacy', - published : true -}, DEFAULT_BREW); +const DEFAULT_BREW_LOAD = {}; +_.defaults(DEFAULT_BREW_LOAD, + { + renderer : 'legacy', + published : true + }, + DEFAULT_BREW); module.exports = { DEFAULT_BREW, From e02bde5eeda9040ba6be887eb25403953013f9b6 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Wed, 4 Jan 2023 17:33:23 -0500 Subject: [PATCH 11/14] Cleanup; added more fields to DEFAULT_BREW --- server/app.js | 3 +++ server/brewDefaults.js | 28 +++++++++++++++++----------- server/homebrew.api.js | 14 +++++--------- 3 files changed, 25 insertions(+), 20 deletions(-) diff --git a/server/app.js b/server/app.js index dc4e0c8ac..c4c10a8cc 100644 --- a/server/app.js +++ b/server/app.js @@ -407,7 +407,10 @@ if(isLocalEnvironment){ //Render the page const templateFn = require('./../client/template.js'); app.use(asyncHandler(async (req, res, next)=>{ + + // Assuming we have not received a brew yet, populate with default values const brew = _.defaults(req.brew, DEFAULT_BREW); + // Create configuration object const configuration = { local : isLocalEnvironment, diff --git a/server/brewDefaults.js b/server/brewDefaults.js index 72dc37c0a..94243b275 100644 --- a/server/brewDefaults.js +++ b/server/brewDefaults.js @@ -1,30 +1,36 @@ const _ = require('lodash'); -// Default brew properties in most cases +// Default properties for newly-created brews const DEFAULT_BREW = { - text : '', - editId : null, - shareId : null, title : 'Untitled Brew', + text : '', + style : undefined, description : '', + editId : undefined, + shareId : undefined, + createdAt : undefined, + updatedAt : undefined, renderer : 'V3', + theme : '5ePHB', + authors : [], tags : [], systems : [], thumbnail : '', published : false, pageCount : 1, - theme : '5ePHB' + gDrive : false, + trashed : false + }; -// Default brew properties for loading -const DEFAULT_BREW_LOAD = {}; -_.defaults(DEFAULT_BREW_LOAD, +// Default values for older brews with missing properties +// e.g., missing "renderer" is assumed to be "legacy" +const DEFAULT_BREW_LOAD = _.defaults( { - renderer : 'legacy', - published : true + renderer : 'legacy', }, DEFAULT_BREW); module.exports = { DEFAULT_BREW, DEFAULT_BREW_LOAD -}; \ No newline at end of file +}; diff --git a/server/homebrew.api.js b/server/homebrew.api.js index 77d19d638..506af9293 100644 --- a/server/homebrew.api.js +++ b/server/homebrew.api.js @@ -73,17 +73,13 @@ If you believe you should have access to this brew, ask the file owner to invite throw 'Brew not found in Homebrewery database or Google Drive'; } - if(typeof stub?.tags === 'string') { - stub.tags = []; - } + // Clean up brew: fill in missing fields with defaults / fix old invalid values + stub.tags = stub.tags || undefined; // Clear empty strings + stub.renderer = stub.renderer || undefined; // Clear empty strings + stub = _.defaults(stub, DEFAULT_BREW_LOAD); // Fill in blank fields + - // Use _.assignWith instead of _.defaults - does this need to be replicated at all other uses of _.defaults??? - _.assignWith(stub, DEFAULT_BREW_LOAD, (objValue, srcValue)=>{ - if(typeof objValue === 'boolean') return objValue; - return objValue || srcValue; - }); req.brew = stub; - next(); }; }; From b717059a398bd04cdcbb023054bd5494dfae382c Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Wed, 4 Jan 2023 20:58:29 -0500 Subject: [PATCH 12/14] Fix `/new` storing string "undefined" in Style tab --- client/homebrew/pages/newPage/newPage.jsx | 3 ++- server/brewDefaults.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index 369070f99..cd197f5fb 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -67,7 +67,8 @@ const NewPage = createClass({ } localStorage.setItem(BREWKEY, brew.text); - localStorage.setItem(STYLEKEY, brew.style); + if(brew.style) + localStorage.setItem(STYLEKEY, brew.style); localStorage.setItem(METAKEY, JSON.stringify({ 'renderer': brew.renderer, 'theme': brew.theme })); }, componentWillUnmount : function() { diff --git a/server/brewDefaults.js b/server/brewDefaults.js index 94243b275..092f7070a 100644 --- a/server/brewDefaults.js +++ b/server/brewDefaults.js @@ -2,7 +2,7 @@ const _ = require('lodash'); // Default properties for newly-created brews const DEFAULT_BREW = { - title : 'Untitled Brew', + title : '', text : '', style : undefined, description : '', From c78d687387ec82eb74f4d7644add7c6071c2be1c Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Wed, 4 Jan 2023 21:32:16 -0500 Subject: [PATCH 13/14] Fix all brews being forced to V3 on load --- server/app.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/server/app.js b/server/app.js index c4c10a8cc..de7586209 100644 --- a/server/app.js +++ b/server/app.js @@ -408,9 +408,6 @@ if(isLocalEnvironment){ const templateFn = require('./../client/template.js'); app.use(asyncHandler(async (req, res, next)=>{ - // Assuming we have not received a brew yet, populate with default values - const brew = _.defaults(req.brew, DEFAULT_BREW); - // Create configuration object const configuration = { local : isLocalEnvironment, @@ -420,7 +417,7 @@ app.use(asyncHandler(async (req, res, next)=>{ const props = { version : require('./../package.json').version, url : req.originalUrl, - brew : brew, + brew : req.brew, brews : req.brews, googleBrews : req.googleBrews, account : req.account, From 332bcde4b23789b9b70a45c4b9c06c3f09b6f4d4 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Wed, 4 Jan 2023 21:39:51 -0500 Subject: [PATCH 14/14] Themes weren't being picked up for rendering --- client/homebrew/pages/printPage/printPage.jsx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/client/homebrew/pages/printPage/printPage.jsx b/client/homebrew/pages/printPage/printPage.jsx index 64ced6072..cff8ebe32 100644 --- a/client/homebrew/pages/printPage/printPage.jsx +++ b/client/homebrew/pages/printPage/printPage.jsx @@ -29,9 +29,10 @@ const PrintPage = createClass({ getInitialState : function() { return { brew : { - text : this.props.brew.text || '', - style : this.props.brew.style || undefined, - renderer : this.props.brew.renderer || 'legacy' + text : this.props.brew.text || '', + style : this.props.brew.style || undefined, + renderer : this.props.brew.renderer || 'legacy', + theme : this.props.brew.theme || '5ePHB' } }; }, @@ -48,7 +49,7 @@ const PrintPage = createClass({ text : brewStorage, style : styleStorage, renderer : metaStorage?.renderer || 'legacy', - theme : metaStorage?.theme || '5ePHB' + theme : metaStorage?.theme || '5ePHB' } }; });