diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index c6f415a87..f3b284a93 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -80,8 +80,6 @@ const BrewRenderer = (props)=>{ return ()=>{window.removeEventListener('resize', updateSize);}; }, []); - - const updateSize = ()=>{ setState((prevState)=>({ ...prevState, @@ -89,14 +87,12 @@ const BrewRenderer = (props)=>{ })); }; - const getCurrentPage = (e) => { - const target = e.target; - const { scrollTop, clientHeight, scrollHeight } = target; + const getCurrentPage = (e)=>{ + const { scrollTop, clientHeight, scrollHeight } = e.target; const totalScrollableHeight = scrollHeight - clientHeight; - const currentPageNumber = Math.ceil((scrollTop / totalScrollableHeight) * rawPages.length); - setState((prevState) => ({ + setState((prevState)=>({ ...prevState, currentPageNumber : currentPageNumber || 1 })); @@ -185,14 +181,13 @@ const BrewRenderer = (props)=>{ }; //Toolbar settings: - const handleZoom = (newZoom) => { + const handleZoom = (newZoom)=>{ setState((prevState)=>({ ...prevState, zoom : newZoom })); }; - return ( <> {/*render dummy page while iFrame is mounting.*/} @@ -212,7 +207,6 @@ const BrewRenderer = (props)=>{ - {/*render in iFrame so broken code doesn't crash the site.*/} :where(.page) { width : 215.9mm; height : 279.4mm; @@ -17,20 +15,16 @@ box-shadow : 1px 4px 14px #000000; } } - &::-webkit-scrollbar { width : 20px; - &:horizontal { width : auto; height : 20px; } - &-thumb { background : linear-gradient(90deg, #D3C1AF 15px, #00000000 15px); &:horizontal { background : linear-gradient(0deg, #D3C1AF 15px, #00000000 15px); } } - &-corner { visibility : hidden; } } } diff --git a/client/homebrew/brewRenderer/toolBar/toolBar.jsx b/client/homebrew/brewRenderer/toolBar/toolBar.jsx index 601bff259..ad9b99f1f 100644 --- a/client/homebrew/brewRenderer/toolBar/toolBar.jsx +++ b/client/homebrew/brewRenderer/toolBar/toolBar.jsx @@ -11,7 +11,7 @@ const MIN_ZOOM = 10; const ToolBar = ({ onZoomChange, currentPage, onPageChange, totalPages })=>{ const [zoomLevel, setZoomLevel] = useState(100); - const [pageNum, setPageNum] = useState(currentPage); + const [pageNum, setPageNum] = useState(currentPage); useEffect(()=>{ onZoomChange(zoomLevel); @@ -22,30 +22,20 @@ const ToolBar = ({ onZoomChange, currentPage, onPageChange, totalPages })=>{ }, [currentPage]); const handleZoomButton = (delta)=>{ - const newZoomLevel = _.round(_.clamp(zoomLevel + delta, MIN_ZOOM, MAX_ZOOM)); - setZoomLevel(newZoomLevel); + setZoomLevel(_.round(_.clamp(zoomLevel + delta, MIN_ZOOM, MAX_ZOOM))); }; - const handlePageChange = (page)=>{ - const regex = /[0-9]/; - if(regex.test(page)){ - const num = parseInt(page); // input type is 'text', so `page` comes in as a string, not number. - setPageNum(num) - } else { - return; - } + const handlePageInput = (pageInput)=>{ + if(/[0-9]/.test(pageInput)) + setPageNum(parseInt(pageInput)); // input type is 'text', so `page` comes in as a string, not number. }; const scrollToPage = (pageNumber)=>{ pageNumber = _.clamp(pageNumber, 1, totalPages); const iframe = document.getElementById('BrewRenderer'); - if(iframe && iframe.contentWindow) { - const brewRenderer = iframe.contentWindow.document.querySelector('.brewRenderer'); - if(brewRenderer) { - const pages = brewRenderer.querySelectorAll('.page'); - pages[pageNumber - 1]?.scrollIntoView({ block: 'start' }); - } - } + const brewRenderer = iframe?.contentWindow?.document.querySelector('.brewRenderer'); + const page = brewRenderer?.querySelector(`#p${pageNumber}`); + page?.scrollIntoView({ block: 'start' }); setPageNum(pageNumber); }; @@ -94,6 +84,7 @@ const ToolBar = ({ onZoomChange, currentPage, onPageChange, totalPages })=>{ return (
+ {/*v=====----------------------< Zoom Controls >---------------------=====v*/}
+ {/*v=====----------------------< Page Controls >---------------------=====v*/}
-
- ); }; diff --git a/client/homebrew/brewRenderer/toolBar/toolBar.less b/client/homebrew/brewRenderer/toolBar/toolBar.less index 21c741bbd..33a6836ef 100644 --- a/client/homebrew/brewRenderer/toolBar/toolBar.less +++ b/client/homebrew/brewRenderer/toolBar/toolBar.less @@ -38,7 +38,7 @@ border : 1px solid gray; &:focus { outline : 1px solid #D3D3D3; } - // `.range-input` if generic to all range inputs, or `#zoom-input` if only for zoom slider + // `.range-input` if generic to all range inputs, or `#zoom-slider` if only for zoom slider &.range-input { padding : 2px 0; color : #D3D3D3; @@ -73,12 +73,9 @@ width : 4ch; margin-right : 1ch; text-align : center; - } - } - button { box-sizing : content-box; display : flex; @@ -91,11 +88,8 @@ font-weight : unset; color : inherit; background-color : unset; - &:hover { background-color : #444444; } - &:focus { outline : 1px solid #D3D3D3; } - &:disabled { color : #777777; background-color : unset !important; diff --git a/shared/helpers.js b/shared/helpers.js index da76b3d23..ac684b06f 100644 --- a/shared/helpers.js +++ b/shared/helpers.js @@ -28,6 +28,7 @@ const printCurrentBrew = ()=>{ 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=''; }