{"version":3,"sources":["components/SliderSelect/SliderSelect.jsx","components/sliders/sliderdouble.jsx","components/fileexplorer/fileexplorer.jsx","pages/datadetail/inner/download.jsx","pages/datadetail/inner/information.jsx","graphs/d3/networkgraph/networkgraph.jsx","pages/datadetail/inner/pipeline.jsx","pages/datadetail/inner/external.jsx","pages/datadetail/inner/preview.jsx","pages/datadetail/datasubmenu.jsx","pages/datadetail/inner/threedmodeldownload.jsx","graphs/d3/groupedbargraph/groupedbargraph.jsx","pages/datadetail/inner/ch2018graph.jsx","pages/datadetail/inner/ch2018download.jsx","pages/datadetail/inner/remotesensingdownload.jsx","pages/datadetail/inner/locationmap.jsx","components/interp2/interp2.js","graphs/d3/heatmap/heatmap.jsx","components/sliders/slidersingle.jsx","components/sliders/sliderdoublenumber.jsx","components/loaddatasets/loaddatasets.jsx","components/reportissue/reportissue.jsx","pages/datadetail/inner/bafu.jsx","pages/datadetail/inner/display.jsx","pages/datadetail/inner/plot.jsx","pages/datadetail/inner/mapcomponent.jsx","pages/datadetail/datadetail.jsx","img/download.svg","pages/datadetail/img/mail.svg","pages/datadetail/img/calendar.svg","pages/datadetail/img/location.svg","pages/datadetail/img/git.svg","pages/datadetail/img/depth.svg","pages/datadetail/img/download.svg","pages/datadetail/img/citation.svg","pages/datadetail/img/licence.svg","pages/datadetail/img/connect.svg","components/fileexplorer/img/folder.svg","img/line.svg","img/preview.svg","img/pipe.svg","img/info.svg","img/webgis.svg","img/3d.svg","img/map.svg"],"names":["SliderSelect","state","graphid","Math","round","random","updateDomain","domain","plotSliderSelect","a","props","type","upper","lower","value","language","availability","data","undefined","options","min","max","onChange","onZoom","slider","onChangeLower","onChangeUpper","onChangeValue","this","setTimeout","window","addEventListener","removeEventListener","prevProps","prevState","id","className","Component","DateSliderDouble","formatDate","raw","Date","formatTick","ms","diff","format","event","setState","files","map","f","mindatetime","maxdatetime","style","float","clearIcon","calendarIcon","maxDate","minDate","disableClock","locale","Header","transformSize","size","dir","headerClick","selected","loading","downloadClick","onClick","d","i","Fragment","key","length","ListView","objectClick","prefix","sort","b","children","name","includes","title","e","src","folder","alt","href","target","rel","download","FileExplorer","object","path","join","filter","s","push","new_dir","promisedSetState","newState","Promise","resolve","alert","bucket","repo","pre","split","body","zip","keys","replace","axios","post","apiUrl","timesRun","interval","setInterval","clearInterval","get","status_link","status","console","log","link","document","createElement","display","download_link","targe","appendChild","click","error","file_tree","find","Download","onChangeTime","values","getTime","fileIdSelect","arr","filetype","out","filelineage","downloadFiles","url","embargo","dataset","embargoDate","datasetpassword","prompt","toLowerCase","method","responseType","ids","then","downloadUrl","URL","createObjectURL","Blob","setAttribute","remove","catch","response","getLabel","selectedFiles","datasetparameters","csv","test","dp","axis","selectedArray","licenses_id","citation","persons_id","Information","parseDate","input","date","getMonth","getFullYear","formatTime","time","parts","slice","num","dec","scripts","maintenance","script","dict","dt","starttime","toString","endtime","detail","start","end","parameters","description","reporter","rows","urlFromSsh","ssh","calendar","location","latitude","longitude","lakes_id","git","mindepth","depth","maxdepth","downloads","licence","mail","projects_id","organisations_id","NetworkGraph","plotNetworkGraph","textlabel","ticked","dragstarted","dragged","dragended","d3","active","simulation","alphaTarget","fx","fy","x","y","restart","attr","source","node","label","pop","JSON","parse","stringify","lineage","datasourcelink","rootlink","width","getBoundingClientRect","height","nodes","force","edges","strength","svg","append","selectAll","enter","call","on","text","links","isEqual","SyntaxHighlighter","registerLanguage","js","python","r","Pipeline","scriptInt","setScriptInt","renku","gitlab","renkulab","downloadlink","selectedscript","scriptType","py","scriptHeaders","k","parseInt","filterEdges","findScriptDataset","escript","edataset","filepath","shift","diagram","j","edge","unshift","github","wrapLines","lake","Preview","tableHeader","parameters_id","unit","tableBody","l","inner","len","Connect","DataSubMenu","hide","allowedStep","step","updateSelectedState","td","line","info","preview","pipe","to","webgis","ThreeDModelDownload","year","week","dates","2020","onChangeYear","onChangeWeek","parseDateFormat","day","getDate","month","parseSimpleDate","String","padStart","parseWeek","setDate","currentDate","endDate","getDay","Object","years","yearlist","weeks","sunday","toLocaleDateString","D3GroupedBarGraph","plotBarGraph","downloadGraph","titlesvg","str","XMLSerializer","serializeToString","getElementById","canvas","context","getContext","viswidth","visheight","image","Image","onerror","onload","drawImage","toDataURL","encodeURIComponent","colors","xlabel","xunits","legend","setDownloadGraph","margin","top","right","bottom","left","maingroup","subgroup","Infinity","m","range","rangeRound","paddingInner","align","y1","bandwidth","padding","color","xAxis","yAxis","plotdata","mg","subdata","sg","legendblock","offset","Ch2018Graph","lakes","period","smoothing","updateSmoothing","updateLake","timeout","lakedata","updateDepth","updatePeriod","movingAvg","array","count","qualifier","val","avg","sum","result","isNaN","index","search","ll","indexOf","inData","lake_options","listlake","lakeproperties","altitude","area","volume","lcolor","lweight","yearly","seasonal","barlegend","barcolors","stratification","yearlyConfidence","seasonalConfidence","CI_upper","CI_lower","Array","perioddict","p1","p2","p3","p4","depthdict","surface","innerWidth","ylabel","yunits","xscale","yscale","confidence","Ch2018Download","RemoteSensingDownload","selected_files","onChangeRange","sf","filelink","name_path","nc","satellite","table_inner","file","toLocaleTimeString","selectRange","LocationMap","onChangeBounds","clickPoint","onChangeFileInt","removeFile","selectFilesDatetime","plotfiles","mindt","maxdt","filecontrol","ave","toDateString","nc_name","sidebartitle","wide","datasets","rightNoScroll","preopen","content","interp2","z","Error","flat","every","isNumeric","linear","xlinear","ylinear","xnearest","ynearest","linearInterpolate","nearestInterpolate","zz","iArr","yy","interp","indexOfLower","xdata","indexOfClosest","n","parseFloat","isFinite","abs","newdiff","D3HeatMap","fullscreen","zoom","fontSize","xgraph","ygraph","mousex","mousey","idx","ads","editFontSize","toggleXgraph","dispatchEvent","Event","toggleYgraph","toggleDownload","toggleFullscreen","toggleDisplay","closest","curr","median","mid","floor","nums","gaps","columnSelect","downloadCSV","printdata","zlabel","zunits","isArray","csvContent","encodedUri","encodeURI","downloadJSON","getDomain","minarr","maxarr","thresholds","t","hover","obj","plotHeatMap","bcolor","minvalue","maxvalue","yReverse","xReverse","thresholdStep","levels","xLabel","yLabel","zLabel","xUnit","yUnit","zUnit","zMin","zMax","backgroundColor","autoDownsample","contour","setDownloadGraphDiv","heatmap","TimeLabels","xy","dxy","dxx","dyy","dyx","linedata","datax","datay","x_dots","y_dots","header","xmax","xmin","simple","plotdots","SliderSingle","valueStr","currentfile","NumberSliderDouble","tupper","tlower","onUpdate","toFixed","LoadDataSets","downloadProgress","ReportIssue","reported","modal","message","email","sensordepths","submitted","openModal","closeModal","updateState","parameter","addAllParameters","p","updateInput","updateMessage","updateEmail","toggleMaintenance","submitReport","repositories_id","from","personalizations","dynamic_template_data","template_id","issues","repo_id","deleteMaintenance","delete","updateMaintenance","submitMaintenance","componentDidMount","sd","checked","isMulti","classNamePrefix","placeholder","readOnly","Bafu","onChangeLowerX","onChangeX","upperX","onChangeUpperX","lowerX","graph","yScale","minX","maxX","dropdown","lang","lang_map","en","de","fr","it","ylabel_info","zlabel_info","yi","yaxis_dict","dp1","yaxis","dp2","xaxis","box","grid","border","Display","calculateMovingAverage","windowSize","movingAverages","windowStart","average","reduce","acc","head","xmlns","xmlnsXlink","preserveAspectRatio","viewBox","fill","xlinkHref","curve","Graph","lowerZ","upperZ","timeaxis","xScale","x2label","x2units","y2label","y2units","Sidebar","zaxis","addNewFiles","xoptions","yoptions","zoptions","handleAxisSelect","handleAxisAppend","AxisSelect","dataList","defaultValue","disabled","newFeature","Compare","units","selectable","concat","Set","o","Range","onChangeLowerY","onChangeY","upperY","onChangeUpperY","lowerY","onChangeFile","connect","minY","maxY","downloadData","toggleAddNewFile","fileControl","DisplayOptions","mask","decimate","interpolate","toggleMask","togglePlotdots","resetLower","minZ","resetUpper","maxZ","onChangeDecimate","onChangeInterpolate","onChangeAverage","onChangexScale","onChangeyScale","onChangeLocalColors","onChangeLocalTitle","onChangeLocalThreshold","onChangeLocalMin","onChangeLocalMax","onChangeLocalBcolor","updatePlot","onChangeState","updateZ","interpolate_options","colSpan","op","Plot","point","refresh","failed","downloadMultipleFiles","toDownload","parseColor","colorname","colorparse","colorlist","c","findLink","setAxisOptions","xdp","ydp","extra","Number","isInteger","shape","getAxisLabels","zdp","axisEdit","getBounds","maskArray","maskArr","addMaintenance","selectAxisAndMask","iter","pd","maskaxis","apply","findaxis","ax","findmask","axp","maintenance_ids","datasetparameters_id","findIndex","depths","pdx","pdy","joinData","joinLinegraphData","reorderMultipleLines","joinHeatmapData","relabelDataObject","lines","roundFactor","factor","hours","getHours","average1D","tx","ox","arrDict","average2D","bounds","zt","averageData","decimate1D","decimate2D","decimateData","sliceXArray","item","sliceYArray","sliceXYArray","sliceData","dataout","dataoutX","dataoutY","addGaps","gap","splice","processPlotData","getZBounds","interpolate2D","filterData","getInitialBounds","plotproperties","zdomain","yextents","ya","ydomain","xextents","xa","xdomain","processUrlAxis","validAxis","xxaxis","yyaxis","processUrlBounds","newLower","dataJoined","minB","maxB","minA","maxA","fileChange","iframe","MapComponent","mapplotfunction","timestep","defaults","param","center","datetime","hidelayerbutton","DataDetail","selection","innerLoading","addnewfiles","dataArray","_isMounted","downloadFile","cleanData","newfile","isInt","filedict","newfiles","confirm","fileid","fileList","prop","parameterDetails","numDescending","numA","numB","compare","dataBounds","xe","addAverageTime","addFileLocation","fileBounds","getAve","getMax","getMin","merge2DArray","merged","innerMerge","customizer","objValue","srcValue","getShape","bucket_url","level","forEach","dataset_id","pathname","searchArr","all","server","serverlessUrl","v","getFileTree","details","characteristic","err","all_files","temp","af","monitor","module","exports"],"mappings":"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","file":"static/js/5.ab1b0df1.chunk.js","sourcesContent":["import React, { Component } from \"react\";\nimport slider from \"interactive-slider\";\nimport \"./SliderSelect.css\";\n\nclass SliderSelect extends Component {\n state = {\n graphid: Math.round(Math.random() * 100000),\n };\n\n updateDomain = (domain) => {\n this.domain = domain;\n };\n\n plotSliderSelect = async () => {\n var { graphid } = this.state;\n var {\n type,\n upper,\n lower,\n value,\n language,\n data: availability,\n } = this.props;\n if (language === undefined) language = \"en\";\n var options = {\n type,\n min: this.domain[0],\n max: this.domain[1],\n availability,\n onChange: this.onChange,\n onZoom: this.updateDomain,\n language,\n };\n\n if (type === \"single\") {\n options[\"value\"] = value;\n } else {\n options[\"lower\"] = lower;\n options[\"upper\"] = upper;\n }\n slider(\"sliderselect\" + graphid, options);\n };\n\n onChange = (value) => {\n var { onChangeLower, onChangeUpper, onChangeValue, type, upper, lower } =\n this.props;\n if (type === \"single\") {\n onChangeValue(value[0]);\n } else {\n if (lower !== value[0]) {\n onChangeLower(value[0]);\n } else if (upper !== value[1]) {\n onChangeUpper(value[1]);\n }\n }\n };\n\n componentDidMount() {\n this.domain = [this.props.min, this.props.max];\n setTimeout(this.plotSliderSelect, 10);\n window.addEventListener(\"resize\", this.plotSliderSelect, false);\n }\n\n componentWillUnmount() {\n window.removeEventListener(\"resize\", this.plotSliderSelect, false);\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (prevProps.min !== this.props.min && prevProps.min === 0)\n this.domain[0] = this.props.min;\n if (prevProps.max !== this.props.max && prevProps.max === 1)\n this.domain[1] = this.props.max;\n setTimeout(this.plotSliderSelect, 10);\n }\n render() {\n var { graphid } = this.state;\n return <div id={\"sliderselect\" + graphid} className=\"sliderselect\" />;\n }\n}\n\nexport default SliderSelect;\n","import React, { Component } from \"react\";\nimport DateTimePicker from \"react-datetime-picker\";\nimport { format } from \"date-fns\";\nimport \"./slider.css\";\nimport SliderSelect from \"../SliderSelect/SliderSelect\";\n\nclass DateSliderDouble extends Component {\n state = {\n upper: this.props.upper,\n lower: this.props.lower,\n };\n formatDate = (raw) => {\n return new Date(raw * 1000);\n };\n\n formatTick = (ms) => {\n const { min, max } = this.props;\n const diff = max - min;\n if (diff < 172800) {\n // 3 Days\n return format(new Date(ms), \"hh:mm:ss\");\n } else if (diff < 31556952) {\n // 1 Year\n return format(new Date(ms), \"dd MMM\");\n } else if (diff < 157784760) {\n // 5 Years\n return format(new Date(ms), \"MMM yy\");\n } else {\n return format(new Date(ms), \"yyyy\");\n }\n };\n\n onChangeLower = (event) => {\n if (event instanceof Date) {\n this.props.onChangeLower(event);\n }\n };\n\n onChangeUpper = (event) => {\n if (event instanceof Date) {\n this.props.onChangeUpper(event);\n }\n };\n\n onChange = (event) => {\n var lower = event[0];\n var upper = event[1];\n if (lower !== this.state.lower || upper !== this.state.upper) {\n this.props.onChange(event);\n this.setState({ upper, lower });\n }\n };\n\n render() {\n var {\n min,\n max,\n lower,\n upper,\n onChangeLower,\n onChangeUpper,\n files,\n language,\n } = this.props;\n min = this.formatDate(min);\n max = this.formatDate(max);\n lower = this.formatDate(lower);\n upper = this.formatDate(upper);\n const availability = files.map((f) => [\n new Date(f.mindatetime),\n new Date(f.maxdatetime),\n ]);\n\n return (\n <div className=\"datetime-selector\">\n {onChangeLower && (\n <div className=\"datetime-picker\">\n <div className=\"datetime-value\" style={{ float: \"left\" }}>\n <DateTimePicker\n onChange={this.onChangeLower}\n value={lower}\n clearIcon={null}\n calendarIcon={null}\n maxDate={upper}\n minDate={min}\n disableClock={true}\n format={\"dd.MM.y H:mm\"}\n locale={language}\n />\n </div>\n <div className=\"datetime-value\">{\">\"}</div>\n <div className=\"datetime-value\" style={{ float: \"right\" }}>\n <DateTimePicker\n onChange={this.onChangeUpper}\n value={upper}\n clearIcon={null}\n calendarIcon={null}\n maxDate={max}\n minDate={lower}\n disableClock={true}\n format={\"dd.MM.y H:mm\"}\n locale={language}\n />\n </div>\n </div>\n )}\n <SliderSelect\n type=\"double\"\n min={min}\n max={max}\n lower={lower}\n upper={upper}\n data={availability}\n onChangeLower={onChangeLower}\n onChangeUpper={onChangeUpper}\n language={language}\n />\n </div>\n );\n }\n}\n\nexport default DateSliderDouble;\n","import React, { Component } from \"react\";\nimport folder from \"./img/folder.svg\";\nimport download from \"../../img/download.svg\";\nimport axios from \"axios\";\nimport { apiUrl } from \"../../config.json\";\nimport \"./fileexplorer.css\";\n\nclass Header extends Component {\n transformSize = (size) => {\n if (size < 1000) {\n return `${Math.round(size)} B`;\n } else if (size < 1000000) {\n return `${Math.round((size / 1000) * 10) / 10} kB`;\n }\n if (size < 1000000000) {\n return `${Math.round((size / 1000000) * 10) / 10} MB`;\n } else {\n return `${Math.round((size / 1000000000) * 10) / 10} GB`;\n }\n };\n render() {\n var { dir, headerClick, selected, size, loading, downloadClick } =\n this.props;\n return (\n <div className=\"file-explorer-header-inner\">\n <div\n className=\"file-explorer-header-inner-object home\"\n onClick={() => headerClick(\"\")}\n >\n data\n </div>\n {dir.map((d, i) => (\n <React.Fragment key={`header_${d}_${i}`}>\n /\n <div\n className=\"file-explorer-header-inner-object\"\n onClick={() => headerClick(d)}\n >\n {d}\n </div>\n </React.Fragment>\n ))}\n <div\n className={\n loading\n ? \"file-explorer-header-inner-selected active\"\n : \"file-explorer-header-inner-selected\"\n }\n >\n {loading ? (\n <React.Fragment>\n <div className=\"lds-ring\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div>\n <div className=\"lds-text\">Zipping files...</div>\n </React.Fragment>\n ) : (\n <div onClick={downloadClick}>\n Download {selected.length} selected files (\n {this.transformSize(size)})\n </div>\n )}\n </div>\n </div>\n );\n }\n}\n\nclass ListView extends Component {\n transformSize = (size) => {\n if (size < 1000) {\n return `${Math.round(size)} B`;\n } else if (size < 1000000) {\n return `${Math.round((size / 1000) * 10) / 10} kB`;\n }\n if (size < 1000000000) {\n return `${Math.round((size / 1000000) * 10) / 10} MB`;\n } else {\n return `${Math.round((size / 1000000000) * 10) / 10} GB`;\n }\n };\n render() {\n var { files, objectClick, prefix, dir, selected } = this.props;\n\n files.sort((a, b) => {\n if (a.children.length === 0 && b.children.length !== 0) {\n return 1;\n } else if (b.children.length === 0 && a.children.length !== 0) {\n return -1;\n } else {\n return a.name > b.name ? 1 : -1;\n }\n });\n return (\n <div className=\"file-explorer-content-list\">\n {files.map((f, i) => (\n <div\n className={\n f.children.length > 0\n ? \"file-explorer-content-list-object folder\"\n : selected.includes(`${dir}/${f.name}`)\n ? \"file-explorer-content-list-object selected\"\n : \"file-explorer-content-list-object\"\n }\n title=\"Select file\"\n onClick={(e) => objectClick(f, e)}\n key={`list_${f.name}_${i}`}\n >\n <div className=\"list-object-img\">\n {f.children.length > 0 ? (\n <img src={folder} alt=\"Folder\" />\n ) : (\n <a\n href={`${prefix}/${f.name}`}\n title=\"Download file\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <img src={download} alt=\"Download file\" id=\"download\" />\n </a>\n )}\n </div>\n <div className=\"list-object-name\">{f.name}</div>\n <div className=\"list-object-size\">\n {f.children.length > 0 ? \"-\" : this.transformSize(f.size)}\n </div>\n </div>\n ))}\n </div>\n );\n }\n}\n\nclass FileExplorer extends Component {\n state = {\n dir: [],\n selected: [],\n size: 0,\n loading: false,\n };\n objectClick = (object, event) => {\n if (event.target.id === \"download\") return;\n var { dir, selected, size } = this.state;\n if (object.children.length === 0) {\n let path = `${dir.join(\"/\")}/${object.name}`;\n if (selected.includes(path)) {\n selected = selected.filter((s) => s !== path);\n size = size - object.size;\n } else {\n selected.push(path);\n size = size + object.size;\n }\n this.setState({ selected, size });\n } else {\n dir.push(object.name);\n this.setState({ dir });\n }\n };\n headerClick = (folder) => {\n var { dir } = this.state;\n var new_dir = [];\n if (folder === \"\") {\n this.setState({ dir: [], selected: [] });\n } else {\n for (let i = 0; i < dir.length; i++) {\n new_dir.push(folder);\n if (dir[i] === folder) {\n break;\n }\n }\n this.setState({ dir: new_dir });\n }\n };\n promisedSetState = (newState) =>\n new Promise((resolve) => this.setState(newState, resolve));\n downloadClick = async () => {\n const { selected, size } = this.state;\n if (size > 2000000000) {\n alert(\n \"The download interface can only be used for downloading < 200 MB of data. Please use the scripts provided in the git repository to download larger volumes.\"\n );\n return\n }\n if (selected.length > 0) {\n const { bucket, repo, prefix } = this.props;\n var pre = prefix.split(\".com/\")[1];\n await this.promisedSetState({ loading: true });\n try {\n var body = {\n bucket,\n zip: repo,\n keys: selected.map((s) => `${pre}/${s}`.replace(\"//\", \"/\")),\n };\n const { data } = await axios.post(apiUrl + \"/s3zip\", body);\n var timesRun = 0;\n var interval = setInterval(async () => {\n timesRun += 1;\n if (timesRun === 20) {\n clearInterval(interval);\n alert(\"Request timed out, please try with less data.\");\n }\n try {\n var { data: status } = await axios.get(data.status_link);\n } catch (e) {\n console.log(\"Link not yet generated.\");\n }\n if (status === \"Complete\") {\n clearInterval(interval);\n const link = document.createElement(\"a\");\n link.style.display = \"none\";\n link.href = data.download_link;\n link.targe = \"_blank\";\n document.body.appendChild(link);\n link.click();\n this.setState({ selected: [], size: 0, loading: false });\n }\n }, 1000);\n } catch (e) {\n console.error(e);\n alert(\"Download failed.\");\n this.setState({ selected: [], size: 0, loading: false });\n }\n }\n };\n render() {\n var { dir, selected, size, loading } = this.state;\n var { prefix } = this.props;\n\n var files = this.props.file_tree;\n for (let i = 0; i < dir.length; i++) {\n files = files.find((f) => f.name === dir[i]).children;\n }\n return (\n <div className=\"file-explorer\">\n <div className=\"file-explorer-header\">\n <Header\n dir={dir}\n headerClick={this.headerClick}\n downloadClick={this.downloadClick}\n selected={selected}\n size={size}\n loading={loading}\n />\n </div>\n <div className=\"file-explorer-content\">\n <ListView\n files={files}\n objectClick={this.objectClick}\n prefix={`${prefix}${dir.length > 0 ? \"/\" : \"\"}${dir.join(\"/\")}`}\n dir={dir.join(\"/\")}\n selected={selected}\n />\n </div>\n </div>\n );\n }\n}\n\nexport default FileExplorer;\n","import React, { Component } from \"react\";\nimport SliderDouble from \"../../../components/sliders/sliderdouble\";\nimport Loading from \"../../../components/loading/loading\";\nimport FileExplorer from \"../../../components/fileexplorer/fileexplorer\";\nimport { bucket } from \"../../../../src/config.json\";\nimport axios from \"axios\";\nimport \"../css/datadetail.css\";\n\nclass Download extends Component {\n state = {\n upper: this.props.max,\n lower: this.props.min,\n loading: false,\n };\n\n onChangeTime = (values) => {\n const lower = values[0] / 1000;\n const upper = values[1] / 1000;\n if (\n Math.round(lower) !== Math.round(this.state.lower) ||\n Math.round(upper) !== Math.round(this.state.upper)\n ) {\n this.setState({ lower, upper });\n }\n };\n\n onChangeUpper = (value) => {\n var upper = value.getTime() / 1000;\n this.setState({ upper });\n };\n\n onChangeLower = (value) => {\n var lower = value.getTime() / 1000;\n this.setState({ lower });\n };\n\n fileIdSelect = (arr, filetype) => {\n var { files } = this.props;\n var out = [];\n if (filetype === \"nc\") {\n for (var i = 0; i < arr.length; i++) {\n out.push(files[arr[i]].filelineage);\n }\n } else {\n for (i = 0; i < arr.length; i++) {\n out.push(files[arr[i]].id);\n }\n }\n\n return out;\n };\n\n downloadFiles = (filetype, apiUrl, arr, title) => {\n this.setState({ loading: true }, () => {\n arr = this.fileIdSelect(arr, filetype);\n var { embargo } = this.props.dataset;\n var { upper } = this.state;\n var embargoDate =\n new Date().getTime() - embargo * 30.4167 * 24 * 60 * 60 * 1000;\n var datasetpassword = \"\";\n if (upper * 1000 > embargoDate) {\n datasetpassword = prompt(\n \"Selection contains embargoed data. (after \" +\n new Date(embargoDate) +\n \") Please enter the password to download data.\"\n );\n }\n var url;\n if (filetype === \"csv\") {\n url = `${apiUrl}/download/csv?password=${datasetpassword}`;\n } else {\n url = `${apiUrl}/download?password=${datasetpassword}`;\n }\n var name =\n title.replace(/\\s/g, \"\").toLowerCase() + \"_datalakesdownload.zip\";\n axios({\n method: \"post\",\n url: url,\n responseType: \"blob\",\n data: { ids: arr },\n })\n .then(({ data }) => {\n const downloadUrl = window.URL.createObjectURL(new Blob([data]));\n const link = document.createElement(\"a\");\n link.href = downloadUrl;\n link.setAttribute(\"download\", name);\n document.body.appendChild(link);\n link.click();\n link.remove();\n this.setState({ loading: false });\n })\n .catch((error) => {\n console.error(error);\n this.setState({ loading: false });\n if (error.response !== undefined && error.response.status === 403) {\n alert(\"Incorrect password provided\");\n } else {\n alert(\n \"Failed to download files, please select fewer files or access data directly from the git repository (a link can be found under the information tab).\"\n );\n }\n });\n });\n };\n\n render() {\n const {\n getLabel,\n dataset,\n apiUrl,\n min,\n max,\n files,\n selectedFiles,\n datasetparameters,\n file_tree,\n prefix,\n repo,\n } = this.props;\n var { upper, lower, loading } = this.state;\n var csv =\n !/\\d/.test(datasetparameters.map((dp) => dp.axis).join(\"\")) ||\n !datasetparameters\n .map((dp) => dp.axis)\n .join(\"\")\n .includes(\"z\");\n var selectedArray = [0];\n if (files.length > 1) {\n selectedArray = selectedFiles(upper, lower, files, \"download\");\n }\n\n return (\n <div className=\"download\">\n <div className=\"info-title\">Licence</div>\n <a\n href={getLabel(\"licenses\", dataset.licenses_id, \"link\")}\n title={getLabel(\"licenses\", dataset.licenses_id, \"description\")}\n >\n {getLabel(\"licenses\", dataset.licenses_id, \"name\")}\n </a>\n <div className=\"info-title\">Citation</div>\n {dataset.citation}\n\n {dataset.embargo > 0 && (\n <div>\n <div className=\"info-title\">Embargo Period</div>\n Data more recent than {dataset.embargo} months requires a password\n to download. <br />\n Please contact {getLabel(\"persons\", dataset.persons_id, \"email\")} to\n request access to this data.\n </div>\n )}\n\n <div className=\"info-title\">Download</div>\n <div>\n Select all files for a given time period.\n <div className=\"multipledownload\">\n {files.length > 1 && (\n <div>\n {loading && (\n <div className=\"download-loading\">\n Sending download request...\n <Loading />\n </div>\n )}\n <SliderDouble\n onChange={this.onChangeTime}\n onChangeLower={this.onChangeLower}\n onChangeUpper={this.onChangeUpper}\n min={min}\n max={max}\n lower={lower}\n upper={upper}\n files={files}\n />\n <div className=\"selected-download\">\n {selectedArray.length} of {files.length} files selected for\n download.\n </div>\n </div>\n )}\n\n <div className=\"subheading\">Select file type for download.</div>\n <button\n onClick={() =>\n this.downloadFiles(\"nc\", apiUrl, selectedArray, dataset.title)\n }\n className=\"download-button\"\n title=\"Download datasets in NetCDF format\"\n >\n NetCDF\n </button>\n <button\n onClick={() =>\n this.downloadFiles(\"json\", apiUrl, selectedArray, dataset.title)\n }\n className=\"download-button\"\n title=\"Download datasets in JSON format\"\n >\n JSON\n </button>\n {csv && (\n <button\n onClick={() =>\n this.downloadFiles(\n \"csv\",\n apiUrl,\n selectedArray,\n dataset.title\n )\n }\n className=\"download-button\"\n title=\"Download datasets in CSV format\"\n >\n CSV (Beta)\n </button>\n )}\n </div>\n </div>\n\n {file_tree.length > 0 && (\n <div>\n Explore all files in the repository.\n <table>\n <tbody>\n <tr>\n <th>Level 0</th>\n <td>Raw data</td>\n </tr>\n <tr>\n <th>Level 1</th>\n <td>Reformatted to NetCDF and quality assurance applied</td>\n </tr>\n <tr>\n <th>Level 2</th>\n <td>Resampled, interpolated, combined or further processed datasets</td>\n </tr>\n </tbody>\n </table>\n <div className=\"download-fileexplorer\">\n <FileExplorer\n file_tree={file_tree}\n prefix={prefix}\n bucket={bucket.name}\n repo={repo}\n />\n </div>\n </div>\n )}\n\n <div className=\"info-title\">Parse Data</div>\n <div className=\"parsedata\">\n <p>\n Data is provided as a Zip file containing the files (in the format\n you have specified) for the selected time period.\n </p>\n <b>Date and Time</b>\n <p>\n Datetime is in Unix time format (\n <a\n href=\"https://www.unixtimestamp.com/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n details\n </a>\n ). Most languages have a function for parsing this format to a\n datetime object.\n </p>\n <table>\n <tbody>\n <tr>\n <th>Python</th>\n <td></td>\n <td>\n from datetime import datetime <br /> dt =\n datetime.utcfromtimestamp(unixdatetime)\n </td>\n </tr>\n <tr>\n <th>R</th>\n <td></td>\n <td>\n library(anytime) <br /> dt {\"<\"}- anytime(unixdatetime)\n </td>\n </tr>\n <tr>\n <th>Javascript</th>\n <td></td>\n <td>var dt = new Date(unixdatetime * 1000)</td>\n </tr>\n </tbody>\n </table>\n <b>Reading from NetCDF</b>\n <p>\n There are a number of resources that give detailed information on\n how to read and interact with NetCDF files. Linked below are some\n suggested resources.\n </p>\n <table>\n <tbody>\n <tr>\n <th>Python</th>\n <td></td>\n <td>\n <a\n href=\"https://unidata.github.io/netcdf4-python/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n https://unidata.github.io/netcdf4-python/\n </a>\n </td>\n </tr>\n <tr>\n <th>R</th>\n <td></td>\n <td>\n <a\n href=\"https://cran.r-project.org/web/packages/ncdf4/ncdf4.pdf\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n https://cran.r-project.org/web/packages/ncdf4/ncdf4.pdf\n </a>\n </td>\n </tr>\n <tr>\n <th>Javascript</th>\n <td></td>\n <td>\n <a\n href=\"https://github.com/cheminfo/netcdfjs\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n https://github.com/cheminfo/netcdfjs\n </a>\n </td>\n </tr>\n </tbody>\n </table>\n <b>Reading from JSON</b>\n <p>\n JSON is the native format of Javascript, data is stored in this\n format to allow fast access to the data for visualistion on the web\n platform. Significantly more metadata is available in the NetCDF\n file. As with datetime, most languages have a native import function\n for JSON.\n </p>\n </div>\n </div>\n );\n }\n}\n\nexport default Download;\n","import React, { Component } from \"react\";\nimport ReactMarkdown from \"react-markdown\";\nimport mail from \"../img/mail.svg\";\nimport calendar from \"../img/calendar.svg\";\nimport location from \"../img/location.svg\";\nimport git from \"../img/git.svg\";\nimport depth from \"../img/depth.svg\";\nimport download from \"../img/download.svg\";\nimport citation from \"../img/citation.svg\";\nimport licence from \"../img/licence.svg\";\nimport { urlFromSsh } from '../../../functions';\nimport \"../css/datadetail.css\";\n\n\nclass Information extends Component {\n state = {};\n\n parseDate = (input) => {\n var months = [\n \"Jan \",\n \"Feb \",\n \"Mar \",\n \"Apr \",\n \"May \",\n \"Jun \",\n \"Jul \",\n \"Aug \",\n \"Sept \",\n \"Oct \",\n \"Nov \",\n \"Dec \",\n ];\n var date = new Date(input);\n return months[date.getMonth()] + date.getFullYear();\n };\n\n formatTime = (time) => {\n let parts = time.split(\"T\");\n return parts[0] + \" \" + parts[1].slice(0, 5);\n };\n\n round = (num, dec) => {\n return Math.round(num * 10 ** dec) / 10 ** dec;\n };\n\n render() {\n const { dataset, getLabel, scripts, maintenance } = this.props;\n var script = scripts.filter((s) => s.name.includes(\".md\"));\n var dict = {};\n for (let i = 0; i < maintenance.length; i++) {\n let dt =\n maintenance[i].starttime.toString() + maintenance[i].endtime.toString();\n if (dt in dict) {\n dict[dt][\"parameters\"].push(\n maintenance[i].name +\n (maintenance[i].detail !== \"none\"\n ? ` (${maintenance[i].detail})`\n : \"\")\n );\n dict[dt][\"id\"].push(maintenance[i].id);\n } else {\n dict[dt] = {\n start: maintenance[i].starttime,\n end: maintenance[i].endtime,\n parameters: [\n maintenance[i].name +\n (maintenance[i].detail !== \"none\"\n ? ` (${maintenance[i].detail})`\n : \"\"),\n ],\n description: maintenance[i].description,\n id: [maintenance[i].id],\n reporter: maintenance[i].reporter,\n };\n }\n }\n\n var rows = [];\n for (var key in dict) {\n rows.push(\n <tr key={key}>\n <td>{this.formatTime(dict[key].start)}</td>\n <td>{this.formatTime(dict[key].end)}</td>\n <td>{dict[key].parameters.join(\", \")}</td>\n <td>{dict[key].description}</td>\n <td>{dict[key].reporter}</td>\n </tr>\n );\n }\n urlFromSsh(dataset.ssh)\n return (\n <React.Fragment>\n <div className=\"info-mation\">\n <div className=\"description\">\n <div className=\"data-row\">\n <img src={calendar} alt=\"calendar\" />{\" \"}\n {this.parseDate(dataset.mindatetime)} to{\" \"}\n {this.parseDate(dataset.maxdatetime)}\n </div>\n <div className=\"data-row\">\n <img src={location} alt=\"location\" />\n <a\n href={`https://www.google.com/maps/search/${dataset.latitude},${dataset.longitude}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {getLabel(\"lakes\", dataset.lakes_id, \"name\")} [\n {this.round(dataset.latitude, 3)},{\" \"}\n {this.round(dataset.longitude, 3)}]\n </a>\n </div>\n <div className=\"data-row\">\n <img src={git} alt=\"git\" />\n <a\n href={urlFromSsh(dataset.ssh)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Link to Git Repository\n </a>\n </div>\n {dataset.mindepth !== \"-9999\" && (\n <div className=\"data-row\">\n <img src={depth} alt=\"depth\" />\n {`${this.round(dataset.mindepth, 3)}m to ${this.round(\n dataset.maxdepth,\n 3\n )}m`}\n </div>\n )}\n {dataset.downloads > 10 && (\n <div className=\"data-row\">\n <img src={download} alt=\"download\" /> {dataset.downloads}{\" \"}\n downloads\n </div>\n )}\n <div className=\"data-row\">\n <img src={licence} alt=\"licence\" />\n <a\n href={getLabel(\"licenses\", dataset.licenses_id, \"link\")}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n title={getLabel(\"licenses\", dataset.licenses_id, \"description\")}\n >\n {getLabel(\"licenses\", dataset.licenses_id, \"name\")}\n </a>\n </div>\n <div className=\"data-row\">\n <img src={citation} alt=\"citation\" />\n {dataset.citation}\n </div>\n </div>\n <React.Fragment>\n {maintenance.length > 0 ? (\n <div className=\"description\">\n <div className=\"desc-header\">Reported maintenance periods:</div>\n <table>\n <tbody>\n <tr>\n <th>Start</th>\n <th>End</th>\n <th>Parameters</th>\n <th>Description</th>\n <th>Reporter</th>\n </tr>\n {rows}\n </tbody>\n </table>\n <div className=\"desc-warning\">WARNING: Reported maintenance periods are masked on Datalakes however may not be in the downloadable files.</div>\n </div>\n ) : (\n \"\"\n )}\n </React.Fragment>\n <div className=\"readme\">\n {script.length === 1 ? (\n <ReactMarkdown>{script[0].data}</ReactMarkdown>\n ) : (\n <React.Fragment>{dataset.description}</React.Fragment>\n )}\n </div>\n <div className=\"info-contact\">\n <div className=\"contact-header\">Questions about the dataset?</div>\n <div className=\"contact-inner\">\n <div className=\"contact-icon\">\n <img src={mail} alt=\"mail\" />\n </div>\n <div className=\"contact-text\">\n <div className=\"contact-name\">\n {getLabel(\"persons\", dataset.persons_id, \"name\")}\n </div>\n <div className=\"contact-email\">\n {getLabel(\"persons\", dataset.persons_id, \"email\")}\n </div>\n <div className=\"contact-job\">\n {getLabel(\"projects\", dataset.projects_id, \"name\")},{\" \"}\n {getLabel(\"organisations\", dataset.organisations_id, \"name\")}\n </div>\n </div>\n </div>\n </div>\n </div>\n </React.Fragment>\n );\n }\n}\n\nexport default Information;\n","import React, { Component } from \"react\";\nimport * as d3 from \"d3\";\nimport isEqual from \"lodash/isEqual\";\nimport \"./networkgraph.css\";\n\nclass NetworkGraph extends Component {\n plotNetworkGraph = async () => {\n try {\n d3.select(\"#networksvg\").remove();\n } catch (e) {}\n if (this.props.data) {\n try {\n var { data, dataset } = this.props;\n data = JSON.parse(JSON.stringify(data.data.lineage));\n\n // Repo link\n var url = dataset.datasourcelink.split(\"blob/\");\n var rootlink = url[0] + \"blob/\" + url[1].split(\"/\")[0] + \"/\";\n\n // Set graph size\n var width = d3.select(\"#vis\").node().getBoundingClientRect().width;\n var height = d3.select(\"#vis\").node().getBoundingClientRect().height;\n\n const simulation = d3\n .forceSimulation(data.nodes)\n .force(\n \"link\",\n d3.forceLink(data.edges).id((d) => d.id)\n )\n .force(\"charge\", d3.forceManyBody().strength(-400))\n .force(\"x\", d3.forceX())\n .force(\"y\", d3.forceY());\n\n // Adds the svg canvas\n var svg = d3\n .select(\"#vis\")\n .append(\"svg\")\n .attr(\"id\", \"networksvg\")\n .attr(\"viewBox\", [-width / 3, -height / 3, width, height]);\n\n svg\n .append(\"defs\")\n .append(\"marker\")\n .attr(\"id\", \"marker\")\n .attr(\"viewBox\", \"0 -5 10 10\")\n .attr(\"refX\", 25)\n .attr(\"refY\", 0)\n .attr(\"markerWidth\", 6)\n .attr(\"markerHeight\", 6)\n .attr(\"orient\", \"auto\")\n .append(\"path\")\n .attr(\"d\", \"M0,-5L10,0L0,5\");\n\n var link = svg\n .append(\"g\")\n .attr(\"class\", \"links\")\n .selectAll(\"line\")\n .data(data.edges)\n .enter()\n .append(\"line\")\n .attr(\"stroke-width\", \"2\")\n .attr(\"stroke\", \"black\")\n .attr(\"marker-end\", \"url(#marker)\");\n\n var node = svg\n .append(\"g\")\n .attr(\"class\", \"nodes\")\n .selectAll(\"g\")\n .data(data.nodes)\n .enter()\n .append(\"g\");\n\n node\n .append(\"circle\")\n .attr(\"r\", function (d) {\n if (d.id.includes(\".cwl\")) {\n return 2;\n } else {\n return 10;\n }\n })\n .attr(\"fill\", \"white\")\n .attr(\"stroke-width\", \"1\")\n .attr(\"stroke\", \"black\")\n .call(\n d3\n .drag()\n .on(\"start\", dragstarted)\n .on(\"drag\", dragged)\n .on(\"end\", dragended)\n );\n\n node\n .append(\"a\")\n .attr(\"xlink:href\", function (d) {\n return rootlink + d.id;\n })\n .append(\"text\")\n .text(textlabel)\n .attr(\"x\", 12)\n .attr(\"y\", 5);\n\n simulation.nodes(data.nodes).on(\"tick\", ticked);\n\n simulation.force(\"link\").links(data.edges);\n\n function textlabel(label) {\n if (label.id.includes(\".cwl\")) {\n return \"\";\n } else {\n label = label.id.split(\"/\");\n label = label.pop();\n return label;\n }\n }\n\n function ticked() {\n link\n .attr(\"x1\", function (d) {\n return d.source.x;\n })\n .attr(\"y1\", function (d) {\n return d.source.y;\n })\n .attr(\"x2\", function (d) {\n return d.target.x;\n })\n .attr(\"y2\", function (d) {\n return d.target.y;\n });\n\n node.attr(\"transform\", function (d) {\n return \"translate(\" + d.x + \",\" + d.y + \")\";\n });\n }\n function dragstarted(event, d) {\n if (!event.active) simulation.alphaTarget(0.3).restart();\n d.fx = d.x;\n d.fy = d.y;\n }\n\n function dragged(event, d) {\n d.fx = event.x;\n d.fy = event.y;\n }\n\n function dragended(event, d) {\n if (!event.active) simulation.alphaTarget(0);\n d.fx = null;\n d.fy = null;\n }\n } catch (e) {\n console.error(e);\n }\n }\n };\n\n componentDidMount() {\n this.plotNetworkGraph();\n window.addEventListener(\"resize\", this.plotNetworkGraph, false);\n }\n\n componentWillUnmount() {\n window.removeEventListener(\"resize\", this.plotNetworkGraph, false);\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (!isEqual(prevProps, this.props)) {\n this.plotNetworkGraph();\n }\n }\n\n render() {\n return (\n <React.Fragment>\n <div id=\"vis\"></div>\n </React.Fragment>\n );\n }\n}\n\nexport default NetworkGraph;\n","import React, { Component } from \"react\";\nimport { apiUrl } from \"../../../../src/config.json\";\nimport { LightAsync as SyntaxHighlighter } from \"react-syntax-highlighter\";\nimport github from \"react-syntax-highlighter/dist/esm/styles/hljs/github\";\nimport js from \"react-syntax-highlighter/dist/esm/languages/hljs/javascript\";\nimport python from \"react-syntax-highlighter/dist/esm/languages/hljs/python\";\nimport r from \"react-syntax-highlighter/dist/esm/languages/hljs/r\";\nimport NetworkGraph from \"../../../graphs/d3/networkgraph/networkgraph\";\nimport { urlFromSsh } from \"../../../functions\";\nimport \"../css/datadetail.css\";\n\nSyntaxHighlighter.registerLanguage(\"javascript\", js);\nSyntaxHighlighter.registerLanguage(\"python\", python);\nSyntaxHighlighter.registerLanguage(\"r\", r);\n\nclass Pipeline extends Component {\n state = {\n scriptInt: 0,\n };\n\n setScriptInt = (event) => {\n var scriptInt = event.target.id;\n if (this.state.scriptInt !== scriptInt) {\n this.setState({ scriptInt });\n }\n };\n render() {\n var { dataset, renku, scripts } = this.props;\n var { scriptInt } = this.state;\n scripts = scripts.filter((s) => !s.name.includes(\".md\"));\n var gitlab = urlFromSsh(dataset.ssh);\n var renkulab = urlFromSsh(dataset.ssh, (renku = true));\n var downloadlink = apiUrl + \"/pipeline/files/\" + dataset.id;\n var selectedscript = scripts[scriptInt];\n var nameDict = { js: \"javascript\", r: \"r\", py: \"python\" };\n var scriptType = \"python\"; // Default\n try {\n scriptType = nameDict[selectedscript.name.split(\".\")[1]];\n } catch (error) {\n console.error(error);\n }\n\n var scriptHeaders = [];\n for (var k = 0; k < scripts.length; k++) {\n var arr = scripts[k].name.split(\"/\");\n var name = arr[arr.length - 1];\n scriptHeaders.push(\n <div\n className={\n parseInt(scriptInt) === k\n ? \"pipeline-headitem active\"\n : \"pipeline-headitem\"\n }\n id={k}\n key={\"key\" + k}\n onClick={this.setScriptInt}\n >\n {name}\n </div>\n );\n }\n\n if (dataset.renku === 0) {\n var { edges } = renku.data.lineage;\n\n function filterEdges(edges, id) {\n return edges.filter((e) => e.target === id);\n }\n\n function findScriptDataset(edges) {\n var escript = edges.find((e) => {\n return [\"py\", \"r\"].includes(e.source.split(\".\")[1]);\n });\n var edataset = edges.find((e) => e.source !== escript.source);\n return { escript, edataset };\n }\n\n // Create linage diagram\n var filepath = dataset.datasourcelink.split(\"/blob/\")[1];\n filepath = filepath.split(\"/\");\n filepath.shift();\n filepath = filepath.join(\"/\");\n\n var diagram = [\n <div key=\"dat0\" className=\"datasets\">\n {filepath}\n </div>,\n ];\n var i = 1;\n var j = 0;\n while (i < 30 && j === 0) {\n var edge = filterEdges(edges, filepath);\n if (edge.length === 0) {\n j = 1;\n } else if (edge.length === 1) {\n if (edge[0].source.includes(\"cwl\")) {\n diagram.unshift(\n <div key={\"coa\" + i} className=\"connector\">\n ↓\n </div>\n );\n edge = filterEdges(edges, edge[0].source);\n var { escript, edataset } = findScriptDataset(edge);\n\n diagram.unshift(\n <div key={\"scr\" + i} className=\"script\">\n {escript.source}\n </div>\n );\n diagram.unshift(\n <div key={\"cob\" + i} className=\"connector\">\n ↓\n </div>\n );\n diagram.unshift(\n <div key={\"dat\" + i} className=\"datasets\">\n {edataset.source}\n </div>\n );\n filepath = edataset.source;\n }\n } else if (edge.length > 1) {\n j = 1;\n }\n i++;\n }\n }\n\n return (\n <div>\n <div className=\"pipeline\">\n <div className=\"pipeline-right\">\n <div className=\"accessType\">\n Open Access\n <div className=\"accessOption\">\n 1. Download example data and scripts package\n <div className=\"pipeline-private\">\n Additional raw data can be obtained from the git repository.\n </div>\n <a\n href={downloadlink}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n <button>Download</button>\n </a>\n </div>\n </div>\n </div>\n <div className=\"pipeline-right\">\n <div className=\"accessType\">\n Access Depends on Project Visibility\n <div className=\"accessOption\">\n 2. Clone the git repository\n <div className=\"pipeline-private\">\n Private repositories will require login. Get in touch for\n access to private repositories.\n </div>\n <a href={gitlab} target=\"_blank\" rel=\"noopener noreferrer\">\n <button>GitLab</button>\n </a>\n </div>\n {renkulab && (\n <div className=\"accessOption\">\n 3. View on Renkulab.io, interactive environments are availble.\n <div className=\"pipeline-private\">\n Private repositories will require login. Get in touch for\n access to private repositories.\n </div>\n <a href={renkulab} target=\"_blank\" rel=\"noopener noreferrer\">\n <button>Renkulab</button>\n </a>\n </div>\n )}\n </div>\n </div>\n </div>\n {dataset.renku === 0 && <div className=\"pipeline-left\">{diagram}</div>}\n <div className=\"scripts\">\n <h3>Processing Scripts</h3>\n <div className=\"pipeline-script\">\n <div className=\"pipeline-head\">{scriptHeaders}</div>\n <div className=\"pipeline-body\">\n {selectedscript ? (\n <SyntaxHighlighter\n language={scriptType}\n style={github}\n wrapLines={true}\n >\n {selectedscript.data}\n </SyntaxHighlighter>\n ) : (\n <div>\n Appologies, no accompanying scripts have been included with\n this dataset.\n </div>\n )}\n </div>\n </div>\n </div>\n {dataset.renku === 0 && (\n <div className=\"networkgraph-outer\">\n <div className=\"networkgraph-inner\">\n <NetworkGraph data={renku} dataset={dataset} />\n </div>\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default Pipeline;\n","import React, { Component } from \"react\";\nimport mail from \"../img/mail.svg\";\nimport calendar from \"../img/calendar.svg\";\nimport location from \"../img/location.svg\";\nimport git from \"../img/git.svg\";\nimport depth from \"../img/depth.svg\";\nimport download from \"../img/download.svg\";\nimport citation from \"../img/citation.svg\";\nimport licence from \"../img/licence.svg\";\nimport \"../css/datadetail.css\";\n\nclass Information extends Component {\n state = {};\n\n parseDate = (input) => {\n var months = [\n \"Jan \",\n \"Feb \",\n \"Mar \",\n \"Apr \",\n \"May \",\n \"Jun \",\n \"Jul \",\n \"Aug \",\n \"Sept \",\n \"Oct \",\n \"Nov \",\n \"Dec \",\n ];\n var date = new Date(input);\n return months[date.getMonth()] + date.getFullYear();\n };\n\n render() {\n const { dataset, getLabel } = this.props;\n var lake = getLabel(\"lakes\", dataset.lakes_id, \"name\");\n return (\n <React.Fragment>\n <div className=\"info-mation\">\n <div className=\"description\">\n <div className=\"data-row\">\n <img src={calendar} alt=\"calendar\" />{\" \"}\n {this.parseDate(dataset.mindatetime)} to{\" \"}\n {this.parseDate(dataset.maxdatetime)}\n </div>\n <div className=\"data-row\">\n <img src={location} alt=\"location\" />\n <a\n href={`https://www.google.com/maps/search/${dataset.latitude},${dataset.longitude}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {lake}{\" \"}\n {lake !== \"Multiple\"\n ? `[${dataset.latitude}, ${dataset.longitude}]`\n : \"\"}\n </a>\n </div>\n <div className=\"data-row\">\n <img src={git} alt=\"git\" />\n <a\n href={dataset.datasourcelink.split(\"/-/blob\")[0]}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Link to external data\n </a>\n </div>\n {dataset.mindepth !== \"-9999\" && (\n <div className=\"data-row\">\n <img src={depth} alt=\"depth\" />\n {`${dataset.mindepth}m to ${dataset.maxdepth}m`}\n </div>\n )}\n\n <div className=\"data-row\">\n <img src={download} alt=\"download\" /> {dataset.downloads}{\" \"}\n downloads\n </div>\n <div className=\"data-row\">\n <img src={licence} alt=\"licence\" />\n <a\n href={getLabel(\"licenses\", dataset.licenses_id, \"link\")}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n title={getLabel(\"licenses\", dataset.licenses_id, \"description\")}\n >\n {getLabel(\"licenses\", dataset.licenses_id, \"name\")}\n </a>\n </div>\n <div className=\"data-row\">\n <img src={citation} alt=\"citation\" />\n {dataset.citation}\n </div>\n </div>\n <div className=\"description\">\n <div className=\"exinfo\">\n The data source is hosted by an external partner. For more details\n please contact {getLabel(\"persons\", dataset.persons_id, \"name\")}{\" \"}\n using the contact details listed below.\n </div>\n </div>\n <div className=\"info-contact\">\n <div className=\"contact-header\">Questions about the dataset?</div>\n <div className=\"contact-inner\">\n <div className=\"contact-icon\">\n <img src={mail} alt=\"mail\" />\n </div>\n <div className=\"contact-text\">\n <div className=\"contact-name\">\n {getLabel(\"persons\", dataset.persons_id, \"name\")}\n </div>\n <div className=\"contact-email\">\n {getLabel(\"persons\", dataset.persons_id, \"email\")}\n </div>\n <div className=\"contact-job\">\n {getLabel(\"projects\", dataset.projects_id, \"name\")},{\" \"}\n {getLabel(\"organisations\", dataset.organisations_id, \"name\")}\n </div>\n </div>\n </div>\n </div>\n </div>\n </React.Fragment>\n );\n }\n}\n\nexport default Information;\n","import React, { Component } from \"react\";\nimport Connect from \"../img/connect.svg\";\nimport \"../css/datadetail.css\";\n\nclass Preview extends Component {\n tableHeader = (i, datasetparameters, getLabel) => {\n var detail = \"\";\n if (\n datasetparameters[i] &&\n datasetparameters[i].detail !== null &&\n datasetparameters[i].detail !== \"none\"\n ) {\n detail = `[${datasetparameters[i].detail}]`;\n }\n return (\n datasetparameters[i] &&\n `${getLabel(\n \"parameters\",\n datasetparameters[i].parameters_id,\n \"name\"\n )} ${detail} (${datasetparameters[i].unit})`\n );\n };\n\n tableBody = (i, l, datasetparameters, data) => {\n var out = datasetparameters[i] && data[datasetparameters[i].axis][l];\n if (out === null) out = \"null\";\n return out;\n };\n\n render() {\n var { data, datasetparameters, getLabel } = this.props;\n if (data[0] !== false) {\n data = data[0];\n var inner = [];\n inner = [\n <tr key=\"h\">\n <th>1</th>\n <td>{this.tableHeader(0, datasetparameters, getLabel)}</td>\n <td>{this.tableHeader(1, datasetparameters, getLabel)}</td>\n <td>{this.tableHeader(2, datasetparameters, getLabel)}</td>\n <td>{this.tableHeader(3, datasetparameters, getLabel)}</td>\n <td>{this.tableHeader(4, datasetparameters, getLabel)}</td>\n <td>{this.tableHeader(5, datasetparameters, getLabel)}</td>\n <td>{this.tableHeader(6, datasetparameters, getLabel)}</td>\n </tr>,\n ];\n var len = data.y ? data.y.length : data.x.length;\n for (var l = 0; l < Math.min(50, len); l++) {\n inner.push(\n <tr key={\"h\" + l}>\n <th>{l + 2}</th>\n <td>{this.tableBody(0, l, datasetparameters, data)}</td>\n <td>{this.tableBody(1, l, datasetparameters, data)}</td>\n <td>{this.tableBody(2, l, datasetparameters, data)}</td>\n <td>{this.tableBody(3, l, datasetparameters, data)}</td>\n <td>{this.tableBody(4, l, datasetparameters, data)}</td>\n <td>{this.tableBody(5, l, datasetparameters, data)}</td>\n <td>{this.tableBody(6, l, datasetparameters, data)}</td>\n </tr>\n );\n }\n }\n if (this.props.data[0] === false) {\n return (\n <div className=\"failed-download\">\n <img src={Connect} alt=\"Disconnected\" />\n Unable to download data from the Datalakes API. \n <div><b>Please try refreshing the page or come back later.</b></div>\n </div>\n );\n } else {\n return (\n <div className=\"preview-table\">\n <table className=\"excel\">\n <tbody>\n <tr>\n <th></th>\n <th>a</th>\n <th>b</th>\n <th>c</th>\n <th>d</th>\n <th>e</th>\n <th>f</th>\n <th>g</th>\n </tr>\n {inner}\n </tbody>\n </table>\n </div>\n );\n }\n }\n}\n\nexport default Preview;\n","import React, { Component } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport line from \"../../img/line.svg\";\nimport preview from \"../../img/preview.svg\";\nimport download from \"../../img/download.svg\";\nimport pipe from \"../../img/pipe.svg\";\nimport info from \"../../img/info.svg\";\nimport webgis from \"../../img/webgis.svg\";\nimport td from \"../../img/3d.svg\";\nimport map from \"../../img/map.svg\";\nimport \"./css/datadetail.css\";\n\nclass DataSubMenu extends Component {\n hide = (name, allowedStep) => {\n return !allowedStep.includes(name);\n };\n active = (name, step) => {\n return name === step;\n };\n\n render() {\n const { step, allowedStep, updateSelectedState, link } = this.props;\n return (\n <React.Fragment>\n <div className=\"data-subnav\">\n <div\n title=\"Interact with 3D model\"\n className={\n this.active(\"threedmodel\", step)\n ? \"subnav-item active\"\n : \"subnav-item\"\n }\n style={{ display: this.hide(\"threedmodel\", allowedStep) && \"none\" }}\n onClick={() => updateSelectedState(\"threedmodel\")}\n >\n <img src={td} className=\"subnav-img\" alt=\"3D\" />\n <div className=\"subnav-text\">3D Model</div>\n </div>\n <div\n title=\"Interact with ch2018 data\"\n className={\n this.active(\"ch2018\", step) ? \"subnav-item active\" : \"subnav-item\"\n }\n style={{ display: this.hide(\"ch2018\", allowedStep) && \"none\" }}\n onClick={() => updateSelectedState(\"ch2018\")}\n >\n <img src={line} className=\"subnav-img\" alt=\"ch2018\" />\n <div className=\"subnav-text\">Graph</div>\n </div>\n <div\n title=\"Download ch2018 data\"\n className={\n this.active(\"ch2018download\", step)\n ? \"subnav-item active\"\n : \"subnav-item\"\n }\n style={{\n display: this.hide(\"ch2018download\", allowedStep) && \"none\",\n }}\n onClick={() => updateSelectedState(\"ch2018download\")}\n >\n <img src={download} className=\"subnav-img\" alt=\"ch2018download\" />\n <div className=\"subnav-text\">Download</div>\n </div>\n <div\n title=\"Interact with Simstrat data\"\n className={\n this.active(\"simstrat\", step)\n ? \"subnav-item active\"\n : \"subnav-item\"\n }\n style={{\n display: this.hide(\"simstrat\", allowedStep) && \"none\",\n }}\n onClick={() => updateSelectedState(\"simstrat\")}\n >\n <img src={td} className=\"subnav-img\" alt=\"3D\" />\n <div className=\"subnav-text\">Map</div>\n </div>\n <div\n title=\"Interact with remote sensing data\"\n className={\n this.active(\"remotesensing\", step)\n ? \"subnav-item active\"\n : \"subnav-item\"\n }\n style={{\n display: this.hide(\"remotesensing\", allowedStep) && \"none\",\n }}\n onClick={() => updateSelectedState(\"remotesensing\")}\n >\n <img src={td} className=\"subnav-img\" alt=\"3D\" />\n <div className=\"subnav-text\">Map</div>\n </div>\n <div\n title=\"Download Three Dimentional Model Data\"\n className={\n this.active(\"threedmodeldownload\", step)\n ? \"subnav-item active\"\n : \"subnav-item\"\n }\n style={{\n display: this.hide(\"threedmodeldownload\", allowedStep) && \"none\",\n }}\n onClick={() => updateSelectedState(\"threedmodeldownload\")}\n >\n <img src={download} className=\"subnav-img\" alt=\"3D\" />\n <div className=\"subnav-text\">Download</div>\n </div>\n <div\n title=\"Download Remote Sensing Data\"\n className={\n this.active(\"remotesensingdownload\", step)\n ? \"subnav-item active\"\n : \"subnav-item\"\n }\n style={{\n display:\n this.hide(\"remotesensingdownload\", allowedStep) && \"none\",\n }}\n onClick={() => updateSelectedState(\"remotesensingdownload\")}\n >\n <img src={download} className=\"subnav-img\" alt=\"download\" />\n <div className=\"subnav-text\">Download</div>\n </div>\n <div\n title=\"Information on external data source\"\n className={\n this.active(\"external\", step)\n ? \"subnav-item active\"\n : \"subnav-item\"\n }\n style={{ display: this.hide(\"external\", allowedStep) && \"none\" }}\n onClick={() => updateSelectedState(\"external\")}\n >\n <img src={info} className=\"subnav-img\" alt=\"Info\" />\n <div className=\"subnav-text\">Information</div>\n </div>\n <div\n title=\"Plot data\"\n className={\n this.active(\"plot\", step) ? \"subnav-item active\" : \"subnav-item\"\n }\n style={{ display: this.hide(\"plot\", allowedStep) && \"none\" }}\n onClick={() => updateSelectedState(\"plot\")}\n >\n <img src={line} className=\"subnav-img\" alt=\"Plot\" />\n <div className=\"subnav-text\">Plot</div>\n </div>\n <div\n title=\"Preview data on the map\"\n className={\n this.active(\"locationmap\", step)\n ? \"subnav-item active\"\n : \"subnav-item\"\n }\n style={{ display: this.hide(\"locationmap\", allowedStep) && \"none\" }}\n onClick={() => updateSelectedState(\"locationmap\")}\n >\n <img src={map} className=\"subnav-img\" alt=\"Location Map\" />\n <div className=\"subnav-text\">Map</div>\n </div>\n <div\n title=\"Preview data as a table\"\n className={\n this.active(\"preview\", step)\n ? \"subnav-item active\"\n : \"subnav-item\"\n }\n style={{ display: this.hide(\"preview\", allowedStep) && \"none\" }}\n onClick={() => updateSelectedState(\"preview\")}\n >\n <img src={preview} className=\"subnav-img\" alt=\"Preview\" />\n <div className=\"subnav-text\">Preview</div>\n </div>\n <div\n title=\"Download data\"\n className={\n this.active(\"download\", step)\n ? \"subnav-item active\"\n : \"subnav-item\"\n }\n style={{ display: this.hide(\"download\", allowedStep) && \"none\" }}\n onClick={() => updateSelectedState(\"download\")}\n >\n <img src={download} className=\"subnav-img\" alt=\"Download\" />\n <div className=\"subnav-text\">Download</div>\n </div>\n <div\n title=\"See the data lineage\"\n className={\n this.active(\"pipeline\", step)\n ? \"subnav-item active\"\n : \"subnav-item\"\n }\n style={{ display: this.hide(\"pipeline\", allowedStep) && \"none\" }}\n onClick={() => updateSelectedState(\"pipeline\")}\n >\n <img src={pipe} className=\"subnav-img\" alt=\"Data Pipeline\" />\n <div className=\"subnav-text\">Reproduce</div>\n </div>\n <div\n title=\"See meta data for dataset\"\n className={\n this.active(\"information\", step)\n ? \"subnav-item active\"\n : \"subnav-item\"\n }\n style={{ display: this.hide(\"information\", allowedStep) && \"none\" }}\n onClick={() => updateSelectedState(\"information\")}\n >\n <img src={info} className=\"subnav-img\" alt=\"Information\" />\n <div className=\"subnav-text\">Information</div>\n </div>\n <Link\n to={link}\n title=\"Compare with other datasets in the Map Viewer\"\n className={\n this.active(\"webgis\", step) ? \"subnav-item active\" : \"subnav-item\"\n }\n style={{ display: this.hide(\"webgis\", allowedStep) && \"none\" }}\n >\n <img src={webgis} className=\"subnav-img\" alt=\"webgis\" />\n <div className=\"subnav-text\">Map Viewer</div>\n </Link>\n </div>\n </React.Fragment>\n );\n }\n}\n\nexport default DataSubMenu;\n","import React, { Component } from \"react\";\nimport SwaggerUI from \"swagger-ui-react\";\nimport \"swagger-ui-react/swagger-ui.css\";\nimport \"../css/datadetail.css\";\n\nclass ThreeDModelDownload extends Component {\n state = {\n year: 2020,\n week: 0,\n dates: { 2020: [] },\n };\n\n onChangeYear = (event) => {\n this.setState({\n year: event.target.value,\n week: 0,\n });\n };\n\n onChangeWeek = (event) => {\n this.setState({ week: event.target.value });\n };\n\n parseDateFormat = (date) => {\n var months = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"July\",\n \"Aug\",\n \"Sept\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ];\n var day = date.getDate();\n var month = months[date.getMonth()];\n return `${day} ${month}`;\n };\n\n parseSimpleDate = (date) => {\n if (date !== undefined) {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n return `${year}${month}${day}`;\n } else {\n return \"\";\n }\n };\n\n parseWeek = (date) => {\n var end = new Date(date.getTime());\n end.setDate(end.getDate() + 7);\n return `${this.parseDateFormat(date)} to ${this.parseDateFormat(end)}`;\n };\n\n async componentDidMount() {\n var { mindatetime, maxdatetime } = this.props.dataset;\n\n const dates = {};\n let currentDate = new Date(mindatetime);\n let endDate = new Date(maxdatetime);\n while (currentDate <= endDate) {\n if (currentDate.getDay() === 0) {\n const year = currentDate.getFullYear();\n if (!dates[year]) {\n dates[year] = [];\n }\n dates[year].push(new Date(currentDate.getTime()));\n }\n currentDate.setDate(currentDate.getDate() + 1);\n }\n var year = Math.max(...Object.keys(dates).map((d) => parseInt(d)));\n var week = dates[String(year)].length - 1;\n this.setState({ dates, year, week });\n }\n\n render() {\n const { getLabel, dataset } = this.props;\n var { mindatetime, maxdatetime, datasourcelink } = dataset;\n let arr = datasourcelink.split(\"/\");\n var lake = arr[arr.length - 1];\n mindatetime = new Date(mindatetime);\n maxdatetime = new Date(maxdatetime);\n var { dates, year, week } = this.state;\n\n var years = [];\n var yearlist = Object.keys(dates);\n for (var i = 0; i < yearlist.length; i++) {\n years.push(\n <option key={yearlist[i]} value={yearlist[i]}>\n {yearlist[i]}\n </option>\n );\n }\n var weeks = [];\n for (var j = 0; j < dates[year].length; j++) {\n weeks.push(\n <option key={dates[year][j]} value={j}>\n {this.parseWeek(dates[year][j])}\n </option>\n );\n }\n\n var url = \"https://alplakes-api.eawag.ch\";\n var swagger = \"https://alplakes-api.eawag.ch/openapi.json\";\n var git =\n \"https://github.com/eawag-surface-waters-research/alplakes-simulations\";\n var sunday = this.parseSimpleDate(dates[year][week]);\n var link = `${url}/simulations/file/delft3d-flow/${lake}/${sunday}`;\n\n return (\n <div className=\"download\">\n <div className=\"info-title\">Licence</div>\n <a\n href={getLabel(\"licenses\", dataset.licenses_id, \"link\")}\n title={getLabel(\"licenses\", dataset.licenses_id, \"description\")}\n >\n {getLabel(\"licenses\", dataset.licenses_id, \"name\")}\n </a>\n <div className=\"info-title\">Citation</div>\n {dataset.citation}\n\n <div className=\"info-title\">Git Repository</div>\n <a href={git} target=\"_blank\" rel=\"noopener noreferrer\">\n {git}\n </a>\n\n <div className=\"info-title\">Available Data</div>\n <p>\n Data available from {mindatetime.toLocaleDateString()} to{\" \"}\n {maxdatetime.toLocaleDateString()}\n </p>\n\n <div className=\"info-title\">Download</div>\n <p>\n Download NetCDF file containing one week of simulations (every 3hrs).\n Warning - files are around 160mb. For slices of the data please use\n the API below.\n </p>\n <div className=\"meteolakesdownload\">\n <select value={year} onChange={this.onChangeYear}>\n Year: {years}\n </select>\n <select value={week} onChange={this.onChangeWeek}>\n Week: {weeks}\n </select>\n <a href={link}>\n <button>Download</button>\n </a>\n </div>\n\n <div className=\"info-title\">API</div>\n\n <div className=\"api-meteolakes\">\n [ Base URL: {url} ]\n <SwaggerUI url={swagger} />\n </div>\n </div>\n );\n }\n}\n\nexport default ThreeDModelDownload;\n","import React, { Component } from \"react\";\nimport * as d3 from \"d3\";\nimport isEqual from \"lodash/isEqual\";\n\nclass D3GroupedBarGraph extends Component {\n state = {\n graphid: Math.round(Math.random() * 100000),\n };\n plotBarGraph = async () => {\n var { graphid } = this.state;\n try {\n d3.select(\"#bargraphsvg\" + graphid).remove();\n } catch (e) {}\n if (this.props.data) {\n try {\n var {\n data,\n colors,\n xlabel,\n xunits,\n title,\n legend,\n setDownloadGraph,\n } = this.props;\n\n // Set graph size\n var margin = { top: 20, right: 20, bottom: 50, left: 50, legend: 50 },\n viswidth = d3\n .select(\"#vis\" + graphid)\n .node()\n .getBoundingClientRect().width,\n visheight =\n d3\n .select(\"#vis\" + graphid)\n .node()\n .getBoundingClientRect().height,\n width = viswidth - margin.left - margin.right,\n height = visheight - margin.top - margin.bottom;\n\n var maingroup = [];\n var subgroup = [];\n\n if (Object.keys(data).length > 0) maingroup = Object.keys(data);\n if (Object.keys(maingroup).length > 0)\n subgroup = Object.keys(data[maingroup[0]]);\n\n var max = -Infinity;\n for (var m = 0; m < maingroup.length; m++) {\n for (var s = 0; s < subgroup.length; s++) {\n max = Math.max(max, data[maingroup[m]][subgroup[s]]);\n }\n }\n\n if (Object.keys(data).length > 0) {\n // Format X-axis\n var x = d3.scaleLinear().domain([0, max]).range([0, width]);\n\n // Format Y-axis\n var y = d3\n .scaleBand()\n .rangeRound([0, height - margin.legend])\n .domain(maingroup)\n .paddingInner(0.3)\n .align(0.1);\n\n var y1 = d3\n .scaleBand()\n .domain(subgroup)\n .rangeRound([0, y.bandwidth()])\n .padding(0);\n\n if (legend) y.rangeRound([margin.legend, height]);\n\n var color = d3.scaleOrdinal().range(colors);\n\n // Define the axes\n var xAxis = d3.axisBottom(x);\n var yAxis = d3.axisLeft(y);\n\n // Adds the svg canvas\n var svg = d3\n .select(\"#vis\" + graphid)\n .append(\"svg\")\n .attr(\"id\", \"bargraphsvg\" + graphid)\n .attr(\"width\", viswidth)\n .attr(\"height\", visheight)\n .append(\"g\")\n .attr(\n \"transform\",\n \"translate(\" + margin.left + \",\" + margin.top + \")\"\n );\n\n // Add bars\n var plotdata = maingroup.map((mg) => {\n let subdata = subgroup.map((sg) => {\n return { name: sg, data: data[mg][sg] };\n });\n return { name: mg, data: subdata };\n });\n svg\n .append(\"g\")\n .attr(\"id\", \"bars\")\n .selectAll(\"g\")\n .data(plotdata)\n .join(\"g\")\n .attr(\"transform\", (d) => `translate(0,${y(d.name)})`)\n .selectAll(\"rect\")\n .data((d) => d.data)\n .join(\"rect\")\n .attr(\"x\", (d) => x(0))\n .attr(\"y\", (d) => y1(d.name))\n .attr(\"height\", y1.bandwidth())\n .attr(\"width\", (d) => x(d.data))\n .attr(\"fill\", (d) => color(d.name))\n .append(\"title\")\n .text((d) => `${d.data} ${xunits}`);\n\n /*svg\n .append(\"g\")\n .selectAll(\"g\")\n .data(maingroup)\n .data()\n .join(\"g\")\n .attr(\"fill\", (d) => {\n console.log(d);\n color(d.key);\n })\n .selectAll(\"rect\")\n .data((d) => d)\n .join(\"rect\")\n .attr(\"x\", (d) => x(d[0]))\n .attr(\"y\", (d, i) => y(d.data.name))\n .attr(\"width\", (d) => x(d[1]) - x(d[0]))\n .attr(\"height\", y.bandwidth())\n .append(\"title\")\n .text((d) => `${d.key} ${d.data[d.key]} ${xunits}`);*/\n\n // Add the X Axis\n svg\n .append(\"g\")\n .attr(\"class\", \"x axis\")\n .attr(\"id\", \"axis--x\")\n .attr(\"transform\", \"translate(0,\" + height + \")\")\n .call(xAxis);\n\n if (xlabel) {\n svg\n .append(\"text\")\n .attr(\n \"transform\",\n \"translate(\" +\n width / 2 +\n \" ,\" +\n (height + margin.bottom / 1.5) +\n \")\"\n )\n .attr(\"x\", 6)\n .attr(\"dx\", \"1em\")\n .style(\"text-anchor\", \"middle\")\n .text(xunits ? `${xlabel} (${xunits})` : xlabel);\n }\n\n // Add the Y Axis\n svg\n .append(\"g\")\n .attr(\"class\", \"y axis\")\n .attr(\"id\", \"axis--y\")\n .call(yAxis);\n\n // Add title\n var titlesvg = svg\n .append(\"text\")\n .attr(\"x\", width / 2)\n .attr(\"y\", 2 - margin.top / 2)\n .attr(\"text-anchor\", \"middle\")\n .style(\"font-size\", \"14px\")\n .style(\"text-decoration\", \"underline\")\n .style(\"opacity\", \"1\")\n .text(title);\n d3.select(\"#pngdownloadline\" + graphid).on(\"click\", function () {\n downloadGraph();\n });\n\n // Add legend\n if (legend) {\n var legendblock = svg\n .append(\"g\")\n .attr(\"id\", \"legendbox\")\n .attr(\"pointer-events\", \"none\");\n\n // Add one dot in the legend for each name.\n legendblock\n .selectAll(\"legendtext\")\n .data(legend)\n .enter()\n .append(\"text\")\n .attr(\"x\", function (d) {\n return d.offset + 15;\n })\n .attr(\"y\", margin.legend / 2)\n .style(\"font-size\", \"12\")\n .text(function (d) {\n return d.text;\n })\n .attr(\"text-anchor\", \"start\")\n .style(\"alignment-baseline\", \"middle\");\n legendblock\n .selectAll(\"legendsquare\")\n .data(legend)\n .enter()\n .append(\"rect\")\n .attr(\"x\", function (d) {\n return d.offset;\n })\n .attr(\"y\", margin.legend / 2 - 7)\n .attr(\"width\", 10)\n .attr(\"height\", 10)\n .style(\"fill\", function (d) {\n return d.color;\n });\n }\n }\n\n function downloadGraph() {\n titlesvg.style(\"opacity\", \"1\");\n var s = new XMLSerializer();\n var str = s.serializeToString(\n document.getElementById(\"linegraphsvg\" + graphid)\n );\n\n var canvas = document.createElement(\"canvas\"),\n context = canvas.getContext(\"2d\");\n\n canvas.width = viswidth;\n canvas.height = visheight;\n\n var image = new Image();\n image.onerror = function () {\n alert(\n \"Appologies .png download failed. Pleaseawait download as .svg.\"\n );\n };\n image.onload = function () {\n context.drawImage(image, 0, 0);\n var a = document.createElement(\"a\");\n a.download = \"downloadgraph.png\";\n a.href = canvas.toDataURL(\"image/png\");\n a.click();\n };\n image.src =\n \"data:image/svg+xml;charset=utf8,\" + encodeURIComponent(str);\n titlesvg.style(\"opacity\", \"0\");\n }\n\n if (setDownloadGraph) {\n setDownloadGraph(downloadGraph);\n }\n } catch (e) {\n console.error(\"Error plotting line graph\", e);\n }\n }\n };\n componentDidMount() {\n this.plotBarGraph();\n window.addEventListener(\"resize\", this.plotBarGraph, false);\n }\n\n componentWillUnmount() {\n window.removeEventListener(\"resize\", this.plotBarGraph, false);\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (!isEqual(prevProps, this.props)) {\n this.plotBarGraph();\n }\n }\n render() {\n var { graphid } = this.state;\n return (\n <React.Fragment>\n <div id={\"vis\" + graphid} className=\"vis-main\"></div>\n </React.Fragment>\n );\n }\n}\n\nexport default D3GroupedBarGraph;\n","import React, { Component } from \"react\";\nimport axios from \"axios\";\nimport { apiUrl } from \"../../../config.json\";\nimport D3LineGraph from \"../../../graphs/d3/linegraph/linegraph\";\nimport D3GroupedBarGraph from \"../../../graphs/d3/groupedbargraph/groupedbargraph\";\nimport \"../css/datadetail.css\";\n\nclass Ch2018Graph extends Component {\n state = {\n lakes: [],\n data: [],\n lake: \"\",\n depth: \"surface\",\n period: \"p1\",\n smoothing: 5,\n };\n\n updateSmoothing = (event) => {\n this.setState({ smoothing: parseInt(event.target.value) });\n };\n\n updateLake = async (event) => {\n var { data } = this.state;\n var lake = event.target.value;\n if (!Object.keys(data).includes(lake)) {\n var { data: lakedata } = await axios\n .get(apiUrl + \"/externaldata/ch2018/\" + lake, {\n timeout: 10000,\n })\n .catch((error) => {\n console.error(error);\n });\n data[lake] = lakedata;\n this.setState({ lake, data });\n } else {\n this.setState({ lake });\n }\n };\n\n updateDepth = (event) => {\n this.setState({ depth: event.target.value });\n };\n\n updatePeriod = (event) => {\n this.setState({ period: event.target.value });\n };\n\n movingAvg = (array, count, qualifier) => {\n if (count === 0) {\n return array;\n }\n // calculate average for subarray\n var avg = function (array, qualifier) {\n var sum = 0,\n count = 0,\n val;\n for (var i in array) {\n val = array[i];\n if (!qualifier || qualifier(val)) {\n sum += val;\n count++;\n }\n }\n\n return sum / count;\n };\n\n var result = [],\n val;\n\n // pad beginning of result with null values\n for (var i = 0; i < count - 1; i++) result.push(null);\n\n // calculate average for each subarray and add to result\n for (var j = 0, len = array.length - count; j <= len; j++) {\n val = avg(array.slice(j, j + count), qualifier);\n if (isNaN(val)) result.push(null);\n else result.push(val);\n }\n\n return result;\n };\n\n async componentDidMount() {\n var { data: lakes } = await axios\n .get(apiUrl + \"/externaldata/ch2018/lakes\", {\n timeout: 10000,\n })\n .catch((error) => {\n console.error(error);\n });\n var { data: lakedata } = await axios\n .get(apiUrl + \"/externaldata/ch2018/\" + lakes[0].id, {\n timeout: 10000,\n })\n .catch((error) => {\n console.error(error);\n });\n\n var index = 0;\n if (this.props.search) {\n var l = this.props.search.replace(\"?\", \"\");\n if (lakes.map((ll) => ll.id).includes(l)) {\n index = lakes.map((ll) => ll.id).indexOf(l);\n }\n }\n\n var data = {};\n\n data[lakes[index].id] = lakedata;\n this.setState({ lakes, data, lake: lakes[index].id });\n }\n\n render() {\n var { lakes, depth, lake, data: inData, period, smoothing } = this.state;\n var lake_options = [];\n var data = JSON.parse(JSON.stringify(inData));\n for (var listlake of lakes) {\n lake_options.push(\n <option value={listlake.id} key={listlake.id}>\n {listlake.name}\n </option>\n );\n }\n var lakeproperties = {};\n if (lakes.length > 0) lakeproperties = lakes.find((l) => l.id === lake);\n var { name, altitude, area, volume } = lakeproperties;\n var lcolor = [];\n var lweight = [];\n var yearly = [];\n var seasonal = [];\n var legend = [];\n var barlegend = [];\n var barcolors = [];\n var stratification = [];\n var yearlyConfidence = [];\n var seasonalConfidence = [];\n if (Object.keys(data).length > 0) {\n lcolor = [\"green\", \"#FF8C00\", \"red\"];\n lweight = [1, 1, 1];\n legend = [\n { color: \"green\", text: \"RCP 2.6\" },\n { color: \"#FF8C00\", text: \"RCP 4.5\" },\n { color: \"red\", text: \"RCP 8.5\" },\n ];\n barlegend = [\n { color: \"#F4A460\", text: \"Summer Stratification\", offset: 0 },\n { color: \"#8FBC8F\", text: \"Mixed\", offset: 140 },\n { color: \"#87CEFA\", text: \"Winter Stratification\", offset: 200 },\n { color: \"#ADD8E6\", text: \"Ice Cover\", offset: 330 },\n ];\n barcolors = [\"#F4A460\", \"#8FBC8F\", \"#87CEFA\", \"#ADD8E6\"];\n\n stratification = data[lake].stratification[period];\n\n yearly = [\n {\n x: data[lake][\"yearly\"][depth][\"RCP26\"][\"x\"],\n y: this.movingAvg(\n data[lake][\"yearly\"][depth][\"RCP26\"][\"y_ave\"],\n smoothing\n ),\n },\n {\n x: data[lake][\"yearly\"][depth][\"RCP45\"][\"x\"],\n y: this.movingAvg(\n data[lake][\"yearly\"][depth][\"RCP45\"][\"y_ave\"],\n smoothing\n ),\n },\n {\n x: data[lake][\"yearly\"][depth][\"RCP85\"][\"x\"],\n y: this.movingAvg(\n data[lake][\"yearly\"][depth][\"RCP85\"][\"y_ave\"],\n smoothing\n ),\n },\n ];\n yearlyConfidence = [\n {\n CI_upper: data[lake][\"yearly\"][depth][\"RCP26\"][\"y_max\"],\n CI_lower: data[lake][\"yearly\"][depth][\"RCP26\"][\"y_min\"],\n },\n {\n CI_upper: data[lake][\"yearly\"][depth][\"RCP45\"][\"y_max\"],\n CI_lower: data[lake][\"yearly\"][depth][\"RCP45\"][\"y_min\"],\n },\n {\n CI_upper: data[lake][\"yearly\"][depth][\"RCP85\"][\"y_max\"],\n CI_lower: data[lake][\"yearly\"][depth][\"RCP85\"][\"y_min\"],\n },\n ];\n seasonal = [\n {\n y: data[lake][\"seasonal\"][depth][period][\"RCP26\"][\"ave\"],\n x: [\n ...Array(\n data[lake][\"seasonal\"][depth][period][\"RCP26\"][\"ave\"].length\n ).keys(),\n ],\n },\n {\n y: data[lake][\"seasonal\"][depth][period][\"RCP45\"][\"ave\"],\n x: [\n ...Array(\n data[lake][\"seasonal\"][depth][period][\"RCP45\"][\"ave\"].length\n ).keys(),\n ],\n },\n {\n y: data[lake][\"seasonal\"][depth][period][\"RCP85\"][\"ave\"],\n x: [\n ...Array(\n data[lake][\"seasonal\"][depth][period][\"RCP85\"][\"ave\"].length\n ).keys(),\n ],\n },\n ];\n seasonalConfidence = [\n {\n CI_upper: data[lake][\"seasonal\"][depth][period][\"RCP26\"][\"max\"],\n CI_lower: data[lake][\"seasonal\"][depth][period][\"RCP26\"][\"min\"],\n },\n {\n CI_upper: data[lake][\"seasonal\"][depth][period][\"RCP45\"][\"max\"],\n CI_lower: data[lake][\"seasonal\"][depth][period][\"RCP45\"][\"min\"],\n },\n {\n CI_upper: data[lake][\"seasonal\"][depth][period][\"RCP85\"][\"max\"],\n CI_lower: data[lake][\"seasonal\"][depth][period][\"RCP85\"][\"min\"],\n },\n ];\n }\n\n var perioddict = {\n p1: \"1980 - 2011\",\n p2: \"2012 - 2040\",\n p3: \"2041 - 2070\",\n p4: \"2071 - 2100\",\n };\n\n var depthdict = { surface: \"Surface\", bottom: \"Bottom\" };\n\n return (\n <div className=\"ch2018graph\">\n <div className=\"selections\">\n <table>\n <tbody>\n <tr>\n <td>Lake</td>\n <td>Surface/ Bottom</td>\n <td>Time Period</td>\n <td>Smoothing</td>\n {window.innerWidth > 500 && (\n <React.Fragment>\n <td>Altitude</td>\n <td>Area</td>\n <td>Volume</td>\n </React.Fragment>\n )}\n </tr>\n <tr>\n <td>\n <select value={lake} onChange={this.updateLake}>\n {lake_options}\n </select>\n </td>\n <td>\n <select value={depth} onChange={this.updateDepth}>\n <option value=\"surface\">Surface</option>\n <option value=\"bottom\">Bottom</option>\n </select>\n </td>\n <td>\n <select value={period} onChange={this.updatePeriod}>\n <option value=\"p1\">1980 - 2011</option>\n <option value=\"p2\">2012 - 2040</option>\n <option value=\"p3\">2041 - 2070</option>\n <option value=\"p4\">2071 - 2100</option>\n </select>\n </td>\n <td>\n <select value={smoothing} onChange={this.updateSmoothing}>\n <option value=\"0\">None</option>\n <option value=\"2\">2Yr Moving Ave</option>\n <option value=\"3\">3Yr Moving Ave</option>\n <option value=\"5\">5Yr Moving Ave</option>\n <option value=\"10\">10Yr Moving Ave</option>\n </select>\n </td>\n {window.innerWidth > 500 && (\n <React.Fragment>\n <td>{altitude} m a.s.l.</td>\n <td>{area} km²</td>\n <td>{volume} km³</td>\n </React.Fragment>\n )}\n </tr>\n </tbody>\n </table>\n </div>\n <div className=\"left\">\n <D3LineGraph\n data={yearly}\n title={`Average Yearly ${depthdict[depth]} Temperature for ${name}`}\n xlabel={\"Year\"}\n ylabel={`${depthdict[depth]} Temperature`}\n yunits={\"°C\"}\n lcolor={lcolor}\n lweight={lweight}\n xscale={\"linear\"}\n yscale={\"linear\"}\n confidence={yearlyConfidence}\n legend={legend}\n />\n </div>\n <div className=\"right\">\n <div className=\"upper\">\n <D3GroupedBarGraph\n title={`Seasonal Stratification for ${name} (${perioddict[period]})`}\n xlabel={\"Average Days per Year\"}\n data={stratification}\n colors={barcolors}\n xunits={\"days\"}\n legend={barlegend}\n />\n </div>\n <div className=\"lower\">\n <D3LineGraph\n data={seasonal}\n title={`Seasonal ${depthdict[depth]} Temperature for ${name} (${perioddict[period]})`}\n xlabel={\"Day of Year\"}\n ylabel={`${depthdict[depth]} Temperature`}\n yunits={\"°C\"}\n lcolor={lcolor}\n lweight={lweight}\n xscale={\"linear\"}\n yscale={\"linear\"}\n confidence={seasonalConfidence}\n legend={legend}\n />\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default Ch2018Graph;\n","import React, { Component } from \"react\";\nimport axios from \"axios\";\nimport { apiUrl } from \"../../../config.json\";\nimport \"../css/datadetail.css\";\n\nclass Ch2018Download extends Component {\n state = {\n lakes: [],\n data: [],\n lake: \"\",\n depth: \"surface\",\n period: \"p1\",\n smoothing: 5,\n };\n\n updateLake = (event) => {\n this.setState({ lake: event.target.value });\n };\n\n async componentDidMount() {\n var { data: lakes } = await axios\n .get(apiUrl + \"/externaldata/ch2018/lakes\", {\n timeout: 10000,\n })\n .catch((error) => {\n console.error(error);\n });\n var lake = lakes[0].id;\n this.setState({ lakes, lake });\n }\n\n render() {\n var { dataset, getLabel } = this.props;\n var { lakes, lake } = this.state;\n var options = lakes.map((l) => (\n <option key={l.id} value={l.id}>\n {l.name}\n </option>\n ));\n var download = apiUrl + \"/externaldata/ch2018/\" + lake;\n return (\n <div className=\"download\">\n <div className=\"info-title\">Licence</div>\n <a\n href={getLabel(\"licenses\", dataset.licenses_id, \"link\")}\n title={getLabel(\"licenses\", dataset.licenses_id, \"description\")}\n >\n {getLabel(\"licenses\", dataset.licenses_id, \"name\")}\n </a>\n <div className=\"info-title\">Download Summary Data</div>\n <div className=\"ch2018download\">\n <p>\n It is possible to download a .JSON file containing summary\n information for a given lake in the study.\n </p>\n <p>The .JSON file contains the following statistics:</p>\n <ul>\n <li>\n Yearly average of surface and bottom temperature for each of the\n three climate scenarios.\n </li>\n <li>\n Seasonal average of surface and bottom temperature for each of the\n three climate scenarios over four time periods (2018-2011,\n 2021-2040, 2041-2070, 2071-2100).\n </li>\n <li>\n Stratification for each of the three climate scenarios over four\n time periods (2018-2011, 2021-2040, 2041-2070, 2071-2100).\n </li>\n </ul>\n <div className=\"downloadinner\">\n <select onChange={this.updateLake} value={lake}>\n {options}\n </select>\n <a href={download}>\n <button>Download</button>\n </a>\n </div>\n </div>\n <div className=\"info-title\">Full Dataset</div>\n <p>\n <a\n href=\"https://opendata.eawag.ch/dataset/the-vulnerability-of-lakes-along-an-altitudinal-gradient-to-climate-change\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n ERIC Open\n </a>\n </p>\n <div className=\"info-title\">API</div>\n <p>Download list of lakes: <a href=\"https://api.datalakes-eawag.ch/externaldata/ch2018/lakes\">https://api.datalakes-eawag.ch/externaldata/ch2018/lakes</a></p>\n <p>Download lake statistics: <a href=\"https://api.datalakes-eawag.ch/externaldata/ch2018/Maggiore\">https://api.datalakes-eawag.ch/externaldata/ch2018/{\"{lakeid}\"}</a></p>\n </div>\n );\n }\n}\n\nexport default Ch2018Download;\n","import React, { Component } from \"react\";\nimport \"swagger-ui-react/swagger-ui.css\";\nimport SwaggerUI from \"swagger-ui-react\";\nimport Calendar from \"react-calendar\";\nimport \"../css/datadetail.css\";\n\nclass RemoteSensingDownload extends Component {\n state = {\n start: new Date(),\n end: new Date(),\n selected_files: [],\n };\n\n onChangeRange = (value) => {\n var { files } = this.props;\n var start = value[0];\n var end = value[1];\n var selected_files = this.selectedFiles(files, start, end);\n this.setState({ start, end, selected_files });\n };\n\n selectedFiles = (files, start, end) => {\n var selected_files = files.filter(\n (f) => f.mindatetime >= start && f.maxdatetime <= end\n );\n selected_files = selected_files.map((sf) => {\n let path = sf.filelink.split(\"/\");\n let name = path.pop().split(\".\")[0];\n let name_path = name.split(\"_\");\n let len = name_path.length;\n sf.folder = path.join(\"/\");\n sf.nc = `${sf.folder}/${name_path[0]}_${name_path[len - 2]}_${\n name_path[len - 1]\n }.nc`;\n sf.satellite = name_path[len - 2];\n return sf;\n });\n return selected_files;\n };\n\n async componentDidMount() {\n var { files } = this.props;\n files = files.map((f) => {\n f.maxdatetime = new Date(f.maxdatetime);\n f.mindatetime = new Date(f.mindatetime);\n return f;\n });\n\n var end = new Date(this.props.dataset.maxdatetime);\n var start = new Date(end.getTime() - 4 * 24 * 60 * 60 * 1000);\n\n var selected_files = this.selectedFiles(files, start, end);\n\n this.setState({\n start,\n end,\n files,\n selected_files,\n });\n }\n\n render() {\n const { getLabel, dataset } = this.props;\n var { start, end, selected_files } = this.state;\n var { mindatetime, maxdatetime } = dataset;\n mindatetime = new Date(mindatetime);\n maxdatetime = new Date(maxdatetime);\n\n var table_inner = [];\n for (var file of selected_files) {\n table_inner.push(\n <tr key={file.filelink}>\n <td>{file.satellite}</td>\n <td>\n {file.mindatetime.toLocaleTimeString() +\n \" \" +\n file.mindatetime.toLocaleDateString()}\n </td>\n <td title=\"Download NetCDF\">\n <a href={file.nc}>\n <button className=\"download-rs\">Download</button>\n </a>\n </td>\n </tr>\n );\n }\n\n var git = \"https://gitlab.com/eawag-rs/sencast\";\n\n var url = \"https://api.datalakes-eawag.ch/externaldata/remotesensing/\";\n var swagger = url + \"api\";\n\n return (\n <div className=\"download\">\n <div className=\"info-title\">Licence</div>\n <a\n href={getLabel(\"licenses\", dataset.licenses_id, \"link\")}\n title={getLabel(\"licenses\", dataset.licenses_id, \"description\")}\n >\n {getLabel(\"licenses\", dataset.licenses_id, \"name\")}\n </a>\n <div className=\"info-title\">Citation</div>\n {dataset.citation}\n\n <div className=\"info-title\">Git Repository</div>\n <a href={git} target=\"_blank\" rel=\"noopener noreferrer\">\n {git}\n </a>\n\n <div className=\"info-title\">Available Data</div>\n <p>\n Data available from {mindatetime.toLocaleDateString()} to{\" \"}\n {maxdatetime.toLocaleDateString()}\n </p>\n\n <div className=\"info-title\">Download</div>\n <div className=\"remotesensingdownload\">\n Use the calender below to select your desired time period and then specific products can be downloaded.\n <div className=\"downloadinner\">\n <Calendar\n selectRange={true}\n minDate={mindatetime}\n maxDate={maxdatetime}\n value={[start, end]}\n onChange={this.onChangeRange}\n />\n </div>\n <div className=\"downloadinner\">\n <table>\n <thead>\n <tr>\n <th>Satellite</th>\n <th>Datetime</th>\n <th></th>\n </tr>\n </thead>\n <tbody>{table_inner}</tbody>\n </table>\n </div>\n </div>\n <div className=\"info-title\">API</div>\n\n <div className=\"api-meteolakes\">\n [ Base URL: {url} ]\n <SwaggerUI url={swagger} />\n </div>\n </div>\n );\n }\n}\n\nexport default RemoteSensingDownload;\n","import React, { Component } from \"react\";\nimport SidebarLayout from \"../../../format/sidebarlayout/sidebarlayout\";\nimport SliderDouble from \"../../../components/sliders/sliderdouble\";\nimport FilterBox from \"../../../components/filterbox/filterbox\";\nimport MapSelect from \"../../../graphs/leaflet/mapselect\";\nimport axios from \"axios\";\nimport \"../css/datadetail.css\";\n\nclass LocationMap extends Component {\n state = {\n lower: this.props.min,\n upper: this.props.max,\n loading: false,\n };\n onChangeBounds = (event) => {\n let lower = event[0] / 1000;\n let upper = event[1] / 1000;\n if (lower !== this.state.lower || upper !== this.state.upper) {\n this.setState({ lower, upper });\n }\n };\n clickPoint = (event) => {\n var { onChangeFileInt } = this.props;\n onChangeFileInt(event.target.options.id);\n };\n onChangeLower = (event) => {\n let lower = event.getTime() / 1000;\n if (lower !== this.state.lower) {\n this.setState({ lower });\n }\n };\n onChangeUpper = (event) => {\n let upper = event.getTime() / 1000;\n if (upper !== this.state.upper) {\n this.setState({ upper });\n }\n };\n fileIdSelect = (arr, filetype) => {\n var { files } = this.props;\n var out = [];\n if (filetype === \"nc\") {\n for (var i = 0; i < arr.length; i++) {\n out.push(files[arr[i]].filelineage);\n }\n } else {\n for (i = 0; i < arr.length; i++) {\n out.push(files[arr[i]].id);\n }\n }\n\n return out;\n };\n downloadFiles = (filetype, apiUrl, arr, title) => {\n this.setState({ loading: true }, () => {\n arr = this.fileIdSelect(arr, filetype);\n var { embargo } = this.props.dataset;\n var { upper } = this.state;\n var embargoDate =\n new Date().getTime() - embargo * 30.4167 * 24 * 60 * 60 * 1000;\n var datasetpassword = \"\";\n if (upper * 1000 > embargoDate) {\n datasetpassword = prompt(\n \"Selection contains embargoed data. (after \" +\n new Date(embargoDate) +\n \") Please enter the password to download data.\"\n );\n }\n var url;\n if (filetype === \"csv\") {\n url = `${apiUrl}/download/csv?password=${datasetpassword}`;\n } else {\n url = `${apiUrl}/download?password=${datasetpassword}`;\n }\n var name =\n title.replace(/\\s/g, \"\").toLowerCase() + \"_datalakesdownload.zip\";\n axios({\n method: \"post\",\n url: url,\n responseType: \"blob\",\n data: { ids: arr },\n })\n .then(({ data }) => {\n const downloadUrl = window.URL.createObjectURL(new Blob([data]));\n const link = document.createElement(\"a\");\n link.href = downloadUrl;\n link.setAttribute(\"download\", name);\n document.body.appendChild(link);\n link.click();\n link.remove();\n this.setState({ loading: false });\n })\n .catch((error) => {\n console.error(error);\n this.setState({ loading: false });\n if (error.response !== undefined && error.response.status === 403) {\n alert(\"Incorrect password provided\");\n } else {\n alert(\n \"Failed to download files, please select fewer files or access data directly from the git repository (a link can be found under the information tab).\"\n );\n }\n });\n });\n };\n render() {\n var {\n files,\n file,\n removeFile,\n selectFilesDatetime,\n min,\n max,\n dataset,\n apiUrl,\n } = this.props;\n var { lower, upper } = this.state;\n var plotfiles = files.map((f, index) => {\n f[\"fileid\"] = index;\n return f;\n });\n plotfiles = plotfiles.filter((f) => f.mindt >= lower && f.maxdt <= upper);\n var filecontrol = [];\n if (files.length > 0) {\n for (let i = 0; i < file.length; i++) {\n let value = new Date(files[file[i]].ave);\n let text = `${value.toDateString()} ${value.toLocaleTimeString()}`;\n let name = `(${files[file[i]].nc_name})`;\n filecontrol.push(\n <tr key={\"filename\" + file[i]}>\n <td>\n {text}\n <br />\n <span>{name}</span>\n </td>\n <td\n id={i}\n onClick={removeFile}\n title=\"Remove\"\n className=\"removefile\"\n >\n ✕\n </td>\n </tr>\n );\n }\n }\n\n return (\n <React.Fragment>\n <SidebarLayout\n sidebartitle=\"Plot Controls\"\n wide={true}\n left={\n <React.Fragment>\n <MapSelect\n datasets={plotfiles}\n clickPoint={this.clickPoint}\n files={file}\n />\n </React.Fragment>\n }\n rightNoScroll={\n <React.Fragment>\n <FilterBox\n title=\"Selected Files\"\n preopen=\"true\"\n content={\n <div className=\"mapfilecontrol\">\n <table className=\"filecontrol\">\n <tbody>{filecontrol}</tbody>\n </table>\n <button\n onClick={() =>\n this.downloadFiles(\n \"nc\",\n apiUrl,\n file,\n dataset.title\n )\n }\n title=\"Download selected files.\"\n >\n {this.state.loading\n ? \"Downloading, please wait...\"\n : `Download ${filecontrol.length} NetCDF files`}\n </button>\n </div>\n }\n />\n <FilterBox\n title=\"Date Filter\"\n preopen=\"true\"\n content={\n <div className=\"mapdatefilter\">\n <SliderDouble\n onChange={this.onChangeBounds}\n onChangeLower={this.onChangeLower}\n onChangeUpper={this.onChangeUpper}\n min={min}\n max={max}\n lower={lower}\n upper={upper}\n files={files}\n />\n <button\n onClick={() => selectFilesDatetime(plotfiles)}\n title=\"Select all profiles in time period.\"\n className={plotfiles.length < 21 ? \"\" : \"red\"}\n >\n {plotfiles.length < 21\n ? `Select ${plotfiles.length} profiles`\n : `Reduce time range to select max 20 files (currently ${plotfiles.length} files in time range)`}\n </button>\n </div>\n }\n />\n </React.Fragment>\n }\n />\n </React.Fragment>\n );\n }\n}\n\nexport default LocationMap;\n","export const interp2 = (x, y, z, type = \"linear\") => {\n if (z.length !== y.length) {\n throw new Error(\"y and z lengths do not match\");\n }\n if (z[0].length !== x.length) {\n throw new Error(\"x and z lengths do not match\");\n }\n if (z.flat().every(isNumeric)) {\n return { x, y, z };\n }\n\n if (type === \"linear\") {\n return linear(x, y, z);\n } else if (type === \"x-linear\") {\n return xlinear(x, y, z);\n } else if (type === \"y-linear\") {\n return ylinear(x, y, z);\n } else if (type === \"x-nearest\") {\n return xnearest(x, y, z);\n } else if (type === \"y-nearest\") {\n return ynearest(x, y, z);\n } else {\n throw new Error(\"Type \" + type + \" not recognised.\");\n }\n};\n\nconst linear = (x, y, z) => {\n return { x, y, z };\n};\n\nconst xlinear = (x, y, z) => {\n for (let i = 0; i < y.length; i++) {\n z[i] = linearInterpolate(x, z[i]);\n }\n return { x, y, z };\n};\n\nconst xnearest = (x, y, z) => {\n for (let i = 0; i < y.length; i++) {\n z[i] = nearestInterpolate(x, z[i]);\n }\n return { x, y, z };\n};\n\nconst ylinear = (x, y, z) => {\n for (let i = 0; i < x.length; i++) {\n let arr = z.map((zz) => zz[i]);\n let iArr = linearInterpolate(y, arr);\n z = z.map((zz, index) => {\n zz[i] = iArr[index];\n return zz;\n });\n }\n return { x, y, z };\n};\n\nconst ynearest = (x, y, z) => {\n for (let i = 0; i < x.length; i++) {\n let arr = z.map((zz) => zz[i]);\n let iArr = linearInterpolate(y, arr);\n z = z.map((zz, index) => {\n zz[i] = iArr[index];\n return zz;\n });\n }\n return { x, y, z };\n};\n\nconst linearInterpolate = (x, y) => {\n if (y.every(isNumeric)) {\n return y;\n } else if (y.filter((yy) => isNumeric(yy)).length < 2) {\n return y;\n } else {\n // If first value null\n if (!isNumeric(y[0])) {\n let arr = [];\n for (let i = 1; i < y.length; i++) {\n if (arr.length > 0) {\n break;\n } else if (isNumeric(y[i])) {\n arr.push(i);\n }\n }\n y[0] = y[arr[0]];\n }\n\n // If last value null\n if (!isNumeric(y[y.length - 1])) {\n let arr = [];\n for (let i = y.length - 1; i > -1; i--) {\n if (arr.length > 0) {\n break;\n } else if (isNumeric(y[i])) {\n arr.push(i);\n }\n }\n y[y.length - 1] = y[arr[0]];\n }\n\n // Get inner values\n let data = [];\n let interp = [];\n for (let i = 0; i < y.length; i++) {\n if (isNumeric(y[i])) {\n data.push(i);\n } else {\n interp.push(i);\n }\n }\n\n for (let i = 0; i < interp.length; i++) {\n let index = indexOfLower(interp[i], data);\n y[interp[i]] =\n y[data[index]] +\n ((x[interp[i]] - x[data[index]]) *\n (y[data[index + 1]] - y[data[index]])) /\n (x[data[index + 1]] - x[data[index]]);\n }\n return y;\n }\n};\n\nconst nearestInterpolate = (x, y) => {\n if (y.every(isNumeric)) {\n return y;\n } else {\n // If first value null\n if (!isNumeric(y[0])) {\n let arr = [];\n for (let i = 1; i < y.length; i++) {\n if (arr.length > 0) {\n break;\n } else if (isNumeric(y[i])) {\n arr.push(i);\n }\n }\n y[0] = y[arr[0]];\n }\n\n // If last value null\n if (!isNumeric(y[y.length - 1])) {\n let arr = [];\n for (let i = y.length - 1; i > -1; i--) {\n if (arr.length > 0) {\n break;\n } else if (isNumeric(y[i])) {\n arr.push(i);\n }\n }\n y[y.length - 1] = y[arr[0]];\n }\n\n // Get inner values\n let data = [];\n let xdata = [];\n let interp = [];\n for (let i = 0; i < y.length; i++) {\n if (isNumeric(y[i])) {\n data.push(i);\n xdata.push(x[i]);\n } else {\n interp.push(i);\n }\n }\n\n for (let i = 0; i < interp.length; i++) {\n let index = indexOfClosest(x[interp[i]], xdata);\n y[interp[i]] = y[data[index]];\n }\n return y;\n }\n};\n\nconst isNumeric = (n) => {\n return !isNaN(parseFloat(n)) && isFinite(n);\n};\n\nconst indexOfLower = (num, arr) => {\n for (var i = 1; i < arr.length; i++) {\n if (arr[i] > num) {\n return i - 1;\n }\n }\n return 0;\n};\n\nconst indexOfClosest = (num, arr) => {\n var index = 0;\n var diff = Math.abs(num - arr[0]);\n for (var val = 0; val < arr.length; val++) {\n var newdiff = Math.abs(num - arr[val]);\n if (newdiff < diff) {\n diff = newdiff;\n index = val;\n }\n }\n return index;\n};\n","import React, { Component } from \"react\";\nimport * as d3 from \"d3\";\nimport \"d3-contour\";\nimport GraphHeader from \"../graphheader/graphheader\";\nimport \"./heatmap.css\";\nimport isEqual from \"lodash/isEqual\";\nimport D3LineGraph from \"../linegraph/linegraph\";\nimport heatmap from \"canvas-heatmap\";\n\nclass D3HeatMap extends Component {\n state = {\n graphid: Math.round(Math.random() * 100000),\n download: false,\n fullscreen: false,\n display: this.props.display ? this.props.display : \"heatmap\",\n zoom: false,\n fontSize: 12,\n xgraph: false,\n ygraph: false,\n mousex: false,\n mousey: false,\n idx: 0,\n ads: 500,\n };\n\n editFontSize = (fontSize) => {\n this.setState({ fontSize });\n };\n\n toggleXgraph = () => {\n this.setState({ xgraph: !this.state.xgraph }, () => {\n window.dispatchEvent(new Event(\"resize\"));\n });\n };\n\n toggleYgraph = () => {\n this.setState({ ygraph: !this.state.ygraph }, () => {\n window.dispatchEvent(new Event(\"resize\"));\n });\n };\n\n toggleDownload = () => {\n this.setState({ download: !this.state.download });\n };\n\n toggleFullscreen = () => {\n var { fullscreen, xgraph, ygraph } = this.state;\n this.setState(\n {\n fullscreen: !fullscreen,\n xgraph: false,\n ygraph: false,\n },\n () => {\n this.setState({ xgraph, ygraph });\n }\n );\n };\n\n toggleDisplay = () => {\n var { display } = this.state;\n if (display === \"contour\") {\n display = \"heatmap\";\n } else {\n display = \"contour\";\n }\n this.setState({ display });\n };\n\n closest = (num, arr) => {\n var curr = 0;\n var diff = Math.abs(num - arr[curr]);\n for (var val = 0; val < arr.length; val++) {\n var newdiff = Math.abs(num - arr[val]);\n if (newdiff < diff) {\n diff = newdiff;\n curr = val;\n }\n }\n return curr;\n };\n\n median = (arr) => {\n const mid = Math.floor(arr.length / 2),\n nums = [...arr].sort((a, b) => a - b);\n return arr.length % 2 !== 0 ? nums[mid] : (nums[mid - 1] + nums[mid]) / 2;\n };\n\n gaps = (arr) => {\n var out = [];\n for (var i = 1; i < arr.length; i++) {\n out.push(arr[i] - arr[i - 1]);\n }\n return out;\n };\n\n indexOfClosest = (num, arr) => {\n var index = 0;\n var diff = Math.abs(num - arr[0]);\n for (var val = 0; val < arr.length; val++) {\n var newdiff = Math.abs(num - arr[val]);\n if (newdiff < diff) {\n diff = newdiff;\n index = val;\n }\n }\n return index;\n };\n\n columnSelect = (arr, i) => {\n return arr.map((a) => a[i]);\n };\n\n downloadCSV = () => {\n try {\n var { data, xlabel, ylabel, zlabel, xunits, yunits, zunits, title } =\n this.props;\n var printdata;\n if (Array.isArray(data)) {\n if (data.length !== 1) {\n alert(\n \"Dataset too complex for single CSV download, please use the download interface for accessing CSV results for this dataset.\"\n );\n return;\n } else {\n printdata = data[0];\n }\n } else {\n printdata = data;\n }\n var csvContent = `data:text/csv;charset=utf-8,,${ylabel} (${yunits})\\n${xlabel} (${xunits}),${zlabel} (${zunits})\\n`;\n csvContent = csvContent + `,${printdata.y.join(\",\")}\\n`;\n for (var i = 0; i < printdata.x.length; i++) {\n csvContent =\n csvContent +\n `${printdata.x[i]},${this.columnSelect(printdata.z, i).join(\",\")}\\n`;\n }\n var name = title + \".csv\";\n var encodedUri = encodeURI(csvContent);\n var link = document.createElement(\"a\");\n link.setAttribute(\"href\", encodedUri);\n link.setAttribute(\"download\", name);\n document.body.appendChild(link);\n link.click();\n this.setState({ download: false });\n } catch (e) {\n alert(\"Failed to convert data to .csv, please download in .json format.\");\n }\n };\n\n downloadJSON = () => {\n var { data, xlabel, ylabel, zlabel, xunits, yunits, zunits, title } =\n this.props;\n var arr = {\n ...{ xlabel, xunits, ylabel, yunits, zlabel, zunits, title },\n ...data,\n };\n var name = title.split(\" \").join(\"_\") + \".json\";\n var encodedUri =\n \"data:text/json;charset=utf-8,\" + encodeURIComponent(JSON.stringify(arr));\n var link = document.createElement(\"a\");\n link.setAttribute(\"href\", encodedUri);\n link.setAttribute(\"download\", name);\n document.body.appendChild(link);\n link.click();\n this.setState({ download: false });\n };\n\n getDomain = (domain) => {\n var minarr = domain.map((d) => d[0]);\n var maxarr = domain.map((d) => d[1]);\n var min = d3.extent(minarr)[0];\n var max = d3.extent(maxarr)[1];\n return [min, max];\n };\n\n thresholds = (domain, t) => {\n let thresholds = [];\n let step = (domain[1] - domain[0]) / (t + 1);\n for (let i = 0; i < t; i++) {\n thresholds.push(domain[0] + step * i);\n }\n return thresholds;\n };\n\n hover = (obj) => {\n this.setState(obj);\n };\n\n plotHeatMap = () => {\n var { display, graphid, fontSize, ads } = this.state;\n if (this.props.data !== undefined) {\n try {\n var {\n data,\n xlabel,\n ylabel,\n zlabel,\n xunits,\n yunits,\n zunits,\n bcolor,\n colors,\n title,\n minvalue,\n maxvalue,\n yReverse,\n xReverse,\n thresholdStep,\n language,\n levels,\n } = this.props;\n\n var options = {\n xLabel: xlabel,\n yLabel: ylabel,\n zLabel: zlabel,\n xUnit: xunits,\n yUnit: yunits,\n zUnit: zunits ? zunits : \"\",\n yReverse,\n xReverse,\n thresholdStep: parseFloat(thresholdStep),\n zMin: minvalue,\n zMax: maxvalue,\n colors,\n title,\n language,\n backgroundColor: bcolor,\n autoDownsample: ads,\n fontSize,\n contour: display === \"contour\",\n hover: this.hover,\n setDownloadGraphDiv: \"png\" + graphid,\n levels,\n };\n heatmap(\"vis\" + graphid, data, options);\n } catch (e) {\n console.log(\"Heatmap failed to plot\", e);\n }\n }\n };\n\n componentDidMount() {\n if (\"display\" in this.props) {\n this.setState({ display: this.props.display });\n }\n this.plotHeatMap();\n window.addEventListener(\"resize\", this.plotHeatMap);\n }\n\n componentWillUnmount() {\n window.removeEventListener(\"resize\", this.plotHeatMap);\n }\n\n componentDidUpdate(prevProps, prevState) {\n var { display, fontSize, fullscreen, xgraph, ygraph } = this.state;\n if (\n !isEqual(prevProps, this.props) ||\n display !== prevState.display ||\n fontSize !== prevState.fontSize ||\n fullscreen !== prevState.fullscreen ||\n xgraph !== prevState.xgraph ||\n ygraph !== prevState.ygraph\n )\n this.plotHeatMap();\n }\n\n render() {\n var {\n graphid,\n download,\n fullscreen,\n display,\n fontSize,\n xgraph,\n ygraph,\n mousex,\n mousey,\n idx,\n } = this.state;\n var {\n title,\n ylabel,\n xlabel,\n zlabel,\n xunits,\n yunits,\n zunits,\n data,\n xReverse,\n yReverse,\n maxvalue,\n minvalue,\n } = this.props;\n\n const TimeLabels = [\"Time\", \"time\", \"datetime\", \"Datetime\", \"Date\", \"date\"];\n\n var xy = \" \";\n if (xgraph) xy = xy + \"x\";\n if (ygraph) xy = xy + \"y\";\n\n var dxy = [];\n var dxx = [];\n var dyy = [];\n var dyx = [];\n\n try {\n let linedata = data;\n if (Array.isArray(linedata)) linedata = linedata[idx];\n if (xgraph && mousey !== false && linedata) {\n dxx = linedata.x;\n dxy = linedata.z[mousey];\n }\n if (ygraph && mousex !== false && linedata) {\n dyx = linedata.z.map((z) => z[mousex]);\n dyy = linedata.y;\n }\n } catch (e) {\n console.log(e);\n }\n\n var datax = [{ x: dxx, y: dxy }];\n var datay = [{ x: dyx, y: dyy }];\n\n var x_dots = false;\n var y_dots = false;\n\n if (datax[0].x.length < 100) x_dots = true\n if (datay[0].y.length < 100) y_dots = true\n\n return (\n <div className={fullscreen ? \"vis-main full\" : \"vis-main\"}>\n <div className=\"heatmap-main\">\n {this.props.header !== false && (\n <div className=\"heatmap-header\">\n <GraphHeader\n id={graphid}\n title={title}\n download={download}\n display={display}\n fontSize={fontSize}\n fullscreen={fullscreen}\n toggleDownload={this.toggleDownload}\n editFontSize={this.editFontSize}\n toggleDisplay={this.toggleDisplay}\n toggleFullscreen={this.toggleFullscreen}\n downloadJSON={this.downloadJSON}\n downloadCSV={this.downloadCSV}\n toggleXgraph={this.toggleXgraph}\n toggleYgraph={this.toggleYgraph}\n />\n </div>\n )}\n\n <div className=\"heatmap-graphs\">\n <div className={\"heatmap-top\" + xy}>\n <div className={\"heatmap-left\" + xy}>\n {ygraph && (\n <D3LineGraph\n data={datay}\n xlabel={zlabel}\n ylabel={ylabel}\n xunits={zunits}\n yunits={yunits}\n xmax={maxvalue}\n xmin={minvalue}\n fontSize={fontSize}\n xReverse={false}\n yReverse={yReverse}\n lcolor={[\"black\"]}\n lweight={[1]}\n bcolor={[\"white\"]}\n simple={true}\n plotdots={y_dots}\n xscale={TimeLabels.includes(zlabel) ? \"Time\" : \"\"}\n yscale={TimeLabels.includes(ylabel) ? \"Time\" : \"\"}\n />\n )}\n </div>\n <div className={\"heatmap-right\" + xy} id={\"vis\" + graphid} />\n </div>\n <div className={\"heatmap-bottom\" + xy}>\n {xgraph && (\n <D3LineGraph\n data={datax}\n xlabel={xlabel}\n ylabel={zlabel}\n xunits={xunits}\n yunits={zunits}\n fontSize={fontSize}\n xReverse={xReverse}\n yReverse={false}\n lcolor={[\"black\"]}\n lweight={[1]}\n bcolor={[\"white\"]}\n plotdots={x_dots}\n xscale={TimeLabels.includes(xlabel) ? \"Time\" : \"\"}\n yscale={TimeLabels.includes(zlabel) ? \"Time\" : \"\"}\n simple={true}\n />\n )}\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default D3HeatMap;\n","import React, { Component } from \"react\";\nimport \"./slider.css\";\nimport SliderSelect from \"../SliderSelect/SliderSelect\";\n\nclass SliderSingle extends Component {\n formatDate = (raw) => {\n return new Date(raw * 1000);\n };\n\n render() {\n var { value, onChange, type, min, max, file, files, onChangeFileInt } =\n this.props;\n var valueStr;\n if (type === \"time\") {\n valueStr =\n new Date(value).toDateString() +\n \" \" +\n new Date(value).toLocaleTimeString();\n min = this.formatDate(min);\n max = this.formatDate(max);\n } else if (type === \"depth\") {\n valueStr = value.toString();\n }\n var currentfile = file[file.length - 1];\n const availability = files.map((f) => [\n new Date(f.mindatetime),\n new Date(f.maxdatetime),\n ]);\n return (\n <div\n className=\"datetime-selector\"\n title=\"Hint: use arrow keys to move between timesteps\"\n >\n <div>\n <div\n className=\"slider-arrow\"\n onClick={() =>\n onChangeFileInt(\n Math.min(files.length - 1, parseInt(currentfile) + 1)\n )\n }\n >\n <\n </div>\n <div className=\"single-value\">{valueStr}</div>\n <div\n className=\"slider-arrow\"\n onClick={() =>\n onChangeFileInt(Math.max(0, parseInt(currentfile) - 1))\n }\n >\n >\n </div>\n </div>\n <SliderSelect\n type=\"single\"\n min={min}\n max={max}\n value={value}\n data={availability}\n onChangeValue={onChange}\n />\n </div>\n );\n }\n}\n\nexport default SliderSingle;\n","import React, { Component } from \"react\";\nimport SliderSelect from \"../SliderSelect/SliderSelect\";\nimport \"./slider.css\";\n\nclass NumberSliderDouble extends Component {\n state = {\n tupper: this.props.upper,\n tlower: this.props.lower,\n };\n onUpdate = (event) => {\n this.setState({ tlower: event[0], tupper: event[1] });\n };\n componentDidUpdate(prevProps) {\n if (this.props.upper !== prevProps.upper && !isNaN(this.props.upper)) {\n this.setState({ tupper: this.props.upper });\n }\n if (this.props.lower !== prevProps.lower && !isNaN(this.props.lower)) {\n this.setState({ tlower: this.props.lower });\n }\n }\n render() {\n var { tlower, tupper } = this.state;\n var {\n min,\n max,\n lower,\n upper,\n unit,\n onChangeLower,\n onChangeUpper,\n } = this.props;\n var availability = [[min, max]];\n return (\n <div className=\"datetime-selector\">\n <div>\n {tlower.toFixed(2)}\n {unit} > {tupper.toFixed(2)}\n {unit}\n </div>\n <SliderSelect\n type=\"double\"\n min={min}\n max={max}\n lower={lower}\n upper={upper}\n data={availability}\n onChangeLower={onChangeLower}\n onChangeUpper={onChangeUpper}\n />\n </div>\n );\n }\n}\n\nexport default NumberSliderDouble;\n","import React, { Component } from \"react\";\nimport \"./loaddatasets.css\";\n\nclass LoadDataSets extends Component {\n downloadProgress = (data) => {\n var len = data.length;\n var count = 0;\n for (var i = 0; i < len; i++) {\n if (data[i] === 0) count++;\n }\n count = len - count;\n return count;\n };\n\n render() {\n var { data } = this.props;\n var count = this.downloadProgress(data);\n\n return (\n <div className=\"loaddatasets\">\n {count < data.length && (\n <div className=\"linegraph-file\">\n {count} of {data.length} files in memory.\n {/*<button className=\"read-button\" onClick={() => downloadData()}>\n Preload full dataset\n </button>*/}\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default LoadDataSets;\n","import React, { Component } from \"react\";\nimport DateTimePicker from \"react-datetime-picker\";\nimport Select from \"react-select\";\nimport axios from \"axios\";\nimport { apiUrl } from \"../../config.json\";\nimport \"./reportissue.css\";\n\nclass ReportIssue extends Component {\n state = {\n reported: false,\n modal: false,\n maintenance: false,\n message: \"\",\n email: \"\",\n start: new Date(),\n end: new Date(),\n parameters: null,\n description: \"\",\n reporter: \"\",\n sensordepths: \"\",\n submitted: false,\n error: false,\n data: [],\n };\n\n openModal = () => {\n this.setState({ modal: true });\n };\n\n closeModal = (event) => {\n if (\n event.target.className === \"report-modal\" ||\n event.target.className === \"close-modal\"\n )\n this.setState({ modal: false });\n };\n\n updateState = (parameter, event) => {\n if (event == null) {\n this.setState({ [parameter]: null });\n } else if (!(\"target\" in event)) this.setState({ [parameter]: event });\n };\n\n addAllParameters = () => {\n var parameters = this.props.datasetparameters\n .filter((d) => ![1, 2, 18, 27, 28, 29, 30].includes(d.parameters_id))\n .map((p) => {\n return {\n value: p.id,\n label: p.name + (p.detail !== \"none\" ? ` (${p.detail})` : \"\"),\n id: p.parameters_id,\n };\n });\n this.setState({ parameters });\n };\n\n updateInput = (parameter, event) => {\n this.setState({ [parameter]: event.target.value });\n };\n\n updateMessage = (event) => {\n this.setState({ message: event.target.value });\n };\n\n updateEmail = (event) => {\n this.setState({ email: event.target.value });\n };\n\n toggleMaintenance = () => {\n if (!this.state.maintenance) {\n var key = \"thetis\";\n var output = window.prompt(\n \"Please enter the password to report maintenance.\",\n \"\"\n );\n if (key !== output) {\n window.alert(\"Incorrect password.\");\n } else {\n this.setState({ maintenance: !this.state.maintenance });\n }\n } else {\n this.setState({ maintenance: !this.state.maintenance });\n }\n };\n\n submitReport = async () => {\n var { message, email } = this.state;\n var { dataset, repositories_id } = this.props;\n var content = {\n from: {\n email: \"runnalls.james@gmail.com\",\n },\n personalizations: [\n {\n to: [\n {\n email: \"james.runnalls@eawag.ch\",\n },\n ],\n dynamic_template_data: {\n dataset: dataset,\n email: email,\n url: window.location.href,\n message: message,\n },\n },\n ],\n template_id: \"d-819e0202b4724bbb99069fdff49d667a\",\n };\n var issues = {\n title: message,\n description: \"Reported by: \" + email,\n repo_id: repositories_id,\n };\n try {\n await axios.post(apiUrl + \"/contact\", content);\n try {\n await axios.post(apiUrl + \"/issues\", issues);\n } catch (e) {\n console.error(e);\n }\n this.setState({ reported: true, error: false });\n } catch (e) {\n console.error(e);\n this.setState({ error: true });\n }\n };\n\n deleteMaintenance = async (ids) => {\n for (let i = 0; i < ids.length; i++) {\n await axios.delete(apiUrl + \"/maintenance/\" + ids[i]);\n }\n this.updateMaintenance();\n };\n\n updateMaintenance = async () => {\n var { data } = await axios.get(apiUrl + \"/maintenance/\" + this.props.id);\n this.setState({ data });\n };\n\n submitMaintenance = async () => {\n var { start, end, parameters, description, reporter, sensordepths } =\n this.state;\n var { id } = this.props;\n\n if (parameters === null) {\n window.alert(\"You must select at least one parameter.\");\n return;\n }\n var p = parameters.map((p) => p.id);\n var dp = parameters.map((p) => p.value);\n var content = {\n id,\n start,\n end,\n parameters: p,\n description,\n reporter,\n sensordepths,\n datasetparameters: dp,\n };\n\n try {\n await axios.post(apiUrl + \"/maintenance\", content);\n this.updateMaintenance();\n this.setState({\n start: new Date(),\n end: new Date(),\n parameters: null,\n description: \"\",\n reporter: \"\",\n sensordepths: \"\",\n error: false,\n });\n } catch (e) {\n console.error(e);\n this.setState({ error: true });\n }\n };\n\n formatTime = (time) => {\n let parts = time.split(\"T\");\n return parts[0] + \" \" + parts[1].slice(0, 5);\n };\n\n componentDidMount = async () => {\n this.updateMaintenance();\n };\n\n render() {\n var {\n reported,\n modal,\n maintenance,\n start,\n end,\n parameters,\n description,\n reporter,\n sensordepths,\n error,\n data,\n } = this.state;\n var { dataset, datasetparameters } = this.props;\n var dp = datasetparameters\n .filter((d) => ![1, 2, 18, 27, 28, 29, 30].includes(d.parameters_id))\n .map((p) => {\n return {\n value: p.id,\n label: p.name + (p.detail !== \"none\" ? ` (${p.detail})` : \"\"),\n id: p.parameters_id,\n };\n });\n var sd =\n datasetparameters.filter(\n (dp) => dp.parameters_id === 2 && dp.axis === \"y\"\n ).length > 0;\n\n var dict = {};\n for (let i = 0; i < data.length; i++) {\n let dt = data[i].starttime.toString() + data[i].endtime.toString();\n if (dt in dict) {\n dict[dt][\"parameters\"].push(data[i].name + (data[i].detail !== \"none\" ? ` (${data[i].detail})` : \"\"));\n dict[dt][\"id\"].push(data[i].id);\n } else {\n dict[dt] = {\n start: data[i].starttime,\n end: data[i].endtime,\n parameters: [data[i].name + (data[i].detail !== \"none\" ? ` (${data[i].detail})` : \"\")],\n description: data[i].description,\n id: [data[i].id],\n reporter: data[i].reporter,\n };\n }\n }\n\n var rows = [];\n for (var key in dict) {\n let ids = dict[key].id;\n rows.push(\n <tr key={key}>\n <td>{this.formatTime(dict[key].start)}</td>\n <td>{this.formatTime(dict[key].end)}</td>\n <td>{dict[key].parameters.join(\", \")}</td>\n <td>{dict[key].description}</td>\n <td>{dict[key].reporter}</td>\n <td\n style={{ width: \"20px\" }}\n className=\"close\"\n title=\"Delete report\"\n onClick={() => this.deleteMaintenance(ids)}\n >\n ✕\n </td>\n </tr>\n );\n }\n\n return (\n <div className=\"report-issue\">\n <div className=\"report-button\">\n <button\n className=\"click\"\n onClick={this.openModal}\n title=\"Does something not look right with this dataset?\"\n >\n Report Issue\n </button>\n </div>\n {modal && (\n <div className=\"report-modal\" onClick={this.closeModal}>\n <div className=\"report-modal-box\">\n <div className=\"close-modal\" onClick={this.closeModal}>\n ×\n </div>\n <h2>Report Issue</h2>\n <div className=\"reportslider\">\n Report Maintenance\n <label className=\"switch\">\n <input\n type=\"checkbox\"\n checked={maintenance}\n onChange={this.toggleMaintenance}\n />\n <span className=\"slider round\"></span>\n </label>\n </div>\n {maintenance ? (\n <React.Fragment>\n <p>Current maintenance periods:</p>\n <table>\n <tbody>\n <tr>\n <th>Start</th>\n <th>End</th>\n <th>Parameters</th>\n <th>Description</th>\n <th>Reporter</th>\n <th></th>\n </tr>\n {rows}\n </tbody>\n </table>\n <p>\n Please complete the form below to suggest a maintenance\n period for the dataset.\n </p>\n <table className=\"report\">\n <tbody>\n <tr>\n <th>Start time</th>\n <td>\n <DateTimePicker\n onChange={(event) =>\n this.updateState(\"start\", event)\n }\n value={start}\n clearIcon={null}\n calendarIcon={null}\n disableClock={true}\n format={\"dd.MM.y H:mm\"}\n />\n </td>\n </tr>\n <tr>\n <th>End time</th>\n <td>\n <DateTimePicker\n onChange={(event) => this.updateState(\"end\", event)}\n value={end}\n clearIcon={null}\n calendarIcon={null}\n disableClock={true}\n format={\"dd.MM.y H:mm\"}\n />\n </td>\n </tr>\n <tr>\n <th>Parameters</th>\n <td>\n <Select\n options={dp}\n value={parameters}\n isMulti\n className=\"multi-select\"\n classNamePrefix=\"reportparameter\"\n onChange={(event) =>\n this.updateState(\"parameters\", event)\n }\n />\n <div\n className=\"addbutton\"\n onClick={this.addAllParameters}\n >\n Add all\n </div>\n </td>\n </tr>\n <tr>\n <th>Description</th>\n <td>\n <textarea\n value={description}\n onChange={(event) =>\n this.updateInput(\"description\", event)\n }\n />\n </td>\n </tr>\n {sd && (\n <tr>\n <th>Comma Seperated Sensor Depths</th>\n <td>\n <textarea\n value={sensordepths}\n placeholder=\"1.6,4.5,18.0\"\n onChange={(event) =>\n this.updateInput(\"sensordepths\", event)\n }\n />\n </td>\n </tr>\n )}\n <tr>\n <th>Reporter</th>\n <td>\n <input\n value={reporter}\n type=\"text\"\n onChange={(event) =>\n this.updateInput(\"reporter\", event)\n }\n />\n </td>\n </tr>\n </tbody>\n </table>\n <div className=\"modal-submit\">\n {error &&\n \"Failed to submit please refresh the page and try again.\"}\n <button className=\"click\" onClick={this.submitMaintenance}>\n Submit Report\n </button>\n </div>\n </React.Fragment>\n ) : (\n <React.Fragment>\n <p>\n Thanks for filling out a data report, please add a message\n describing the issue and your email address in case we have\n further questions.\n </p>\n <p>Dataset: {dataset}</p>\n <textarea\n placeholder=\"Please type your report here.\"\n onChange={this.updateMessage}\n readOnly={reported}\n />\n <input\n type=\"text\"\n placeholder=\"Email address\"\n onChange={this.updateEmail}\n readOnly={reported}\n />\n {reported ? (\n <p>\n Thanks for submitting a data report. We will look into it\n as soon as possible.\n </p>\n ) : (\n <div className=\"modal-submit\">\n {error &&\n \"Failed to submit please refresh the page and try again.\"}\n <button className=\"click\" onClick={this.submitReport}>\n Submit Report\n </button>\n </div>\n )}\n </React.Fragment>\n )}\n </div>\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default ReportIssue;\n","import React, { Component } from \"react\";\nimport Loading from \"../../../components/loading/loading\";\nimport D3HeatMap from \"../../../graphs/d3/heatmap/heatmap\";\nimport D3LineGraph from \"../../../graphs/d3/linegraph/linegraph\";\nimport SliderDouble from \"../../../components/sliders/sliderdouble\";\nimport \"../css/bafu.css\";\n\nclass Bafu extends Component {\n onChangeLowerX = (event) => {\n this.props.onChangeX([event.getTime(), this.props.upperX * 1000]);\n };\n onChangeUpperX = (event) => {\n this.props.onChangeX([this.props.lowerX * 1000, event.getTime()]);\n };\n render() {\n var {\n graph,\n plotdata,\n title,\n xlabel,\n ylabel,\n zlabel,\n xunits,\n yunits,\n zunits,\n bcolor,\n colors,\n plotdots,\n thresholdStep,\n confidence,\n lcolor,\n lweight,\n xReverse,\n yReverse,\n yScale,\n minX,\n maxX,\n lowerX,\n upperX,\n files,\n onChangeX,\n dropdown,\n lang,\n } = this.props;\n thresholdStep = 50;\n\n var lang_map = { en: \"name\", de: \"german\", fr: \"french\", it: \"italian\" };\n\n if (ylabel !== \"\") {\n var ylabel_info = dropdown.parameters.find((f) => f.name === ylabel);\n if (ylabel_info[lang_map[lang]] !== null)\n ylabel = ylabel_info[lang_map[lang]];\n }\n\n if (zlabel !== \"\") {\n var zlabel_info = dropdown.parameters.find((f) => f.name === zlabel);\n if (zlabel_info[lang_map[lang]] !== null)\n zlabel = zlabel_info[lang_map[lang]];\n }\n\n switch (graph) {\n default:\n return (\n <React.Fragment>\n <table className=\"loading-table\">\n <tbody>\n <tr>\n <td>\n <Loading />\n Loading Data\n </td>\n </tr>\n </tbody>\n </table>\n </React.Fragment>\n );\n case \"heatmap\":\n return (\n <div className=\"bafu\">\n <div className=\"graph\">\n <D3HeatMap\n data={plotdata}\n title={title}\n xlabel={xlabel}\n ylabel={ylabel}\n zlabel={zlabel}\n xunits={xunits}\n yunits={yunits}\n zunits={zunits}\n bcolor={bcolor}\n colors={colors}\n thresholdStep={thresholdStep}\n yReverse={yReverse}\n xReverse={xReverse}\n display={\"contour\"}\n header={false}\n language={lang}\n levels={true}\n />\n </div>\n <div className=\"selector\">\n <SliderDouble\n onChange={onChangeX}\n onChangeLower={this.onChangeLowerX}\n onChangeUpper={this.onChangeUpperX}\n min={minX}\n max={maxX}\n lower={lowerX}\n upper={upperX}\n files={files}\n language={lang}\n />\n </div>\n </div>\n );\n case \"linegraph\":\n lcolor[0] = \"#0E18EB\";\n lcolor[1] = \"#FF0000\";\n lweight[0] = 2;\n lweight[1] = 2;\n var legend = [];\n if (plotdata.length > 1) {\n var yi = dropdown.parameters.find((f) => f.id === 5);\n var yaxis_dict = {\n en: \"name\",\n de: \"german\",\n it: \"italian\",\n fr: \"french\",\n };\n ylabel = yi[yaxis_dict[lang]];\n var dp1 = this.props.datasetparameters.find(\n (d) => d.axis === this.props.yaxis[0]\n );\n var dp2 = this.props.datasetparameters.find(\n (d) => d.axis === this.props.yaxis[1]\n );\n legend = [\n {\n id: 0,\n color: lcolor[0],\n text:\n dropdown.parameters.find((f) => f.id === dp1.parameters_id)[\n yaxis_dict[lang]\n ] + (dp1.detail === \"none\" ? \"\" : ` (${dp1.detail})`),\n value: \"\",\n xaxis: \"x\",\n yaxis: \"y\",\n },\n {\n id: 1,\n color: lcolor[1],\n text:\n dropdown.parameters.find((f) => f.id === dp2.parameters_id)[\n yaxis_dict[lang]\n ] + (dp2.detail === \"none\" ? \"\" : ` (${dp2.detail})`),\n value: \"\",\n xaxis: \"x\",\n yaxis: \"y\",\n },\n ];\n }\n return (\n <div className=\"bafu\" id=\"bafu\">\n <div className=\"graph\">\n <D3LineGraph\n data={plotdata}\n confidence={confidence}\n title={title}\n legend={legend}\n xlabel={xlabel}\n ylabel={ylabel}\n xunits={xunits}\n yunits={yunits}\n lcolor={lcolor}\n lweight={lweight}\n bcolor={bcolor}\n xscale={\"Time\"}\n yscale={yScale}\n yReverse={yReverse}\n xReverse={xReverse}\n plotdots={plotdots}\n setDownloadGraph={this.setDownloadGraph}\n box={true}\n grid={true}\n header={false}\n fontSize={14}\n language={lang}\n border={true}\n />\n </div>\n <div className=\"selector\">\n <SliderDouble\n onChange={onChangeX}\n onChangeLower={this.onChangeLowerX}\n onChangeUpper={this.onChangeUpperX}\n min={minX}\n max={maxX}\n lower={lowerX}\n upper={upperX}\n files={files}\n language={lang}\n />\n </div>\n </div>\n );\n }\n }\n}\n\nexport default Bafu;\n","import React, { Component } from \"react\";\nimport Loading from \"../../../components/loading/loading\";\nimport D3HeatMap from \"../../../graphs/d3/heatmap/heatmap\";\nimport D3LineGraph from \"../../../graphs/d3/linegraph/linegraph\";\nimport \"../css/display.css\";\n\nclass Display extends Component {\n calculateMovingAverage = (array, windowSize) => {\n if (windowSize <= 0 || windowSize > array.length) {\n throw new Error(\"Window size is invalid\");\n }\n\n const movingAverages = [];\n\n for (let i = 0; i < array.length; i++) {\n const windowStart = Math.max(0, i - windowSize + 1);\n const window = array.slice(windowStart, i + 1);\n const sum = window.reduce((acc, num) => acc + num, 0);\n const average = sum / window.length;\n movingAverages.push(average);\n }\n\n return movingAverages;\n };\n render() {\n var {\n graph,\n plotdata,\n title,\n xlabel,\n ylabel,\n zlabel,\n xunits,\n yunits,\n zunits,\n bcolor,\n colors,\n thresholdStep,\n confidence,\n lcolor,\n lweight,\n xReverse,\n yReverse,\n yScale,\n dropdown,\n lang,\n } = this.props;\n thresholdStep = 50;\n\n var lang_map = { en: \"name\", de: \"german\", fr: \"french\", it: \"italian\" };\n\n if (ylabel !== \"\") {\n var ylabel_info = dropdown.parameters.find((f) => f.name === ylabel);\n if (ylabel_info[lang_map[lang]] !== null)\n ylabel = ylabel_info[lang_map[lang]];\n }\n\n if (zlabel !== \"\") {\n var zlabel_info = dropdown.parameters.find((f) => f.name === zlabel);\n if (zlabel_info[lang_map[lang]] !== null)\n zlabel = zlabel_info[lang_map[lang]];\n }\n\n var value = \"\";\n var time = \"\";\n\n var data = JSON.parse(JSON.stringify(plotdata));\n\n if (data.length > 0) {\n try {\n data[0].x = data[0].x.map((d) => new Date(d));\n value = data[0].y[data[0].y.length - 1];\n let x = data[0].x[data[0].x.length - 1];\n var now = new Date();\n let diff = now - x;\n if (diff < 1000 * 3600) {\n time = `${Math.round(diff / (1000 * 60))} minutes`;\n } else if (diff < 1000 * 3600 * 24) {\n time = `${Math.round(diff / (100 * 3600)) / 10} hours`;\n } else {\n time = `${Math.round(diff / (100 * 3600 * 24)) / 10} days`;\n }\n } catch (e) {\n console.error(e);\n }\n try {\n data[0].y = this.calculateMovingAverage(data[0].y, 10);\n } catch (e) {\n console.error(e);\n }\n }\n\n var head = (\n <div className=\"header\">\n <div className=\"inner-header\">\n <div className=\"value\">{value}°C</div>\n <div className=\"time\">Last reading: {time} ago</div>\n <div className=\"title\">{title}</div>\n <a href={window.location.href.split(\"?\")[0]}>\n <button>More info</button>\n </a>\n </div>\n\n <div>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n className=\"waves\"\n preserveAspectRatio=\"none\"\n viewBox=\"0 24 150 28\"\n >\n <defs>\n <path\n id=\"gentle-wave\"\n d=\"M-160 44c30 0 58-18 88-18s58 18 88 18 58-18 88-18 58 18 88 18v44h-352z\"\n ></path>\n </defs>\n <g className=\"parallax\">\n <use\n x=\"48\"\n fill=\"rgba(255,255,255,0.7\"\n xlinkHref=\"#gentle-wave\"\n ></use>\n <use\n x=\"48\"\n y=\"3\"\n fill=\"rgba(255,255,255,0.5)\"\n xlinkHref=\"#gentle-wave\"\n ></use>\n <use\n x=\"48\"\n y=\"5\"\n fill=\"rgba(255,255,255,0.3)\"\n xlinkHref=\"#gentle-wave\"\n ></use>\n <use x=\"48\" y=\"7\" fill=\"#fff\" xlinkHref=\"#gentle-wave\"></use>\n </g>\n </svg>\n </div>\n </div>\n );\n\n switch (graph) {\n default:\n return (\n <React.Fragment>\n <table className=\"loading-table\">\n <tbody>\n <tr>\n <td>\n <Loading />\n Loading Data\n </td>\n </tr>\n </tbody>\n </table>\n </React.Fragment>\n );\n case \"heatmap\":\n return (\n <div className=\"display\">\n {head}\n <div className=\"graph\">\n <D3HeatMap\n data={data}\n title={title}\n xlabel={xlabel}\n ylabel={ylabel}\n zlabel={zlabel}\n xunits={xunits}\n yunits={yunits}\n zunits={zunits}\n bcolor={bcolor}\n colors={colors}\n thresholdStep={thresholdStep}\n yReverse={yReverse}\n xReverse={xReverse}\n display={\"contour\"}\n header={false}\n language={lang}\n levels={true}\n />\n </div>\n </div>\n );\n case \"linegraph\":\n lcolor[0] = \"#673AB7\";\n lcolor[1] = \"#FF0000\";\n lweight[0] = 2;\n lweight[1] = 2;\n var legend = [];\n return (\n <div className=\"display\" id=\"display\">\n {head}\n <div className=\"graph\">\n <D3LineGraph\n data={data}\n confidence={confidence}\n title={title}\n legend={legend}\n xlabel={xlabel}\n ylabel={ylabel}\n xunits={xunits}\n yunits={yunits}\n lcolor={lcolor}\n lweight={lweight}\n bcolor={bcolor}\n xscale={\"Time\"}\n yscale={yScale}\n yReverse={yReverse}\n xReverse={xReverse}\n plotdots={false}\n setDownloadGraph={this.setDownloadGraph}\n header={false}\n fontSize={14}\n language={lang}\n border={true}\n curve={true}\n />\n </div>\n </div>\n );\n }\n }\n}\n\nexport default Display;\n","import React, { Component } from \"react\";\nimport * as d3 from \"d3\";\nimport { interp2 } from \"../../../components/interp2/interp2\";\nimport SidebarLayout from \"../../../format/sidebarlayout/sidebarlayout\";\nimport ColorManipulation from \"../../../components/colormanipulation/colormanipulation\";\nimport DataSelect from \"../../../components/dataselect/dataselect\";\nimport Loading from \"../../../components/loading/loading\";\nimport D3HeatMap from \"../../../graphs/d3/heatmap/heatmap\";\nimport SliderDouble from \"../../../components/sliders/sliderdouble\";\nimport SliderSingle from \"../../../components/sliders/slidersingle\";\nimport NumberSliderDouble from \"../../../components/sliders/sliderdoublenumber\";\nimport LoadDataSets from \"../../../components/loaddatasets/loaddatasets\";\nimport D3LineGraph from \"../../../graphs/d3/linegraph/linegraph\";\nimport FilterBox from \"../../../components/filterbox/filterbox\";\nimport colorlist from \"../../../components/colorramp/colors\";\nimport isArray from \"lodash/isArray\";\nimport isInteger from \"lodash/isInteger\";\nimport ReportIssue from \"../../../components/reportissue/reportissue\";\nimport Connect from \"../img/connect.svg\";\nimport Bafu from \"./bafu\";\nimport Display from \"./display\";\n\nclass Graph extends Component {\n render() {\n var {\n graph,\n plotdata,\n title,\n xlabel,\n ylabel,\n zlabel,\n xunits,\n yunits,\n zunits,\n bcolor,\n colors,\n plotdots,\n thresholdStep,\n display,\n lowerZ,\n upperZ,\n confidence,\n lcolor,\n lweight,\n timeaxis,\n xReverse,\n yReverse,\n file,\n files,\n xaxis,\n yaxis,\n xScale,\n yScale,\n datasetparameters,\n } = this.props;\n switch (graph) {\n default:\n return (\n <React.Fragment>\n <table className=\"loading-table\">\n <tbody>\n <tr>\n <td>\n <Loading />\n Loading Data\n </td>\n </tr>\n </tbody>\n </table>\n </React.Fragment>\n );\n case \"heatmap\":\n return (\n <React.Fragment>\n <D3HeatMap\n data={plotdata}\n title={title}\n xlabel={xlabel}\n ylabel={ylabel}\n zlabel={zlabel}\n xunits={xunits}\n yunits={yunits}\n zunits={zunits}\n bcolor={bcolor}\n colors={colors}\n thresholdStep={thresholdStep}\n minvalue={lowerZ}\n maxvalue={upperZ}\n yReverse={yReverse}\n xReverse={xReverse}\n display={display}\n />\n </React.Fragment>\n );\n case \"linegraph\":\n if (timeaxis === \"x\") xScale = \"Time\";\n if (timeaxis === \"y\") yScale = \"Time\";\n var x2label = \"\";\n var x2units = \"\";\n var y2label = \"\";\n var y2units = \"\";\n\n var legend = [];\n if (xaxis.length > 1 && file.length < 2) {\n xlabel = \"\";\n for (let i = 0; i < xaxis.length; i++) {\n let dp = datasetparameters.find((d) => d.axis === xaxis[i]);\n let axis = \"x\";\n if (i > 0 && legend[0].unit !== dp.unit) {\n axis = \"x2\";\n xlabel = this.props.xlabel;\n x2label = dp.name;\n x2units = dp.unit;\n }\n legend.push({\n id: i,\n color: lcolor[i],\n text: dp.name + (dp.detail === \"none\" ? \"\" : ` (${dp.detail})`),\n unit: dp.unit,\n xaxis: axis,\n yaxis: \"y\",\n });\n }\n if (legend.filter((l) => l.xaxis === \"x\").length > 1) xlabel = \"\";\n if (legend.filter((l) => l.xaxis === \"x\").length > 1) x2label = \"\";\n } else if (yaxis.length > 1 && file.length < 2) {\n ylabel = \"\";\n for (let i = 0; i < yaxis.length; i++) {\n let dp = datasetparameters.find((d) => d.axis === yaxis[i]);\n let axis = \"y\";\n if (i > 0 && legend[0].unit !== dp.unit) {\n axis = \"y2\";\n ylabel = this.props.ylabel;\n y2label = dp.name;\n y2units = dp.unit;\n }\n legend.push({\n id: i,\n color: lcolor[i],\n text: dp.name + (dp.detail === \"none\" ? \"\" : ` (${dp.detail})`),\n unit: dp.unit,\n yaxis: axis,\n xaxis: \"x\",\n });\n }\n if (legend.filter((l) => l.yaxis === \"y2\").length > 1) y2label = \"\";\n if (legend.filter((l) => l.yaxis === \"y\").length > 1) ylabel = \"\";\n } else {\n for (let i = 0; i < file.length; i++) {\n var value = new Date(files[file[i]].ave);\n var text = value.toDateString() + \" \" + value.toLocaleTimeString();\n var color = lcolor[i];\n legend.push({ id: i, color, text, value, yaxis: \"y\", xaxis: \"x\" });\n }\n }\n\n return (\n <React.Fragment>\n <D3LineGraph\n data={plotdata}\n legend={legend}\n confidence={confidence}\n title={title}\n xlabel={xlabel}\n ylabel={ylabel}\n xunits={xunits}\n yunits={yunits}\n x2label={x2label}\n y2label={y2label}\n x2units={x2units}\n y2units={y2units}\n lcolor={lcolor}\n lweight={lweight}\n bcolor={bcolor}\n xscale={xScale}\n yscale={yScale}\n yReverse={yReverse}\n xReverse={xReverse}\n plotdots={plotdots}\n setDownloadGraph={this.setDownloadGraph}\n border={true}\n />\n </React.Fragment>\n );\n }\n }\n}\n\nclass Sidebar extends Component {\n render() {\n return (\n <React.Fragment>\n <AxisSelect\n graph={this.props.graph}\n xaxis={this.props.xaxis}\n yaxis={this.props.yaxis}\n zaxis={this.props.zaxis}\n addNewFiles={this.props.addNewFiles}\n xoptions={this.props.xoptions}\n yoptions={this.props.yoptions}\n zoptions={this.props.zoptions}\n handleAxisSelect={this.props.handleAxisSelect}\n handleAxisAppend={this.props.handleAxisAppend}\n />\n <Range {...this.props} />\n <DisplayOptions {...this.props} />\n </React.Fragment>\n );\n }\n}\n\nclass AxisSelect extends Component {\n render() {\n var {\n graph,\n xaxis,\n yaxis,\n zaxis,\n xoptions,\n yoptions,\n zoptions,\n addNewFiles,\n handleAxisSelect,\n } = this.props;\n return (\n <React.Fragment>\n <FilterBox\n title=\"Axis\"\n preopen=\"true\"\n content={\n <div>\n {xaxis && (\n <div>\n x:{\" \"}\n <div className=\"axis-select\">\n <DataSelect\n value=\"value\"\n label=\"label\"\n dataList={xoptions}\n defaultValue={xaxis[0]}\n onChange={handleAxisSelect}\n />\n </div>\n </div>\n )}\n {yaxis && (\n <div>\n y:{\" \"}\n <div className=\"axis-select\">\n <DataSelect\n value=\"value\"\n label=\"label\"\n dataList={yoptions}\n defaultValue={yaxis[0]}\n onChange={handleAxisSelect}\n />\n </div>\n </div>\n )}\n {zaxis && (\n <div>\n z:{\" \"}\n <div className=\"axis-select\">\n <DataSelect\n value=\"value\"\n label=\"label\"\n dataList={zoptions}\n defaultValue={zaxis}\n disabled={graph === \"linegraph\"}\n onChange={handleAxisSelect}\n />\n </div>\n </div>\n )}\n </div>\n }\n />\n {graph === \"linegraph\" && !addNewFiles && (\n <FilterBox\n title=\"Compare\"\n newFeature=\"true\"\n preopen=\"false\"\n content={<Compare {...this.props} />}\n />\n )}\n </React.Fragment>\n );\n }\n}\n\nclass Compare extends Component {\n state = {};\n render() {\n var { xaxis, yaxis, xoptions, yoptions, handleAxisAppend } = this.props;\n var units = [];\n var selected = [];\n var selectable = [];\n var options = xoptions.concat(yoptions);\n if (xaxis.length > 1) {\n for (let i = 0; i < xaxis.length; i++) {\n units.push(xoptions.find((x) => x.value === xaxis[i]).unit);\n if (i !== 0) selected.push(xoptions.find((x) => x.value === xaxis[i]));\n }\n units = [...new Set(units)];\n } else if (yaxis.length > 1) {\n for (let i = 0; i < yaxis.length; i++) {\n units.push(yoptions.find((y) => y.value === yaxis[i]).unit);\n if (i !== 0) selected.push(yoptions.find((y) => y.value === yaxis[i]));\n }\n units = [...new Set(units)];\n }\n if (units.length < 2) units = options.map((o) => o.unit);\n for (let i = 0; i < options.length; i++) {\n if (\n ![1, 2, 18].includes(options[i].id) &&\n units.includes(options[i].unit) &&\n !xaxis.includes(options[i].value) &&\n !yaxis.includes(options[i].value)\n ) {\n selectable.push(options[i]);\n }\n }\n return (\n <div className=\"axis-compare\">\n <div className=\"axis-compare-selected\">\n {selected.map((o) => (\n <div\n className=\"axis-compare-selected-object\"\n key={\"selected_\" + o.value}\n onClick={() => handleAxisAppend(o.value)}\n title=\"Click to remove parameter\"\n >\n {o.label}\n <span className=\"close\">×</span>\n </div>\n ))}\n </div>\n {selectable.length > 0 && (\n <div className=\"axis-compare-title\">\n Add Additional Parameter\n <div className=\"axis-compare-selectable\">\n {selectable.map((o) => (\n <div\n className=\"axis-compare-selectable-object\"\n key={\"selectable_\" + o.value}\n onClick={() => handleAxisAppend(o.value)}\n title=\"Click to add parameter\"\n >\n {o.label}\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n }\n}\n\nclass Range extends Component {\n closest = (num, arr) => {\n var diff = Infinity;\n var index = 0;\n for (var i = 0; i < arr.length; i++) {\n var newdiff = Math.abs(num - arr[i]);\n if (newdiff < diff) {\n diff = newdiff;\n index = i;\n }\n }\n return index;\n };\n\n onChangeLowerX = (event) => {\n if (event instanceof Date) {\n this.props.onChangeX([event.getTime(), this.props.upperX * 1000]);\n } else {\n this.props.onChangeX([event, this.props.upperX]);\n }\n };\n\n onChangeLowerY = (event) => {\n if (event instanceof Date) {\n this.props.onChangeY([event.getTime(), this.props.upperY * 1000]);\n } else {\n this.props.onChangeY([event, this.props.upperY]);\n }\n };\n\n onChangeUpperX = (event) => {\n if (event instanceof Date) {\n this.props.onChangeX([this.props.lowerX * 1000, event.getTime()]);\n } else {\n this.props.onChangeX([this.props.lowerX, event]);\n }\n };\n\n onChangeUpperY = (event) => {\n if (event instanceof Date) {\n this.props.onChangeY([this.props.lowerY * 1000, event.getTime()]);\n } else {\n this.props.onChangeY([this.props.lowerY, event]);\n }\n };\n\n onChangeFile = (event) => {\n var { onChangeFile, files } = this.props;\n var id = this.closest(\n event.getTime(),\n files.map((a) => a.ave.getTime())\n );\n if (id > 0 && id < files.length) onChangeFile(id);\n };\n\n render() {\n var { timeaxis, graph, files, file, xaxis, yaxis } = this.props;\n var { minX, maxX, minY, maxY, lowerX, upperX, lowerY, upperY } = this.props;\n var { data, downloadData, xunits, yunits, xlabel, ylabel } = this.props;\n var { onChangeFile, toggleAddNewFile, removeFile, lcolor } = this.props;\n var { mindatetime, maxdatetime, addNewFiles } = this.props;\n var connect;\n if (files.length > 0) {\n connect = files[file[0]].connect;\n }\n if (connect === \"ind\") {\n var fileControl = [];\n if (file.length > 0) {\n var value = files[file[file.length - 1]].ave;\n for (var i = 0; i < file.length; i++) {\n let dt = new Date(files[file[i]].ave);\n let text = dt.toDateString() + \" \" + dt.toLocaleTimeString();\n fileControl.push(\n <tr key={\"file\" + i}>\n <td>\n <div\n className=\"color-line\"\n style={{ backgroundColor: lcolor[i] }}\n />\n </td>\n <td>{text}</td>\n <td\n id={i}\n onClick={removeFile}\n title=\"Remove\"\n className=\"removefile\"\n >\n ✕\n </td>\n </tr>\n );\n }\n }\n }\n return (\n <React.Fragment>\n {timeaxis === \"M\" && (\n <FilterBox\n title=\"Files\"\n preopen=\"true\"\n content={\n <div className=\"\">\n <SliderSingle\n onChange={this.onChangeFile}\n onChangeFileInt={onChangeFile}\n file={file}\n value={value}\n min={mindatetime}\n max={maxdatetime}\n files={files}\n type=\"time\"\n />\n <LoadDataSets data={data} downloadData={downloadData} />\n {graph === \"linegraph\" && (\n <React.Fragment>\n <div className=\"keeplines\">\n Keep previously plotted line{\" \"}\n <input\n checked={addNewFiles}\n type=\"checkbox\"\n onChange={toggleAddNewFile}\n />\n </div>\n <table className=\"filecontrol\">\n <tbody>{fileControl}</tbody>\n </table>\n </React.Fragment>\n )}\n </div>\n }\n />\n )}\n {[\"x\", \"y\"].includes(timeaxis) && (\n <FilterBox\n title={\"x\" === timeaxis ? xlabel + \" Range\" : ylabel + \" Range\"}\n content={\n <div className=\"side-date-slider\">\n <SliderDouble\n onChangeLower={\n \"x\" === timeaxis ? this.onChangeLowerX : this.onChangeLowerY\n }\n onChangeUpper={\n \"x\" === timeaxis ? this.onChangeUpperX : this.onChangeUpperY\n }\n min={\"x\" === timeaxis ? minX : minY}\n max={\"x\" === timeaxis ? maxX : maxY}\n lower={\"x\" === timeaxis ? lowerX : lowerY}\n upper={\"x\" === timeaxis ? upperX : upperY}\n files={files}\n />\n <LoadDataSets data={data} downloadData={downloadData} />\n </div>\n }\n preopen={true}\n />\n )}\n {timeaxis !== \"x\" && xaxis.length === 1 && (\n <FilterBox\n title={xlabel + \" Range\"}\n content={\n <div className=\"side-date-slider\">\n <NumberSliderDouble\n onChangeLower={this.onChangeLowerX}\n onChangeUpper={this.onChangeUpperX}\n min={minX}\n max={maxX}\n lower={lowerX}\n upper={upperX}\n unit={xunits}\n />\n </div>\n }\n preopen={false}\n />\n )}\n {timeaxis !== \"y\" && yaxis.length === 1 && (\n <FilterBox\n title={ylabel + \" Range\"}\n content={\n <div className=\"side-date-slider\">\n <NumberSliderDouble\n onChangeLower={this.onChangeLowerY}\n onChangeUpper={this.onChangeUpperY}\n min={minY}\n max={maxY}\n lower={lowerY}\n upper={upperY}\n unit={yunits}\n />\n </div>\n }\n preopen={false}\n />\n )}\n </React.Fragment>\n );\n }\n}\n\nclass DisplayOptions extends Component {\n state = {\n colors: this.props.colors,\n title: this.props.title,\n bcolor: this.props.bcolor,\n upperZ: this.props.upperZ,\n lowerZ: this.props.lowerZ,\n mask: this.props.mask,\n thresholdStep: this.props.thresholdStep,\n decimate: this.props.decimate,\n average: this.props.average,\n plotdots: this.props.plotdots,\n interpolate: this.props.interpolate,\n xScale: this.props.xScale,\n yScale: this.props.yScale,\n };\n toggleMask = () => {\n this.setState({ mask: !this.state.mask });\n };\n\n togglePlotdots = () => {\n this.setState({ plotdots: !this.state.plotdots });\n };\n\n resetLower = () => {\n var lowerZ = this.props.minZ;\n this.setState({ lowerZ });\n };\n\n resetUpper = () => {\n var upperZ = this.props.maxZ;\n this.setState({ upperZ });\n };\n\n onChangeDecimate = (event) => {\n var decimate = parseInt(event.target.value);\n this.setState({ decimate });\n };\n\n onChangeInterpolate = (event) => {\n this.setState({ interpolate: event.target.value });\n };\n onChangeAverage = (event) => {\n var average = event.target.value;\n this.setState({ average });\n };\n onChangexScale = (event) => {\n var xScale = event.target.value;\n this.setState({ xScale });\n };\n onChangeyScale = (event) => {\n var yScale = event.target.value;\n this.setState({ yScale });\n };\n onChangeLocalColors = (colors) => {\n this.setState({ colors });\n };\n onChangeLocalTitle = (event) => {\n var title = event.target.value;\n this.setState({ title });\n };\n onChangeLocalThreshold = (event) => {\n var thresholdStep = event.target.value;\n this.setState({ thresholdStep });\n };\n onChangeLocalMin = (event) => {\n var lowerZ = parseFloat(event.target.value);\n this.setState({ lowerZ });\n };\n onChangeLocalMax = (event) => {\n var upperZ = parseFloat(event.target.value);\n this.setState({ upperZ });\n };\n onChangeLocalBcolor = (event) => {\n var bcolor = event.target.value;\n this.setState({ bcolor });\n };\n updatePlot = () => {\n this.props.onChangeState(this.state);\n };\n componentDidUpdate(prevProps) {\n var {\n colors,\n title,\n bcolor,\n lowerZ,\n upperZ,\n thresholdStep,\n decimate,\n average,\n plotdots,\n interpolate,\n } = this.props;\n var updateZ = false;\n if (\n !isNaN(lowerZ) &&\n !isNaN(upperZ) &&\n (prevProps.lowerZ !== lowerZ || prevProps.upperZ !== upperZ)\n ) {\n updateZ = true;\n }\n if (\n prevProps.title !== title ||\n prevProps.colors !== colors ||\n updateZ ||\n prevProps.thresholdStep !== thresholdStep ||\n prevProps.decimate !== decimate ||\n prevProps.average !== average ||\n prevProps.plotdots !== plotdots ||\n prevProps.interpolate !== interpolate\n ) {\n this.setState({\n colors,\n title,\n bcolor,\n lowerZ,\n upperZ,\n thresholdStep,\n decimate,\n average,\n plotdots,\n interpolate,\n });\n }\n }\n render() {\n var {\n colors,\n title,\n bcolor,\n lowerZ,\n upperZ,\n thresholdStep,\n mask,\n decimate,\n average,\n plotdots,\n interpolate,\n xScale,\n yScale,\n } = this.state;\n var { array, graph, timeaxis, interpolate_options } = this.props;\n upperZ = upperZ === undefined ? 0 : upperZ;\n lowerZ = lowerZ === undefined ? 0 : lowerZ;\n return (\n <FilterBox\n title=\"Display Options\"\n content={\n <React.Fragment>\n <table className=\"colors-table\">\n <tbody>\n <tr>\n <td>Title</td>\n <td colSpan=\"2\">\n <textarea\n id=\"title\"\n defaultValue={title}\n onChange={this.onChangeLocalTitle}\n />\n </td>\n </tr>\n <tr>\n <td>Background</td>\n <td>\n <input\n type=\"color\"\n id=\"bcolor\"\n defaultValue={bcolor}\n onChange={this.onChangeLocalBcolor}\n />\n </td>\n </tr>\n {graph === \"heatmap\" && (\n <tr>\n <td>Maximum</td>\n <td colSpan=\"2\">\n <div className=\"z-edit\">\n <input\n type=\"number\"\n id=\"upperZ\"\n value={upperZ}\n onChange={this.onChangeLocalMax}\n />\n <button onClick={this.resetUpper}>Reset</button>\n </div>\n </td>\n </tr>\n )}\n {graph === \"heatmap\" && (\n <tr>\n <td>Minimum</td>\n <td colSpan=\"2\">\n <div className=\"z-edit\">\n <input\n type=\"number\"\n id=\"lowerZ\"\n value={lowerZ}\n onChange={this.onChangeLocalMin}\n />\n <button onClick={this.resetLower}>Reset</button>\n </div>\n </td>\n </tr>\n )}\n {graph === \"heatmap\" && (\n <tr>\n <td>Number of Thresholds</td>\n <td>\n <input\n type=\"number\"\n id=\"threshold\"\n step=\"1\"\n value={thresholdStep}\n onChange={this.onChangeLocalThreshold}\n />\n </td>\n </tr>\n )}\n {graph === \"heatmap\" && (\n <tr>\n <td>Interpolate missing values</td>\n <td>\n <select\n id=\"interpolate\"\n value={interpolate}\n onChange={this.onChangeInterpolate}\n className=\"scale-select\"\n >\n {interpolate_options.map((op) => (\n <option key={op} value={op}>\n {op}\n </option>\n ))}\n </select>\n </td>\n </tr>\n )}\n {[\"x\", \"y\"].includes(timeaxis) && (\n <tr>\n <td>Down Sample</td>\n <td>\n 1:\n <input\n className=\"downsample\"\n type=\"number\"\n step=\"1\"\n min=\"1\"\n value={decimate}\n onChange={this.onChangeDecimate}\n />\n </td>\n </tr>\n )}\n {[\"x\", \"y\"].includes(timeaxis) && (\n <tr>\n <td>Averaging</td>\n <td>\n <select\n id=\"average\"\n value={average}\n onChange={this.onChangeAverage}\n className=\"scale-select\"\n >\n <option value=\"None\">None</option>\n <option value=\"Hourly\">Hourly</option>\n <option value=\"Daily\">Daily</option>\n <option value=\"Monthly\">Monthly</option>\n <option value=\"Yearly\">Yearly</option>\n </select>\n </td>\n </tr>\n )}\n <tr>\n <td>Show Masked Points</td>\n <td>\n <input\n type=\"checkbox\"\n checked={!mask}\n onChange={this.toggleMask}\n />\n </td>\n </tr>\n {graph === \"linegraph\" && (\n <tr>\n <td>Plot Points</td>\n <td>\n <input\n type=\"checkbox\"\n checked={plotdots}\n onChange={this.togglePlotdots}\n />\n </td>\n </tr>\n )}\n {graph === \"linegraph\" && timeaxis !== \"x\" && (\n <tr>\n <td>xScale</td>\n <td>\n <select value={xScale} onChange={this.onChangexScale}>\n <option value=\"Linear\">Linear</option>\n <option value=\"Log\">Log</option>\n </select>\n </td>\n </tr>\n )}\n {graph === \"linegraph\" && timeaxis !== \"y\" && (\n <tr>\n <td>yScale</td>\n <td>\n <select value={yScale} onChange={this.onChangeyScale}>\n <option value=\"Linear\">Linear</option>\n <option value=\"Log\">Log</option>\n </select>\n </td>\n </tr>\n )}\n </tbody>\n </table>\n\n {graph === \"heatmap\" && (\n <ColorManipulation\n onChange={this.onChangeLocalColors}\n colors={colors}\n array={array}\n />\n )}\n <div className=\"editsettings-button\">\n <button\n type=\"button\"\n title=\"Update mapplot settings\"\n onClick={this.updatePlot}\n >\n Update Plot\n </button>\n </div>\n </React.Fragment>\n }\n />\n );\n }\n}\n\nclass Plot extends Component {\n state = {\n plotdata: [],\n xaxis: [\"x\"],\n yaxis: [\"y\"],\n zaxis: \"z\",\n xoptions: [],\n yoptions: [],\n zoptions: [],\n xlabel: \"\",\n ylabel: \"\",\n zlabel: \"\",\n xunits: \"\",\n yunits: \"\",\n zunits: \"\",\n graph: \"\",\n colors: [\n { color: \"#0000ff\", point: 0 },\n { color: \"#ff0000\", point: 1 },\n ],\n title: \"\",\n bcolor: false,\n lcolor: [\n \"#000000\",\n \"#e6194B\",\n \"#3cb44b\",\n \"#ffe119\",\n \"#4363d8\",\n \"#f58231\",\n \"#911eb4\",\n \"#42d4f4\",\n \"#f032e6\",\n \"#bfef45\",\n \"#fabed4\",\n \"#469990\",\n \"#dcbeff\",\n \"#9A6324\",\n \"#fffac8\",\n \"#800000\",\n \"#aaffc3\",\n \"#808000\",\n \"#ffd8b1\",\n \"#000075\",\n ],\n thresholdStep: 20,\n display: \"heatmap\",\n lweight: Array.from({ length: 20 }).map((x) => \"1\"),\n decimate: 1,\n average: \"None\",\n mask: true,\n interpolate: \"none\",\n interpolate_options: [\n \"none\",\n \"x-linear\",\n \"y-linear\",\n \"x-nearest\",\n \"y-nearest\",\n ],\n plotdots: false,\n upperY: 1,\n lowerY: 0,\n upperX: 1,\n lowerX: 0,\n upperZ: 1,\n lowerZ: 0,\n maxY: 1,\n minY: 0,\n maxX: 1,\n minX: 0,\n maxZ: 1,\n minZ: 0,\n xScale: \"Linear\",\n yScale: \"Linear\",\n yReverse: false,\n xReverse: false,\n timeaxis: \"\",\n refresh: false,\n addNewFiles: false,\n failed: false,\n };\n\n closest = (num, arr) => {\n var diff = Infinity;\n var index = 0;\n for (var i = 0; i < arr.length; i++) {\n var newdiff = Math.abs(num - arr[i]);\n if (newdiff < diff) {\n diff = newdiff;\n index = i;\n }\n }\n return index;\n };\n\n average = (nums) => {\n return d3.mean(nums);\n };\n\n toggleAddNewFile = () => {\n this.setState({ addNewFiles: !this.state.addNewFiles });\n };\n\n onChangeState = (state) => {\n state.refresh = \"z\";\n this.setState(state);\n };\n\n onChangeY = async (event) => {\n var lower = event[0];\n var upper = event[1];\n if (\n lower !== this.state.lowerY * 1000 ||\n upper !== this.state.upperY * 1000\n ) {\n var { downloadMultipleFiles, data, files } = this.props;\n var { timeaxis } = this.state;\n if (timeaxis === \"y\") {\n var toDownload = [];\n for (var i = 0; i < files.length; i++) {\n if (\n new Date(files[i].mindatetime).getTime() < upper &&\n new Date(files[i].maxdatetime).getTime() > lower &&\n data[i] === 0\n ) {\n toDownload.push(i);\n }\n }\n upper = upper / 1000;\n lower = lower / 1000;\n if (toDownload.length > 0) {\n document.getElementById(\"detailloading\").style.display = \"block\";\n await downloadMultipleFiles(toDownload);\n document.getElementById(\"detailloading\").style.display = \"none\";\n }\n }\n this.setState({ lowerY: lower, upperY: upper, refresh: true });\n }\n };\n\n onChangeX = async (event) => {\n var lower = event[0];\n var upper = event[1];\n if (\n lower !== this.state.lowerX * 1000 ||\n upper !== this.state.upperX * 1000\n ) {\n var { downloadMultipleFiles, data, files } = this.props;\n var { timeaxis } = this.state;\n if (timeaxis === \"x\") {\n var toDownload = [];\n for (var i = 0; i < files.length; i++) {\n if (\n new Date(files[i].mindatetime).getTime() < upper &&\n new Date(files[i].maxdatetime).getTime() > lower &&\n data[i] === 0\n ) {\n toDownload.push(i);\n }\n }\n upper = upper / 1000;\n lower = lower / 1000;\n if (toDownload.length > 0) {\n document.getElementById(\"detailloading\").style.display = \"block\";\n await downloadMultipleFiles(toDownload);\n document.getElementById(\"detailloading\").style.display = \"none\";\n }\n }\n this.setState({ lowerX: lower, upperX: upper, refresh: true });\n }\n };\n\n onChangeFile = async (event) => {\n var { file, data, downloadMultipleFiles } = this.props;\n var { addNewFiles } = this.state;\n if (!file.includes(event) && file.length < 20) {\n if (!addNewFiles) file = [];\n file.push(event);\n if (data[event] === 0) {\n document.getElementById(\"detailloading\").style.display = \"block\";\n await downloadMultipleFiles([event], file);\n document.getElementById(\"detailloading\").style.display = \"none\";\n } else {\n await downloadMultipleFiles([], file);\n }\n }\n };\n\n parseColor = (colorname) => {\n var defaultColors = [\n { color: \"#0000ff\", point: 0 },\n { color: \"#ff0000\", point: 1 },\n ];\n var colorparse = colorlist.find((c) => c.name === colorname);\n if (colorparse) {\n return colorparse.data;\n } else {\n return defaultColors;\n }\n };\n\n findLink = (parameters, link) => {\n return parameters.find((p) => p.id === link);\n };\n\n setAxisOptions = (datasetparameters, xaxis, yaxis) => {\n var xoptions = [];\n var yoptions = [];\n var zoptions = [];\n var graph = \"linegraph\";\n var xdp = datasetparameters.find((dp) => dp.axis === xaxis[0]);\n var ydp = datasetparameters.find((dp) => dp.axis === yaxis[0]);\n var yReverse = false;\n var xReverse = false;\n if ([2, 18, 43].includes(xdp.parameters_id)) xReverse = true;\n if ([2, 18, 43].includes(ydp.parameters_id)) yReverse = true;\n for (var j = 0; j < datasetparameters.length; j++) {\n var detail = datasetparameters[j][\"detail\"];\n var link = datasetparameters[j][\"link\"];\n var extra = \"\";\n if (Number.isInteger(link) && this.findLink(datasetparameters, link)) {\n extra = ` (${this.findLink(datasetparameters, link).name})`;\n } else if ([\"none\", null, \"null\"].includes(detail)) {\n extra = \"\";\n } else {\n extra = ` (${detail})`;\n }\n\n if (\n datasetparameters[j][\"axis\"].includes(\"x\") &&\n datasetparameters[j].parameters_id !== 27\n ) {\n xoptions.push({\n value: datasetparameters[j][\"axis\"],\n label: datasetparameters[j][\"name\"] + extra,\n id: datasetparameters[j][\"parameters_id\"],\n unit: datasetparameters[j][\"unit\"],\n });\n } else if (\n datasetparameters[j][\"axis\"].includes(\"y\") &&\n datasetparameters[j].parameters_id !== 27\n ) {\n yoptions.push({\n value: datasetparameters[j][\"axis\"],\n label: datasetparameters[j][\"name\"] + extra,\n id: datasetparameters[j][\"parameters_id\"],\n unit: datasetparameters[j][\"unit\"],\n });\n } else if (datasetparameters[j][\"axis\"].includes(\"z\")) {\n if (\n xdp.shape[0] === datasetparameters[j].shape[1] &&\n ydp.shape[0] === datasetparameters[j].shape[0] &&\n datasetparameters[j].parameters_id !== 27\n ) {\n graph = \"heatmap\";\n zoptions.push({\n value: datasetparameters[j][\"axis\"],\n label: datasetparameters[j][\"name\"] + extra,\n });\n }\n }\n }\n return { xoptions, yoptions, zoptions, graph, yReverse, xReverse };\n };\n\n getAxisLabels = (datasetparameters, xaxis, yaxis, zaxis) => {\n var xdp = datasetparameters.find((dp) => dp.axis === xaxis[0]);\n var ydp = datasetparameters.find((dp) => dp.axis === yaxis[0]);\n var zdp = datasetparameters.find((dp) => dp.axis === zaxis);\n\n var xlabel = xdp ? xdp.name : \"\";\n var ylabel = ydp ? ydp.name : \"\";\n var zlabel = zdp ? zdp.name : \"\";\n\n var xunits = xdp ? xdp.unit : \"\";\n var yunits = ydp ? ydp.unit : \"\";\n var zunits = zdp ? zdp.unit : \"\";\n\n return { xlabel, ylabel, zlabel, xunits, yunits, zunits };\n };\n\n handleAxisAppend = (event) => {\n var { xaxis, yaxis, zaxis } = this.state;\n if (event.includes(\"x\")) {\n if (xaxis.includes(event)) {\n xaxis = xaxis.filter((x) => x !== event);\n } else {\n xaxis.push(event);\n }\n }\n if (event.includes(\"y\")) {\n if (yaxis.includes(event)) {\n yaxis = yaxis.filter((y) => y !== event);\n } else {\n yaxis.push(event);\n }\n }\n this.axisEdit(xaxis, yaxis, zaxis);\n };\n\n handleAxisSelect = (event) => {\n var { xaxis, yaxis, zaxis } = this.state;\n if (event.value.includes(\"x\")) xaxis = [event.value];\n if (event.value.includes(\"y\")) yaxis = [event.value];\n if (event.value.includes(\"z\")) zaxis = event.value;\n this.axisEdit(xaxis, yaxis, zaxis);\n };\n\n axisEdit = (xaxis, yaxis, zaxis) => {\n var { datasetparameters, data } = this.props;\n var { timeaxis, lowerY, lowerX, upperY, upperX } = this.state;\n var { xoptions, yoptions, zoptions, graph, yReverse, xReverse } =\n this.setAxisOptions(datasetparameters, xaxis, yaxis);\n if (zoptions.length > 0 && !zoptions.map((z) => z.value).includes(zaxis))\n zaxis = zoptions[0].value;\n var { xlabel, ylabel, zlabel, xunits, yunits, zunits } = this.getAxisLabels(\n datasetparameters,\n xaxis,\n yaxis,\n zaxis\n );\n var { minX, maxX, minY, maxY } = this.getBounds(\n data,\n xaxis,\n yaxis,\n timeaxis\n );\n if (timeaxis !== \"x\") {\n upperX = maxX;\n lowerX = minX;\n }\n if (timeaxis !== \"y\") {\n upperY = maxY;\n lowerY = minY;\n }\n\n this.setState({\n xaxis,\n yaxis,\n zaxis,\n xoptions,\n yoptions,\n zoptions,\n graph,\n xlabel,\n ylabel,\n zlabel,\n xunits,\n yunits,\n zunits,\n upperX,\n lowerX,\n upperY,\n lowerY,\n yReverse,\n xReverse,\n minX,\n maxX,\n minY,\n maxY,\n refresh: true,\n });\n };\n\n maskArray = (arr, maskArr, mask) => {\n var out = [];\n if (mask && isArray(maskArr) && arr.length === maskArr.length) {\n if (isArray(arr[0])) {\n for (let i = 0; i < arr.length; i++) {\n let inner = [];\n for (let j = 0; j < arr[i].length; j++) {\n if (maskArr[i][j] === 0) {\n inner.push(arr[i][j]);\n } else {\n inner.push(null);\n }\n }\n out.push(inner);\n }\n } else {\n for (let i = 0; i < arr.length; i++) {\n if (maskArr[i] < 1) {\n out.push(arr[i]);\n } else {\n out.push(null);\n }\n }\n }\n return out;\n } else {\n return arr;\n }\n };\n\n addMaintenance = (data, mask, time, maintenance) => {\n if (mask === undefined) {\n if (isArray(data[0])) {\n mask = Array(data.length)\n .fill()\n .map(() => Array(data[0].length).fill(0));\n } else {\n mask = new Array(time.length).fill(0);\n }\n }\n for (let i = 0; i < time.length; i++) {\n for (let j = 0; j < maintenance.length; j++) {\n if (maintenance[j].start < time[i] && time[i] < maintenance[j].end) {\n if (isArray(data[0])) {\n if (time.length === data.length) {\n for (let k = 0; k < data.length; k++) {\n mask[i][k] = 1;\n }\n } else if (time.length === data[0].length) {\n for (let k = 0; k < data.length; k++) {\n mask[k][i] = 1;\n }\n }\n } else {\n mask[i] = 1;\n }\n }\n }\n }\n return mask;\n };\n\n selectAxisAndMask = (\n data,\n files,\n file,\n xaxis,\n yaxis,\n zaxis,\n dp,\n mask,\n timeaxis,\n maintenance,\n graph\n ) => {\n var plotdata = [];\n var maskaxis = [];\n var axis = [].concat.apply([], [xaxis, yaxis, zaxis]);\n const findaxis = (dp, ax) => {\n return dp.find((p) => p.axis === ax);\n };\n const findmask = (dp, axp) => {\n return dp.find((dp) => dp.link === axp.id && dp.parameters_id === 27);\n };\n for (var ax of axis) {\n var axp = findaxis(dp, ax);\n if (axp && findmask(dp, axp)) {\n maskaxis.push(findmask(dp, axp)[\"axis\"]);\n } else {\n maskaxis.push(false);\n }\n }\n\n var iter, pd, j;\n if (files[file[0]].connect === \"ind\") {\n iter = file;\n } else {\n iter = [...Array(data.length).keys()];\n }\n\n try {\n var maintenance_ids = maintenance.map((m) => m.datasetparameters_id);\n if (graph === \"linegraph\") {\n if (String([timeaxis]) === String(xaxis)) {\n for (let i = 0; i < yaxis.length; i++) {\n let a = dp.find((d) => d.axis === yaxis[i]).id;\n if (maintenance_ids.includes(a)) {\n let idx = axis.findIndex((e) => e === yaxis[i]);\n let m = maintenance.filter((m) => m.datasetparameters_id === a);\n for (let i of iter) {\n if (data[i] !== 0) {\n if (maskaxis[idx] === false) {\n maskaxis[idx] = axis[idx] + \"_qual\";\n }\n data[i][maskaxis[idx]] = this.addMaintenance(\n data[i][axis[idx]],\n data[i][maskaxis[idx]],\n data[i][timeaxis],\n m\n );\n }\n }\n }\n }\n }\n } else if (graph === \"heatmap\") {\n if (String([timeaxis]) === String(xaxis)) {\n let a = dp.find((d) => d.axis === zaxis).id;\n if (maintenance_ids.includes(a)) {\n let idx = axis.findIndex((e) => e === zaxis);\n let m = maintenance.filter(\n (m) => m.datasetparameters_id === a && m.depths === \"\"\n );\n for (let i of iter) {\n if (data[i] !== 0) {\n if (maskaxis[idx] === false) {\n maskaxis[idx] = axis[i] + \"_qual\";\n }\n data[i][maskaxis[idx]] = this.addMaintenance(\n data[i][axis[idx]],\n data[i][maskaxis[idx]],\n data[i][timeaxis],\n m\n );\n }\n }\n }\n }\n }\n } catch (e) {\n console.error(\"Failed to add maintenace periods.\");\n console.error(e);\n }\n\n for (let i of iter) {\n if (data[i] !== 0) {\n pd = {};\n for (j = 0; j < axis.length; j++) {\n if (maskaxis) {\n pd[axis[j]] = this.maskArray(\n data[i][axis[j]],\n data[i][maskaxis[j]],\n mask\n );\n } else {\n pd[axis[j]] = data[i][axis[j]];\n }\n }\n plotdata.push(pd);\n }\n }\n\n return plotdata;\n };\n\n formatTime = (plotdata, datasetparameters, xaxis, yaxis) => {\n var xdp = datasetparameters.find((dp) => dp.axis === xaxis);\n var ydp = datasetparameters.find((dp) => dp.axis === yaxis);\n\n if (xdp.parameters_id === 1) {\n if (isArray(plotdata)) {\n for (let i = 0; i < plotdata.length; i++) {\n plotdata[i].x = plotdata[i].x.map((pdx) => new Date(pdx * 1000));\n }\n } else {\n plotdata.x = plotdata.x.map((pdx) => new Date(pdx * 1000));\n }\n }\n if (ydp.parameters_id === 1) {\n if (isArray(plotdata)) {\n for (let i = 0; i < plotdata.length; i++) {\n plotdata[i].y = plotdata[i].y.map((pdy) => new Date(pdy * 1000));\n }\n } else {\n plotdata.y = plotdata.y.map((pdy) => new Date(pdy * 1000));\n }\n }\n return plotdata;\n };\n\n joinData = (plotdata, graph, xaxis, yaxis, zaxis, connect, timeaxis) => {\n if (graph === \"linegraph\") {\n if (isArray(plotdata) && connect === \"join\") {\n plotdata = this.joinLinegraphData(plotdata, xaxis, yaxis, timeaxis);\n }\n if ((xaxis.length > 1 || yaxis.length > 1) && plotdata.length === 1) {\n plotdata = this.reorderMultipleLines(plotdata, xaxis, yaxis);\n }\n } else if (graph === \"heatmap\") {\n if (isArray(plotdata) && connect === \"join\") {\n plotdata = this.joinHeatmapData(plotdata, xaxis, yaxis, zaxis);\n }\n }\n return this.relabelDataObject(plotdata);\n };\n\n reorderMultipleLines = (plotdata, xaxis, yaxis) => {\n var lines = [];\n var ax;\n if (xaxis.length > 1) {\n for (ax of xaxis) {\n lines.push({\n x: plotdata[0][ax],\n y: plotdata[0][yaxis[0]],\n z: undefined,\n });\n }\n } else if (yaxis.length > 1) {\n for (ax of yaxis) {\n lines.push({\n y: plotdata[0][ax],\n x: plotdata[0][xaxis[0]],\n z: undefined,\n });\n }\n }\n return lines;\n };\n\n relabelDataObject = (plotdata) => {\n var data = [];\n for (var i = 0; i < plotdata.length; i++) {\n var keys = Object.keys(plotdata[i]);\n data.push({\n x: plotdata[i][keys.filter((k) => k.includes(\"x\"))[0]],\n y: plotdata[i][keys.filter((k) => k.includes(\"y\"))[0]],\n z: plotdata[i][keys.filter((k) => k.includes(\"z\"))[0]],\n });\n }\n return data;\n };\n\n joinLinegraphData(plotdata, xaxis, yaxis, timeaxis) {\n var ax;\n var data = [];\n var axis = [].concat.apply([], [xaxis, yaxis]);\n for (var i = 0; i < plotdata.length; i++) {\n for (var j = 0; j < plotdata[i][xaxis[0]].length; j++) {\n var pd = {};\n for (ax of axis) {\n pd[ax] = plotdata[i][ax][j];\n }\n data.push(pd);\n }\n }\n if (timeaxis === \"x\") {\n data.sort((a, b) =>\n a[xaxis[0]] > b[xaxis[0]] ? 1 : b[xaxis[0]] > a[xaxis[0]] ? -1 : 0\n );\n data = data.filter((d) => d[xaxis] !== null);\n } else if (timeaxis === \"y\") {\n data.sort((a, b) =>\n a[yaxis[0]] > b[yaxis[0]] ? 1 : b[yaxis[0]] > a[yaxis[0]] ? -1 : 0\n );\n data = data.filter((d) => d[yaxis] !== null);\n }\n var out = { z: undefined };\n for (ax of axis) {\n out[ax] = [];\n }\n for (var k = 0; k < data.length; k++) {\n for (ax of axis) {\n out[ax].push(data[k][ax]);\n }\n }\n return [out];\n }\n\n joinHeatmapData(data, xaxis, yaxis, zaxis) {\n if (data.length > 1) {\n if (\n data.every(\n (d) =>\n JSON.stringify(d[yaxis[0]]) === JSON.stringify(data[0][yaxis[0]])\n )\n ) {\n var dataJoined = JSON.parse(JSON.stringify(data[0]));\n for (let i = 1; i < data.length; i++) {\n if (\n data[i][xaxis[0]].length === data[i][zaxis][0].length &&\n data[i][yaxis[0]].length === data[i][zaxis].length\n ) {\n let minB = Math.min(...data[i - 1][xaxis[0]]);\n let maxB = Math.max(...data[i - 1][xaxis[0]]);\n let minA = Math.min(...data[i][xaxis[0]]);\n let maxA = Math.max(...data[i][xaxis[0]]);\n if (minA > maxB) {\n dataJoined[xaxis[0]] = dataJoined[xaxis[0]].concat(\n data[i][xaxis[0]]\n );\n dataJoined[zaxis] = dataJoined[zaxis].map((d, index) =>\n d.concat(data[i][zaxis][index])\n );\n } else if (minB > maxA) {\n dataJoined[xaxis[0]] = data[i][xaxis[0]].concat(\n dataJoined[xaxis[0]]\n );\n dataJoined[zaxis] = data[i][zaxis].map((d, index) =>\n d.concat(dataJoined[zaxis][index])\n );\n } else {\n return data;\n }\n }\n }\n return [dataJoined];\n }\n }\n return data;\n }\n\n roundFactor = (dt, factor) => {\n var year = dt.getFullYear();\n var month = dt.getMonth();\n var day = dt.getDate();\n var hours = dt.getHours();\n if (factor === \"Hourly\") {\n return new Date(year, month, day, hours);\n } else if (factor === \"Daily\") {\n return new Date(year, month, day);\n } else if (factor === \"Monthly\") {\n return new Date(year, month, 0);\n } else if (factor === \"Yearly\") {\n return new Date(year, 0, 0);\n } else {\n return dt;\n }\n };\n\n average1D = (arr, factor, tx) => {\n var ox = \"y\";\n if (tx === \"y\") ox = \"x\";\n var data = {};\n var value;\n for (var i = 0; i < arr[tx].length; i++) {\n value = this.roundFactor(arr[tx][i], factor).getTime();\n if (value in data) {\n data[value].push(arr[ox][i]);\n } else {\n data[value] = [arr[ox][i]];\n }\n }\n var arrDict = [];\n for (var key in data) {\n arrDict.push({\n [tx]: new Date(parseInt(key)),\n [ox]: this.average(data[key]),\n });\n }\n arrDict.sort((a, b) => (a[tx] > b[tx] ? 1 : b[tx] > a[tx] ? -1 : 0));\n var x = [];\n var y = [];\n for (var k = 0; k < arrDict.length; k++) {\n x.push(arrDict[k].x);\n y.push(arrDict[k].y);\n }\n return { x, y, z: undefined };\n };\n\n average2D = (arr, factor, tx, bounds) => {\n var ox = \"y\";\n var data = {};\n var arrDict = [];\n var value, x, y, z;\n if (tx === \"x\") {\n for (let i = 0; i < arr[tx].length; i++) {\n value = this.roundFactor(arr[tx][i], factor).getTime();\n if (value in data) {\n for (let j = 0; j < arr[ox].length; j++) {\n data[value][j].push(arr.z[j][i]);\n }\n } else {\n data[value] = [];\n for (let j = 0; j < arr[ox].length; j++) {\n data[value].push([arr.z[j][i]]);\n }\n }\n }\n for (let key in data) {\n arrDict.push({\n [tx]: new Date(parseInt(key)),\n z: data[key].map((d) => this.average(d)),\n });\n }\n arrDict.sort((a, b) => (a[tx] > b[tx] ? 1 : b[tx] > a[tx] ? -1 : 0));\n x = [];\n y = arr[ox];\n z = [...Array(y.length)].map((x) => []);\n for (let i = 0; i < arrDict.length; i++) {\n x.push(arrDict[i].x);\n for (let j = 0; j < arr[ox].length; j++) {\n z[j].push(arrDict[i].z[j]);\n }\n }\n return { x, y, z };\n } else if (tx === \"y\") {\n ox = \"x\";\n for (let i = 0; i < arr[tx].length; i++) {\n value = this.roundFactor(arr[tx][i], factor).getTime();\n if (value in data) {\n data[value].push(arr.z[i]);\n } else {\n data[value] = [arr.z[i]];\n }\n }\n for (let key in data) {\n let zz = [];\n for (let i = 0; i < arr[ox].length; i++) {\n let zt = [];\n for (let j = 0; j < data[key].length; j++) {\n zt.push(data[key][j][i]);\n }\n zz.push(this.average(zt));\n }\n arrDict.push({\n [tx]: new Date(parseInt(key)),\n z: zz,\n });\n }\n arrDict.sort((a, b) => (a[tx] > b[tx] ? 1 : b[tx] > a[tx] ? -1 : 0));\n x = arr[ox];\n y = [];\n z = [];\n for (let i = 0; i < arrDict.length; i++) {\n y.push(arrDict[i].y);\n z.push(arrDict[i].z);\n }\n return { x, y, z };\n } else {\n return arr;\n }\n };\n\n averageData = (plotdata, timeaxis, average, graph, bounds) => {\n var out;\n if ((plotdata && [\"x\", \"y\"].includes(timeaxis), average !== \"None\")) {\n if (graph === \"linegraph\") {\n if (Array.isArray(plotdata)) {\n out = [];\n for (let i = 0; i < plotdata.length; i++) {\n out.push(this.average1D(plotdata[i], average, timeaxis));\n }\n } else {\n out = this.average1D(plotdata, average, timeaxis);\n }\n return out;\n } else if (graph === \"heatmap\") {\n if (Array.isArray(plotdata)) {\n out = [];\n for (let i = 0; i < plotdata.length; i++) {\n out.push(this.average2D(plotdata[i], average, timeaxis, bounds));\n }\n } else {\n out = this.average2D(plotdata, average, timeaxis, bounds);\n }\n return out;\n } else {\n return plotdata;\n }\n } else {\n return plotdata;\n }\n };\n\n decimate1D = (arr, factor) => {\n var x = [];\n var y = [];\n for (let i = 0; i < arr.x.length; i = i + factor) {\n if (arr.x[i]) {\n x.push(arr.x[i]);\n y.push(arr.y[i]);\n }\n }\n return { x, y, z: undefined };\n };\n\n decimate2D = (arr, factor, timeaxis) => {\n var x, y, z;\n if (timeaxis === \"x\") {\n y = arr.y;\n x = [];\n z = [...Array(arr.y.length)].map((x) => []);\n for (let i = 0; i < arr.x.length; i = i + factor) {\n if (arr.x[i]) {\n x.push(arr.x[i]);\n for (let j = 0; j < arr.y.length; j++) {\n z[j].push(arr.z[j][i]);\n }\n }\n }\n return { x, y, z };\n } else if (timeaxis === \"y\") {\n x = arr.x;\n y = [];\n z = [];\n for (let i = 0; i < arr.y.length; i = i + factor) {\n if (arr.y[i]) {\n y.push(arr.y[i]);\n z.push(arr.z[i]);\n }\n }\n return { x, y, z };\n } else {\n return arr;\n }\n };\n\n decimateData = (plotdata, timeaxis, decimate, graph) => {\n var out;\n if (decimate > 1 && isInteger(decimate) && plotdata) {\n if (graph === \"linegraph\") {\n if (Array.isArray(plotdata)) {\n out = [];\n for (let i = 0; i < plotdata.length; i++) {\n out.push(this.decimate1D(plotdata[i], decimate));\n }\n } else {\n out = this.decimate1D(plotdata, decimate);\n }\n return out;\n } else if (graph === \"heatmap\") {\n if (Array.isArray(plotdata)) {\n out = [];\n for (let i = 0; i < plotdata.length; i++) {\n out.push(this.decimate2D(plotdata[i], decimate, timeaxis));\n }\n } else {\n out = this.decimate2D(plotdata, decimate, timeaxis);\n }\n return out;\n } else {\n return plotdata;\n }\n } else {\n return plotdata;\n }\n };\n\n sliceXArray = (data, lower, upper) => {\n var y = data.y;\n var x = [];\n var z = [];\n var mask = [];\n if (data.z && data.y) {\n for (var i = 0; i < data.x.length; i++) {\n if (data.x[i] >= lower && data.x[i] <= upper) {\n x.push(data.x[i]);\n mask.push(true);\n } else {\n mask.push(false);\n }\n }\n for (var j = 0; j < data.y.length; j++) {\n z.push(data.z[j].filter((item, i) => mask[i]));\n }\n }\n if (x.length > 0) {\n return { x: x, y: y, z: z };\n } else {\n return false;\n }\n };\n\n sliceYArray = (data, lower, upper) => {\n var x = data.x;\n var y = [];\n var z = [];\n if (data.z && data.y) {\n for (var i = 0; i < data.y.length; i++) {\n if (data.y[i] >= lower && data.y[i] <= upper) {\n y.push(data.y[i]);\n z.push(data.z[i]);\n }\n }\n }\n if (y.length > 0) {\n return { x: x, y: y, z: z };\n } else {\n return false;\n }\n };\n\n sliceXYArray = (\n data,\n lowerX,\n upperX,\n lowerY,\n upperY,\n minX,\n maxX,\n minY,\n maxY\n ) => {\n var x = [];\n var y = [];\n if (upperX < maxX || lowerX > minX) {\n for (let i = 0; i < data.x.length; i++) {\n if (data.x[i] >= lowerX && data.x[i] <= upperX) {\n x.push(data.x[i]);\n y.push(data.y[i]);\n }\n }\n } else {\n x = data.x;\n y = data.y;\n }\n var d = { x, y };\n x = [];\n y = [];\n if (upperY < maxY || lowerY > minY) {\n for (let i = 0; i < d.y.length; i++) {\n if (d.y[i] >= lowerY && d.y[i] <= upperY) {\n x.push(d.x[i]);\n y.push(d.y[i]);\n }\n }\n } else {\n x = d.x;\n y = d.y;\n }\n return { x, y, z: undefined };\n };\n\n sliceData = (\n plotdata,\n graph,\n upperX,\n lowerX,\n upperY,\n lowerY,\n minX,\n maxX,\n minY,\n maxY,\n connect\n ) => {\n if (graph === \"linegraph\") {\n if (Array.isArray(plotdata)) {\n var dataout = [];\n for (let i = 0; i < plotdata.length; i++) {\n let slice = this.sliceXYArray(\n plotdata[i],\n lowerX,\n upperX,\n lowerY,\n upperY,\n minX,\n maxX,\n minY,\n maxY\n );\n if (slice) dataout.push(slice);\n }\n plotdata = dataout;\n } else {\n plotdata = this.sliceXYArray(\n plotdata,\n lowerX,\n upperX,\n lowerY,\n upperY,\n minX,\n maxX,\n minY,\n maxY\n );\n }\n return plotdata;\n } else if (graph === \"heatmap\") {\n if (upperX < maxX || lowerX > minX) {\n if (Array.isArray(plotdata)) {\n var dataoutX = [];\n for (let i = 0; i < plotdata.length; i++) {\n let slice = this.sliceXArray(plotdata[i], lowerX, upperX);\n if (slice) dataoutX.push(slice);\n }\n plotdata = dataoutX;\n } else {\n plotdata = this.sliceXArray(plotdata, lowerX, upperX);\n }\n }\n if (upperY < maxY || lowerY > minY) {\n if (Array.isArray(plotdata)) {\n var dataoutY = [];\n for (let i = 0; i < plotdata.length; i++) {\n let slice = this.sliceYArray(plotdata[i], lowerY, upperY);\n if (slice) dataoutY.push(slice);\n }\n plotdata = dataoutY;\n } else {\n plotdata = this.sliceYArray(plotdata, lowerY, upperY);\n }\n }\n return plotdata;\n } else {\n return plotdata;\n }\n };\n\n addGaps = (obj, timeaxis, gap) => {\n if (timeaxis === \"x\" && obj) {\n if (!Array.isArray(obj)) obj = [obj];\n for (let i = 0; i < obj.length; i++) {\n for (let j = 1; j < obj[i].x.length; j++) {\n if (\n obj[i].x[j].getTime() - obj[i].x[j - 1].getTime() >\n gap * 60 * 60 * 1000\n ) {\n obj[i].x.splice(\n j,\n 0,\n new Date(obj[i].x[j - 1].getTime() + 60 * 1000)\n );\n obj[i].z.map((z) => z.splice(j, 0, null));\n obj[i].x.splice(\n j + 1,\n 0,\n new Date(obj[i].x[j + 1].getTime() - 60 * 1000)\n );\n obj[i].z.map((z) => z.splice(j + 1, 0, null));\n j = j + 2;\n }\n }\n }\n return obj;\n } else if (timeaxis === \"y\" && obj) {\n if (!Array.isArray(obj)) obj = [obj];\n for (let i = 0; i < obj.length; i++) {\n for (let j = 1; j < obj[i].y.length; j++) {\n if (\n obj[i].y[j].getTime() - obj[i].y[j - 1].getTime() >\n gap * 60 * 60 * 1000\n ) {\n obj[i].y.splice(\n j,\n 0,\n new Date(obj[i].y[j - 1].getTime() + 60 * 1000)\n );\n obj[i].z.splice(j, 0, Array(obj[i].x.length).fill(null));\n obj[i].y.splice(\n j + 1,\n 0,\n new Date(obj[i].y[j + 1].getTime() - 60 * 1000)\n );\n obj[i].z.splice(j, 0, Array(obj[i].x.length).fill(null));\n j = j + 2;\n }\n }\n }\n return obj;\n } else {\n return obj;\n }\n };\n\n processPlotData = (\n xaxis,\n yaxis,\n zaxis,\n upperY,\n lowerY,\n maxY,\n minY,\n upperX,\n lowerX,\n minX,\n maxX,\n decimate,\n average,\n datasetparameters,\n timeaxis,\n graph,\n interpolate\n ) => {\n var { mask, gap } = this.state;\n var { data, files, file, maintenance } = this.props;\n\n var plotdata = this.selectAxisAndMask(\n data,\n files,\n file,\n xaxis,\n yaxis,\n zaxis,\n datasetparameters,\n mask,\n timeaxis,\n maintenance,\n graph\n );\n\n var { minZ: lowerZ, maxZ: upperZ } = this.getZBounds(plotdata);\n\n plotdata = this.joinData(\n plotdata,\n graph,\n xaxis,\n yaxis,\n zaxis,\n files[file[0]].connect,\n timeaxis\n );\n\n try {\n plotdata = this.sliceData(\n plotdata,\n graph,\n upperX,\n lowerX,\n upperY,\n lowerY,\n minX,\n maxX,\n minY,\n maxY,\n files[file[0]].connect\n );\n } catch (e) {\n console.error(e);\n }\n\n try {\n plotdata = this.decimateData(plotdata, timeaxis, decimate, graph);\n } catch (e) {\n console.error(e);\n }\n try {\n plotdata = this.formatTime(\n plotdata,\n datasetparameters,\n xaxis[0],\n yaxis[0]\n );\n try {\n plotdata = this.averageData(plotdata, timeaxis, average, graph, {\n lowerX,\n lowerY,\n upperX,\n upperY,\n });\n } catch (e) {\n console.error(e);\n }\n } catch (e) {\n console.error(e);\n }\n\n try {\n plotdata = this.addGaps(plotdata, timeaxis, gap);\n } catch (e) {\n console.error(e);\n }\n\n try {\n plotdata = this.interpolate2D(plotdata, interpolate, graph);\n } catch (e) {\n console.error(e);\n }\n\n return { plotdata, lowerZ, upperZ };\n };\n\n interpolate2D = (obj, interpolate, graph) => {\n if (graph === \"heatmap\" && interpolate !== \"none\") {\n if (!Array.isArray(obj)) obj = [obj];\n for (let i = 0; i < obj.length; i++) {\n obj[i] = interp2(obj[i].x, obj[i].y, obj[i].z, interpolate);\n }\n }\n return obj;\n };\n\n filterData = (arr) => {\n if (Array.isArray(arr)) {\n var data = [];\n for (let i = 0; i < arr.length; i++) {\n if (!isNaN(parseFloat(arr[i])) && isFinite(arr[i])) {\n data.push(arr[i]);\n }\n }\n return arr;\n } else {\n return [];\n }\n };\n\n getInitialBounds = (dataset, data, file, xaxis, yaxis, zaxis) => {\n var { maxdatetime, mindatetime, datasetparameters } = this.props;\n var timeaxis = \"x\";\n if (\n datasetparameters\n .filter((dp) => dp.axis.includes(\"y\"))\n .map((d) => d.parameters_id)\n .includes(1)\n )\n timeaxis = \"y\";\n if (datasetparameters.map((d) => d.axis).includes(\"M\")) timeaxis = \"M\";\n\n const title = dataset.title;\n var colors = this.parseColor(dataset.plotproperties.colors);\n var zdomain = d3.extent(this.filterData(data[file[0]][zaxis]).flat());\n\n var yextents = [];\n for (var ya of yaxis) {\n yextents = yextents.concat(d3.extent(this.filterData(data[file[0]][ya])));\n }\n var ydomain = d3.extent(yextents);\n\n var xextents = [];\n for (var xa of xaxis) {\n xextents = xextents.concat(d3.extent(this.filterData(data[file[0]][xa])));\n }\n var xdomain = d3.extent(xextents);\n\n var minZ = zdomain[0] || 0;\n var maxZ = zdomain[1] || 1;\n var minY = ydomain[0];\n var maxY = ydomain[1];\n var minX = xdomain[0];\n var maxX = xdomain[1];\n var lowerY = minY;\n var upperY = maxY;\n var lowerX = minX;\n var upperX = maxX;\n var lowerZ = minZ;\n var upperZ = maxZ;\n if (timeaxis === \"x\" && maxdatetime && mindatetime) {\n minX = Math.min(minX, mindatetime);\n maxX = Math.max(maxX, maxdatetime);\n }\n\n if (timeaxis === \"y\" && maxdatetime && mindatetime) {\n minY = Math.min(minY, mindatetime);\n maxY = Math.max(maxY, maxdatetime);\n }\n\n return {\n title,\n colors,\n minZ,\n maxZ,\n minY,\n maxY,\n minX,\n maxX,\n lowerY,\n upperY,\n lowerX,\n upperX,\n lowerZ,\n upperZ,\n timeaxis,\n };\n };\n\n getZBounds = (plotdata) => {\n var minZ = Infinity;\n var maxZ = -Infinity;\n var pd = plotdata;\n if (!isArray(plotdata)) {\n pd = [pd];\n }\n for (var i = 0; i < pd.length; i++) {\n let zdomain = d3.extent(this.filterData(pd[i].z).flat());\n minZ = Math.min(zdomain[0], minZ);\n maxZ = Math.max(zdomain[1], maxZ);\n }\n return { minZ, maxZ };\n };\n\n getBounds = (data, xaxis, yaxis, timeaxis) => {\n var { maxdatetime, mindatetime } = this.props;\n var minX = Infinity;\n var maxX = -Infinity;\n var minY = Infinity;\n var maxY = -Infinity;\n for (var i = 0; i < data.length; i++) {\n if (data[i] !== 0) {\n let xdomain = d3.extent(this.filterData(data[i][xaxis]));\n let ydomain = d3.extent(this.filterData(data[i][yaxis]));\n minX = Math.min(xdomain[0], minX);\n maxX = Math.max(xdomain[1], maxX);\n minY = Math.min(ydomain[0], minY);\n maxY = Math.max(ydomain[1], maxY);\n }\n }\n\n if (timeaxis === \"x\" && maxdatetime && mindatetime) {\n minX = Math.min(minX, mindatetime);\n maxX = Math.max(maxX, maxdatetime);\n }\n\n if (timeaxis === \"y\" && maxdatetime && mindatetime) {\n minY = Math.min(minY, mindatetime);\n maxY = Math.max(maxY, maxdatetime);\n }\n\n return { minX, maxX, minY, maxY };\n };\n\n processUrlAxis = (url, datasetparameters, xaxis, yaxis, zaxis) => {\n var search = url.replace(\"?\", \"\").split(\"&\");\n var validAxis = datasetparameters.map((d) => d.axis);\n for (let s of search) {\n if (s.includes(\"axis\")) {\n try {\n var xxaxis = [];\n var yyaxis = [];\n let axis = s\n .replace(\"axis:[\", \"\")\n .replace(\"axis:(\", \"\")\n .replace(\"axis:%5B\", \"\")\n .replace(\"axis:%5b\", \"\")\n .replace(\"]\", \"\")\n .replace(\")\", \"\")\n .replace(\"%5D\", \"\")\n .replace(\"%5d\", \"\")\n .split(\",\");\n for (let a of axis) {\n if (validAxis.includes(a)) {\n if (a.includes(\"x\")) xxaxis.push(a);\n if (a.includes(\"y\")) yyaxis.push(a);\n if (a.includes(\"z\")) zaxis = a;\n }\n }\n xaxis = xxaxis;\n yaxis = yyaxis;\n } catch (e) {\n console.error(\"Failed to parse axis from url\");\n }\n }\n }\n return { xaxis, yaxis, zaxis };\n };\n\n processUrlBounds = (url, lowerX, upperX) => {\n if (url.includes(\"&latest\")) {\n let newLower = upperX - 7 * 24 * 60 * 60;\n if (newLower > lowerX) lowerX = newLower;\n }\n return { lowerX, upperX };\n };\n\n componentDidMount() {\n var { datasetparameters, dataset, file, data } = this.props;\n var {\n xaxis,\n yaxis,\n zaxis,\n decimate,\n average,\n display,\n thresholdStep,\n plotdots,\n interpolate,\n } = this.state;\n\n if (data[0] === false) {\n this.setState({ failed: true });\n } else {\n ({ xaxis, yaxis, zaxis } = this.processUrlAxis(\n this.props.search,\n datasetparameters,\n xaxis,\n yaxis,\n zaxis\n ));\n\n var { xoptions, yoptions, zoptions, graph, yReverse, xReverse } =\n this.setAxisOptions(datasetparameters, xaxis, yaxis);\n\n var { xlabel, ylabel, zlabel, xunits, yunits, zunits } =\n this.getAxisLabels(datasetparameters, xaxis, yaxis, zaxis);\n\n var {\n title,\n colors,\n minY,\n maxY,\n minX,\n maxX,\n minZ,\n maxZ,\n lowerY,\n upperY,\n lowerX,\n upperX,\n timeaxis,\n } = this.getInitialBounds(dataset, data, file, xaxis, yaxis, zaxis);\n\n ({ lowerX, upperX } = this.processUrlBounds(\n this.props.search,\n lowerX,\n upperX\n ));\n\n if (\"interpolate\" in dataset.plotproperties)\n interpolate = dataset.plotproperties.interpolate;\n\n var { plotdata, lowerZ, upperZ } = this.processPlotData(\n xaxis,\n yaxis,\n zaxis,\n upperY,\n lowerY,\n maxY,\n minY,\n upperX,\n lowerX,\n minX,\n maxX,\n decimate,\n average,\n datasetparameters,\n timeaxis,\n graph,\n interpolate\n );\n\n if (\"display\" in dataset.plotproperties)\n display = dataset.plotproperties.display;\n if (\"thresholdStep\" in dataset.plotproperties)\n thresholdStep = dataset.plotproperties.thresholdStep;\n if (plotdata[0].x.length < 100) plotdots = true;\n\n this.setState({\n plotdata,\n xaxis,\n yaxis,\n zaxis,\n xoptions,\n yoptions,\n zoptions,\n graph,\n xlabel,\n ylabel,\n zlabel,\n xunits,\n yunits,\n zunits,\n yReverse,\n xReverse,\n title,\n colors,\n minZ,\n maxZ,\n minY,\n maxY,\n minX,\n maxX,\n lowerY,\n upperY,\n lowerX,\n upperX,\n lowerZ,\n upperZ,\n timeaxis,\n display,\n thresholdStep,\n plotdots,\n interpolate,\n });\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n var {\n refresh,\n timeaxis,\n upperY,\n lowerY,\n upperX,\n lowerX,\n lowerZ,\n upperZ,\n xaxis,\n yaxis,\n zaxis,\n graph,\n minZ,\n maxZ,\n } = this.state;\n if (refresh || this.props.fileChange !== prevProps.fileChange) {\n var { minX, maxX, minY, maxY } = this.getBounds(\n this.props.data,\n xaxis,\n yaxis,\n timeaxis\n );\n if (prevState.minY === prevState.lowerY && prevState.lowerY === lowerY)\n lowerY = minY;\n if (prevState.maxY === prevState.upperY && prevState.upperY === upperY)\n upperY = maxY;\n if (prevState.minX === prevState.lowerX && prevState.lowerX === lowerX)\n lowerX = minX;\n if (prevState.maxX === prevState.upperX && prevState.upperX === upperX)\n upperX = maxX;\n\n var { plotdata } = this.processPlotData(\n xaxis,\n yaxis,\n zaxis,\n upperY,\n lowerY,\n maxY,\n minY,\n upperX,\n lowerX,\n minX,\n maxX,\n this.state.decimate,\n this.state.average,\n this.props.datasetparameters,\n timeaxis,\n graph,\n this.state.interpolate\n );\n\n if (refresh !== \"z\") {\n if (minZ === lowerZ || maxZ === upperZ) {\n ({ minZ, maxZ } = this.getZBounds(plotdata));\n upperZ = maxZ;\n lowerZ = minZ;\n } else {\n ({ minZ, maxZ } = this.getZBounds(plotdata));\n }\n }\n\n this.setState({\n plotdata,\n refresh: false,\n minZ,\n maxZ,\n minX,\n maxX,\n minY,\n maxY,\n upperX,\n upperY,\n upperZ,\n lowerX,\n lowerY,\n lowerZ,\n });\n }\n }\n\n render() {\n if (this.state.failed) {\n return (\n <div className=\"failed-download\">\n <img src={Connect} alt=\"Disconnected\" />\n Unable to download data from the Datalakes API.\n <div>\n <b>Please try refreshing the page or come back later.</b>\n </div>\n </div>\n );\n } else if (this.props.search.toLowerCase().includes(\"bafu\")) {\n return (\n <React.Fragment>\n <div className=\"detailloading\" id=\"detailloading\">\n <Loading />\n Downloading extra files.\n </div>\n <Bafu {...this.state} {...this.props} onChangeX={this.onChangeX} />\n </React.Fragment>\n );\n } else if (this.props.search.toLowerCase().includes(\"display\")) {\n return (\n <React.Fragment>\n <div className=\"detailloading\" id=\"detailloading\">\n <Loading />\n Downloading extra files.\n </div>\n <Display {...this.state} {...this.props} onChangeX={this.onChangeX} />\n </React.Fragment>\n );\n } else {\n return (\n <React.Fragment>\n <SidebarLayout\n sidebartitle=\"Plot Controls\"\n wide={true}\n left={\n <React.Fragment>\n <div className=\"detailloading\" id=\"detailloading\">\n <Loading />\n Downloading extra files.\n </div>\n <div className=\"detailgraph\">\n <Graph {...this.state} {...this.props} />\n {!this.props.iframe && (\n <ReportIssue\n id={this.props.dataset.id}\n repositories_id={this.props.dataset.repositories_id}\n dataset={this.state.title}\n datasetparameters={this.props.datasetparameters}\n />\n )}\n </div>\n </React.Fragment>\n }\n rightNoScroll={\n <Sidebar\n {...this.state}\n {...this.props}\n onChangeState={this.onChangeState}\n onChangeFile={this.onChangeFile}\n onChangeX={this.onChangeX}\n onChangeY={this.onChangeY}\n toggleAddNewFile={this.toggleAddNewFile}\n handleAxisSelect={this.handleAxisSelect}\n handleAxisAppend={this.handleAxisAppend}\n />\n }\n />\n </React.Fragment>\n );\n }\n }\n}\n\nexport default Plot;\n","import React, { Component } from \"react\";\nimport GIS from \"../../../graphs/leaflet/gis\";\nimport \"../css/datadetail.css\";\nimport \"../css/threed.css\";\n\nclass MapComponent extends Component {\n state = {};\n\n render() {\n var { dataset, datasetparameters } = this.props;\n var p = datasetparameters.filter(\n (dp) => ![1, 2, 3, 4].includes(dp.parameters_id)\n );\n p.sort((a, b) =>\n a.parameters_id > b.parameters_id\n ? -1\n : b.parameters_id > a.parameters_id\n ? 1\n : 0\n );\n var zoom = 8;\n if ([\"meteolakes\", \"datalakes\"].includes(dataset.mapplotfunction))\n zoom = 11;\n var timestep = 180;\n if (dataset.mapplotfunction === \"remoteSensing\") timestep = \"Next\";\n var defaults = {\n selected: p.map((param) => [dataset.id, param.parameters_id]),\n center: [dataset.latitude, dataset.longitude],\n datetime: new Date(dataset.maxdatetime),\n zoom,\n timestep,\n };\n return (\n <div className=\"threed\">\n <GIS defaults={defaults} hidelayerbutton={true} />\n </div>\n );\n }\n}\n\nexport default MapComponent;\n","import React, { Component } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { apiUrl, serverlessUrl, bucket } from \"../../../src/config.json\";\nimport axios from \"axios\";\nimport * as d3 from \"d3\";\nimport Download from \"./inner/download\";\nimport Information from \"./inner/information\";\nimport Pipeline from \"./inner/pipeline\";\nimport External from \"./inner/external\";\nimport Preview from \"./inner/preview\";\nimport DataSubMenu from \"./datasubmenu\";\nimport Loading from \"../../components/loading/loading\";\nimport ThreeDModelDownload from \"./inner/threedmodeldownload\";\nimport Ch2018Graph from \"./inner/ch2018graph\";\nimport Ch2018Download from \"./inner/ch2018download\";\nimport RemoteSensingDownload from \"./inner/remotesensingdownload\";\nimport LocationMap from \"./inner/locationmap\";\nimport Plot from \"./inner/plot\";\nimport isArray from \"lodash/isArray\";\nimport MapComponent from \"./inner/mapcomponent\";\nimport \"./css/datadetail.css\";\n\nclass DataDetail extends Component {\n state = {\n selection: \"\",\n dataset: [],\n datasetparameters: [],\n error: false,\n mindatetime: \"\",\n maxdatetime: \"\",\n mindepth: \"\",\n maxdepth: \"\",\n lower: \"\",\n upper: \"\",\n files: [],\n file_tree: [],\n data: \"\",\n step: \"\",\n lang: \"en\",\n allowedStep: [\"plot\", \"download\", \"pipeline\", \"information\", \"webgis\"],\n file: [0],\n innerLoading: false,\n addnewfiles: true,\n iframe: false,\n search: false,\n maintenance: false,\n };\n\n // Download data\n\n downloadData = async () => {\n this.downloadData = () => {}; // Only possible to fire once.\n var { data: dataArray, files } = this.state;\n for (var j = 0; j < files.length; j++) {\n if (dataArray[j] === 0) {\n var { data } = await axios\n .get(apiUrl + \"/files/\" + files[j].id + \"?get=raw\")\n .catch((error) => {\n this.setState({ error: true });\n });\n dataArray[j] = data;\n if (this._isMounted) {\n this.setState({\n data: dataArray,\n });\n } else {\n return false;\n }\n }\n }\n };\n\n downloadFile = async (index) => {\n var { data: dataArray, files } = this.state;\n var { data } = await axios\n .get(apiUrl + \"/files/\" + files[index].id + \"?get=raw\")\n .catch((error) => {\n this.setState({ error: true });\n });\n dataArray[index] = data;\n if (this._isMounted) {\n this.setState({\n data: dataArray,\n innerLoading: false,\n });\n } else {\n return false;\n }\n };\n\n cleanData = (data) => {\n if (Object.keys(data).includes(\"undefined\")) {\n delete data.undefined;\n }\n return data;\n };\n\n downloadMultipleFiles = async (arr, newfile = false) => {\n var { data: dataArray, files, file } = this.state;\n for (var j = 0; j < arr.length; j++) {\n if (dataArray[arr[j]] === 0) {\n var { data } = await axios\n .get(apiUrl + \"/files/\" + files[arr[j]].id + \"?get=raw\")\n .catch((error) => {\n this.setState({ error: true });\n });\n dataArray[arr[j]] = this.cleanData(data);\n }\n }\n if (newfile) {\n file = newfile;\n }\n if (this._isMounted) {\n this.setState({\n data: dataArray,\n file,\n innerLoading: false,\n });\n } else {\n return false;\n }\n };\n // Update state based on actions\n\n updateSelectedState = (step) => {\n this.setState({ step });\n };\n\n onChangeFileInt = (value) => {\n var { file, data, addnewfiles } = this.state;\n if (!file.includes(value) && this.isInt(value) && file.length < 20) {\n if (value >= 0 && value <= data.length) {\n if (!addnewfiles) file = [];\n file.push(value);\n if (data[value] === 0) {\n this.setState({ file, innerLoading: true });\n this.downloadFile(value);\n } else {\n this.setState({ file });\n }\n }\n }\n };\n\n onChangeFile = (values) => {\n var { files, file, data, addnewfiles } = this.state;\n let filedict = files.map((a) => a.ave.getTime());\n var newfile = this.closest(values[0], filedict);\n if (!file.includes(newfile) && this.isInt(values[0]) && file.length < 20) {\n if (!addnewfiles) file = [];\n file.push(newfile);\n if (data[newfile] === 0) {\n this.setState({ file, innerLoading: true });\n this.downloadFile(newfile);\n } else {\n this.setState({ file });\n }\n }\n };\n\n selectFilesDatetime = (newfiles) => {\n if (newfiles.length < 1 || newfiles.length > 20) {\n window.alert(\n \"A maximum of 20 profiles can be plotted simultaneously, please select a shorter time period.\"\n );\n } else if (\n window.confirm(\n \"You sure you want to select \" + newfiles.length + \" files?\"\n )\n ) {\n var file = newfiles.map((f) => f.fileid);\n var { data } = this.state;\n this.setState({ innerLoading: true });\n for (var i = 0; i < newfiles.length; i++) {\n if (data[newfiles[i].fileid] === 0) {\n this.downloadFile(newfiles[i].fileid);\n }\n }\n this.setState({ file, innerLoading: false });\n }\n };\n\n removeFile = (event) => {\n var { file } = this.state;\n if (file.length > 1) {\n var index = parseInt(event.target.id);\n file.splice(index, 1);\n this.setState({ file });\n }\n };\n\n toggleAddNewFile = () => {\n this.setState({ addnewfiles: !this.state.addnewfiles });\n };\n\n selectedFiles = (upper, lower, files, data) => {\n if (data === \"download\") {\n data = new Array(files.length).fill(0);\n }\n var fileList = [];\n for (var i = 0; i < files.length; i++) {\n if (\n new Date(files[i].mindatetime).getTime() / 1000 < upper &&\n new Date(files[i].maxdatetime).getTime() / 1000 > lower &&\n data[i] === 0\n ) {\n fileList.push(i);\n }\n }\n return fileList;\n };\n\n onChangeTime = (values) => {\n var { files, data } = this.state;\n const lower = values[0] / 1000;\n const upper = values[1] / 1000;\n if (\n Math.round(lower) !== Math.round(this.state.lower) ||\n Math.round(upper) !== Math.round(this.state.upper)\n ) {\n var toDownload = this.selectedFiles(upper, lower, files, data);\n if (toDownload.length > 0) {\n this.setState({ innerLoading: true });\n this.downloadMultipleFiles(toDownload);\n }\n this.setState({ lower, upper });\n }\n };\n\n onChangeUpper = (value) => {\n var { files, data, lower } = this.state;\n var upper = value.getTime() / 1000;\n var toDownload = this.selectedFiles(upper, lower, files, data);\n if (toDownload.length > 0) {\n this.setState({ innerLoading: true });\n this.downloadMultipleFiles(toDownload);\n }\n this.setState({ upper });\n };\n\n onChangeLower = (value) => {\n var { files, data, upper } = this.state;\n var lower = value.getTime() / 1000;\n var toDownload = this.selectedFiles(upper, lower, files, data);\n if (toDownload.length > 0) {\n this.setState({ innerLoading: true, lower });\n this.downloadMultipleFiles(toDownload);\n }\n };\n\n // Get data from API\n getLabel = (input, id, prop) => {\n const { dropdown } = this.state;\n try {\n return dropdown[input].find((x) => x.id === id)[prop];\n } catch (e) {\n console.error(input, id, e);\n return \"NA\";\n }\n };\n\n parameterDetails = (dropdown, parameters, x) => {\n return dropdown.parameters.find(\n (item) => item.id === parameters[x].parameters_id\n );\n };\n\n // Number functions\n\n closest = (num, arr) => {\n var diff = Infinity;\n var index = 0;\n for (var i = 0; i < arr.length; i++) {\n var newdiff = Math.abs(num - arr[i]);\n if (newdiff < diff) {\n diff = newdiff;\n index = i;\n }\n }\n return index;\n };\n\n isInt = (value) => {\n if (/^[-+]?(\\d+|Infinity)$/.test(value)) {\n return true;\n } else {\n return false;\n }\n };\n\n numDescending = (a, b) => {\n var numA = a.ave.getTime();\n var numB = b.ave.getTime();\n var compare = 0;\n if (numA > numB) {\n compare = -1;\n } else if (numA < numB) {\n compare = 1;\n }\n return compare;\n };\n\n dataBounds = (dataArray) => {\n var xe = d3.extent(dataArray[0].x);\n var lower = xe[0],\n upper = xe[1];\n return { upper: upper, lower: lower };\n };\n\n addAverageTime = (array) => {\n for (var i = 0; i < array.length; i++) {\n let mindt = parseFloat(new Date(array[i].mindatetime).getTime());\n let maxdt = parseFloat(new Date(array[i].maxdatetime).getTime());\n array[i].ave = new Date((mindt + maxdt) / 2);\n array[i].mindt = mindt / 1000;\n array[i].maxdt = maxdt / 1000;\n }\n return array;\n };\n\n addFileLocation = (arr, dataset) => {\n for (let i = 0; i < arr.length; i++) {\n if (arr[i].latitude === \"-9999\" || arr[i].longitude === \"-9999\") {\n arr[i].latitude = dataset.latitude;\n arr[i].longitude = dataset.longitude;\n }\n }\n return arr;\n };\n\n fileBounds = (array) => {\n var min = Math.min.apply(\n Math,\n array.map(function (o) {\n return o.min;\n })\n );\n var max = Math.max.apply(\n Math,\n array.map(function (o) {\n return o.max;\n })\n );\n return { min: min, max: max };\n };\n\n getAve = (arr) => {\n const sum = arr.reduce((a, b) => a + b, 0);\n return sum / arr.length || 0;\n };\n\n getMax = (arr) => {\n let len = arr.length;\n let max = -Infinity;\n\n while (len--) {\n max = arr[len] > max ? arr[len] : max;\n }\n return max;\n };\n\n getMin = (arr) => {\n let len = arr.length;\n let min = Infinity;\n\n while (len--) {\n min = arr[len] < min ? arr[len] : min;\n }\n return min;\n };\n\n merge2DArray = (arr) => {\n let merged = [];\n for (var i = 0; i < arr[0].length; i++) {\n merged.push(innerMerge(i, arr));\n }\n return merged;\n function innerMerge(i, arr) {\n return arr.map((a) => a[i]).flat();\n }\n };\n\n customizer = (objValue, srcValue) => {\n return objValue.concat(srcValue);\n };\n\n getShape = (arr) => {\n if (isArray(arr[0])) {\n return [arr.length, arr[0].length];\n } else {\n return [arr.length];\n }\n };\n\n async getFileTree(bucket_url, ssh) {\n var path = ssh.replace(\"git@\", \"\").replace(\".git\", \"\").replace(\":\", \"/\");\n var prefix = `${bucket_url}/${path}/data`;\n var repo = ssh.split(\"/\")[1].replace(\".git\", \"\");\n try {\n const { data } = await axios.get(\n `${bucket_url}/${path}/filelist.json?timestamp=${new Date().getTime()}`\n );\n\n let file_tree = [];\n let level = { file_tree };\n\n data.forEach((path) => {\n let arr = path.k.split(\"/\");\n arr.reduce((r, name, i, a) => {\n if (!r[name]) {\n r[name] = { file_tree: [] };\n r.file_tree.push({\n name,\n size: i === arr.length - 1 ? path.s : 0,\n children: r[name].file_tree,\n });\n }\n\n return r[name];\n }, level);\n });\n this.setState({ file_tree, prefix, repo });\n } catch (e) {\n console.error(\"No file tree data available\");\n }\n }\n\n async componentDidMount() {\n this._isMounted = true;\n var { step, allowedStep, lower, upper } = this.state;\n var dataset_id;\n if (\"id\" in this.props) {\n dataset_id = this.props.id;\n } else {\n dataset_id = this.props.location.pathname.split(\"/\").slice(-1)[0];\n }\n\n if (dataset_id === \"\") {\n this.setState({ step: \"error\" });\n return;\n }\n\n var search = this.props.location.search;\n var iframe = this.props.location.search.includes(\"iframe\");\n var lang = \"en\";\n var searchArr = search.split(\"&\");\n if (searchArr.includes(\"de\") || searchArr.includes(\"DE\")) lang = \"de\";\n if (searchArr.includes(\"fr\") || searchArr.includes(\"FR\")) lang = \"fr\";\n if (searchArr.includes(\"it\") || searchArr.includes(\"IT\")) lang = \"it\";\n\n var server;\n const timeout = 1000;\n try {\n server = await Promise.all([\n axios.get(apiUrl + \"/datasets/\" + dataset_id, { timeout: timeout }),\n axios.get(apiUrl + \"/files?datasets_id=\" + dataset_id, {\n timeout: timeout,\n }),\n axios.get(apiUrl + \"/datasetparameters?datasets_id=\" + dataset_id, {\n timeout: timeout,\n }),\n axios.get(apiUrl + \"/selectiontables\", { timeout: timeout }),\n axios.get(apiUrl + \"/maintenance/\" + dataset_id, { timeout: timeout }),\n ]);\n } catch (error) {\n console.error(\"NodeJS API error switching to serverless API\");\n server = await Promise.all([\n axios.get(serverlessUrl + \"/datasets/\" + dataset_id),\n axios.get(serverlessUrl + \"/files?datasets_id=\" + dataset_id),\n axios.get(\n serverlessUrl + \"/datasetparameters?datasets_id=\" + dataset_id\n ),\n axios.get(serverlessUrl + \"/selectiontables\"),\n axios.get(serverlessUrl + \"/maintenance/\" + dataset_id),\n ]).catch((error) => {\n let status = error.response.status;\n if ((status === 404) | (status === 400)) {\n this.setState({ step: \"error\" });\n } else {\n this.setState({ step: \"database-error\" });\n }\n });\n }\n\n if (server === undefined) {\n return;\n }\n\n var dataset = server[0].data;\n var { mapplotfunction } = dataset;\n var files = server[1].data;\n files = files.filter(\n (v, i, a) => a.findIndex((t) => t.filelink === v.filelink) === i\n ); // Remove duplicates\n var datasetparameters = server[2].data;\n var dropdown = server[3].data;\n var maintenance = server[4].data;\n\n for (let i = 0; i < maintenance.length; i++) {\n let start = new Date(maintenance[i].starttime);\n let end = new Date(maintenance[i].endtime);\n maintenance[i].start = Math.floor(start.getTime() / 1000);\n maintenance[i].end = Math.floor(end.getTime() / 1000);\n }\n\n // Check for file tree\n if (!dataset.datasourcelink.includes(\"https://\")) {\n this.getFileTree(bucket.url, dataset.ssh);\n }\n\n // Internal vs External Data source\n if (mapplotfunction === \"gitPlot\") {\n // Add parameter details\n var details;\n for (var p in datasetparameters) {\n try {\n details = this.parameterDetails(dropdown, datasetparameters, p);\n datasetparameters[p][\"name\"] = details.name;\n datasetparameters[p][\"characteristic\"] = details.characteristic;\n } catch (err) {\n datasetparameters[p][\"name\"] = null;\n datasetparameters[p][\"characteristic\"] = null;\n }\n }\n\n // Logic for graphs\n var x =\n datasetparameters.filter((param) => param.axis === \"x\").length > 0;\n var y =\n datasetparameters.filter((param) => param.axis === \"y\").length > 0;\n var z =\n datasetparameters.filter((param) => param.axis === \"z\").length > 0;\n\n if (x && y && z) {\n } else if (x && y) {\n allowedStep.push(\"preview\");\n } else {\n allowedStep.push(\"preview\");\n step = \"preview\";\n }\n\n step = \"plot\";\n\n // Logic for showing map\n if (dataset.longitude !== \"-9999\" && dataset.latitude !== \"-9999\") {\n allowedStep.push(\"locationmap\");\n }\n\n // Filter for only json files\n var all_files = files;\n files = files.filter((file) => file.filetype === \"json\");\n files = files.map((file) => {\n var temp = [\"\"];\n try {\n temp = all_files\n .find((af) => af.id === file.filelineage)\n .filelink.split(\"/\");\n } catch (e) {}\n file[\"nc_name\"] = temp[temp.length - 1];\n return file;\n });\n\n // Get add average time\n files = this.addAverageTime(files);\n\n // Add location of file\n files = this.addFileLocation(files, dataset);\n\n // Sort by value (descending)\n files.sort(this.numDescending);\n\n // Get min and max\n var { mindatetime, maxdatetime, mindepth, maxdepth } = dataset;\n mindatetime = new Date(mindatetime).getTime() / 1000;\n maxdatetime = new Date(maxdatetime).getTime() / 1000;\n\n for (let i = 0; i < files.length; i++) {\n mindatetime = Math.min(mindatetime, files[i].ave / 1000);\n maxdatetime = Math.max(maxdatetime, files[i].ave / 1000);\n }\n\n var dataArray = new Array(files.length).fill(0);\n var data = false;\n try {\n ({ data } = await axios.get(\n apiUrl + \"/files/\" + files[0].id + \"?get=raw\"\n ));\n } catch {\n console.error(\"Unable to collect data from the server.\");\n }\n\n dataArray[0] = data;\n\n if (data) {\n ({ lower, upper } = this.dataBounds(dataArray));\n\n // Add dataset length to datasetparameters\n datasetparameters = datasetparameters.map((d) => {\n d.shape = this.getShape(data[d.axis]);\n return d;\n });\n }\n\n // Get Pipeline Data\n var renku = false;\n var scripts = [];\n if (dataset.renku === 0) {\n try {\n ({ data: renku } = await axios.post(\n apiUrl + \"/renku\",\n {\n url: dataset.datasourcelink,\n },\n { timeout: 500 }\n ));\n } catch (e) {\n console.error(\"Failed to fetch Renku data.\");\n renku = false;\n }\n }\n try {\n ({ data: scripts } = await axios({\n method: \"get\",\n url: apiUrl + \"/pipeline/scripts/\" + dataset_id,\n timeout: 2000,\n }));\n } catch (e) {\n console.error(\"Failed to collect scripts.\");\n }\n\n this.setState({\n renku,\n dataset,\n datasetparameters,\n files,\n data: dataArray,\n mindatetime,\n maxdatetime,\n mindepth,\n maxdepth,\n lower,\n upper,\n dropdown,\n step,\n allowedStep,\n scripts,\n iframe,\n search,\n lang,\n maintenance,\n });\n } else if (mapplotfunction === \"meteolakes\") {\n this.setState({\n dataset,\n datasetparameters,\n dropdown,\n files,\n lang,\n loading: false,\n step: \"threedmodel\",\n allowedStep: [\n \"threedmodel\",\n \"threedmodeldownload\",\n \"external\",\n \"webgis\",\n ],\n });\n } else if (mapplotfunction === \"datalakes\") {\n this.setState({\n dataset,\n datasetparameters,\n dropdown,\n files,\n lang,\n loading: false,\n step: \"threedmodel\",\n allowedStep: [\n \"threedmodel\",\n \"threedmodeldownload\",\n \"external\",\n \"webgis\",\n ],\n });\n } else if (mapplotfunction === \"remoteSensing\") {\n this.setState({\n dataset,\n datasetparameters,\n dropdown,\n files,\n lang,\n step: \"remotesensing\",\n allowedStep: [\n \"remotesensing\",\n \"remotesensingdownload\",\n \"external\",\n \"webgis\",\n ],\n });\n } else if (mapplotfunction === \"ch2018\") {\n this.setState({\n dataset,\n datasetparameters,\n dropdown,\n files,\n lang,\n step: \"ch2018\",\n allowedStep: [\"ch2018\", \"ch2018download\", \"external\"],\n });\n } else if (mapplotfunction === \"simstrat\") {\n this.setState({\n dataset,\n datasetparameters,\n dropdown,\n files,\n lang,\n step: \"simstrat\",\n allowedStep: [\"simstrat\", \"external\", \"webgis\"],\n });\n } else {\n this.setState({\n dataset,\n datasetparameters,\n dropdown,\n files,\n lang,\n step: \"external\",\n allowedStep: [\"external\", \"webgis\"],\n });\n }\n }\n\n componentWillUnmount() {\n this._isMounted = false;\n }\n\n render() {\n var {\n renku,\n dataset,\n datasetparameters,\n data,\n mindatetime,\n maxdatetime,\n step,\n allowedStep,\n files,\n file,\n scripts,\n iframe,\n search,\n lang,\n dropdown,\n maintenance,\n file_tree,\n prefix,\n repo,\n } = this.state;\n document.title = dataset.title\n ? dataset.title + \" - Datalakes\"\n : \"Datalakes\";\n\n // Link\n var p = JSON.parse(JSON.stringify(datasetparameters));\n p = p.filter((x) => ![1, 2, 3, 4].includes(x.parameters_id));\n p = p.map((x) => [dataset.id, x.parameters_id]);\n var link = \"/map?selected=\" + JSON.stringify(p);\n var monitor = Number.isInteger(dataset.monitor);\n if (iframe && step !== \"\") step = \"plot\";\n var title = (\n <div className=\"datadetail-title\">\n {dataset.title} {monitor && <div className=\"title-live\">LIVE</div>}\n </div>\n );\n\n switch (step) {\n default:\n return (\n <React.Fragment>\n <table className=\"loading-table\">\n <tbody>\n <tr>\n <td>\n <Loading />\n Loading Data\n </td>\n </tr>\n </tbody>\n </table>\n </React.Fragment>\n );\n case \"plot\":\n return (\n <React.Fragment>\n {!iframe && (\n <React.Fragment>\n {title}\n <DataSubMenu\n step={step}\n allowedStep={allowedStep}\n updateSelectedState={this.updateSelectedState}\n link={link}\n />\n </React.Fragment>\n )}\n <div className=\"datadetail-padding\">\n <Plot\n datasetparameters={datasetparameters}\n dropdown={dropdown}\n dataset={dataset}\n data={data}\n files={files}\n file={file}\n lang={lang}\n fileChange={JSON.stringify(file)}\n maxdatetime={maxdatetime}\n mindatetime={mindatetime}\n removeFile={this.removeFile}\n downloadMultipleFiles={this.downloadMultipleFiles}\n iframe={iframe}\n search={search}\n maintenance={maintenance}\n />\n </div>\n </React.Fragment>\n );\n case \"locationmap\":\n return (\n <React.Fragment>\n {title}\n <DataSubMenu\n step={step}\n allowedStep={allowedStep}\n updateSelectedState={this.updateSelectedState}\n link={link}\n />\n <div className=\"datadetail-padding\">\n <LocationMap\n dataset={dataset}\n file={file}\n files={files}\n min={mindatetime}\n max={maxdatetime}\n onChangeFileInt={this.onChangeFileInt}\n removeFile={this.removeFile}\n selectFilesDatetime={this.selectFilesDatetime}\n apiUrl={apiUrl}\n />\n </div>\n </React.Fragment>\n );\n case \"preview\":\n return (\n <React.Fragment>\n {title}\n <DataSubMenu\n step={step}\n allowedStep={allowedStep}\n updateSelectedState={this.updateSelectedState}\n link={link}\n />\n <div className=\"datadetail-padding\">\n <Preview\n data={data}\n getLabel={this.getLabel}\n datasetparameters={datasetparameters}\n />\n </div>\n </React.Fragment>\n );\n case \"download\":\n return (\n <React.Fragment>\n {title}\n <DataSubMenu\n step={step}\n allowedStep={allowedStep}\n updateSelectedState={this.updateSelectedState}\n link={link}\n />\n <div className=\"datadetail-padding\">\n <Download\n dataset={dataset}\n files={files}\n datasetparameters={datasetparameters}\n selectedFiles={this.selectedFiles}\n getLabel={this.getLabel}\n max={maxdatetime}\n min={mindatetime}\n apiUrl={apiUrl}\n file_tree={file_tree}\n prefix={prefix}\n repo={repo}\n />\n </div>\n </React.Fragment>\n );\n case \"pipeline\":\n return (\n <React.Fragment>\n {title}\n <DataSubMenu\n step={step}\n allowedStep={allowedStep}\n updateSelectedState={this.updateSelectedState}\n link={link}\n />\n <div className=\"datadetail-padding\">\n <Pipeline dataset={dataset} renku={renku} scripts={scripts} />\n </div>\n </React.Fragment>\n );\n case \"information\":\n return (\n <React.Fragment>\n {title}\n <DataSubMenu\n step={step}\n allowedStep={allowedStep}\n updateSelectedState={this.updateSelectedState}\n link={link}\n />\n <div className=\"datadetail-padding\">\n <Information\n dataset={dataset}\n datasetparameters={datasetparameters}\n getLabel={this.getLabel}\n scripts={scripts}\n maintenance={maintenance}\n />\n </div>\n </React.Fragment>\n );\n case \"external\":\n return (\n <React.Fragment>\n {title}\n <DataSubMenu\n step={step}\n allowedStep={allowedStep}\n updateSelectedState={this.updateSelectedState}\n link={link}\n />\n <div className=\"datadetail-padding\">\n <External\n dataset={dataset}\n datasetparameters={datasetparameters}\n getLabel={this.getLabel}\n link={link}\n />\n </div>\n </React.Fragment>\n );\n case \"threedmodel\":\n return (\n <React.Fragment>\n {title}\n <DataSubMenu\n step={step}\n allowedStep={allowedStep}\n updateSelectedState={this.updateSelectedState}\n link={link}\n />\n <div className=\"datadetail-padding\">\n <MapComponent\n dataset={dataset}\n datasetparameters={datasetparameters}\n getLabel={this.getLabel}\n files={files}\n link={link}\n />\n </div>\n </React.Fragment>\n );\n case \"threedmodeldownload\":\n return (\n <React.Fragment>\n {title}\n <DataSubMenu\n step={step}\n allowedStep={allowedStep}\n updateSelectedState={this.updateSelectedState}\n link={link}\n />\n <div className=\"datadetail-padding\">\n <ThreeDModelDownload\n dataset={dataset}\n datasetparameters={datasetparameters}\n getLabel={this.getLabel}\n files={files}\n link={link}\n />\n </div>\n </React.Fragment>\n );\n case \"remotesensingdownload\":\n return (\n <React.Fragment>\n {title}\n <DataSubMenu\n step={step}\n allowedStep={allowedStep}\n updateSelectedState={this.updateSelectedState}\n link={link}\n />\n <div className=\"datadetail-padding\">\n <RemoteSensingDownload\n dataset={dataset}\n datasetparameters={datasetparameters}\n getLabel={this.getLabel}\n files={files}\n link={link}\n />\n </div>\n </React.Fragment>\n );\n case \"remotesensing\":\n return (\n <React.Fragment>\n {title}\n <DataSubMenu\n step={step}\n allowedStep={allowedStep}\n updateSelectedState={this.updateSelectedState}\n link={link}\n />\n <div className=\"datadetail-padding\">\n <MapComponent\n dataset={dataset}\n datasetparameters={datasetparameters}\n getLabel={this.getLabel}\n files={files}\n link={link}\n />\n </div>\n </React.Fragment>\n );\n case \"simstrat\":\n return (\n <React.Fragment>\n {title}\n <DataSubMenu\n step={step}\n allowedStep={allowedStep}\n updateSelectedState={this.updateSelectedState}\n link={link}\n />\n <div className=\"datadetail-padding\">\n <MapComponent\n dataset={dataset}\n datasetparameters={datasetparameters}\n getLabel={this.getLabel}\n files={files}\n link={link}\n />\n </div>\n </React.Fragment>\n );\n case \"ch2018\":\n return (\n <React.Fragment>\n {title}\n <DataSubMenu\n step={step}\n allowedStep={allowedStep}\n updateSelectedState={this.updateSelectedState}\n link={link}\n />\n <div className=\"datadetail-padding\">\n <Ch2018Graph\n dataset={dataset}\n datasetparameters={datasetparameters}\n getLabel={this.getLabel}\n files={files}\n link={link}\n search={this.props.location.search}\n />\n </div>\n </React.Fragment>\n );\n case \"ch2018download\":\n return (\n <React.Fragment>\n {title}\n <DataSubMenu\n step={step}\n allowedStep={allowedStep}\n updateSelectedState={this.updateSelectedState}\n link={link}\n />\n <div className=\"datadetail-padding\">\n <Ch2018Download\n dataset={dataset}\n datasetparameters={datasetparameters}\n getLabel={this.getLabel}\n files={files}\n link={link}\n />\n </div>\n </React.Fragment>\n );\n case \"error\":\n return (\n <React.Fragment>\n <table className=\"loading-table\">\n <tbody>\n <tr>\n <td>\n <h3>\n Sorry we cannot locate that dataset, it may have moved to\n a new location.\n </h3>\n <Link to=\"/data\">\n <h2>Head back to the data portal</h2>\n </Link>\n </td>\n </tr>\n </tbody>\n </table>\n </React.Fragment>\n );\n case \"database-error\":\n return (\n <React.Fragment>\n <table className=\"loading-table\">\n <tbody>\n <tr>\n <td>\n <h3>\n Appologies the Datalakes API is experiencing some\n connectivity issues. <br />\n Please wait a few minutes then try refreshing the page.\n </h3>\n </td>\n </tr>\n </tbody>\n </table>\n </React.Fragment>\n );\n }\n }\n}\n\nexport default DataDetail;\n","module.exports = __webpack_public_path__ + \"static/media/download.8ee71643.svg\";","module.exports = __webpack_public_path__ + \"static/media/mail.38089112.svg\";","module.exports = __webpack_public_path__ + \"static/media/calendar.bac84002.svg\";","module.exports = __webpack_public_path__ + \"static/media/location.c36bc45b.svg\";","module.exports = __webpack_public_path__ + \"static/media/git.122d0d1e.svg\";","module.exports = __webpack_public_path__ + \"static/media/depth.932cc9f3.svg\";","module.exports = __webpack_public_path__ + \"static/media/download.1ac5b6f2.svg\";","module.exports = __webpack_public_path__ + \"static/media/citation.9f3255c3.svg\";","module.exports = __webpack_public_path__ + \"static/media/licence.4a1cb26f.svg\";","module.exports = __webpack_public_path__ + \"static/media/connect.f37aa557.svg\";","module.exports = __webpack_public_path__ + \"static/media/folder.89adab1b.svg\";","module.exports = __webpack_public_path__ + \"static/media/line.f9eeb433.svg\";","module.exports = __webpack_public_path__ + \"static/media/preview.c440c8c7.svg\";","module.exports = __webpack_public_path__ + \"static/media/pipe.6e745e84.svg\";","module.exports = __webpack_public_path__ + \"static/media/info.3c30f8e3.svg\";","module.exports = __webpack_public_path__ + \"static/media/webgis.f468ab47.svg\";","module.exports = __webpack_public_path__ + \"static/media/3d.4456b611.svg\";","module.exports = __webpack_public_path__ + \"static/media/map.766df80c.svg\";"],"sourceRoot":""}