From 1add97b1b2640d99f29a5a9fc20df9098a097c57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Fri, 31 May 2024 16:38:08 +0200 Subject: [PATCH 01/41] scrolls to page 100 ms after page load --- client/homebrew/brewRenderer/brewRenderer.jsx | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index 6a4040b4d..e3742a051 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -79,6 +79,82 @@ const BrewRenderer = (props)=>{ return ()=>{window.removeEventListener('resize', updateSize);}; }, []); + + useEffect(() => { + // Extract element ID from the URL + const urlParams = new URLSearchParams(window.location.search); + const elementId = urlParams.get('elementId'); // Assume the URL is like ?elementId=yourElementId + + if (elementId) { + const iframe = document.getElementById('BrewRenderer'); + getPageContainingElement(iframe, elementId) + .then(pageNumber => { + if (pageNumber !== -1) { + scrollToPage(iframe, pageNumber); + } + }) + .catch(error => { + console.error('Error:', error); + }); + } + }, []); + + + const scrollToPage = (iframe, pageNumber) => { + if (iframe && iframe.contentWindow) { + const brewRenderer = iframe.contentWindow.document.querySelector('.brewRenderer'); + if (brewRenderer) { + const pages = brewRenderer.querySelectorAll('.page'); + if (pages && pages[pageNumber]) { + pages[pageNumber].scrollIntoView({ behavior: 'smooth', block: 'start' }); + } + } + } + }; + + const getPageContainingElement = (iframe, elementId) => { + return new Promise((resolve, reject) => { + if (!iframe || !iframe.contentWindow) { + console.log("iframe doesn't exist or content window is not accessible."); + reject(new Error("iframe doesn't exist or content window is not accessible.")); + return; + } + + iframe.addEventListener('load', () => { + console.log('Iframe has finished loading'); + + const brewRenderer = iframe.contentWindow.document.querySelector('.brewRenderer'); + console.log('brewRenderer:', brewRenderer); + if (!brewRenderer) { + console.log("brewRenderer doesn't exist"); + reject(new Error("brewRenderer doesn't exist")); + return; + } + + setTimeout(() => { + const pages = brewRenderer.querySelectorAll('.page'); + console.log('Number of pages found:', pages.length); + + for (let i = 0; i < pages.length; i++) { + if (pages[i].querySelector(`#${elementId}`)) { + console.log('Page containing element found:', i); + resolve(i); + return; + } else { + console.log('Page containing element not found:', i); + } + } + + console.log('Element with ID not found in any page.'); + resolve(-1); + }, 100); // Adjust delay as needed + }); + }); + }; + + + + const updateSize = ()=>{ setState((prevState)=>({ ...prevState, From f9352a94c65c9e8aeecad786bf31cbff79c163c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Fri, 31 May 2024 16:47:17 +0200 Subject: [PATCH 02/41] "Refactor BrewRenderer: simplify URL param extraction, remove iframe existence checks, and update scrollIntoView behavior" --- client/homebrew/brewRenderer/brewRenderer.jsx | 21 ++----------------- 1 file changed, 2 insertions(+), 19 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index e3742a051..e01b2828f 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -81,9 +81,7 @@ const BrewRenderer = (props)=>{ useEffect(() => { - // Extract element ID from the URL - const urlParams = new URLSearchParams(window.location.search); - const elementId = urlParams.get('elementId'); // Assume the URL is like ?elementId=yourElementId + const elementId = window.location.hash.slice(1); // Remove the leading '#' if (elementId) { const iframe = document.getElementById('BrewRenderer'); @@ -106,7 +104,7 @@ const BrewRenderer = (props)=>{ if (brewRenderer) { const pages = brewRenderer.querySelectorAll('.page'); if (pages && pages[pageNumber]) { - pages[pageNumber].scrollIntoView({ behavior: 'smooth', block: 'start' }); + pages[pageNumber].scrollIntoView({ block: 'start' }); } } } @@ -114,22 +112,10 @@ const BrewRenderer = (props)=>{ const getPageContainingElement = (iframe, elementId) => { return new Promise((resolve, reject) => { - if (!iframe || !iframe.contentWindow) { - console.log("iframe doesn't exist or content window is not accessible."); - reject(new Error("iframe doesn't exist or content window is not accessible.")); - return; - } - iframe.addEventListener('load', () => { - console.log('Iframe has finished loading'); const brewRenderer = iframe.contentWindow.document.querySelector('.brewRenderer'); console.log('brewRenderer:', brewRenderer); - if (!brewRenderer) { - console.log("brewRenderer doesn't exist"); - reject(new Error("brewRenderer doesn't exist")); - return; - } setTimeout(() => { const pages = brewRenderer.querySelectorAll('.page'); @@ -137,11 +123,8 @@ const BrewRenderer = (props)=>{ for (let i = 0; i < pages.length; i++) { if (pages[i].querySelector(`#${elementId}`)) { - console.log('Page containing element found:', i); resolve(i); return; - } else { - console.log('Page containing element not found:', i); } } From 3cca38302a6e4dbde3434277606fa3f1ffdd9b45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Fri, 31 May 2024 17:00:03 +0200 Subject: [PATCH 03/41] "Refactor BrewRenderer component: removed unnecessary code, reorganized useEffect hooks, and simplified getPageContainingElement function." --- client/homebrew/brewRenderer/brewRenderer.jsx | 101 ++++++++++-------- 1 file changed, 54 insertions(+), 47 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index e01b2828f..705aab64d 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -43,7 +43,6 @@ const BrewPage = (props)=>{ ; }; - //v=====--------------------< Brew Renderer Component >-------------------=====v// const renderedPages = []; let rawPages = []; @@ -75,27 +74,46 @@ const BrewRenderer = (props)=>{ rawPages = props.text.split(/^\\page$/gm); } - useEffect(()=>{ // Unmounting steps - return ()=>{window.removeEventListener('resize', updateSize);}; - }, []); - - useEffect(() => { - const elementId = window.location.hash.slice(1); // Remove the leading '#' - - if (elementId) { - const iframe = document.getElementById('BrewRenderer'); - getPageContainingElement(iframe, elementId) - .then(pageNumber => { - if (pageNumber !== -1) { - scrollToPage(iframe, pageNumber); - } - }) - .catch(error => { - console.error('Error:', error); - }); - } - }, []); + const locationHash = window.location.hash; + const iframe = document.getElementById('BrewRenderer'); + + // Regular expression to match page IDs like '#p1' + const pageIdRegex = /^#p\d+$/; + iframe.addEventListener('load', () => { + setTimeout(() => { + if (pageIdRegex.test(locationHash)) { + // Extract page number from the ID + const pageNumber = parseInt(locationHash.slice(2)); + console.log('scrolling to page ', pageNumber); + if (!isNaN(pageNumber)) { + scrollToPage(iframe, pageNumber); + } else { + console.error('Invalid page ID:', locationHash); + } + } else { + // Treat it as an element ID + const elementId = locationHash.slice(1); // Remove the leading '#' + if (elementId) { + getPageContainingElement(iframe, elementId) + .then((pageNumber) => { + if (pageNumber !== -1) { + scrollToPage(iframe, pageNumber); + } + }) + .catch((error) => { + console.error('Error:', error); + }); + } + } + }, 100); + }); + + // Cleanup function for removing the resize event listener + return () => { + window.removeEventListener('resize', updateSize); + }; + }, []); const scrollToPage = (iframe, pageNumber) => { @@ -111,32 +129,21 @@ const BrewRenderer = (props)=>{ }; const getPageContainingElement = (iframe, elementId) => { - return new Promise((resolve, reject) => { - iframe.addEventListener('load', () => { - - const brewRenderer = iframe.contentWindow.document.querySelector('.brewRenderer'); - console.log('brewRenderer:', brewRenderer); - - setTimeout(() => { - const pages = brewRenderer.querySelectorAll('.page'); - console.log('Number of pages found:', pages.length); - - for (let i = 0; i < pages.length; i++) { - if (pages[i].querySelector(`#${elementId}`)) { - resolve(i); - return; - } - } - - console.log('Element with ID not found in any page.'); - resolve(-1); - }, 100); // Adjust delay as needed - }); - }); - }; - - + return new Promise((resolve) => { + const brewRenderer = + iframe.contentWindow.document.querySelector('.brewRenderer'); + const pages = brewRenderer.querySelectorAll('.page'); + for (let i = 0; i < pages.length; i++) { + if (pages[i].querySelector(`#${elementId}`)) { + resolve(i); + return; + } + } + console.log('Element with ID not found in any page.'); + resolve(-1); + }); + }; const updateSize = ()=>{ setState((prevState)=>({ @@ -302,4 +309,4 @@ const BrewRenderer = (props)=>{ ); }; -module.exports = BrewRenderer; +module.exports = BrewRenderer; \ No newline at end of file From d012a093460f28e3c9b29111059338aa9b35a7c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Fri, 31 May 2024 17:06:47 +0200 Subject: [PATCH 04/41] "Refactor BrewRenderer: updated iframe handling and scrolling logic in useEffect and scrollToPage function" --- client/homebrew/brewRenderer/brewRenderer.jsx | 32 +++++++++---------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index 705aab64d..3808b8653 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -76,7 +76,7 @@ const BrewRenderer = (props)=>{ useEffect(() => { const locationHash = window.location.hash; - const iframe = document.getElementById('BrewRenderer'); + const iframe = document.getElementById('BrewRenderer'); // Regular expression to match page IDs like '#p1' const pageIdRegex = /^#p\d+$/; @@ -85,12 +85,7 @@ const BrewRenderer = (props)=>{ if (pageIdRegex.test(locationHash)) { // Extract page number from the ID const pageNumber = parseInt(locationHash.slice(2)); - console.log('scrolling to page ', pageNumber); - if (!isNaN(pageNumber)) { - scrollToPage(iframe, pageNumber); - } else { - console.error('Invalid page ID:', locationHash); - } + scrollToPage(iframe, pageNumber); } else { // Treat it as an element ID const elementId = locationHash.slice(1); // Remove the leading '#' @@ -117,16 +112,19 @@ const BrewRenderer = (props)=>{ const scrollToPage = (iframe, pageNumber) => { - if (iframe && iframe.contentWindow) { - const brewRenderer = iframe.contentWindow.document.querySelector('.brewRenderer'); - if (brewRenderer) { - const pages = brewRenderer.querySelectorAll('.page'); - if (pages && pages[pageNumber]) { - pages[pageNumber].scrollIntoView({ block: 'start' }); - } - } - } - }; + if (iframe && iframe.contentWindow) { + const brewRenderer = + iframe.contentWindow.document.querySelector('.brewRenderer'); + if (brewRenderer) { + const pages = brewRenderer.querySelectorAll('.page'); + if (pageNumber > pages.length) { + console.log('page not found'); + } else { + pages[pageNumber].scrollIntoView({ block: 'start' }); + } + } + } + }; const getPageContainingElement = (iframe, elementId) => { return new Promise((resolve) => { From acbdd1b801a778cb9af5455ad6f4ddbcdabd543b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Fri, 31 May 2024 17:13:29 +0200 Subject: [PATCH 05/41] "Removed iframe parameter from scrollToPage and getPageContainingElement functions, instead getting iframe element by id 'BrewRenderer' inside the functions." --- client/homebrew/brewRenderer/brewRenderer.jsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index 3808b8653..88d60432d 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -85,15 +85,15 @@ const BrewRenderer = (props)=>{ if (pageIdRegex.test(locationHash)) { // Extract page number from the ID const pageNumber = parseInt(locationHash.slice(2)); - scrollToPage(iframe, pageNumber); + scrollToPage(pageNumber); } else { // Treat it as an element ID const elementId = locationHash.slice(1); // Remove the leading '#' if (elementId) { - getPageContainingElement(iframe, elementId) + getPageContainingElement(elementId) .then((pageNumber) => { if (pageNumber !== -1) { - scrollToPage(iframe, pageNumber); + scrollToPage(pageNumber); } }) .catch((error) => { @@ -111,7 +111,8 @@ const BrewRenderer = (props)=>{ }, []); - const scrollToPage = (iframe, pageNumber) => { + const scrollToPage = (pageNumber) => { + const iframe = document.getElementById('BrewRenderer'); if (iframe && iframe.contentWindow) { const brewRenderer = iframe.contentWindow.document.querySelector('.brewRenderer'); @@ -126,7 +127,8 @@ const BrewRenderer = (props)=>{ } }; - const getPageContainingElement = (iframe, elementId) => { + const getPageContainingElement = (elementId) => { + const iframe = document.getElementById('BrewRenderer'); return new Promise((resolve) => { const brewRenderer = iframe.contentWindow.document.querySelector('.brewRenderer'); From 8efea112b446def451f307244d68513c88538239 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Fri, 31 May 2024 20:22:14 +0200 Subject: [PATCH 06/41] "Updated scrollToPage argument to add 1 to pageNumber" --- 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 88d60432d..73036d9ab 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -85,7 +85,7 @@ const BrewRenderer = (props)=>{ if (pageIdRegex.test(locationHash)) { // Extract page number from the ID const pageNumber = parseInt(locationHash.slice(2)); - scrollToPage(pageNumber); + scrollToPage(pageNumber+1); } else { // Treat it as an element ID const elementId = locationHash.slice(1); // Remove the leading '#' From 90b504d67d7464c25f34a51850dd78d16e563ed4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Fri, 31 May 2024 20:26:12 +0200 Subject: [PATCH 07/41] Oops --- 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 73036d9ab..b1fdd3957 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -85,7 +85,7 @@ const BrewRenderer = (props)=>{ if (pageIdRegex.test(locationHash)) { // Extract page number from the ID const pageNumber = parseInt(locationHash.slice(2)); - scrollToPage(pageNumber+1); + scrollToPage(pageNumber-1); } else { // Treat it as an element ID const elementId = locationHash.slice(1); // Remove the leading '#' From f449132b4c446e3c1659d26578156e7668ed5752 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Wed, 14 Aug 2024 20:38:38 +0200 Subject: [PATCH 08/41] wrap correctly --- client/homebrew/editor/editor.less | 1 + client/homebrew/editor/snippetbar/snippetbar.less | 14 +++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/client/homebrew/editor/editor.less b/client/homebrew/editor/editor.less index f8dc249d6..b2e96683e 100644 --- a/client/homebrew/editor/editor.less +++ b/client/homebrew/editor/editor.less @@ -2,6 +2,7 @@ .editor { position : relative; width : 100%; + container: editor / inline-size; .codeEditor { height : 100%; diff --git a/client/homebrew/editor/snippetbar/snippetbar.less b/client/homebrew/editor/snippetbar/snippetbar.less index e0a24fac9..19d4c3d4f 100644 --- a/client/homebrew/editor/snippetbar/snippetbar.less +++ b/client/homebrew/editor/snippetbar/snippetbar.less @@ -2,11 +2,18 @@ @import (less) '././././themes/fonts/5e/fonts.less'; .snippetBar { - @menuHeight : 25px; + @menuHeight : 25px; position : relative; height : @menuHeight; color : black; background-color : #DDDDDD; + min-width : 331px; + + @container editor (width < 538px) { + display : flex; + flex-wrap : wrap; + height : 50px; + } .editors { position : absolute; @@ -15,6 +22,11 @@ display : flex; justify-content : space-between; height : @menuHeight; + + @container editor (width < 538px) { + position : static; + } + & > div { width : @menuHeight; height : @menuHeight; From bbe56bf4435b3f68550e3387b2812a78cb725304 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Wed, 14 Aug 2024 20:39:15 +0200 Subject: [PATCH 09/41] linting --- client/homebrew/editor/snippetbar/snippetbar.less | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/homebrew/editor/snippetbar/snippetbar.less b/client/homebrew/editor/snippetbar/snippetbar.less index 19d4c3d4f..86e4c9ffc 100644 --- a/client/homebrew/editor/snippetbar/snippetbar.less +++ b/client/homebrew/editor/snippetbar/snippetbar.less @@ -4,10 +4,10 @@ .snippetBar { @menuHeight : 25px; position : relative; + min-width : 331px; height : @menuHeight; color : black; background-color : #DDDDDD; - min-width : 331px; @container editor (width < 538px) { display : flex; @@ -139,11 +139,11 @@ cursor : pointer; .animate(background-color); i { + min-width : 25px; height : 1.2em; margin-right : 8px; font-size : 1.2em; - min-width: 25px; - text-align: center; + text-align : center; & ~ i { margin-right : 0; margin-left : 5px; From cc76ff147843fccb7f1f9c5c40140bf2b2e04f49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Thu, 15 Aug 2024 12:07:55 +0200 Subject: [PATCH 10/41] relocated container query --- .../editor/snippetbar/snippetbar.less | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/client/homebrew/editor/snippetbar/snippetbar.less b/client/homebrew/editor/snippetbar/snippetbar.less index 86e4c9ffc..7180da562 100644 --- a/client/homebrew/editor/snippetbar/snippetbar.less +++ b/client/homebrew/editor/snippetbar/snippetbar.less @@ -9,12 +9,6 @@ color : black; background-color : #DDDDDD; - @container editor (width < 538px) { - display : flex; - flex-wrap : wrap; - height : 50px; - } - .editors { position : absolute; top : 0px; @@ -22,10 +16,6 @@ display : flex; justify-content : space-between; height : @menuHeight; - - @container editor (width < 538px) { - position : static; - } & > div { width : @menuHeight; @@ -201,4 +191,17 @@ } } } +} + +@container editor (width < 538px) { + + .snippetBar { + display : flex; + flex-wrap : wrap; + height : 50px; + + .editors { + position : static; + } + } } \ No newline at end of file From 1f41745d2b47267db25ee5105f220f68e0c41998 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Fri, 23 Aug 2024 13:37:12 +0200 Subject: [PATCH 11/41] "Refactored Snippetbar component: updated JSX structure, added div wrapper for snippets, changed CSS styles for editors and snippets" --- .../homebrew/editor/snippetbar/snippetbar.jsx | 64 ++++++++++--------- .../editor/snippetbar/snippetbar.less | 10 ++- 2 files changed, 42 insertions(+), 32 deletions(-) diff --git a/client/homebrew/editor/snippetbar/snippetbar.jsx b/client/homebrew/editor/snippetbar/snippetbar.jsx index af493c961..dd45f0773 100644 --- a/client/homebrew/editor/snippetbar/snippetbar.jsx +++ b/client/homebrew/editor/snippetbar/snippetbar.jsx @@ -125,19 +125,23 @@ const Snippetbar = createClass({ renderSnippetGroups : function(){ const snippets = this.state.snippets.filter((snippetGroup)=>snippetGroup.view === this.props.view); - return _.map(snippets, (snippetGroup)=>{ - return ; - }); + return
+ {_.map(snippets, (snippetGroup)=>{ + return ; + }) + } +
}, + renderEditorButtons : function(){ if(!this.props.showEditButtons) return; @@ -158,23 +162,6 @@ const Snippetbar = createClass({ } return
-
- -
-
- -
-
- {foldButtons} -
- - {this.state.themeSelector && this.renderThemeSelector()} -
- -
this.props.onViewChange('text')}> @@ -186,14 +173,33 @@ const Snippetbar = createClass({
this.props.onViewChange('meta')}> +
+
+ {foldButtons} +
+ + {this.state.themeSelector && this.renderThemeSelector()}
+ +
+
+ +
+
+ +
+
; }, render : function(){ return
- {this.renderSnippetGroups()} {this.renderEditorButtons()} + {this.renderSnippetGroups()} +
; } }); diff --git a/client/homebrew/editor/snippetbar/snippetbar.less b/client/homebrew/editor/snippetbar/snippetbar.less index 7180da562..7b0754a07 100644 --- a/client/homebrew/editor/snippetbar/snippetbar.less +++ b/client/homebrew/editor/snippetbar/snippetbar.less @@ -8,11 +8,15 @@ height : @menuHeight; color : black; background-color : #DDDDDD; + display: flex; - .editors { + .snippets { position : absolute; top : 0px; right : 0px; + } + + .editors { display : flex; justify-content : space-between; height : @menuHeight; @@ -107,7 +111,7 @@ .tooltipLeft('Edit Brew Properties'); } .snippetGroup { - border-right : 1px solid currentColor; + border-left : 1px solid currentColor; &:hover { & > .dropdown { visibility : visible; } } @@ -200,7 +204,7 @@ flex-wrap : wrap; height : 50px; - .editors { + .snippets { position : static; } } From 3360b4e829592e5c2dc3116e2ea430d85584784a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Sat, 7 Sep 2024 19:12:59 +0200 Subject: [PATCH 12/41] refctor logic --- client/homebrew/brewRenderer/brewRenderer.jsx | 70 ++++++++++--------- 1 file changed, 37 insertions(+), 33 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index 2aa494828..e391e237f 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -76,40 +76,44 @@ const BrewRenderer = (props)=>{ } useEffect(() => { - const locationHash = window.location.hash; - const iframe = document.getElementById('BrewRenderer'); + const locationHash = window.location.hash; + const iframe = document.getElementById('BrewRenderer'); + + const pageIdRegex = /^#p\d+$/; + + const handleIframeLoad = () => { + setTimeout(() => { + if (pageIdRegex.test(locationHash)) { + const pageNumber = parseInt(locationHash.slice(2)); + scrollToPage(pageNumber - 1); + } else { + const elementId = locationHash.slice(1); + if (elementId) { + getPageContainingElement(elementId) + .then((pageNumber) => { + if (pageNumber !== -1) { + scrollToPage(pageNumber); + } + }) + .catch((error) => { + console.error('Error:', error); + }); + } + } + }, 100); + }; + + if (locationHash) { + iframe.addEventListener('load', handleIframeLoad); + } - // Regular expression to match page IDs like '#p1' - const pageIdRegex = /^#p\d+$/; - iframe.addEventListener('load', () => { - setTimeout(() => { - if (pageIdRegex.test(locationHash)) { - // Extract page number from the ID - const pageNumber = parseInt(locationHash.slice(2)); - scrollToPage(pageNumber-1); - } else { - // Treat it as an element ID - const elementId = locationHash.slice(1); // Remove the leading '#' - if (elementId) { - getPageContainingElement(elementId) - .then((pageNumber) => { - if (pageNumber !== -1) { - scrollToPage(pageNumber); - } - }) - .catch((error) => { - console.error('Error:', error); - }); - } - } - }, 100); - }); - - // Cleanup function for removing the resize event listener - return () => { - window.removeEventListener('resize', updateSize); - }; - }, []); + return () => { + if (locationHash) { + iframe.removeEventListener('load', handleIframeLoad); + } + window.removeEventListener('resize', updateSize); + }; + }, []); const scrollToPage = (pageNumber) => { From e213eb0a78cdc8611b64ee5b0c44fd26210a546d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Sun, 15 Sep 2024 18:37:27 +0200 Subject: [PATCH 13/41] "Refactor BrewRenderer: removed iframe load event listener, simplified page scrolling logic, and inlined getPageContainingElement functionality" --- client/homebrew/brewRenderer/brewRenderer.jsx | 62 ++++++------------- 1 file changed, 19 insertions(+), 43 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index 416337a61..ad628651e 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -79,44 +79,38 @@ const BrewRenderer = (props)=>{ useEffect(() => { const locationHash = window.location.hash; - const iframe = document.getElementById('BrewRenderer'); - const pageIdRegex = /^#p\d+$/; - const handleIframeLoad = () => { - setTimeout(() => { + console.log(state); + + if (locationHash) { + if (state.isMounted) { if (pageIdRegex.test(locationHash)) { const pageNumber = parseInt(locationHash.slice(2)); scrollToPage(pageNumber - 1); } else { const elementId = locationHash.slice(1); if (elementId) { - getPageContainingElement(elementId) - .then((pageNumber) => { - if (pageNumber !== -1) { - scrollToPage(pageNumber); - } - }) - .catch((error) => { - console.error('Error:', error); - }); + const element = document.getElementById(elementId); + console.log(element); + if (element) { + + const page = element.closest(".page"); + // Ensure `page` exists before proceeding + if (page) { + console.log(page.getAttribute("Id").slice(1)); + scrollToPage(page.getAttribute("Id").slice(1)); + } + } } } - }, 100); - }; - - if (locationHash) { - iframe.addEventListener('load', handleIframeLoad); - } - - return () => { - if (locationHash) { - iframe.removeEventListener('load', handleIframeLoad); } + } + + return () => { window.removeEventListener('resize', updateSize); }; - }, []); - + }, [state.isMounted]); const scrollToPage = (pageNumber) => { const iframe = document.getElementById('BrewRenderer'); @@ -133,24 +127,6 @@ const BrewRenderer = (props)=>{ } } }; - - const getPageContainingElement = (elementId) => { - const iframe = document.getElementById('BrewRenderer'); - return new Promise((resolve) => { - const brewRenderer = - iframe.contentWindow.document.querySelector('.brewRenderer'); - const pages = brewRenderer.querySelectorAll('.page'); - for (let i = 0; i < pages.length; i++) { - if (pages[i].querySelector(`#${elementId}`)) { - resolve(i); - return; - } - } - - console.log('Element with ID not found in any page.'); - resolve(-1); - }); - }; const updateSize = ()=>{ setState((prevState)=>({ From 2e5ebb861eb63e648edc002ad288b2370ee08de2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Tue, 17 Sep 2024 19:50:39 +0200 Subject: [PATCH 14/41] simplify logic --- client/homebrew/brewRenderer/brewRenderer.jsx | 74 +++++-------------- 1 file changed, 18 insertions(+), 56 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index 12ac31794..7c5ac3a1b 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -78,56 +78,17 @@ const BrewRenderer = (props)=>{ } useEffect(() => { - const locationHash = window.location.hash; - const pageIdRegex = /^#p\d+$/; - - console.log(state); - - if (locationHash) { - if (state.isMounted) { - if (pageIdRegex.test(locationHash)) { - const pageNumber = parseInt(locationHash.slice(2)); - scrollToPage(pageNumber - 1); - } else { - const elementId = locationHash.slice(1); - if (elementId) { - const element = document.getElementById(elementId); - console.log(element); - if (element) { - - const page = element.closest(".page"); - // Ensure `page` exists before proceeding - if (page) { - console.log(page.getAttribute("Id").slice(1)); - scrollToPage(page.getAttribute("Id").slice(1)); - } - } - } - } - } + const elementId = window.location.hash.slice(1); + if (elementId && state.isMounted) { + const element = document.getElementById(elementId); + element.scrollIntoView({ block: 'start' }); } - + return () => { window.removeEventListener('resize', updateSize); }; }, [state.isMounted]); - const scrollToPage = (pageNumber) => { - const iframe = document.getElementById('BrewRenderer'); - if (iframe && iframe.contentWindow) { - const brewRenderer = - iframe.contentWindow.document.querySelector('.brewRenderer'); - if (brewRenderer) { - const pages = brewRenderer.querySelectorAll('.page'); - if (pageNumber > pages.length) { - console.log('page not found'); - } else { - pages[pageNumber].scrollIntoView({ block: 'start' }); - } - } - } - }; - const updateSize = ()=>{ setState((prevState)=>({ ...prevState, @@ -135,6 +96,19 @@ const BrewRenderer = (props)=>{ })); }; + 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(); + window.addEventListener('resize', updateSize); + renderPages(); //Make sure page is renderable before showing + setState((prevState)=>({ + ...prevState, + isMounted : true, + visibility : 'visible' + })); + }, 100); + }; + const updateCurrentPage = useCallback(_.throttle((e)=>{ const { scrollTop, clientHeight, scrollHeight } = e.target; const totalScrollableHeight = scrollHeight - clientHeight; @@ -207,18 +181,6 @@ const BrewRenderer = (props)=>{ } }; - 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(); - window.addEventListener('resize', updateSize); - renderPages(); //Make sure page is renderable before showing - setState((prevState)=>({ - ...prevState, - isMounted : true, - visibility : 'visible' - })); - }, 100); - }; const emitClick = ()=>{ // Allow clicks inside iFrame to interact with dropdowns, etc. from outside if(!window || !document) return; From 6456c22c61dbb93234987fc09e486637b57df512 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Wed, 9 Oct 2024 21:33:26 +0200 Subject: [PATCH 15/41] testing mutation Observer, don't review this yet --- client/homebrew/brewRenderer/brewRenderer.jsx | 39 +++++++++++++++---- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index 7c5ac3a1b..8d63c1e0c 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -16,8 +16,8 @@ const Frame = require('react-frame-component').default; const dedent = require('dedent-tabs').default; const { printCurrentBrew } = require('../../../shared/helpers.js'); -const DOMPurify = require('dompurify'); -const purifyConfig = { FORCE_BODY: true, SANITIZE_DOM: false }; +//const DOMPurify = require('dompurify'); +//const purifyConfig = { FORCE_BODY: true, SANITIZE_DOM: false }; const PAGE_HEIGHT = 1056; @@ -77,17 +77,42 @@ const BrewRenderer = (props)=>{ rawPages = props.text.split(/^\\page$/gm); } - useEffect(() => { + useEffect(()=>{ + const iframeDoc = document.getElementById('brewRenderer'); + const hash = window.location.hash; + console.log(hash); + if(hash && iframeDoc) { + const anchor = iframeDoc.querySelector(hash); + + if(anchor) { + anchor.scrollIntoView(); + } else { + // Use MutationObserver to wait for the element if it's not immediately available + const observer = new MutationObserver((mutations, obs)=>{ + const anchorElement = iframeDoc.querySelector(hash); + if(anchorElement) { + anchorElement.scrollIntoView(); + obs.disconnect(); // Stop observing once the element is found + } + }); + + observer.observe(iframeDoc, { + childList : true, + subtree : true, + }); + } + } + /* const elementId = window.location.hash.slice(1); - if (elementId && state.isMounted) { + if(elementId && state.isMounted) { const element = document.getElementById(elementId); element.scrollIntoView({ block: 'start' }); } - - return () => { + */ + return ()=>{ window.removeEventListener('resize', updateSize); }; - }, [state.isMounted]); + }, []); const updateSize = ()=>{ setState((prevState)=>({ From 1aabb84731e64e8227be66e90ba75ceaf1c3148a Mon Sep 17 00:00:00 2001 From: David Bolack Date: Thu, 10 Oct 2024 17:40:32 -0500 Subject: [PATCH 16/41] Revert --experimental-vm-modules Code works but does not work with jest as expected. --- package.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index f8007c608..cd4fda141 100644 --- a/package.json +++ b/package.json @@ -11,10 +11,10 @@ "url": "git://github.com/naturalcrit/homebrewery.git" }, "scripts": { - "dev": "node --experimental-require-module scripts/dev.js", - "quick": "node --experimental-require-module scripts/quick.js", - "build": "node --experimental-require-module scripts/buildHomebrew.js && node --experimental-require-module scripts/buildAdmin.js", - "builddev": "node --experimental-require-module scripts/buildHomebrew.js --dev", + "dev": "node scripts/dev.js", + "quick": "node scripts/quick.js", + "build": "node scripts/buildHomebrew.js && node scripts/buildAdmin.js", + "builddev": "node scripts/buildHomebrew.js --dev", "lint": "eslint --fix", "lint:dry": "eslint", "stylelint": "stylelint --fix **/*.{less}", @@ -38,10 +38,10 @@ "test:hard-breaks": "jest tests/markdown/hard-breaks.test.js --verbose --noStackTrace", "test:emojis": "jest tests/markdown/emojis.test.js --verbose --noStackTrace", "test:route": "jest tests/routes/static-pages.test.js --verbose", - "phb": "node --experimental-require-module scripts/phb.js", + "phb": "node scripts/phb.js", "prod": "set NODE_ENV=production && npm run build", "postinstall": "npm run build", - "start": "node --experimental-require-module server.js" + "start": "node server.js" }, "author": "stolksdorf", "license": "MIT", From 9506be6b65f687e095e95278c3362121b425656c Mon Sep 17 00:00:00 2001 From: David Bolack Date: Thu, 10 Oct 2024 17:41:40 -0500 Subject: [PATCH 17/41] Revert "Revert --experimental-vm-modules" This reverts commit 1aabb84731e64e8227be66e90ba75ceaf1c3148a. --- package.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index cd4fda141..f8007c608 100644 --- a/package.json +++ b/package.json @@ -11,10 +11,10 @@ "url": "git://github.com/naturalcrit/homebrewery.git" }, "scripts": { - "dev": "node scripts/dev.js", - "quick": "node scripts/quick.js", - "build": "node scripts/buildHomebrew.js && node scripts/buildAdmin.js", - "builddev": "node scripts/buildHomebrew.js --dev", + "dev": "node --experimental-require-module scripts/dev.js", + "quick": "node --experimental-require-module scripts/quick.js", + "build": "node --experimental-require-module scripts/buildHomebrew.js && node --experimental-require-module scripts/buildAdmin.js", + "builddev": "node --experimental-require-module scripts/buildHomebrew.js --dev", "lint": "eslint --fix", "lint:dry": "eslint", "stylelint": "stylelint --fix **/*.{less}", @@ -38,10 +38,10 @@ "test:hard-breaks": "jest tests/markdown/hard-breaks.test.js --verbose --noStackTrace", "test:emojis": "jest tests/markdown/emojis.test.js --verbose --noStackTrace", "test:route": "jest tests/routes/static-pages.test.js --verbose", - "phb": "node scripts/phb.js", + "phb": "node --experimental-require-module scripts/phb.js", "prod": "set NODE_ENV=production && npm run build", "postinstall": "npm run build", - "start": "node server.js" + "start": "node --experimental-require-module server.js" }, "author": "stolksdorf", "license": "MIT", From e54d237a19c77020ef7324a13339eb37ad4a01e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Thu, 17 Oct 2024 22:40:53 +0200 Subject: [PATCH 18/41] fix pack-lock --- package-lock.json | 184 +++++++++++++++++----------------------------- 1 file changed, 69 insertions(+), 115 deletions(-) diff --git a/package-lock.json b/package-lock.json index d32adae5d..36faf1090 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,14 +39,13 @@ "marked-smartypants-lite": "^1.0.2", "markedLegacy": "npm:marked@^0.3.19", "moment": "^2.30.1", - "mongoose": "^8.6.2", "mongoose": "^8.7.1", "nanoid": "3.3.4", "nconf": "^0.12.1", "react": "^18.3.1", "react-dom": "^18.3.1", "react-frame-component": "^4.1.3", - "react-router-dom": "6.26.2", + "react-router-dom": "6.27.0", "sanitize-filename": "1.6.3", "superagent": "^10.1.0", "vitreum": "git+https://git@github.com/calculuschild/vitreum.git" @@ -60,7 +59,7 @@ "jest": "^29.7.0", "jest-expect-message": "^1.1.3", "postcss-less": "^6.0.0", - "stylelint": "^16.9.0", + "stylelint": "^16.10.0", "stylelint-config-recess-order": "^5.1.1", "stylelint-config-recommended": "^14.0.1", "supertest": "^7.0.0" @@ -2901,9 +2900,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.2.tgz", - "integrity": "sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.20.0.tgz", + "integrity": "sha512-mUnk8rPJBI9loFDZ+YzPGdeniYK+FTmRD1TMCz7ev2SNIozyKKpnGgsxO34u6Z4z/t0ITuu7voi/AshfsGsgFg==", "engines": { "node": ">=14.0.0" } @@ -5038,23 +5037,21 @@ } }, "node_modules/css-functions-list": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.2.tgz", - "integrity": "sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz", + "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12 || >=16" } }, "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.0.0.tgz", + "integrity": "sha512-o88DVQ6GzsABn1+6+zo2ct801dBO5OASVyxbbvA2W20ue2puSh/VOuqUj90eUeMSX/xqGqBmOKiRQN7tJOuBXw==", "dev": true, - "license": "MIT", "dependencies": { - "mdn-data": "2.0.30", + "mdn-data": "2.10.0", "source-map-js": "^1.0.1" }, "engines": { @@ -5135,12 +5132,11 @@ } }, "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", - "license": "MIT", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -6188,9 +6184,6 @@ "license": "MIT" }, "node_modules/express": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", "version": "4.21.1", "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", @@ -10362,11 +10355,10 @@ } }, "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true, - "license": "CC0-1.0" + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.10.0.tgz", + "integrity": "sha512-qq7C3EtK3yJXMwz1zAab65pjl+UhohqMOctTgcqjLOWABqmwj+me02LSsCuEUxnst9X1lCBpoE0WArGKgdGDzw==", + "dev": true }, "node_modules/media-typer": { "version": "0.3.0", @@ -10791,12 +10783,6 @@ } } }, - "node_modules/mongoose/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, "node_modules/mpath": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", @@ -10819,10 +10805,9 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "license": "MIT" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/nan": { "version": "2.20.0", @@ -11543,10 +11528,9 @@ } }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "license": "ISC" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -11669,9 +11653,9 @@ } }, "node_modules/postcss": { - "version": "8.4.41", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", - "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", "dev": true, "funding": [ { @@ -11689,8 +11673,8 @@ ], "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.1", - "source-map-js": "^1.2.0" + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -11716,9 +11700,9 @@ "dev": true }, "node_modules/postcss-safe-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz", - "integrity": "sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", + "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", "dev": true, "funding": [ { @@ -11734,7 +11718,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "engines": { "node": ">=18.0" }, @@ -12077,11 +12060,11 @@ "license": "MIT" }, "node_modules/react-router": { - "version": "6.26.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.2.tgz", - "integrity": "sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==", + "version": "6.27.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.27.0.tgz", + "integrity": "sha512-YA+HGZXz4jaAkVoYBE98VQl+nVzI+cVI2Oj/06F5ZM+0u3TgedN9Y9kmMRo2mnkSK2nCpNQn0DVob4HCsY/WLw==", "dependencies": { - "@remix-run/router": "1.19.2" + "@remix-run/router": "1.20.0" }, "engines": { "node": ">=14.0.0" @@ -12091,12 +12074,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.26.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.2.tgz", - "integrity": "sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==", + "version": "6.27.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.27.0.tgz", + "integrity": "sha512-+bvtFWMC0DgAFrfKXKG9Fc+BcXWRUO1aJIihbB79xaeq0v5UzfvnM5houGUm1Y461WVRcgAQ+Clh5rdb1eCx4g==", "dependencies": { - "@remix-run/router": "1.19.2", - "react-router": "6.26.2" + "@remix-run/router": "1.20.0", + "react-router": "6.27.0" }, "engines": { "node": ">=14.0.0" @@ -12628,11 +12611,6 @@ "node": ">= 0.8" } }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, "node_modules/serve-static": { "version": "1.16.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", @@ -13036,11 +13014,10 @@ } }, "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -13422,9 +13399,9 @@ "license": "ISC" }, "node_modules/stylelint": { - "version": "16.9.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.9.0.tgz", - "integrity": "sha512-31Nm3WjxGOBGpQqF43o3wO9L5AC36TPIe6030Lnm13H3vDMTcS21DrLh69bMX+DBilKqMMVLian4iG6ybBoNRQ==", + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.10.0.tgz", + "integrity": "sha512-z/8X2rZ52dt2c0stVwI9QL2AFJhLhbPkyfpDFcizs200V/g7v+UYY6SNcB9hKOLcDDX/yGLDsY/pX08sLkz9xQ==", "dev": true, "funding": [ { @@ -13445,17 +13422,17 @@ "balanced-match": "^2.0.0", "colord": "^2.9.3", "cosmiconfig": "^9.0.0", - "css-functions-list": "^3.2.2", - "css-tree": "^2.3.1", - "debug": "^4.3.6", + "css-functions-list": "^3.2.3", + "css-tree": "^3.0.0", + "debug": "^4.3.7", "fast-glob": "^3.3.2", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^9.0.0", + "file-entry-cache": "^9.1.0", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.3.1", - "ignore": "^5.3.2", + "ignore": "^6.0.2", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", "known-css-properties": "^0.34.0", @@ -13464,14 +13441,13 @@ "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "picocolors": "^1.0.1", - "postcss": "^8.4.41", + "postcss": "^8.4.47", "postcss-resolve-nested-selector": "^0.1.6", - "postcss-safe-parser": "^7.0.0", + "postcss-safe-parser": "^7.0.1", "postcss-selector-parser": "^6.1.2", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", "string-width": "^4.2.3", - "strip-ansi": "^7.1.0", "supports-hyperlinks": "^3.1.0", "svg-tags": "^1.0.0", "table": "^6.8.2", @@ -13533,19 +13509,6 @@ "stylelint": "^14.0.0 || ^15.0.0 || ^16.0.1" } }, - "node_modules/stylelint/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, "node_modules/stylelint/node_modules/balanced-match": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", @@ -13554,11 +13517,10 @@ "license": "MIT" }, "node_modules/stylelint/node_modules/file-entry-cache": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.0.0.tgz", - "integrity": "sha512-6MgEugi8p2tiUhqO7GnPsmbCCzj0YRCwwaTbpGRyKZesjRSzkqkAE9fPp7V2yMs5hwfgbQLgdvSSkGNg1s5Uvw==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz", + "integrity": "sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==", "dev": true, - "license": "MIT", "dependencies": { "flat-cache": "^5.0.0" }, @@ -13571,7 +13533,6 @@ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz", "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==", "dev": true, - "license": "MIT", "dependencies": { "flatted": "^3.3.1", "keyv": "^4.5.4" @@ -13580,6 +13541,15 @@ "node": ">=18" } }, + "node_modules/stylelint/node_modules/ignore": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-6.0.2.tgz", + "integrity": "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/stylelint/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -13603,22 +13573,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/stylelint/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/stylelint/node_modules/write-file-atomic": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", @@ -15216,4 +15170,4 @@ } } } -} +} \ No newline at end of file From c9240c70232805a28c4bb536386e5a38bc2025d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Thu, 17 Oct 2024 22:41:24 +0200 Subject: [PATCH 19/41] fix last line pack-lock --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 36faf1090..e3fb0ad29 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15170,4 +15170,4 @@ } } } -} \ No newline at end of file +} From 87915ef0ef352b8183937214e5fae1212657a1f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Thu, 17 Oct 2024 22:42:55 +0200 Subject: [PATCH 20/41] remove unnecessary changes --- client/homebrew/brewRenderer/brewRenderer.jsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index c2094be57..5d304c45e 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -16,8 +16,8 @@ const Frame = require('react-frame-component').default; const dedent = require('dedent-tabs').default; const { printCurrentBrew } = require('../../../shared/helpers.js'); -//const DOMPurify = require('dompurify'); -//const purifyConfig = { FORCE_BODY: true, SANITIZE_DOM: false }; +const DOMPurify = require('dompurify'); +const purifyConfig = { FORCE_BODY: true, SANITIZE_DOM: false }; const PAGE_HEIGHT = 1056; @@ -42,6 +42,7 @@ const BrewPage = (props)=>{
; }; + //v=====--------------------< Brew Renderer Component >-------------------=====v// let renderedPages = []; let rawPages = []; @@ -274,4 +275,4 @@ const BrewRenderer = (props)=>{ ); }; -module.exports = BrewRenderer; \ No newline at end of file +module.exports = BrewRenderer; From f2f06b23fd3c80ce518393abf5593ffe3acfc0e0 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Thu, 17 Oct 2024 16:42:57 -0400 Subject: [PATCH 21/41] Disable Global ToC Snippet --- .../homebrew/editor/snippetbar/snippetbar.jsx | 3 +- .../editor/snippetbar/snippetbar.less | 1 + themes/V3/5ePHB/snippets.js | 39 ++++++++++--------- themes/V3/5ePHB/style.less | 21 +++++----- 4 files changed, 36 insertions(+), 28 deletions(-) diff --git a/client/homebrew/editor/snippetbar/snippetbar.jsx b/client/homebrew/editor/snippetbar/snippetbar.jsx index d457d92f2..3b8520284 100644 --- a/client/homebrew/editor/snippetbar/snippetbar.jsx +++ b/client/homebrew/editor/snippetbar/snippetbar.jsx @@ -291,8 +291,9 @@ const SnippetGroup = createClass({ return _.map(snippets, (snippet)=>{ return
this.handleSnippetClick(e, snippet)}> - {snippet.name} + {snippet.name} {snippet.experimental && beta} + {snippet.disabled && disabled} {snippet.subsnippets && <>
diff --git a/client/homebrew/editor/snippetbar/snippetbar.less b/client/homebrew/editor/snippetbar/snippetbar.less index c50d9df4c..434ee4beb 100644 --- a/client/homebrew/editor/snippetbar/snippetbar.less +++ b/client/homebrew/editor/snippetbar/snippetbar.less @@ -179,6 +179,7 @@ } } .name { margin-right : auto; } + .disabled { text-decoration: line-through; } .beta { align-self : center; padding : 4px 6px; diff --git a/themes/V3/5ePHB/snippets.js b/themes/V3/5ePHB/snippets.js index c3094abc4..543b1cf5c 100644 --- a/themes/V3/5ePHB/snippets.js +++ b/themes/V3/5ePHB/snippets.js @@ -157,24 +157,27 @@ module.exports = [ { name : 'Table of Contents Toggles', icon : 'fas fa-book', - gen : `{{tocGlobalH4}}\n\n`, - subsnippets : [ - { - name : 'Enable H1-H4 all pages', - icon : 'fas fa-dice-four', - gen : `{{tocGlobalH4}}\n\n`, - }, - { - name : 'Enable H1-H5 all pages', - icon : 'fas fa-dice-five', - gen : `{{tocGlobalH5}}\n\n`, - }, - { - name : 'Enable H1-H6 all pages', - icon : 'fas fa-dice-six', - gen : `{{tocGlobalH6}}\n\n`, - }, - ] + //gen : `{{tocGlobalH4}}\n\n`, + disabled : true + // RELIES ON .PAGES:HAS() WHICH IS VERY SLOW + // WILL BE MOVED TO STYLE TAB SNIPPETS + // subsnippets : [ + // { + // name : 'Enable H1-H4 all pages', + // icon : 'fas fa-dice-four', + // gen : `{{tocGlobalH4}}\n\n`, + // }, + // { + // name : 'Enable H1-H5 all pages', + // icon : 'fas fa-dice-five', + // gen : `{{tocGlobalH5}}\n\n`, + // }, + // { + // name : 'Enable H1-H6 all pages', + // icon : 'fas fa-dice-six', + // gen : `{{tocGlobalH6}}\n\n`, + // }, + // ] } ] }, diff --git a/themes/V3/5ePHB/style.less b/themes/V3/5ePHB/style.less index 5a2b5cf3f..1216d0370 100644 --- a/themes/V3/5ePHB/style.less +++ b/themes/V3/5ePHB/style.less @@ -812,17 +812,20 @@ h6, // Brew level default inclusion changes. // These add Headers 'back' to inclusion. -.pages:has(.tocGlobalH4) { - h4 {--TOC: include; } -} -.pages:has(.tocGlobalH5) { - h4, h5 {--TOC: include; } -} +//NOTE: DO NOT USE :HAS WITH .PAGES!!! EXTREMELY SLOW TO RENDER ON LARGE DOCS! +//WILL BE MOVED TO A STYLE TAB SNIPPET INSTEAD +// .pages:has(.tocGlobalH4) { +// h4 {--TOC: include; } +// } -.pages:has(.tocGlobalH6) { - h4, h5, h6 {--TOC: include; } -} +// .pages:has(.tocGlobalH5) { +// h4, h5 {--TOC: include; } +// } + +// .pages:has(.tocGlobalH6) { +// h4, h5, h6 {--TOC: include; } +// } // Block level inclusion changes // These include either a single (include) or a range (depth) From 397ae31f568cf24c3d05d5b2a2ecde019159e17f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Thu, 17 Oct 2024 22:56:58 +0200 Subject: [PATCH 22/41] remove stale changes --- client/homebrew/brewRenderer/brewRenderer.jsx | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index 5d304c45e..a2b3cf828 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -1,7 +1,7 @@ /*eslint max-lines: ["warn", {"max": 300, "skipBlankLines": true, "skipComments": true}]*/ require('./brewRenderer.less'); const React = require('react'); -const { useState, useRef, useCallback, useMemo } = React; +const { useState, useRef, useCallback, useMemo, useEffect } = React; const _ = require('lodash'); const MarkdownLegacy = require('naturalcrit/markdownLegacy.js'); @@ -78,9 +78,10 @@ const BrewRenderer = (props)=>{ } useEffect(()=>{ - const iframeDoc = document.getElementById('brewRenderer'); + const iframeDoc = document.getElementById('BrewRenderer'); const hash = window.location.hash; - console.log(hash); + console.log('Hash: ', hash || 'There is no hash'); + console.log(iframeDoc || 'no iframe yet'); if(hash && iframeDoc) { const anchor = iframeDoc.querySelector(hash); @@ -114,17 +115,8 @@ const BrewRenderer = (props)=>{ }; }, []); - const updateSize = ()=>{ - setState((prevState)=>({ - ...prevState, - height : mainRef.current.parentNode.clientHeight, - })); - }; - 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(); - window.addEventListener('resize', updateSize); renderPages(); //Make sure page is renderable before showing setState((prevState)=>({ ...prevState, From 5077fda3f602700a46c0b012d334a9946a8c59d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Thu, 17 Oct 2024 22:58:14 +0200 Subject: [PATCH 23/41] move stuff around for minimal changes --- client/homebrew/brewRenderer/brewRenderer.jsx | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index a2b3cf828..09d77946d 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -115,6 +115,14 @@ const BrewRenderer = (props)=>{ }; }, []); + const updateCurrentPage = useCallback(_.throttle((e)=>{ + const { scrollTop, clientHeight, scrollHeight } = e.target; + const totalScrollableHeight = scrollHeight - clientHeight; + const currentPageNumber = Math.max(Math.ceil((scrollTop / totalScrollableHeight) * rawPages.length), 1); + + props.onPageChange(currentPageNumber); + }, 200), []); + 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 renderPages(); //Make sure page is renderable before showing @@ -126,14 +134,6 @@ const BrewRenderer = (props)=>{ }, 100); }; - const updateCurrentPage = useCallback(_.throttle((e)=>{ - const { scrollTop, clientHeight, scrollHeight } = e.target; - const totalScrollableHeight = scrollHeight - clientHeight; - const currentPageNumber = Math.max(Math.ceil((scrollTop / totalScrollableHeight) * rawPages.length), 1); - - props.onPageChange(currentPageNumber); - }, 200), []); - const isInView = (index)=>{ if(!state.isMounted) return false; From 9a4473526a347135f75b9b4eaf4510e23f802615 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Thu, 17 Oct 2024 22:59:29 +0200 Subject: [PATCH 24/41] move around 2 --- client/homebrew/brewRenderer/brewRenderer.jsx | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index 09d77946d..38d2d4314 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -123,17 +123,6 @@ const BrewRenderer = (props)=>{ props.onPageChange(currentPageNumber); }, 200), []); - 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 - renderPages(); //Make sure page is renderable before showing - setState((prevState)=>({ - ...prevState, - isMounted : true, - visibility : 'visible' - })); - }, 100); - }; - const isInView = (index)=>{ if(!state.isMounted) return false; @@ -198,6 +187,17 @@ const BrewRenderer = (props)=>{ } }; + 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 + renderPages(); //Make sure page is renderable before showing + setState((prevState)=>({ + ...prevState, + isMounted : true, + visibility : 'visible' + })); + }, 100); + }; + const emitClick = ()=>{ // Allow clicks inside iFrame to interact with dropdowns, etc. from outside if(!window || !document) return; document.dispatchEvent(new MouseEvent('click')); From d872a496a78944c5139a17b8044141235f63afc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Thu, 17 Oct 2024 23:38:11 +0200 Subject: [PATCH 25/41] fix mutation observer integration --- client/homebrew/brewRenderer/brewRenderer.jsx | 57 ++++++++++--------- 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index 38d2d4314..9ec35be00 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -77,40 +77,45 @@ const BrewRenderer = (props)=>{ rawPages = props.text.split(/^\\page$/gm); } - useEffect(()=>{ - const iframeDoc = document.getElementById('BrewRenderer'); + useEffect(() => { + const iframe = document.getElementById('BrewRenderer'); const hash = window.location.hash; - console.log('Hash: ', hash || 'There is no hash'); - console.log(iframeDoc || 'no iframe yet'); - if(hash && iframeDoc) { - const anchor = iframeDoc.querySelector(hash); - - if(anchor) { - anchor.scrollIntoView(); + + const scrollToHash = () => { + const iframeDoc = iframe?.contentDocument || iframe?.contentWindow?.document; + let anchor = iframeDoc.querySelector(hash); + + if (anchor) { + anchor.scrollIntoView({ behavior: 'smooth' }); } else { // Use MutationObserver to wait for the element if it's not immediately available - const observer = new MutationObserver((mutations, obs)=>{ - const anchorElement = iframeDoc.querySelector(hash); - if(anchorElement) { - anchorElement.scrollIntoView(); - obs.disconnect(); // Stop observing once the element is found - } + const observer = new MutationObserver((mutations, obs) => { + anchor = iframeDoc.querySelector(hash); + if (anchor) { + anchor.scrollIntoView({ behavior: 'smooth' }); + obs.disconnect(); + } }); - observer.observe(iframeDoc, { - childList : true, - subtree : true, - }); + if (iframeDoc.body) { + observer.observe(iframeDoc.body, { + childList: true, + subtree: true, + }); + } + } + }; + + if (hash) { + iframe.addEventListener('load', scrollToHash); + + if (iframe.contentDocument?.readyState === 'complete') { + scrollToHash(); } } - /* - const elementId = window.location.hash.slice(1); - if(elementId && state.isMounted) { - const element = document.getElementById(elementId); - element.scrollIntoView({ block: 'start' }); - } - */ + return ()=>{ + iframe.removeEventListener('load', scrollToHash); window.removeEventListener('resize', updateSize); }; }, []); From 189625c79b5017abcd01f7cdfecd83d64aa0dc71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Thu, 17 Oct 2024 23:38:27 +0200 Subject: [PATCH 26/41] adding margin to scroll action to prevent toolbar overlapping --- client/homebrew/brewRenderer/brewRenderer.less | 3 +++ 1 file changed, 3 insertions(+) diff --git a/client/homebrew/brewRenderer/brewRenderer.less b/client/homebrew/brewRenderer/brewRenderer.less index 81e7e4f22..177576abc 100644 --- a/client/homebrew/brewRenderer/brewRenderer.less +++ b/client/homebrew/brewRenderer/brewRenderer.less @@ -18,6 +18,9 @@ margin-left : auto; box-shadow : 1px 4px 14px #000000; } + *[id] { + scroll-margin-top:100px; + } } &::-webkit-scrollbar { width : 20px; From 5a75182affeada869e75a177124a749143231037 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Fri, 18 Oct 2024 00:52:26 +0200 Subject: [PATCH 27/41] changes as requested, wrapping of editor tools, and linting --- .../homebrew/editor/snippetbar/snippetbar.jsx | 95 ++++----- .../editor/snippetbar/snippetbar.less | 194 ++++++++++-------- 2 files changed, 145 insertions(+), 144 deletions(-) diff --git a/client/homebrew/editor/snippetbar/snippetbar.jsx b/client/homebrew/editor/snippetbar/snippetbar.jsx index fc6bc6db6..8e643a837 100644 --- a/client/homebrew/editor/snippetbar/snippetbar.jsx +++ b/client/homebrew/editor/snippetbar/snippetbar.jsx @@ -151,7 +151,7 @@ const Snippetbar = createClass({ renderSnippetGroups : function(){ const snippets = this.state.snippets.filter((snippetGroup)=>snippetGroup.view === this.props.view); - return
+ return
{_.map(snippets, (snippetGroup)=>{ return ; - }) + />; + }) } -
+
; }, replaceContent : function(item){ @@ -223,66 +223,53 @@ const Snippetbar = createClass({ } return
-
- - { this.state.showHistory && this.renderHistoryItems() } +
+
+ + { this.state.showHistory && this.renderHistoryItems() } +
+
+ +
+
+ +
-
- -
-
- -
-
- {foldButtons} -
- - {this.state.themeSelector && this.renderThemeSelector()} +
+ {foldButtons} +
+ + {this.state.themeSelector && this.renderThemeSelector()} +
-
-
this.props.onViewChange('text')}> - -
-
this.props.onViewChange('style')}> - -
-
this.props.onViewChange('meta')}> - -
-
- {foldButtons} -
- - {this.state.themeSelector && this.renderThemeSelector()} + +
+
this.props.onViewChange('text')}> + +
+
this.props.onViewChange('style')}> + +
+
this.props.onViewChange('meta')}> + +
-
-
- -
-
- -
-
; }, render : function(){ return
- {this.renderEditorButtons()} {this.renderSnippetGroups()} - + {this.renderEditorButtons()}
; } }); @@ -315,7 +302,7 @@ const SnippetGroup = createClass({ {snippet.name} {snippet.experimental && beta} - {snippet.disabled && disabled} + {snippet.disabled && disabled} {snippet.subsnippets && <>
diff --git a/client/homebrew/editor/snippetbar/snippetbar.less b/client/homebrew/editor/snippetbar/snippetbar.less index 852a95c98..780ae7a2c 100644 --- a/client/homebrew/editor/snippetbar/snippetbar.less +++ b/client/homebrew/editor/snippetbar/snippetbar.less @@ -5,102 +5,113 @@ @menuHeight : 25px; position : relative; min-width : 331px; - height : @menuHeight; + height : auto; color : black; background-color : #DDDDDD; display: flex; + justify-content: space-between; + flex-wrap:wrap-reverse; .snippets { - position : absolute; - top : 0px; - right : 0px; + display : flex; + justify-content : space-between; } .editors { display : flex; justify-content : space-between; - height : @menuHeight; - - & > div { - width : @menuHeight; - height : @menuHeight; - line-height : @menuHeight; - text-align : center; - cursor : pointer; - &:hover,&.selected { background-color : #999999; } - &.text { - .tooltipLeft('Brew Editor'); + >div { + display:flex; + justify-content: space-around; + flex:1; + border-left:1px solid; + + &:first-child { + border-left: none; } - &.style { - .tooltipLeft('Style Editor'); - } - &.meta { - .tooltipLeft('Properties'); - } - &.undo { - .tooltipLeft('Undo'); - font-size : 0.75em; - color : grey; - &.active { color : inherit; } - } - &.redo { - .tooltipLeft('Redo'); - font-size : 0.75em; - color : grey; - &.active { color : inherit; } - } - &.foldAll { - .tooltipLeft('Fold All'); - font-size : 0.75em; - color : inherit; - } - &.unfoldAll { - .tooltipLeft('Unfold All'); - font-size : 0.75em; - color : inherit; - } - &.history { - .tooltipLeft('History'); - font-size : 0.75em; - color : grey; - position : relative; - &.active { - color : inherit; + + & > div { + width : @menuHeight; + height : @menuHeight; + line-height : @menuHeight; + text-align : center; + cursor : pointer; + &:hover,&.selected { background-color : #999999; } + &.text { + .tooltipLeft('Brew Editor'); } - &>.dropdown{ - right : -1px; - &>.snippet{ - padding-right : 10px; + &.style { + .tooltipLeft('Style Editor'); + } + &.meta { + .tooltipLeft('Properties'); + } + &.undo { + .tooltipLeft('Undo'); + font-size : 0.75em; + color : grey; + &.active { color : inherit; } + } + &.redo { + .tooltipLeft('Redo'); + font-size : 0.75em; + color : grey; + &.active { color : inherit; } + } + &.foldAll { + .tooltipLeft('Fold All'); + font-size : 0.75em; + color : inherit; + } + &.unfoldAll { + .tooltipLeft('Unfold All'); + font-size : 0.75em; + color : inherit; + } + &.history { + .tooltipLeft('History'); + font-size : 0.75em; + color : grey; + position : relative; + border:none; + &.active { + color : inherit; + } + &>.dropdown{ + right : -1px; + &>.snippet{ + padding-right : 10px; + } } } - } - &.editorTheme { - .tooltipLeft('Editor Themes'); - font-size : 0.75em; - color : black; - &.active { - position : relative; - background-color : #999999; + &.editorTheme { + .tooltipLeft('Editor Themes'); + font-size : 0.75em; + color : black; + &.active { + position : relative; + background-color : #999999; + } + } + &.divider { + width : 5px; + background : linear-gradient(currentColor, currentColor) no-repeat center/1px 100%; + &:hover { background-color : inherit; } } } - &.divider { - width : 5px; - background : linear-gradient(currentColor, currentColor) no-repeat center/1px 100%; - &:hover { background-color : inherit; } + .themeSelector { + position : absolute; + top : 25px; + right : 0; + z-index : 10; + display : flex; + align-items : center; + justify-content : center; + width : 170px; + height : inherit; + background-color : inherit; } - } - .themeSelector { - position : absolute; - top : 25px; - right : 0; - z-index : 10; - display : flex; - align-items : center; - justify-content : center; - width : 170px; - height : inherit; - background-color : inherit; - } + } } .snippetBarButton { display : inline-block; @@ -111,6 +122,7 @@ line-height : @menuHeight; text-transform : uppercase; cursor : pointer; + text-wrap: nowrap; &:hover, &.selected { background-color : #999999; } i { margin-right : 3px; @@ -126,7 +138,8 @@ .tooltipLeft('Edit Brew Properties'); } .snippetGroup { - border-left : 1px solid currentColor; + border-right : 1px solid currentColor; + &:hover { & > .dropdown { visibility : visible; } } @@ -213,15 +226,16 @@ } } -@container editor (width < 538px) { +@container editor (width < 568px) { - .snippetBar { - display : flex; - flex-wrap : wrap; - height : 50px; - - .snippets { - position : static; - } + .editors,.snippets { + width:332.59px; } -} \ No newline at end of file + .editors { + border-right:1px solid; + } + .snippetBar .editors>div.history>.dropdown { + right:unset; + } + +} From 631ef795b75239505a2812ed046f2b108cb8c2eb Mon Sep 17 00:00:00 2001 From: David Bolack Date: Thu, 17 Oct 2024 18:30:31 -0500 Subject: [PATCH 28/41] Fix .tocGlobalH? Based on OH DEAR GOD THE LAG! discoveries related to the global toggles, these are being moved from a markup tag to a styles tab insert. --- themes/V3/5ePHB/snippets.js | 47 +++++++++++++++++-------------------- themes/V3/5ePHB/style.less | 12 ---------- 2 files changed, 22 insertions(+), 37 deletions(-) diff --git a/themes/V3/5ePHB/snippets.js b/themes/V3/5ePHB/snippets.js index 543b1cf5c..798a36193 100644 --- a/themes/V3/5ePHB/snippets.js +++ b/themes/V3/5ePHB/snippets.js @@ -154,31 +154,6 @@ module.exports = [ ] }, - { - name : 'Table of Contents Toggles', - icon : 'fas fa-book', - //gen : `{{tocGlobalH4}}\n\n`, - disabled : true - // RELIES ON .PAGES:HAS() WHICH IS VERY SLOW - // WILL BE MOVED TO STYLE TAB SNIPPETS - // subsnippets : [ - // { - // name : 'Enable H1-H4 all pages', - // icon : 'fas fa-dice-four', - // gen : `{{tocGlobalH4}}\n\n`, - // }, - // { - // name : 'Enable H1-H5 all pages', - // icon : 'fas fa-dice-five', - // gen : `{{tocGlobalH5}}\n\n`, - // }, - // { - // name : 'Enable H1-H6 all pages', - // icon : 'fas fa-dice-six', - // gen : `{{tocGlobalH6}}\n\n`, - // }, - // ] - } ] }, { @@ -217,6 +192,28 @@ module.exports = [ line-height: 1em; }\n\n` }, + { + name : 'Table of Contents Toggles', + icon : 'fas fa-book', + disabled : false, + subsnippets : [ + { + name : 'Enable H1-H4 all pages', + icon : 'fas fa-dice-four', + gen : `\n.pages {\n h4 {--TOC: include; }\n}\n\n`, + }, + { + name : 'Enable H1-H5 all pages', + icon : 'fas fa-dice-five', + gen : `\n.pages {\n h4, h5 {--TOC: include; }\n}\n\n`, + }, + { + name : 'Enable H1-H6 all pages', + icon : 'fas fa-dice-six', + gen : `\n.pages {\n h4, h5, h6 {--TOC: include; }\n}\n\n`, + }, + ] + } ] }, diff --git a/themes/V3/5ePHB/style.less b/themes/V3/5ePHB/style.less index 1216d0370..ba975e58a 100644 --- a/themes/V3/5ePHB/style.less +++ b/themes/V3/5ePHB/style.less @@ -814,18 +814,6 @@ h6, // These add Headers 'back' to inclusion. //NOTE: DO NOT USE :HAS WITH .PAGES!!! EXTREMELY SLOW TO RENDER ON LARGE DOCS! -//WILL BE MOVED TO A STYLE TAB SNIPPET INSTEAD -// .pages:has(.tocGlobalH4) { -// h4 {--TOC: include; } -// } - -// .pages:has(.tocGlobalH5) { -// h4, h5 {--TOC: include; } -// } - -// .pages:has(.tocGlobalH6) { -// h4, h5, h6 {--TOC: include; } -// } // Block level inclusion changes // These include either a single (include) or a range (depth) From cd09408aa89d5e2598fecd1da14d24f98e28e8dc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 18 Oct 2024 03:37:53 +0000 Subject: [PATCH 29/41] Bump mongoose from 8.7.1 to 8.7.2 Bumps [mongoose](https://github.com/Automattic/mongoose) from 8.7.1 to 8.7.2. - [Release notes](https://github.com/Automattic/mongoose/releases) - [Changelog](https://github.com/Automattic/mongoose/blob/master/CHANGELOG.md) - [Commits](https://github.com/Automattic/mongoose/compare/8.7.1...8.7.2) --- updated-dependencies: - dependency-name: mongoose dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index e3fb0ad29..76c6e2dd0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,7 +39,7 @@ "marked-smartypants-lite": "^1.0.2", "markedLegacy": "npm:marked@^0.3.19", "moment": "^2.30.1", - "mongoose": "^8.7.1", + "mongoose": "^8.7.2", "nanoid": "3.3.4", "nconf": "^0.12.1", "react": "^18.3.1", @@ -10661,9 +10661,9 @@ } }, "node_modules/mongoose": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.7.1.tgz", - "integrity": "sha512-RpNMyhyzLVCVbf8xTVbrf/18G3MqQzNw5pJdvOJ60fzbCa3cOZzz9L+8XpqzBXtRlgZGWv0T7MmOtvrT8ocp1Q==", + "version": "8.7.2", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.7.2.tgz", + "integrity": "sha512-Ok4VzMds9p5G3ZSUhmvBm1GdxanbzhS29jpSn02SPj+IXEVFnIdfwAlHHXWkyNscZKlcn8GuMi68FH++jo0flg==", "dependencies": { "bson": "^6.7.0", "kareem": "2.6.3", diff --git a/package.json b/package.json index a4c6ee38a..d25c1b1d1 100644 --- a/package.json +++ b/package.json @@ -115,7 +115,7 @@ "marked-smartypants-lite": "^1.0.2", "markedLegacy": "npm:marked@^0.3.19", "moment": "^2.30.1", - "mongoose": "^8.7.1", + "mongoose": "^8.7.2", "nanoid": "3.3.4", "nconf": "^0.12.1", "react": "^18.3.1", From ac766f3b37428f9d0029840d00d11807689b61c2 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Fri, 18 Oct 2024 10:23:56 -0400 Subject: [PATCH 30/41] Update brewRenderer.jsx --- client/homebrew/brewRenderer/brewRenderer.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index dba99638b..b9b9f5589 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -179,8 +179,8 @@ const BrewRenderer = (props)=>{ styleObject.backgroundImage = `url("data:image/svg+xml;utf8,${global.config.deployment}")`; } - const renderedStyle = useMemo(()=> renderStyle(), [props.style?.length, props.themeBundle]); - renderedPages = useMemo(() => renderPages(), [props.text?.length]); + const renderedStyle = useMemo(()=> renderStyle(), [props.style, props.themeBundle]); + renderedPages = useMemo(() => renderPages(), [props.text]); return ( <> From 9d81f50b609dc551375af031639fe4db386d7da1 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Fri, 18 Oct 2024 10:46:59 -0400 Subject: [PATCH 31/41] Remove `disabled = false` Don't need that tag at all when it's false. --- themes/V3/5ePHB/snippets.js | 1 - 1 file changed, 1 deletion(-) diff --git a/themes/V3/5ePHB/snippets.js b/themes/V3/5ePHB/snippets.js index 798a36193..f06064895 100644 --- a/themes/V3/5ePHB/snippets.js +++ b/themes/V3/5ePHB/snippets.js @@ -195,7 +195,6 @@ module.exports = [ { name : 'Table of Contents Toggles', icon : 'fas fa-book', - disabled : false, subsnippets : [ { name : 'Enable H1-H4 all pages', From d53a271c9ff8be2c736b2bb8720ead0a74747b2b Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Fri, 18 Oct 2024 10:53:16 -0400 Subject: [PATCH 32/41] Change to `.page` and tweak spacing/newlines to match other snippets All of our "global" style snippets are just set at `.page`, not `.pages`. This still applies globally but is consistent with our current approach. --- themes/V3/5ePHB/snippets.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/themes/V3/5ePHB/snippets.js b/themes/V3/5ePHB/snippets.js index f06064895..dbcdc6f2a 100644 --- a/themes/V3/5ePHB/snippets.js +++ b/themes/V3/5ePHB/snippets.js @@ -199,17 +199,17 @@ module.exports = [ { name : 'Enable H1-H4 all pages', icon : 'fas fa-dice-four', - gen : `\n.pages {\n h4 {--TOC: include; }\n}\n\n`, + gen : `.page {\n\th4 {--TOC: include; }\n}\n\n`, }, { name : 'Enable H1-H5 all pages', icon : 'fas fa-dice-five', - gen : `\n.pages {\n h4, h5 {--TOC: include; }\n}\n\n`, + gen : `.page {\n\th4, h5 {--TOC: include; }\n}\n\n`, }, { name : 'Enable H1-H6 all pages', icon : 'fas fa-dice-six', - gen : `\n.pages {\n h4, h5, h6 {--TOC: include; }\n}\n\n`, + gen : `.page {\n\th4, h5, h6 {--TOC: include; }\n}\n\n`, }, ] } From 1d663ef38d6ec9a2ab6222bd22eea0cb03bcba59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Sun, 20 Oct 2024 12:19:38 +0200 Subject: [PATCH 33/41] last iteration --- .../editor/snippetbar/snippetbar.less | 53 +++++++------------ 1 file changed, 20 insertions(+), 33 deletions(-) diff --git a/client/homebrew/editor/snippetbar/snippetbar.less b/client/homebrew/editor/snippetbar/snippetbar.less index 780ae7a2c..b766e7fe1 100644 --- a/client/homebrew/editor/snippetbar/snippetbar.less +++ b/client/homebrew/editor/snippetbar/snippetbar.less @@ -4,33 +4,31 @@ .snippetBar { @menuHeight : 25px; position : relative; + display : flex; + flex-wrap : wrap-reverse; + justify-content : space-between; min-width : 331px; height : auto; color : black; background-color : #DDDDDD; - display: flex; - justify-content: space-between; - flex-wrap:wrap-reverse; .snippets { display : flex; - justify-content : space-between; + justify-content : space-evenly; } .editors { display : flex; justify-content : space-between; >div { - display:flex; - justify-content: space-around; - flex:1; - border-left:1px solid; + display : flex; + flex : 1; + justify-content : space-around; - &:first-child { - border-left: none; - } + &:first-child { border-left : none; } & > div { + position : relative; width : @menuHeight; height : @menuHeight; line-height : @menuHeight; @@ -70,18 +68,14 @@ } &.history { .tooltipLeft('History'); + position : relative; font-size : 0.75em; color : grey; - position : relative; - border:none; - &.active { - color : inherit; - } - &>.dropdown{ + border : none; + &.active { color : inherit; } + & > .dropdown { right : -1px; - &>.snippet{ - padding-right : 10px; - } + & > .snippet { padding-right : 10px; } } } &.editorTheme { @@ -121,8 +115,8 @@ font-weight : 800; line-height : @menuHeight; text-transform : uppercase; + text-wrap : nowrap; cursor : pointer; - text-wrap: nowrap; &:hover, &.selected { background-color : #999999; } i { margin-right : 3px; @@ -138,7 +132,6 @@ .tooltipLeft('Edit Brew Properties'); } .snippetGroup { - border-right : 1px solid currentColor; &:hover { & > .dropdown { visibility : visible; } @@ -198,7 +191,7 @@ } } .name { margin-right : auto; } - .disabled { text-decoration: line-through; } + .disabled { text-decoration : line-through; } .beta { align-self : center; padding : 4px 6px; @@ -226,16 +219,10 @@ } } -@container editor (width < 568px) { +@container editor (width < 553px) { - .editors,.snippets { - width:332.59px; - } - .editors { - border-right:1px solid; - } - .snippetBar .editors>div.history>.dropdown { - right:unset; - } + .editors,.snippets { flex:1; } + .editors { border-bottom:1px solid} + .snippetBar .editors > div.history > .dropdown { right : unset; } } From 0e9021049c9c50c132e88d3d545f6b61bd7fd221 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Sun, 20 Oct 2024 13:00:05 -0400 Subject: [PATCH 34/41] lint --- client/homebrew/editor/snippetbar/snippetbar.less | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/client/homebrew/editor/snippetbar/snippetbar.less b/client/homebrew/editor/snippetbar/snippetbar.less index b766e7fe1..a4d273bbf 100644 --- a/client/homebrew/editor/snippetbar/snippetbar.less +++ b/client/homebrew/editor/snippetbar/snippetbar.less @@ -2,7 +2,7 @@ @import (less) '././././themes/fonts/5e/fonts.less'; .snippetBar { - @menuHeight : 25px; + @menuHeight : 25px; position : relative; display : flex; flex-wrap : wrap-reverse; @@ -74,7 +74,7 @@ border : none; &.active { color : inherit; } & > .dropdown { - right : -1px; + right : -1px; & > .snippet { padding-right : 10px; } } } @@ -220,9 +220,7 @@ } @container editor (width < 553px) { - - .editors,.snippets { flex:1; } - .editors { border-bottom:1px solid} + .editors,.snippets { flex : 1; } + .editors { border-bottom : 1px solid;} .snippetBar .editors > div.history > .dropdown { right : unset; } - } From 5994e0d0b36bc061ec79fec5638be10ed96ce50b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 03:20:07 +0000 Subject: [PATCH 35/41] Bump eslint from 9.12.0 to 9.13.0 Bumps [eslint](https://github.com/eslint/eslint) from 9.12.0 to 9.13.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v9.12.0...v9.13.0) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 24 ++++++++++++------------ package.json | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index 76c6e2dd0..f53d72195 100644 --- a/package-lock.json +++ b/package-lock.json @@ -52,7 +52,7 @@ }, "devDependencies": { "@stylistic/stylelint-plugin": "^3.1.1", - "eslint": "^9.12.0", + "eslint": "^9.13.0", "eslint-plugin-jest": "^28.8.3", "eslint-plugin-react": "^7.37.1", "globals": "^15.11.0", @@ -1881,9 +1881,9 @@ } }, "node_modules/@eslint/core": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.6.0.tgz", - "integrity": "sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz", + "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1927,9 +1927,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.12.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.12.0.tgz", - "integrity": "sha512-eohesHH8WFRUprDNyEREgqP6beG6htMeUYeCpkEgBCieCMme5r9zFWjzAJp//9S+Kub4rqE+jXe9Cp1a7IYIIA==", + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.13.0.tgz", + "integrity": "sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5702,17 +5702,17 @@ } }, "node_modules/eslint": { - "version": "9.12.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.12.0.tgz", - "integrity": "sha512-UVIOlTEWxwIopRL1wgSQYdnVDcEvs2wyaO6DGo5mXqe3r16IoCNWkR29iHhyaP4cICWjbgbmFUGAhh0GJRuGZw==", + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.13.0.tgz", + "integrity": "sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.11.0", "@eslint/config-array": "^0.18.0", - "@eslint/core": "^0.6.0", + "@eslint/core": "^0.7.0", "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "9.12.0", + "@eslint/js": "9.13.0", "@eslint/plugin-kit": "^0.2.0", "@humanfs/node": "^0.16.5", "@humanwhocodes/module-importer": "^1.0.1", diff --git a/package.json b/package.json index d25c1b1d1..b1e391931 100644 --- a/package.json +++ b/package.json @@ -128,7 +128,7 @@ }, "devDependencies": { "@stylistic/stylelint-plugin": "^3.1.1", - "eslint": "^9.12.0", + "eslint": "^9.13.0", "eslint-plugin-jest": "^28.8.3", "eslint-plugin-react": "^7.37.1", "globals": "^15.11.0", From 41a60e63120b4f1561a50ba58a7b16f9f7732188 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 03:20:23 +0000 Subject: [PATCH 36/41] Bump superagent from 10.1.0 to 10.1.1 Bumps [superagent](https://github.com/ladjs/superagent) from 10.1.0 to 10.1.1. - [Release notes](https://github.com/ladjs/superagent/releases) - [Changelog](https://github.com/ladjs/superagent/blob/master/HISTORY.md) - [Commits](https://github.com/ladjs/superagent/compare/v10.1.0...v10.1.1) --- updated-dependencies: - dependency-name: superagent dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 26 ++++++++++++-------------- package.json | 2 +- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/package-lock.json b/package-lock.json index 76c6e2dd0..db7e5e4ba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -47,7 +47,7 @@ "react-frame-component": "^4.1.3", "react-router-dom": "6.27.0", "sanitize-filename": "1.6.3", - "superagent": "^10.1.0", + "superagent": "^10.1.1", "vitreum": "git+https://git@github.com/calculuschild/vitreum.git" }, "devDependencies": { @@ -6551,13 +6551,12 @@ } }, "node_modules/formidable": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz", - "integrity": "sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==", - "license": "MIT", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.2.tgz", + "integrity": "sha512-Jqc1btCy3QzRbJaICGwKcBfGWuLADRerLzDqi2NwSt/UkXLsHJw2TVResiaoBufHVHy9aSgClOHCeJsSsFLTbg==", "dependencies": { "dezalgo": "^1.0.4", - "hexoid": "^1.0.0", + "hexoid": "^2.0.0", "once": "^1.4.0" }, "funding": { @@ -7190,10 +7189,9 @@ } }, "node_modules/hexoid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", - "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", - "license": "MIT", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-2.0.0.tgz", + "integrity": "sha512-qlspKUK7IlSQv2o+5I7yhUd7TxlOG2Vr5LTa3ve2XSNVKAL/n/u/7KLvKmFNimomDIKvZFXWHv0T12mv7rT8Aw==", "engines": { "node": ">=8" } @@ -13597,16 +13595,16 @@ } }, "node_modules/superagent": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-10.1.0.tgz", - "integrity": "sha512-JMmik7PbnXGlq7g528Gi6apHbVbTz2vrE3du6fuG4kIPSb2PnLoSOPvfjKn8aQYuJcBWAKW6ZG90qPPsE5jZxQ==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-10.1.1.tgz", + "integrity": "sha512-9pIwrHrOj3uAnqg9gDlW7EA2xv+N5au/dSM0kM22HTqmUu8jBxNT+8uA7tA3UoCnmiqzpSbu8rasIUZvbyamMQ==", "dependencies": { "component-emitter": "^1.3.0", "cookiejar": "^2.1.4", "debug": "^4.3.4", "fast-safe-stringify": "^2.1.1", "form-data": "^4.0.0", - "formidable": "^3.5.1", + "formidable": "^3.5.2", "methods": "^1.1.2", "mime": "2.6.0", "qs": "^6.11.0" diff --git a/package.json b/package.json index d25c1b1d1..891757a3e 100644 --- a/package.json +++ b/package.json @@ -123,7 +123,7 @@ "react-frame-component": "^4.1.3", "react-router-dom": "6.27.0", "sanitize-filename": "1.6.3", - "superagent": "^10.1.0", + "superagent": "^10.1.1", "vitreum": "git+https://git@github.com/calculuschild/vitreum.git" }, "devDependencies": { From 0c98f832bbfab863aa4bf6349fefc803d19a96f5 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Mon, 21 Oct 2024 16:21:41 +1300 Subject: [PATCH 37/41] Add catch to await calls --- client/homebrew/pages/editPage/editPage.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index fcc43e81a..7fcee9e0c 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -228,8 +228,8 @@ const EditPage = createClass({ htmlErrors : Markdown.validate(prevState.brew.text) })); - await updateHistory(this.state.brew); - await versionHistoryGarbageCollection(); + await updateHistory(this.state.brew).catch(console.error); + await versionHistoryGarbageCollection().catch(console.error); const transfer = this.state.saveGoogle == _.isNil(this.state.brew.googleId); From 5b136f651c497046023e4a1b8de765d4d9730f25 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Tue, 22 Oct 2024 13:03:12 -0400 Subject: [PATCH 38/41] Call `scrollToHash` from our existing "frameDidMount` `frameDidMount` is equivalent to using iframe.addEventListener('load'); Let's not add a new listener and just use the existing event we already have. Functionality still works. --- client/homebrew/brewRenderer/brewRenderer.jsx | 59 +++++++------------ 1 file changed, 22 insertions(+), 37 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index 9ec35be00..79771707f 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -77,48 +77,31 @@ const BrewRenderer = (props)=>{ rawPages = props.text.split(/^\\page$/gm); } - useEffect(() => { + const scrollToHash = (hash) => { const iframe = document.getElementById('BrewRenderer'); - const hash = window.location.hash; - - const scrollToHash = () => { - const iframeDoc = iframe?.contentDocument || iframe?.contentWindow?.document; - let anchor = iframeDoc.querySelector(hash); - - if (anchor) { - anchor.scrollIntoView({ behavior: 'smooth' }); - } else { - // Use MutationObserver to wait for the element if it's not immediately available - const observer = new MutationObserver((mutations, obs) => { - anchor = iframeDoc.querySelector(hash); - if (anchor) { - anchor.scrollIntoView({ behavior: 'smooth' }); - obs.disconnect(); - } - }); + const iframeDoc = iframe?.contentDocument || iframe?.contentWindow?.document; + let anchor = iframeDoc.querySelector(hash); - if (iframeDoc.body) { - observer.observe(iframeDoc.body, { - childList: true, - subtree: true, - }); + if (anchor) { + anchor.scrollIntoView({ behavior: 'smooth' }); + } else { + // Use MutationObserver to wait for the element if it's not immediately available + const observer = new MutationObserver((mutations, obs) => { + anchor = iframeDoc.querySelector(hash); + if (anchor) { + anchor.scrollIntoView({ behavior: 'smooth' }); + obs.disconnect(); } - } - }; - - if (hash) { - iframe.addEventListener('load', scrollToHash); - - if (iframe.contentDocument?.readyState === 'complete') { - scrollToHash(); + }); + + if (iframeDoc.body) { + observer.observe(iframeDoc.body, { + childList: true, + subtree: true, + }); } } - - return ()=>{ - iframe.removeEventListener('load', scrollToHash); - window.removeEventListener('resize', updateSize); - }; - }, []); + }; const updateCurrentPage = useCallback(_.throttle((e)=>{ const { scrollTop, clientHeight, scrollHeight } = e.target; @@ -193,6 +176,8 @@ const BrewRenderer = (props)=>{ }; const frameDidMount = ()=>{ //This triggers when iFrame finishes internal "componentDidMount" + scrollToHash(window.location.hash); + setTimeout(()=>{ //We still see a flicker where the style isn't applied yet, so wait 100ms before showing iFrame renderPages(); //Make sure page is renderable before showing setState((prevState)=>({ From 9fbdd24d01477d4118a3fa3b78705ae1a4b60785 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Tue, 22 Oct 2024 13:52:34 -0400 Subject: [PATCH 39/41] Cleanup --- client/homebrew/brewRenderer/brewRenderer.jsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index 79771707f..7e2a35a1e 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -1,7 +1,7 @@ /*eslint max-lines: ["warn", {"max": 300, "skipBlankLines": true, "skipComments": true}]*/ require('./brewRenderer.less'); const React = require('react'); -const { useState, useRef, useCallback, useMemo, useEffect } = React; +const { useState, useRef, useCallback, useMemo } = React; const _ = require('lodash'); const MarkdownLegacy = require('naturalcrit/markdownLegacy.js'); @@ -78,8 +78,7 @@ const BrewRenderer = (props)=>{ } const scrollToHash = (hash) => { - const iframe = document.getElementById('BrewRenderer'); - const iframeDoc = iframe?.contentDocument || iframe?.contentWindow?.document; + const iframeDoc = document.getElementById('BrewRenderer').contentDocument; let anchor = iframeDoc.querySelector(hash); if (anchor) { From 83a48b8d0cae4320307127b91b082cde121d5116 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Tue, 22 Oct 2024 13:58:35 -0400 Subject: [PATCH 40/41] Simplify observer --- client/homebrew/brewRenderer/brewRenderer.jsx | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index 7e2a35a1e..4fcbc1ba0 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -85,20 +85,16 @@ const BrewRenderer = (props)=>{ anchor.scrollIntoView({ behavior: 'smooth' }); } else { // Use MutationObserver to wait for the element if it's not immediately available - const observer = new MutationObserver((mutations, obs) => { + new MutationObserver((mutations, obs) => { anchor = iframeDoc.querySelector(hash); if (anchor) { anchor.scrollIntoView({ behavior: 'smooth' }); obs.disconnect(); } + }).observe(iframeDoc, { + childList : true, + subtree : true, }); - - if (iframeDoc.body) { - observer.observe(iframeDoc.body, { - childList: true, - subtree: true, - }); - } } }; From 5040b9528fa208b0a8facd7554d0a7079bc86d70 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Tue, 22 Oct 2024 14:08:20 -0400 Subject: [PATCH 41/41] cleanup --- client/homebrew/brewRenderer/brewRenderer.jsx | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index 4fcbc1ba0..2d2affdae 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -91,10 +91,7 @@ const BrewRenderer = (props)=>{ anchor.scrollIntoView({ behavior: 'smooth' }); obs.disconnect(); } - }).observe(iframeDoc, { - childList : true, - subtree : true, - }); + }).observe(iframeDoc, { childList: true, subtree: true }); } };