{"version":3,"sources":["models/GalacticPOI.ts","NavMenu.tsx","TypeAheadTextBox.tsx","RouteEntry.tsx","SuggestionsPagination.tsx","LocationInfo.tsx","PlanetaryLocationAddon.tsx","ScenicSuggestionView.tsx","ScenicResults.tsx","Home.tsx","About.tsx","App.tsx","index.tsx"],"names":["GalacticPOITypeEnum","NavMenu","props","ToggleNavMenu","e","setState","Collapse","state","className","href","onClick","this","undefined","Nav","NavItem","exact","to","activeClassName","aria-hidden","Component","TypeAheadTextBox","ItemClicked","item","OnInputChange","Suggestions","TextChanged","a","input","currentTarget","value","length","fetch","ApiUrl","headers","response","ok","json","suggestions","onBlur","Input","id","Id","type","placeholder","Placeholder","Value","onChange","map","x","i","key","onMouseDown","RouteEntry","OnSearch","OnSearchClick","From","DefaultFrom","To","DefaultTo","JumpRange","AcceptableExtraJumps","HandleJumpRangeChange","event","OnJumpRangeChanged","valueAsNumber","HandleAcceptableJumps","OnExtraJumpsChanged","Card","CardBody","FormGroup","Label","for","v","AutocompleteApiUrl","min","max","Button","color","GalacticPOIHelper","AllGalacticPOITypes","Type","planetaryNebula","Name","DisplayClass","nebula","blackHole","historicalLocation","stellarRemnant","planetFeatures","minorPOI","regional","pulsar","starCluster","surfacePOI","deepSpaceOutpost","mysteryPOI","organicPOI","geyserPOI","alienCivStructure","organicStructure","geologyAnomalies","NullType","SuggestionsPagination","ScenicSuggestionPages","PageNumber","PageNumberChanged","preventDefault","Array","from","keys","LocationInfo","SelectBox","node","document","getElementById","window","getSelection","selectAllChildren","Item","poi","galMapSearch","PlanetaryLocationAddon","Toggle","prevState","popoverVisible","Popover","placement","isOpen","target","toggle","PopoverHeader","PopoverBody","body","latitude","longitude","ScenicSuggestionView","ProgressBarColour","distancePercent","DistancePercent","Math","round","extraDistance","MaxExtraDistance","ExtraJumps","distance","jumps","ceil","ShipJumpRange","name","toFixed","Progress","percentageAlongRoute","barClassName","data-toggle","title","role","galMapUrl","POIFilter","Filtered","Show","ScenicResults","ShouldShowByDefault","includes","SuggestionsPerPage","FilterAll","filter","POIFilters","f","OnPageChanged","FilterClick","newFilters","newFilter","find","FilteredSuggestions","ScenicSuggestions","s","some","sort","b","SortByExtraJumps","CurrentPageOfFilteredSuggestions","pageStart","slice","SuggestionType","poiFilters","t","CurrentlySearching","Alert","ErrorMessage","StraightLineDistance","ButtonGroup","InputGroupAddon","addonType","active","SearchCompleted","Home","SHIP_JUMP_RANGE_KEY","ACCEPTABLE_EXTRA_DISTANCE_KEY","acceptableExtraDistance","localStorage","AcceptableExtraDistance","method","JSON","stringify","FromSystemName","ToSystemName","content","StraightLineDistanceOfTrip","straightLineDistance","ResultsPageNumber","range","storedJumpRange","Number","storedExtraDistance","jumpRange","isNaN","RouteDetails","p","About","App","path","component","ReactDOM","render"],"mappings":"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","file":"static/js/main.12769e02.chunk.js","sourcesContent":["export class GalacticPOI {\n\n constructor(\n public id: number,\n public type: GalacticPOITypeEnum,\n public name: string,\n public galMapSearch: string,\n public galMapUrl: string,\n public x: number,\n public y: number,\n public z: number,\n public body: string,\n public latitude: number,\n public longitude: number,\n public distanceFromSol: number) { }\n}\n\nexport enum GalacticPOITypeEnum\n{\n planetaryNebula,\n nebula,\n blackHole,\n historicalLocation,\n stellarRemnant,\n planetFeatures,\n minorPOI,\n regional,\n pulsar,\n starCluster,\n surfacePOI,\n deepSpaceOutpost,\n mysteryPOI,\n organicPOI,\n geyserPOI,\n alienCivStructure = 101,\n organicStructure,\n geologyAnomalies\n}\n\nexport class GalacticPOIType {\n constructor(\n public Type: GalacticPOITypeEnum,\n public Name: string,\n public DisplayClass: string) { }\n}\n\nexport class GalacticPOIHelper {\n AllGalacticPOITypes = () => {\n const alltypes:GalacticPOIType[] = [\n {Type: GalacticPOITypeEnum.planetaryNebula, Name: \"Planetary Nebula\", DisplayClass: \"fas fa-sun\"},\n {Type: GalacticPOITypeEnum.nebula, Name: \"Nebula\", DisplayClass: \"fas fa-fire\"},\n {Type: GalacticPOITypeEnum.blackHole, Name: \"Black Hole\", DisplayClass: \"fas fa-genderless\"},\n {Type: GalacticPOITypeEnum.historicalLocation, Name: \"Historical Location\", DisplayClass: \"fas fa-chess-rook\"},\n {Type: GalacticPOITypeEnum.stellarRemnant, Name: \"Stellar Remnant\", DisplayClass: \"fas fa-compress\"},\n {Type: GalacticPOITypeEnum.planetFeatures, Name: \"Planet Features\", DisplayClass: \"fas fa-globe-americas\"},\n {Type: GalacticPOITypeEnum.minorPOI, Name: \"Minor POI\", DisplayClass: \"fas fa-map-pin\"},\n {Type: GalacticPOITypeEnum.regional, Name: \"Regional\", DisplayClass: \"fas fa-arrows-alt\"},\n {Type: GalacticPOITypeEnum.pulsar, Name: \"Pulsar\", DisplayClass: \"fas fa-compact-disc\"},\n {Type: GalacticPOITypeEnum.starCluster, Name: \"Star Cluster\", DisplayClass: \"fas fa-ellipsis-h\"},\n {Type: GalacticPOITypeEnum.surfacePOI, Name: \"Surface POI\", DisplayClass: \"fas fa-download\"},\n {Type: GalacticPOITypeEnum.deepSpaceOutpost, Name: \"Deep Space Outpost\", DisplayClass: \"fas fa-building\"},\n {Type: GalacticPOITypeEnum.mysteryPOI, Name: \"Mystery POI\", DisplayClass: \"fas fa-question-circle\"},\n {Type: GalacticPOITypeEnum.organicPOI, Name: \"Organic POI\", DisplayClass: \"fas fa-tree\"},\n {Type: GalacticPOITypeEnum.geyserPOI, Name: \"Geyser POI\", DisplayClass: \"fas fa-cloud-upload-alt\"},\n {Type: GalacticPOITypeEnum.alienCivStructure, Name: \"Alien Civilisation Structure\", DisplayClass: \"fas fa-robot\"},\n {Type: GalacticPOITypeEnum.organicStructure, Name: \"Organic Codex Entry\", DisplayClass: \"fas fa-seedling\"},\n {Type: GalacticPOITypeEnum.geologyAnomalies, Name: \"Geological/Anomalous Codex Entry\", DisplayClass: \"fas fa-mountain\"}\n ];\n return alltypes;\n };\n \n NullType = () => {\n return {Name: \"Unknown\", Type: GalacticPOITypeEnum.mysteryPOI, DisplayClass: \"\"}\n };\n}\n","import {Component} from \"react\";\nimport * as React from \"react\";\nimport {Nav, NavItem} from \"reactstrap\";\nimport {NavLink} from \"react-router-dom\";\n\ninterface Props {\n\n}\n\ninterface State {\n Collapse: boolean;\n}\n\nexport class NavMenu extends Component{\n\n constructor(props: Readonly) {\n super(props);\n this.state = {\n Collapse: false\n }\n }\n\n ToggleNavMenu = (e : React.MouseEvent) => this.setState({Collapse: !this.state.Collapse});\n \n render(){\n return (\n
\n
\n ED: Scenic Route Finder\n \n
\n\n
\n \n
\n
\n );\n }\n}\n\nexport default NavMenu","import {Component} from \"react\";\nimport * as React from \"react\";\nimport {Input} from \"reactstrap\";\n\nexport interface Props {\n Value: string;\n Placeholder: string;\n OnInputChange: OnInputChangeFunc;\n Id: string;\n ApiUrl: string;\n}\n\ninterface OnInputChangeFunc {\n (Value:string) : void;\n}\n\ninterface State {\n Suggestions: string[];\n}\n\nexport class TypeAheadTextBox extends Component{\n\n constructor(props: Readonly) {\n super(props);\n this.state = {Suggestions: []};\n }\n\n ItemClicked = (item: string) => {\n this.props.OnInputChange(item);\n this.setState({Suggestions: []});\n };\n \n TextChanged = async (e: React.FormEvent) => {\n const input = e.currentTarget.value;\n this.props.OnInputChange(input);\n if (input.length >= 4){\n const response = await fetch(`${this.props.ApiUrl}${input}`, \n {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n }\n });\n if (response.ok){\n const suggestions = await response.json();\n this.setState({Suggestions: suggestions});\n } else {\n this.setState({Suggestions: []});\n }\n }\n };\n \n render(){\n return (\n
this.setState({Suggestions: []})}>\n \n
0 ? \" show\" : undefined)}>\n {this.state.Suggestions.map((x, i) =>\n \n \n )}\n
\n
\n ); \n }\n}\n\nexport default TypeAheadTextBox","import {Component} from \"react\";\nimport * as React from \"react\";\nimport TypeAheadTextBox from \"./TypeAheadTextBox\";\nimport {Button, Card, CardBody, FormGroup, Input, Label} from \"reactstrap\";\n\ninterface OnSearchClickFunc {\n (From:string, To:string, JumpRange:number, AcceptableExtraJumps:number) : void;\n}\n\ninterface Props {\n OnSearchClick: OnSearchClickFunc;\n AutocompleteApiUrl: string;\n JumpRange: number;\n OnJumpRangeChanged: (range: number) => void;\n AcceptableExtraJumps: number;\n OnExtraJumpsChanged: (jumps: number) => void;\n}\n\ninterface State {\n From: string;\n To: string;\n DefaultFrom: string;\n DefaultTo: string;\n}\n\nexport class RouteEntry extends Component{\n\n constructor(props: Readonly) {\n super(props);\n this.state = {\n DefaultFrom: \"Sol\",\n DefaultTo: \"Colonia\",\n From: \"\",\n To: \"\"\n };\n }\n \n OnSearch = () => this.props.OnSearchClick(\n this.state.From !== \"\" ? this.state.From : this.state.DefaultFrom, \n this.state.To !== \"\" ? this.state.To : this.state.DefaultTo,\n this.props.JumpRange,\n this.props.AcceptableExtraJumps);\n\n HandleJumpRangeChange = (event: React.FormEvent) => {\n this.props.OnJumpRangeChanged(event.currentTarget.valueAsNumber);\n };\n \n HandleAcceptableJumps = (event: React.FormEvent) => {\n this.props.OnExtraJumpsChanged(event.currentTarget.valueAsNumber);\n };\n\n render(){\n return (\n
\n

