├── .gitignore ├── App.razor ├── BlazingPizza.csproj ├── CODE_OF_CONDUCT.md ├── LICENSE ├── LICENSE-CODE ├── Model ├── Address.cs ├── Order.cs ├── OrderWithStatus.cs ├── Pizza.cs ├── PizzaSpecial.cs ├── PizzaTopping.cs ├── Topping.cs └── UserInfo.cs ├── Pages ├── Error.cshtml ├── Error.cshtml.cs ├── Index.razor └── _Host.cshtml ├── Program.cs ├── Properties └── launchSettings.json ├── README.md ├── SECURITY.md ├── Shared └── MainLayout.razor ├── _Imports.razor ├── appsettings.Development.json ├── appsettings.json └── wwwroot ├── css ├── bootstrap │ ├── bootstrap.min.css │ └── bootstrap.min.css.map ├── font │ ├── quicksand-v8-latin-300.woff │ ├── quicksand-v8-latin-300.woff2 │ ├── quicksand-v8-latin-500.woff │ ├── quicksand-v8-latin-500.woff2 │ ├── quicksand-v8-latin-700.woff │ ├── quicksand-v8-latin-700.woff2 │ ├── quicksand-v8-latin-regular.woff │ ├── quicksand-v8-latin-regular.woff2 │ └── quicksand.css └── site.css ├── favicon.ico └── img ├── bike.svg ├── icon-512.png ├── logo.svg ├── pizza-slice.svg ├── pizzas ├── bacon.jpg ├── brit.jpg ├── cheese.jpg ├── margherita.jpg ├── meaty.jpg ├── mushroom.jpg ├── pepperoni.jpg └── salad.jpg └── user.svg /.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 auto generated files 17 | mono_crash.* 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | [Ww][Ii][Nn]32/ 27 | [Aa][Rr][Mm]/ 28 | [Aa][Rr][Mm]64/ 29 | bld/ 30 | [Bb]in/ 31 | [Oo]bj/ 32 | [Ll]og/ 33 | [Ll]ogs/ 34 | 35 | # Visual Studio 2015/2017 cache/options directory 36 | .vs/ 37 | # Uncomment if you have tasks that create the project's static files in wwwroot 38 | #wwwroot/ 39 | 40 | # Visual Studio 2017 auto generated files 41 | Generated\ Files/ 42 | 43 | # MSTest test Results 44 | [Tt]est[Rr]esult*/ 45 | [Bb]uild[Ll]og.* 46 | 47 | # NUnit 48 | *.VisualState.xml 49 | TestResult.xml 50 | nunit-*.xml 51 | 52 | # Build Results of an ATL Project 53 | [Dd]ebugPS/ 54 | [Rr]eleasePS/ 55 | dlldata.c 56 | 57 | # Benchmark Results 58 | BenchmarkDotNet.Artifacts/ 59 | 60 | # .NET Core 61 | project.lock.json 62 | project.fragment.lock.json 63 | artifacts/ 64 | 65 | # Tye 66 | .tye/ 67 | 68 | # ASP.NET Scaffolding 69 | ScaffoldingReadMe.txt 70 | 71 | # StyleCop 72 | StyleCopReport.xml 73 | 74 | # Files built by Visual Studio 75 | *_i.c 76 | *_p.c 77 | *_h.h 78 | *.ilk 79 | *.meta 80 | *.obj 81 | *.iobj 82 | *.pch 83 | *.pdb 84 | *.ipdb 85 | *.pgc 86 | *.pgd 87 | *.rsp 88 | *.sbr 89 | *.tlb 90 | *.tli 91 | *.tlh 92 | *.tmp 93 | *.tmp_proj 94 | *_wpftmp.csproj 95 | *.log 96 | *.vspscc 97 | *.vssscc 98 | .builds 99 | *.pidb 100 | *.svclog 101 | *.scc 102 | 103 | # Chutzpah Test files 104 | _Chutzpah* 105 | 106 | # Visual C++ cache files 107 | ipch/ 108 | *.aps 109 | *.ncb 110 | *.opendb 111 | *.opensdf 112 | *.sdf 113 | *.cachefile 114 | *.VC.db 115 | *.VC.VC.opendb 116 | 117 | # Visual Studio profiler 118 | *.psess 119 | *.vsp 120 | *.vspx 121 | *.sap 122 | 123 | # Visual Studio Trace Files 124 | *.e2e 125 | 126 | # TFS 2012 Local Workspace 127 | $tf/ 128 | 129 | # Guidance Automation Toolkit 130 | *.gpState 131 | 132 | # ReSharper is a .NET coding add-in 133 | _ReSharper*/ 134 | *.[Rr]e[Ss]harper 135 | *.DotSettings.user 136 | 137 | # TeamCity is a build add-in 138 | _TeamCity* 139 | 140 | # DotCover is a Code Coverage Tool 141 | *.dotCover 142 | 143 | # AxoCover is a Code Coverage Tool 144 | .axoCover/* 145 | !.axoCover/settings.json 146 | 147 | # Coverlet is a free, cross platform Code Coverage Tool 148 | coverage*.json 149 | coverage*.xml 150 | coverage*.info 151 | 152 | # Visual Studio code coverage results 153 | *.coverage 154 | *.coveragexml 155 | 156 | # NCrunch 157 | _NCrunch_* 158 | .*crunch*.local.xml 159 | nCrunchTemp_* 160 | 161 | # MightyMoose 162 | *.mm.* 163 | AutoTest.Net/ 164 | 165 | # Web workbench (sass) 166 | .sass-cache/ 167 | 168 | # Installshield output folder 169 | [Ee]xpress/ 170 | 171 | # DocProject is a documentation generator add-in 172 | DocProject/buildhelp/ 173 | DocProject/Help/*.HxT 174 | DocProject/Help/*.HxC 175 | DocProject/Help/*.hhc 176 | DocProject/Help/*.hhk 177 | DocProject/Help/*.hhp 178 | DocProject/Help/Html2 179 | DocProject/Help/html 180 | 181 | # Click-Once directory 182 | publish/ 183 | 184 | # Publish Web Output 185 | *.[Pp]ublish.xml 186 | *.azurePubxml 187 | # Note: Comment the next line if you want to checkin your web deploy settings, 188 | # but database connection strings (with potential passwords) will be unencrypted 189 | *.pubxml 190 | *.publishproj 191 | 192 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 193 | # checkin your Azure Web App publish settings, but sensitive information contained 194 | # in these scripts will be unencrypted 195 | PublishScripts/ 196 | 197 | # NuGet Packages 198 | *.nupkg 199 | # NuGet Symbol Packages 200 | *.snupkg 201 | # The packages folder can be ignored because of Package Restore 202 | **/[Pp]ackages/* 203 | # except build/, which is used as an MSBuild target. 204 | !**/[Pp]ackages/build/ 205 | # Uncomment if necessary however generally it will be regenerated when needed 206 | #!**/[Pp]ackages/repositories.config 207 | # NuGet v3's project.json files produces more ignorable files 208 | *.nuget.props 209 | *.nuget.targets 210 | 211 | # Microsoft Azure Build Output 212 | csx/ 213 | *.build.csdef 214 | 215 | # Microsoft Azure Emulator 216 | ecf/ 217 | rcf/ 218 | 219 | # Windows Store app package directories and files 220 | AppPackages/ 221 | BundleArtifacts/ 222 | Package.StoreAssociation.xml 223 | _pkginfo.txt 224 | *.appx 225 | *.appxbundle 226 | *.appxupload 227 | 228 | # Visual Studio cache files 229 | # files ending in .cache can be ignored 230 | *.[Cc]ache 231 | # but keep track of directories ending in .cache 232 | !?*.[Cc]ache/ 233 | 234 | # Others 235 | ClientBin/ 236 | ~$* 237 | *~ 238 | *.dbmdl 239 | *.dbproj.schemaview 240 | *.jfm 241 | *.pfx 242 | *.publishsettings 243 | orleans.codegen.cs 244 | 245 | # Including strong name files can present a security risk 246 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 247 | #*.snk 248 | 249 | # Since there are multiple workflows, uncomment next line to ignore bower_components 250 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 251 | #bower_components/ 252 | 253 | # RIA/Silverlight projects 254 | Generated_Code/ 255 | 256 | # Backup & report files from converting an old project file 257 | # to a newer Visual Studio version. Backup files are not needed, 258 | # because we have git ;-) 259 | _UpgradeReport_Files/ 260 | Backup*/ 261 | UpgradeLog*.XML 262 | UpgradeLog*.htm 263 | ServiceFabricBackup/ 264 | *.rptproj.bak 265 | 266 | # SQL Server files 267 | *.mdf 268 | *.ldf 269 | *.ndf 270 | 271 | # Business Intelligence projects 272 | *.rdl.data 273 | *.bim.layout 274 | *.bim_*.settings 275 | *.rptproj.rsuser 276 | *- [Bb]ackup.rdl 277 | *- [Bb]ackup ([0-9]).rdl 278 | *- [Bb]ackup ([0-9][0-9]).rdl 279 | 280 | # Microsoft Fakes 281 | FakesAssemblies/ 282 | 283 | # GhostDoc plugin setting file 284 | *.GhostDoc.xml 285 | 286 | # Node.js Tools for Visual Studio 287 | .ntvs_analysis.dat 288 | node_modules/ 289 | 290 | # Visual Studio 6 build log 291 | *.plg 292 | 293 | # Visual Studio 6 workspace options file 294 | *.opt 295 | 296 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 297 | *.vbw 298 | 299 | # Visual Studio LightSwitch build output 300 | **/*.HTMLClient/GeneratedArtifacts 301 | **/*.DesktopClient/GeneratedArtifacts 302 | **/*.DesktopClient/ModelManifest.xml 303 | **/*.Server/GeneratedArtifacts 304 | **/*.Server/ModelManifest.xml 305 | _Pvt_Extensions 306 | 307 | # Paket dependency manager 308 | .paket/paket.exe 309 | paket-files/ 310 | 311 | # FAKE - F# Make 312 | .fake/ 313 | 314 | # CodeRush personal settings 315 | .cr/personal 316 | 317 | # Python Tools for Visual Studio (PTVS) 318 | __pycache__/ 319 | *.pyc 320 | 321 | # Cake - Uncomment if you are using it 322 | # tools/** 323 | # !tools/packages.config 324 | 325 | # Tabs Studio 326 | *.tss 327 | 328 | # Telerik's JustMock configuration file 329 | *.jmconfig 330 | 331 | # BizTalk build output 332 | *.btp.cs 333 | *.btm.cs 334 | *.odx.cs 335 | *.xsd.cs 336 | 337 | # OpenCover UI analysis results 338 | OpenCover/ 339 | 340 | # Azure Stream Analytics local run output 341 | ASALocalRun/ 342 | 343 | # MSBuild Binary and Structured Log 344 | *.binlog 345 | 346 | # NVidia Nsight GPU debugger configuration file 347 | *.nvuser 348 | 349 | # MFractors (Xamarin productivity tool) working folder 350 | .mfractor/ 351 | 352 | # Local History for Visual Studio 353 | .localhistory/ 354 | 355 | # BeatPulse healthcheck temp database 356 | healthchecksdb 357 | 358 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 359 | MigrationBackup/ 360 | 361 | # Ionide (cross platform F# VS Code tools) working folder 362 | .ionide/ 363 | 364 | # Fody - auto-generated XML schema 365 | FodyWeavers.xsd 366 | 367 | ## 368 | ## Visual studio for Mac 369 | ## 370 | 371 | 372 | # globs 373 | Makefile.in 374 | *.userprefs 375 | *.usertasks 376 | config.make 377 | config.status 378 | aclocal.m4 379 | install-sh 380 | autom4te.cache/ 381 | *.tar.gz 382 | tarballs/ 383 | test-results/ 384 | 385 | # Mac bundle stuff 386 | *.dmg 387 | *.app 388 | 389 | # content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore 390 | # General 391 | .DS_Store 392 | .AppleDouble 393 | .LSOverride 394 | 395 | # Icon must end with two \r 396 | Icon 397 | 398 | 399 | # Thumbnails 400 | ._* 401 | 402 | # Files that might appear in the root of a volume 403 | .DocumentRevisions-V100 404 | .fseventsd 405 | .Spotlight-V100 406 | .TemporaryItems 407 | .Trashes 408 | .VolumeIcon.icns 409 | .com.apple.timemachine.donotpresent 410 | 411 | # Directories potentially created on remote AFP share 412 | .AppleDB 413 | .AppleDesktop 414 | Network Trash Folder 415 | Temporary Items 416 | .apdisk 417 | 418 | # content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore 419 | # Windows thumbnail cache files 420 | Thumbs.db 421 | ehthumbs.db 422 | ehthumbs_vista.db 423 | 424 | # Dump file 425 | *.stackdump 426 | 427 | # Folder config file 428 | [Dd]esktop.ini 429 | 430 | # Recycle Bin used on file shares 431 | $RECYCLE.BIN/ 432 | 433 | # Windows Installer files 434 | *.cab 435 | *.msi 436 | *.msix 437 | *.msm 438 | *.msp 439 | 440 | # Windows shortcuts 441 | *.lnk 442 | 443 | # JetBrains Rider 444 | .idea/ 445 | *.sln.iml 446 | 447 | ## 448 | ## Visual Studio Code 449 | ## 450 | .vscode/* 451 | !.vscode/settings.json 452 | !.vscode/tasks.json 453 | !.vscode/launch.json 454 | !.vscode/extensions.json 455 | -------------------------------------------------------------------------------- /App.razor: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 |

