├── .gitignore ├── 9781484224779.jpg ├── Errata Japikse-BWAVS.pdf ├── LICENSE.txt ├── README.md ├── SourceCode_Chapter01 ├── Migrations.txt ├── SpyStore.DAL.Tests │ ├── ContextTests │ │ └── CategoryTests.cs │ ├── RepoTests │ │ ├── CategoryRepoAddTests.cs │ │ ├── CategoryRepoDeleteTests.cs │ │ ├── CategoryRepoExceptionTests.cs │ │ ├── CategoryRepoGetTests.cs │ │ └── CategoryRepoUpdateTests.cs │ └── SpyStore.DAL.Tests.csproj ├── SpyStore.DAL.sln ├── SpyStore.DAL │ ├── EF │ │ ├── Migrations │ │ │ ├── 20161113015453_Initial.Designer.cs │ │ │ ├── 20161113015453_Initial.cs │ │ │ └── StoreContextModelSnapshot.cs │ │ ├── MyExecutionStrategy.cs │ │ └── StoreContext.cs │ ├── Program.cs │ ├── Repos │ │ ├── Base │ │ │ ├── IRepo.cs │ │ │ └── RepoBase.cs │ │ └── CategoryRepo.cs │ └── SpyStore.DAL.csproj ├── SpyStore.Models │ ├── Entities │ │ ├── Base │ │ │ └── EntityBase.cs │ │ └── Category.cs │ └── SpyStore.Models.csproj ├── global.json └── nugetpackages │ ├── SpyStore.DAL.1.0.0.nupkg │ └── SpyStore.Models.1.0.0.nupkg ├── SourceCode_Chapter02 ├── Migrations.txt ├── Package.txt ├── SpyStore.DAL.Tests │ ├── ContextTests │ │ ├── CategoryTests.cs │ │ └── OrderTests.cs │ ├── RepoTests │ │ ├── CategoryRepoAddTests.cs │ │ ├── CategoryRepoDeleteTests.cs │ │ ├── CategoryRepoExceptionTests.cs │ │ ├── CategoryRepoGetTests.cs │ │ ├── CategoryRepoUpdateTests.cs │ │ ├── OrderDetailsRepoTests.cs │ │ ├── OrderRepoTests.cs │ │ ├── ProductRepoTests.cs │ │ └── ShoppingCartRepoTests.cs │ └── SpyStore.DAL.Tests.csproj ├── SpyStore.DAL.sln ├── SpyStore.DAL │ ├── EF │ │ ├── Migrations │ │ │ ├── 20161113015453_Initial.Designer.cs │ │ │ ├── 20161113015453_Initial.cs │ │ │ ├── 20161116195251_RemainingTables.Designer.cs │ │ │ ├── 20161116195251_RemainingTables.cs │ │ │ ├── 20161116200053_TSQL.Designer.cs │ │ │ ├── 20161116200053_TSQL.cs │ │ │ ├── 20161116201125_Final.Designer.cs │ │ │ ├── 20161116201125_Final.cs │ │ │ └── StoreContextModelSnapshot.cs │ │ ├── MyExecutionStrategy.cs │ │ └── StoreContext.cs │ ├── Exceptions │ │ └── InvalidQuantityException.cs │ ├── Initializers │ │ ├── StoreDataInitializer.cs │ │ └── StoreSampleData.cs │ ├── Program.cs │ ├── Repos │ │ ├── Base │ │ │ ├── IRepo.cs │ │ │ └── RepoBase.cs │ │ ├── CategoryRepo.cs │ │ ├── CustomerRepo.cs │ │ ├── Interfaces │ │ │ ├── ICategoryRepo.cs │ │ │ ├── ICustomerRepo.cs │ │ │ ├── IOrderDetailRepo.cs │ │ │ ├── IOrderRepo.cs │ │ │ ├── IProductRepo.cs │ │ │ └── IShoppingCartRepo.cs │ │ ├── OrderDetailRepo.cs │ │ ├── OrderRepo.cs │ │ ├── ProductRepo.cs │ │ └── ShoppingCartRepo.cs │ └── SpyStore.DAL.csproj ├── SpyStore.Models │ ├── Entities │ │ ├── Base │ │ │ └── EntityBase.cs │ │ ├── Category.cs │ │ ├── Customer.cs │ │ ├── Order.cs │ │ ├── OrderDetail.cs │ │ ├── Product.cs │ │ └── ShoppingCartRecord.cs │ ├── SpyStore.Models.csproj │ └── ViewModels │ │ ├── Base │ │ └── ProductAndCategoryBase.cs │ │ ├── CartRecordWithProductInfo.cs │ │ ├── OrderDetailWithProductInfo.cs │ │ └── OrderWithDetailsAndProductInfo.cs ├── global.json └── nugetpackages │ ├── SpyStore.DAL.1.0.0.nupkg │ └── SpyStore.Models.1.0.0.nupkg ├── SourceCode_Chapter03 ├── SpyStore.Service.Combined │ ├── SpyStore.Service.Complete.sln │ ├── global.json │ └── src │ │ ├── SpyStore.DAL │ │ ├── EF │ │ │ ├── Migrations │ │ │ │ ├── 20161113015453_Initial.Designer.cs │ │ │ │ ├── 20161113015453_Initial.cs │ │ │ │ ├── 20161116195251_RemainingTables.Designer.cs │ │ │ │ ├── 20161116195251_RemainingTables.cs │ │ │ │ ├── 20161116200053_TSQL.Designer.cs │ │ │ │ ├── 20161116200053_TSQL.cs │ │ │ │ ├── 20161116201125_Final.Designer.cs │ │ │ │ ├── 20161116201125_Final.cs │ │ │ │ └── StoreContextModelSnapshot.cs │ │ │ ├── MyExecutionStrategy.cs │ │ │ └── StoreContext.cs │ │ ├── Exceptions │ │ │ └── InvalidQuantityException.cs │ │ ├── Initializers │ │ │ ├── StoreDataInitializer.cs │ │ │ └── StoreSampleData.cs │ │ ├── Program.cs │ │ ├── Repos │ │ │ ├── Base │ │ │ │ ├── IRepo.cs │ │ │ │ └── RepoBase.cs │ │ │ ├── CategoryRepo.cs │ │ │ ├── CustomerRepo.cs │ │ │ ├── Interfaces │ │ │ │ ├── ICategoryRepo.cs │ │ │ │ ├── ICustomerRepo.cs │ │ │ │ ├── IOrderDetailRepo.cs │ │ │ │ ├── IOrderRepo.cs │ │ │ │ ├── IProductRepo.cs │ │ │ │ └── IShoppingCartRepo.cs │ │ │ ├── OrderDetailRepo.cs │ │ │ ├── OrderRepo.cs │ │ │ ├── ProductRepo.cs │ │ │ └── ShoppingCartRepo.cs │ │ └── SpyStore.DAL.csproj │ │ ├── SpyStore.Models │ │ ├── Entities │ │ │ ├── Base │ │ │ │ └── EntityBase.cs │ │ │ ├── Category.cs │ │ │ ├── Customer.cs │ │ │ ├── Order.cs │ │ │ ├── OrderDetail.cs │ │ │ ├── Product.cs │ │ │ └── ShoppingCartRecord.cs │ │ ├── SpyStore.Models.csproj │ │ └── ViewModels │ │ │ ├── Base │ │ │ └── ProductAndCategoryBase.cs │ │ │ ├── CartRecordWithProductInfo.cs │ │ │ ├── OrderDetailWithProductInfo.cs │ │ │ └── OrderWithDetailsAndProductInfo.cs │ │ └── SpyStore.Service │ │ ├── Controllers │ │ ├── CategoryController.cs │ │ ├── CustomerController.cs │ │ ├── OrdersController.cs │ │ ├── ProductController.cs │ │ ├── SearchController.cs │ │ └── ShoppingCartController.cs │ │ ├── Filters │ │ └── SpyStoreExceptionFilter.cs │ │ ├── Program.cs │ │ ├── Properties │ │ ├── PublishProfiles │ │ │ ├── FileSystemProfile.pubxml │ │ │ └── FileSystemProfile.pubxml.user │ │ └── launchSettings.json │ │ ├── SpyStore.Service.csproj │ │ ├── SpyStore.Service.csproj.user │ │ ├── Startup.cs │ │ ├── appsettings.Development.json │ │ ├── appsettings.json │ │ ├── run_development.cmd │ │ ├── runtimeconfig.template.json │ │ └── web.config ├── SpyStore.Service.Tests │ ├── SpyStore.Service.Tests.sln │ ├── SpyStore.Service.Tests │ │ ├── Helpers │ │ │ └── ShoppingCartTestHelpers.cs │ │ ├── SpyStore.Service.Tests.csproj │ │ └── TestClasses │ │ │ ├── Base │ │ │ ├── BaseTestClass.cs │ │ │ └── ErrorMessage.cs │ │ │ ├── CategoryControllerTests.cs │ │ │ ├── CustomerControllerTests.cs │ │ │ ├── OrdersControllerTests.cs │ │ │ ├── ProductControllerTests.cs │ │ │ ├── SearchControllerTests.cs │ │ │ ├── ShoppingCartControllerNoUpdateTests.cs │ │ │ ├── ShoppingCartControllerTests_Add.cs │ │ │ ├── ShoppingCartControllerTests_Core.cs │ │ │ ├── ShoppingCartControllerTests_Delete.cs │ │ │ └── ShoppingCartControllerTests_Update.cs │ └── global.json ├── SpyStore.Service │ ├── SpyStore.Service.sln │ ├── global.json │ └── src │ │ └── SpyStore.Service │ │ ├── Controllers │ │ ├── CategoryController.cs │ │ ├── CustomerController.cs │ │ ├── OrdersController.cs │ │ ├── ProductController.cs │ │ ├── SearchController.cs │ │ └── ShoppingCartController.cs │ │ ├── Filters │ │ └── SpyStoreExceptionFilter.cs │ │ ├── Program.cs │ │ ├── Properties │ │ ├── PublishProfiles │ │ │ ├── FileSystemProfile.pubxml │ │ │ └── FileSystemProfile.pubxml.user │ │ └── launchSettings.json │ │ ├── SpyStore.Service.csproj │ │ ├── SpyStore.Service.csproj.user │ │ ├── Startup.cs │ │ ├── appsettings.Development.json │ │ ├── appsettings.json │ │ ├── run_development.cmd │ │ ├── runtimeconfig.template.json │ │ └── web.config ├── nugetpackages │ ├── SpyStore.DAL.1.0.0.nupkg │ └── SpyStore.Models.1.0.0.nupkg └── run_development.cmd ├── SourceCode_Chapter04 ├── SpyStore.MVC │ ├── SpyStore.MVC.sln │ ├── global.json │ └── src │ │ └── SpyStore.MVC │ │ ├── .bowerrc │ │ ├── Authentication │ │ ├── AuthHelper.cs │ │ └── IAuthHelper.cs │ │ ├── Configuration │ │ ├── IWebServiceLocator.cs │ │ └── WebServiceLocator.cs │ │ ├── Filters │ │ └── AuthActionFilter.cs │ │ ├── Program.cs │ │ ├── Properties │ │ └── launchSettings.json │ │ ├── SpyStore.MVC.csproj │ │ ├── SpyStore.MVC.csproj.user │ │ ├── Startup.cs │ │ ├── ViewModels │ │ ├── AddToCartViewModel.cs │ │ ├── Base │ │ │ └── CartViewModelBase.cs │ │ ├── CartRecordViewModel.cs │ │ └── CartViewModel.cs │ │ ├── Views │ │ ├── Shared │ │ │ ├── DisplayTemplates │ │ │ │ └── Boolean.cshtml │ │ │ ├── EditorTemplates │ │ │ │ └── Boolean.cshtml │ │ │ ├── Error.cshtml │ │ │ └── _Layout.cshtml │ │ ├── _ViewImports.cshtml │ │ └── _ViewStart.cshtml │ │ ├── WebServiceAccess │ │ ├── Base │ │ │ ├── IWebApiCalls.cs │ │ │ └── WebApiCallsBase.cs │ │ └── WebAPICalls.cs │ │ ├── appsettings.Development.json │ │ ├── appsettings.json │ │ ├── bower.json │ │ ├── bundleconfig.json │ │ ├── bundleconfig.json.bindings │ │ ├── runtimeconfig.template.json │ │ ├── web.config │ │ └── wwwroot │ │ ├── css │ │ ├── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ │ ├── site.css │ │ ├── site.min.css │ │ ├── spystore-bootstrap.css │ │ └── spystore-bootstrap.min.css │ │ ├── favicon.ico │ │ ├── images │ │ ├── bg.jpg │ │ ├── jumbo.png │ │ ├── product-image-lg.png │ │ ├── product-image.png │ │ ├── product-thumb.png │ │ └── store-logo.png │ │ ├── js │ │ ├── site.js │ │ ├── site.min.js │ │ └── validations │ │ │ ├── errorFormatting.js │ │ │ └── validators.js │ │ └── lib │ │ ├── bootstrap │ │ ├── .bower.json │ │ ├── CHANGELOG.md │ │ ├── Gemfile │ │ ├── Gemfile.lock │ │ ├── Gruntfile.js │ │ ├── ISSUE_TEMPLATE.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bower.json │ │ ├── dist │ │ │ ├── css │ │ │ │ ├── bootstrap-theme.css │ │ │ │ ├── bootstrap-theme.css.map │ │ │ │ ├── bootstrap-theme.min.css │ │ │ │ ├── bootstrap-theme.min.css.map │ │ │ │ ├── bootstrap.css │ │ │ │ ├── bootstrap.css.map │ │ │ │ ├── bootstrap.min.css │ │ │ │ └── bootstrap.min.css.map │ │ │ ├── fonts │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ └── js │ │ │ │ ├── bootstrap.js │ │ │ │ ├── bootstrap.min.js │ │ │ │ └── npm.js │ │ ├── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ │ ├── grunt │ │ │ ├── .jshintrc │ │ │ ├── bs-commonjs-generator.js │ │ │ ├── bs-glyphicons-data-generator.js │ │ │ ├── bs-lessdoc-parser.js │ │ │ ├── bs-raw-files-generator.js │ │ │ ├── change-version.js │ │ │ ├── configBridge.json │ │ │ ├── npm-shrinkwrap.json │ │ │ └── sauce_browsers.yml │ │ ├── js │ │ │ ├── .jscsrc │ │ │ ├── .jshintrc │ │ │ ├── affix.js │ │ │ ├── alert.js │ │ │ ├── button.js │ │ │ ├── carousel.js │ │ │ ├── collapse.js │ │ │ ├── dropdown.js │ │ │ ├── modal.js │ │ │ ├── popover.js │ │ │ ├── scrollspy.js │ │ │ ├── tab.js │ │ │ ├── tooltip.js │ │ │ └── transition.js │ │ ├── less │ │ │ ├── .csscomb.json │ │ │ ├── .csslintrc │ │ │ ├── alerts.less │ │ │ ├── badges.less │ │ │ ├── bootstrap.less │ │ │ ├── breadcrumbs.less │ │ │ ├── button-groups.less │ │ │ ├── buttons.less │ │ │ ├── carousel.less │ │ │ ├── close.less │ │ │ ├── code.less │ │ │ ├── component-animations.less │ │ │ ├── dropdowns.less │ │ │ ├── forms.less │ │ │ ├── glyphicons.less │ │ │ ├── grid.less │ │ │ ├── input-groups.less │ │ │ ├── jumbotron.less │ │ │ ├── labels.less │ │ │ ├── list-group.less │ │ │ ├── media.less │ │ │ ├── mixins.less │ │ │ ├── mixins │ │ │ │ ├── alerts.less │ │ │ │ ├── background-variant.less │ │ │ │ ├── border-radius.less │ │ │ │ ├── buttons.less │ │ │ │ ├── center-block.less │ │ │ │ ├── clearfix.less │ │ │ │ ├── forms.less │ │ │ │ ├── gradients.less │ │ │ │ ├── grid-framework.less │ │ │ │ ├── grid.less │ │ │ │ ├── hide-text.less │ │ │ │ ├── image.less │ │ │ │ ├── labels.less │ │ │ │ ├── list-group.less │ │ │ │ ├── nav-divider.less │ │ │ │ ├── nav-vertical-align.less │ │ │ │ ├── opacity.less │ │ │ │ ├── pagination.less │ │ │ │ ├── panels.less │ │ │ │ ├── progress-bar.less │ │ │ │ ├── reset-filter.less │ │ │ │ ├── reset-text.less │ │ │ │ ├── resize.less │ │ │ │ ├── responsive-visibility.less │ │ │ │ ├── size.less │ │ │ │ ├── tab-focus.less │ │ │ │ ├── table-row.less │ │ │ │ ├── text-emphasis.less │ │ │ │ ├── text-overflow.less │ │ │ │ └── vendor-prefixes.less │ │ │ ├── modals.less │ │ │ ├── navbar.less │ │ │ ├── navs.less │ │ │ ├── normalize.less │ │ │ ├── pager.less │ │ │ ├── pagination.less │ │ │ ├── panels.less │ │ │ ├── popovers.less │ │ │ ├── print.less │ │ │ ├── progress-bars.less │ │ │ ├── responsive-embed.less │ │ │ ├── responsive-utilities.less │ │ │ ├── scaffolding.less │ │ │ ├── tables.less │ │ │ ├── theme.less │ │ │ ├── thumbnails.less │ │ │ ├── tooltip.less │ │ │ ├── type.less │ │ │ ├── utilities.less │ │ │ ├── variables.less │ │ │ └── wells.less │ │ ├── nuget │ │ │ ├── MyGet.ps1 │ │ │ ├── bootstrap.less.nuspec │ │ │ └── bootstrap.nuspec │ │ ├── package.js │ │ └── package.json │ │ ├── jquery-ajax-unobtrusive │ │ ├── .bower.json │ │ ├── LICENSE.txt │ │ ├── bower.json │ │ ├── gulpfile.js │ │ ├── jquery.unobtrusive-ajax.js │ │ └── jquery.unobtrusive-ajax.min.js │ │ ├── jquery-validation-unobtrusive │ │ ├── .bower.json │ │ ├── jquery.validate.unobtrusive.js │ │ └── jquery.validate.unobtrusive.min.js │ │ ├── jquery-validation │ │ ├── .bower.json │ │ ├── CONTRIBUTING.md │ │ ├── Gruntfile.js │ │ ├── LICENSE.md │ │ ├── README.md │ │ ├── bower.json │ │ ├── build │ │ │ └── release.js │ │ ├── changelog.md │ │ ├── dist │ │ │ ├── additional-methods.js │ │ │ ├── additional-methods.min.js │ │ │ ├── jquery.validate.js │ │ │ └── jquery.validate.min.js │ │ ├── package.json │ │ ├── src │ │ │ ├── additional │ │ │ │ ├── accept.js │ │ │ │ ├── additional.js │ │ │ │ ├── alphanumeric.js │ │ │ │ ├── bankaccountNL.js │ │ │ │ ├── bankorgiroaccountNL.js │ │ │ │ ├── bic.js │ │ │ │ ├── cifES.js │ │ │ │ ├── cpfBR.js │ │ │ │ ├── creditcard.js │ │ │ │ ├── creditcardtypes.js │ │ │ │ ├── currency.js │ │ │ │ ├── dateFA.js │ │ │ │ ├── dateITA.js │ │ │ │ ├── dateNL.js │ │ │ │ ├── extension.js │ │ │ │ ├── giroaccountNL.js │ │ │ │ ├── iban.js │ │ │ │ ├── integer.js │ │ │ │ ├── ipv4.js │ │ │ │ ├── ipv6.js │ │ │ │ ├── lettersonly.js │ │ │ │ ├── letterswithbasicpunc.js │ │ │ │ ├── mobileNL.js │ │ │ │ ├── mobileUK.js │ │ │ │ ├── nieES.js │ │ │ │ ├── nifES.js │ │ │ │ ├── notEqualTo.js │ │ │ │ ├── nowhitespace.js │ │ │ │ ├── pattern.js │ │ │ │ ├── phoneNL.js │ │ │ │ ├── phoneUK.js │ │ │ │ ├── phoneUS.js │ │ │ │ ├── phonesUK.js │ │ │ │ ├── postalCodeCA.js │ │ │ │ ├── postalcodeBR.js │ │ │ │ ├── postalcodeIT.js │ │ │ │ ├── postalcodeNL.js │ │ │ │ ├── postcodeUK.js │ │ │ │ ├── require_from_group.js │ │ │ │ ├── skip_or_fill_minimum.js │ │ │ │ ├── statesUS.js │ │ │ │ ├── strippedminlength.js │ │ │ │ ├── time.js │ │ │ │ ├── time12h.js │ │ │ │ ├── url2.js │ │ │ │ ├── vinUS.js │ │ │ │ ├── zipcodeUS.js │ │ │ │ └── ziprange.js │ │ │ ├── ajax.js │ │ │ ├── core.js │ │ │ └── localization │ │ │ │ ├── messages_ar.js │ │ │ │ ├── messages_az.js │ │ │ │ ├── messages_bg.js │ │ │ │ ├── messages_bn_BD.js │ │ │ │ ├── messages_ca.js │ │ │ │ ├── messages_cs.js │ │ │ │ ├── messages_da.js │ │ │ │ ├── messages_de.js │ │ │ │ ├── messages_el.js │ │ │ │ ├── messages_es.js │ │ │ │ ├── messages_es_AR.js │ │ │ │ ├── messages_es_PE.js │ │ │ │ ├── messages_et.js │ │ │ │ ├── messages_eu.js │ │ │ │ ├── messages_fa.js │ │ │ │ ├── messages_fi.js │ │ │ │ ├── messages_fr.js │ │ │ │ ├── messages_ge.js │ │ │ │ ├── messages_gl.js │ │ │ │ ├── messages_he.js │ │ │ │ ├── messages_hr.js │ │ │ │ ├── messages_hu.js │ │ │ │ ├── messages_hy_AM.js │ │ │ │ ├── messages_id.js │ │ │ │ ├── messages_is.js │ │ │ │ ├── messages_it.js │ │ │ │ ├── messages_ja.js │ │ │ │ ├── messages_ka.js │ │ │ │ ├── messages_kk.js │ │ │ │ ├── messages_ko.js │ │ │ │ ├── messages_lt.js │ │ │ │ ├── messages_lv.js │ │ │ │ ├── messages_mk.js │ │ │ │ ├── messages_my.js │ │ │ │ ├── messages_nl.js │ │ │ │ ├── messages_no.js │ │ │ │ ├── messages_pl.js │ │ │ │ ├── messages_pt_BR.js │ │ │ │ ├── messages_pt_PT.js │ │ │ │ ├── messages_ro.js │ │ │ │ ├── messages_ru.js │ │ │ │ ├── messages_si.js │ │ │ │ ├── messages_sk.js │ │ │ │ ├── messages_sl.js │ │ │ │ ├── messages_sr.js │ │ │ │ ├── messages_sr_lat.js │ │ │ │ ├── messages_sv.js │ │ │ │ ├── messages_th.js │ │ │ │ ├── messages_tj.js │ │ │ │ ├── messages_tr.js │ │ │ │ ├── messages_uk.js │ │ │ │ ├── messages_ur.js │ │ │ │ ├── messages_vi.js │ │ │ │ ├── messages_zh.js │ │ │ │ ├── messages_zh_TW.js │ │ │ │ ├── methods_de.js │ │ │ │ ├── methods_es_CL.js │ │ │ │ ├── methods_fi.js │ │ │ │ ├── methods_nl.js │ │ │ │ └── methods_pt.js │ │ └── validation.jquery.json │ │ └── jquery │ │ ├── .bower.json │ │ ├── AUTHORS.txt │ │ ├── LICENSE.txt │ │ ├── README.md │ │ ├── bower.json │ │ ├── dist │ │ ├── jquery.js │ │ ├── jquery.min.js │ │ └── jquery.min.map │ │ ├── external │ │ └── sizzle │ │ │ ├── LICENSE.txt │ │ │ └── dist │ │ │ ├── sizzle.js │ │ │ ├── sizzle.min.js │ │ │ └── sizzle.min.map │ │ └── src │ │ ├── .jshintrc │ │ ├── ajax.js │ │ ├── ajax │ │ ├── jsonp.js │ │ ├── load.js │ │ ├── parseJSON.js │ │ ├── parseXML.js │ │ ├── script.js │ │ ├── var │ │ │ ├── location.js │ │ │ ├── nonce.js │ │ │ └── rquery.js │ │ └── xhr.js │ │ ├── attributes.js │ │ ├── attributes │ │ ├── attr.js │ │ ├── classes.js │ │ ├── prop.js │ │ ├── support.js │ │ └── val.js │ │ ├── callbacks.js │ │ ├── core.js │ │ ├── core │ │ ├── access.js │ │ ├── init.js │ │ ├── parseHTML.js │ │ ├── ready.js │ │ └── var │ │ │ └── rsingleTag.js │ │ ├── css.js │ │ ├── css │ │ ├── addGetHookIf.js │ │ ├── adjustCSS.js │ │ ├── curCSS.js │ │ ├── defaultDisplay.js │ │ ├── hiddenVisibleSelectors.js │ │ ├── showHide.js │ │ ├── support.js │ │ └── var │ │ │ ├── cssExpand.js │ │ │ ├── getStyles.js │ │ │ ├── isHidden.js │ │ │ ├── rmargin.js │ │ │ ├── rnumnonpx.js │ │ │ └── swap.js │ │ ├── data.js │ │ ├── data │ │ ├── Data.js │ │ └── var │ │ │ ├── acceptData.js │ │ │ ├── dataPriv.js │ │ │ └── dataUser.js │ │ ├── deferred.js │ │ ├── deprecated.js │ │ ├── dimensions.js │ │ ├── effects.js │ │ ├── effects │ │ ├── Tween.js │ │ └── animatedSelector.js │ │ ├── event.js │ │ ├── event │ │ ├── ajax.js │ │ ├── alias.js │ │ ├── focusin.js │ │ ├── support.js │ │ └── trigger.js │ │ ├── exports │ │ ├── amd.js │ │ └── global.js │ │ ├── intro.js │ │ ├── jquery.js │ │ ├── manipulation.js │ │ ├── manipulation │ │ ├── _evalUrl.js │ │ ├── buildFragment.js │ │ ├── getAll.js │ │ ├── setGlobalEval.js │ │ ├── support.js │ │ ├── var │ │ │ ├── rcheckableType.js │ │ │ ├── rscriptType.js │ │ │ └── rtagName.js │ │ └── wrapMap.js │ │ ├── offset.js │ │ ├── outro.js │ │ ├── queue.js │ │ ├── queue │ │ └── delay.js │ │ ├── selector-native.js │ │ ├── selector-sizzle.js │ │ ├── selector.js │ │ ├── serialize.js │ │ ├── traversing.js │ │ ├── traversing │ │ ├── findFilter.js │ │ └── var │ │ │ ├── dir.js │ │ │ ├── rneedsContext.js │ │ │ └── siblings.js │ │ ├── var │ │ ├── arr.js │ │ ├── class2type.js │ │ ├── concat.js │ │ ├── document.js │ │ ├── documentElement.js │ │ ├── hasOwn.js │ │ ├── indexOf.js │ │ ├── pnum.js │ │ ├── push.js │ │ ├── rcssNum.js │ │ ├── rnotwhite.js │ │ ├── slice.js │ │ ├── support.js │ │ └── toString.js │ │ └── wrap.js ├── WebArtifacts │ ├── css │ │ ├── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ │ ├── site.css │ │ ├── site.min.css │ │ ├── spystore-bootstrap.css │ │ └── spystore-bootstrap.min.css │ └── images │ │ ├── bg.jpg │ │ ├── jumbo.png │ │ ├── product-image-lg.png │ │ ├── product-image.png │ │ ├── product-thumb.png │ │ └── store-logo.png └── WebServiceAccess │ ├── Base │ ├── IWebApiCalls.cs │ └── WebApiCallsBase.cs │ └── WebAPICalls.cs ├── SourceCode_Chapter05 ├── SpyStore.MVC │ ├── SpyStore.MVC.sln │ ├── global.json │ └── src │ │ └── SpyStore.MVC │ │ ├── .bowerrc │ │ ├── Authentication │ │ ├── AuthHelper.cs │ │ └── IAuthHelper.cs │ │ ├── Configuration │ │ ├── IWebServiceLocator.cs │ │ └── WebServiceLocator.cs │ │ ├── Controllers │ │ ├── CartController.cs │ │ ├── OrdersController.cs │ │ └── ProductsController.cs │ │ ├── Filters │ │ └── AuthActionFilter.cs │ │ ├── Models │ │ └── ModelToTestTemplates.cs │ │ ├── Program.cs │ │ ├── Properties │ │ └── launchSettings.json │ │ ├── SpyStore.MVC.csproj │ │ ├── SpyStore.MVC.csproj.user │ │ ├── Startup.cs │ │ ├── TagHelpers │ │ └── EmailTagHelper.cs │ │ ├── Validation │ │ ├── MustBeGreaterThanZeroAttribute.cs │ │ └── MustNotBeGreaterThanAttribute.cs │ │ ├── ViewComponents │ │ └── Menu.cs │ │ ├── ViewModels │ │ ├── AddToCartViewModel.cs │ │ ├── Base │ │ │ └── CartViewModelBase.cs │ │ ├── CartRecordViewModel.cs │ │ └── CartViewModel.cs │ │ ├── Views │ │ ├── Cart │ │ │ ├── EditorTemplates │ │ │ │ └── CartRecordViewModel.cshtml │ │ │ ├── Index.cshtml │ │ │ └── Update.cshtml │ │ ├── Orders │ │ │ ├── Details.cshtml │ │ │ └── Index.cshtml │ │ ├── Products │ │ │ ├── DisplayTemplates │ │ │ │ └── ProductAndCategoryBase.cshtml │ │ │ ├── ProductList.cshtml │ │ │ └── Test.cshtml │ │ ├── Shared │ │ │ ├── AddToCart.cshtml │ │ │ ├── Components │ │ │ │ └── Menu │ │ │ │ │ └── MenuView.cshtml │ │ │ ├── DisplayTemplates │ │ │ │ ├── Boolean.cshtml │ │ │ │ └── DateTime.cshtml │ │ │ ├── EditorTemplates │ │ │ │ ├── AddToCartViewModel.cshtml │ │ │ │ └── Boolean.cshtml │ │ │ ├── Error.cshtml │ │ │ ├── LoginView.cshtml │ │ │ ├── _Layout.cshtml │ │ │ └── _ValidationScriptsPartial.cshtml │ │ ├── _ViewImports.cshtml │ │ └── _ViewStart.cshtml │ │ ├── WebServiceAccess │ │ ├── Base │ │ │ ├── IWebApiCalls.cs │ │ │ └── WebApiCallsBase.cs │ │ └── WebAPICalls.cs │ │ ├── appsettings.Development.json │ │ ├── appsettings.json │ │ ├── bower.json │ │ ├── bundleconfig.json │ │ ├── bundleconfig.json.bindings │ │ ├── runtimeconfig.template.json │ │ ├── web.config │ │ └── wwwroot │ │ ├── css │ │ ├── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ │ ├── site.css │ │ ├── site.min.css │ │ ├── spystore-bootstrap.css │ │ └── spystore-bootstrap.min.css │ │ ├── favicon.ico │ │ ├── images │ │ ├── bg.jpg │ │ ├── jumbo.png │ │ ├── product-image-lg.png │ │ ├── product-image.png │ │ ├── product-thumb.png │ │ └── store-logo.png │ │ ├── js │ │ ├── site.js │ │ ├── site.min.js │ │ └── validations │ │ │ ├── errorFormatting.js │ │ │ ├── validations.min.js │ │ │ └── validators.js │ │ └── lib │ │ ├── bootstrap │ │ ├── .bower.json │ │ ├── CHANGELOG.md │ │ ├── Gemfile │ │ ├── Gemfile.lock │ │ ├── Gruntfile.js │ │ ├── ISSUE_TEMPLATE.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bower.json │ │ ├── dist │ │ │ ├── css │ │ │ │ ├── bootstrap-theme.css │ │ │ │ ├── bootstrap-theme.css.map │ │ │ │ ├── bootstrap-theme.min.css │ │ │ │ ├── bootstrap-theme.min.css.map │ │ │ │ ├── bootstrap.css │ │ │ │ ├── bootstrap.css.map │ │ │ │ ├── bootstrap.min.css │ │ │ │ └── bootstrap.min.css.map │ │ │ ├── fonts │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ └── js │ │ │ │ ├── bootstrap.js │ │ │ │ ├── bootstrap.min.js │ │ │ │ └── npm.js │ │ ├── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ │ ├── grunt │ │ │ ├── .jshintrc │ │ │ ├── bs-commonjs-generator.js │ │ │ ├── bs-glyphicons-data-generator.js │ │ │ ├── bs-lessdoc-parser.js │ │ │ ├── bs-raw-files-generator.js │ │ │ ├── change-version.js │ │ │ ├── configBridge.json │ │ │ ├── npm-shrinkwrap.json │ │ │ └── sauce_browsers.yml │ │ ├── js │ │ │ ├── .jscsrc │ │ │ ├── .jshintrc │ │ │ ├── affix.js │ │ │ ├── alert.js │ │ │ ├── button.js │ │ │ ├── carousel.js │ │ │ ├── collapse.js │ │ │ ├── dropdown.js │ │ │ ├── modal.js │ │ │ ├── popover.js │ │ │ ├── scrollspy.js │ │ │ ├── tab.js │ │ │ ├── tooltip.js │ │ │ └── transition.js │ │ ├── less │ │ │ ├── .csscomb.json │ │ │ ├── .csslintrc │ │ │ ├── alerts.less │ │ │ ├── badges.less │ │ │ ├── bootstrap.less │ │ │ ├── breadcrumbs.less │ │ │ ├── button-groups.less │ │ │ ├── buttons.less │ │ │ ├── carousel.less │ │ │ ├── close.less │ │ │ ├── code.less │ │ │ ├── component-animations.less │ │ │ ├── dropdowns.less │ │ │ ├── forms.less │ │ │ ├── glyphicons.less │ │ │ ├── grid.less │ │ │ ├── input-groups.less │ │ │ ├── jumbotron.less │ │ │ ├── labels.less │ │ │ ├── list-group.less │ │ │ ├── media.less │ │ │ ├── mixins.less │ │ │ ├── mixins │ │ │ │ ├── alerts.less │ │ │ │ ├── background-variant.less │ │ │ │ ├── border-radius.less │ │ │ │ ├── buttons.less │ │ │ │ ├── center-block.less │ │ │ │ ├── clearfix.less │ │ │ │ ├── forms.less │ │ │ │ ├── gradients.less │ │ │ │ ├── grid-framework.less │ │ │ │ ├── grid.less │ │ │ │ ├── hide-text.less │ │ │ │ ├── image.less │ │ │ │ ├── labels.less │ │ │ │ ├── list-group.less │ │ │ │ ├── nav-divider.less │ │ │ │ ├── nav-vertical-align.less │ │ │ │ ├── opacity.less │ │ │ │ ├── pagination.less │ │ │ │ ├── panels.less │ │ │ │ ├── progress-bar.less │ │ │ │ ├── reset-filter.less │ │ │ │ ├── reset-text.less │ │ │ │ ├── resize.less │ │ │ │ ├── responsive-visibility.less │ │ │ │ ├── size.less │ │ │ │ ├── tab-focus.less │ │ │ │ ├── table-row.less │ │ │ │ ├── text-emphasis.less │ │ │ │ ├── text-overflow.less │ │ │ │ └── vendor-prefixes.less │ │ │ ├── modals.less │ │ │ ├── navbar.less │ │ │ ├── navs.less │ │ │ ├── normalize.less │ │ │ ├── pager.less │ │ │ ├── pagination.less │ │ │ ├── panels.less │ │ │ ├── popovers.less │ │ │ ├── print.less │ │ │ ├── progress-bars.less │ │ │ ├── responsive-embed.less │ │ │ ├── responsive-utilities.less │ │ │ ├── scaffolding.less │ │ │ ├── tables.less │ │ │ ├── theme.less │ │ │ ├── thumbnails.less │ │ │ ├── tooltip.less │ │ │ ├── type.less │ │ │ ├── utilities.less │ │ │ ├── variables.less │ │ │ └── wells.less │ │ ├── nuget │ │ │ ├── MyGet.ps1 │ │ │ ├── bootstrap.less.nuspec │ │ │ └── bootstrap.nuspec │ │ ├── package.js │ │ └── package.json │ │ ├── jquery-ajax-unobtrusive │ │ ├── .bower.json │ │ ├── LICENSE.txt │ │ ├── bower.json │ │ ├── gulpfile.js │ │ ├── jquery.unobtrusive-ajax.js │ │ └── jquery.unobtrusive-ajax.min.js │ │ ├── jquery-validation-unobtrusive │ │ ├── .bower.json │ │ ├── jquery.validate.unobtrusive.js │ │ └── jquery.validate.unobtrusive.min.js │ │ ├── jquery-validation │ │ ├── .bower.json │ │ ├── CONTRIBUTING.md │ │ ├── Gruntfile.js │ │ ├── LICENSE.md │ │ ├── README.md │ │ ├── bower.json │ │ ├── build │ │ │ └── release.js │ │ ├── changelog.md │ │ ├── dist │ │ │ ├── additional-methods.js │ │ │ ├── additional-methods.min.js │ │ │ ├── jquery.validate.js │ │ │ └── jquery.validate.min.js │ │ ├── package.json │ │ ├── src │ │ │ ├── additional │ │ │ │ ├── accept.js │ │ │ │ ├── additional.js │ │ │ │ ├── alphanumeric.js │ │ │ │ ├── bankaccountNL.js │ │ │ │ ├── bankorgiroaccountNL.js │ │ │ │ ├── bic.js │ │ │ │ ├── cifES.js │ │ │ │ ├── cpfBR.js │ │ │ │ ├── creditcard.js │ │ │ │ ├── creditcardtypes.js │ │ │ │ ├── currency.js │ │ │ │ ├── dateFA.js │ │ │ │ ├── dateITA.js │ │ │ │ ├── dateNL.js │ │ │ │ ├── extension.js │ │ │ │ ├── giroaccountNL.js │ │ │ │ ├── iban.js │ │ │ │ ├── integer.js │ │ │ │ ├── ipv4.js │ │ │ │ ├── ipv6.js │ │ │ │ ├── lettersonly.js │ │ │ │ ├── letterswithbasicpunc.js │ │ │ │ ├── mobileNL.js │ │ │ │ ├── mobileUK.js │ │ │ │ ├── nieES.js │ │ │ │ ├── nifES.js │ │ │ │ ├── notEqualTo.js │ │ │ │ ├── nowhitespace.js │ │ │ │ ├── pattern.js │ │ │ │ ├── phoneNL.js │ │ │ │ ├── phoneUK.js │ │ │ │ ├── phoneUS.js │ │ │ │ ├── phonesUK.js │ │ │ │ ├── postalCodeCA.js │ │ │ │ ├── postalcodeBR.js │ │ │ │ ├── postalcodeIT.js │ │ │ │ ├── postalcodeNL.js │ │ │ │ ├── postcodeUK.js │ │ │ │ ├── require_from_group.js │ │ │ │ ├── skip_or_fill_minimum.js │ │ │ │ ├── statesUS.js │ │ │ │ ├── strippedminlength.js │ │ │ │ ├── time.js │ │ │ │ ├── time12h.js │ │ │ │ ├── url2.js │ │ │ │ ├── vinUS.js │ │ │ │ ├── zipcodeUS.js │ │ │ │ └── ziprange.js │ │ │ ├── ajax.js │ │ │ ├── core.js │ │ │ └── localization │ │ │ │ ├── messages_ar.js │ │ │ │ ├── messages_az.js │ │ │ │ ├── messages_bg.js │ │ │ │ ├── messages_bn_BD.js │ │ │ │ ├── messages_ca.js │ │ │ │ ├── messages_cs.js │ │ │ │ ├── messages_da.js │ │ │ │ ├── messages_de.js │ │ │ │ ├── messages_el.js │ │ │ │ ├── messages_es.js │ │ │ │ ├── messages_es_AR.js │ │ │ │ ├── messages_es_PE.js │ │ │ │ ├── messages_et.js │ │ │ │ ├── messages_eu.js │ │ │ │ ├── messages_fa.js │ │ │ │ ├── messages_fi.js │ │ │ │ ├── messages_fr.js │ │ │ │ ├── messages_ge.js │ │ │ │ ├── messages_gl.js │ │ │ │ ├── messages_he.js │ │ │ │ ├── messages_hr.js │ │ │ │ ├── messages_hu.js │ │ │ │ ├── messages_hy_AM.js │ │ │ │ ├── messages_id.js │ │ │ │ ├── messages_is.js │ │ │ │ ├── messages_it.js │ │ │ │ ├── messages_ja.js │ │ │ │ ├── messages_ka.js │ │ │ │ ├── messages_kk.js │ │ │ │ ├── messages_ko.js │ │ │ │ ├── messages_lt.js │ │ │ │ ├── messages_lv.js │ │ │ │ ├── messages_mk.js │ │ │ │ ├── messages_my.js │ │ │ │ ├── messages_nl.js │ │ │ │ ├── messages_no.js │ │ │ │ ├── messages_pl.js │ │ │ │ ├── messages_pt_BR.js │ │ │ │ ├── messages_pt_PT.js │ │ │ │ ├── messages_ro.js │ │ │ │ ├── messages_ru.js │ │ │ │ ├── messages_si.js │ │ │ │ ├── messages_sk.js │ │ │ │ ├── messages_sl.js │ │ │ │ ├── messages_sr.js │ │ │ │ ├── messages_sr_lat.js │ │ │ │ ├── messages_sv.js │ │ │ │ ├── messages_th.js │ │ │ │ ├── messages_tj.js │ │ │ │ ├── messages_tr.js │ │ │ │ ├── messages_uk.js │ │ │ │ ├── messages_ur.js │ │ │ │ ├── messages_vi.js │ │ │ │ ├── messages_zh.js │ │ │ │ ├── messages_zh_TW.js │ │ │ │ ├── methods_de.js │ │ │ │ ├── methods_es_CL.js │ │ │ │ ├── methods_fi.js │ │ │ │ ├── methods_nl.js │ │ │ │ └── methods_pt.js │ │ └── validation.jquery.json │ │ └── jquery │ │ ├── .bower.json │ │ ├── AUTHORS.txt │ │ ├── LICENSE.txt │ │ ├── README.md │ │ ├── bower.json │ │ ├── dist │ │ ├── jquery.js │ │ ├── jquery.min.js │ │ └── jquery.min.map │ │ ├── external │ │ └── sizzle │ │ │ ├── LICENSE.txt │ │ │ └── dist │ │ │ ├── sizzle.js │ │ │ ├── sizzle.min.js │ │ │ └── sizzle.min.map │ │ └── src │ │ ├── .jshintrc │ │ ├── ajax.js │ │ ├── ajax │ │ ├── jsonp.js │ │ ├── load.js │ │ ├── parseJSON.js │ │ ├── parseXML.js │ │ ├── script.js │ │ ├── var │ │ │ ├── location.js │ │ │ ├── nonce.js │ │ │ └── rquery.js │ │ └── xhr.js │ │ ├── attributes.js │ │ ├── attributes │ │ ├── attr.js │ │ ├── classes.js │ │ ├── prop.js │ │ ├── support.js │ │ └── val.js │ │ ├── callbacks.js │ │ ├── core.js │ │ ├── core │ │ ├── access.js │ │ ├── init.js │ │ ├── parseHTML.js │ │ ├── ready.js │ │ └── var │ │ │ └── rsingleTag.js │ │ ├── css.js │ │ ├── css │ │ ├── addGetHookIf.js │ │ ├── adjustCSS.js │ │ ├── curCSS.js │ │ ├── defaultDisplay.js │ │ ├── hiddenVisibleSelectors.js │ │ ├── showHide.js │ │ ├── support.js │ │ └── var │ │ │ ├── cssExpand.js │ │ │ ├── getStyles.js │ │ │ ├── isHidden.js │ │ │ ├── rmargin.js │ │ │ ├── rnumnonpx.js │ │ │ └── swap.js │ │ ├── data.js │ │ ├── data │ │ ├── Data.js │ │ └── var │ │ │ ├── acceptData.js │ │ │ ├── dataPriv.js │ │ │ └── dataUser.js │ │ ├── deferred.js │ │ ├── deprecated.js │ │ ├── dimensions.js │ │ ├── effects.js │ │ ├── effects │ │ ├── Tween.js │ │ └── animatedSelector.js │ │ ├── event.js │ │ ├── event │ │ ├── ajax.js │ │ ├── alias.js │ │ ├── focusin.js │ │ ├── support.js │ │ └── trigger.js │ │ ├── exports │ │ ├── amd.js │ │ └── global.js │ │ ├── intro.js │ │ ├── jquery.js │ │ ├── manipulation.js │ │ ├── manipulation │ │ ├── _evalUrl.js │ │ ├── buildFragment.js │ │ ├── getAll.js │ │ ├── setGlobalEval.js │ │ ├── support.js │ │ ├── var │ │ │ ├── rcheckableType.js │ │ │ ├── rscriptType.js │ │ │ └── rtagName.js │ │ └── wrapMap.js │ │ ├── offset.js │ │ ├── outro.js │ │ ├── queue.js │ │ ├── queue │ │ └── delay.js │ │ ├── selector-native.js │ │ ├── selector-sizzle.js │ │ ├── selector.js │ │ ├── serialize.js │ │ ├── traversing.js │ │ ├── traversing │ │ ├── findFilter.js │ │ └── var │ │ │ ├── dir.js │ │ │ ├── rneedsContext.js │ │ │ └── siblings.js │ │ ├── var │ │ ├── arr.js │ │ ├── class2type.js │ │ ├── concat.js │ │ ├── document.js │ │ ├── documentElement.js │ │ ├── hasOwn.js │ │ ├── indexOf.js │ │ ├── pnum.js │ │ ├── push.js │ │ ├── rcssNum.js │ │ ├── rnotwhite.js │ │ ├── slice.js │ │ ├── support.js │ │ └── toString.js │ │ └── wrap.js ├── SpyStore.MVCComplete │ ├── SpyStore.MVCComplete.sln │ ├── global.json │ └── src │ │ ├── SpyStore.MVC │ │ ├── .bowerrc │ │ ├── Authentication │ │ │ ├── AuthHelper.cs │ │ │ └── IAuthHelper.cs │ │ ├── Configuration │ │ │ ├── IWebServiceLocator.cs │ │ │ └── WebServiceLocator.cs │ │ ├── Controllers │ │ │ ├── CartController.cs │ │ │ ├── OrdersController.cs │ │ │ └── ProductsController.cs │ │ ├── Filters │ │ │ └── AuthActionFilter.cs │ │ ├── Models │ │ │ └── ModelToTestTemplates.cs │ │ ├── Program.cs │ │ ├── Properties │ │ │ └── launchSettings.json │ │ ├── SpyStore.MVC.csproj │ │ ├── SpyStore.MVC.csproj.user │ │ ├── Startup.cs │ │ ├── TagHelpers │ │ │ └── EmailTagHelper.cs │ │ ├── Validation │ │ │ ├── MustBeGreaterThanZeroAttribute.cs │ │ │ └── MustNotBeGreaterThanAttribute.cs │ │ ├── ViewComponents │ │ │ └── Menu.cs │ │ ├── ViewModels │ │ │ ├── AddToCartViewModel.cs │ │ │ ├── Base │ │ │ │ └── CartViewModelBase.cs │ │ │ ├── CartRecordViewModel.cs │ │ │ └── CartViewModel.cs │ │ ├── Views │ │ │ ├── Cart │ │ │ │ ├── EditorTemplates │ │ │ │ │ └── CartRecordViewModel.cshtml │ │ │ │ ├── Index.cshtml │ │ │ │ └── Update.cshtml │ │ │ ├── Orders │ │ │ │ ├── Details.cshtml │ │ │ │ └── Index.cshtml │ │ │ ├── Products │ │ │ │ ├── DisplayTemplates │ │ │ │ │ └── ProductAndCategoryBase.cshtml │ │ │ │ ├── ProductList.cshtml │ │ │ │ └── Test.cshtml │ │ │ ├── Shared │ │ │ │ ├── AddToCart.cshtml │ │ │ │ ├── Components │ │ │ │ │ └── Menu │ │ │ │ │ │ └── MenuView.cshtml │ │ │ │ ├── DisplayTemplates │ │ │ │ │ ├── Boolean.cshtml │ │ │ │ │ └── DateTime.cshtml │ │ │ │ ├── EditorTemplates │ │ │ │ │ ├── AddToCartViewModel.cshtml │ │ │ │ │ └── Boolean.cshtml │ │ │ │ ├── Error.cshtml │ │ │ │ ├── LoginView.cshtml │ │ │ │ ├── _Layout.cshtml │ │ │ │ └── _ValidationScriptsPartial.cshtml │ │ │ ├── _ViewImports.cshtml │ │ │ └── _ViewStart.cshtml │ │ ├── WebServiceAccess │ │ │ ├── Base │ │ │ │ ├── IWebApiCalls.cs │ │ │ │ └── WebApiCallsBase.cs │ │ │ └── WebAPICalls.cs │ │ ├── appsettings.Development.json │ │ ├── appsettings.json │ │ ├── bower.json │ │ ├── bundleconfig.json │ │ ├── bundleconfig.json.bindings │ │ ├── runtimeconfig.template.json │ │ ├── web.config │ │ └── wwwroot │ │ │ ├── css │ │ │ ├── fonts │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ ├── site.css │ │ │ ├── site.min.css │ │ │ ├── spystore-bootstrap.css │ │ │ └── spystore-bootstrap.min.css │ │ │ ├── favicon.ico │ │ │ ├── images │ │ │ ├── bg.jpg │ │ │ ├── jumbo.png │ │ │ ├── product-image-lg.png │ │ │ ├── product-image.png │ │ │ ├── product-thumb.png │ │ │ └── store-logo.png │ │ │ ├── js │ │ │ ├── site.js │ │ │ ├── site.min.js │ │ │ └── validations │ │ │ │ ├── errorFormatting.js │ │ │ │ ├── validations.min.js │ │ │ │ └── validators.js │ │ │ └── lib │ │ │ ├── bootstrap │ │ │ ├── .bower.json │ │ │ ├── CHANGELOG.md │ │ │ ├── Gemfile │ │ │ ├── Gemfile.lock │ │ │ ├── Gruntfile.js │ │ │ ├── ISSUE_TEMPLATE.md │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── bower.json │ │ │ ├── dist │ │ │ │ ├── css │ │ │ │ │ ├── bootstrap-theme.css │ │ │ │ │ ├── bootstrap-theme.css.map │ │ │ │ │ ├── bootstrap-theme.min.css │ │ │ │ │ ├── bootstrap-theme.min.css.map │ │ │ │ │ ├── bootstrap.css │ │ │ │ │ ├── bootstrap.css.map │ │ │ │ │ ├── bootstrap.min.css │ │ │ │ │ └── bootstrap.min.css.map │ │ │ │ ├── fonts │ │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ │ └── js │ │ │ │ │ ├── bootstrap.js │ │ │ │ │ ├── bootstrap.min.js │ │ │ │ │ └── npm.js │ │ │ ├── fonts │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ ├── grunt │ │ │ │ ├── .jshintrc │ │ │ │ ├── bs-commonjs-generator.js │ │ │ │ ├── bs-glyphicons-data-generator.js │ │ │ │ ├── bs-lessdoc-parser.js │ │ │ │ ├── bs-raw-files-generator.js │ │ │ │ ├── change-version.js │ │ │ │ ├── configBridge.json │ │ │ │ ├── npm-shrinkwrap.json │ │ │ │ └── sauce_browsers.yml │ │ │ ├── js │ │ │ │ ├── .jscsrc │ │ │ │ ├── .jshintrc │ │ │ │ ├── affix.js │ │ │ │ ├── alert.js │ │ │ │ ├── button.js │ │ │ │ ├── carousel.js │ │ │ │ ├── collapse.js │ │ │ │ ├── dropdown.js │ │ │ │ ├── modal.js │ │ │ │ ├── popover.js │ │ │ │ ├── scrollspy.js │ │ │ │ ├── tab.js │ │ │ │ ├── tooltip.js │ │ │ │ └── transition.js │ │ │ ├── less │ │ │ │ ├── .csscomb.json │ │ │ │ ├── .csslintrc │ │ │ │ ├── alerts.less │ │ │ │ ├── badges.less │ │ │ │ ├── bootstrap.less │ │ │ │ ├── breadcrumbs.less │ │ │ │ ├── button-groups.less │ │ │ │ ├── buttons.less │ │ │ │ ├── carousel.less │ │ │ │ ├── close.less │ │ │ │ ├── code.less │ │ │ │ ├── component-animations.less │ │ │ │ ├── dropdowns.less │ │ │ │ ├── forms.less │ │ │ │ ├── glyphicons.less │ │ │ │ ├── grid.less │ │ │ │ ├── input-groups.less │ │ │ │ ├── jumbotron.less │ │ │ │ ├── labels.less │ │ │ │ ├── list-group.less │ │ │ │ ├── media.less │ │ │ │ ├── mixins.less │ │ │ │ ├── mixins │ │ │ │ │ ├── alerts.less │ │ │ │ │ ├── background-variant.less │ │ │ │ │ ├── border-radius.less │ │ │ │ │ ├── buttons.less │ │ │ │ │ ├── center-block.less │ │ │ │ │ ├── clearfix.less │ │ │ │ │ ├── forms.less │ │ │ │ │ ├── gradients.less │ │ │ │ │ ├── grid-framework.less │ │ │ │ │ ├── grid.less │ │ │ │ │ ├── hide-text.less │ │ │ │ │ ├── image.less │ │ │ │ │ ├── labels.less │ │ │ │ │ ├── list-group.less │ │ │ │ │ ├── nav-divider.less │ │ │ │ │ ├── nav-vertical-align.less │ │ │ │ │ ├── opacity.less │ │ │ │ │ ├── pagination.less │ │ │ │ │ ├── panels.less │ │ │ │ │ ├── progress-bar.less │ │ │ │ │ ├── reset-filter.less │ │ │ │ │ ├── reset-text.less │ │ │ │ │ ├── resize.less │ │ │ │ │ ├── responsive-visibility.less │ │ │ │ │ ├── size.less │ │ │ │ │ ├── tab-focus.less │ │ │ │ │ ├── table-row.less │ │ │ │ │ ├── text-emphasis.less │ │ │ │ │ ├── text-overflow.less │ │ │ │ │ └── vendor-prefixes.less │ │ │ │ ├── modals.less │ │ │ │ ├── navbar.less │ │ │ │ ├── navs.less │ │ │ │ ├── normalize.less │ │ │ │ ├── pager.less │ │ │ │ ├── pagination.less │ │ │ │ ├── panels.less │ │ │ │ ├── popovers.less │ │ │ │ ├── print.less │ │ │ │ ├── progress-bars.less │ │ │ │ ├── responsive-embed.less │ │ │ │ ├── responsive-utilities.less │ │ │ │ ├── scaffolding.less │ │ │ │ ├── tables.less │ │ │ │ ├── theme.less │ │ │ │ ├── thumbnails.less │ │ │ │ ├── tooltip.less │ │ │ │ ├── type.less │ │ │ │ ├── utilities.less │ │ │ │ ├── variables.less │ │ │ │ └── wells.less │ │ │ ├── nuget │ │ │ │ ├── MyGet.ps1 │ │ │ │ ├── bootstrap.less.nuspec │ │ │ │ └── bootstrap.nuspec │ │ │ ├── package.js │ │ │ └── package.json │ │ │ ├── jquery-ajax-unobtrusive │ │ │ ├── .bower.json │ │ │ ├── LICENSE.txt │ │ │ ├── bower.json │ │ │ ├── gulpfile.js │ │ │ ├── jquery.unobtrusive-ajax.js │ │ │ └── jquery.unobtrusive-ajax.min.js │ │ │ ├── jquery-validation-unobtrusive │ │ │ ├── .bower.json │ │ │ ├── jquery.validate.unobtrusive.js │ │ │ └── jquery.validate.unobtrusive.min.js │ │ │ ├── jquery-validation │ │ │ ├── .bower.json │ │ │ ├── CONTRIBUTING.md │ │ │ ├── Gruntfile.js │ │ │ ├── LICENSE.md │ │ │ ├── README.md │ │ │ ├── bower.json │ │ │ ├── build │ │ │ │ └── release.js │ │ │ ├── changelog.md │ │ │ ├── dist │ │ │ │ ├── additional-methods.js │ │ │ │ ├── additional-methods.min.js │ │ │ │ ├── jquery.validate.js │ │ │ │ └── jquery.validate.min.js │ │ │ ├── package.json │ │ │ ├── src │ │ │ │ ├── additional │ │ │ │ │ ├── accept.js │ │ │ │ │ ├── additional.js │ │ │ │ │ ├── alphanumeric.js │ │ │ │ │ ├── bankaccountNL.js │ │ │ │ │ ├── bankorgiroaccountNL.js │ │ │ │ │ ├── bic.js │ │ │ │ │ ├── cifES.js │ │ │ │ │ ├── cpfBR.js │ │ │ │ │ ├── creditcard.js │ │ │ │ │ ├── creditcardtypes.js │ │ │ │ │ ├── currency.js │ │ │ │ │ ├── dateFA.js │ │ │ │ │ ├── dateITA.js │ │ │ │ │ ├── dateNL.js │ │ │ │ │ ├── extension.js │ │ │ │ │ ├── giroaccountNL.js │ │ │ │ │ ├── iban.js │ │ │ │ │ ├── integer.js │ │ │ │ │ ├── ipv4.js │ │ │ │ │ ├── ipv6.js │ │ │ │ │ ├── lettersonly.js │ │ │ │ │ ├── letterswithbasicpunc.js │ │ │ │ │ ├── mobileNL.js │ │ │ │ │ ├── mobileUK.js │ │ │ │ │ ├── nieES.js │ │ │ │ │ ├── nifES.js │ │ │ │ │ ├── notEqualTo.js │ │ │ │ │ ├── nowhitespace.js │ │ │ │ │ ├── pattern.js │ │ │ │ │ ├── phoneNL.js │ │ │ │ │ ├── phoneUK.js │ │ │ │ │ ├── phoneUS.js │ │ │ │ │ ├── phonesUK.js │ │ │ │ │ ├── postalCodeCA.js │ │ │ │ │ ├── postalcodeBR.js │ │ │ │ │ ├── postalcodeIT.js │ │ │ │ │ ├── postalcodeNL.js │ │ │ │ │ ├── postcodeUK.js │ │ │ │ │ ├── require_from_group.js │ │ │ │ │ ├── skip_or_fill_minimum.js │ │ │ │ │ ├── statesUS.js │ │ │ │ │ ├── strippedminlength.js │ │ │ │ │ ├── time.js │ │ │ │ │ ├── time12h.js │ │ │ │ │ ├── url2.js │ │ │ │ │ ├── vinUS.js │ │ │ │ │ ├── zipcodeUS.js │ │ │ │ │ └── ziprange.js │ │ │ │ ├── ajax.js │ │ │ │ ├── core.js │ │ │ │ └── localization │ │ │ │ │ ├── messages_ar.js │ │ │ │ │ ├── messages_az.js │ │ │ │ │ ├── messages_bg.js │ │ │ │ │ ├── messages_bn_BD.js │ │ │ │ │ ├── messages_ca.js │ │ │ │ │ ├── messages_cs.js │ │ │ │ │ ├── messages_da.js │ │ │ │ │ ├── messages_de.js │ │ │ │ │ ├── messages_el.js │ │ │ │ │ ├── messages_es.js │ │ │ │ │ ├── messages_es_AR.js │ │ │ │ │ ├── messages_es_PE.js │ │ │ │ │ ├── messages_et.js │ │ │ │ │ ├── messages_eu.js │ │ │ │ │ ├── messages_fa.js │ │ │ │ │ ├── messages_fi.js │ │ │ │ │ ├── messages_fr.js │ │ │ │ │ ├── messages_ge.js │ │ │ │ │ ├── messages_gl.js │ │ │ │ │ ├── messages_he.js │ │ │ │ │ ├── messages_hr.js │ │ │ │ │ ├── messages_hu.js │ │ │ │ │ ├── messages_hy_AM.js │ │ │ │ │ ├── messages_id.js │ │ │ │ │ ├── messages_is.js │ │ │ │ │ ├── messages_it.js │ │ │ │ │ ├── messages_ja.js │ │ │ │ │ ├── messages_ka.js │ │ │ │ │ ├── messages_kk.js │ │ │ │ │ ├── messages_ko.js │ │ │ │ │ ├── messages_lt.js │ │ │ │ │ ├── messages_lv.js │ │ │ │ │ ├── messages_mk.js │ │ │ │ │ ├── messages_my.js │ │ │ │ │ ├── messages_nl.js │ │ │ │ │ ├── messages_no.js │ │ │ │ │ ├── messages_pl.js │ │ │ │ │ ├── messages_pt_BR.js │ │ │ │ │ ├── messages_pt_PT.js │ │ │ │ │ ├── messages_ro.js │ │ │ │ │ ├── messages_ru.js │ │ │ │ │ ├── messages_si.js │ │ │ │ │ ├── messages_sk.js │ │ │ │ │ ├── messages_sl.js │ │ │ │ │ ├── messages_sr.js │ │ │ │ │ ├── messages_sr_lat.js │ │ │ │ │ ├── messages_sv.js │ │ │ │ │ ├── messages_th.js │ │ │ │ │ ├── messages_tj.js │ │ │ │ │ ├── messages_tr.js │ │ │ │ │ ├── messages_uk.js │ │ │ │ │ ├── messages_ur.js │ │ │ │ │ ├── messages_vi.js │ │ │ │ │ ├── messages_zh.js │ │ │ │ │ ├── messages_zh_TW.js │ │ │ │ │ ├── methods_de.js │ │ │ │ │ ├── methods_es_CL.js │ │ │ │ │ ├── methods_fi.js │ │ │ │ │ ├── methods_nl.js │ │ │ │ │ └── methods_pt.js │ │ │ └── validation.jquery.json │ │ │ └── jquery │ │ │ ├── .bower.json │ │ │ ├── AUTHORS.txt │ │ │ ├── LICENSE.txt │ │ │ ├── README.md │ │ │ ├── bower.json │ │ │ ├── dist │ │ │ ├── jquery.js │ │ │ ├── jquery.min.js │ │ │ └── jquery.min.map │ │ │ ├── external │ │ │ └── sizzle │ │ │ │ ├── LICENSE.txt │ │ │ │ └── dist │ │ │ │ ├── sizzle.js │ │ │ │ ├── sizzle.min.js │ │ │ │ └── sizzle.min.map │ │ │ └── src │ │ │ ├── .jshintrc │ │ │ ├── ajax.js │ │ │ ├── ajax │ │ │ ├── jsonp.js │ │ │ ├── load.js │ │ │ ├── parseJSON.js │ │ │ ├── parseXML.js │ │ │ ├── script.js │ │ │ ├── var │ │ │ │ ├── location.js │ │ │ │ ├── nonce.js │ │ │ │ └── rquery.js │ │ │ └── xhr.js │ │ │ ├── attributes.js │ │ │ ├── attributes │ │ │ ├── attr.js │ │ │ ├── classes.js │ │ │ ├── prop.js │ │ │ ├── support.js │ │ │ └── val.js │ │ │ ├── callbacks.js │ │ │ ├── core.js │ │ │ ├── core │ │ │ ├── access.js │ │ │ ├── init.js │ │ │ ├── parseHTML.js │ │ │ ├── ready.js │ │ │ └── var │ │ │ │ └── rsingleTag.js │ │ │ ├── css.js │ │ │ ├── css │ │ │ ├── addGetHookIf.js │ │ │ ├── adjustCSS.js │ │ │ ├── curCSS.js │ │ │ ├── defaultDisplay.js │ │ │ ├── hiddenVisibleSelectors.js │ │ │ ├── showHide.js │ │ │ ├── support.js │ │ │ └── var │ │ │ │ ├── cssExpand.js │ │ │ │ ├── getStyles.js │ │ │ │ ├── isHidden.js │ │ │ │ ├── rmargin.js │ │ │ │ ├── rnumnonpx.js │ │ │ │ └── swap.js │ │ │ ├── data.js │ │ │ ├── data │ │ │ ├── Data.js │ │ │ └── var │ │ │ │ ├── acceptData.js │ │ │ │ ├── dataPriv.js │ │ │ │ └── dataUser.js │ │ │ ├── deferred.js │ │ │ ├── deprecated.js │ │ │ ├── dimensions.js │ │ │ ├── effects.js │ │ │ ├── effects │ │ │ ├── Tween.js │ │ │ └── animatedSelector.js │ │ │ ├── event.js │ │ │ ├── event │ │ │ ├── ajax.js │ │ │ ├── alias.js │ │ │ ├── focusin.js │ │ │ ├── support.js │ │ │ └── trigger.js │ │ │ ├── exports │ │ │ ├── amd.js │ │ │ └── global.js │ │ │ ├── intro.js │ │ │ ├── jquery.js │ │ │ ├── manipulation.js │ │ │ ├── manipulation │ │ │ ├── _evalUrl.js │ │ │ ├── buildFragment.js │ │ │ ├── getAll.js │ │ │ ├── setGlobalEval.js │ │ │ ├── support.js │ │ │ ├── var │ │ │ │ ├── rcheckableType.js │ │ │ │ ├── rscriptType.js │ │ │ │ └── rtagName.js │ │ │ └── wrapMap.js │ │ │ ├── offset.js │ │ │ ├── outro.js │ │ │ ├── queue.js │ │ │ ├── queue │ │ │ └── delay.js │ │ │ ├── selector-native.js │ │ │ ├── selector-sizzle.js │ │ │ ├── selector.js │ │ │ ├── serialize.js │ │ │ ├── traversing.js │ │ │ ├── traversing │ │ │ ├── findFilter.js │ │ │ └── var │ │ │ │ ├── dir.js │ │ │ │ ├── rneedsContext.js │ │ │ │ └── siblings.js │ │ │ ├── var │ │ │ ├── arr.js │ │ │ ├── class2type.js │ │ │ ├── concat.js │ │ │ ├── document.js │ │ │ ├── documentElement.js │ │ │ ├── hasOwn.js │ │ │ ├── indexOf.js │ │ │ ├── pnum.js │ │ │ ├── push.js │ │ │ ├── rcssNum.js │ │ │ ├── rnotwhite.js │ │ │ ├── slice.js │ │ │ ├── support.js │ │ │ └── toString.js │ │ │ └── wrap.js │ │ └── SpyStore.Models │ │ ├── Entities │ │ ├── Base │ │ │ └── EntityBase.cs │ │ ├── Category.cs │ │ ├── Customer.cs │ │ ├── Order.cs │ │ ├── OrderDetail.cs │ │ ├── Product.cs │ │ └── ShoppingCartRecord.cs │ │ ├── SpyStore.Models.csproj │ │ └── ViewModels │ │ ├── Base │ │ └── ProductAndCategoryBase.cs │ │ ├── CartRecordWithProductInfo.cs │ │ ├── OrderDetailWithProductInfo.cs │ │ └── OrderWithDetailsAndProductInfo.cs ├── SpyStore.Service.Combined │ ├── SpyStore.Service.Complete.sln │ ├── global.json │ └── src │ │ ├── SpyStore.DAL │ │ ├── EF │ │ │ ├── Migrations │ │ │ │ ├── 20161113015453_Initial.Designer.cs │ │ │ │ ├── 20161113015453_Initial.cs │ │ │ │ ├── 20161116195251_RemainingTables.Designer.cs │ │ │ │ ├── 20161116195251_RemainingTables.cs │ │ │ │ ├── 20161116200053_TSQL.Designer.cs │ │ │ │ ├── 20161116200053_TSQL.cs │ │ │ │ ├── 20161116201125_Final.Designer.cs │ │ │ │ ├── 20161116201125_Final.cs │ │ │ │ └── StoreContextModelSnapshot.cs │ │ │ ├── MyExecutionStrategy.cs │ │ │ └── StoreContext.cs │ │ ├── Exceptions │ │ │ └── InvalidQuantityException.cs │ │ ├── Initializers │ │ │ ├── StoreDataInitializer.cs │ │ │ └── StoreSampleData.cs │ │ ├── Program.cs │ │ ├── Repos │ │ │ ├── Base │ │ │ │ ├── IRepo.cs │ │ │ │ └── RepoBase.cs │ │ │ ├── CategoryRepo.cs │ │ │ ├── CustomerRepo.cs │ │ │ ├── Interfaces │ │ │ │ ├── ICategoryRepo.cs │ │ │ │ ├── ICustomerRepo.cs │ │ │ │ ├── IOrderDetailRepo.cs │ │ │ │ ├── IOrderRepo.cs │ │ │ │ ├── IProductRepo.cs │ │ │ │ └── IShoppingCartRepo.cs │ │ │ ├── OrderDetailRepo.cs │ │ │ ├── OrderRepo.cs │ │ │ ├── ProductRepo.cs │ │ │ └── ShoppingCartRepo.cs │ │ └── SpyStore.DAL.csproj │ │ ├── SpyStore.Models │ │ ├── Entities │ │ │ ├── Base │ │ │ │ └── EntityBase.cs │ │ │ ├── Category.cs │ │ │ ├── Customer.cs │ │ │ ├── Order.cs │ │ │ ├── OrderDetail.cs │ │ │ ├── Product.cs │ │ │ └── ShoppingCartRecord.cs │ │ ├── SpyStore.Models.csproj │ │ └── ViewModels │ │ │ ├── Base │ │ │ └── ProductAndCategoryBase.cs │ │ │ ├── CartRecordWithProductInfo.cs │ │ │ ├── OrderDetailWithProductInfo.cs │ │ │ └── OrderWithDetailsAndProductInfo.cs │ │ └── SpyStore.Service │ │ ├── Controllers │ │ ├── CategoryController.cs │ │ ├── CustomerController.cs │ │ ├── OrdersController.cs │ │ ├── ProductController.cs │ │ ├── SearchController.cs │ │ └── ShoppingCartController.cs │ │ ├── Filters │ │ └── SpyStoreExceptionFilter.cs │ │ ├── Program.cs │ │ ├── Properties │ │ ├── PublishProfiles │ │ │ ├── FileSystemProfile.pubxml │ │ │ └── FileSystemProfile.pubxml.user │ │ └── launchSettings.json │ │ ├── SpyStore.Service.csproj │ │ ├── SpyStore.Service.csproj.user │ │ ├── Startup.cs │ │ ├── appsettings.Development.json │ │ ├── appsettings.json │ │ ├── run_development.cmd │ │ ├── runtimeconfig.template.json │ │ └── web.config ├── Start │ ├── SpyStore.MVC.sln │ ├── global.json │ └── src │ │ └── SpyStore.MVC │ │ ├── .bowerrc │ │ ├── Authentication │ │ ├── AuthHelper.cs │ │ └── IAuthHelper.cs │ │ ├── Configuration │ │ ├── IWebServiceLocator.cs │ │ └── WebServiceLocator.cs │ │ ├── Filters │ │ └── AuthActionFilter.cs │ │ ├── Program.cs │ │ ├── Properties │ │ └── launchSettings.json │ │ ├── SpyStore.MVC.csproj │ │ ├── SpyStore.MVC.csproj.user │ │ ├── Startup.cs │ │ ├── ViewModels │ │ ├── AddToCartViewModel.cs │ │ ├── Base │ │ │ └── CartViewModelBase.cs │ │ ├── CartRecordViewModel.cs │ │ └── CartViewModel.cs │ │ ├── Views │ │ ├── Shared │ │ │ ├── DisplayTemplates │ │ │ │ └── Boolean.cshtml │ │ │ ├── EditorTemplates │ │ │ │ └── Boolean.cshtml │ │ │ ├── Error.cshtml │ │ │ └── _Layout.cshtml │ │ ├── _ViewImports.cshtml │ │ └── _ViewStart.cshtml │ │ ├── WebServiceAccess │ │ ├── Base │ │ │ ├── IWebApiCalls.cs │ │ │ └── WebApiCallsBase.cs │ │ └── WebAPICalls.cs │ │ ├── appsettings.Development.json │ │ ├── appsettings.json │ │ ├── bower.json │ │ ├── bundleconfig.json │ │ ├── bundleconfig.json.bindings │ │ ├── runtimeconfig.template.json │ │ ├── web.config │ │ └── wwwroot │ │ ├── css │ │ ├── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ │ ├── site.css │ │ ├── site.min.css │ │ ├── spystore-bootstrap.css │ │ └── spystore-bootstrap.min.css │ │ ├── favicon.ico │ │ ├── images │ │ ├── bg.jpg │ │ ├── jumbo.png │ │ ├── product-image-lg.png │ │ ├── product-image.png │ │ ├── product-thumb.png │ │ └── store-logo.png │ │ ├── js │ │ ├── site.js │ │ ├── site.min.js │ │ └── validations │ │ │ ├── errorFormatting.js │ │ │ └── validators.js │ │ └── lib │ │ ├── bootstrap │ │ ├── .bower.json │ │ ├── CHANGELOG.md │ │ ├── Gemfile │ │ ├── Gemfile.lock │ │ ├── Gruntfile.js │ │ ├── ISSUE_TEMPLATE.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bower.json │ │ ├── dist │ │ │ ├── css │ │ │ │ ├── bootstrap-theme.css │ │ │ │ ├── bootstrap-theme.css.map │ │ │ │ ├── bootstrap-theme.min.css │ │ │ │ ├── bootstrap-theme.min.css.map │ │ │ │ ├── bootstrap.css │ │ │ │ ├── bootstrap.css.map │ │ │ │ ├── bootstrap.min.css │ │ │ │ └── bootstrap.min.css.map │ │ │ ├── fonts │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ └── js │ │ │ │ ├── bootstrap.js │ │ │ │ ├── bootstrap.min.js │ │ │ │ └── npm.js │ │ ├── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ │ ├── grunt │ │ │ ├── .jshintrc │ │ │ ├── bs-commonjs-generator.js │ │ │ ├── bs-glyphicons-data-generator.js │ │ │ ├── bs-lessdoc-parser.js │ │ │ ├── bs-raw-files-generator.js │ │ │ ├── change-version.js │ │ │ ├── configBridge.json │ │ │ ├── npm-shrinkwrap.json │ │ │ └── sauce_browsers.yml │ │ ├── js │ │ │ ├── .jscsrc │ │ │ ├── .jshintrc │ │ │ ├── affix.js │ │ │ ├── alert.js │ │ │ ├── button.js │ │ │ ├── carousel.js │ │ │ ├── collapse.js │ │ │ ├── dropdown.js │ │ │ ├── modal.js │ │ │ ├── popover.js │ │ │ ├── scrollspy.js │ │ │ ├── tab.js │ │ │ ├── tooltip.js │ │ │ └── transition.js │ │ ├── less │ │ │ ├── .csscomb.json │ │ │ ├── .csslintrc │ │ │ ├── alerts.less │ │ │ ├── badges.less │ │ │ ├── bootstrap.less │ │ │ ├── breadcrumbs.less │ │ │ ├── button-groups.less │ │ │ ├── buttons.less │ │ │ ├── carousel.less │ │ │ ├── close.less │ │ │ ├── code.less │ │ │ ├── component-animations.less │ │ │ ├── dropdowns.less │ │ │ ├── forms.less │ │ │ ├── glyphicons.less │ │ │ ├── grid.less │ │ │ ├── input-groups.less │ │ │ ├── jumbotron.less │ │ │ ├── labels.less │ │ │ ├── list-group.less │ │ │ ├── media.less │ │ │ ├── mixins.less │ │ │ ├── mixins │ │ │ │ ├── alerts.less │ │ │ │ ├── background-variant.less │ │ │ │ ├── border-radius.less │ │ │ │ ├── buttons.less │ │ │ │ ├── center-block.less │ │ │ │ ├── clearfix.less │ │ │ │ ├── forms.less │ │ │ │ ├── gradients.less │ │ │ │ ├── grid-framework.less │ │ │ │ ├── grid.less │ │ │ │ ├── hide-text.less │ │ │ │ ├── image.less │ │ │ │ ├── labels.less │ │ │ │ ├── list-group.less │ │ │ │ ├── nav-divider.less │ │ │ │ ├── nav-vertical-align.less │ │ │ │ ├── opacity.less │ │ │ │ ├── pagination.less │ │ │ │ ├── panels.less │ │ │ │ ├── progress-bar.less │ │ │ │ ├── reset-filter.less │ │ │ │ ├── reset-text.less │ │ │ │ ├── resize.less │ │ │ │ ├── responsive-visibility.less │ │ │ │ ├── size.less │ │ │ │ ├── tab-focus.less │ │ │ │ ├── table-row.less │ │ │ │ ├── text-emphasis.less │ │ │ │ ├── text-overflow.less │ │ │ │ └── vendor-prefixes.less │ │ │ ├── modals.less │ │ │ ├── navbar.less │ │ │ ├── navs.less │ │ │ ├── normalize.less │ │ │ ├── pager.less │ │ │ ├── pagination.less │ │ │ ├── panels.less │ │ │ ├── popovers.less │ │ │ ├── print.less │ │ │ ├── progress-bars.less │ │ │ ├── responsive-embed.less │ │ │ ├── responsive-utilities.less │ │ │ ├── scaffolding.less │ │ │ ├── tables.less │ │ │ ├── theme.less │ │ │ ├── thumbnails.less │ │ │ ├── tooltip.less │ │ │ ├── type.less │ │ │ ├── utilities.less │ │ │ ├── variables.less │ │ │ └── wells.less │ │ ├── nuget │ │ │ ├── MyGet.ps1 │ │ │ ├── bootstrap.less.nuspec │ │ │ └── bootstrap.nuspec │ │ ├── package.js │ │ └── package.json │ │ ├── jquery-ajax-unobtrusive │ │ ├── .bower.json │ │ ├── LICENSE.txt │ │ ├── bower.json │ │ ├── gulpfile.js │ │ ├── jquery.unobtrusive-ajax.js │ │ └── jquery.unobtrusive-ajax.min.js │ │ ├── jquery-validation-unobtrusive │ │ ├── .bower.json │ │ ├── jquery.validate.unobtrusive.js │ │ └── jquery.validate.unobtrusive.min.js │ │ ├── jquery-validation │ │ ├── .bower.json │ │ ├── CONTRIBUTING.md │ │ ├── Gruntfile.js │ │ ├── LICENSE.md │ │ ├── README.md │ │ ├── bower.json │ │ ├── build │ │ │ └── release.js │ │ ├── changelog.md │ │ ├── dist │ │ │ ├── additional-methods.js │ │ │ ├── additional-methods.min.js │ │ │ ├── jquery.validate.js │ │ │ └── jquery.validate.min.js │ │ ├── package.json │ │ ├── src │ │ │ ├── additional │ │ │ │ ├── accept.js │ │ │ │ ├── additional.js │ │ │ │ ├── alphanumeric.js │ │ │ │ ├── bankaccountNL.js │ │ │ │ ├── bankorgiroaccountNL.js │ │ │ │ ├── bic.js │ │ │ │ ├── cifES.js │ │ │ │ ├── cpfBR.js │ │ │ │ ├── creditcard.js │ │ │ │ ├── creditcardtypes.js │ │ │ │ ├── currency.js │ │ │ │ ├── dateFA.js │ │ │ │ ├── dateITA.js │ │ │ │ ├── dateNL.js │ │ │ │ ├── extension.js │ │ │ │ ├── giroaccountNL.js │ │ │ │ ├── iban.js │ │ │ │ ├── integer.js │ │ │ │ ├── ipv4.js │ │ │ │ ├── ipv6.js │ │ │ │ ├── lettersonly.js │ │ │ │ ├── letterswithbasicpunc.js │ │ │ │ ├── mobileNL.js │ │ │ │ ├── mobileUK.js │ │ │ │ ├── nieES.js │ │ │ │ ├── nifES.js │ │ │ │ ├── notEqualTo.js │ │ │ │ ├── nowhitespace.js │ │ │ │ ├── pattern.js │ │ │ │ ├── phoneNL.js │ │ │ │ ├── phoneUK.js │ │ │ │ ├── phoneUS.js │ │ │ │ ├── phonesUK.js │ │ │ │ ├── postalCodeCA.js │ │ │ │ ├── postalcodeBR.js │ │ │ │ ├── postalcodeIT.js │ │ │ │ ├── postalcodeNL.js │ │ │ │ ├── postcodeUK.js │ │ │ │ ├── require_from_group.js │ │ │ │ ├── skip_or_fill_minimum.js │ │ │ │ ├── statesUS.js │ │ │ │ ├── strippedminlength.js │ │ │ │ ├── time.js │ │ │ │ ├── time12h.js │ │ │ │ ├── url2.js │ │ │ │ ├── vinUS.js │ │ │ │ ├── zipcodeUS.js │ │ │ │ └── ziprange.js │ │ │ ├── ajax.js │ │ │ ├── core.js │ │ │ └── localization │ │ │ │ ├── messages_ar.js │ │ │ │ ├── messages_az.js │ │ │ │ ├── messages_bg.js │ │ │ │ ├── messages_bn_BD.js │ │ │ │ ├── messages_ca.js │ │ │ │ ├── messages_cs.js │ │ │ │ ├── messages_da.js │ │ │ │ ├── messages_de.js │ │ │ │ ├── messages_el.js │ │ │ │ ├── messages_es.js │ │ │ │ ├── messages_es_AR.js │ │ │ │ ├── messages_es_PE.js │ │ │ │ ├── messages_et.js │ │ │ │ ├── messages_eu.js │ │ │ │ ├── messages_fa.js │ │ │ │ ├── messages_fi.js │ │ │ │ ├── messages_fr.js │ │ │ │ ├── messages_ge.js │ │ │ │ ├── messages_gl.js │ │ │ │ ├── messages_he.js │ │ │ │ ├── messages_hr.js │ │ │ │ ├── messages_hu.js │ │ │ │ ├── messages_hy_AM.js │ │ │ │ ├── messages_id.js │ │ │ │ ├── messages_is.js │ │ │ │ ├── messages_it.js │ │ │ │ ├── messages_ja.js │ │ │ │ ├── messages_ka.js │ │ │ │ ├── messages_kk.js │ │ │ │ ├── messages_ko.js │ │ │ │ ├── messages_lt.js │ │ │ │ ├── messages_lv.js │ │ │ │ ├── messages_mk.js │ │ │ │ ├── messages_my.js │ │ │ │ ├── messages_nl.js │ │ │ │ ├── messages_no.js │ │ │ │ ├── messages_pl.js │ │ │ │ ├── messages_pt_BR.js │ │ │ │ ├── messages_pt_PT.js │ │ │ │ ├── messages_ro.js │ │ │ │ ├── messages_ru.js │ │ │ │ ├── messages_si.js │ │ │ │ ├── messages_sk.js │ │ │ │ ├── messages_sl.js │ │ │ │ ├── messages_sr.js │ │ │ │ ├── messages_sr_lat.js │ │ │ │ ├── messages_sv.js │ │ │ │ ├── messages_th.js │ │ │ │ ├── messages_tj.js │ │ │ │ ├── messages_tr.js │ │ │ │ ├── messages_uk.js │ │ │ │ ├── messages_ur.js │ │ │ │ ├── messages_vi.js │ │ │ │ ├── messages_zh.js │ │ │ │ ├── messages_zh_TW.js │ │ │ │ ├── methods_de.js │ │ │ │ ├── methods_es_CL.js │ │ │ │ ├── methods_fi.js │ │ │ │ ├── methods_nl.js │ │ │ │ └── methods_pt.js │ │ └── validation.jquery.json │ │ └── jquery │ │ ├── .bower.json │ │ ├── AUTHORS.txt │ │ ├── LICENSE.txt │ │ ├── README.md │ │ ├── bower.json │ │ ├── dist │ │ ├── jquery.js │ │ ├── jquery.min.js │ │ └── jquery.min.map │ │ ├── external │ │ └── sizzle │ │ │ ├── LICENSE.txt │ │ │ └── dist │ │ │ ├── sizzle.js │ │ │ ├── sizzle.min.js │ │ │ └── sizzle.min.map │ │ └── src │ │ ├── .jshintrc │ │ ├── ajax.js │ │ ├── ajax │ │ ├── jsonp.js │ │ ├── load.js │ │ ├── parseJSON.js │ │ ├── parseXML.js │ │ ├── script.js │ │ ├── var │ │ │ ├── location.js │ │ │ ├── nonce.js │ │ │ └── rquery.js │ │ └── xhr.js │ │ ├── attributes.js │ │ ├── attributes │ │ ├── attr.js │ │ ├── classes.js │ │ ├── prop.js │ │ ├── support.js │ │ └── val.js │ │ ├── callbacks.js │ │ ├── core.js │ │ ├── core │ │ ├── access.js │ │ ├── init.js │ │ ├── parseHTML.js │ │ ├── ready.js │ │ └── var │ │ │ └── rsingleTag.js │ │ ├── css.js │ │ ├── css │ │ ├── addGetHookIf.js │ │ ├── adjustCSS.js │ │ ├── curCSS.js │ │ ├── defaultDisplay.js │ │ ├── hiddenVisibleSelectors.js │ │ ├── showHide.js │ │ ├── support.js │ │ └── var │ │ │ ├── cssExpand.js │ │ │ ├── getStyles.js │ │ │ ├── isHidden.js │ │ │ ├── rmargin.js │ │ │ ├── rnumnonpx.js │ │ │ └── swap.js │ │ ├── data.js │ │ ├── data │ │ ├── Data.js │ │ └── var │ │ │ ├── acceptData.js │ │ │ ├── dataPriv.js │ │ │ └── dataUser.js │ │ ├── deferred.js │ │ ├── deprecated.js │ │ ├── dimensions.js │ │ ├── effects.js │ │ ├── effects │ │ ├── Tween.js │ │ └── animatedSelector.js │ │ ├── event.js │ │ ├── event │ │ ├── ajax.js │ │ ├── alias.js │ │ ├── focusin.js │ │ ├── support.js │ │ └── trigger.js │ │ ├── exports │ │ ├── amd.js │ │ └── global.js │ │ ├── intro.js │ │ ├── jquery.js │ │ ├── manipulation.js │ │ ├── manipulation │ │ ├── _evalUrl.js │ │ ├── buildFragment.js │ │ ├── getAll.js │ │ ├── setGlobalEval.js │ │ ├── support.js │ │ ├── var │ │ │ ├── rcheckableType.js │ │ │ ├── rscriptType.js │ │ │ └── rtagName.js │ │ └── wrapMap.js │ │ ├── offset.js │ │ ├── outro.js │ │ ├── queue.js │ │ ├── queue │ │ └── delay.js │ │ ├── selector-native.js │ │ ├── selector-sizzle.js │ │ ├── selector.js │ │ ├── serialize.js │ │ ├── traversing.js │ │ ├── traversing │ │ ├── findFilter.js │ │ └── var │ │ │ ├── dir.js │ │ │ ├── rneedsContext.js │ │ │ └── siblings.js │ │ ├── var │ │ ├── arr.js │ │ ├── class2type.js │ │ ├── concat.js │ │ ├── document.js │ │ ├── documentElement.js │ │ ├── hasOwn.js │ │ ├── indexOf.js │ │ ├── pnum.js │ │ ├── push.js │ │ ├── rcssNum.js │ │ ├── rnotwhite.js │ │ ├── slice.js │ │ ├── support.js │ │ └── toString.js │ │ └── wrap.js └── Views │ ├── Cart │ ├── EditorTemplates │ │ └── CartRecordViewModel.cshtml │ ├── Index.cshtml │ └── Update.cshtml │ ├── Orders │ ├── Details.cshtml │ └── Index.cshtml │ ├── Products │ ├── DisplayTemplates │ │ └── ProductAndCategoryBase.cshtml │ ├── ProductList.cshtml │ └── Test.cshtml │ ├── Shared │ ├── AddToCart.cshtml │ ├── Components │ │ └── Menu │ │ │ ├── Index1.cshtml │ │ │ └── MenuView.cshtml │ ├── DisplayTemplates │ │ ├── Boolean.cshtml │ │ └── DateTime.cshtml │ ├── EditorTemplates │ │ ├── AddToCartViewModel.cshtml │ │ └── Boolean.cshtml │ ├── Error.cshtml │ ├── LoginView.cshtml │ ├── _Layout.cshtml │ └── _ValidationScriptsPartial.cshtml │ ├── _ViewImports.cshtml │ └── _ViewStart.cshtml ├── SourceCode_Chapter06 ├── GulpHello │ ├── gulpfile.js │ ├── hello.txt │ └── package.json ├── NodeHelloWorld │ ├── app.js │ └── package.json ├── SystemJsCalculator │ ├── app.js │ ├── calculator.js │ ├── index.html │ └── package.json └── WebPackCalculator │ ├── app.js │ ├── calculator.js │ ├── index.html │ ├── package.json │ └── webpack.config.js ├── SourceCode_Chapter07 ├── TypeScriptSamples.sln └── src │ └── TypeScriptSamples │ ├── Program.cs │ ├── Properties │ └── launchSettings.json │ ├── Startup.cs │ ├── TypeScriptSamples.csproj │ ├── package.json │ ├── src │ ├── CustomerAnonymous.ts │ ├── CustomerBase.ts │ ├── CustomerBronze.ts │ ├── CustomerGold.ts │ ├── CustomerSilver.ts │ ├── ICustomer.ts │ ├── IProduct.ts │ ├── IndexVM.ts │ ├── Product.ts │ └── tsconfig.json │ ├── web.config │ └── wwwroot │ ├── index.html │ └── js │ ├── CustomerAnonymous.js │ ├── CustomerBase.js │ ├── CustomerBronze.js │ ├── CustomerGold.js │ ├── CustomerSilver.js │ ├── ICustomer.js │ ├── IProduct.js │ ├── IndexVM.js │ └── Product.js ├── SourceCode_Chapter08 ├── End-Part1 │ ├── SpyStore.Angular2.sln │ └── src │ │ └── SpyStore.Angular2 │ │ ├── Program.cs │ │ ├── Properties │ │ └── launchSettings.json │ │ ├── SpyStore.Angular2.csproj │ │ ├── Startup.cs │ │ ├── gulpfile.js │ │ ├── package.json │ │ ├── scripts │ │ ├── app.component.ts │ │ ├── app.module.ts │ │ ├── boot.ts │ │ ├── components │ │ │ └── products.component.ts │ │ └── tsconfig.json │ │ ├── web.config │ │ └── wwwroot │ │ ├── app │ │ └── app.html │ │ ├── css │ │ ├── fonts │ │ │ └── bootstrap │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ ├── spystore-bootstrap.css │ │ ├── spystore-bootstrap.min.css │ │ └── spystore-bootstrap.min.css.map │ │ ├── images │ │ ├── bg.jpg │ │ ├── jumbo.png │ │ ├── octocat.png │ │ ├── product-image-lg.png │ │ ├── product-image.png │ │ ├── product-image2.png │ │ ├── product-thumb.png │ │ └── store-logo.png │ │ └── index.html ├── End-Part2 │ ├── SpyStore.Angular2.sln │ └── src │ │ └── SpyStore.Angular2 │ │ ├── Program.cs │ │ ├── Properties │ │ └── launchSettings.json │ │ ├── SpyStore.Angular2.csproj │ │ ├── Startup.cs │ │ ├── gulpfile.js │ │ ├── package.json │ │ ├── scripts │ │ ├── app.component.ts │ │ ├── app.config.ts │ │ ├── app.module.ts │ │ ├── app.routing.ts │ │ ├── boot.ts │ │ ├── components │ │ │ └── products.component.ts │ │ ├── product.service.ts │ │ └── tsconfig.json │ │ ├── web.config │ │ └── wwwroot │ │ ├── app │ │ ├── app.html │ │ └── components │ │ │ └── products.html │ │ ├── css │ │ ├── fonts │ │ │ └── bootstrap │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ ├── spystore-bootstrap.css │ │ ├── spystore-bootstrap.min.css │ │ └── spystore-bootstrap.min.css.map │ │ ├── images │ │ ├── bg.jpg │ │ ├── jumbo.png │ │ ├── octocat.png │ │ ├── product-image-lg.png │ │ ├── product-image.png │ │ ├── product-image2.png │ │ ├── product-thumb.png │ │ └── store-logo.png │ │ ├── index.html │ │ └── js │ │ └── app │ │ ├── app.component.js │ │ ├── app.component.js.map │ │ ├── app.config.js │ │ ├── app.config.js.map │ │ ├── app.module.js │ │ ├── app.module.js.map │ │ ├── app.routing.js │ │ ├── app.routing.js.map │ │ ├── boot.js │ │ ├── boot.js.map │ │ ├── components │ │ ├── products.component.js │ │ └── products.component.js.map │ │ ├── product.service.js │ │ ├── product.service.js.map │ │ ├── products.service.js │ │ └── products.service.js.map ├── End-Part3 │ ├── SpyStore.Angular2.sln │ └── src │ │ └── SpyStore.Angular2 │ │ ├── Program.cs │ │ ├── Properties │ │ └── launchSettings.json │ │ ├── SpyStore.Angular2.csproj │ │ ├── Startup.cs │ │ ├── gulpfile.js │ │ ├── package.json │ │ ├── scripts │ │ ├── app.component.ts │ │ ├── app.config.ts │ │ ├── app.errorhandler.ts │ │ ├── app.module.ts │ │ ├── app.routing.ts │ │ ├── boot.ts │ │ ├── cart.service.ts │ │ ├── components │ │ │ ├── cart.component.ts │ │ │ ├── cartRecord.component.ts │ │ │ ├── categoryLinks.component.ts │ │ │ ├── checkout.component.ts │ │ │ ├── productDetail.component.ts │ │ │ └── products.component.ts │ │ ├── logging.service.ts │ │ ├── product.service.ts │ │ ├── tsconfig.json │ │ └── user.service.ts │ │ ├── web.config │ │ └── wwwroot │ │ ├── app │ │ ├── app.html │ │ └── components │ │ │ ├── cart.html │ │ │ ├── cartRecord.html │ │ │ ├── categoryLinks.html │ │ │ ├── checkout.html │ │ │ ├── productDetail.html │ │ │ └── products.html │ │ ├── css │ │ ├── fonts │ │ │ └── bootstrap │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ ├── spystore-bootstrap.css │ │ ├── spystore-bootstrap.min.css │ │ └── spystore-bootstrap.min.css.map │ │ ├── images │ │ ├── bg.jpg │ │ ├── jumbo.png │ │ ├── octocat.png │ │ ├── product-image-lg.png │ │ ├── product-image.png │ │ ├── product-image2.png │ │ ├── product-thumb.png │ │ └── store-logo.png │ │ └── index.html ├── SpyStore.Service.Combined │ ├── SpyStore.Service.Complete.sln │ ├── global.json │ └── src │ │ ├── SpyStore.DAL │ │ ├── EF │ │ │ ├── Migrations │ │ │ │ ├── 20161113015453_Initial.Designer.cs │ │ │ │ ├── 20161113015453_Initial.cs │ │ │ │ ├── 20161116195251_RemainingTables.Designer.cs │ │ │ │ ├── 20161116195251_RemainingTables.cs │ │ │ │ ├── 20161116200053_TSQL.Designer.cs │ │ │ │ ├── 20161116200053_TSQL.cs │ │ │ │ ├── 20161116201125_Final.Designer.cs │ │ │ │ ├── 20161116201125_Final.cs │ │ │ │ └── StoreContextModelSnapshot.cs │ │ │ ├── MyExecutionStrategy.cs │ │ │ └── StoreContext.cs │ │ ├── Exceptions │ │ │ └── InvalidQuantityException.cs │ │ ├── Initializers │ │ │ ├── StoreDataInitializer.cs │ │ │ └── StoreSampleData.cs │ │ ├── Program.cs │ │ ├── Repos │ │ │ ├── Base │ │ │ │ ├── IRepo.cs │ │ │ │ └── RepoBase.cs │ │ │ ├── CategoryRepo.cs │ │ │ ├── CustomerRepo.cs │ │ │ ├── Interfaces │ │ │ │ ├── ICategoryRepo.cs │ │ │ │ ├── ICustomerRepo.cs │ │ │ │ ├── IOrderDetailRepo.cs │ │ │ │ ├── IOrderRepo.cs │ │ │ │ ├── IProductRepo.cs │ │ │ │ └── IShoppingCartRepo.cs │ │ │ ├── OrderDetailRepo.cs │ │ │ ├── OrderRepo.cs │ │ │ ├── ProductRepo.cs │ │ │ └── ShoppingCartRepo.cs │ │ └── SpyStore.DAL.csproj │ │ ├── SpyStore.Models │ │ ├── Entities │ │ │ ├── Base │ │ │ │ └── EntityBase.cs │ │ │ ├── Category.cs │ │ │ ├── Customer.cs │ │ │ ├── Order.cs │ │ │ ├── OrderDetail.cs │ │ │ ├── Product.cs │ │ │ └── ShoppingCartRecord.cs │ │ ├── SpyStore.Models.csproj │ │ └── ViewModels │ │ │ ├── Base │ │ │ └── ProductAndCategoryBase.cs │ │ │ ├── CartRecordWithProductInfo.cs │ │ │ ├── OrderDetailWithProductInfo.cs │ │ │ └── OrderWithDetailsAndProductInfo.cs │ │ └── SpyStore.Service │ │ ├── Controllers │ │ ├── CategoryController.cs │ │ ├── CustomerController.cs │ │ ├── OrdersController.cs │ │ ├── ProductController.cs │ │ ├── SearchController.cs │ │ └── ShoppingCartController.cs │ │ ├── Filters │ │ └── SpyStoreExceptionFilter.cs │ │ ├── Program.cs │ │ ├── Properties │ │ ├── PublishProfiles │ │ │ └── FileSystemProfile.pubxml │ │ └── launchSettings.json │ │ ├── SpyStore.Service.csproj │ │ ├── Startup.cs │ │ ├── appsettings.json │ │ ├── run_development.cmd │ │ └── web.config ├── Start-Part2 │ ├── SpyStore.Angular2.sln │ └── src │ │ └── SpyStore.Angular2 │ │ ├── Program.cs │ │ ├── Properties │ │ └── launchSettings.json │ │ ├── SpyStore.Angular2.csproj │ │ ├── Startup.cs │ │ ├── gulpfile.js │ │ ├── package.json │ │ ├── scripts │ │ ├── app.component.ts │ │ ├── app.module.ts │ │ ├── boot.ts │ │ └── tsconfig.json │ │ ├── web.config │ │ └── wwwroot │ │ ├── app │ │ └── app.html │ │ ├── css │ │ ├── fonts │ │ │ └── bootstrap │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ ├── spystore-bootstrap.css │ │ ├── spystore-bootstrap.min.css │ │ └── spystore-bootstrap.min.css.map │ │ ├── images │ │ ├── bg.jpg │ │ ├── jumbo.png │ │ ├── octocat.png │ │ ├── product-image-lg.png │ │ ├── product-image.png │ │ ├── product-image2.png │ │ ├── product-thumb.png │ │ └── store-logo.png │ │ └── index.html ├── Start-Part3 │ ├── SpyStore.Angular2.sln │ └── src │ │ └── SpyStore.Angular2 │ │ ├── Program.cs │ │ ├── Properties │ │ └── launchSettings.json │ │ ├── SpyStore.Angular2.csproj │ │ ├── SpyStore.Angular2.csproj.user │ │ ├── Startup.cs │ │ ├── gulpfile.js │ │ ├── package.json │ │ ├── scripts │ │ ├── app.component.ts │ │ ├── app.config.ts │ │ ├── app.errorhandler.ts │ │ ├── app.module.ts │ │ ├── app.routing.ts │ │ ├── boot.ts │ │ ├── cart.service.ts │ │ ├── components │ │ │ ├── categoryLinks.component.ts │ │ │ └── products.component.ts │ │ ├── logging.service.ts │ │ ├── product.service.ts │ │ ├── tsconfig.json │ │ └── user.service.ts │ │ ├── typings.json │ │ ├── web.config │ │ └── wwwroot │ │ ├── app │ │ ├── app.html │ │ └── components │ │ │ ├── categoryLinks.html │ │ │ └── products.html │ │ ├── css │ │ ├── fonts │ │ │ └── bootstrap │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ ├── spystore-bootstrap.css │ │ ├── spystore-bootstrap.min.css │ │ └── spystore-bootstrap.min.css.map │ │ ├── images │ │ ├── bg.jpg │ │ ├── jumbo.png │ │ ├── octocat.png │ │ ├── product-image-lg.png │ │ ├── product-image.png │ │ ├── product-image2.png │ │ ├── product-thumb.png │ │ └── store-logo.png │ │ └── index.html └── run_development.cmd ├── SourceCode_Chapter09 ├── SpyStore.React.Final │ ├── SpyStore.React.sln │ └── src │ │ └── SpyStore.React │ │ ├── Program.cs │ │ ├── Properties │ │ └── launchSettings.json │ │ ├── SpyStore.React.csproj │ │ ├── Startup.cs │ │ ├── config │ │ ├── webpack.dev.js │ │ └── webpack.prod.js │ │ ├── package.json │ │ ├── src │ │ ├── app │ │ │ ├── components │ │ │ │ ├── app.tsx │ │ │ │ ├── cart.tsx │ │ │ │ ├── cartRecord.tsx │ │ │ │ ├── categoryLinks.tsx │ │ │ │ ├── checkOut.tsx │ │ │ │ ├── login.tsx │ │ │ │ ├── orderDetail.tsx │ │ │ │ ├── orderHistory.tsx │ │ │ │ ├── productDetail.tsx │ │ │ │ └── products.tsx │ │ │ ├── index.tsx │ │ │ ├── models │ │ │ │ ├── baseModel.ts │ │ │ │ ├── cart.ts │ │ │ │ ├── category.ts │ │ │ │ ├── customer.ts │ │ │ │ ├── order.ts │ │ │ │ ├── orderDetail.ts │ │ │ │ ├── product.ts │ │ │ │ └── shoppingCartRecord.ts │ │ │ └── services │ │ │ │ ├── baseService.ts │ │ │ │ ├── cart.service.ts │ │ │ │ ├── logging.service.ts │ │ │ │ ├── order.service.ts │ │ │ │ ├── product.service.ts │ │ │ │ └── user.service.ts │ │ ├── css │ │ │ ├── fonts │ │ │ │ └── bootstrap │ │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ ├── spystore-bootstrap.css │ │ │ ├── spystore-bootstrap.min.css │ │ │ └── spystore-bootstrap.min.css.map │ │ ├── images │ │ │ ├── bg.jpg │ │ │ ├── jumbo.png │ │ │ ├── octocat.png │ │ │ ├── product-image-lg.png │ │ │ ├── product-image.png │ │ │ ├── product-image2.png │ │ │ ├── product-thumb.png │ │ │ └── store-logo.png │ │ └── index.html │ │ ├── tsconfig.json │ │ ├── web.config │ │ └── webpack.config.js ├── SpyStore.React.Initial.sln ├── SpyStore.React.Initial │ ├── Program.cs │ ├── Properties │ │ └── launchSettings.json │ ├── SpyStore.React.Initial.csproj │ ├── Startup.cs │ ├── config │ │ ├── webpack.dev.js │ │ └── webpack.prod.js │ ├── package.json │ ├── runtimeconfig.template.json │ ├── src │ │ ├── app │ │ │ └── index.tsx │ │ ├── css │ │ │ ├── fonts │ │ │ │ └── bootstrap │ │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ ├── spystore-bootstrap.css │ │ │ ├── spystore-bootstrap.min.css │ │ │ └── spystore-bootstrap.min.css.map │ │ ├── images │ │ │ ├── bg.jpg │ │ │ ├── jumbo.png │ │ │ ├── octocat.png │ │ │ ├── product-image-lg.png │ │ │ ├── product-image.png │ │ │ ├── product-image2.png │ │ │ ├── product-thumb.png │ │ │ └── store-logo.png │ │ └── index.html │ ├── tsconfig.json │ ├── web.config │ └── wwwroot │ │ ├── css │ │ ├── fonts │ │ │ └── bootstrap │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ ├── spystore-bootstrap.css │ │ ├── spystore-bootstrap.min.css │ │ └── spystore-bootstrap.min.css.map │ │ ├── images │ │ ├── bg.jpg │ │ ├── jumbo.png │ │ ├── octocat.png │ │ ├── product-image-lg.png │ │ ├── product-image.png │ │ ├── product-image2.png │ │ ├── product-thumb.png │ │ └── store-logo.png │ │ ├── index.html │ │ └── scripts │ │ └── bundle.js └── SpyStore.Service.Combined │ ├── SpyStore.Service.Complete.sln │ ├── global.json │ └── src │ ├── SpyStore.DAL │ ├── EF │ │ ├── Migrations │ │ │ ├── 20161113015453_Initial.Designer.cs │ │ │ ├── 20161113015453_Initial.cs │ │ │ ├── 20161116195251_RemainingTables.Designer.cs │ │ │ ├── 20161116195251_RemainingTables.cs │ │ │ ├── 20161116200053_TSQL.Designer.cs │ │ │ ├── 20161116200053_TSQL.cs │ │ │ ├── 20161116201125_Final.Designer.cs │ │ │ ├── 20161116201125_Final.cs │ │ │ └── StoreContextModelSnapshot.cs │ │ ├── MyExecutionStrategy.cs │ │ └── StoreContext.cs │ ├── Exceptions │ │ └── InvalidQuantityException.cs │ ├── Initializers │ │ ├── StoreDataInitializer.cs │ │ └── StoreSampleData.cs │ ├── Program.cs │ ├── Repos │ │ ├── Base │ │ │ ├── IRepo.cs │ │ │ └── RepoBase.cs │ │ ├── CategoryRepo.cs │ │ ├── CustomerRepo.cs │ │ ├── Interfaces │ │ │ ├── ICategoryRepo.cs │ │ │ ├── ICustomerRepo.cs │ │ │ ├── IOrderDetailRepo.cs │ │ │ ├── IOrderRepo.cs │ │ │ ├── IProductRepo.cs │ │ │ └── IShoppingCartRepo.cs │ │ ├── OrderDetailRepo.cs │ │ ├── OrderRepo.cs │ │ ├── ProductRepo.cs │ │ └── ShoppingCartRepo.cs │ └── SpyStore.DAL.csproj │ ├── SpyStore.Models │ ├── Entities │ │ ├── Base │ │ │ └── EntityBase.cs │ │ ├── Category.cs │ │ ├── Customer.cs │ │ ├── Order.cs │ │ ├── OrderDetail.cs │ │ ├── Product.cs │ │ └── ShoppingCartRecord.cs │ ├── SpyStore.Models.csproj │ └── ViewModels │ │ ├── Base │ │ └── ProductAndCategoryBase.cs │ │ ├── CartRecordWithProductInfo.cs │ │ ├── OrderDetailWithProductInfo.cs │ │ └── OrderWithDetailsAndProductInfo.cs │ └── SpyStore.Service │ ├── Controllers │ ├── CategoryController.cs │ ├── CustomerController.cs │ ├── OrdersController.cs │ ├── ProductController.cs │ ├── SearchController.cs │ └── ShoppingCartController.cs │ ├── Filters │ └── SpyStoreExceptionFilter.cs │ ├── Program.cs │ ├── Properties │ ├── PublishProfiles │ │ └── FileSystemProfile.pubxml │ └── launchSettings.json │ ├── SpyStore.Service.csproj │ ├── Startup.cs │ ├── appsettings.Development.json │ ├── appsettings.json │ ├── run_development.cmd │ ├── runtimeconfig.template.json │ └── web.config ├── SpyStore.backup ├── SpyStoreDatabase.SQL └── contributing.md /9781484224779.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/9781484224779.jpg -------------------------------------------------------------------------------- /Errata Japikse-BWAVS.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/Errata Japikse-BWAVS.pdf -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/LICENSE.txt -------------------------------------------------------------------------------- /SourceCode_Chapter01/SpyStore.DAL/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | class Program 4 | { 5 | static void Main(string[] args) 6 | { 7 | } 8 | } -------------------------------------------------------------------------------- /SourceCode_Chapter01/global.json: -------------------------------------------------------------------------------- 1 | { 2 | "sdk": { 3 | "version": "1.1.7" 4 | } 5 | } -------------------------------------------------------------------------------- /SourceCode_Chapter01/nugetpackages/SpyStore.DAL.1.0.0.nupkg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter01/nugetpackages/SpyStore.DAL.1.0.0.nupkg -------------------------------------------------------------------------------- /SourceCode_Chapter01/nugetpackages/SpyStore.Models.1.0.0.nupkg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter01/nugetpackages/SpyStore.Models.1.0.0.nupkg -------------------------------------------------------------------------------- /SourceCode_Chapter02/Package.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter02/Package.txt -------------------------------------------------------------------------------- /SourceCode_Chapter02/SpyStore.DAL/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | class Program 4 | { 5 | static void Main(string[] args) 6 | { 7 | } 8 | } -------------------------------------------------------------------------------- /SourceCode_Chapter02/SpyStore.DAL/Repos/Interfaces/ICustomerRepo.cs: -------------------------------------------------------------------------------- 1 | using SpyStore.DAL.Repos.Base; 2 | using SpyStore.Models.Entities; 3 | 4 | namespace SpyStore.DAL.Repos.Interfaces 5 | { 6 | public interface ICustomerRepo :IRepo 7 | { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SourceCode_Chapter02/global.json: -------------------------------------------------------------------------------- 1 | { 2 | "sdk": { 3 | "version": "1.1.7" 4 | } 5 | } -------------------------------------------------------------------------------- /SourceCode_Chapter02/nugetpackages/SpyStore.DAL.1.0.0.nupkg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter02/nugetpackages/SpyStore.DAL.1.0.0.nupkg -------------------------------------------------------------------------------- /SourceCode_Chapter02/nugetpackages/SpyStore.Models.1.0.0.nupkg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter02/nugetpackages/SpyStore.Models.1.0.0.nupkg -------------------------------------------------------------------------------- /SourceCode_Chapter03/SpyStore.Service.Combined/global.json: -------------------------------------------------------------------------------- 1 | { 2 | "sdk": { 3 | "version": "1.1.7" 4 | } 5 | } -------------------------------------------------------------------------------- /SourceCode_Chapter03/SpyStore.Service.Combined/src/SpyStore.DAL/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | class Program 4 | { 5 | static void Main(string[] args) 6 | { 7 | } 8 | } -------------------------------------------------------------------------------- /SourceCode_Chapter03/SpyStore.Service.Combined/src/SpyStore.DAL/Repos/Interfaces/ICustomerRepo.cs: -------------------------------------------------------------------------------- 1 | using SpyStore.DAL.Repos.Base; 2 | using SpyStore.Models.Entities; 3 | 4 | namespace SpyStore.DAL.Repos.Interfaces 5 | { 6 | public interface ICustomerRepo :IRepo 7 | { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SourceCode_Chapter03/SpyStore.Service.Combined/src/SpyStore.Service/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "IncludeScopes": false, 4 | "LogLevel": { 5 | "Default": "Debug", 6 | "System": "Information", 7 | "Microsoft": "Information" 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /SourceCode_Chapter03/SpyStore.Service.Combined/src/SpyStore.Service/run_development.cmd: -------------------------------------------------------------------------------- 1 | set aspnetcore_environment=development 2 | dotnet restore 3 | dotnet build 4 | dotnet run 5 | -------------------------------------------------------------------------------- /SourceCode_Chapter03/SpyStore.Service.Combined/src/SpyStore.Service/runtimeconfig.template.json: -------------------------------------------------------------------------------- 1 | { 2 | "configProperties": { 3 | "System.GC.Server": true 4 | } 5 | } -------------------------------------------------------------------------------- /SourceCode_Chapter03/SpyStore.Service.Tests/SpyStore.Service.Tests/TestClasses/Base/ErrorMessage.cs: -------------------------------------------------------------------------------- 1 | namespace SpyStore.Service.Tests.TestClasses.Base 2 | { 3 | public class ErrorMessage 4 | { 5 | public string Error { get; set; } 6 | } 7 | } -------------------------------------------------------------------------------- /SourceCode_Chapter03/SpyStore.Service.Tests/global.json: -------------------------------------------------------------------------------- 1 | { 2 | "sdk": { 3 | "version": "1.1.7" 4 | } 5 | } -------------------------------------------------------------------------------- /SourceCode_Chapter03/SpyStore.Service/global.json: -------------------------------------------------------------------------------- 1 | { 2 | "sdk": { 3 | "version": "1.1.7" 4 | } 5 | } -------------------------------------------------------------------------------- /SourceCode_Chapter03/SpyStore.Service/src/SpyStore.Service/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "IncludeScopes": false, 4 | "LogLevel": { 5 | "Default": "Debug", 6 | "System": "Information", 7 | "Microsoft": "Information" 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /SourceCode_Chapter03/SpyStore.Service/src/SpyStore.Service/run_development.cmd: -------------------------------------------------------------------------------- 1 | set aspnetcore_environment=development 2 | dotnet restore 3 | dotnet build 4 | dotnet run 5 | -------------------------------------------------------------------------------- /SourceCode_Chapter03/SpyStore.Service/src/SpyStore.Service/runtimeconfig.template.json: -------------------------------------------------------------------------------- 1 | { 2 | "configProperties": { 3 | "System.GC.Server": true 4 | } 5 | } -------------------------------------------------------------------------------- /SourceCode_Chapter03/nugetpackages/SpyStore.DAL.1.0.0.nupkg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter03/nugetpackages/SpyStore.DAL.1.0.0.nupkg -------------------------------------------------------------------------------- /SourceCode_Chapter03/nugetpackages/SpyStore.Models.1.0.0.nupkg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter03/nugetpackages/SpyStore.Models.1.0.0.nupkg -------------------------------------------------------------------------------- /SourceCode_Chapter03/run_development.cmd: -------------------------------------------------------------------------------- 1 | set aspnetcore_environment=development 2 | cd .\SpyStore.Service\src\SpyStore.Service 3 | dotnet restore 4 | dotnet build 5 | dotnet run 6 | pause 7 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/global.json: -------------------------------------------------------------------------------- 1 | { 2 | "sdk": { 3 | "version": "1.1.7" 4 | } 5 | } -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "wwwroot/lib" 3 | } 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/Authentication/IAuthHelper.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Http; 2 | using SpyStore.Models.Entities; 3 | 4 | namespace SpyStore.MVC.Authentication 5 | { 6 | public interface IAuthHelper 7 | { 8 | Customer GetCustomerInfo(); 9 | } 10 | } -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/Configuration/IWebServiceLocator.cs: -------------------------------------------------------------------------------- 1 | namespace SpyStore.MVC.Configuration 2 | { 3 | public interface IWebServiceLocator 4 | { 5 | string ServiceAddress { get; } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/ViewModels/AddToCartViewModel.cs: -------------------------------------------------------------------------------- 1 | using SpyStore.MVC.ViewModels.Base; 2 | 3 | namespace SpyStore.MVC.ViewModels 4 | { 5 | public class AddToCartViewModel :CartViewModelBase 6 | { 7 | public int Quantity { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/ViewModels/CartRecordViewModel.cs: -------------------------------------------------------------------------------- 1 | using SpyStore.MVC.ViewModels.Base; 2 | 3 | namespace SpyStore.MVC.ViewModels 4 | { 5 | public class CartRecordViewModel : CartViewModelBase 6 | { 7 | public int Quantity { get; set; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/Views/Shared/DisplayTemplates/Boolean.cshtml: -------------------------------------------------------------------------------- 1 | @model bool? 2 | @{ 3 | if (!Model.HasValue) 4 | { 5 | @:Unknown 6 | } 7 | else if (Model.Value) 8 | { 9 | @:Yes 10 | } 11 | else 12 | { 13 | @:No 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/Views/_ViewImports.cshtml: -------------------------------------------------------------------------------- 1 | @using SpyStore.MVC 2 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 3 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/Views/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "_Layout"; 3 | } 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "IncludeScopes": false, 4 | "LogLevel": { 5 | "Default": "Debug", 6 | "System": "Information", 7 | "Microsoft": "Information" 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "IncludeScopes": false, 4 | "LogLevel": { 5 | "Default": "Warning" 6 | } 7 | }, 8 | "WebServiceLocator": { 9 | "ServiceAddress": "http://localhost:40001/" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/bundleconfig.json.bindings: -------------------------------------------------------------------------------- 1 | /// -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/runtimeconfig.template.json: -------------------------------------------------------------------------------- 1 | { 2 | "configProperties": { 3 | "System.GC.Server": true 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/css/site.min.css: -------------------------------------------------------------------------------- 1 | body{padding-top:50px;padding-bottom:20px}.body-content{padding-left:15px;padding-right:15px}input,select,textarea{max-width:280px}.carousel-caption p{font-size:20px;line-height:1.4}@media screen and (max-width:767px){.carousel-caption{display:none}} -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/favicon.ico -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/images/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/images/bg.jpg -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/images/jumbo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/images/jumbo.png -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/images/product-image-lg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/images/product-image-lg.png -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/images/product-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/images/product-image.png -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/images/product-thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/images/product-thumb.png -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/images/store-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/images/store-logo.png -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/js/site.js: -------------------------------------------------------------------------------- 1 | // Write your Javascript code. 2 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/js/site.min.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/js/site.min.js -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/js/validations/errorFormatting.js: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/js/validations/validators.js: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | group :development, :test do 4 | gem 'jekyll', '~> 3.1.2' 5 | gem 'jekyll-sitemap', '~> 0.11.0' 6 | end 7 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/grunt/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends" : "../js/.jshintrc", 3 | "asi" : false, 4 | "browser" : false, 5 | "es3" : false, 6 | "node" : true 7 | } 8 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/background-variant.less: -------------------------------------------------------------------------------- 1 | // Contextual backgrounds 2 | 3 | .bg-variant(@color) { 4 | background-color: @color; 5 | a&:hover, 6 | a&:focus { 7 | background-color: darken(@color, 10%); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/center-block.less: -------------------------------------------------------------------------------- 1 | // Center-align a block level element 2 | 3 | .center-block() { 4 | display: block; 5 | margin-left: auto; 6 | margin-right: auto; 7 | } 8 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/labels.less: -------------------------------------------------------------------------------- 1 | // Labels 2 | 3 | .label-variant(@color) { 4 | background-color: @color; 5 | 6 | &[href] { 7 | &:hover, 8 | &:focus { 9 | background-color: darken(@color, 10%); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/opacity.less: -------------------------------------------------------------------------------- 1 | // Opacity 2 | 3 | .opacity(@opacity) { 4 | opacity: @opacity; 5 | // IE8 filter 6 | @opacity-ie: (@opacity * 100); 7 | filter: ~"alpha(opacity=@{opacity-ie})"; 8 | } 9 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/progress-bar.less: -------------------------------------------------------------------------------- 1 | // Progress bars 2 | 3 | .progress-bar-variant(@color) { 4 | background-color: @color; 5 | 6 | // Deprecated parent class requirement as of v3.2.0 7 | .progress-striped & { 8 | #gradient > .striped(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/reset-filter.less: -------------------------------------------------------------------------------- 1 | // Reset filters for IE 2 | // 3 | // When you need to remove a gradient background, do not forget to use this to reset 4 | // the IE filter for IE9 and below. 5 | 6 | .reset-filter() { 7 | filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)")); 8 | } 9 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/resize.less: -------------------------------------------------------------------------------- 1 | // Resize anything 2 | 3 | .resizable(@direction) { 4 | resize: @direction; // Options: horizontal, vertical, both 5 | overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible` 6 | } 7 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/size.less: -------------------------------------------------------------------------------- 1 | // Sizing shortcuts 2 | 3 | .size(@width; @height) { 4 | width: @width; 5 | height: @height; 6 | } 7 | 8 | .square(@size) { 9 | .size(@size; @size); 10 | } 11 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/text-emphasis.less: -------------------------------------------------------------------------------- 1 | // Typography 2 | 3 | .text-emphasis-variant(@color) { 4 | color: @color; 5 | a&:hover, 6 | a&:focus { 7 | color: darken(@color, 10%); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/text-overflow.less: -------------------------------------------------------------------------------- 1 | // Text overflow 2 | // Requires inline-block or block for proper styling 3 | 4 | .text-overflow() { 5 | overflow: hidden; 6 | text-overflow: ellipsis; 7 | white-space: nowrap; 8 | } 9 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/alphanumeric.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "alphanumeric", function( value, element ) { 2 | return this.optional( element ) || /^\w+$/i.test( value ); 3 | }, "Letters, numbers, and underscores only please" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/dateFA.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "dateFA", function( value, element ) { 2 | return this.optional( element ) || /^[1-4]\d{3}\/((0?[1-6]\/((3[0-1])|([1-2][0-9])|(0?[1-9])))|((1[0-2]|(0?[7-9]))\/(30|([1-2][0-9])|(0?[1-9]))))$/.test( value ); 3 | }, $.validator.messages.date ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/dateNL.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "dateNL", function( value, element ) { 2 | return this.optional( element ) || /^(0?[1-9]|[12]\d|3[01])[\.\/\-](0?[1-9]|1[012])[\.\/\-]([12]\d)?(\d\d)$/.test( value ); 3 | }, $.validator.messages.date ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/integer.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "integer", function( value, element ) { 2 | return this.optional( element ) || /^-?\d+$/.test( value ); 3 | }, "A positive or negative non-decimal number please" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/lettersonly.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "lettersonly", function( value, element ) { 2 | return this.optional( element ) || /^[a-z]+$/i.test( value ); 3 | }, "Letters only please" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/letterswithbasicpunc.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "letterswithbasicpunc", function( value, element ) { 2 | return this.optional( element ) || /^[a-z\-.,()'"\s]+$/i.test( value ); 3 | }, "Letters or punctuation only please" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/mobileNL.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "mobileNL", function( value, element ) { 2 | return this.optional( element ) || /^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)6((\s|\s?\-\s?)?[0-9]){8}$/.test( value ); 3 | }, "Please specify a valid mobile number" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/notEqualTo.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "notEqualTo", function( value, element, param ) { 2 | return this.optional( element ) || !$.validator.methods.equalTo.call( this, value, element, param ); 3 | }, "Please enter a different value, values must not be the same." ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/nowhitespace.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "nowhitespace", function( value, element ) { 2 | return this.optional( element ) || /^\S+$/i.test( value ); 3 | }, "No white space please" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/postalcodeIT.js: -------------------------------------------------------------------------------- 1 | /* Matches Italian postcode (CAP) */ 2 | $.validator.addMethod( "postalcodeIT", function( value, element ) { 3 | return this.optional( element ) || /^\d{5}$/.test( value ); 4 | }, "Please specify a valid postal code" ); 5 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/postalcodeNL.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "postalcodeNL", function( value, element ) { 2 | return this.optional( element ) || /^[1-9][0-9]{3}\s?[a-zA-Z]{2}$/.test( value ); 3 | }, "Please specify a valid postal code" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/time.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "time", function( value, element ) { 2 | return this.optional( element ) || /^([01]\d|2[0-3]|[0-9])(:[0-5]\d){1,2}$/.test( value ); 3 | }, "Please enter a valid time, between 00:00 and 23:59" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/time12h.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "time12h", function( value, element ) { 2 | return this.optional( element ) || /^((0?[1-9]|1[012])(:[0-5]\d){1,2}(\ ?[AP]M))$/i.test( value ); 3 | }, "Please enter a valid time in 12-hour am/pm format" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/zipcodeUS.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "zipcodeUS", function( value, element ) { 2 | return this.optional( element ) || /^\d{5}(-\d{4})?$/.test( value ); 3 | }, "The specified US ZIP Code is invalid" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/ziprange.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "ziprange", function( value, element ) { 2 | return this.optional( element ) || /^90[2-5]\d\{2\}-\d{4}$/.test( value ); 3 | }, "Your ZIP-code must be in the range 902xx-xxxx to 905xx-xxxx" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery", 3 | "main": "dist/jquery.js", 4 | "license": "MIT", 5 | "ignore": [ 6 | "package.json" 7 | ], 8 | "keywords": [ 9 | "jquery", 10 | "javascript", 11 | "browser", 12 | "library" 13 | ] 14 | } -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/ajax/parseJSON.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core" 3 | ], function( jQuery ) { 4 | 5 | // Support: Android 2.3 6 | // Workaround failure to string-cast null input 7 | jQuery.parseJSON = function( data ) { 8 | return JSON.parse( data + "" ); 9 | }; 10 | 11 | return jQuery.parseJSON; 12 | 13 | } ); 14 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/ajax/var/location.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return window.location; 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/ajax/var/nonce.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../../core" 3 | ], function( jQuery ) { 4 | return jQuery.now(); 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/ajax/var/rquery.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /\?/ ); 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/attributes.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./core", 3 | "./attributes/attr", 4 | "./attributes/prop", 5 | "./attributes/classes", 6 | "./attributes/val" 7 | ], function( jQuery ) { 8 | 9 | // Return jQuery for attributes-only inclusion 10 | return jQuery; 11 | } ); 12 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/core/var/rsingleTag.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | // Match a standalone tag 4 | return ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ ); 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/css/var/cssExpand.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return [ "Top", "Right", "Bottom", "Left" ]; 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/css/var/rmargin.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /^margin/ ); 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/css/var/rnumnonpx.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../../var/pnum" 3 | ], function( pnum ) { 4 | return new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/data/var/dataPriv.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../Data" 3 | ], function( Data ) { 4 | return new Data(); 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/data/var/dataUser.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../Data" 3 | ], function( Data ) { 4 | return new Data(); 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/event/support.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../var/support" 3 | ], function( support ) { 4 | 5 | support.focusin = "onfocusin" in window; 6 | 7 | return support; 8 | 9 | } ); 10 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/manipulation/var/rcheckableType.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /^(?:checkbox|radio)$/i ); 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/manipulation/var/rscriptType.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /^$|\/(?:java|ecma)script/i ); 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/manipulation/var/rtagName.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /<([\w:-]+)/ ); 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/outro.js: -------------------------------------------------------------------------------- 1 | return jQuery; 2 | })); 3 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/selector.js: -------------------------------------------------------------------------------- 1 | define( [ "./selector-sizzle" ], function() {} ); 2 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/traversing/var/rneedsContext.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../../core", 3 | "../../selector" 4 | ], function( jQuery ) { 5 | return jQuery.expr.match.needsContext; 6 | } ); 7 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/traversing/var/siblings.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | return function( n, elem ) { 4 | var matched = []; 5 | 6 | for ( ; n; n = n.nextSibling ) { 7 | if ( n.nodeType === 1 && n !== elem ) { 8 | matched.push( n ); 9 | } 10 | } 11 | 12 | return matched; 13 | }; 14 | 15 | } ); 16 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/arr.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return []; 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/class2type.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | // [[Class]] -> type pairs 4 | return {}; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/concat.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.concat; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/document.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return window.document; 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/documentElement.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./document" 3 | ], function( document ) { 4 | return document.documentElement; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/hasOwn.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./class2type" 3 | ], function( class2type ) { 4 | return class2type.hasOwnProperty; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/indexOf.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.indexOf; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/pnum.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/push.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.push; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/rcssNum.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../var/pnum" 3 | ], function( pnum ) { 4 | 5 | return new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); 6 | 7 | } ); 8 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/rnotwhite.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /\S+/g ); 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/slice.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.slice; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/support.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | // All support tests are defined in their respective modules. 4 | return {}; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/toString.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./class2type" 3 | ], function( class2type ) { 4 | return class2type.toString; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter04/WebArtifacts/css/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/WebArtifacts/css/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /SourceCode_Chapter04/WebArtifacts/css/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/WebArtifacts/css/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /SourceCode_Chapter04/WebArtifacts/css/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/WebArtifacts/css/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /SourceCode_Chapter04/WebArtifacts/css/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/WebArtifacts/css/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /SourceCode_Chapter04/WebArtifacts/css/site.min.css: -------------------------------------------------------------------------------- 1 | body{padding-top:50px;padding-bottom:20px}.body-content{padding-left:15px;padding-right:15px}input,select,textarea{max-width:280px}.carousel-caption p{font-size:20px;line-height:1.4}@media screen and (max-width:767px){.carousel-caption{display:none}} -------------------------------------------------------------------------------- /SourceCode_Chapter04/WebArtifacts/images/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/WebArtifacts/images/bg.jpg -------------------------------------------------------------------------------- /SourceCode_Chapter04/WebArtifacts/images/jumbo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/WebArtifacts/images/jumbo.png -------------------------------------------------------------------------------- /SourceCode_Chapter04/WebArtifacts/images/product-image-lg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/WebArtifacts/images/product-image-lg.png -------------------------------------------------------------------------------- /SourceCode_Chapter04/WebArtifacts/images/product-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/WebArtifacts/images/product-image.png -------------------------------------------------------------------------------- /SourceCode_Chapter04/WebArtifacts/images/product-thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/WebArtifacts/images/product-thumb.png -------------------------------------------------------------------------------- /SourceCode_Chapter04/WebArtifacts/images/store-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter04/WebArtifacts/images/store-logo.png -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/global.json: -------------------------------------------------------------------------------- 1 | { 2 | "sdk": { 3 | "version": "1.1.7" 4 | } 5 | } -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "wwwroot/lib" 3 | } 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/Authentication/IAuthHelper.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Http; 2 | using SpyStore.Models.Entities; 3 | 4 | namespace SpyStore.MVC.Authentication 5 | { 6 | public interface IAuthHelper 7 | { 8 | Customer GetCustomerInfo(); 9 | } 10 | } -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/Configuration/IWebServiceLocator.cs: -------------------------------------------------------------------------------- 1 | namespace SpyStore.MVC.Configuration 2 | { 3 | public interface IWebServiceLocator 4 | { 5 | string ServiceAddress { get; } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/SpyStore.MVC.csproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | false 5 | 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/Views/Shared/DisplayTemplates/Boolean.cshtml: -------------------------------------------------------------------------------- 1 | @model bool? 2 | @{ 3 | if (!Model.HasValue) 4 | { 5 | @:Unknown 6 | } 7 | else if (Model.Value) 8 | { 9 | @:Yes 10 | } 11 | else 12 | { 13 | @:No 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/Views/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "_Layout"; 3 | } 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "IncludeScopes": false, 4 | "LogLevel": { 5 | "Default": "Debug", 6 | "System": "Information", 7 | "Microsoft": "Information" 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "IncludeScopes": false, 4 | "LogLevel": { 5 | "Default": "Warning" 6 | } 7 | }, 8 | "WebServiceLocator": { 9 | "ServiceAddress": "http://localhost:40001/" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "asp.net", 3 | "private": true, 4 | "dependencies": { 5 | "bootstrap": "3.3.7", 6 | "jquery": "2.2.4", 7 | "jquery-validation": "1.16.0", 8 | "jquery-validation-unobtrusive": "3.2.6", 9 | "jquery-ajax-unobtrusive": "3.2.4" 10 | } 11 | } -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/bundleconfig.json.bindings: -------------------------------------------------------------------------------- 1 | /// -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/runtimeconfig.template.json: -------------------------------------------------------------------------------- 1 | { 2 | "configProperties": { 3 | "System.GC.Server": true 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/css/site.min.css: -------------------------------------------------------------------------------- 1 | body{padding-top:50px;padding-bottom:20px}.body-content{padding-left:15px;padding-right:15px}input,select,textarea{max-width:280px}.carousel-caption p{font-size:20px;line-height:1.4}@media screen and (max-width:767px){.carousel-caption{display:none}} -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/favicon.ico -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/images/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/images/bg.jpg -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/images/jumbo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/images/jumbo.png -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/images/product-image-lg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/images/product-image-lg.png -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/images/product-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/images/product-image.png -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/images/product-thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/images/product-thumb.png -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/images/store-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/images/store-logo.png -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/js/site.js: -------------------------------------------------------------------------------- 1 | // Write your Javascript code. 2 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/js/site.min.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/js/site.min.js -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | group :development, :test do 4 | gem 'jekyll', '~> 3.1.2' 5 | gem 'jekyll-sitemap', '~> 0.11.0' 6 | end 7 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/grunt/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends" : "../js/.jshintrc", 3 | "asi" : false, 4 | "browser" : false, 5 | "es3" : false, 6 | "node" : true 7 | } 8 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/background-variant.less: -------------------------------------------------------------------------------- 1 | // Contextual backgrounds 2 | 3 | .bg-variant(@color) { 4 | background-color: @color; 5 | a&:hover, 6 | a&:focus { 7 | background-color: darken(@color, 10%); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/center-block.less: -------------------------------------------------------------------------------- 1 | // Center-align a block level element 2 | 3 | .center-block() { 4 | display: block; 5 | margin-left: auto; 6 | margin-right: auto; 7 | } 8 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/labels.less: -------------------------------------------------------------------------------- 1 | // Labels 2 | 3 | .label-variant(@color) { 4 | background-color: @color; 5 | 6 | &[href] { 7 | &:hover, 8 | &:focus { 9 | background-color: darken(@color, 10%); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/opacity.less: -------------------------------------------------------------------------------- 1 | // Opacity 2 | 3 | .opacity(@opacity) { 4 | opacity: @opacity; 5 | // IE8 filter 6 | @opacity-ie: (@opacity * 100); 7 | filter: ~"alpha(opacity=@{opacity-ie})"; 8 | } 9 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/progress-bar.less: -------------------------------------------------------------------------------- 1 | // Progress bars 2 | 3 | .progress-bar-variant(@color) { 4 | background-color: @color; 5 | 6 | // Deprecated parent class requirement as of v3.2.0 7 | .progress-striped & { 8 | #gradient > .striped(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/reset-filter.less: -------------------------------------------------------------------------------- 1 | // Reset filters for IE 2 | // 3 | // When you need to remove a gradient background, do not forget to use this to reset 4 | // the IE filter for IE9 and below. 5 | 6 | .reset-filter() { 7 | filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)")); 8 | } 9 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/resize.less: -------------------------------------------------------------------------------- 1 | // Resize anything 2 | 3 | .resizable(@direction) { 4 | resize: @direction; // Options: horizontal, vertical, both 5 | overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible` 6 | } 7 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/size.less: -------------------------------------------------------------------------------- 1 | // Sizing shortcuts 2 | 3 | .size(@width; @height) { 4 | width: @width; 5 | height: @height; 6 | } 7 | 8 | .square(@size) { 9 | .size(@size; @size); 10 | } 11 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/text-emphasis.less: -------------------------------------------------------------------------------- 1 | // Typography 2 | 3 | .text-emphasis-variant(@color) { 4 | color: @color; 5 | a&:hover, 6 | a&:focus { 7 | color: darken(@color, 10%); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/text-overflow.less: -------------------------------------------------------------------------------- 1 | // Text overflow 2 | // Requires inline-block or block for proper styling 3 | 4 | .text-overflow() { 5 | overflow: hidden; 6 | text-overflow: ellipsis; 7 | white-space: nowrap; 8 | } 9 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/alphanumeric.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "alphanumeric", function( value, element ) { 2 | return this.optional( element ) || /^\w+$/i.test( value ); 3 | }, "Letters, numbers, and underscores only please" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/dateFA.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "dateFA", function( value, element ) { 2 | return this.optional( element ) || /^[1-4]\d{3}\/((0?[1-6]\/((3[0-1])|([1-2][0-9])|(0?[1-9])))|((1[0-2]|(0?[7-9]))\/(30|([1-2][0-9])|(0?[1-9]))))$/.test( value ); 3 | }, $.validator.messages.date ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/dateNL.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "dateNL", function( value, element ) { 2 | return this.optional( element ) || /^(0?[1-9]|[12]\d|3[01])[\.\/\-](0?[1-9]|1[012])[\.\/\-]([12]\d)?(\d\d)$/.test( value ); 3 | }, $.validator.messages.date ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/integer.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "integer", function( value, element ) { 2 | return this.optional( element ) || /^-?\d+$/.test( value ); 3 | }, "A positive or negative non-decimal number please" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/lettersonly.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "lettersonly", function( value, element ) { 2 | return this.optional( element ) || /^[a-z]+$/i.test( value ); 3 | }, "Letters only please" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/letterswithbasicpunc.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "letterswithbasicpunc", function( value, element ) { 2 | return this.optional( element ) || /^[a-z\-.,()'"\s]+$/i.test( value ); 3 | }, "Letters or punctuation only please" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/mobileNL.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "mobileNL", function( value, element ) { 2 | return this.optional( element ) || /^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)6((\s|\s?\-\s?)?[0-9]){8}$/.test( value ); 3 | }, "Please specify a valid mobile number" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/notEqualTo.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "notEqualTo", function( value, element, param ) { 2 | return this.optional( element ) || !$.validator.methods.equalTo.call( this, value, element, param ); 3 | }, "Please enter a different value, values must not be the same." ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/nowhitespace.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "nowhitespace", function( value, element ) { 2 | return this.optional( element ) || /^\S+$/i.test( value ); 3 | }, "No white space please" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/postalcodeIT.js: -------------------------------------------------------------------------------- 1 | /* Matches Italian postcode (CAP) */ 2 | $.validator.addMethod( "postalcodeIT", function( value, element ) { 3 | return this.optional( element ) || /^\d{5}$/.test( value ); 4 | }, "Please specify a valid postal code" ); 5 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/postalcodeNL.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "postalcodeNL", function( value, element ) { 2 | return this.optional( element ) || /^[1-9][0-9]{3}\s?[a-zA-Z]{2}$/.test( value ); 3 | }, "Please specify a valid postal code" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/time.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "time", function( value, element ) { 2 | return this.optional( element ) || /^([01]\d|2[0-3]|[0-9])(:[0-5]\d){1,2}$/.test( value ); 3 | }, "Please enter a valid time, between 00:00 and 23:59" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/time12h.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "time12h", function( value, element ) { 2 | return this.optional( element ) || /^((0?[1-9]|1[012])(:[0-5]\d){1,2}(\ ?[AP]M))$/i.test( value ); 3 | }, "Please enter a valid time in 12-hour am/pm format" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/zipcodeUS.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "zipcodeUS", function( value, element ) { 2 | return this.optional( element ) || /^\d{5}(-\d{4})?$/.test( value ); 3 | }, "The specified US ZIP Code is invalid" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/ziprange.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "ziprange", function( value, element ) { 2 | return this.optional( element ) || /^90[2-5]\d\{2\}-\d{4}$/.test( value ); 3 | }, "Your ZIP-code must be in the range 902xx-xxxx to 905xx-xxxx" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery", 3 | "main": "dist/jquery.js", 4 | "license": "MIT", 5 | "ignore": [ 6 | "package.json" 7 | ], 8 | "keywords": [ 9 | "jquery", 10 | "javascript", 11 | "browser", 12 | "library" 13 | ] 14 | } -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/ajax/parseJSON.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core" 3 | ], function( jQuery ) { 4 | 5 | // Support: Android 2.3 6 | // Workaround failure to string-cast null input 7 | jQuery.parseJSON = function( data ) { 8 | return JSON.parse( data + "" ); 9 | }; 10 | 11 | return jQuery.parseJSON; 12 | 13 | } ); 14 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/ajax/var/location.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return window.location; 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/ajax/var/nonce.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../../core" 3 | ], function( jQuery ) { 4 | return jQuery.now(); 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/ajax/var/rquery.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /\?/ ); 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/attributes.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./core", 3 | "./attributes/attr", 4 | "./attributes/prop", 5 | "./attributes/classes", 6 | "./attributes/val" 7 | ], function( jQuery ) { 8 | 9 | // Return jQuery for attributes-only inclusion 10 | return jQuery; 11 | } ); 12 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/core/var/rsingleTag.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | // Match a standalone tag 4 | return ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ ); 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/css/var/cssExpand.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return [ "Top", "Right", "Bottom", "Left" ]; 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/css/var/rmargin.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /^margin/ ); 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/css/var/rnumnonpx.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../../var/pnum" 3 | ], function( pnum ) { 4 | return new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/data/var/dataPriv.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../Data" 3 | ], function( Data ) { 4 | return new Data(); 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/data/var/dataUser.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../Data" 3 | ], function( Data ) { 4 | return new Data(); 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/event/support.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../var/support" 3 | ], function( support ) { 4 | 5 | support.focusin = "onfocusin" in window; 6 | 7 | return support; 8 | 9 | } ); 10 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/manipulation/var/rcheckableType.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /^(?:checkbox|radio)$/i ); 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/manipulation/var/rscriptType.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /^$|\/(?:java|ecma)script/i ); 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/manipulation/var/rtagName.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /<([\w:-]+)/ ); 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/outro.js: -------------------------------------------------------------------------------- 1 | return jQuery; 2 | })); 3 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/selector.js: -------------------------------------------------------------------------------- 1 | define( [ "./selector-sizzle" ], function() {} ); 2 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/traversing/var/rneedsContext.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../../core", 3 | "../../selector" 4 | ], function( jQuery ) { 5 | return jQuery.expr.match.needsContext; 6 | } ); 7 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/traversing/var/siblings.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | return function( n, elem ) { 4 | var matched = []; 5 | 6 | for ( ; n; n = n.nextSibling ) { 7 | if ( n.nodeType === 1 && n !== elem ) { 8 | matched.push( n ); 9 | } 10 | } 11 | 12 | return matched; 13 | }; 14 | 15 | } ); 16 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/arr.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return []; 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/class2type.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | // [[Class]] -> type pairs 4 | return {}; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/concat.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.concat; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/document.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return window.document; 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/documentElement.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./document" 3 | ], function( document ) { 4 | return document.documentElement; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/hasOwn.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./class2type" 3 | ], function( class2type ) { 4 | return class2type.hasOwnProperty; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/indexOf.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.indexOf; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/pnum.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/push.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.push; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/rcssNum.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../var/pnum" 3 | ], function( pnum ) { 4 | 5 | return new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); 6 | 7 | } ); 8 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/rnotwhite.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /\S+/g ); 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/slice.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.slice; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/support.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | // All support tests are defined in their respective modules. 4 | return {}; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVC/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/toString.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./class2type" 3 | ], function( class2type ) { 4 | return class2type.toString; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/global.json: -------------------------------------------------------------------------------- 1 | { 2 | "sdk": { 3 | "version": "1.1.7" 4 | } 5 | } -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "wwwroot/lib" 3 | } 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/Authentication/IAuthHelper.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Http; 2 | using SpyStore.Models.Entities; 3 | 4 | namespace SpyStore.MVC.Authentication 5 | { 6 | public interface IAuthHelper 7 | { 8 | Customer GetCustomerInfo(); 9 | } 10 | } -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/Configuration/IWebServiceLocator.cs: -------------------------------------------------------------------------------- 1 | namespace SpyStore.MVC.Configuration 2 | { 3 | public interface IWebServiceLocator 4 | { 5 | string ServiceAddress { get; } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/SpyStore.MVC.csproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/Views/Shared/DisplayTemplates/Boolean.cshtml: -------------------------------------------------------------------------------- 1 | @model bool? 2 | @{ 3 | if (!Model.HasValue) 4 | { 5 | @:Unknown 6 | } 7 | else if (Model.Value) 8 | { 9 | @:Yes 10 | } 11 | else 12 | { 13 | @:No 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/Views/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "_Layout"; 3 | } 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "IncludeScopes": false, 4 | "LogLevel": { 5 | "Default": "Debug", 6 | "System": "Information", 7 | "Microsoft": "Information" 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "IncludeScopes": false, 4 | "LogLevel": { 5 | "Default": "Warning" 6 | } 7 | }, 8 | "WebServiceLocator": { 9 | "ServiceAddress": "http://localhost:40001/" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "asp.net", 3 | "private": true, 4 | "dependencies": { 5 | "bootstrap": "3.3.7", 6 | "jquery": "2.2.4", 7 | "jquery-validation": "1.16.0", 8 | "jquery-validation-unobtrusive": "3.2.6", 9 | "jquery-ajax-unobtrusive": "3.2.4" 10 | } 11 | } -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/bundleconfig.json.bindings: -------------------------------------------------------------------------------- 1 | /// -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/runtimeconfig.template.json: -------------------------------------------------------------------------------- 1 | { 2 | "configProperties": { 3 | "System.GC.Server": true 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/css/site.min.css: -------------------------------------------------------------------------------- 1 | body{padding-top:50px;padding-bottom:20px}.body-content{padding-left:15px;padding-right:15px}input,select,textarea{max-width:280px}.carousel-caption p{font-size:20px;line-height:1.4}@media screen and (max-width:767px){.carousel-caption{display:none}} -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/favicon.ico -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/images/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/images/bg.jpg -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/images/jumbo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/images/jumbo.png -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/images/product-image-lg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/images/product-image-lg.png -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/images/product-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/images/product-image.png -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/images/product-thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/images/product-thumb.png -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/images/store-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/images/store-logo.png -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/js/site.js: -------------------------------------------------------------------------------- 1 | // Write your Javascript code. 2 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/js/site.min.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/js/site.min.js -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/bootstrap/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | group :development, :test do 4 | gem 'jekyll', '~> 3.1.2' 5 | gem 'jekyll-sitemap', '~> 0.11.0' 6 | end 7 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/bootstrap/grunt/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends" : "../js/.jshintrc", 3 | "asi" : false, 4 | "browser" : false, 5 | "es3" : false, 6 | "node" : true 7 | } 8 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/background-variant.less: -------------------------------------------------------------------------------- 1 | // Contextual backgrounds 2 | 3 | .bg-variant(@color) { 4 | background-color: @color; 5 | a&:hover, 6 | a&:focus { 7 | background-color: darken(@color, 10%); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/center-block.less: -------------------------------------------------------------------------------- 1 | // Center-align a block level element 2 | 3 | .center-block() { 4 | display: block; 5 | margin-left: auto; 6 | margin-right: auto; 7 | } 8 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/labels.less: -------------------------------------------------------------------------------- 1 | // Labels 2 | 3 | .label-variant(@color) { 4 | background-color: @color; 5 | 6 | &[href] { 7 | &:hover, 8 | &:focus { 9 | background-color: darken(@color, 10%); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/opacity.less: -------------------------------------------------------------------------------- 1 | // Opacity 2 | 3 | .opacity(@opacity) { 4 | opacity: @opacity; 5 | // IE8 filter 6 | @opacity-ie: (@opacity * 100); 7 | filter: ~"alpha(opacity=@{opacity-ie})"; 8 | } 9 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/progress-bar.less: -------------------------------------------------------------------------------- 1 | // Progress bars 2 | 3 | .progress-bar-variant(@color) { 4 | background-color: @color; 5 | 6 | // Deprecated parent class requirement as of v3.2.0 7 | .progress-striped & { 8 | #gradient > .striped(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/resize.less: -------------------------------------------------------------------------------- 1 | // Resize anything 2 | 3 | .resizable(@direction) { 4 | resize: @direction; // Options: horizontal, vertical, both 5 | overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible` 6 | } 7 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/size.less: -------------------------------------------------------------------------------- 1 | // Sizing shortcuts 2 | 3 | .size(@width; @height) { 4 | width: @width; 5 | height: @height; 6 | } 7 | 8 | .square(@size) { 9 | .size(@size; @size); 10 | } 11 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/text-emphasis.less: -------------------------------------------------------------------------------- 1 | // Typography 2 | 3 | .text-emphasis-variant(@color) { 4 | color: @color; 5 | a&:hover, 6 | a&:focus { 7 | color: darken(@color, 10%); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/text-overflow.less: -------------------------------------------------------------------------------- 1 | // Text overflow 2 | // Requires inline-block or block for proper styling 3 | 4 | .text-overflow() { 5 | overflow: hidden; 6 | text-overflow: ellipsis; 7 | white-space: nowrap; 8 | } 9 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/alphanumeric.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "alphanumeric", function( value, element ) { 2 | return this.optional( element ) || /^\w+$/i.test( value ); 3 | }, "Letters, numbers, and underscores only please" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/dateFA.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "dateFA", function( value, element ) { 2 | return this.optional( element ) || /^[1-4]\d{3}\/((0?[1-6]\/((3[0-1])|([1-2][0-9])|(0?[1-9])))|((1[0-2]|(0?[7-9]))\/(30|([1-2][0-9])|(0?[1-9]))))$/.test( value ); 3 | }, $.validator.messages.date ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/dateNL.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "dateNL", function( value, element ) { 2 | return this.optional( element ) || /^(0?[1-9]|[12]\d|3[01])[\.\/\-](0?[1-9]|1[012])[\.\/\-]([12]\d)?(\d\d)$/.test( value ); 3 | }, $.validator.messages.date ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/integer.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "integer", function( value, element ) { 2 | return this.optional( element ) || /^-?\d+$/.test( value ); 3 | }, "A positive or negative non-decimal number please" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/lettersonly.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "lettersonly", function( value, element ) { 2 | return this.optional( element ) || /^[a-z]+$/i.test( value ); 3 | }, "Letters only please" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/letterswithbasicpunc.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "letterswithbasicpunc", function( value, element ) { 2 | return this.optional( element ) || /^[a-z\-.,()'"\s]+$/i.test( value ); 3 | }, "Letters or punctuation only please" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/mobileNL.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "mobileNL", function( value, element ) { 2 | return this.optional( element ) || /^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)6((\s|\s?\-\s?)?[0-9]){8}$/.test( value ); 3 | }, "Please specify a valid mobile number" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/notEqualTo.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "notEqualTo", function( value, element, param ) { 2 | return this.optional( element ) || !$.validator.methods.equalTo.call( this, value, element, param ); 3 | }, "Please enter a different value, values must not be the same." ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/nowhitespace.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "nowhitespace", function( value, element ) { 2 | return this.optional( element ) || /^\S+$/i.test( value ); 3 | }, "No white space please" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/postalcodeIT.js: -------------------------------------------------------------------------------- 1 | /* Matches Italian postcode (CAP) */ 2 | $.validator.addMethod( "postalcodeIT", function( value, element ) { 3 | return this.optional( element ) || /^\d{5}$/.test( value ); 4 | }, "Please specify a valid postal code" ); 5 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/postalcodeNL.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "postalcodeNL", function( value, element ) { 2 | return this.optional( element ) || /^[1-9][0-9]{3}\s?[a-zA-Z]{2}$/.test( value ); 3 | }, "Please specify a valid postal code" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/time.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "time", function( value, element ) { 2 | return this.optional( element ) || /^([01]\d|2[0-3]|[0-9])(:[0-5]\d){1,2}$/.test( value ); 3 | }, "Please enter a valid time, between 00:00 and 23:59" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/time12h.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "time12h", function( value, element ) { 2 | return this.optional( element ) || /^((0?[1-9]|1[012])(:[0-5]\d){1,2}(\ ?[AP]M))$/i.test( value ); 3 | }, "Please enter a valid time in 12-hour am/pm format" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/zipcodeUS.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "zipcodeUS", function( value, element ) { 2 | return this.optional( element ) || /^\d{5}(-\d{4})?$/.test( value ); 3 | }, "The specified US ZIP Code is invalid" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/ziprange.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "ziprange", function( value, element ) { 2 | return this.optional( element ) || /^90[2-5]\d\{2\}-\d{4}$/.test( value ); 3 | }, "Your ZIP-code must be in the range 902xx-xxxx to 905xx-xxxx" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery", 3 | "main": "dist/jquery.js", 4 | "license": "MIT", 5 | "ignore": [ 6 | "package.json" 7 | ], 8 | "keywords": [ 9 | "jquery", 10 | "javascript", 11 | "browser", 12 | "library" 13 | ] 14 | } -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/ajax/var/location.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return window.location; 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/ajax/var/nonce.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../../core" 3 | ], function( jQuery ) { 4 | return jQuery.now(); 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/ajax/var/rquery.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /\?/ ); 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/attributes.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./core", 3 | "./attributes/attr", 4 | "./attributes/prop", 5 | "./attributes/classes", 6 | "./attributes/val" 7 | ], function( jQuery ) { 8 | 9 | // Return jQuery for attributes-only inclusion 10 | return jQuery; 11 | } ); 12 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/core/var/rsingleTag.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | // Match a standalone tag 4 | return ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ ); 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/css/var/cssExpand.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return [ "Top", "Right", "Bottom", "Left" ]; 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/css/var/rmargin.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /^margin/ ); 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/css/var/rnumnonpx.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../../var/pnum" 3 | ], function( pnum ) { 4 | return new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/data/var/dataPriv.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../Data" 3 | ], function( Data ) { 4 | return new Data(); 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/data/var/dataUser.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../Data" 3 | ], function( Data ) { 4 | return new Data(); 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/event/support.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../var/support" 3 | ], function( support ) { 4 | 5 | support.focusin = "onfocusin" in window; 6 | 7 | return support; 8 | 9 | } ); 10 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/manipulation/var/rcheckableType.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /^(?:checkbox|radio)$/i ); 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/manipulation/var/rscriptType.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /^$|\/(?:java|ecma)script/i ); 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/manipulation/var/rtagName.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /<([\w:-]+)/ ); 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/outro.js: -------------------------------------------------------------------------------- 1 | return jQuery; 2 | })); 3 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/selector.js: -------------------------------------------------------------------------------- 1 | define( [ "./selector-sizzle" ], function() {} ); 2 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/traversing/var/rneedsContext.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../../core", 3 | "../../selector" 4 | ], function( jQuery ) { 5 | return jQuery.expr.match.needsContext; 6 | } ); 7 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/arr.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return []; 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/class2type.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | // [[Class]] -> type pairs 4 | return {}; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/concat.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.concat; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/document.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return window.document; 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/documentElement.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./document" 3 | ], function( document ) { 4 | return document.documentElement; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/hasOwn.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./class2type" 3 | ], function( class2type ) { 4 | return class2type.hasOwnProperty; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/indexOf.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.indexOf; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/pnum.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/push.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.push; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/rcssNum.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../var/pnum" 3 | ], function( pnum ) { 4 | 5 | return new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); 6 | 7 | } ); 8 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/rnotwhite.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /\S+/g ); 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/slice.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.slice; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/support.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | // All support tests are defined in their respective modules. 4 | return {}; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.MVCComplete/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/toString.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./class2type" 3 | ], function( class2type ) { 4 | return class2type.toString; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.Service.Combined/global.json: -------------------------------------------------------------------------------- 1 | { 2 | "sdk": { 3 | "version": "1.1.7" 4 | } 5 | } -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.Service.Combined/src/SpyStore.DAL/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | class Program 4 | { 5 | static void Main(string[] args) 6 | { 7 | } 8 | } -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.Service.Combined/src/SpyStore.DAL/Repos/Interfaces/ICustomerRepo.cs: -------------------------------------------------------------------------------- 1 | using SpyStore.DAL.Repos.Base; 2 | using SpyStore.Models.Entities; 3 | 4 | namespace SpyStore.DAL.Repos.Interfaces 5 | { 6 | public interface ICustomerRepo :IRepo 7 | { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.Service.Combined/src/SpyStore.Service/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "IncludeScopes": false, 4 | "LogLevel": { 5 | "Default": "Debug", 6 | "System": "Information", 7 | "Microsoft": "Information" 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.Service.Combined/src/SpyStore.Service/run_development.cmd: -------------------------------------------------------------------------------- 1 | set aspnetcore_environment=development 2 | dotnet restore 3 | dotnet build 4 | dotnet run 5 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/SpyStore.Service.Combined/src/SpyStore.Service/runtimeconfig.template.json: -------------------------------------------------------------------------------- 1 | { 2 | "configProperties": { 3 | "System.GC.Server": true 4 | } 5 | } -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/global.json: -------------------------------------------------------------------------------- 1 | { 2 | "sdk": { 3 | "version": "1.1.7" 4 | } 5 | } -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "wwwroot/lib" 3 | } 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/Authentication/IAuthHelper.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Http; 2 | using SpyStore.Models.Entities; 3 | 4 | namespace SpyStore.MVC.Authentication 5 | { 6 | public interface IAuthHelper 7 | { 8 | Customer GetCustomerInfo(); 9 | } 10 | } -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/Configuration/IWebServiceLocator.cs: -------------------------------------------------------------------------------- 1 | namespace SpyStore.MVC.Configuration 2 | { 3 | public interface IWebServiceLocator 4 | { 5 | string ServiceAddress { get; } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/ViewModels/AddToCartViewModel.cs: -------------------------------------------------------------------------------- 1 | using SpyStore.MVC.ViewModels.Base; 2 | 3 | namespace SpyStore.MVC.ViewModels 4 | { 5 | public class AddToCartViewModel :CartViewModelBase 6 | { 7 | public int Quantity { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/ViewModels/CartRecordViewModel.cs: -------------------------------------------------------------------------------- 1 | using SpyStore.MVC.ViewModels.Base; 2 | 3 | namespace SpyStore.MVC.ViewModels 4 | { 5 | public class CartRecordViewModel : CartViewModelBase 6 | { 7 | public int Quantity { get; set; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/Views/Shared/DisplayTemplates/Boolean.cshtml: -------------------------------------------------------------------------------- 1 | @model bool? 2 | @{ 3 | if (!Model.HasValue) 4 | { 5 | @:Unknown 6 | } 7 | else if (Model.Value) 8 | { 9 | @:Yes 10 | } 11 | else 12 | { 13 | @:No 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/Views/_ViewImports.cshtml: -------------------------------------------------------------------------------- 1 | @using SpyStore.MVC 2 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 3 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/Views/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "_Layout"; 3 | } 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "IncludeScopes": false, 4 | "LogLevel": { 5 | "Default": "Debug", 6 | "System": "Information", 7 | "Microsoft": "Information" 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "IncludeScopes": false, 4 | "LogLevel": { 5 | "Default": "Warning" 6 | } 7 | }, 8 | "WebServiceLocator": { 9 | "ServiceAddress": "http://localhost:40001/" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/bundleconfig.json.bindings: -------------------------------------------------------------------------------- 1 | /// -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/runtimeconfig.template.json: -------------------------------------------------------------------------------- 1 | { 2 | "configProperties": { 3 | "System.GC.Server": true 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/css/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/css/site.min.css: -------------------------------------------------------------------------------- 1 | body{padding-top:50px;padding-bottom:20px}.body-content{padding-left:15px;padding-right:15px}input,select,textarea{max-width:280px}.carousel-caption p{font-size:20px;line-height:1.4}@media screen and (max-width:767px){.carousel-caption{display:none}} -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/favicon.ico -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/images/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/images/bg.jpg -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/images/jumbo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/images/jumbo.png -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/images/product-image-lg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/images/product-image-lg.png -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/images/product-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/images/product-image.png -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/images/product-thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/images/product-thumb.png -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/images/store-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/images/store-logo.png -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/js/site.js: -------------------------------------------------------------------------------- 1 | // Write your Javascript code. 2 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/js/site.min.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/js/site.min.js -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/js/validations/errorFormatting.js: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/js/validations/validators.js: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | group :development, :test do 4 | gem 'jekyll', '~> 3.1.2' 5 | gem 'jekyll-sitemap', '~> 0.11.0' 6 | end 7 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/grunt/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends" : "../js/.jshintrc", 3 | "asi" : false, 4 | "browser" : false, 5 | "es3" : false, 6 | "node" : true 7 | } 8 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/background-variant.less: -------------------------------------------------------------------------------- 1 | // Contextual backgrounds 2 | 3 | .bg-variant(@color) { 4 | background-color: @color; 5 | a&:hover, 6 | a&:focus { 7 | background-color: darken(@color, 10%); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/center-block.less: -------------------------------------------------------------------------------- 1 | // Center-align a block level element 2 | 3 | .center-block() { 4 | display: block; 5 | margin-left: auto; 6 | margin-right: auto; 7 | } 8 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/labels.less: -------------------------------------------------------------------------------- 1 | // Labels 2 | 3 | .label-variant(@color) { 4 | background-color: @color; 5 | 6 | &[href] { 7 | &:hover, 8 | &:focus { 9 | background-color: darken(@color, 10%); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/nav-divider.less: -------------------------------------------------------------------------------- 1 | // Horizontal dividers 2 | // 3 | // Dividers (basically an hr) within dropdowns and nav lists 4 | 5 | .nav-divider(@color: #e5e5e5) { 6 | height: 1px; 7 | margin: ((@line-height-computed / 2) - 1) 0; 8 | overflow: hidden; 9 | background-color: @color; 10 | } 11 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/opacity.less: -------------------------------------------------------------------------------- 1 | // Opacity 2 | 3 | .opacity(@opacity) { 4 | opacity: @opacity; 5 | // IE8 filter 6 | @opacity-ie: (@opacity * 100); 7 | filter: ~"alpha(opacity=@{opacity-ie})"; 8 | } 9 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/progress-bar.less: -------------------------------------------------------------------------------- 1 | // Progress bars 2 | 3 | .progress-bar-variant(@color) { 4 | background-color: @color; 5 | 6 | // Deprecated parent class requirement as of v3.2.0 7 | .progress-striped & { 8 | #gradient > .striped(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/reset-filter.less: -------------------------------------------------------------------------------- 1 | // Reset filters for IE 2 | // 3 | // When you need to remove a gradient background, do not forget to use this to reset 4 | // the IE filter for IE9 and below. 5 | 6 | .reset-filter() { 7 | filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)")); 8 | } 9 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/resize.less: -------------------------------------------------------------------------------- 1 | // Resize anything 2 | 3 | .resizable(@direction) { 4 | resize: @direction; // Options: horizontal, vertical, both 5 | overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible` 6 | } 7 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/size.less: -------------------------------------------------------------------------------- 1 | // Sizing shortcuts 2 | 3 | .size(@width; @height) { 4 | width: @width; 5 | height: @height; 6 | } 7 | 8 | .square(@size) { 9 | .size(@size; @size); 10 | } 11 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/text-emphasis.less: -------------------------------------------------------------------------------- 1 | // Typography 2 | 3 | .text-emphasis-variant(@color) { 4 | color: @color; 5 | a&:hover, 6 | a&:focus { 7 | color: darken(@color, 10%); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/bootstrap/less/mixins/text-overflow.less: -------------------------------------------------------------------------------- 1 | // Text overflow 2 | // Requires inline-block or block for proper styling 3 | 4 | .text-overflow() { 5 | overflow: hidden; 6 | text-overflow: ellipsis; 7 | white-space: nowrap; 8 | } 9 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/alphanumeric.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "alphanumeric", function( value, element ) { 2 | return this.optional( element ) || /^\w+$/i.test( value ); 3 | }, "Letters, numbers, and underscores only please" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/dateFA.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "dateFA", function( value, element ) { 2 | return this.optional( element ) || /^[1-4]\d{3}\/((0?[1-6]\/((3[0-1])|([1-2][0-9])|(0?[1-9])))|((1[0-2]|(0?[7-9]))\/(30|([1-2][0-9])|(0?[1-9]))))$/.test( value ); 3 | }, $.validator.messages.date ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/dateNL.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "dateNL", function( value, element ) { 2 | return this.optional( element ) || /^(0?[1-9]|[12]\d|3[01])[\.\/\-](0?[1-9]|1[012])[\.\/\-]([12]\d)?(\d\d)$/.test( value ); 3 | }, $.validator.messages.date ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/integer.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "integer", function( value, element ) { 2 | return this.optional( element ) || /^-?\d+$/.test( value ); 3 | }, "A positive or negative non-decimal number please" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/lettersonly.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "lettersonly", function( value, element ) { 2 | return this.optional( element ) || /^[a-z]+$/i.test( value ); 3 | }, "Letters only please" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/letterswithbasicpunc.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "letterswithbasicpunc", function( value, element ) { 2 | return this.optional( element ) || /^[a-z\-.,()'"\s]+$/i.test( value ); 3 | }, "Letters or punctuation only please" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/mobileNL.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "mobileNL", function( value, element ) { 2 | return this.optional( element ) || /^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)6((\s|\s?\-\s?)?[0-9]){8}$/.test( value ); 3 | }, "Please specify a valid mobile number" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/notEqualTo.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "notEqualTo", function( value, element, param ) { 2 | return this.optional( element ) || !$.validator.methods.equalTo.call( this, value, element, param ); 3 | }, "Please enter a different value, values must not be the same." ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/nowhitespace.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "nowhitespace", function( value, element ) { 2 | return this.optional( element ) || /^\S+$/i.test( value ); 3 | }, "No white space please" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/postalcodeIT.js: -------------------------------------------------------------------------------- 1 | /* Matches Italian postcode (CAP) */ 2 | $.validator.addMethod( "postalcodeIT", function( value, element ) { 3 | return this.optional( element ) || /^\d{5}$/.test( value ); 4 | }, "Please specify a valid postal code" ); 5 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/postalcodeNL.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "postalcodeNL", function( value, element ) { 2 | return this.optional( element ) || /^[1-9][0-9]{3}\s?[a-zA-Z]{2}$/.test( value ); 3 | }, "Please specify a valid postal code" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/time.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "time", function( value, element ) { 2 | return this.optional( element ) || /^([01]\d|2[0-3]|[0-9])(:[0-5]\d){1,2}$/.test( value ); 3 | }, "Please enter a valid time, between 00:00 and 23:59" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/time12h.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "time12h", function( value, element ) { 2 | return this.optional( element ) || /^((0?[1-9]|1[012])(:[0-5]\d){1,2}(\ ?[AP]M))$/i.test( value ); 3 | }, "Please enter a valid time in 12-hour am/pm format" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/zipcodeUS.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "zipcodeUS", function( value, element ) { 2 | return this.optional( element ) || /^\d{5}(-\d{4})?$/.test( value ); 3 | }, "The specified US ZIP Code is invalid" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery-validation/src/additional/ziprange.js: -------------------------------------------------------------------------------- 1 | $.validator.addMethod( "ziprange", function( value, element ) { 2 | return this.optional( element ) || /^90[2-5]\d\{2\}-\d{4}$/.test( value ); 3 | }, "Your ZIP-code must be in the range 902xx-xxxx to 905xx-xxxx" ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery", 3 | "main": "dist/jquery.js", 4 | "license": "MIT", 5 | "ignore": [ 6 | "package.json" 7 | ], 8 | "keywords": [ 9 | "jquery", 10 | "javascript", 11 | "browser", 12 | "library" 13 | ] 14 | } -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/ajax/parseJSON.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../core" 3 | ], function( jQuery ) { 4 | 5 | // Support: Android 2.3 6 | // Workaround failure to string-cast null input 7 | jQuery.parseJSON = function( data ) { 8 | return JSON.parse( data + "" ); 9 | }; 10 | 11 | return jQuery.parseJSON; 12 | 13 | } ); 14 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/ajax/var/location.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return window.location; 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/ajax/var/nonce.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../../core" 3 | ], function( jQuery ) { 4 | return jQuery.now(); 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/ajax/var/rquery.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /\?/ ); 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/attributes.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./core", 3 | "./attributes/attr", 4 | "./attributes/prop", 5 | "./attributes/classes", 6 | "./attributes/val" 7 | ], function( jQuery ) { 8 | 9 | // Return jQuery for attributes-only inclusion 10 | return jQuery; 11 | } ); 12 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/core/var/rsingleTag.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | // Match a standalone tag 4 | return ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ ); 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/css/var/cssExpand.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return [ "Top", "Right", "Bottom", "Left" ]; 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/css/var/rmargin.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /^margin/ ); 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/css/var/rnumnonpx.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../../var/pnum" 3 | ], function( pnum ) { 4 | return new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/data/var/dataPriv.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../Data" 3 | ], function( Data ) { 4 | return new Data(); 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/data/var/dataUser.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../Data" 3 | ], function( Data ) { 4 | return new Data(); 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/event/support.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../var/support" 3 | ], function( support ) { 4 | 5 | support.focusin = "onfocusin" in window; 6 | 7 | return support; 8 | 9 | } ); 10 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/manipulation/var/rcheckableType.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /^(?:checkbox|radio)$/i ); 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/manipulation/var/rscriptType.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /^$|\/(?:java|ecma)script/i ); 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/manipulation/var/rtagName.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /<([\w:-]+)/ ); 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/outro.js: -------------------------------------------------------------------------------- 1 | return jQuery; 2 | })); 3 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/selector.js: -------------------------------------------------------------------------------- 1 | define( [ "./selector-sizzle" ], function() {} ); 2 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/traversing/var/rneedsContext.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../../core", 3 | "../../selector" 4 | ], function( jQuery ) { 5 | return jQuery.expr.match.needsContext; 6 | } ); 7 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/traversing/var/siblings.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | return function( n, elem ) { 4 | var matched = []; 5 | 6 | for ( ; n; n = n.nextSibling ) { 7 | if ( n.nodeType === 1 && n !== elem ) { 8 | matched.push( n ); 9 | } 10 | } 11 | 12 | return matched; 13 | }; 14 | 15 | } ); 16 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/arr.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return []; 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/class2type.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | // [[Class]] -> type pairs 4 | return {}; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/concat.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.concat; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/document.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return window.document; 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/documentElement.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./document" 3 | ], function( document ) { 4 | return document.documentElement; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/hasOwn.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./class2type" 3 | ], function( class2type ) { 4 | return class2type.hasOwnProperty; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/indexOf.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.indexOf; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/pnum.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/push.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.push; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/rcssNum.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "../var/pnum" 3 | ], function( pnum ) { 4 | 5 | return new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); 6 | 7 | } ); 8 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/rnotwhite.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | return ( /\S+/g ); 3 | } ); 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/slice.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./arr" 3 | ], function( arr ) { 4 | return arr.slice; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/support.js: -------------------------------------------------------------------------------- 1 | define( function() { 2 | 3 | // All support tests are defined in their respective modules. 4 | return {}; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Start/src/SpyStore.MVC/wwwroot/lib/jquery/src/var/toString.js: -------------------------------------------------------------------------------- 1 | define( [ 2 | "./class2type" 3 | ], function( class2type ) { 4 | return class2type.toString; 5 | } ); 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Views/Shared/Components/Menu/Index1.cshtml: -------------------------------------------------------------------------------- 1 | @* 2 | For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 3 | *@ 4 | @{ 5 | } 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Views/Shared/Components/Menu/MenuView.cshtml: -------------------------------------------------------------------------------- 1 | @model IEnumerable 2 |
  • Featured
  • 3 | @foreach (var item in Model) 4 | { 5 |
  • @item.CategoryName
  • 8 | } 9 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Views/Shared/DisplayTemplates/Boolean.cshtml: -------------------------------------------------------------------------------- 1 | @model bool? 2 | @{ 3 | if (!Model.HasValue) 4 | { 5 | @:Unknown 6 | } 7 | else if (Model.Value) 8 | { 9 | @:Yes 10 | } 11 | else 12 | { 13 | @:No 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /SourceCode_Chapter05/Views/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "_Layout"; 3 | } 4 | -------------------------------------------------------------------------------- /SourceCode_Chapter06/GulpHello/gulpfile.js: -------------------------------------------------------------------------------- 1 | var gulp = require('gulp'); 2 | var del = require('del'); 3 | 4 | gulp.task('clean', function() { 5 | return del('./output/'); 6 | }); 7 | 8 | gulp.task('copy', ['clean'], function() { 9 | return gulp.src('hello.txt') 10 | .pipe(gulp.dest('./output/')); 11 | 12 | }); 13 | -------------------------------------------------------------------------------- /SourceCode_Chapter06/GulpHello/hello.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter06/GulpHello/hello.txt -------------------------------------------------------------------------------- /SourceCode_Chapter06/NodeHelloWorld/app.js: -------------------------------------------------------------------------------- 1 | var request = require('request'); 2 | request('http://www.npmjs.com', function (error, response, body) { 3 | if (!error && response.statusCode == 200) { 4 | console.log(body) 5 | } 6 | }) -------------------------------------------------------------------------------- /SourceCode_Chapter06/SystemJsCalculator/calculator.js: -------------------------------------------------------------------------------- 1 | module.exports = (function() { 2 | function Calculator() {} 3 | Calculator.prototype.add = function(left, right) { 4 | return left + right; 5 | }; 6 | 7 | return Calculator; 8 | })(); -------------------------------------------------------------------------------- /SourceCode_Chapter06/WebPackCalculator/calculator.js: -------------------------------------------------------------------------------- 1 | module.exports = (function() { 2 | function Calculator() {} 3 | Calculator.prototype.add = function(left, right) { 4 | return left + right; 5 | }; 6 | 7 | return Calculator; 8 | })(); -------------------------------------------------------------------------------- /SourceCode_Chapter06/WebPackCalculator/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "01-example-site", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "serve": "http-server -o" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "devDependencies": { 12 | "webpack": "^1.13.3" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /SourceCode_Chapter06/WebPackCalculator/webpack.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | entry: "./app.js", 3 | output: { 4 | path: __dirname + "/dist", 5 | filename: "bundle.js" 6 | } 7 | }; -------------------------------------------------------------------------------- /SourceCode_Chapter07/src/TypeScriptSamples/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0.0", 3 | "name": "asp.net", 4 | "private": true, 5 | "dependencies": { 6 | 7 | }, 8 | "devDependencies": { 9 | "typescript": "2.1.4", 10 | "@types/jquery": "1.10.31" 11 | } 12 | } -------------------------------------------------------------------------------- /SourceCode_Chapter07/src/TypeScriptSamples/src/CustomerAnonymous.ts: -------------------------------------------------------------------------------- 1 | import { CustomerBase } from "./CustomerBase"; 2 | 3 | export class CustomerAnonymous extends CustomerBase { 4 | name = "Valued Customer"; 5 | } 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter07/src/TypeScriptSamples/src/CustomerBase.ts: -------------------------------------------------------------------------------- 1 | import { ICustomer } from "./ICustomer"; 2 | 3 | export abstract class CustomerBase implements ICustomer { 4 | name = "Customer Base"; 5 | numberOfYearsCustomer = 0; 6 | discountPercent() { 7 | return .01 * this.numberOfYearsCustomer; 8 | } 9 | } 10 | 11 | 12 | -------------------------------------------------------------------------------- /SourceCode_Chapter07/src/TypeScriptSamples/src/CustomerBronze.ts: -------------------------------------------------------------------------------- 1 | import { CustomerBase } from "./CustomerBase"; 2 | 3 | export class CustomerBronze extends CustomerBase { 4 | name = "Bronze Customer"; 5 | numberOfYearsCustomer = 5; 6 | } 7 | -------------------------------------------------------------------------------- /SourceCode_Chapter07/src/TypeScriptSamples/src/CustomerGold.ts: -------------------------------------------------------------------------------- 1 | import { CustomerBase } from "./CustomerBase"; 2 | 3 | export class CustomerGold extends CustomerBase { 4 | name = "Gold Customer"; 5 | numberOfYearsCustomer = 15; 6 | discountPercent() { 7 | return .20; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SourceCode_Chapter07/src/TypeScriptSamples/src/CustomerSilver.ts: -------------------------------------------------------------------------------- 1 | import { CustomerBase } from "./CustomerBase"; 2 | 3 | export class CustomerSilver extends CustomerBase { 4 | name = "Silver Customer"; 5 | numberOfYearsCustomer = 10; 6 | } 7 | -------------------------------------------------------------------------------- /SourceCode_Chapter07/src/TypeScriptSamples/src/ICustomer.ts: -------------------------------------------------------------------------------- 1 |  export interface ICustomer { 2 | name: string; 3 | numberOfYearsCustomer: number; 4 | discountPercent(): number; 5 | } -------------------------------------------------------------------------------- /SourceCode_Chapter07/src/TypeScriptSamples/src/IProduct.ts: -------------------------------------------------------------------------------- 1 | import { ICustomer } from "./ICustomer"; 2 | 3 | export interface IProduct { 4 | name: string; 5 | currentPrice(customer: ICustomer); 6 | } 7 | -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part1/src/SpyStore.Angular2/scripts/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from "@angular/core"; 2 | 3 | @Component({ 4 | selector: "spystore-app", 5 | templateUrl: "/app/app.html", 6 | }) 7 | export class AppComponent { 8 | 9 | constructor() { 10 | } 11 | } -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part1/src/SpyStore.Angular2/scripts/boot.ts: -------------------------------------------------------------------------------- 1 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 2 | import { AppModule } from './app.module'; 3 | 4 | const platform = platformBrowserDynamic(); 5 | platform.bootstrapModule(AppModule); -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part1/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part1/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part1/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part1/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part1/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part1/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part1/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part1/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part1/src/SpyStore.Angular2/wwwroot/images/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part1/src/SpyStore.Angular2/wwwroot/images/bg.jpg -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part1/src/SpyStore.Angular2/wwwroot/images/jumbo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part1/src/SpyStore.Angular2/wwwroot/images/jumbo.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part1/src/SpyStore.Angular2/wwwroot/images/octocat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part1/src/SpyStore.Angular2/wwwroot/images/octocat.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part1/src/SpyStore.Angular2/wwwroot/images/product-image-lg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part1/src/SpyStore.Angular2/wwwroot/images/product-image-lg.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part1/src/SpyStore.Angular2/wwwroot/images/product-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part1/src/SpyStore.Angular2/wwwroot/images/product-image.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part1/src/SpyStore.Angular2/wwwroot/images/product-image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part1/src/SpyStore.Angular2/wwwroot/images/product-image2.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part1/src/SpyStore.Angular2/wwwroot/images/product-thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part1/src/SpyStore.Angular2/wwwroot/images/product-thumb.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part1/src/SpyStore.Angular2/wwwroot/images/store-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part1/src/SpyStore.Angular2/wwwroot/images/store-logo.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/scripts/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from "@angular/core"; 2 | 3 | @Component({ 4 | selector: "spystore-app", 5 | templateUrl: "/app/app.html", 6 | }) 7 | export class AppComponent { 8 | 9 | constructor() { 10 | } 11 | } -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/scripts/app.config.ts: -------------------------------------------------------------------------------- 1 | import { OpaqueToken } from '@angular/core'; 2 | 3 | export interface AppConfig { 4 | apiEndpoint: string; 5 | } 6 | export let APP_CONFIG = new OpaqueToken('AppConfig'); 7 | export const SPYSTORE_CONFIG: AppConfig = { 8 | apiEndpoint: 'http://localhost:40001/api/' 9 | }; -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/scripts/boot.ts: -------------------------------------------------------------------------------- 1 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 2 | import { AppModule } from './app.module'; 3 | 4 | const platform = platformBrowserDynamic(); 5 | platform.bootstrapModule(AppModule); -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/wwwroot/images/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/wwwroot/images/bg.jpg -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/wwwroot/images/jumbo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/wwwroot/images/jumbo.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/wwwroot/images/octocat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/wwwroot/images/octocat.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/wwwroot/images/product-image-lg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/wwwroot/images/product-image-lg.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/wwwroot/images/product-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/wwwroot/images/product-image.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/wwwroot/images/product-image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/wwwroot/images/product-image2.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/wwwroot/images/product-thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/wwwroot/images/product-thumb.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/wwwroot/images/store-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/wwwroot/images/store-logo.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/wwwroot/js/app/app.config.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var core_1 = require("@angular/core"); 3 | exports.APP_CONFIG = new core_1.OpaqueToken('AppConfig'); 4 | exports.SPYSTORE_CONFIG = { 5 | apiEndpoint: 'http://localhost:40001/api/' 6 | }; 7 | //# sourceMappingURL=app.config.js.map -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/wwwroot/js/app/app.config.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"app.config.js","sourceRoot":"","sources":["../../../scripts/app.config.ts"],"names":[],"mappings":";AAAA,sCAA4C;AAKjC,QAAA,UAAU,GAAG,IAAI,kBAAW,CAAC,WAAW,CAAC,CAAC;AACxC,QAAA,eAAe,GAAc;IACtC,WAAW,EAAE,6BAA6B;CAC7C,CAAC"} -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part2/src/SpyStore.Angular2/wwwroot/js/app/boot.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"boot.js","sourceRoot":"","sources":["../../../scripts/boot.ts"],"names":[],"mappings":";AAAA,8EAA2E;AAC3E,2CAAyC;AAEzC,IAAM,QAAQ,GAAG,iDAAsB,EAAE,CAAC;AAC1C,QAAQ,CAAC,eAAe,CAAC,sBAAS,CAAC,CAAC"} -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part3/src/SpyStore.Angular2/scripts/app.config.ts: -------------------------------------------------------------------------------- 1 | import { OpaqueToken } from '@angular/core'; 2 | 3 | export interface AppConfig { 4 | apiEndpoint: string; 5 | } 6 | export let APP_CONFIG = new OpaqueToken('AppConfig'); 7 | export const SPYSTORE_CONFIG: AppConfig = { 8 | apiEndpoint: 'http://localhost:40001/api/' 9 | }; -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part3/src/SpyStore.Angular2/scripts/boot.ts: -------------------------------------------------------------------------------- 1 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 2 | import { AppModule } from './app.module'; 3 | 4 | const platform = platformBrowserDynamic(); 5 | platform.bootstrapModule(AppModule); -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part3/src/SpyStore.Angular2/wwwroot/app/components/categoryLinks.html: -------------------------------------------------------------------------------- 1 | 
  • 2 | {{category.CategoryName}} 3 |
  • -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part3/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part3/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part3/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part3/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part3/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part3/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part3/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part3/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part3/src/SpyStore.Angular2/wwwroot/images/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part3/src/SpyStore.Angular2/wwwroot/images/bg.jpg -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part3/src/SpyStore.Angular2/wwwroot/images/jumbo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part3/src/SpyStore.Angular2/wwwroot/images/jumbo.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part3/src/SpyStore.Angular2/wwwroot/images/octocat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part3/src/SpyStore.Angular2/wwwroot/images/octocat.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part3/src/SpyStore.Angular2/wwwroot/images/product-image-lg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part3/src/SpyStore.Angular2/wwwroot/images/product-image-lg.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part3/src/SpyStore.Angular2/wwwroot/images/product-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part3/src/SpyStore.Angular2/wwwroot/images/product-image.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part3/src/SpyStore.Angular2/wwwroot/images/product-image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part3/src/SpyStore.Angular2/wwwroot/images/product-image2.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part3/src/SpyStore.Angular2/wwwroot/images/product-thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part3/src/SpyStore.Angular2/wwwroot/images/product-thumb.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/End-Part3/src/SpyStore.Angular2/wwwroot/images/store-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/End-Part3/src/SpyStore.Angular2/wwwroot/images/store-logo.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/SpyStore.Service.Combined/global.json: -------------------------------------------------------------------------------- 1 | { 2 | "sdk": { 3 | "version": "1.1.7" 4 | } 5 | } -------------------------------------------------------------------------------- /SourceCode_Chapter08/SpyStore.Service.Combined/src/SpyStore.DAL/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | class Program 4 | { 5 | static void Main(string[] args) 6 | { 7 | } 8 | } -------------------------------------------------------------------------------- /SourceCode_Chapter08/SpyStore.Service.Combined/src/SpyStore.DAL/Repos/Interfaces/ICustomerRepo.cs: -------------------------------------------------------------------------------- 1 | using SpyStore.DAL.Repos.Base; 2 | using SpyStore.Models.Entities; 3 | 4 | namespace SpyStore.DAL.Repos.Interfaces 5 | { 6 | public interface ICustomerRepo :IRepo 7 | { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SourceCode_Chapter08/SpyStore.Service.Combined/src/SpyStore.Service/run_development.cmd: -------------------------------------------------------------------------------- 1 | set aspnetcore_environment=development 2 | dotnet restore 3 | dotnet build 4 | dotnet run 5 | -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part2/src/SpyStore.Angular2/scripts/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from "@angular/core"; 2 | 3 | @Component({ 4 | selector: "spystore-app", 5 | templateUrl: "/app/app.html", 6 | }) 7 | export class AppComponent { 8 | 9 | constructor() { 10 | } 11 | } -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part2/src/SpyStore.Angular2/scripts/boot.ts: -------------------------------------------------------------------------------- 1 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 2 | import { AppModule } from './app.module'; 3 | 4 | const platform = platformBrowserDynamic(); 5 | platform.bootstrapModule(AppModule); -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part2/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/Start-Part2/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part2/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/Start-Part2/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part2/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/Start-Part2/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part2/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/Start-Part2/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part2/src/SpyStore.Angular2/wwwroot/images/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/Start-Part2/src/SpyStore.Angular2/wwwroot/images/bg.jpg -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part2/src/SpyStore.Angular2/wwwroot/images/jumbo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/Start-Part2/src/SpyStore.Angular2/wwwroot/images/jumbo.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part2/src/SpyStore.Angular2/wwwroot/images/octocat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/Start-Part2/src/SpyStore.Angular2/wwwroot/images/octocat.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part2/src/SpyStore.Angular2/wwwroot/images/product-image-lg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/Start-Part2/src/SpyStore.Angular2/wwwroot/images/product-image-lg.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part2/src/SpyStore.Angular2/wwwroot/images/product-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/Start-Part2/src/SpyStore.Angular2/wwwroot/images/product-image.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part2/src/SpyStore.Angular2/wwwroot/images/product-image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/Start-Part2/src/SpyStore.Angular2/wwwroot/images/product-image2.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part2/src/SpyStore.Angular2/wwwroot/images/product-thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/Start-Part2/src/SpyStore.Angular2/wwwroot/images/product-thumb.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part2/src/SpyStore.Angular2/wwwroot/images/store-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/Start-Part2/src/SpyStore.Angular2/wwwroot/images/store-logo.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part3/src/SpyStore.Angular2/scripts/app.config.ts: -------------------------------------------------------------------------------- 1 | import { OpaqueToken } from '@angular/core'; 2 | 3 | export interface AppConfig { 4 | apiEndpoint: string; 5 | } 6 | export let APP_CONFIG = new OpaqueToken('AppConfig'); 7 | export const SPYSTORE_CONFIG: AppConfig = { 8 | apiEndpoint: 'http://localhost:40001/api/' 9 | }; -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part3/src/SpyStore.Angular2/scripts/boot.ts: -------------------------------------------------------------------------------- 1 | /// 2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 3 | import { AppModule } from './app.module'; 4 | 5 | const platform = platformBrowserDynamic(); 6 | platform.bootstrapModule(AppModule); -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part3/src/SpyStore.Angular2/typings.json: -------------------------------------------------------------------------------- 1 | { 2 | "globalDependencies": { 3 | "core-js": "registry:dt/core-js#0.0.0+20160725163759", 4 | "node": "registry:dt/node#6.0.0+20160909174046" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part3/src/SpyStore.Angular2/wwwroot/app/components/categoryLinks.html: -------------------------------------------------------------------------------- 1 | 
  • 2 | {{category.CategoryName}} 3 |
  • -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part3/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/Start-Part3/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part3/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/Start-Part3/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part3/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/Start-Part3/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part3/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/Start-Part3/src/SpyStore.Angular2/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part3/src/SpyStore.Angular2/wwwroot/images/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/Start-Part3/src/SpyStore.Angular2/wwwroot/images/bg.jpg -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part3/src/SpyStore.Angular2/wwwroot/images/jumbo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/Start-Part3/src/SpyStore.Angular2/wwwroot/images/jumbo.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part3/src/SpyStore.Angular2/wwwroot/images/octocat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/Start-Part3/src/SpyStore.Angular2/wwwroot/images/octocat.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part3/src/SpyStore.Angular2/wwwroot/images/product-image-lg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/Start-Part3/src/SpyStore.Angular2/wwwroot/images/product-image-lg.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part3/src/SpyStore.Angular2/wwwroot/images/product-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/Start-Part3/src/SpyStore.Angular2/wwwroot/images/product-image.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part3/src/SpyStore.Angular2/wwwroot/images/product-image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/Start-Part3/src/SpyStore.Angular2/wwwroot/images/product-image2.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part3/src/SpyStore.Angular2/wwwroot/images/product-thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/Start-Part3/src/SpyStore.Angular2/wwwroot/images/product-thumb.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/Start-Part3/src/SpyStore.Angular2/wwwroot/images/store-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter08/Start-Part3/src/SpyStore.Angular2/wwwroot/images/store-logo.png -------------------------------------------------------------------------------- /SourceCode_Chapter08/run_development.cmd: -------------------------------------------------------------------------------- 1 | set aspnetcore_environment=development 2 | cd .\SpyStore.Service\src\SpyStore.Service.Combined 3 | dotnet restore 4 | dotnet build 5 | dotnet run 6 | pause 7 | -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/src/app/models/baseModel.ts: -------------------------------------------------------------------------------- 1 | 2 | export class BaseModel { 3 | Id: number; 4 | TimeStamp: any; 5 | } -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/src/app/models/category.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by kvgros on 1/21/2017. 3 | */ 4 | import { BaseModel } from "./baseModel"; 5 | import { Product } from "./product"; 6 | 7 | export class Category extends BaseModel { 8 | CategoryName: string; 9 | Products: Product[]; 10 | } 11 | -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/src/app/services/baseService.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | export class BaseService { 4 | 5 | getRootUrl() { 6 | return "http://localhost:40001/api"; 7 | } 8 | } -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/src/app/services/logging.service.ts: -------------------------------------------------------------------------------- 1 |  2 | export class LoggingService { 3 | 4 | 5 | logError(err) { 6 | console.error(err); 7 | } 8 | 9 | logMessage(msg) { 10 | console.log(msg); 11 | } 12 | 13 | warn(msg) { 14 | console.warn(msg); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/src/css/fonts/bootstrap/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/src/css/fonts/bootstrap/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/src/css/fonts/bootstrap/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/src/css/fonts/bootstrap/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/src/css/fonts/bootstrap/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/src/css/fonts/bootstrap/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/src/css/fonts/bootstrap/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/src/css/fonts/bootstrap/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/src/images/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/src/images/bg.jpg -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/src/images/jumbo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/src/images/jumbo.png -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/src/images/octocat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/src/images/octocat.png -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/src/images/product-image-lg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/src/images/product-image-lg.png -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/src/images/product-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/src/images/product-image.png -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/src/images/product-image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/src/images/product-image2.png -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/src/images/product-thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/src/images/product-thumb.png -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/src/images/store-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/src/images/store-logo.png -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Final/src/SpyStore.React/webpack.config.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./config/webpack.dev'); 2 | 3 | -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Initial/runtimeconfig.template.json: -------------------------------------------------------------------------------- 1 | { 2 | "configProperties": { 3 | "System.GC.Server": true 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Initial/src/app/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | import * as ReactDOM from "react-dom"; 3 | 4 | ReactDOM.render(( 5 |
    Hello World
    6 | ), document.getElementById('app')); 7 | -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Initial/src/css/fonts/bootstrap/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Initial/src/css/fonts/bootstrap/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Initial/src/css/fonts/bootstrap/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Initial/src/css/fonts/bootstrap/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Initial/src/css/fonts/bootstrap/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Initial/src/css/fonts/bootstrap/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Initial/src/css/fonts/bootstrap/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Initial/src/css/fonts/bootstrap/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Initial/src/images/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Initial/src/images/bg.jpg -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Initial/src/images/jumbo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Initial/src/images/jumbo.png -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Initial/src/images/octocat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Initial/src/images/octocat.png -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Initial/src/images/product-image-lg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Initial/src/images/product-image-lg.png -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Initial/src/images/product-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Initial/src/images/product-image.png -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Initial/src/images/product-image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Initial/src/images/product-image2.png -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Initial/src/images/product-thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Initial/src/images/product-thumb.png -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Initial/src/images/store-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Initial/src/images/store-logo.png -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Initial/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Initial/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Initial/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Initial/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Initial/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Initial/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Initial/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Initial/wwwroot/css/fonts/bootstrap/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Initial/wwwroot/images/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Initial/wwwroot/images/bg.jpg -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Initial/wwwroot/images/jumbo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Initial/wwwroot/images/jumbo.png -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Initial/wwwroot/images/octocat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Initial/wwwroot/images/octocat.png -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Initial/wwwroot/images/product-image-lg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Initial/wwwroot/images/product-image-lg.png -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Initial/wwwroot/images/product-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Initial/wwwroot/images/product-image.png -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Initial/wwwroot/images/product-image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Initial/wwwroot/images/product-image2.png -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Initial/wwwroot/images/product-thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Initial/wwwroot/images/product-thumb.png -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.React.Initial/wwwroot/images/store-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SourceCode_Chapter09/SpyStore.React.Initial/wwwroot/images/store-logo.png -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.Service.Combined/global.json: -------------------------------------------------------------------------------- 1 | { 2 | "sdk": { 3 | "version": "1.1.7" 4 | } 5 | } -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.Service.Combined/src/SpyStore.DAL/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | class Program 4 | { 5 | static void Main(string[] args) 6 | { 7 | } 8 | } -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.Service.Combined/src/SpyStore.DAL/Repos/Interfaces/ICustomerRepo.cs: -------------------------------------------------------------------------------- 1 | using SpyStore.DAL.Repos.Base; 2 | using SpyStore.Models.Entities; 3 | 4 | namespace SpyStore.DAL.Repos.Interfaces 5 | { 6 | public interface ICustomerRepo :IRepo 7 | { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.Service.Combined/src/SpyStore.Service/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "IncludeScopes": false, 4 | "LogLevel": { 5 | "Default": "Debug", 6 | "System": "Information", 7 | "Microsoft": "Information" 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.Service.Combined/src/SpyStore.Service/run_development.cmd: -------------------------------------------------------------------------------- 1 | set aspnetcore_environment=development 2 | dotnet restore 3 | dotnet build 4 | dotnet run 5 | -------------------------------------------------------------------------------- /SourceCode_Chapter09/SpyStore.Service.Combined/src/SpyStore.Service/runtimeconfig.template.json: -------------------------------------------------------------------------------- 1 | { 2 | "configProperties": { 3 | "System.GC.Server": true 4 | } 5 | } -------------------------------------------------------------------------------- /SpyStore.backup: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Apress/building-web-apps-w-vs2017/d85d3fda348fa192b7186923f627de5df3662227/SpyStore.backup --------------------------------------------------------------------------------