├── .gitattributes
├── .gitignore
├── CatTrackerDemo.Android
├── Assets
│ └── AboutAssets.txt
├── CatTrackerDemo.Android.csproj
├── MainActivity.cs
├── Properties
│ ├── AndroidManifest.xml
│ └── AssemblyInfo.cs
├── Resources
│ ├── AboutResources.txt
│ ├── layout
│ │ ├── Tabbar.xml
│ │ └── Toolbar.xml
│ ├── mipmap-anydpi-v26
│ │ ├── icon.xml
│ │ └── icon_round.xml
│ ├── mipmap-hdpi
│ │ ├── icon.png
│ │ └── launcher_foreground.png
│ ├── mipmap-mdpi
│ │ ├── icon.png
│ │ └── launcher_foreground.png
│ ├── mipmap-xhdpi
│ │ ├── icon.png
│ │ └── launcher_foreground.png
│ ├── mipmap-xxhdpi
│ │ ├── icon.png
│ │ └── launcher_foreground.png
│ ├── mipmap-xxxhdpi
│ │ ├── icon.png
│ │ └── launcher_foreground.png
│ └── values
│ │ ├── colors.xml
│ │ └── styles.xml
└── wwwroot
│ └── index.html
├── CatTrackerDemo.Web
├── App.razor
├── CatTrackerDemo.Web.csproj
├── Data
│ ├── WeatherForecast.cs
│ └── WeatherForecastService.cs
├── Pages
│ ├── About.razor
│ ├── Error.cshtml
│ ├── Index.razor
│ ├── TrackResults.razor
│ └── _Host.cshtml
├── Program.cs
├── Properties
│ └── launchSettings.json
├── Shared
│ ├── MainLayout.razor
│ └── NavMenu.razor
├── Startup.cs
├── _Imports.razor
├── appsettings.Development.json
├── appsettings.json
└── wwwroot
│ ├── css
│ ├── bootstrap
│ │ ├── bootstrap.min.css
│ │ └── bootstrap.min.css.map
│ ├── open-iconic
│ │ ├── FONT-LICENSE
│ │ ├── ICON-LICENSE
│ │ ├── README.md
│ │ └── font
│ │ │ ├── css
│ │ │ └── open-iconic-bootstrap.min.css
│ │ │ └── fonts
│ │ │ ├── open-iconic.eot
│ │ │ ├── open-iconic.otf
│ │ │ ├── open-iconic.svg
│ │ │ ├── open-iconic.ttf
│ │ │ └── open-iconic.woff
│ └── site.css
│ └── favicon.ico
├── CatTrackerDemo.Windows
├── App.cs
├── AssemblyInfo.cs
├── CatTrackerDemo.Windows.csproj
├── app.manifest
└── wwwroot
│ └── index.html
├── CatTrackerDemo.iOS
├── AppDelegate.cs
├── Assets.xcassets
│ └── AppIcon.appiconset
│ │ ├── Contents.json
│ │ ├── Icon1024.png
│ │ ├── Icon120.png
│ │ ├── Icon152.png
│ │ ├── Icon167.png
│ │ ├── Icon180.png
│ │ ├── Icon20.png
│ │ ├── Icon29.png
│ │ ├── Icon40.png
│ │ ├── Icon58.png
│ │ ├── Icon60.png
│ │ ├── Icon76.png
│ │ ├── Icon80.png
│ │ └── Icon87.png
├── CatTrackerDemo.iOS.csproj
├── Entitlements.plist
├── Info.plist
├── Main.cs
├── Properties
│ └── AssemblyInfo.cs
└── Resources
│ ├── Default-568h@2x.png
│ ├── Default-Portrait.png
│ ├── Default-Portrait@2x.png
│ ├── Default.png
│ ├── Default@2x.png
│ ├── LaunchScreen.storyboard
│ └── wwwroot
│ └── index.html
├── CatTrackerDemo.macOS
├── AppDelegate.cs
├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ ├── AppIcon-128.png
│ │ ├── AppIcon-128@2x.png
│ │ ├── AppIcon-16.png
│ │ ├── AppIcon-16@2x.png
│ │ ├── AppIcon-256.png
│ │ ├── AppIcon-256@2x.png
│ │ ├── AppIcon-32.png
│ │ ├── AppIcon-32@2x.png
│ │ ├── AppIcon-512.png
│ │ ├── AppIcon-512@2x.png
│ │ └── Contents.json
│ └── Contents.json
├── CatTrackerDemo.macOS.csproj
├── Entitlements.plist
├── Info.plist
├── Main.cs
├── Resources
│ └── wwwroot
│ │ └── index.html
├── ViewController.cs
└── ViewController.designer.cs
├── CatTrackerDemo.sln
├── CatTrackerDemo
├── App.cs
├── CatResults.razor
├── CatTrackerDemo.csproj
├── Main.razor
├── TrackerState.cs
├── WebUI
│ ├── App.razor
│ ├── Pages
│ │ └── Index.razor
│ ├── Shared
│ │ └── MainLayout.razor
│ └── _Imports.razor
├── _Imports.razor
└── wwwroot
│ ├── css
│ ├── app.css
│ ├── bootstrap
│ │ ├── bootstrap.min.css
│ │ └── bootstrap.min.css.map
│ └── open-iconic
│ │ ├── FONT-LICENSE
│ │ ├── ICON-LICENSE
│ │ ├── README.md
│ │ └── font
│ │ ├── css
│ │ └── open-iconic-bootstrap.min.css
│ │ └── fonts
│ │ ├── open-iconic.eot
│ │ ├── open-iconic.otf
│ │ ├── open-iconic.svg
│ │ ├── open-iconic.ttf
│ │ └── open-iconic.woff
│ └── favicon.ico
├── CatTrackerWebUILibrary
├── CatTracker.razor
├── CatTrackerWebUILibrary.csproj
├── Models
│ ├── CatTrackerModel.cs
│ ├── CatTrackerResult.cs
│ └── FancyCatTracker.cs
├── _Imports.razor
└── wwwroot
│ ├── background.png
│ ├── cats
│ ├── cat1.jpg
│ ├── cat10.jpg
│ ├── cat11.jpg
│ ├── cat12.jpg
│ ├── cat13.jpg
│ ├── cat14.jpg
│ ├── cat15.jpg
│ ├── cat16.jpg
│ ├── cat17.jpg
│ ├── cat18.jpg
│ ├── cat19.jpg
│ ├── cat2.jpg
│ ├── cat20.jpg
│ ├── cat3.jpg
│ ├── cat4.jpg
│ ├── cat5.jpg
│ ├── cat6.jpg
│ ├── cat7.jpg
│ ├── cat8.jpg
│ └── cat9.jpg
│ └── styles.css
├── LICENSE.txt
└── Readme.md
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 | ##
4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
5 |
6 | # User-specific files
7 | *.rsuser
8 | *.suo
9 | *.user
10 | *.userosscache
11 | *.sln.docstates
12 |
13 | # User-specific files (MonoDevelop/Xamarin Studio)
14 | *.userprefs
15 |
16 | # Mono crash dumps
17 | *.blob
18 |
19 | # Build results
20 | [Dd]ebug/
21 | [Dd]ebugPublic/
22 | [Rr]elease/
23 | [Rr]eleases/
24 | x64/
25 | x86/
26 | bld/
27 | [Bb]in/
28 | [Oo]bj/
29 | [Ll]og/
30 |
31 | # Visual Studio 2015/2017 cache/options directory
32 | .vs/
33 | # Uncomment if you have tasks that create the project's static files in wwwroot
34 | #wwwroot/
35 |
36 | # Visual Studio 2017 auto generated files
37 | Generated\ Files/
38 |
39 | # MSTest test Results
40 | [Tt]est[Rr]esult*/
41 | [Bb]uild[Ll]og.*
42 |
43 | # NUNIT
44 | *.VisualState.xml
45 | TestResult.xml
46 |
47 | # Build Results of an ATL Project
48 | [Dd]ebugPS/
49 | [Rr]eleasePS/
50 | dlldata.c
51 |
52 | # Benchmark Results
53 | BenchmarkDotNet.Artifacts/
54 |
55 | # .NET Core
56 | project.lock.json
57 | project.fragment.lock.json
58 | artifacts/
59 | !azure-pipelines/artifacts
60 |
61 | # StyleCop
62 | StyleCopReport.xml
63 |
64 | # Files built by Visual Studio
65 | *_i.c
66 | *_p.c
67 | *_h.h
68 | *.ilk
69 | *.meta
70 | *.obj
71 | *.iobj
72 | *.pch
73 | *.pdb
74 | *.ipdb
75 | *.pgc
76 | *.pgd
77 | *.rsp
78 | *.sbr
79 | *.tlb
80 | *.tli
81 | *.tlh
82 | *.tmp
83 | *.tmp_proj
84 | *_wpftmp.csproj
85 | *.log
86 | *.vspscc
87 | *.vssscc
88 | .builds
89 | *.pidb
90 | *.svclog
91 | *.scc
92 |
93 | # Chutzpah Test files
94 | _Chutzpah*
95 |
96 | # Visual C++ cache files
97 | ipch/
98 | *.aps
99 | *.ncb
100 | *.opendb
101 | *.opensdf
102 | *.sdf
103 | *.cachefile
104 | *.VC.db
105 | *.VC.VC.opendb
106 |
107 | # Visual Studio profiler
108 | *.psess
109 | *.vsp
110 | *.vspx
111 | *.sap
112 |
113 | # Visual Studio Trace Files
114 | *.e2e
115 |
116 | # TFS 2012 Local Workspace
117 | $tf/
118 |
119 | # Guidance Automation Toolkit
120 | *.gpState
121 |
122 | # ReSharper is a .NET coding add-in
123 | _ReSharper*/
124 | *.[Rr]e[Ss]harper
125 | *.DotSettings.user
126 |
127 | # JustCode is a .NET coding add-in
128 | .JustCode
129 |
130 | # TeamCity is a build add-in
131 | _TeamCity*
132 |
133 | # DotCover is a Code Coverage Tool
134 | *.dotCover
135 |
136 | # AxoCover is a Code Coverage Tool
137 | .axoCover/*
138 | !.axoCover/settings.json
139 |
140 | # Visual Studio code coverage results
141 | *.coverage
142 | *.coveragexml
143 |
144 | # NCrunch
145 | _NCrunch_*
146 | .*crunch*.local.xml
147 | nCrunchTemp_*
148 |
149 | # MightyMoose
150 | *.mm.*
151 | AutoTest.Net/
152 |
153 | # Web workbench (sass)
154 | .sass-cache/
155 |
156 | # Installshield output folder
157 | [Ee]xpress/
158 |
159 | # DocProject is a documentation generator add-in
160 | DocProject/buildhelp/
161 | DocProject/Help/*.HxT
162 | DocProject/Help/*.HxC
163 | DocProject/Help/*.hhc
164 | DocProject/Help/*.hhk
165 | DocProject/Help/*.hhp
166 | DocProject/Help/Html2
167 | DocProject/Help/html
168 |
169 | # Click-Once directory
170 | publish/
171 |
172 | # Publish Web Output
173 | *.[Pp]ublish.xml
174 | *.azurePubxml
175 | # Note: Comment the next line if you want to checkin your web deploy settings,
176 | # but database connection strings (with potential passwords) will be unencrypted
177 | *.pubxml
178 | *.publishproj
179 |
180 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
181 | # checkin your Azure Web App publish settings, but sensitive information contained
182 | # in these scripts will be unencrypted
183 | PublishScripts/
184 |
185 | # NuGet Packages
186 | *.nupkg
187 | # The packages folder can be ignored because of Package Restore
188 | **/[Pp]ackages/*
189 | # except build/, which is used as an MSBuild target.
190 | !**/[Pp]ackages/build/
191 | # Uncomment if necessary however generally it will be regenerated when needed
192 | #!**/[Pp]ackages/repositories.config
193 | # NuGet v3's project.json files produces more ignorable files
194 | *.nuget.props
195 | *.nuget.targets
196 |
197 | # Microsoft Azure Build Output
198 | csx/
199 | *.build.csdef
200 |
201 | # Microsoft Azure Emulator
202 | ecf/
203 | rcf/
204 |
205 | # Windows Store app package directories and files
206 | AppPackages/
207 | BundleArtifacts/
208 | Package.StoreAssociation.xml
209 | _pkginfo.txt
210 | *.appx
211 |
212 | # Visual Studio cache files
213 | # files ending in .cache can be ignored
214 | *.[Cc]ache
215 | # but keep track of directories ending in .cache
216 | !*.[Cc]ache/
217 |
218 | # Others
219 | ClientBin/
220 | ~$*
221 | *~
222 | *.dbmdl
223 | *.dbproj.schemaview
224 | *.jfm
225 | *.pfx
226 | *.publishsettings
227 | orleans.codegen.cs
228 |
229 | # Including strong name files can present a security risk
230 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
231 | #*.snk
232 |
233 | # Since there are multiple workflows, uncomment next line to ignore bower_components
234 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
235 | #bower_components/
236 |
237 | # RIA/Silverlight projects
238 | Generated_Code/
239 |
240 | # Backup & report files from converting an old project file
241 | # to a newer Visual Studio version. Backup files are not needed,
242 | # because we have git ;-)
243 | _UpgradeReport_Files/
244 | Backup*/
245 | UpgradeLog*.XML
246 | UpgradeLog*.htm
247 | ServiceFabricBackup/
248 | *.rptproj.bak
249 |
250 | # SQL Server files
251 | *.mdf
252 | *.ldf
253 | *.ndf
254 |
255 | # Business Intelligence projects
256 | *.rdl.data
257 | *.bim.layout
258 | *.bim_*.settings
259 | *.rptproj.rsuser
260 |
261 | # Microsoft Fakes
262 | FakesAssemblies/
263 |
264 | # GhostDoc plugin setting file
265 | *.GhostDoc.xml
266 |
267 | # Node.js Tools for Visual Studio
268 | .ntvs_analysis.dat
269 | node_modules/
270 |
271 | # Visual Studio 6 build log
272 | *.plg
273 |
274 | # Visual Studio 6 workspace options file
275 | *.opt
276 |
277 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
278 | *.vbw
279 |
280 | # Visual Studio LightSwitch build output
281 | **/*.HTMLClient/GeneratedArtifacts
282 | **/*.DesktopClient/GeneratedArtifacts
283 | **/*.DesktopClient/ModelManifest.xml
284 | **/*.Server/GeneratedArtifacts
285 | **/*.Server/ModelManifest.xml
286 | _Pvt_Extensions
287 |
288 | # Paket dependency manager
289 | .paket/paket.exe
290 | paket-files/
291 |
292 | # FAKE - F# Make
293 | .fake/
294 |
295 | # JetBrains Rider
296 | .idea/
297 | *.sln.iml
298 |
299 | # CodeRush personal settings
300 | .cr/personal
301 |
302 | # Python Tools for Visual Studio (PTVS)
303 | __pycache__/
304 | *.pyc
305 |
306 | # Cake - Uncomment if you are using it
307 | # tools/**
308 | # !tools/packages.config
309 |
310 | # Tabs Studio
311 | *.tss
312 |
313 | # Telerik's JustMock configuration file
314 | *.jmconfig
315 |
316 | # BizTalk build output
317 | *.btp.cs
318 | *.btm.cs
319 | *.odx.cs
320 | *.xsd.cs
321 |
322 | # OpenCover UI analysis results
323 | OpenCover/
324 |
325 | # Azure Stream Analytics local run output
326 | ASALocalRun/
327 |
328 | # MSBuild Binary and Structured Log
329 | *.binlog
330 |
331 | # NVidia Nsight GPU debugger configuration file
332 | *.nvuser
333 |
334 | # MFractors (Xamarin productivity tool) working folder
335 | .mfractor/
336 |
337 | # Local History for Visual Studio
338 | .localhistory/
339 |
340 | # Xamarin auto-generated Android resources
341 | Resource.designer.cs
342 |
343 | # The zipfile that is created by the static web assets build process.
344 | wwwroot.zip
345 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Android/Assets/AboutAssets.txt:
--------------------------------------------------------------------------------
1 | Any raw assets you want to be deployed with your application can be placed in
2 | this directory (and child directories) and given a Build Action of "AndroidAsset".
3 |
4 | These files will be deployed with your package and will be accessible using Android's
5 | AssetManager, like this:
6 |
7 | public class ReadAsset : Activity
8 | {
9 | protected override void OnCreate (Bundle bundle)
10 | {
11 | base.OnCreate (bundle);
12 |
13 | InputStream input = Assets.Open ("my_asset.txt");
14 | }
15 | }
16 |
17 | Additionally, some Android functions will automatically load asset files:
18 |
19 | Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf");
20 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Android/CatTrackerDemo.Android.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | AnyCPU
6 | {F32E581F-A644-4552-96B0-F55F36CF389F}
7 | {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
8 | {c9e5eea5-ca05-42a1-839b-61506e0a37df}
9 | Library
10 | CatTrackerDemo.Droid
11 | CatTrackerDemo.Android
12 | True
13 | True
14 | Resources\Resource.designer.cs
15 | Resource
16 | Properties\AndroidManifest.xml
17 | Resources
18 | Assets
19 | false
20 | v9.0
21 | latest
22 | true
23 | true
24 | Xamarin.Android.Net.AndroidClientHandler
25 |
26 |
27 |
28 |
29 | true
30 | portable
31 | false
32 | bin\Debug
33 | DEBUG;
34 | prompt
35 | 4
36 | None
37 |
38 |
39 | true
40 | portable
41 | true
42 | bin\Release
43 | prompt
44 | 4
45 | true
46 | false
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 | PreserveNewest
98 |
99 |
100 |
101 |
102 | {4C1E61E9-D7C4-4A4F-BBB4-3DD53747160C}
103 | CatTrackerDemo
104 |
105 |
106 | {03619938-8acb-493a-98fe-4edc465039a3}
107 | CatTrackerWebUILibrary
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Android/MainActivity.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Android.App;
3 | using Android.Content.PM;
4 | using Android.Runtime;
5 | using Android.Views;
6 | using Android.Widget;
7 | using Android.OS;
8 | using Microsoft.MobileBlazorBindings.WebView.Android;
9 |
10 | namespace CatTrackerDemo.Droid
11 | {
12 | [Activity(Label = "CatTrackerDemo", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
13 | public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
14 | {
15 | protected override void OnCreate(Bundle savedInstanceState)
16 | {
17 | BlazorHybridAndroid.Init();
18 |
19 | var fileProvider = new AssetFileProvider(Assets, "wwwroot");
20 |
21 | TabLayoutResource = Resource.Layout.Tabbar;
22 | ToolbarResource = Resource.Layout.Toolbar;
23 |
24 | base.OnCreate(savedInstanceState);
25 |
26 | Xamarin.Essentials.Platform.Init(this, savedInstanceState);
27 | global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
28 | LoadApplication(new App(fileProvider));
29 | }
30 |
31 | public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
32 | {
33 | Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
34 |
35 | base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
36 | }
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Android/Properties/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Android/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 | using Android.App;
5 |
6 | // General Information about an assembly is controlled through the following
7 | // set of attributes. Change these attribute values to modify the information
8 | // associated with an assembly.
9 | [assembly: AssemblyTitle("CatTrackerDemo.Android")]
10 | [assembly: AssemblyDescription("")]
11 | [assembly: AssemblyConfiguration("")]
12 | [assembly: AssemblyCompany("")]
13 | [assembly: AssemblyProduct("CatTrackerDemo.Android")]
14 | [assembly: AssemblyCopyright("Copyright © 2019")]
15 | [assembly: AssemblyTrademark("")]
16 | [assembly: AssemblyCulture("")]
17 | [assembly: ComVisible(false)]
18 |
19 | // Version information for an assembly consists of the following four values:
20 | //
21 | // Major Version
22 | // Minor Version
23 | // Build Number
24 | // Revision
25 | [assembly: AssemblyVersion("1.0.0.0")]
26 | [assembly: AssemblyFileVersion("1.0.0.0")]
27 |
28 | // Add some common permissions, these can be removed if not needed
29 | [assembly: UsesPermission(Android.Manifest.Permission.Internet)]
30 | [assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)]
31 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Android/Resources/AboutResources.txt:
--------------------------------------------------------------------------------
1 | Images, layout descriptions, binary blobs and string dictionaries can be included
2 | in your application as resource files. Various Android APIs are designed to
3 | operate on the resource IDs instead of dealing with images, strings or binary blobs
4 | directly.
5 |
6 | For example, a sample Android app that contains a user interface layout (main.xml),
7 | an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png)
8 | would keep its resources in the "Resources" directory of the application:
9 |
10 | Resources/
11 | drawable-hdpi/
12 | icon.png
13 |
14 | drawable-ldpi/
15 | icon.png
16 |
17 | drawable-mdpi/
18 | icon.png
19 |
20 | layout/
21 | main.xml
22 |
23 | values/
24 | strings.xml
25 |
26 | In order to get the build system to recognize Android resources, set the build action to
27 | "AndroidResource". The native Android APIs do not operate directly with filenames, but
28 | instead operate on resource IDs. When you compile an Android application that uses resources,
29 | the build system will package the resources for distribution and generate a class called
30 | "Resource" that contains the tokens for each one of the resources included. For example,
31 | for the above Resources layout, this is what the Resource class would expose:
32 |
33 | public class Resource {
34 | public class drawable {
35 | public const int icon = 0x123;
36 | }
37 |
38 | public class layout {
39 | public const int main = 0x456;
40 | }
41 |
42 | public class strings {
43 | public const int first_string = 0xabc;
44 | public const int second_string = 0xbcd;
45 | }
46 | }
47 |
48 | You would then use R.drawable.icon to reference the drawable/icon.png file, or Resource.layout.main
49 | to reference the layout/main.xml file, or Resource.strings.first_string to reference the first
50 | string in the dictionary file values/strings.xml.
51 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Android/Resources/layout/Tabbar.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Android/Resources/layout/Toolbar.xml:
--------------------------------------------------------------------------------
1 |
9 |
10 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Android/Resources/mipmap-anydpi-v26/icon.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Android/Resources/mipmap-anydpi-v26/icon_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Android/Resources/mipmap-hdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.Android/Resources/mipmap-hdpi/icon.png
--------------------------------------------------------------------------------
/CatTrackerDemo.Android/Resources/mipmap-hdpi/launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.Android/Resources/mipmap-hdpi/launcher_foreground.png
--------------------------------------------------------------------------------
/CatTrackerDemo.Android/Resources/mipmap-mdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.Android/Resources/mipmap-mdpi/icon.png
--------------------------------------------------------------------------------
/CatTrackerDemo.Android/Resources/mipmap-mdpi/launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.Android/Resources/mipmap-mdpi/launcher_foreground.png
--------------------------------------------------------------------------------
/CatTrackerDemo.Android/Resources/mipmap-xhdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.Android/Resources/mipmap-xhdpi/icon.png
--------------------------------------------------------------------------------
/CatTrackerDemo.Android/Resources/mipmap-xhdpi/launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.Android/Resources/mipmap-xhdpi/launcher_foreground.png
--------------------------------------------------------------------------------
/CatTrackerDemo.Android/Resources/mipmap-xxhdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.Android/Resources/mipmap-xxhdpi/icon.png
--------------------------------------------------------------------------------
/CatTrackerDemo.Android/Resources/mipmap-xxhdpi/launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.Android/Resources/mipmap-xxhdpi/launcher_foreground.png
--------------------------------------------------------------------------------
/CatTrackerDemo.Android/Resources/mipmap-xxxhdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.Android/Resources/mipmap-xxxhdpi/icon.png
--------------------------------------------------------------------------------
/CatTrackerDemo.Android/Resources/mipmap-xxxhdpi/launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.Android/Resources/mipmap-xxxhdpi/launcher_foreground.png
--------------------------------------------------------------------------------
/CatTrackerDemo.Android/Resources/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #FFFFFF
4 | #3F51B5
5 | #303F9F
6 | #FF4081
7 |
8 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Android/Resources/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
26 |
27 |
30 |
31 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Android/wwwroot/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | An unhandled error has occurred.
18 |
Reload
19 |
🗙
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Web/App.razor:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Sorry, there's nothing at this address.
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Web/CatTrackerDemo.Web.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netcoreapp3.1
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Web/Data/WeatherForecast.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace CatTrackerDemo.Web.Data
4 | {
5 | public class WeatherForecast
6 | {
7 | public DateTime Date { get; set; }
8 |
9 | public int TemperatureC { get; set; }
10 |
11 | public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
12 |
13 | public string Summary { get; set; }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Web/Data/WeatherForecastService.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Linq;
3 | using System.Threading.Tasks;
4 |
5 | namespace CatTrackerDemo.Web.Data
6 | {
7 | public class WeatherForecastService
8 | {
9 | private static readonly string[] Summaries = new[]
10 | {
11 | "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
12 | };
13 |
14 | public Task GetForecastAsync(DateTime startDate)
15 | {
16 | var rng = new Random();
17 | return Task.FromResult(Enumerable.Range(1, 5).Select(index => new WeatherForecast
18 | {
19 | Date = startDate.AddDays(index),
20 | TemperatureC = rng.Next(-20, 55),
21 | Summary = Summaries[rng.Next(Summaries.Length)]
22 | }).ToArray());
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Web/Pages/About.razor:
--------------------------------------------------------------------------------
1 | @page "/about"
2 |
3 | About Cat Tracker
4 |
5 | This app is for tracking cats.
6 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Web/Pages/Error.cshtml:
--------------------------------------------------------------------------------
1 | @page
2 |
3 |
4 | Error.
5 | An error occurred while processing your request.
6 |
7 | Development Mode
8 |
9 | Swapping to Development environment will display more detailed information about the error that occurred.
10 |
11 |
12 | The Development environment shouldn't be enabled for deployed applications.
13 | It can result in displaying sensitive information from exceptions to end users.
14 | For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development
15 | and restarting the app.
16 |
17 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Web/Pages/Index.razor:
--------------------------------------------------------------------------------
1 | @page "/"
2 |
3 | @if (resultsToShow == null)
4 | {
5 |
6 | }
7 | else
8 | {
9 |
10 | resultsToShow = null">Track again
11 |
12 |
13 | }
14 |
15 | @code
16 | {
17 | IList resultsToShow;
18 |
19 | private void OnTrackComplete(IList results)
20 | {
21 | resultsToShow = results;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Web/Pages/TrackResults.razor:
--------------------------------------------------------------------------------
1 | Tracker results
2 |
3 | @if (Results.Any())
4 | {
5 |
6 |
7 |
8 | Picture
9 | Name
10 | Breed
11 | Color
12 | Distance
13 |
14 |
15 |
16 | @foreach (var result in Results)
17 | {
18 |
19 |
20 | @result.Name
21 | @result.Breed
22 | @result.Color
23 | @(result.Distance.ToString("#.##"))km
24 |
25 | }
26 |
27 |
28 | }
29 | else
30 | {
31 |
32 | Sorry, no cats match.
33 |
34 | }
35 |
36 | @code {
37 | [Parameter]
38 | public IList Results { get; set; }
39 | }
40 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Web/Pages/_Host.cshtml:
--------------------------------------------------------------------------------
1 | @page "/"
2 | @namespace CatTrackerDemo.Web.Pages
3 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
4 | @{
5 | Layout = null;
6 | }
7 |
8 |
9 |
10 |
11 |
12 |
13 | CatTrackerDemo.Web
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | An error has occurred. This application may no longer respond until reloaded.
27 |
28 |
29 | An unhandled exception has occurred. See browser dev tools for details.
30 |
31 |
Reload
32 |
🗙
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Web/Program.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.AspNetCore;
2 | using Microsoft.AspNetCore.Hosting;
3 | using Microsoft.Extensions.Configuration;
4 | using Microsoft.Extensions.Hosting;
5 | using Microsoft.Extensions.Logging;
6 | using System;
7 | using System.Collections.Generic;
8 | using System.IO;
9 | using System.Linq;
10 | using System.Threading.Tasks;
11 |
12 | namespace CatTrackerDemo.Web
13 | {
14 | public class Program
15 | {
16 | public static void Main(string[] args)
17 | {
18 | CreateHostBuilder(args).Build().Run();
19 | }
20 |
21 | public static IHostBuilder CreateHostBuilder(string[] args) =>
22 | Host.CreateDefaultBuilder(args)
23 | .ConfigureWebHostDefaults(webBuilder =>
24 | {
25 | webBuilder.UseStartup();
26 | });
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Web/Properties/launchSettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "iisSettings": {
3 | "windowsAuthentication": false,
4 | "anonymousAuthentication": true,
5 | "iisExpress": {
6 | "applicationUrl": "http://localhost:53909",
7 | "sslPort": 44339
8 | }
9 | },
10 | "profiles": {
11 | "IIS Express": {
12 | "commandName": "IISExpress",
13 | "launchBrowser": true,
14 | "environmentVariables": {
15 | "ASPNETCORE_ENVIRONMENT": "Development"
16 | }
17 | },
18 | "CatTrackerDemo.Web": {
19 | "commandName": "Project",
20 | "launchBrowser": true,
21 | "applicationUrl": "https://localhost:5001;http://localhost:5000",
22 | "environmentVariables": {
23 | "ASPNETCORE_ENVIRONMENT": "Development"
24 | }
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Web/Shared/MainLayout.razor:
--------------------------------------------------------------------------------
1 | @inherits LayoutComponentBase
2 |
3 |
6 |
7 |
8 |
11 |
12 |
13 | @Body
14 |
15 |
16 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Web/Shared/NavMenu.razor:
--------------------------------------------------------------------------------
1 |
7 |
8 |
22 |
23 | @code {
24 | private bool collapseNavMenu = true;
25 |
26 | private string NavMenuCssClass => collapseNavMenu ? "collapse" : null;
27 |
28 | private void ToggleNavMenu()
29 | {
30 | collapseNavMenu = !collapseNavMenu;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Web/Startup.cs:
--------------------------------------------------------------------------------
1 | using CatTrackerDemo.Web.Data;
2 | using Microsoft.AspNetCore.Builder;
3 | using Microsoft.AspNetCore.Components;
4 | using Microsoft.AspNetCore.Hosting;
5 | using Microsoft.AspNetCore.HttpsPolicy;
6 | using Microsoft.Extensions.Configuration;
7 | using Microsoft.Extensions.DependencyInjection;
8 | using Microsoft.Extensions.Hosting;
9 | using System;
10 | using System.Collections.Generic;
11 | using System.Linq;
12 | using System.Threading.Tasks;
13 |
14 | namespace CatTrackerDemo.Web
15 | {
16 | public class Startup
17 | {
18 | public Startup(IConfiguration configuration)
19 | {
20 | Configuration = configuration;
21 | }
22 |
23 | public IConfiguration Configuration { get; }
24 |
25 | // This method gets called by the runtime. Use this method to add services to the container.
26 | // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
27 | public void ConfigureServices(IServiceCollection services)
28 | {
29 | services.AddRazorPages();
30 | services.AddServerSideBlazor();
31 | services.AddSingleton();
32 | }
33 |
34 | // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
35 | public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
36 | {
37 | if (env.IsDevelopment())
38 | {
39 | app.UseDeveloperExceptionPage();
40 | }
41 | else
42 | {
43 | app.UseExceptionHandler("/Error");
44 | // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
45 | app.UseHsts();
46 | }
47 |
48 | app.UseHttpsRedirection();
49 | app.UseStaticFiles();
50 |
51 | app.UseRouting();
52 |
53 | app.UseEndpoints(endpoints =>
54 | {
55 | endpoints.MapBlazorHub();
56 | endpoints.MapFallbackToPage("/_Host");
57 | });
58 | }
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Web/_Imports.razor:
--------------------------------------------------------------------------------
1 | @using System.Net.Http
2 | @using Microsoft.AspNetCore.Authorization
3 | @using Microsoft.AspNetCore.Components.Authorization
4 | @using Microsoft.AspNetCore.Components.Forms
5 | @using Microsoft.AspNetCore.Components.Routing
6 | @using Microsoft.AspNetCore.Components.Web
7 | @using Microsoft.JSInterop
8 | @using CatTrackerDemo.Web
9 | @using CatTrackerDemo.Web.Shared
10 | @using CatTrackerWebUILibrary
11 | @using CatTrackerWebUILibrary.Models
12 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Web/appsettings.Development.json:
--------------------------------------------------------------------------------
1 | {
2 | "DetailedErrors": true,
3 | "Logging": {
4 | "LogLevel": {
5 | "Default": "Information",
6 | "Microsoft": "Warning",
7 | "Microsoft.Hosting.Lifetime": "Information"
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Web/appsettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "Logging": {
3 | "LogLevel": {
4 | "Default": "Information",
5 | "Microsoft": "Warning",
6 | "Microsoft.Hosting.Lifetime": "Information"
7 | }
8 | },
9 | "AllowedHosts": "*"
10 | }
11 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Web/wwwroot/css/open-iconic/FONT-LICENSE:
--------------------------------------------------------------------------------
1 | SIL OPEN FONT LICENSE Version 1.1
2 |
3 | Copyright (c) 2014 Waybury
4 |
5 | PREAMBLE
6 | The goals of the Open Font License (OFL) are to stimulate worldwide
7 | development of collaborative font projects, to support the font creation
8 | efforts of academic and linguistic communities, and to provide a free and
9 | open framework in which fonts may be shared and improved in partnership
10 | with others.
11 |
12 | The OFL allows the licensed fonts to be used, studied, modified and
13 | redistributed freely as long as they are not sold by themselves. The
14 | fonts, including any derivative works, can be bundled, embedded,
15 | redistributed and/or sold with any software provided that any reserved
16 | names are not used by derivative works. The fonts and derivatives,
17 | however, cannot be released under any other type of license. The
18 | requirement for fonts to remain under this license does not apply
19 | to any document created using the fonts or their derivatives.
20 |
21 | DEFINITIONS
22 | "Font Software" refers to the set of files released by the Copyright
23 | Holder(s) under this license and clearly marked as such. This may
24 | include source files, build scripts and documentation.
25 |
26 | "Reserved Font Name" refers to any names specified as such after the
27 | copyright statement(s).
28 |
29 | "Original Version" refers to the collection of Font Software components as
30 | distributed by the Copyright Holder(s).
31 |
32 | "Modified Version" refers to any derivative made by adding to, deleting,
33 | or substituting -- in part or in whole -- any of the components of the
34 | Original Version, by changing formats or by porting the Font Software to a
35 | new environment.
36 |
37 | "Author" refers to any designer, engineer, programmer, technical
38 | writer or other person who contributed to the Font Software.
39 |
40 | PERMISSION & CONDITIONS
41 | Permission is hereby granted, free of charge, to any person obtaining
42 | a copy of the Font Software, to use, study, copy, merge, embed, modify,
43 | redistribute, and sell modified and unmodified copies of the Font
44 | Software, subject to the following conditions:
45 |
46 | 1) Neither the Font Software nor any of its individual components,
47 | in Original or Modified Versions, may be sold by itself.
48 |
49 | 2) Original or Modified Versions of the Font Software may be bundled,
50 | redistributed and/or sold with any software, provided that each copy
51 | contains the above copyright notice and this license. These can be
52 | included either as stand-alone text files, human-readable headers or
53 | in the appropriate machine-readable metadata fields within text or
54 | binary files as long as those fields can be easily viewed by the user.
55 |
56 | 3) No Modified Version of the Font Software may use the Reserved Font
57 | Name(s) unless explicit written permission is granted by the corresponding
58 | Copyright Holder. This restriction only applies to the primary font name as
59 | presented to the users.
60 |
61 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
62 | Software shall not be used to promote, endorse or advertise any
63 | Modified Version, except to acknowledge the contribution(s) of the
64 | Copyright Holder(s) and the Author(s) or with their explicit written
65 | permission.
66 |
67 | 5) The Font Software, modified or unmodified, in part or in whole,
68 | must be distributed entirely under this license, and must not be
69 | distributed under any other license. The requirement for fonts to
70 | remain under this license does not apply to any document created
71 | using the Font Software.
72 |
73 | TERMINATION
74 | This license becomes null and void if any of the above conditions are
75 | not met.
76 |
77 | DISCLAIMER
78 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
79 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
80 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
81 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
82 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
83 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
84 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
85 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
86 | OTHER DEALINGS IN THE FONT SOFTWARE.
87 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Web/wwwroot/css/open-iconic/ICON-LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2014 Waybury
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
--------------------------------------------------------------------------------
/CatTrackerDemo.Web/wwwroot/css/open-iconic/README.md:
--------------------------------------------------------------------------------
1 | [Open Iconic v1.1.1](http://useiconic.com/open)
2 | ===========
3 |
4 | ### Open Iconic is the open source sibling of [Iconic](http://useiconic.com). It is a hyper-legible collection of 223 icons with a tiny footprint—ready to use with Bootstrap and Foundation. [View the collection](http://useiconic.com/open#icons)
5 |
6 |
7 |
8 | ## What's in Open Iconic?
9 |
10 | * 223 icons designed to be legible down to 8 pixels
11 | * Super-light SVG files - 61.8 for the entire set
12 | * SVG sprite—the modern replacement for icon fonts
13 | * Webfont (EOT, OTF, SVG, TTF, WOFF), PNG and WebP formats
14 | * Webfont stylesheets (including versions for Bootstrap and Foundation) in CSS, LESS, SCSS and Stylus formats
15 | * PNG and WebP raster images in 8px, 16px, 24px, 32px, 48px and 64px.
16 |
17 |
18 | ## Getting Started
19 |
20 | #### For code samples and everything else you need to get started with Open Iconic, check out our [Icons](http://useiconic.com/open#icons) and [Reference](http://useiconic.com/open#reference) sections.
21 |
22 | ### General Usage
23 |
24 | #### Using Open Iconic's SVGs
25 |
26 | We like SVGs and we think they're the way to display icons on the web. Since Open Iconic are just basic SVGs, we suggest you display them like you would any other image (don't forget the `alt` attribute).
27 |
28 | ```
29 |
30 | ```
31 |
32 | #### Using Open Iconic's SVG Sprite
33 |
34 | Open Iconic also comes in a SVG sprite which allows you to display all the icons in the set with a single request. It's like an icon font, without being a hack.
35 |
36 | Adding an icon from an SVG sprite is a little different than what you're used to, but it's still a piece of cake. *Tip: To make your icons easily style able, we suggest adding a general class to the* `` *tag and a unique class name for each different icon in the* `` *tag.*
37 |
38 | ```
39 |
40 |
41 |
42 | ```
43 |
44 | Sizing icons only needs basic CSS. All the icons are in a square format, so just set the `` tag with equal width and height dimensions.
45 |
46 | ```
47 | .icon {
48 | width: 16px;
49 | height: 16px;
50 | }
51 | ```
52 |
53 | Coloring icons is even easier. All you need to do is set the `fill` rule on the `` tag.
54 |
55 | ```
56 | .icon-account-login {
57 | fill: #f00;
58 | }
59 | ```
60 |
61 | To learn more about SVG Sprites, read [Chris Coyier's guide](http://css-tricks.com/svg-sprites-use-better-icon-fonts/).
62 |
63 | #### Using Open Iconic's Icon Font...
64 |
65 |
66 | ##### …with Bootstrap
67 |
68 | You can find our Bootstrap stylesheets in `font/css/open-iconic-bootstrap.{css, less, scss, styl}`
69 |
70 |
71 | ```
72 |
73 | ```
74 |
75 |
76 | ```
77 |
78 | ```
79 |
80 | ##### …with Foundation
81 |
82 | You can find our Foundation stylesheets in `font/css/open-iconic-foundation.{css, less, scss, styl}`
83 |
84 | ```
85 |
86 | ```
87 |
88 |
89 | ```
90 |
91 | ```
92 |
93 | ##### …on its own
94 |
95 | You can find our default stylesheets in `font/css/open-iconic.{css, less, scss, styl}`
96 |
97 | ```
98 |
99 | ```
100 |
101 | ```
102 |
103 | ```
104 |
105 |
106 | ## License
107 |
108 | ### Icons
109 |
110 | All code (including SVG markup) is under the [MIT License](http://opensource.org/licenses/MIT).
111 |
112 | ### Fonts
113 |
114 | All fonts are under the [SIL Licensed](http://scripts.sil.org/cms/scripts/page.php?item_id=OFL_web).
115 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Web/wwwroot/css/open-iconic/font/css/open-iconic-bootstrap.min.css:
--------------------------------------------------------------------------------
1 | @font-face{font-family:Icons;src:url(../fonts/open-iconic.eot);src:url(../fonts/open-iconic.eot?#iconic-sm) format('embedded-opentype'),url(../fonts/open-iconic.woff) format('woff'),url(../fonts/open-iconic.ttf) format('truetype'),url(../fonts/open-iconic.otf) format('opentype'),url(../fonts/open-iconic.svg#iconic-sm) format('svg');font-weight:400;font-style:normal}.oi{position:relative;top:1px;display:inline-block;speak:none;font-family:Icons;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.oi:empty:before{width:1em;text-align:center;box-sizing:content-box}.oi.oi-align-center:before{text-align:center}.oi.oi-align-left:before{text-align:left}.oi.oi-align-right:before{text-align:right}.oi.oi-flip-horizontal:before{-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.oi.oi-flip-vertical:before{-webkit-transform:scale(1,-1);-ms-transform:scale(-1,1);transform:scale(1,-1)}.oi.oi-flip-horizontal-vertical:before{-webkit-transform:scale(-1,-1);-ms-transform:scale(-1,1);transform:scale(-1,-1)}.oi-account-login:before{content:'\e000'}.oi-account-logout:before{content:'\e001'}.oi-action-redo:before{content:'\e002'}.oi-action-undo:before{content:'\e003'}.oi-align-center:before{content:'\e004'}.oi-align-left:before{content:'\e005'}.oi-align-right:before{content:'\e006'}.oi-aperture:before{content:'\e007'}.oi-arrow-bottom:before{content:'\e008'}.oi-arrow-circle-bottom:before{content:'\e009'}.oi-arrow-circle-left:before{content:'\e00a'}.oi-arrow-circle-right:before{content:'\e00b'}.oi-arrow-circle-top:before{content:'\e00c'}.oi-arrow-left:before{content:'\e00d'}.oi-arrow-right:before{content:'\e00e'}.oi-arrow-thick-bottom:before{content:'\e00f'}.oi-arrow-thick-left:before{content:'\e010'}.oi-arrow-thick-right:before{content:'\e011'}.oi-arrow-thick-top:before{content:'\e012'}.oi-arrow-top:before{content:'\e013'}.oi-audio-spectrum:before{content:'\e014'}.oi-audio:before{content:'\e015'}.oi-badge:before{content:'\e016'}.oi-ban:before{content:'\e017'}.oi-bar-chart:before{content:'\e018'}.oi-basket:before{content:'\e019'}.oi-battery-empty:before{content:'\e01a'}.oi-battery-full:before{content:'\e01b'}.oi-beaker:before{content:'\e01c'}.oi-bell:before{content:'\e01d'}.oi-bluetooth:before{content:'\e01e'}.oi-bold:before{content:'\e01f'}.oi-bolt:before{content:'\e020'}.oi-book:before{content:'\e021'}.oi-bookmark:before{content:'\e022'}.oi-box:before{content:'\e023'}.oi-briefcase:before{content:'\e024'}.oi-british-pound:before{content:'\e025'}.oi-browser:before{content:'\e026'}.oi-brush:before{content:'\e027'}.oi-bug:before{content:'\e028'}.oi-bullhorn:before{content:'\e029'}.oi-calculator:before{content:'\e02a'}.oi-calendar:before{content:'\e02b'}.oi-camera-slr:before{content:'\e02c'}.oi-caret-bottom:before{content:'\e02d'}.oi-caret-left:before{content:'\e02e'}.oi-caret-right:before{content:'\e02f'}.oi-caret-top:before{content:'\e030'}.oi-cart:before{content:'\e031'}.oi-chat:before{content:'\e032'}.oi-check:before{content:'\e033'}.oi-chevron-bottom:before{content:'\e034'}.oi-chevron-left:before{content:'\e035'}.oi-chevron-right:before{content:'\e036'}.oi-chevron-top:before{content:'\e037'}.oi-circle-check:before{content:'\e038'}.oi-circle-x:before{content:'\e039'}.oi-clipboard:before{content:'\e03a'}.oi-clock:before{content:'\e03b'}.oi-cloud-download:before{content:'\e03c'}.oi-cloud-upload:before{content:'\e03d'}.oi-cloud:before{content:'\e03e'}.oi-cloudy:before{content:'\e03f'}.oi-code:before{content:'\e040'}.oi-cog:before{content:'\e041'}.oi-collapse-down:before{content:'\e042'}.oi-collapse-left:before{content:'\e043'}.oi-collapse-right:before{content:'\e044'}.oi-collapse-up:before{content:'\e045'}.oi-command:before{content:'\e046'}.oi-comment-square:before{content:'\e047'}.oi-compass:before{content:'\e048'}.oi-contrast:before{content:'\e049'}.oi-copywriting:before{content:'\e04a'}.oi-credit-card:before{content:'\e04b'}.oi-crop:before{content:'\e04c'}.oi-dashboard:before{content:'\e04d'}.oi-data-transfer-download:before{content:'\e04e'}.oi-data-transfer-upload:before{content:'\e04f'}.oi-delete:before{content:'\e050'}.oi-dial:before{content:'\e051'}.oi-document:before{content:'\e052'}.oi-dollar:before{content:'\e053'}.oi-double-quote-sans-left:before{content:'\e054'}.oi-double-quote-sans-right:before{content:'\e055'}.oi-double-quote-serif-left:before{content:'\e056'}.oi-double-quote-serif-right:before{content:'\e057'}.oi-droplet:before{content:'\e058'}.oi-eject:before{content:'\e059'}.oi-elevator:before{content:'\e05a'}.oi-ellipses:before{content:'\e05b'}.oi-envelope-closed:before{content:'\e05c'}.oi-envelope-open:before{content:'\e05d'}.oi-euro:before{content:'\e05e'}.oi-excerpt:before{content:'\e05f'}.oi-expand-down:before{content:'\e060'}.oi-expand-left:before{content:'\e061'}.oi-expand-right:before{content:'\e062'}.oi-expand-up:before{content:'\e063'}.oi-external-link:before{content:'\e064'}.oi-eye:before{content:'\e065'}.oi-eyedropper:before{content:'\e066'}.oi-file:before{content:'\e067'}.oi-fire:before{content:'\e068'}.oi-flag:before{content:'\e069'}.oi-flash:before{content:'\e06a'}.oi-folder:before{content:'\e06b'}.oi-fork:before{content:'\e06c'}.oi-fullscreen-enter:before{content:'\e06d'}.oi-fullscreen-exit:before{content:'\e06e'}.oi-globe:before{content:'\e06f'}.oi-graph:before{content:'\e070'}.oi-grid-four-up:before{content:'\e071'}.oi-grid-three-up:before{content:'\e072'}.oi-grid-two-up:before{content:'\e073'}.oi-hard-drive:before{content:'\e074'}.oi-header:before{content:'\e075'}.oi-headphones:before{content:'\e076'}.oi-heart:before{content:'\e077'}.oi-home:before{content:'\e078'}.oi-image:before{content:'\e079'}.oi-inbox:before{content:'\e07a'}.oi-infinity:before{content:'\e07b'}.oi-info:before{content:'\e07c'}.oi-italic:before{content:'\e07d'}.oi-justify-center:before{content:'\e07e'}.oi-justify-left:before{content:'\e07f'}.oi-justify-right:before{content:'\e080'}.oi-key:before{content:'\e081'}.oi-laptop:before{content:'\e082'}.oi-layers:before{content:'\e083'}.oi-lightbulb:before{content:'\e084'}.oi-link-broken:before{content:'\e085'}.oi-link-intact:before{content:'\e086'}.oi-list-rich:before{content:'\e087'}.oi-list:before{content:'\e088'}.oi-location:before{content:'\e089'}.oi-lock-locked:before{content:'\e08a'}.oi-lock-unlocked:before{content:'\e08b'}.oi-loop-circular:before{content:'\e08c'}.oi-loop-square:before{content:'\e08d'}.oi-loop:before{content:'\e08e'}.oi-magnifying-glass:before{content:'\e08f'}.oi-map-marker:before{content:'\e090'}.oi-map:before{content:'\e091'}.oi-media-pause:before{content:'\e092'}.oi-media-play:before{content:'\e093'}.oi-media-record:before{content:'\e094'}.oi-media-skip-backward:before{content:'\e095'}.oi-media-skip-forward:before{content:'\e096'}.oi-media-step-backward:before{content:'\e097'}.oi-media-step-forward:before{content:'\e098'}.oi-media-stop:before{content:'\e099'}.oi-medical-cross:before{content:'\e09a'}.oi-menu:before{content:'\e09b'}.oi-microphone:before{content:'\e09c'}.oi-minus:before{content:'\e09d'}.oi-monitor:before{content:'\e09e'}.oi-moon:before{content:'\e09f'}.oi-move:before{content:'\e0a0'}.oi-musical-note:before{content:'\e0a1'}.oi-paperclip:before{content:'\e0a2'}.oi-pencil:before{content:'\e0a3'}.oi-people:before{content:'\e0a4'}.oi-person:before{content:'\e0a5'}.oi-phone:before{content:'\e0a6'}.oi-pie-chart:before{content:'\e0a7'}.oi-pin:before{content:'\e0a8'}.oi-play-circle:before{content:'\e0a9'}.oi-plus:before{content:'\e0aa'}.oi-power-standby:before{content:'\e0ab'}.oi-print:before{content:'\e0ac'}.oi-project:before{content:'\e0ad'}.oi-pulse:before{content:'\e0ae'}.oi-puzzle-piece:before{content:'\e0af'}.oi-question-mark:before{content:'\e0b0'}.oi-rain:before{content:'\e0b1'}.oi-random:before{content:'\e0b2'}.oi-reload:before{content:'\e0b3'}.oi-resize-both:before{content:'\e0b4'}.oi-resize-height:before{content:'\e0b5'}.oi-resize-width:before{content:'\e0b6'}.oi-rss-alt:before{content:'\e0b7'}.oi-rss:before{content:'\e0b8'}.oi-script:before{content:'\e0b9'}.oi-share-boxed:before{content:'\e0ba'}.oi-share:before{content:'\e0bb'}.oi-shield:before{content:'\e0bc'}.oi-signal:before{content:'\e0bd'}.oi-signpost:before{content:'\e0be'}.oi-sort-ascending:before{content:'\e0bf'}.oi-sort-descending:before{content:'\e0c0'}.oi-spreadsheet:before{content:'\e0c1'}.oi-star:before{content:'\e0c2'}.oi-sun:before{content:'\e0c3'}.oi-tablet:before{content:'\e0c4'}.oi-tag:before{content:'\e0c5'}.oi-tags:before{content:'\e0c6'}.oi-target:before{content:'\e0c7'}.oi-task:before{content:'\e0c8'}.oi-terminal:before{content:'\e0c9'}.oi-text:before{content:'\e0ca'}.oi-thumb-down:before{content:'\e0cb'}.oi-thumb-up:before{content:'\e0cc'}.oi-timer:before{content:'\e0cd'}.oi-transfer:before{content:'\e0ce'}.oi-trash:before{content:'\e0cf'}.oi-underline:before{content:'\e0d0'}.oi-vertical-align-bottom:before{content:'\e0d1'}.oi-vertical-align-center:before{content:'\e0d2'}.oi-vertical-align-top:before{content:'\e0d3'}.oi-video:before{content:'\e0d4'}.oi-volume-high:before{content:'\e0d5'}.oi-volume-low:before{content:'\e0d6'}.oi-volume-off:before{content:'\e0d7'}.oi-warning:before{content:'\e0d8'}.oi-wifi:before{content:'\e0d9'}.oi-wrench:before{content:'\e0da'}.oi-x:before{content:'\e0db'}.oi-yen:before{content:'\e0dc'}.oi-zoom-in:before{content:'\e0dd'}.oi-zoom-out:before{content:'\e0de'}
--------------------------------------------------------------------------------
/CatTrackerDemo.Web/wwwroot/css/open-iconic/font/fonts/open-iconic.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.Web/wwwroot/css/open-iconic/font/fonts/open-iconic.eot
--------------------------------------------------------------------------------
/CatTrackerDemo.Web/wwwroot/css/open-iconic/font/fonts/open-iconic.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.Web/wwwroot/css/open-iconic/font/fonts/open-iconic.otf
--------------------------------------------------------------------------------
/CatTrackerDemo.Web/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.Web/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf
--------------------------------------------------------------------------------
/CatTrackerDemo.Web/wwwroot/css/open-iconic/font/fonts/open-iconic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.Web/wwwroot/css/open-iconic/font/fonts/open-iconic.woff
--------------------------------------------------------------------------------
/CatTrackerDemo.Web/wwwroot/css/site.css:
--------------------------------------------------------------------------------
1 | @import url('open-iconic/font/css/open-iconic-bootstrap.min.css');
2 |
3 | html, body {
4 | font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
5 | }
6 |
7 | a, .btn-link {
8 | color: #0366d6;
9 | }
10 |
11 | .btn-primary {
12 | color: #fff;
13 | background-color: #1b6ec2;
14 | border-color: #1861ac;
15 | }
16 |
17 | app {
18 | position: relative;
19 | display: flex;
20 | flex-direction: column;
21 | }
22 |
23 | .top-row {
24 | height: 3.5rem;
25 | display: flex;
26 | align-items: center;
27 | }
28 |
29 | .main {
30 | flex: 1;
31 | }
32 |
33 | .main .top-row {
34 | background-color: #f7f7f7;
35 | border-bottom: 1px solid #d6d5d5;
36 | justify-content: flex-end;
37 | }
38 |
39 | .main .top-row > a, .main .top-row .btn-link {
40 | white-space: nowrap;
41 | margin-left: 1.5rem;
42 | }
43 |
44 | .main .top-row a:first-child {
45 | overflow: hidden;
46 | text-overflow: ellipsis;
47 | }
48 |
49 | .sidebar {
50 | background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);
51 | }
52 |
53 | .sidebar .top-row {
54 | background-color: rgba(0,0,0,0.4);
55 | }
56 |
57 | .sidebar .navbar-brand {
58 | font-size: 1.1rem;
59 | }
60 |
61 | .sidebar .oi {
62 | width: 2rem;
63 | font-size: 1.1rem;
64 | vertical-align: text-top;
65 | top: -2px;
66 | }
67 |
68 | .sidebar .nav-item {
69 | font-size: 0.9rem;
70 | padding-bottom: 0.5rem;
71 | }
72 |
73 | .sidebar .nav-item:first-of-type {
74 | padding-top: 1rem;
75 | }
76 |
77 | .sidebar .nav-item:last-of-type {
78 | padding-bottom: 1rem;
79 | }
80 |
81 | .sidebar .nav-item a {
82 | color: #d7d7d7;
83 | border-radius: 4px;
84 | height: 3rem;
85 | display: flex;
86 | align-items: center;
87 | line-height: 3rem;
88 | }
89 |
90 | .sidebar .nav-item a.active {
91 | background-color: rgba(255,255,255,0.25);
92 | color: white;
93 | }
94 |
95 | .sidebar .nav-item a:hover {
96 | background-color: rgba(255,255,255,0.1);
97 | color: white;
98 | }
99 |
100 | .content {
101 | padding-top: 1.1rem;
102 | }
103 |
104 | .navbar-toggler {
105 | background-color: rgba(255, 255, 255, 0.1);
106 | }
107 |
108 | .valid.modified:not([type=checkbox]) {
109 | outline: 1px solid #26b050;
110 | }
111 |
112 | .invalid {
113 | outline: 1px solid red;
114 | }
115 |
116 | .validation-message {
117 | color: red;
118 | }
119 |
120 | #blazor-error-ui {
121 | background: lightyellow;
122 | bottom: 0;
123 | box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
124 | display: none;
125 | left: 0;
126 | padding: 0.6rem 1.25rem 0.7rem 1.25rem;
127 | position: fixed;
128 | width: 100%;
129 | z-index: 1000;
130 | }
131 |
132 | #blazor-error-ui .dismiss {
133 | cursor: pointer;
134 | position: absolute;
135 | right: 0.75rem;
136 | top: 0.5rem;
137 | }
138 |
139 | @media (max-width: 767.98px) {
140 | .main .top-row:not(.auth) {
141 | display: none;
142 | }
143 |
144 | .main .top-row.auth {
145 | justify-content: space-between;
146 | }
147 |
148 | .main .top-row a, .main .top-row .btn-link {
149 | margin-left: 0;
150 | }
151 | }
152 |
153 | @media (min-width: 768px) {
154 | app {
155 | flex-direction: row;
156 | }
157 |
158 | .sidebar {
159 | width: 250px;
160 | height: 100vh;
161 | position: sticky;
162 | top: 0;
163 | }
164 |
165 | .main .top-row {
166 | position: sticky;
167 | top: 0;
168 | }
169 |
170 | .main > div {
171 | padding-left: 2rem !important;
172 | padding-right: 1.5rem !important;
173 | }
174 |
175 | .navbar-toggler {
176 | display: none;
177 | }
178 |
179 | .sidebar .collapse {
180 | /* Never collapse the sidebar for wide screens */
181 | display: block;
182 | }
183 | }
184 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Web/wwwroot/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.Web/wwwroot/favicon.ico
--------------------------------------------------------------------------------
/CatTrackerDemo.Windows/App.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.MobileBlazorBindings.WebView.Windows;
2 | using System;
3 | using Xamarin.Forms;
4 | using Xamarin.Forms.Platform.WPF;
5 |
6 | namespace CatTrackerDemo.Windows
7 | {
8 | public class MainWindow : FormsApplicationPage
9 | {
10 | [STAThread]
11 | public static void Main()
12 | {
13 | var app = new System.Windows.Application();
14 | app.Run(new MainWindow() { Title = "Cat tracker" });
15 | }
16 |
17 | public MainWindow()
18 | {
19 | Forms.Init();
20 | BlazorHybridWindows.Init();
21 | LoadApplication(new App());
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Windows/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Windows;
2 |
3 | [assembly: ThemeInfo(
4 | ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
5 | //(used if a resource is not found in the page,
6 | // or application resource dictionaries)
7 | ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
8 | //(used if a resource is not found in the page,
9 | // app, or any theme specific resource dictionaries)
10 | )]
11 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Windows/CatTrackerDemo.Windows.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | WinExe
5 | netcoreapp3.1
6 | true
7 | $(NoWarn);NU1701
8 | app.manifest
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | PreserveNewest
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Windows/app.manifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
52 |
53 |
54 |
55 | true
56 |
57 | PerMonitorV2
58 |
59 |
60 |
61 |
62 |
63 |
77 |
78 |
79 |
--------------------------------------------------------------------------------
/CatTrackerDemo.Windows/wwwroot/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | An unhandled error has occurred.
18 |
Reload
19 |
🗙
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/CatTrackerDemo.iOS/AppDelegate.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using Xamarin.Forms;
5 |
6 | using Foundation;
7 | using UIKit;
8 |
9 | namespace CatTrackerDemo.iOS
10 | {
11 | // The UIApplicationDelegate for the application. This class is responsible for launching the
12 | // User Interface of the application, as well as listening (and optionally responding) to
13 | // application events from iOS.
14 | [Register("AppDelegate")]
15 | public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
16 | {
17 | //
18 | // This method is invoked when the application has loaded and is ready to run. In this
19 | // method you should instantiate the window, load the UI into it and then make the window
20 | // visible.
21 | //
22 | // You have 17 seconds to return from this method, or iOS will terminate your application.
23 | //
24 | public override bool FinishedLaunching(UIApplication app, NSDictionary options)
25 | {
26 | global::Xamarin.Forms.Forms.Init();
27 |
28 | // For iOS, wrap inside a navigation page, otherwise the header looks wrong
29 | var formsApp = new App();
30 | formsApp.MainPage = new NavigationPage(formsApp.MainPage);
31 |
32 | LoadApplication(formsApp);
33 |
34 | return base.FinishedLaunching(app, options);
35 | }
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/CatTrackerDemo.iOS/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images": [
3 | {
4 | "scale": "2x",
5 | "size": "20x20",
6 | "idiom": "iphone",
7 | "filename": "Icon40.png"
8 | },
9 | {
10 | "scale": "3x",
11 | "size": "20x20",
12 | "idiom": "iphone",
13 | "filename": "Icon60.png"
14 | },
15 | {
16 | "scale": "2x",
17 | "size": "29x29",
18 | "idiom": "iphone",
19 | "filename": "Icon58.png"
20 | },
21 | {
22 | "scale": "3x",
23 | "size": "29x29",
24 | "idiom": "iphone",
25 | "filename": "Icon87.png"
26 | },
27 | {
28 | "scale": "2x",
29 | "size": "40x40",
30 | "idiom": "iphone",
31 | "filename": "Icon80.png"
32 | },
33 | {
34 | "scale": "3x",
35 | "size": "40x40",
36 | "idiom": "iphone",
37 | "filename": "Icon120.png"
38 | },
39 | {
40 | "scale": "2x",
41 | "size": "60x60",
42 | "idiom": "iphone",
43 | "filename": "Icon120.png"
44 | },
45 | {
46 | "scale": "3x",
47 | "size": "60x60",
48 | "idiom": "iphone",
49 | "filename": "Icon180.png"
50 | },
51 | {
52 | "scale": "1x",
53 | "size": "20x20",
54 | "idiom": "ipad",
55 | "filename": "Icon20.png"
56 | },
57 | {
58 | "scale": "2x",
59 | "size": "20x20",
60 | "idiom": "ipad",
61 | "filename": "Icon40.png"
62 | },
63 | {
64 | "scale": "1x",
65 | "size": "29x29",
66 | "idiom": "ipad",
67 | "filename": "Icon29.png"
68 | },
69 | {
70 | "scale": "2x",
71 | "size": "29x29",
72 | "idiom": "ipad",
73 | "filename": "Icon58.png"
74 | },
75 | {
76 | "scale": "1x",
77 | "size": "40x40",
78 | "idiom": "ipad",
79 | "filename": "Icon40.png"
80 | },
81 | {
82 | "scale": "2x",
83 | "size": "40x40",
84 | "idiom": "ipad",
85 | "filename": "Icon80.png"
86 | },
87 | {
88 | "scale": "1x",
89 | "size": "76x76",
90 | "idiom": "ipad",
91 | "filename": "Icon76.png"
92 | },
93 | {
94 | "scale": "2x",
95 | "size": "76x76",
96 | "idiom": "ipad",
97 | "filename": "Icon152.png"
98 | },
99 | {
100 | "scale": "2x",
101 | "size": "83.5x83.5",
102 | "idiom": "ipad",
103 | "filename": "Icon167.png"
104 | },
105 | {
106 | "scale": "1x",
107 | "size": "1024x1024",
108 | "idiom": "ios-marketing",
109 | "filename": "Icon1024.png"
110 | }
111 | ],
112 | "properties": {},
113 | "info": {
114 | "version": 1,
115 | "author": "xcode"
116 | }
117 | }
--------------------------------------------------------------------------------
/CatTrackerDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png
--------------------------------------------------------------------------------
/CatTrackerDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png
--------------------------------------------------------------------------------
/CatTrackerDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png
--------------------------------------------------------------------------------
/CatTrackerDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png
--------------------------------------------------------------------------------
/CatTrackerDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png
--------------------------------------------------------------------------------
/CatTrackerDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon20.png
--------------------------------------------------------------------------------
/CatTrackerDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png
--------------------------------------------------------------------------------
/CatTrackerDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png
--------------------------------------------------------------------------------
/CatTrackerDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png
--------------------------------------------------------------------------------
/CatTrackerDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png
--------------------------------------------------------------------------------
/CatTrackerDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png
--------------------------------------------------------------------------------
/CatTrackerDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon80.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon80.png
--------------------------------------------------------------------------------
/CatTrackerDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon87.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon87.png
--------------------------------------------------------------------------------
/CatTrackerDemo.iOS/CatTrackerDemo.iOS.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | iPhoneSimulator
6 | 8.0.30703
7 | 2.0
8 | {4D6D477E-0924-4000-BDA0-E904F5335BFF}
9 | {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
10 | {6143fdea-f3c2-4a09-aafa-6e230626515e}
11 | Exe
12 | CatTrackerDemo.iOS
13 | Resources
14 | CatTrackerDemo.iOS
15 | true
16 | NSUrlSessionHandler
17 |
18 |
19 | true
20 | full
21 | false
22 | bin\iPhoneSimulator\Debug
23 | DEBUG
24 | prompt
25 | 4
26 | x86_64
27 | None
28 | true
29 |
30 |
31 | none
32 | true
33 | bin\iPhoneSimulator\Release
34 | prompt
35 | 4
36 | None
37 | x86_64
38 |
39 |
40 | true
41 | full
42 | false
43 | bin\iPhone\Debug
44 | DEBUG
45 | prompt
46 | 4
47 | ARM64
48 | iPhone Developer
49 | true
50 | Entitlements.plist
51 | None
52 | -all
53 |
54 |
55 | none
56 | true
57 | bin\iPhone\Release
58 | prompt
59 | 4
60 | ARM64
61 | iPhone Developer
62 | Entitlements.plist
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 | false
75 |
76 |
77 | false
78 |
79 |
80 | false
81 |
82 |
83 | false
84 |
85 |
86 | false
87 |
88 |
89 | false
90 |
91 |
92 | false
93 |
94 |
95 | false
96 |
97 |
98 | false
99 |
100 |
101 | false
102 |
103 |
104 | false
105 |
106 |
107 | false
108 |
109 |
110 | false
111 |
112 |
113 | false
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 | {4C1E61E9-D7C4-4A4F-BBB4-3DD53747160C}
137 | CatTrackerDemo
138 |
139 |
140 | {03619938-8acb-493a-98fe-4edc465039a3}
141 | CatTrackerWebUILibrary
142 |
143 |
144 |
--------------------------------------------------------------------------------
/CatTrackerDemo.iOS/Entitlements.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/CatTrackerDemo.iOS/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | UIDeviceFamily
6 |
7 | 1
8 | 2
9 |
10 | UISupportedInterfaceOrientations
11 |
12 | UIInterfaceOrientationPortrait
13 | UIInterfaceOrientationLandscapeLeft
14 | UIInterfaceOrientationLandscapeRight
15 |
16 | UISupportedInterfaceOrientations~ipad
17 |
18 | UIInterfaceOrientationPortrait
19 | UIInterfaceOrientationPortraitUpsideDown
20 | UIInterfaceOrientationLandscapeLeft
21 | UIInterfaceOrientationLandscapeRight
22 |
23 | MinimumOSVersion
24 | 8.0
25 | CFBundleDisplayName
26 | CatTrackerDemo
27 | CFBundleIdentifier
28 | com.companyname
29 | CFBundleVersion
30 | 1.0
31 | UILaunchStoryboardName
32 | LaunchScreen
33 | CFBundleName
34 | CatTrackerDemo
35 | XSAppIconAssets
36 | Assets.xcassets/AppIcon.appiconset
37 |
38 |
39 |
--------------------------------------------------------------------------------
/CatTrackerDemo.iOS/Main.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using Foundation;
5 | using Microsoft.MobileBlazorBindings.WebView.iOS;
6 | using UIKit;
7 |
8 | namespace CatTrackerDemo.iOS
9 | {
10 | public class Application
11 | {
12 | // This is the main entry point of the application.
13 | static void Main(string[] args)
14 | {
15 | BlazorHybridIOS.Init();
16 |
17 | // if you want to use a different Application Delegate class from "AppDelegate"
18 | // you can specify it here.
19 | UIApplication.Main(args, null, "AppDelegate");
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/CatTrackerDemo.iOS/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("CatTrackerDemo.iOS")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("CatTrackerDemo.iOS")]
13 | [assembly: AssemblyCopyright("Copyright © 2019")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("72bdc44f-c588-44f3-b6df-9aace7daafdd")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/CatTrackerDemo.iOS/Resources/Default-568h@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.iOS/Resources/Default-568h@2x.png
--------------------------------------------------------------------------------
/CatTrackerDemo.iOS/Resources/Default-Portrait.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.iOS/Resources/Default-Portrait.png
--------------------------------------------------------------------------------
/CatTrackerDemo.iOS/Resources/Default-Portrait@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.iOS/Resources/Default-Portrait@2x.png
--------------------------------------------------------------------------------
/CatTrackerDemo.iOS/Resources/Default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.iOS/Resources/Default.png
--------------------------------------------------------------------------------
/CatTrackerDemo.iOS/Resources/Default@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.iOS/Resources/Default@2x.png
--------------------------------------------------------------------------------
/CatTrackerDemo.iOS/Resources/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/CatTrackerDemo.iOS/Resources/wwwroot/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | An unhandled error has occurred.
18 |
Reload
19 |
🗙
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/CatTrackerDemo.macOS/AppDelegate.cs:
--------------------------------------------------------------------------------
1 | using AppKit;
2 | using Foundation;
3 |
4 | namespace CatTrackerDemo.macOS
5 | {
6 | [Register("AppDelegate")]
7 | public class AppDelegate : Xamarin.Forms.Platform.MacOS.FormsApplicationDelegate
8 | {
9 | public AppDelegate()
10 | {
11 | var style = NSWindowStyle.Closable | NSWindowStyle.Resizable | NSWindowStyle.Titled;
12 | var rect = new CoreGraphics.CGRect(200, 1000, 1024, 768);
13 | MainWindow = new NSWindow(rect, style, NSBackingStore.Buffered, false)
14 | {
15 | Title = "My Application",
16 | TitleVisibility = NSWindowTitleVisibility.Visible,
17 | };
18 | }
19 |
20 | public override NSWindow MainWindow { get; }
21 |
22 | public override void DidFinishLaunching(NSNotification notification)
23 | {
24 | // Menu options to make it easy to press cmd+q to quit the app
25 | NSApplication.SharedApplication.MainMenu = MakeMainMenu();
26 |
27 | Xamarin.Forms.Forms.Init();
28 | LoadApplication(new App());
29 | base.DidFinishLaunching(notification);
30 | }
31 |
32 | public override void WillTerminate(NSNotification notification)
33 | {
34 | // Insert code here to tear down your application
35 | }
36 |
37 | private NSMenu MakeMainMenu()
38 | {
39 | // top bar app menu
40 | var menubar = new NSMenu();
41 | var appMenuItem = new NSMenuItem();
42 | menubar.AddItem(appMenuItem);
43 |
44 | var appMenu = new NSMenu();
45 | appMenuItem.Submenu = appMenu;
46 |
47 | // add separator
48 | var separator = NSMenuItem.SeparatorItem;
49 | appMenu.AddItem(separator);
50 |
51 | // add quit menu item
52 | var quitTitle = string.Format("Quit {0}", "CatTrackerDemo.macOS");
53 | var quitMenuItem = new NSMenuItem(quitTitle, "q", delegate
54 | {
55 | NSApplication.SharedApplication.Terminate(menubar);
56 | });
57 | appMenu.AddItem(quitMenuItem);
58 |
59 | return menubar;
60 | }
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/CatTrackerDemo.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png
--------------------------------------------------------------------------------
/CatTrackerDemo.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png
--------------------------------------------------------------------------------
/CatTrackerDemo.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png
--------------------------------------------------------------------------------
/CatTrackerDemo.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-16@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-16@2x.png
--------------------------------------------------------------------------------
/CatTrackerDemo.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png
--------------------------------------------------------------------------------
/CatTrackerDemo.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png
--------------------------------------------------------------------------------
/CatTrackerDemo.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png
--------------------------------------------------------------------------------
/CatTrackerDemo.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-32@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-32@2x.png
--------------------------------------------------------------------------------
/CatTrackerDemo.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png
--------------------------------------------------------------------------------
/CatTrackerDemo.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo.macOS/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png
--------------------------------------------------------------------------------
/CatTrackerDemo.macOS/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images": [
3 | {
4 | "filename": "AppIcon-16.png",
5 | "size": "16x16",
6 | "scale": "1x",
7 | "idiom": "mac"
8 | },
9 | {
10 | "filename": "AppIcon-16@2x.png",
11 | "size": "16x16",
12 | "scale": "2x",
13 | "idiom": "mac"
14 | },
15 | {
16 | "filename": "AppIcon-32.png",
17 | "size": "32x32",
18 | "scale": "1x",
19 | "idiom": "mac"
20 | },
21 | {
22 | "filename": "AppIcon-32@2x.png",
23 | "size": "32x32",
24 | "scale": "2x",
25 | "idiom": "mac"
26 | },
27 | {
28 | "filename": "AppIcon-128.png",
29 | "size": "128x128",
30 | "scale": "1x",
31 | "idiom": "mac"
32 | },
33 | {
34 | "filename": "AppIcon-128@2x.png",
35 | "size": "128x128",
36 | "scale": "2x",
37 | "idiom": "mac"
38 | },
39 | {
40 | "filename": "AppIcon-256.png",
41 | "size": "256x256",
42 | "scale": "1x",
43 | "idiom": "mac"
44 | },
45 | {
46 | "filename": "AppIcon-256@2x.png",
47 | "size": "256x256",
48 | "scale": "2x",
49 | "idiom": "mac"
50 | },
51 | {
52 | "filename": "AppIcon-512.png",
53 | "size": "512x512",
54 | "scale": "1x",
55 | "idiom": "mac"
56 | },
57 | {
58 | "filename": "AppIcon-512@2x.png",
59 | "size": "512x512",
60 | "scale": "2x",
61 | "idiom": "mac"
62 | }
63 | ],
64 | "info": {
65 | "version": 1,
66 | "author": "xcode"
67 | }
68 | }
--------------------------------------------------------------------------------
/CatTrackerDemo.macOS/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/CatTrackerDemo.macOS/CatTrackerDemo.macOS.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | AnyCPU
6 | {59F25F1A-FEFC-4705-9963-A51414059720}
7 | {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
8 | Exe
9 | CatTrackerDemo.macOS
10 | CatTrackerDemo.macOS
11 | v2.0
12 | Xamarin.Mac
13 | Resources
14 | true
15 |
16 |
17 | true
18 | full
19 | false
20 | bin\Debug
21 | DEBUG;
22 | prompt
23 | 4
24 | false
25 | Mac Developer
26 | false
27 | false
28 | false
29 | true
30 | true
31 |
32 |
33 |
34 |
35 |
36 |
37 | None
38 |
39 |
40 | pdbonly
41 | true
42 | bin\Release
43 |
44 |
45 | prompt
46 | 4
47 | false
48 | true
49 | false
50 | true
51 | true
52 | true
53 | Entitlements.plist
54 | SdkOnly
55 |
56 |
57 |
58 |
59 | None
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 | ViewController.cs
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 | {4C1E61E9-D7C4-4A4F-BBB4-3DD53747160C}
106 | CatTrackerDemo
107 |
108 |
109 | {03619938-8acb-493a-98fe-4edc465039a3}
110 | CatTrackerWebUILibrary
111 |
112 |
113 |
--------------------------------------------------------------------------------
/CatTrackerDemo.macOS/Entitlements.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/CatTrackerDemo.macOS/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleName
6 | CatTrackerDemo
7 | CFBundleIdentifier
8 | com.companyname.CatTrackerDemo.CatTrackerDemo
9 | CFBundleShortVersionString
10 | 1.0
11 | CFBundleVersion
12 | 1
13 | LSMinimumSystemVersion
14 | 10.14
15 | CFBundleDevelopmentRegion
16 | en
17 | CFBundleInfoDictionaryVersion
18 | 6.0
19 | CFBundlePackageType
20 | APPL
21 | CFBundleSignature
22 | ????
23 | NSHumanReadableCopyright
24 | ${AuthorCopyright:HtmlEncode}
25 | NSPrincipalClass
26 | NSApplication
27 | XSAppIconAssets
28 | Assets.xcassets/AppIcon.appiconset
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/CatTrackerDemo.macOS/Main.cs:
--------------------------------------------------------------------------------
1 | using AppKit;
2 | using Microsoft.MobileBlazorBindings.WebView.macOS;
3 |
4 | namespace CatTrackerDemo.macOS
5 | {
6 | internal static class MainClass
7 | {
8 | private static void Main(string[] args)
9 | {
10 | BlazorHybridMacOS.Init();
11 | NSApplication.Init();
12 | NSApplication.SharedApplication.Delegate = new AppDelegate();
13 | NSApplication.Main(args);
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/CatTrackerDemo.macOS/Resources/wwwroot/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | An unhandled error has occurred.
18 |
Reload
19 |
🗙
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/CatTrackerDemo.macOS/ViewController.cs:
--------------------------------------------------------------------------------
1 | using AppKit;
2 | using Foundation;
3 | using System;
4 |
5 | namespace CatTrackerDemo.macOS
6 | {
7 | public partial class ViewController : NSViewController
8 | {
9 | public ViewController(IntPtr handle) : base(handle)
10 | {
11 | }
12 |
13 | public override void ViewDidLoad()
14 | {
15 | base.ViewDidLoad();
16 |
17 | // Do any additional setup after loading the view.
18 | }
19 |
20 | public override NSObject RepresentedObject
21 | {
22 | get
23 | {
24 | return base.RepresentedObject;
25 | }
26 | set
27 | {
28 | base.RepresentedObject = value;
29 | // Update the view, if already loaded.
30 | }
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/CatTrackerDemo.macOS/ViewController.designer.cs:
--------------------------------------------------------------------------------
1 | // WARNING
2 | //
3 | // This file has been generated automatically by Xamarin Studio to store outlets and
4 | // actions made in the UI designer. If it is removed, they will be lost.
5 | // Manual changes to this file may not be handled correctly.
6 | //
7 | using Foundation;
8 |
9 | namespace CatTrackerDemo.macOS
10 | {
11 | [Register("ViewController")]
12 | partial class ViewController
13 | {
14 | void ReleaseDesignerOutlets()
15 | {
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/CatTrackerDemo.sln:
--------------------------------------------------------------------------------
1 | Microsoft Visual Studio Solution File, Format Version 12.00
2 | # Visual Studio Version 16
3 | VisualStudioVersion = 16.0.0.0
4 | MinimumVisualStudioVersion = 16.0.0.0
5 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CatTrackerDemo", "CatTrackerDemo\CatTrackerDemo.csproj", "{4C1E61E9-D7C4-4A4F-BBB4-3DD53747160C}"
6 | EndProject
7 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CatTrackerDemo.Android", "CatTrackerDemo.Android\CatTrackerDemo.Android.csproj", "{F32E581F-A644-4552-96B0-F55F36CF389F}"
8 | EndProject
9 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CatTrackerDemo.iOS", "CatTrackerDemo.iOS\CatTrackerDemo.iOS.csproj", "{4D6D477E-0924-4000-BDA0-E904F5335BFF}"
10 | EndProject
11 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CatTrackerDemo.Windows", "CatTrackerDemo.Windows\CatTrackerDemo.Windows.csproj", "{D0776CAB-CBCD-4E9C-AE47-44A1F1E79B0A}"
12 | EndProject
13 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CatTrackerDemo.macOS", "CatTrackerDemo.macOS\CatTrackerDemo.macOS.csproj", "{59F25F1A-FEFC-4705-9963-A51414059720}"
14 | EndProject
15 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CatTrackerWebUILibrary", "CatTrackerWebUILibrary\CatTrackerWebUILibrary.csproj", "{03619938-8ACB-493A-98FE-4EDC465039A3}"
16 | EndProject
17 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CatTrackerDemo.Web", "CatTrackerDemo.Web\CatTrackerDemo.Web.csproj", "{220A32AE-C69C-4568-A3F5-C14F47876C3F}"
18 | EndProject
19 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{03F83608-94FF-4D13-915B-7BFF724A797A}"
20 | ProjectSection(SolutionItems) = preProject
21 | Readme.md = Readme.md
22 | EndProjectSection
23 | EndProject
24 | Global
25 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
26 | Debug|Any CPU = Debug|Any CPU
27 | Debug|iPhone = Debug|iPhone
28 | Debug|iPhoneSimulator = Debug|iPhoneSimulator
29 | Debug|x64 = Debug|x64
30 | Debug|x86 = Debug|x86
31 | Release|Any CPU = Release|Any CPU
32 | Release|iPhone = Release|iPhone
33 | Release|iPhoneSimulator = Release|iPhoneSimulator
34 | Release|x64 = Release|x64
35 | Release|x86 = Release|x86
36 | EndGlobalSection
37 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
38 | {4C1E61E9-D7C4-4A4F-BBB4-3DD53747160C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
39 | {4C1E61E9-D7C4-4A4F-BBB4-3DD53747160C}.Debug|Any CPU.Build.0 = Debug|Any CPU
40 | {4C1E61E9-D7C4-4A4F-BBB4-3DD53747160C}.Debug|iPhone.ActiveCfg = Debug|Any CPU
41 | {4C1E61E9-D7C4-4A4F-BBB4-3DD53747160C}.Debug|iPhone.Build.0 = Debug|Any CPU
42 | {4C1E61E9-D7C4-4A4F-BBB4-3DD53747160C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
43 | {4C1E61E9-D7C4-4A4F-BBB4-3DD53747160C}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
44 | {4C1E61E9-D7C4-4A4F-BBB4-3DD53747160C}.Debug|x64.ActiveCfg = Debug|Any CPU
45 | {4C1E61E9-D7C4-4A4F-BBB4-3DD53747160C}.Debug|x64.Build.0 = Debug|Any CPU
46 | {4C1E61E9-D7C4-4A4F-BBB4-3DD53747160C}.Debug|x86.ActiveCfg = Debug|Any CPU
47 | {4C1E61E9-D7C4-4A4F-BBB4-3DD53747160C}.Debug|x86.Build.0 = Debug|Any CPU
48 | {4C1E61E9-D7C4-4A4F-BBB4-3DD53747160C}.Release|Any CPU.ActiveCfg = Release|Any CPU
49 | {4C1E61E9-D7C4-4A4F-BBB4-3DD53747160C}.Release|Any CPU.Build.0 = Release|Any CPU
50 | {4C1E61E9-D7C4-4A4F-BBB4-3DD53747160C}.Release|iPhone.ActiveCfg = Release|Any CPU
51 | {4C1E61E9-D7C4-4A4F-BBB4-3DD53747160C}.Release|iPhone.Build.0 = Release|Any CPU
52 | {4C1E61E9-D7C4-4A4F-BBB4-3DD53747160C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
53 | {4C1E61E9-D7C4-4A4F-BBB4-3DD53747160C}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
54 | {4C1E61E9-D7C4-4A4F-BBB4-3DD53747160C}.Release|x64.ActiveCfg = Release|Any CPU
55 | {4C1E61E9-D7C4-4A4F-BBB4-3DD53747160C}.Release|x64.Build.0 = Release|Any CPU
56 | {4C1E61E9-D7C4-4A4F-BBB4-3DD53747160C}.Release|x86.ActiveCfg = Release|Any CPU
57 | {4C1E61E9-D7C4-4A4F-BBB4-3DD53747160C}.Release|x86.Build.0 = Release|Any CPU
58 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
59 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Debug|Any CPU.Build.0 = Debug|Any CPU
60 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
61 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Debug|iPhone.ActiveCfg = Debug|Any CPU
62 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Debug|iPhone.Build.0 = Debug|Any CPU
63 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Debug|iPhone.Deploy.0 = Debug|Any CPU
64 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
65 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
66 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU
67 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Debug|x64.ActiveCfg = Debug|Any CPU
68 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Debug|x64.Build.0 = Debug|Any CPU
69 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Debug|x64.Deploy.0 = Debug|Any CPU
70 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Debug|x86.ActiveCfg = Debug|Any CPU
71 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Debug|x86.Build.0 = Debug|Any CPU
72 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Debug|x86.Deploy.0 = Debug|Any CPU
73 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Release|Any CPU.ActiveCfg = Release|Any CPU
74 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Release|Any CPU.Build.0 = Release|Any CPU
75 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Release|Any CPU.Deploy.0 = Release|Any CPU
76 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Release|iPhone.ActiveCfg = Release|Any CPU
77 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Release|iPhone.Build.0 = Release|Any CPU
78 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Release|iPhone.Deploy.0 = Release|Any CPU
79 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
80 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
81 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
82 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Release|x64.ActiveCfg = Release|Any CPU
83 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Release|x64.Build.0 = Release|Any CPU
84 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Release|x64.Deploy.0 = Release|Any CPU
85 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Release|x86.ActiveCfg = Release|Any CPU
86 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Release|x86.Build.0 = Release|Any CPU
87 | {F32E581F-A644-4552-96B0-F55F36CF389F}.Release|x86.Deploy.0 = Release|Any CPU
88 | {4D6D477E-0924-4000-BDA0-E904F5335BFF}.Debug|Any CPU.ActiveCfg = Debug|iPhone
89 | {4D6D477E-0924-4000-BDA0-E904F5335BFF}.Debug|iPhone.ActiveCfg = Debug|iPhone
90 | {4D6D477E-0924-4000-BDA0-E904F5335BFF}.Debug|iPhone.Build.0 = Debug|iPhone
91 | {4D6D477E-0924-4000-BDA0-E904F5335BFF}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
92 | {4D6D477E-0924-4000-BDA0-E904F5335BFF}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
93 | {4D6D477E-0924-4000-BDA0-E904F5335BFF}.Debug|x64.ActiveCfg = Debug|iPhone
94 | {4D6D477E-0924-4000-BDA0-E904F5335BFF}.Debug|x86.ActiveCfg = Debug|iPhone
95 | {4D6D477E-0924-4000-BDA0-E904F5335BFF}.Release|Any CPU.ActiveCfg = Release|iPhone
96 | {4D6D477E-0924-4000-BDA0-E904F5335BFF}.Release|iPhone.ActiveCfg = Release|iPhone
97 | {4D6D477E-0924-4000-BDA0-E904F5335BFF}.Release|iPhone.Build.0 = Release|iPhone
98 | {4D6D477E-0924-4000-BDA0-E904F5335BFF}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
99 | {4D6D477E-0924-4000-BDA0-E904F5335BFF}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
100 | {4D6D477E-0924-4000-BDA0-E904F5335BFF}.Release|x64.ActiveCfg = Release|iPhone
101 | {4D6D477E-0924-4000-BDA0-E904F5335BFF}.Release|x86.ActiveCfg = Release|iPhone
102 | {D0776CAB-CBCD-4E9C-AE47-44A1F1E79B0A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
103 | {D0776CAB-CBCD-4E9C-AE47-44A1F1E79B0A}.Debug|Any CPU.Build.0 = Debug|Any CPU
104 | {D0776CAB-CBCD-4E9C-AE47-44A1F1E79B0A}.Debug|iPhone.ActiveCfg = Debug|Any CPU
105 | {D0776CAB-CBCD-4E9C-AE47-44A1F1E79B0A}.Debug|iPhone.Build.0 = Debug|Any CPU
106 | {D0776CAB-CBCD-4E9C-AE47-44A1F1E79B0A}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
107 | {D0776CAB-CBCD-4E9C-AE47-44A1F1E79B0A}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
108 | {D0776CAB-CBCD-4E9C-AE47-44A1F1E79B0A}.Debug|x64.ActiveCfg = Debug|Any CPU
109 | {D0776CAB-CBCD-4E9C-AE47-44A1F1E79B0A}.Debug|x64.Build.0 = Debug|Any CPU
110 | {D0776CAB-CBCD-4E9C-AE47-44A1F1E79B0A}.Debug|x86.ActiveCfg = Debug|Any CPU
111 | {D0776CAB-CBCD-4E9C-AE47-44A1F1E79B0A}.Debug|x86.Build.0 = Debug|Any CPU
112 | {D0776CAB-CBCD-4E9C-AE47-44A1F1E79B0A}.Release|Any CPU.ActiveCfg = Release|Any CPU
113 | {D0776CAB-CBCD-4E9C-AE47-44A1F1E79B0A}.Release|Any CPU.Build.0 = Release|Any CPU
114 | {D0776CAB-CBCD-4E9C-AE47-44A1F1E79B0A}.Release|iPhone.ActiveCfg = Release|Any CPU
115 | {D0776CAB-CBCD-4E9C-AE47-44A1F1E79B0A}.Release|iPhone.Build.0 = Release|Any CPU
116 | {D0776CAB-CBCD-4E9C-AE47-44A1F1E79B0A}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
117 | {D0776CAB-CBCD-4E9C-AE47-44A1F1E79B0A}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
118 | {D0776CAB-CBCD-4E9C-AE47-44A1F1E79B0A}.Release|x64.ActiveCfg = Release|Any CPU
119 | {D0776CAB-CBCD-4E9C-AE47-44A1F1E79B0A}.Release|x64.Build.0 = Release|Any CPU
120 | {D0776CAB-CBCD-4E9C-AE47-44A1F1E79B0A}.Release|x86.ActiveCfg = Release|Any CPU
121 | {D0776CAB-CBCD-4E9C-AE47-44A1F1E79B0A}.Release|x86.Build.0 = Release|Any CPU
122 | {59F25F1A-FEFC-4705-9963-A51414059720}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
123 | {59F25F1A-FEFC-4705-9963-A51414059720}.Debug|Any CPU.Build.0 = Debug|Any CPU
124 | {59F25F1A-FEFC-4705-9963-A51414059720}.Debug|iPhone.ActiveCfg = Debug|Any CPU
125 | {59F25F1A-FEFC-4705-9963-A51414059720}.Debug|iPhone.Build.0 = Debug|Any CPU
126 | {59F25F1A-FEFC-4705-9963-A51414059720}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
127 | {59F25F1A-FEFC-4705-9963-A51414059720}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
128 | {59F25F1A-FEFC-4705-9963-A51414059720}.Debug|x64.ActiveCfg = Debug|Any CPU
129 | {59F25F1A-FEFC-4705-9963-A51414059720}.Debug|x64.Build.0 = Debug|Any CPU
130 | {59F25F1A-FEFC-4705-9963-A51414059720}.Debug|x86.ActiveCfg = Debug|Any CPU
131 | {59F25F1A-FEFC-4705-9963-A51414059720}.Debug|x86.Build.0 = Debug|Any CPU
132 | {59F25F1A-FEFC-4705-9963-A51414059720}.Release|Any CPU.ActiveCfg = Release|Any CPU
133 | {59F25F1A-FEFC-4705-9963-A51414059720}.Release|Any CPU.Build.0 = Release|Any CPU
134 | {59F25F1A-FEFC-4705-9963-A51414059720}.Release|iPhone.ActiveCfg = Release|Any CPU
135 | {59F25F1A-FEFC-4705-9963-A51414059720}.Release|iPhone.Build.0 = Release|Any CPU
136 | {59F25F1A-FEFC-4705-9963-A51414059720}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
137 | {59F25F1A-FEFC-4705-9963-A51414059720}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
138 | {59F25F1A-FEFC-4705-9963-A51414059720}.Release|x64.ActiveCfg = Release|Any CPU
139 | {59F25F1A-FEFC-4705-9963-A51414059720}.Release|x64.Build.0 = Release|Any CPU
140 | {59F25F1A-FEFC-4705-9963-A51414059720}.Release|x86.ActiveCfg = Release|Any CPU
141 | {59F25F1A-FEFC-4705-9963-A51414059720}.Release|x86.Build.0 = Release|Any CPU
142 | {03619938-8ACB-493A-98FE-4EDC465039A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
143 | {03619938-8ACB-493A-98FE-4EDC465039A3}.Debug|Any CPU.Build.0 = Debug|Any CPU
144 | {03619938-8ACB-493A-98FE-4EDC465039A3}.Debug|iPhone.ActiveCfg = Debug|Any CPU
145 | {03619938-8ACB-493A-98FE-4EDC465039A3}.Debug|iPhone.Build.0 = Debug|Any CPU
146 | {03619938-8ACB-493A-98FE-4EDC465039A3}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
147 | {03619938-8ACB-493A-98FE-4EDC465039A3}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
148 | {03619938-8ACB-493A-98FE-4EDC465039A3}.Debug|x64.ActiveCfg = Debug|Any CPU
149 | {03619938-8ACB-493A-98FE-4EDC465039A3}.Debug|x64.Build.0 = Debug|Any CPU
150 | {03619938-8ACB-493A-98FE-4EDC465039A3}.Debug|x86.ActiveCfg = Debug|Any CPU
151 | {03619938-8ACB-493A-98FE-4EDC465039A3}.Debug|x86.Build.0 = Debug|Any CPU
152 | {03619938-8ACB-493A-98FE-4EDC465039A3}.Release|Any CPU.ActiveCfg = Release|Any CPU
153 | {03619938-8ACB-493A-98FE-4EDC465039A3}.Release|Any CPU.Build.0 = Release|Any CPU
154 | {03619938-8ACB-493A-98FE-4EDC465039A3}.Release|iPhone.ActiveCfg = Release|Any CPU
155 | {03619938-8ACB-493A-98FE-4EDC465039A3}.Release|iPhone.Build.0 = Release|Any CPU
156 | {03619938-8ACB-493A-98FE-4EDC465039A3}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
157 | {03619938-8ACB-493A-98FE-4EDC465039A3}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
158 | {03619938-8ACB-493A-98FE-4EDC465039A3}.Release|x64.ActiveCfg = Release|Any CPU
159 | {03619938-8ACB-493A-98FE-4EDC465039A3}.Release|x64.Build.0 = Release|Any CPU
160 | {03619938-8ACB-493A-98FE-4EDC465039A3}.Release|x86.ActiveCfg = Release|Any CPU
161 | {03619938-8ACB-493A-98FE-4EDC465039A3}.Release|x86.Build.0 = Release|Any CPU
162 | {220A32AE-C69C-4568-A3F5-C14F47876C3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
163 | {220A32AE-C69C-4568-A3F5-C14F47876C3F}.Debug|Any CPU.Build.0 = Debug|Any CPU
164 | {220A32AE-C69C-4568-A3F5-C14F47876C3F}.Debug|iPhone.ActiveCfg = Debug|Any CPU
165 | {220A32AE-C69C-4568-A3F5-C14F47876C3F}.Debug|iPhone.Build.0 = Debug|Any CPU
166 | {220A32AE-C69C-4568-A3F5-C14F47876C3F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
167 | {220A32AE-C69C-4568-A3F5-C14F47876C3F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
168 | {220A32AE-C69C-4568-A3F5-C14F47876C3F}.Debug|x64.ActiveCfg = Debug|Any CPU
169 | {220A32AE-C69C-4568-A3F5-C14F47876C3F}.Debug|x64.Build.0 = Debug|Any CPU
170 | {220A32AE-C69C-4568-A3F5-C14F47876C3F}.Debug|x86.ActiveCfg = Debug|Any CPU
171 | {220A32AE-C69C-4568-A3F5-C14F47876C3F}.Debug|x86.Build.0 = Debug|Any CPU
172 | {220A32AE-C69C-4568-A3F5-C14F47876C3F}.Release|Any CPU.ActiveCfg = Release|Any CPU
173 | {220A32AE-C69C-4568-A3F5-C14F47876C3F}.Release|Any CPU.Build.0 = Release|Any CPU
174 | {220A32AE-C69C-4568-A3F5-C14F47876C3F}.Release|iPhone.ActiveCfg = Release|Any CPU
175 | {220A32AE-C69C-4568-A3F5-C14F47876C3F}.Release|iPhone.Build.0 = Release|Any CPU
176 | {220A32AE-C69C-4568-A3F5-C14F47876C3F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
177 | {220A32AE-C69C-4568-A3F5-C14F47876C3F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
178 | {220A32AE-C69C-4568-A3F5-C14F47876C3F}.Release|x64.ActiveCfg = Release|Any CPU
179 | {220A32AE-C69C-4568-A3F5-C14F47876C3F}.Release|x64.Build.0 = Release|Any CPU
180 | {220A32AE-C69C-4568-A3F5-C14F47876C3F}.Release|x86.ActiveCfg = Release|Any CPU
181 | {220A32AE-C69C-4568-A3F5-C14F47876C3F}.Release|x86.Build.0 = Release|Any CPU
182 | EndGlobalSection
183 | GlobalSection(SolutionProperties) = preSolution
184 | HideSolutionNode = FALSE
185 | EndGlobalSection
186 | GlobalSection(ExtensibilityGlobals) = postSolution
187 | SolutionGuid = {63B04B41-7256-4BD6-8AB4-719696C4FFE2}
188 | EndGlobalSection
189 | EndGlobal
190 |
--------------------------------------------------------------------------------
/CatTrackerDemo/App.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Microsoft.Extensions.DependencyInjection;
3 | using Microsoft.Extensions.FileProviders;
4 | using Microsoft.Extensions.Hosting;
5 | using Microsoft.MobileBlazorBindings;
6 | using Xamarin.Essentials;
7 | using Xamarin.Forms;
8 |
9 | namespace CatTrackerDemo
10 | {
11 | public class App : Application
12 | {
13 | public App(IFileProvider fileProvider = null)
14 | {
15 | var hostBuilder = MobileBlazorBindingsHost.CreateDefaultBuilder()
16 | .ConfigureServices((hostContext, services) =>
17 | {
18 | // Adds web-specific services such as NavigationManager
19 | services.AddBlazorHybrid();
20 |
21 | // Register app-specific services
22 | services.AddSingleton();
23 | })
24 | .UseWebRoot("wwwroot");
25 |
26 | if (fileProvider != null)
27 | {
28 | hostBuilder.UseStaticFiles(fileProvider);
29 | }
30 | else
31 | {
32 | hostBuilder.UseStaticFiles();
33 | }
34 | var host = hostBuilder.Build();
35 |
36 | MainPage = new ContentPage { Title = "My Application" };
37 | host.AddComponent(parent: MainPage);
38 | }
39 |
40 | protected override void OnStart()
41 | {
42 | }
43 |
44 | protected override void OnSleep()
45 | {
46 | }
47 |
48 | protected override void OnResume()
49 | {
50 | }
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/CatTrackerDemo/CatResults.razor:
--------------------------------------------------------------------------------
1 | @using System.IO
2 | @inject TrackerState TrackerState
3 | @inject Microsoft.Extensions.FileProviders.IFileProvider FileProvider
4 |
5 |
6 | @if (Results.Any())
7 | {
8 |
9 | @foreach (var result in Results)
10 | {
11 | var imagePath = result.ImagePath;
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | }
26 |
27 | }
28 | else
29 | {
30 |
31 | }
32 |
33 |
34 | @code {
35 | [Parameter] public IList Results { get; set; }
36 |
37 | private ImageSource GetImageStream(string imagePath)
38 | {
39 | using (var fileStream = FileProvider.GetFileInfo(imagePath).CreateReadStream())
40 | {
41 | var memoryStream = new MemoryStream();
42 | fileStream.CopyTo(memoryStream);
43 | memoryStream.Position = 0; // reset stream for reading
44 | return ImageSource.FromStream(() => memoryStream);
45 | }
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/CatTrackerDemo/CatTrackerDemo.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netstandard2.0
5 | true
6 | 3.0
7 | false
8 | wwwroot
9 | true
10 |
11 |
12 |
13 | portable
14 | true
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/CatTrackerDemo/Main.razor:
--------------------------------------------------------------------------------
1 | @inject TrackerState TrackerState
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | @if (TrackerState.Results != null)
17 | {
18 |
19 | }
20 |
21 |
22 |
23 |
24 |
25 | @code {
26 | protected override void OnInitialized()
27 | {
28 | TrackerState.StateChanged += StateHasChanged;
29 | }
30 |
31 | public void Dispose()
32 | {
33 | TrackerState.StateChanged -= StateHasChanged;
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/CatTrackerDemo/TrackerState.cs:
--------------------------------------------------------------------------------
1 | using CatTrackerWebUILibrary.Models;
2 | using System;
3 | using System.Collections.Generic;
4 |
5 | namespace CatTrackerDemo
6 | {
7 | internal class TrackerState
8 | {
9 | public IList Results { get; private set; }
10 |
11 | public void Reset()
12 | {
13 | Results = null;
14 | StateChanged?.Invoke();
15 | }
16 |
17 | public void SetResults(IList results)
18 | {
19 | Results = results;
20 | StateChanged?.Invoke();
21 | }
22 |
23 | public event Action StateChanged;
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/CatTrackerDemo/WebUI/App.razor:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Sorry, there's nothing at this address.
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/CatTrackerDemo/WebUI/Pages/Index.razor:
--------------------------------------------------------------------------------
1 | @page "/"
2 | @inject TrackerState TrackerState
3 |
4 |
5 |
6 | @code
7 | {
8 | private void OnTrackComplete(IList results)
9 | {
10 | TrackerState.SetResults(results);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/CatTrackerDemo/WebUI/Shared/MainLayout.razor:
--------------------------------------------------------------------------------
1 | @inherits LayoutComponentBase
2 |
3 |
8 |
--------------------------------------------------------------------------------
/CatTrackerDemo/WebUI/_Imports.razor:
--------------------------------------------------------------------------------
1 | @using System.Net.Http
2 | @using System.Net.Http.Json
3 | @using Microsoft.AspNetCore.Components.Forms
4 | @using Microsoft.AspNetCore.Components.Routing
5 | @using Microsoft.AspNetCore.Components.Web
6 | @using Microsoft.JSInterop
7 | @using CatTrackerDemo.WebUI.Shared
8 | @using CatTrackerWebUILibrary
9 |
--------------------------------------------------------------------------------
/CatTrackerDemo/_Imports.razor:
--------------------------------------------------------------------------------
1 | @using Microsoft.MobileBlazorBindings
2 | @using Microsoft.MobileBlazorBindings.Elements
3 | @using Xamarin.Essentials
4 | @using Xamarin.Forms
5 | @using CatTrackerWebUILibrary.Models
6 |
--------------------------------------------------------------------------------
/CatTrackerDemo/wwwroot/css/app.css:
--------------------------------------------------------------------------------
1 | @import url('open-iconic/font/css/open-iconic-bootstrap.min.css');
2 |
3 | html, body {
4 | font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
5 | }
6 |
7 | a, .btn-link {
8 | color: #0366d6;
9 | }
10 |
11 | .btn-primary {
12 | color: #fff;
13 | background-color: #1b6ec2;
14 | border-color: #1861ac;
15 | }
16 |
17 | app {
18 | position: relative;
19 | display: flex;
20 | flex-direction: column;
21 | }
22 |
23 | .top-row {
24 | height: 3.5rem;
25 | display: flex;
26 | align-items: center;
27 | }
28 |
29 | .main {
30 | flex: 1;
31 | }
32 |
33 | .main .top-row {
34 | background-color: #f7f7f7;
35 | border-bottom: 1px solid #d6d5d5;
36 | justify-content: flex-end;
37 | }
38 |
39 | .main .top-row > a, .main .top-row .btn-link {
40 | white-space: nowrap;
41 | margin-left: 1.5rem;
42 | }
43 |
44 | .main .top-row a:first-child {
45 | overflow: hidden;
46 | text-overflow: ellipsis;
47 | }
48 |
49 | .sidebar {
50 | background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);
51 | }
52 |
53 | .sidebar .top-row {
54 | background-color: rgba(0,0,0,0.4);
55 | }
56 |
57 | .sidebar .navbar-brand {
58 | font-size: 1.1rem;
59 | }
60 |
61 | .sidebar .oi {
62 | width: 2rem;
63 | font-size: 1.1rem;
64 | vertical-align: text-top;
65 | top: -2px;
66 | }
67 |
68 | .sidebar .nav-item {
69 | font-size: 0.9rem;
70 | padding-bottom: 0.5rem;
71 | }
72 |
73 | .sidebar .nav-item:first-of-type {
74 | padding-top: 1rem;
75 | }
76 |
77 | .sidebar .nav-item:last-of-type {
78 | padding-bottom: 1rem;
79 | }
80 |
81 | .sidebar .nav-item a {
82 | color: #d7d7d7;
83 | border-radius: 4px;
84 | height: 3rem;
85 | display: flex;
86 | align-items: center;
87 | line-height: 3rem;
88 | }
89 |
90 | .sidebar .nav-item a.active {
91 | background-color: rgba(255,255,255,0.25);
92 | color: white;
93 | }
94 |
95 | .sidebar .nav-item a:hover {
96 | background-color: rgba(255,255,255,0.1);
97 | color: white;
98 | }
99 |
100 | .content {
101 | padding-top: 1.1rem;
102 | }
103 |
104 | .navbar-toggler {
105 | background-color: rgba(255, 255, 255, 0.1);
106 | }
107 |
108 | .valid.modified:not([type=checkbox]) {
109 | outline: 1px solid #26b050;
110 | }
111 |
112 | .invalid {
113 | outline: 1px solid red;
114 | }
115 |
116 | .validation-message {
117 | color: red;
118 | }
119 |
120 | #blazor-error-ui {
121 | background: lightyellow;
122 | bottom: 0;
123 | box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
124 | display: none;
125 | left: 0;
126 | padding: 0.6rem 1.25rem 0.7rem 1.25rem;
127 | position: fixed;
128 | width: 100%;
129 | z-index: 1000;
130 | }
131 |
132 | #blazor-error-ui .dismiss {
133 | cursor: pointer;
134 | position: absolute;
135 | right: 0.75rem;
136 | top: 0.5rem;
137 | }
138 |
139 | @media (max-width: 767.98px) {
140 | .main .top-row:not(.auth) {
141 | display: none;
142 | }
143 |
144 | .main .top-row.auth {
145 | justify-content: space-between;
146 | }
147 |
148 | .main .top-row a, .main .top-row .btn-link {
149 | margin-left: 0;
150 | }
151 | }
152 |
153 | @media (min-width: 768px) {
154 | app {
155 | flex-direction: row;
156 | }
157 |
158 | .sidebar {
159 | width: 250px;
160 | height: 100vh;
161 | position: sticky;
162 | top: 0;
163 | }
164 |
165 | .main .top-row {
166 | position: sticky;
167 | top: 0;
168 | }
169 |
170 | .main > div {
171 | padding-left: 2rem !important;
172 | padding-right: 1.5rem !important;
173 | }
174 |
175 | .navbar-toggler {
176 | display: none;
177 | }
178 |
179 | .sidebar .collapse {
180 | /* Never collapse the sidebar for wide screens */
181 | display: block;
182 | }
183 | }
184 |
--------------------------------------------------------------------------------
/CatTrackerDemo/wwwroot/css/open-iconic/FONT-LICENSE:
--------------------------------------------------------------------------------
1 | SIL OPEN FONT LICENSE Version 1.1
2 |
3 | Copyright (c) 2014 Waybury
4 |
5 | PREAMBLE
6 | The goals of the Open Font License (OFL) are to stimulate worldwide
7 | development of collaborative font projects, to support the font creation
8 | efforts of academic and linguistic communities, and to provide a free and
9 | open framework in which fonts may be shared and improved in partnership
10 | with others.
11 |
12 | The OFL allows the licensed fonts to be used, studied, modified and
13 | redistributed freely as long as they are not sold by themselves. The
14 | fonts, including any derivative works, can be bundled, embedded,
15 | redistributed and/or sold with any software provided that any reserved
16 | names are not used by derivative works. The fonts and derivatives,
17 | however, cannot be released under any other type of license. The
18 | requirement for fonts to remain under this license does not apply
19 | to any document created using the fonts or their derivatives.
20 |
21 | DEFINITIONS
22 | "Font Software" refers to the set of files released by the Copyright
23 | Holder(s) under this license and clearly marked as such. This may
24 | include source files, build scripts and documentation.
25 |
26 | "Reserved Font Name" refers to any names specified as such after the
27 | copyright statement(s).
28 |
29 | "Original Version" refers to the collection of Font Software components as
30 | distributed by the Copyright Holder(s).
31 |
32 | "Modified Version" refers to any derivative made by adding to, deleting,
33 | or substituting -- in part or in whole -- any of the components of the
34 | Original Version, by changing formats or by porting the Font Software to a
35 | new environment.
36 |
37 | "Author" refers to any designer, engineer, programmer, technical
38 | writer or other person who contributed to the Font Software.
39 |
40 | PERMISSION & CONDITIONS
41 | Permission is hereby granted, free of charge, to any person obtaining
42 | a copy of the Font Software, to use, study, copy, merge, embed, modify,
43 | redistribute, and sell modified and unmodified copies of the Font
44 | Software, subject to the following conditions:
45 |
46 | 1) Neither the Font Software nor any of its individual components,
47 | in Original or Modified Versions, may be sold by itself.
48 |
49 | 2) Original or Modified Versions of the Font Software may be bundled,
50 | redistributed and/or sold with any software, provided that each copy
51 | contains the above copyright notice and this license. These can be
52 | included either as stand-alone text files, human-readable headers or
53 | in the appropriate machine-readable metadata fields within text or
54 | binary files as long as those fields can be easily viewed by the user.
55 |
56 | 3) No Modified Version of the Font Software may use the Reserved Font
57 | Name(s) unless explicit written permission is granted by the corresponding
58 | Copyright Holder. This restriction only applies to the primary font name as
59 | presented to the users.
60 |
61 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
62 | Software shall not be used to promote, endorse or advertise any
63 | Modified Version, except to acknowledge the contribution(s) of the
64 | Copyright Holder(s) and the Author(s) or with their explicit written
65 | permission.
66 |
67 | 5) The Font Software, modified or unmodified, in part or in whole,
68 | must be distributed entirely under this license, and must not be
69 | distributed under any other license. The requirement for fonts to
70 | remain under this license does not apply to any document created
71 | using the Font Software.
72 |
73 | TERMINATION
74 | This license becomes null and void if any of the above conditions are
75 | not met.
76 |
77 | DISCLAIMER
78 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
79 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
80 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
81 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
82 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
83 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
84 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
85 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
86 | OTHER DEALINGS IN THE FONT SOFTWARE.
87 |
--------------------------------------------------------------------------------
/CatTrackerDemo/wwwroot/css/open-iconic/ICON-LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2014 Waybury
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
--------------------------------------------------------------------------------
/CatTrackerDemo/wwwroot/css/open-iconic/README.md:
--------------------------------------------------------------------------------
1 | [Open Iconic v1.1.1](http://useiconic.com/open)
2 | ===========
3 |
4 | ### Open Iconic is the open source sibling of [Iconic](http://useiconic.com). It is a hyper-legible collection of 223 icons with a tiny footprint—ready to use with Bootstrap and Foundation. [View the collection](http://useiconic.com/open#icons)
5 |
6 |
7 |
8 | ## What's in Open Iconic?
9 |
10 | * 223 icons designed to be legible down to 8 pixels
11 | * Super-light SVG files - 61.8 for the entire set
12 | * SVG sprite—the modern replacement for icon fonts
13 | * Webfont (EOT, OTF, SVG, TTF, WOFF), PNG and WebP formats
14 | * Webfont stylesheets (including versions for Bootstrap and Foundation) in CSS, LESS, SCSS and Stylus formats
15 | * PNG and WebP raster images in 8px, 16px, 24px, 32px, 48px and 64px.
16 |
17 |
18 | ## Getting Started
19 |
20 | #### For code samples and everything else you need to get started with Open Iconic, check out our [Icons](http://useiconic.com/open#icons) and [Reference](http://useiconic.com/open#reference) sections.
21 |
22 | ### General Usage
23 |
24 | #### Using Open Iconic's SVGs
25 |
26 | We like SVGs and we think they're the way to display icons on the web. Since Open Iconic are just basic SVGs, we suggest you display them like you would any other image (don't forget the `alt` attribute).
27 |
28 | ```
29 |
30 | ```
31 |
32 | #### Using Open Iconic's SVG Sprite
33 |
34 | Open Iconic also comes in a SVG sprite which allows you to display all the icons in the set with a single request. It's like an icon font, without being a hack.
35 |
36 | Adding an icon from an SVG sprite is a little different than what you're used to, but it's still a piece of cake. *Tip: To make your icons easily style able, we suggest adding a general class to the* `` *tag and a unique class name for each different icon in the* `` *tag.*
37 |
38 | ```
39 |
40 |
41 |
42 | ```
43 |
44 | Sizing icons only needs basic CSS. All the icons are in a square format, so just set the `` tag with equal width and height dimensions.
45 |
46 | ```
47 | .icon {
48 | width: 16px;
49 | height: 16px;
50 | }
51 | ```
52 |
53 | Coloring icons is even easier. All you need to do is set the `fill` rule on the `` tag.
54 |
55 | ```
56 | .icon-account-login {
57 | fill: #f00;
58 | }
59 | ```
60 |
61 | To learn more about SVG Sprites, read [Chris Coyier's guide](http://css-tricks.com/svg-sprites-use-better-icon-fonts/).
62 |
63 | #### Using Open Iconic's Icon Font...
64 |
65 |
66 | ##### …with Bootstrap
67 |
68 | You can find our Bootstrap stylesheets in `font/css/open-iconic-bootstrap.{css, less, scss, styl}`
69 |
70 |
71 | ```
72 |
73 | ```
74 |
75 |
76 | ```
77 |
78 | ```
79 |
80 | ##### …with Foundation
81 |
82 | You can find our Foundation stylesheets in `font/css/open-iconic-foundation.{css, less, scss, styl}`
83 |
84 | ```
85 |
86 | ```
87 |
88 |
89 | ```
90 |
91 | ```
92 |
93 | ##### …on its own
94 |
95 | You can find our default stylesheets in `font/css/open-iconic.{css, less, scss, styl}`
96 |
97 | ```
98 |
99 | ```
100 |
101 | ```
102 |
103 | ```
104 |
105 |
106 | ## License
107 |
108 | ### Icons
109 |
110 | All code (including SVG markup) is under the [MIT License](http://opensource.org/licenses/MIT).
111 |
112 | ### Fonts
113 |
114 | All fonts are under the [SIL Licensed](http://scripts.sil.org/cms/scripts/page.php?item_id=OFL_web).
115 |
--------------------------------------------------------------------------------
/CatTrackerDemo/wwwroot/css/open-iconic/font/css/open-iconic-bootstrap.min.css:
--------------------------------------------------------------------------------
1 | @font-face{font-family:Icons;src:url(../fonts/open-iconic.eot);src:url(../fonts/open-iconic.eot?#iconic-sm) format('embedded-opentype'),url(../fonts/open-iconic.woff) format('woff'),url(../fonts/open-iconic.ttf) format('truetype'),url(../fonts/open-iconic.otf) format('opentype'),url(../fonts/open-iconic.svg#iconic-sm) format('svg');font-weight:400;font-style:normal}.oi{position:relative;top:1px;display:inline-block;speak:none;font-family:Icons;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.oi:empty:before{width:1em;text-align:center;box-sizing:content-box}.oi.oi-align-center:before{text-align:center}.oi.oi-align-left:before{text-align:left}.oi.oi-align-right:before{text-align:right}.oi.oi-flip-horizontal:before{-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.oi.oi-flip-vertical:before{-webkit-transform:scale(1,-1);-ms-transform:scale(-1,1);transform:scale(1,-1)}.oi.oi-flip-horizontal-vertical:before{-webkit-transform:scale(-1,-1);-ms-transform:scale(-1,1);transform:scale(-1,-1)}.oi-account-login:before{content:'\e000'}.oi-account-logout:before{content:'\e001'}.oi-action-redo:before{content:'\e002'}.oi-action-undo:before{content:'\e003'}.oi-align-center:before{content:'\e004'}.oi-align-left:before{content:'\e005'}.oi-align-right:before{content:'\e006'}.oi-aperture:before{content:'\e007'}.oi-arrow-bottom:before{content:'\e008'}.oi-arrow-circle-bottom:before{content:'\e009'}.oi-arrow-circle-left:before{content:'\e00a'}.oi-arrow-circle-right:before{content:'\e00b'}.oi-arrow-circle-top:before{content:'\e00c'}.oi-arrow-left:before{content:'\e00d'}.oi-arrow-right:before{content:'\e00e'}.oi-arrow-thick-bottom:before{content:'\e00f'}.oi-arrow-thick-left:before{content:'\e010'}.oi-arrow-thick-right:before{content:'\e011'}.oi-arrow-thick-top:before{content:'\e012'}.oi-arrow-top:before{content:'\e013'}.oi-audio-spectrum:before{content:'\e014'}.oi-audio:before{content:'\e015'}.oi-badge:before{content:'\e016'}.oi-ban:before{content:'\e017'}.oi-bar-chart:before{content:'\e018'}.oi-basket:before{content:'\e019'}.oi-battery-empty:before{content:'\e01a'}.oi-battery-full:before{content:'\e01b'}.oi-beaker:before{content:'\e01c'}.oi-bell:before{content:'\e01d'}.oi-bluetooth:before{content:'\e01e'}.oi-bold:before{content:'\e01f'}.oi-bolt:before{content:'\e020'}.oi-book:before{content:'\e021'}.oi-bookmark:before{content:'\e022'}.oi-box:before{content:'\e023'}.oi-briefcase:before{content:'\e024'}.oi-british-pound:before{content:'\e025'}.oi-browser:before{content:'\e026'}.oi-brush:before{content:'\e027'}.oi-bug:before{content:'\e028'}.oi-bullhorn:before{content:'\e029'}.oi-calculator:before{content:'\e02a'}.oi-calendar:before{content:'\e02b'}.oi-camera-slr:before{content:'\e02c'}.oi-caret-bottom:before{content:'\e02d'}.oi-caret-left:before{content:'\e02e'}.oi-caret-right:before{content:'\e02f'}.oi-caret-top:before{content:'\e030'}.oi-cart:before{content:'\e031'}.oi-chat:before{content:'\e032'}.oi-check:before{content:'\e033'}.oi-chevron-bottom:before{content:'\e034'}.oi-chevron-left:before{content:'\e035'}.oi-chevron-right:before{content:'\e036'}.oi-chevron-top:before{content:'\e037'}.oi-circle-check:before{content:'\e038'}.oi-circle-x:before{content:'\e039'}.oi-clipboard:before{content:'\e03a'}.oi-clock:before{content:'\e03b'}.oi-cloud-download:before{content:'\e03c'}.oi-cloud-upload:before{content:'\e03d'}.oi-cloud:before{content:'\e03e'}.oi-cloudy:before{content:'\e03f'}.oi-code:before{content:'\e040'}.oi-cog:before{content:'\e041'}.oi-collapse-down:before{content:'\e042'}.oi-collapse-left:before{content:'\e043'}.oi-collapse-right:before{content:'\e044'}.oi-collapse-up:before{content:'\e045'}.oi-command:before{content:'\e046'}.oi-comment-square:before{content:'\e047'}.oi-compass:before{content:'\e048'}.oi-contrast:before{content:'\e049'}.oi-copywriting:before{content:'\e04a'}.oi-credit-card:before{content:'\e04b'}.oi-crop:before{content:'\e04c'}.oi-dashboard:before{content:'\e04d'}.oi-data-transfer-download:before{content:'\e04e'}.oi-data-transfer-upload:before{content:'\e04f'}.oi-delete:before{content:'\e050'}.oi-dial:before{content:'\e051'}.oi-document:before{content:'\e052'}.oi-dollar:before{content:'\e053'}.oi-double-quote-sans-left:before{content:'\e054'}.oi-double-quote-sans-right:before{content:'\e055'}.oi-double-quote-serif-left:before{content:'\e056'}.oi-double-quote-serif-right:before{content:'\e057'}.oi-droplet:before{content:'\e058'}.oi-eject:before{content:'\e059'}.oi-elevator:before{content:'\e05a'}.oi-ellipses:before{content:'\e05b'}.oi-envelope-closed:before{content:'\e05c'}.oi-envelope-open:before{content:'\e05d'}.oi-euro:before{content:'\e05e'}.oi-excerpt:before{content:'\e05f'}.oi-expand-down:before{content:'\e060'}.oi-expand-left:before{content:'\e061'}.oi-expand-right:before{content:'\e062'}.oi-expand-up:before{content:'\e063'}.oi-external-link:before{content:'\e064'}.oi-eye:before{content:'\e065'}.oi-eyedropper:before{content:'\e066'}.oi-file:before{content:'\e067'}.oi-fire:before{content:'\e068'}.oi-flag:before{content:'\e069'}.oi-flash:before{content:'\e06a'}.oi-folder:before{content:'\e06b'}.oi-fork:before{content:'\e06c'}.oi-fullscreen-enter:before{content:'\e06d'}.oi-fullscreen-exit:before{content:'\e06e'}.oi-globe:before{content:'\e06f'}.oi-graph:before{content:'\e070'}.oi-grid-four-up:before{content:'\e071'}.oi-grid-three-up:before{content:'\e072'}.oi-grid-two-up:before{content:'\e073'}.oi-hard-drive:before{content:'\e074'}.oi-header:before{content:'\e075'}.oi-headphones:before{content:'\e076'}.oi-heart:before{content:'\e077'}.oi-home:before{content:'\e078'}.oi-image:before{content:'\e079'}.oi-inbox:before{content:'\e07a'}.oi-infinity:before{content:'\e07b'}.oi-info:before{content:'\e07c'}.oi-italic:before{content:'\e07d'}.oi-justify-center:before{content:'\e07e'}.oi-justify-left:before{content:'\e07f'}.oi-justify-right:before{content:'\e080'}.oi-key:before{content:'\e081'}.oi-laptop:before{content:'\e082'}.oi-layers:before{content:'\e083'}.oi-lightbulb:before{content:'\e084'}.oi-link-broken:before{content:'\e085'}.oi-link-intact:before{content:'\e086'}.oi-list-rich:before{content:'\e087'}.oi-list:before{content:'\e088'}.oi-location:before{content:'\e089'}.oi-lock-locked:before{content:'\e08a'}.oi-lock-unlocked:before{content:'\e08b'}.oi-loop-circular:before{content:'\e08c'}.oi-loop-square:before{content:'\e08d'}.oi-loop:before{content:'\e08e'}.oi-magnifying-glass:before{content:'\e08f'}.oi-map-marker:before{content:'\e090'}.oi-map:before{content:'\e091'}.oi-media-pause:before{content:'\e092'}.oi-media-play:before{content:'\e093'}.oi-media-record:before{content:'\e094'}.oi-media-skip-backward:before{content:'\e095'}.oi-media-skip-forward:before{content:'\e096'}.oi-media-step-backward:before{content:'\e097'}.oi-media-step-forward:before{content:'\e098'}.oi-media-stop:before{content:'\e099'}.oi-medical-cross:before{content:'\e09a'}.oi-menu:before{content:'\e09b'}.oi-microphone:before{content:'\e09c'}.oi-minus:before{content:'\e09d'}.oi-monitor:before{content:'\e09e'}.oi-moon:before{content:'\e09f'}.oi-move:before{content:'\e0a0'}.oi-musical-note:before{content:'\e0a1'}.oi-paperclip:before{content:'\e0a2'}.oi-pencil:before{content:'\e0a3'}.oi-people:before{content:'\e0a4'}.oi-person:before{content:'\e0a5'}.oi-phone:before{content:'\e0a6'}.oi-pie-chart:before{content:'\e0a7'}.oi-pin:before{content:'\e0a8'}.oi-play-circle:before{content:'\e0a9'}.oi-plus:before{content:'\e0aa'}.oi-power-standby:before{content:'\e0ab'}.oi-print:before{content:'\e0ac'}.oi-project:before{content:'\e0ad'}.oi-pulse:before{content:'\e0ae'}.oi-puzzle-piece:before{content:'\e0af'}.oi-question-mark:before{content:'\e0b0'}.oi-rain:before{content:'\e0b1'}.oi-random:before{content:'\e0b2'}.oi-reload:before{content:'\e0b3'}.oi-resize-both:before{content:'\e0b4'}.oi-resize-height:before{content:'\e0b5'}.oi-resize-width:before{content:'\e0b6'}.oi-rss-alt:before{content:'\e0b7'}.oi-rss:before{content:'\e0b8'}.oi-script:before{content:'\e0b9'}.oi-share-boxed:before{content:'\e0ba'}.oi-share:before{content:'\e0bb'}.oi-shield:before{content:'\e0bc'}.oi-signal:before{content:'\e0bd'}.oi-signpost:before{content:'\e0be'}.oi-sort-ascending:before{content:'\e0bf'}.oi-sort-descending:before{content:'\e0c0'}.oi-spreadsheet:before{content:'\e0c1'}.oi-star:before{content:'\e0c2'}.oi-sun:before{content:'\e0c3'}.oi-tablet:before{content:'\e0c4'}.oi-tag:before{content:'\e0c5'}.oi-tags:before{content:'\e0c6'}.oi-target:before{content:'\e0c7'}.oi-task:before{content:'\e0c8'}.oi-terminal:before{content:'\e0c9'}.oi-text:before{content:'\e0ca'}.oi-thumb-down:before{content:'\e0cb'}.oi-thumb-up:before{content:'\e0cc'}.oi-timer:before{content:'\e0cd'}.oi-transfer:before{content:'\e0ce'}.oi-trash:before{content:'\e0cf'}.oi-underline:before{content:'\e0d0'}.oi-vertical-align-bottom:before{content:'\e0d1'}.oi-vertical-align-center:before{content:'\e0d2'}.oi-vertical-align-top:before{content:'\e0d3'}.oi-video:before{content:'\e0d4'}.oi-volume-high:before{content:'\e0d5'}.oi-volume-low:before{content:'\e0d6'}.oi-volume-off:before{content:'\e0d7'}.oi-warning:before{content:'\e0d8'}.oi-wifi:before{content:'\e0d9'}.oi-wrench:before{content:'\e0da'}.oi-x:before{content:'\e0db'}.oi-yen:before{content:'\e0dc'}.oi-zoom-in:before{content:'\e0dd'}.oi-zoom-out:before{content:'\e0de'}
--------------------------------------------------------------------------------
/CatTrackerDemo/wwwroot/css/open-iconic/font/fonts/open-iconic.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo/wwwroot/css/open-iconic/font/fonts/open-iconic.eot
--------------------------------------------------------------------------------
/CatTrackerDemo/wwwroot/css/open-iconic/font/fonts/open-iconic.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo/wwwroot/css/open-iconic/font/fonts/open-iconic.otf
--------------------------------------------------------------------------------
/CatTrackerDemo/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf
--------------------------------------------------------------------------------
/CatTrackerDemo/wwwroot/css/open-iconic/font/fonts/open-iconic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo/wwwroot/css/open-iconic/font/fonts/open-iconic.woff
--------------------------------------------------------------------------------
/CatTrackerDemo/wwwroot/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerDemo/wwwroot/favicon.ico
--------------------------------------------------------------------------------
/CatTrackerWebUILibrary/CatTracker.razor:
--------------------------------------------------------------------------------
1 |
2 | Track cats
3 |
4 |
5 |
6 |
7 |
8 |
9 | Breed:
10 |
11 |
12 | Color:
13 |
14 |
15 | Track
16 |
17 |
18 |
19 |
20 |
21 |
22 | @code {
23 | private CatTrackerModel trackerModel = new CatTrackerModel();
24 |
25 | [Parameter] public EventCallback> OnTrackComplete { get; set; }
26 |
27 | private async Task HandleValidSubmit()
28 | {
29 | // Find the cats
30 | var results = FancyCatTracker.FindCats(trackerModel.Breed, trackerModel.Color);
31 |
32 | // Let the caller know
33 | await OnTrackComplete.InvokeAsync(results);
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/CatTrackerWebUILibrary/CatTrackerWebUILibrary.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netstandard2.0
5 | 3.0
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/CatTrackerWebUILibrary/Models/CatTrackerModel.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 | using System.ComponentModel.DataAnnotations;
5 |
6 | namespace CatTrackerWebUILibrary.Models
7 | {
8 |
9 | public class CatTrackerModel
10 | {
11 | [Required]
12 | [StringLength(20, ErrorMessage = "Breed is too long.")]
13 | public string Breed { get; set; }
14 |
15 | [StringLength(20, ErrorMessage = "Color is too long.")]
16 | public string Color { get; set; }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/CatTrackerWebUILibrary/Models/CatTrackerResult.cs:
--------------------------------------------------------------------------------
1 | namespace CatTrackerWebUILibrary.Models
2 | {
3 | public class CatTrackerResult
4 | {
5 | public string Name { get; set; }
6 | public double Distance { get; set; }
7 | public string Breed { get; set; }
8 | public string Color { get; set; }
9 | public string ImagePath { get; set; }
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/CatTrackerWebUILibrary/Models/FancyCatTracker.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Globalization;
4 |
5 | namespace CatTrackerWebUILibrary.Models
6 | {
7 | public static class FancyCatTracker
8 | {
9 | public static IList FindCats(string breed, string color)
10 | {
11 | // If the breed length is 3, return no results
12 | if (breed.Length == 3)
13 | {
14 | return Array.Empty();
15 | }
16 |
17 | var count = new Random().Next(1, 20);
18 | var results = new CatTrackerResult[count];
19 | for (int i = 0; i < count; i++)
20 | {
21 | var name = GetName();
22 |
23 | results[i] = new CatTrackerResult
24 | {
25 | // Use random values for these
26 | Name = name,
27 | Distance = GetDistance(),
28 | ImagePath = GetImagePath(seed: name.GetHashCode()),
29 |
30 | // Echo the search query for these
31 | Breed = breed,
32 | Color = color,
33 | };
34 | }
35 |
36 | return results;
37 | }
38 |
39 | private static string GetImagePath(int seed)
40 | {
41 | const int ImageCount = 20; // we have 20 cat images in the 'wwwroot/cats' folder
42 | var imageIndex = new Random(seed).Next(ImageCount) + 1;
43 | return string.Format(CultureInfo.InvariantCulture, "_content/CatTrackerWebUILibrary/cats/cat{0}.jpg", imageIndex);
44 | }
45 |
46 | private static double GetDistance()
47 | {
48 | return new Random().NextDouble() * 100;
49 | }
50 |
51 | private static string GetName()
52 | {
53 | return CatNames[new Random().Next(0, CatNames.Length)];
54 | }
55 |
56 | // Sourced from https://en.wikipedia.org/wiki/Popular_cat_names
57 | private static readonly string[] CatNames = new[]
58 | {
59 | "Tiger",
60 | "Puss",
61 | "Smokey",
62 | "Misty",
63 | "Tigger",
64 | "Molly",
65 | "Charlie",
66 | "Tigger",
67 | "Poppy",
68 | "Oscar",
69 | "Molly",
70 | "Felix",
71 | "Smudge",
72 | "Sooty",
73 | "Tigger",
74 | "Felix",
75 | "Minka",
76 | "Moritz",
77 | "Charly",
78 | "Tiger",
79 | "Romeo",
80 | "Pallina",
81 | "Micio",
82 | "Luna",
83 | "Chicco",
84 | "노랑이",
85 | "야옹이",
86 | "Minou",
87 | "Grisou",
88 | "Ti-Mine",
89 | "Félix",
90 | "Caramel",
91 | "咪咪",
92 | "妹妹",
93 | "汤圆",
94 | "花卷",
95 | "球球",
96 | "Momo",
97 | "Kuro",
98 | "Hana",
99 | "Koko",
100 | "Shiro",
101 | };
102 | }
103 | }
104 |
--------------------------------------------------------------------------------
/CatTrackerWebUILibrary/_Imports.razor:
--------------------------------------------------------------------------------
1 | @using Microsoft.AspNetCore.Components.Forms
2 | @using Microsoft.AspNetCore.Components.Web
3 | @using CatTrackerWebUILibrary.Models
4 |
--------------------------------------------------------------------------------
/CatTrackerWebUILibrary/wwwroot/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerWebUILibrary/wwwroot/background.png
--------------------------------------------------------------------------------
/CatTrackerWebUILibrary/wwwroot/cats/cat1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerWebUILibrary/wwwroot/cats/cat1.jpg
--------------------------------------------------------------------------------
/CatTrackerWebUILibrary/wwwroot/cats/cat10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerWebUILibrary/wwwroot/cats/cat10.jpg
--------------------------------------------------------------------------------
/CatTrackerWebUILibrary/wwwroot/cats/cat11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerWebUILibrary/wwwroot/cats/cat11.jpg
--------------------------------------------------------------------------------
/CatTrackerWebUILibrary/wwwroot/cats/cat12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerWebUILibrary/wwwroot/cats/cat12.jpg
--------------------------------------------------------------------------------
/CatTrackerWebUILibrary/wwwroot/cats/cat13.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerWebUILibrary/wwwroot/cats/cat13.jpg
--------------------------------------------------------------------------------
/CatTrackerWebUILibrary/wwwroot/cats/cat14.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerWebUILibrary/wwwroot/cats/cat14.jpg
--------------------------------------------------------------------------------
/CatTrackerWebUILibrary/wwwroot/cats/cat15.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerWebUILibrary/wwwroot/cats/cat15.jpg
--------------------------------------------------------------------------------
/CatTrackerWebUILibrary/wwwroot/cats/cat16.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerWebUILibrary/wwwroot/cats/cat16.jpg
--------------------------------------------------------------------------------
/CatTrackerWebUILibrary/wwwroot/cats/cat17.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerWebUILibrary/wwwroot/cats/cat17.jpg
--------------------------------------------------------------------------------
/CatTrackerWebUILibrary/wwwroot/cats/cat18.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerWebUILibrary/wwwroot/cats/cat18.jpg
--------------------------------------------------------------------------------
/CatTrackerWebUILibrary/wwwroot/cats/cat19.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerWebUILibrary/wwwroot/cats/cat19.jpg
--------------------------------------------------------------------------------
/CatTrackerWebUILibrary/wwwroot/cats/cat2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerWebUILibrary/wwwroot/cats/cat2.jpg
--------------------------------------------------------------------------------
/CatTrackerWebUILibrary/wwwroot/cats/cat20.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerWebUILibrary/wwwroot/cats/cat20.jpg
--------------------------------------------------------------------------------
/CatTrackerWebUILibrary/wwwroot/cats/cat3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerWebUILibrary/wwwroot/cats/cat3.jpg
--------------------------------------------------------------------------------
/CatTrackerWebUILibrary/wwwroot/cats/cat4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerWebUILibrary/wwwroot/cats/cat4.jpg
--------------------------------------------------------------------------------
/CatTrackerWebUILibrary/wwwroot/cats/cat5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerWebUILibrary/wwwroot/cats/cat5.jpg
--------------------------------------------------------------------------------
/CatTrackerWebUILibrary/wwwroot/cats/cat6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerWebUILibrary/wwwroot/cats/cat6.jpg
--------------------------------------------------------------------------------
/CatTrackerWebUILibrary/wwwroot/cats/cat7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerWebUILibrary/wwwroot/cats/cat7.jpg
--------------------------------------------------------------------------------
/CatTrackerWebUILibrary/wwwroot/cats/cat8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerWebUILibrary/wwwroot/cats/cat8.jpg
--------------------------------------------------------------------------------
/CatTrackerWebUILibrary/wwwroot/cats/cat9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Eilon/CatTrackerDemo/a7e1162d2271b25a9b834321661935d438912864/CatTrackerWebUILibrary/wwwroot/cats/cat9.jpg
--------------------------------------------------------------------------------
/CatTrackerWebUILibrary/wwwroot/styles.css:
--------------------------------------------------------------------------------
1 | .my-component {
2 | border: 2px dashed green;
3 | padding: 1em;
4 | margin: 1em 0;
5 | background-image: url('background.png');
6 | background-repeat: no-repeat;
7 | background-position: center;
8 | background-size: cover;
9 | font-size: 20px;
10 | }
11 |
12 | .inputField
13 | {
14 | padding: 10px;
15 | }
16 |
17 | .rightside
18 | {
19 | text-align: right;
20 | }
21 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) .NET Foundation Contributors
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Readme.md:
--------------------------------------------------------------------------------
1 | # Cat Track Demo for Mobile Blazor Bindings
2 |
3 | This sample demonstrates using Mobile Blazor Bindings and Blazor Web to re-use UI in a web app and as native Android, iOS, macOS, and Windows apps.
4 |
5 | * [CatTrackerWebUILibrary](./CatTrackerWebUILibrary) - Blazor Web UI for core Cat Tracker logic and UI
6 | * [CatTrackerDemo.Web](./CatTrackerDemo.Web) - ASP.NET Core Blazor Web app that hosts the Blazor Web UI library
7 | * [CatTrackerDemo](./CatTrackerDemo) - Cross-platform Mobile Blazor Bindings UI that hosts the Blazor Web UI library
8 | * [CatTrackerDemo.Android](./CatTrackerDemo.Android) - Android host for cross-platform UI
9 | * [CatTrackerDemo.iOS](./CatTrackerDemo.iOS) - iOS host for cross-platform UI
10 | * [CatTrackerDemo.macOS](./CatTrackerDemo.macOS) - macOS host for cross-platform UI
11 | * [CatTrackerDemo.Windows](./CatTrackerDemo.Windows) - Windows host for cross-platform UI
12 |
13 | ## License
14 |
15 | See the [License](LICENSE.txt) file for details.
16 |
--------------------------------------------------------------------------------