From 7fc0cadb81b36c2e09ea846240b6bf6fcf28243e Mon Sep 17 00:00:00 2001
From: "G.Ambatte"
Date: Sun, 21 Jul 2024 23:11:21 +1200
Subject: [PATCH 01/26] Initial functionality pass
---
client/homebrew/brewRenderer/brewRenderer.jsx | 61 ++++++++++++++++++-
.../homebrew/brewRenderer/brewRenderer.less | 35 +++++++++--
2 files changed, 90 insertions(+), 6 deletions(-)
diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx
index 3c36244c1..5d48cc4e8 100644
--- a/client/homebrew/brewRenderer/brewRenderer.jsx
+++ b/client/homebrew/brewRenderer/brewRenderer.jsx
@@ -65,9 +65,11 @@ const BrewRenderer = (props)=>{
height : PAGE_HEIGHT,
isMounted : false,
visibility : 'hidden',
+ showHeaderNav : false
});
const mainRef = useRef(null);
+ const pagesRef = useRef(null);
if(props.renderer == 'legacy') {
rawPages = props.text.split('\\page');
@@ -188,6 +190,60 @@ const BrewRenderer = (props)=>{
document.dispatchEvent(new MouseEvent('click'));
};
+ const toggleHeaderNav = ()=>{
+ setState((prevState)=>({
+ ...prevState,
+ showHeaderNav : !prevState.showHeaderNav
+ }));
+ };
+
+ const renderHeaderNav = ()=>{
+ return <>
+
+ {state.showHeaderNav && renderHeaderLinks()}
+ >;
+ };
+
+ const renderHeaderLinks = ()=>{
+ if(!pagesRef.current) return;
+ const elements = pagesRef.current.querySelectorAll('[id]');
+ if(!elements) return;
+ const navList = [];
+
+ elements.forEach((el)=>{
+ if(el.className.match(/\bpage\b/)) {
+ navList.push({
+ depth : 0,
+ text : `Page ${el.id.slice(1)}`,
+ link : el.id
+ });
+ return;
+ }
+ if(el.localName.match(/^h[1-6]/)){
+ navList.push({
+ depth : el.localName[1],
+ text : el.innerText,
+ link : el.id
+ });
+ return;
+ }
+ navList.push({
+ depth : 7,
+ text : el.innerText,
+ link : el.id
+ });
+ });
+
+ return _.map(navList, (navItem)=>{
+ return
+ {`${'-'.repeat(navItem.depth)}${navItem.text}`}
+
;
+ });
+ };
+
const rendererPath = props.renderer == 'V3' ? 'V3' : 'Legacy';
const themePath = props.theme ?? '5ePHB';
const baseThemePath = Themes[rendererPath][themePath].baseTheme;
@@ -232,12 +288,15 @@ const BrewRenderer = (props)=>{
&&
<>
{renderStyle()}
-
+
+ {renderHeaderNav()}
+
{renderPageInfo()}
>
diff --git a/client/homebrew/brewRenderer/brewRenderer.less b/client/homebrew/brewRenderer/brewRenderer.less
index 28ea8005e..1482a09b4 100644
--- a/client/homebrew/brewRenderer/brewRenderer.less
+++ b/client/homebrew/brewRenderer/brewRenderer.less
@@ -31,12 +31,8 @@
visibility: hidden;
}
}
-
-
-
-
-
}
+
.pane { position : relative; }
.pageInfo {
position : absolute;
@@ -65,6 +61,32 @@
background-color : #333333;
}
+.headerNav {
+ position: fixed;
+ top: 0px;
+ left: 0px;
+ padding: 5px 10px;
+ background-color: #ccc;
+ border-radius: 5px;
+ max-height: 100vh;
+ overflow-y: auto;
+ .navIcon {
+ cursor: pointer;
+ }
+ p {
+ padding: 2px;
+ a {
+ color: inherit;
+ text-decoration: none;
+ cursor: pointer;
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+ }
+}
+
+
@media print {
.brewRenderer {
height: 100%;
@@ -76,4 +98,7 @@
}
}
}
+ .headerNav {
+ visibility: hidden;
+ }
}
\ No newline at end of file
From 17b081b18be4dfec488608ef42cb93754ebff7d4 Mon Sep 17 00:00:00 2001
From: "G.Ambatte"
Date: Mon, 22 Jul 2024 17:30:29 +1200
Subject: [PATCH 02/26] Added showHeaderNav prop to make nav menu conditional
---
client/homebrew/brewRenderer/brewRenderer.jsx | 11 ++++++++---
client/homebrew/pages/editPage/editPage.jsx | 1 +
client/homebrew/pages/sharePage/sharePage.jsx | 1 +
3 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx
index 5d48cc4e8..e18af0782 100644
--- a/client/homebrew/brewRenderer/brewRenderer.jsx
+++ b/client/homebrew/brewRenderer/brewRenderer.jsx
@@ -57,6 +57,7 @@ const BrewRenderer = (props)=>{
lang : '',
errors : [],
currentEditorPage : 0,
+ showHeaderNav : false,
...props
};
@@ -294,9 +295,13 @@ const BrewRenderer = (props)=>{
>
}
-
- {renderHeaderNav()}
-
+ {props.showHeaderNav ?
+
+ {renderHeaderNav()}
+
+ :
+ <>>
+ }
{renderPageInfo()}
>
diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx
index 48d0f3fe5..8473a63b3 100644
--- a/client/homebrew/pages/editPage/editPage.jsx
+++ b/client/homebrew/pages/editPage/editPage.jsx
@@ -416,6 +416,7 @@ const EditPage = createClass({
lang={this.state.brew.lang}
currentEditorPage={this.state.currentEditorPage}
allowPrint={true}
+ showHeaderNav={true}
/>
diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx
index 9695ee810..6c3c943b8 100644
--- a/client/homebrew/pages/sharePage/sharePage.jsx
+++ b/client/homebrew/pages/sharePage/sharePage.jsx
@@ -100,6 +100,7 @@ const SharePage = createClass({
renderer={this.props.brew.renderer}
theme={this.props.brew.theme}
allowPrint={true}
+ showHeaderNav={true}
/>
;
From c269d32247dc0a9f6dc473530b7aa45cedfa9d7d Mon Sep 17 00:00:00 2001
From: "G.Ambatte"
Date: Mon, 22 Jul 2024 18:45:36 +1200
Subject: [PATCH 03/26] Move headerNav to separate component
---
client/homebrew/brewRenderer/brewRenderer.jsx | 67 +----------------
.../homebrew/brewRenderer/brewRenderer.less | 25 -------
.../brewRenderer/headerNav/headerNav.jsx | 73 +++++++++++++++++++
.../brewRenderer/headerNav/headerNav.less | 30 ++++++++
4 files changed, 107 insertions(+), 88 deletions(-)
create mode 100644 client/homebrew/brewRenderer/headerNav/headerNav.jsx
create mode 100644 client/homebrew/brewRenderer/headerNav/headerNav.less
diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx
index e18af0782..9a55eb657 100644
--- a/client/homebrew/brewRenderer/brewRenderer.jsx
+++ b/client/homebrew/brewRenderer/brewRenderer.jsx
@@ -15,6 +15,8 @@ const Frame = require('react-frame-component').default;
const dedent = require('dedent-tabs').default;
const { printCurrentBrew } = require('../../../shared/helpers.js');
+import HeaderNav from './headerNav/headerNav.jsx';
+
const DOMPurify = require('dompurify');
const purifyConfig = { FORCE_BODY: true, SANITIZE_DOM: false };
@@ -65,8 +67,7 @@ const BrewRenderer = (props)=>{
viewablePageNumber : 0,
height : PAGE_HEIGHT,
isMounted : false,
- visibility : 'hidden',
- showHeaderNav : false
+ visibility : 'hidden'
});
const mainRef = useRef(null);
@@ -191,60 +192,6 @@ const BrewRenderer = (props)=>{
document.dispatchEvent(new MouseEvent('click'));
};
- const toggleHeaderNav = ()=>{
- setState((prevState)=>({
- ...prevState,
- showHeaderNav : !prevState.showHeaderNav
- }));
- };
-
- const renderHeaderNav = ()=>{
- return <>
-
- {state.showHeaderNav && renderHeaderLinks()}
- >;
- };
-
- const renderHeaderLinks = ()=>{
- if(!pagesRef.current) return;
- const elements = pagesRef.current.querySelectorAll('[id]');
- if(!elements) return;
- const navList = [];
-
- elements.forEach((el)=>{
- if(el.className.match(/\bpage\b/)) {
- navList.push({
- depth : 0,
- text : `Page ${el.id.slice(1)}`,
- link : el.id
- });
- return;
- }
- if(el.localName.match(/^h[1-6]/)){
- navList.push({
- depth : el.localName[1],
- text : el.innerText,
- link : el.id
- });
- return;
- }
- navList.push({
- depth : 7,
- text : el.innerText,
- link : el.id
- });
- });
-
- return _.map(navList, (navItem)=>{
- return
- {`${'-'.repeat(navItem.depth)}${navItem.text}`}
-
;
- });
- };
-
const rendererPath = props.renderer == 'V3' ? 'V3' : 'Legacy';
const themePath = props.theme ?? '5ePHB';
const baseThemePath = Themes[rendererPath][themePath].baseTheme;
@@ -295,13 +242,7 @@ const BrewRenderer = (props)=>{
>
}
- {props.showHeaderNav ?
-
- {renderHeaderNav()}
-
- :
- <>>
- }
+ {props.showHeaderNav ? : <>>}
{renderPageInfo()}
>
diff --git a/client/homebrew/brewRenderer/brewRenderer.less b/client/homebrew/brewRenderer/brewRenderer.less
index 1482a09b4..ad34c6221 100644
--- a/client/homebrew/brewRenderer/brewRenderer.less
+++ b/client/homebrew/brewRenderer/brewRenderer.less
@@ -61,31 +61,6 @@
background-color : #333333;
}
-.headerNav {
- position: fixed;
- top: 0px;
- left: 0px;
- padding: 5px 10px;
- background-color: #ccc;
- border-radius: 5px;
- max-height: 100vh;
- overflow-y: auto;
- .navIcon {
- cursor: pointer;
- }
- p {
- padding: 2px;
- a {
- color: inherit;
- text-decoration: none;
- cursor: pointer;
- &:hover {
- text-decoration: underline;
- }
- }
- }
-}
-
@media print {
.brewRenderer {
diff --git a/client/homebrew/brewRenderer/headerNav/headerNav.jsx b/client/homebrew/brewRenderer/headerNav/headerNav.jsx
new file mode 100644
index 000000000..360a77dfd
--- /dev/null
+++ b/client/homebrew/brewRenderer/headerNav/headerNav.jsx
@@ -0,0 +1,73 @@
+require('./headerNav.less');
+
+import * as React from 'react';
+import * as _ from 'lodash';
+
+
+const HeaderNav = React.forwardRef(({}, pagesRef)=>{
+
+ const [state, setState] = React.useState({
+ showHeaderNav : false
+ });
+
+ const toggleHeaderNav = ()=>{
+ setState((prevState)=>({
+ ...prevState,
+ showHeaderNav : !prevState.showHeaderNav
+ }));
+ };
+
+ const renderHeaderLinks = ()=>{
+ if(!pagesRef.current) return;
+ const elements = pagesRef.current.querySelectorAll('[id]');
+ if(!elements) return;
+ const navList = [];
+
+ elements.forEach((el)=>{
+ if(el.className.match(/\bpage\b/)) {
+ navList.push({
+ depth : 0,
+ text : `Page ${el.id.slice(1)}`,
+ link : el.id
+ });
+ return;
+ }
+ if(el.localName.match(/^h[1-6]/)){
+ navList.push({
+ depth : el.localName[1],
+ text : el.innerText,
+ link : el.id
+ });
+ return;
+ }
+ navList.push({
+ depth : 7,
+ text : el.innerText,
+ link : el.id
+ });
+ });
+
+ return _.map(navList, (navItem, index)=>{
+ return ;
+ });
+
+ };
+
+ return
+
+ {state.showHeaderNav && renderHeaderLinks()}
+
;
+}
+);
+
+const HeaderNavItem = ({ index, link, text, depth })=>{
+ return
+ {`${'-'.repeat(depth)}${text}`}
+
;
+};
+
+export default HeaderNav;
\ No newline at end of file
diff --git a/client/homebrew/brewRenderer/headerNav/headerNav.less b/client/homebrew/brewRenderer/headerNav/headerNav.less
new file mode 100644
index 000000000..381d1aa53
--- /dev/null
+++ b/client/homebrew/brewRenderer/headerNav/headerNav.less
@@ -0,0 +1,30 @@
+.headerNav {
+ position: fixed;
+ top: 0px;
+ left: 0px;
+ padding: 5px 10px;
+ background-color: #ccc;
+ border-radius: 5px;
+ max-height: 100vh;
+ overflow-y: auto;
+ &.active {
+ padding-bottom: 10px;
+ .navIcon {
+ padding-bottom: 10px;
+ }
+ }
+ .navIcon {
+ cursor: pointer;
+ }
+ p {
+ padding: 2px;
+ a {
+ color: inherit;
+ text-decoration: none;
+ cursor: pointer;
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+ }
+}
\ No newline at end of file
From effeffd9068b670080b9b7825094ee53bb10d5df Mon Sep 17 00:00:00 2001
From: "G.Ambatte"
Date: Mon, 22 Jul 2024 19:07:58 +1200
Subject: [PATCH 04/26] Add styling to page links
---
.../brewRenderer/headerNav/headerNav.jsx | 17 ++++++++++-------
.../brewRenderer/headerNav/headerNav.less | 3 +++
2 files changed, 13 insertions(+), 7 deletions(-)
diff --git a/client/homebrew/brewRenderer/headerNav/headerNav.jsx b/client/homebrew/brewRenderer/headerNav/headerNav.jsx
index 360a77dfd..40f6cf4af 100644
--- a/client/homebrew/brewRenderer/headerNav/headerNav.jsx
+++ b/client/homebrew/brewRenderer/headerNav/headerNav.jsx
@@ -26,9 +26,10 @@ const HeaderNav = React.forwardRef(({}, pagesRef)=>{
elements.forEach((el)=>{
if(el.className.match(/\bpage\b/)) {
navList.push({
- depth : 0,
- text : `Page ${el.id.slice(1)}`,
- link : el.id
+ depth : 0,
+ text : `Page ${el.id.slice(1)}`,
+ link : el.id,
+ className : 'pageLink'
});
return;
}
@@ -48,7 +49,7 @@ const HeaderNav = React.forwardRef(({}, pagesRef)=>{
});
return _.map(navList, (navItem, index)=>{
- return ;
+ return ;
});
};
@@ -64,9 +65,11 @@ const HeaderNav = React.forwardRef(({}, pagesRef)=>{
}
);
-const HeaderNavItem = ({ index, link, text, depth })=>{
- return
- {`${'-'.repeat(depth)}${text}`}
+const HeaderNavItem = ({ link, text, depth, className })=>{
+ return
+
+ {`${'-'.repeat(depth)}${text}`}
+
;
};
diff --git a/client/homebrew/brewRenderer/headerNav/headerNav.less b/client/homebrew/brewRenderer/headerNav/headerNav.less
index 381d1aa53..588687d88 100644
--- a/client/homebrew/brewRenderer/headerNav/headerNav.less
+++ b/client/homebrew/brewRenderer/headerNav/headerNav.less
@@ -25,6 +25,9 @@
&:hover {
text-decoration: underline;
}
+ &.pageLink {
+ font-weight: 900;
+ }
}
}
}
\ No newline at end of file
From a59135430cd02f791f7deef5bc046c56a12494c0 Mon Sep 17 00:00:00 2001
From: "G.Ambatte"
Date: Mon, 26 Aug 2024 15:30:58 +1200
Subject: [PATCH 05/26] Fix missing comma
---
client/homebrew/brewRenderer/brewRenderer.jsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx
index c891b07d1..a7b93522d 100644
--- a/client/homebrew/brewRenderer/brewRenderer.jsx
+++ b/client/homebrew/brewRenderer/brewRenderer.jsx
@@ -67,7 +67,7 @@ const BrewRenderer = (props)=>{
viewablePageNumber : 0,
height : PAGE_HEIGHT,
isMounted : false,
- visibility : 'hidden'
+ visibility : 'hidden',
zoom : 100,
currentPageNumber : 1,
});
From 380c1444ca71ac3b48dd67e8e6498e325e469ad8 Mon Sep 17 00:00:00 2001
From: "G.Ambatte"
Date: Mon, 26 Aug 2024 16:01:12 +1200
Subject: [PATCH 06/26] Tweak position to account for new toolbar
---
client/homebrew/brewRenderer/headerNav/headerNav.less | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/client/homebrew/brewRenderer/headerNav/headerNav.less b/client/homebrew/brewRenderer/headerNav/headerNav.less
index 588687d88..c03887413 100644
--- a/client/homebrew/brewRenderer/headerNav/headerNav.less
+++ b/client/homebrew/brewRenderer/headerNav/headerNav.less
@@ -1,6 +1,6 @@
.headerNav {
position: fixed;
- top: 0px;
+ top: 30px;
left: 0px;
padding: 5px 10px;
background-color: #ccc;
From e57b88a019c98acb14b166515bfb62feacdc64ec Mon Sep 17 00:00:00 2001
From: "G.Ambatte"
Date: Mon, 26 Aug 2024 16:06:11 +1200
Subject: [PATCH 07/26] Limit max width of header navigation
---
client/homebrew/brewRenderer/headerNav/headerNav.less | 1 +
1 file changed, 1 insertion(+)
diff --git a/client/homebrew/brewRenderer/headerNav/headerNav.less b/client/homebrew/brewRenderer/headerNav/headerNav.less
index c03887413..371081cbd 100644
--- a/client/homebrew/brewRenderer/headerNav/headerNav.less
+++ b/client/homebrew/brewRenderer/headerNav/headerNav.less
@@ -6,6 +6,7 @@
background-color: #ccc;
border-radius: 5px;
max-height: 100vh;
+ max-width: 40vw;
overflow-y: auto;
&.active {
padding-bottom: 10px;
From 708cbdc9e50c5df32ea717c0f9eec25a61dd8e71 Mon Sep 17 00:00:00 2001
From: "G.Ambatte"
Date: Mon, 26 Aug 2024 21:26:30 +1200
Subject: [PATCH 08/26] Change to list items
---
client/homebrew/brewRenderer/headerNav/headerNav.jsx | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/client/homebrew/brewRenderer/headerNav/headerNav.jsx b/client/homebrew/brewRenderer/headerNav/headerNav.jsx
index 40f6cf4af..37eb0185c 100644
--- a/client/homebrew/brewRenderer/headerNav/headerNav.jsx
+++ b/client/homebrew/brewRenderer/headerNav/headerNav.jsx
@@ -66,11 +66,11 @@ const HeaderNav = React.forwardRef(({}, pagesRef)=>{
);
const HeaderNavItem = ({ link, text, depth, className })=>{
- return
+ return
{`${'-'.repeat(depth)}${text}`}
-
;
+ ;
};
export default HeaderNav;
\ No newline at end of file
From a1c275479febb902f6f6f0db09c06d50d1ee25bc Mon Sep 17 00:00:00 2001
From: "G.Ambatte"
Date: Mon, 26 Aug 2024 21:27:09 +1200
Subject: [PATCH 09/26] Change toolbar to relative positioning
---
client/homebrew/brewRenderer/brewRenderer.less | 1 -
client/homebrew/brewRenderer/toolBar/toolBar.less | 2 +-
2 files changed, 1 insertion(+), 2 deletions(-)
diff --git a/client/homebrew/brewRenderer/brewRenderer.less b/client/homebrew/brewRenderer/brewRenderer.less
index 04e70f09b..56447d63b 100644
--- a/client/homebrew/brewRenderer/brewRenderer.less
+++ b/client/homebrew/brewRenderer/brewRenderer.less
@@ -1,7 +1,6 @@
@import (multiple, less) 'shared/naturalcrit/styles/reset.less';
.brewRenderer {
- padding-top : 30px;
overflow-y : scroll;
will-change : transform;
:where(.pages) {
diff --git a/client/homebrew/brewRenderer/toolBar/toolBar.less b/client/homebrew/brewRenderer/toolBar/toolBar.less
index 33a6836ef..93b2bb7f6 100644
--- a/client/homebrew/brewRenderer/toolBar/toolBar.less
+++ b/client/homebrew/brewRenderer/toolBar/toolBar.less
@@ -1,5 +1,5 @@
.toolBar {
- position : absolute;
+ position : relative;
z-index : 1;
box-sizing : border-box;
display : flex;
From ba4c9745a26004b26ed47647e9042ad3022ef041 Mon Sep 17 00:00:00 2001
From: "G.Ambatte"
Date: Mon, 26 Aug 2024 21:27:41 +1200
Subject: [PATCH 10/26] Tweak styling for recent changes
---
client/homebrew/brewRenderer/headerNav/headerNav.less | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/client/homebrew/brewRenderer/headerNav/headerNav.less b/client/homebrew/brewRenderer/headerNav/headerNav.less
index 371081cbd..c9bc7918d 100644
--- a/client/homebrew/brewRenderer/headerNav/headerNav.less
+++ b/client/homebrew/brewRenderer/headerNav/headerNav.less
@@ -1,6 +1,6 @@
.headerNav {
position: fixed;
- top: 30px;
+ top: 0px;
left: 0px;
padding: 5px 10px;
background-color: #ccc;
@@ -17,7 +17,9 @@
.navIcon {
cursor: pointer;
}
- p {
+ li {
+ font-family: 'Open Sans';
+ font-size: 12px;
padding: 2px;
a {
color: inherit;
From 30dac3a73c8500bcd5cd31451aea9fbe39e9e534 Mon Sep 17 00:00:00 2001
From: "G.Ambatte"
Date: Mon, 26 Aug 2024 21:53:15 +1200
Subject: [PATCH 11/26] Revert toolBar.less change
---
client/homebrew/brewRenderer/toolBar/toolBar.less | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/client/homebrew/brewRenderer/toolBar/toolBar.less b/client/homebrew/brewRenderer/toolBar/toolBar.less
index 93b2bb7f6..33a6836ef 100644
--- a/client/homebrew/brewRenderer/toolBar/toolBar.less
+++ b/client/homebrew/brewRenderer/toolBar/toolBar.less
@@ -1,5 +1,5 @@
.toolBar {
- position : relative;
+ position : absolute;
z-index : 1;
box-sizing : border-box;
display : flex;
From 4a4a14b2abc1bc7d863af8bbe99d0cdb8417f8bb Mon Sep 17 00:00:00 2001
From: "G.Ambatte"
Date: Fri, 3 Jan 2025 11:37:51 +1300
Subject: [PATCH 12/26] Add ref correctly, fix typo
---
client/homebrew/brewRenderer/brewRenderer.jsx | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx
index efd92167b..aa684b77d 100644
--- a/client/homebrew/brewRenderer/brewRenderer.jsx
+++ b/client/homebrew/brewRenderer/brewRenderer.jsx
@@ -54,7 +54,8 @@ const BrewPage = (props)=>{
else
props.onVisibilityChange(props.index + 1, false, false);
}
- )},
+ );
+ },
{ threshold: .3, rootMargin: '0px 0px 0px 0px' } // detect when >30% of page is within bounds.
);
@@ -65,7 +66,8 @@ const BrewPage = (props)=>{
if(entry.isIntersecting)
props.onVisibilityChange(props.index + 1, true, true); // Set this page as the center page
}
- )},
+ );
+ },
{ threshold: 0, rootMargin: '-50% 0px -50% 0px' } // Detect when the page is at the center
);
@@ -101,7 +103,7 @@ const BrewRenderer = (props)=>{
currentBrewRendererPageNum : 1,
themeBundle : {},
onPageChange : ()=>{},
- showHeavderNav : false,
+ showHeaderNav : false,
...props
};
@@ -311,7 +313,7 @@ const BrewRenderer = (props)=>{
&&
<>
{renderedStyle}
-
+
{renderedPages}
>
From bbf6c3589ae97a954eab96a37cac7818d10cc029 Mon Sep 17 00:00:00 2001
From: "G.Ambatte"
Date: Fri, 3 Jan 2025 11:53:29 +1300
Subject: [PATCH 13/26] Switch from innerText to textContent
---
client/homebrew/brewRenderer/headerNav/headerNav.jsx | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/client/homebrew/brewRenderer/headerNav/headerNav.jsx b/client/homebrew/brewRenderer/headerNav/headerNav.jsx
index 37eb0185c..20382520d 100644
--- a/client/homebrew/brewRenderer/headerNav/headerNav.jsx
+++ b/client/homebrew/brewRenderer/headerNav/headerNav.jsx
@@ -36,14 +36,14 @@ const HeaderNav = React.forwardRef(({}, pagesRef)=>{
if(el.localName.match(/^h[1-6]/)){
navList.push({
depth : el.localName[1],
- text : el.innerText,
+ text : el.textContent,
link : el.id
});
return;
}
navList.push({
depth : 7,
- text : el.innerText,
+ text : el.textContent,
link : el.id
});
});
From a95eef05450bea8797aeca7339bd2a56b4bb32d4 Mon Sep 17 00:00:00 2001
From: "G.Ambatte"
Date: Fri, 3 Jan 2025 13:34:52 +1300
Subject: [PATCH 14/26] Add maximum length, use span for spacing
---
.../brewRenderer/headerNav/headerNav.jsx | 17 +++++++++++---
.../brewRenderer/headerNav/headerNav.less | 23 +++++++++----------
2 files changed, 25 insertions(+), 15 deletions(-)
diff --git a/client/homebrew/brewRenderer/headerNav/headerNav.jsx b/client/homebrew/brewRenderer/headerNav/headerNav.jsx
index 20382520d..19ee0b1d6 100644
--- a/client/homebrew/brewRenderer/headerNav/headerNav.jsx
+++ b/client/homebrew/brewRenderer/headerNav/headerNav.jsx
@@ -4,6 +4,8 @@ import * as React from 'react';
import * as _ from 'lodash';
+const MAX_TEXT_LENGTH = 40;
+
const HeaderNav = React.forwardRef(({}, pagesRef)=>{
const [state, setState] = React.useState({
@@ -66,11 +68,20 @@ const HeaderNav = React.forwardRef(({}, pagesRef)=>{
);
const HeaderNavItem = ({ link, text, depth, className })=>{
- return
+
+ const trimString = (text, prefixLength = 0)=>{
+ const maxLength = MAX_TEXT_LENGTH - prefixLength;
+ if(text.trim().length > maxLength){
+ return `${text.trim().slice(0, maxLength)}...`;
+ }
+ return text.trim();
+ };
+
+ return
- {`${'-'.repeat(depth)}${text}`}
+ {trimString(text, depth)}
-
;
+ ;
};
export default HeaderNav;
\ No newline at end of file
diff --git a/client/homebrew/brewRenderer/headerNav/headerNav.less b/client/homebrew/brewRenderer/headerNav/headerNav.less
index c9bc7918d..d58c4b093 100644
--- a/client/homebrew/brewRenderer/headerNav/headerNav.less
+++ b/client/homebrew/brewRenderer/headerNav/headerNav.less
@@ -1,6 +1,6 @@
.headerNav {
position: fixed;
- top: 0px;
+ top: 30px;
left: 0px;
padding: 5px 10px;
background-color: #ccc;
@@ -17,20 +17,19 @@
.navIcon {
cursor: pointer;
}
- li {
+ a {
font-family: 'Open Sans';
font-size: 12px;
padding: 2px;
- a {
- color: inherit;
- text-decoration: none;
- cursor: pointer;
- &:hover {
- text-decoration: underline;
- }
- &.pageLink {
- font-weight: 900;
- }
+ color: inherit;
+ text-decoration: none;
+ cursor: pointer;
+ &:hover {
+ text-decoration: underline;
}
+ &.pageLink {
+ font-weight: 900;
+ }
+
}
}
\ No newline at end of file
From 34f104b406e2b39b250c11d68109e473fa8a484d Mon Sep 17 00:00:00 2001
From: "G.Ambatte"
Date: Mon, 6 Jan 2025 22:29:22 +1300
Subject: [PATCH 15/26] Remove showHeaderNav prop from Edit and Share page
BrewRenderer
---
client/homebrew/pages/editPage/editPage.jsx | 69 +++++++++----------
client/homebrew/pages/sharePage/sharePage.jsx | 1 -
2 files changed, 34 insertions(+), 36 deletions(-)
diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx
index 7e29ac92b..ffb6a6b40 100644
--- a/client/homebrew/pages/editPage/editPage.jsx
+++ b/client/homebrew/pages/editPage/editPage.jsx
@@ -432,41 +432,40 @@ const EditPage = createClass({
{this.renderNavbar()}
{this.props.brew.lock && }
- ;
}
diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx
index db787c665..15eae54f7 100644
--- a/client/homebrew/pages/sharePage/sharePage.jsx
+++ b/client/homebrew/pages/sharePage/sharePage.jsx
@@ -116,7 +116,6 @@ const SharePage = (props)=>{
onPageChange={handleBrewRendererPageChange}
currentBrewRendererPageNum={state.currentBrewRendererPageNum}
allowPrint={true}
- showHeaderNav={true}
/>
From cf16566da8a0f1f80410258e76c36823a45815bd Mon Sep 17 00:00:00 2001
From: "G.Ambatte"
Date: Mon, 6 Jan 2025 22:30:03 +1300
Subject: [PATCH 16/26] Move Header Navigation button to Toolbar
---
client/homebrew/brewRenderer/brewRenderer.jsx | 7 ++++---
.../brewRenderer/headerNav/headerNav.jsx | 20 ++-----------------
.../homebrew/brewRenderer/toolBar/toolBar.jsx | 9 ++++++---
.../brewRenderer/toolBar/toolBar.less | 6 ++++--
4 files changed, 16 insertions(+), 26 deletions(-)
diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx
index aa684b77d..7d9648ead 100644
--- a/client/homebrew/brewRenderer/brewRenderer.jsx
+++ b/client/homebrew/brewRenderer/brewRenderer.jsx
@@ -103,7 +103,6 @@ const BrewRenderer = (props)=>{
currentBrewRendererPageNum : 1,
themeBundle : {},
onPageChange : ()=>{},
- showHeaderNav : false,
...props
};
@@ -121,6 +120,8 @@ const BrewRenderer = (props)=>{
pageShadows : true
});
+ const [headerState, setHeaderState] = useState(false);
+
const mainRef = useRef(null);
const pagesRef = useRef(null);
@@ -294,7 +295,7 @@ const BrewRenderer = (props)=>{
- 0 ? state.visiblePages : [state.centerPage]} totalPages={rawPages.length}/>
+ 0 ? state.visiblePages : [state.centerPage]} totalPages={rawPages.length} headerState={headerState} setHeaderState={setHeaderState}/>
{/*render in iFrame so broken code doesn't crash the site.*/}
{
>
}
- {props.showHeaderNav ? : <>>}
+ {headerState ? : <>>}
>
);
diff --git a/client/homebrew/brewRenderer/headerNav/headerNav.jsx b/client/homebrew/brewRenderer/headerNav/headerNav.jsx
index 19ee0b1d6..50c2ba86b 100644
--- a/client/homebrew/brewRenderer/headerNav/headerNav.jsx
+++ b/client/homebrew/brewRenderer/headerNav/headerNav.jsx
@@ -8,17 +8,6 @@ const MAX_TEXT_LENGTH = 40;
const HeaderNav = React.forwardRef(({}, pagesRef)=>{
- const [state, setState] = React.useState({
- showHeaderNav : false
- });
-
- const toggleHeaderNav = ()=>{
- setState((prevState)=>({
- ...prevState,
- showHeaderNav : !prevState.showHeaderNav
- }));
- };
-
const renderHeaderLinks = ()=>{
if(!pagesRef.current) return;
const elements = pagesRef.current.querySelectorAll('[id]');
@@ -56,13 +45,8 @@ const HeaderNav = React.forwardRef(({}, pagesRef)=>{
};
- return
-
- {state.showHeaderNav && renderHeaderLinks()}
+ return
+ {renderHeaderLinks()}
;
}
);
diff --git a/client/homebrew/brewRenderer/toolBar/toolBar.jsx b/client/homebrew/brewRenderer/toolBar/toolBar.jsx
index ce60971aa..f11d1f127 100644
--- a/client/homebrew/brewRenderer/toolBar/toolBar.jsx
+++ b/client/homebrew/brewRenderer/toolBar/toolBar.jsx
@@ -9,7 +9,7 @@ import { Anchored, AnchoredBox, AnchoredTrigger } from '../../../components/Anch
const MAX_ZOOM = 300;
const MIN_ZOOM = 10;
-const ToolBar = ({ displayOptions, onDisplayOptionsChange, visiblePages, totalPages })=>{
+const ToolBar = ({ displayOptions, onDisplayOptionsChange, visiblePages, totalPages, headerState, setHeaderState })=>{
const [pageNum, setPageNum] = useState(1);
const [toolsVisible, setToolsVisible] = useState(true);
@@ -62,7 +62,7 @@ const ToolBar = ({ displayOptions, onDisplayOptionsChange, visiblePages, totalPa
// find the page with the largest single dim (height or width) so that zoom can be adapted to fit it.
if(displayOptions.spread === 'facing')
minDimRatio = [...pages].reduce((minRatio, page)=>Math.min(minRatio, iframeWidth / page.offsetWidth / 2), Infinity); // if 'facing' spread, fit two pages in view
- else
+ else
minDimRatio = [...pages].reduce((minRatio, page)=>Math.min(minRatio, iframeWidth / page.offsetWidth, iframeHeight / page.offsetHeight), Infinity);
desiredZoom = minDimRatio * 100;
@@ -76,7 +76,10 @@ const ToolBar = ({ displayOptions, onDisplayOptionsChange, visiblePages, totalPa
return (