Enter trip details below.

\n \n \n
\n
\n \n
\n \n this.setState({From: v})} ApiUrl={this.props.AutocompleteApiUrl}/>\n
\n
\n
\n
\n \n this.setState({To: v})} ApiUrl={this.props.AutocompleteApiUrl}/>\n
\n
\n
\n
\n \n \n \n \n \n \n \n \n
\n
\n
\n
\n
\n );\n }\n \n \n}\n\nexport default RouteEntry","import {Component} from \"react\";\nimport * as React from \"react\";\n\nexport interface Props {\n PageNumber: number;\n ScenicSuggestionPages: number;\n PageNumberChanged: OnPageChangeFunc; \n}\n\ninterface OnPageChangeFunc {\n (page: number) : void;\n}\n\ninterface State {\n\n}\n\nexport class SuggestionsPagination extends Component{\n render(){\n if (this.props.ScenicSuggestionPages > 0) {\n return (\n
\n
    \n
  • 0 ? \"\" : \"disabled\")}>\n \n
  • \n {Array.from(Array(this.props.ScenicSuggestionPages).keys()).map((x, i) =>\n\n
  • \n \n
  • \n )}\n
  • \n \n
  • \n
\n
\n );\n } else {\n return
\n }\n }\n}\n\nexport default SuggestionsPagination","import {Component} from \"react\";\nimport * as React from \"react\";\nimport {ScenicSuggestionViewModel} from \"./models/ScenicSuggestionViewModel\";\nimport {GalacticPOIType} from \"./models/GalacticPOI\";\n\nexport interface Props {\n Item: ScenicSuggestionViewModel;\n Type : GalacticPOIType;\n}\n\ninterface State {\n\n}\n\nexport class LocationInfo extends Component{\n\n SelectBox = (e: React.MouseEvent) => {\n const node = document.getElementById(e.currentTarget.id);\n if (node != null) {\n window.getSelection()?.selectAllChildren(node);\n }\n };\n\n render(){\n return (\n
\n System:
{this.props.Item.poi.galMapSearch}\n
\n );\n }\n}\n\nexport default LocationInfo","import {Component} from \"react\";\nimport * as React from \"react\";\nimport {ScenicSuggestionViewModel} from \"./models/ScenicSuggestionViewModel\";\nimport {GalacticPOIType} from \"./models/GalacticPOI\";\nimport {Button, Popover, PopoverBody, PopoverHeader} from \"reactstrap\";\n\nexport interface Props {\n Item: ScenicSuggestionViewModel;\n Type : GalacticPOIType;\n}\n\ninterface State {\n popoverVisible: boolean\n}\n\nexport class PlanetaryLocationAddon extends Component{\n \n constructor(props: Readonly) {\n super(props);\n\n this.state = {popoverVisible: false};\n }\n \n Toggle = () => {\n this.setState((prevState, props) => ({popoverVisible: !prevState.popoverVisible}));\n }\n\n render() {\n return (\n
\n \n \n Planetary POI\n
Body: {this.props.Item.poi.body}
\n Lat: {this.props.Item.poi.latitude}
\n Long: {this.props.Item.poi.longitude}
\n
\n
\n );\n }\n}\n\nexport default PlanetaryLocationAddon","import {Component} from \"react\";\nimport * as React from \"react\";\nimport {ScenicSuggestionViewModel} from \"./models/ScenicSuggestionViewModel\";\nimport {GalacticPOIType} from \"./models/GalacticPOI\";\nimport {Card, CardBody, Progress} from \"reactstrap\";\nimport LocationInfo from \"./LocationInfo\";\nimport PlanetaryLocationAddon from \"./PlanetaryLocationAddon\";\n\nexport interface Props {\n Item: ScenicSuggestionViewModel;\n Type : GalacticPOIType;\n ShipJumpRange: number;\n MaxExtraDistance: number;\n}\n\ninterface State {\n\n}\n\nexport class ScenicSuggestionView extends Component{\n\n ProgressBarColour = () => {\n const distancePercent = this.DistancePercent();\n if (distancePercent > 80)\n {\n return \"danger\";\n }\n if (distancePercent > 50)\n {\n return \"warning\";\n }\n return \"info\";\n };\n \n DistancePercent = () => Math.round(100 * (this.props.Item.extraDistance / this.props.MaxExtraDistance));\n \n SelectBox = (e: React.MouseEvent) => {\n const node = document.getElementById(e.currentTarget.id);\n if (node != null) {\n window.getSelection()?.selectAllChildren(node);\n }\n };\n\n ExtraJumps = (distance: number) => {\n const jumps = Math.ceil(distance / this.props.ShipJumpRange);\n return jumps > 1 ? `${jumps} extra jumps` : \"1 extra jump\";\n };\n \n render(){\n return (\n \n \n \n
\n
\n \n
\n
\n {this.props.Item.poi.name}\n
\n {this.props.Type.Name}\n
\n
\n
\n
\n
\n {this.ExtraJumps(this.props.Item.extraDistance)}, {this.props.Item.extraDistance.toFixed(2)} Ly\n
\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n {this.props.Item.percentageAlongRoute.toFixed(0)}% \n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n
\n EDSM Info\n
\n {this.props?.Item?.poi?.body != null ?\n
\n \n
\n : null}\n
\n
\n
\n
\n
\n\n );\n }\n}\n\nexport default ScenicSuggestionView","import {Component} from \"react\";\nimport React from \"react\";\nimport {ScenicSuggestionViewModel} from \"./models/ScenicSuggestionViewModel\";\nimport {GalacticPOIHelper, GalacticPOIType, GalacticPOITypeEnum} from \"./models/GalacticPOI\";\nimport {SuggestionsPagination} from \"./SuggestionsPagination\";\nimport {ScenicSuggestionView} from \"./ScenicSuggestionView\";\nimport {Alert, Button, ButtonGroup, InputGroupAddon} from \"reactstrap\";\n\ninterface Props {\n CurrentlySearching: boolean;\n StraightLineDistance:number;\n ScenicSuggestions: ScenicSuggestionViewModel[];\n ErrorMessage ?: string;\n ShipJumpRange:number;\n MaxExtraDistance :number;\n SearchCompleted : boolean;\n PageNumber: number;\n OnPageChanged: OnPageChangedFunc;\n}\n\ninterface OnPageChangedFunc {\n (page: number) : void;\n}\n\nclass POIFilter {\n Type: GalacticPOIType;\n Show: boolean;\n\n constructor(Type: GalacticPOIType, Filtered: boolean) {\n this.Type = Type;\n this.Show = Filtered;\n }\n}\n\ninterface State {\n SortByExtraJumps: boolean;\n POIFilters: POIFilter[];\n}\n\nexport class ScenicResults extends Component {\n \n constructor(props: Readonly) {\n super(props);\n const allPOITypes = new GalacticPOIHelper().AllGalacticPOITypes();\n const poiFilters = allPOITypes.map(t => new POIFilter(t, this.ShouldShowByDefault(t.Type)));\n this.state = {\n SortByExtraJumps: true,\n POIFilters: poiFilters\n }\n }\n \n ShouldShowByDefault = (type: GalacticPOITypeEnum) => ![GalacticPOITypeEnum.organicStructure, GalacticPOITypeEnum.geologyAnomalies].includes(type);\n \n SuggestionsPerPage = 25;\n \n FilterAll = (filter: boolean) => {\n this.setState({POIFilters: this.state.POIFilters.map(f => new POIFilter(f.Type, filter))});\n this.props.OnPageChanged(0);\n };\n \n FilterClick = (filter: POIFilter) => {\n let newFilters = this.state.POIFilters.map(f => new POIFilter(f.Type, f.Show));\n const newFilter = newFilters.find(f => f.Type.Type === filter.Type.Type);\n if (newFilter != null) {\n newFilter.Show = !newFilter.Show; \n }\n this.setState({POIFilters: newFilters});\n this.props.OnPageChanged(0);\n };\n \n FilteredSuggestions = () => {\n return this.props.ScenicSuggestions\n .filter(s => this.state.POIFilters.some(f => f.Type.Type === s.poi.type && f.Show))\n .sort((a, b) => this.state.SortByExtraJumps ? \n (a.extraDistance - b.extraDistance) : \n (a.percentageAlongRoute - b.percentageAlongRoute));\n };\n \n CurrentPageOfFilteredSuggestions = () => {\n const pageStart = this.props.PageNumber * this.SuggestionsPerPage;\n return this.FilteredSuggestions().slice(pageStart, pageStart + this.SuggestionsPerPage);\n };\n\n ScenicSuggestionPages = () => Math.ceil((this.FilteredSuggestions().length) / this.SuggestionsPerPage);\n \n SuggestionType = (s : ScenicSuggestionViewModel) => {\n const filter = this.state.POIFilters.find(f => f.Type.Type === s.poi.type);\n if (filter == null){\n return new GalacticPOIHelper().NullType(); \n } else {\n return filter.Type;\n }\n };\n\n render() {\n if (this.props.CurrentlySearching) {\n return (\n
\n Searching...\n
\n );\n } else if (this.props.ErrorMessage !== undefined) {\n return (\n
\n {this.props.ErrorMessage}\n
\n );\n } else if (this.props.ScenicSuggestions.length > 0) {\n return (\n
\n
\n
\n \n Straight line distance of your trip: {this.props.StraightLineDistance.toFixed(2)} Ly\n \n
\n
\n Consider visiting...\n
\n
\n \n
\n \n Filter POIs:\n \n {this.state.POIFilters.map((x, i) =>\n \n )}\n \n \n
\n \n
\n \n Sort by:\n \n \n \n
\n\n \n {this.CurrentPageOfFilteredSuggestions().map((x, i) =>\n \n )}\n \n
\n );\n } else if (this.props.SearchCompleted) {\n return (\n
\n No suggestions.\n
\n );\n } else {\n return (\n
\n );\n }\n }\n}\n\nexport default ScenicResults","import React, {Component} from 'react';\n\nimport {ScenicSuggestionViewModel} from \"./models/ScenicSuggestionViewModel\";\nimport {RouteDetails} from \"./RouteDetails\";\nimport {RouteEntry} from \"./RouteEntry\"\nimport {ScenicResults} from \"./ScenicResults\";\nimport {ScenicSuggestionsResponse} from \"./models/ScenicSuggestionsResponse\";\n\nexport interface Props {\n\n}\n\ninterface State {\n Suggestions: ScenicSuggestionViewModel[];\n CurrentlySearching: boolean;\n ErrorMessage?: string;\n SearchCompleted: boolean;\n StraightLineDistanceOfTrip: number;\n RouteDetails: RouteDetails;\n ShipJumpRange: number;\n AcceptableExtraJumps: number;\n AcceptableExtraDistance: number;\n ResultsPageNumber: number;\n}\n\nexport class Home extends Component {\n \n SHIP_JUMP_RANGE_KEY = \"ShipJumpRange\";\n ACCEPTABLE_EXTRA_DISTANCE_KEY = \"AcceptableExtraDistance\";\n\n constructor(props: Readonly) {\n super(props);\n\n // Check local storage\n const storedJumpRange = Number(localStorage[this.SHIP_JUMP_RANGE_KEY]);\n const storedExtraDistance = Number(localStorage[this.ACCEPTABLE_EXTRA_DISTANCE_KEY]);\n const jumpRange = isNaN(storedJumpRange) ? 30 : storedJumpRange;\n const extraDistance = isNaN(storedExtraDistance) ? 150 : storedExtraDistance;\n \n this.state = {\n Suggestions: [],\n CurrentlySearching: false,\n ErrorMessage: undefined,\n RouteDetails: {FromSystemName: \"\", ToSystemName: \"\", AcceptableExtraDistance: extraDistance},\n SearchCompleted: false,\n StraightLineDistanceOfTrip: 0,\n AcceptableExtraDistance: extraDistance,\n AcceptableExtraJumps: extraDistance / jumpRange,\n ShipJumpRange: jumpRange,\n ResultsPageNumber: 0\n } as State;\n }\n \n OnSearchClick = async (from: string, to: string) => {\n const acceptableExtraDistance = this.state.ShipJumpRange * this.state.AcceptableExtraJumps;\n localStorage[this.ACCEPTABLE_EXTRA_DISTANCE_KEY] = acceptableExtraDistance;\n this.setState({AcceptableExtraDistance: acceptableExtraDistance, CurrentlySearching: true, SearchCompleted: false});\n \n const response = await fetch('/api/scenicsuggestions',\n {\n method: 'POST',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({FromSystemName: from, ToSystemName: to, AcceptableExtraDistance: acceptableExtraDistance})\n });\n\n const content: ScenicSuggestionsResponse = await response.json();\n if (!response.ok){\n this.setState({ErrorMessage: \"Error: \" + content, StraightLineDistanceOfTrip: 0, Suggestions: [], CurrentlySearching: false});\n return;\n } \n \n this.setState({\n StraightLineDistanceOfTrip: content.straightLineDistance,\n Suggestions: content.suggestions,\n CurrentlySearching: false,\n ErrorMessage: undefined,\n ResultsPageNumber: 0\n });\n };\n \n OnJumpRangeChanged = (range: number) => {\n this.setState({ShipJumpRange: range});\n localStorage[this.SHIP_JUMP_RANGE_KEY] = range;\n };\n\n OnExtraJumpsChanged = (jumps: number) => {\n this.setState({AcceptableExtraJumps: jumps});\n };\n \n render() {\n return (\n
\n