Sorry, there's nothing at this address.

8 |
9 |
10 |
11 | -------------------------------------------------------------------------------- /BlazingPizza.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net6.0 5 | enable 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Microsoft Open Source Code of Conduct 2 | 3 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). 4 | 5 | Resources: 6 | 7 | - [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) 8 | - [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) 9 | - Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Attribution 4.0 International 2 | 3 | ======================================================================= 4 | 5 | Creative Commons Corporation ("Creative Commons") is not a law firm and 6 | does not provide legal services or legal advice. Distribution of 7 | Creative Commons public licenses does not create a lawyer-client or 8 | other relationship. Creative Commons makes its licenses and related 9 | information available on an "as-is" basis. Creative Commons gives no 10 | warranties regarding its licenses, any material licensed under their 11 | terms and conditions, or any related information. Creative Commons 12 | disclaims all liability for damages resulting from their use to the 13 | fullest extent possible. 14 | 15 | Using Creative Commons Public Licenses 16 | 17 | Creative Commons public licenses provide a standard set of terms and 18 | conditions that creators and other rights holders may use to share 19 | original works of authorship and other material subject to copyright 20 | and certain other rights specified in the public license below. The 21 | following considerations are for informational purposes only, are not 22 | exhaustive, and do not form part of our licenses. 23 | 24 | Considerations for licensors: Our public licenses are 25 | intended for use by those authorized to give the public 26 | permission to use material in ways otherwise restricted by 27 | copyright and certain other rights. Our licenses are 28 | irrevocable. Licensors should read and understand the terms 29 | and conditions of the license they choose before applying it. 30 | Licensors should also secure all rights necessary before 31 | applying our licenses so that the public can reuse the 32 | material as expected. Licensors should clearly mark any 33 | material not subject to the license. This includes other CC- 34 | licensed material, or material used under an exception or 35 | limitation to copyright. More considerations for licensors: 36 | wiki.creativecommons.org/Considerations_for_licensors 37 | 38 | Considerations for the public: By using one of our public 39 | licenses, a licensor grants the public permission to use the 40 | licensed material under specified terms and conditions. If 41 | the licensor's permission is not necessary for any reason--for 42 | example, because of any applicable exception or limitation to 43 | copyright--then that use is not regulated by the license. Our 44 | licenses grant only permissions under copyright and certain 45 | other rights that a licensor has authority to grant. Use of 46 | the licensed material may still be restricted for other 47 | reasons, including because others have copyright or other 48 | rights in the material. A licensor may make special requests, 49 | such as asking that all changes be marked or described. 50 | Although not required by our licenses, you are encouraged to 51 | respect those requests where reasonable. More_considerations 52 | for the public: 53 | wiki.creativecommons.org/Considerations_for_licensees 54 | 55 | ======================================================================= 56 | 57 | Creative Commons Attribution 4.0 International Public License 58 | 59 | By exercising the Licensed Rights (defined below), You accept and agree 60 | to be bound by the terms and conditions of this Creative Commons 61 | Attribution 4.0 International Public License ("Public License"). To the 62 | extent this Public License may be interpreted as a contract, You are 63 | granted the Licensed Rights in consideration of Your acceptance of 64 | these terms and conditions, and the Licensor grants You such rights in 65 | consideration of benefits the Licensor receives from making the 66 | Licensed Material available under these terms and conditions. 67 | 68 | 69 | Section 1 -- Definitions. 70 | 71 | a. Adapted Material means material subject to Copyright and Similar 72 | Rights that is derived from or based upon the Licensed Material 73 | and in which the Licensed Material is translated, altered, 74 | arranged, transformed, or otherwise modified in a manner requiring 75 | permission under the Copyright and Similar Rights held by the 76 | Licensor. For purposes of this Public License, where the Licensed 77 | Material is a musical work, performance, or sound recording, 78 | Adapted Material is always produced where the Licensed Material is 79 | synched in timed relation with a moving image. 80 | 81 | b. Adapter's License means the license You apply to Your Copyright 82 | and Similar Rights in Your contributions to Adapted Material in 83 | accordance with the terms and conditions of this Public License. 84 | 85 | c. Copyright and Similar Rights means copyright and/or similar rights 86 | closely related to copyright including, without limitation, 87 | performance, broadcast, sound recording, and Sui Generis Database 88 | Rights, without regard to how the rights are labeled or 89 | categorized. For purposes of this Public License, the rights 90 | specified in Section 2(b)(1)-(2) are not Copyright and Similar 91 | Rights. 92 | 93 | d. Effective Technological Measures means those measures that, in the 94 | absence of proper authority, may not be circumvented under laws 95 | fulfilling obligations under Article 11 of the WIPO Copyright 96 | Treaty adopted on December 20, 1996, and/or similar international 97 | agreements. 98 | 99 | e. Exceptions and Limitations means fair use, fair dealing, and/or 100 | any other exception or limitation to Copyright and Similar Rights 101 | that applies to Your use of the Licensed Material. 102 | 103 | f. Licensed Material means the artistic or literary work, database, 104 | or other material to which the Licensor applied this Public 105 | License. 106 | 107 | g. Licensed Rights means the rights granted to You subject to the 108 | terms and conditions of this Public License, which are limited to 109 | all Copyright and Similar Rights that apply to Your use of the 110 | Licensed Material and that the Licensor has authority to license. 111 | 112 | h. Licensor means the individual(s) or entity(ies) granting rights 113 | under this Public License. 114 | 115 | i. Share means to provide material to the public by any means or 116 | process that requires permission under the Licensed Rights, such 117 | as reproduction, public display, public performance, distribution, 118 | dissemination, communication, or importation, and to make material 119 | available to the public including in ways that members of the 120 | public may access the material from a place and at a time 121 | individually chosen by them. 122 | 123 | j. Sui Generis Database Rights means rights other than copyright 124 | resulting from Directive 96/9/EC of the European Parliament and of 125 | the Council of 11 March 1996 on the legal protection of databases, 126 | as amended and/or succeeded, as well as other essentially 127 | equivalent rights anywhere in the world. 128 | 129 | k. You means the individual or entity exercising the Licensed Rights 130 | under this Public License. Your has a corresponding meaning. 131 | 132 | 133 | Section 2 -- Scope. 134 | 135 | a. License grant. 136 | 137 | 1. Subject to the terms and conditions of this Public License, 138 | the Licensor hereby grants You a worldwide, royalty-free, 139 | non-sublicensable, non-exclusive, irrevocable license to 140 | exercise the Licensed Rights in the Licensed Material to: 141 | 142 | a. reproduce and Share the Licensed Material, in whole or 143 | in part; and 144 | 145 | b. produce, reproduce, and Share Adapted Material. 146 | 147 | 2. Exceptions and Limitations. For the avoidance of doubt, where 148 | Exceptions and Limitations apply to Your use, this Public 149 | License does not apply, and You do not need to comply with 150 | its terms and conditions. 151 | 152 | 3. Term. The term of this Public License is specified in Section 153 | 6(a). 154 | 155 | 4. Media and formats; technical modifications allowed. The 156 | Licensor authorizes You to exercise the Licensed Rights in 157 | all media and formats whether now known or hereafter created, 158 | and to make technical modifications necessary to do so. The 159 | Licensor waives and/or agrees not to assert any right or 160 | authority to forbid You from making technical modifications 161 | necessary to exercise the Licensed Rights, including 162 | technical modifications necessary to circumvent Effective 163 | Technological Measures. For purposes of this Public License, 164 | simply making modifications authorized by this Section 2(a) 165 | (4) never produces Adapted Material. 166 | 167 | 5. Downstream recipients. 168 | 169 | a. Offer from the Licensor -- Licensed Material. Every 170 | recipient of the Licensed Material automatically 171 | receives an offer from the Licensor to exercise the 172 | Licensed Rights under the terms and conditions of this 173 | Public License. 174 | 175 | b. No downstream restrictions. You may not offer or impose 176 | any additional or different terms or conditions on, or 177 | apply any Effective Technological Measures to, the 178 | Licensed Material if doing so restricts exercise of the 179 | Licensed Rights by any recipient of the Licensed 180 | Material. 181 | 182 | 6. No endorsement. Nothing in this Public License constitutes or 183 | may be construed as permission to assert or imply that You 184 | are, or that Your use of the Licensed Material is, connected 185 | with, or sponsored, endorsed, or granted official status by, 186 | the Licensor or others designated to receive attribution as 187 | provided in Section 3(a)(1)(A)(i). 188 | 189 | b. Other rights. 190 | 191 | 1. Moral rights, such as the right of integrity, are not 192 | licensed under this Public License, nor are publicity, 193 | privacy, and/or other similar personality rights; however, to 194 | the extent possible, the Licensor waives and/or agrees not to 195 | assert any such rights held by the Licensor to the limited 196 | extent necessary to allow You to exercise the Licensed 197 | Rights, but not otherwise. 198 | 199 | 2. Patent and trademark rights are not licensed under this 200 | Public License. 201 | 202 | 3. To the extent possible, the Licensor waives any right to 203 | collect royalties from You for the exercise of the Licensed 204 | Rights, whether directly or through a collecting society 205 | under any voluntary or waivable statutory or compulsory 206 | licensing scheme. In all other cases the Licensor expressly 207 | reserves any right to collect such royalties. 208 | 209 | 210 | Section 3 -- License Conditions. 211 | 212 | Your exercise of the Licensed Rights is expressly made subject to the 213 | following conditions. 214 | 215 | a. Attribution. 216 | 217 | 1. If You Share the Licensed Material (including in modified 218 | form), You must: 219 | 220 | a. retain the following if it is supplied by the Licensor 221 | with the Licensed Material: 222 | 223 | i. identification of the creator(s) of the Licensed 224 | Material and any others designated to receive 225 | attribution, in any reasonable manner requested by 226 | the Licensor (including by pseudonym if 227 | designated); 228 | 229 | ii. a copyright notice; 230 | 231 | iii. a notice that refers to this Public License; 232 | 233 | iv. a notice that refers to the disclaimer of 234 | warranties; 235 | 236 | v. a URI or hyperlink to the Licensed Material to the 237 | extent reasonably practicable; 238 | 239 | b. indicate if You modified the Licensed Material and 240 | retain an indication of any previous modifications; and 241 | 242 | c. indicate the Licensed Material is licensed under this 243 | Public License, and include the text of, or the URI or 244 | hyperlink to, this Public License. 245 | 246 | 2. You may satisfy the conditions in Section 3(a)(1) in any 247 | reasonable manner based on the medium, means, and context in 248 | which You Share the Licensed Material. For example, it may be 249 | reasonable to satisfy the conditions by providing a URI or 250 | hyperlink to a resource that includes the required 251 | information. 252 | 253 | 3. If requested by the Licensor, You must remove any of the 254 | information required by Section 3(a)(1)(A) to the extent 255 | reasonably practicable. 256 | 257 | 4. If You Share Adapted Material You produce, the Adapter's 258 | License You apply must not prevent recipients of the Adapted 259 | Material from complying with this Public License. 260 | 261 | 262 | Section 4 -- Sui Generis Database Rights. 263 | 264 | Where the Licensed Rights include Sui Generis Database Rights that 265 | apply to Your use of the Licensed Material: 266 | 267 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right 268 | to extract, reuse, reproduce, and Share all or a substantial 269 | portion of the contents of the database; 270 | 271 | b. if You include all or a substantial portion of the database 272 | contents in a database in which You have Sui Generis Database 273 | Rights, then the database in which You have Sui Generis Database 274 | Rights (but not its individual contents) is Adapted Material; and 275 | 276 | c. You must comply with the conditions in Section 3(a) if You Share 277 | all or a substantial portion of the contents of the database. 278 | 279 | For the avoidance of doubt, this Section 4 supplements and does not 280 | replace Your obligations under this Public License where the Licensed 281 | Rights include other Copyright and Similar Rights. 282 | 283 | 284 | Section 5 -- Disclaimer of Warranties and Limitation of Liability. 285 | 286 | a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE 287 | EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS 288 | AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF 289 | ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, 290 | IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, 291 | WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR 292 | PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, 293 | ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT 294 | KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT 295 | ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. 296 | 297 | b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE 298 | TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, 299 | NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, 300 | INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, 301 | COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR 302 | USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN 303 | ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR 304 | DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR 305 | IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. 306 | 307 | c. The disclaimer of warranties and limitation of liability provided 308 | above shall be interpreted in a manner that, to the extent 309 | possible, most closely approximates an absolute disclaimer and 310 | waiver of all liability. 311 | 312 | 313 | Section 6 -- Term and Termination. 314 | 315 | a. This Public License applies for the term of the Copyright and 316 | Similar Rights licensed here. However, if You fail to comply with 317 | this Public License, then Your rights under this Public License 318 | terminate automatically. 319 | 320 | b. Where Your right to use the Licensed Material has terminated under 321 | Section 6(a), it reinstates: 322 | 323 | 1. automatically as of the date the violation is cured, provided 324 | it is cured within 30 days of Your discovery of the 325 | violation; or 326 | 327 | 2. upon express reinstatement by the Licensor. 328 | 329 | For the avoidance of doubt, this Section 6(b) does not affect any 330 | right the Licensor may have to seek remedies for Your violations 331 | of this Public License. 332 | 333 | c. For the avoidance of doubt, the Licensor may also offer the 334 | Licensed Material under separate terms or conditions or stop 335 | distributing the Licensed Material at any time; however, doing so 336 | will not terminate this Public License. 337 | 338 | d. Sections 1, 5, 6, 7, and 8 survive termination of this Public 339 | License. 340 | 341 | 342 | Section 7 -- Other Terms and Conditions. 343 | 344 | a. The Licensor shall not be bound by any additional or different 345 | terms or conditions communicated by You unless expressly agreed. 346 | 347 | b. Any arrangements, understandings, or agreements regarding the 348 | Licensed Material not stated herein are separate from and 349 | independent of the terms and conditions of this Public License. 350 | 351 | 352 | Section 8 -- Interpretation. 353 | 354 | a. For the avoidance of doubt, this Public License does not, and 355 | shall not be interpreted to, reduce, limit, restrict, or impose 356 | conditions on any use of the Licensed Material that could lawfully 357 | be made without permission under this Public License. 358 | 359 | b. To the extent possible, if any provision of this Public License is 360 | deemed unenforceable, it shall be automatically reformed to the 361 | minimum extent necessary to make it enforceable. If the provision 362 | cannot be reformed, it shall be severed from this Public License 363 | without affecting the enforceability of the remaining terms and 364 | conditions. 365 | 366 | c. No term or condition of this Public License will be waived and no 367 | failure to comply consented to unless expressly agreed to by the 368 | Licensor. 369 | 370 | d. Nothing in this Public License constitutes or may be interpreted 371 | as a limitation upon, or waiver of, any privileges and immunities 372 | that apply to the Licensor or You, including from the legal 373 | processes of any jurisdiction or authority. 374 | 375 | 376 | ======================================================================= 377 | 378 | Creative Commons is not a party to its public 379 | licenses. Notwithstanding, Creative Commons may elect to apply one of 380 | its public licenses to material it publishes and in those instances 381 | will be considered the “Licensor.” The text of the Creative Commons 382 | public licenses is dedicated to the public domain under the CC0 Public 383 | Domain Dedication. Except for the limited purpose of indicating that 384 | material is shared under a Creative Commons public license or as 385 | otherwise permitted by the Creative Commons policies published at 386 | creativecommons.org/policies, Creative Commons does not authorize the 387 | use of the trademark "Creative Commons" or any other trademark or logo 388 | of Creative Commons without its prior written consent including, 389 | without limitation, in connection with any unauthorized modifications 390 | to any of its public licenses or any other arrangements, 391 | understandings, or agreements concerning use of licensed material. For 392 | the avoidance of doubt, this paragraph does not form part of the 393 | public licenses. 394 | 395 | Creative Commons may be contacted at creativecommons.org. -------------------------------------------------------------------------------- /LICENSE-CODE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Microsoft Corporation. 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 | -------------------------------------------------------------------------------- /Model/Address.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace BlazingPizza 3 | { 4 | public class Address 5 | { 6 | public int Id { get; set; } 7 | 8 | public string Name { get; set; } 9 | 10 | public string Line1 { get; set; } 11 | 12 | public string Line2 { get; set; } 13 | 14 | public string City { get; set; } 15 | 16 | public string Region { get; set; } 17 | 18 | public string PostalCode { get; set; } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Model/Order.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | 5 | namespace BlazingPizza 6 | { 7 | public class Order 8 | { 9 | public int OrderId { get; set; } 10 | 11 | public string UserId { get; set; } 12 | 13 | public DateTime CreatedTime { get; set; } 14 | 15 | public Address DeliveryAddress { get; set; } = new Address(); 16 | 17 | public List Pizzas { get; set; } = new List(); 18 | 19 | public decimal GetTotalPrice() => Pizzas.Sum(p => p.GetTotalPrice()); 20 | 21 | public string GetFormattedTotalPrice() => GetTotalPrice().ToString("0.00"); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Model/OrderWithStatus.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace BlazingPizza 5 | { 6 | public class OrderWithStatus 7 | { 8 | public readonly static TimeSpan PreparationDuration = TimeSpan.FromSeconds(10); 9 | public readonly static TimeSpan DeliveryDuration = TimeSpan.FromMinutes(1); // Unrealistic, but more interesting to watch 10 | 11 | public Order Order { get; set; } 12 | 13 | public string StatusText { get; set; } 14 | 15 | public bool IsDelivered => StatusText == "Delivered"; 16 | 17 | public static OrderWithStatus FromOrder(Order order) 18 | { 19 | // To simulate a real backend process, we fake status updates based on the amount 20 | // of time since the order was placed 21 | string statusText; 22 | var dispatchTime = order.CreatedTime.Add(PreparationDuration); 23 | 24 | if (DateTime.Now < dispatchTime) 25 | { 26 | statusText = "Preparing"; 27 | } 28 | else if (DateTime.Now < dispatchTime + DeliveryDuration) 29 | { 30 | statusText = "Out for delivery"; 31 | } 32 | else 33 | { 34 | statusText = "Delivered"; 35 | } 36 | 37 | return new OrderWithStatus 38 | { 39 | Order = order, 40 | StatusText = statusText 41 | }; 42 | } 43 | 44 | 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /Model/Pizza.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | 4 | namespace BlazingPizza 5 | { 6 | /// 7 | /// Represents a customized pizza as part of an order 8 | /// 9 | public class Pizza 10 | { 11 | public const int DefaultSize = 12; 12 | public const int MinimumSize = 9; 13 | public const int MaximumSize = 17; 14 | 15 | public int Id { get; set; } 16 | 17 | public int OrderId { get; set; } 18 | 19 | public PizzaSpecial Special { get; set; } 20 | 21 | public int SpecialId { get; set; } 22 | 23 | public int Size { get; set; } 24 | 25 | public List Toppings { get; set; } 26 | 27 | public decimal GetBasePrice() 28 | { 29 | return ((decimal)Size / (decimal)DefaultSize) * Special.BasePrice; 30 | } 31 | 32 | public decimal GetTotalPrice() 33 | { 34 | return GetBasePrice(); 35 | } 36 | 37 | public string GetFormattedTotalPrice() 38 | { 39 | return GetTotalPrice().ToString("0.00"); 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Model/PizzaSpecial.cs: -------------------------------------------------------------------------------- 1 | namespace BlazingPizza 2 | { 3 | /// 4 | /// Represents a pre-configured template for a pizza a user can order 5 | /// 6 | public class PizzaSpecial 7 | { 8 | public int Id { get; set; } 9 | 10 | public string Name { get; set; } 11 | 12 | public decimal BasePrice { get; set; } 13 | 14 | public string Description { get; set; } 15 | 16 | public string ImageUrl { get; set; } 17 | 18 | public string GetFormattedBasePrice() => BasePrice.ToString("0.00"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Model/PizzaTopping.cs: -------------------------------------------------------------------------------- 1 | namespace BlazingPizza 2 | { 3 | public class PizzaTopping 4 | { 5 | public Topping Topping { get; set; } 6 | 7 | public int ToppingId { get; set; } 8 | 9 | public int PizzaId { get; set; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Model/Topping.cs: -------------------------------------------------------------------------------- 1 | namespace BlazingPizza 2 | { 3 | public class Topping 4 | { 5 | public int Id { get; set; } 6 | 7 | public string Name { get; set; } 8 | 9 | public decimal Price { get; set; } 10 | 11 | public string GetFormattedPrice() => Price.ToString("0.00"); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Model/UserInfo.cs: -------------------------------------------------------------------------------- 1 | namespace BlazingPizza 2 | { 3 | public class UserInfo 4 | { 5 | public bool IsAuthenticated { get; set; } 6 | 7 | public string Name { get; set; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Pages/Error.cshtml: -------------------------------------------------------------------------------- 1 | @page 2 | @model BlazingPizza.Pages.ErrorModel 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Error 11 | 12 | 13 | 14 | 15 | 16 |
17 |
18 |

