@layer styleTab {\n${this.state.brew.style}\n} ` }} />;
- return
\n${this.state.brew.style}\n` }} />;
- },
-
- renderPages : function(){
- if(this.state.brew.renderer == 'legacy') {
- return _.map(this.state.brew.text.split('\\page'), (pageText, index)=>{
- return
;
- });
- } else {
- return _.map(this.state.brew.text.split(/^\\page$/gm), (pageText, index)=>{
- pageText += `\n\n \n\\column\n `; //Artificial column break at page end to emulate column-fill:auto (until `wide` is used, when column-fill:balance will reappear)
- return (
-
- );
- });
- }
-
- },
-
- render : function(){
- const rendererPath = this.state.brew.renderer == 'V3' ? 'V3' : 'Legacy';
- const themePath = this.state.brew.theme ?? '5ePHB';
- const baseThemePath = Themes[rendererPath][themePath].baseTheme;
-
- return
-
-
- {baseThemePath &&
-
- }
-
- {/* Apply CSS from Style tab */}
- {this.renderStyle()}
-
- {this.renderPages()}
-
-
;
- }
-});
-
-module.exports = PrintPage;
diff --git a/client/homebrew/pages/printPage/printPage.less b/client/homebrew/pages/printPage/printPage.less
deleted file mode 100644
index 0d9e7b68b..000000000
--- a/client/homebrew/pages/printPage/printPage.less
+++ /dev/null
@@ -1,3 +0,0 @@
-.printPage{
-
-}
\ No newline at end of file
diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx
index 2eab5f34a..9695ee810 100644
--- a/client/homebrew/pages/sharePage/sharePage.jsx
+++ b/client/homebrew/pages/sharePage/sharePage.jsx
@@ -6,14 +6,13 @@ const { Meta } = require('vitreum/headtags');
const Nav = require('naturalcrit/nav/nav.jsx');
const Navbar = require('../../navbar/navbar.jsx');
const MetadataNav = require('../../navbar/metadata.navitem.jsx');
-const PrintLink = require('../../navbar/print.navitem.jsx');
+const PrintNavItem = require('../../navbar/print.navitem.jsx');
const RecentNavItem = require('../../navbar/recent.navitem.jsx').both;
const Account = require('../../navbar/account.navitem.jsx');
-
-
const BrewRenderer = require('../../brewRenderer/brewRenderer.jsx');
const { DEFAULT_BREW_LOAD } = require('../../../../server/brewDefaults.js');
+const { printCurrentBrew } = require('../../../../shared/helpers.js');
const SharePage = createClass({
displayName : 'SharePage',
@@ -35,7 +34,7 @@ const SharePage = createClass({
if(!(e.ctrlKey || e.metaKey)) return;
const P_KEY = 80;
if(e.keyCode == P_KEY){
- window.open(`/print/${this.processShareId()}?dialog=true`, '_blank').focus();
+ if(e.keyCode == P_KEY) printCurrentBrew();
e.stopPropagation();
e.preventDefault();
}
@@ -72,7 +71,7 @@ const SharePage = createClass({
{this.props.brew.shareId && <>
-
+
source
@@ -95,7 +94,13 @@ const SharePage = createClass({
-
+
;
}
diff --git a/server/app.js b/server/app.js
index a08ab4404..e26c98f54 100644
--- a/server/app.js
+++ b/server/app.js
@@ -331,13 +331,6 @@ app.get('/share/:id', asyncHandler(getBrew('share')), asyncHandler(async (req, r
return next();
}));
-//Print Page
-app.get('/print/:id', asyncHandler(getBrew('share')), (req, res, next)=>{
- sanitizeBrew(req.brew, 'share');
- splitTextStyleAndMetadata(req.brew);
- next();
-});
-
//Account Page
app.get('/account', asyncHandler(async (req, res, next)=>{
const data = {};
diff --git a/shared/helpers.js b/shared/helpers.js
index 42dd09e3f..8ca185046 100644
--- a/shared/helpers.js
+++ b/shared/helpers.js
@@ -17,6 +17,18 @@ const splitTextStyleAndMetadata = (brew)=>{
}
};
-module.exports = {
- splitTextStyleAndMetadata
+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='';
+ }
+};
+
+module.exports = {
+ splitTextStyleAndMetadata,
+ printCurrentBrew
};