Initial commit
This commit is contained in:
		
							
								
								
									
										355
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										355
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,355 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					# Created by https://www.gitignore.io/api/csharp
 | 
				
			||||||
 | 
					# Edit at https://www.gitignore.io/?templates=csharp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Csharp ###
 | 
				
			||||||
 | 
					## Ignore Visual Studio temporary files, build results, and
 | 
				
			||||||
 | 
					## files generated by popular Visual Studio add-ons.
 | 
				
			||||||
 | 
					##
 | 
				
			||||||
 | 
					## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# User-specific files
 | 
				
			||||||
 | 
					*.rsuser
 | 
				
			||||||
 | 
					*.suo
 | 
				
			||||||
 | 
					*.user
 | 
				
			||||||
 | 
					*.userosscache
 | 
				
			||||||
 | 
					*.sln.docstates
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# User-specific files (MonoDevelop/Xamarin Studio)
 | 
				
			||||||
 | 
					*.userprefs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Mono auto generated files
 | 
				
			||||||
 | 
					mono_crash.*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Build results
 | 
				
			||||||
 | 
					[Dd]ebug/
 | 
				
			||||||
 | 
					[Dd]ebugPublic/
 | 
				
			||||||
 | 
					[Rr]elease/
 | 
				
			||||||
 | 
					[Rr]eleases/
 | 
				
			||||||
 | 
					x64/
 | 
				
			||||||
 | 
					x86/
 | 
				
			||||||
 | 
					[Aa][Rr][Mm]/
 | 
				
			||||||
 | 
					[Aa][Rr][Mm]64/
 | 
				
			||||||
 | 
					bld/
 | 
				
			||||||
 | 
					[Bb]in/
 | 
				
			||||||
 | 
					[Oo]bj/
 | 
				
			||||||
 | 
					[Ll]og/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio 2015/2017 cache/options directory
 | 
				
			||||||
 | 
					.vs/
 | 
				
			||||||
 | 
					# Uncomment if you have tasks that create the project's static files in wwwroot
 | 
				
			||||||
 | 
					#wwwroot/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio 2017 auto generated files
 | 
				
			||||||
 | 
					Generated\ Files/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# MSTest test Results
 | 
				
			||||||
 | 
					[Tt]est[Rr]esult*/
 | 
				
			||||||
 | 
					[Bb]uild[Ll]og.*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# NUnit
 | 
				
			||||||
 | 
					*.VisualState.xml
 | 
				
			||||||
 | 
					TestResult.xml
 | 
				
			||||||
 | 
					nunit-*.xml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Build Results of an ATL Project
 | 
				
			||||||
 | 
					[Dd]ebugPS/
 | 
				
			||||||
 | 
					[Rr]eleasePS/
 | 
				
			||||||
 | 
					dlldata.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Benchmark Results
 | 
				
			||||||
 | 
					BenchmarkDotNet.Artifacts/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# .NET Core
 | 
				
			||||||
 | 
					project.lock.json
 | 
				
			||||||
 | 
					project.fragment.lock.json
 | 
				
			||||||
 | 
					artifacts/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# StyleCop
 | 
				
			||||||
 | 
					StyleCopReport.xml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Files built by Visual Studio
 | 
				
			||||||
 | 
					*_i.c
 | 
				
			||||||
 | 
					*_p.c
 | 
				
			||||||
 | 
					*_h.h
 | 
				
			||||||
 | 
					*.ilk
 | 
				
			||||||
 | 
					*.obj
 | 
				
			||||||
 | 
					*.iobj
 | 
				
			||||||
 | 
					*.pch
 | 
				
			||||||
 | 
					*.pdb
 | 
				
			||||||
 | 
					*.ipdb
 | 
				
			||||||
 | 
					*.pgc
 | 
				
			||||||
 | 
					*.pgd
 | 
				
			||||||
 | 
					*.rsp
 | 
				
			||||||
 | 
					*.sbr
 | 
				
			||||||
 | 
					*.tlb
 | 
				
			||||||
 | 
					*.tli
 | 
				
			||||||
 | 
					*.tlh
 | 
				
			||||||
 | 
					*.tmp
 | 
				
			||||||
 | 
					*.tmp_proj
 | 
				
			||||||
 | 
					*_wpftmp.csproj
 | 
				
			||||||
 | 
					*.log
 | 
				
			||||||
 | 
					*.vspscc
 | 
				
			||||||
 | 
					*.vssscc
 | 
				
			||||||
 | 
					.builds
 | 
				
			||||||
 | 
					*.pidb
 | 
				
			||||||
 | 
					*.svclog
 | 
				
			||||||
 | 
					*.scc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Chutzpah Test files
 | 
				
			||||||
 | 
					_Chutzpah*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual C++ cache files
 | 
				
			||||||
 | 
					ipch/
 | 
				
			||||||
 | 
					*.aps
 | 
				
			||||||
 | 
					*.ncb
 | 
				
			||||||
 | 
					*.opendb
 | 
				
			||||||
 | 
					*.opensdf
 | 
				
			||||||
 | 
					*.sdf
 | 
				
			||||||
 | 
					*.cachefile
 | 
				
			||||||
 | 
					*.VC.db
 | 
				
			||||||
 | 
					*.VC.VC.opendb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio profiler
 | 
				
			||||||
 | 
					*.psess
 | 
				
			||||||
 | 
					*.vsp
 | 
				
			||||||
 | 
					*.vspx
 | 
				
			||||||
 | 
					*.sap
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio Trace Files
 | 
				
			||||||
 | 
					*.e2e
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# TFS 2012 Local Workspace
 | 
				
			||||||
 | 
					$tf/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Guidance Automation Toolkit
 | 
				
			||||||
 | 
					*.gpState
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# ReSharper is a .NET coding add-in
 | 
				
			||||||
 | 
					_ReSharper*/
 | 
				
			||||||
 | 
					*.[Rr]e[Ss]harper
 | 
				
			||||||
 | 
					*.DotSettings.user
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# JustCode is a .NET coding add-in
 | 
				
			||||||
 | 
					.JustCode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# TeamCity is a build add-in
 | 
				
			||||||
 | 
					_TeamCity*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# DotCover is a Code Coverage Tool
 | 
				
			||||||
 | 
					*.dotCover
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# AxoCover is a Code Coverage Tool
 | 
				
			||||||
 | 
					.axoCover/*
 | 
				
			||||||
 | 
					!.axoCover/settings.json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio code coverage results
 | 
				
			||||||
 | 
					*.coverage
 | 
				
			||||||
 | 
					*.coveragexml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# NCrunch
 | 
				
			||||||
 | 
					_NCrunch_*
 | 
				
			||||||
 | 
					.*crunch*.local.xml
 | 
				
			||||||
 | 
					nCrunchTemp_*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# MightyMoose
 | 
				
			||||||
 | 
					*.mm.*
 | 
				
			||||||
 | 
					AutoTest.Net/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Web workbench (sass)
 | 
				
			||||||
 | 
					.sass-cache/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Installshield output folder
 | 
				
			||||||
 | 
					[Ee]xpress/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# DocProject is a documentation generator add-in
 | 
				
			||||||
 | 
					DocProject/buildhelp/
 | 
				
			||||||
 | 
					DocProject/Help/*.HxT
 | 
				
			||||||
 | 
					DocProject/Help/*.HxC
 | 
				
			||||||
 | 
					DocProject/Help/*.hhc
 | 
				
			||||||
 | 
					DocProject/Help/*.hhk
 | 
				
			||||||
 | 
					DocProject/Help/*.hhp
 | 
				
			||||||
 | 
					DocProject/Help/Html2
 | 
				
			||||||
 | 
					DocProject/Help/html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Click-Once directory
 | 
				
			||||||
 | 
					publish/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Publish Web Output
 | 
				
			||||||
 | 
					*.[Pp]ublish.xml
 | 
				
			||||||
 | 
					*.azurePubxml
 | 
				
			||||||
 | 
					# Note: Comment the next line if you want to checkin your web deploy settings,
 | 
				
			||||||
 | 
					# but database connection strings (with potential passwords) will be unencrypted
 | 
				
			||||||
 | 
					*.pubxml
 | 
				
			||||||
 | 
					*.publishproj
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Microsoft Azure Web App publish settings. Comment the next line if you want to
 | 
				
			||||||
 | 
					# checkin your Azure Web App publish settings, but sensitive information contained
 | 
				
			||||||
 | 
					# in these scripts will be unencrypted
 | 
				
			||||||
 | 
					PublishScripts/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# NuGet Packages
 | 
				
			||||||
 | 
					*.nupkg
 | 
				
			||||||
 | 
					# NuGet Symbol Packages
 | 
				
			||||||
 | 
					*.snupkg
 | 
				
			||||||
 | 
					# The packages folder can be ignored because of Package Restore
 | 
				
			||||||
 | 
					**/[Pp]ackages/*
 | 
				
			||||||
 | 
					# except build/, which is used as an MSBuild target.
 | 
				
			||||||
 | 
					!**/[Pp]ackages/build/
 | 
				
			||||||
 | 
					# Uncomment if necessary however generally it will be regenerated when needed
 | 
				
			||||||
 | 
					#!**/[Pp]ackages/repositories.config
 | 
				
			||||||
 | 
					# NuGet v3's project.json files produces more ignorable files
 | 
				
			||||||
 | 
					*.nuget.props
 | 
				
			||||||
 | 
					*.nuget.targets
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Microsoft Azure Build Output
 | 
				
			||||||
 | 
					csx/
 | 
				
			||||||
 | 
					*.build.csdef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Microsoft Azure Emulator
 | 
				
			||||||
 | 
					ecf/
 | 
				
			||||||
 | 
					rcf/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Windows Store app package directories and files
 | 
				
			||||||
 | 
					AppPackages/
 | 
				
			||||||
 | 
					BundleArtifacts/
 | 
				
			||||||
 | 
					Package.StoreAssociation.xml
 | 
				
			||||||
 | 
					_pkginfo.txt
 | 
				
			||||||
 | 
					*.appx
 | 
				
			||||||
 | 
					*.appxbundle
 | 
				
			||||||
 | 
					*.appxupload
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio cache files
 | 
				
			||||||
 | 
					# files ending in .cache can be ignored
 | 
				
			||||||
 | 
					*.[Cc]ache
 | 
				
			||||||
 | 
					# but keep track of directories ending in .cache
 | 
				
			||||||
 | 
					!?*.[Cc]ache/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Others
 | 
				
			||||||
 | 
					ClientBin/
 | 
				
			||||||
 | 
					~$*
 | 
				
			||||||
 | 
					*~
 | 
				
			||||||
 | 
					*.dbmdl
 | 
				
			||||||
 | 
					*.dbproj.schemaview
 | 
				
			||||||
 | 
					*.jfm
 | 
				
			||||||
 | 
					*.pfx
 | 
				
			||||||
 | 
					*.publishsettings
 | 
				
			||||||
 | 
					orleans.codegen.cs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Including strong name files can present a security risk
 | 
				
			||||||
 | 
					# (https://github.com/github/gitignore/pull/2483#issue-259490424)
 | 
				
			||||||
 | 
					#*.snk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Since there are multiple workflows, uncomment next line to ignore bower_components
 | 
				
			||||||
 | 
					# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
 | 
				
			||||||
 | 
					#bower_components/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# RIA/Silverlight projects
 | 
				
			||||||
 | 
					Generated_Code/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Backup & report files from converting an old project file
 | 
				
			||||||
 | 
					# to a newer Visual Studio version. Backup files are not needed,
 | 
				
			||||||
 | 
					# because we have git ;-)
 | 
				
			||||||
 | 
					_UpgradeReport_Files/
 | 
				
			||||||
 | 
					Backup*/
 | 
				
			||||||
 | 
					UpgradeLog*.XML
 | 
				
			||||||
 | 
					UpgradeLog*.htm
 | 
				
			||||||
 | 
					ServiceFabricBackup/
 | 
				
			||||||
 | 
					*.rptproj.bak
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# SQL Server files
 | 
				
			||||||
 | 
					*.mdf
 | 
				
			||||||
 | 
					*.ldf
 | 
				
			||||||
 | 
					*.ndf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Business Intelligence projects
 | 
				
			||||||
 | 
					*.rdl.data
 | 
				
			||||||
 | 
					*.bim.layout
 | 
				
			||||||
 | 
					*.bim_*.settings
 | 
				
			||||||
 | 
					*.rptproj.rsuser
 | 
				
			||||||
 | 
					*- [Bb]ackup.rdl
 | 
				
			||||||
 | 
					*- [Bb]ackup ([0-9]).rdl
 | 
				
			||||||
 | 
					*- [Bb]ackup ([0-9][0-9]).rdl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Microsoft Fakes
 | 
				
			||||||
 | 
					FakesAssemblies/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# GhostDoc plugin setting file
 | 
				
			||||||
 | 
					*.GhostDoc.xml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Node.js Tools for Visual Studio
 | 
				
			||||||
 | 
					.ntvs_analysis.dat
 | 
				
			||||||
 | 
					node_modules/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio 6 build log
 | 
				
			||||||
 | 
					*.plg
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio 6 workspace options file
 | 
				
			||||||
 | 
					*.opt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
 | 
				
			||||||
 | 
					*.vbw
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio LightSwitch build output
 | 
				
			||||||
 | 
					**/*.HTMLClient/GeneratedArtifacts
 | 
				
			||||||
 | 
					**/*.DesktopClient/GeneratedArtifacts
 | 
				
			||||||
 | 
					**/*.DesktopClient/ModelManifest.xml
 | 
				
			||||||
 | 
					**/*.Server/GeneratedArtifacts
 | 
				
			||||||
 | 
					**/*.Server/ModelManifest.xml
 | 
				
			||||||
 | 
					_Pvt_Extensions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Paket dependency manager
 | 
				
			||||||
 | 
					.paket/paket.exe
 | 
				
			||||||
 | 
					paket-files/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# FAKE - F# Make
 | 
				
			||||||
 | 
					.fake/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# CodeRush personal settings
 | 
				
			||||||
 | 
					.cr/personal
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Python Tools for Visual Studio (PTVS)
 | 
				
			||||||
 | 
					__pycache__/
 | 
				
			||||||
 | 
					*.pyc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Cake - Uncomment if you are using it
 | 
				
			||||||
 | 
					# tools/**
 | 
				
			||||||
 | 
					# !tools/packages.config
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Tabs Studio
 | 
				
			||||||
 | 
					*.tss
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Telerik's JustMock configuration file
 | 
				
			||||||
 | 
					*.jmconfig
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# BizTalk build output
 | 
				
			||||||
 | 
					*.btp.cs
 | 
				
			||||||
 | 
					*.btm.cs
 | 
				
			||||||
 | 
					*.odx.cs
 | 
				
			||||||
 | 
					*.xsd.cs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# OpenCover UI analysis results
 | 
				
			||||||
 | 
					OpenCover/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Azure Stream Analytics local run output
 | 
				
			||||||
 | 
					ASALocalRun/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# MSBuild Binary and Structured Log
 | 
				
			||||||
 | 
					*.binlog
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# NVidia Nsight GPU debugger configuration file
 | 
				
			||||||
 | 
					*.nvuser
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# MFractors (Xamarin productivity tool) working folder
 | 
				
			||||||
 | 
					.mfractor/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Local History for Visual Studio
 | 
				
			||||||
 | 
					.localhistory/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# BeatPulse healthcheck temp database
 | 
				
			||||||
 | 
					healthchecksdb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Backup folder for Package Reference Convert tool in Visual Studio 2017
 | 
				
			||||||
 | 
					MigrationBackup/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# End of https://www.gitignore.io/api/csharp
 | 
				
			||||||
							
								
								
									
										25
									
								
								Birdmap.sln
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								Birdmap.sln
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					Microsoft Visual Studio Solution File, Format Version 12.00
 | 
				
			||||||
 | 
					# Visual Studio Version 16
 | 
				
			||||||
 | 
					VisualStudioVersion = 16.0.30611.23
 | 
				
			||||||
 | 
					MinimumVisualStudioVersion = 10.0.40219.1
 | 
				
			||||||
 | 
					Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Birdmap", "Birdmap\Birdmap.csproj", "{88855E5F-9555-49E5-92F2-4E8C1194F60B}"
 | 
				
			||||||
 | 
					EndProject
 | 
				
			||||||
 | 
					Global
 | 
				
			||||||
 | 
						GlobalSection(SolutionConfigurationPlatforms) = preSolution
 | 
				
			||||||
 | 
							Debug|Any CPU = Debug|Any CPU
 | 
				
			||||||
 | 
							Release|Any CPU = Release|Any CPU
 | 
				
			||||||
 | 
						EndGlobalSection
 | 
				
			||||||
 | 
						GlobalSection(ProjectConfigurationPlatforms) = postSolution
 | 
				
			||||||
 | 
							{88855E5F-9555-49E5-92F2-4E8C1194F60B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 | 
				
			||||||
 | 
							{88855E5F-9555-49E5-92F2-4E8C1194F60B}.Debug|Any CPU.Build.0 = Debug|Any CPU
 | 
				
			||||||
 | 
							{88855E5F-9555-49E5-92F2-4E8C1194F60B}.Release|Any CPU.ActiveCfg = Release|Any CPU
 | 
				
			||||||
 | 
							{88855E5F-9555-49E5-92F2-4E8C1194F60B}.Release|Any CPU.Build.0 = Release|Any CPU
 | 
				
			||||||
 | 
						EndGlobalSection
 | 
				
			||||||
 | 
						GlobalSection(SolutionProperties) = preSolution
 | 
				
			||||||
 | 
							HideSolutionNode = FALSE
 | 
				
			||||||
 | 
						EndGlobalSection
 | 
				
			||||||
 | 
						GlobalSection(ExtensibilityGlobals) = postSolution
 | 
				
			||||||
 | 
							SolutionGuid = {614AFBE5-BA16-4796-A4EB-916BA3764799}
 | 
				
			||||||
 | 
						EndGlobalSection
 | 
				
			||||||
 | 
					EndGlobal
 | 
				
			||||||
							
								
								
									
										232
									
								
								Birdmap/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										232
									
								
								Birdmap/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,232 @@
 | 
				
			|||||||
 | 
					## Ignore Visual Studio temporary files, build results, and
 | 
				
			||||||
 | 
					## files generated by popular Visual Studio add-ons.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# User-specific files
 | 
				
			||||||
 | 
					*.suo
 | 
				
			||||||
 | 
					*.user
 | 
				
			||||||
 | 
					*.userosscache
 | 
				
			||||||
 | 
					*.sln.docstates
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# User-specific files (MonoDevelop/Xamarin Studio)
 | 
				
			||||||
 | 
					*.userprefs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Build results
 | 
				
			||||||
 | 
					[Dd]ebug/
 | 
				
			||||||
 | 
					[Dd]ebugPublic/
 | 
				
			||||||
 | 
					[Rr]elease/
 | 
				
			||||||
 | 
					[Rr]eleases/
 | 
				
			||||||
 | 
					x64/
 | 
				
			||||||
 | 
					x86/
 | 
				
			||||||
 | 
					build/
 | 
				
			||||||
 | 
					bld/
 | 
				
			||||||
 | 
					bin/
 | 
				
			||||||
 | 
					Bin/
 | 
				
			||||||
 | 
					obj/
 | 
				
			||||||
 | 
					Obj/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio 2015 cache/options directory
 | 
				
			||||||
 | 
					.vs/
 | 
				
			||||||
 | 
					/wwwroot/dist/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# MSTest test Results
 | 
				
			||||||
 | 
					[Tt]est[Rr]esult*/
 | 
				
			||||||
 | 
					[Bb]uild[Ll]og.*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# NUNIT
 | 
				
			||||||
 | 
					*.VisualState.xml
 | 
				
			||||||
 | 
					TestResult.xml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Build Results of an ATL Project
 | 
				
			||||||
 | 
					[Dd]ebugPS/
 | 
				
			||||||
 | 
					[Rr]eleasePS/
 | 
				
			||||||
 | 
					dlldata.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					*_i.c
 | 
				
			||||||
 | 
					*_p.c
 | 
				
			||||||
 | 
					*_i.h
 | 
				
			||||||
 | 
					*.ilk
 | 
				
			||||||
 | 
					*.meta
 | 
				
			||||||
 | 
					*.obj
 | 
				
			||||||
 | 
					*.pch
 | 
				
			||||||
 | 
					*.pdb
 | 
				
			||||||
 | 
					*.pgc
 | 
				
			||||||
 | 
					*.pgd
 | 
				
			||||||
 | 
					*.rsp
 | 
				
			||||||
 | 
					*.sbr
 | 
				
			||||||
 | 
					*.tlb
 | 
				
			||||||
 | 
					*.tli
 | 
				
			||||||
 | 
					*.tlh
 | 
				
			||||||
 | 
					*.tmp
 | 
				
			||||||
 | 
					*.tmp_proj
 | 
				
			||||||
 | 
					*.log
 | 
				
			||||||
 | 
					*.vspscc
 | 
				
			||||||
 | 
					*.vssscc
 | 
				
			||||||
 | 
					.builds
 | 
				
			||||||
 | 
					*.pidb
 | 
				
			||||||
 | 
					*.svclog
 | 
				
			||||||
 | 
					*.scc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Chutzpah Test files
 | 
				
			||||||
 | 
					_Chutzpah*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual C++ cache files
 | 
				
			||||||
 | 
					ipch/
 | 
				
			||||||
 | 
					*.aps
 | 
				
			||||||
 | 
					*.ncb
 | 
				
			||||||
 | 
					*.opendb
 | 
				
			||||||
 | 
					*.opensdf
 | 
				
			||||||
 | 
					*.sdf
 | 
				
			||||||
 | 
					*.cachefile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio profiler
 | 
				
			||||||
 | 
					*.psess
 | 
				
			||||||
 | 
					*.vsp
 | 
				
			||||||
 | 
					*.vspx
 | 
				
			||||||
 | 
					*.sap
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# TFS 2012 Local Workspace
 | 
				
			||||||
 | 
					$tf/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Guidance Automation Toolkit
 | 
				
			||||||
 | 
					*.gpState
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# ReSharper is a .NET coding add-in
 | 
				
			||||||
 | 
					_ReSharper*/
 | 
				
			||||||
 | 
					*.[Rr]e[Ss]harper
 | 
				
			||||||
 | 
					*.DotSettings.user
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# JustCode is a .NET coding add-in
 | 
				
			||||||
 | 
					.JustCode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# TeamCity is a build add-in
 | 
				
			||||||
 | 
					_TeamCity*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# DotCover is a Code Coverage Tool
 | 
				
			||||||
 | 
					*.dotCover
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# NCrunch
 | 
				
			||||||
 | 
					_NCrunch_*
 | 
				
			||||||
 | 
					.*crunch*.local.xml
 | 
				
			||||||
 | 
					nCrunchTemp_*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# MightyMoose
 | 
				
			||||||
 | 
					*.mm.*
 | 
				
			||||||
 | 
					AutoTest.Net/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Web workbench (sass)
 | 
				
			||||||
 | 
					.sass-cache/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Installshield output folder
 | 
				
			||||||
 | 
					[Ee]xpress/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# DocProject is a documentation generator add-in
 | 
				
			||||||
 | 
					DocProject/buildhelp/
 | 
				
			||||||
 | 
					DocProject/Help/*.HxT
 | 
				
			||||||
 | 
					DocProject/Help/*.HxC
 | 
				
			||||||
 | 
					DocProject/Help/*.hhc
 | 
				
			||||||
 | 
					DocProject/Help/*.hhk
 | 
				
			||||||
 | 
					DocProject/Help/*.hhp
 | 
				
			||||||
 | 
					DocProject/Help/Html2
 | 
				
			||||||
 | 
					DocProject/Help/html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Click-Once directory
 | 
				
			||||||
 | 
					publish/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Publish Web Output
 | 
				
			||||||
 | 
					*.[Pp]ublish.xml
 | 
				
			||||||
 | 
					*.azurePubxml
 | 
				
			||||||
 | 
					# TODO: Comment the next line if you want to checkin your web deploy settings
 | 
				
			||||||
 | 
					# but database connection strings (with potential passwords) will be unencrypted
 | 
				
			||||||
 | 
					*.pubxml
 | 
				
			||||||
 | 
					*.publishproj
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# NuGet Packages
 | 
				
			||||||
 | 
					*.nupkg
 | 
				
			||||||
 | 
					# The packages folder can be ignored because of Package Restore
 | 
				
			||||||
 | 
					**/packages/*
 | 
				
			||||||
 | 
					# except build/, which is used as an MSBuild target.
 | 
				
			||||||
 | 
					!**/packages/build/
 | 
				
			||||||
 | 
					# Uncomment if necessary however generally it will be regenerated when needed
 | 
				
			||||||
 | 
					#!**/packages/repositories.config
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Microsoft Azure Build Output
 | 
				
			||||||
 | 
					csx/
 | 
				
			||||||
 | 
					*.build.csdef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Microsoft Azure Emulator
 | 
				
			||||||
 | 
					ecf/
 | 
				
			||||||
 | 
					rcf/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Microsoft Azure ApplicationInsights config file
 | 
				
			||||||
 | 
					ApplicationInsights.config
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Windows Store app package directory
 | 
				
			||||||
 | 
					AppPackages/
 | 
				
			||||||
 | 
					BundleArtifacts/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio cache files
 | 
				
			||||||
 | 
					# files ending in .cache can be ignored
 | 
				
			||||||
 | 
					*.[Cc]ache
 | 
				
			||||||
 | 
					# but keep track of directories ending in .cache
 | 
				
			||||||
 | 
					!*.[Cc]ache/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Others
 | 
				
			||||||
 | 
					ClientBin/
 | 
				
			||||||
 | 
					~$*
 | 
				
			||||||
 | 
					*~
 | 
				
			||||||
 | 
					*.dbmdl
 | 
				
			||||||
 | 
					*.dbproj.schemaview
 | 
				
			||||||
 | 
					*.pfx
 | 
				
			||||||
 | 
					*.publishsettings
 | 
				
			||||||
 | 
					orleans.codegen.cs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/node_modules
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# RIA/Silverlight projects
 | 
				
			||||||
 | 
					Generated_Code/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Backup & report files from converting an old project file
 | 
				
			||||||
 | 
					# to a newer Visual Studio version. Backup files are not needed,
 | 
				
			||||||
 | 
					# because we have git ;-)
 | 
				
			||||||
 | 
					_UpgradeReport_Files/
 | 
				
			||||||
 | 
					Backup*/
 | 
				
			||||||
 | 
					UpgradeLog*.XML
 | 
				
			||||||
 | 
					UpgradeLog*.htm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# SQL Server files
 | 
				
			||||||
 | 
					*.mdf
 | 
				
			||||||
 | 
					*.ldf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Business Intelligence projects
 | 
				
			||||||
 | 
					*.rdl.data
 | 
				
			||||||
 | 
					*.bim.layout
 | 
				
			||||||
 | 
					*.bim_*.settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Microsoft Fakes
 | 
				
			||||||
 | 
					FakesAssemblies/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# GhostDoc plugin setting file
 | 
				
			||||||
 | 
					*.GhostDoc.xml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Node.js Tools for Visual Studio
 | 
				
			||||||
 | 
					.ntvs_analysis.dat
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio 6 build log
 | 
				
			||||||
 | 
					*.plg
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio 6 workspace options file
 | 
				
			||||||
 | 
					*.opt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio LightSwitch build output
 | 
				
			||||||
 | 
					**/*.HTMLClient/GeneratedArtifacts
 | 
				
			||||||
 | 
					**/*.DesktopClient/GeneratedArtifacts
 | 
				
			||||||
 | 
					**/*.DesktopClient/ModelManifest.xml
 | 
				
			||||||
 | 
					**/*.Server/GeneratedArtifacts
 | 
				
			||||||
 | 
					**/*.Server/ModelManifest.xml
 | 
				
			||||||
 | 
					_Pvt_Extensions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Paket dependency manager
 | 
				
			||||||
 | 
					.paket/paket.exe
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# FAKE - F# Make
 | 
				
			||||||
 | 
					.fake/
 | 
				
			||||||
							
								
								
									
										49
									
								
								Birdmap/Birdmap.csproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								Birdmap/Birdmap.csproj
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
				
			|||||||
 | 
					<Project Sdk="Microsoft.NET.Sdk.Web">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <PropertyGroup>
 | 
				
			||||||
 | 
					    <TargetFramework>netcoreapp3.1</TargetFramework>
 | 
				
			||||||
 | 
					    <TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>
 | 
				
			||||||
 | 
					    <TypeScriptToolsVersion>Latest</TypeScriptToolsVersion>
 | 
				
			||||||
 | 
					    <IsPackable>false</IsPackable>
 | 
				
			||||||
 | 
					    <SpaRoot>ClientApp\</SpaRoot>
 | 
				
			||||||
 | 
					    <DefaultItemExcludes>$(DefaultItemExcludes);$(SpaRoot)node_modules\**</DefaultItemExcludes>
 | 
				
			||||||
 | 
					  </PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <ItemGroup>
 | 
				
			||||||
 | 
					    <PackageReference Include="Microsoft.AspNetCore.SpaServices.Extensions" Version="3.1.9" />
 | 
				
			||||||
 | 
					  </ItemGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <ItemGroup>
 | 
				
			||||||
 | 
					    <!-- Don't publish the SPA source files, but do show them in the project files list -->
 | 
				
			||||||
 | 
					    <Content Remove="$(SpaRoot)**" />
 | 
				
			||||||
 | 
					    <None Remove="$(SpaRoot)**" />
 | 
				
			||||||
 | 
					    <None Include="$(SpaRoot)**" Exclude="$(SpaRoot)node_modules\**" />
 | 
				
			||||||
 | 
					  </ItemGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <Target Name="DebugEnsureNodeEnv" BeforeTargets="Build" Condition=" '$(Configuration)' == 'Debug' And !Exists('$(SpaRoot)node_modules') ">
 | 
				
			||||||
 | 
					    <!-- Ensure Node.js is installed -->
 | 
				
			||||||
 | 
					    <Exec Command="node --version" ContinueOnError="true">
 | 
				
			||||||
 | 
					      <Output TaskParameter="ExitCode" PropertyName="ErrorCode" />
 | 
				
			||||||
 | 
					    </Exec>
 | 
				
			||||||
 | 
					    <Error Condition="'$(ErrorCode)' != '0'" Text="Node.js is required to build and run this project. To continue, please install Node.js from https://nodejs.org/, and then restart your command prompt or IDE." />
 | 
				
			||||||
 | 
					    <Message Importance="high" Text="Restoring dependencies using 'npm'. This may take several minutes..." />
 | 
				
			||||||
 | 
					    <Exec WorkingDirectory="$(SpaRoot)" Command="npm install" />
 | 
				
			||||||
 | 
					  </Target>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish">
 | 
				
			||||||
 | 
					    <!-- As part of publishing, ensure the JS resources are freshly built in production mode -->
 | 
				
			||||||
 | 
					    <Exec WorkingDirectory="$(SpaRoot)" Command="npm install" />
 | 
				
			||||||
 | 
					    <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- Include the newly-built files in the publish output -->
 | 
				
			||||||
 | 
					    <ItemGroup>
 | 
				
			||||||
 | 
					      <DistFiles Include="$(SpaRoot)build\**; $(SpaRoot)build-ssr\**" />
 | 
				
			||||||
 | 
					      <ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
 | 
				
			||||||
 | 
					        <RelativePath>%(DistFiles.Identity)</RelativePath>
 | 
				
			||||||
 | 
					        <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
 | 
				
			||||||
 | 
					        <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
 | 
				
			||||||
 | 
					      </ResolvedFileToPublish>
 | 
				
			||||||
 | 
					    </ItemGroup>
 | 
				
			||||||
 | 
					  </Target>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</Project>
 | 
				
			||||||
							
								
								
									
										7
									
								
								Birdmap/ClientApp/.eslintrc.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Birdmap/ClientApp/.eslintrc.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					    "parser": "@typescript-eslint/parser",
 | 
				
			||||||
 | 
					    "parserOptions": {
 | 
				
			||||||
 | 
					        "ecmaVersion": 6,
 | 
				
			||||||
 | 
					        "sourceType": "module"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										21
									
								
								Birdmap/ClientApp/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								Birdmap/ClientApp/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					# See https://help.github.com/ignore-files/ for more about ignoring files.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# dependencies
 | 
				
			||||||
 | 
					/node_modules
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# testing
 | 
				
			||||||
 | 
					/coverage
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# production
 | 
				
			||||||
 | 
					/build
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# misc
 | 
				
			||||||
 | 
					.DS_Store
 | 
				
			||||||
 | 
					.env.local
 | 
				
			||||||
 | 
					.env.development.local
 | 
				
			||||||
 | 
					.env.test.local
 | 
				
			||||||
 | 
					.env.production.local
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					npm-debug.log*
 | 
				
			||||||
 | 
					yarn-debug.log*
 | 
				
			||||||
 | 
					yarn-error.log*
 | 
				
			||||||
							
								
								
									
										2228
									
								
								Birdmap/ClientApp/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2228
									
								
								Birdmap/ClientApp/README.md
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										14236
									
								
								Birdmap/ClientApp/package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										14236
									
								
								Birdmap/ClientApp/package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										59
									
								
								Birdmap/ClientApp/package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								Birdmap/ClientApp/package.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "name": "birdmap",
 | 
				
			||||||
 | 
					  "version": "0.1.0",
 | 
				
			||||||
 | 
					  "private": true,
 | 
				
			||||||
 | 
					  "dependencies": {
 | 
				
			||||||
 | 
					    "bootstrap": "^4.3.1",
 | 
				
			||||||
 | 
					    "connected-react-router": "6.5.2",
 | 
				
			||||||
 | 
					    "history": "4.10.1",
 | 
				
			||||||
 | 
					    "jquery": "^3.5.1",
 | 
				
			||||||
 | 
					    "merge": "1.2.1",
 | 
				
			||||||
 | 
					    "popper.js": "^1.16.0",
 | 
				
			||||||
 | 
					    "react": "16.11.0",
 | 
				
			||||||
 | 
					    "react-dom": "16.11.0",
 | 
				
			||||||
 | 
					    "react-redux": "7.1.1",
 | 
				
			||||||
 | 
					    "react-router": "5.1.2",
 | 
				
			||||||
 | 
					    "react-router-dom": "5.1.2",
 | 
				
			||||||
 | 
					    "react-scripts": "^3.4.3",
 | 
				
			||||||
 | 
					    "reactstrap": "8.1.1",
 | 
				
			||||||
 | 
					    "redux": "4.0.4",
 | 
				
			||||||
 | 
					    "redux-thunk": "2.3.0",
 | 
				
			||||||
 | 
					    "svgo": "1.3.0"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "devDependencies": {
 | 
				
			||||||
 | 
					    "@types/history": "4.7.3",
 | 
				
			||||||
 | 
					    "@types/jest": "24.0.19",
 | 
				
			||||||
 | 
					    "@types/node": "12.11.6",
 | 
				
			||||||
 | 
					    "@types/react": "16.9.9",
 | 
				
			||||||
 | 
					    "@types/react-dom": "16.9.2",
 | 
				
			||||||
 | 
					    "@types/react-redux": "7.1.5",
 | 
				
			||||||
 | 
					    "@types/react-router": "5.1.2",
 | 
				
			||||||
 | 
					    "@types/react-router-dom": "5.1.0",
 | 
				
			||||||
 | 
					    "@types/reactstrap": "8.0.6",
 | 
				
			||||||
 | 
					    "@typescript-eslint/parser": "^2.5.0",
 | 
				
			||||||
 | 
					    "cross-env": "6.0.3",
 | 
				
			||||||
 | 
					    "eslint": "^6.5.1",
 | 
				
			||||||
 | 
					    "eslint-plugin-flowtype": "^3.13.0",
 | 
				
			||||||
 | 
					    "eslint-plugin-import": "2.18.2",
 | 
				
			||||||
 | 
					    "eslint-plugin-jsx-a11y": "6.2.3",
 | 
				
			||||||
 | 
					    "eslint-plugin-react": "7.16.0",
 | 
				
			||||||
 | 
					    "nan": "^2.14.1",
 | 
				
			||||||
 | 
					    "typescript": "3.6.4"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "scripts": {
 | 
				
			||||||
 | 
					    "start": "react-scripts start",
 | 
				
			||||||
 | 
					    "build": "react-scripts build",
 | 
				
			||||||
 | 
					    "test": "cross-env CI=true react-scripts test --env=jsdom",
 | 
				
			||||||
 | 
					    "eject": "react-scripts eject",
 | 
				
			||||||
 | 
					    "lint": "eslint ./src/**/*.ts ./src/**/*.tsx"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "eslintConfig": {
 | 
				
			||||||
 | 
					    "extends": "react-app"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "browserslist": [
 | 
				
			||||||
 | 
					    ">0.2%",
 | 
				
			||||||
 | 
					    "not dead",
 | 
				
			||||||
 | 
					    "not ie <= 11",
 | 
				
			||||||
 | 
					    "not op_mini all"
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								Birdmap/ClientApp/public/favicon.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Birdmap/ClientApp/public/favicon.ico
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 31 KiB  | 
							
								
								
									
										41
									
								
								Birdmap/ClientApp/public/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								Birdmap/ClientApp/public/index.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html lang="en">
 | 
				
			||||||
 | 
					  <head>
 | 
				
			||||||
 | 
					    <meta charset="utf-8">
 | 
				
			||||||
 | 
					    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
 | 
				
			||||||
 | 
					    <meta name="theme-color" content="#000000">
 | 
				
			||||||
 | 
					    <base href="%PUBLIC_URL%/" />
 | 
				
			||||||
 | 
					    <!--
 | 
				
			||||||
 | 
					      manifest.json provides metadata used when your web app is added to the
 | 
				
			||||||
 | 
					      homescreen on Android. See https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/
 | 
				
			||||||
 | 
					    -->
 | 
				
			||||||
 | 
					    <link rel="manifest" href="%PUBLIC_URL%/manifest.json">
 | 
				
			||||||
 | 
					    <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
 | 
				
			||||||
 | 
					    <!--
 | 
				
			||||||
 | 
					      Notice the use of %PUBLIC_URL% in the tags above.
 | 
				
			||||||
 | 
					      It will be replaced with the URL of the `public` folder during the build.
 | 
				
			||||||
 | 
					      Only files inside the `public` folder can be referenced from the HTML.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
 | 
				
			||||||
 | 
					      work correctly both with client-side routing and a non-root public URL.
 | 
				
			||||||
 | 
					      Learn how to configure a non-root public URL by running `npm run build`.
 | 
				
			||||||
 | 
					    -->
 | 
				
			||||||
 | 
					    <title>Birdmap</title>
 | 
				
			||||||
 | 
					  </head>
 | 
				
			||||||
 | 
					  <body>
 | 
				
			||||||
 | 
					    <noscript>
 | 
				
			||||||
 | 
					      You need to enable JavaScript to run this app.
 | 
				
			||||||
 | 
					    </noscript>
 | 
				
			||||||
 | 
					    <div id="root"></div>
 | 
				
			||||||
 | 
					    <!--
 | 
				
			||||||
 | 
					      This HTML file is a template.
 | 
				
			||||||
 | 
					      If you open it directly in the browser, you will see an empty page.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      You can add webfonts, meta tags, or analytics to this file.
 | 
				
			||||||
 | 
					      The build step will place the bundled scripts into the <body> tag.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      To begin the development, run `npm start` or `yarn start`.
 | 
				
			||||||
 | 
					      To create a production bundle, use `npm run build` or `yarn build`.
 | 
				
			||||||
 | 
					    -->
 | 
				
			||||||
 | 
					  </body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										15
									
								
								Birdmap/ClientApp/public/manifest.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								Birdmap/ClientApp/public/manifest.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "short_name": "Birdmap",
 | 
				
			||||||
 | 
					  "name": "Birdmap",
 | 
				
			||||||
 | 
					  "icons": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "src": "favicon.ico",
 | 
				
			||||||
 | 
					      "sizes": "64x64 32x32 24x24 16x16",
 | 
				
			||||||
 | 
					      "type": "image/x-icon"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "start_url": "./index.html",
 | 
				
			||||||
 | 
					  "display": "standalone",
 | 
				
			||||||
 | 
					  "theme_color": "#000000",
 | 
				
			||||||
 | 
					  "background_color": "#ffffff"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										22
									
								
								Birdmap/ClientApp/src/App.test.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								Birdmap/ClientApp/src/App.test.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
				
			|||||||
 | 
					import * as React from 'react';
 | 
				
			||||||
 | 
					import * as ReactDOM from 'react-dom';
 | 
				
			||||||
 | 
					import { Provider } from 'react-redux';
 | 
				
			||||||
 | 
					import { MemoryRouter } from 'react-router-dom';
 | 
				
			||||||
 | 
					import App from './App';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					it('renders without crashing', () => {
 | 
				
			||||||
 | 
					    const storeFake = (state: any) => ({
 | 
				
			||||||
 | 
					        default: () => {},
 | 
				
			||||||
 | 
					        subscribe: () => {},
 | 
				
			||||||
 | 
					        dispatch: () => {},
 | 
				
			||||||
 | 
					        getState: () => ({ ...state })
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    const store = storeFake({}) as any;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ReactDOM.render(
 | 
				
			||||||
 | 
					        <Provider store={store}>
 | 
				
			||||||
 | 
					            <MemoryRouter>
 | 
				
			||||||
 | 
					                <App/>
 | 
				
			||||||
 | 
					            </MemoryRouter>
 | 
				
			||||||
 | 
					        </Provider>, document.createElement('div'));
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
							
								
								
									
										16
									
								
								Birdmap/ClientApp/src/App.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								Birdmap/ClientApp/src/App.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					import * as React from 'react';
 | 
				
			||||||
 | 
					import { Route } from 'react-router';
 | 
				
			||||||
 | 
					import Layout from './components/Layout';
 | 
				
			||||||
 | 
					import Home from './components/Home';
 | 
				
			||||||
 | 
					import Counter from './components/Counter';
 | 
				
			||||||
 | 
					import FetchData from './components/FetchData';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import './custom.css'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default () => (
 | 
				
			||||||
 | 
					    <Layout>
 | 
				
			||||||
 | 
					        <Route exact path='/' component={Home} />
 | 
				
			||||||
 | 
					        <Route path='/counter' component={Counter} />
 | 
				
			||||||
 | 
					        <Route path='/fetch-data/:startDateIndex?' component={FetchData} />
 | 
				
			||||||
 | 
					    </Layout>
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
							
								
								
									
										35
									
								
								Birdmap/ClientApp/src/components/Counter.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								Birdmap/ClientApp/src/components/Counter.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
				
			|||||||
 | 
					import * as React from 'react';
 | 
				
			||||||
 | 
					import { connect } from 'react-redux';
 | 
				
			||||||
 | 
					import { RouteComponentProps } from 'react-router';
 | 
				
			||||||
 | 
					import { ApplicationState } from '../store';
 | 
				
			||||||
 | 
					import * as CounterStore from '../store/Counter';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type CounterProps =
 | 
				
			||||||
 | 
					    CounterStore.CounterState &
 | 
				
			||||||
 | 
					    typeof CounterStore.actionCreators &
 | 
				
			||||||
 | 
					    RouteComponentProps<{}>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Counter extends React.PureComponent<CounterProps> {
 | 
				
			||||||
 | 
					    public render() {
 | 
				
			||||||
 | 
					        return (
 | 
				
			||||||
 | 
					            <React.Fragment>
 | 
				
			||||||
 | 
					                <h1>Counter</h1>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <p>This is a simple example of a React component.</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <p aria-live="polite">Current count: <strong>{this.props.count}</strong></p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <button type="button"
 | 
				
			||||||
 | 
					                    className="btn btn-primary btn-lg"
 | 
				
			||||||
 | 
					                    onClick={() => { this.props.increment(); }}>
 | 
				
			||||||
 | 
					                    Increment
 | 
				
			||||||
 | 
					                </button>
 | 
				
			||||||
 | 
					            </React.Fragment>
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default connect(
 | 
				
			||||||
 | 
					    (state: ApplicationState) => state.counter,
 | 
				
			||||||
 | 
					    CounterStore.actionCreators
 | 
				
			||||||
 | 
					)(Counter);
 | 
				
			||||||
							
								
								
									
										84
									
								
								Birdmap/ClientApp/src/components/FetchData.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								Birdmap/ClientApp/src/components/FetchData.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,84 @@
 | 
				
			|||||||
 | 
					import * as React from 'react';
 | 
				
			||||||
 | 
					import { connect } from 'react-redux';
 | 
				
			||||||
 | 
					import { RouteComponentProps } from 'react-router';
 | 
				
			||||||
 | 
					import { Link } from 'react-router-dom';
 | 
				
			||||||
 | 
					import { ApplicationState } from '../store';
 | 
				
			||||||
 | 
					import * as WeatherForecastsStore from '../store/WeatherForecasts';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// At runtime, Redux will merge together...
 | 
				
			||||||
 | 
					type WeatherForecastProps =
 | 
				
			||||||
 | 
					  WeatherForecastsStore.WeatherForecastsState // ... state we've requested from the Redux store
 | 
				
			||||||
 | 
					  & typeof WeatherForecastsStore.actionCreators // ... plus action creators we've requested
 | 
				
			||||||
 | 
					  & RouteComponentProps<{ startDateIndex: string }>; // ... plus incoming routing parameters
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class FetchData extends React.PureComponent<WeatherForecastProps> {
 | 
				
			||||||
 | 
					  // This method is called when the component is first added to the document
 | 
				
			||||||
 | 
					  public componentDidMount() {
 | 
				
			||||||
 | 
					    this.ensureDataFetched();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // This method is called when the route parameters change
 | 
				
			||||||
 | 
					  public componentDidUpdate() {
 | 
				
			||||||
 | 
					    this.ensureDataFetched();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public render() {
 | 
				
			||||||
 | 
					    return (
 | 
				
			||||||
 | 
					      <React.Fragment>
 | 
				
			||||||
 | 
					        <h1 id="tabelLabel">Weather forecast</h1>
 | 
				
			||||||
 | 
					        <p>This component demonstrates fetching data from the server and working with URL parameters.</p>
 | 
				
			||||||
 | 
					        {this.renderForecastsTable()}
 | 
				
			||||||
 | 
					        {this.renderPagination()}
 | 
				
			||||||
 | 
					      </React.Fragment>
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private ensureDataFetched() {
 | 
				
			||||||
 | 
					    const startDateIndex = parseInt(this.props.match.params.startDateIndex, 10) || 0;
 | 
				
			||||||
 | 
					    this.props.requestWeatherForecasts(startDateIndex);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private renderForecastsTable() {
 | 
				
			||||||
 | 
					    return (
 | 
				
			||||||
 | 
					      <table className='table table-striped' aria-labelledby="tabelLabel">
 | 
				
			||||||
 | 
					        <thead>
 | 
				
			||||||
 | 
					          <tr>
 | 
				
			||||||
 | 
					            <th>Date</th>
 | 
				
			||||||
 | 
					            <th>Temp. (C)</th>
 | 
				
			||||||
 | 
					            <th>Temp. (F)</th>
 | 
				
			||||||
 | 
					            <th>Summary</th>
 | 
				
			||||||
 | 
					          </tr>
 | 
				
			||||||
 | 
					        </thead>
 | 
				
			||||||
 | 
					        <tbody>
 | 
				
			||||||
 | 
					          {this.props.forecasts.map((forecast: WeatherForecastsStore.WeatherForecast) =>
 | 
				
			||||||
 | 
					            <tr key={forecast.date}>
 | 
				
			||||||
 | 
					              <td>{forecast.date}</td>
 | 
				
			||||||
 | 
					              <td>{forecast.temperatureC}</td>
 | 
				
			||||||
 | 
					              <td>{forecast.temperatureF}</td>
 | 
				
			||||||
 | 
					              <td>{forecast.summary}</td>
 | 
				
			||||||
 | 
					            </tr>
 | 
				
			||||||
 | 
					          )}
 | 
				
			||||||
 | 
					        </tbody>
 | 
				
			||||||
 | 
					      </table>
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private renderPagination() {
 | 
				
			||||||
 | 
					    const prevStartDateIndex = (this.props.startDateIndex || 0) - 5;
 | 
				
			||||||
 | 
					    const nextStartDateIndex = (this.props.startDateIndex || 0) + 5;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return (
 | 
				
			||||||
 | 
					      <div className="d-flex justify-content-between">
 | 
				
			||||||
 | 
					        <Link className='btn btn-outline-secondary btn-sm' to={`/fetch-data/${prevStartDateIndex}`}>Previous</Link>
 | 
				
			||||||
 | 
					        {this.props.isLoading && <span>Loading...</span>}
 | 
				
			||||||
 | 
					        <Link className='btn btn-outline-secondary btn-sm' to={`/fetch-data/${nextStartDateIndex}`}>Next</Link>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default connect(
 | 
				
			||||||
 | 
					  (state: ApplicationState) => state.weatherForecasts, // Selects which state properties are merged into the component's props
 | 
				
			||||||
 | 
					  WeatherForecastsStore.actionCreators // Selects which action creators are merged into the component's props
 | 
				
			||||||
 | 
					)(FetchData as any);
 | 
				
			||||||
							
								
								
									
										23
									
								
								Birdmap/ClientApp/src/components/Home.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								Birdmap/ClientApp/src/components/Home.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					import * as React from 'react';
 | 
				
			||||||
 | 
					import { connect } from 'react-redux';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const Home = () => (
 | 
				
			||||||
 | 
					  <div>
 | 
				
			||||||
 | 
					    <h1>Hello, world!</h1>
 | 
				
			||||||
 | 
					    <p>Welcome to your new single-page application, built with:</p>
 | 
				
			||||||
 | 
					    <ul>
 | 
				
			||||||
 | 
					      <li><a href='https://get.asp.net/'>ASP.NET Core</a> and <a href='https://msdn.microsoft.com/en-us/library/67ef8sbd.aspx'>C#</a> for cross-platform server-side code</li>
 | 
				
			||||||
 | 
					      <li><a href='https://facebook.github.io/react/'>React</a> and <a href='https://redux.js.org/'>Redux</a> for client-side code</li>
 | 
				
			||||||
 | 
					      <li><a href='http://getbootstrap.com/'>Bootstrap</a> for layout and styling</li>
 | 
				
			||||||
 | 
					    </ul>
 | 
				
			||||||
 | 
					    <p>To help you get started, we've also set up:</p>
 | 
				
			||||||
 | 
					    <ul>
 | 
				
			||||||
 | 
					      <li><strong>Client-side navigation</strong>. For example, click <em>Counter</em> then <em>Back</em> to return here.</li>
 | 
				
			||||||
 | 
					      <li><strong>Development server integration</strong>. In development mode, the development server from <code>create-react-app</code> runs in the background automatically, so your client-side resources are dynamically built on demand and the page refreshes when you modify any file.</li>
 | 
				
			||||||
 | 
					      <li><strong>Efficient production builds</strong>. In production mode, development-time features are disabled, and your <code>dotnet publish</code> configuration produces minified, efficiently bundled JavaScript files.</li>
 | 
				
			||||||
 | 
					    </ul>
 | 
				
			||||||
 | 
					    <p>The <code>ClientApp</code> subdirectory is a standard React application based on the <code>create-react-app</code> template. If you open a command prompt in that directory, you can run <code>npm</code> commands such as <code>npm test</code> or <code>npm install</code>.</p>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default connect()(Home);
 | 
				
			||||||
							
								
								
									
										12
									
								
								Birdmap/ClientApp/src/components/Layout.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								Birdmap/ClientApp/src/components/Layout.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					import * as React from 'react';
 | 
				
			||||||
 | 
					import { Container } from 'reactstrap';
 | 
				
			||||||
 | 
					import NavMenu from './NavMenu';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default (props: { children?: React.ReactNode }) => (
 | 
				
			||||||
 | 
					    <React.Fragment>
 | 
				
			||||||
 | 
					        <NavMenu/>
 | 
				
			||||||
 | 
					        <Container>
 | 
				
			||||||
 | 
					            {props.children}
 | 
				
			||||||
 | 
					        </Container>
 | 
				
			||||||
 | 
					    </React.Fragment>
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
							
								
								
									
										13
									
								
								Birdmap/ClientApp/src/components/NavMenu.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								Birdmap/ClientApp/src/components/NavMenu.css
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					a.navbar-brand {
 | 
				
			||||||
 | 
					    white-space: normal;
 | 
				
			||||||
 | 
					    text-align: center;
 | 
				
			||||||
 | 
					    word-break: break-all;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					html { font-size: 14px; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@media (min-width: 768px) {
 | 
				
			||||||
 | 
					    html { font-size: 16px; }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.box-shadow { box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05); }
 | 
				
			||||||
							
								
								
									
										42
									
								
								Birdmap/ClientApp/src/components/NavMenu.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								Birdmap/ClientApp/src/components/NavMenu.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
				
			|||||||
 | 
					import * as React from 'react';
 | 
				
			||||||
 | 
					import { Collapse, Container, Navbar, NavbarBrand, NavbarToggler, NavItem, NavLink } from 'reactstrap';
 | 
				
			||||||
 | 
					import { Link } from 'react-router-dom';
 | 
				
			||||||
 | 
					import './NavMenu.css';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default class NavMenu extends React.PureComponent<{}, { isOpen: boolean }> {
 | 
				
			||||||
 | 
					    public state = {
 | 
				
			||||||
 | 
					        isOpen: false
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public render() {
 | 
				
			||||||
 | 
					        return (
 | 
				
			||||||
 | 
					            <header>
 | 
				
			||||||
 | 
					                <Navbar className="navbar-expand-sm navbar-toggleable-sm border-bottom box-shadow mb-3" light>
 | 
				
			||||||
 | 
					                    <Container>
 | 
				
			||||||
 | 
					                        <NavbarBrand tag={Link} to="/">Birdmap</NavbarBrand>
 | 
				
			||||||
 | 
					                        <NavbarToggler onClick={this.toggle} className="mr-2"/>
 | 
				
			||||||
 | 
					                        <Collapse className="d-sm-inline-flex flex-sm-row-reverse" isOpen={this.state.isOpen} navbar>
 | 
				
			||||||
 | 
					                            <ul className="navbar-nav flex-grow">
 | 
				
			||||||
 | 
					                                <NavItem>
 | 
				
			||||||
 | 
					                                    <NavLink tag={Link} className="text-dark" to="/">Home</NavLink>
 | 
				
			||||||
 | 
					                                </NavItem>
 | 
				
			||||||
 | 
					                                <NavItem>
 | 
				
			||||||
 | 
					                                    <NavLink tag={Link} className="text-dark" to="/counter">Counter</NavLink>
 | 
				
			||||||
 | 
					                                </NavItem>
 | 
				
			||||||
 | 
					                                <NavItem>
 | 
				
			||||||
 | 
					                                    <NavLink tag={Link} className="text-dark" to="/fetch-data">Fetch data</NavLink>
 | 
				
			||||||
 | 
					                                </NavItem>
 | 
				
			||||||
 | 
					                            </ul>
 | 
				
			||||||
 | 
					                        </Collapse>
 | 
				
			||||||
 | 
					                    </Container>
 | 
				
			||||||
 | 
					                </Navbar>
 | 
				
			||||||
 | 
					            </header>
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private toggle = () => {
 | 
				
			||||||
 | 
					        this.setState({
 | 
				
			||||||
 | 
					            isOpen: !this.state.isOpen
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										14
									
								
								Birdmap/ClientApp/src/custom.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								Birdmap/ClientApp/src/custom.css
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					/* Provide sufficient contrast against white background */
 | 
				
			||||||
 | 
					a {
 | 
				
			||||||
 | 
					  color: #0366d6;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					code {
 | 
				
			||||||
 | 
					  color: #E01A76;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.btn-primary {
 | 
				
			||||||
 | 
					  color: #fff;
 | 
				
			||||||
 | 
					  background-color: #1b6ec2;
 | 
				
			||||||
 | 
					  border-color: #1861ac;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										27
									
								
								Birdmap/ClientApp/src/index.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								Birdmap/ClientApp/src/index.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					import 'bootstrap/dist/css/bootstrap.css';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import * as React from 'react';
 | 
				
			||||||
 | 
					import * as ReactDOM from 'react-dom';
 | 
				
			||||||
 | 
					import { Provider } from 'react-redux';
 | 
				
			||||||
 | 
					import { ConnectedRouter } from 'connected-react-router';
 | 
				
			||||||
 | 
					import { createBrowserHistory } from 'history';
 | 
				
			||||||
 | 
					import configureStore from './store/configureStore';
 | 
				
			||||||
 | 
					import App from './App';
 | 
				
			||||||
 | 
					import registerServiceWorker from './registerServiceWorker';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Create browser history to use in the Redux store
 | 
				
			||||||
 | 
					const baseUrl = document.getElementsByTagName('base')[0].getAttribute('href') as string;
 | 
				
			||||||
 | 
					const history = createBrowserHistory({ basename: baseUrl });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Get the application-wide store instance, prepopulating with state from the server where available.
 | 
				
			||||||
 | 
					const store = configureStore(history);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ReactDOM.render(
 | 
				
			||||||
 | 
					    <Provider store={store}>
 | 
				
			||||||
 | 
					        <ConnectedRouter history={history}>
 | 
				
			||||||
 | 
					            <App />
 | 
				
			||||||
 | 
					        </ConnectedRouter>
 | 
				
			||||||
 | 
					    </Provider>,
 | 
				
			||||||
 | 
					    document.getElementById('root'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					registerServiceWorker();
 | 
				
			||||||
							
								
								
									
										1
									
								
								Birdmap/ClientApp/src/react-app-env.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								Birdmap/ClientApp/src/react-app-env.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					/// <reference types="react-scripts" />
 | 
				
			||||||
							
								
								
									
										105
									
								
								Birdmap/ClientApp/src/registerServiceWorker.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								Birdmap/ClientApp/src/registerServiceWorker.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,105 @@
 | 
				
			|||||||
 | 
					// In production, we register a service worker to serve assets from local cache.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// This lets the app load faster on subsequent visits in production, and gives
 | 
				
			||||||
 | 
					// it offline capabilities. However, it also means that developers (and users)
 | 
				
			||||||
 | 
					// will only see deployed updates on the "N+1" visit to a page, since previously
 | 
				
			||||||
 | 
					// cached resources are updated in the background.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.
 | 
				
			||||||
 | 
					// This link also includes instructions on opting out of this behavior.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const isLocalhost = Boolean(
 | 
				
			||||||
 | 
					    window.location.hostname === 'localhost' ||
 | 
				
			||||||
 | 
					    // [::1] is the IPv6 localhost address.
 | 
				
			||||||
 | 
					    window.location.hostname === '[::1]' ||
 | 
				
			||||||
 | 
					    // 127.0.0.1/8 is considered localhost for IPv4.
 | 
				
			||||||
 | 
					    window.location.hostname.match(
 | 
				
			||||||
 | 
					        /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default function register() {
 | 
				
			||||||
 | 
					    if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
 | 
				
			||||||
 | 
					        // The URL constructor is available in all browsers that support SW.
 | 
				
			||||||
 | 
					        const url = process.env.PUBLIC_URL as string;
 | 
				
			||||||
 | 
					        const publicUrl = new URL(url, window.location.toString());
 | 
				
			||||||
 | 
					        if (publicUrl.origin !== window.location.origin) {
 | 
				
			||||||
 | 
					            // Our service worker won't work if PUBLIC_URL is on a different origin
 | 
				
			||||||
 | 
					            // from what our page is served on. This might happen if a CDN is used to
 | 
				
			||||||
 | 
					            // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        window.addEventListener('load', () => {
 | 
				
			||||||
 | 
					            const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (isLocalhost) {
 | 
				
			||||||
 | 
					                // This is running on localhost. Lets check if a service worker still exists or not.
 | 
				
			||||||
 | 
					                checkValidServiceWorker(swUrl);
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                // Is not local host. Just register service worker
 | 
				
			||||||
 | 
					                registerValidSW(swUrl);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function registerValidSW(swUrl: string) {
 | 
				
			||||||
 | 
					    navigator.serviceWorker
 | 
				
			||||||
 | 
					        .register(swUrl)
 | 
				
			||||||
 | 
					        .then(registration => {
 | 
				
			||||||
 | 
					            registration.onupdatefound = () => {
 | 
				
			||||||
 | 
					                const installingWorker = registration.installing as ServiceWorker;
 | 
				
			||||||
 | 
					                installingWorker.onstatechange = () => {
 | 
				
			||||||
 | 
					                    if (installingWorker.state === 'installed') {
 | 
				
			||||||
 | 
					                        if (navigator.serviceWorker.controller) {
 | 
				
			||||||
 | 
					                            // At this point, the old content will have been purged and
 | 
				
			||||||
 | 
					                            // the fresh content will have been added to the cache.
 | 
				
			||||||
 | 
					                            // It's the perfect time to display a "New content is
 | 
				
			||||||
 | 
					                            // available; please refresh." message in your web app.
 | 
				
			||||||
 | 
					                            console.log('New content is available; please refresh.');
 | 
				
			||||||
 | 
					                        } else {
 | 
				
			||||||
 | 
					                            // At this point, everything has been precached.
 | 
				
			||||||
 | 
					                            // It's the perfect time to display a
 | 
				
			||||||
 | 
					                            // "Content is cached for offline use." message.
 | 
				
			||||||
 | 
					                            console.log('Content is cached for offline use.');
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                };
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        .catch(error => {
 | 
				
			||||||
 | 
					            console.error('Error during service worker registration:', error);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function checkValidServiceWorker(swUrl: string) {
 | 
				
			||||||
 | 
					    // Check if the service worker can be found. If it can't reload the page.
 | 
				
			||||||
 | 
					    fetch(swUrl)
 | 
				
			||||||
 | 
					        .then(response => {
 | 
				
			||||||
 | 
					            // Ensure service worker exists, and that we really are getting a JS file.
 | 
				
			||||||
 | 
					            const contentType = response.headers.get('content-type');
 | 
				
			||||||
 | 
					            if (response.status === 404 || (contentType && contentType.indexOf('javascript') === -1)) {
 | 
				
			||||||
 | 
					                // No service worker found. Probably a different app. Reload the page.
 | 
				
			||||||
 | 
					                navigator.serviceWorker.ready.then(registration => {
 | 
				
			||||||
 | 
					                    registration.unregister().then(() => {
 | 
				
			||||||
 | 
					                        window.location.reload();
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                // Service worker found. Proceed as normal.
 | 
				
			||||||
 | 
					                registerValidSW(swUrl);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        .catch(() => {
 | 
				
			||||||
 | 
					            console.log('No internet connection found. App is running in offline mode.');
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function unregister() {
 | 
				
			||||||
 | 
					    if ('serviceWorker' in navigator) {
 | 
				
			||||||
 | 
					        navigator.serviceWorker.ready.then(registration => {
 | 
				
			||||||
 | 
					            registration.unregister();
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										48
									
								
								Birdmap/ClientApp/src/store/Counter.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								Birdmap/ClientApp/src/store/Counter.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
				
			|||||||
 | 
					import { Action, Reducer } from 'redux';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// -----------------
 | 
				
			||||||
 | 
					// STATE - This defines the type of data maintained in the Redux store.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export interface CounterState {
 | 
				
			||||||
 | 
					    count: number;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// -----------------
 | 
				
			||||||
 | 
					// ACTIONS - These are serializable (hence replayable) descriptions of state transitions.
 | 
				
			||||||
 | 
					// They do not themselves have any side-effects; they just describe something that is going to happen.
 | 
				
			||||||
 | 
					// Use @typeName and isActionType for type detection that works even after serialization/deserialization.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export interface IncrementCountAction { type: 'INCREMENT_COUNT' }
 | 
				
			||||||
 | 
					export interface DecrementCountAction { type: 'DECREMENT_COUNT' }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Declare a 'discriminated union' type. This guarantees that all references to 'type' properties contain one of the
 | 
				
			||||||
 | 
					// declared type strings (and not any other arbitrary string).
 | 
				
			||||||
 | 
					export type KnownAction = IncrementCountAction | DecrementCountAction;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ----------------
 | 
				
			||||||
 | 
					// ACTION CREATORS - These are functions exposed to UI components that will trigger a state transition.
 | 
				
			||||||
 | 
					// They don't directly mutate state, but they can have external side-effects (such as loading data).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const actionCreators = {
 | 
				
			||||||
 | 
					    increment: () => ({ type: 'INCREMENT_COUNT' } as IncrementCountAction),
 | 
				
			||||||
 | 
					    decrement: () => ({ type: 'DECREMENT_COUNT' } as DecrementCountAction)
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ----------------
 | 
				
			||||||
 | 
					// REDUCER - For a given state and action, returns the new state. To support time travel, this must not mutate the old state.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const reducer: Reducer<CounterState> = (state: CounterState | undefined, incomingAction: Action): CounterState => {
 | 
				
			||||||
 | 
					    if (state === undefined) {
 | 
				
			||||||
 | 
					        return { count: 0 };
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const action = incomingAction as KnownAction;
 | 
				
			||||||
 | 
					    switch (action.type) {
 | 
				
			||||||
 | 
					        case 'INCREMENT_COUNT':
 | 
				
			||||||
 | 
					            return { count: state.count + 1 };
 | 
				
			||||||
 | 
					        case 'DECREMENT_COUNT':
 | 
				
			||||||
 | 
					            return { count: state.count - 1 };
 | 
				
			||||||
 | 
					        default:
 | 
				
			||||||
 | 
					            return state;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										91
									
								
								Birdmap/ClientApp/src/store/WeatherForecasts.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								Birdmap/ClientApp/src/store/WeatherForecasts.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,91 @@
 | 
				
			|||||||
 | 
					import { Action, Reducer } from 'redux';
 | 
				
			||||||
 | 
					import { AppThunkAction } from './';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// -----------------
 | 
				
			||||||
 | 
					// STATE - This defines the type of data maintained in the Redux store.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export interface WeatherForecastsState {
 | 
				
			||||||
 | 
					    isLoading: boolean;
 | 
				
			||||||
 | 
					    startDateIndex?: number;
 | 
				
			||||||
 | 
					    forecasts: WeatherForecast[];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export interface WeatherForecast {
 | 
				
			||||||
 | 
					    date: string;
 | 
				
			||||||
 | 
					    temperatureC: number;
 | 
				
			||||||
 | 
					    temperatureF: number;
 | 
				
			||||||
 | 
					    summary: string;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// -----------------
 | 
				
			||||||
 | 
					// ACTIONS - These are serializable (hence replayable) descriptions of state transitions.
 | 
				
			||||||
 | 
					// They do not themselves have any side-effects; they just describe something that is going to happen.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					interface RequestWeatherForecastsAction {
 | 
				
			||||||
 | 
					    type: 'REQUEST_WEATHER_FORECASTS';
 | 
				
			||||||
 | 
					    startDateIndex: number;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					interface ReceiveWeatherForecastsAction {
 | 
				
			||||||
 | 
					    type: 'RECEIVE_WEATHER_FORECASTS';
 | 
				
			||||||
 | 
					    startDateIndex: number;
 | 
				
			||||||
 | 
					    forecasts: WeatherForecast[];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Declare a 'discriminated union' type. This guarantees that all references to 'type' properties contain one of the
 | 
				
			||||||
 | 
					// declared type strings (and not any other arbitrary string).
 | 
				
			||||||
 | 
					type KnownAction = RequestWeatherForecastsAction | ReceiveWeatherForecastsAction;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ----------------
 | 
				
			||||||
 | 
					// ACTION CREATORS - These are functions exposed to UI components that will trigger a state transition.
 | 
				
			||||||
 | 
					// They don't directly mutate state, but they can have external side-effects (such as loading data).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const actionCreators = {
 | 
				
			||||||
 | 
					    requestWeatherForecasts: (startDateIndex: number): AppThunkAction<KnownAction> => (dispatch, getState) => {
 | 
				
			||||||
 | 
					        // Only load data if it's something we don't already have (and are not already loading)
 | 
				
			||||||
 | 
					        const appState = getState();
 | 
				
			||||||
 | 
					        if (appState && appState.weatherForecasts && startDateIndex !== appState.weatherForecasts.startDateIndex) {
 | 
				
			||||||
 | 
					            fetch(`weatherforecast`)
 | 
				
			||||||
 | 
					                .then(response => response.json() as Promise<WeatherForecast[]>)
 | 
				
			||||||
 | 
					                .then(data => {
 | 
				
			||||||
 | 
					                    dispatch({ type: 'RECEIVE_WEATHER_FORECASTS', startDateIndex: startDateIndex, forecasts: data });
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            dispatch({ type: 'REQUEST_WEATHER_FORECASTS', startDateIndex: startDateIndex });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ----------------
 | 
				
			||||||
 | 
					// REDUCER - For a given state and action, returns the new state. To support time travel, this must not mutate the old state.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const unloadedState: WeatherForecastsState = { forecasts: [], isLoading: false };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const reducer: Reducer<WeatherForecastsState> = (state: WeatherForecastsState | undefined, incomingAction: Action): WeatherForecastsState => {
 | 
				
			||||||
 | 
					    if (state === undefined) {
 | 
				
			||||||
 | 
					        return unloadedState;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const action = incomingAction as KnownAction;
 | 
				
			||||||
 | 
					    switch (action.type) {
 | 
				
			||||||
 | 
					        case 'REQUEST_WEATHER_FORECASTS':
 | 
				
			||||||
 | 
					            return {
 | 
				
			||||||
 | 
					                startDateIndex: action.startDateIndex,
 | 
				
			||||||
 | 
					                forecasts: state.forecasts,
 | 
				
			||||||
 | 
					                isLoading: true
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					        case 'RECEIVE_WEATHER_FORECASTS':
 | 
				
			||||||
 | 
					            // Only accept the incoming data if it matches the most recent request. This ensures we correctly
 | 
				
			||||||
 | 
					            // handle out-of-order responses.
 | 
				
			||||||
 | 
					            if (action.startDateIndex === state.startDateIndex) {
 | 
				
			||||||
 | 
					                return {
 | 
				
			||||||
 | 
					                    startDateIndex: action.startDateIndex,
 | 
				
			||||||
 | 
					                    forecasts: action.forecasts,
 | 
				
			||||||
 | 
					                    isLoading: false
 | 
				
			||||||
 | 
					                };
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return state;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										29
									
								
								Birdmap/ClientApp/src/store/configureStore.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								Birdmap/ClientApp/src/store/configureStore.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					import { applyMiddleware, combineReducers, compose, createStore } from 'redux';
 | 
				
			||||||
 | 
					import thunk from 'redux-thunk';
 | 
				
			||||||
 | 
					import { connectRouter, routerMiddleware } from 'connected-react-router';
 | 
				
			||||||
 | 
					import { History } from 'history';
 | 
				
			||||||
 | 
					import { ApplicationState, reducers } from './';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default function configureStore(history: History, initialState?: ApplicationState) {
 | 
				
			||||||
 | 
					    const middleware = [
 | 
				
			||||||
 | 
					        thunk,
 | 
				
			||||||
 | 
					        routerMiddleware(history)
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const rootReducer = combineReducers({
 | 
				
			||||||
 | 
					        ...reducers,
 | 
				
			||||||
 | 
					        router: connectRouter(history)
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const enhancers = [];
 | 
				
			||||||
 | 
					    const windowIfDefined = typeof window === 'undefined' ? null : window as any;
 | 
				
			||||||
 | 
					    if (windowIfDefined && windowIfDefined.__REDUX_DEVTOOLS_EXTENSION__) {
 | 
				
			||||||
 | 
					        enhancers.push(windowIfDefined.__REDUX_DEVTOOLS_EXTENSION__());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return createStore(
 | 
				
			||||||
 | 
					        rootReducer,
 | 
				
			||||||
 | 
					        initialState,
 | 
				
			||||||
 | 
					        compose(applyMiddleware(...middleware), ...enhancers)
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										22
									
								
								Birdmap/ClientApp/src/store/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								Birdmap/ClientApp/src/store/index.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
				
			|||||||
 | 
					import * as WeatherForecasts from './WeatherForecasts';
 | 
				
			||||||
 | 
					import * as Counter from './Counter';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// The top-level state object
 | 
				
			||||||
 | 
					export interface ApplicationState {
 | 
				
			||||||
 | 
					    counter: Counter.CounterState | undefined;
 | 
				
			||||||
 | 
					    weatherForecasts: WeatherForecasts.WeatherForecastsState | undefined;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Whenever an action is dispatched, Redux will update each top-level application state property using
 | 
				
			||||||
 | 
					// the reducer with the matching name. It's important that the names match exactly, and that the reducer
 | 
				
			||||||
 | 
					// acts on the corresponding ApplicationState property type.
 | 
				
			||||||
 | 
					export const reducers = {
 | 
				
			||||||
 | 
					    counter: Counter.reducer,
 | 
				
			||||||
 | 
					    weatherForecasts: WeatherForecasts.reducer
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// This type can be used as a hint on action creators so that its 'dispatch' and 'getState' params are
 | 
				
			||||||
 | 
					// correctly typed to match your store.
 | 
				
			||||||
 | 
					export interface AppThunkAction<TAction> {
 | 
				
			||||||
 | 
					    (dispatch: (action: TAction) => void, getState: () => ApplicationState): void;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										24
									
								
								Birdmap/ClientApp/tsconfig.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								Birdmap/ClientApp/tsconfig.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "compilerOptions": {
 | 
				
			||||||
 | 
					    "target": "es5",
 | 
				
			||||||
 | 
					    "allowJs": true,
 | 
				
			||||||
 | 
					    "esModuleInterop": true,
 | 
				
			||||||
 | 
					    "allowSyntheticDefaultImports": true,
 | 
				
			||||||
 | 
					    "strict": true,
 | 
				
			||||||
 | 
					    "forceConsistentCasingInFileNames": true,
 | 
				
			||||||
 | 
					    "module": "esnext",
 | 
				
			||||||
 | 
					    "moduleResolution": "node",
 | 
				
			||||||
 | 
					    "resolveJsonModule": true,
 | 
				
			||||||
 | 
					    "isolatedModules": true,
 | 
				
			||||||
 | 
					    "noEmit": true,
 | 
				
			||||||
 | 
					    "jsx": "preserve",
 | 
				
			||||||
 | 
					    "lib": [
 | 
				
			||||||
 | 
					      "es2015",
 | 
				
			||||||
 | 
					      "dom"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "skipLibCheck": false
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "include": [
 | 
				
			||||||
 | 
					    "src"
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										39
									
								
								Birdmap/Controllers/WeatherForecastController.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								Birdmap/Controllers/WeatherForecastController.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
				
			|||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					using Microsoft.AspNetCore.Mvc;
 | 
				
			||||||
 | 
					using Microsoft.Extensions.Logging;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Birdmap.Controllers
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [ApiController]
 | 
				
			||||||
 | 
					    [Route("[controller]")]
 | 
				
			||||||
 | 
					    public class WeatherForecastController : ControllerBase
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        private static readonly string[] Summaries = new[]
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private readonly ILogger<WeatherForecastController> _logger;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public WeatherForecastController(ILogger<WeatherForecastController> logger)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            _logger = logger;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [HttpGet]
 | 
				
			||||||
 | 
					        public IEnumerable<WeatherForecast> Get()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var rng = new Random();
 | 
				
			||||||
 | 
					            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                Date = DateTime.Now.AddDays(index),
 | 
				
			||||||
 | 
					                TemperatureC = rng.Next(-20, 55),
 | 
				
			||||||
 | 
					                Summary = Summaries[rng.Next(Summaries.Length)]
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					            .ToArray();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										26
									
								
								Birdmap/Pages/Error.cshtml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								Birdmap/Pages/Error.cshtml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					@page
 | 
				
			||||||
 | 
					@model ErrorModel
 | 
				
			||||||
 | 
					@{
 | 
				
			||||||
 | 
					    ViewData["Title"] = "Error";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<h1 class="text-danger">Error.</h1>
 | 
				
			||||||
 | 
					<h2 class="text-danger">An error occurred while processing your request.</h2>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@if (Model.ShowRequestId)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    <p>
 | 
				
			||||||
 | 
					        <strong>Request ID:</strong> <code>@Model.RequestId</code>
 | 
				
			||||||
 | 
					    </p>
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<h3>Development Mode</h3>
 | 
				
			||||||
 | 
					<p>
 | 
				
			||||||
 | 
					    Swapping to the <strong>Development</strong> environment displays detailed information about the error that occurred.
 | 
				
			||||||
 | 
					</p>
 | 
				
			||||||
 | 
					<p>
 | 
				
			||||||
 | 
					    <strong>The Development environment shouldn't be enabled for deployed applications.</strong>
 | 
				
			||||||
 | 
					    It can result in displaying sensitive information from exceptions to end users.
 | 
				
			||||||
 | 
					    For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
 | 
				
			||||||
 | 
					    and restarting the app.
 | 
				
			||||||
 | 
					</p>
 | 
				
			||||||
							
								
								
									
										30
									
								
								Birdmap/Pages/Error.cshtml.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								Birdmap/Pages/Error.cshtml.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
					using System.Diagnostics;
 | 
				
			||||||
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					using Microsoft.AspNetCore.Mvc;
 | 
				
			||||||
 | 
					using Microsoft.AspNetCore.Mvc.RazorPages;
 | 
				
			||||||
 | 
					using Microsoft.Extensions.Logging;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Birdmap.Pages
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
 | 
				
			||||||
 | 
					    public class ErrorModel : PageModel
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        private readonly ILogger<ErrorModel> logger;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public ErrorModel(ILogger<ErrorModel> _logger)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            logger = _logger;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        public string RequestId { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public void OnGet()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										3
									
								
								Birdmap/Pages/_ViewImports.cshtml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								Birdmap/Pages/_ViewImports.cshtml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					@using Birdmap
 | 
				
			||||||
 | 
					@namespace Birdmap.Pages
 | 
				
			||||||
 | 
					@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
 | 
				
			||||||
							
								
								
									
										26
									
								
								Birdmap/Program.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								Birdmap/Program.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					using Microsoft.AspNetCore.Hosting;
 | 
				
			||||||
 | 
					using Microsoft.Extensions.Configuration;
 | 
				
			||||||
 | 
					using Microsoft.Extensions.Hosting;
 | 
				
			||||||
 | 
					using Microsoft.Extensions.Logging;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Birdmap
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public class Program
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        public static void Main(string[] args)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            CreateHostBuilder(args).Build().Run();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public static IHostBuilder CreateHostBuilder(string[] args) =>
 | 
				
			||||||
 | 
					            Host.CreateDefaultBuilder(args)
 | 
				
			||||||
 | 
					                .ConfigureWebHostDefaults(webBuilder =>
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    webBuilder.UseStartup<Startup>();
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										27
									
								
								Birdmap/Properties/launchSettings.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								Birdmap/Properties/launchSettings.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "iisSettings": {
 | 
				
			||||||
 | 
					    "windowsAuthentication": false,
 | 
				
			||||||
 | 
					    "anonymousAuthentication": true,
 | 
				
			||||||
 | 
					    "iisExpress": {
 | 
				
			||||||
 | 
					      "applicationUrl": "http://localhost:63288",
 | 
				
			||||||
 | 
					      "sslPort": 44331
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "profiles": {
 | 
				
			||||||
 | 
					    "IIS Express": {
 | 
				
			||||||
 | 
					      "commandName": "IISExpress",
 | 
				
			||||||
 | 
					      "launchBrowser": true,
 | 
				
			||||||
 | 
					      "environmentVariables": {
 | 
				
			||||||
 | 
					        "ASPNETCORE_ENVIRONMENT": "Development"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "Birdmap": {
 | 
				
			||||||
 | 
					      "commandName": "Project",
 | 
				
			||||||
 | 
					      "launchBrowser": true,
 | 
				
			||||||
 | 
					      "applicationUrl": "https://localhost:5001;http://localhost:5000",
 | 
				
			||||||
 | 
					      "environmentVariables": {
 | 
				
			||||||
 | 
					        "ASPNETCORE_ENVIRONMENT": "Development"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										71
									
								
								Birdmap/Startup.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								Birdmap/Startup.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,71 @@
 | 
				
			|||||||
 | 
					using Microsoft.AspNetCore.Builder;
 | 
				
			||||||
 | 
					using Microsoft.AspNetCore.Hosting;
 | 
				
			||||||
 | 
					using Microsoft.AspNetCore.HttpsPolicy;
 | 
				
			||||||
 | 
					using Microsoft.AspNetCore.Mvc;
 | 
				
			||||||
 | 
					using Microsoft.AspNetCore.SpaServices.ReactDevelopmentServer;
 | 
				
			||||||
 | 
					using Microsoft.Extensions.Configuration;
 | 
				
			||||||
 | 
					using Microsoft.Extensions.DependencyInjection;
 | 
				
			||||||
 | 
					using Microsoft.Extensions.Hosting;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Birdmap
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public class Startup
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        public Startup(IConfiguration configuration)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Configuration = configuration;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public IConfiguration Configuration { get; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // This method gets called by the runtime. Use this method to add services to the container.
 | 
				
			||||||
 | 
					        public void ConfigureServices(IServiceCollection services)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            services.AddControllersWithViews();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // In production, the React files will be served from this directory
 | 
				
			||||||
 | 
					            services.AddSpaStaticFiles(configuration =>
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                configuration.RootPath = "ClientApp/build";
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
 | 
				
			||||||
 | 
					        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (env.IsDevelopment())
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                app.UseDeveloperExceptionPage();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                app.UseExceptionHandler("/Error");
 | 
				
			||||||
 | 
					                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
 | 
				
			||||||
 | 
					                app.UseHsts();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            app.UseHttpsRedirection();
 | 
				
			||||||
 | 
					            app.UseStaticFiles();
 | 
				
			||||||
 | 
					            app.UseSpaStaticFiles();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            app.UseRouting();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            app.UseEndpoints(endpoints =>
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                endpoints.MapControllerRoute(
 | 
				
			||||||
 | 
					                    name: "default",
 | 
				
			||||||
 | 
					                    pattern: "{controller}/{action=Index}/{id?}");
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            app.UseSpa(spa =>
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                spa.Options.SourcePath = "ClientApp";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (env.IsDevelopment())
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    spa.UseReactDevelopmentServer(npmScript: "start");
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										15
									
								
								Birdmap/WeatherForecast.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								Birdmap/WeatherForecast.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					using System;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Birdmap
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public class WeatherForecast
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        public DateTime Date { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public int TemperatureC { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public string Summary { get; set; }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										9
									
								
								Birdmap/appsettings.Development.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								Birdmap/appsettings.Development.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "Logging": {
 | 
				
			||||||
 | 
					    "LogLevel": {
 | 
				
			||||||
 | 
					      "Default": "Information",
 | 
				
			||||||
 | 
					      "Microsoft": "Warning",
 | 
				
			||||||
 | 
					      "Microsoft.Hosting.Lifetime": "Information"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										10
									
								
								Birdmap/appsettings.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								Birdmap/appsettings.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "Logging": {
 | 
				
			||||||
 | 
					    "LogLevel": {
 | 
				
			||||||
 | 
					      "Default": "Information",
 | 
				
			||||||
 | 
					      "Microsoft": "Warning",
 | 
				
			||||||
 | 
					      "Microsoft.Hosting.Lifetime": "Information"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "AllowedHosts": "*"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user