From ac3168e3651c0efcc5fbdf8f4831c92f24ae49a5 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Fri, 24 May 2024 19:28:02 -0400 Subject: [PATCH] Move "printPage()" to `helpers.js` for reuse in multiple pages --- client/homebrew/brewRenderer/brewRenderer.jsx | 12 +----------- client/homebrew/navbar/print.navitem.jsx | 5 +++-- client/homebrew/pages/editPage/editPage.jsx | 16 +++------------- client/homebrew/pages/newPage/newPage.jsx | 16 +++------------- client/homebrew/pages/sharePage/sharePage.jsx | 18 +++--------------- shared/helpers.js | 16 ++++++++++++++-- 6 files changed, 27 insertions(+), 56 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index 5445292ec..571790391 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -13,6 +13,7 @@ const RenderWarnings = require('homebrewery/renderWarnings/renderWarnings.jsx'); const NotificationPopup = require('./notificationPopup/notificationPopup.jsx'); const Frame = require('react-frame-component').default; const dedent = require('dedent-tabs').default; +const { printPage } = require('../../../shared/helpers.js'); const DOMPurify = require('dompurify'); const purifyConfig = { FORCE_BODY: true, SANITIZE_DOM: false }; @@ -169,17 +170,6 @@ const BrewRenderer = (props)=>{ } }; - const printPage = ()=>{ - 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 - let 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 frameDidMount = ()=>{ //This triggers when iFrame finishes internal "componentDidMount" setTimeout(()=>{ //We still see a flicker where the style isn't applied yet, so wait 100ms before showing iFrame updateSize(); diff --git a/client/homebrew/navbar/print.navitem.jsx b/client/homebrew/navbar/print.navitem.jsx index 42b47b88e..a573b1069 100644 --- a/client/homebrew/navbar/print.navitem.jsx +++ b/client/homebrew/navbar/print.navitem.jsx @@ -1,8 +1,9 @@ const React = require('react'); const Nav = require('naturalcrit/nav/nav.jsx'); +const { printPage } = require('../../../shared/helpers.js'); -module.exports = function({printFunction}){ - return +module.exports = function(){ + return get PDF ; }; diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index dfce74e48..0774efaa2 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -23,6 +23,7 @@ const BrewRenderer = require('../../brewRenderer/brewRenderer.jsx'); const Markdown = require('naturalcrit/markdown.js'); const { DEFAULT_BREW_LOAD } = require('../../../../server/brewDefaults.js'); +const { printPage } = require('../../../../shared/helpers.js'); const googleDriveIcon = require('../../googleDrive.svg'); @@ -95,24 +96,13 @@ const EditPage = createClass({ const S_KEY = 83; const P_KEY = 80; if(e.keyCode == S_KEY) this.trySave(true); - if(e.keyCode == P_KEY) this.printPage(); + if(e.keyCode == P_KEY) printPage(); if(e.keyCode == P_KEY || e.keyCode == S_KEY){ e.stopPropagation(); e.preventDefault(); } }, - printPage : function(){ - 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 - let 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=''; - } - }, - handleSplitMove : function(){ this.editor.current.update(); }, @@ -389,7 +379,7 @@ const EditPage = createClass({ post to reddit - + diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index d28ccc697..5c8f4ad73 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -19,6 +19,7 @@ const Editor = require('../../editor/editor.jsx'); const BrewRenderer = require('../../brewRenderer/brewRenderer.jsx'); const { DEFAULT_BREW } = require('../../../../server/brewDefaults.js'); +const { printPage } = require('../../../../shared/helpers.js'); const BREWKEY = 'homebrewery-new'; const STYLEKEY = 'homebrewery-new-style'; @@ -90,24 +91,13 @@ const NewPage = createClass({ const S_KEY = 83; const P_KEY = 80; if(e.keyCode == S_KEY) this.save(); - if(e.keyCode == P_KEY) this.printPage(); + if(e.keyCode == P_KEY) printPage(); if(e.keyCode == P_KEY || e.keyCode == S_KEY){ e.stopPropagation(); e.preventDefault(); } }, - printPage : function(){ - 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 - let 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=''; - } - }, - handleSplitMove : function(){ this.editor.current.update(); }, @@ -204,7 +194,7 @@ const NewPage = createClass({ : this.renderSaveButton() } - + diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx index dccea796c..a8a52bf2a 100644 --- a/client/homebrew/pages/sharePage/sharePage.jsx +++ b/client/homebrew/pages/sharePage/sharePage.jsx @@ -9,11 +9,10 @@ const MetadataNav = require('../../navbar/metadata.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 { printPage } = require('../../../../shared/helpers.js'); const SharePage = createClass({ displayName : 'SharePage', @@ -35,23 +34,12 @@ const SharePage = createClass({ if(!(e.ctrlKey || e.metaKey)) return; const P_KEY = 80; if(e.keyCode == P_KEY){ - if(e.keyCode == P_KEY) this.printPage(); + if(e.keyCode == P_KEY) printPage(); e.stopPropagation(); e.preventDefault(); } }, - printPage : function(){ - 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 - let 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=''; - } - }, - processShareId : function() { return this.props.brew.googleId && !this.props.brew.stubbed ? this.props.brew.googleId + this.props.brew.shareId : @@ -83,7 +71,7 @@ const SharePage = createClass({ {this.props.brew.shareId && <> - + source diff --git a/shared/helpers.js b/shared/helpers.js index 42dd09e3f..680df94fe 100644 --- a/shared/helpers.js +++ b/shared/helpers.js @@ -17,6 +17,18 @@ const splitTextStyleAndMetadata = (brew)=>{ } }; -module.exports = { - splitTextStyleAndMetadata +const printPage = ()=>{ + 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 + let 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, + printPage };