mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2025-12-24 20:42:43 +00:00
This might not be the best rework - I was unsure if the *this* that would be available when called would see the appropriate object so I assumed not and pass it as a parameter. Works, but may be bad form.
51 lines
1.9 KiB
JavaScript
51 lines
1.9 KiB
JavaScript
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);
|
|
}
|
|
if(brew.text.startsWith('```snippets')) {
|
|
const index = brew.text.indexOf('```\n\n');
|
|
brew.snippets = brew.text.slice(11, index - 1);
|
|
brew.text = brew.text.slice(index + 5);
|
|
}
|
|
};
|
|
|
|
const printCurrentBrew = ()=>{
|
|
if(window.typeof !== 'undefined') {
|
|
window.frames['BrewRenderer'].contentWindow.print();
|
|
//Force DOM reflow; Print dialog causes a repaint, and @media print CSS somehow makes out-of-view pages disappear
|
|
const node = window.frames['BrewRenderer'].contentDocument.getElementsByClassName('brewRenderer').item(0);
|
|
node.style.display='none';
|
|
node.offsetHeight; // accessing this is enough to trigger a reflow
|
|
node.style.display='';
|
|
}
|
|
};
|
|
|
|
const fetchThemeBundle = (obj, renderer, theme)=>{
|
|
fetch(`${window.location.protocol}//${window.location.host}/theme/${renderer}/${theme}`).then((response)=>response.json()).then((themeBundle)=>{
|
|
themeBundle.joinedStyles = themeBundle.styles.map((style)=>`<style>${style}</style>`).join('\n\n'); //DOMPurify.sanitize(joinedStyles, purifyConfig);
|
|
obj.setState((prevState)=>({ // MOVE TO MOUNT STEP OF SHARE / NEW / EDIT
|
|
...prevState,
|
|
themeBundle : themeBundle
|
|
}));
|
|
});
|
|
};
|
|
|
|
module.exports = {
|
|
splitTextStyleAndMetadata,
|
|
printCurrentBrew,
|
|
fetchThemeBundle,
|
|
};
|