/*eslint max-lines: ["warn", {"max": 300, "skipBlankLines": true, "skipComments": true}]*/ require('./brewRenderer.less'); const React = require('react'); const { useState, useRef, useEffect } = React; const _ = require('lodash'); const MarkdownLegacy = require('naturalcrit/markdownLegacy.js'); const Markdown = require('naturalcrit/markdown.js'); const ErrorBar = require('./errorBar/errorBar.jsx'); //TODO: move to the brew renderer const RenderWarnings = require('homebrewery/renderWarnings/renderWarnings.jsx'); const NotificationPopup = require('./notificationPopup/notificationPopup.jsx'); const Frame = require('react-frame-component').default; const dedent = require('dedent-tabs').default; const Themes = require('themes/themes.json'); const PAGE_HEIGHT = 1056; const INITIAL_CONTENT = dedent`
`; //v=====----------------------< Brew Page Component >---------------------=====v// const BrewPage = (props)=>{ props = { contents : '', index : 0, ...props }; return
; }; //v=====--------------------< Brew Renderer Component >-------------------=====v// const renderedPages = []; let rawPages = []; const BrewRenderer = (props)=>{ props = { text : '', style : '', renderer : 'legacy', theme : '5ePHB', lang : '', errors : [], currentEditorPage : 0, ...props }; const [state, setState] = useState({ viewablePageNumber : 0, height : PAGE_HEIGHT, isMounted : false, visibility : 'hidden', }); const mainRef = useRef(null); if(props.renderer == 'legacy') { rawPages = props.text.split('\\page'); } else { rawPages = props.text.split(/^\\page$/gm); } useEffect(()=>{ // Unmounting steps return ()=>{window.removeEventListener('resize', updateSize);}; }, []); const updateSize = ()=>{ setState((prevState)=>({ ...prevState, height : mainRef.current.parentNode.clientHeight, })); }; const handleScroll = (e)=>{ const target = e.target; setState((prevState)=>({ ...prevState, viewablePageNumber : Math.floor(target.scrollTop / target.scrollHeight * rawPages.length) })); }; const isInView = (index)=>{ if(!state.isMounted) return false; if(index == props.currentEditorPage) //Already rendered before this step return false; if(Math.abs(index - state.viewablePageNumber) <= 3) return true; return false; }; const sanitizeScriptTags = (content)=>{ return content ?.replace(/