From 32b5bebbc46e88b4e7e6b1e94032c11201e5b7b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Fri, 9 Feb 2024 00:18:39 +0100 Subject: [PATCH 1/7] full functionality --- client/homebrew/navbar/newbrew.navitem.jsx | 100 +++++++++++++++++++-- 1 file changed, 93 insertions(+), 7 deletions(-) diff --git a/client/homebrew/navbar/newbrew.navitem.jsx b/client/homebrew/navbar/newbrew.navitem.jsx index cc833013d..94aa9fb85 100644 --- a/client/homebrew/navbar/newbrew.navitem.jsx +++ b/client/homebrew/navbar/newbrew.navitem.jsx @@ -1,12 +1,98 @@ const React = require('react'); +const _ = require('lodash'); const Nav = require('naturalcrit/nav/nav.jsx'); +const yaml = require('js-yaml'); +const { useRef } = React; + +const BREWKEY = 'homebrewery-new'; +const STYLEKEY = 'homebrewery-new-style'; +const METAKEY = 'homebrewery-new-meta'; + +const splitTextStyleAndMetadata = (brew)=>{ + brew.text = brew.text.replaceAll('\r\n', '\n'); + if(brew.text.startsWith('```metadata')) { + const index = brew.text.indexOf('```\n\n'); + const metadataSection = brew.text.slice(12, index - 1); + const metadata = yaml.load(metadataSection); + Object.assign(brew, _.pick(metadata, ['title', 'description', 'tags', 'systems', 'renderer', 'theme', 'lang'])); + brew.text = brew.text.slice(index + 5); + } + if(brew.text.startsWith('```css')) { + const index = brew.text.indexOf('```\n\n'); + brew.style = brew.text.slice(7, index - 1); + brew.text = brew.text.slice(index + 5); + } +}; + + +const handleFileChange = (e) => { + const file = e.target.files[0]; + if (file) { + const reader = new FileReader(); + reader.onload = (e) => { + const fileContent = e.target.result; + + const brew = { + text :fileContent, + style : '' + } + splitTextStyleAndMetadata(brew); + console.log(brew); + localStorage.setItem(BREWKEY, brew.text); + localStorage.setItem(STYLEKEY, brew.style); + localStorage.setItem(METAKEY, JSON.stringify({ + 'title': brew.title, + 'description': brew.description, + 'tags': brew.tags, + 'systems': brew.systems, + 'renderer': brew.renderer, + 'theme': brew.theme, + 'lang': brew.lang + })); + + //window.location.href = '/new'; + }; + reader.readAsText(file); + } +}; + module.exports = function(props){ - return - new - ; + const inputRef = useRef(null); + + return + + new + + + new + + + { inputRef.current.click(); }}> + + New From Local File + + + ; + }; + +/* + + new cloned + +*/ \ No newline at end of file From 705d170b6e1fa922e1d820370e326e336e60520a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Fri, 9 Feb 2024 10:22:55 +0100 Subject: [PATCH 2/7] alert if wrong file, redirect if good --- client/homebrew/navbar/newbrew.navitem.jsx | 171 ++++++++++----------- 1 file changed, 84 insertions(+), 87 deletions(-) diff --git a/client/homebrew/navbar/newbrew.navitem.jsx b/client/homebrew/navbar/newbrew.navitem.jsx index 94aa9fb85..6e63e7a8f 100644 --- a/client/homebrew/navbar/newbrew.navitem.jsx +++ b/client/homebrew/navbar/newbrew.navitem.jsx @@ -1,98 +1,95 @@ const React = require('react'); +const { useState, useRef } = React; const _ = require('lodash'); const Nav = require('naturalcrit/nav/nav.jsx'); const yaml = require('js-yaml'); -const { useRef } = React; const BREWKEY = 'homebrewery-new'; const STYLEKEY = 'homebrewery-new-style'; const METAKEY = 'homebrewery-new-meta'; -const splitTextStyleAndMetadata = (brew)=>{ - brew.text = brew.text.replaceAll('\r\n', '\n'); - if(brew.text.startsWith('```metadata')) { - const index = brew.text.indexOf('```\n\n'); - const metadataSection = brew.text.slice(12, index - 1); - const metadata = yaml.load(metadataSection); - Object.assign(brew, _.pick(metadata, ['title', 'description', 'tags', 'systems', 'renderer', 'theme', 'lang'])); - brew.text = brew.text.slice(index + 5); - } - if(brew.text.startsWith('```css')) { - const index = brew.text.indexOf('```\n\n'); - brew.style = brew.text.slice(7, index - 1); - brew.text = brew.text.slice(index + 5); - } +const NewBrew = () => { + const inputRef = useRef(null); + + const [brew, setBrew] = useState({ + text: '', + style: '' + }); + + const splitTextStyleAndMetadata = (brewContent) => { + let updatedBrew = { ...brewContent }; + updatedBrew.text = updatedBrew.text.replaceAll('\r\n', '\n'); + if (updatedBrew.text.startsWith('```metadata')) { + const index = updatedBrew.text.indexOf('```\n\n'); + const metadataSection = updatedBrew.text.slice(12, index - 1); + const metadata = yaml.load(metadataSection); + updatedBrew = { + ...updatedBrew, + ..._.pick(metadata, ['title', 'description', 'tags', 'systems', 'renderer', 'theme', 'lang']) + }; + updatedBrew.text = updatedBrew.text.slice(index + 5); + } + if (updatedBrew.text.startsWith('```css')) { + const index = updatedBrew.text.indexOf('```\n\n'); + updatedBrew.style = updatedBrew.text.slice(7, index - 1); + updatedBrew.text = updatedBrew.text.slice(index + 5); + } + return updatedBrew; + }; + + + const handleFileChange = (e) => { + const file = e.target.files[0]; + if (file) { + const reader = new FileReader(); + reader.onload = (e) => { + const fileContent = e.target.result; + const newBrew = { + text: fileContent, + style: '' + }; + if(fileContent.startsWith('```metadata')) { + const updatedBrew = splitTextStyleAndMetadata(newBrew); + console.log(updatedBrew); + setBrew(updatedBrew); + localStorage.setItem(BREWKEY, updatedBrew.text); + localStorage.setItem(STYLEKEY, updatedBrew.style); + localStorage.setItem(METAKEY, JSON.stringify(_.pick(updatedBrew, ['title', 'description', 'tags', 'systems', 'renderer', 'theme', 'lang']))); + + window.location.href = '/new'; + } else { + alert('This file is invalid, please, enter a valid file'); + } + }; + reader.readAsText(file); + } + }; + + return ( + + + new + + + new + + + { inputRef.current.click(); }}> + + New From Local File + + + ); }; - -const handleFileChange = (e) => { - const file = e.target.files[0]; - if (file) { - const reader = new FileReader(); - reader.onload = (e) => { - const fileContent = e.target.result; - - const brew = { - text :fileContent, - style : '' - } - splitTextStyleAndMetadata(brew); - console.log(brew); - localStorage.setItem(BREWKEY, brew.text); - localStorage.setItem(STYLEKEY, brew.style); - localStorage.setItem(METAKEY, JSON.stringify({ - 'title': brew.title, - 'description': brew.description, - 'tags': brew.tags, - 'systems': brew.systems, - 'renderer': brew.renderer, - 'theme': brew.theme, - 'lang': brew.lang - })); - - //window.location.href = '/new'; - }; - reader.readAsText(file); - } -}; - - -module.exports = function(props){ - const inputRef = useRef(null); - - return - - new - - - new - - - { inputRef.current.click(); }}> - - New From Local File - - - ; - -}; - -/* - - new cloned - -*/ \ No newline at end of file +module.exports = NewBrew; From 1e1505c63f0b0aa8c99e32bb020a1402262d557c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Tue, 5 Mar 2024 08:27:56 +0100 Subject: [PATCH 3/7] towards a more traditional approach --- client/homebrew/navbar/newbrew.navitem.jsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/homebrew/navbar/newbrew.navitem.jsx b/client/homebrew/navbar/newbrew.navitem.jsx index 6e63e7a8f..3a941a205 100644 --- a/client/homebrew/navbar/newbrew.navitem.jsx +++ b/client/homebrew/navbar/newbrew.navitem.jsx @@ -9,7 +9,7 @@ const STYLEKEY = 'homebrewery-new-style'; const METAKEY = 'homebrewery-new-meta'; const NewBrew = () => { - const inputRef = useRef(null); + const [brew, setBrew] = useState({ text: '', @@ -84,8 +84,8 @@ const NewBrew = () => { { inputRef.current.click(); }}> - + onClick={() => { document.getElementById('uploadTxt').click(); }}> + New From Local File From b50353c8c4f3860873f1c9d68ed23b6e774b3c55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Wed, 6 Mar 2024 14:02:09 +0100 Subject: [PATCH 4/7] rename nav buttons per req --- client/homebrew/navbar/newbrew.navitem.jsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/client/homebrew/navbar/newbrew.navitem.jsx b/client/homebrew/navbar/newbrew.navitem.jsx index 3a941a205..642e341e2 100644 --- a/client/homebrew/navbar/newbrew.navitem.jsx +++ b/client/homebrew/navbar/newbrew.navitem.jsx @@ -74,19 +74,21 @@ const NewBrew = () => { new - new + from blank { document.getElementById('uploadTxt').click(); }}> - New From Local File + from file ); From 25945fc0dfae7cdd83104cdf7f12d77bb314b010 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Wed, 6 Mar 2024 14:06:57 +0100 Subject: [PATCH 5/7] getting rid of state as per req --- client/homebrew/navbar/newbrew.navitem.jsx | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/client/homebrew/navbar/newbrew.navitem.jsx b/client/homebrew/navbar/newbrew.navitem.jsx index 642e341e2..d393501cb 100644 --- a/client/homebrew/navbar/newbrew.navitem.jsx +++ b/client/homebrew/navbar/newbrew.navitem.jsx @@ -10,11 +10,7 @@ const METAKEY = 'homebrewery-new-meta'; const NewBrew = () => { - - const [brew, setBrew] = useState({ - text: '', - style: '' - }); + const splitTextStyleAndMetadata = (brewContent) => { let updatedBrew = { ...brewContent }; @@ -50,8 +46,6 @@ const NewBrew = () => { }; if(fileContent.startsWith('```metadata')) { const updatedBrew = splitTextStyleAndMetadata(newBrew); - console.log(updatedBrew); - setBrew(updatedBrew); localStorage.setItem(BREWKEY, updatedBrew.text); localStorage.setItem(STYLEKEY, updatedBrew.style); localStorage.setItem(METAKEY, JSON.stringify(_.pick(updatedBrew, ['title', 'description', 'tags', 'systems', 'renderer', 'theme', 'lang']))); From f93af38fa6c03590a6d3694d9840de468a89fe68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Wed, 6 Mar 2024 18:09:26 +0100 Subject: [PATCH 6/7] split-style-and-metadata moved to helpers.js --- client/homebrew/navbar/newbrew.navitem.jsx | 45 +++++----------------- server/app.js | 17 +------- shared/helpers.js | 22 +++++++++++ 3 files changed, 33 insertions(+), 51 deletions(-) create mode 100644 shared/helpers.js diff --git a/client/homebrew/navbar/newbrew.navitem.jsx b/client/homebrew/navbar/newbrew.navitem.jsx index d393501cb..7e5c63101 100644 --- a/client/homebrew/navbar/newbrew.navitem.jsx +++ b/client/homebrew/navbar/newbrew.navitem.jsx @@ -1,39 +1,13 @@ const React = require('react'); -const { useState, useRef } = React; const _ = require('lodash'); const Nav = require('naturalcrit/nav/nav.jsx'); -const yaml = require('js-yaml'); +const { splitTextStyleAndMetadata } = require('../../../shared/helpers.js'); // Importing the function from helpers.js const BREWKEY = 'homebrewery-new'; const STYLEKEY = 'homebrewery-new-style'; const METAKEY = 'homebrewery-new-meta'; -const NewBrew = () => { - - - - const splitTextStyleAndMetadata = (brewContent) => { - let updatedBrew = { ...brewContent }; - updatedBrew.text = updatedBrew.text.replaceAll('\r\n', '\n'); - if (updatedBrew.text.startsWith('```metadata')) { - const index = updatedBrew.text.indexOf('```\n\n'); - const metadataSection = updatedBrew.text.slice(12, index - 1); - const metadata = yaml.load(metadataSection); - updatedBrew = { - ...updatedBrew, - ..._.pick(metadata, ['title', 'description', 'tags', 'systems', 'renderer', 'theme', 'lang']) - }; - updatedBrew.text = updatedBrew.text.slice(index + 5); - } - if (updatedBrew.text.startsWith('```css')) { - const index = updatedBrew.text.indexOf('```\n\n'); - updatedBrew.style = updatedBrew.text.slice(7, index - 1); - updatedBrew.text = updatedBrew.text.slice(index + 5); - } - return updatedBrew; - }; - - +const NewBrew = () => { const handleFileChange = (e) => { const file = e.target.files[0]; if (file) { @@ -44,14 +18,13 @@ const NewBrew = () => { text: fileContent, style: '' }; - if(fileContent.startsWith('```metadata')) { - const updatedBrew = splitTextStyleAndMetadata(newBrew); - localStorage.setItem(BREWKEY, updatedBrew.text); - localStorage.setItem(STYLEKEY, updatedBrew.style); - localStorage.setItem(METAKEY, JSON.stringify(_.pick(updatedBrew, ['title', 'description', 'tags', 'systems', 'renderer', 'theme', 'lang']))); - - window.location.href = '/new'; - } else { + if(fileContent.startsWith('```metadata')) { + splitTextStyleAndMetadata(newBrew); // Modify newBrew directly + localStorage.setItem(BREWKEY, newBrew.text); + localStorage.setItem(STYLEKEY, newBrew.style); + localStorage.setItem(METAKEY, JSON.stringify(_.pick(newBrew, ['title', 'description', 'tags', 'systems', 'renderer', 'theme', 'lang']))); + window.location.href = '/new'; + } else { alert('This file is invalid, please, enter a valid file'); } }; diff --git a/server/app.js b/server/app.js index fc5d4a035..4c72b4924 100644 --- a/server/app.js +++ b/server/app.js @@ -17,21 +17,8 @@ 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')) { - const index = brew.text.indexOf('```\n\n'); - const metadataSection = brew.text.slice(12, index - 1); - const metadata = yaml.load(metadataSection); - Object.assign(brew, _.pick(metadata, ['title', 'description', 'tags', 'systems', 'renderer', 'theme', 'lang'])); - brew.text = brew.text.slice(index + 5); - } - if(brew.text.startsWith('```css')) { - const index = brew.text.indexOf('```\n\n'); - brew.style = brew.text.slice(7, index - 1); - brew.text = brew.text.slice(index + 5); - } -}; +const { splitTextStyleAndMetadata } = require('../shared/helpers.js'); + const sanitizeBrew = (brew, accessType)=>{ brew._id = undefined; diff --git a/shared/helpers.js b/shared/helpers.js new file mode 100644 index 000000000..5abb93fea --- /dev/null +++ b/shared/helpers.js @@ -0,0 +1,22 @@ +const _ = require('lodash'); +const yaml = require('js-yaml'); + +const splitTextStyleAndMetadata = (brew) => { + brew.text = brew.text.replaceAll('\r\n', '\n'); + if (brew.text.startsWith('```metadata')) { + const index = brew.text.indexOf('```\n\n'); + const metadataSection = brew.text.slice(12, index - 1); + const metadata = yaml.load(metadataSection); + Object.assign(brew, _.pick(metadata, ['title', 'description', 'tags', 'systems', 'renderer', 'theme', 'lang'])); + brew.text = brew.text.slice(index + 5); + } + if (brew.text.startsWith('```css')) { + const index = brew.text.indexOf('```\n\n'); + brew.style = brew.text.slice(7, index - 1); + brew.text = brew.text.slice(index + 5); + } +}; + +module.exports = { + splitTextStyleAndMetadata +}; From e494899f8b973bd191acfc6d48e42e6033e15d16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Wed, 6 Mar 2024 18:12:21 +0100 Subject: [PATCH 7/7] icons --- client/homebrew/navbar/newbrew.navitem.jsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/homebrew/navbar/newbrew.navitem.jsx b/client/homebrew/navbar/newbrew.navitem.jsx index 7e5c63101..319ef3392 100644 --- a/client/homebrew/navbar/newbrew.navitem.jsx +++ b/client/homebrew/navbar/newbrew.navitem.jsx @@ -37,7 +37,7 @@ const NewBrew = () => { + icon='fa-solid fa-plus-square'> new { href='/new' newTab={true} color='purple' - icon='fas fa-plus-square'> + icon='fa-solid fa-file'> from blank { document.getElementById('uploadTxt').click(); }}> from file