From 69231ba57a41e2df729d7dff0bff54b2e7081fdc Mon Sep 17 00:00:00 2001 From: Sean Robertson Date: Mon, 21 Jun 2021 12:34:51 +1200 Subject: [PATCH 01/12] Initial pass at appending codefenced CSS to Style data at save time, only on `/new` brews (so only once per brew). --- client/homebrew/pages/newPage/newPage.jsx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index 14f14a987..c47f8675f 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -135,6 +135,13 @@ const NewPage = createClass({ console.log('saving new brew'); + // Split out CSS to Style if CSS codefence exists + if(brew.text.startsWith('```css') && brew.text.indexOf('```\n\n') > 0) { + const index = brew.text.indexOf('```\n\n'); + brew.style = `${brew.style}${brew.text.slice(7, index - 1)}`; + brew.text = brew.text.slice(index + 5); + } + if(this.state.saveGoogle) { const res = await request .post('/api/newGoogle/') From cf4bfc35ead153cdc77216a6e027706d80fcdf27 Mon Sep 17 00:00:00 2001 From: Sean Robertson Date: Mon, 21 Jun 2021 13:00:12 +1200 Subject: [PATCH 02/12] Add new line before appending style data Add a new line between the existing style data and the appended codefenced style data. --- client/homebrew/pages/newPage/newPage.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index c47f8675f..6d5d20cfc 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -138,7 +138,7 @@ const NewPage = createClass({ // Split out CSS to Style if CSS codefence exists if(brew.text.startsWith('```css') && brew.text.indexOf('```\n\n') > 0) { const index = brew.text.indexOf('```\n\n'); - brew.style = `${brew.style}${brew.text.slice(7, index - 1)}`; + brew.style = `${brew.style}\n${brew.text.slice(7, index - 1)}`; brew.text = brew.text.slice(index + 5); } From b72191ae680f0c6eff241be4ae82872f46d5a1af Mon Sep 17 00:00:00 2001 From: Sean Robertson Date: Mon, 21 Jun 2021 13:04:29 +1200 Subject: [PATCH 03/12] Increase Linter max lines for newPage.jsx Increase the maximum number of lines permitted by the Linter for the newPage.jsx file to 300 (was 200). --- client/homebrew/pages/newPage/newPage.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index 6d5d20cfc..13509f53c 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -1,3 +1,4 @@ +/*eslint max-lines: ["warn", {"max": 300, "skipBlankLines": true, "skipComments": true}]*/ require('./newPage.less'); const React = require('react'); const createClass = require('create-react-class'); From 0eaeb748f433c3252817e230cce396880c34bd2f Mon Sep 17 00:00:00 2001 From: Sean Robertson Date: Mon, 21 Jun 2021 16:15:37 +1200 Subject: [PATCH 04/12] Add local storage key to store Brew Style data Add local storage key for storing Brew Style data. --- client/homebrew/pages/newPage/newPage.jsx | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index 14f14a987..70c9b96d3 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -17,7 +17,9 @@ const SplitPane = require('naturalcrit/splitPane/splitPane.jsx'); const Editor = require('../../editor/editor.jsx'); const BrewRenderer = require('../../brewRenderer/brewRenderer.jsx'); -const KEY = 'homebrewery-new'; +const BREWKEY = 'homebrewery-new'; +const STYLEKEY = 'homebrewery-new-style'; + const NewPage = createClass({ getDefaultProps : function() { @@ -70,10 +72,16 @@ const NewPage = createClass({ }, componentDidMount : function() { - const storage = localStorage.getItem(KEY); - if(!this.props.brew.text && storage){ + const brewStorage = localStorage.getItem(BREWKEY); + if(!this.props.brew.text && brewStorage){ this.setState({ - brew : { text: storage } + brew : { text: brewStorage } + }); + } + const styleStorage = localStorage.getItem(STYLEKEY); + if(!this.props.brew.text && styleStorage){ + this.setState({ + brew : { style: styleStorage } }); } @@ -112,13 +120,14 @@ const NewPage = createClass({ brew : _.merge({}, prevState.brew, { text: text }), htmlErrors : htmlErrors })); - localStorage.setItem(KEY, text); + localStorage.setItem(BREWKEY, text); }, handleStyleChange : function(style){ this.setState((prevState)=>({ brew : _.merge({}, prevState.brew, { style: style }), })); + localStorage.setItem(STYLEKEY, style); }, handleMetaChange : function(metadata){ @@ -148,7 +157,7 @@ const NewPage = createClass({ }); const brew = res.body; - localStorage.removeItem(KEY); + localStorage.removeItem(BREWKEY); window.location = `/edit/${brew.googleId}${brew.editId}`; } else { request.post('/api') @@ -162,7 +171,7 @@ const NewPage = createClass({ } window.onbeforeunload = function(){}; const brew = res.body; - localStorage.removeItem(KEY); + localStorage.removeItem(BREWKEY); window.location = `/edit/${brew.editId}`; }); } From 09c7f45c69505e2b121f723be0f690948b30be45 Mon Sep 17 00:00:00 2001 From: Sean Robertson Date: Mon, 21 Jun 2021 16:27:18 +1200 Subject: [PATCH 05/12] Clear data from new key when appropriate --- client/homebrew/pages/newPage/newPage.jsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index 70c9b96d3..b80990001 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -158,6 +158,7 @@ const NewPage = createClass({ const brew = res.body; localStorage.removeItem(BREWKEY); + localStorage.removeItem(STYLEKEY); window.location = `/edit/${brew.googleId}${brew.editId}`; } else { request.post('/api') @@ -172,6 +173,7 @@ const NewPage = createClass({ window.onbeforeunload = function(){}; const brew = res.body; localStorage.removeItem(BREWKEY); + localStorage.removeItem(STYLEKEY); window.location = `/edit/${brew.editId}`; }); } From 2613d43f3cea41b6a4f9d6b8a07eed494ff5048d Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Mon, 21 Jun 2021 19:38:02 +1200 Subject: [PATCH 06/12] Shift CSS processing from `newPage.jsx/save` to `homebrew.api.js/newBrew`, as this function is only called when saving new Brews. --- client/homebrew/pages/newPage/newPage.jsx | 9 +-------- server/homebrew.api.js | 8 ++++++++ 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index 13509f53c..50393f731 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -135,14 +135,7 @@ const NewPage = createClass({ }); console.log('saving new brew'); - - // Split out CSS to Style if CSS codefence exists - if(brew.text.startsWith('```css') && brew.text.indexOf('```\n\n') > 0) { - const index = brew.text.indexOf('```\n\n'); - brew.style = `${brew.style}\n${brew.text.slice(7, index - 1)}`; - brew.text = brew.text.slice(index + 5); - } - + if(this.state.saveGoogle) { const res = await request .post('/api/newGoogle/') diff --git a/server/homebrew.api.js b/server/homebrew.api.js index 51c9903db..0df6a15ac 100644 --- a/server/homebrew.api.js +++ b/server/homebrew.api.js @@ -28,8 +28,16 @@ const mergeBrewText = (text, style)=>{ }; const newBrew = (req, res)=>{ + const brew = req.body; + // Split out CSS to Style if CSS codefence exists + if(brew.text.startsWith('```css') && brew.text.indexOf('```\n\n') > 0) { + const index = brew.text.indexOf('```\n\n'); + brew.style = `${brew.style ? brew.style + '\n' : ''}${brew.text.slice(7, index - 1)}`; + brew.text = brew.text.slice(index + 5); + }; + if(!brew.title) { brew.title = getGoodBrewTitle(brew.text); } From ad0e4a2099fe1a788fb6975dcfe272421cd2b8cc Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Mon, 21 Jun 2021 19:39:30 +1200 Subject: [PATCH 07/12] Lint fixes. --- client/homebrew/pages/newPage/newPage.jsx | 2 +- server/homebrew.api.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index 50393f731..57a098cb8 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -135,7 +135,7 @@ const NewPage = createClass({ }); console.log('saving new brew'); - + if(this.state.saveGoogle) { const res = await request .post('/api/newGoogle/') diff --git a/server/homebrew.api.js b/server/homebrew.api.js index 0df6a15ac..92ca53a8f 100644 --- a/server/homebrew.api.js +++ b/server/homebrew.api.js @@ -34,10 +34,10 @@ const newBrew = (req, res)=>{ // Split out CSS to Style if CSS codefence exists if(brew.text.startsWith('```css') && brew.text.indexOf('```\n\n') > 0) { const index = brew.text.indexOf('```\n\n'); - brew.style = `${brew.style ? brew.style + '\n' : ''}${brew.text.slice(7, index - 1)}`; + brew.style = `${brew.style ? `${brew.style}\n` : ''}${brew.text.slice(7, index - 1)}`; brew.text = brew.text.slice(index + 5); }; - + if(!brew.title) { brew.title = getGoodBrewTitle(brew.text); } From a74916d593b33e940dd8fed8f7bfd4c29d9ebb31 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Mon, 21 Jun 2021 19:46:54 +1200 Subject: [PATCH 08/12] Removed CSS splitting from `homebrew.api.js` and back to `newPage.jsx`. --- client/homebrew/pages/newPage/newPage.jsx | 12 ++++++++++-- server/homebrew.api.js | 7 ------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index 57a098cb8..b069f6e7d 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -136,10 +136,18 @@ const NewPage = createClass({ console.log('saving new brew'); + const brew = this.state.brew; + // Split out CSS to Style if CSS codefence exists + if(brew.text.startsWith('```css') && brew.text.indexOf('```\n\n') > 0) { + const index = brew.text.indexOf('```\n\n'); + brew.style = `${brew.style ? `${brew.style}\n` : ''}${brew.text.slice(7, index - 1)}`; + brew.text = brew.text.slice(index + 5); + }; + if(this.state.saveGoogle) { const res = await request .post('/api/newGoogle/') - .send(this.state.brew) + .send(brew) .catch((err)=>{ console.log(err.status === 401 ? 'Not signed in!' @@ -153,7 +161,7 @@ const NewPage = createClass({ window.location = `/edit/${brew.googleId}${brew.editId}`; } else { request.post('/api') - .send(this.state.brew) + .send(brew) .end((err, res)=>{ if(err){ this.setState({ diff --git a/server/homebrew.api.js b/server/homebrew.api.js index 92ca53a8f..7d0e9670e 100644 --- a/server/homebrew.api.js +++ b/server/homebrew.api.js @@ -31,13 +31,6 @@ const newBrew = (req, res)=>{ const brew = req.body; - // Split out CSS to Style if CSS codefence exists - if(brew.text.startsWith('```css') && brew.text.indexOf('```\n\n') > 0) { - const index = brew.text.indexOf('```\n\n'); - brew.style = `${brew.style ? `${brew.style}\n` : ''}${brew.text.slice(7, index - 1)}`; - brew.text = brew.text.slice(index + 5); - }; - if(!brew.title) { brew.title = getGoodBrewTitle(brew.text); } From e2280197b94986f0f81b1e09cfa9846e9efd7db3 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Mon, 21 Jun 2021 19:49:35 +1200 Subject: [PATCH 09/12] Unwinding hanging new line accidentally left after removing other code changes. --- server/homebrew.api.js | 1 - 1 file changed, 1 deletion(-) diff --git a/server/homebrew.api.js b/server/homebrew.api.js index 7d0e9670e..51c9903db 100644 --- a/server/homebrew.api.js +++ b/server/homebrew.api.js @@ -28,7 +28,6 @@ const mergeBrewText = (text, style)=>{ }; const newBrew = (req, res)=>{ - const brew = req.body; if(!brew.title) { From 142c9ad3b7a60d4f4d7a8f7f6f0903538c3da3a1 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Mon, 21 Jun 2021 20:14:58 +1200 Subject: [PATCH 10/12] Fix loading Style data from local storage, and add fix for Linter. --- client/homebrew/pages/newPage/newPage.jsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index b80990001..2debb104c 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -1,3 +1,4 @@ +/*eslint max-lines: ["warn", {"max": 300, "skipBlankLines": true, "skipComments": true}]*/ require('./newPage.less'); const React = require('react'); const createClass = require('create-react-class'); @@ -77,13 +78,13 @@ const NewPage = createClass({ this.setState({ brew : { text: brewStorage } }); - } + }; const styleStorage = localStorage.getItem(STYLEKEY); - if(!this.props.brew.text && styleStorage){ + if(!this.props.brew.style && styleStorage){ this.setState({ brew : { style: styleStorage } }); - } + }; this.setState((prevState)=>({ htmlErrors : Markdown.validate(prevState.brew.text) From e07bb1b3c2f7e3b366e010a330d12e792056782b Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Thu, 24 Jun 2021 23:29:01 -0400 Subject: [PATCH 11/12] Don't save style tab if user never put anything in it --- client/homebrew/editor/editor.jsx | 13 +++++++++++-- client/homebrew/pages/newPage/newPage.jsx | 11 +---------- server.js | 9 --------- server/homebrew.api.js | 10 ++++++---- 4 files changed, 18 insertions(+), 25 deletions(-) diff --git a/client/homebrew/editor/editor.jsx b/client/homebrew/editor/editor.jsx index 7cbd6bb20..12cb0aa37 100644 --- a/client/homebrew/editor/editor.jsx +++ b/client/homebrew/editor/editor.jsx @@ -3,17 +3,26 @@ const React = require('react'); const createClass = require('create-react-class'); const _ = require('lodash'); const cx = require('classnames'); +const dedent = require('dedent-tabs').default; const CodeEditor = require('naturalcrit/codeEditor/codeEditor.jsx'); const SnippetBar = require('./snippetbar/snippetbar.jsx'); const MetadataEditor = require('./metadataEditor/metadataEditor.jsx'); +const SNIPPETBAR_HEIGHT = 25; +const DEFAULT_STYLE_TEXT = dedent` + /*=======--- Example CSS styling ---=======*/ + /* Any CSS here will apply to your document! */ + + .myExampleClass { + color: black; + }`; const splice = function(str, index, inject){ return str.slice(0, index) + inject + str.slice(index); }; -const SNIPPETBAR_HEIGHT = 25; + const Editor = createClass({ getDefaultProps : function() { @@ -176,7 +185,7 @@ const Editor = createClass({ return ; } if(this.isMeta()){ diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index b069f6e7d..6b48df4a4 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -4,7 +4,6 @@ const React = require('react'); const createClass = require('create-react-class'); const _ = require('lodash'); const request = require('superagent'); -const dedent = require('dedent-tabs').default; const Markdown = require('naturalcrit/markdown.js'); @@ -24,14 +23,7 @@ const NewPage = createClass({ getDefaultProps : function() { return { brew : { - text : '', - style : dedent` - /*=======--- Example CSS styling ---=======*/ - /* Any CSS here will apply to your document! */ - - .myExampleClass { - color: black; - }`, + text : '', shareId : null, editId : null, createdAt : null, @@ -52,7 +44,6 @@ 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 || '', diff --git a/server.js b/server.js index b7e71794d..45e073065 100644 --- a/server.js +++ b/server.js @@ -9,7 +9,6 @@ const GoogleActions = require('./server/googleActions.js'); const serveCompressedStaticAssets = require('./server/static-assets.mv.js'); const sanitizeFilename = require('sanitize-filename'); const asyncHandler = require('express-async-handler'); -const dedent = require('dedent-tabs').default; const brewAccessTypes = ['edit', 'share', 'raw']; @@ -37,14 +36,6 @@ const getBrewFromId = asyncHandler(async (id, accessType)=>{ const index = brew.text.indexOf('```\n\n'); brew.style = brew.text.slice(7, index - 1); brew.text = brew.text.slice(index + 5); - } else { - brew.style = dedent` - /*=======--- Example CSS styling ---=======*/ - /* Any CSS here will apply to your document! */ - - .myExampleClass { - color: black; - }`; } return brew; }); diff --git a/server/homebrew.api.js b/server/homebrew.api.js index 51c9903db..1f988761d 100644 --- a/server/homebrew.api.js +++ b/server/homebrew.api.js @@ -20,10 +20,12 @@ const getGoodBrewTitle = (text)=>{ }; const mergeBrewText = (text, style)=>{ - text = `\`\`\`css\n` + - `${style}\n` + - `\`\`\`\n\n` + - `${text}`; + if(typeof style !== 'undefined') { + text = `\`\`\`css\n` + + `${style}\n` + + `\`\`\`\n\n` + + `${text}`; + } return text; }; From 0616ce62eb7f051e661b08359fbb6507f527f812 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Fri, 25 Jun 2021 00:15:49 -0400 Subject: [PATCH 12/12] Rearrange so loading from one doesn't override the other --- client/homebrew/pages/newPage/newPage.jsx | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index 01fd9d916..dcaff6a31 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -64,18 +64,17 @@ const NewPage = createClass({ }, componentDidMount : function() { - const brewStorage = localStorage.getItem(BREWKEY); - if(!this.props.brew.text && brewStorage){ - this.setState({ - brew : { text: brewStorage } - }); - }; + const brewStorage = localStorage.getItem(BREWKEY); const styleStorage = localStorage.getItem(STYLEKEY); - if(!this.props.brew.style && styleStorage){ + + if(!this.props.brew.text || !this.props.brew.style){ this.setState({ - brew : { style: styleStorage } + brew : { + text : this.props.brew.text || (brewStorage ?? ''), + style : this.props.brew.style || (styleStorage ?? undefined) + } }); - }; + } this.setState((prevState)=>({ htmlErrors : Markdown.validate(prevState.brew.text)