Error.

19 |

An error occurred while processing your request.

20 | 21 | @if (Model.ShowRequestId) 22 | { 23 |

24 | Request ID: @Model.RequestId 25 |

26 | } 27 | 28 |

Development Mode

29 |

30 | Swapping to the Development environment displays detailed information about the error that occurred. 31 |

32 |

33 | The Development environment shouldn't be enabled for deployed applications. 34 | It can result in displaying sensitive information from exceptions to end users. 35 | For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development 36 | and restarting the app. 37 |

38 |
39 |
40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /Pages/Error.cshtml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.Linq; 5 | using System.Threading.Tasks; 6 | using Microsoft.AspNetCore.Mvc; 7 | using Microsoft.AspNetCore.Mvc.RazorPages; 8 | using Microsoft.Extensions.Logging; 9 | 10 | namespace BlazingPizza.Pages 11 | { 12 | [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] 13 | [IgnoreAntiforgeryToken] 14 | public class ErrorModel : PageModel 15 | { 16 | public string RequestId { get; set; } 17 | 18 | public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); 19 | 20 | private readonly ILogger _logger; 21 | 22 | public ErrorModel(ILogger logger) 23 | { 24 | _logger = logger; 25 | } 26 | 27 | public void OnGet() 28 | { 29 | RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier; 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Pages/Index.razor: -------------------------------------------------------------------------------- 1 | @page "/" 2 | 3 |

Blazing Pizzas

4 | -------------------------------------------------------------------------------- /Pages/_Host.cshtml: -------------------------------------------------------------------------------- 1 | @page "/" 2 | @namespace BlazingPizza.Pages 3 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | Blazing Pizza 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 | -------------------------------------------------------------------------------- /Program.cs: -------------------------------------------------------------------------------- 1 | var builder = WebApplication.CreateBuilder(args); 2 | 3 | builder.Services.AddRazorPages(); 4 | builder.Services.AddServerSideBlazor(); 5 | 6 | var app = builder.Build(); 7 | 8 | if (!app.Environment.IsDevelopment()) 9 | { 10 | app.UseExceptionHandler("/Error"); 11 | } 12 | 13 | app.UseStaticFiles(); 14 | app.UseRouting(); 15 | 16 | app.MapRazorPages(); 17 | app.MapBlazorHub(); 18 | app.MapFallbackToPage("/_Host"); 19 | 20 | app.Run(); -------------------------------------------------------------------------------- /Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "iisSettings": { 3 | "windowsAuthentication": false, 4 | "anonymousAuthentication": true, 5 | "iisExpress": { 6 | "applicationUrl": "http://localhost:20845", 7 | "sslPort": 0 8 | } 9 | }, 10 | "profiles": { 11 | "IIS Express": { 12 | "commandName": "IISExpress", 13 | "launchBrowser": true, 14 | "environmentVariables": { 15 | "ASPNETCORE_ENVIRONMENT": "Development" 16 | } 17 | }, 18 | "BlazingPizza": { 19 | "commandName": "Project", 20 | "dotnetRunMessages": "true", 21 | "launchBrowser": true, 22 | "applicationUrl": "http://localhost:5000", 23 | "environmentVariables": { 24 | "ASPNETCORE_ENVIRONMENT": "Development" 25 | } 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Contributing 3 | 4 | This project welcomes contributions and suggestions. Most contributions require you to agree to a 5 | Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us 6 | the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com. 7 | 8 | When you submit a pull request, a CLA bot will automatically determine whether you need to provide 9 | a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions 10 | provided by the bot. You will only need to do this once across all repos using our CLA. 11 | 12 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). 13 | For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or 14 | contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. 15 | 16 | # Legal Notices 17 | 18 | Microsoft and any contributors grant you a license to the Microsoft documentation and other content 19 | in this repository under the [Creative Commons Attribution 4.0 International Public License](https://creativecommons.org/licenses/by/4.0/legalcode), 20 | see the [LICENSE](LICENSE) file, and grant you a license to any code in the repository under the [MIT License](https://opensource.org/licenses/MIT), see the 21 | [LICENSE-CODE](LICENSE-CODE) file. 22 | 23 | Microsoft, Windows, Microsoft Azure and/or other Microsoft products and services referenced in the documentation 24 | may be either trademarks or registered trademarks of Microsoft in the United States and/or other countries. 25 | The licenses for this project do not grant you rights to use any Microsoft names, logos, or trademarks. 26 | Microsoft's general trademark guidelines can be found at http://go.microsoft.com/fwlink/?LinkID=254653. 27 | 28 | Privacy information can be found at https://privacy.microsoft.com/en-us/ 29 | 30 | Microsoft and any contributors reserve all other rights, whether under their respective copyrights, patents, 31 | or trademarks, whether by implication, estoppel or otherwise. 32 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## Security 4 | 5 | Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). 6 | 7 | If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc751383(v=technet.10)), please report it to us as described below. 8 | 9 | ## Reporting Security Issues 10 | 11 | **Please do not report security vulnerabilities through public GitHub issues.** 12 | 13 | Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report). 14 | 15 | If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://www.microsoft.com/en-us/msrc/pgp-key-msrc). 16 | 17 | You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc). 18 | 19 | Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: 20 | 21 | * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) 22 | * Full paths of source file(s) related to the manifestation of the issue 23 | * The location of the affected source code (tag/branch/commit or direct URL) 24 | * Any special configuration required to reproduce the issue 25 | * Step-by-step instructions to reproduce the issue 26 | * Proof-of-concept or exploit code (if possible) 27 | * Impact of the issue, including how an attacker might exploit the issue 28 | 29 | This information will help us triage your report more quickly. 30 | 31 | If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) page for more details about our active programs. 32 | 33 | ## Preferred Languages 34 | 35 | We prefer all communications to be in English. 36 | 37 | ## Policy 38 | 39 | Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://www.microsoft.com/en-us/msrc/cvd). 40 | 41 | -------------------------------------------------------------------------------- /Shared/MainLayout.razor: -------------------------------------------------------------------------------- 1 | @inherits LayoutComponentBase 2 | 3 |
4 | @Body 5 |
6 | 7 | -------------------------------------------------------------------------------- /_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.AspNetCore.Components.Web.Virtualization 8 | @using Microsoft.JSInterop 9 | @using BlazingPizza 10 | @using BlazingPizza.Shared 11 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft": "Warning", 6 | "Microsoft.Hosting.Lifetime": "Information" 7 | } 8 | }, 9 | "AllowedHosts": "*" 10 | } 11 | -------------------------------------------------------------------------------- /wwwroot/css/font/quicksand-v8-latin-300.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftDocs/mslearn-interact-with-data-blazor-web-apps/0df6739a02d16765d12363f631ab70e98880d6e8/wwwroot/css/font/quicksand-v8-latin-300.woff -------------------------------------------------------------------------------- /wwwroot/css/font/quicksand-v8-latin-300.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftDocs/mslearn-interact-with-data-blazor-web-apps/0df6739a02d16765d12363f631ab70e98880d6e8/wwwroot/css/font/quicksand-v8-latin-300.woff2 -------------------------------------------------------------------------------- /wwwroot/css/font/quicksand-v8-latin-500.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftDocs/mslearn-interact-with-data-blazor-web-apps/0df6739a02d16765d12363f631ab70e98880d6e8/wwwroot/css/font/quicksand-v8-latin-500.woff -------------------------------------------------------------------------------- /wwwroot/css/font/quicksand-v8-latin-500.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftDocs/mslearn-interact-with-data-blazor-web-apps/0df6739a02d16765d12363f631ab70e98880d6e8/wwwroot/css/font/quicksand-v8-latin-500.woff2 -------------------------------------------------------------------------------- /wwwroot/css/font/quicksand-v8-latin-700.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftDocs/mslearn-interact-with-data-blazor-web-apps/0df6739a02d16765d12363f631ab70e98880d6e8/wwwroot/css/font/quicksand-v8-latin-700.woff -------------------------------------------------------------------------------- /wwwroot/css/font/quicksand-v8-latin-700.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftDocs/mslearn-interact-with-data-blazor-web-apps/0df6739a02d16765d12363f631ab70e98880d6e8/wwwroot/css/font/quicksand-v8-latin-700.woff2 -------------------------------------------------------------------------------- /wwwroot/css/font/quicksand-v8-latin-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftDocs/mslearn-interact-with-data-blazor-web-apps/0df6739a02d16765d12363f631ab70e98880d6e8/wwwroot/css/font/quicksand-v8-latin-regular.woff -------------------------------------------------------------------------------- /wwwroot/css/font/quicksand-v8-latin-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftDocs/mslearn-interact-with-data-blazor-web-apps/0df6739a02d16765d12363f631ab70e98880d6e8/wwwroot/css/font/quicksand-v8-latin-regular.woff2 -------------------------------------------------------------------------------- /wwwroot/css/font/quicksand.css: -------------------------------------------------------------------------------- 1 | /* quicksand-300 - latin */ 2 | @font-face { 3 | font-family: 'Quicksand'; 4 | font-style: normal; 5 | font-weight: 300; 6 | src: local('Quicksand Light'), local('Quicksand-Light'), 7 | url('quicksand-v8-latin-300.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */ 8 | url('quicksand-v8-latin-300.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ 9 | } 10 | 11 | /* quicksand-regular - latin */ 12 | @font-face { 13 | font-family: 'Quicksand'; 14 | font-style: normal; 15 | font-weight: 400; 16 | src: local('Quicksand Regular'), local('Quicksand-Regular'), 17 | url('quicksand-v8-latin-regular.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */ 18 | url('quicksand-v8-latin-regular.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ 19 | } 20 | 21 | /* quicksand-500 - latin */ 22 | @font-face { 23 | font-family: 'Quicksand'; 24 | font-style: normal; 25 | font-weight: 500; 26 | src: local('Quicksand Medium'), local('Quicksand-Medium'), 27 | url('quicksand-v8-latin-500.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */ 28 | url('quicksand-v8-latin-500.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ 29 | } 30 | 31 | /* quicksand-700 - latin */ 32 | @font-face { 33 | font-family: 'Quicksand'; 34 | font-style: normal; 35 | font-weight: 700; 36 | src: local('Quicksand Bold'), local('Quicksand-Bold'), 37 | url('quicksand-v8-latin-700.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */ 38 | url('quicksand-v8-latin-700.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ 39 | } 40 | -------------------------------------------------------------------------------- /wwwroot/css/site.css: -------------------------------------------------------------------------------- 1 | @import url('font/quicksand.css'); 2 | 3 | body, html { 4 | height: 100%; 5 | } 6 | 7 | body { 8 | padding-top: 5rem; 9 | flex-direction: column; 10 | font-family: 'quicksand'; 11 | overflow-y: hidden; 12 | } 13 | 14 | form { 15 | width: 100%; 16 | } 17 | 18 | .form-group.row > .col-form-label { 19 | text-align: right; 20 | } 21 | 22 | .top-bar { 23 | height: 5rem; 24 | background-color: rgb(192,0,0); 25 | background-image: linear-gradient(rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.25) 25%, rgba(0,0,0,0) 70%); 26 | display: flex; 27 | align-items: stretch; 28 | color: white; 29 | box-shadow: 0 1px 3px rgba(0,0,0,0.4); 30 | padding: 0 3rem; 31 | position: fixed; 32 | top: 0; 33 | right: 0; 34 | left: 0; 35 | z-index: 1030; 36 | } 37 | 38 | .logo { 39 | display: flex; 40 | } 41 | 42 | .logo > img { 43 | margin-right: 3rem; 44 | width: 9rem; 45 | } 46 | 47 | .content { 48 | display: flex; 49 | height: 100%; 50 | z-index: 1; 51 | background-color: white; 52 | } 53 | 54 | .main { 55 | flex-grow: 1; 56 | overflow-y: auto; 57 | background: linear-gradient(rgba(0,0,0,0) 40%, rgba(0,0,0,0.4) 80%); 58 | padding: 1.5rem !important; 59 | } 60 | 61 | .nav-tab { 62 | margin: 0; 63 | padding: 0.3rem 1.8rem; 64 | display: inline-block; 65 | background-color: rgba(0,0,0,0.1); 66 | display: flex; 67 | flex-direction: column; 68 | align-items: center; 69 | justify-content: center; 70 | font-size: 0.9rem; 71 | color: white; 72 | position: relative; 73 | text-transform: uppercase; 74 | transition: 0.2s ease-out; 75 | } 76 | 77 | .nav-tab:hover { 78 | color: white; 79 | text-decoration: none; 80 | background-color: rgba(255,255,255,0.3); 81 | } 82 | 83 | .nav-tab.active { 84 | background-color: rgba(255,255,255,0.2); 85 | color: #fff2cc; 86 | } 87 | 88 | .nav-tab img { 89 | height: 2rem; 90 | margin-bottom: 0.25rem; 91 | } 92 | 93 | .nav-tab.active img { 94 | filter: brightness(0) saturate(100%) invert(93%) sepia(18%) saturate(797%) hue-rotate(316deg) brightness(109%) contrast(101%); 95 | } 96 | 97 | .nav-tab.active:after { 98 | content: ""; 99 | position: absolute; 100 | bottom: -1rem; 101 | z-index: 1; 102 | width: 0px; 103 | height: 0px; 104 | border-left: 0.6rem solid transparent; 105 | border-right: 0.6rem solid transparent; 106 | border-top: 1rem solid rgb(205,51,51); 107 | } 108 | 109 | .user-info { 110 | margin-left: auto; 111 | display: flex; 112 | flex-direction: row; 113 | align-items: center; 114 | justify-content: center; 115 | } 116 | 117 | .user-info img { 118 | margin-right: 0.7rem; 119 | width: 2.6rem; 120 | } 121 | 122 | .user-info .username { 123 | display: block; 124 | font-weight: 700; 125 | line-height: 0.7rem; 126 | margin-top: 0.5rem; 127 | color: white; 128 | font-size: 1rem; 129 | } 130 | 131 | .user-info a { 132 | color: #fff2cc; 133 | font-size: 0.8rem; 134 | } 135 | 136 | .user-info button.sign-out { 137 | color: #fff2cc; 138 | font-size: 0.8rem; 139 | padding: 0; 140 | } 141 | 142 | .pizza-cards { 143 | display: grid; 144 | grid-template-columns: repeat(auto-fill, 20rem); 145 | grid-gap: 2rem; 146 | justify-content: center; 147 | padding-left: 0; 148 | } 149 | 150 | .pizza-cards > li { 151 | height: 10rem; 152 | position: relative; 153 | background-size: cover; 154 | border-radius: 0.5rem; 155 | list-style-type: none; 156 | box-shadow: 0 3px 4px rgba(0,0,0,0.4); 157 | transition: 0.1s ease-out; 158 | } 159 | 160 | .pizza-cards > li:hover { 161 | transform: scale(1.02); 162 | } 163 | 164 | .pizza-info { 165 | border-radius: 0.5rem; 166 | top: 0; 167 | left: 0; 168 | right: 0; 169 | bottom: 0; 170 | position: absolute; 171 | background: linear-gradient(rgba(0,0,0,0.7) 30%, rgba(0,0,0,0) 80%); 172 | padding: 1rem 1rem; 173 | color: #fff2cc; 174 | cursor: pointer; 175 | text-shadow: 0 2px 2px rgba(0,0,0,0.5); 176 | line-height: 1.25rem; 177 | } 178 | 179 | .pizza-info .title { 180 | color: white; 181 | font-size: 1.4rem; 182 | display: block; 183 | margin: 0.2rem 0 0.4rem 0; 184 | font-family: 'Bahnschrift', Arial, Helvetica, sans-serif; 185 | text-transform: uppercase; 186 | } 187 | 188 | .pizza-info .price { 189 | position: absolute; 190 | bottom: 0.5rem; 191 | right: 1rem; 192 | font-size: 1.5rem; 193 | font-weight: 700; 194 | padding: 0rem 0.7rem; 195 | border-radius: 4px; 196 | background-color: #08af08; 197 | color: white; 198 | line-height: 2rem; 199 | } 200 | 201 | .price::before { 202 | content: '£'; 203 | font-weight: 300; 204 | font-size: 1.2rem; 205 | margin-right: 0.2rem; 206 | } 207 | 208 | .sidebar { 209 | background-color: #2b2b2b; 210 | width: 20rem; 211 | display: flex; 212 | flex-direction: column; 213 | color: white; 214 | } 215 | 216 | .order-contents { 217 | overflow-y: auto; 218 | padding: 2rem 1.5rem 1.5rem 1.5rem; 219 | flex-grow: 1; 220 | } 221 | 222 | .order-contents h2 { 223 | color: #fff2cc; 224 | font-size: 1.3rem; 225 | font-weight: 300; 226 | margin-bottom: 1rem; 227 | font-family: 'Bahnschrift', Arial, Helvetica, sans-serif; 228 | text-transform: uppercase; 229 | } 230 | 231 | .order-total { 232 | background-color: rgb(191, 52, 52); 233 | height: 4rem; 234 | flex-shrink: 0; 235 | display: flex; 236 | flex-direction: row; 237 | align-items: center; 238 | color: white; 239 | font-size: 1.2rem; 240 | transition: all 600ms cubic-bezier(0.68, -0.55, 0.265, 1.55); 241 | padding: 0 1.5rem; 242 | } 243 | 244 | .order-total.hidden { 245 | transform: translate3d(0, 4rem, 0); 246 | } 247 | 248 | .order-total .total-price { 249 | font-weight: 700; 250 | font-size: 1.5rem; 251 | } 252 | 253 | .order-total .total-price::before { 254 | content: '£'; 255 | font-weight: 300; 256 | margin: 0 0.1rem 0 0.4rem; 257 | } 258 | 259 | .order-total .btn { 260 | margin-left: auto; 261 | font-weight: 700; 262 | border-radius: 20px; 263 | padding: 0.4rem 1.2rem; 264 | } 265 | 266 | .checkout-button { 267 | margin: auto; 268 | display: block; 269 | font-weight: 700; 270 | border-radius: 20px; 271 | padding: 0.4rem 1.2rem; 272 | } 273 | 274 | .cart-item { 275 | background-color: #333333; 276 | padding: 0.8rem 1.2rem; 277 | border-radius: 6px; 278 | font-weight: 100; 279 | margin-top: 1rem; 280 | position: relative; 281 | } 282 | 283 | .cart-item .title { 284 | font-weight: 700; 285 | } 286 | 287 | .cart-item ul { 288 | padding: 0; 289 | margin: 0.4rem 0.6rem; 290 | } 291 | 292 | .cart-item li { 293 | list-style-type: none; 294 | margin-left: 0rem; 295 | font-size: 0.8rem; 296 | } 297 | 298 | .empty-cart { 299 | text-align: center; 300 | margin: auto; 301 | font-size: 1.5rem; 302 | font-weight: 100; 303 | color: #676767; 304 | } 305 | 306 | .item-price { 307 | font-weight: 500; 308 | } 309 | 310 | .item-price::before { 311 | content: '£'; 312 | font-weight: 100; 313 | margin-right: 0.3rem; 314 | } 315 | 316 | .delete-item { 317 | position: absolute; 318 | top: 0; 319 | right: 0; 320 | content: 'X'; 321 | cursor: pointer; 322 | color: #fff2cc; 323 | width: 2rem; 324 | height: 2rem; 325 | text-align: center; 326 | } 327 | 328 | .delete-item:hover { 329 | text-decoration: none; 330 | color: #fff2cc; 331 | background-color: rgba(255,255,255,0.1); 332 | } 333 | 334 | .configured-pizza-item { 335 | display: flex; 336 | flex-direction: row; 337 | } 338 | 339 | .dialog-container { 340 | position: absolute; 341 | top: 0; 342 | bottom: 0; 343 | left: 0; 344 | right: 0; 345 | background-color: rgba(0,0,0,0.5); 346 | z-index: 2000; 347 | display: flex; 348 | animation: dialog-container-entry 0.2s; 349 | } 350 | 351 | @keyframes dialog-container-entry { 352 | 0% { 353 | opacity: 0; 354 | } 355 | 356 | 100% { 357 | opacity: 1; 358 | } 359 | } 360 | 361 | .dialog { 362 | background-color: white; 363 | box-shadow: 0 0 12px rgba(0,0,0,0.6); 364 | display: flex; 365 | flex-direction: column; 366 | z-index: 2000; 367 | align-self: center; 368 | margin: auto; 369 | width: 700px; 370 | max-height: calc(100% - 3rem); 371 | animation: dialog-entry 0.4s; 372 | animation-timing-function: cubic-bezier(0.075, 0.820, 0.165, 1.000); 373 | } 374 | 375 | @keyframes dialog-entry { 376 | 0% { 377 | transform: translateY(30px) scale(0.95); 378 | } 379 | 380 | 100% { 381 | transform: translateX(0px) scale(1.0); 382 | } 383 | } 384 | 385 | .dialog-title { 386 | background-color: #444; 387 | color: #fff2cc; 388 | padding: 1.3rem 2rem; 389 | } 390 | 391 | .dialog-title h2 { 392 | color: white; 393 | font-size: 1.4rem; 394 | margin: 0; 395 | font-family: 'Bahnschrift', Arial, Helvetica, sans-serif; 396 | text-transform: uppercase; 397 | line-height: 1.3rem; 398 | } 399 | 400 | .dialog-body { 401 | flex-grow: 1; 402 | padding: 0.5rem 3rem 1rem 0; 403 | } 404 | 405 | .dialog-buttons { 406 | height: 4rem; 407 | flex-shrink: 0; 408 | display: flex; 409 | align-items: center; 410 | background-color: #eee; 411 | padding: 0 1rem; 412 | } 413 | 414 | .dialog-body > div { 415 | display: flex; 416 | margin-top: 1rem; 417 | align-items: center; 418 | } 419 | 420 | .dialog-body label { 421 | text-align: right; 422 | width: 200px; 423 | margin: 0 1.5rem; 424 | } 425 | 426 | .dialog-body input, .dialog-body select { 427 | flex-grow: 1; 428 | width: unset; 429 | } 430 | 431 | .dialog-body .size-label { 432 | min-width: 110px; 433 | text-align: right; 434 | } 435 | 436 | .dialog .toppings { 437 | text-align: center; 438 | display: block; 439 | padding-left: 4rem; 440 | } 441 | 442 | .dialog .topping { 443 | display: inline-block; 444 | background-color: #a04343; 445 | color: white; 446 | padding: 0.2rem 1rem; 447 | border-radius: 2rem; 448 | margin: 0.4rem 0.3rem; 449 | font-weight: 700; 450 | } 451 | 452 | .dialog .topping-price { 453 | font-weight: 100; 454 | font-size: 0.8rem; 455 | } 456 | 457 | .dialog .topping-price::before { 458 | content: '£'; 459 | } 460 | 461 | .delete-topping { 462 | background: none; 463 | border: none; 464 | color: white; 465 | padding: 0.2rem 0.2rem 0.3rem 0.2rem; 466 | cursor: pointer; 467 | } 468 | 469 | .delete-topping:hover { 470 | color: yellow; 471 | } 472 | 473 | .form-message { 474 | padding: 0.5rem; 475 | font-weight: 700; 476 | } 477 | 478 | .dialog .price { 479 | font-weight: 700; 480 | font-size: 1.5rem; 481 | } 482 | 483 | .orders-list .list-group-item { 484 | display: flex; 485 | } 486 | 487 | .orders-list .col { 488 | margin: auto; 489 | } 490 | 491 | .orders-list h5 { 492 | color: #c03939; 493 | font-size: 1.3rem; 494 | font-weight: 300; 495 | margin: 0.2rem 0 0 0; 496 | font-family: 'Bahnschrift', Arial, Helvetica, sans-serif; 497 | text-transform: uppercase; 498 | } 499 | 500 | .track-order { 501 | background-color: white; 502 | box-shadow: 0 2px 4px rgba(0,0,0,0.4); 503 | height: 100%; 504 | display: flex; 505 | flex-direction: column; 506 | } 507 | 508 | .track-order > div { 509 | overflow-y: hidden; 510 | } 511 | 512 | .track-order-title { 513 | background-color: #eee; 514 | display: flex; 515 | align-items: center; 516 | padding: 1rem 3rem; 517 | } 518 | 519 | .track-order-title h2 { 520 | color: #c03939; 521 | font-size: 1.3rem; 522 | font-weight: 300; 523 | margin: 0rem; 524 | font-family: 'Bahnschrift', Arial, Helvetica, sans-serif; 525 | text-transform: uppercase; 526 | } 527 | 528 | .track-order-body { 529 | flex-grow: 1; 530 | display: flex; 531 | } 532 | 533 | .track-order-details { 534 | overflow-y: auto; 535 | padding: 1.5rem 3rem; 536 | flex-grow: 1; 537 | } 538 | 539 | .track-order-map { 540 | width: 350px; 541 | flex-shrink: 0; 542 | } 543 | 544 | a.sign-in { 545 | background: none; 546 | border: 1.5px solid white; 547 | border-radius: 0.7em; 548 | color: white; 549 | text-transform: uppercase; 550 | padding: 0.2rem 0.8rem 0.1rem 0.8rem; 551 | font-family: 'Bahnschrift', Arial, Helvetica, sans-serif; 552 | font-weight: 100; 553 | cursor: pointer; 554 | transition: 0.2s ease-out; 555 | margin-left: 3px; 556 | } 557 | 558 | a.sign-in:hover { 559 | background-color: rgba(255,255,255,0.3); 560 | color: #fff2cc; 561 | border-color: #fff2cc; 562 | } 563 | 564 | input[type=range] { 565 | -webkit-appearance: none; 566 | margin: 7.1px 0; 567 | height: 21px; 568 | } 569 | 570 | input[type=range]:focus { 571 | outline: none; 572 | } 573 | 574 | input[type=range]::-webkit-slider-runnable-track { 575 | width: 100%; 576 | height: 5.8px; 577 | cursor: pointer; 578 | box-shadow: 0px 0px 1px #000000, 0px 0px 0px #0d0d0d; 579 | background: #dcdcdc; 580 | border-radius: 1.3px; 581 | border: 0px solid #010101; 582 | } 583 | 584 | input[type=range]::-webkit-slider-thumb { 585 | box-shadow: 0.9px 0.9px 1px rgba(0, 0, 49, 0.43), 0px 0px 0.9px rgba(0, 0, 75, 0.43); 586 | border: 0px solid #00001e; 587 | height: 20px; 588 | width: 20px; 589 | border-radius: 10px; 590 | background: #d45352; 591 | cursor: pointer; 592 | -webkit-appearance: none; 593 | margin-top: -7.1px; 594 | } 595 | 596 | input[type=range]:focus::-webkit-slider-runnable-track { 597 | background: #e1e1e1; 598 | } 599 | 600 | input[type=range]::-moz-range-track { 601 | width: 100%; 602 | height: 5.8px; 603 | cursor: pointer; 604 | box-shadow: 0px 0px 1px #000000, 0px 0px 0px #0d0d0d; 605 | background: #dcdcdc; 606 | border-radius: 1.3px; 607 | border: 0px solid #010101; 608 | } 609 | 610 | input[type=range]::-moz-range-thumb { 611 | box-shadow: 0.9px 0.9px 1px rgba(0, 0, 49, 0.43), 0px 0px 0.9px rgba(0, 0, 75, 0.43); 612 | border: 0px solid #00001e; 613 | height: 20px; 614 | width: 20px; 615 | border-radius: 10px; 616 | background: #d45352; 617 | cursor: pointer; 618 | } 619 | 620 | input[type=range]::-ms-track { 621 | width: 100%; 622 | height: 5.8px; 623 | cursor: pointer; 624 | background: transparent; 625 | border-color: transparent; 626 | color: transparent; 627 | } 628 | 629 | input[type=range]::-ms-fill-lower { 630 | background: #d7d7d7; 631 | border: 0px solid #010101; 632 | border-radius: 2.6px; 633 | box-shadow: 0px 0px 1px #000000, 0px 0px 0px #0d0d0d; 634 | } 635 | 636 | input[type=range]::-ms-fill-upper { 637 | background: #dcdcdc; 638 | border: 0px solid #010101; 639 | border-radius: 2.6px; 640 | box-shadow: 0px 0px 1px #000000, 0px 0px 0px #0d0d0d; 641 | } 642 | 643 | input[type=range]::-ms-thumb { 644 | box-shadow: 0.9px 0.9px 1px rgba(0, 0, 49, 0.43), 0px 0px 0.9px rgba(0, 0, 75, 0.43); 645 | border: 0px solid #00001e; 646 | height: 20px; 647 | width: 20px; 648 | border-radius: 10px; 649 | background: #d45352; 650 | cursor: pointer; 651 | margin-top: 0; 652 | } 653 | 654 | .checkout-cols { 655 | display: flex; 656 | } 657 | .checkout-cols h4 { 658 | margin-bottom: 1.5rem; 659 | } 660 | 661 | .checkout-cols > div { 662 | flex: 1; 663 | margin: 1rem; 664 | border: 1px solid #ddd; 665 | background: rgba(255,255,255,0.3); 666 | padding: 1.25rem 1rem; 667 | } 668 | 669 | .checkout-cols > div:first-child { 670 | margin-left: 0; 671 | } 672 | 673 | .checkout-cols > div:last-child { 674 | margin-right: 0; 675 | } 676 | 677 | .loading-bar { 678 | position: absolute; 679 | top: calc(50% - 3px); 680 | left: calc(50% - 250px); 681 | width: 500px; 682 | height: 6px; 683 | background-color: white; 684 | overflow: hidden; 685 | box-shadow: 0 1px 3px rgba(0,0,0,0.2) 686 | } 687 | 688 | .loading-bar::after { 689 | content: ''; 690 | display: block; 691 | width: 200px; 692 | height: 100%; 693 | background-color: #dc105a; 694 | animation: progressbar-slide 1s infinite; 695 | animation-timing-function: ease-in-out; 696 | } 697 | 698 | .form-field { 699 | display: flex; 700 | margin: 0.5rem; 701 | } 702 | 703 | .form-field > label { 704 | width: 8rem; 705 | } 706 | 707 | .form-field > div { 708 | flex-grow: 1; 709 | } 710 | 711 | .form-field input { 712 | width: 100%; 713 | } 714 | 715 | .valid.modified:not([type=checkbox]) { 716 | outline: 1px solid #26b050; 717 | } 718 | 719 | .invalid { 720 | outline: 1px solid red; 721 | } 722 | 723 | .validation-message { 724 | color: red; 725 | } 726 | 727 | #blazor-error-ui { 728 | background: lightyellow; 729 | bottom: 0; 730 | box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); 731 | display: none; 732 | left: 0; 733 | padding: 0.6rem 1.25rem 0.7rem 1.25rem; 734 | position: fixed; 735 | width: 100%; 736 | z-index: 1000; 737 | } 738 | 739 | #blazor-error-ui .dismiss { 740 | cursor: pointer; 741 | position: absolute; 742 | right: 0.75rem; 743 | top: 0.5rem; 744 | } 745 | 746 | @keyframes progressbar-slide { 747 | 0% { 748 | transform: translateX(-200px); 749 | } 750 | 751 | 70% { 752 | transform: translateX(500px); 753 | } 754 | 755 | 100% { 756 | transform: translateX(500px); 757 | } 758 | } -------------------------------------------------------------------------------- /wwwroot/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftDocs/mslearn-interact-with-data-blazor-web-apps/0df6739a02d16765d12363f631ab70e98880d6e8/wwwroot/favicon.ico -------------------------------------------------------------------------------- /wwwroot/img/bike.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 19 | 21 | 39 | 41 | 42 | 44 | image/svg+xml 45 | 47 | 48 | 49 | 50 | 51 | 56 | 61 | 66 | 71 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /wwwroot/img/icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftDocs/mslearn-interact-with-data-blazor-web-apps/0df6739a02d16765d12363f631ab70e98880d6e8/wwwroot/img/icon-512.png -------------------------------------------------------------------------------- /wwwroot/img/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | image/svg+xml -------------------------------------------------------------------------------- /wwwroot/img/pizza-slice.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 19 | 21 | 24 | 29 | 30 | 33 | 38 | 39 | 40 | 58 | 60 | 61 | 63 | image/svg+xml 64 | 66 | 67 | 68 | 69 | 70 | 75 | 79 | 83 | 88 | 89 | 90 | 94 | 98 | 103 | 104 | 105 | 106 | 107 | -------------------------------------------------------------------------------- /wwwroot/img/pizzas/bacon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftDocs/mslearn-interact-with-data-blazor-web-apps/0df6739a02d16765d12363f631ab70e98880d6e8/wwwroot/img/pizzas/bacon.jpg -------------------------------------------------------------------------------- /wwwroot/img/pizzas/brit.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftDocs/mslearn-interact-with-data-blazor-web-apps/0df6739a02d16765d12363f631ab70e98880d6e8/wwwroot/img/pizzas/brit.jpg -------------------------------------------------------------------------------- /wwwroot/img/pizzas/cheese.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftDocs/mslearn-interact-with-data-blazor-web-apps/0df6739a02d16765d12363f631ab70e98880d6e8/wwwroot/img/pizzas/cheese.jpg -------------------------------------------------------------------------------- /wwwroot/img/pizzas/margherita.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftDocs/mslearn-interact-with-data-blazor-web-apps/0df6739a02d16765d12363f631ab70e98880d6e8/wwwroot/img/pizzas/margherita.jpg -------------------------------------------------------------------------------- /wwwroot/img/pizzas/meaty.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftDocs/mslearn-interact-with-data-blazor-web-apps/0df6739a02d16765d12363f631ab70e98880d6e8/wwwroot/img/pizzas/meaty.jpg -------------------------------------------------------------------------------- /wwwroot/img/pizzas/mushroom.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftDocs/mslearn-interact-with-data-blazor-web-apps/0df6739a02d16765d12363f631ab70e98880d6e8/wwwroot/img/pizzas/mushroom.jpg -------------------------------------------------------------------------------- /wwwroot/img/pizzas/pepperoni.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftDocs/mslearn-interact-with-data-blazor-web-apps/0df6739a02d16765d12363f631ab70e98880d6e8/wwwroot/img/pizzas/pepperoni.jpg -------------------------------------------------------------------------------- /wwwroot/img/pizzas/salad.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MicrosoftDocs/mslearn-interact-with-data-blazor-web-apps/0df6739a02d16765d12363f631ab70e98880d6e8/wwwroot/img/pizzas/salad.jpg -------------------------------------------------------------------------------- /wwwroot/img/user.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 19 | 21 | 39 | 41 | 42 | 44 | image/svg+xml 45 | 47 | 48 | 49 | 50 | 51 | 56 | 61 | 66 | 71 | 72 | 73 | --------------------------------------------------------------------------------