{"version":3,"sources":["UWLogo.png","hg_flag.png","components/synchronizer.js","components/Raven/RavenTSUploadModal.js","tools/csvparse.js","components/TimeSeriesPlot.js","components/BlockCornerMenu.js","components/PlotPlaceholder.js","components/SeriesMenu.js","components/Raven/RavenTimeSeriesBlock.js","components/WelcomeMessage.js","components/PlotManager.js","App.js","serviceWorker.js","index.js"],"names":["module","exports","__webpack_require__","p","arraysAreEqual","a","b","Array","isArray","i","length","attachZoomHandlers","gs","syncOpts","prevCallbacks","block","updateOptions","drawCallback","me","initial","opts","dateWindow","xAxisRange","range","valueRange","yAxisRange","j","getOption","apply","this","arguments","attachSelectionHandlers","highlightCallback","event","x","points","row","seriesName","idx","getRowForX","setSelection","unhighlightCallback","clearSelection","DataUploadModal","props","_this","Object","classCallCheck","possibleConstructorReturn","getPrototypeOf","call","state","file","dataType","fileTypes","key","name","fileSelect","bind","assertThisInitialized","fileTypeChange","e","d","target","files","toLowerCase","match","setState","_this2","_this$props","open","onUpload","close","_this$state","result","fileMenuItems","map","item","index","react_default","createElement","Menu","Item","active","content","onClick","Modal","dimmer","Header","Icon","Content","Divider","hidden","Message","Input","type","onChange","accept","header","Actions","Button","color","disabled","icon","React","Component","raven_csvDate_parse","csvstring","delim","detectLineDelimiter","split","concat","shift","slice","data","line","thisline","meat","Date","parseFloat","push","TimeSeriesPlot","labels","visibility","ylabel","okey","graphSet","Dygraph","refs","dygraphInst","legend","showRangeSelector","_this$props2","height","graph","wideplot","backgroundColor","width","resize","ref","style","nextProps","prevState","JSON","stringify","cssFix","position","right","top","icoStyle","display","marginBottom","BlockCornerMenu","link","size","refresh","pholder","marginTop","marginLeft","marginRight","PlotPlaceholder","Segment","placeholder","components_BlockCornerMenu","noClose","onClose","as","textAlign","className","circular","text","primary","SeriesMenu","selected","update","indexOf","value","options","lab","vertical","ResizableBox","require","RavenTimeSeriesBlock","title","closeModal","openModal","onResize","dataImport","dataReload","readResponder","readResponderReload","updateHandler","pHeight","Math","abs","reader","FileReader","onloadend","readAsText","reloadFile","defineProperty","parsed","visible","fill","includes","toConsumableArray","RavenTSUploadModal","components_PlotPlaceholder","resizeHandles","axis","Group","raised","horizontal","components_TimeSeriesPlot","overflowY","components_SeriesMenu","WelcomeMessage","opacity","onDismiss","hideWelcome","src","UWLogo","alt","href","rel","obfuscate_default","email","headers","subject","PlotManager","nplots","allplotcount","order","graphs","showWelcome","addPlot","delPlot","gSet","ocurrent","gcurrent","console","log","ncurrent","splice","_this$state2","blocks","Raven_RavenTimeSeriesBlock","OPTIONS","selection","zoom","dygraphs","parseOpts","obj","optName","hasOwnProperty","readycount","ready","callBackTypes","k","getFunctionOption","synchronize","components_WelcomeMessage","App","logo","components_PlotManager","Boolean","window","location","hostname","ReactDOM","render","src_App_0","document","getElementById","navigator","serviceWorker","then","registration","unregister"],"mappings":"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","file":"static/js/main.2b1cddb0.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/UWLogo.1dca0909.png\";","module.exports = __webpack_public_path__ + \"static/media/hg_flag.e1e17a43.png\";","import Dygraph from 'dygraphs';\n\n/**\n * Bless the internet and the other folks who have tried to do similar things.\n * This wouldn't have worked in React without the advice of tamaramagdr:\n * https://github.com/danvk/dygraphs-es6/issues/1\n * --LS 9/20/2019\n * \n * Synchronize zooming and/or selections between a set of dygraphs.\n *\n * Usage:\n *\n * var g1 = new Dygraph(...),\n * g2 = new Dygraph(...),\n * ...;\n * var sync = Dygraph.synchronize(g1, g2, ...);\n * // charts are now synchronized\n * sync.detach();\n * // charts are no longer synchronized\n *\n * You can set options using the last parameter, for example:\n *\n * var sync = Dygraph.synchronize(g1, g2, g3, {\n * selection: true,\n * zoom: true\n * });\n *\n * The default is to synchronize both of these.\n *\n * Instead of passing one Dygraph object as each parameter, you may also pass an\n * array of dygraphs:\n *\n * var sync = Dygraph.synchronize([g1, g2, g3], {\n * selection: false,\n * zoom: true\n * });\n *\n * You may also set `range: false` if you wish to only sync the x-axis.\n * The `range` option has no effect unless `zoom` is true (the default).\n */\n\nexport default function synchronize(/* dygraphs..., opts */) {\n if (arguments.length === 0) {\n throw 'Invalid invocation of Dygraph.synchronize(). Need >= 1 argument.';\n }\n\n var OPTIONS = ['selection', 'zoom', 'range'];\n var opts = {\n selection: true,\n zoom: true,\n range: true\n };\n var dygraphs = [];\n var prevCallbacks = [];\n\n var parseOpts = function(obj) {\n if (!(obj instanceof Object)) {\n throw 'Last argument must be either Dygraph or Object.';\n } else {\n for (var i = 0; i < OPTIONS.length; i++) {\n var optName = OPTIONS[i];\n if (obj.hasOwnProperty(optName)) opts[optName] = obj[optName];\n }\n }\n };\n\n if (arguments[0] instanceof Dygraph) {\n // Arguments are Dygraph objects.\n for (var i = 0; i < arguments.length; i++) {\n if (arguments[i] instanceof Dygraph) {\n dygraphs.push(arguments[i]);\n } else {\n break;\n }\n }\n if (i < arguments.length - 1) {\n throw 'Invalid invocation of Dygraph.synchronize(). ' +\n 'All but the last argument must be Dygraph objects.';\n } else if (i == arguments.length - 1) {\n parseOpts(arguments[arguments.length - 1]);\n }\n } else if (arguments[0].length) {\n // Invoked w/ list of dygraphs, options\n for (var i = 0; i < arguments[0].length; i++) {\n dygraphs.push(arguments[0][i]);\n }\n if (arguments.length == 2) {\n parseOpts(arguments[1]);\n } else if (arguments.length > 2) {\n throw 'Invalid invocation of Dygraph.synchronize(). ' +\n 'Expected two arguments: array and optional options argument.';\n } // otherwise arguments.length == 1, which is fine.\n } else {\n throw 'Invalid invocation of Dygraph.synchronize(). ' +\n 'First parameter must be either Dygraph or list of Dygraphs.';\n }\n\n if (dygraphs.length < 2) {\n throw 'Invalid invocation of Dygraph.synchronize(). ' +\n 'Need two or more dygraphs to synchronize.';\n }\n\n var readycount = dygraphs.length;\n for (var i = 0; i < dygraphs.length; i++) {\n var g = dygraphs[i];\n g.ready( function() {\n if (--readycount == 0) {\n // store original callbacks\n var callBackTypes = ['drawCallback', 'highlightCallback', 'unhighlightCallback'];\n for (var j = 0; j < dygraphs.length; j++) {\n if (!prevCallbacks[j]) {\n prevCallbacks[j] = {};\n }\n for (var k = callBackTypes.length - 1; k >= 0; k--) {\n prevCallbacks[j][callBackTypes[k]] = dygraphs[j].getFunctionOption(callBackTypes[k]);\n }\n }\n\n // Listen for draw, highlight, unhighlight callbacks.\n if (opts.zoom) {\n attachZoomHandlers(dygraphs, opts, prevCallbacks);\n }\n\n if (opts.selection) {\n attachSelectionHandlers(dygraphs, prevCallbacks);\n }\n }\n });\n }\n\n return {\n detach: function() {\n for (var i = 0; i < dygraphs.length; i++) {\n var g = dygraphs[i];\n if (opts.zoom) {\n g.updateOptions({drawCallback: prevCallbacks[i].drawCallback});\n }\n if (opts.selection) {\n g.updateOptions({\n highlightCallback: prevCallbacks[i].highlightCallback,\n unhighlightCallback: prevCallbacks[i].unhighlightCallback\n });\n }\n }\n // release references & make subsequent calls throw.\n dygraphs = null;\n opts = null;\n prevCallbacks = null;\n }\n };\n};\n\nfunction arraysAreEqual(a, b) {\n if (!Array.isArray(a) || !Array.isArray(b)) return false;\n var i = a.length;\n if (i !== b.length) return false;\n while (i--) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n\nfunction attachZoomHandlers(gs, syncOpts, prevCallbacks) {\n var block = false;\n for (var i = 0; i < gs.length; i++) {\n var g = gs[i];\n g.updateOptions({\n drawCallback: function(me, initial) {\n if (block || initial) return;\n block = true;\n var opts = {\n dateWindow: me.xAxisRange()\n };\n if (syncOpts.range) opts.valueRange = me.yAxisRange();\n\n for (var j = 0; j < gs.length; j++) {\n if (gs[j] == me) {\n if (prevCallbacks[j] && prevCallbacks[j].drawCallback) {\n prevCallbacks[j].drawCallback.apply(this, arguments);\n }\n continue;\n }\n\n // Only redraw if there are new options\n if (arraysAreEqual(opts.dateWindow, gs[j].getOption('dateWindow')) && \n arraysAreEqual(opts.valueRange, gs[j].getOption('valueRange'))) {\n continue;\n }\n\n gs[j].updateOptions(opts);\n }\n block = false;\n }\n }, true /* no need to redraw */);\n }\n}\n\nfunction attachSelectionHandlers(gs, prevCallbacks) {\n var block = false;\n for (var i = 0; i < gs.length; i++) {\n var g = gs[i];\n\n g.updateOptions({\n highlightCallback: function(event, x, points, row, seriesName) {\n if (block) return;\n block = true;\n var me = this;\n for (var i = 0; i < gs.length; i++) {\n if (me == gs[i]) {\n if (prevCallbacks[i] && prevCallbacks[i].highlightCallback) {\n prevCallbacks[i].highlightCallback.apply(this, arguments);\n }\n continue;\n }\n var idx = gs[i].getRowForX(x);\n if (idx !== null) {\n gs[i].setSelection(idx, seriesName);\n }\n }\n block = false;\n },\n unhighlightCallback: function(event) {\n if (block) return;\n block = true;\n var me = this;\n for (var i = 0; i < gs.length; i++) {\n if (me == gs[i]) {\n if (prevCallbacks[i] && prevCallbacks[i].unhighlightCallback) {\n prevCallbacks[i].unhighlightCallback.apply(this, arguments);\n }\n continue;\n }\n gs[i].clearSelection();\n }\n block = false;\n }\n }, true /* no need to redraw */);\n }\n}\n\n","import React from 'react';\r\nimport { Modal, Icon, Button, Divider, Input, Message, Menu} from 'semantic-ui-react';\r\n\r\nclass DataUploadModal extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {file: null,\r\n dataType: null,\r\n fileTypes: [\r\n {key: 'hydrograph', name: 'Hydrograph'},\r\n {key: 'storage', name: 'Watershed Storage'},\r\n {key: 'forcing', name: 'Forcing Functions'},\r\n {key: 'custom', name: 'Custom Output'},\r\n ] };\r\n this.fileSelect = this.fileSelect.bind(this);\r\n this.fileTypeChange = this.fileTypeChange.bind(this);\r\n }\r\n\r\n fileSelect(e,d) {\r\n const file = e.target.files[0];\r\n var dataType = 'custom' // if all else fails, custom is assumed\r\n // Raven output names, by default, are pretty straight forward\r\n if (file.name.toLowerCase().match('hydrograph') !== null) {\r\n dataType = 'hydrograph';\r\n } else if (file.name.toLowerCase().match('forcing') !== null) {\r\n dataType = 'forcing';\r\n } else if (file.name.toLowerCase().match('storage') !== null) {\r\n dataType = 'storage';\r\n }\r\n this.setState({file: file,\r\n dataType: dataType});\r\n }\r\n\r\n fileTypeChange(e,d) {\r\n this.setState({dataType: d.name});\r\n }\r\n\r\n render() {\r\n const {open, onUpload, close} = this.props;\r\n const {file, fileTypes, dataType} = this.state;\r\n const result = {file : file, dataType : dataType}\r\n\r\n const fileMenuItems = fileTypes.map((item, index) =>\r\n \r\n );\r\n\r\n //const {fileSelected} = this.state;\r\n\r\n return(\r\n
\r\n \r\n \r\n Import Raven Output File\r\n \r\n \r\n Import a Raven output file you wish you visualize using Hydrolyph.\r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\n//\r\n\r\nexport default DataUploadModal;","import { detectLineDelimiter } from \"dygraphs/src/dygraph-utils\";\r\n\r\nfunction raven_csvDate_parse(csvstring) {\r\n const delim = detectLineDelimiter(csvstring)\r\n // Separate by line, then by comma\r\n csvstring = csvstring.split(delim);\r\n // Get Header\r\n let header = ['Date'].concat(csvstring.shift().split(',').slice(3));\r\n // Loop over lines adding to data array\r\n let data = []\r\n for (let line=0; line < csvstring.length; line++) {\r\n let thisline = csvstring[line].split(',');\r\n if (thisline.length > 1) {\r\n let date = new Date(thisline[1] + ' ' + thisline[2]);\r\n let meat = [date].concat(thisline.slice(3).map(parseFloat));\r\n data.push(meat);\r\n }\r\n }\r\n // Return an object\r\n return {header : header,\r\n data : data};\r\n}\r\n\r\n\r\nexport default raven_csvDate_parse;","import React from 'react';\r\nimport Dygraph from 'dygraphs';\r\nimport 'dygraphs/dist/dygraph.min.css';\r\n\r\nclass TimeSeriesPlot extends React.Component {\r\n\r\n state = {data : this.props.data,};\r\n\r\n static getDerivedStateFromProps(nextProps, prevState) {\r\n if (JSON.stringify(nextProps.data) !== JSON.stringify(prevState.data)) {\r\n return({data: nextProps.data});\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n const {data, labels, visibility, ylabel, okey, graphSet} = this.props;\r\n // Currently not bothering with a title\r\n let g = new Dygraph(this.refs.dygraphInst,\r\n data,\r\n {\r\n ylabel: ylabel,\r\n legend: 'always',\r\n showRangeSelector: true,\r\n labels: labels,\r\n visibility: visibility,\r\n });\r\n graphSet(okey, g);\r\n //this.setState({graph : g});\r\n }\r\n \r\n render() {\r\n const {data} = this.state;\r\n const {visibility, labels, height, graph} = this.props;\r\n\r\n const wideplot= {backgroundColor: '#ffffff',\r\n width: '100%',\r\n height: height,\r\n };\r\n \r\n\r\n if (graph !== null) {\r\n // Just do it - If performance becomes issue, could find smarter way that checks if update necessary\r\n graph.updateOptions({\r\n visibility: visibility,\r\n labels: labels,\r\n file: data,\r\n });\r\n graph.resize();\r\n //console.log('re-rendering. Hint: ', labels[1]);\r\n }\r\n return
\r\n }\r\n\r\n}\r\n\r\nexport default TimeSeriesPlot","import React from 'react'\r\nimport { Icon } from 'semantic-ui-react';\r\n\r\n/*\r\nProps:\r\n - close (func)\r\n - refresh (func)\r\n - disabled (bool)\r\n*/\r\n\r\nconst cssFix = {position: 'absolute',\r\n right: '2px',\r\n top: '5px'}\r\n\r\nconst icoStyle = {\r\n display: 'block',\r\n marginBottom: '10px'\r\n}\r\n\r\nconst BlockCornerMenu = (props) => (\r\n
\r\n \r\n \r\n
\r\n);\r\n\r\n// \r\n// \r\n\r\n/*\r\n \r\n \r\n \r\n)\r\n\r\nexport default PlotPlaceholder","import React from 'react'\r\nimport { Menu } from 'semantic-ui-react';\r\n\r\nclass SeriesMenu extends React.Component {\r\n state = {selected : this.props.selected}\r\n update = this.update.bind(this);\r\n\r\n update(e,d) {\r\n const {labels} = this.props;\r\n let {selected} = this.state;\r\n // Find the updated value's index and flip it\r\n let index = labels.indexOf(d.name);\r\n selected[index] = !selected[index];\r\n // Create Object for passing up\r\n let update = {name : 'visibility',\r\n value : selected}\r\n this.props.onChange(update);\r\n }\r\n\r\n static getDerivedStateFromProps(nextProps, prevState) {\r\n if (nextProps.selected !== prevState.selected) {\r\n return({selected: nextProps.selected});\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n render() {\r\n const {labels} = this.props;\r\n const {selected} = this.state;\r\n // Generate Menu items\r\n const options = labels.map((lab,index) => \r\n {lab}\r\n );\r\n\r\n return (\r\n \r\n {options}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default SeriesMenu;","import React from 'react';\r\nimport {Segment} from 'semantic-ui-react';\r\n\r\nimport DataUploadModal from './RavenTSUploadModal';\r\nimport raven_csvDate_parse from '../../tools/csvparse';\r\n//import SeriesDropdown from './SeriesDropdown';\r\nimport TimeSeriesPlot from '../TimeSeriesPlot';\r\nimport PlotPlaceholder from '../PlotPlaceholder';\r\nimport BlockCornerMenu from '../BlockCornerMenu';\r\nimport SeriesMenu from '../SeriesMenu';\r\n//import hydfile from '../example_hydrograph.csv';\r\n\r\nconst ResizableBox = require('react-resizable').ResizableBox;\r\n\r\nclass RavenTimeSeriesBlock extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {open: false,\r\n dataType: null,\r\n data: null,\r\n file: null,\r\n labels: null,\r\n title: null,\r\n visibility: null,\r\n ylabel: null};\r\n this.closeModal = this.closeModal.bind(this);\r\n this.openModal = this.openModal.bind(this);\r\n this.onResize = this.onResize.bind(this);\r\n this.dataImport = this.dataImport.bind(this);\r\n this.dataReload = this.dataReload.bind(this);\r\n this.readResponder = this.readResponder.bind(this);\r\n this.readResponderReload = this.readResponderReload.bind(this);\r\n this.updateHandler = this.updateHandler.bind(this);\r\n }\r\n\r\n closeModal() {\r\n this.setState({open : false});\r\n }\r\n\r\n openModal() {\r\n this.setState({open : true});\r\n }\r\n\r\n onResize(e,d) {\r\n const {pHeight} = this.state;\r\n if (Math.abs(d.size.height - pHeight) >= 5) {\r\n this.setState({pHeight : d.size.height});\r\n }\r\n }\r\n\r\n dataImport(e, d) {\r\n //this.closeModal();\r\n // To reduce calls to setState... (even though React is prettttty smart)\r\n this.setState({file: d.file.file,\r\n dataType: d.file.dataType,\r\n open: false});\r\n let reader = new FileReader();\r\n reader.onloadend = this.readResponder;\r\n reader.readAsText(d.file.file);\r\n }\r\n\r\n dataReload() {\r\n const reloadFile = this.state.file;\r\n // If things were better we could just use dataImport\r\n let reader = new FileReader();\r\n reader.onloadend = this.readResponderReload;\r\n reader.readAsText(reloadFile);\r\n }\r\n\r\n updateHandler(e) {\r\n this.setState({[e.name] : e.value});\r\n }\r\n\r\n readResponder(e) {\r\n const {dataType} = this.state;\r\n let parsed = raven_csvDate_parse(e.target.result);\r\n let visible = new Array(parsed['header'].length - 1).fill(false);\r\n if (dataType === 'hydrograph') {\r\n // Assume precip in 0, first hydrograph in 1\r\n visible[1] = true;\r\n // If second hydrograph is \"observed\" show it\r\n if (parsed['header'][3].includes('(observed)')) {\r\n visible[2] = true;\r\n }\r\n } else {\r\n // First value will display\r\n visible[0] = true;\r\n }\r\n this.setState({data : parsed['data'],\r\n labels: parsed['header'],\r\n title: parsed['header'][2],\r\n visibility: visible,\r\n pHeight: 340});\r\n }\r\n\r\n readResponderReload(e) {\r\n let visible = [...this.state.visibility];\r\n let parsed = raven_csvDate_parse(e.target.result);\r\n //let visible = new Array(parsed['header'].length - 1).fill(false);\r\n // If there's less/more items then we react\r\n if (visible.length > parsed['header'].length - 1) {\r\n visible.slice(0, parsed['header'].length - 1)\r\n } else if (visible.length < parsed['header'].length - 1) {\r\n visible.push(...Array((parsed['header'].length - 1) - visible.length).fill(false));\r\n }\r\n this.setState({data : parsed['data'],\r\n labels: parsed['header'],\r\n title: parsed['header'][2],\r\n visibility: visible})\r\n }\r\n\r\n render() {\r\n const {data, labels, visibility, open, pHeight, title, ylabel} = this.state;\r\n const {okey, onClose, noClose, graph, graphSet} = this.props;\r\n const cssFix = {width: '95%', marginLeft: 'auto', marginRight: 'auto', height: pHeight};\r\n\r\n return(\r\n
\r\n \r\n\r\n {data === null && }\r\n {data !== null && \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n
\r\n );\r\n }\r\n}\r\n\r\n// \r\n/*\r\n\r\n*/\r\n\r\nexport default RavenTimeSeriesBlock;","import React from 'react';\r\nimport { Message} from 'semantic-ui-react';\r\nimport Mailto from 'react-protected-mailto'\r\nimport UWLogo from '../UWLogo.png'\r\n\r\nconst WelcomeMessage = (props) => (\r\n \r\n);\r\n\r\nexport default WelcomeMessage;","import React from 'react'\r\nimport synchronize from './synchronizer';\r\nimport RavenTimeSeriesBlock from './Raven/RavenTimeSeriesBlock';\r\nimport { Icon, Button } from 'semantic-ui-react';\r\nimport WelcomeMessage from './WelcomeMessage';\r\n\r\nclass PlotManager extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {nplots: 1,\r\n allplotcount: 1,\r\n order: [1],\r\n graphs: [null],\r\n showWelcome: true\r\n }\r\n this.addPlot = this.addPlot.bind(this);\r\n this.delPlot = this.delPlot.bind(this);\r\n this.gSet = this.gSet.bind(this);\r\n this.hideWelcome = this.hideWelcome.bind(this);\r\n }\r\n\r\n addPlot() {\r\n const {nplots, allplotcount} = this.state;\r\n const ocurrent = [...this.state.order, allplotcount + 1];\r\n const gcurrent = [...this.state.graphs, null];\r\n console.log('New plot', allplotcount + 1);\r\n this.setState({nplots: nplots + 1,\r\n allplotcount: allplotcount +1,\r\n order: ocurrent,\r\n graphs: gcurrent,\r\n showWelcome: false});\r\n }\r\n\r\n delPlot(e,d) {\r\n const ncurrent = this.state.nplots;\r\n const ocurrent = [...this.state.order];\r\n const gcurrent = [...this.state.graphs];\r\n console.log('Removing plot', d.okey)\r\n ocurrent.splice(ocurrent.indexOf(d.okey),1);\r\n gcurrent.splice(ocurrent.indexOf(d.okey),1); // Should be in same place in both arrays\r\n this.setState({nplots: ncurrent -1,\r\n order: ocurrent,\r\n graphs: gcurrent});\r\n }\r\n\r\n gSet(key, graph) {\r\n const {order} = this.state;\r\n let gcurrent = [...this.state.graphs];\r\n gcurrent[order.indexOf(key)] = graph;\r\n console.log('Updating graph ',key-1)\r\n this.setState({graphs: gcurrent});\r\n }\r\n\r\n hideWelcome() {\r\n this.setState({showWelcome : false});\r\n }\r\n\r\n render() {\r\n const {nplots, order, graphs} = this.state;\r\n var {showWelcome} = this.state;\r\n // Generate blocks\r\n const blocks = order.map((key) => \r\n \r\n );\r\n\r\n // showWelcome is a POWERLESS state variable\r\n if (nplots > 1 || graphs[0] !== null) {\r\n showWelcome = false;\r\n }\r\n\r\n // Synchronize the plots\r\n if (nplots > 1 && !graphs.includes(null)) {\r\n synchronize(graphs, {zoom: true, selection: true, range: false});\r\n }\r\n\r\n console.log(showWelcome);\r\n\r\n return(\r\n
\r\n
\r\n )\r\n }\r\n\r\n}\r\n\r\nexport default PlotManager","import React from 'react';\nimport 'semantic-ui-css/semantic.min.css';\n//import 'semantic-ui-css';\nimport './App.css';\nimport PlotManager from './components/PlotManager';\nimport logo from './hg_flag.png';\n\nclass App extends React.Component {\n\n render() {\n return (\n
\n
\n \"Hydroglyph\"\n
\n \n
\n
\n \n
\n );\n }\n}\n// ABOUTHELP\n// DataImportModal\n// DyGraph\n// DataSelector\n// Settings?\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(, document.getElementById('root'));\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}