Scenic Route Finder

\n
\n \n
\n
\n this.setState({ResultsPageNumber: p})}\n />\n
\n
\n );\n }\n}\n\nexport default Home;\n","import {Component} from \"react\";\nimport * as React from \"react\";\nimport {Alert} from \"reactstrap\";\n\nexport interface Props {\n\n}\n\ninterface State {\n\n}\n\nexport class About extends Component{\n render(){\n return (\n
\n

About This Site

\n \n

This is a tool for players of Elite Dangerous, explorers traversing the galaxy.

\n \n \n Elite Dangerous Scenic Route Finder v1.3.0\n \n \n

What does it do?

\n

\n If you are at a point A (let's say Sol, home of Earth) and you plan to visit point B (let's say the far-flung Colonia settlement), you might pass by many \n other interesting places en route without even knowing. If you don't mind a few extra jumps to see some spectacular interstellar sights, use\n this tool to find them!

\n

Simply type in your current position and destination (either the system name as it appears in Elite Dangerous or the Point of Interest name as known\n by EDSM), how far your ship can jump, and how many extra jumps you are willing to consider, and click Search.

\n

Please note that numbers of jumps are estimated by straight line distance, and so may appear less than the actual number of jumps for ships with low jump range\n or sparse areas of the galaxy.

\n \n

Who wrote it?

\n

This tool was written by Keir MacDonald, a .NET software developer based in the South of England, occasional Elite Dangerous ship commander, and\n loyal supporter of the Empire. You can find contact details on my personal website.

\n \n

How does it work?

\n

This project uses a React + TypeScript front-end, with an ASP.NET Core backend. The Elite Dangerous galaxy data it uses comes from\n the Elite Dangerous Star Map project, without which this tool would not be possible.

\n

The source code behind both client and server can be found on my GitHub.

\n
\n );\n }\n}\n\nexport default About","import React, { Component } from 'react';\nimport {NavMenu} from \"./NavMenu\";\nimport {Home} from \"./Home\";\nimport {Route, Switch} from \"react-router\";\nimport About from \"./About\";\n\nexport interface Props {\n \n}\n\ninterface State {\n\n}\n\nclass App extends Component {\n\n render() {\n return (\n
\n \n
\n
\n \n \n \n \n
\n
\n
\n );\n }\n}\n\nexport default App;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\nimport 'bootswatch/dist/darkly/bootstrap.min.css';\nimport './site.css';\nimport 'reactstrap';\nimport {BrowserRouter} from \"react-router-dom\";\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);"],"sourceRoot":""}