mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2026-05-09 20:38:40 +00:00
Add /embed endpoint
This duplicates the share endpoint. It uses the Share Page template with a boolean for share vs embed to toggle displaying the navbar and toolbar. Added a showToolbar property to brewRender to toggle... showing the toolbar.
This commit is contained in:
@@ -102,6 +102,7 @@ const BrewRenderer = (props)=>{
|
|||||||
currentBrewRendererPageNum : 1,
|
currentBrewRendererPageNum : 1,
|
||||||
themeBundle : {},
|
themeBundle : {},
|
||||||
onPageChange : ()=>{},
|
onPageChange : ()=>{},
|
||||||
|
showToolbar : true,
|
||||||
...props
|
...props
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -297,6 +298,8 @@ const BrewRenderer = (props)=>{
|
|||||||
const renderedStyle = useMemo(()=>renderStyle(), [props.style, props.themeBundle]);
|
const renderedStyle = useMemo(()=>renderStyle(), [props.style, props.themeBundle]);
|
||||||
renderedPages = useMemo(()=>renderPages(), [props.text, displayOptions]);
|
renderedPages = useMemo(()=>renderPages(), [props.text, displayOptions]);
|
||||||
|
|
||||||
|
const toolbarEl = <ToolBar displayOptions={displayOptions} onDisplayOptionsChange={handleDisplayOptionsChange} visiblePages={state.visiblePages.length > 0 ? state.visiblePages : [state.centerPage]} totalPages={rawPages.length} headerState={headerState} setHeaderState={setHeaderState}/>;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{/*render dummy page while iFrame is mounting.*/}
|
{/*render dummy page while iFrame is mounting.*/}
|
||||||
@@ -314,7 +317,7 @@ const BrewRenderer = (props)=>{
|
|||||||
<NotificationPopup />
|
<NotificationPopup />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<ToolBar displayOptions={displayOptions} onDisplayOptionsChange={handleDisplayOptionsChange} visiblePages={state.visiblePages.length > 0 ? state.visiblePages : [state.centerPage]} totalPages={rawPages.length} headerState={headerState} setHeaderState={setHeaderState}/>
|
{props.showToolbar ? toolbarEl : ''}
|
||||||
|
|
||||||
{/*render in iFrame so broken code doesn't crash the site.*/}
|
{/*render in iFrame so broken code doesn't crash the site.*/}
|
||||||
<Frame id='BrewRenderer' initialContent={INITIAL_CONTENT}
|
<Frame id='BrewRenderer' initialContent={INITIAL_CONTENT}
|
||||||
|
|||||||
@@ -61,7 +61,8 @@ const Homebrew = (props)=>{
|
|||||||
<div className={`homebrew${(config.deployment || config.local) ? ' deployment' : ''}`} style={backgroundObject()}>
|
<div className={`homebrew${(config.deployment || config.local) ? ' deployment' : ''}`} style={backgroundObject()}>
|
||||||
<Routes>
|
<Routes>
|
||||||
<Route path='/edit/:id' element={<WithRoute el={EditPage} brew={brew} userThemes={userThemes}/>} />
|
<Route path='/edit/:id' element={<WithRoute el={EditPage} brew={brew} userThemes={userThemes}/>} />
|
||||||
<Route path='/share/:id' element={<WithRoute el={SharePage} brew={brew} />} />
|
<Route path='/share/:id' element={<WithRoute el={SharePage} brew={brew} share={true} />} />
|
||||||
|
<Route path='/embed/:id' element={<WithRoute el={SharePage} brew={brew} share={false} />} />
|
||||||
<Route path='/new/:id' element={<WithRoute el={NewPage} brew={brew} userThemes={userThemes}/>} />
|
<Route path='/new/:id' element={<WithRoute el={NewPage} brew={brew} userThemes={userThemes}/>} />
|
||||||
<Route path='/new' element={<WithRoute el={NewPage} userThemes={userThemes}/> } />
|
<Route path='/new' element={<WithRoute el={NewPage} userThemes={userThemes}/> } />
|
||||||
<Route path='/user/:username' element={<WithRoute el={UserPage} brews={brews} />} />
|
<Route path='/user/:username' element={<WithRoute el={UserPage} brews={brews} />} />
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import { DEFAULT_BREW_LOAD } from '../../../../server/brewDefaults.js';
|
|||||||
import { printCurrentBrew, fetchThemeBundle } from '../../../../shared/helpers.js';
|
import { printCurrentBrew, fetchThemeBundle } from '../../../../shared/helpers.js';
|
||||||
|
|
||||||
const SharePage = (props)=>{
|
const SharePage = (props)=>{
|
||||||
const { brew = DEFAULT_BREW_LOAD, disableMeta = false } = props;
|
const { brew = DEFAULT_BREW_LOAD, disableMeta = false, share = true } = props;
|
||||||
|
|
||||||
const [themeBundle, setThemeBundle] = useState({});
|
const [themeBundle, setThemeBundle] = useState({});
|
||||||
const [currentBrewRendererPageNum, setCurrentBrewRendererPageNum] = useState(1);
|
const [currentBrewRendererPageNum, setCurrentBrewRendererPageNum] = useState(1);
|
||||||
@@ -65,40 +65,43 @@ const SharePage = (props)=>{
|
|||||||
</Nav.item>
|
</Nav.item>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const showNav = (
|
||||||
|
<Navbar>
|
||||||
|
<Nav.section className='titleSection'>
|
||||||
|
{disableMeta ? titleEl : <MetadataNav brew={brew}>{titleEl}</MetadataNav>}
|
||||||
|
</Nav.section>
|
||||||
|
|
||||||
|
<Nav.section>
|
||||||
|
{brew.shareId && (
|
||||||
|
<>
|
||||||
|
<PrintNavItem brew={brew}/>
|
||||||
|
<Nav.dropdown>
|
||||||
|
<Nav.item color='red' icon='fas fa-code'>
|
||||||
|
source
|
||||||
|
</Nav.item>
|
||||||
|
<Nav.item color='blue' icon='fas fa-eye' href={`/source/${processShareId()}`}>
|
||||||
|
view
|
||||||
|
</Nav.item>
|
||||||
|
{renderEditLink()}
|
||||||
|
<Nav.item color='blue' icon='fas fa-download' href={`/download/${processShareId()}`}>
|
||||||
|
download
|
||||||
|
</Nav.item>
|
||||||
|
<Nav.item color='blue' icon='fas fa-clone' href={`/new/${processShareId()}`}>
|
||||||
|
clone to new
|
||||||
|
</Nav.item>
|
||||||
|
</Nav.dropdown>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
<RecentNavItem brew={brew} storageKey='view' />
|
||||||
|
<Account />
|
||||||
|
</Nav.section>
|
||||||
|
</Navbar>
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className='sharePage sitePage'>
|
<div className='sharePage sitePage'>
|
||||||
<Meta name='robots' content='noindex, nofollow' />
|
<Meta name='robots' content='noindex, nofollow' />
|
||||||
<Navbar>
|
{share ? showNav : ''}
|
||||||
<Nav.section className='titleSection'>
|
|
||||||
{disableMeta ? titleEl : <MetadataNav brew={brew}>{titleEl}</MetadataNav>}
|
|
||||||
</Nav.section>
|
|
||||||
|
|
||||||
<Nav.section>
|
|
||||||
{brew.shareId && (
|
|
||||||
<>
|
|
||||||
<PrintNavItem brew={currentBrew}/>
|
|
||||||
<Nav.dropdown>
|
|
||||||
<Nav.item color='red' icon='fas fa-code'>
|
|
||||||
source
|
|
||||||
</Nav.item>
|
|
||||||
<Nav.item color='blue' icon='fas fa-eye' href={`/source/${processShareId()}`}>
|
|
||||||
view
|
|
||||||
</Nav.item>
|
|
||||||
{renderEditLink()}
|
|
||||||
<Nav.item color='blue' icon='fas fa-download' href={`/download/${processShareId()}`}>
|
|
||||||
download
|
|
||||||
</Nav.item>
|
|
||||||
<Nav.item color='blue' icon='fas fa-clone' href={`/new/${processShareId()}`}>
|
|
||||||
clone to new
|
|
||||||
</Nav.item>
|
|
||||||
</Nav.dropdown>
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
<RecentNavItem brew={brew} storageKey='view' />
|
|
||||||
<Account />
|
|
||||||
</Nav.section>
|
|
||||||
</Navbar>
|
|
||||||
|
|
||||||
<div className='content'>
|
<div className='content'>
|
||||||
<BrewRenderer
|
<BrewRenderer
|
||||||
text={brew.text}
|
text={brew.text}
|
||||||
@@ -110,6 +113,7 @@ const SharePage = (props)=>{
|
|||||||
onPageChange={handleBrewRendererPageChange}
|
onPageChange={handleBrewRendererPageChange}
|
||||||
currentBrewRendererPageNum={currentBrewRendererPageNum}
|
currentBrewRendererPageNum={currentBrewRendererPageNum}
|
||||||
allowPrint={true}
|
allowPrint={true}
|
||||||
|
showToolbar={share}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+13
-2
@@ -454,8 +454,8 @@ app.get('/new', asyncHandler(async(req, res, next)=>{
|
|||||||
return next();
|
return next();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
//Share Page
|
|
||||||
app.get('/share/:id', dbCheck, asyncHandler(getBrew('share')), asyncHandler(async (req, res, next)=>{
|
const shareEmbedCommon = async (req)=>{
|
||||||
const { brew } = req;
|
const { brew } = req;
|
||||||
req.ogMeta = { ...defaultMetaTags,
|
req.ogMeta = { ...defaultMetaTags,
|
||||||
title : `${req.brew.title || 'Untitled Brew'} - ${req.brew.authors[0] || 'No author.'}`,
|
title : `${req.brew.title || 'Untitled Brew'} - ${req.brew.authors[0] || 'No author.'}`,
|
||||||
@@ -478,6 +478,17 @@ app.get('/share/:id', dbCheck, asyncHandler(getBrew('share')), asyncHandler(asyn
|
|||||||
|
|
||||||
brew.authors.includes(req.account?.username) ? sanitizeBrew(req.brew, 'shareAuthor') : sanitizeBrew(req.brew, 'share');
|
brew.authors.includes(req.account?.username) ? sanitizeBrew(req.brew, 'shareAuthor') : sanitizeBrew(req.brew, 'share');
|
||||||
splitTextStyleAndMetadata(req.brew);
|
splitTextStyleAndMetadata(req.brew);
|
||||||
|
};
|
||||||
|
|
||||||
|
//Share Page
|
||||||
|
app.get('/share/:id', dbCheck, asyncHandler(getBrew('share')), asyncHandler(async (req, res, next)=>{
|
||||||
|
shareEmbedCommon(req);
|
||||||
|
return next();
|
||||||
|
}));
|
||||||
|
|
||||||
|
//Embed Page
|
||||||
|
app.get('/embed/:id', dbCheck, asyncHandler(getBrew('share')), asyncHandler(async (req, res, next)=>{
|
||||||
|
shareEmbedCommon(req);
|
||||||
return next();
|
return next();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user