require('./brewRenderer.less'); const React = require('react'); const createClass = require('create-react-class'); const _ = require('lodash'); const cx = require('classnames'); 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 PAGE_HEIGHT = 1056; const PPR_THRESHOLD = 50; const BrewRenderer = createClass({ getDefaultProps : function() { return { text : '', renderer : '', errors : [] }; }, getInitialState : function() { const pages = this.props.text.split(/^\\page/gm); let renderer = 'legacy'; if(this.props.renderer) renderer = this.props.renderer; return { viewablePageNumber : 0, height : 0, isMounted : false, pages : pages, usePPR : pages.length >= PPR_THRESHOLD, visibility : 'hidden', renderer : renderer, initialContent : `
` }; }, height : 0, lastRender :
, componentWillUnmount : function() { window.removeEventListener('resize', this.updateSize); }, componentWillReceiveProps : function(nextProps) { const pages = nextProps.text.split(/^\\page/gm); this.setState({ pages : pages, usePPR : pages.length >= PPR_THRESHOLD }); }, updateSize : function() { this.setState({ height : this.refs.main.parentNode.clientHeight, }); }, handleScroll : function(e){ const target = e.target; this.setState((prevState)=>({ viewablePageNumber : Math.floor(target.scrollTop / target.scrollHeight * prevState.pages.length) })); }, shouldRender : function(pageText, index){ if(!this.state.isMounted) return false; const viewIndex = this.state.viewablePageNumber; if(index == viewIndex - 3) return true; if(index == viewIndex - 2) return true; if(index == viewIndex - 1) return true; if(index == viewIndex) return true; if(index == viewIndex + 1) return true; if(index == viewIndex + 2) return true; if(index == viewIndex + 3) return true; //Check for style tages if(pageText.indexOf('