diff --git a/client/homebrew/navbar/newbrew.navitem.jsx b/client/homebrew/navbar/newbrew.navitem.jsx
index cc833013d..319ef3392 100644
--- a/client/homebrew/navbar/newbrew.navitem.jsx
+++ b/client/homebrew/navbar/newbrew.navitem.jsx
@@ -1,12 +1,64 @@
const React = require('react');
+const _ = require('lodash');
const Nav = require('naturalcrit/nav/nav.jsx');
+const { splitTextStyleAndMetadata } = require('../../../shared/helpers.js'); // Importing the function from helpers.js
-module.exports = function(props){
- return
- new
- ;
+const BREWKEY = 'homebrewery-new';
+const STYLEKEY = 'homebrewery-new-style';
+const METAKEY = 'homebrewery-new-meta';
+
+const NewBrew = () => {
+ 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')) {
+ 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');
+ }
+ };
+ reader.readAsText(file);
+ }
+ };
+
+ return (
+
+
+ new
+
+
+ from blank
+
+
+ { document.getElementById('uploadTxt').click(); }}>
+
+ from file
+
+
+ );
};
+
+module.exports = NewBrew;
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
+};