mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2026-01-09 15:52:43 +00:00
alert if wrong file, redirect if good
This commit is contained in:
@@ -1,98 +1,95 @@
|
|||||||
const React = require('react');
|
const React = require('react');
|
||||||
|
const { useState, useRef } = React;
|
||||||
const _ = require('lodash');
|
const _ = require('lodash');
|
||||||
const Nav = require('naturalcrit/nav/nav.jsx');
|
const Nav = require('naturalcrit/nav/nav.jsx');
|
||||||
const yaml = require('js-yaml');
|
const yaml = require('js-yaml');
|
||||||
const { useRef } = React;
|
|
||||||
|
|
||||||
const BREWKEY = 'homebrewery-new';
|
const BREWKEY = 'homebrewery-new';
|
||||||
const STYLEKEY = 'homebrewery-new-style';
|
const STYLEKEY = 'homebrewery-new-style';
|
||||||
const METAKEY = 'homebrewery-new-meta';
|
const METAKEY = 'homebrewery-new-meta';
|
||||||
|
|
||||||
const splitTextStyleAndMetadata = (brew)=>{
|
const NewBrew = () => {
|
||||||
brew.text = brew.text.replaceAll('\r\n', '\n');
|
const inputRef = useRef(null);
|
||||||
if(brew.text.startsWith('```metadata')) {
|
|
||||||
const index = brew.text.indexOf('```\n\n');
|
const [brew, setBrew] = useState({
|
||||||
const metadataSection = brew.text.slice(12, index - 1);
|
text: '',
|
||||||
const metadata = yaml.load(metadataSection);
|
style: ''
|
||||||
Object.assign(brew, _.pick(metadata, ['title', 'description', 'tags', 'systems', 'renderer', 'theme', 'lang']));
|
});
|
||||||
brew.text = brew.text.slice(index + 5);
|
|
||||||
}
|
const splitTextStyleAndMetadata = (brewContent) => {
|
||||||
if(brew.text.startsWith('```css')) {
|
let updatedBrew = { ...brewContent };
|
||||||
const index = brew.text.indexOf('```\n\n');
|
updatedBrew.text = updatedBrew.text.replaceAll('\r\n', '\n');
|
||||||
brew.style = brew.text.slice(7, index - 1);
|
if (updatedBrew.text.startsWith('```metadata')) {
|
||||||
brew.text = brew.text.slice(index + 5);
|
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 (
|
||||||
|
<Nav.dropdown>
|
||||||
|
<Nav.item
|
||||||
|
className='new'
|
||||||
|
color='purple'
|
||||||
|
icon='fas fa-plus-square'>
|
||||||
|
new
|
||||||
|
</Nav.item>
|
||||||
|
<Nav.item
|
||||||
|
href='/new'
|
||||||
|
newTab={true}
|
||||||
|
color='purple'
|
||||||
|
icon='fas fa-plus-square'>
|
||||||
|
new
|
||||||
|
</Nav.item>
|
||||||
|
|
||||||
|
<Nav.item
|
||||||
|
color='purple'
|
||||||
|
icon='fas fa-plus-square'
|
||||||
|
onClick={() => { inputRef.current.click(); }}>
|
||||||
|
<input className='newFromLocal' type="file" ref={inputRef} onChange={handleFileChange} style={{ display: 'none' }} />
|
||||||
|
New From Local File
|
||||||
|
</Nav.item>
|
||||||
|
</Nav.dropdown>
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
module.exports = 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 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 <Nav.dropdown>
|
|
||||||
<Nav.item
|
|
||||||
className='new'
|
|
||||||
color='purple'
|
|
||||||
icon='fas fa-plus-square'>
|
|
||||||
new
|
|
||||||
</Nav.item>
|
|
||||||
<Nav.item
|
|
||||||
href='/new'
|
|
||||||
newTab={true}
|
|
||||||
color='purple'
|
|
||||||
icon='fas fa-plus-square'>
|
|
||||||
new
|
|
||||||
</Nav.item>
|
|
||||||
|
|
||||||
<Nav.item
|
|
||||||
color='purple'
|
|
||||||
icon='fas fa-plus-square'
|
|
||||||
onClick={() => { inputRef.current.click(); }}>
|
|
||||||
<input className='newFromLocal' type="file" ref={inputRef} onChange={handleFileChange} style={{ display: 'none' }}/>
|
|
||||||
New From Local File
|
|
||||||
</Nav.item>
|
|
||||||
|
|
||||||
</Nav.dropdown>;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
<Nav.item
|
|
||||||
href={'/new/'+encodeURIComponent(brewID)}
|
|
||||||
newTab={true}
|
|
||||||
color='purple'
|
|
||||||
icon='fas fa-plus-square'>
|
|
||||||
new cloned
|
|
||||||
</Nav.item>
|
|
||||||
*/
|
|
||||||
|
|||||||
Reference in New Issue
Block a user