diff --git a/.gitignore b/.gitignore index 5fe84841d7..f55554ad15 100644 --- a/.gitignore +++ b/.gitignore @@ -34,8 +34,6 @@ App_Data/ bower_components node_modules *.sln.ide -*/*.Spa/public/* -*/*.Spa/wwwroot/lib *.ng.ts *.sln.ide project.lock.json diff --git a/MusicStore.sln b/MusicStore.sln index 9c77dcf1c4..2c4d82c56d 100644 --- a/MusicStore.sln +++ b/MusicStore.sln @@ -1,33 +1,26 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 14 -VisualStudioVersion = 14.0.22803.0 +VisualStudioVersion = 14.0.23107.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{44621553-AA7D-4893-8834-79582A7D8348}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{7D749BDA-4638-4517-B66A-D40DEDEEB141}" ProjectSection(SolutionItems) = preProject global.json = global.json + NuGet.config = NuGet.config EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{B7B176B6-8D4D-4EF1-BBD2-DDA650C78FFF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MvcMusicStore", "src\MvcMusicStore\MvcMusicStore.csproj", "{25CE8290-EF24-4818-B009-68DC903163D3}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MvcMusicStore.Spa", "src\MvcMusicStore.Spa\MvcMusicStore.Spa.csproj", "{408AC102-7FB1-4ADD-A16A-9AACBAFFC2F7}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{363D2681-31A6-48C9-90BB-9ACFF4A41F06}" EndProject Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "E2ETests", "test\E2ETests\E2ETests.xproj", "{A319ACCE-060B-4385-9534-9F2202F6180E}" EndProject Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "MusicStore", "src\MusicStore\MusicStore.xproj", "{3CFBED5D-2ED8-49DB-96FB-BDAA748DC5A0}" EndProject -Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "MusicStore.Spa", "src\MusicStore.Spa\MusicStore.Spa.xproj", "{93891170-A8D5-46FD-A291-40F90CF258C2}" -EndProject Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "MusicStore.Test", "test\MusicStore.Test\MusicStore.Test.xproj", "{CA663205-77DE-4E55-B300-85594181B5A9}" EndProject -Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "MusicStore.Spa.Test", "test\MusicStore.Spa.Test\MusicStore.Spa.Test.xproj", "{9D3326C4-1F12-4526-9F25-712A1463B3FA}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -38,26 +31,6 @@ Global Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {25CE8290-EF24-4818-B009-68DC903163D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {25CE8290-EF24-4818-B009-68DC903163D3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {25CE8290-EF24-4818-B009-68DC903163D3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {25CE8290-EF24-4818-B009-68DC903163D3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {25CE8290-EF24-4818-B009-68DC903163D3}.Debug|x86.ActiveCfg = Debug|Any CPU - {25CE8290-EF24-4818-B009-68DC903163D3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {25CE8290-EF24-4818-B009-68DC903163D3}.Release|Any CPU.Build.0 = Release|Any CPU - {25CE8290-EF24-4818-B009-68DC903163D3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {25CE8290-EF24-4818-B009-68DC903163D3}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {25CE8290-EF24-4818-B009-68DC903163D3}.Release|x86.ActiveCfg = Release|Any CPU - {408AC102-7FB1-4ADD-A16A-9AACBAFFC2F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {408AC102-7FB1-4ADD-A16A-9AACBAFFC2F7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {408AC102-7FB1-4ADD-A16A-9AACBAFFC2F7}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {408AC102-7FB1-4ADD-A16A-9AACBAFFC2F7}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {408AC102-7FB1-4ADD-A16A-9AACBAFFC2F7}.Debug|x86.ActiveCfg = Debug|Any CPU - {408AC102-7FB1-4ADD-A16A-9AACBAFFC2F7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {408AC102-7FB1-4ADD-A16A-9AACBAFFC2F7}.Release|Any CPU.Build.0 = Release|Any CPU - {408AC102-7FB1-4ADD-A16A-9AACBAFFC2F7}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {408AC102-7FB1-4ADD-A16A-9AACBAFFC2F7}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {408AC102-7FB1-4ADD-A16A-9AACBAFFC2F7}.Release|x86.ActiveCfg = Release|Any CPU {A319ACCE-060B-4385-9534-9F2202F6180E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A319ACCE-060B-4385-9534-9F2202F6180E}.Debug|Any CPU.Build.0 = Debug|Any CPU {A319ACCE-060B-4385-9534-9F2202F6180E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -78,16 +51,6 @@ Global {3CFBED5D-2ED8-49DB-96FB-BDAA748DC5A0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {3CFBED5D-2ED8-49DB-96FB-BDAA748DC5A0}.Release|Mixed Platforms.Build.0 = Release|Any CPU {3CFBED5D-2ED8-49DB-96FB-BDAA748DC5A0}.Release|x86.ActiveCfg = Release|Any CPU - {93891170-A8D5-46FD-A291-40F90CF258C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {93891170-A8D5-46FD-A291-40F90CF258C2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {93891170-A8D5-46FD-A291-40F90CF258C2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {93891170-A8D5-46FD-A291-40F90CF258C2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {93891170-A8D5-46FD-A291-40F90CF258C2}.Debug|x86.ActiveCfg = Debug|Any CPU - {93891170-A8D5-46FD-A291-40F90CF258C2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {93891170-A8D5-46FD-A291-40F90CF258C2}.Release|Any CPU.Build.0 = Release|Any CPU - {93891170-A8D5-46FD-A291-40F90CF258C2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {93891170-A8D5-46FD-A291-40F90CF258C2}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {93891170-A8D5-46FD-A291-40F90CF258C2}.Release|x86.ActiveCfg = Release|Any CPU {CA663205-77DE-4E55-B300-85594181B5A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CA663205-77DE-4E55-B300-85594181B5A9}.Debug|Any CPU.Build.0 = Debug|Any CPU {CA663205-77DE-4E55-B300-85594181B5A9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -100,29 +63,13 @@ Global {CA663205-77DE-4E55-B300-85594181B5A9}.Release|Mixed Platforms.Build.0 = Release|Any CPU {CA663205-77DE-4E55-B300-85594181B5A9}.Release|x86.ActiveCfg = Release|Any CPU {CA663205-77DE-4E55-B300-85594181B5A9}.Release|x86.Build.0 = Release|Any CPU - {9D3326C4-1F12-4526-9F25-712A1463B3FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9D3326C4-1F12-4526-9F25-712A1463B3FA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9D3326C4-1F12-4526-9F25-712A1463B3FA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {9D3326C4-1F12-4526-9F25-712A1463B3FA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {9D3326C4-1F12-4526-9F25-712A1463B3FA}.Debug|x86.ActiveCfg = Debug|Any CPU - {9D3326C4-1F12-4526-9F25-712A1463B3FA}.Debug|x86.Build.0 = Debug|Any CPU - {9D3326C4-1F12-4526-9F25-712A1463B3FA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9D3326C4-1F12-4526-9F25-712A1463B3FA}.Release|Any CPU.Build.0 = Release|Any CPU - {9D3326C4-1F12-4526-9F25-712A1463B3FA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {9D3326C4-1F12-4526-9F25-712A1463B3FA}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {9D3326C4-1F12-4526-9F25-712A1463B3FA}.Release|x86.ActiveCfg = Release|Any CPU - {9D3326C4-1F12-4526-9F25-712A1463B3FA}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {25CE8290-EF24-4818-B009-68DC903163D3} = {B7B176B6-8D4D-4EF1-BBD2-DDA650C78FFF} - {408AC102-7FB1-4ADD-A16A-9AACBAFFC2F7} = {B7B176B6-8D4D-4EF1-BBD2-DDA650C78FFF} {A319ACCE-060B-4385-9534-9F2202F6180E} = {363D2681-31A6-48C9-90BB-9ACFF4A41F06} {3CFBED5D-2ED8-49DB-96FB-BDAA748DC5A0} = {B7B176B6-8D4D-4EF1-BBD2-DDA650C78FFF} - {93891170-A8D5-46FD-A291-40F90CF258C2} = {B7B176B6-8D4D-4EF1-BBD2-DDA650C78FFF} {CA663205-77DE-4E55-B300-85594181B5A9} = {363D2681-31A6-48C9-90BB-9ACFF4A41F06} - {9D3326C4-1F12-4526-9F25-712A1463B3FA} = {363D2681-31A6-48C9-90BB-9ACFF4A41F06} EndGlobalSection EndGlobal diff --git a/src/MusicStore.Spa/Apis/AlbumsApiController.cs b/src/MusicStore.Spa/Apis/AlbumsApiController.cs deleted file mode 100644 index cf5ff5cdbf..0000000000 --- a/src/MusicStore.Spa/Apis/AlbumsApiController.cs +++ /dev/null @@ -1,211 +0,0 @@ -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNet.Authorization; -using Microsoft.AspNet.Mvc; -using Microsoft.Data.Entity; -using AutoMapper; -using MusicStore.Infrastructure; -using MusicStore.Models; -using MusicStore.Spa.Infrastructure; - -namespace MusicStore.Apis -{ - [Route("api/albums")] - public class AlbumsApiController : Controller - { - private readonly MusicStoreContext _storeContext; - - public AlbumsApiController(MusicStoreContext storeContext) - { - _storeContext = storeContext; - } - - [HttpGet] - [NoCache] - public async Task Paged(int page = 1, int pageSize = 50, string sortBy = null) - { - await _storeContext.Genres.LoadAsync(); - await _storeContext.Artists.LoadAsync(); - - var albums = await _storeContext.Albums - // .Include(a => a.Genre) - // .Include(a => a.Artist) - .ToPagedListAsync(page, pageSize, sortBy, - a => a.Title, // sortExpression - SortDirection.Ascending, // defaultSortDirection - a => Mapper.Map(a, new AlbumResultDto())); // selector - - return Json(albums); - } - - [HttpGet("all")] - [NoCache] - public async Task All() - { - var albums = await _storeContext.Albums - //.Include(a => a.Genre) - //.Include(a => a.Artist) - .OrderBy(a => a.Title) - .ToListAsync(); - - return Json(albums.Select(a => Mapper.Map(a, new AlbumResultDto()))); - } - - [HttpGet("mostPopular")] - [NoCache] - public async Task MostPopular(int count = 6) - { - count = count > 0 && count < 20 ? count : 6; - var albums = await _storeContext.Albums - .OrderByDescending(a => a.OrderDetails.Count()) - .Take(count) - .ToListAsync(); - - // TODO: Move the .Select() to end of albums query when EF supports it - return Json(albums.Select(a => Mapper.Map(a, new AlbumResultDto()))); - } - - [HttpGet("{albumId:int}")] - [NoCache] - public async Task Details(int albumId) - { - await _storeContext.Genres.LoadAsync(); - await _storeContext.Artists.LoadAsync(); - - var album = await _storeContext.Albums - //.Include(a => a.Artist) - //.Include(a => a.Genre) - .Where(a => a.AlbumId == albumId) - .SingleOrDefaultAsync(); - - var albumResult = Mapper.Map(album, new AlbumResultDto()); - - // TODO: Get these from the related entities when EF supports that again, i.e. when .Include() works - //album.Artist.Name = (await _storeContext.Artists.SingleOrDefaultAsync(a => a.ArtistId == album.ArtistId)).Name; - //album.Genre.Name = (await _storeContext.Genres.SingleOrDefaultAsync(g => g.GenreId == album.GenreId)).Name; - - // TODO: Add null checking and return 404 in that case - - return Json(albumResult); - } - - [HttpPost] - [Authorize("app-ManageStore")] - public async Task CreateAlbum([FromBody]AlbumChangeDto album) - { - if (!ModelState.IsValid) - { - // Return the model errors - return new ApiResult(ModelState); - } - - // Save the changes to the DB - var dbAlbum = new Album(); - _storeContext.Albums.Add(Mapper.Map(album, dbAlbum)); - await _storeContext.SaveChangesAsync(); - - // TODO: Handle missing record, key violations, concurrency issues, etc. - - return new ApiResult - { - Data = dbAlbum.AlbumId, - Message = "Album created successfully." - }; - } - - [HttpPut("{albumId:int}/update")] - [Authorize("app-ManageStore")] - public async Task UpdateAlbum(int albumId, [FromBody]AlbumChangeDto album) - { - if (!ModelState.IsValid) - { - // Return the model errors - return new ApiResult(ModelState); - } - - var dbAlbum = await _storeContext.Albums.SingleOrDefaultAsync(a => a.AlbumId == albumId); - - if (dbAlbum == null) - { - return new ApiResult - { - StatusCode = 404, - Message = string.Format("The album with ID {0} was not found.", albumId) - }; - } - - // Save the changes to the DB - Mapper.Map(album, dbAlbum); - await _storeContext.SaveChangesAsync(); - - // TODO: Handle missing record, key violations, concurrency issues, etc. - - return new ApiResult - { - Message = "Album updated successfully." - }; - } - - [HttpDelete("{albumId:int}")] - [Authorize("app-ManageStore")] - public async Task DeleteAlbum(int albumId) - { - var album = await _storeContext.Albums.SingleOrDefaultAsync(a => a.AlbumId == albumId); - //var album = _storeContext.Albums.SingleOrDefault(a => a.AlbumId == albumId); - - if (album != null) - { - _storeContext.Albums.Remove(album); - - // Save the changes to the DB - await _storeContext.SaveChangesAsync(); - - // TODO: Handle missing record, key violations, concurrency issues, etc. - } - - return new ApiResult - { - Message = "Album deleted successfully." - }; - } - } - - [ModelMetadataType(typeof(Album))] - public class AlbumChangeDto - { - public int GenreId { get; set; } - - public int ArtistId { get; set; } - - public string Title { get; set; } - - public decimal Price { get; set; } - - public string AlbumArtUrl { get; set; } - } - - public class AlbumResultDto : AlbumChangeDto - { - public AlbumResultDto() - { - Artist = new ArtistResultDto(); - Genre = new GenreResultDto(); - } - - public int AlbumId { get; set; } - - public ArtistResultDto Artist { get; private set; } - - public GenreResultDto Genre { get; private set; } - } - - public class ArtistResultDto - { - public string Name { get; set; } - } - - public class GenreResultDto - { - public string Name { get; set; } - } -} diff --git a/src/MusicStore.Spa/Apis/ArtistsApiController.cs b/src/MusicStore.Spa/Apis/ArtistsApiController.cs deleted file mode 100644 index 0efe110919..0000000000 --- a/src/MusicStore.Spa/Apis/ArtistsApiController.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNet.Mvc; -using Microsoft.Data.Entity; -using MusicStore.Models; - -namespace MusicStore.Apis -{ - [Route("api/artists")] - public class ArtistsApiController : Controller - { - private readonly MusicStoreContext _storeContext; - - public ArtistsApiController(MusicStoreContext storeContext) - { - _storeContext = storeContext; - } - - [HttpGet("lookup")] - public async Task Lookup() - { - var artists = await _storeContext.Artists - .OrderBy(a => a.Name) - .ToListAsync(); - - return Json(artists); - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Apis/GenresApiController.cs b/src/MusicStore.Spa/Apis/GenresApiController.cs deleted file mode 100644 index 253f539952..0000000000 --- a/src/MusicStore.Spa/Apis/GenresApiController.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNet.Mvc; -using Microsoft.Data.Entity; -using MusicStore.Models; -using MusicStore.Spa.Infrastructure; - -namespace MusicStore.Apis -{ - [Route("api/genres")] - public class GenresApiController : Controller - { - private readonly MusicStoreContext _storeContext; - - public GenresApiController(MusicStoreContext storeContext) - { - _storeContext = storeContext; - } - - [HttpGet] - public async Task GenreList() - { - var genres = await _storeContext.Genres - //.Include(g => g.Albums) - .OrderBy(g => g.Name) - .ToListAsync(); - - return Json(genres); - } - - [HttpGet("lookup")] - public async Task Lookup() - { - var genres = await _storeContext.Genres - .Select(g => new { g.GenreId, g.Name }) - .ToListAsync(); - - return Json(genres); - } - - [HttpGet("menu")] - public async Task GenreMenuList(int count = 9) - { - count = count > 0 && count < 20 ? count : 9; - - var genres = await _storeContext.Genres - .OrderByDescending(g => - g.Albums.Sum(a => - a.OrderDetails.Sum(od => od.Quantity))) - .Take(count) - .ToListAsync(); - - return Json(genres); - } - - [HttpGet("{genreId:int}/albums")] - [NoCache] - public async Task GenreAlbums(int genreId) - { - var albums = await _storeContext.Albums - .Where(a => a.GenreId == genreId) - //.Include(a => a.Genre) - //.Include(a => a.Artist) - //.OrderBy(a => a.Genre.Name) - .ToListAsync(); - - return Json(albums); - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Config.json b/src/MusicStore.Spa/Config.json deleted file mode 100644 index f8e16de469..0000000000 --- a/src/MusicStore.Spa/Config.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "DefaultAdminUsername": "Administrator", - "DefaultAdminPassword": "YouShouldChangeThisPassword1!", - "Data": { - "DefaultConnection": { - "Connectionstring": "Server=(localdb)\\MSSQLLocalDB;Database=MusicStoreSpa;Trusted_Connection=True;" - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Controllers/AccountController.cs b/src/MusicStore.Spa/Controllers/AccountController.cs deleted file mode 100644 index 03e7d9ad28..0000000000 --- a/src/MusicStore.Spa/Controllers/AccountController.cs +++ /dev/null @@ -1,167 +0,0 @@ -using System.Security.Claims; -using System.Threading.Tasks; -using Microsoft.AspNet.Authorization; -using Microsoft.AspNet.Identity; -using Microsoft.AspNet.Mvc; -using MusicStore.Models; - -namespace MusicStore.Controllers -{ - [Route("account")] - [Authorize] - public class AccountController : Controller - { - [FromServices] - public UserManager UserManager { get; set; } - - [FromServices] - public SignInManager SignInManager { get; set; } - - [AllowAnonymous] - //Bug: https://github.com/aspnet/WebFx/issues/339 - [HttpGet("login")] - public IActionResult Login(string returnUrl) - { - ViewBag.ReturnUrl = returnUrl; - return View(); - } - - [HttpPost("login")] - [AllowAnonymous] - [ValidateAntiForgeryToken] - public async Task Login(LoginViewModel model, string returnUrl) - { - if (ModelState.IsValid == true) - { - var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, lockoutOnFailure: false); - if (result.Succeeded) - { - return RedirectToLocal(returnUrl); - } - if (result.IsLockedOut) - { - ModelState.AddModelError("", "User is locked out, try again later."); - } - else - { - ModelState.AddModelError("", "Invalid username or password."); - return View(model); - } - } - - // If we got this far, something failed, redisplay form - return View(model); - } - - [AllowAnonymous] - //Bug: https://github.com/aspnet/WebFx/issues/339 - [HttpGet("register")] - public IActionResult Register() - { - return View(); - } - - [HttpPost("register")] - [AllowAnonymous] - [ValidateAntiForgeryToken] - public async Task Register(RegisterViewModel model) - { - //Bug: https://github.com/aspnet/WebFx/issues/247 - //if (ModelState.IsValid == true) - { - var user = new ApplicationUser { UserName = model.UserName }; - var result = await UserManager.CreateAsync(user, model.Password); - if (result.Succeeded) - { - await SignInManager.SignInAsync(user, isPersistent: false); - return RedirectToAction("Home", "Page"); - } - else - { - AddErrors(result); - } - } - - // If we got this far, something failed, redisplay form - return View(model); - } - - [HttpGet("manage")] - public IActionResult Manage(ManageMessageId? message = null) - { - ViewBag.StatusMessage = - message == ManageMessageId.ChangePasswordSuccess ? "Your password has been changed." - : message == ManageMessageId.Error ? "An error has occurred." - : ""; - ViewBag.ReturnUrl = Url.Action("Manage"); - return View(); - } - - [HttpPost("manage")] - [ValidateAntiForgeryToken] - public async Task Manage(ManageUserViewModel model) - { - ViewBag.ReturnUrl = Url.Action("Manage"); - //Bug: https://github.com/aspnet/WebFx/issues/247 - //if (ModelState.IsValid == true) - { - var user = await GetCurrentUserAsync(); - var result = await UserManager.ChangePasswordAsync(user, model.OldPassword, model.NewPassword); - if (result.Succeeded) - { - return RedirectToAction("Manage", new { Message = ManageMessageId.ChangePasswordSuccess }); - } - else - { - AddErrors(result); - } - } - - // If we got this far, something failed, redisplay form - return View(model); - } - - [HttpPost("logoff")] - [ValidateAntiForgeryToken] - public async Task LogOff() - { - await SignInManager.SignOutAsync(); - return RedirectToAction("Home", "Page"); - } - - #region Helpers - - private void AddErrors(IdentityResult result) - { - foreach (var error in result.Errors) - { - ModelState.AddModelError("", error.Description); - } - } - - private async Task GetCurrentUserAsync() - { - return await UserManager.FindByIdAsync(Context.User.GetUserId()); - } - - public enum ManageMessageId - { - ChangePasswordSuccess, - Error - } - - private IActionResult RedirectToLocal(string returnUrl) - { - if (Url.IsLocalUrl(returnUrl)) - { - return Redirect(returnUrl); - } - else - { - return RedirectToAction("Index", "Home"); - } - } - - #endregion - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Controllers/PageController.cs b/src/MusicStore.Spa/Controllers/PageController.cs deleted file mode 100644 index e4a12d0303..0000000000 --- a/src/MusicStore.Spa/Controllers/PageController.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Microsoft.AspNet.Authorization; -using Microsoft.AspNet.Mvc; - -namespace MusicStore.Spa.Controllers -{ - [Route("/")] - public class PageController : Controller - { - [HttpGet] - public IActionResult Home() - { - return View("/Pages/Home.cshtml"); - } - - [HttpGet("admin")] - [Authorize("app-ManageStore")] - public IActionResult Admin() - { - return View("/Pages/Admin.cshtml"); - } - } -} diff --git a/src/MusicStore.Spa/Controllers/TemplateController.cs b/src/MusicStore.Spa/Controllers/TemplateController.cs deleted file mode 100644 index efa3f013d1..0000000000 --- a/src/MusicStore.Spa/Controllers/TemplateController.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System; -using Microsoft.AspNet.Mvc; - -namespace MusicStore.Controllers -{ - public class TemplateController : Controller - { - private static readonly string _templateBasePath = "/ng-apps/"; - - // GET: Template - [Route("ng-apps/{*path}")] - public ActionResult Index(string path) - { - if (!IsValidPath(path)) - { - return HttpNotFound(); - } - - return View(_templateBasePath + path); - } - - private static bool IsValidPath(string path) - { - if (string.IsNullOrWhiteSpace(path)) - { - return false; - } - - var last = '\0'; - for (var i = 0; i < path.Length; i++) - { - var c = path[i]; - if (Char.IsLetterOrDigit(c) - || (c == '/' && last != '/') - || c == '-' - || c == '_' - || (c == '.' && last != '.')) - { - last = c; - continue; - } - return false; - } - - return path.EndsWith(".cshtml", StringComparison.OrdinalIgnoreCase); - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Gruntfile.js b/src/MusicStore.Spa/Gruntfile.js deleted file mode 100644 index 0861116b65..0000000000 --- a/src/MusicStore.Spa/Gruntfile.js +++ /dev/null @@ -1,27 +0,0 @@ -/// -// node-debug (Resolve-Path ~\AppData\Roaming\npm\node_modules\grunt-cli\bin\grunt) task:target - -module.exports = function (grunt) { - - grunt.loadNpmTasks("grunt-bower-task"); - - grunt.initConfig({ - staticFilePattern: "**/*.{js,css,map,html,htm,ico,jpg,jpeg,png,gif,eot,svg,ttf,woff}", - bower: { - install: { - options: { - targetDir: "wwwroot/lib", - layout: "byComponent", - cleanTargetDir: true - } - } - } - }); - - grunt.registerTask("ts", ["tslint", "tsng", "typescript:dev", "clean:tsng"]); - grunt.registerTask("dev", ["clean:assets", "copy", "bower:install", "less:dev", "ts"]); - grunt.registerTask("release", ["clean", "copy", "uglify", "less:release", "typescript:release"]); - grunt.registerTask("default", ["dev"]); - - require("grunt-ide-support")(grunt); -}; \ No newline at end of file diff --git a/src/MusicStore.Spa/Helpers/AngularExtensions.cs b/src/MusicStore.Spa/Helpers/AngularExtensions.cs deleted file mode 100644 index 7930babb59..0000000000 --- a/src/MusicStore.Spa/Helpers/AngularExtensions.cs +++ /dev/null @@ -1,328 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Linq.Expressions; -using Microsoft.AspNet.Routing; -using Microsoft.AspNet.Html.Abstractions; -using Microsoft.AspNet.Mvc.ViewFeatures; - -namespace Microsoft.AspNet.Mvc.Rendering -{ - public static class AngularExtensions - { - public static IHtmlContent ngPasswordFor(this IHtmlHelper html, Expression> expression) - { - return html.ngPasswordFor(expression, null); - } - - public static IHtmlContent ngPasswordFor(this IHtmlHelper html, Expression> expression, object htmlAttributes) - { - return html.ngPasswordFor(expression, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)); - } - - public static IHtmlContent ngPasswordFor(this IHtmlHelper html, Expression> expression, IDictionary htmlAttributes) - { - return html.ngTextBoxFor(expression, MergeAttributes( - new RouteValueDictionary { { "type", "password" } }, - htmlAttributes)); - } - - public static IHtmlContent ngTextBoxFor(this IHtmlHelper html, Expression> expression) - { - return html.ngTextBoxFor(expression, new RouteValueDictionary()); - } - - public static IHtmlContent ngTextBoxFor(this IHtmlHelper html, Expression> expression, object htmlAttributes) - { - return html.ngTextBoxFor(expression, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)); - } - - public static IHtmlContent ngTextBoxFor(this IHtmlHelper html, Expression> expression, IDictionary htmlAttributes) - { - var expressionText = ExpressionHelper.GetExpressionText(expression); - var modelExplorer = ExpressionMetadataProvider.FromLambdaExpression(expression, html.ViewData, html.MetadataProvider); - var ngAttributes = new Dictionary(); - - ngAttributes["type"] = "text"; - - // Angular binding to client-side model (scope). This is required for Angular validation to work. - var valueFieldName = html.ViewData.TemplateInfo.GetFullHtmlFieldName(expressionText); - ngAttributes["name"] = valueFieldName; - ngAttributes["ng-model"] = valueFieldName; - - // Set input type - if (string.Equals(modelExplorer.Metadata.DataTypeName, Enum.GetName(typeof(DataType), DataType.EmailAddress), StringComparison.OrdinalIgnoreCase)) - { - ngAttributes["type"] = "email"; - } - else if (modelExplorer.ModelType == typeof(Uri) - || string.Equals(modelExplorer.Metadata.DataTypeName, Enum.GetName(typeof(DataType), DataType.Url), StringComparison.OrdinalIgnoreCase) - || string.Equals(modelExplorer.Metadata.DataTypeName, Enum.GetName(typeof(DataType), DataType.ImageUrl), StringComparison.OrdinalIgnoreCase)) - { - ngAttributes["type"] = "url"; - } - else if (IsNumberType(modelExplorer.ModelType)) - { - ngAttributes["type"] = "number"; - if (IsIntegerType(modelExplorer.ModelType)) - { - ngAttributes["step"] = "1"; - } - else - { - ngAttributes["step"] = "any"; - } - } - else if (modelExplorer.ModelType == typeof(DateTime)) - { - if (string.Equals(modelExplorer.Metadata.DataTypeName, Enum.GetName(typeof(DataType), DataType.Date), StringComparison.OrdinalIgnoreCase)) - { - ngAttributes["type"] = "date"; - } - else if (string.Equals(modelExplorer.Metadata.DataTypeName, Enum.GetName(typeof(DataType), DataType.DateTime), StringComparison.OrdinalIgnoreCase)) - { - ngAttributes["type"] = "datetime"; - } - } - - // Add attributes for Angular validation - var clientValidators = html.GetClientValidationRules(modelExplorer, null); - - foreach (var validator in clientValidators) - { - if (string.Equals(validator.ValidationType, "length")) - { - if (validator.ValidationParameters.ContainsKey("min")) - { - ngAttributes["ng-minlength"] = validator.ValidationParameters["min"]; - } - if (validator.ValidationParameters.ContainsKey("max")) - { - ngAttributes["ng-maxlength"] = validator.ValidationParameters["max"]; - } - } - else if (string.Equals(validator.ValidationType, "required")) - { - ngAttributes["required"] = null; - } - else if (string.Equals(validator.ValidationType, "range")) - { - if (validator.ValidationParameters.ContainsKey("min")) - { - ngAttributes["min"] = validator.ValidationParameters["min"]; - } - if (validator.ValidationParameters.ContainsKey("max")) - { - ngAttributes["max"] = validator.ValidationParameters["max"]; - } - } - else if (string.Equals(validator.ValidationType, "equalto")) - { - // CompareAttribute validator - var fieldToCompare = validator.ValidationParameters["other"]; // e.g. *.NewPassword - var other = validator.ValidationParameters["other"].ToString(); - if (other.StartsWith("*.")) - { - // The built-in CompareAttributeAdapter prepends *. to the property name so we strip it off here - other = other.Substring("*.".Length); - } - ngAttributes["app-equal-to"] = other; - // TODO: Actually write the Angular directive to use this - } - // TODO: Regex, Phone(regex) - } - - // Render! - if (modelExplorer.Model != null) - { - ngAttributes.Add("value", modelExplorer.Model.ToString()); - } - - var tag = new TagBuilder("input"); - tag.MergeAttributes(MergeAttributes(ngAttributes, htmlAttributes)); - tag.TagRenderMode = TagRenderMode.SelfClosing; - return tag; - } - - private static bool IsNumberType(Type type) - { - if (type == typeof(Int16) || - type == typeof(Int32) || - type == typeof(Int64) || - type == typeof(UInt16) || - type == typeof(UInt32) || - type == typeof(UInt64) || - type == typeof(Decimal) || - type == typeof(Double) || - type == typeof(Single)) - { - return true; - } - return false; - } - - //private static bool IsIntegerType(Type type) - //{ - // switch (Type.GetTypeCode(type)) - // { - // case TypeCode.Int16: - // case TypeCode.Int32: - // case TypeCode.Int64: - // case TypeCode.UInt16: - // case TypeCode.UInt32: - // case TypeCode.UInt64: - // return true; - // } - // return false; - //} - - private static bool IsIntegerType(Type type) - { - if (type == typeof(Int16) || - type == typeof(Int32) || - type == typeof(Int64) || - type == typeof(UInt16) || - type == typeof(UInt32) || - type == typeof(UInt64)) - { - return true; - } - return false; - } - - public static IHtmlContent ngDropDownListFor(this IHtmlHelper html, Expression> propertyExpression, Expression> displayExpression, string source, string nullOption, object htmlAttributes) - { - return ngDropDownListFor(html, propertyExpression, displayExpression, source, nullOption, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)); - } - - public static IHtmlContent ngDropDownListFor(this IHtmlHelper html, Expression> propertyExpression, Expression> displayExpression, string source, string nullOption, IDictionary htmlAttributes) - { - var propertyExpressionText = ExpressionHelper.GetExpressionText(propertyExpression); - var displayExpressionText = ExpressionHelper.GetExpressionText(displayExpression); - var metadata = ExpressionMetadataProvider.FromLambdaExpression(propertyExpression, html.ViewData, html.MetadataProvider); - var tag = new TagBuilder("select"); - - var valueFieldName = html.ViewData.TemplateInfo.GetFullHtmlFieldName(propertyExpressionText); - var displayFieldName = html.ViewData.TemplateInfo.GetFullHtmlFieldName(displayExpressionText); - - var displayFieldNameParts = displayFieldName.Split('.'); - displayFieldName = displayFieldNameParts[displayFieldNameParts.Length - 1]; - - tag.Attributes["id"] = html.Id(propertyExpressionText); - tag.Attributes["name"] = valueFieldName; - tag.Attributes["ng-model"] = valueFieldName; - - var ngOptionsFormat = "a.{0} as a.{1} for a in {2}"; - var ngOptions = string.Format(ngOptionsFormat, valueFieldName, displayFieldName, source); - tag.Attributes["ng-options"] = ngOptions; - - if (nullOption != null) - { - var nullOptionTag = new TagBuilder("option"); - nullOptionTag.Attributes["value"] = string.Empty; - nullOptionTag.InnerHtml.SetContent(nullOption); - tag.InnerHtml.SetContent(nullOptionTag); - } - - var clientValidators = html.GetClientValidationRules(metadata, null); - var isRequired = clientValidators.SingleOrDefault(cv => string.Equals(cv.ValidationType, "required", StringComparison.OrdinalIgnoreCase)) != null; - if (isRequired) - { - tag.Attributes["required"] = string.Empty; - } - - tag.MergeAttributes(htmlAttributes, replaceExisting: true); - - return tag; - } - - public static IHtmlContent ngValidationMessageFor(this IHtmlHelper htmlHelper, Expression> expression, string formName) - { - return ngValidationMessageFor(htmlHelper, expression, formName, ((IDictionary)new RouteValueDictionary())); - } - - public static IHtmlContent ngValidationMessageFor(this IHtmlHelper htmlHelper, Expression> expression, string formName, object htmlAttributes) - { - return ngValidationMessageFor(htmlHelper, expression, formName, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)); - } - - public static IHtmlContent ngValidationMessageFor(this IHtmlHelper html, Expression> expression, string formName, IDictionary htmlAttributes) - { - var expressionText = ExpressionHelper.GetExpressionText(expression); - var metadata = ExpressionMetadataProvider.FromLambdaExpression(expression, html.ViewData, html.MetadataProvider); - var modelName = html.ViewData.TemplateInfo.GetFullHtmlFieldName(expressionText); - - //var clientValidators = metadata.GetValidators(html.ViewContext.Controller.ControllerContext) - // .SelectMany(v => v.GetClientValidationRules()); - var clientValidators = html.GetClientValidationRules(metadata, null); - var tags = new List(); - - // Get validation messages from data type - // TODO: How to get validation messages from model metadata? All methods/properties required seem protected internal :( - - foreach (var validator in clientValidators) - { - var tag = new TagBuilder("span"); - tag.Attributes["ng-cloak"] = string.Empty; - - if (string.Equals(validator.ValidationType, "required")) - { - tag.Attributes["ng-show"] = string.Format("({0}.submitAttempted || {0}.{1}.$dirty || {0}.{1}.visited) && {0}.{1}.$error.{2}", formName, modelName, "required"); - tag.InnerHtml.SetContent(validator.ErrorMessage); - } - else if (string.Equals(validator.ValidationType, "length")) - { - tag.Attributes["ng-show"] = string.Format("({0}.submitAttempted || {0}.{1}.$dirty || {0}.{1}.visited) && ({0}.{1}.$error.minlength || {0}.{1}.$error.maxlength)", - formName, modelName); - tag.InnerHtml.SetContent(validator.ErrorMessage); - } - else if (string.Equals(validator.ValidationType, "range")) - { - tag.Attributes["ng-show"] = string.Format("({0}.submitAttempted || {0}.{1}.$dirty || {0}.{1}.visited) && ({0}.{1}.$error.min || {0}.{1}.$error.max)", - formName, modelName); - tag.InnerHtml.SetContent(validator.ErrorMessage); - } - // TODO: Regex, equalto, remote - else - { - continue; - } - - tag.MergeAttributes(htmlAttributes); - tags.Add(tag); - } - - return new HtmlString(String.Concat(tags.Select(t => t.ToString()))); - } - - public static string ngValidationClassFor(this IHtmlHelper html, Expression> expression, string formName, string className) - { - var expressionText = ExpressionHelper.GetExpressionText(expression); - var metadata = ExpressionMetadataProvider.FromLambdaExpression(expression, html.ViewData, html.MetadataProvider); - var modelName = html.ViewData.TemplateInfo.GetFullHtmlFieldName(expressionText); - var ngClassFormat = "{{ '{0}' : ({1}.submitAttempted || {1}.{2}.$dirty || {1}.{2}.visited) && {1}.{2}.$invalid }}"; - - return string.Format(ngClassFormat, className, formName, modelName); - } - - private static IDictionary MergeAttributes(IDictionary source, IDictionary target) - { - if (target == null) - { - return source; - } - - // Keys in target win over keys in source - foreach (var pair in source) - { - if (!target.ContainsKey(pair.Key)) - { - target[pair.Key] = pair.Value; - } - } - - return target; - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Helpers/JsonExtensions.cs b/src/MusicStore.Spa/Helpers/JsonExtensions.cs deleted file mode 100644 index af50d5aa38..0000000000 --- a/src/MusicStore.Spa/Helpers/JsonExtensions.cs +++ /dev/null @@ -1,69 +0,0 @@ -using System.Collections.Generic; -using Microsoft.AspNet.Routing; -using Newtonsoft.Json; -using Microsoft.AspNet.Html.Abstractions; -using Microsoft.AspNet.Mvc.ViewFeatures; - -namespace Microsoft.AspNet.Mvc.Rendering -{ - public static class JsonExtensions - { - public static IHtmlContent Json(this IHtmlHelper helper, TData data) - { - return Json(helper, data, new RouteValueDictionary()); - } - - public static IHtmlContent Json(this IHtmlHelper helper, TData data, object htmlAttributes) - { - return Json(helper, data, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)); - } - - public static IHtmlContent Json(this IHtmlHelper helper, TData data, IDictionary htmlAttributes) - { - var builder = new TagBuilder("script"); - builder.Attributes["type"] = "application/json"; - builder.MergeAttributes(htmlAttributes); - - var innerContent = data is JsonString ? data.ToString() : JsonConvert.SerializeObject(data); - innerContent.Replace("<", "\u003C").Replace(">", "\u003E"); - builder.InnerHtml.SetContentEncoded(innerContent); - - return builder; - } - - public static IHtmlContent InlineData(this IHtmlHelper helper, string actionName, string controllerName) - { - //var result = helper.Action(actionName, controllerName); - //var urlHelper = new UrlHelper(helper.ViewContext.RequestContext); - //var url = urlHelper.Action(actionName, controllerName); - - //return helper.Json(new JsonString(result), new RouteValueDictionary { - // { "app-inline-data", null }, - // { "for", url } - //}); - - return helper.Json(new JsonString(new object()), null); - } - } - - public class JsonString - { - public JsonString(object value) - : this(value.ToString()) - { - - } - - public JsonString(string value) - { - Value = value; - } - - public string Value { get; private set; } - - public override string ToString() - { - return Value; - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Infrastructure/ApiResult.cs b/src/MusicStore.Spa/Infrastructure/ApiResult.cs deleted file mode 100644 index b747932533..0000000000 --- a/src/MusicStore.Spa/Infrastructure/ApiResult.cs +++ /dev/null @@ -1,62 +0,0 @@ - -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNet.Mvc.ModelBinding; -using Newtonsoft.Json; - -namespace Microsoft.AspNet.Mvc -{ - public class ApiResult : ActionResult - { - public ApiResult(ModelStateDictionary modelState) - : this() - { - if (modelState.Any(m => m.Value.Errors.Count > 0)) - { - StatusCode = 400; - Message = "The model submitted was invalid. Please correct the specified errors and try again."; - ModelErrors = modelState - .SelectMany(m => m.Value.Errors.Select(me => new ModelError - { - FieldName = m.Key, - ErrorMessage = me.ErrorMessage - })); - } - } - - public ApiResult() - { - - } - - [JsonIgnore] - public int? StatusCode { get; set; } - - public string Message { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] - public object Data { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] - public IEnumerable ModelErrors { get; set; } - - public override Task ExecuteResultAsync(ActionContext context) - { - if (StatusCode.HasValue) - { - context.HttpContext.Response.StatusCode = StatusCode.Value; - } - - var json = new JsonResult(this); - return json.ExecuteResultAsync(context); - } - - public class ModelError - { - public string FieldName { get; set; } - - public string ErrorMessage { get; set; } - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Infrastructure/ForcedModelError.cs b/src/MusicStore.Spa/Infrastructure/ForcedModelError.cs deleted file mode 100644 index 0722550aa4..0000000000 --- a/src/MusicStore.Spa/Infrastructure/ForcedModelError.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using System.Globalization; - -namespace System.ComponentModel.DataAnnotations -{ - [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false)] - public class ForcedModelErrorAttribute : ValidationAttribute - { - public ForcedModelErrorAttribute(object failValue) - { - FailValue = failValue; - } - - public object FailValue { get; private set; } - - public override string FormatErrorMessage(string name) - { - return string.Format(CultureInfo.CurrentCulture, "The field {0} was forced to fail model validation.", name); - } - - public override bool IsValid(object value) - { -#if DEBUG - return value == null || !value.Equals(FailValue); -#else - return true; -#endif - } - } -} diff --git a/src/MusicStore.Spa/Infrastructure/NoCacheAttribute.cs b/src/MusicStore.Spa/Infrastructure/NoCacheAttribute.cs deleted file mode 100644 index 1e6aebb03b..0000000000 --- a/src/MusicStore.Spa/Infrastructure/NoCacheAttribute.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using Microsoft.AspNet.Mvc.Filters; - -namespace MusicStore.Spa.Infrastructure -{ - [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] - public sealed class NoCacheAttribute : ActionFilterAttribute - { - public override void OnResultExecuting(ResultExecutingContext context) - { - context.HttpContext.Response.Headers["Cache-Control"] = "no-cache, no-store, max-age=0"; - context.HttpContext.Response.Headers["Pragma"] = "no-cache"; - context.HttpContext.Response.Headers["Expires"] = "-1"; - - base.OnResultExecuting(context); - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Infrastructure/NotNullAttribute.cs b/src/MusicStore.Spa/Infrastructure/NotNullAttribute.cs deleted file mode 100644 index beb3b8e12d..0000000000 --- a/src/MusicStore.Spa/Infrastructure/NotNullAttribute.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System; - -namespace MusicStore.Spa.Infrastructure -{ - [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false)] - internal sealed class NotNullAttribute : Attribute - { - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Infrastructure/PagedList.cs b/src/MusicStore.Spa/Infrastructure/PagedList.cs deleted file mode 100644 index 8c6651e8d7..0000000000 --- a/src/MusicStore.Spa/Infrastructure/PagedList.cs +++ /dev/null @@ -1,150 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using System.Threading.Tasks; -using Microsoft.Data.Entity; - -namespace MusicStore.Infrastructure -{ - public interface IPagedList - { - IEnumerable Data { get; } - - int Page { get; } - - int PageSize { get; } - - int TotalCount { get; } - } - - internal class PagedList : IPagedList - { - public PagedList(IEnumerable data, int page, int pageSize, int totalCount) - { - Data = data; - Page = page; - PageSize = pageSize; - TotalCount = totalCount; - } - - public IEnumerable Data { get; private set; } - - public int Page { get; private set; } - - public int PageSize { get; private set; } - - public int TotalCount{get; private set; } - } - - public static class PagedListExtensions - { - public static IPagedList ToPagedList(this IQueryable query, int page, int pageSize) - { - if (query == null) - { - throw new ArgumentNullException("query"); - } - - var pagingConfig = new PagingConfig(page, pageSize); - var skipCount = ValidatePagePropertiesAndGetSkipCount(pagingConfig); - - var data = query - .Skip(skipCount) - .Take(pagingConfig.PageSize) - .ToList(); - - if (skipCount > 0 && data.Count == 0) - { - // Requested page has no records, just return the first page - pagingConfig.Page = 1; - data = query - .Take(pagingConfig.PageSize) - .ToList(); - } - - return new PagedList(data, pagingConfig.Page, pagingConfig.PageSize, query.Count()); - } - - public static Task> ToPagedListAsync(this IQueryable query, int page, int pageSize, string sortExpression, Expression> defaultSortExpression, SortDirection defaultSortDirection = SortDirection.Ascending) - where TModel : class - { - return ToPagedListAsync(query, page, pageSize, sortExpression, defaultSortExpression, defaultSortDirection, null); - } - - public static async Task> ToPagedListAsync(this IQueryable query, int page, int pageSize, string sortExpression, Expression> defaultSortExpression, SortDirection defaultSortDirection, Func selector) - where TModel : class - where TResult : class - { - if (query == null) - { - throw new ArgumentNullException("query"); - } - - var pagingConfig = new PagingConfig(page, pageSize); - var skipCount = ValidatePagePropertiesAndGetSkipCount(pagingConfig); - var dataQuery = query; - - if (defaultSortExpression != null) - { - dataQuery = dataQuery - .SortBy(sortExpression, defaultSortExpression); - } - - var data = await dataQuery - .Skip(skipCount) - .Take(pagingConfig.PageSize) - .ToListAsync(); - - if (skipCount > 0 && data.Count == 0) - { - // Requested page has no records, just return the first page - pagingConfig.Page = 1; - data = await dataQuery - .Take(pagingConfig.PageSize) - .ToListAsync(); - } - - var count = await query.CountAsync(); - - var resultData = selector != null - ? data.Select(selector) - : data.Cast(); - - return new PagedList(resultData, pagingConfig.Page, pagingConfig.PageSize, count); - } - - private static int ValidatePagePropertiesAndGetSkipCount(PagingConfig pagingConfig) - { - if (pagingConfig.Page < 1) - { - pagingConfig.Page = 1; - } - - if (pagingConfig.PageSize < 10) - { - pagingConfig.PageSize = 10; - } - - if (pagingConfig.PageSize > 100) - { - pagingConfig.PageSize = 100; - } - - return pagingConfig.PageSize * (pagingConfig.Page - 1); - } - - internal class PagingConfig - { - public PagingConfig(int page, int pageSize) - { - Page = page; - PageSize = pageSize; - } - - public int Page { get; set; } - - public int PageSize { get; set; } - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Infrastructure/SmartJsonResult.cs b/src/MusicStore.Spa/Infrastructure/SmartJsonResult.cs deleted file mode 100644 index f57e92debb..0000000000 --- a/src/MusicStore.Spa/Infrastructure/SmartJsonResult.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using System.Threading.Tasks; -using Microsoft.AspNet.Http; -using Newtonsoft.Json; - -namespace Microsoft.AspNet.Mvc -{ - public class SmartJsonResult : ActionResult - { - public SmartJsonResult() : base() - { - - } - - public JsonSerializerSettings Settings { get; set; } - - public object Data { get; set; } - - public int? StatusCode { get; set; } - - public override Task ExecuteResultAsync(ActionContext context) - { - //if (!context.IsChildAction) - //{ - // if (StatusCode.HasValue) - // { - // context.HttpContext.Response.StatusCode = StatusCode.Value; - // } - // context.HttpContext.Response.ContentType = "application/json"; - // context.HttpContext.Response.ContentEncoding = Encoding.UTF8; - //} - - return context.HttpContext.Response.WriteAsync(JsonConvert.SerializeObject(Data, Settings ?? new JsonSerializerSettings())); - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Infrastructure/SortDirection.cs b/src/MusicStore.Spa/Infrastructure/SortDirection.cs deleted file mode 100644 index 020b180053..0000000000 --- a/src/MusicStore.Spa/Infrastructure/SortDirection.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; - -namespace MusicStore.Infrastructure -{ - public enum SortDirection - { - Ascending, - Descending - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Infrastructure/SortExpression.cs b/src/MusicStore.Spa/Infrastructure/SortExpression.cs deleted file mode 100644 index b146d49532..0000000000 --- a/src/MusicStore.Spa/Infrastructure/SortExpression.cs +++ /dev/null @@ -1,85 +0,0 @@ -using System; -using System.Linq; -using System.Linq.Expressions; -using Microsoft.AspNet.Mvc.ViewFeatures; - -namespace MusicStore.Infrastructure -{ - public static class SortExpression - { - private const string SORT_DIRECTION_DESC = " DESC"; - - public static IQueryable SortBy(this IQueryable query, string sortExpression, Expression> defaultSortExpression, SortDirection defaultSortDirection = SortDirection.Ascending) where TModel : class - { - return SortBy(query, sortExpression ?? Create(defaultSortExpression, defaultSortDirection)); - } - - public static string Create(Expression> expression, SortDirection sortDirection = SortDirection.Ascending) where TModel : class - { - var expressionText = ExpressionHelper.GetExpressionText(expression); - // TODO: Validate the expression depth, etc. - - var sortExpression = expressionText; - - if (sortDirection == SortDirection.Descending) - { - sortExpression += SORT_DIRECTION_DESC; - } - - return sortExpression; - } - - public static IQueryable SortBy(this IQueryable source, string sortExpression) where T : class - { - if (source == null) - { - throw new ArgumentNullException("source"); - } - - if (String.IsNullOrWhiteSpace(sortExpression)) - { - return source; - } - - sortExpression = sortExpression.Trim(); - var isDescending = false; - - // DataSource control passes the sort parameter with a direction - // if the direction is descending - if (sortExpression.EndsWith(SORT_DIRECTION_DESC, StringComparison.OrdinalIgnoreCase)) - { - isDescending = true; - var descIndex = sortExpression.Length - SORT_DIRECTION_DESC.Length; - sortExpression = sortExpression.Substring(0, descIndex).Trim(); - } - - if (string.IsNullOrEmpty(sortExpression)) - { - return source; - } - - ParameterExpression parameter = Expression.Parameter(source.ElementType, String.Empty); - - // Build up the property expression, e.g.: (m => m.Foo.Bar) - var sortExpressionParts = sortExpression.Split('.'); - Expression propertyExpression = parameter; - foreach (var property in sortExpressionParts) - { - propertyExpression = Expression.Property(propertyExpression, property); - } - - LambdaExpression lambda = Expression.Lambda(propertyExpression, parameter); - - var methodName = (isDescending) ? "OrderByDescending" : "OrderBy"; - - Expression methodCallExpression = Expression.Call( - typeof(Queryable), - methodName, - new [] { source.ElementType, propertyExpression.Type }, - source.Expression, - Expression.Quote(lambda)); - - return (IQueryable)source.Provider.CreateQuery(methodCallExpression); - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/MessageServices.cs b/src/MusicStore.Spa/MessageServices.cs deleted file mode 100644 index f07d38abec..0000000000 --- a/src/MusicStore.Spa/MessageServices.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.Threading.Tasks; - -namespace MusicStore.Spa -{ - public static class MessageServices - { - public static Task SendEmailAsync(string email, string subject, string message) - { - // Plug in your email service - return Task.FromResult(0); - } - - public static Task SendSmsAsync(string number, string message) - { - // Plug in your sms service - return Task.FromResult(0); - } - - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Models/AccountViewModels.cs b/src/MusicStore.Spa/Models/AccountViewModels.cs deleted file mode 100644 index 657a4f011d..0000000000 --- a/src/MusicStore.Spa/Models/AccountViewModels.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace MusicStore.Models -{ - public class ExternalLoginConfirmationViewModel - { - [Required] - [Display(Name = "User name")] - public string UserName { get; set; } - } - - public class ManageUserViewModel - { - [Required] - [DataType(DataType.Password)] - [Display(Name = "Current password")] - public string OldPassword { get; set; } - - [Required] - [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] - [DataType(DataType.Password)] - [Display(Name = "New password")] - public string NewPassword { get; set; } - - [DataType(DataType.Password)] - [Display(Name = "Confirm new password")] - [Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")] - public string ConfirmPassword { get; set; } - } - - public class LoginViewModel - { - [Required] - [Display(Name = "User name")] - public string UserName { get; set; } - - [Required] - [DataType(DataType.Password)] - [Display(Name = "Password")] - public string Password { get; set; } - - [Display(Name = "Remember me?")] - public bool RememberMe { get; set; } - } - - public class RegisterViewModel - { - [Required] - [Display(Name = "User name")] - public string UserName { get; set; } - - [Required] - [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] - [DataType(DataType.Password)] - [Display(Name = "Password")] - public string Password { get; set; } - - [DataType(DataType.Password)] - [Display(Name = "Confirm password")] - [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] - public string ConfirmPassword { get; set; } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Models/Album.cs b/src/MusicStore.Spa/Models/Album.cs deleted file mode 100644 index 22cc69b4ad..0000000000 --- a/src/MusicStore.Spa/Models/Album.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; - -namespace MusicStore.Models -{ - public class Album - { - public Album() - { - // TODO: Temporary hack to populate the orderdetails until EF does this automatically. - OrderDetails = new List(); - } - - [ScaffoldColumn(false)] - public int AlbumId { get; set; } - - public int GenreId { get; set; } - - public int ArtistId { get; set; } - - [Required] - [StringLength(160, MinimumLength = 2)] - [ForcedModelError("fail")] - public string Title { get; set; } - - [Required] - [Range(0.01, 100.00)] - [DataType(DataType.Currency)] - public decimal Price { get; set; } - - [Display(Name = "Album Art URL")] - [StringLength(1024)] - public string AlbumArtUrl { get; set; } - - public virtual Genre Genre { get; set; } - - public virtual Artist Artist { get; set; } - - public virtual ICollection OrderDetails { get; set; } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Models/Artist.cs b/src/MusicStore.Spa/Models/Artist.cs deleted file mode 100644 index 43d677c437..0000000000 --- a/src/MusicStore.Spa/Models/Artist.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace MusicStore.Models -{ - public class Artist - { - public int ArtistId { get; set; } - - [Required] - public string Name { get; set; } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Models/CartItem.cs b/src/MusicStore.Spa/Models/CartItem.cs deleted file mode 100644 index 64550abf9a..0000000000 --- a/src/MusicStore.Spa/Models/CartItem.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.ComponentModel.DataAnnotations; - -namespace MusicStore.Models -{ - public class CartItem - { - [Key] - public int CartItemId { get; set; } - - [Required] - public string CartId { get; set; } - public int AlbumId { get; set; } - public int Count { get; set; } - - [DataType(DataType.DateTime)] - public DateTime DateCreated { get; set; } - - public virtual Album Album { get; set; } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Models/Genre.cs b/src/MusicStore.Spa/Models/Genre.cs deleted file mode 100644 index a7fdb34f41..0000000000 --- a/src/MusicStore.Spa/Models/Genre.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using Newtonsoft.Json; - -namespace MusicStore.Models -{ - public class Genre - { - public Genre() - { - Albums = new List(); - } - - public int GenreId { get; set; } - - [Required] - public string Name { get; set; } - - public string Description { get; set; } - - [JsonIgnore] - public virtual ICollection Albums { get; set; } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Models/MusicStoreContext.cs b/src/MusicStore.Spa/Models/MusicStoreContext.cs deleted file mode 100644 index d63ff692b5..0000000000 --- a/src/MusicStore.Spa/Models/MusicStoreContext.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using System.Linq; -using Microsoft.AspNet.Identity; -using Microsoft.AspNet.Identity.EntityFramework; -using Microsoft.Data.Entity; -using Microsoft.Data.Entity.Metadata; -using Microsoft.Framework.OptionsModel; - -namespace MusicStore.Models -{ - public class ApplicationUser : IdentityUser { } - - public class MusicStoreContext : IdentityDbContext - { - public MusicStoreContext() - { - } - - public DbSet Albums { get; set; } - public DbSet Artists { get; set; } - public DbSet Orders { get; set; } - public DbSet Genres { get; set; } - public DbSet CartItems { get; set; } - public DbSet OrderDetails { get; set; } - - protected override void OnModelCreating(ModelBuilder builder) - { - // Configure pluralization - builder.Entity().ToTable("Albums"); - builder.Entity().ToTable("Artists"); - builder.Entity().ToTable("Orders"); - builder.Entity().ToTable("Genres"); - builder.Entity().ToTable("CartItems"); - builder.Entity().ToTable("OrderDetails"); - - base.OnModelCreating(builder); - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Models/Order.cs b/src/MusicStore.Spa/Models/Order.cs deleted file mode 100644 index 0461dbce8a..0000000000 --- a/src/MusicStore.Spa/Models/Order.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; - -namespace MusicStore.Models -{ - //[Bind(Include = "FirstName,LastName,Address,City,State,PostalCode,Country,Phone,Email")] - public class Order - { - public Order() - { - OrderDetails = new List(); - } - - [ScaffoldColumn(false)] - public int OrderId { get; set; } - - [ScaffoldColumn(false)] - public DateTime OrderDate { get; set; } - - [Required] - [ScaffoldColumn(false)] - public string Username { get; set; } - - [Required] - [Display(Name = "First Name")] - [StringLength(160)] - public string FirstName { get; set; } - - [Required] - [Display(Name = "Last Name")] - [StringLength(160)] - public string LastName { get; set; } - - [Required] - [StringLength(70, MinimumLength = 3)] - public string Address { get; set; } - - [Required] - [StringLength(40)] - public string City { get; set; } - - [Required] - [StringLength(40)] - public string State { get; set; } - - [Required] - [Display(Name = "Postal Code")] - [StringLength(10, MinimumLength = 5)] - public string PostalCode { get; set; } - - [Required] - [StringLength(40)] - public string Country { get; set; } - - [Required] - [StringLength(24)] - [DataType(DataType.PhoneNumber)] - public string Phone { get; set; } - - [Required] - [Display(Name = "Email Address")] - [RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}", - ErrorMessage = "Email is not valid.")] - [DataType(DataType.EmailAddress)] - public string Email { get; set; } - - [ScaffoldColumn(false)] - public decimal Total { get; set; } - - public ICollection OrderDetails { get; set; } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Models/OrderDetail.cs b/src/MusicStore.Spa/Models/OrderDetail.cs deleted file mode 100644 index 29f87988df..0000000000 --- a/src/MusicStore.Spa/Models/OrderDetail.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace MusicStore.Models -{ - public class OrderDetail - { - public int OrderDetailId { get; set; } - public int OrderId { get; set; } - public int AlbumId { get; set; } - public int Quantity { get; set; } - public decimal UnitPrice { get; set; } - - public virtual Album Album { get; set; } - public virtual Order Order { get; set; } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Models/SampleData.cs b/src/MusicStore.Spa/Models/SampleData.cs deleted file mode 100644 index 653353d792..0000000000 --- a/src/MusicStore.Spa/Models/SampleData.cs +++ /dev/null @@ -1,939 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Security.Claims; -using System.Threading.Tasks; -using Microsoft.AspNet.Identity; -using Microsoft.AspNet.Identity.EntityFramework; -using Microsoft.Data.Entity; -using Microsoft.Data.Entity.Storage; -using Microsoft.Framework.DependencyInjection; -using Microsoft.Framework.OptionsModel; -using MusicStore.Spa; - -namespace MusicStore.Models -{ - public static class SampleData - { - const string imgUrl = "/images/placeholder.png"; - - public static async Task InitializeMusicStoreDatabaseAsync(IServiceProvider serviceProvider) - { - using (var db = serviceProvider.GetService()) - { - if (await db.Database.EnsureCreatedAsync()) - { - await InsertTestData(serviceProvider); - await CreateAdminUser(serviceProvider); - } - } - } - - private static async Task CreateAdminUser(IServiceProvider serviceProvider) - { - var settings = serviceProvider.GetService>().Value; - const string adminRole = "Administrator"; - - var userManager = serviceProvider.GetService>(); - var roleManager = serviceProvider.GetService>(); - - if (!await roleManager.RoleExistsAsync(adminRole)) - { - await roleManager.CreateAsync(new IdentityRole(adminRole)); - } - - var user = await userManager.FindByNameAsync(settings.DefaultAdminUsername); - if (user == null) - { - user = new ApplicationUser { UserName = settings.DefaultAdminUsername }; - await userManager.CreateAsync(user, settings.DefaultAdminPassword); - await userManager.AddToRoleAsync(user, adminRole); - await userManager.AddClaimAsync(user, new Claim("app-ManageStore", "Allowed")); - } - } - - private static async Task InsertTestData(IServiceProvider serviceProvider) - { - var albums = GetAlbums(imgUrl, Genres, Artists); - - await AddOrUpdateAsync(serviceProvider, g => g.GenreId, Genres.Select(genre => genre.Value)); - await AddOrUpdateAsync(serviceProvider, a => a.ArtistId, Artists.Select(artist => artist.Value)); - await AddOrUpdateAsync(serviceProvider, a => a.AlbumId, albums); - } - - // TODO [EF] This may be replaced by a first class mechanism in EF - private static async Task AddOrUpdateAsync( - IServiceProvider serviceProvider, - Func propertyToMatch, IEnumerable entities) - where TEntity : class - { - // Query in a separate context so that we can attach existing entities as modified - List existingData; - using (var db = serviceProvider.GetService()) - { - existingData = db.Set().ToList(); - } - - using (var db = serviceProvider.GetService()) - { - foreach (var item in entities) - { - db.Entry(item).State = existingData.Any(g => propertyToMatch(g).Equals(propertyToMatch(item))) - ? EntityState.Modified - : EntityState.Added; - } - - await db.SaveChangesAsync(); - } - } - - private static Album[] GetAlbums(string imgUrl, Dictionary genres, Dictionary artists) - { - var albums = new Album[] - { - new Album { Title = "The Best Of The Men At Work", Genre = genres["Pop"], Price = 8.99M, Artist = artists["Men At Work"], AlbumArtUrl = imgUrl }, - new Album { Title = "...And Justice For All", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Metallica"], AlbumArtUrl = imgUrl }, - new Album { Title = "עד גבול האור", Genre = genres["World"], Price = 8.99M, Artist = artists["אריק אינשטיין"], AlbumArtUrl = imgUrl }, - new Album { Title = "Black Light Syndrome", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Terry Bozzio, Tony Levin & Steve Stevens"], AlbumArtUrl = imgUrl }, - new Album { Title = "10,000 Days", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Tool"], AlbumArtUrl = imgUrl }, - new Album { Title = "11i", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Supreme Beings of Leisure"], AlbumArtUrl = imgUrl }, - new Album { Title = "1960", Genre = genres["Indie"], Price = 8.99M, Artist = artists["Soul-Junk"], AlbumArtUrl = imgUrl }, - new Album { Title = "4x4=12 ", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["deadmau5"], AlbumArtUrl = imgUrl }, - new Album { Title = "A Copland Celebration, Vol. I", Genre = genres["Classical"], Price = 8.99M, Artist = artists["London Symphony Orchestra"], AlbumArtUrl = imgUrl }, - new Album { Title = "A Lively Mind", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Paul Oakenfold"], AlbumArtUrl = imgUrl }, - new Album { Title = "A Matter of Life and Death", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Iron Maiden"], AlbumArtUrl = imgUrl }, - new Album { Title = "A Real Dead One", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Iron Maiden"], AlbumArtUrl = imgUrl }, - new Album { Title = "A Real Live One", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Iron Maiden"], AlbumArtUrl = imgUrl }, - new Album { Title = "A Rush of Blood to the Head", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Coldplay"], AlbumArtUrl = imgUrl }, - new Album { Title = "A Soprano Inspired", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Britten Sinfonia, Ivor Bolton & Lesley Garrett"], AlbumArtUrl = imgUrl }, - new Album { Title = "A Winter Symphony", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Sarah Brightman"], AlbumArtUrl = imgUrl }, - new Album { Title = "Abbey Road", Genre = genres["Rock"], Price = 8.99M, Artist = artists["The Beatles"], AlbumArtUrl = imgUrl }, - new Album { Title = "Ace Of Spades", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Motörhead"], AlbumArtUrl = imgUrl }, - new Album { Title = "Achtung Baby", Genre = genres["Rock"], Price = 8.99M, Artist = artists["U2"], AlbumArtUrl = imgUrl }, - new Album { Title = "Acústico MTV", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Os Paralamas Do Sucesso"], AlbumArtUrl = imgUrl }, - new Album { Title = "Adams, John: The Chairman Dances", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Edo de Waart & San Francisco Symphony"], AlbumArtUrl = imgUrl }, - new Album { Title = "Adrenaline", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Deftones"], AlbumArtUrl = imgUrl }, - new Album { Title = "Ænima", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Tool"], AlbumArtUrl = imgUrl }, - new Album { Title = "Afrociberdelia", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Chico Science & Nação Zumbi"], AlbumArtUrl = imgUrl }, - new Album { Title = "After the Goldrush", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Neil Young"], AlbumArtUrl = imgUrl }, - new Album { Title = "Airdrawn Dagger", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Sasha"], AlbumArtUrl = imgUrl }, - new Album { Title = "Album Title Goes Here", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["deadmau5"], AlbumArtUrl = imgUrl }, - new Album { Title = "Alcohol Fueled Brewtality Live! [Disc 1]", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Black Label Society"], AlbumArtUrl = imgUrl }, - new Album { Title = "Alcohol Fueled Brewtality Live! [Disc 2]", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Black Label Society"], AlbumArtUrl = imgUrl }, - new Album { Title = "Alive 2007", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Daft Punk"], AlbumArtUrl = imgUrl }, - new Album { Title = "All I Ask of You", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Sarah Brightman"], AlbumArtUrl = imgUrl }, - new Album { Title = "Amen (So Be It)", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Paddy Casey"], AlbumArtUrl = imgUrl }, - new Album { Title = "Animal Vehicle", Genre = genres["Pop"], Price = 8.99M, Artist = artists["The Axis of Awesome"], AlbumArtUrl = imgUrl }, - new Album { Title = "Ao Vivo [IMPORT]", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Zeca Pagodinho"], AlbumArtUrl = imgUrl }, - new Album { Title = "Apocalyptic Love", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Slash"], AlbumArtUrl = imgUrl }, - new Album { Title = "Appetite for Destruction", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Guns N' Roses"], AlbumArtUrl = imgUrl }, - new Album { Title = "Are You Experienced?", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Jimi Hendrix"], AlbumArtUrl = imgUrl }, - new Album { Title = "Arquivo II", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Os Paralamas Do Sucesso"], AlbumArtUrl = imgUrl }, - new Album { Title = "Arquivo Os Paralamas Do Sucesso", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Os Paralamas Do Sucesso"], AlbumArtUrl = imgUrl }, - new Album { Title = "A-Sides", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Soundgarden"], AlbumArtUrl = imgUrl }, - new Album { Title = "Audioslave", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Audioslave"], AlbumArtUrl = imgUrl }, - new Album { Title = "Automatic for the People", Genre = genres["Alternative"], Price = 8.99M, Artist = artists["R.E.M."], AlbumArtUrl = imgUrl }, - new Album { Title = "Axé Bahia 2001", Genre = genres["Pop"], Price = 8.99M, Artist = artists["Various Artists"], AlbumArtUrl = imgUrl }, - new Album { Title = "Babel", Genre = genres["Alternative"], Price = 8.99M, Artist = artists["Mumford & Sons"], AlbumArtUrl = imgUrl }, - new Album { Title = "Bach: Goldberg Variations", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Wilhelm Kempff"], AlbumArtUrl = imgUrl }, - new Album { Title = "Bach: The Brandenburg Concertos", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Orchestra of The Age of Enlightenment"], AlbumArtUrl = imgUrl }, - new Album { Title = "Bach: The Cello Suites", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Yo-Yo Ma"], AlbumArtUrl = imgUrl }, - new Album { Title = "Bach: Toccata & Fugue in D Minor", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Ton Koopman"], AlbumArtUrl = imgUrl }, - new Album { Title = "Bad Motorfinger", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Soundgarden"], AlbumArtUrl = imgUrl }, - new Album { Title = "Balls to the Wall", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Accept"], AlbumArtUrl = imgUrl }, - new Album { Title = "Banadeek Ta'ala", Genre = genres["World"], Price = 8.99M, Artist = artists["Amr Diab"], AlbumArtUrl = imgUrl }, - new Album { Title = "Barbie Girl", Genre = genres["Pop"], Price = 8.99M, Artist = artists["Aqua"], AlbumArtUrl = imgUrl }, - new Album { Title = "Bark at the Moon (Remastered)", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Ozzy Osbourne"], AlbumArtUrl = imgUrl }, - new Album { Title = "Bartok: Violin & Viola Concertos", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Yehudi Menuhin"], AlbumArtUrl = imgUrl }, - new Album { Title = "Barulhinho Bom", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Marisa Monte"], AlbumArtUrl = imgUrl }, - new Album { Title = "BBC Sessions [Disc 1] [Live]", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Led Zeppelin"], AlbumArtUrl = imgUrl }, - new Album { Title = "BBC Sessions [Disc 2] [Live]", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Led Zeppelin"], AlbumArtUrl = imgUrl }, - new Album { Title = "Be Here Now", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Oasis"], AlbumArtUrl = imgUrl }, - new Album { Title = "Bedrock 11 Compiled & Mixed", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["John Digweed"], AlbumArtUrl = imgUrl }, - new Album { Title = "Berlioz: Symphonie Fantastique", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Michael Tilson Thomas"], AlbumArtUrl = imgUrl }, - new Album { Title = "Beyond Good And Evil", Genre = genres["Rock"], Price = 8.99M, Artist = artists["The Cult"], AlbumArtUrl = imgUrl }, - new Album { Title = "Big Bad Wolf ", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Armand Van Helden"], AlbumArtUrl = imgUrl }, - new Album { Title = "Big Ones", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Aerosmith"], AlbumArtUrl = imgUrl }, - new Album { Title = "Black Album", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Metallica"], AlbumArtUrl = imgUrl }, - new Album { Title = "Black Sabbath Vol. 4 (Remaster)", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Black Sabbath"], AlbumArtUrl = imgUrl }, - new Album { Title = "Black Sabbath", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Black Sabbath"], AlbumArtUrl = imgUrl }, - new Album { Title = "Black", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Metallica"], AlbumArtUrl = imgUrl }, - new Album { Title = "Blackwater Park", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Opeth"], AlbumArtUrl = imgUrl }, - new Album { Title = "Blizzard of Ozz", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Ozzy Osbourne"], AlbumArtUrl = imgUrl }, - new Album { Title = "Blood", Genre = genres["Rock"], Price = 8.99M, Artist = artists["In This Moment"], AlbumArtUrl = imgUrl }, - new Album { Title = "Blue Moods", Genre = genres["Jazz"], Price = 8.99M, Artist = artists["Incognito"], AlbumArtUrl = imgUrl }, - new Album { Title = "Blue", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Weezer"], AlbumArtUrl = imgUrl }, - new Album { Title = "Bongo Fury", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Frank Zappa & Captain Beefheart"], AlbumArtUrl = imgUrl }, - new Album { Title = "Boys & Girls", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Alabama Shakes"], AlbumArtUrl = imgUrl }, - new Album { Title = "Brave New World", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Iron Maiden"], AlbumArtUrl = imgUrl }, - new Album { Title = "B-Sides 1980-1990", Genre = genres["Rock"], Price = 8.99M, Artist = artists["U2"], AlbumArtUrl = imgUrl }, - new Album { Title = "Bunkka", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Paul Oakenfold"], AlbumArtUrl = imgUrl }, - new Album { Title = "By The Way", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Red Hot Chili Peppers"], AlbumArtUrl = imgUrl }, - new Album { Title = "Cake: B-Sides and Rarities", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Cake"], AlbumArtUrl = imgUrl }, - new Album { Title = "Californication", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Red Hot Chili Peppers"], AlbumArtUrl = imgUrl }, - new Album { Title = "Carmina Burana", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Boston Symphony Orchestra & Seiji Ozawa"], AlbumArtUrl = imgUrl }, - new Album { Title = "Carried to Dust (Bonus Track Version)", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Calexico"], AlbumArtUrl = imgUrl }, - new Album { Title = "Carry On", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Chris Cornell"], AlbumArtUrl = imgUrl }, - new Album { Title = "Cássia Eller - Sem Limite [Disc 1]", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Cássia Eller"], AlbumArtUrl = imgUrl }, - new Album { Title = "Chemical Wedding", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Bruce Dickinson"], AlbumArtUrl = imgUrl }, - new Album { Title = "Chill: Brazil (Disc 1)", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Marcos Valle"], AlbumArtUrl = imgUrl }, - new Album { Title = "Chill: Brazil (Disc 2)", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Antônio Carlos Jobim"], AlbumArtUrl = imgUrl }, - new Album { Title = "Chocolate Starfish And The Hot Dog Flavored Water", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Limp Bizkit"], AlbumArtUrl = imgUrl }, - new Album { Title = "Chronicle, Vol. 1", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Creedence Clearwater Revival"], AlbumArtUrl = imgUrl }, - new Album { Title = "Chronicle, Vol. 2", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Creedence Clearwater Revival"], AlbumArtUrl = imgUrl }, - new Album { Title = "Ciao, Baby", Genre = genres["Rock"], Price = 8.99M, Artist = artists["TheStart"], AlbumArtUrl = imgUrl }, - new Album { Title = "Cidade Negra - Hits", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Cidade Negra"], AlbumArtUrl = imgUrl }, - new Album { Title = "Classic Munkle: Turbo Edition", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Munkle"], AlbumArtUrl = imgUrl }, - new Album { Title = "Classics: The Best of Sarah Brightman", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Sarah Brightman"], AlbumArtUrl = imgUrl }, - new Album { Title = "Coda", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Led Zeppelin"], AlbumArtUrl = imgUrl }, - new Album { Title = "Come Away With Me", Genre = genres["Jazz"], Price = 8.99M, Artist = artists["Norah Jones"], AlbumArtUrl = imgUrl }, - new Album { Title = "Come Taste The Band", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Deep Purple"], AlbumArtUrl = imgUrl }, - new Album { Title = "Comfort Eagle", Genre = genres["Alternative"], Price = 8.99M, Artist = artists["Cake"], AlbumArtUrl = imgUrl }, - new Album { Title = "Common Reaction", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Uh Huh Her "], AlbumArtUrl = imgUrl }, - new Album { Title = "Compositores", Genre = genres["Rock"], Price = 8.99M, Artist = artists["O Terço"], AlbumArtUrl = imgUrl }, - new Album { Title = "Contraband", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Velvet Revolver"], AlbumArtUrl = imgUrl }, - new Album { Title = "Core", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Stone Temple Pilots"], AlbumArtUrl = imgUrl }, - new Album { Title = "Cornerstone", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Styx"], AlbumArtUrl = imgUrl }, - new Album { Title = "Cosmicolor", Genre = genres["Rap"], Price = 8.99M, Artist = artists["M-Flo"], AlbumArtUrl = imgUrl }, - new Album { Title = "Cross", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Justice"], AlbumArtUrl = imgUrl }, - new Album { Title = "Culture of Fear", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Thievery Corporation"], AlbumArtUrl = imgUrl }, - new Album { Title = "Da Lama Ao Caos", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Chico Science & Nação Zumbi"], AlbumArtUrl = imgUrl }, - new Album { Title = "Dakshina", Genre = genres["World"], Price = 8.99M, Artist = artists["Deva Premal"], AlbumArtUrl = imgUrl }, - new Album { Title = "Dark Side of the Moon", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Pink Floyd"], AlbumArtUrl = imgUrl }, - new Album { Title = "Death Magnetic", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Metallica"], AlbumArtUrl = imgUrl }, - new Album { Title = "Deep End of Down", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Above the Fold"], AlbumArtUrl = imgUrl }, - new Album { Title = "Deep Purple In Rock", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Deep Purple"], AlbumArtUrl = imgUrl }, - new Album { Title = "Deixa Entrar", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Falamansa"], AlbumArtUrl = imgUrl }, - new Album { Title = "Deja Vu", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Crosby, Stills, Nash, and Young"], AlbumArtUrl = imgUrl }, - new Album { Title = "Di Korpu Ku Alma", Genre = genres["World"], Price = 8.99M, Artist = artists["Lura"], AlbumArtUrl = imgUrl }, - new Album { Title = "Diary of a Madman (Remastered)", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Ozzy Osbourne"], AlbumArtUrl = imgUrl }, - new Album { Title = "Diary of a Madman", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Ozzy Osbourne"], AlbumArtUrl = imgUrl }, - new Album { Title = "Dirt", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Alice in Chains"], AlbumArtUrl = imgUrl }, - new Album { Title = "Diver Down", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Van Halen"], AlbumArtUrl = imgUrl }, - new Album { Title = "Djavan Ao Vivo - Vol. 02", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Djavan"], AlbumArtUrl = imgUrl }, - new Album { Title = "Djavan Ao Vivo - Vol. 1", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Djavan"], AlbumArtUrl = imgUrl }, - new Album { Title = "Drum'n'bass for Papa", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Plug"], AlbumArtUrl = imgUrl }, - new Album { Title = "Duluth", Genre = genres["Country"], Price = 8.99M, Artist = artists["Trampled By Turtles"], AlbumArtUrl = imgUrl }, - new Album { Title = "Dummy", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Portishead"], AlbumArtUrl = imgUrl }, - new Album { Title = "Duos II", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Luciana Souza/Romero Lubambo"], AlbumArtUrl = imgUrl }, - new Album { Title = "Earl Scruggs and Friends", Genre = genres["Country"], Price = 8.99M, Artist = artists["Earl Scruggs"], AlbumArtUrl = imgUrl }, - new Album { Title = "Eden", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Sarah Brightman"], AlbumArtUrl = imgUrl }, - new Album { Title = "El Camino", Genre = genres["Rock"], Price = 8.99M, Artist = artists["The Black Keys"], AlbumArtUrl = imgUrl }, - new Album { Title = "Elegant Gypsy", Genre = genres["Jazz"], Price = 8.99M, Artist = artists["Al di Meola"], AlbumArtUrl = imgUrl }, - new Album { Title = "Elements Of Life", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Tiësto"], AlbumArtUrl = imgUrl }, - new Album { Title = "Elis Regina-Minha História", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Elis Regina"], AlbumArtUrl = imgUrl }, - new Album { Title = "Emergency On Planet Earth", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Jamiroquai"], AlbumArtUrl = imgUrl }, - new Album { Title = "Emotion", Genre = genres["World"], Price = 8.99M, Artist = artists["Papa Wemba"], AlbumArtUrl = imgUrl }, - new Album { Title = "English Renaissance", Genre = genres["Classical"], Price = 8.99M, Artist = artists["The King's Singers"], AlbumArtUrl = imgUrl }, - new Album { Title = "Every Kind of Light", Genre = genres["Rock"], Price = 8.99M, Artist = artists["The Posies"], AlbumArtUrl = imgUrl }, - new Album { Title = "Faceless", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Godsmack"], AlbumArtUrl = imgUrl }, - new Album { Title = "Facelift", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Alice in Chains"], AlbumArtUrl = imgUrl }, - new Album { Title = "Fair Warning", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Van Halen"], AlbumArtUrl = imgUrl }, - new Album { Title = "Fear of a Black Planet", Genre = genres["Rap"], Price = 8.99M, Artist = artists["Public Enemy"], AlbumArtUrl = imgUrl }, - new Album { Title = "Fear Of The Dark", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Iron Maiden"], AlbumArtUrl = imgUrl }, - new Album { Title = "Feels Like Home", Genre = genres["Jazz"], Price = 8.99M, Artist = artists["Norah Jones"], AlbumArtUrl = imgUrl }, - new Album { Title = "Fireball", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Deep Purple"], AlbumArtUrl = imgUrl }, - new Album { Title = "Fly", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Sarah Brightman"], AlbumArtUrl = imgUrl }, - new Album { Title = "For Those About To Rock We Salute You", Genre = genres["Rock"], Price = 8.99M, Artist = artists["AC/DC"], AlbumArtUrl = imgUrl }, - new Album { Title = "Four", Genre = genres["Blues"], Price = 8.99M, Artist = artists["Blues Traveler"], AlbumArtUrl = imgUrl }, - new Album { Title = "Frank", Genre = genres["Pop"], Price = 8.99M, Artist = artists["Amy Winehouse"], AlbumArtUrl = imgUrl }, - new Album { Title = "Further Down the Spiral", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Nine Inch Nails"], AlbumArtUrl = imgUrl }, - new Album { Title = "Garage Inc. (Disc 1)", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Metallica"], AlbumArtUrl = imgUrl }, - new Album { Title = "Garage Inc. (Disc 2)", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Metallica"], AlbumArtUrl = imgUrl }, - new Album { Title = "Garbage", Genre = genres["Alternative"], Price = 8.99M, Artist = artists["Garbage"], AlbumArtUrl = imgUrl }, - new Album { Title = "Good News For People Who Love Bad News", Genre = genres["Indie"], Price = 8.99M, Artist = artists["Modest Mouse"], AlbumArtUrl = imgUrl }, - new Album { Title = "Gordon", Genre = genres["Alternative"], Price = 8.99M, Artist = artists["Barenaked Ladies"], AlbumArtUrl = imgUrl }, - new Album { Title = "Górecki: Symphony No. 3", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Adrian Leaper & Doreen de Feis"], AlbumArtUrl = imgUrl }, - new Album { Title = "Greatest Hits I", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Queen"], AlbumArtUrl = imgUrl }, - new Album { Title = "Greatest Hits II", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Queen"], AlbumArtUrl = imgUrl }, - new Album { Title = "Greatest Hits", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Duck Sauce"], AlbumArtUrl = imgUrl }, - new Album { Title = "Greatest Hits", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Lenny Kravitz"], AlbumArtUrl = imgUrl }, - new Album { Title = "Greatest Hits", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Lenny Kravitz"], AlbumArtUrl = imgUrl }, - new Album { Title = "Greatest Kiss", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Kiss"], AlbumArtUrl = imgUrl }, - new Album { Title = "Greetings from Michigan", Genre = genres["Indie"], Price = 8.99M, Artist = artists["Sufjan Stevens"], AlbumArtUrl = imgUrl }, - new Album { Title = "Group Therapy", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Above & Beyond"], AlbumArtUrl = imgUrl }, - new Album { Title = "Handel: The Messiah (Highlights)", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Scholars Baroque Ensemble"], AlbumArtUrl = imgUrl }, - new Album { Title = "Haydn: Symphonies 99 - 104", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Royal Philharmonic Orchestra"], AlbumArtUrl = imgUrl }, - new Album { Title = "Heart of the Night", Genre = genres["Jazz"], Price = 8.99M, Artist = artists["Spyro Gyra"], AlbumArtUrl = imgUrl }, - new Album { Title = "Heart On", Genre = genres["Rock"], Price = 8.99M, Artist = artists["The Eagles of Death Metal"], AlbumArtUrl = imgUrl }, - new Album { Title = "Holy Diver", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Dio"], AlbumArtUrl = imgUrl }, - new Album { Title = "Homework", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Daft Punk"], AlbumArtUrl = imgUrl }, - new Album { Title = "Hot Rocks, 1964-1971 (Disc 1)", Genre = genres["Rock"], Price = 8.99M, Artist = artists["The Rolling Stones"], AlbumArtUrl = imgUrl }, - new Album { Title = "Houses Of The Holy", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Led Zeppelin"], AlbumArtUrl = imgUrl }, - new Album { Title = "How To Dismantle An Atomic Bomb", Genre = genres["Rock"], Price = 8.99M, Artist = artists["U2"], AlbumArtUrl = imgUrl }, - new Album { Title = "Human", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Projected"], AlbumArtUrl = imgUrl }, - new Album { Title = "Hunky Dory", Genre = genres["Rock"], Price = 8.99M, Artist = artists["David Bowie"], AlbumArtUrl = imgUrl }, - new Album { Title = "Hymns", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Projected"], AlbumArtUrl = imgUrl }, - new Album { Title = "Hysteria", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Def Leppard"], AlbumArtUrl = imgUrl }, - new Album { Title = "In Absentia", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Porcupine Tree"], AlbumArtUrl = imgUrl }, - new Album { Title = "In Between", Genre = genres["Pop"], Price = 8.99M, Artist = artists["Paul Van Dyk"], AlbumArtUrl = imgUrl }, - new Album { Title = "In Rainbows", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Radiohead"], AlbumArtUrl = imgUrl }, - new Album { Title = "In Step", Genre = genres["Blues"], Price = 8.99M, Artist = artists["Stevie Ray Vaughan & Double Trouble"], AlbumArtUrl = imgUrl }, - new Album { Title = "In the court of the Crimson King", Genre = genres["Rock"], Price = 8.99M, Artist = artists["King Crimson"], AlbumArtUrl = imgUrl }, - new Album { Title = "In Through The Out Door", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Led Zeppelin"], AlbumArtUrl = imgUrl }, - new Album { Title = "In Your Honor [Disc 1]", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Foo Fighters"], AlbumArtUrl = imgUrl }, - new Album { Title = "In Your Honor [Disc 2]", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Foo Fighters"], AlbumArtUrl = imgUrl }, - new Album { Title = "Indestructible", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Rancid"], AlbumArtUrl = imgUrl }, - new Album { Title = "Infinity", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Journey"], AlbumArtUrl = imgUrl }, - new Album { Title = "Into The Light", Genre = genres["Rock"], Price = 8.99M, Artist = artists["David Coverdale"], AlbumArtUrl = imgUrl }, - new Album { Title = "Introspective", Genre = genres["Pop"], Price = 8.99M, Artist = artists["Pet Shop Boys"], AlbumArtUrl = imgUrl }, - new Album { Title = "Iron Maiden", Genre = genres["Blues"], Price = 8.99M, Artist = artists["Iron Maiden"], AlbumArtUrl = imgUrl }, - new Album { Title = "ISAM", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Amon Tobin"], AlbumArtUrl = imgUrl }, - new Album { Title = "IV", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Led Zeppelin"], AlbumArtUrl = imgUrl }, - new Album { Title = "Jagged Little Pill", Genre = genres["Alternative"], Price = 8.99M, Artist = artists["Alanis Morissette"], AlbumArtUrl = imgUrl }, - new Album { Title = "Jagged Little Pill", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Alanis Morissette"], AlbumArtUrl = imgUrl }, - new Album { Title = "Jorge Ben Jor 25 Anos", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Jorge Ben"], AlbumArtUrl = imgUrl }, - new Album { Title = "Jota Quest-1995", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Jota Quest"], AlbumArtUrl = imgUrl }, - new Album { Title = "Kick", Genre = genres["Alternative"], Price = 8.99M, Artist = artists["INXS"], AlbumArtUrl = imgUrl }, - new Album { Title = "Kill 'Em All", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Metallica"], AlbumArtUrl = imgUrl }, - new Album { Title = "Kind of Blue", Genre = genres["Jazz"], Price = 8.99M, Artist = artists["Miles Davis"], AlbumArtUrl = imgUrl }, - new Album { Title = "King For A Day Fool For A Lifetime", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Faith No More"], AlbumArtUrl = imgUrl }, - new Album { Title = "Kiss", Genre = genres["Pop"], Price = 8.99M, Artist = artists["Carly Rae Jepsen"], AlbumArtUrl = imgUrl }, - new Album { Title = "Last Call", Genre = genres["Country"], Price = 8.99M, Artist = artists["Cayouche"], AlbumArtUrl = imgUrl }, - new Album { Title = "Le Freak", Genre = genres["R&B"], Price = 8.99M, Artist = artists["Chic"], AlbumArtUrl = imgUrl }, - new Album { Title = "Le Tigre", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Le Tigre"], AlbumArtUrl = imgUrl }, - new Album { Title = "Led Zeppelin I", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Led Zeppelin"], AlbumArtUrl = imgUrl }, - new Album { Title = "Led Zeppelin II", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Led Zeppelin"], AlbumArtUrl = imgUrl }, - new Album { Title = "Led Zeppelin III", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Led Zeppelin"], AlbumArtUrl = imgUrl }, - new Album { Title = "Let There Be Rock", Genre = genres["Rock"], Price = 8.99M, Artist = artists["AC/DC"], AlbumArtUrl = imgUrl }, - new Album { Title = "Little Earthquakes", Genre = genres["Alternative"], Price = 8.99M, Artist = artists["Tori Amos"], AlbumArtUrl = imgUrl }, - new Album { Title = "Live [Disc 1]", Genre = genres["Blues"], Price = 8.99M, Artist = artists["The Black Crowes"], AlbumArtUrl = imgUrl }, - new Album { Title = "Live [Disc 2]", Genre = genres["Blues"], Price = 8.99M, Artist = artists["The Black Crowes"], AlbumArtUrl = imgUrl }, - new Album { Title = "Live After Death", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Iron Maiden"], AlbumArtUrl = imgUrl }, - new Album { Title = "Live At Donington 1992 (Disc 1)", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Iron Maiden"], AlbumArtUrl = imgUrl }, - new Album { Title = "Live At Donington 1992 (Disc 2)", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Iron Maiden"], AlbumArtUrl = imgUrl }, - new Album { Title = "Live on Earth", Genre = genres["Jazz"], Price = 8.99M, Artist = artists["The Cat Empire"], AlbumArtUrl = imgUrl }, - new Album { Title = "Live On Two Legs [Live]", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Pearl Jam"], AlbumArtUrl = imgUrl }, - new Album { Title = "Living After Midnight", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Judas Priest"], AlbumArtUrl = imgUrl }, - new Album { Title = "Living", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Paddy Casey"], AlbumArtUrl = imgUrl }, - new Album { Title = "Load", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Metallica"], AlbumArtUrl = imgUrl }, - new Album { Title = "Love Changes Everything", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Sarah Brightman"], AlbumArtUrl = imgUrl }, - new Album { Title = "MacArthur Park Suite", Genre = genres["R&B"], Price = 8.99M, Artist = artists["Donna Summer"], AlbumArtUrl = imgUrl }, - new Album { Title = "Machine Head", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Deep Purple"], AlbumArtUrl = imgUrl }, - new Album { Title = "Magical Mystery Tour", Genre = genres["Pop"], Price = 8.99M, Artist = artists["The Beatles"], AlbumArtUrl = imgUrl }, - new Album { Title = "Mais Do Mesmo", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Legião Urbana"], AlbumArtUrl = imgUrl }, - new Album { Title = "Maquinarama", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Skank"], AlbumArtUrl = imgUrl }, - new Album { Title = "Marasim", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Jagjit Singh"], AlbumArtUrl = imgUrl }, - new Album { Title = "Mascagni: Cavalleria Rusticana", Genre = genres["Classical"], Price = 8.99M, Artist = artists["James Levine"], AlbumArtUrl = imgUrl }, - new Album { Title = "Master of Puppets", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Metallica"], AlbumArtUrl = imgUrl }, - new Album { Title = "Mechanics & Mathematics", Genre = genres["Pop"], Price = 8.99M, Artist = artists["Venus Hum"], AlbumArtUrl = imgUrl }, - new Album { Title = "Mental Jewelry", Genre = genres["Alternative"], Price = 8.99M, Artist = artists["Live"], AlbumArtUrl = imgUrl }, - new Album { Title = "Metallics", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Metallica"], AlbumArtUrl = imgUrl }, - new Album { Title = "meteora", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Linkin Park"], AlbumArtUrl = imgUrl }, - new Album { Title = "Meus Momentos", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Gonzaguinha"], AlbumArtUrl = imgUrl }, - new Album { Title = "Mezmerize", Genre = genres["Metal"], Price = 8.99M, Artist = artists["System Of A Down"], AlbumArtUrl = imgUrl }, - new Album { Title = "Mezzanine", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Massive Attack"], AlbumArtUrl = imgUrl }, - new Album { Title = "Miles Ahead", Genre = genres["Jazz"], Price = 8.99M, Artist = artists["Miles Davis"], AlbumArtUrl = imgUrl }, - new Album { Title = "Milton Nascimento Ao Vivo", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Milton Nascimento"], AlbumArtUrl = imgUrl }, - new Album { Title = "Minas", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Milton Nascimento"], AlbumArtUrl = imgUrl }, - new Album { Title = "Minha Historia", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Chico Buarque"], AlbumArtUrl = imgUrl }, - new Album { Title = "Misplaced Childhood", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Marillion"], AlbumArtUrl = imgUrl }, - new Album { Title = "MK III The Final Concerts [Disc 1]", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Deep Purple"], AlbumArtUrl = imgUrl }, - new Album { Title = "Morning Dance", Genre = genres["Jazz"], Price = 8.99M, Artist = artists["Spyro Gyra"], AlbumArtUrl = imgUrl }, - new Album { Title = "Motley Crue Greatest Hits", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Mötley Crüe"], AlbumArtUrl = imgUrl }, - new Album { Title = "Moving Pictures", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Rush"], AlbumArtUrl = imgUrl }, - new Album { Title = "Mozart: Chamber Music", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Nash Ensemble"], AlbumArtUrl = imgUrl }, - new Album { Title = "Mozart: Symphonies Nos. 40 & 41", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Berliner Philharmoniker"], AlbumArtUrl = imgUrl }, - new Album { Title = "Murder Ballads", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Nick Cave and the Bad Seeds"], AlbumArtUrl = imgUrl }, - new Album { Title = "Music For The Jilted Generation", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["The Prodigy"], AlbumArtUrl = imgUrl }, - new Album { Title = "My Generation - The Very Best Of The Who", Genre = genres["Rock"], Price = 8.99M, Artist = artists["The Who"], AlbumArtUrl = imgUrl }, - new Album { Title = "My Name is Skrillex", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Skrillex"], AlbumArtUrl = imgUrl }, - new Album { Title = "Na Pista", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Cláudio Zoli"], AlbumArtUrl = imgUrl }, - new Album { Title = "Nevermind", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Nirvana"], AlbumArtUrl = imgUrl }, - new Album { Title = "New Adventures In Hi-Fi", Genre = genres["Rock"], Price = 8.99M, Artist = artists["R.E.M."], AlbumArtUrl = imgUrl }, - new Album { Title = "New Divide", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Linkin Park"], AlbumArtUrl = imgUrl }, - new Album { Title = "New York Dolls", Genre = genres["Punk"], Price = 8.99M, Artist = artists["New York Dolls"], AlbumArtUrl = imgUrl }, - new Album { Title = "News Of The World", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Queen"], AlbumArtUrl = imgUrl }, - new Album { Title = "Nielsen: The Six Symphonies", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Göteborgs Symfoniker & Neeme Järvi"], AlbumArtUrl = imgUrl }, - new Album { Title = "Night At The Opera", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Queen"], AlbumArtUrl = imgUrl }, - new Album { Title = "Night Castle", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Trans-Siberian Orchestra"], AlbumArtUrl = imgUrl }, - new Album { Title = "Nkolo", Genre = genres["World"], Price = 8.99M, Artist = artists["Lokua Kanza"], AlbumArtUrl = imgUrl }, - new Album { Title = "No More Tears (Remastered)", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Ozzy Osbourne"], AlbumArtUrl = imgUrl }, - new Album { Title = "No Prayer For The Dying", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Iron Maiden"], AlbumArtUrl = imgUrl }, - new Album { Title = "No Security", Genre = genres["Rock"], Price = 8.99M, Artist = artists["The Rolling Stones"], AlbumArtUrl = imgUrl }, - new Album { Title = "O Brother, Where Art Thou?", Genre = genres["Country"], Price = 8.99M, Artist = artists["Alison Krauss"], AlbumArtUrl = imgUrl }, - new Album { Title = "O Samba Poconé", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Skank"], AlbumArtUrl = imgUrl }, - new Album { Title = "O(+>", Genre = genres["R&B"], Price = 8.99M, Artist = artists["Prince"], AlbumArtUrl = imgUrl }, - new Album { Title = "Oceania", Genre = genres["Rock"], Price = 8.99M, Artist = artists["The Smashing Pumpkins"], AlbumArtUrl = imgUrl }, - new Album { Title = "Off the Deep End", Genre = genres["Pop"], Price = 8.99M, Artist = artists["Weird Al"], AlbumArtUrl = imgUrl }, - new Album { Title = "OK Computer", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Radiohead"], AlbumArtUrl = imgUrl }, - new Album { Title = "Olodum", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Olodum"], AlbumArtUrl = imgUrl }, - new Album { Title = "One Love", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["David Guetta"], AlbumArtUrl = imgUrl }, - new Album { Title = "Operation: Mindcrime", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Queensrÿche"], AlbumArtUrl = imgUrl }, - new Album { Title = "Opiate", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Tool"], AlbumArtUrl = imgUrl }, - new Album { Title = "Outbreak", Genre = genres["Jazz"], Price = 8.99M, Artist = artists["Dennis Chambers"], AlbumArtUrl = imgUrl }, - new Album { Title = "Pachelbel: Canon & Gigue", Genre = genres["Classical"], Price = 8.99M, Artist = artists["English Concert & Trevor Pinnock"], AlbumArtUrl = imgUrl }, - new Album { Title = "Paid in Full", Genre = genres["Rap"], Price = 8.99M, Artist = artists["Eric B. and Rakim"], AlbumArtUrl = imgUrl }, - new Album { Title = "Para Siempre", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Vicente Fernandez"], AlbumArtUrl = imgUrl }, - new Album { Title = "Pause", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Four Tet"], AlbumArtUrl = imgUrl }, - new Album { Title = "Peace Sells... but Who's Buying", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Megadeth"], AlbumArtUrl = imgUrl }, - new Album { Title = "Physical Graffiti [Disc 1]", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Led Zeppelin"], AlbumArtUrl = imgUrl }, - new Album { Title = "Physical Graffiti [Disc 2]", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Led Zeppelin"], AlbumArtUrl = imgUrl }, - new Album { Title = "Physical Graffiti", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Led Zeppelin"], AlbumArtUrl = imgUrl }, - new Album { Title = "Piece Of Mind", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Iron Maiden"], AlbumArtUrl = imgUrl }, - new Album { Title = "Pinkerton", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Weezer"], AlbumArtUrl = imgUrl }, - new Album { Title = "Plays Metallica By Four Cellos", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Apocalyptica"], AlbumArtUrl = imgUrl }, - new Album { Title = "Pop", Genre = genres["Rock"], Price = 8.99M, Artist = artists["U2"], AlbumArtUrl = imgUrl }, - new Album { Title = "Powerslave", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Iron Maiden"], AlbumArtUrl = imgUrl }, - new Album { Title = "Prenda Minha", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Caetano Veloso"], AlbumArtUrl = imgUrl }, - new Album { Title = "Presence", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Led Zeppelin"], AlbumArtUrl = imgUrl }, - new Album { Title = "Pretty Hate Machine", Genre = genres["Alternative"], Price = 8.99M, Artist = artists["Nine Inch Nails"], AlbumArtUrl = imgUrl }, - new Album { Title = "Prisoner", Genre = genres["Rock"], Price = 8.99M, Artist = artists["The Jezabels"], AlbumArtUrl = imgUrl }, - new Album { Title = "Privateering", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Mark Knopfler"], AlbumArtUrl = imgUrl }, - new Album { Title = "Prokofiev: Romeo & Juliet", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Michael Tilson Thomas"], AlbumArtUrl = imgUrl }, - new Album { Title = "Prokofiev: Symphony No.1", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Sergei Prokofiev & Yuri Temirkanov"], AlbumArtUrl = imgUrl }, - new Album { Title = "PSY's Best 6th Part 1", Genre = genres["Pop"], Price = 8.99M, Artist = artists["PSY"], AlbumArtUrl = imgUrl }, - new Album { Title = "Purcell: The Fairy Queen", Genre = genres["Classical"], Price = 8.99M, Artist = artists["London Classical Players"], AlbumArtUrl = imgUrl }, - new Album { Title = "Purpendicular", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Deep Purple"], AlbumArtUrl = imgUrl }, - new Album { Title = "Purple", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Stone Temple Pilots"], AlbumArtUrl = imgUrl }, - new Album { Title = "Quanta Gente Veio Ver (Live)", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Gilberto Gil"], AlbumArtUrl = imgUrl }, - new Album { Title = "Quanta Gente Veio ver--Bônus De Carnaval", Genre = genres["Jazz"], Price = 8.99M, Artist = artists["Gilberto Gil"], AlbumArtUrl = imgUrl }, - new Album { Title = "Quiet Songs", Genre = genres["Jazz"], Price = 8.99M, Artist = artists["Aisha Duo"], AlbumArtUrl = imgUrl }, - new Album { Title = "Raices", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Los Tigres del Norte"], AlbumArtUrl = imgUrl }, - new Album { Title = "Raising Hell", Genre = genres["Rap"], Price = 8.99M, Artist = artists["Run DMC"], AlbumArtUrl = imgUrl }, - new Album { Title = "Raoul and the Kings of Spain ", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Tears For Fears"], AlbumArtUrl = imgUrl }, - new Album { Title = "Rattle And Hum", Genre = genres["Rock"], Price = 8.99M, Artist = artists["U2"], AlbumArtUrl = imgUrl }, - new Album { Title = "Raul Seixas", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Raul Seixas"], AlbumArtUrl = imgUrl }, - new Album { Title = "Recovery [Explicit]", Genre = genres["Rap"], Price = 8.99M, Artist = artists["Eminem"], AlbumArtUrl = imgUrl }, - new Album { Title = "Reign In Blood", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Slayer"], AlbumArtUrl = imgUrl }, - new Album { Title = "Relayed", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Yes"], AlbumArtUrl = imgUrl }, - new Album { Title = "ReLoad", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Metallica"], AlbumArtUrl = imgUrl }, - new Album { Title = "Respighi:Pines of Rome", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Eugene Ormandy"], AlbumArtUrl = imgUrl }, - new Album { Title = "Restless and Wild", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Accept"], AlbumArtUrl = imgUrl }, - new Album { Title = "Retrospective I (1974-1980)", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Rush"], AlbumArtUrl = imgUrl }, - new Album { Title = "Revelations", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Audioslave"], AlbumArtUrl = imgUrl }, - new Album { Title = "Revolver", Genre = genres["Rock"], Price = 8.99M, Artist = artists["The Beatles"], AlbumArtUrl = imgUrl }, - new Album { Title = "Ride the Lighting ", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Metallica"], AlbumArtUrl = imgUrl }, - new Album { Title = "Ride The Lightning", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Metallica"], AlbumArtUrl = imgUrl }, - new Album { Title = "Ring My Bell", Genre = genres["R&B"], Price = 8.99M, Artist = artists["Anita Ward"], AlbumArtUrl = imgUrl }, - new Album { Title = "Riot Act", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Pearl Jam"], AlbumArtUrl = imgUrl }, - new Album { Title = "Rise of the Phoenix", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Before the Dawn"], AlbumArtUrl = imgUrl }, - new Album { Title = "Rock In Rio [CD1]", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Iron Maiden"], AlbumArtUrl = imgUrl }, - new Album { Title = "Rock In Rio [CD2]", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Iron Maiden"], AlbumArtUrl = imgUrl }, - new Album { Title = "Rock In Rio [CD2]", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Iron Maiden"], AlbumArtUrl = imgUrl }, - new Album { Title = "Roda De Funk", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Funk Como Le Gusta"], AlbumArtUrl = imgUrl }, - new Album { Title = "Room for Squares", Genre = genres["Pop"], Price = 8.99M, Artist = artists["John Mayer"], AlbumArtUrl = imgUrl }, - new Album { Title = "Root Down", Genre = genres["Jazz"], Price = 8.99M, Artist = artists["Jimmy Smith"], AlbumArtUrl = imgUrl }, - new Album { Title = "Rounds", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Four Tet"], AlbumArtUrl = imgUrl }, - new Album { Title = "Rubber Factory", Genre = genres["Rock"], Price = 8.99M, Artist = artists["The Black Keys"], AlbumArtUrl = imgUrl }, - new Album { Title = "Rust in Peace", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Megadeth"], AlbumArtUrl = imgUrl }, - new Album { Title = "Sambas De Enredo 2001", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Various Artists"], AlbumArtUrl = imgUrl }, - new Album { Title = "Santana - As Years Go By", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Santana"], AlbumArtUrl = imgUrl }, - new Album { Title = "Santana Live", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Santana"], AlbumArtUrl = imgUrl }, - new Album { Title = "Saturday Night Fever", Genre = genres["R&B"], Price = 8.99M, Artist = artists["Bee Gees"], AlbumArtUrl = imgUrl }, - new Album { Title = "Scary Monsters and Nice Sprites", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Skrillex"], AlbumArtUrl = imgUrl }, - new Album { Title = "Scheherazade", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Chicago Symphony Orchestra & Fritz Reiner"], AlbumArtUrl = imgUrl }, - new Album { Title = "SCRIABIN: Vers la flamme", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Christopher O'Riley"], AlbumArtUrl = imgUrl }, - new Album { Title = "Second Coming", Genre = genres["Rock"], Price = 8.99M, Artist = artists["The Stone Roses"], AlbumArtUrl = imgUrl }, - new Album { Title = "Serie Sem Limite (Disc 1)", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Tim Maia"], AlbumArtUrl = imgUrl }, - new Album { Title = "Serie Sem Limite (Disc 2)", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Tim Maia"], AlbumArtUrl = imgUrl }, - new Album { Title = "Serious About Men", Genre = genres["Rap"], Price = 8.99M, Artist = artists["The Rubberbandits"], AlbumArtUrl = imgUrl }, - new Album { Title = "Seventh Son of a Seventh Son", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Iron Maiden"], AlbumArtUrl = imgUrl }, - new Album { Title = "Short Bus", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Filter"], AlbumArtUrl = imgUrl }, - new Album { Title = "Sibelius: Finlandia", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Berliner Philharmoniker"], AlbumArtUrl = imgUrl }, - new Album { Title = "Singles Collection", Genre = genres["Rock"], Price = 8.99M, Artist = artists["David Bowie"], AlbumArtUrl = imgUrl }, - new Album { Title = "Six Degrees of Inner Turbulence", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Dream Theater"], AlbumArtUrl = imgUrl }, - new Album { Title = "Slave To The Empire", Genre = genres["Metal"], Price = 8.99M, Artist = artists["T&N"], AlbumArtUrl = imgUrl }, - new Album { Title = "Slaves And Masters", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Deep Purple"], AlbumArtUrl = imgUrl }, - new Album { Title = "Slouching Towards Bethlehem", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Robert James"], AlbumArtUrl = imgUrl }, - new Album { Title = "Smash", Genre = genres["Rock"], Price = 8.99M, Artist = artists["The Offspring"], AlbumArtUrl = imgUrl }, - new Album { Title = "Something Special", Genre = genres["Country"], Price = 8.99M, Artist = artists["Dolly Parton"], AlbumArtUrl = imgUrl }, - new Album { Title = "Somewhere in Time", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Iron Maiden"], AlbumArtUrl = imgUrl }, - new Album { Title = "Song(s) You Know By Heart", Genre = genres["Country"], Price = 8.99M, Artist = artists["Jimmy Buffett"], AlbumArtUrl = imgUrl }, - new Album { Title = "Sound of Music", Genre = genres["Punk"], Price = 8.99M, Artist = artists["Adicts"], AlbumArtUrl = imgUrl }, - new Album { Title = "South American Getaway", Genre = genres["Classical"], Price = 8.99M, Artist = artists["The 12 Cellists of The Berlin Philharmonic"], AlbumArtUrl = imgUrl }, - new Album { Title = "Sozinho Remix Ao Vivo", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Caetano Veloso"], AlbumArtUrl = imgUrl }, - new Album { Title = "Speak of the Devil", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Ozzy Osbourne"], AlbumArtUrl = imgUrl }, - new Album { Title = "Spiritual State", Genre = genres["Rap"], Price = 8.99M, Artist = artists["Nujabes"], AlbumArtUrl = imgUrl }, - new Album { Title = "St. Anger", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Metallica"], AlbumArtUrl = imgUrl }, - new Album { Title = "Still Life", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Opeth"], AlbumArtUrl = imgUrl }, - new Album { Title = "Stop Making Sense", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Talking Heads"], AlbumArtUrl = imgUrl }, - new Album { Title = "Stormbringer", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Deep Purple"], AlbumArtUrl = imgUrl }, - new Album { Title = "Stranger than Fiction", Genre = genres["Punk"], Price = 8.99M, Artist = artists["Bad Religion"], AlbumArtUrl = imgUrl }, - new Album { Title = "Strauss: Waltzes", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Eugene Ormandy"], AlbumArtUrl = imgUrl }, - new Album { Title = "Supermodified", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Amon Tobin"], AlbumArtUrl = imgUrl }, - new Album { Title = "Supernatural", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Santana"], AlbumArtUrl = imgUrl }, - new Album { Title = "Surfing with the Alien (Remastered)", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Joe Satriani"], AlbumArtUrl = imgUrl }, - new Album { Title = "Switched-On Bach", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Wendy Carlos"], AlbumArtUrl = imgUrl }, - new Album { Title = "Symphony", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Sarah Brightman"], AlbumArtUrl = imgUrl }, - new Album { Title = "Szymanowski: Piano Works, Vol. 1", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Martin Roscoe"], AlbumArtUrl = imgUrl }, - new Album { Title = "Tchaikovsky: The Nutcracker", Genre = genres["Classical"], Price = 8.99M, Artist = artists["London Symphony Orchestra"], AlbumArtUrl = imgUrl }, - new Album { Title = "Ted Nugent", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Ted Nugent"], AlbumArtUrl = imgUrl }, - new Album { Title = "Teflon Don", Genre = genres["Rap"], Price = 8.99M, Artist = artists["Rick Ross"], AlbumArtUrl = imgUrl }, - new Album { Title = "Tell Another Joke at the Ol' Choppin' Block", Genre = genres["Indie"], Price = 8.99M, Artist = artists["Danielson Famile"], AlbumArtUrl = imgUrl }, - new Album { Title = "Temple of the Dog", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Temple of the Dog"], AlbumArtUrl = imgUrl }, - new Album { Title = "Ten", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Pearl Jam"], AlbumArtUrl = imgUrl }, - new Album { Title = "Texas Flood", Genre = genres["Blues"], Price = 8.99M, Artist = artists["Stevie Ray Vaughan"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Battle Rages On", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Deep Purple"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Beast Live", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Paul D'Ianno"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Best Of 1980-1990", Genre = genres["Rock"], Price = 8.99M, Artist = artists["U2"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Best of 1990–2000", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Sarah Brightman"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Best of Beethoven", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Nicolaus Esterhazy Sinfonia"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Best Of Billy Cobham", Genre = genres["Jazz"], Price = 8.99M, Artist = artists["Billy Cobham"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Best of Ed Motta", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Ed Motta"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Best Of Van Halen, Vol. I", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Van Halen"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Bridge", Genre = genres["R&B"], Price = 8.99M, Artist = artists["Melanie Fiona"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Cage", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Tygers of Pan Tang"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Chicago Transit Authority", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Chicago "], AlbumArtUrl = imgUrl }, - new Album { Title = "The Chronic", Genre = genres["Rap"], Price = 8.99M, Artist = artists["Dr. Dre"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Colour And The Shape", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Foo Fighters"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Crane Wife", Genre = genres["Alternative"], Price = 8.99M, Artist = artists["The Decemberists"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Cream Of Clapton", Genre = genres["Blues"], Price = 8.99M, Artist = artists["Eric Clapton"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Cure", Genre = genres["Pop"], Price = 8.99M, Artist = artists["The Cure"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Dark Side Of The Moon", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Pink Floyd"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Divine Conspiracy", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Epica"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Doors", Genre = genres["Rock"], Price = 8.99M, Artist = artists["The Doors"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Dream of the Blue Turtles", Genre = genres["Pop"], Price = 8.99M, Artist = artists["Sting"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Essential Miles Davis [Disc 1]", Genre = genres["Jazz"], Price = 8.99M, Artist = artists["Miles Davis"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Essential Miles Davis [Disc 2]", Genre = genres["Jazz"], Price = 8.99M, Artist = artists["Miles Davis"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Final Concerts (Disc 2)", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Deep Purple"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Final Frontier", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Iron Maiden"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Head and the Heart", Genre = genres["Rock"], Price = 8.99M, Artist = artists["The Head and the Heart"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Joshua Tree", Genre = genres["Rock"], Price = 8.99M, Artist = artists["U2"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Last Night of the Proms", Genre = genres["Classical"], Price = 8.99M, Artist = artists["BBC Concert Orchestra"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Lumineers", Genre = genres["Rock"], Price = 8.99M, Artist = artists["The Lumineers"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Number of The Beast", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Iron Maiden"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Number of The Beast", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Iron Maiden"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Police Greatest Hits", Genre = genres["Rock"], Price = 8.99M, Artist = artists["The Police"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Song Remains The Same (Disc 1)", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Led Zeppelin"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Song Remains The Same (Disc 2)", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Led Zeppelin"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Southern Harmony and Musical Companion", Genre = genres["Blues"], Price = 8.99M, Artist = artists["The Black Crowes"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Spade", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Butch Walker & The Black Widows"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Stone Roses", Genre = genres["Rock"], Price = 8.99M, Artist = artists["The Stone Roses"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Suburbs", Genre = genres["Indie"], Price = 8.99M, Artist = artists["Arcade Fire"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Three Tenors Disc1/Disc2", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Carreras, Pavarotti, Domingo"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Trees They Grow So High", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Sarah Brightman"], AlbumArtUrl = imgUrl }, - new Album { Title = "The Wall", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Pink Floyd"], AlbumArtUrl = imgUrl }, - new Album { Title = "The X Factor", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Iron Maiden"], AlbumArtUrl = imgUrl }, - new Album { Title = "Them Crooked Vultures", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Them Crooked Vultures"], AlbumArtUrl = imgUrl }, - new Album { Title = "This Is Happening", Genre = genres["Rock"], Price = 8.99M, Artist = artists["LCD Soundsystem"], AlbumArtUrl = imgUrl }, - new Album { Title = "Thunder, Lightning, Strike", Genre = genres["Rock"], Price = 8.99M, Artist = artists["The Go! Team"], AlbumArtUrl = imgUrl }, - new Album { Title = "Time to Say Goodbye", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Sarah Brightman"], AlbumArtUrl = imgUrl }, - new Album { Title = "Time, Love & Tenderness", Genre = genres["Pop"], Price = 8.99M, Artist = artists["Michael Bolton"], AlbumArtUrl = imgUrl }, - new Album { Title = "Tomorrow Starts Today", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Mobile"], AlbumArtUrl = imgUrl }, - new Album { Title = "Tribute", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Ozzy Osbourne"], AlbumArtUrl = imgUrl }, - new Album { Title = "Tuesday Night Music Club", Genre = genres["Alternative"], Price = 8.99M, Artist = artists["Sheryl Crow"], AlbumArtUrl = imgUrl }, - new Album { Title = "Umoja", Genre = genres["Rock"], Price = 8.99M, Artist = artists["BLØF"], AlbumArtUrl = imgUrl }, - new Album { Title = "Under the Pink", Genre = genres["Alternative"], Price = 8.99M, Artist = artists["Tori Amos"], AlbumArtUrl = imgUrl }, - new Album { Title = "Undertow", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Tool"], AlbumArtUrl = imgUrl }, - new Album { Title = "Un-Led-Ed", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Dread Zeppelin"], AlbumArtUrl = imgUrl }, - new Album { Title = "Unplugged [Live]", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Kiss"], AlbumArtUrl = imgUrl }, - new Album { Title = "Unplugged", Genre = genres["Blues"], Price = 8.99M, Artist = artists["Eric Clapton"], AlbumArtUrl = imgUrl }, - new Album { Title = "Unplugged", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Eric Clapton"], AlbumArtUrl = imgUrl }, - new Album { Title = "Untrue", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Burial"], AlbumArtUrl = imgUrl }, - new Album { Title = "Use Your Illusion I", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Guns N' Roses"], AlbumArtUrl = imgUrl }, - new Album { Title = "Use Your Illusion II", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Guns N' Roses"], AlbumArtUrl = imgUrl }, - new Album { Title = "Use Your Illusion II", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Guns N' Roses"], AlbumArtUrl = imgUrl }, - new Album { Title = "Van Halen III", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Van Halen"], AlbumArtUrl = imgUrl }, - new Album { Title = "Van Halen", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Van Halen"], AlbumArtUrl = imgUrl }, - new Album { Title = "Version 2.0", Genre = genres["Alternative"], Price = 8.99M, Artist = artists["Garbage"], AlbumArtUrl = imgUrl }, - new Album { Title = "Vinicius De Moraes", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Vinícius De Moraes"], AlbumArtUrl = imgUrl }, - new Album { Title = "Virtual XI", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Iron Maiden"], AlbumArtUrl = imgUrl }, - new Album { Title = "Voodoo Lounge", Genre = genres["Rock"], Price = 8.99M, Artist = artists["The Rolling Stones"], AlbumArtUrl = imgUrl }, - new Album { Title = "Vozes do MPB", Genre = genres["Latin"], Price = 8.99M, Artist = artists["Various Artists"], AlbumArtUrl = imgUrl }, - new Album { Title = "Vs.", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Pearl Jam"], AlbumArtUrl = imgUrl }, - new Album { Title = "Wagner: Favourite Overtures", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Sir Georg Solti & Wiener Philharmoniker"], AlbumArtUrl = imgUrl }, - new Album { Title = "Walking Into Clarksdale", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Page & Plant"], AlbumArtUrl = imgUrl }, - new Album { Title = "Wapi Yo", Genre = genres["World"], Price = 8.99M, Artist = artists["Lokua Kanza"], AlbumArtUrl = imgUrl }, - new Album { Title = "War", Genre = genres["Rock"], Price = 8.99M, Artist = artists["U2"], AlbumArtUrl = imgUrl }, - new Album { Title = "Warner 25 Anos", Genre = genres["Jazz"], Price = 8.99M, Artist = artists["Antônio Carlos Jobim"], AlbumArtUrl = imgUrl }, - new Album { Title = "Wasteland R&Btheque", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Raunchy"], AlbumArtUrl = imgUrl }, - new Album { Title = "Watermark", Genre = genres["Electronic"], Price = 8.99M, Artist = artists["Enya"], AlbumArtUrl = imgUrl }, - new Album { Title = "We Were Exploding Anyway", Genre = genres["Rock"], Price = 8.99M, Artist = artists["65daysofstatic"], AlbumArtUrl = imgUrl }, - new Album { Title = "Weill: The Seven Deadly Sins", Genre = genres["Classical"], Price = 8.99M, Artist = artists["Orchestre de l'Opéra de Lyon"], AlbumArtUrl = imgUrl }, - new Album { Title = "White Pony", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Deftones"], AlbumArtUrl = imgUrl }, - new Album { Title = "Who's Next", Genre = genres["Rock"], Price = 8.99M, Artist = artists["The Who"], AlbumArtUrl = imgUrl }, - new Album { Title = "Wish You Were Here", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Pink Floyd"], AlbumArtUrl = imgUrl }, - new Album { Title = "With Oden on Our Side", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Amon Amarth"], AlbumArtUrl = imgUrl }, - new Album { Title = "Worlds", Genre = genres["Jazz"], Price = 8.99M, Artist = artists["Aaron Goldberg"], AlbumArtUrl = imgUrl }, - new Album { Title = "Worship Music", Genre = genres["Metal"], Price = 8.99M, Artist = artists["Anthrax"], AlbumArtUrl = imgUrl }, - new Album { Title = "X&Y", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Coldplay"], AlbumArtUrl = imgUrl }, - new Album { Title = "Xinti", Genre = genres["World"], Price = 8.99M, Artist = artists["Sara Tavares"], AlbumArtUrl = imgUrl }, - new Album { Title = "Yano", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Yano"], AlbumArtUrl = imgUrl }, - new Album { Title = "Yesterday Once More Disc 1/Disc 2", Genre = genres["Pop"], Price = 8.99M, Artist = artists["The Carpenters"], AlbumArtUrl = imgUrl }, - new Album { Title = "Zooropa", Genre = genres["Rock"], Price = 8.99M, Artist = artists["U2"], AlbumArtUrl = imgUrl }, - new Album { Title = "Zoso", Genre = genres["Rock"], Price = 8.99M, Artist = artists["Led Zeppelin"], AlbumArtUrl = imgUrl }, - }; - - foreach (var album in albums) - { - album.ArtistId = album.Artist.ArtistId; - album.GenreId = album.Genre.GenreId; - } - - return albums; - } - - private static Dictionary artists; - public static Dictionary Artists - { - get - { - if (artists == null) - { - var artistsList = new Artist[] - { - new Artist { Name = "65daysofstatic" }, - new Artist { Name = "Aaron Goldberg" }, - new Artist { Name = "Above & Beyond" }, - new Artist { Name = "Above the Fold" }, - new Artist { Name = "AC/DC" }, - new Artist { Name = "Accept" }, - new Artist { Name = "Adicts" }, - new Artist { Name = "Adrian Leaper & Doreen de Feis" }, - new Artist { Name = "Aerosmith" }, - new Artist { Name = "Aisha Duo" }, - new Artist { Name = "Al di Meola" }, - new Artist { Name = "Alabama Shakes" }, - new Artist { Name = "Alanis Morissette" }, - new Artist { Name = "Alberto Turco & Nova Schola Gregoriana" }, - new Artist { Name = "Alice in Chains" }, - new Artist { Name = "Alison Krauss" }, - new Artist { Name = "Amon Amarth" }, - new Artist { Name = "Amon Tobin" }, - new Artist { Name = "Amr Diab" }, - new Artist { Name = "Amy Winehouse" }, - new Artist { Name = "Anita Ward" }, - new Artist { Name = "Anthrax" }, - new Artist { Name = "Antônio Carlos Jobim" }, - new Artist { Name = "Apocalyptica" }, - new Artist { Name = "Aqua" }, - new Artist { Name = "Armand Van Helden" }, - new Artist { Name = "Arcade Fire" }, - new Artist { Name = "Audioslave" }, - new Artist { Name = "Bad Religion" }, - new Artist { Name = "Barenaked Ladies" }, - new Artist { Name = "BBC Concert Orchestra" }, - new Artist { Name = "Bee Gees" }, - new Artist { Name = "Before the Dawn" }, - new Artist { Name = "Berliner Philharmoniker" }, - new Artist { Name = "Billy Cobham" }, - new Artist { Name = "Black Label Society" }, - new Artist { Name = "Black Sabbath" }, - new Artist { Name = "BLØF" }, - new Artist { Name = "Blues Traveler" }, - new Artist { Name = "Boston Symphony Orchestra & Seiji Ozawa" }, - new Artist { Name = "Britten Sinfonia, Ivor Bolton & Lesley Garrett" }, - new Artist { Name = "Bruce Dickinson" }, - new Artist { Name = "Buddy Guy" }, - new Artist { Name = "Burial" }, - new Artist { Name = "Butch Walker & The Black Widows" }, - new Artist { Name = "Caetano Veloso" }, - new Artist { Name = "Cake" }, - new Artist { Name = "Calexico" }, - new Artist { Name = "Carly Rae Jepsen" }, - new Artist { Name = "Carreras, Pavarotti, Domingo" }, - new Artist { Name = "Cássia Eller" }, - new Artist { Name = "Cayouche" }, - new Artist { Name = "Chic" }, - new Artist { Name = "Chicago " }, - new Artist { Name = "Chicago Symphony Orchestra & Fritz Reiner" }, - new Artist { Name = "Chico Buarque" }, - new Artist { Name = "Chico Science & Nação Zumbi" }, - new Artist { Name = "Choir Of Westminster Abbey & Simon Preston" }, - new Artist { Name = "Chris Cornell" }, - new Artist { Name = "Christopher O'Riley" }, - new Artist { Name = "Cidade Negra" }, - new Artist { Name = "Cláudio Zoli" }, - new Artist { Name = "Coldplay" }, - new Artist { Name = "Creedence Clearwater Revival" }, - new Artist { Name = "Crosby, Stills, Nash, and Young" }, - new Artist { Name = "Daft Punk" }, - new Artist { Name = "Danielson Famile" }, - new Artist { Name = "David Bowie" }, - new Artist { Name = "David Coverdale" }, - new Artist { Name = "David Guetta" }, - new Artist { Name = "deadmau5" }, - new Artist { Name = "Deep Purple" }, - new Artist { Name = "Def Leppard" }, - new Artist { Name = "Deftones" }, - new Artist { Name = "Dennis Chambers" }, - new Artist { Name = "Deva Premal" }, - new Artist { Name = "Dio" }, - new Artist { Name = "Djavan" }, - new Artist { Name = "Dolly Parton" }, - new Artist { Name = "Donna Summer" }, - new Artist { Name = "Dr. Dre" }, - new Artist { Name = "Dread Zeppelin" }, - new Artist { Name = "Dream Theater" }, - new Artist { Name = "Duck Sauce" }, - new Artist { Name = "Earl Scruggs" }, - new Artist { Name = "Ed Motta" }, - new Artist { Name = "Edo de Waart & San Francisco Symphony" }, - new Artist { Name = "Elis Regina" }, - new Artist { Name = "Eminem" }, - new Artist { Name = "English Concert & Trevor Pinnock" }, - new Artist { Name = "Enya" }, - new Artist { Name = "Epica" }, - new Artist { Name = "Eric B. and Rakim" }, - new Artist { Name = "Eric Clapton" }, - new Artist { Name = "Eugene Ormandy" }, - new Artist { Name = "Faith No More" }, - new Artist { Name = "Falamansa" }, - new Artist { Name = "Filter" }, - new Artist { Name = "Foo Fighters" }, - new Artist { Name = "Four Tet" }, - new Artist { Name = "Frank Zappa & Captain Beefheart" }, - new Artist { Name = "Fretwork" }, - new Artist { Name = "Funk Como Le Gusta" }, - new Artist { Name = "Garbage" }, - new Artist { Name = "Gerald Moore" }, - new Artist { Name = "Gilberto Gil" }, - new Artist { Name = "Godsmack" }, - new Artist { Name = "Gonzaguinha" }, - new Artist { Name = "Göteborgs Symfoniker & Neeme Järvi" }, - new Artist { Name = "Guns N' Roses" }, - new Artist { Name = "Gustav Mahler" }, - new Artist { Name = "In This Moment" }, - new Artist { Name = "Incognito" }, - new Artist { Name = "INXS" }, - new Artist { Name = "Iron Maiden" }, - new Artist { Name = "Jagjit Singh" }, - new Artist { Name = "James Levine" }, - new Artist { Name = "Jamiroquai" }, - new Artist { Name = "Jimi Hendrix" }, - new Artist { Name = "Jimmy Buffett" }, - new Artist { Name = "Jimmy Smith" }, - new Artist { Name = "Joe Satriani" }, - new Artist { Name = "John Digweed" }, - new Artist { Name = "John Mayer" }, - new Artist { Name = "Jorge Ben" }, - new Artist { Name = "Jota Quest" }, - new Artist { Name = "Journey" }, - new Artist { Name = "Judas Priest" }, - new Artist { Name = "Julian Bream" }, - new Artist { Name = "Justice" }, - new Artist { Name = "Orchestre de l'Opéra de Lyon" }, - new Artist { Name = "King Crimson" }, - new Artist { Name = "Kiss" }, - new Artist { Name = "LCD Soundsystem" }, - new Artist { Name = "Le Tigre" }, - new Artist { Name = "Led Zeppelin" }, - new Artist { Name = "Legião Urbana" }, - new Artist { Name = "Lenny Kravitz" }, - new Artist { Name = "Les Arts Florissants & William Christie" }, - new Artist { Name = "Limp Bizkit" }, - new Artist { Name = "Linkin Park" }, - new Artist { Name = "Live" }, - new Artist { Name = "Lokua Kanza" }, - new Artist { Name = "London Symphony Orchestra" }, - new Artist { Name = "Los Tigres del Norte" }, - new Artist { Name = "Luciana Souza/Romero Lubambo" }, - new Artist { Name = "Lulu Santos" }, - new Artist { Name = "Lura" }, - new Artist { Name = "Marcos Valle" }, - new Artist { Name = "Marillion" }, - new Artist { Name = "Marisa Monte" }, - new Artist { Name = "Mark Knopfler" }, - new Artist { Name = "Martin Roscoe" }, - new Artist { Name = "Massive Attack" }, - new Artist { Name = "Maurizio Pollini" }, - new Artist { Name = "Megadeth" }, - new Artist { Name = "Mela Tenenbaum, Pro Musica Prague & Richard Kapp" }, - new Artist { Name = "Melanie Fiona" }, - new Artist { Name = "Men At Work" }, - new Artist { Name = "Metallica" }, - new Artist { Name = "M-Flo" }, - new Artist { Name = "Michael Bolton" }, - new Artist { Name = "Michael Tilson Thomas" }, - new Artist { Name = "Miles Davis" }, - new Artist { Name = "Milton Nascimento" }, - new Artist { Name = "Mobile" }, - new Artist { Name = "Modest Mouse" }, - new Artist { Name = "Mötley Crüe" }, - new Artist { Name = "Motörhead" }, - new Artist { Name = "Mumford & Sons" }, - new Artist { Name = "Munkle" }, - new Artist { Name = "Nash Ensemble" }, - new Artist { Name = "Neil Young" }, - new Artist { Name = "New York Dolls" }, - new Artist { Name = "Nick Cave and the Bad Seeds" }, - new Artist { Name = "Nicolaus Esterhazy Sinfonia" }, - new Artist { Name = "Nine Inch Nails" }, - new Artist { Name = "Nirvana" }, - new Artist { Name = "Norah Jones" }, - new Artist { Name = "Nujabes" }, - new Artist { Name = "O Terço" }, - new Artist { Name = "Oasis" }, - new Artist { Name = "Olodum" }, - new Artist { Name = "Opeth" }, - new Artist { Name = "Orchestra of The Age of Enlightenment" }, - new Artist { Name = "Os Paralamas Do Sucesso" }, - new Artist { Name = "Ozzy Osbourne" }, - new Artist { Name = "Paddy Casey" }, - new Artist { Name = "Page & Plant" }, - new Artist { Name = "Papa Wemba" }, - new Artist { Name = "Paul D'Ianno" }, - new Artist { Name = "Paul Oakenfold" }, - new Artist { Name = "Paul Van Dyk" }, - new Artist { Name = "Pearl Jam" }, - new Artist { Name = "Pet Shop Boys" }, - new Artist { Name = "Pink Floyd" }, - new Artist { Name = "Plug" }, - new Artist { Name = "Porcupine Tree" }, - new Artist { Name = "Portishead" }, - new Artist { Name = "Prince" }, - new Artist { Name = "Projected" }, - new Artist { Name = "PSY" }, - new Artist { Name = "Public Enemy" }, - new Artist { Name = "Queen" }, - new Artist { Name = "Queensrÿche" }, - new Artist { Name = "R.E.M." }, - new Artist { Name = "Radiohead" }, - new Artist { Name = "Rancid" }, - new Artist { Name = "Raul Seixas" }, - new Artist { Name = "Raunchy" }, - new Artist { Name = "Red Hot Chili Peppers" }, - new Artist { Name = "Rick Ross" }, - new Artist { Name = "Robert James" }, - new Artist { Name = "London Classical Players" }, - new Artist { Name = "Royal Philharmonic Orchestra" }, - new Artist { Name = "Run DMC" }, - new Artist { Name = "Rush" }, - new Artist { Name = "Santana" }, - new Artist { Name = "Sara Tavares" }, - new Artist { Name = "Sarah Brightman" }, - new Artist { Name = "Sasha" }, - new Artist { Name = "Scholars Baroque Ensemble" }, - new Artist { Name = "Scorpions" }, - new Artist { Name = "Sergei Prokofiev & Yuri Temirkanov" }, - new Artist { Name = "Sheryl Crow" }, - new Artist { Name = "Sir Georg Solti & Wiener Philharmoniker" }, - new Artist { Name = "Skank" }, - new Artist { Name = "Skrillex" }, - new Artist { Name = "Slash" }, - new Artist { Name = "Slayer" }, - new Artist { Name = "Soul-Junk" }, - new Artist { Name = "Soundgarden" }, - new Artist { Name = "Spyro Gyra" }, - new Artist { Name = "Stevie Ray Vaughan & Double Trouble" }, - new Artist { Name = "Stevie Ray Vaughan" }, - new Artist { Name = "Sting" }, - new Artist { Name = "Stone Temple Pilots" }, - new Artist { Name = "Styx" }, - new Artist { Name = "Sufjan Stevens" }, - new Artist { Name = "Supreme Beings of Leisure" }, - new Artist { Name = "System Of A Down" }, - new Artist { Name = "T&N" }, - new Artist { Name = "Talking Heads" }, - new Artist { Name = "Tears For Fears" }, - new Artist { Name = "Ted Nugent" }, - new Artist { Name = "Temple of the Dog" }, - new Artist { Name = "Terry Bozzio, Tony Levin & Steve Stevens" }, - new Artist { Name = "The 12 Cellists of The Berlin Philharmonic" }, - new Artist { Name = "The Axis of Awesome" }, - new Artist { Name = "The Beatles" }, - new Artist { Name = "The Black Crowes" }, - new Artist { Name = "The Black Keys" }, - new Artist { Name = "The Carpenters" }, - new Artist { Name = "The Cat Empire" }, - new Artist { Name = "The Cult" }, - new Artist { Name = "The Cure" }, - new Artist { Name = "The Decemberists" }, - new Artist { Name = "The Doors" }, - new Artist { Name = "The Eagles of Death Metal" }, - new Artist { Name = "The Go! Team" }, - new Artist { Name = "The Head and the Heart" }, - new Artist { Name = "The Jezabels" }, - new Artist { Name = "The King's Singers" }, - new Artist { Name = "The Lumineers" }, - new Artist { Name = "The Offspring" }, - new Artist { Name = "The Police" }, - new Artist { Name = "The Posies" }, - new Artist { Name = "The Prodigy" }, - new Artist { Name = "The Rolling Stones" }, - new Artist { Name = "The Rubberbandits" }, - new Artist { Name = "The Smashing Pumpkins" }, - new Artist { Name = "The Stone Roses" }, - new Artist { Name = "The Who" }, - new Artist { Name = "Them Crooked Vultures" }, - new Artist { Name = "TheStart" }, - new Artist { Name = "Thievery Corporation" }, - new Artist { Name = "Tiësto" }, - new Artist { Name = "Tim Maia" }, - new Artist { Name = "Ton Koopman" }, - new Artist { Name = "Tool" }, - new Artist { Name = "Tori Amos" }, - new Artist { Name = "Trampled By Turtles" }, - new Artist { Name = "Trans-Siberian Orchestra" }, - new Artist { Name = "Tygers of Pan Tang" }, - new Artist { Name = "U2" }, - new Artist { Name = "UB40" }, - new Artist { Name = "Uh Huh Her " }, - new Artist { Name = "Van Halen" }, - new Artist { Name = "Various Artists" }, - new Artist { Name = "Velvet Revolver" }, - new Artist { Name = "Venus Hum" }, - new Artist { Name = "Vicente Fernandez" }, - new Artist { Name = "Vinícius De Moraes" }, - new Artist { Name = "Weezer" }, - new Artist { Name = "Weird Al" }, - new Artist { Name = "Wendy Carlos" }, - new Artist { Name = "Wilhelm Kempff" }, - new Artist { Name = "Yano" }, - new Artist { Name = "Yehudi Menuhin" }, - new Artist { Name = "Yes" }, - new Artist { Name = "Yo-Yo Ma" }, - new Artist { Name = "Zeca Pagodinho" }, - new Artist { Name = "אריק אינשטיין"} - }; - - // TODO [EF] Swap to store generated keys when available - int artistId = 1; - artists = new Dictionary(); - foreach (Artist artist in artistsList) - { - artist.ArtistId = artistId++; - artists.Add(artist.Name, artist); - } - } - - return artists; - } - } - - private static Dictionary genres; - public static Dictionary Genres - { - get - { - if (genres == null) - { - var genresList = new Genre[] - { - new Genre { Name = "Pop" }, - new Genre { Name = "Rock" }, - new Genre { Name = "Jazz" }, - new Genre { Name = "Metal" }, - new Genre { Name = "Electronic" }, - new Genre { Name = "Blues" }, - new Genre { Name = "Latin" }, - new Genre { Name = "Rap" }, - new Genre { Name = "Classical" }, - new Genre { Name = "Alternative" }, - new Genre { Name = "Country" }, - new Genre { Name = "R&B" }, - new Genre { Name = "Indie" }, - new Genre { Name = "Punk" }, - new Genre { Name = "World" } - }; - - genres = new Dictionary(); - // TODO [EF] Swap to store generated keys when available - int genreId = 1; - foreach (Genre genre in genresList) - { - genre.GenreId = genreId++; - - // TODO [EF] Remove when null values are supported by update pipeline - genre.Description = genre.Name + " is great music (if you like it)."; - - genres.Add(genre.Name, genre); - } - } - - return genres; - } - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Models/ShoppingCart.cs b/src/MusicStore.Spa/Models/ShoppingCart.cs deleted file mode 100644 index 41b327746f..0000000000 --- a/src/MusicStore.Spa/Models/ShoppingCart.cs +++ /dev/null @@ -1,207 +0,0 @@ -using Microsoft.AspNet.Http; -using Microsoft.Data.Entity; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace MusicStore.Models -{ - public partial class ShoppingCart - { - MusicStoreContext _db; - string ShoppingCartId { get; set; } - - public ShoppingCart(MusicStoreContext db) - { - _db = db; - } - - public static ShoppingCart GetCart(MusicStoreContext db, HttpContext context) - { - var cart = new ShoppingCart(db); - cart.ShoppingCartId = cart.GetCartId(context); - return cart; - } - - public void AddToCart(Album album) - { - // Get the matching cart and album instances - var cartItem = _db.CartItems.SingleOrDefault( - c => c.CartId == ShoppingCartId - && c.AlbumId == album.AlbumId); - - if (cartItem == null) - { - // TODO [EF] Swap to store generated key once we support identity pattern - var nextCartItemId = _db.CartItems.Any() - ? _db.CartItems.Max(c => c.CartItemId) + 1 - : 1; - - // Create a new cart item if no cart item exists - cartItem = new CartItem - { - CartItemId = nextCartItemId, - AlbumId = album.AlbumId, - CartId = ShoppingCartId, - Count = 1, - DateCreated = DateTime.Now - }; - - _db.CartItems.Add(cartItem); - } - else - { - // If the item does exist in the cart, then add one to the quantity - cartItem.Count++; - - // TODO [EF] Remove this line once change detection is available - _db.Update(cartItem); - } - } - - public int RemoveFromCart(int id) - { - // Get the cart - var cartItem = _db.CartItems.Single( - cart => cart.CartId == ShoppingCartId - && cart.CartItemId == id); - - int itemCount = 0; - - if (cartItem != null) - { - if (cartItem.Count > 1) - { - cartItem.Count--; - - // TODO [EF] Remove this line once change detection is available - _db.Update(cartItem); - - itemCount = cartItem.Count; - } - else - { - _db.CartItems.Remove(cartItem); - } - } - - return itemCount; - } - - public void EmptyCart() - { - var cartItems = _db.CartItems.Where(cart => cart.CartId == ShoppingCartId); - - foreach (var cartItem in cartItems) - { - _db.Remove(cartItem); - } - } - - public List GetCartItems() - { - var cartItems = _db.CartItems.Where(cart => cart.CartId == ShoppingCartId).ToList(); - //TODO: Auto population of the related album data not available until EF feature is lighted up. - foreach (var cartItem in cartItems) - { - cartItem.Album = _db.Albums.Single(a => a.AlbumId == cartItem.AlbumId); - } - - return cartItems; - } - - public int GetCount() - { - // Get the count of each item in the cart and sum them up - int? count = (from cartItems in _db.CartItems - where cartItems.CartId == ShoppingCartId - select (int?)cartItems.Count).Sum(); - - // Return 0 if all entries are null - return count ?? 0; - } - - public decimal GetTotal() - { - // Multiply album price by count of that album to get - // the current price for each of those albums in the cart - // sum all album price totals to get the cart total - - // TODO Collapse to a single query once EF supports querying related data - decimal total = 0; - foreach (var item in _db.CartItems.Where(c => c.CartId == ShoppingCartId)) - { - var album = _db.Albums.Single(a => a.AlbumId == item.AlbumId); - total += item.Count * album.Price; - } - - return total; - } - - public int CreateOrder(Order order) - { - decimal orderTotal = 0; - - var cartItems = GetCartItems(); - - // TODO [EF] Swap to store generated identity key when supported - var nextId = _db.OrderDetails.Any() - ? _db.OrderDetails.Max(o => o.OrderDetailId) + 1 - : 1; - - // Iterate over the items in the cart, adding the order details for each - foreach (var item in cartItems) - { - //var album = _db.Albums.Find(item.AlbumId); - var album = _db.Albums.Single(a => a.AlbumId == item.AlbumId); - - var orderDetail = new OrderDetail - { - OrderDetailId = nextId, - AlbumId = item.AlbumId, - OrderId = order.OrderId, - UnitPrice = album.Price, - Quantity = item.Count, - }; - - // Set the order total of the shopping cart - orderTotal += (item.Count * album.Price); - - _db.OrderDetails.Add(orderDetail); - - nextId++; - } - - // Set the order's total to the orderTotal count - order.Total = orderTotal; - - // Empty the shopping cart - EmptyCart(); - - // Return the OrderId as the confirmation number - return order.OrderId; - } - - // We're using HttpContextBase to allow access to cookies. - public string GetCartId(HttpContext context) - { - var sessionCookie = context.Request.Cookies["Session"]; - string cartId = null; - - if (string.IsNullOrWhiteSpace(sessionCookie)) - { - //A GUID to hold the cartId. - cartId = Guid.NewGuid().ToString(); - - // Send cart Id as a cookie to the client. - context.Response.Cookies.Append("Session", cartId); - } - else - { - cartId = sessionCookie; - } - - return cartId; - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/MusicStore.Spa.xproj b/src/MusicStore.Spa/MusicStore.Spa.xproj deleted file mode 100644 index ceeb8a3678..0000000000 --- a/src/MusicStore.Spa/MusicStore.Spa.xproj +++ /dev/null @@ -1,19 +0,0 @@ - - - - 14.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - - - - 93891170-a8d5-46fd-a291-40f90cf258c2 - ..\..\artifacts\obj\$(MSBuildProjectName) - ..\..\artifacts\bin\$(MSBuildProjectName)\ - - - 2.0 - 1575 - True - - - \ No newline at end of file diff --git a/src/MusicStore.Spa/Pages/Admin.cshtml b/src/MusicStore.Spa/Pages/Admin.cshtml deleted file mode 100644 index 811672efc3..0000000000 --- a/src/MusicStore.Spa/Pages/Admin.cshtml +++ /dev/null @@ -1,25 +0,0 @@ -@model IEnumerable - -@{ - ViewBag.Title = "Store Manager"; - ViewBag.ngApp = "MusicStore.Admin"; - Layout = "/Views/Shared/_Layout.cshtml"; -} - -

Store Manager

- -
- -@*@Html.InlineData("Lookup", "ArtistsApi")*@ -@*@Html.InlineData("Lookup", "GenresApi")*@ - -@section Scripts { - - - - -@* TODO: This is currently all the compiled TypeScript, non-minified. Need to explore options - for alternate loading schemes, e.g. AMD loader of individual modules, min vs. non-min, etc. *@ - - -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Pages/Home.cshtml b/src/MusicStore.Spa/Pages/Home.cshtml deleted file mode 100644 index e72f1edc04..0000000000 --- a/src/MusicStore.Spa/Pages/Home.cshtml +++ /dev/null @@ -1,26 +0,0 @@ -@{ - ViewBag.Title = "Home Page"; - ViewBag.ngApp = "MusicStore.Store"; - Layout = "/Views/Shared/_Layout.cshtml"; -} - -@section NavBarItems { - -
  • -@*@Html.InlineData("GenreMenuList", "GenresApi")*@ - -} - -
    - -@*@Html.InlineData("MostPopular", "AlbumsApi")*@ - -@section Scripts { - - - -@* TODO: This is currently all the compiled TypeScript, non-minified. Need to explore options - for alternate loading schemes, e.g. AMD loader of individual modules, min vs. non-min, etc. *@ - - -} \ No newline at end of file diff --git a/src/MusicStore.Spa/SiteSettings.cs b/src/MusicStore.Spa/SiteSettings.cs deleted file mode 100644 index bf9d3ad286..0000000000 --- a/src/MusicStore.Spa/SiteSettings.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; - -namespace MusicStore.Spa -{ - public class SiteSettings - { - public string DefaultAdminUsername { get; set; } - public string DefaultAdminPassword { get; set; } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Startup.cs b/src/MusicStore.Spa/Startup.cs deleted file mode 100644 index 2b58654259..0000000000 --- a/src/MusicStore.Spa/Startup.cs +++ /dev/null @@ -1,86 +0,0 @@ -using AutoMapper; -using Microsoft.AspNet.Authorization; -using Microsoft.AspNet.Builder; -using Microsoft.AspNet.Identity.EntityFramework; -using Microsoft.Data.Entity; -using Microsoft.Framework.Configuration; -using Microsoft.Framework.DependencyInjection; -using Microsoft.Dnx.Runtime; -using MusicStore.Apis; -using MusicStore.Models; - -namespace MusicStore.Spa -{ - public class Startup - { - public Startup(IApplicationEnvironment env) - { - var builder = new ConfigurationBuilder(env.ApplicationBasePath) - .AddJsonFile("Config.json") - .AddEnvironmentVariables(); - Configuration = builder.Build(); - } - - public Microsoft.Framework.Configuration.IConfiguration Configuration { get; set; } - - public void ConfigureServices(IServiceCollection services) - { - services.Configure(settings => - { - settings.DefaultAdminUsername = Configuration["DefaultAdminUsername"]; - settings.DefaultAdminPassword = Configuration["DefaultAdminPassword"]; - }); - - // Add MVC services to the service container - services.AddMvc(); - - // Add EF services to the service container - services.AddEntityFramework() - .AddSqlServer() - .AddDbContext(options => - { - options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]); - }); - - // Add Identity services to the services container - services.AddIdentity() - .AddEntityFrameworkStores() - .AddDefaultTokenProviders(); - - // Add application services to the service container - //services.AddTransient(); - - // Configure Auth - services.Configure(options => - { - options.AddPolicy("app-ManageStore", new AuthorizationPolicyBuilder().RequireClaim("app-ManageStore", "Allowed").Build()); - }); - - Mapper.CreateMap(); - Mapper.CreateMap(); - Mapper.CreateMap(); - Mapper.CreateMap(); - Mapper.CreateMap(); - Mapper.CreateMap(); - Mapper.CreateMap(); - Mapper.CreateMap(); - } - - public void Configure(IApplicationBuilder app) - { - // Initialize the sample data - SampleData.InitializeMusicStoreDatabaseAsync(app.ApplicationServices).Wait(); - - // Configure the HTTP request pipeline - - // Add cookie auth - app.UseIdentity(); - - // Add static files - app.UseStaticFiles(); - - // Add MVC - app.UseMvc(); - } - } -} diff --git a/src/MusicStore.Spa/Views/Account/Login.cshtml b/src/MusicStore.Spa/Views/Account/Login.cshtml deleted file mode 100644 index c66d058249..0000000000 --- a/src/MusicStore.Spa/Views/Account/Login.cshtml +++ /dev/null @@ -1,104 +0,0 @@ -@model MusicStore.Models.LoginViewModel - -@{ - //TODO: Until we have a way to specify the layout page at application level. - Layout = "/Views/Shared/_Layout.cshtml"; - ViewBag.Title = "Log in"; - ViewBag.ngApp = "MusicStore.Store"; -} - -@section NavBarItems { - -
  • - @*@Html.InlineData("GenreMenuList", "GenresApi")*@ - -} - -

    @ViewBag.Title.

    - -
    -
    -
    - @using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, - new { - @class = "form-horizontal", - role = "form", - novalidate = "", - name = "login", - app_prevent_submit = "login.$invalid", - ng_submit = "login.submitAttempted=true" - })) - { - @Html.AntiForgeryToken() -

    Use a local account to log in.

    -
    - @Html.ValidationSummary(true) - -
    - @Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" }) -
    -
    -
    - @Html.ngTextBoxFor(m => m.UserName, new { @class = "form-control" }) -
    -
    - @Html.ngValidationMessageFor(m => m.UserName, "login", new { @class = "help-block field-validation-error" }) -
    -
    - - @* What this might look like using Tag Helpers: - <@div class="form-group" validation-for="UserName" validation-form-name="login" validation-class="has-error"> - <@label for="UserName" class="col-md-2 control-label"> -
    - <@input for="UserName" class="form-control" /> - <@span validation-for="UserName" validation-form-name="login" class="field-validation-error"> -
    - - *@ - -
    - @Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" }) -
    -
    -
    - @Html.ngPasswordFor(m => m.Password, new { @class = "form-control" }) -
    -
    - @Html.ngValidationMessageFor(m => m.Password, "login", new { @class = "help-block field-validation-error" }) -
    -
    - -
    -
    -
    - @Html.CheckBoxFor(m => m.RememberMe) - @Html.LabelFor(m => m.RememberMe) -
    -
    -
    - -
    -
    - -
    -
    - -

    - @Html.ActionLink("Register", "Register") if you don't have a local account. -

    - } -
    -
    -
    - -@section Scripts { - @*TODO : Until script helpers are available, adding script references manually*@ - @*@Scripts.Render("~/bundles/jqueryval")*@ - @* - *@ - - -@* TODO: This is currently all the compiled TypeScript, non-minified. Need to explore options - for alternate loading schemes, e.g. AMD loader of individual modules, min vs. non-min, etc. *@ - -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Views/Account/Manage.cshtml b/src/MusicStore.Spa/Views/Account/Manage.cshtml deleted file mode 100644 index 0f89881bec..0000000000 --- a/src/MusicStore.Spa/Views/Account/Manage.cshtml +++ /dev/null @@ -1,24 +0,0 @@ -@{ - //TODO: Until we have a way to specify the layout page at application level. - Layout = "/Views/Shared/_Layout.cshtml"; - ViewBag.Title = "Manage Account"; - ViewBag.ngApp = "MusicStore.Store"; -} - -

    @ViewBag.Title.

    - -

    @ViewBag.StatusMessage

    - -
    -
    - @await Html.PartialAsync("_ChangePasswordPartial") -
    -
    - -@section Scripts { - - - @* TODO: This is currently all the compiled TypeScript, non-minified. Need to explore options - for alternate loading schemes, e.g. AMD loader of individual modules, min vs. non-min, etc. *@ - -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Views/Account/Register.cshtml b/src/MusicStore.Spa/Views/Account/Register.cshtml deleted file mode 100644 index b6a0891300..0000000000 --- a/src/MusicStore.Spa/Views/Account/Register.cshtml +++ /dev/null @@ -1,46 +0,0 @@ -@model MusicStore.Models.RegisterViewModel -@{ - //TODO: Until we have a way to specify the layout page at application level. - Layout = "/Views/Shared/_Layout.cshtml"; - ViewBag.Title = "Register"; -} - -

    @ViewBag.Title.

    - -@using (Html.BeginForm("Register", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) -{ - @Html.AntiForgeryToken() -

    Create a new account.

    -
    - @Html.ValidationSummary() -
    - @Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" }) -
    - @Html.TextBoxFor(m => m.UserName, new { @class = "form-control" }) -
    -
    -
    - @Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" }) -
    - @Html.PasswordFor(m => m.Password, new { @class = "form-control" }) -
    -
    -
    - @Html.LabelFor(m => m.ConfirmPassword, new { @class = "col-md-2 control-label" }) -
    - @Html.PasswordFor(m => m.ConfirmPassword, new { @class = "form-control" }) -
    -
    -
    -
    - -
    -
    -} - -@section Scripts { - @*TODO : Until script helpers are available, adding script references manually*@ - @*@Scripts.Render("~/bundles/jqueryval")*@ - - -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Views/Account/_ChangePasswordPartial.cshtml b/src/MusicStore.Spa/Views/Account/_ChangePasswordPartial.cshtml deleted file mode 100644 index 0c9bff2daa..0000000000 --- a/src/MusicStore.Spa/Views/Account/_ChangePasswordPartial.cshtml +++ /dev/null @@ -1,59 +0,0 @@ -@using System.Security.Claims - -@model MusicStore.Models.ManageUserViewModel - -

    You're logged in as @User.GetUserName().

    - -@using (Html.BeginForm("Manage", "Account", FormMethod.Post, - new { @class = "form-horizontal", - role = "form", novalidate = "", name = "changePassword", - app_prevent_submit = "changePassword.$invalid", - ng_submit = "changePassword.submitAttempted=true" })) -{ - @Html.AntiForgeryToken() -

    Change Password

    -
    - @Html.ValidationSummary() - -
    - @Html.LabelFor(m => m.OldPassword, new { @class = "col-md-2 control-label" }) -
    -
    -
    - @Html.ngPasswordFor(m => m.OldPassword, new { @class = "form-control" }) -
    -
    - @Html.ngValidationMessageFor(m => m.OldPassword, "changePassword", new { @class = "help-block field-validation-error" }) -
    -
    - -
    - @Html.LabelFor(m => m.NewPassword, new { @class = "col-md-2 control-label" }) -
    -
    -
    - @Html.ngPasswordFor(m => m.NewPassword, new { @class = "form-control" }) -
    -
    - @Html.ngValidationMessageFor(m => m.NewPassword, "changePassword", new { @class = "help-block field-validation-error" }) -
    -
    - -
    - @Html.LabelFor(m => m.ConfirmPassword, new { @class = "col-md-2 control-label" }) -
    -
    -
    - @Html.ngPasswordFor(m => m.ConfirmPassword, new { @class = "form-control" }) -
    -
    - @Html.ngValidationMessageFor(m => m.ConfirmPassword, "changePassword", new { @class = "help-block field-validation-error" }) -
    -
    - -
    -
    - -
    -
    -} \ No newline at end of file diff --git a/src/MusicStore.Spa/Views/Shared/_Layout.cshtml b/src/MusicStore.Spa/Views/Shared/_Layout.cshtml deleted file mode 100644 index 6d0b2240ce..0000000000 --- a/src/MusicStore.Spa/Views/Shared/_Layout.cshtml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - @ViewBag.Title – MVC Music Store - - - - - - -
    - @RenderBody() -
    - -
    - - @* TODO: Need to figure out best way to switch these to min links for release, e.g. new helper, - Grunt task to replace, CDN support, etc. *@ - - @**@ - - - @RenderSection("scripts", required: false) - - diff --git a/src/MusicStore.Spa/Views/Shared/_LoginPartial.cshtml b/src/MusicStore.Spa/Views/Shared/_LoginPartial.cshtml deleted file mode 100644 index 08100e9570..0000000000 --- a/src/MusicStore.Spa/Views/Shared/_LoginPartial.cshtml +++ /dev/null @@ -1,50 +0,0 @@ -@using System.Security.Principal -@using System.Security.Claims -@using Microsoft.AspNet.Identity - -@{ - //Func js = input => Html.Raw(HttpUtility.JavaScriptStringEncode(input, false)); -} - -@if (User.IsSignedIn()) -{ - using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" })) - { - @Html.AntiForgeryToken() - - - - @Html.Json(new { - isAuthenticated = true, - userName = User.GetUserName(), - userId = User.GetUserId(), - roles = ((ClaimsPrincipal)User).Claims - .Where(c => c.Type == ClaimTypes.Role) - .Select(role => role.Value), - claims = ((ClaimsPrincipal)User).Claims - .Where(c => c.Type.StartsWith("app-", StringComparison.OrdinalIgnoreCase)) - .Select(role => new { role.Type, role.Value }) - }, - new { id = "userDetails" }) - } -} -else -{ - - - @Html.Json(new { - isAuthenticated = false, - userName = (string)null, - userId = (string)null, - roles = Enumerable.Empty() - }, - new { id = "userDetails" }) -} diff --git a/src/MusicStore.Spa/bower.json b/src/MusicStore.Spa/bower.json deleted file mode 100644 index f647c32c3a..0000000000 --- a/src/MusicStore.Spa/bower.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "MvcMusicStore", - "version": "0.0.0", - "private": true, - "dependencies": { - "bootstrap": "~3.2.0", - "jquery-validation": "~1.13.1", - "jquery": "~2.1.1", - "modernizr": "~2.7.1", - "respond": "~1.4.2", - "angular": "~1.3.3", - "angular-route": "~1.3.3", - "angular-bootstrap": "~0.12.0" - }, - "devDependencies": { - "dt-angular": "~1.2.16", - "dt-angular-ui-bootstrap": "*", - "dt-jquery": "~2.0.0" - }, - "exportsOverride": { - "bootstrap": { - "js": "dist/js/*.*", - "css": "dist/css/*.*", - "fonts": "dist/fonts/*.*" - }, - "/jquery/": { - "": "dist/*.*" - }, - "/angular/": { - "": "*.{js,map}" - }, - "modernizr": { - "": "modernizr.js" - }, - "respond": { - "": "dest/*.*" - }, - "dt-*": {} - }, - "resolutions": { - "angular": "~1.3.3" - } -} diff --git a/src/MusicStore.Spa/compiler/preprocess/RazorPreCompilation.cs b/src/MusicStore.Spa/compiler/preprocess/RazorPreCompilation.cs deleted file mode 100644 index a2a30044d0..0000000000 --- a/src/MusicStore.Spa/compiler/preprocess/RazorPreCompilation.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using Microsoft.AspNet.Mvc.Razor.Precompilation; -using Microsoft.Dnx.Runtime; - -namespace MusicStore -{ - public class RazorPreCompilation : RazorPreCompileModule - { - public RazorPreCompilation(IApplicationEnvironment applicationEnvironment) - { - GenerateSymbols = string.Equals(applicationEnvironment.Configuration, - "debug", - StringComparison.OrdinalIgnoreCase); - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/grunt/clean.json b/src/MusicStore.Spa/grunt/clean.json deleted file mode 100644 index aa7a3d645d..0000000000 --- a/src/MusicStore.Spa/grunt/clean.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "options": { "force": true }, - "assets": [ "wwwroot/ng-apps" ], - "tsng": [ "ng-apps/**/*.ng.ts" ] -} \ No newline at end of file diff --git a/src/MusicStore.Spa/grunt/copy.json b/src/MusicStore.Spa/grunt/copy.json deleted file mode 100644 index 52b42187db..0000000000 --- a/src/MusicStore.Spa/grunt/copy.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "assets": { - "files": [ - { - "expand": true, - "cwd": "ng-apps/", - "src": [ - "<%= staticFilePattern %>" - ], - "dest": "wwwroot/ng-apps", - "options": { "force": true } - } - ] - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/grunt/less.json b/src/MusicStore.Spa/grunt/less.json deleted file mode 100644 index 7e4f6b6ddc..0000000000 --- a/src/MusicStore.Spa/grunt/less.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "dev": { - "options": { - "cleancss": false - }, - "files": { - "wwwroot/css/site.css": "wwwroot/**/*.less" - } - }, - "release": { - "options": { - "cleancss": true - }, - "files": { - "wwwroot/css/site.css": "wwwroot/**/*.less" - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/grunt/tslint.json b/src/MusicStore.Spa/grunt/tslint.json deleted file mode 100644 index d51452c566..0000000000 --- a/src/MusicStore.Spa/grunt/tslint.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "options": { - "configuration": { - "rules": { - "class-name": true, - "curly": true, - "eofline": false, - "forin": true, - "indent": [ true, 4 ], - "label-position": true, - "label-undefined": true, - "max-line-length": [ true, 140 ], - "no-arg": true, - "no-bitwise": true, - "no-console": [ - true, - "debug", - "info", - "time", - "timeEnd", - "trace" - ], - "no-construct": true, - "no-debugger": true, - "no-duplicate-key": true, - "no-duplicate-variable": true, - "no-empty": true, - "no-eval": true, - "no-string-literal": true, - "no-trailing-whitespace": true, - "no-unreachable": true, - "one-line": [ - true, - "check-open-brace", - "check-catch", - "check-else", - "check-whitespace" - ], - "quotemark": [ true, "double" ], - "radix": true, - "semicolon": true, - "triple-equals": [ true, "allow-null-check" ], - "variable-name": false, - "whitespace": [ - true, - "check-branch", - "check-decl", - "check-operator", - "check-separator", - "check-type" - ] - } - } - }, - "files": { - "src": [ "ng-apps/**/*.ts", "!**/*.ng.ts" ] - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/grunt/tsng.json b/src/MusicStore.Spa/grunt/tsng.json deleted file mode 100644 index 7b364a5479..0000000000 --- a/src/MusicStore.Spa/grunt/tsng.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "options": { - "extension": ".ng.ts" - }, - "dev": { - "files": [ - { - "src": [ "ng-apps/components/**/*.ts", "ng-apps/MusicStore.Store/**/*.ts", "!**/*.ng.ts" ], - "dest": "ng-apps" - }, - { - "src": ["ng-apps/components/**/*.ts", "ng-apps/MusicStore.Admin/**/*.ts", "!**/*.ng.ts"], - "dest": "ng-apps" - } - ] - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/grunt/typescript.json b/src/MusicStore.Spa/grunt/typescript.json deleted file mode 100644 index f8e5cb7fad..0000000000 --- a/src/MusicStore.Spa/grunt/typescript.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "options": { - "module": "amd", - "target": "es5", - "sourcemap": false - }, - "dev": { - "files": [ - { - "src": ["ng-apps/components/**/*.ng.ts", "ng-apps/MusicStore.Store/**/*.ng.ts"], - "dest": "wwwroot/js/MusicStore.Store.js" - }, - { - "src": ["ng-apps/components/**/*.ng.ts", "ng-apps/MusicStore.Admin/**/*.ng.ts"], - "dest": "wwwroot/js/MusicStore.Admin.js" - } - ] - }, - "release": { - "options": { - "sourcemap": true - }, - "files": "<%= typescript.dev.files %>" - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/grunt/uglify.json b/src/MusicStore.Spa/grunt/uglify.json deleted file mode 100644 index 5c6685ee2e..0000000000 --- a/src/MusicStore.Spa/grunt/uglify.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "options": { - "banner": "/*! <%= pkg.name %> <%= grunt.template.today('dd-mm-yyyy') %> */\n" - }, - "release": { - "files": { - "wwwroot/app.min.js": ["<%= typescript.dev.dest %>"] - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/grunt/watch.json b/src/MusicStore.Spa/grunt/watch.json deleted file mode 100644 index 3afad3dcf9..0000000000 --- a/src/MusicStore.Spa/grunt/watch.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "typescript": { - "files": ["ng-apps/**/*.ts", "!**/*.ng.ts"], - "tasks": ["ts"] - }, - "bower": { - "files": ["bower_components/**/*.*"], - "tasks": ["bower:install"] - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/MusicStore.Admin/Catalog/AlbumDeleteModal.cshtml b/src/MusicStore.Spa/ng-apps/MusicStore.Admin/Catalog/AlbumDeleteModal.cshtml deleted file mode 100644 index c33efb494e..0000000000 --- a/src/MusicStore.Spa/ng-apps/MusicStore.Admin/Catalog/AlbumDeleteModal.cshtml +++ /dev/null @@ -1,24 +0,0 @@ - - - \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/MusicStore.Admin/Catalog/AlbumDeleteModalController.ts b/src/MusicStore.Spa/ng-apps/MusicStore.Admin/Catalog/AlbumDeleteModalController.ts deleted file mode 100644 index 9e711d12af..0000000000 --- a/src/MusicStore.Spa/ng-apps/MusicStore.Admin/Catalog/AlbumDeleteModalController.ts +++ /dev/null @@ -1,30 +0,0 @@ -module MusicStore.Admin.Catalog { - export interface IAlbumDeleteModalViewModel { - album: Models.IAlbum; - ok(); - cancel(); - } - - // We don't register this controller with Angular's DI system because the $modal service - // will create and resolve its dependencies directly - - //@NgController(skip=true) - export class AlbumDeleteModalController implements IAlbumDeleteModalViewModel { - private _modalInstance: ng.ui.bootstrap.IModalServiceInstance; - - constructor($modalInstance: ng.ui.bootstrap.IModalServiceInstance, album: Models.IAlbum) { - this._modalInstance = $modalInstance; - this.album = album; - } - - public album: Models.IAlbum; - - public ok() { - this._modalInstance.close(true); - } - - public cancel() { - this._modalInstance.dismiss("cancel"); - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/MusicStore.Admin/Catalog/AlbumDetails.cshtml b/src/MusicStore.Spa/ng-apps/MusicStore.Admin/Catalog/AlbumDetails.cshtml deleted file mode 100644 index 3d2c960472..0000000000 --- a/src/MusicStore.Spa/ng-apps/MusicStore.Admin/Catalog/AlbumDetails.cshtml +++ /dev/null @@ -1,58 +0,0 @@ -@model MusicStore.Models.Album - -
    -

    Album Details

    -
    - -
    -
    - @Html.LabelFor(m => m.Artist, new { @class = "col-md-2 control-label" }) -
    -

    {{ viewModel.album.Artist.Name }}

    -
    -
    - -
    - @Html.LabelFor(m => m.Genre, new { @class = "col-md-2 control-label" }) -
    -

    {{ viewModel.album.Genre.Name }}

    -
    -
    - -
    - @Html.LabelFor(m => m.Title, new { @class = "col-md-2 control-label" }) -
    -

    {{ viewModel.album.Title }}

    -
    -
    - -
    - @Html.LabelFor(m => m.Price, new { @class = "col-md-2 control-label" }) -
    -

    {{ viewModel.album.Price | currency }}

    -
    -
    - -
    - @Html.LabelFor(m => m.AlbumArtUrl, new { @class = "col-md-2 control-label" }) -
    -

    {{ viewModel.album.AlbumArtUrl }}

    -
    -
    - -
    - -
    -

    Album Art

    -
    -
    - -
    -
    - Edit - - Back to List -
    -
    -
    -
    diff --git a/src/MusicStore.Spa/ng-apps/MusicStore.Admin/Catalog/AlbumDetailsController.ts b/src/MusicStore.Spa/ng-apps/MusicStore.Admin/Catalog/AlbumDetailsController.ts deleted file mode 100644 index 56543fa57c..0000000000 --- a/src/MusicStore.Spa/ng-apps/MusicStore.Admin/Catalog/AlbumDetailsController.ts +++ /dev/null @@ -1,58 +0,0 @@ -module MusicStore.Admin.Catalog { - interface IAlbumDetailsRouteParams extends ng.route.IRouteParamsService { - albumId: number; - } - - interface IAlbumDetailsViewModel { - album: Models.IAlbum; - deleteAlbum(); - } - - class AlbumDetailsController implements IAlbumDetailsViewModel { - private _modal: ng.ui.bootstrap.IModalService; - private _location: ng.ILocationService; - private _albumApi: AlbumApi.IAlbumApiService; - private _viewAlert: ViewAlert.IViewAlertService; - - constructor($routeParams: IAlbumDetailsRouteParams, - $modal: ng.ui.bootstrap.IModalService, - $location: ng.ILocationService, - albumApi: AlbumApi.IAlbumApiService, - viewAlert: ViewAlert.IViewAlertService) { - - this._modal = $modal; - this._location = $location; - this._albumApi = albumApi; - this._viewAlert = viewAlert; - - albumApi.getAlbumDetails($routeParams.albumId).then(album => this.album = album); - } - - public album: Models.IAlbum; - - public deleteAlbum() { - var deleteModal = this._modal.open({ - templateUrl: "ng-apps/MusicStore.Admin/Catalog/AlbumDeleteModal.cshtml", - controller: "MusicStore.Admin.Catalog.AlbumDeleteModalController as viewModel", - resolve: { - album: () => this.album - } - }); - - deleteModal.result.then(shouldDelete => { - if (!shouldDelete) { - return; - } - - this._albumApi.deleteAlbum(this.album.AlbumId).then(result => { - // Navigate back to the list - this._viewAlert.alert = { - type: Models.AlertType.success, - message: result.data.Message - }; - this._location.path("/albums").replace(); - }); - }); - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/MusicStore.Admin/Catalog/AlbumEdit.cshtml b/src/MusicStore.Spa/ng-apps/MusicStore.Admin/Catalog/AlbumEdit.cshtml deleted file mode 100644 index 0494941d88..0000000000 --- a/src/MusicStore.Spa/ng-apps/MusicStore.Admin/Catalog/AlbumEdit.cshtml +++ /dev/null @@ -1,99 +0,0 @@ -@model MusicStore.Models.Album - -
    -

    Album {{ viewModel.mode | titlecase }}

    -
    - - - {{ viewModel.alert.message }} -
      -
    • {{ modelError.ErrorMessage }}
    • -
    -
    - -
    -
    - @Html.LabelFor(m => m.Artist, new { @class = "col-md-2 control-label" }) -
    -
    -
    - @Html.ngDropDownListFor(m => m.ArtistId, m => m.Artist.Name, source: "viewModel.artists", nullOption: "-- choose Artist --", - htmlAttributes: new { @class = "form-control", ng_model = "viewModel.album.ArtistId", ng_disabled = "viewModel.disabled || viewModel.artists.length < 2" }) -
    -
    - @Html.ngValidationMessageFor(m => m.ArtistId, "editAlbum", new { @class = "help-block field-validation-error" }) -
    -
    - -
    - @Html.LabelFor(m => m.Genre, new { @class = "col-md-2 control-label" }) -
    -
    -
    - @Html.ngDropDownListFor(m => m.GenreId, m => m.Genre.Name, source: "viewModel.genres", nullOption: "-- choose Genre --", - htmlAttributes: new { @class = "form-control", ng_model = "viewModel.album.GenreId", ng_disabled = "viewModel.disabled || viewModel.genres.length < 2" }) -
    -
    - @Html.ngValidationMessageFor(m => m.GenreId, "editAlbum", new { @class = "help-block field-validation-error" }) -
    -
    - -
    - @Html.LabelFor(m => m.Title, new { @class = "control-label col-md-2" }) -
    -
    -
    - @Html.ngTextBoxFor(m => m.Title, new { @class = "form-control", ng_model = "viewModel.album.Title", ng_disabled = "viewModel.disabled" }) -
    -
    - @Html.ngValidationMessageFor(model => model.Title, "editAlbum", new { @class = "help-block field-validation-error" }) -
    -
    - -
    - @Html.LabelFor(m => m.Price, new { @class = "control-label col-md-2" }) -
    -
    -
    -
    - $ - @Html.ngTextBoxFor(m => m.Price, new { @class = "form-control", ng_model = "viewModel.album.Price", ng_disabled = "viewModel.disabled" }) -
    -
    -
    - @Html.ngValidationMessageFor(model => model.Price, "editAlbum", new { @class = "help-block field-validation-error" }) -
    -
    - -
    - @Html.LabelFor(m => m.AlbumArtUrl, new { @class = "control-label col-md-2" }) -
    -
    -
    - @Html.ngTextBoxFor(m => m.AlbumArtUrl, new { @class = "form-control", ng_model = "viewModel.album.AlbumArtUrl", ng_disabled = "viewModel.disabled" }) -
    -
    - @Html.ngValidationMessageFor(model => model.AlbumArtUrl, "editAlbum", new { @class = "field-validation-error" }) -
    -
    - -
    -
    - Album Art -
    -
    - -
    -
    - - - Back to List -
    -
    -
    -
    \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/MusicStore.Admin/Catalog/AlbumEditController.ts b/src/MusicStore.Spa/ng-apps/MusicStore.Admin/Catalog/AlbumEditController.ts deleted file mode 100644 index 479f71e11c..0000000000 --- a/src/MusicStore.Spa/ng-apps/MusicStore.Admin/Catalog/AlbumEditController.ts +++ /dev/null @@ -1,190 +0,0 @@ -module MusicStore.Admin.Catalog { - interface IAlbumDetailsRouteParams extends ng.route.IRouteParamsService { - mode: string; - albumId: number; - } - - interface IAlbumDetailsViewModel { - mode: string; // edit or new - disabled: boolean; - album: Models.IAlbum; - alert: Models.IAlert; - artists: Array; - genres: Array; - save(); - clearAlert(); - } - - class AlbumEditController implements IAlbumDetailsViewModel { - private _albumApi: AlbumApi.IAlbumApiService; - private _artistApi: ArtistApi.IArtistApiService; - private _genreApi: GenreApi.IGenreApiService; - private _viewAlert: ViewAlert.IViewAlertService; - private _modal: ng.ui.bootstrap.IModalService; - private _location: ng.ILocationService; - private _timeout: ng.ITimeoutService; - private _log: ng.ILogService; - - constructor($routeParams: IAlbumDetailsRouteParams, - albumApi: AlbumApi.IAlbumApiService, - artistApi: ArtistApi.IArtistApiService, - genreApi: GenreApi.IGenreApiService, - viewAlert: ViewAlert.IViewAlertService, - $modal: ng.ui.bootstrap.IModalService, - $location: ng.ILocationService, - $timeout: ng.ITimeoutService, - $q: ng.IQService, - $log: ng.ILogService) { - - this._albumApi = albumApi; - this._artistApi = artistApi; - this._genreApi = genreApi; - this._viewAlert = viewAlert; - this._modal = $modal; - this._location = $location; - this._timeout = $timeout; - this._log = $log; - - this.mode = $routeParams.mode; - - this.alert = viewAlert.alert; - - artistApi.getArtistsLookup().then(artists => this.artists = artists); - genreApi.getGenresLookup().then(genres => this.genres = genres); - - if (this.mode.toLowerCase() === "edit") { - // TODO: Handle album load failure - albumApi.getAlbumDetails($routeParams.albumId).then(album => { - this.album = album; - - // Pre-load the lookup arrays with the current values if not set yet - this.genres = this.genres || [album.Genre]; - this.artists = this.artists || [album.Artist]; - - this.disabled = false; - }); - } else { - this.disabled = false; - } - } - - public mode: string; - - public disabled = true; - - public album: Models.IAlbum; - - public alert: Models.IAlert; - - public artists: Array; - - public genres: Array; - - public save() { - this.disabled = true; - - var apiMethod = this.mode.toLowerCase() === "edit" ? this._albumApi.updateAlbum : this._albumApi.createAlbum; - apiMethod = apiMethod.bind(this._albumApi); - - apiMethod(this.album).then( - // Success - response => { - var alert = { - type: Models.AlertType.success, - message: response.data.Message - }; - - // TODO: Do we need to destroy this timeout on controller unload? - this._timeout(() => this.alert !== alert || this.clearAlert(), 3000); - - if (this.mode.toLowerCase() === "new") { - this._log.info("Created album successfully!"); - - var albumId: number = response.data.Data; - - this._viewAlert.alert = alert; - - // Reload the view with the new album ID - this._location.path("/albums/" + albumId + "/edit").replace(); - - // TODO: Should we reload the data from the server? - } else { - this.alert = alert; - this.disabled = false; - this._log.info("Updated album " + this.album.AlbumId + " successfully!"); - } - }, - // Error - response => { - // TODO: Make this common logic, e.g. base controller class, injected helper service, etc. - if (response.status === 400) { - // We made a bad request - if (response.data && response.data.ModelErrors) { - // The server says the update failed validation - // TODO: Map errors back to client validators and/or summary - this.alert = { - type: Models.AlertType.danger, - message: response.data.Message, - modelErrors: response.data.ModelErrors - }; - this.disabled = false; - } else { - // Some other bad request, just show the message - this.alert = { - type: Models.AlertType.danger, - message: response.data.Message - }; - } - } else if (response.status === 404) { - // The album wasn't found, probably deleted. Leave the form disabled and show error message. - this.alert = { - type: Models.AlertType.danger, - message: response.data.Message - }; - } else if (response.status === 401) { - // We need to authenticate again - // TODO: Should we just redirect to login page, show a message with a link, or something else - this.alert = { - type: Models.AlertType.danger, - message: "Your session has timed out. Please log in and try again." - }; - } else if (!response.status) { - // Request timed out or no response from server or worse - this._log.error("Error updating album " + this.album.AlbumId); - this._log.error(response); - this.alert = { type: Models.AlertType.danger, message: "An unexpected error occurred. Please try again." }; - this.disabled = false; - } - }); - } - - public deleteAlbum() { - var deleteModal = this._modal.open({ - templateUrl: "ng-apps/MusicStore.Admin/Catalog/AlbumDeleteModal.cshtml", - controller: "MusicStore.Admin.Catalog.AlbumDeleteModalController as viewModel", - resolve: { - album: () => this.album - } - }); - - deleteModal.result.then(shouldDelete => { - if (!shouldDelete) { - return; - } - - this._albumApi.deleteAlbum(this.album.AlbumId).then(result => { - // Navigate back to the list - this._viewAlert.alert = { - type: Models.AlertType.success, - message: result.data.Message - }; - this._location.path("/albums").replace(); - }); - }); - } - - public clearAlert() { - this.alert = null; - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/MusicStore.Admin/Catalog/AlbumList.cshtml b/src/MusicStore.Spa/ng-apps/MusicStore.Admin/Catalog/AlbumList.cshtml deleted file mode 100644 index ab651de430..0000000000 --- a/src/MusicStore.Spa/ng-apps/MusicStore.Admin/Catalog/AlbumList.cshtml +++ /dev/null @@ -1,77 +0,0 @@ -@model MusicStore.Models.Album - -
    -

    Albums

    -

    - Create new -

    - - - {{ viewModel.alert.message }} -
      -
    • {{ modelError.ErrorMessage }}
    • -
    -
    - - - - - - - - - - - - - - - - - - - - -
    - @Html.DisplayNameFor(m => m.Genre) - - - - - @Html.DisplayNameFor(m => m.Artist) - - - - - @Html.DisplayNameFor(m => m.Title) - - - - - @Html.DisplayNameFor(m => m.Price) - - - -
    - {{ album.Genre.Name }} - - {{ album.Artist.Name | truncate:25 }} - - {{ album.Title | truncate:25 }} - - {{ album.Price | currency }} - -
    - Details - Edit - Delete -
    -
    - -

    - {{ viewModel.totalCount }} total albums -

    -
    \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/MusicStore.Admin/Catalog/AlbumListController.ts b/src/MusicStore.Spa/ng-apps/MusicStore.Admin/Catalog/AlbumListController.ts deleted file mode 100644 index 4d26a97372..0000000000 --- a/src/MusicStore.Spa/ng-apps/MusicStore.Admin/Catalog/AlbumListController.ts +++ /dev/null @@ -1,124 +0,0 @@ -module MusicStore.Admin.Catalog { - interface IAlbumListViewModel { - albums: Array; - totalCount: number; - currentPage: number; - pageSize: number; - loadPage(page?: number); - deleteAlbum(album: Models.IAlbum); - clearAlert(); - } - - class AlbumListController implements IAlbumListViewModel { - private _albumApi: AlbumApi.IAlbumApiService; - private _modal: ng.ui.bootstrap.IModalService; - private _timeout: ng.ITimeoutService; - private _log: ng.ILogService; - - constructor(albumApi: AlbumApi.IAlbumApiService, - viewAlert: ViewAlert.IViewAlertService, - $modal: ng.ui.bootstrap.IModalService, - $timeout: ng.ITimeoutService, - $log: ng.ILogService) { - - this._albumApi = albumApi; - this._modal = $modal; - this._timeout = $timeout; - this._log = $log; - - this.currentPage = 1; - this.pageSize = 50; - this.sortColumn = "Title"; - - this.loadPage(1); - - this.showAlert(viewAlert.alert, 3000); - viewAlert.alert = null; - } - - public alert: Models.IAlert; - - public albums: Array; - - public totalCount: number; - - public currentPage: number; - - public pageSize: number; - - public sortColumn: string; - - public sortDescending: boolean; - - public loadPage(page?: number) { - page = page || this.currentPage; - var sortByExpression = this.getSortByExpression(); - this._albumApi.getAlbums(page, this.pageSize, sortByExpression).then(result => { - this.albums = result.Data; - this.currentPage = result.Page; - this.totalCount = result.TotalCount; - }); - } - - public sortBy(column: string) { - if (this.sortColumn === column) { - // Just flip the direction - this.sortDescending = !this.sortDescending; - } else { - this.sortColumn = column; - this.sortDescending = false; - } - - this.loadPage(); - } - - public deleteAlbum(album: Models.IAlbum) { - var deleteModal = this._modal.open({ - templateUrl: "ng-apps/MusicStore.Admin/Catalog/AlbumDeleteModal.cshtml", - controller: "MusicStore.Admin.Catalog.AlbumDeleteModalController as viewModel", - resolve: { - album: () => album - } - }); - - deleteModal.result.then(shouldDelete => { - if (!shouldDelete) { - return; - } - - this._albumApi.deleteAlbum(album.AlbumId).then(result => { - this.loadPage(); - - this.showAlert({ - type: Models.AlertType.success, - message: result.data.Message - }, 3000); - }); - }); - } - - public clearAlert() { - this.alert = null; - } - - private showAlert(alert: Models.IAlert, closeAfter?: number) { - if (!alert) { - return; - } - - this.alert = alert; - - // TODO: Do we need to destroy this timeout on controller unload? - if (closeAfter) { - this._timeout(() => this.alert !== alert || this.clearAlert(), closeAfter); - } - } - - private getSortByExpression() { - if (this.sortDescending) { - return this.sortColumn + " DESC"; - } - return this.sortColumn; - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/MusicStore.Admin/MusicStore.Admin.app.ts b/src/MusicStore.Spa/ng-apps/MusicStore.Admin/MusicStore.Admin.app.ts deleted file mode 100644 index c8023be540..0000000000 --- a/src/MusicStore.Spa/ng-apps/MusicStore.Admin/MusicStore.Admin.app.ts +++ /dev/null @@ -1,43 +0,0 @@ -/// - -module MusicStore.Admin { - - var dependencies = [ - "ngRoute", - "ui.bootstrap", - MusicStore.InlineData, - MusicStore.GenreMenu, - MusicStore.UrlResolver, - MusicStore.UserDetails, - MusicStore.LoginLink, - MusicStore.Visited, - MusicStore.TitleCase, - MusicStore.Truncate, - MusicStore.GenreApi, - MusicStore.AlbumApi, - MusicStore.ArtistApi, - MusicStore.ViewAlert, - MusicStore.Admin.Catalog - ]; - - // Use this method to register work which needs to be performed on module loading. - // Note only providers can be injected as dependencies here. - function configuration($routeProvider: ng.route.IRouteProvider, $logProvider: ng.ILogProvider) { - // TODO: Enable debug logging based on server config - // TODO: Capture all logged errors and send back to server - $logProvider.debugEnabled(true); - - // Configure routes - $routeProvider - .when("/albums/:albumId/details", { templateUrl: "ng-apps/MusicStore.Admin/Catalog/AlbumDetails.cshtml" }) - .when("/albums/:albumId/:mode", { templateUrl: "ng-apps/MusicStore.Admin/Catalog/AlbumEdit.cshtml" }) - .when("/albums/:mode", { templateUrl: "ng-apps/MusicStore.Admin/Catalog/AlbumEdit.cshtml" }) - .when("/albums", { templateUrl: "ng-apps/MusicStore.Admin/Catalog/AlbumList.cshtml" }) - .otherwise({ redirectTo: "/albums" }); - } - - // Use this method to register work which should be performed when the injector is done loading all modules. - function run($log: ng.ILogService, userDetails: UserDetails.IUserDetailsService) { - $log.log(userDetails.getUserDetails()); - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/MusicStore.Store/Catalog/AlbumDetails.html b/src/MusicStore.Spa/ng-apps/MusicStore.Store/Catalog/AlbumDetails.html deleted file mode 100644 index 1a5be7674f..0000000000 --- a/src/MusicStore.Spa/ng-apps/MusicStore.Store/Catalog/AlbumDetails.html +++ /dev/null @@ -1,26 +0,0 @@ -
    -

    {{ viewModel.album.Title }}

    - -

    - -

    - -
    -

    - Genre: - {{ viewModel.album.Genre.Name }} -

    -

    - Artist: - {{ viewModel.album.Artist.Name }} -

    -

    - Price: - {{ viewModel.album.Price | currency }} -

    -

    - - Add to cart -

    -
    -
    \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/MusicStore.Store/Catalog/AlbumDetailsController.ts b/src/MusicStore.Spa/ng-apps/MusicStore.Store/Catalog/AlbumDetailsController.ts deleted file mode 100644 index 4f9c52f651..0000000000 --- a/src/MusicStore.Spa/ng-apps/MusicStore.Store/Catalog/AlbumDetailsController.ts +++ /dev/null @@ -1,22 +0,0 @@ -module MusicStore.Store.Catalog { - interface IAlbumDetailsViewModel { - album: Models.IAlbum; - } - - interface IAlbumDetailsRouteParams extends ng.route.IRouteParamsService { - albumId: number; - } - - class AlbumDetailsController implements IAlbumDetailsViewModel { - public album: Models.IAlbum; - - constructor($routeParams: IAlbumDetailsRouteParams, albumApi: AlbumApi.IAlbumApiService) { - var viewModel = this, - albumId = $routeParams.albumId; - - albumApi.getAlbumDetails(albumId).then(album => { - viewModel.album = album; - }); - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/MusicStore.Store/Catalog/GenreDetails.html b/src/MusicStore.Spa/ng-apps/MusicStore.Store/Catalog/GenreDetails.html deleted file mode 100644 index 203d2e4164..0000000000 --- a/src/MusicStore.Spa/ng-apps/MusicStore.Store/Catalog/GenreDetails.html +++ /dev/null @@ -1,12 +0,0 @@ -
    -

    {{ viewModel.genre.Name }} Albums

    - - -
    \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/MusicStore.Store/Catalog/GenreDetailsController.ts b/src/MusicStore.Spa/ng-apps/MusicStore.Store/Catalog/GenreDetailsController.ts deleted file mode 100644 index f31d158e9a..0000000000 --- a/src/MusicStore.Spa/ng-apps/MusicStore.Store/Catalog/GenreDetailsController.ts +++ /dev/null @@ -1,21 +0,0 @@ -module MusicStore.Store.Catalog { - interface IGenreDetailsViewModel { - albums: Array; - } - - interface IGenreDetailsRouteParams extends ng.route.IRouteParamsService { - genreId: number; - } - - class GenreDetailsController implements IGenreDetailsViewModel { - public albums: Array; - - constructor($routeParams: IGenreDetailsRouteParams, genreApi: GenreApi.IGenreApiService) { - var viewModel = this; - - genreApi.getGenreAlbums($routeParams.genreId).success(result => { - viewModel.albums = result; - }); - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/MusicStore.Store/Catalog/GenreList.html b/src/MusicStore.Spa/ng-apps/MusicStore.Store/Catalog/GenreList.html deleted file mode 100644 index 0c78a4bb60..0000000000 --- a/src/MusicStore.Spa/ng-apps/MusicStore.Store/Catalog/GenreList.html +++ /dev/null @@ -1,12 +0,0 @@ -
    -

    Browse Genres

    - -

    - Select from {{ viewModel.genres.length }} genres: -

    - -
    \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/MusicStore.Store/Catalog/GenreListController.ts b/src/MusicStore.Spa/ng-apps/MusicStore.Store/Catalog/GenreListController.ts deleted file mode 100644 index 1f187cf204..0000000000 --- a/src/MusicStore.Spa/ng-apps/MusicStore.Store/Catalog/GenreListController.ts +++ /dev/null @@ -1,17 +0,0 @@ -module MusicStore.Store.Catalog { - interface IGenreListViewModel { - genres: Array; - } - - class GenreListController implements IGenreListViewModel { - public genres: Array; - - constructor(genreApi: GenreApi.IGenreApiService) { - var viewModel = this; - - genreApi.getGenresList().success(function (genres) { - viewModel.genres = genres; - }); - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/MusicStore.Store/Home/Home.html b/src/MusicStore.Spa/ng-apps/MusicStore.Store/Home/Home.html deleted file mode 100644 index 3bfb802705..0000000000 --- a/src/MusicStore.Spa/ng-apps/MusicStore.Store/Home/Home.html +++ /dev/null @@ -1,15 +0,0 @@ -
    -

    MVC Music Store

    - -
    - - \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/MusicStore.Store/Home/HomeController.ts b/src/MusicStore.Spa/ng-apps/MusicStore.Store/Home/HomeController.ts deleted file mode 100644 index fb17e77da1..0000000000 --- a/src/MusicStore.Spa/ng-apps/MusicStore.Store/Home/HomeController.ts +++ /dev/null @@ -1,17 +0,0 @@ -module MusicStore.Store.Home { - interface IHomeViewModel { - albums: Array - } - - class HomeController implements IHomeViewModel { - public albums: Array; - - constructor(albumApi: AlbumApi.IAlbumApiService) { - var viewModel = this; - - albumApi.getMostPopularAlbums().then(albums => { - viewModel.albums = albums; - }); - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/MusicStore.Store/MusicStore.Store.app.ts b/src/MusicStore.Spa/ng-apps/MusicStore.Store/MusicStore.Store.app.ts deleted file mode 100644 index 7aa870e193..0000000000 --- a/src/MusicStore.Spa/ng-apps/MusicStore.Store/MusicStore.Store.app.ts +++ /dev/null @@ -1,39 +0,0 @@ -/// - -module MusicStore.Store { - - var dependencies = [ - "ngRoute", - MusicStore.InlineData, - MusicStore.PreventSubmit, - MusicStore.GenreMenu, - MusicStore.UrlResolver, - MusicStore.UserDetails, - MusicStore.LoginLink, - MusicStore.GenreApi, - MusicStore.AlbumApi, - MusicStore.Visited, - MusicStore.Store.Home, - MusicStore.Store.Catalog - ]; - - // Use this method to register work which needs to be performed on module loading. - // Note only providers can be injected as dependencies here. - function configuration($routeProvider: ng.route.IRouteProvider, $logProvider: ng.ILogProvider) { - // TODO: Enable debug logging based on server config - // TODO: Capture all logged errors and send back to server - $logProvider.debugEnabled(true); - - $routeProvider - .when("/", { templateUrl: "ng-apps/MusicStore.Store/Home/Home.html" }) - .when("/albums/genres", { templateUrl: "ng-apps/MusicStore.Store/Catalog/GenreList.html" }) - .when("/albums/genres/:genreId", { templateUrl: "ng-apps/MusicStore.Store/Catalog/GenreDetails.html" }) - .when("/albums/:albumId", { templateUrl: "ng-apps/MusicStore.Store/Catalog/AlbumDetails.html" }) - .otherwise({ redirectTo: "/" }); - } - - // Use this method to register work which should be performed when the injector is done loading all modules. - function run($log: ng.ILogService, userDetails: UserDetails.IUserDetailsService) { - $log.log(userDetails.getUserDetails()); - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/components/AlbumApi/AlbumApiService.ts b/src/MusicStore.Spa/ng-apps/components/AlbumApi/AlbumApiService.ts deleted file mode 100644 index d68bfd607d..0000000000 --- a/src/MusicStore.Spa/ng-apps/components/AlbumApi/AlbumApiService.ts +++ /dev/null @@ -1,98 +0,0 @@ -module MusicStore.AlbumApi { - export interface IAlbumApiService { - getAlbums(page?: number, pageSize?: number, sortBy?: string): ng.IPromise>; - getAlbumDetails(albumId: number): ng.IPromise; - getMostPopularAlbums(count?: number): ng.IPromise>; - createAlbum(album: Models.IAlbum, config?: ng.IRequestConfig): ng.IHttpPromise; - updateAlbum(album: Models.IAlbum, config?: ng.IRequestConfig): ng.IHttpPromise; - deleteAlbum(albumId: number, config?: ng.IRequestConfig): ng.IHttpPromise; - } - - class AlbumApiService implements IAlbumApiService { - private _inlineData: ng.ICacheObject; - private _q: ng.IQService; - private _http: ng.IHttpService; - private _urlResolver: UrlResolver.IUrlResolverService; - - constructor($cacheFactory: ng.ICacheFactoryService, - $q: ng.IQService, - $http: ng.IHttpService, - urlResolver: UrlResolver.IUrlResolverService) { - this._inlineData = $cacheFactory.get("inlineData"); - this._q = $q; - this._http = $http; - this._urlResolver = urlResolver; - } - - public getAlbums(page?: number, pageSize?: number, sortBy?: string) { - var url = this._urlResolver.resolveUrl("~/api/albums"), - query: any = {}, - querySeparator = "?", - inlineData; - - if (page) { - query.page = page; - } - - if (pageSize) { - query.pageSize = pageSize; - } - - if (sortBy) { - query.sortBy = sortBy; - } - - for (var key in query) { - if (query.hasOwnProperty(key)) { - url += querySeparator + key + "=" + encodeURIComponent(query[key]); - if (querySeparator === "?") { - querySeparator = "&"; - } - } - } - - inlineData = this._inlineData ? this._inlineData.get(url) : null; - - if (inlineData) { - return this._q.when(inlineData); - } else { - return this._http.get(url).then(result => result.data); - } - } - - public getAlbumDetails(albumId: number) { - var url = this._urlResolver.resolveUrl("~/api/albums/" + albumId); - return this._http.get(url).then(result => result.data); - } - - public getMostPopularAlbums(count?: number) { - var url = this._urlResolver.resolveUrl("~/api/albums/mostPopular"), - inlineData = this._inlineData ? this._inlineData.get(url) : null; - - if (inlineData) { - return this._q.when(inlineData); - } else { - if (count && count > 0) { - url += "?count=" + count; - } - - return this._http.get(url).then(result => result.data); - } - } - - public createAlbum(album: Models.IAlbum, config?: ng.IRequestConfig) { - var url = this._urlResolver.resolveUrl("api/albums"); - return this._http.post(url, album, config || { timeout: 10000 }); - } - - public updateAlbum(album: Models.IAlbum, config?: ng.IRequestConfig) { - var url = this._urlResolver.resolveUrl("api/albums/" + album.AlbumId + "/update"); - return this._http.put(url, album, config || { timeout: 10000 }); - } - - public deleteAlbum(albumId: number, config?: ng.IRequestConfig) { - var url = this._urlResolver.resolveUrl("api/albums/" + albumId); - return this._http.delete(url, config || { timeout: 10000 }); - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/components/ArtistApi/ArtistApiService.ts b/src/MusicStore.Spa/ng-apps/components/ArtistApi/ArtistApiService.ts deleted file mode 100644 index 45a59f3563..0000000000 --- a/src/MusicStore.Spa/ng-apps/components/ArtistApi/ArtistApiService.ts +++ /dev/null @@ -1,33 +0,0 @@ -module MusicStore.ArtistApi { - export interface IArtistApiService { - getArtistsLookup(): ng.IPromise>; - } - - class ArtistsApiService implements IArtistApiService { - private _inlineData: ng.ICacheObject; - private _q: ng.IQService; - private _http: ng.IHttpService; - private _urlResolver: UrlResolver.IUrlResolverService; - - constructor($cacheFactory: ng.ICacheFactoryService, - $q: ng.IQService, - $http: ng.IHttpService, - urlResolver: UrlResolver.IUrlResolverService) { - this._inlineData = $cacheFactory.get("inlineData"); - this._q = $q; - this._http = $http; - this._urlResolver = urlResolver; - } - - public getArtistsLookup() { - var url = this._urlResolver.resolveUrl("~/api/artists/lookup"), - inlineData = this._inlineData ? this._inlineData.get(url) : null; - - if (inlineData) { - return this._q.when(inlineData); - } else { - return this._http.get(url).then(result => result.data); - } - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/components/GenreApi/GenreApiService.ts b/src/MusicStore.Spa/ng-apps/components/GenreApi/GenreApiService.ts deleted file mode 100644 index b92d794161..0000000000 --- a/src/MusicStore.Spa/ng-apps/components/GenreApi/GenreApiService.ts +++ /dev/null @@ -1,57 +0,0 @@ -module MusicStore.GenreApi { - export interface IGenreApiService { - getGenresLookup(): ng.IPromise>; - getGenresMenu(): ng.IPromise>; - getGenresList(): ng.IHttpPromise>; - getGenreAlbums(genreId: number): ng.IHttpPromise>; - } - - class GenreApiService implements IGenreApiService { - private _inlineData: ng.ICacheObject; - private _q: ng.IQService; - private _http: ng.IHttpService; - private _urlResolver: UrlResolver.IUrlResolverService; - - constructor($cacheFactory: ng.ICacheFactoryService, - $q: ng.IQService, - $http: ng.IHttpService, - urlResolver: UrlResolver.IUrlResolverService) { - this._inlineData = $cacheFactory.get("inlineData"); - this._q = $q; - this._http = $http; - this._urlResolver = urlResolver; - } - - public getGenresLookup() { - var url = this._urlResolver.resolveUrl("~/api/genres/lookup"), - inlineData = this._inlineData ? this._inlineData.get(url) : null; - - if (inlineData) { - return this._q.when(inlineData); - } else { - return this._http.get(url).then(result => result.data); - } - } - - public getGenresMenu() { - var url = this._urlResolver.resolveUrl("~/api/genres/menu"), - inlineData = this._inlineData ? this._inlineData.get(url) : null; - - if (inlineData) { - return this._q.when(inlineData); - } else { - return this._http.get(url).then(result => result.data); - } - } - - public getGenresList() { - var url = this._urlResolver.resolveUrl("~/api/genres"); - return this._http.get(url); - } - - public getGenreAlbums(genreId: number) { - var url = this._urlResolver.resolveUrl("~/api/genres/" + genreId + "/albums"); - return this._http.get(url); - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/components/GenreMenu/GenreMenu.html b/src/MusicStore.Spa/ng-apps/components/GenreMenu/GenreMenu.html deleted file mode 100644 index 888ae81db7..0000000000 --- a/src/MusicStore.Spa/ng-apps/components/GenreMenu/GenreMenu.html +++ /dev/null @@ -1,12 +0,0 @@ - \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/components/GenreMenu/GenreMenuController.ts b/src/MusicStore.Spa/ng-apps/components/GenreMenu/GenreMenuController.ts deleted file mode 100644 index 2ccfb0f8b1..0000000000 --- a/src/MusicStore.Spa/ng-apps/components/GenreMenu/GenreMenuController.ts +++ /dev/null @@ -1,22 +0,0 @@ -module MusicStore.GenreMenu { - interface IGenreMenuViewModel { - genres: Array; - urlBase: string; - } - - class GenreMenuController implements IGenreMenuViewModel { - constructor(genreApi: GenreApi.IGenreApiService, urlResolver: UrlResolver.IUrlResolverService) { - var viewModel = this; - - genreApi.getGenresMenu().then(genres => { - viewModel.genres = genres; - }); - - viewModel.urlBase = urlResolver.base; - } - - public genres: Array; - - public urlBase: string; - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/components/GenreMenu/GenreMenuDirective.ts b/src/MusicStore.Spa/ng-apps/components/GenreMenu/GenreMenuDirective.ts deleted file mode 100644 index 47f9ed2691..0000000000 --- a/src/MusicStore.Spa/ng-apps/components/GenreMenu/GenreMenuDirective.ts +++ /dev/null @@ -1,13 +0,0 @@ -module MusicStore.GenreMenu { - - //@NgDirective('appGenreMenu') - class GenreMenuDirective implements ng.IDirective { - public replace = true; - public restrict = "A"; - public templateUrl; - - constructor(urlResolver: UrlResolver.IUrlResolverService) { - this.templateUrl = urlResolver.resolveUrl("~/ng-apps/components/GenreMenu/GenreMenu.html"); - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/components/InlineData/InlineDataDirective.ts b/src/MusicStore.Spa/ng-apps/components/InlineData/InlineDataDirective.ts deleted file mode 100644 index ade0a68c1d..0000000000 --- a/src/MusicStore.Spa/ng-apps/components/InlineData/InlineDataDirective.ts +++ /dev/null @@ -1,31 +0,0 @@ -module MusicStore.InlineData { - interface InlineDataAttributes extends ng.IAttributes { - type: string; - for: string; - } - - //@NgDirective('appInlineData') - class InlineDataDirective implements ng.IDirective { - private _cache: ng.ICacheObject; - private _log: ng.ILogService; - - constructor($cacheFactory: ng.ICacheFactoryService, $log: ng.ILogService) { - this._cache = $cacheFactory.get("inlineData") || $cacheFactory("inlineData"); - this._log = $log; - } - - public restrict = "A"; - - public link(scope: ng.IScope, element: ng.IAugmentedJQuery, attrs: InlineDataAttributes) { - var data = attrs.type === "application/json" - ? angular.fromJson(element.text()) - : element.text(); - - this._log.info("appInlineData: Inline data element found for " + attrs.for); - - this._cache.put(attrs.for, data); - - //element.remove(); - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/components/LoginLink/LoginLinkDirective.ts b/src/MusicStore.Spa/ng-apps/components/LoginLink/LoginLinkDirective.ts deleted file mode 100644 index 051f1acd42..0000000000 --- a/src/MusicStore.Spa/ng-apps/components/LoginLink/LoginLinkDirective.ts +++ /dev/null @@ -1,33 +0,0 @@ -module MusicStore.LoginLink { - interface LoginLinkAttributes extends ng.IAttributes { - href: string; - } - - //@NgDirective('appLoginLink') - class LoginLinkDirective implements ng.IDirective { - private _window: ng.IWindowService; - - constructor(urlResolver: UrlResolver.IUrlResolverService, $window: ng.IWindowService) { - this._window = $window; - } - - public restrict = "A"; - - public link(scope: ng.IScope, element: ng.IAugmentedJQuery, attrs: LoginLinkAttributes) { - if (!element.is("a[href]")) { - return; - } - - // Grab the original login URL - var loginUrl = attrs.href; - - element.click(event => { - // Update the returnUrl querystring value to current path - var currentUrl = this._window.location.pathname + this._window.location.search + this._window.location.hash, - newUrl = loginUrl + "?returnUrl=" + encodeURIComponent(currentUrl); - - element.prop("href", newUrl); - }); - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/components/Models/IAlbum.ts b/src/MusicStore.Spa/ng-apps/components/Models/IAlbum.ts deleted file mode 100644 index fd8bce8f62..0000000000 --- a/src/MusicStore.Spa/ng-apps/components/Models/IAlbum.ts +++ /dev/null @@ -1,16 +0,0 @@ -module MusicStore.Models { - export interface IAlbum { - AlbumId: number; - GenreId: number; - ArtistId: number; - - Title: string; - AlbumArtUrl: string; - Price: number; - - Artist: IArtist; - Genre: IGenre; - - DetailsUrl: string; - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/components/Models/IAlert.ts b/src/MusicStore.Spa/ng-apps/components/Models/IAlert.ts deleted file mode 100644 index f3f3578ab2..0000000000 --- a/src/MusicStore.Spa/ng-apps/components/Models/IAlert.ts +++ /dev/null @@ -1,25 +0,0 @@ -module MusicStore.Models { - export interface IAlert { - type: AlertType; - message: string; - } - - export interface IModelErrorAlert extends IAlert { - modelErrors: Array; - } - - export class AlertType { - constructor(public value: string) { - } - - public toString() { - return this.value; - } - - // Values - static success = new AlertType("success"); - static info = new AlertType("info"); - static warning = new AlertType("warning"); - static danger = new AlertType("danger"); - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/components/Models/IApiResult.ts b/src/MusicStore.Spa/ng-apps/components/Models/IApiResult.ts deleted file mode 100644 index c69a3ca54b..0000000000 --- a/src/MusicStore.Spa/ng-apps/components/Models/IApiResult.ts +++ /dev/null @@ -1,7 +0,0 @@ -module MusicStore.Models { - export interface IApiResult { - Message?: string; - Data?: any; - ModelErrors?: Array; - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/components/Models/IArtist.ts b/src/MusicStore.Spa/ng-apps/components/Models/IArtist.ts deleted file mode 100644 index 9d40978f30..0000000000 --- a/src/MusicStore.Spa/ng-apps/components/Models/IArtist.ts +++ /dev/null @@ -1,6 +0,0 @@ -module MusicStore.Models { - export interface IArtist { - ArtistId: number; - Name: string; - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/components/Models/IGenre.ts b/src/MusicStore.Spa/ng-apps/components/Models/IGenre.ts deleted file mode 100644 index 6b60385fc7..0000000000 --- a/src/MusicStore.Spa/ng-apps/components/Models/IGenre.ts +++ /dev/null @@ -1,7 +0,0 @@ -module MusicStore.Models { - export interface IGenre { - GenreId: number; - Name: string; - Description: string; - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/components/Models/IGenreLookup.ts b/src/MusicStore.Spa/ng-apps/components/Models/IGenreLookup.ts deleted file mode 100644 index 1cc50c8e30..0000000000 --- a/src/MusicStore.Spa/ng-apps/components/Models/IGenreLookup.ts +++ /dev/null @@ -1,6 +0,0 @@ -module MusicStore.Models { - export interface IGenreLookup { - GenreId: number; - Name: string; - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/components/Models/IModelError.ts b/src/MusicStore.Spa/ng-apps/components/Models/IModelError.ts deleted file mode 100644 index 294ceeb80e..0000000000 --- a/src/MusicStore.Spa/ng-apps/components/Models/IModelError.ts +++ /dev/null @@ -1,6 +0,0 @@ -module MusicStore.Models { - export interface IModelError { - FieldName: string; - ErrorMessage: string; - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/components/Models/IPagedList.ts b/src/MusicStore.Spa/ng-apps/components/Models/IPagedList.ts deleted file mode 100644 index e109a6ec1f..0000000000 --- a/src/MusicStore.Spa/ng-apps/components/Models/IPagedList.ts +++ /dev/null @@ -1,8 +0,0 @@ -module MusicStore.Models { - export interface IPagedList { - Data: Array; - Page: number; - PageSize: number; - TotalCount: number; - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/components/Models/IUserDetails.ts b/src/MusicStore.Spa/ng-apps/components/Models/IUserDetails.ts deleted file mode 100644 index ddac9992f4..0000000000 --- a/src/MusicStore.Spa/ng-apps/components/Models/IUserDetails.ts +++ /dev/null @@ -1,8 +0,0 @@ -module MusicStore.Models { - export interface IUserDetails { - isAuthenticated: boolean; - userName: string; - userId: string; - roles: Array; - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/components/PreventSubmit/PreventSubmitDirective.ts b/src/MusicStore.Spa/ng-apps/components/PreventSubmit/PreventSubmitDirective.ts deleted file mode 100644 index e2d3423de2..0000000000 --- a/src/MusicStore.Spa/ng-apps/components/PreventSubmit/PreventSubmitDirective.ts +++ /dev/null @@ -1,24 +0,0 @@ -module MusicStore.PreventSubmit { - interface IPreventSubmitAttributes extends ng.IAttributes { - name: string; - appPreventSubmit: string; - } - - //@NgDirective('appPreventSubmit') - class PreventSubmitDirective implements ng.IDirective { - private _preventSubmit: any; - - public restrict = "A"; - - public link(scope: any, element: ng.IAugmentedJQuery, attrs: IPreventSubmitAttributes) { - // TODO: Just make this directive apply to all
    tags and no-op if no action attr - - element.submit(e => { - if (scope.$eval(attrs.appPreventSubmit)) { - e.preventDefault(); - return false; - } - }); - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/components/TitleCase/TitleCaseFilter.ts b/src/MusicStore.Spa/ng-apps/components/TitleCase/TitleCaseFilter.ts deleted file mode 100644 index 98bf617727..0000000000 --- a/src/MusicStore.Spa/ng-apps/components/TitleCase/TitleCaseFilter.ts +++ /dev/null @@ -1,18 +0,0 @@ -module MusicStore.TitleCase { - - //@NgFilter('titlecase') - function titleCase(input: string) { - var out = "", - lastChar = ""; - - for (var i = 0; i < input.length; i++) { - out = out + (lastChar === " " || lastChar === "" - ? input.charAt(i).toUpperCase() - : input.charAt(i)); - - lastChar = input.charAt(i); - } - - return out; - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/components/Truncate/TruncateFilter.ts b/src/MusicStore.Spa/ng-apps/components/Truncate/TruncateFilter.ts deleted file mode 100644 index 554631858e..0000000000 --- a/src/MusicStore.Spa/ng-apps/components/Truncate/TruncateFilter.ts +++ /dev/null @@ -1,15 +0,0 @@ -module MusicStore.Truncate { - - //@NgFilter - function truncate(input: string, length: number) { - if (!input) { - return input; - } - - if (input.length <= length) { - return input; - } else { - return input.substr(0, length).trim() + "…"; - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/components/UrlResolver/UrlResolverService.ts b/src/MusicStore.Spa/ng-apps/components/UrlResolver/UrlResolverService.ts deleted file mode 100644 index fd47021825..0000000000 --- a/src/MusicStore.Spa/ng-apps/components/UrlResolver/UrlResolverService.ts +++ /dev/null @@ -1,39 +0,0 @@ -module MusicStore.UrlResolver { - export interface IUrlResolverService { - base: string; - resolveUrl(relativeUrl: string); - } - - class UrlResolverService implements IUrlResolverService { - private _base: string; - - constructor($rootElement: ng.IAugmentedJQuery) { - this._base = $rootElement.attr("data-url-base"); - - // Add trailing slash if not present - if (this._base === "" || this._base.substr(this._base.length - 1) !== "/") { - this._base = this._base + "/"; - } - } - - public get base() { - return this._base; - } - - public resolveUrl(relativeUrl: string) { - var firstChar = relativeUrl.substr(0, 1); - - if (firstChar === "~") { - relativeUrl = relativeUrl.substr(1); - } - - firstChar = relativeUrl.substr(0, 1); - - if (firstChar === "/") { - relativeUrl = relativeUrl.substr(1); - } - - return this._base + relativeUrl; - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/components/UserDetails/UserDetailsService.ts b/src/MusicStore.Spa/ng-apps/components/UserDetails/UserDetailsService.ts deleted file mode 100644 index 09ecb2d67e..0000000000 --- a/src/MusicStore.Spa/ng-apps/components/UserDetails/UserDetailsService.ts +++ /dev/null @@ -1,34 +0,0 @@ -module MusicStore.UserDetails { - export interface IUserDetailsService { - getUserDetails(): Models.IUserDetails; - getUserDetails(elementId: string): Models.IUserDetails; - } - - class UserDetailsService implements IUserDetailsService { - private _document: ng.IDocumentService; - private _userDetails: Models.IUserDetails; - - constructor($document: ng.IDocumentService) { - this._document = $document; - } - - public getUserDetails(elementId = "userDetails") { - if (!this._userDetails) { - //var el = this._document.querySelector("[data-json-id='" + elementId + "']"); - var el = this._document.find("#" + elementId + "[type='application/json']"); - - if (el.length) { - this._userDetails = angular.fromJson(el.text()); - } else { - this._userDetails = { - isAuthenticated: false, - userId: null, - userName: null, - roles: [] - }; - } - } - return this._userDetails; - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/components/ViewMessage/ViewAlertService.ts b/src/MusicStore.Spa/ng-apps/components/ViewMessage/ViewAlertService.ts deleted file mode 100644 index 488dc39010..0000000000 --- a/src/MusicStore.Spa/ng-apps/components/ViewMessage/ViewAlertService.ts +++ /dev/null @@ -1,9 +0,0 @@ -module MusicStore.ViewAlert { - export interface IViewAlertService { - alert: Models.IAlert; - } - - class ViewAlertService implements IViewAlertService { - public alert: Models.IAlert; - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/components/Visited/VisitedDirective.ts b/src/MusicStore.Spa/ng-apps/components/Visited/VisitedDirective.ts deleted file mode 100644 index c0ff1edc44..0000000000 --- a/src/MusicStore.Spa/ng-apps/components/Visited/VisitedDirective.ts +++ /dev/null @@ -1,49 +0,0 @@ -module MusicStore.Visited { - interface IVisitedFormController extends ng.IFormController { - focus?: boolean; - visited?: boolean; - } - - //@NgDirective('input') - //@NgDirective('select') - class VisitedDirective implements ng.IDirective { - private _window: ng.IWindowService; - - constructor($window: ng.IWindowService) { - this._window = $window; - } - - public restrict = "E"; - - public require = "?ngModel"; - - public link(scope: ng.IScope, element: ng.IAugmentedJQuery, attrs: ng.IAttributes, ctrl: IVisitedFormController) { - if (!ctrl) { - return; - } - - element.on("focus", event => { - element.addClass("has-focus"); - scope.$apply(() => ctrl.focus = true); - }); - - element.on("blur", event => { - element.removeClass("has-focus"); - element.addClass("has-visited"); - scope.$apply(() => { - ctrl.focus = false; - ctrl.visited = true; - }); - }); - - element.closest("form").on("submit", function () { - element.addClass("has-visited"); - - scope.$apply(() => { - ctrl.focus = false; - ctrl.visited = true; - }); - }); - } - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/ng-apps/references.ts b/src/MusicStore.Spa/ng-apps/references.ts deleted file mode 100644 index f686a0142d..0000000000 --- a/src/MusicStore.Spa/ng-apps/references.ts +++ /dev/null @@ -1,9 +0,0 @@ -/// -/// -/// - -declare module ng { - export interface ILogProvider { - debugEnabled(enabled: boolean); - } -} \ No newline at end of file diff --git a/src/MusicStore.Spa/package.json b/src/MusicStore.Spa/package.json deleted file mode 100644 index 4d5c455816..0000000000 --- a/src/MusicStore.Spa/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "MusicStore", - "version": "0.0.0", - "devDependencies": { - "grunt": "~0.4.2", - "grunt-bower-task": "^0.4.0", - "grunt-contrib-clean": "~0.5.0", - "grunt-contrib-copy": "~0.5.0", - "grunt-contrib-jshint": "~0.10.0", - "grunt-contrib-less": "~0.11.0", - "grunt-contrib-uglify": "~0.4.0", - "grunt-contrib-watch": "~0.6.1", - "grunt-ide-support": "~0.1.7", - "grunt-tslint": "~0.4.1", - "grunt-tsng": "~0.1.3", - "grunt-typescript": "~0.6.1" - } -} diff --git a/src/MusicStore.Spa/project.json b/src/MusicStore.Spa/project.json deleted file mode 100644 index d2c05a4a8c..0000000000 --- a/src/MusicStore.Spa/project.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "webroot": "wwwroot", - "exclude": [ - "wwwroot", - "bower_components", - "node_modules", - "grunt" - ], - "publishExclude": [ - "bower.json", - "package.json", - "gruntfile.js", - "bower_components", - "node_modules", - "grunt" - ], - "authors": [ - "Microsoft" - ], - "description": "Music store application on K as a SPA", - "compilationOptions": { - "define": [ - "DEBUG" - ] - }, - "dependencies": { - "Microsoft.AspNet.Server.Kestrel": "1.0.0-*", - "Microsoft.AspNet.Server.IIS": "1.0.0-*", - "Microsoft.AspNet.Mvc": "6.0.0-*", - "Microsoft.AspNet.Server.WebListener": "1.0.0-*", - "Microsoft.AspNet.StaticFiles": "1.0.0-*", - "EntityFramework.InMemory": "7.0.0-*", - "EntityFramework.SqlServer": "7.0.0-*", - "Microsoft.AspNet.Authentication.Cookies": "1.0.0-*", - "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-*", - "Microsoft.Framework.Configuration": "1.0.0-*", - "Microsoft.Framework.Configuration.EnvironmentVariables": "1.0.0-*", - "Microsoft.Framework.Configuration.Json": "1.0.0-*", - "AutoMapper": "4.0.0-alpha1" - }, - "commands": { - "WebListener": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5102", - "Kestrel": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.Kestrel --server.urls http://localhost:5104", - "run": "run server.urls=http://localhost:5103" - }, - "frameworks": { - "dnx451": {}, - "dnxcore50": {} - } -} diff --git a/src/MusicStore.Spa/wwwroot/css/Site.less b/src/MusicStore.Spa/wwwroot/css/Site.less deleted file mode 100644 index 84770d0ea1..0000000000 --- a/src/MusicStore.Spa/wwwroot/css/Site.less +++ /dev/null @@ -1,88 +0,0 @@ -@import '../../bower_components/bootstrap/less/bootstrap.less'; - -@font-face { - font-family: 'Glyphicons Halflings'; - src: url('../lib/bootstrap/fonts/glyphicons-halflings-regular.eot'); - src: url('../lib/bootstrap/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../lib/bootstrap/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../lib/bootstrap/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../lib/bootstrap/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); -} - -[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak { - display: none !important; -} - -.nav, .pagination, .carousel, .panel-title a { - cursor: pointer; -} - -body { - padding-top: 50px; - padding-bottom: 20px; -} - -/* Set padding to keep content from hitting the edges */ -.body-content { - padding-left: 15px; - padding-right: 15px; -} - -/* Set width on the form input elements since they're 100% wide by default */ -input, -select, -textarea { - /*max-width: 280px;*/ -} - -/* styles for validation helpers */ -.field-validation-error { - color: #b94a48; -} - -.field-validation-valid { - display: none; -} - -input.input-validation-error { - border: 1px solid #b94a48; -} - -input[type="checkbox"].input-validation-error { - border: 0 none; -} - -.validation-summary-errors { - color: #b94a48; -} - -.validation-summary-valid { - display: none; -} - - -/* Music Store additions */ - -ul#album-list li { - height: 160px; -} - -ul#album-list li img:hover { - box-shadow: 1px 1px 7px #777; -} - -ul#album-list li img { - max-width: 100px; - max-height: 100px; - box-shadow: 1px 1px 5px #999; - border: none; - padding: 0; -} - -ul#album-list li a, ul#album-details li a { - text-decoration:none; -} - -ul#album-list li a:hover { - background: none; - -webkit-text-shadow: 1px 1px 2px #bbb; - text-shadow: 1px 1px 2px #bbb; - color: #363430; -} \ No newline at end of file diff --git a/src/MusicStore.Spa/wwwroot/css/site.css b/src/MusicStore.Spa/wwwroot/css/site.css deleted file mode 100644 index c228c8388a..0000000000 --- a/src/MusicStore.Spa/wwwroot/css/site.css +++ /dev/null @@ -1,6242 +0,0 @@ -/*! normalize.css v3.0.1 | MIT License | git.io/normalize */ -html { - font-family: sans-serif; - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; -} -body { - margin: 0; -} -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -nav, -section, -summary { - display: block; -} -audio, -canvas, -progress, -video { - display: inline-block; - vertical-align: baseline; -} -audio:not([controls]) { - display: none; - height: 0; -} -[hidden], -template { - display: none; -} -a { - background: transparent; -} -a:active, -a:hover { - outline: 0; -} -abbr[title] { - border-bottom: 1px dotted; -} -b, -strong { - font-weight: bold; -} -dfn { - font-style: italic; -} -h1 { - font-size: 2em; - margin: 0.67em 0; -} -mark { - background: #ff0; - color: #000; -} -small { - font-size: 80%; -} -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} -sup { - top: -0.5em; -} -sub { - bottom: -0.25em; -} -img { - border: 0; -} -svg:not(:root) { - overflow: hidden; -} -figure { - margin: 1em 40px; -} -hr { - -moz-box-sizing: content-box; - box-sizing: content-box; - height: 0; -} -pre { - overflow: auto; -} -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; -} -button, -input, -optgroup, -select, -textarea { - color: inherit; - font: inherit; - margin: 0; -} -button { - overflow: visible; -} -button, -select { - text-transform: none; -} -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; - cursor: pointer; -} -button[disabled], -html input[disabled] { - cursor: default; -} -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} -input { - line-height: normal; -} -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; - padding: 0; -} -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; -} -input[type="search"] { - -webkit-appearance: textfield; - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; - box-sizing: content-box; -} -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} -legend { - border: 0; - padding: 0; -} -textarea { - overflow: auto; -} -optgroup { - font-weight: bold; -} -table { - border-collapse: collapse; - border-spacing: 0; -} -td, -th { - padding: 0; -} -@media print { - * { - text-shadow: none !important; - color: #000 !important; - background: transparent !important; - box-shadow: none !important; - } - a, - a:visited { - text-decoration: underline; - } - a[href]:after { - content: " (" attr(href) ")"; - } - abbr[title]:after { - content: " (" attr(title) ")"; - } - a[href^="javascript:"]:after, - a[href^="#"]:after { - content: ""; - } - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } - select { - background: #fff !important; - } - .navbar { - display: none; - } - .table td, - .table th { - background-color: #fff !important; - } - .btn > .caret, - .dropup > .btn > .caret { - border-top-color: #000 !important; - } - .label { - border: 1px solid #000; - } - .table { - border-collapse: collapse !important; - } - .table-bordered th, - .table-bordered td { - border: 1px solid #ddd !important; - } -} -@font-face { - font-family: 'Glyphicons Halflings'; - src: url('../fonts/glyphicons-halflings-regular.eot'); - src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); -} -.glyphicon { - position: relative; - top: 1px; - display: inline-block; - font-family: 'Glyphicons Halflings'; - font-style: normal; - font-weight: normal; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.glyphicon-asterisk:before { - content: "\2a"; -} -.glyphicon-plus:before { - content: "\2b"; -} -.glyphicon-euro:before { - content: "\20ac"; -} -.glyphicon-minus:before { - content: "\2212"; -} -.glyphicon-cloud:before { - content: "\2601"; -} -.glyphicon-envelope:before { - content: "\2709"; -} -.glyphicon-pencil:before { - content: "\270f"; -} -.glyphicon-glass:before { - content: "\e001"; -} -.glyphicon-music:before { - content: "\e002"; -} -.glyphicon-search:before { - content: "\e003"; -} -.glyphicon-heart:before { - content: "\e005"; -} -.glyphicon-star:before { - content: "\e006"; -} -.glyphicon-star-empty:before { - content: "\e007"; -} -.glyphicon-user:before { - content: "\e008"; -} -.glyphicon-film:before { - content: "\e009"; -} -.glyphicon-th-large:before { - content: "\e010"; -} -.glyphicon-th:before { - content: "\e011"; -} -.glyphicon-th-list:before { - content: "\e012"; -} -.glyphicon-ok:before { - content: "\e013"; -} -.glyphicon-remove:before { - content: "\e014"; -} -.glyphicon-zoom-in:before { - content: "\e015"; -} -.glyphicon-zoom-out:before { - content: "\e016"; -} -.glyphicon-off:before { - content: "\e017"; -} -.glyphicon-signal:before { - content: "\e018"; -} -.glyphicon-cog:before { - content: "\e019"; -} -.glyphicon-trash:before { - content: "\e020"; -} -.glyphicon-home:before { - content: "\e021"; -} -.glyphicon-file:before { - content: "\e022"; -} -.glyphicon-time:before { - content: "\e023"; -} -.glyphicon-road:before { - content: "\e024"; -} -.glyphicon-download-alt:before { - content: "\e025"; -} -.glyphicon-download:before { - content: "\e026"; -} -.glyphicon-upload:before { - content: "\e027"; -} -.glyphicon-inbox:before { - content: "\e028"; -} -.glyphicon-play-circle:before { - content: "\e029"; -} -.glyphicon-repeat:before { - content: "\e030"; -} -.glyphicon-refresh:before { - content: "\e031"; -} -.glyphicon-list-alt:before { - content: "\e032"; -} -.glyphicon-lock:before { - content: "\e033"; -} -.glyphicon-flag:before { - content: "\e034"; -} -.glyphicon-headphones:before { - content: "\e035"; -} -.glyphicon-volume-off:before { - content: "\e036"; -} -.glyphicon-volume-down:before { - content: "\e037"; -} -.glyphicon-volume-up:before { - content: "\e038"; -} -.glyphicon-qrcode:before { - content: "\e039"; -} -.glyphicon-barcode:before { - content: "\e040"; -} -.glyphicon-tag:before { - content: "\e041"; -} -.glyphicon-tags:before { - content: "\e042"; -} -.glyphicon-book:before { - content: "\e043"; -} -.glyphicon-bookmark:before { - content: "\e044"; -} -.glyphicon-print:before { - content: "\e045"; -} -.glyphicon-camera:before { - content: "\e046"; -} -.glyphicon-font:before { - content: "\e047"; -} -.glyphicon-bold:before { - content: "\e048"; -} -.glyphicon-italic:before { - content: "\e049"; -} -.glyphicon-text-height:before { - content: "\e050"; -} -.glyphicon-text-width:before { - content: "\e051"; -} -.glyphicon-align-left:before { - content: "\e052"; -} -.glyphicon-align-center:before { - content: "\e053"; -} -.glyphicon-align-right:before { - content: "\e054"; -} -.glyphicon-align-justify:before { - content: "\e055"; -} -.glyphicon-list:before { - content: "\e056"; -} -.glyphicon-indent-left:before { - content: "\e057"; -} -.glyphicon-indent-right:before { - content: "\e058"; -} -.glyphicon-facetime-video:before { - content: "\e059"; -} -.glyphicon-picture:before { - content: "\e060"; -} -.glyphicon-map-marker:before { - content: "\e062"; -} -.glyphicon-adjust:before { - content: "\e063"; -} -.glyphicon-tint:before { - content: "\e064"; -} -.glyphicon-edit:before { - content: "\e065"; -} -.glyphicon-share:before { - content: "\e066"; -} -.glyphicon-check:before { - content: "\e067"; -} -.glyphicon-move:before { - content: "\e068"; -} -.glyphicon-step-backward:before { - content: "\e069"; -} -.glyphicon-fast-backward:before { - content: "\e070"; -} -.glyphicon-backward:before { - content: "\e071"; -} -.glyphicon-play:before { - content: "\e072"; -} -.glyphicon-pause:before { - content: "\e073"; -} -.glyphicon-stop:before { - content: "\e074"; -} -.glyphicon-forward:before { - content: "\e075"; -} -.glyphicon-fast-forward:before { - content: "\e076"; -} -.glyphicon-step-forward:before { - content: "\e077"; -} -.glyphicon-eject:before { - content: "\e078"; -} -.glyphicon-chevron-left:before { - content: "\e079"; -} -.glyphicon-chevron-right:before { - content: "\e080"; -} -.glyphicon-plus-sign:before { - content: "\e081"; -} -.glyphicon-minus-sign:before { - content: "\e082"; -} -.glyphicon-remove-sign:before { - content: "\e083"; -} -.glyphicon-ok-sign:before { - content: "\e084"; -} -.glyphicon-question-sign:before { - content: "\e085"; -} -.glyphicon-info-sign:before { - content: "\e086"; -} -.glyphicon-screenshot:before { - content: "\e087"; -} -.glyphicon-remove-circle:before { - content: "\e088"; -} -.glyphicon-ok-circle:before { - content: "\e089"; -} -.glyphicon-ban-circle:before { - content: "\e090"; -} -.glyphicon-arrow-left:before { - content: "\e091"; -} -.glyphicon-arrow-right:before { - content: "\e092"; -} -.glyphicon-arrow-up:before { - content: "\e093"; -} -.glyphicon-arrow-down:before { - content: "\e094"; -} -.glyphicon-share-alt:before { - content: "\e095"; -} -.glyphicon-resize-full:before { - content: "\e096"; -} -.glyphicon-resize-small:before { - content: "\e097"; -} -.glyphicon-exclamation-sign:before { - content: "\e101"; -} -.glyphicon-gift:before { - content: "\e102"; -} -.glyphicon-leaf:before { - content: "\e103"; -} -.glyphicon-fire:before { - content: "\e104"; -} -.glyphicon-eye-open:before { - content: "\e105"; -} -.glyphicon-eye-close:before { - content: "\e106"; -} -.glyphicon-warning-sign:before { - content: "\e107"; -} -.glyphicon-plane:before { - content: "\e108"; -} -.glyphicon-calendar:before { - content: "\e109"; -} -.glyphicon-random:before { - content: "\e110"; -} -.glyphicon-comment:before { - content: "\e111"; -} -.glyphicon-magnet:before { - content: "\e112"; -} -.glyphicon-chevron-up:before { - content: "\e113"; -} -.glyphicon-chevron-down:before { - content: "\e114"; -} -.glyphicon-retweet:before { - content: "\e115"; -} -.glyphicon-shopping-cart:before { - content: "\e116"; -} -.glyphicon-folder-close:before { - content: "\e117"; -} -.glyphicon-folder-open:before { - content: "\e118"; -} -.glyphicon-resize-vertical:before { - content: "\e119"; -} -.glyphicon-resize-horizontal:before { - content: "\e120"; -} -.glyphicon-hdd:before { - content: "\e121"; -} -.glyphicon-bullhorn:before { - content: "\e122"; -} -.glyphicon-bell:before { - content: "\e123"; -} -.glyphicon-certificate:before { - content: "\e124"; -} -.glyphicon-thumbs-up:before { - content: "\e125"; -} -.glyphicon-thumbs-down:before { - content: "\e126"; -} -.glyphicon-hand-right:before { - content: "\e127"; -} -.glyphicon-hand-left:before { - content: "\e128"; -} -.glyphicon-hand-up:before { - content: "\e129"; -} -.glyphicon-hand-down:before { - content: "\e130"; -} -.glyphicon-circle-arrow-right:before { - content: "\e131"; -} -.glyphicon-circle-arrow-left:before { - content: "\e132"; -} -.glyphicon-circle-arrow-up:before { - content: "\e133"; -} -.glyphicon-circle-arrow-down:before { - content: "\e134"; -} -.glyphicon-globe:before { - content: "\e135"; -} -.glyphicon-wrench:before { - content: "\e136"; -} -.glyphicon-tasks:before { - content: "\e137"; -} -.glyphicon-filter:before { - content: "\e138"; -} -.glyphicon-briefcase:before { - content: "\e139"; -} -.glyphicon-fullscreen:before { - content: "\e140"; -} -.glyphicon-dashboard:before { - content: "\e141"; -} -.glyphicon-paperclip:before { - content: "\e142"; -} -.glyphicon-heart-empty:before { - content: "\e143"; -} -.glyphicon-link:before { - content: "\e144"; -} -.glyphicon-phone:before { - content: "\e145"; -} -.glyphicon-pushpin:before { - content: "\e146"; -} -.glyphicon-usd:before { - content: "\e148"; -} -.glyphicon-gbp:before { - content: "\e149"; -} -.glyphicon-sort:before { - content: "\e150"; -} -.glyphicon-sort-by-alphabet:before { - content: "\e151"; -} -.glyphicon-sort-by-alphabet-alt:before { - content: "\e152"; -} -.glyphicon-sort-by-order:before { - content: "\e153"; -} -.glyphicon-sort-by-order-alt:before { - content: "\e154"; -} -.glyphicon-sort-by-attributes:before { - content: "\e155"; -} -.glyphicon-sort-by-attributes-alt:before { - content: "\e156"; -} -.glyphicon-unchecked:before { - content: "\e157"; -} -.glyphicon-expand:before { - content: "\e158"; -} -.glyphicon-collapse-down:before { - content: "\e159"; -} -.glyphicon-collapse-up:before { - content: "\e160"; -} -.glyphicon-log-in:before { - content: "\e161"; -} -.glyphicon-flash:before { - content: "\e162"; -} -.glyphicon-log-out:before { - content: "\e163"; -} -.glyphicon-new-window:before { - content: "\e164"; -} -.glyphicon-record:before { - content: "\e165"; -} -.glyphicon-save:before { - content: "\e166"; -} -.glyphicon-open:before { - content: "\e167"; -} -.glyphicon-saved:before { - content: "\e168"; -} -.glyphicon-import:before { - content: "\e169"; -} -.glyphicon-export:before { - content: "\e170"; -} -.glyphicon-send:before { - content: "\e171"; -} -.glyphicon-floppy-disk:before { - content: "\e172"; -} -.glyphicon-floppy-saved:before { - content: "\e173"; -} -.glyphicon-floppy-remove:before { - content: "\e174"; -} -.glyphicon-floppy-save:before { - content: "\e175"; -} -.glyphicon-floppy-open:before { - content: "\e176"; -} -.glyphicon-credit-card:before { - content: "\e177"; -} -.glyphicon-transfer:before { - content: "\e178"; -} -.glyphicon-cutlery:before { - content: "\e179"; -} -.glyphicon-header:before { - content: "\e180"; -} -.glyphicon-compressed:before { - content: "\e181"; -} -.glyphicon-earphone:before { - content: "\e182"; -} -.glyphicon-phone-alt:before { - content: "\e183"; -} -.glyphicon-tower:before { - content: "\e184"; -} -.glyphicon-stats:before { - content: "\e185"; -} -.glyphicon-sd-video:before { - content: "\e186"; -} -.glyphicon-hd-video:before { - content: "\e187"; -} -.glyphicon-subtitles:before { - content: "\e188"; -} -.glyphicon-sound-stereo:before { - content: "\e189"; -} -.glyphicon-sound-dolby:before { - content: "\e190"; -} -.glyphicon-sound-5-1:before { - content: "\e191"; -} -.glyphicon-sound-6-1:before { - content: "\e192"; -} -.glyphicon-sound-7-1:before { - content: "\e193"; -} -.glyphicon-copyright-mark:before { - content: "\e194"; -} -.glyphicon-registration-mark:before { - content: "\e195"; -} -.glyphicon-cloud-download:before { - content: "\e197"; -} -.glyphicon-cloud-upload:before { - content: "\e198"; -} -.glyphicon-tree-conifer:before { - content: "\e199"; -} -.glyphicon-tree-deciduous:before { - content: "\e200"; -} -* { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -*:before, -*:after { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -html { - font-size: 10px; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} -body { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 1.42857143; - color: #333333; - background-color: #ffffff; -} -input, -button, -select, -textarea { - font-family: inherit; - font-size: inherit; - line-height: inherit; -} -a { - color: #428bca; - text-decoration: none; -} -a:hover, -a:focus { - color: #2a6496; - text-decoration: underline; -} -a:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -figure { - margin: 0; -} -img { - vertical-align: middle; -} -.img-responsive, -.thumbnail > img, -.thumbnail a > img, -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - display: block; - width: 100% \9; - max-width: 100%; - height: auto; -} -.img-rounded { - border-radius: 6px; -} -.img-thumbnail { - padding: 4px; - line-height: 1.42857143; - background-color: #ffffff; - border: 1px solid #dddddd; - border-radius: 4px; - -webkit-transition: all 0.2s ease-in-out; - -o-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; - display: inline-block; - width: 100% \9; - max-width: 100%; - height: auto; -} -.img-circle { - border-radius: 50%; -} -hr { - margin-top: 20px; - margin-bottom: 20px; - border: 0; - border-top: 1px solid #eeeeee; -} -.sr-only { - position: absolute; - width: 1px; - height: 1px; - margin: -1px; - padding: 0; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0; -} -.sr-only-focusable:active, -.sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto; -} -h1, -h2, -h3, -h4, -h5, -h6, -.h1, -.h2, -.h3, -.h4, -.h5, -.h6 { - font-family: inherit; - font-weight: 500; - line-height: 1.1; - color: inherit; -} -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small, -.h1 small, -.h2 small, -.h3 small, -.h4 small, -.h5 small, -.h6 small, -h1 .small, -h2 .small, -h3 .small, -h4 .small, -h5 .small, -h6 .small, -.h1 .small, -.h2 .small, -.h3 .small, -.h4 .small, -.h5 .small, -.h6 .small { - font-weight: normal; - line-height: 1; - color: #777777; -} -h1, -.h1, -h2, -.h2, -h3, -.h3 { - margin-top: 20px; - margin-bottom: 10px; -} -h1 small, -.h1 small, -h2 small, -.h2 small, -h3 small, -.h3 small, -h1 .small, -.h1 .small, -h2 .small, -.h2 .small, -h3 .small, -.h3 .small { - font-size: 65%; -} -h4, -.h4, -h5, -.h5, -h6, -.h6 { - margin-top: 10px; - margin-bottom: 10px; -} -h4 small, -.h4 small, -h5 small, -.h5 small, -h6 small, -.h6 small, -h4 .small, -.h4 .small, -h5 .small, -.h5 .small, -h6 .small, -.h6 .small { - font-size: 75%; -} -h1, -.h1 { - font-size: 36px; -} -h2, -.h2 { - font-size: 30px; -} -h3, -.h3 { - font-size: 24px; -} -h4, -.h4 { - font-size: 18px; -} -h5, -.h5 { - font-size: 14px; -} -h6, -.h6 { - font-size: 12px; -} -p { - margin: 0 0 10px; -} -.lead { - margin-bottom: 20px; - font-size: 16px; - font-weight: 300; - line-height: 1.4; -} -@media (min-width: 768px) { - .lead { - font-size: 21px; - } -} -small, -.small { - font-size: 85%; -} -cite { - font-style: normal; -} -mark, -.mark { - background-color: #fcf8e3; - padding: .2em; -} -.text-left { - text-align: left; -} -.text-right { - text-align: right; -} -.text-center { - text-align: center; -} -.text-justify { - text-align: justify; -} -.text-nowrap { - white-space: nowrap; -} -.text-lowercase { - text-transform: lowercase; -} -.text-uppercase { - text-transform: uppercase; -} -.text-capitalize { - text-transform: capitalize; -} -.text-muted { - color: #777777; -} -.text-primary { - color: #428bca; -} -a.text-primary:hover { - color: #3071a9; -} -.text-success { - color: #3c763d; -} -a.text-success:hover { - color: #2b542c; -} -.text-info { - color: #31708f; -} -a.text-info:hover { - color: #245269; -} -.text-warning { - color: #8a6d3b; -} -a.text-warning:hover { - color: #66512c; -} -.text-danger { - color: #a94442; -} -a.text-danger:hover { - color: #843534; -} -.bg-primary { - color: #fff; - background-color: #428bca; -} -a.bg-primary:hover { - background-color: #3071a9; -} -.bg-success { - background-color: #dff0d8; -} -a.bg-success:hover { - background-color: #c1e2b3; -} -.bg-info { - background-color: #d9edf7; -} -a.bg-info:hover { - background-color: #afd9ee; -} -.bg-warning { - background-color: #fcf8e3; -} -a.bg-warning:hover { - background-color: #f7ecb5; -} -.bg-danger { - background-color: #f2dede; -} -a.bg-danger:hover { - background-color: #e4b9b9; -} -.page-header { - padding-bottom: 9px; - margin: 40px 0 20px; - border-bottom: 1px solid #eeeeee; -} -ul, -ol { - margin-top: 0; - margin-bottom: 10px; -} -ul ul, -ol ul, -ul ol, -ol ol { - margin-bottom: 0; -} -.list-unstyled { - padding-left: 0; - list-style: none; -} -.list-inline { - padding-left: 0; - list-style: none; - margin-left: -5px; -} -.list-inline > li { - display: inline-block; - padding-left: 5px; - padding-right: 5px; -} -dl { - margin-top: 0; - margin-bottom: 20px; -} -dt, -dd { - line-height: 1.42857143; -} -dt { - font-weight: bold; -} -dd { - margin-left: 0; -} -@media (min-width: 768px) { - .dl-horizontal dt { - float: left; - width: 160px; - clear: left; - text-align: right; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - .dl-horizontal dd { - margin-left: 180px; - } -} -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #777777; -} -.initialism { - font-size: 90%; - text-transform: uppercase; -} -blockquote { - padding: 10px 20px; - margin: 0 0 20px; - font-size: 17.5px; - border-left: 5px solid #eeeeee; -} -blockquote p:last-child, -blockquote ul:last-child, -blockquote ol:last-child { - margin-bottom: 0; -} -blockquote footer, -blockquote small, -blockquote .small { - display: block; - font-size: 80%; - line-height: 1.42857143; - color: #777777; -} -blockquote footer:before, -blockquote small:before, -blockquote .small:before { - content: '\2014 \00A0'; -} -.blockquote-reverse, -blockquote.pull-right { - padding-right: 15px; - padding-left: 0; - border-right: 5px solid #eeeeee; - border-left: 0; - text-align: right; -} -.blockquote-reverse footer:before, -blockquote.pull-right footer:before, -.blockquote-reverse small:before, -blockquote.pull-right small:before, -.blockquote-reverse .small:before, -blockquote.pull-right .small:before { - content: ''; -} -.blockquote-reverse footer:after, -blockquote.pull-right footer:after, -.blockquote-reverse small:after, -blockquote.pull-right small:after, -.blockquote-reverse .small:after, -blockquote.pull-right .small:after { - content: '\00A0 \2014'; -} -blockquote:before, -blockquote:after { - content: ""; -} -address { - margin-bottom: 20px; - font-style: normal; - line-height: 1.42857143; -} -code, -kbd, -pre, -samp { - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; -} -code { - padding: 2px 4px; - font-size: 90%; - color: #c7254e; - background-color: #f9f2f4; - border-radius: 4px; -} -kbd { - padding: 2px 4px; - font-size: 90%; - color: #ffffff; - background-color: #333333; - border-radius: 3px; - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); -} -kbd kbd { - padding: 0; - font-size: 100%; - box-shadow: none; -} -pre { - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 1.42857143; - word-break: break-all; - word-wrap: break-word; - color: #333333; - background-color: #f5f5f5; - border: 1px solid #cccccc; - border-radius: 4px; -} -pre code { - padding: 0; - font-size: inherit; - color: inherit; - white-space: pre-wrap; - background-color: transparent; - border-radius: 0; -} -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} -.container { - margin-right: auto; - margin-left: auto; - padding-left: 15px; - padding-right: 15px; -} -@media (min-width: 768px) { - .container { - width: 750px; - } -} -@media (min-width: 992px) { - .container { - width: 970px; - } -} -@media (min-width: 1200px) { - .container { - width: 1170px; - } -} -.container-fluid { - margin-right: auto; - margin-left: auto; - padding-left: 15px; - padding-right: 15px; -} -.row { - margin-left: -15px; - margin-right: -15px; -} -.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { - position: relative; - min-height: 1px; - padding-left: 15px; - padding-right: 15px; -} -.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { - float: left; -} -.col-xs-12 { - width: 100%; -} -.col-xs-11 { - width: 91.66666667%; -} -.col-xs-10 { - width: 83.33333333%; -} -.col-xs-9 { - width: 75%; -} -.col-xs-8 { - width: 66.66666667%; -} -.col-xs-7 { - width: 58.33333333%; -} -.col-xs-6 { - width: 50%; -} -.col-xs-5 { - width: 41.66666667%; -} -.col-xs-4 { - width: 33.33333333%; -} -.col-xs-3 { - width: 25%; -} -.col-xs-2 { - width: 16.66666667%; -} -.col-xs-1 { - width: 8.33333333%; -} -.col-xs-pull-12 { - right: 100%; -} -.col-xs-pull-11 { - right: 91.66666667%; -} -.col-xs-pull-10 { - right: 83.33333333%; -} -.col-xs-pull-9 { - right: 75%; -} -.col-xs-pull-8 { - right: 66.66666667%; -} -.col-xs-pull-7 { - right: 58.33333333%; -} -.col-xs-pull-6 { - right: 50%; -} -.col-xs-pull-5 { - right: 41.66666667%; -} -.col-xs-pull-4 { - right: 33.33333333%; -} -.col-xs-pull-3 { - right: 25%; -} -.col-xs-pull-2 { - right: 16.66666667%; -} -.col-xs-pull-1 { - right: 8.33333333%; -} -.col-xs-pull-0 { - right: auto; -} -.col-xs-push-12 { - left: 100%; -} -.col-xs-push-11 { - left: 91.66666667%; -} -.col-xs-push-10 { - left: 83.33333333%; -} -.col-xs-push-9 { - left: 75%; -} -.col-xs-push-8 { - left: 66.66666667%; -} -.col-xs-push-7 { - left: 58.33333333%; -} -.col-xs-push-6 { - left: 50%; -} -.col-xs-push-5 { - left: 41.66666667%; -} -.col-xs-push-4 { - left: 33.33333333%; -} -.col-xs-push-3 { - left: 25%; -} -.col-xs-push-2 { - left: 16.66666667%; -} -.col-xs-push-1 { - left: 8.33333333%; -} -.col-xs-push-0 { - left: auto; -} -.col-xs-offset-12 { - margin-left: 100%; -} -.col-xs-offset-11 { - margin-left: 91.66666667%; -} -.col-xs-offset-10 { - margin-left: 83.33333333%; -} -.col-xs-offset-9 { - margin-left: 75%; -} -.col-xs-offset-8 { - margin-left: 66.66666667%; -} -.col-xs-offset-7 { - margin-left: 58.33333333%; -} -.col-xs-offset-6 { - margin-left: 50%; -} -.col-xs-offset-5 { - margin-left: 41.66666667%; -} -.col-xs-offset-4 { - margin-left: 33.33333333%; -} -.col-xs-offset-3 { - margin-left: 25%; -} -.col-xs-offset-2 { - margin-left: 16.66666667%; -} -.col-xs-offset-1 { - margin-left: 8.33333333%; -} -.col-xs-offset-0 { - margin-left: 0%; -} -@media (min-width: 768px) { - .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { - float: left; - } - .col-sm-12 { - width: 100%; - } - .col-sm-11 { - width: 91.66666667%; - } - .col-sm-10 { - width: 83.33333333%; - } - .col-sm-9 { - width: 75%; - } - .col-sm-8 { - width: 66.66666667%; - } - .col-sm-7 { - width: 58.33333333%; - } - .col-sm-6 { - width: 50%; - } - .col-sm-5 { - width: 41.66666667%; - } - .col-sm-4 { - width: 33.33333333%; - } - .col-sm-3 { - width: 25%; - } - .col-sm-2 { - width: 16.66666667%; - } - .col-sm-1 { - width: 8.33333333%; - } - .col-sm-pull-12 { - right: 100%; - } - .col-sm-pull-11 { - right: 91.66666667%; - } - .col-sm-pull-10 { - right: 83.33333333%; - } - .col-sm-pull-9 { - right: 75%; - } - .col-sm-pull-8 { - right: 66.66666667%; - } - .col-sm-pull-7 { - right: 58.33333333%; - } - .col-sm-pull-6 { - right: 50%; - } - .col-sm-pull-5 { - right: 41.66666667%; - } - .col-sm-pull-4 { - right: 33.33333333%; - } - .col-sm-pull-3 { - right: 25%; - } - .col-sm-pull-2 { - right: 16.66666667%; - } - .col-sm-pull-1 { - right: 8.33333333%; - } - .col-sm-pull-0 { - right: auto; - } - .col-sm-push-12 { - left: 100%; - } - .col-sm-push-11 { - left: 91.66666667%; - } - .col-sm-push-10 { - left: 83.33333333%; - } - .col-sm-push-9 { - left: 75%; - } - .col-sm-push-8 { - left: 66.66666667%; - } - .col-sm-push-7 { - left: 58.33333333%; - } - .col-sm-push-6 { - left: 50%; - } - .col-sm-push-5 { - left: 41.66666667%; - } - .col-sm-push-4 { - left: 33.33333333%; - } - .col-sm-push-3 { - left: 25%; - } - .col-sm-push-2 { - left: 16.66666667%; - } - .col-sm-push-1 { - left: 8.33333333%; - } - .col-sm-push-0 { - left: auto; - } - .col-sm-offset-12 { - margin-left: 100%; - } - .col-sm-offset-11 { - margin-left: 91.66666667%; - } - .col-sm-offset-10 { - margin-left: 83.33333333%; - } - .col-sm-offset-9 { - margin-left: 75%; - } - .col-sm-offset-8 { - margin-left: 66.66666667%; - } - .col-sm-offset-7 { - margin-left: 58.33333333%; - } - .col-sm-offset-6 { - margin-left: 50%; - } - .col-sm-offset-5 { - margin-left: 41.66666667%; - } - .col-sm-offset-4 { - margin-left: 33.33333333%; - } - .col-sm-offset-3 { - margin-left: 25%; - } - .col-sm-offset-2 { - margin-left: 16.66666667%; - } - .col-sm-offset-1 { - margin-left: 8.33333333%; - } - .col-sm-offset-0 { - margin-left: 0%; - } -} -@media (min-width: 992px) { - .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { - float: left; - } - .col-md-12 { - width: 100%; - } - .col-md-11 { - width: 91.66666667%; - } - .col-md-10 { - width: 83.33333333%; - } - .col-md-9 { - width: 75%; - } - .col-md-8 { - width: 66.66666667%; - } - .col-md-7 { - width: 58.33333333%; - } - .col-md-6 { - width: 50%; - } - .col-md-5 { - width: 41.66666667%; - } - .col-md-4 { - width: 33.33333333%; - } - .col-md-3 { - width: 25%; - } - .col-md-2 { - width: 16.66666667%; - } - .col-md-1 { - width: 8.33333333%; - } - .col-md-pull-12 { - right: 100%; - } - .col-md-pull-11 { - right: 91.66666667%; - } - .col-md-pull-10 { - right: 83.33333333%; - } - .col-md-pull-9 { - right: 75%; - } - .col-md-pull-8 { - right: 66.66666667%; - } - .col-md-pull-7 { - right: 58.33333333%; - } - .col-md-pull-6 { - right: 50%; - } - .col-md-pull-5 { - right: 41.66666667%; - } - .col-md-pull-4 { - right: 33.33333333%; - } - .col-md-pull-3 { - right: 25%; - } - .col-md-pull-2 { - right: 16.66666667%; - } - .col-md-pull-1 { - right: 8.33333333%; - } - .col-md-pull-0 { - right: auto; - } - .col-md-push-12 { - left: 100%; - } - .col-md-push-11 { - left: 91.66666667%; - } - .col-md-push-10 { - left: 83.33333333%; - } - .col-md-push-9 { - left: 75%; - } - .col-md-push-8 { - left: 66.66666667%; - } - .col-md-push-7 { - left: 58.33333333%; - } - .col-md-push-6 { - left: 50%; - } - .col-md-push-5 { - left: 41.66666667%; - } - .col-md-push-4 { - left: 33.33333333%; - } - .col-md-push-3 { - left: 25%; - } - .col-md-push-2 { - left: 16.66666667%; - } - .col-md-push-1 { - left: 8.33333333%; - } - .col-md-push-0 { - left: auto; - } - .col-md-offset-12 { - margin-left: 100%; - } - .col-md-offset-11 { - margin-left: 91.66666667%; - } - .col-md-offset-10 { - margin-left: 83.33333333%; - } - .col-md-offset-9 { - margin-left: 75%; - } - .col-md-offset-8 { - margin-left: 66.66666667%; - } - .col-md-offset-7 { - margin-left: 58.33333333%; - } - .col-md-offset-6 { - margin-left: 50%; - } - .col-md-offset-5 { - margin-left: 41.66666667%; - } - .col-md-offset-4 { - margin-left: 33.33333333%; - } - .col-md-offset-3 { - margin-left: 25%; - } - .col-md-offset-2 { - margin-left: 16.66666667%; - } - .col-md-offset-1 { - margin-left: 8.33333333%; - } - .col-md-offset-0 { - margin-left: 0%; - } -} -@media (min-width: 1200px) { - .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { - float: left; - } - .col-lg-12 { - width: 100%; - } - .col-lg-11 { - width: 91.66666667%; - } - .col-lg-10 { - width: 83.33333333%; - } - .col-lg-9 { - width: 75%; - } - .col-lg-8 { - width: 66.66666667%; - } - .col-lg-7 { - width: 58.33333333%; - } - .col-lg-6 { - width: 50%; - } - .col-lg-5 { - width: 41.66666667%; - } - .col-lg-4 { - width: 33.33333333%; - } - .col-lg-3 { - width: 25%; - } - .col-lg-2 { - width: 16.66666667%; - } - .col-lg-1 { - width: 8.33333333%; - } - .col-lg-pull-12 { - right: 100%; - } - .col-lg-pull-11 { - right: 91.66666667%; - } - .col-lg-pull-10 { - right: 83.33333333%; - } - .col-lg-pull-9 { - right: 75%; - } - .col-lg-pull-8 { - right: 66.66666667%; - } - .col-lg-pull-7 { - right: 58.33333333%; - } - .col-lg-pull-6 { - right: 50%; - } - .col-lg-pull-5 { - right: 41.66666667%; - } - .col-lg-pull-4 { - right: 33.33333333%; - } - .col-lg-pull-3 { - right: 25%; - } - .col-lg-pull-2 { - right: 16.66666667%; - } - .col-lg-pull-1 { - right: 8.33333333%; - } - .col-lg-pull-0 { - right: auto; - } - .col-lg-push-12 { - left: 100%; - } - .col-lg-push-11 { - left: 91.66666667%; - } - .col-lg-push-10 { - left: 83.33333333%; - } - .col-lg-push-9 { - left: 75%; - } - .col-lg-push-8 { - left: 66.66666667%; - } - .col-lg-push-7 { - left: 58.33333333%; - } - .col-lg-push-6 { - left: 50%; - } - .col-lg-push-5 { - left: 41.66666667%; - } - .col-lg-push-4 { - left: 33.33333333%; - } - .col-lg-push-3 { - left: 25%; - } - .col-lg-push-2 { - left: 16.66666667%; - } - .col-lg-push-1 { - left: 8.33333333%; - } - .col-lg-push-0 { - left: auto; - } - .col-lg-offset-12 { - margin-left: 100%; - } - .col-lg-offset-11 { - margin-left: 91.66666667%; - } - .col-lg-offset-10 { - margin-left: 83.33333333%; - } - .col-lg-offset-9 { - margin-left: 75%; - } - .col-lg-offset-8 { - margin-left: 66.66666667%; - } - .col-lg-offset-7 { - margin-left: 58.33333333%; - } - .col-lg-offset-6 { - margin-left: 50%; - } - .col-lg-offset-5 { - margin-left: 41.66666667%; - } - .col-lg-offset-4 { - margin-left: 33.33333333%; - } - .col-lg-offset-3 { - margin-left: 25%; - } - .col-lg-offset-2 { - margin-left: 16.66666667%; - } - .col-lg-offset-1 { - margin-left: 8.33333333%; - } - .col-lg-offset-0 { - margin-left: 0%; - } -} -table { - background-color: transparent; -} -th { - text-align: left; -} -.table { - width: 100%; - max-width: 100%; - margin-bottom: 20px; -} -.table > thead > tr > th, -.table > tbody > tr > th, -.table > tfoot > tr > th, -.table > thead > tr > td, -.table > tbody > tr > td, -.table > tfoot > tr > td { - padding: 8px; - line-height: 1.42857143; - vertical-align: top; - border-top: 1px solid #dddddd; -} -.table > thead > tr > th { - vertical-align: bottom; - border-bottom: 2px solid #dddddd; -} -.table > caption + thead > tr:first-child > th, -.table > colgroup + thead > tr:first-child > th, -.table > thead:first-child > tr:first-child > th, -.table > caption + thead > tr:first-child > td, -.table > colgroup + thead > tr:first-child > td, -.table > thead:first-child > tr:first-child > td { - border-top: 0; -} -.table > tbody + tbody { - border-top: 2px solid #dddddd; -} -.table .table { - background-color: #ffffff; -} -.table-condensed > thead > tr > th, -.table-condensed > tbody > tr > th, -.table-condensed > tfoot > tr > th, -.table-condensed > thead > tr > td, -.table-condensed > tbody > tr > td, -.table-condensed > tfoot > tr > td { - padding: 5px; -} -.table-bordered { - border: 1px solid #dddddd; -} -.table-bordered > thead > tr > th, -.table-bordered > tbody > tr > th, -.table-bordered > tfoot > tr > th, -.table-bordered > thead > tr > td, -.table-bordered > tbody > tr > td, -.table-bordered > tfoot > tr > td { - border: 1px solid #dddddd; -} -.table-bordered > thead > tr > th, -.table-bordered > thead > tr > td { - border-bottom-width: 2px; -} -.table-striped > tbody > tr:nth-child(odd) > td, -.table-striped > tbody > tr:nth-child(odd) > th { - background-color: #f9f9f9; -} -.table-hover > tbody > tr:hover > td, -.table-hover > tbody > tr:hover > th { - background-color: #f5f5f5; -} -table col[class*="col-"] { - position: static; - float: none; - display: table-column; -} -table td[class*="col-"], -table th[class*="col-"] { - position: static; - float: none; - display: table-cell; -} -.table > thead > tr > td.active, -.table > tbody > tr > td.active, -.table > tfoot > tr > td.active, -.table > thead > tr > th.active, -.table > tbody > tr > th.active, -.table > tfoot > tr > th.active, -.table > thead > tr.active > td, -.table > tbody > tr.active > td, -.table > tfoot > tr.active > td, -.table > thead > tr.active > th, -.table > tbody > tr.active > th, -.table > tfoot > tr.active > th { - background-color: #f5f5f5; -} -.table-hover > tbody > tr > td.active:hover, -.table-hover > tbody > tr > th.active:hover, -.table-hover > tbody > tr.active:hover > td, -.table-hover > tbody > tr:hover > .active, -.table-hover > tbody > tr.active:hover > th { - background-color: #e8e8e8; -} -.table > thead > tr > td.success, -.table > tbody > tr > td.success, -.table > tfoot > tr > td.success, -.table > thead > tr > th.success, -.table > tbody > tr > th.success, -.table > tfoot > tr > th.success, -.table > thead > tr.success > td, -.table > tbody > tr.success > td, -.table > tfoot > tr.success > td, -.table > thead > tr.success > th, -.table > tbody > tr.success > th, -.table > tfoot > tr.success > th { - background-color: #dff0d8; -} -.table-hover > tbody > tr > td.success:hover, -.table-hover > tbody > tr > th.success:hover, -.table-hover > tbody > tr.success:hover > td, -.table-hover > tbody > tr:hover > .success, -.table-hover > tbody > tr.success:hover > th { - background-color: #d0e9c6; -} -.table > thead > tr > td.info, -.table > tbody > tr > td.info, -.table > tfoot > tr > td.info, -.table > thead > tr > th.info, -.table > tbody > tr > th.info, -.table > tfoot > tr > th.info, -.table > thead > tr.info > td, -.table > tbody > tr.info > td, -.table > tfoot > tr.info > td, -.table > thead > tr.info > th, -.table > tbody > tr.info > th, -.table > tfoot > tr.info > th { - background-color: #d9edf7; -} -.table-hover > tbody > tr > td.info:hover, -.table-hover > tbody > tr > th.info:hover, -.table-hover > tbody > tr.info:hover > td, -.table-hover > tbody > tr:hover > .info, -.table-hover > tbody > tr.info:hover > th { - background-color: #c4e3f3; -} -.table > thead > tr > td.warning, -.table > tbody > tr > td.warning, -.table > tfoot > tr > td.warning, -.table > thead > tr > th.warning, -.table > tbody > tr > th.warning, -.table > tfoot > tr > th.warning, -.table > thead > tr.warning > td, -.table > tbody > tr.warning > td, -.table > tfoot > tr.warning > td, -.table > thead > tr.warning > th, -.table > tbody > tr.warning > th, -.table > tfoot > tr.warning > th { - background-color: #fcf8e3; -} -.table-hover > tbody > tr > td.warning:hover, -.table-hover > tbody > tr > th.warning:hover, -.table-hover > tbody > tr.warning:hover > td, -.table-hover > tbody > tr:hover > .warning, -.table-hover > tbody > tr.warning:hover > th { - background-color: #faf2cc; -} -.table > thead > tr > td.danger, -.table > tbody > tr > td.danger, -.table > tfoot > tr > td.danger, -.table > thead > tr > th.danger, -.table > tbody > tr > th.danger, -.table > tfoot > tr > th.danger, -.table > thead > tr.danger > td, -.table > tbody > tr.danger > td, -.table > tfoot > tr.danger > td, -.table > thead > tr.danger > th, -.table > tbody > tr.danger > th, -.table > tfoot > tr.danger > th { - background-color: #f2dede; -} -.table-hover > tbody > tr > td.danger:hover, -.table-hover > tbody > tr > th.danger:hover, -.table-hover > tbody > tr.danger:hover > td, -.table-hover > tbody > tr:hover > .danger, -.table-hover > tbody > tr.danger:hover > th { - background-color: #ebcccc; -} -@media screen and (max-width: 767px) { - .table-responsive { - width: 100%; - margin-bottom: 15px; - overflow-y: hidden; - overflow-x: auto; - -ms-overflow-style: -ms-autohiding-scrollbar; - border: 1px solid #dddddd; - -webkit-overflow-scrolling: touch; - } - .table-responsive > .table { - margin-bottom: 0; - } - .table-responsive > .table > thead > tr > th, - .table-responsive > .table > tbody > tr > th, - .table-responsive > .table > tfoot > tr > th, - .table-responsive > .table > thead > tr > td, - .table-responsive > .table > tbody > tr > td, - .table-responsive > .table > tfoot > tr > td { - white-space: nowrap; - } - .table-responsive > .table-bordered { - border: 0; - } - .table-responsive > .table-bordered > thead > tr > th:first-child, - .table-responsive > .table-bordered > tbody > tr > th:first-child, - .table-responsive > .table-bordered > tfoot > tr > th:first-child, - .table-responsive > .table-bordered > thead > tr > td:first-child, - .table-responsive > .table-bordered > tbody > tr > td:first-child, - .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; - } - .table-responsive > .table-bordered > thead > tr > th:last-child, - .table-responsive > .table-bordered > tbody > tr > th:last-child, - .table-responsive > .table-bordered > tfoot > tr > th:last-child, - .table-responsive > .table-bordered > thead > tr > td:last-child, - .table-responsive > .table-bordered > tbody > tr > td:last-child, - .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; - } - .table-responsive > .table-bordered > tbody > tr:last-child > th, - .table-responsive > .table-bordered > tfoot > tr:last-child > th, - .table-responsive > .table-bordered > tbody > tr:last-child > td, - .table-responsive > .table-bordered > tfoot > tr:last-child > td { - border-bottom: 0; - } -} -fieldset { - padding: 0; - margin: 0; - border: 0; - min-width: 0; -} -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: inherit; - color: #333333; - border: 0; - border-bottom: 1px solid #e5e5e5; -} -label { - display: inline-block; - max-width: 100%; - margin-bottom: 5px; - font-weight: bold; -} -input[type="search"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; - line-height: normal; -} -input[type="file"] { - display: block; -} -input[type="range"] { - display: block; - width: 100%; -} -select[multiple], -select[size] { - height: auto; -} -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -output { - display: block; - padding-top: 7px; - font-size: 14px; - line-height: 1.42857143; - color: #555555; -} -.form-control { - display: block; - width: 100%; - height: 34px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - color: #555555; - background-color: #ffffff; - background-image: none; - border: 1px solid #cccccc; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; -} -.form-control:focus { - border-color: #66afe9; - outline: 0; - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6); -} -.form-control::-moz-placeholder { - color: #777777; - opacity: 1; -} -.form-control:-ms-input-placeholder { - color: #777777; -} -.form-control::-webkit-input-placeholder { - color: #777777; -} -.form-control[disabled], -.form-control[readonly], -fieldset[disabled] .form-control { - cursor: not-allowed; - background-color: #eeeeee; - opacity: 1; -} -textarea.form-control { - height: auto; -} -input[type="search"] { - -webkit-appearance: none; -} -input[type="date"], -input[type="time"], -input[type="datetime-local"], -input[type="month"] { - line-height: 34px; - line-height: 1.42857143 \0; -} -input[type="date"].input-sm, -input[type="time"].input-sm, -input[type="datetime-local"].input-sm, -input[type="month"].input-sm { - line-height: 30px; -} -input[type="date"].input-lg, -input[type="time"].input-lg, -input[type="datetime-local"].input-lg, -input[type="month"].input-lg { - line-height: 46px; -} -.form-group { - margin-bottom: 15px; -} -.radio, -.checkbox { - position: relative; - display: block; - min-height: 20px; - margin-top: 10px; - margin-bottom: 10px; -} -.radio label, -.checkbox label { - padding-left: 20px; - margin-bottom: 0; - font-weight: normal; - cursor: pointer; -} -.radio input[type="radio"], -.radio-inline input[type="radio"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { - position: absolute; - margin-left: -20px; - margin-top: 4px \9; -} -.radio + .radio, -.checkbox + .checkbox { - margin-top: -5px; -} -.radio-inline, -.checkbox-inline { - display: inline-block; - padding-left: 20px; - margin-bottom: 0; - vertical-align: middle; - font-weight: normal; - cursor: pointer; -} -.radio-inline + .radio-inline, -.checkbox-inline + .checkbox-inline { - margin-top: 0; - margin-left: 10px; -} -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"].disabled, -input[type="checkbox"].disabled, -fieldset[disabled] input[type="radio"], -fieldset[disabled] input[type="checkbox"] { - cursor: not-allowed; -} -.radio-inline.disabled, -.checkbox-inline.disabled, -fieldset[disabled] .radio-inline, -fieldset[disabled] .checkbox-inline { - cursor: not-allowed; -} -.radio.disabled label, -.checkbox.disabled label, -fieldset[disabled] .radio label, -fieldset[disabled] .checkbox label { - cursor: not-allowed; -} -.form-control-static { - padding-top: 7px; - padding-bottom: 7px; - margin-bottom: 0; -} -.form-control-static.input-lg, -.form-control-static.input-sm { - padding-left: 0; - padding-right: 0; -} -.input-sm, -.form-horizontal .form-group-sm .form-control { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -select.input-sm { - height: 30px; - line-height: 30px; -} -textarea.input-sm, -select[multiple].input-sm { - height: auto; -} -.input-lg, -.form-horizontal .form-group-lg .form-control { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.33; - border-radius: 6px; -} -select.input-lg { - height: 46px; - line-height: 46px; -} -textarea.input-lg, -select[multiple].input-lg { - height: auto; -} -.has-feedback { - position: relative; -} -.has-feedback .form-control { - padding-right: 42.5px; -} -.form-control-feedback { - position: absolute; - top: 25px; - right: 0; - z-index: 2; - display: block; - width: 34px; - height: 34px; - line-height: 34px; - text-align: center; -} -.input-lg + .form-control-feedback { - width: 46px; - height: 46px; - line-height: 46px; -} -.input-sm + .form-control-feedback { - width: 30px; - height: 30px; - line-height: 30px; -} -.has-success .help-block, -.has-success .control-label, -.has-success .radio, -.has-success .checkbox, -.has-success .radio-inline, -.has-success .checkbox-inline { - color: #3c763d; -} -.has-success .form-control { - border-color: #3c763d; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-success .form-control:focus { - border-color: #2b542c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; -} -.has-success .input-group-addon { - color: #3c763d; - border-color: #3c763d; - background-color: #dff0d8; -} -.has-success .form-control-feedback { - color: #3c763d; -} -.has-warning .help-block, -.has-warning .control-label, -.has-warning .radio, -.has-warning .checkbox, -.has-warning .radio-inline, -.has-warning .checkbox-inline { - color: #8a6d3b; -} -.has-warning .form-control { - border-color: #8a6d3b; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-warning .form-control:focus { - border-color: #66512c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; -} -.has-warning .input-group-addon { - color: #8a6d3b; - border-color: #8a6d3b; - background-color: #fcf8e3; -} -.has-warning .form-control-feedback { - color: #8a6d3b; -} -.has-error .help-block, -.has-error .control-label, -.has-error .radio, -.has-error .checkbox, -.has-error .radio-inline, -.has-error .checkbox-inline { - color: #a94442; -} -.has-error .form-control { - border-color: #a94442; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-error .form-control:focus { - border-color: #843534; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; -} -.has-error .input-group-addon { - color: #a94442; - border-color: #a94442; - background-color: #f2dede; -} -.has-error .form-control-feedback { - color: #a94442; -} -.has-feedback label.sr-only ~ .form-control-feedback { - top: 0; -} -.help-block { - display: block; - margin-top: 5px; - margin-bottom: 10px; - color: #737373; -} -@media (min-width: 768px) { - .form-inline .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .form-inline .input-group { - display: inline-table; - vertical-align: middle; - } - .form-inline .input-group .input-group-addon, - .form-inline .input-group .input-group-btn, - .form-inline .input-group .form-control { - width: auto; - } - .form-inline .input-group > .form-control { - width: 100%; - } - .form-inline .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio, - .form-inline .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio label, - .form-inline .checkbox label { - padding-left: 0; - } - .form-inline .radio input[type="radio"], - .form-inline .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .form-inline .has-feedback .form-control-feedback { - top: 0; - } -} -.form-horizontal .radio, -.form-horizontal .checkbox, -.form-horizontal .radio-inline, -.form-horizontal .checkbox-inline { - margin-top: 0; - margin-bottom: 0; - padding-top: 7px; -} -.form-horizontal .radio, -.form-horizontal .checkbox { - min-height: 27px; -} -.form-horizontal .form-group { - margin-left: -15px; - margin-right: -15px; -} -@media (min-width: 768px) { - .form-horizontal .control-label { - text-align: right; - margin-bottom: 0; - padding-top: 7px; - } -} -.form-horizontal .has-feedback .form-control-feedback { - top: 0; - right: 15px; -} -@media (min-width: 768px) { - .form-horizontal .form-group-lg .control-label { - padding-top: 14.3px; - } -} -@media (min-width: 768px) { - .form-horizontal .form-group-sm .control-label { - padding-top: 6px; - } -} -.btn { - display: inline-block; - margin-bottom: 0; - font-weight: normal; - text-align: center; - vertical-align: middle; - cursor: pointer; - background-image: none; - border: 1px solid transparent; - white-space: nowrap; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - border-radius: 4px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.btn:focus, -.btn:active:focus, -.btn.active:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.btn:hover, -.btn:focus { - color: #333333; - text-decoration: none; -} -.btn:active, -.btn.active { - outline: 0; - background-image: none; - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} -.btn.disabled, -.btn[disabled], -fieldset[disabled] .btn { - cursor: not-allowed; - pointer-events: none; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - box-shadow: none; -} -.btn-default { - color: #333333; - background-color: #ffffff; - border-color: #cccccc; -} -.btn-default:hover, -.btn-default:focus, -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - color: #333333; - background-color: #e6e6e6; - border-color: #adadad; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - background-image: none; -} -.btn-default.disabled, -.btn-default[disabled], -fieldset[disabled] .btn-default, -.btn-default.disabled:hover, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default:hover, -.btn-default.disabled:focus, -.btn-default[disabled]:focus, -fieldset[disabled] .btn-default:focus, -.btn-default.disabled:active, -.btn-default[disabled]:active, -fieldset[disabled] .btn-default:active, -.btn-default.disabled.active, -.btn-default[disabled].active, -fieldset[disabled] .btn-default.active { - background-color: #ffffff; - border-color: #cccccc; -} -.btn-default .badge { - color: #ffffff; - background-color: #333333; -} -.btn-primary { - color: #ffffff; - background-color: #428bca; - border-color: #357ebd; -} -.btn-primary:hover, -.btn-primary:focus, -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - color: #ffffff; - background-color: #3071a9; - border-color: #285e8e; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - background-image: none; -} -.btn-primary.disabled, -.btn-primary[disabled], -fieldset[disabled] .btn-primary, -.btn-primary.disabled:hover, -.btn-primary[disabled]:hover, -fieldset[disabled] .btn-primary:hover, -.btn-primary.disabled:focus, -.btn-primary[disabled]:focus, -fieldset[disabled] .btn-primary:focus, -.btn-primary.disabled:active, -.btn-primary[disabled]:active, -fieldset[disabled] .btn-primary:active, -.btn-primary.disabled.active, -.btn-primary[disabled].active, -fieldset[disabled] .btn-primary.active { - background-color: #428bca; - border-color: #357ebd; -} -.btn-primary .badge { - color: #428bca; - background-color: #ffffff; -} -.btn-success { - color: #ffffff; - background-color: #5cb85c; - border-color: #4cae4c; -} -.btn-success:hover, -.btn-success:focus, -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - color: #ffffff; - background-color: #449d44; - border-color: #398439; -} -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - background-image: none; -} -.btn-success.disabled, -.btn-success[disabled], -fieldset[disabled] .btn-success, -.btn-success.disabled:hover, -.btn-success[disabled]:hover, -fieldset[disabled] .btn-success:hover, -.btn-success.disabled:focus, -.btn-success[disabled]:focus, -fieldset[disabled] .btn-success:focus, -.btn-success.disabled:active, -.btn-success[disabled]:active, -fieldset[disabled] .btn-success:active, -.btn-success.disabled.active, -.btn-success[disabled].active, -fieldset[disabled] .btn-success.active { - background-color: #5cb85c; - border-color: #4cae4c; -} -.btn-success .badge { - color: #5cb85c; - background-color: #ffffff; -} -.btn-info { - color: #ffffff; - background-color: #5bc0de; - border-color: #46b8da; -} -.btn-info:hover, -.btn-info:focus, -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - color: #ffffff; - background-color: #31b0d5; - border-color: #269abc; -} -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - background-image: none; -} -.btn-info.disabled, -.btn-info[disabled], -fieldset[disabled] .btn-info, -.btn-info.disabled:hover, -.btn-info[disabled]:hover, -fieldset[disabled] .btn-info:hover, -.btn-info.disabled:focus, -.btn-info[disabled]:focus, -fieldset[disabled] .btn-info:focus, -.btn-info.disabled:active, -.btn-info[disabled]:active, -fieldset[disabled] .btn-info:active, -.btn-info.disabled.active, -.btn-info[disabled].active, -fieldset[disabled] .btn-info.active { - background-color: #5bc0de; - border-color: #46b8da; -} -.btn-info .badge { - color: #5bc0de; - background-color: #ffffff; -} -.btn-warning { - color: #ffffff; - background-color: #f0ad4e; - border-color: #eea236; -} -.btn-warning:hover, -.btn-warning:focus, -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - color: #ffffff; - background-color: #ec971f; - border-color: #d58512; -} -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - background-image: none; -} -.btn-warning.disabled, -.btn-warning[disabled], -fieldset[disabled] .btn-warning, -.btn-warning.disabled:hover, -.btn-warning[disabled]:hover, -fieldset[disabled] .btn-warning:hover, -.btn-warning.disabled:focus, -.btn-warning[disabled]:focus, -fieldset[disabled] .btn-warning:focus, -.btn-warning.disabled:active, -.btn-warning[disabled]:active, -fieldset[disabled] .btn-warning:active, -.btn-warning.disabled.active, -.btn-warning[disabled].active, -fieldset[disabled] .btn-warning.active { - background-color: #f0ad4e; - border-color: #eea236; -} -.btn-warning .badge { - color: #f0ad4e; - background-color: #ffffff; -} -.btn-danger { - color: #ffffff; - background-color: #d9534f; - border-color: #d43f3a; -} -.btn-danger:hover, -.btn-danger:focus, -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - color: #ffffff; - background-color: #c9302c; - border-color: #ac2925; -} -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - background-image: none; -} -.btn-danger.disabled, -.btn-danger[disabled], -fieldset[disabled] .btn-danger, -.btn-danger.disabled:hover, -.btn-danger[disabled]:hover, -fieldset[disabled] .btn-danger:hover, -.btn-danger.disabled:focus, -.btn-danger[disabled]:focus, -fieldset[disabled] .btn-danger:focus, -.btn-danger.disabled:active, -.btn-danger[disabled]:active, -fieldset[disabled] .btn-danger:active, -.btn-danger.disabled.active, -.btn-danger[disabled].active, -fieldset[disabled] .btn-danger.active { - background-color: #d9534f; - border-color: #d43f3a; -} -.btn-danger .badge { - color: #d9534f; - background-color: #ffffff; -} -.btn-link { - color: #428bca; - font-weight: normal; - cursor: pointer; - border-radius: 0; -} -.btn-link, -.btn-link:active, -.btn-link[disabled], -fieldset[disabled] .btn-link { - background-color: transparent; - -webkit-box-shadow: none; - box-shadow: none; -} -.btn-link, -.btn-link:hover, -.btn-link:focus, -.btn-link:active { - border-color: transparent; -} -.btn-link:hover, -.btn-link:focus { - color: #2a6496; - text-decoration: underline; - background-color: transparent; -} -.btn-link[disabled]:hover, -fieldset[disabled] .btn-link:hover, -.btn-link[disabled]:focus, -fieldset[disabled] .btn-link:focus { - color: #777777; - text-decoration: none; -} -.btn-lg, -.btn-group-lg > .btn { - padding: 10px 16px; - font-size: 18px; - line-height: 1.33; - border-radius: 6px; -} -.btn-sm, -.btn-group-sm > .btn { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.btn-xs, -.btn-group-xs > .btn { - padding: 1px 5px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.btn-block { - display: block; - width: 100%; -} -.btn-block + .btn-block { - margin-top: 5px; -} -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} -.fade.in { - opacity: 1; -} -.collapse { - display: none; -} -.collapse.in { - display: block; -} -tr.collapse.in { - display: table-row; -} -tbody.collapse.in { - display: table-row-group; -} -.collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition: height 0.35s ease; - -o-transition: height 0.35s ease; - transition: height 0.35s ease; -} -.caret { - display: inline-block; - width: 0; - height: 0; - margin-left: 2px; - vertical-align: middle; - border-top: 4px solid; - border-right: 4px solid transparent; - border-left: 4px solid transparent; -} -.dropdown { - position: relative; -} -.dropdown-toggle:focus { - outline: 0; -} -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - list-style: none; - font-size: 14px; - text-align: left; - background-color: #ffffff; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.15); - border-radius: 4px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - background-clip: padding-box; -} -.dropdown-menu.pull-right { - right: 0; - left: auto; -} -.dropdown-menu .divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 1.42857143; - color: #333333; - white-space: nowrap; -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - text-decoration: none; - color: #262626; - background-color: #f5f5f5; -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: #ffffff; - text-decoration: none; - outline: 0; - background-color: #428bca; -} -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #777777; -} -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - cursor: not-allowed; -} -.open > .dropdown-menu { - display: block; -} -.open > a { - outline: 0; -} -.dropdown-menu-right { - left: auto; - right: 0; -} -.dropdown-menu-left { - left: 0; - right: auto; -} -.dropdown-header { - display: block; - padding: 3px 20px; - font-size: 12px; - line-height: 1.42857143; - color: #777777; - white-space: nowrap; -} -.dropdown-backdrop { - position: fixed; - left: 0; - right: 0; - bottom: 0; - top: 0; - z-index: 990; -} -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px solid; - content: ""; -} -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; -} -@media (min-width: 768px) { - .navbar-right .dropdown-menu { - left: auto; - right: 0; - } - .navbar-right .dropdown-menu-left { - left: 0; - right: auto; - } -} -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-block; - vertical-align: middle; -} -.btn-group > .btn, -.btn-group-vertical > .btn { - position: relative; - float: left; -} -.btn-group > .btn:hover, -.btn-group-vertical > .btn:hover, -.btn-group > .btn:focus, -.btn-group-vertical > .btn:focus, -.btn-group > .btn:active, -.btn-group-vertical > .btn:active, -.btn-group > .btn.active, -.btn-group-vertical > .btn.active { - z-index: 2; -} -.btn-group > .btn:focus, -.btn-group-vertical > .btn:focus { - outline: 0; -} -.btn-group .btn + .btn, -.btn-group .btn + .btn-group, -.btn-group .btn-group + .btn, -.btn-group .btn-group + .btn-group { - margin-left: -1px; -} -.btn-toolbar { - margin-left: -5px; -} -.btn-toolbar .btn-group, -.btn-toolbar .input-group { - float: left; -} -.btn-toolbar > .btn, -.btn-toolbar > .btn-group, -.btn-toolbar > .input-group { - margin-left: 5px; -} -.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0; -} -.btn-group > .btn:first-child { - margin-left: 0; -} -.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} -.btn-group > .btn:last-child:not(:first-child), -.btn-group > .dropdown-toggle:not(:first-child) { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.btn-group > .btn-group { - float: left; -} -.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group > .btn-group:first-child > .btn:last-child, -.btn-group > .btn-group:first-child > .dropdown-toggle { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} -.btn-group > .btn-group:last-child > .btn:first-child { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} -.btn-group > .btn + .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; -} -.btn-group > .btn-lg + .dropdown-toggle { - padding-left: 12px; - padding-right: 12px; -} -.btn-group.open .dropdown-toggle { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} -.btn-group.open .dropdown-toggle.btn-link { - -webkit-box-shadow: none; - box-shadow: none; -} -.btn .caret { - margin-left: 0; -} -.btn-lg .caret { - border-width: 5px 5px 0; - border-bottom-width: 0; -} -.dropup .btn-lg .caret { - border-width: 0 5px 5px; -} -.btn-group-vertical > .btn, -.btn-group-vertical > .btn-group, -.btn-group-vertical > .btn-group > .btn { - display: block; - float: none; - width: 100%; - max-width: 100%; -} -.btn-group-vertical > .btn-group > .btn { - float: none; -} -.btn-group-vertical > .btn + .btn, -.btn-group-vertical > .btn + .btn-group, -.btn-group-vertical > .btn-group + .btn, -.btn-group-vertical > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; -} -.btn-group-vertical > .btn:not(:first-child):not(:last-child) { - border-radius: 0; -} -.btn-group-vertical > .btn:first-child:not(:last-child) { - border-top-right-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn:last-child:not(:first-child) { - border-bottom-left-radius: 4px; - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.btn-group-justified { - display: table; - width: 100%; - table-layout: fixed; - border-collapse: separate; -} -.btn-group-justified > .btn, -.btn-group-justified > .btn-group { - float: none; - display: table-cell; - width: 1%; -} -.btn-group-justified > .btn-group .btn { - width: 100%; -} -.btn-group-justified > .btn-group .dropdown-menu { - left: auto; -} -[data-toggle="buttons"] > .btn > input[type="radio"], -[data-toggle="buttons"] > .btn > input[type="checkbox"] { - position: absolute; - z-index: -1; - opacity: 0; - filter: alpha(opacity=0); -} -.input-group { - position: relative; - display: table; - border-collapse: separate; -} -.input-group[class*="col-"] { - float: none; - padding-left: 0; - padding-right: 0; -} -.input-group .form-control { - position: relative; - z-index: 2; - float: left; - width: 100%; - margin-bottom: 0; -} -.input-group-lg > .form-control, -.input-group-lg > .input-group-addon, -.input-group-lg > .input-group-btn > .btn { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.33; - border-radius: 6px; -} -select.input-group-lg > .form-control, -select.input-group-lg > .input-group-addon, -select.input-group-lg > .input-group-btn > .btn { - height: 46px; - line-height: 46px; -} -textarea.input-group-lg > .form-control, -textarea.input-group-lg > .input-group-addon, -textarea.input-group-lg > .input-group-btn > .btn, -select[multiple].input-group-lg > .form-control, -select[multiple].input-group-lg > .input-group-addon, -select[multiple].input-group-lg > .input-group-btn > .btn { - height: auto; -} -.input-group-sm > .form-control, -.input-group-sm > .input-group-addon, -.input-group-sm > .input-group-btn > .btn { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -select.input-group-sm > .form-control, -select.input-group-sm > .input-group-addon, -select.input-group-sm > .input-group-btn > .btn { - height: 30px; - line-height: 30px; -} -textarea.input-group-sm > .form-control, -textarea.input-group-sm > .input-group-addon, -textarea.input-group-sm > .input-group-btn > .btn, -select[multiple].input-group-sm > .form-control, -select[multiple].input-group-sm > .input-group-addon, -select[multiple].input-group-sm > .input-group-btn > .btn { - height: auto; -} -.input-group-addon, -.input-group-btn, -.input-group .form-control { - display: table-cell; -} -.input-group-addon:not(:first-child):not(:last-child), -.input-group-btn:not(:first-child):not(:last-child), -.input-group .form-control:not(:first-child):not(:last-child) { - border-radius: 0; -} -.input-group-addon, -.input-group-btn { - width: 1%; - white-space: nowrap; - vertical-align: middle; -} -.input-group-addon { - padding: 6px 12px; - font-size: 14px; - font-weight: normal; - line-height: 1; - color: #555555; - text-align: center; - background-color: #eeeeee; - border: 1px solid #cccccc; - border-radius: 4px; -} -.input-group-addon.input-sm { - padding: 5px 10px; - font-size: 12px; - border-radius: 3px; -} -.input-group-addon.input-lg { - padding: 10px 16px; - font-size: 18px; - border-radius: 6px; -} -.input-group-addon input[type="radio"], -.input-group-addon input[type="checkbox"] { - margin-top: 0; -} -.input-group .form-control:first-child, -.input-group-addon:first-child, -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group > .btn, -.input-group-btn:first-child > .dropdown-toggle, -.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), -.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { - border-bottom-right-radius: 0; - border-top-right-radius: 0; -} -.input-group-addon:first-child { - border-right: 0; -} -.input-group .form-control:last-child, -.input-group-addon:last-child, -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group > .btn, -.input-group-btn:last-child > .dropdown-toggle, -.input-group-btn:first-child > .btn:not(:first-child), -.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} -.input-group-addon:last-child { - border-left: 0; -} -.input-group-btn { - position: relative; - font-size: 0; - white-space: nowrap; -} -.input-group-btn > .btn { - position: relative; -} -.input-group-btn > .btn + .btn { - margin-left: -1px; -} -.input-group-btn > .btn:hover, -.input-group-btn > .btn:focus, -.input-group-btn > .btn:active { - z-index: 2; -} -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group { - margin-right: -1px; -} -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group { - margin-left: -1px; -} -.nav { - margin-bottom: 0; - padding-left: 0; - list-style: none; -} -.nav > li { - position: relative; - display: block; -} -.nav > li > a { - position: relative; - display: block; - padding: 10px 15px; -} -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #eeeeee; -} -.nav > li.disabled > a { - color: #777777; -} -.nav > li.disabled > a:hover, -.nav > li.disabled > a:focus { - color: #777777; - text-decoration: none; - background-color: transparent; - cursor: not-allowed; -} -.nav .open > a, -.nav .open > a:hover, -.nav .open > a:focus { - background-color: #eeeeee; - border-color: #428bca; -} -.nav .nav-divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.nav > li > a > img { - max-width: none; -} -.nav-tabs { - border-bottom: 1px solid #dddddd; -} -.nav-tabs > li { - float: left; - margin-bottom: -1px; -} -.nav-tabs > li > a { - margin-right: 2px; - line-height: 1.42857143; - border: 1px solid transparent; - border-radius: 4px 4px 0 0; -} -.nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #dddddd; -} -.nav-tabs > li.active > a, -.nav-tabs > li.active > a:hover, -.nav-tabs > li.active > a:focus { - color: #555555; - background-color: #ffffff; - border: 1px solid #dddddd; - border-bottom-color: transparent; - cursor: default; -} -.nav-tabs.nav-justified { - width: 100%; - border-bottom: 0; -} -.nav-tabs.nav-justified > li { - float: none; -} -.nav-tabs.nav-justified > li > a { - text-align: center; - margin-bottom: 5px; -} -.nav-tabs.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-tabs.nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs.nav-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs.nav-justified > .active > a, -.nav-tabs.nav-justified > .active > a:hover, -.nav-tabs.nav-justified > .active > a:focus { - border: 1px solid #dddddd; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li > a { - border-bottom: 1px solid #dddddd; - border-radius: 4px 4px 0 0; - } - .nav-tabs.nav-justified > .active > a, - .nav-tabs.nav-justified > .active > a:hover, - .nav-tabs.nav-justified > .active > a:focus { - border-bottom-color: #ffffff; - } -} -.nav-pills > li { - float: left; -} -.nav-pills > li > a { - border-radius: 4px; -} -.nav-pills > li + li { - margin-left: 2px; -} -.nav-pills > li.active > a, -.nav-pills > li.active > a:hover, -.nav-pills > li.active > a:focus { - color: #ffffff; - background-color: #428bca; -} -.nav-stacked > li { - float: none; -} -.nav-stacked > li + li { - margin-top: 2px; - margin-left: 0; -} -.nav-justified { - width: 100%; -} -.nav-justified > li { - float: none; -} -.nav-justified > li > a { - text-align: center; - margin-bottom: 5px; -} -.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs-justified { - border-bottom: 0; -} -.nav-tabs-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs-justified > .active > a, -.nav-tabs-justified > .active > a:hover, -.nav-tabs-justified > .active > a:focus { - border: 1px solid #dddddd; -} -@media (min-width: 768px) { - .nav-tabs-justified > li > a { - border-bottom: 1px solid #dddddd; - border-radius: 4px 4px 0 0; - } - .nav-tabs-justified > .active > a, - .nav-tabs-justified > .active > a:hover, - .nav-tabs-justified > .active > a:focus { - border-bottom-color: #ffffff; - } -} -.tab-content > .tab-pane { - display: none; -} -.tab-content > .active { - display: block; -} -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.navbar { - position: relative; - min-height: 50px; - margin-bottom: 20px; - border: 1px solid transparent; -} -@media (min-width: 768px) { - .navbar { - border-radius: 4px; - } -} -@media (min-width: 768px) { - .navbar-header { - float: left; - } -} -.navbar-collapse { - overflow-x: visible; - padding-right: 15px; - padding-left: 15px; - border-top: 1px solid transparent; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); - -webkit-overflow-scrolling: touch; -} -.navbar-collapse.in { - overflow-y: auto; -} -@media (min-width: 768px) { - .navbar-collapse { - width: auto; - border-top: 0; - box-shadow: none; - } - .navbar-collapse.collapse { - display: block !important; - height: auto !important; - padding-bottom: 0; - overflow: visible !important; - } - .navbar-collapse.in { - overflow-y: visible; - } - .navbar-fixed-top .navbar-collapse, - .navbar-static-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - padding-left: 0; - padding-right: 0; - } -} -.navbar-fixed-top .navbar-collapse, -.navbar-fixed-bottom .navbar-collapse { - max-height: 340px; -} -@media (max-width: 480px) and (orientation: landscape) { - .navbar-fixed-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - max-height: 200px; - } -} -.container > .navbar-header, -.container-fluid > .navbar-header, -.container > .navbar-collapse, -.container-fluid > .navbar-collapse { - margin-right: -15px; - margin-left: -15px; -} -@media (min-width: 768px) { - .container > .navbar-header, - .container-fluid > .navbar-header, - .container > .navbar-collapse, - .container-fluid > .navbar-collapse { - margin-right: 0; - margin-left: 0; - } -} -.navbar-static-top { - z-index: 1000; - border-width: 0 0 1px; -} -@media (min-width: 768px) { - .navbar-static-top { - border-radius: 0; - } -} -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); -} -@media (min-width: 768px) { - .navbar-fixed-top, - .navbar-fixed-bottom { - border-radius: 0; - } -} -.navbar-fixed-top { - top: 0; - border-width: 0 0 1px; -} -.navbar-fixed-bottom { - bottom: 0; - margin-bottom: 0; - border-width: 1px 0 0; -} -.navbar-brand { - float: left; - padding: 15px 15px; - font-size: 18px; - line-height: 20px; - height: 50px; -} -.navbar-brand:hover, -.navbar-brand:focus { - text-decoration: none; -} -@media (min-width: 768px) { - .navbar > .container .navbar-brand, - .navbar > .container-fluid .navbar-brand { - margin-left: -15px; - } -} -.navbar-toggle { - position: relative; - float: right; - margin-right: 15px; - padding: 9px 10px; - margin-top: 8px; - margin-bottom: 8px; - background-color: transparent; - background-image: none; - border: 1px solid transparent; - border-radius: 4px; -} -.navbar-toggle:focus { - outline: 0; -} -.navbar-toggle .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px; -} -.navbar-toggle .icon-bar + .icon-bar { - margin-top: 4px; -} -@media (min-width: 768px) { - .navbar-toggle { - display: none; - } -} -.navbar-nav { - margin: 7.5px -15px; -} -.navbar-nav > li > a { - padding-top: 10px; - padding-bottom: 10px; - line-height: 20px; -} -@media (max-width: 767px) { - .navbar-nav .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - box-shadow: none; - } - .navbar-nav .open .dropdown-menu > li > a, - .navbar-nav .open .dropdown-menu .dropdown-header { - padding: 5px 15px 5px 25px; - } - .navbar-nav .open .dropdown-menu > li > a { - line-height: 20px; - } - .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-nav .open .dropdown-menu > li > a:focus { - background-image: none; - } -} -@media (min-width: 768px) { - .navbar-nav { - float: left; - margin: 0; - } - .navbar-nav > li { - float: left; - } - .navbar-nav > li > a { - padding-top: 15px; - padding-bottom: 15px; - } - .navbar-nav.navbar-right:last-child { - margin-right: -15px; - } -} -@media (min-width: 768px) { - .navbar-left { - float: left !important; - } - .navbar-right { - float: right !important; - } -} -.navbar-form { - margin-left: -15px; - margin-right: -15px; - padding: 10px 15px; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - margin-top: 8px; - margin-bottom: 8px; -} -@media (min-width: 768px) { - .navbar-form .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .navbar-form .input-group { - display: inline-table; - vertical-align: middle; - } - .navbar-form .input-group .input-group-addon, - .navbar-form .input-group .input-group-btn, - .navbar-form .input-group .form-control { - width: auto; - } - .navbar-form .input-group > .form-control { - width: 100%; - } - .navbar-form .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio, - .navbar-form .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio label, - .navbar-form .checkbox label { - padding-left: 0; - } - .navbar-form .radio input[type="radio"], - .navbar-form .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .navbar-form .has-feedback .form-control-feedback { - top: 0; - } -} -@media (max-width: 767px) { - .navbar-form .form-group { - margin-bottom: 5px; - } -} -@media (min-width: 768px) { - .navbar-form { - width: auto; - border: 0; - margin-left: 0; - margin-right: 0; - padding-top: 0; - padding-bottom: 0; - -webkit-box-shadow: none; - box-shadow: none; - } - .navbar-form.navbar-right:last-child { - margin-right: -15px; - } -} -.navbar-nav > li > .dropdown-menu { - margin-top: 0; - border-top-right-radius: 0; - border-top-left-radius: 0; -} -.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.navbar-btn { - margin-top: 8px; - margin-bottom: 8px; -} -.navbar-btn.btn-sm { - margin-top: 10px; - margin-bottom: 10px; -} -.navbar-btn.btn-xs { - margin-top: 14px; - margin-bottom: 14px; -} -.navbar-text { - margin-top: 15px; - margin-bottom: 15px; -} -@media (min-width: 768px) { - .navbar-text { - float: left; - margin-left: 15px; - margin-right: 15px; - } - .navbar-text.navbar-right:last-child { - margin-right: 0; - } -} -.navbar-default { - background-color: #f8f8f8; - border-color: #e7e7e7; -} -.navbar-default .navbar-brand { - color: #777777; -} -.navbar-default .navbar-brand:hover, -.navbar-default .navbar-brand:focus { - color: #5e5e5e; - background-color: transparent; -} -.navbar-default .navbar-text { - color: #777777; -} -.navbar-default .navbar-nav > li > a { - color: #777777; -} -.navbar-default .navbar-nav > li > a:hover, -.navbar-default .navbar-nav > li > a:focus { - color: #333333; - background-color: transparent; -} -.navbar-default .navbar-nav > .active > a, -.navbar-default .navbar-nav > .active > a:hover, -.navbar-default .navbar-nav > .active > a:focus { - color: #555555; - background-color: #e7e7e7; -} -.navbar-default .navbar-nav > .disabled > a, -.navbar-default .navbar-nav > .disabled > a:hover, -.navbar-default .navbar-nav > .disabled > a:focus { - color: #cccccc; - background-color: transparent; -} -.navbar-default .navbar-toggle { - border-color: #dddddd; -} -.navbar-default .navbar-toggle:hover, -.navbar-default .navbar-toggle:focus { - background-color: #dddddd; -} -.navbar-default .navbar-toggle .icon-bar { - background-color: #888888; -} -.navbar-default .navbar-collapse, -.navbar-default .navbar-form { - border-color: #e7e7e7; -} -.navbar-default .navbar-nav > .open > a, -.navbar-default .navbar-nav > .open > a:hover, -.navbar-default .navbar-nav > .open > a:focus { - background-color: #e7e7e7; - color: #555555; -} -@media (max-width: 767px) { - .navbar-default .navbar-nav .open .dropdown-menu > li > a { - color: #777777; - } - .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { - color: #333333; - background-color: transparent; - } - .navbar-default .navbar-nav .open .dropdown-menu > .active > a, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #555555; - background-color: #e7e7e7; - } - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #cccccc; - background-color: transparent; - } -} -.navbar-default .navbar-link { - color: #777777; -} -.navbar-default .navbar-link:hover { - color: #333333; -} -.navbar-default .btn-link { - color: #777777; -} -.navbar-default .btn-link:hover, -.navbar-default .btn-link:focus { - color: #333333; -} -.navbar-default .btn-link[disabled]:hover, -fieldset[disabled] .navbar-default .btn-link:hover, -.navbar-default .btn-link[disabled]:focus, -fieldset[disabled] .navbar-default .btn-link:focus { - color: #cccccc; -} -.navbar-inverse { - background-color: #222222; - border-color: #080808; -} -.navbar-inverse .navbar-brand { - color: #777777; -} -.navbar-inverse .navbar-brand:hover, -.navbar-inverse .navbar-brand:focus { - color: #ffffff; - background-color: transparent; -} -.navbar-inverse .navbar-text { - color: #777777; -} -.navbar-inverse .navbar-nav > li > a { - color: #777777; -} -.navbar-inverse .navbar-nav > li > a:hover, -.navbar-inverse .navbar-nav > li > a:focus { - color: #ffffff; - background-color: transparent; -} -.navbar-inverse .navbar-nav > .active > a, -.navbar-inverse .navbar-nav > .active > a:hover, -.navbar-inverse .navbar-nav > .active > a:focus { - color: #ffffff; - background-color: #080808; -} -.navbar-inverse .navbar-nav > .disabled > a, -.navbar-inverse .navbar-nav > .disabled > a:hover, -.navbar-inverse .navbar-nav > .disabled > a:focus { - color: #444444; - background-color: transparent; -} -.navbar-inverse .navbar-toggle { - border-color: #333333; -} -.navbar-inverse .navbar-toggle:hover, -.navbar-inverse .navbar-toggle:focus { - background-color: #333333; -} -.navbar-inverse .navbar-toggle .icon-bar { - background-color: #ffffff; -} -.navbar-inverse .navbar-collapse, -.navbar-inverse .navbar-form { - border-color: #101010; -} -.navbar-inverse .navbar-nav > .open > a, -.navbar-inverse .navbar-nav > .open > a:hover, -.navbar-inverse .navbar-nav > .open > a:focus { - background-color: #080808; - color: #ffffff; -} -@media (max-width: 767px) { - .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { - border-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu .divider { - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { - color: #777777; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { - color: #ffffff; - background-color: transparent; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #ffffff; - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #444444; - background-color: transparent; - } -} -.navbar-inverse .navbar-link { - color: #777777; -} -.navbar-inverse .navbar-link:hover { - color: #ffffff; -} -.navbar-inverse .btn-link { - color: #777777; -} -.navbar-inverse .btn-link:hover, -.navbar-inverse .btn-link:focus { - color: #ffffff; -} -.navbar-inverse .btn-link[disabled]:hover, -fieldset[disabled] .navbar-inverse .btn-link:hover, -.navbar-inverse .btn-link[disabled]:focus, -fieldset[disabled] .navbar-inverse .btn-link:focus { - color: #444444; -} -.breadcrumb { - padding: 8px 15px; - margin-bottom: 20px; - list-style: none; - background-color: #f5f5f5; - border-radius: 4px; -} -.breadcrumb > li { - display: inline-block; -} -.breadcrumb > li + li:before { - content: "/\00a0"; - padding: 0 5px; - color: #cccccc; -} -.breadcrumb > .active { - color: #777777; -} -.pagination { - display: inline-block; - padding-left: 0; - margin: 20px 0; - border-radius: 4px; -} -.pagination > li { - display: inline; -} -.pagination > li > a, -.pagination > li > span { - position: relative; - float: left; - padding: 6px 12px; - line-height: 1.42857143; - text-decoration: none; - color: #428bca; - background-color: #ffffff; - border: 1px solid #dddddd; - margin-left: -1px; -} -.pagination > li:first-child > a, -.pagination > li:first-child > span { - margin-left: 0; - border-bottom-left-radius: 4px; - border-top-left-radius: 4px; -} -.pagination > li:last-child > a, -.pagination > li:last-child > span { - border-bottom-right-radius: 4px; - border-top-right-radius: 4px; -} -.pagination > li > a:hover, -.pagination > li > span:hover, -.pagination > li > a:focus, -.pagination > li > span:focus { - color: #2a6496; - background-color: #eeeeee; - border-color: #dddddd; -} -.pagination > .active > a, -.pagination > .active > span, -.pagination > .active > a:hover, -.pagination > .active > span:hover, -.pagination > .active > a:focus, -.pagination > .active > span:focus { - z-index: 2; - color: #ffffff; - background-color: #428bca; - border-color: #428bca; - cursor: default; -} -.pagination > .disabled > span, -.pagination > .disabled > span:hover, -.pagination > .disabled > span:focus, -.pagination > .disabled > a, -.pagination > .disabled > a:hover, -.pagination > .disabled > a:focus { - color: #777777; - background-color: #ffffff; - border-color: #dddddd; - cursor: not-allowed; -} -.pagination-lg > li > a, -.pagination-lg > li > span { - padding: 10px 16px; - font-size: 18px; -} -.pagination-lg > li:first-child > a, -.pagination-lg > li:first-child > span { - border-bottom-left-radius: 6px; - border-top-left-radius: 6px; -} -.pagination-lg > li:last-child > a, -.pagination-lg > li:last-child > span { - border-bottom-right-radius: 6px; - border-top-right-radius: 6px; -} -.pagination-sm > li > a, -.pagination-sm > li > span { - padding: 5px 10px; - font-size: 12px; -} -.pagination-sm > li:first-child > a, -.pagination-sm > li:first-child > span { - border-bottom-left-radius: 3px; - border-top-left-radius: 3px; -} -.pagination-sm > li:last-child > a, -.pagination-sm > li:last-child > span { - border-bottom-right-radius: 3px; - border-top-right-radius: 3px; -} -.pager { - padding-left: 0; - margin: 20px 0; - list-style: none; - text-align: center; -} -.pager li { - display: inline; -} -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #ffffff; - border: 1px solid #dddddd; - border-radius: 15px; -} -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: #eeeeee; -} -.pager .next > a, -.pager .next > span { - float: right; -} -.pager .previous > a, -.pager .previous > span { - float: left; -} -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - color: #777777; - background-color: #ffffff; - cursor: not-allowed; -} -.label { - display: inline; - padding: .2em .6em .3em; - font-size: 75%; - font-weight: bold; - line-height: 1; - color: #ffffff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25em; -} -a.label:hover, -a.label:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} -.label:empty { - display: none; -} -.btn .label { - position: relative; - top: -1px; -} -.label-default { - background-color: #777777; -} -.label-default[href]:hover, -.label-default[href]:focus { - background-color: #5e5e5e; -} -.label-primary { - background-color: #428bca; -} -.label-primary[href]:hover, -.label-primary[href]:focus { - background-color: #3071a9; -} -.label-success { - background-color: #5cb85c; -} -.label-success[href]:hover, -.label-success[href]:focus { - background-color: #449d44; -} -.label-info { - background-color: #5bc0de; -} -.label-info[href]:hover, -.label-info[href]:focus { - background-color: #31b0d5; -} -.label-warning { - background-color: #f0ad4e; -} -.label-warning[href]:hover, -.label-warning[href]:focus { - background-color: #ec971f; -} -.label-danger { - background-color: #d9534f; -} -.label-danger[href]:hover, -.label-danger[href]:focus { - background-color: #c9302c; -} -.badge { - display: inline-block; - min-width: 10px; - padding: 3px 7px; - font-size: 12px; - font-weight: bold; - color: #ffffff; - line-height: 1; - vertical-align: baseline; - white-space: nowrap; - text-align: center; - background-color: #777777; - border-radius: 10px; -} -.badge:empty { - display: none; -} -.btn .badge { - position: relative; - top: -1px; -} -.btn-xs .badge { - top: 0; - padding: 1px 5px; -} -a.badge:hover, -a.badge:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} -a.list-group-item.active > .badge, -.nav-pills > .active > a > .badge { - color: #428bca; - background-color: #ffffff; -} -.nav-pills > li > a > .badge { - margin-left: 3px; -} -.jumbotron { - padding: 30px; - margin-bottom: 30px; - color: inherit; - background-color: #eeeeee; -} -.jumbotron h1, -.jumbotron .h1 { - color: inherit; -} -.jumbotron p { - margin-bottom: 15px; - font-size: 21px; - font-weight: 200; -} -.jumbotron > hr { - border-top-color: #d5d5d5; -} -.container .jumbotron { - border-radius: 6px; -} -.jumbotron .container { - max-width: 100%; -} -@media screen and (min-width: 768px) { - .jumbotron { - padding-top: 48px; - padding-bottom: 48px; - } - .container .jumbotron { - padding-left: 60px; - padding-right: 60px; - } - .jumbotron h1, - .jumbotron .h1 { - font-size: 63px; - } -} -.thumbnail { - display: block; - padding: 4px; - margin-bottom: 20px; - line-height: 1.42857143; - background-color: #ffffff; - border: 1px solid #dddddd; - border-radius: 4px; - -webkit-transition: all 0.2s ease-in-out; - -o-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; -} -.thumbnail > img, -.thumbnail a > img { - margin-left: auto; - margin-right: auto; -} -a.thumbnail:hover, -a.thumbnail:focus, -a.thumbnail.active { - border-color: #428bca; -} -.thumbnail .caption { - padding: 9px; - color: #333333; -} -.alert { - padding: 15px; - margin-bottom: 20px; - border: 1px solid transparent; - border-radius: 4px; -} -.alert h4 { - margin-top: 0; - color: inherit; -} -.alert .alert-link { - font-weight: bold; -} -.alert > p, -.alert > ul { - margin-bottom: 0; -} -.alert > p + p { - margin-top: 5px; -} -.alert-dismissable, -.alert-dismissible { - padding-right: 35px; -} -.alert-dismissable .close, -.alert-dismissible .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; -} -.alert-success { - background-color: #dff0d8; - border-color: #d6e9c6; - color: #3c763d; -} -.alert-success hr { - border-top-color: #c9e2b3; -} -.alert-success .alert-link { - color: #2b542c; -} -.alert-info { - background-color: #d9edf7; - border-color: #bce8f1; - color: #31708f; -} -.alert-info hr { - border-top-color: #a6e1ec; -} -.alert-info .alert-link { - color: #245269; -} -.alert-warning { - background-color: #fcf8e3; - border-color: #faebcc; - color: #8a6d3b; -} -.alert-warning hr { - border-top-color: #f7e1b5; -} -.alert-warning .alert-link { - color: #66512c; -} -.alert-danger { - background-color: #f2dede; - border-color: #ebccd1; - color: #a94442; -} -.alert-danger hr { - border-top-color: #e4b9c0; -} -.alert-danger .alert-link { - color: #843534; -} -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -.progress { - overflow: hidden; - height: 20px; - margin-bottom: 20px; - background-color: #f5f5f5; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); -} -.progress-bar { - float: left; - width: 0%; - height: 100%; - font-size: 12px; - line-height: 20px; - color: #ffffff; - text-align: center; - background-color: #428bca; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -webkit-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; -} -.progress-striped .progress-bar, -.progress-bar-striped { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-size: 40px 40px; -} -.progress.active .progress-bar, -.progress-bar.active { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} -.progress-bar[aria-valuenow="1"], -.progress-bar[aria-valuenow="2"] { - min-width: 30px; -} -.progress-bar[aria-valuenow="0"] { - color: #777777; - min-width: 30px; - background-color: transparent; - background-image: none; - box-shadow: none; -} -.progress-bar-success { - background-color: #5cb85c; -} -.progress-striped .progress-bar-success { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-info { - background-color: #5bc0de; -} -.progress-striped .progress-bar-info { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-warning { - background-color: #f0ad4e; -} -.progress-striped .progress-bar-warning { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-danger { - background-color: #d9534f; -} -.progress-striped .progress-bar-danger { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.media, -.media-body { - overflow: hidden; - zoom: 1; -} -.media, -.media .media { - margin-top: 15px; -} -.media:first-child { - margin-top: 0; -} -.media-object { - display: block; -} -.media-heading { - margin: 0 0 5px; -} -.media > .pull-left { - margin-right: 10px; -} -.media > .pull-right { - margin-left: 10px; -} -.media-list { - padding-left: 0; - list-style: none; -} -.list-group { - margin-bottom: 20px; - padding-left: 0; -} -.list-group-item { - position: relative; - display: block; - padding: 10px 15px; - margin-bottom: -1px; - background-color: #ffffff; - border: 1px solid #dddddd; -} -.list-group-item:first-child { - border-top-right-radius: 4px; - border-top-left-radius: 4px; -} -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} -.list-group-item > .badge { - float: right; -} -.list-group-item > .badge + .badge { - margin-right: 5px; -} -a.list-group-item { - color: #555555; -} -a.list-group-item .list-group-item-heading { - color: #333333; -} -a.list-group-item:hover, -a.list-group-item:focus { - text-decoration: none; - color: #555555; - background-color: #f5f5f5; -} -.list-group-item.disabled, -.list-group-item.disabled:hover, -.list-group-item.disabled:focus { - background-color: #eeeeee; - color: #777777; -} -.list-group-item.disabled .list-group-item-heading, -.list-group-item.disabled:hover .list-group-item-heading, -.list-group-item.disabled:focus .list-group-item-heading { - color: inherit; -} -.list-group-item.disabled .list-group-item-text, -.list-group-item.disabled:hover .list-group-item-text, -.list-group-item.disabled:focus .list-group-item-text { - color: #777777; -} -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - z-index: 2; - color: #ffffff; - background-color: #428bca; - border-color: #428bca; -} -.list-group-item.active .list-group-item-heading, -.list-group-item.active:hover .list-group-item-heading, -.list-group-item.active:focus .list-group-item-heading, -.list-group-item.active .list-group-item-heading > small, -.list-group-item.active:hover .list-group-item-heading > small, -.list-group-item.active:focus .list-group-item-heading > small, -.list-group-item.active .list-group-item-heading > .small, -.list-group-item.active:hover .list-group-item-heading > .small, -.list-group-item.active:focus .list-group-item-heading > .small { - color: inherit; -} -.list-group-item.active .list-group-item-text, -.list-group-item.active:hover .list-group-item-text, -.list-group-item.active:focus .list-group-item-text { - color: #e1edf7; -} -.list-group-item-success { - color: #3c763d; - background-color: #dff0d8; -} -a.list-group-item-success { - color: #3c763d; -} -a.list-group-item-success .list-group-item-heading { - color: inherit; -} -a.list-group-item-success:hover, -a.list-group-item-success:focus { - color: #3c763d; - background-color: #d0e9c6; -} -a.list-group-item-success.active, -a.list-group-item-success.active:hover, -a.list-group-item-success.active:focus { - color: #fff; - background-color: #3c763d; - border-color: #3c763d; -} -.list-group-item-info { - color: #31708f; - background-color: #d9edf7; -} -a.list-group-item-info { - color: #31708f; -} -a.list-group-item-info .list-group-item-heading { - color: inherit; -} -a.list-group-item-info:hover, -a.list-group-item-info:focus { - color: #31708f; - background-color: #c4e3f3; -} -a.list-group-item-info.active, -a.list-group-item-info.active:hover, -a.list-group-item-info.active:focus { - color: #fff; - background-color: #31708f; - border-color: #31708f; -} -.list-group-item-warning { - color: #8a6d3b; - background-color: #fcf8e3; -} -a.list-group-item-warning { - color: #8a6d3b; -} -a.list-group-item-warning .list-group-item-heading { - color: inherit; -} -a.list-group-item-warning:hover, -a.list-group-item-warning:focus { - color: #8a6d3b; - background-color: #faf2cc; -} -a.list-group-item-warning.active, -a.list-group-item-warning.active:hover, -a.list-group-item-warning.active:focus { - color: #fff; - background-color: #8a6d3b; - border-color: #8a6d3b; -} -.list-group-item-danger { - color: #a94442; - background-color: #f2dede; -} -a.list-group-item-danger { - color: #a94442; -} -a.list-group-item-danger .list-group-item-heading { - color: inherit; -} -a.list-group-item-danger:hover, -a.list-group-item-danger:focus { - color: #a94442; - background-color: #ebcccc; -} -a.list-group-item-danger.active, -a.list-group-item-danger.active:hover, -a.list-group-item-danger.active:focus { - color: #fff; - background-color: #a94442; - border-color: #a94442; -} -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; -} -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3; -} -.panel { - margin-bottom: 20px; - background-color: #ffffff; - border: 1px solid transparent; - border-radius: 4px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); -} -.panel-body { - padding: 15px; -} -.panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel-heading > .dropdown .dropdown-toggle { - color: inherit; -} -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: 16px; - color: inherit; -} -.panel-title > a { - color: inherit; -} -.panel-footer { - padding: 10px 15px; - background-color: #f5f5f5; - border-top: 1px solid #dddddd; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .list-group { - margin-bottom: 0; -} -.panel > .list-group .list-group-item { - border-width: 1px 0; - border-radius: 0; -} -.panel > .list-group:first-child .list-group-item:first-child { - border-top: 0; - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel > .list-group:last-child .list-group-item:last-child { - border-bottom: 0; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel-heading + .list-group .list-group-item:first-child { - border-top-width: 0; -} -.list-group + .panel-footer { - border-top-width: 0; -} -.panel > .table, -.panel > .table-responsive > .table, -.panel > .panel-collapse > .table { - margin-bottom: 0; -} -.panel > .table:first-child, -.panel > .table-responsive:first-child > .table:first-child { - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { - border-top-left-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { - border-top-right-radius: 3px; -} -.panel > .table:last-child, -.panel > .table-responsive:last-child > .table:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { - border-bottom-right-radius: 3px; -} -.panel > .panel-body + .table, -.panel > .panel-body + .table-responsive { - border-top: 1px solid #dddddd; -} -.panel > .table > tbody:first-child > tr:first-child th, -.panel > .table > tbody:first-child > tr:first-child td { - border-top: 0; -} -.panel > .table-bordered, -.panel > .table-responsive > .table-bordered { - border: 0; -} -.panel > .table-bordered > thead > tr > th:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, -.panel > .table-bordered > tbody > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, -.panel > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-bordered > thead > tr > td:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, -.panel > .table-bordered > tbody > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, -.panel > .table-bordered > tfoot > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; -} -.panel > .table-bordered > thead > tr > th:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, -.panel > .table-bordered > tbody > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, -.panel > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-bordered > thead > tr > td:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, -.panel > .table-bordered > tbody > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, -.panel > .table-bordered > tfoot > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; -} -.panel > .table-bordered > thead > tr:first-child > td, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, -.panel > .table-bordered > tbody > tr:first-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, -.panel > .table-bordered > thead > tr:first-child > th, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, -.panel > .table-bordered > tbody > tr:first-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { - border-bottom: 0; -} -.panel > .table-bordered > tbody > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, -.panel > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-bordered > tbody > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, -.panel > .table-bordered > tfoot > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { - border-bottom: 0; -} -.panel > .table-responsive { - border: 0; - margin-bottom: 0; -} -.panel-group { - margin-bottom: 20px; -} -.panel-group .panel { - margin-bottom: 0; - border-radius: 4px; -} -.panel-group .panel + .panel { - margin-top: 5px; -} -.panel-group .panel-heading { - border-bottom: 0; -} -.panel-group .panel-heading + .panel-collapse > .panel-body { - border-top: 1px solid #dddddd; -} -.panel-group .panel-footer { - border-top: 0; -} -.panel-group .panel-footer + .panel-collapse .panel-body { - border-bottom: 1px solid #dddddd; -} -.panel-default { - border-color: #dddddd; -} -.panel-default > .panel-heading { - color: #333333; - background-color: #f5f5f5; - border-color: #dddddd; -} -.panel-default > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #dddddd; -} -.panel-default > .panel-heading .badge { - color: #f5f5f5; - background-color: #333333; -} -.panel-default > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #dddddd; -} -.panel-primary { - border-color: #428bca; -} -.panel-primary > .panel-heading { - color: #ffffff; - background-color: #428bca; - border-color: #428bca; -} -.panel-primary > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #428bca; -} -.panel-primary > .panel-heading .badge { - color: #428bca; - background-color: #ffffff; -} -.panel-primary > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #428bca; -} -.panel-success { - border-color: #d6e9c6; -} -.panel-success > .panel-heading { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6; -} -.panel-success > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #d6e9c6; -} -.panel-success > .panel-heading .badge { - color: #dff0d8; - background-color: #3c763d; -} -.panel-success > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #d6e9c6; -} -.panel-info { - border-color: #bce8f1; -} -.panel-info > .panel-heading { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1; -} -.panel-info > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #bce8f1; -} -.panel-info > .panel-heading .badge { - color: #d9edf7; - background-color: #31708f; -} -.panel-info > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #bce8f1; -} -.panel-warning { - border-color: #faebcc; -} -.panel-warning > .panel-heading { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc; -} -.panel-warning > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #faebcc; -} -.panel-warning > .panel-heading .badge { - color: #fcf8e3; - background-color: #8a6d3b; -} -.panel-warning > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #faebcc; -} -.panel-danger { - border-color: #ebccd1; -} -.panel-danger > .panel-heading { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; -} -.panel-danger > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ebccd1; -} -.panel-danger > .panel-heading .badge { - color: #f2dede; - background-color: #a94442; -} -.panel-danger > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ebccd1; -} -.embed-responsive { - position: relative; - display: block; - height: 0; - padding: 0; - overflow: hidden; -} -.embed-responsive .embed-responsive-item, -.embed-responsive iframe, -.embed-responsive embed, -.embed-responsive object { - position: absolute; - top: 0; - left: 0; - bottom: 0; - height: 100%; - width: 100%; - border: 0; -} -.embed-responsive.embed-responsive-16by9 { - padding-bottom: 56.25%; -} -.embed-responsive.embed-responsive-4by3 { - padding-bottom: 75%; -} -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -} -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); -} -.well-lg { - padding: 24px; - border-radius: 6px; -} -.well-sm { - padding: 9px; - border-radius: 3px; -} -.close { - float: right; - font-size: 21px; - font-weight: bold; - line-height: 1; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; - filter: alpha(opacity=20); -} -.close:hover, -.close:focus { - color: #000000; - text-decoration: none; - cursor: pointer; - opacity: 0.5; - filter: alpha(opacity=50); -} -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} -.modal-open { - overflow: hidden; -} -.modal { - display: none; - overflow: hidden; - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1050; - -webkit-overflow-scrolling: touch; - outline: 0; -} -.modal.fade .modal-dialog { - -webkit-transform: translate3d(0, -25%, 0); - transform: translate3d(0, -25%, 0); - -webkit-transition: -webkit-transform 0.3s ease-out; - -moz-transition: -moz-transform 0.3s ease-out; - -o-transition: -o-transform 0.3s ease-out; - transition: transform 0.3s ease-out; -} -.modal.in .modal-dialog { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); -} -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto; -} -.modal-dialog { - position: relative; - width: auto; - margin: 10px; -} -.modal-content { - position: relative; - background-color: #ffffff; - border: 1px solid #999999; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - background-clip: padding-box; - outline: 0; -} -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000000; -} -.modal-backdrop.fade { - opacity: 0; - filter: alpha(opacity=0); -} -.modal-backdrop.in { - opacity: 0.5; - filter: alpha(opacity=50); -} -.modal-header { - padding: 15px; - border-bottom: 1px solid #e5e5e5; - min-height: 16.42857143px; -} -.modal-header .close { - margin-top: -2px; -} -.modal-title { - margin: 0; - line-height: 1.42857143; -} -.modal-body { - position: relative; - padding: 15px; -} -.modal-footer { - padding: 15px; - text-align: right; - border-top: 1px solid #e5e5e5; -} -.modal-footer .btn + .btn { - margin-left: 5px; - margin-bottom: 0; -} -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll; -} -@media (min-width: 768px) { - .modal-dialog { - width: 600px; - margin: 30px auto; - } - .modal-content { - -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - } - .modal-sm { - width: 300px; - } -} -@media (min-width: 992px) { - .modal-lg { - width: 900px; - } -} -.tooltip { - position: absolute; - z-index: 1070; - display: block; - visibility: visible; - font-size: 12px; - line-height: 1.4; - opacity: 0; - filter: alpha(opacity=0); -} -.tooltip.in { - opacity: 0.9; - filter: alpha(opacity=90); -} -.tooltip.top { - margin-top: -3px; - padding: 5px 0; -} -.tooltip.right { - margin-left: 3px; - padding: 0 5px; -} -.tooltip.bottom { - margin-top: 3px; - padding: 5px 0; -} -.tooltip.left { - margin-left: -3px; - padding: 0 5px; -} -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #ffffff; - text-align: center; - text-decoration: none; - background-color: #000000; - border-radius: 4px; -} -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #000000; -} -.tooltip.top-left .tooltip-arrow { - bottom: 0; - left: 5px; - border-width: 5px 5px 0; - border-top-color: #000000; -} -.tooltip.top-right .tooltip-arrow { - bottom: 0; - right: 5px; - border-width: 5px 5px 0; - border-top-color: #000000; -} -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000000; -} -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000000; -} -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; -} -.tooltip.bottom-left .tooltip-arrow { - top: 0; - left: 5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; -} -.tooltip.bottom-right .tooltip-arrow { - top: 0; - right: 5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; -} -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: none; - max-width: 276px; - padding: 1px; - text-align: left; - background-color: #ffffff; - background-clip: padding-box; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - white-space: normal; -} -.popover.top { - margin-top: -10px; -} -.popover.right { - margin-left: 10px; -} -.popover.bottom { - margin-top: 10px; -} -.popover.left { - margin-left: -10px; -} -.popover-title { - margin: 0; - padding: 8px 14px; - font-size: 14px; - font-weight: normal; - line-height: 18px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-radius: 5px 5px 0 0; -} -.popover-content { - padding: 9px 14px; -} -.popover > .arrow, -.popover > .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.popover > .arrow { - border-width: 11px; -} -.popover > .arrow:after { - border-width: 10px; - content: ""; -} -.popover.top > .arrow { - left: 50%; - margin-left: -11px; - border-bottom-width: 0; - border-top-color: #999999; - border-top-color: rgba(0, 0, 0, 0.25); - bottom: -11px; -} -.popover.top > .arrow:after { - content: " "; - bottom: 1px; - margin-left: -10px; - border-bottom-width: 0; - border-top-color: #ffffff; -} -.popover.right > .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-left-width: 0; - border-right-color: #999999; - border-right-color: rgba(0, 0, 0, 0.25); -} -.popover.right > .arrow:after { - content: " "; - left: 1px; - bottom: -10px; - border-left-width: 0; - border-right-color: #ffffff; -} -.popover.bottom > .arrow { - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #999999; - border-bottom-color: rgba(0, 0, 0, 0.25); - top: -11px; -} -.popover.bottom > .arrow:after { - content: " "; - top: 1px; - margin-left: -10px; - border-top-width: 0; - border-bottom-color: #ffffff; -} -.popover.left > .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: #999999; - border-left-color: rgba(0, 0, 0, 0.25); -} -.popover.left > .arrow:after { - content: " "; - right: 1px; - border-right-width: 0; - border-left-color: #ffffff; - bottom: -10px; -} -.carousel { - position: relative; -} -.carousel-inner { - position: relative; - overflow: hidden; - width: 100%; -} -.carousel-inner > .item { - display: none; - position: relative; - -webkit-transition: 0.6s ease-in-out left; - -o-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; -} -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - line-height: 1; -} -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; -} -.carousel-inner > .active { - left: 0; -} -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; -} -.carousel-inner > .next { - left: 100%; -} -.carousel-inner > .prev { - left: -100%; -} -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; -} -.carousel-inner > .active.left { - left: -100%; -} -.carousel-inner > .active.right { - left: 100%; -} -.carousel-control { - position: absolute; - top: 0; - left: 0; - bottom: 0; - width: 15%; - opacity: 0.5; - filter: alpha(opacity=50); - font-size: 20px; - color: #ffffff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); -} -.carousel-control.left { - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); -} -.carousel-control.right { - left: auto; - right: 0; - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); -} -.carousel-control:hover, -.carousel-control:focus { - outline: 0; - color: #ffffff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); -} -.carousel-control .icon-prev, -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-left, -.carousel-control .glyphicon-chevron-right { - position: absolute; - top: 50%; - z-index: 5; - display: inline-block; -} -.carousel-control .icon-prev, -.carousel-control .glyphicon-chevron-left { - left: 50%; - margin-left: -10px; -} -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-right { - right: 50%; - margin-right: -10px; -} -.carousel-control .icon-prev, -.carousel-control .icon-next { - width: 20px; - height: 20px; - margin-top: -10px; - font-family: serif; -} -.carousel-control .icon-prev:before { - content: '\2039'; -} -.carousel-control .icon-next:before { - content: '\203a'; -} -.carousel-indicators { - position: absolute; - bottom: 10px; - left: 50%; - z-index: 15; - width: 60%; - margin-left: -30%; - padding-left: 0; - list-style: none; - text-align: center; -} -.carousel-indicators li { - display: inline-block; - width: 10px; - height: 10px; - margin: 1px; - text-indent: -999px; - border: 1px solid #ffffff; - border-radius: 10px; - cursor: pointer; - background-color: #000 \9; - background-color: rgba(0, 0, 0, 0); -} -.carousel-indicators .active { - margin: 0; - width: 12px; - height: 12px; - background-color: #ffffff; -} -.carousel-caption { - position: absolute; - left: 15%; - right: 15%; - bottom: 20px; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #ffffff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); -} -.carousel-caption .btn { - text-shadow: none; -} -@media screen and (min-width: 768px) { - .carousel-control .glyphicon-chevron-left, - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-prev, - .carousel-control .icon-next { - width: 30px; - height: 30px; - margin-top: -15px; - font-size: 30px; - } - .carousel-control .glyphicon-chevron-left, - .carousel-control .icon-prev { - margin-left: -15px; - } - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-next { - margin-right: -15px; - } - .carousel-caption { - left: 20%; - right: 20%; - padding-bottom: 30px; - } - .carousel-indicators { - bottom: 20px; - } -} -.clearfix:before, -.clearfix:after, -.dl-horizontal dd:before, -.dl-horizontal dd:after, -.container:before, -.container:after, -.container-fluid:before, -.container-fluid:after, -.row:before, -.row:after, -.form-horizontal .form-group:before, -.form-horizontal .form-group:after, -.btn-toolbar:before, -.btn-toolbar:after, -.btn-group-vertical > .btn-group:before, -.btn-group-vertical > .btn-group:after, -.nav:before, -.nav:after, -.navbar:before, -.navbar:after, -.navbar-header:before, -.navbar-header:after, -.navbar-collapse:before, -.navbar-collapse:after, -.pager:before, -.pager:after, -.panel-body:before, -.panel-body:after, -.modal-footer:before, -.modal-footer:after { - content: " "; - display: table; -} -.clearfix:after, -.dl-horizontal dd:after, -.container:after, -.container-fluid:after, -.row:after, -.form-horizontal .form-group:after, -.btn-toolbar:after, -.btn-group-vertical > .btn-group:after, -.nav:after, -.navbar:after, -.navbar-header:after, -.navbar-collapse:after, -.pager:after, -.panel-body:after, -.modal-footer:after { - clear: both; -} -.center-block { - display: block; - margin-left: auto; - margin-right: auto; -} -.pull-right { - float: right !important; -} -.pull-left { - float: left !important; -} -.hide { - display: none !important; -} -.show { - display: block !important; -} -.invisible { - visibility: hidden; -} -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} -.hidden { - display: none !important; - visibility: hidden !important; -} -.affix { - position: fixed; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); -} -@-ms-viewport { - width: device-width; -} -.visible-xs, -.visible-sm, -.visible-md, -.visible-lg { - display: none !important; -} -.visible-xs-block, -.visible-xs-inline, -.visible-xs-inline-block, -.visible-sm-block, -.visible-sm-inline, -.visible-sm-inline-block, -.visible-md-block, -.visible-md-inline, -.visible-md-inline-block, -.visible-lg-block, -.visible-lg-inline, -.visible-lg-inline-block { - display: none !important; -} -@media (max-width: 767px) { - .visible-xs { - display: block !important; - } - table.visible-xs { - display: table; - } - tr.visible-xs { - display: table-row !important; - } - th.visible-xs, - td.visible-xs { - display: table-cell !important; - } -} -@media (max-width: 767px) { - .visible-xs-block { - display: block !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline { - display: inline !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline-block { - display: inline-block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm { - display: block !important; - } - table.visible-sm { - display: table; - } - tr.visible-sm { - display: table-row !important; - } - th.visible-sm, - td.visible-sm { - display: table-cell !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-block { - display: block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline { - display: inline !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline-block { - display: inline-block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md { - display: block !important; - } - table.visible-md { - display: table; - } - tr.visible-md { - display: table-row !important; - } - th.visible-md, - td.visible-md { - display: table-cell !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-block { - display: block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline { - display: inline !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline-block { - display: inline-block !important; - } -} -@media (min-width: 1200px) { - .visible-lg { - display: block !important; - } - table.visible-lg { - display: table; - } - tr.visible-lg { - display: table-row !important; - } - th.visible-lg, - td.visible-lg { - display: table-cell !important; - } -} -@media (min-width: 1200px) { - .visible-lg-block { - display: block !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline { - display: inline !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline-block { - display: inline-block !important; - } -} -@media (max-width: 767px) { - .hidden-xs { - display: none !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .hidden-sm { - display: none !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-md { - display: none !important; - } -} -@media (min-width: 1200px) { - .hidden-lg { - display: none !important; - } -} -.visible-print { - display: none !important; -} -@media print { - .visible-print { - display: block !important; - } - table.visible-print { - display: table; - } - tr.visible-print { - display: table-row !important; - } - th.visible-print, - td.visible-print { - display: table-cell !important; - } -} -.visible-print-block { - display: none !important; -} -@media print { - .visible-print-block { - display: block !important; - } -} -.visible-print-inline { - display: none !important; -} -@media print { - .visible-print-inline { - display: inline !important; - } -} -.visible-print-inline-block { - display: none !important; -} -@media print { - .visible-print-inline-block { - display: inline-block !important; - } -} -@media print { - .hidden-print { - display: none !important; - } -} -@font-face { - font-family: 'Glyphicons Halflings'; - src: url('../lib/bootstrap/fonts/glyphicons-halflings-regular.eot'); - src: url('../lib/bootstrap/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../lib/bootstrap/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../lib/bootstrap/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../lib/bootstrap/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); -} -[ng\:cloak], -[ng-cloak], -[data-ng-cloak], -[x-ng-cloak], -.ng-cloak, -.x-ng-cloak { - display: none !important; -} -.nav, -.pagination, -.carousel, -.panel-title a { - cursor: pointer; -} -body { - padding-top: 50px; - padding-bottom: 20px; -} -/* Set padding to keep content from hitting the edges */ -.body-content { - padding-left: 15px; - padding-right: 15px; -} -/* Set width on the form input elements since they're 100% wide by default */ -input, -select, -textarea { - /*max-width: 280px;*/ -} -/* styles for validation helpers */ -.field-validation-error { - color: #b94a48; -} -.field-validation-valid { - display: none; -} -input.input-validation-error { - border: 1px solid #b94a48; -} -input[type="checkbox"].input-validation-error { - border: 0 none; -} -.validation-summary-errors { - color: #b94a48; -} -.validation-summary-valid { - display: none; -} -/* Music Store additions */ -ul#album-list li { - height: 160px; -} -ul#album-list li img:hover { - box-shadow: 1px 1px 7px #777; -} -ul#album-list li img { - max-width: 100px; - max-height: 100px; - box-shadow: 1px 1px 5px #999; - border: none; - padding: 0; -} -ul#album-list li a, -ul#album-details li a { - text-decoration: none; -} -ul#album-list li a:hover { - background: none; - -webkit-text-shadow: 1px 1px 2px #bbb; - text-shadow: 1px 1px 2px #bbb; - color: #363430; -} diff --git a/src/MusicStore.Spa/wwwroot/favicon.ico b/src/MusicStore.Spa/wwwroot/favicon.ico deleted file mode 100644 index a3a799985c..0000000000 Binary files a/src/MusicStore.Spa/wwwroot/favicon.ico and /dev/null differ diff --git a/src/MusicStore.Spa/wwwroot/images/home-showcase.png b/src/MusicStore.Spa/wwwroot/images/home-showcase.png deleted file mode 100644 index 258c19d3cd..0000000000 Binary files a/src/MusicStore.Spa/wwwroot/images/home-showcase.png and /dev/null differ diff --git a/src/MusicStore.Spa/wwwroot/images/logo.png b/src/MusicStore.Spa/wwwroot/images/logo.png deleted file mode 100644 index d334c86256..0000000000 Binary files a/src/MusicStore.Spa/wwwroot/images/logo.png and /dev/null differ diff --git a/src/MusicStore.Spa/wwwroot/images/logo.svg b/src/MusicStore.Spa/wwwroot/images/logo.svg deleted file mode 100644 index ec3cd6aa5b..0000000000 --- a/src/MusicStore.Spa/wwwroot/images/logo.svg +++ /dev/null @@ -1,303 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/MusicStore.Spa/wwwroot/images/placeholder.png b/src/MusicStore.Spa/wwwroot/images/placeholder.png deleted file mode 100644 index 1f73dbb43d..0000000000 Binary files a/src/MusicStore.Spa/wwwroot/images/placeholder.png and /dev/null differ diff --git a/src/MusicStore.Spa/wwwroot/images/placeholder.svg b/src/MusicStore.Spa/wwwroot/images/placeholder.svg deleted file mode 100644 index 07d58202df..0000000000 --- a/src/MusicStore.Spa/wwwroot/images/placeholder.svg +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/MusicStore.Spa/wwwroot/js/MusicStore.Admin.js b/src/MusicStore.Spa/wwwroot/js/MusicStore.Admin.js deleted file mode 100644 index 7e50e43e13..0000000000 --- a/src/MusicStore.Spa/wwwroot/js/MusicStore.Admin.js +++ /dev/null @@ -1,1042 +0,0 @@ -var MusicStore; -(function (MusicStore) { - var AlbumApi; - (function (AlbumApi) { - angular.module("MusicStore.AlbumApi", []); - })(AlbumApi = MusicStore.AlbumApi || (MusicStore.AlbumApi = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var AlbumApi; - (function (AlbumApi) { - var AlbumApiService = (function () { - function AlbumApiService($cacheFactory, $q, $http, urlResolver) { - this._inlineData = $cacheFactory.get("inlineData"); - this._q = $q; - this._http = $http; - this._urlResolver = urlResolver; - } - AlbumApiService.prototype.getAlbums = function (page, pageSize, sortBy) { - var url = this._urlResolver.resolveUrl("~/api/albums"), query = {}, querySeparator = "?", inlineData; - if (page) { - query.page = page; - } - if (pageSize) { - query.pageSize = pageSize; - } - if (sortBy) { - query.sortBy = sortBy; - } - for (var key in query) { - if (query.hasOwnProperty(key)) { - url += querySeparator + key + "=" + encodeURIComponent(query[key]); - if (querySeparator === "?") { - querySeparator = "&"; - } - } - } - inlineData = this._inlineData ? this._inlineData.get(url) : null; - if (inlineData) { - return this._q.when(inlineData); - } - else { - return this._http.get(url).then(function (result) { return result.data; }); - } - }; - AlbumApiService.prototype.getAlbumDetails = function (albumId) { - var url = this._urlResolver.resolveUrl("~/api/albums/" + albumId); - return this._http.get(url).then(function (result) { return result.data; }); - }; - AlbumApiService.prototype.getMostPopularAlbums = function (count) { - var url = this._urlResolver.resolveUrl("~/api/albums/mostPopular"), inlineData = this._inlineData ? this._inlineData.get(url) : null; - if (inlineData) { - return this._q.when(inlineData); - } - else { - if (count && count > 0) { - url += "?count=" + count; - } - return this._http.get(url).then(function (result) { return result.data; }); - } - }; - AlbumApiService.prototype.createAlbum = function (album, config) { - var url = this._urlResolver.resolveUrl("api/albums"); - return this._http.post(url, album, config || { timeout: 10000 }); - }; - AlbumApiService.prototype.updateAlbum = function (album, config) { - var url = this._urlResolver.resolveUrl("api/albums/" + album.AlbumId + "/update"); - return this._http.put(url, album, config || { timeout: 10000 }); - }; - AlbumApiService.prototype.deleteAlbum = function (albumId, config) { - var url = this._urlResolver.resolveUrl("api/albums/" + albumId); - return this._http.delete(url, config || { timeout: 10000 }); - }; - return AlbumApiService; - })(); - angular.module("MusicStore.AlbumApi") - .service("MusicStore.AlbumApi.IAlbumApiService", [ - "$cacheFactory", - "$q", - "$http", - "MusicStore.UrlResolver.IUrlResolverService", - AlbumApiService - ]); - })(AlbumApi = MusicStore.AlbumApi || (MusicStore.AlbumApi = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var ArtistApi; - (function (ArtistApi) { - angular.module("MusicStore.ArtistApi", []); - })(ArtistApi = MusicStore.ArtistApi || (MusicStore.ArtistApi = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var ArtistApi; - (function (ArtistApi) { - var ArtistsApiService = (function () { - function ArtistsApiService($cacheFactory, $q, $http, urlResolver) { - this._inlineData = $cacheFactory.get("inlineData"); - this._q = $q; - this._http = $http; - this._urlResolver = urlResolver; - } - ArtistsApiService.prototype.getArtistsLookup = function () { - var url = this._urlResolver.resolveUrl("~/api/artists/lookup"), inlineData = this._inlineData ? this._inlineData.get(url) : null; - if (inlineData) { - return this._q.when(inlineData); - } - else { - return this._http.get(url).then(function (result) { return result.data; }); - } - }; - return ArtistsApiService; - })(); - angular.module("MusicStore.ArtistApi") - .service("MusicStore.ArtistApi.IArtistApiService", [ - "$cacheFactory", - "$q", - "$http", - "MusicStore.UrlResolver.IUrlResolverService", - ArtistsApiService - ]); - })(ArtistApi = MusicStore.ArtistApi || (MusicStore.ArtistApi = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var GenreApi; - (function (GenreApi) { - angular.module("MusicStore.GenreApi", []); - })(GenreApi = MusicStore.GenreApi || (MusicStore.GenreApi = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var GenreApi; - (function (GenreApi) { - var GenreApiService = (function () { - function GenreApiService($cacheFactory, $q, $http, urlResolver) { - this._inlineData = $cacheFactory.get("inlineData"); - this._q = $q; - this._http = $http; - this._urlResolver = urlResolver; - } - GenreApiService.prototype.getGenresLookup = function () { - var url = this._urlResolver.resolveUrl("~/api/genres/lookup"), inlineData = this._inlineData ? this._inlineData.get(url) : null; - if (inlineData) { - return this._q.when(inlineData); - } - else { - return this._http.get(url).then(function (result) { return result.data; }); - } - }; - GenreApiService.prototype.getGenresMenu = function () { - var url = this._urlResolver.resolveUrl("~/api/genres/menu"), inlineData = this._inlineData ? this._inlineData.get(url) : null; - if (inlineData) { - return this._q.when(inlineData); - } - else { - return this._http.get(url).then(function (result) { return result.data; }); - } - }; - GenreApiService.prototype.getGenresList = function () { - var url = this._urlResolver.resolveUrl("~/api/genres"); - return this._http.get(url); - }; - GenreApiService.prototype.getGenreAlbums = function (genreId) { - var url = this._urlResolver.resolveUrl("~/api/genres/" + genreId + "/albums"); - return this._http.get(url); - }; - return GenreApiService; - })(); - angular.module("MusicStore.GenreApi") - .service("MusicStore.GenreApi.IGenreApiService", [ - "$cacheFactory", - "$q", - "$http", - "MusicStore.UrlResolver.IUrlResolverService", - GenreApiService - ]); - })(GenreApi = MusicStore.GenreApi || (MusicStore.GenreApi = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var GenreMenu; - (function (GenreMenu) { - angular.module("MusicStore.GenreMenu", []); - })(GenreMenu = MusicStore.GenreMenu || (MusicStore.GenreMenu = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var GenreMenu; - (function (GenreMenu) { - var GenreMenuController = (function () { - function GenreMenuController(genreApi, urlResolver) { - var viewModel = this; - genreApi.getGenresMenu().then(function (genres) { - viewModel.genres = genres; - }); - viewModel.urlBase = urlResolver.base; - } - return GenreMenuController; - })(); - angular.module("MusicStore.GenreMenu") - .controller("MusicStore.GenreMenu.GenreMenuController", [ - "MusicStore.GenreApi.IGenreApiService", - "MusicStore.UrlResolver.IUrlResolverService", - GenreMenuController - ]); - })(GenreMenu = MusicStore.GenreMenu || (MusicStore.GenreMenu = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var GenreMenu; - (function (GenreMenu) { - //@NgDirective('appGenreMenu') - var GenreMenuDirective = (function () { - function GenreMenuDirective(urlResolver) { - this.replace = true; - this.restrict = "A"; - for (var m in this) { - if (this[m].bind) { - this[m] = this[m].bind(this); - } - } - this.templateUrl = urlResolver.resolveUrl("~/ng-apps/components/GenreMenu/GenreMenu.html"); - } - return GenreMenuDirective; - })(); - angular.module("MusicStore.GenreMenu") - .directive("appGenreMenu", [ - "MusicStore.UrlResolver.IUrlResolverService", - function (a) { - return new GenreMenuDirective(a); - } - ]); - })(GenreMenu = MusicStore.GenreMenu || (MusicStore.GenreMenu = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var InlineData; - (function (InlineData) { - angular.module("MusicStore.InlineData", []); - })(InlineData = MusicStore.InlineData || (MusicStore.InlineData = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var InlineData; - (function (InlineData) { - //@NgDirective('appInlineData') - var InlineDataDirective = (function () { - function InlineDataDirective($cacheFactory, $log) { - this.restrict = "A"; - for (var m in this) { - if (this[m].bind) { - this[m] = this[m].bind(this); - } - } - this._cache = $cacheFactory.get("inlineData") || $cacheFactory("inlineData"); - this._log = $log; - } - InlineDataDirective.prototype.link = function (scope, element, attrs) { - var data = attrs.type === "application/json" - ? angular.fromJson(element.text()) - : element.text(); - this._log.info("appInlineData: Inline data element found for " + attrs.for); - this._cache.put(attrs.for, data); - //element.remove(); - }; - return InlineDataDirective; - })(); - angular.module("MusicStore.InlineData") - .directive("appInlineData", [ - "$cacheFactory", - "$log", - function (a, b) { - return new InlineDataDirective(a, b); - } - ]); - })(InlineData = MusicStore.InlineData || (MusicStore.InlineData = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var LoginLink; - (function (LoginLink) { - angular.module("MusicStore.LoginLink", []); - })(LoginLink = MusicStore.LoginLink || (MusicStore.LoginLink = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var LoginLink; - (function (LoginLink) { - //@NgDirective('appLoginLink') - var LoginLinkDirective = (function () { - function LoginLinkDirective(urlResolver, $window) { - this.restrict = "A"; - for (var m in this) { - if (this[m].bind) { - this[m] = this[m].bind(this); - } - } - this._window = $window; - } - LoginLinkDirective.prototype.link = function (scope, element, attrs) { - var _this = this; - if (!element.is("a[href]")) { - return; - } - // Grab the original login URL - var loginUrl = attrs.href; - element.click(function (event) { - // Update the returnUrl querystring value to current path - var currentUrl = _this._window.location.pathname + _this._window.location.search + _this._window.location.hash, newUrl = loginUrl + "?returnUrl=" + encodeURIComponent(currentUrl); - element.prop("href", newUrl); - }); - }; - return LoginLinkDirective; - })(); - angular.module("MusicStore.LoginLink") - .directive("appLoginLink", [ - "MusicStore.UrlResolver.IUrlResolverService", - "$window", - function (a, b) { - return new LoginLinkDirective(a, b); - } - ]); - })(LoginLink = MusicStore.LoginLink || (MusicStore.LoginLink = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var Models; - (function (Models) { - var AlertType = (function () { - function AlertType(value) { - this.value = value; - } - AlertType.prototype.toString = function () { - return this.value; - }; - // Values - AlertType.success = new AlertType("success"); - AlertType.info = new AlertType("info"); - AlertType.warning = new AlertType("warning"); - AlertType.danger = new AlertType("danger"); - return AlertType; - })(); - Models.AlertType = AlertType; - })(Models = MusicStore.Models || (MusicStore.Models = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var PreventSubmit; - (function (PreventSubmit) { - angular.module("MusicStore.PreventSubmit", []); - })(PreventSubmit = MusicStore.PreventSubmit || (MusicStore.PreventSubmit = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var PreventSubmit; - (function (PreventSubmit) { - //@NgDirective('appPreventSubmit') - var PreventSubmitDirective = (function () { - function PreventSubmitDirective() { - this.restrict = "A"; - for (var m in this) { - if (this[m].bind) { - this[m] = this[m].bind(this); - } - } - } - PreventSubmitDirective.prototype.link = function (scope, element, attrs) { - // TODO: Just make this directive apply to all tags and no-op if no action attr - element.submit(function (e) { - if (scope.$eval(attrs.appPreventSubmit)) { - e.preventDefault(); - return false; - } - }); - }; - return PreventSubmitDirective; - })(); - angular.module("MusicStore.PreventSubmit") - .directive("appPreventSubmit", [ - function () { - return new PreventSubmitDirective(); - } - ]); - })(PreventSubmit = MusicStore.PreventSubmit || (MusicStore.PreventSubmit = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var TitleCase; - (function (TitleCase) { - angular.module("MusicStore.TitleCase", []); - })(TitleCase = MusicStore.TitleCase || (MusicStore.TitleCase = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var TitleCase; - (function (TitleCase) { - //@NgFilter('titlecase') - function titleCase(input) { - var out = "", lastChar = ""; - for (var i = 0; i < input.length; i++) { - out = out + (lastChar === " " || lastChar === "" - ? input.charAt(i).toUpperCase() - : input.charAt(i)); - lastChar = input.charAt(i); - } - return out; - } - angular.module("MusicStore.TitleCase") - .filter("titlecase", function () { return titleCase; }); - })(TitleCase = MusicStore.TitleCase || (MusicStore.TitleCase = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var Truncate; - (function (Truncate) { - angular.module("MusicStore.Truncate", []); - })(Truncate = MusicStore.Truncate || (MusicStore.Truncate = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var Truncate; - (function (Truncate) { - //@NgFilter - function truncate(input, length) { - if (!input) { - return input; - } - if (input.length <= length) { - return input; - } - else { - return input.substr(0, length).trim() + "…"; - } - } - angular.module("MusicStore.Truncate") - .filter("truncate", function () { return truncate; }); - })(Truncate = MusicStore.Truncate || (MusicStore.Truncate = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var UrlResolver; - (function (UrlResolver) { - angular.module("MusicStore.UrlResolver", []); - })(UrlResolver = MusicStore.UrlResolver || (MusicStore.UrlResolver = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var UrlResolver; - (function (UrlResolver) { - var UrlResolverService = (function () { - function UrlResolverService($rootElement) { - this._base = $rootElement.attr("data-url-base"); - // Add trailing slash if not present - if (this._base === "" || this._base.substr(this._base.length - 1) !== "/") { - this._base = this._base + "/"; - } - } - Object.defineProperty(UrlResolverService.prototype, "base", { - get: function () { - return this._base; - }, - enumerable: true, - configurable: true - }); - UrlResolverService.prototype.resolveUrl = function (relativeUrl) { - var firstChar = relativeUrl.substr(0, 1); - if (firstChar === "~") { - relativeUrl = relativeUrl.substr(1); - } - firstChar = relativeUrl.substr(0, 1); - if (firstChar === "/") { - relativeUrl = relativeUrl.substr(1); - } - return this._base + relativeUrl; - }; - return UrlResolverService; - })(); - angular.module("MusicStore.UrlResolver") - .service("MusicStore.UrlResolver.IUrlResolverService", [ - "$rootElement", - UrlResolverService - ]); - })(UrlResolver = MusicStore.UrlResolver || (MusicStore.UrlResolver = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var UserDetails; - (function (UserDetails) { - angular.module("MusicStore.UserDetails", []); - })(UserDetails = MusicStore.UserDetails || (MusicStore.UserDetails = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var UserDetails; - (function (UserDetails) { - var UserDetailsService = (function () { - function UserDetailsService($document) { - this._document = $document; - } - UserDetailsService.prototype.getUserDetails = function (elementId) { - if (elementId === void 0) { elementId = "userDetails"; } - if (!this._userDetails) { - //var el = this._document.querySelector("[data-json-id='" + elementId + "']"); - var el = this._document.find("#" + elementId + "[type='application/json']"); - if (el.length) { - this._userDetails = angular.fromJson(el.text()); - } - else { - this._userDetails = { - isAuthenticated: false, - userId: null, - userName: null, - roles: [] - }; - } - } - return this._userDetails; - }; - return UserDetailsService; - })(); - angular.module("MusicStore.UserDetails") - .service("MusicStore.UserDetails.IUserDetailsService", [ - "$document", - UserDetailsService - ]); - })(UserDetails = MusicStore.UserDetails || (MusicStore.UserDetails = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var ViewAlert; - (function (ViewAlert) { - angular.module("MusicStore.ViewAlert", []); - })(ViewAlert = MusicStore.ViewAlert || (MusicStore.ViewAlert = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var ViewAlert; - (function (ViewAlert) { - var ViewAlertService = (function () { - function ViewAlertService() { - } - return ViewAlertService; - })(); - angular.module("MusicStore.ViewAlert") - .service("MusicStore.ViewAlert.IViewAlertService", [ - ViewAlertService - ]); - })(ViewAlert = MusicStore.ViewAlert || (MusicStore.ViewAlert = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var Visited; - (function (Visited) { - angular.module("MusicStore.Visited", []); - })(Visited = MusicStore.Visited || (MusicStore.Visited = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var Visited; - (function (Visited) { - //@NgDirective('input') - //@NgDirective('select') - var VisitedDirective = (function () { - function VisitedDirective($window) { - this.restrict = "E"; - this.require = "?ngModel"; - for (var m in this) { - if (this[m].bind) { - this[m] = this[m].bind(this); - } - } - this._window = $window; - } - VisitedDirective.prototype.link = function (scope, element, attrs, ctrl) { - if (!ctrl) { - return; - } - element.on("focus", function (event) { - element.addClass("has-focus"); - scope.$apply(function () { return ctrl.focus = true; }); - }); - element.on("blur", function (event) { - element.removeClass("has-focus"); - element.addClass("has-visited"); - scope.$apply(function () { - ctrl.focus = false; - ctrl.visited = true; - }); - }); - element.closest("form").on("submit", function () { - element.addClass("has-visited"); - scope.$apply(function () { - ctrl.focus = false; - ctrl.visited = true; - }); - }); - }; - return VisitedDirective; - })(); - angular.module("MusicStore.Visited") - .directive("input", [ - "$window", - function (a) { - return new VisitedDirective(a); - } - ]) - .directive("select", [ - "$window", - function (a) { - return new VisitedDirective(a); - } - ]); - })(Visited = MusicStore.Visited || (MusicStore.Visited = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var Admin; - (function (Admin) { - var Catalog; - (function (Catalog) { - // We don't register this controller with Angular's DI system because the $modal service - // will create and resolve its dependencies directly - //@NgController(skip=true) - var AlbumDeleteModalController = (function () { - function AlbumDeleteModalController($modalInstance, album) { - this._modalInstance = $modalInstance; - this.album = album; - } - AlbumDeleteModalController.prototype.ok = function () { - this._modalInstance.close(true); - }; - AlbumDeleteModalController.prototype.cancel = function () { - this._modalInstance.dismiss("cancel"); - }; - return AlbumDeleteModalController; - })(); - Catalog.AlbumDeleteModalController = AlbumDeleteModalController; - })(Catalog = Admin.Catalog || (Admin.Catalog = {})); - })(Admin = MusicStore.Admin || (MusicStore.Admin = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var Admin; - (function (Admin) { - var Catalog; - (function (Catalog) { - angular.module("MusicStore.Admin.Catalog", []); - })(Catalog = Admin.Catalog || (Admin.Catalog = {})); - })(Admin = MusicStore.Admin || (MusicStore.Admin = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var Admin; - (function (Admin) { - var Catalog; - (function (Catalog) { - var AlbumDetailsController = (function () { - function AlbumDetailsController($routeParams, $modal, $location, albumApi, viewAlert) { - var _this = this; - this._modal = $modal; - this._location = $location; - this._albumApi = albumApi; - this._viewAlert = viewAlert; - albumApi.getAlbumDetails($routeParams.albumId).then(function (album) { return _this.album = album; }); - } - AlbumDetailsController.prototype.deleteAlbum = function () { - var _this = this; - var deleteModal = this._modal.open({ - templateUrl: "ng-apps/MusicStore.Admin/Catalog/AlbumDeleteModal.cshtml", - controller: "MusicStore.Admin.Catalog.AlbumDeleteModalController as viewModel", - resolve: { - album: function () { return _this.album; } - } - }); - deleteModal.result.then(function (shouldDelete) { - if (!shouldDelete) { - return; - } - _this._albumApi.deleteAlbum(_this.album.AlbumId).then(function (result) { - // Navigate back to the list - _this._viewAlert.alert = { - type: MusicStore.Models.AlertType.success, - message: result.data.Message - }; - _this._location.path("/albums").replace(); - }); - }); - }; - return AlbumDetailsController; - })(); - angular.module("MusicStore.Admin.Catalog") - .controller("MusicStore.Admin.Catalog.AlbumDetailsController", [ - "$routeParams", - "$modal", - "$location", - "MusicStore.AlbumApi.IAlbumApiService", - "MusicStore.ViewAlert.IViewAlertService", - AlbumDetailsController - ]); - })(Catalog = Admin.Catalog || (Admin.Catalog = {})); - })(Admin = MusicStore.Admin || (MusicStore.Admin = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var Admin; - (function (Admin) { - var Catalog; - (function (Catalog) { - var AlbumEditController = (function () { - function AlbumEditController($routeParams, albumApi, artistApi, genreApi, viewAlert, $modal, $location, $timeout, $q, $log) { - var _this = this; - this.disabled = true; - this._albumApi = albumApi; - this._artistApi = artistApi; - this._genreApi = genreApi; - this._viewAlert = viewAlert; - this._modal = $modal; - this._location = $location; - this._timeout = $timeout; - this._log = $log; - this.mode = $routeParams.mode; - this.alert = viewAlert.alert; - artistApi.getArtistsLookup().then(function (artists) { return _this.artists = artists; }); - genreApi.getGenresLookup().then(function (genres) { return _this.genres = genres; }); - if (this.mode.toLowerCase() === "edit") { - // TODO: Handle album load failure - albumApi.getAlbumDetails($routeParams.albumId).then(function (album) { - _this.album = album; - // Pre-load the lookup arrays with the current values if not set yet - _this.genres = _this.genres || [album.Genre]; - _this.artists = _this.artists || [album.Artist]; - _this.disabled = false; - }); - } - else { - this.disabled = false; - } - } - AlbumEditController.prototype.save = function () { - var _this = this; - this.disabled = true; - var apiMethod = this.mode.toLowerCase() === "edit" ? this._albumApi.updateAlbum : this._albumApi.createAlbum; - apiMethod = apiMethod.bind(this._albumApi); - apiMethod(this.album).then( - // Success - function (response) { - var alert = { - type: MusicStore.Models.AlertType.success, - message: response.data.Message - }; - // TODO: Do we need to destroy this timeout on controller unload? - _this._timeout(function () { return _this.alert !== alert || _this.clearAlert(); }, 3000); - if (_this.mode.toLowerCase() === "new") { - _this._log.info("Created album successfully!"); - var albumId = response.data.Data; - _this._viewAlert.alert = alert; - // Reload the view with the new album ID - _this._location.path("/albums/" + albumId + "/edit").replace(); - } - else { - _this.alert = alert; - _this.disabled = false; - _this._log.info("Updated album " + _this.album.AlbumId + " successfully!"); - } - }, - // Error - function (response) { - // TODO: Make this common logic, e.g. base controller class, injected helper service, etc. - if (response.status === 400) { - // We made a bad request - if (response.data && response.data.ModelErrors) { - // The server says the update failed validation - // TODO: Map errors back to client validators and/or summary - _this.alert = { - type: MusicStore.Models.AlertType.danger, - message: response.data.Message, - modelErrors: response.data.ModelErrors - }; - _this.disabled = false; - } - else { - // Some other bad request, just show the message - _this.alert = { - type: MusicStore.Models.AlertType.danger, - message: response.data.Message - }; - } - } - else if (response.status === 404) { - // The album wasn't found, probably deleted. Leave the form disabled and show error message. - _this.alert = { - type: MusicStore.Models.AlertType.danger, - message: response.data.Message - }; - } - else if (response.status === 401) { - // We need to authenticate again - // TODO: Should we just redirect to login page, show a message with a link, or something else - _this.alert = { - type: MusicStore.Models.AlertType.danger, - message: "Your session has timed out. Please log in and try again." - }; - } - else if (!response.status) { - // Request timed out or no response from server or worse - _this._log.error("Error updating album " + _this.album.AlbumId); - _this._log.error(response); - _this.alert = { type: MusicStore.Models.AlertType.danger, message: "An unexpected error occurred. Please try again." }; - _this.disabled = false; - } - }); - }; - AlbumEditController.prototype.deleteAlbum = function () { - var _this = this; - var deleteModal = this._modal.open({ - templateUrl: "ng-apps/MusicStore.Admin/Catalog/AlbumDeleteModal.cshtml", - controller: "MusicStore.Admin.Catalog.AlbumDeleteModalController as viewModel", - resolve: { - album: function () { return _this.album; } - } - }); - deleteModal.result.then(function (shouldDelete) { - if (!shouldDelete) { - return; - } - _this._albumApi.deleteAlbum(_this.album.AlbumId).then(function (result) { - // Navigate back to the list - _this._viewAlert.alert = { - type: MusicStore.Models.AlertType.success, - message: result.data.Message - }; - _this._location.path("/albums").replace(); - }); - }); - }; - AlbumEditController.prototype.clearAlert = function () { - this.alert = null; - }; - return AlbumEditController; - })(); - angular.module("MusicStore.Admin.Catalog") - .controller("MusicStore.Admin.Catalog.AlbumEditController", [ - "$routeParams", - "MusicStore.AlbumApi.IAlbumApiService", - "MusicStore.ArtistApi.IArtistApiService", - "MusicStore.GenreApi.IGenreApiService", - "MusicStore.ViewAlert.IViewAlertService", - "$modal", - "$location", - "$timeout", - "$q", - "$log", - AlbumEditController - ]); - })(Catalog = Admin.Catalog || (Admin.Catalog = {})); - })(Admin = MusicStore.Admin || (MusicStore.Admin = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var Admin; - (function (Admin) { - var Catalog; - (function (Catalog) { - var AlbumListController = (function () { - function AlbumListController(albumApi, viewAlert, $modal, $timeout, $log) { - this._albumApi = albumApi; - this._modal = $modal; - this._timeout = $timeout; - this._log = $log; - this.currentPage = 1; - this.pageSize = 50; - this.sortColumn = "Title"; - this.loadPage(1); - this.showAlert(viewAlert.alert, 3000); - viewAlert.alert = null; - } - AlbumListController.prototype.loadPage = function (page) { - var _this = this; - page = page || this.currentPage; - var sortByExpression = this.getSortByExpression(); - this._albumApi.getAlbums(page, this.pageSize, sortByExpression).then(function (result) { - _this.albums = result.Data; - _this.currentPage = result.Page; - _this.totalCount = result.TotalCount; - }); - }; - AlbumListController.prototype.sortBy = function (column) { - if (this.sortColumn === column) { - // Just flip the direction - this.sortDescending = !this.sortDescending; - } - else { - this.sortColumn = column; - this.sortDescending = false; - } - this.loadPage(); - }; - AlbumListController.prototype.deleteAlbum = function (album) { - var _this = this; - var deleteModal = this._modal.open({ - templateUrl: "ng-apps/MusicStore.Admin/Catalog/AlbumDeleteModal.cshtml", - controller: "MusicStore.Admin.Catalog.AlbumDeleteModalController as viewModel", - resolve: { - album: function () { return album; } - } - }); - deleteModal.result.then(function (shouldDelete) { - if (!shouldDelete) { - return; - } - _this._albumApi.deleteAlbum(album.AlbumId).then(function (result) { - _this.loadPage(); - _this.showAlert({ - type: MusicStore.Models.AlertType.success, - message: result.data.Message - }, 3000); - }); - }); - }; - AlbumListController.prototype.clearAlert = function () { - this.alert = null; - }; - AlbumListController.prototype.showAlert = function (alert, closeAfter) { - var _this = this; - if (!alert) { - return; - } - this.alert = alert; - // TODO: Do we need to destroy this timeout on controller unload? - if (closeAfter) { - this._timeout(function () { return _this.alert !== alert || _this.clearAlert(); }, closeAfter); - } - }; - AlbumListController.prototype.getSortByExpression = function () { - if (this.sortDescending) { - return this.sortColumn + " DESC"; - } - return this.sortColumn; - }; - return AlbumListController; - })(); - angular.module("MusicStore.Admin.Catalog") - .controller("MusicStore.Admin.Catalog.AlbumListController", [ - "MusicStore.AlbumApi.IAlbumApiService", - "MusicStore.ViewAlert.IViewAlertService", - "$modal", - "$timeout", - "$log", - AlbumListController - ]); - })(Catalog = Admin.Catalog || (Admin.Catalog = {})); - })(Admin = MusicStore.Admin || (MusicStore.Admin = {})); -})(MusicStore || (MusicStore = {})); -/// -/// -/// -/// -var MusicStore; -(function (MusicStore) { - var Admin; - (function (Admin) { - angular.module("MusicStore.Admin", [ - "ngRoute", - "ui.bootstrap", - "MusicStore.InlineData", - "MusicStore.GenreMenu", - "MusicStore.UrlResolver", - "MusicStore.UserDetails", - "MusicStore.LoginLink", - "MusicStore.Visited", - "MusicStore.TitleCase", - "MusicStore.Truncate", - "MusicStore.GenreApi", - "MusicStore.AlbumApi", - "MusicStore.ArtistApi", - "MusicStore.ViewAlert", - "MusicStore.Admin.Catalog", - ]).config([ - "$routeProvider", - "$logProvider", - configuration - ]).run([ - "$log", - "MusicStore.UserDetails.IUserDetailsService", - run - ]); - var dependencies = [ - "ngRoute", - "ui.bootstrap", - MusicStore.InlineData, - MusicStore.GenreMenu, - MusicStore.UrlResolver, - MusicStore.UserDetails, - MusicStore.LoginLink, - MusicStore.Visited, - MusicStore.TitleCase, - MusicStore.Truncate, - MusicStore.GenreApi, - MusicStore.AlbumApi, - MusicStore.ArtistApi, - MusicStore.ViewAlert, - MusicStore.Admin.Catalog - ]; - // Use this method to register work which needs to be performed on module loading. - // Note only providers can be injected as dependencies here. - function configuration($routeProvider, $logProvider) { - // TODO: Enable debug logging based on server config - // TODO: Capture all logged errors and send back to server - $logProvider.debugEnabled(true); - // Configure routes - $routeProvider - .when("/albums/:albumId/details", { templateUrl: "ng-apps/MusicStore.Admin/Catalog/AlbumDetails.cshtml" }) - .when("/albums/:albumId/:mode", { templateUrl: "ng-apps/MusicStore.Admin/Catalog/AlbumEdit.cshtml" }) - .when("/albums/:mode", { templateUrl: "ng-apps/MusicStore.Admin/Catalog/AlbumEdit.cshtml" }) - .when("/albums", { templateUrl: "ng-apps/MusicStore.Admin/Catalog/AlbumList.cshtml" }) - .otherwise({ redirectTo: "/albums" }); - } - // Use this method to register work which should be performed when the injector is done loading all modules. - function run($log, userDetails) { - $log.log(userDetails.getUserDetails()); - } - })(Admin = MusicStore.Admin || (MusicStore.Admin = {})); -})(MusicStore || (MusicStore = {})); diff --git a/src/MusicStore.Spa/wwwroot/js/MusicStore.Store.js b/src/MusicStore.Spa/wwwroot/js/MusicStore.Store.js deleted file mode 100644 index 6c73217d4f..0000000000 --- a/src/MusicStore.Spa/wwwroot/js/MusicStore.Store.js +++ /dev/null @@ -1,811 +0,0 @@ -var MusicStore; -(function (MusicStore) { - var AlbumApi; - (function (AlbumApi) { - angular.module("MusicStore.AlbumApi", []); - })(AlbumApi = MusicStore.AlbumApi || (MusicStore.AlbumApi = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var AlbumApi; - (function (AlbumApi) { - var AlbumApiService = (function () { - function AlbumApiService($cacheFactory, $q, $http, urlResolver) { - this._inlineData = $cacheFactory.get("inlineData"); - this._q = $q; - this._http = $http; - this._urlResolver = urlResolver; - } - AlbumApiService.prototype.getAlbums = function (page, pageSize, sortBy) { - var url = this._urlResolver.resolveUrl("~/api/albums"), query = {}, querySeparator = "?", inlineData; - if (page) { - query.page = page; - } - if (pageSize) { - query.pageSize = pageSize; - } - if (sortBy) { - query.sortBy = sortBy; - } - for (var key in query) { - if (query.hasOwnProperty(key)) { - url += querySeparator + key + "=" + encodeURIComponent(query[key]); - if (querySeparator === "?") { - querySeparator = "&"; - } - } - } - inlineData = this._inlineData ? this._inlineData.get(url) : null; - if (inlineData) { - return this._q.when(inlineData); - } - else { - return this._http.get(url).then(function (result) { return result.data; }); - } - }; - AlbumApiService.prototype.getAlbumDetails = function (albumId) { - var url = this._urlResolver.resolveUrl("~/api/albums/" + albumId); - return this._http.get(url).then(function (result) { return result.data; }); - }; - AlbumApiService.prototype.getMostPopularAlbums = function (count) { - var url = this._urlResolver.resolveUrl("~/api/albums/mostPopular"), inlineData = this._inlineData ? this._inlineData.get(url) : null; - if (inlineData) { - return this._q.when(inlineData); - } - else { - if (count && count > 0) { - url += "?count=" + count; - } - return this._http.get(url).then(function (result) { return result.data; }); - } - }; - AlbumApiService.prototype.createAlbum = function (album, config) { - var url = this._urlResolver.resolveUrl("api/albums"); - return this._http.post(url, album, config || { timeout: 10000 }); - }; - AlbumApiService.prototype.updateAlbum = function (album, config) { - var url = this._urlResolver.resolveUrl("api/albums/" + album.AlbumId + "/update"); - return this._http.put(url, album, config || { timeout: 10000 }); - }; - AlbumApiService.prototype.deleteAlbum = function (albumId, config) { - var url = this._urlResolver.resolveUrl("api/albums/" + albumId); - return this._http.delete(url, config || { timeout: 10000 }); - }; - return AlbumApiService; - })(); - angular.module("MusicStore.AlbumApi") - .service("MusicStore.AlbumApi.IAlbumApiService", [ - "$cacheFactory", - "$q", - "$http", - "MusicStore.UrlResolver.IUrlResolverService", - AlbumApiService - ]); - })(AlbumApi = MusicStore.AlbumApi || (MusicStore.AlbumApi = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var ArtistApi; - (function (ArtistApi) { - angular.module("MusicStore.ArtistApi", []); - })(ArtistApi = MusicStore.ArtistApi || (MusicStore.ArtistApi = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var ArtistApi; - (function (ArtistApi) { - var ArtistsApiService = (function () { - function ArtistsApiService($cacheFactory, $q, $http, urlResolver) { - this._inlineData = $cacheFactory.get("inlineData"); - this._q = $q; - this._http = $http; - this._urlResolver = urlResolver; - } - ArtistsApiService.prototype.getArtistsLookup = function () { - var url = this._urlResolver.resolveUrl("~/api/artists/lookup"), inlineData = this._inlineData ? this._inlineData.get(url) : null; - if (inlineData) { - return this._q.when(inlineData); - } - else { - return this._http.get(url).then(function (result) { return result.data; }); - } - }; - return ArtistsApiService; - })(); - angular.module("MusicStore.ArtistApi") - .service("MusicStore.ArtistApi.IArtistApiService", [ - "$cacheFactory", - "$q", - "$http", - "MusicStore.UrlResolver.IUrlResolverService", - ArtistsApiService - ]); - })(ArtistApi = MusicStore.ArtistApi || (MusicStore.ArtistApi = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var GenreApi; - (function (GenreApi) { - angular.module("MusicStore.GenreApi", []); - })(GenreApi = MusicStore.GenreApi || (MusicStore.GenreApi = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var GenreApi; - (function (GenreApi) { - var GenreApiService = (function () { - function GenreApiService($cacheFactory, $q, $http, urlResolver) { - this._inlineData = $cacheFactory.get("inlineData"); - this._q = $q; - this._http = $http; - this._urlResolver = urlResolver; - } - GenreApiService.prototype.getGenresLookup = function () { - var url = this._urlResolver.resolveUrl("~/api/genres/lookup"), inlineData = this._inlineData ? this._inlineData.get(url) : null; - if (inlineData) { - return this._q.when(inlineData); - } - else { - return this._http.get(url).then(function (result) { return result.data; }); - } - }; - GenreApiService.prototype.getGenresMenu = function () { - var url = this._urlResolver.resolveUrl("~/api/genres/menu"), inlineData = this._inlineData ? this._inlineData.get(url) : null; - if (inlineData) { - return this._q.when(inlineData); - } - else { - return this._http.get(url).then(function (result) { return result.data; }); - } - }; - GenreApiService.prototype.getGenresList = function () { - var url = this._urlResolver.resolveUrl("~/api/genres"); - return this._http.get(url); - }; - GenreApiService.prototype.getGenreAlbums = function (genreId) { - var url = this._urlResolver.resolveUrl("~/api/genres/" + genreId + "/albums"); - return this._http.get(url); - }; - return GenreApiService; - })(); - angular.module("MusicStore.GenreApi") - .service("MusicStore.GenreApi.IGenreApiService", [ - "$cacheFactory", - "$q", - "$http", - "MusicStore.UrlResolver.IUrlResolverService", - GenreApiService - ]); - })(GenreApi = MusicStore.GenreApi || (MusicStore.GenreApi = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var GenreMenu; - (function (GenreMenu) { - angular.module("MusicStore.GenreMenu", []); - })(GenreMenu = MusicStore.GenreMenu || (MusicStore.GenreMenu = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var GenreMenu; - (function (GenreMenu) { - var GenreMenuController = (function () { - function GenreMenuController(genreApi, urlResolver) { - var viewModel = this; - genreApi.getGenresMenu().then(function (genres) { - viewModel.genres = genres; - }); - viewModel.urlBase = urlResolver.base; - } - return GenreMenuController; - })(); - angular.module("MusicStore.GenreMenu") - .controller("MusicStore.GenreMenu.GenreMenuController", [ - "MusicStore.GenreApi.IGenreApiService", - "MusicStore.UrlResolver.IUrlResolverService", - GenreMenuController - ]); - })(GenreMenu = MusicStore.GenreMenu || (MusicStore.GenreMenu = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var GenreMenu; - (function (GenreMenu) { - //@NgDirective('appGenreMenu') - var GenreMenuDirective = (function () { - function GenreMenuDirective(urlResolver) { - this.replace = true; - this.restrict = "A"; - for (var m in this) { - if (this[m].bind) { - this[m] = this[m].bind(this); - } - } - this.templateUrl = urlResolver.resolveUrl("~/ng-apps/components/GenreMenu/GenreMenu.html"); - } - return GenreMenuDirective; - })(); - angular.module("MusicStore.GenreMenu") - .directive("appGenreMenu", [ - "MusicStore.UrlResolver.IUrlResolverService", - function (a) { - return new GenreMenuDirective(a); - } - ]); - })(GenreMenu = MusicStore.GenreMenu || (MusicStore.GenreMenu = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var InlineData; - (function (InlineData) { - angular.module("MusicStore.InlineData", []); - })(InlineData = MusicStore.InlineData || (MusicStore.InlineData = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var InlineData; - (function (InlineData) { - //@NgDirective('appInlineData') - var InlineDataDirective = (function () { - function InlineDataDirective($cacheFactory, $log) { - this.restrict = "A"; - for (var m in this) { - if (this[m].bind) { - this[m] = this[m].bind(this); - } - } - this._cache = $cacheFactory.get("inlineData") || $cacheFactory("inlineData"); - this._log = $log; - } - InlineDataDirective.prototype.link = function (scope, element, attrs) { - var data = attrs.type === "application/json" - ? angular.fromJson(element.text()) - : element.text(); - this._log.info("appInlineData: Inline data element found for " + attrs.for); - this._cache.put(attrs.for, data); - //element.remove(); - }; - return InlineDataDirective; - })(); - angular.module("MusicStore.InlineData") - .directive("appInlineData", [ - "$cacheFactory", - "$log", - function (a, b) { - return new InlineDataDirective(a, b); - } - ]); - })(InlineData = MusicStore.InlineData || (MusicStore.InlineData = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var LoginLink; - (function (LoginLink) { - angular.module("MusicStore.LoginLink", []); - })(LoginLink = MusicStore.LoginLink || (MusicStore.LoginLink = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var LoginLink; - (function (LoginLink) { - //@NgDirective('appLoginLink') - var LoginLinkDirective = (function () { - function LoginLinkDirective(urlResolver, $window) { - this.restrict = "A"; - for (var m in this) { - if (this[m].bind) { - this[m] = this[m].bind(this); - } - } - this._window = $window; - } - LoginLinkDirective.prototype.link = function (scope, element, attrs) { - var _this = this; - if (!element.is("a[href]")) { - return; - } - // Grab the original login URL - var loginUrl = attrs.href; - element.click(function (event) { - // Update the returnUrl querystring value to current path - var currentUrl = _this._window.location.pathname + _this._window.location.search + _this._window.location.hash, newUrl = loginUrl + "?returnUrl=" + encodeURIComponent(currentUrl); - element.prop("href", newUrl); - }); - }; - return LoginLinkDirective; - })(); - angular.module("MusicStore.LoginLink") - .directive("appLoginLink", [ - "MusicStore.UrlResolver.IUrlResolverService", - "$window", - function (a, b) { - return new LoginLinkDirective(a, b); - } - ]); - })(LoginLink = MusicStore.LoginLink || (MusicStore.LoginLink = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var Models; - (function (Models) { - var AlertType = (function () { - function AlertType(value) { - this.value = value; - } - AlertType.prototype.toString = function () { - return this.value; - }; - // Values - AlertType.success = new AlertType("success"); - AlertType.info = new AlertType("info"); - AlertType.warning = new AlertType("warning"); - AlertType.danger = new AlertType("danger"); - return AlertType; - })(); - Models.AlertType = AlertType; - })(Models = MusicStore.Models || (MusicStore.Models = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var PreventSubmit; - (function (PreventSubmit) { - angular.module("MusicStore.PreventSubmit", []); - })(PreventSubmit = MusicStore.PreventSubmit || (MusicStore.PreventSubmit = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var PreventSubmit; - (function (PreventSubmit) { - //@NgDirective('appPreventSubmit') - var PreventSubmitDirective = (function () { - function PreventSubmitDirective() { - this.restrict = "A"; - for (var m in this) { - if (this[m].bind) { - this[m] = this[m].bind(this); - } - } - } - PreventSubmitDirective.prototype.link = function (scope, element, attrs) { - // TODO: Just make this directive apply to all tags and no-op if no action attr - element.submit(function (e) { - if (scope.$eval(attrs.appPreventSubmit)) { - e.preventDefault(); - return false; - } - }); - }; - return PreventSubmitDirective; - })(); - angular.module("MusicStore.PreventSubmit") - .directive("appPreventSubmit", [ - function () { - return new PreventSubmitDirective(); - } - ]); - })(PreventSubmit = MusicStore.PreventSubmit || (MusicStore.PreventSubmit = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var TitleCase; - (function (TitleCase) { - angular.module("MusicStore.TitleCase", []); - })(TitleCase = MusicStore.TitleCase || (MusicStore.TitleCase = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var TitleCase; - (function (TitleCase) { - //@NgFilter('titlecase') - function titleCase(input) { - var out = "", lastChar = ""; - for (var i = 0; i < input.length; i++) { - out = out + (lastChar === " " || lastChar === "" - ? input.charAt(i).toUpperCase() - : input.charAt(i)); - lastChar = input.charAt(i); - } - return out; - } - angular.module("MusicStore.TitleCase") - .filter("titlecase", function () { return titleCase; }); - })(TitleCase = MusicStore.TitleCase || (MusicStore.TitleCase = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var Truncate; - (function (Truncate) { - angular.module("MusicStore.Truncate", []); - })(Truncate = MusicStore.Truncate || (MusicStore.Truncate = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var Truncate; - (function (Truncate) { - //@NgFilter - function truncate(input, length) { - if (!input) { - return input; - } - if (input.length <= length) { - return input; - } - else { - return input.substr(0, length).trim() + "…"; - } - } - angular.module("MusicStore.Truncate") - .filter("truncate", function () { return truncate; }); - })(Truncate = MusicStore.Truncate || (MusicStore.Truncate = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var UrlResolver; - (function (UrlResolver) { - angular.module("MusicStore.UrlResolver", []); - })(UrlResolver = MusicStore.UrlResolver || (MusicStore.UrlResolver = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var UrlResolver; - (function (UrlResolver) { - var UrlResolverService = (function () { - function UrlResolverService($rootElement) { - this._base = $rootElement.attr("data-url-base"); - // Add trailing slash if not present - if (this._base === "" || this._base.substr(this._base.length - 1) !== "/") { - this._base = this._base + "/"; - } - } - Object.defineProperty(UrlResolverService.prototype, "base", { - get: function () { - return this._base; - }, - enumerable: true, - configurable: true - }); - UrlResolverService.prototype.resolveUrl = function (relativeUrl) { - var firstChar = relativeUrl.substr(0, 1); - if (firstChar === "~") { - relativeUrl = relativeUrl.substr(1); - } - firstChar = relativeUrl.substr(0, 1); - if (firstChar === "/") { - relativeUrl = relativeUrl.substr(1); - } - return this._base + relativeUrl; - }; - return UrlResolverService; - })(); - angular.module("MusicStore.UrlResolver") - .service("MusicStore.UrlResolver.IUrlResolverService", [ - "$rootElement", - UrlResolverService - ]); - })(UrlResolver = MusicStore.UrlResolver || (MusicStore.UrlResolver = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var UserDetails; - (function (UserDetails) { - angular.module("MusicStore.UserDetails", []); - })(UserDetails = MusicStore.UserDetails || (MusicStore.UserDetails = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var UserDetails; - (function (UserDetails) { - var UserDetailsService = (function () { - function UserDetailsService($document) { - this._document = $document; - } - UserDetailsService.prototype.getUserDetails = function (elementId) { - if (elementId === void 0) { elementId = "userDetails"; } - if (!this._userDetails) { - //var el = this._document.querySelector("[data-json-id='" + elementId + "']"); - var el = this._document.find("#" + elementId + "[type='application/json']"); - if (el.length) { - this._userDetails = angular.fromJson(el.text()); - } - else { - this._userDetails = { - isAuthenticated: false, - userId: null, - userName: null, - roles: [] - }; - } - } - return this._userDetails; - }; - return UserDetailsService; - })(); - angular.module("MusicStore.UserDetails") - .service("MusicStore.UserDetails.IUserDetailsService", [ - "$document", - UserDetailsService - ]); - })(UserDetails = MusicStore.UserDetails || (MusicStore.UserDetails = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var ViewAlert; - (function (ViewAlert) { - angular.module("MusicStore.ViewAlert", []); - })(ViewAlert = MusicStore.ViewAlert || (MusicStore.ViewAlert = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var ViewAlert; - (function (ViewAlert) { - var ViewAlertService = (function () { - function ViewAlertService() { - } - return ViewAlertService; - })(); - angular.module("MusicStore.ViewAlert") - .service("MusicStore.ViewAlert.IViewAlertService", [ - ViewAlertService - ]); - })(ViewAlert = MusicStore.ViewAlert || (MusicStore.ViewAlert = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var Visited; - (function (Visited) { - angular.module("MusicStore.Visited", []); - })(Visited = MusicStore.Visited || (MusicStore.Visited = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var Visited; - (function (Visited) { - //@NgDirective('input') - //@NgDirective('select') - var VisitedDirective = (function () { - function VisitedDirective($window) { - this.restrict = "E"; - this.require = "?ngModel"; - for (var m in this) { - if (this[m].bind) { - this[m] = this[m].bind(this); - } - } - this._window = $window; - } - VisitedDirective.prototype.link = function (scope, element, attrs, ctrl) { - if (!ctrl) { - return; - } - element.on("focus", function (event) { - element.addClass("has-focus"); - scope.$apply(function () { return ctrl.focus = true; }); - }); - element.on("blur", function (event) { - element.removeClass("has-focus"); - element.addClass("has-visited"); - scope.$apply(function () { - ctrl.focus = false; - ctrl.visited = true; - }); - }); - element.closest("form").on("submit", function () { - element.addClass("has-visited"); - scope.$apply(function () { - ctrl.focus = false; - ctrl.visited = true; - }); - }); - }; - return VisitedDirective; - })(); - angular.module("MusicStore.Visited") - .directive("input", [ - "$window", - function (a) { - return new VisitedDirective(a); - } - ]) - .directive("select", [ - "$window", - function (a) { - return new VisitedDirective(a); - } - ]); - })(Visited = MusicStore.Visited || (MusicStore.Visited = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var Store; - (function (Store) { - var Catalog; - (function (Catalog) { - angular.module("MusicStore.Store.Catalog", []); - })(Catalog = Store.Catalog || (Store.Catalog = {})); - })(Store = MusicStore.Store || (MusicStore.Store = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var Store; - (function (Store) { - var Catalog; - (function (Catalog) { - var AlbumDetailsController = (function () { - function AlbumDetailsController($routeParams, albumApi) { - var viewModel = this, albumId = $routeParams.albumId; - albumApi.getAlbumDetails(albumId).then(function (album) { - viewModel.album = album; - }); - } - return AlbumDetailsController; - })(); - angular.module("MusicStore.Store.Catalog") - .controller("MusicStore.Store.Catalog.AlbumDetailsController", [ - "$routeParams", - "MusicStore.AlbumApi.IAlbumApiService", - AlbumDetailsController - ]); - })(Catalog = Store.Catalog || (Store.Catalog = {})); - })(Store = MusicStore.Store || (MusicStore.Store = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var Store; - (function (Store) { - var Catalog; - (function (Catalog) { - var GenreDetailsController = (function () { - function GenreDetailsController($routeParams, genreApi) { - var viewModel = this; - genreApi.getGenreAlbums($routeParams.genreId).success(function (result) { - viewModel.albums = result; - }); - } - return GenreDetailsController; - })(); - angular.module("MusicStore.Store.Catalog") - .controller("MusicStore.Store.Catalog.GenreDetailsController", [ - "$routeParams", - "MusicStore.GenreApi.IGenreApiService", - GenreDetailsController - ]); - })(Catalog = Store.Catalog || (Store.Catalog = {})); - })(Store = MusicStore.Store || (MusicStore.Store = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var Store; - (function (Store) { - var Catalog; - (function (Catalog) { - var GenreListController = (function () { - function GenreListController(genreApi) { - var viewModel = this; - genreApi.getGenresList().success(function (genres) { - viewModel.genres = genres; - }); - } - return GenreListController; - })(); - angular.module("MusicStore.Store.Catalog") - .controller("MusicStore.Store.Catalog.GenreListController", [ - "MusicStore.GenreApi.IGenreApiService", - GenreListController - ]); - })(Catalog = Store.Catalog || (Store.Catalog = {})); - })(Store = MusicStore.Store || (MusicStore.Store = {})); -})(MusicStore || (MusicStore = {})); -var MusicStore; -(function (MusicStore) { - var Store; - (function (Store) { - var Home; - (function (Home) { - angular.module("MusicStore.Store.Home", []); - })(Home = Store.Home || (Store.Home = {})); - })(Store = MusicStore.Store || (MusicStore.Store = {})); -})(MusicStore || (MusicStore = {})); -/// -var MusicStore; -(function (MusicStore) { - var Store; - (function (Store) { - var Home; - (function (Home) { - var HomeController = (function () { - function HomeController(albumApi) { - var viewModel = this; - albumApi.getMostPopularAlbums().then(function (albums) { - viewModel.albums = albums; - }); - } - return HomeController; - })(); - angular.module("MusicStore.Store.Home") - .controller("MusicStore.Store.Home.HomeController", [ - "MusicStore.AlbumApi.IAlbumApiService", - HomeController - ]); - })(Home = Store.Home || (Store.Home = {})); - })(Store = MusicStore.Store || (MusicStore.Store = {})); -})(MusicStore || (MusicStore = {})); -/// -/// -/// -/// -var MusicStore; -(function (MusicStore) { - var Store; - (function (Store) { - angular.module("MusicStore.Store", [ - "ngRoute", - "MusicStore.InlineData", - "MusicStore.PreventSubmit", - "MusicStore.GenreMenu", - "MusicStore.UrlResolver", - "MusicStore.UserDetails", - "MusicStore.LoginLink", - "MusicStore.GenreApi", - "MusicStore.AlbumApi", - "MusicStore.Visited", - "MusicStore.Store.Home", - "MusicStore.Store.Catalog", - ]).config([ - "$routeProvider", - "$logProvider", - configuration - ]).run([ - "$log", - "MusicStore.UserDetails.IUserDetailsService", - run - ]); - var dependencies = [ - "ngRoute", - MusicStore.InlineData, - MusicStore.PreventSubmit, - MusicStore.GenreMenu, - MusicStore.UrlResolver, - MusicStore.UserDetails, - MusicStore.LoginLink, - MusicStore.GenreApi, - MusicStore.AlbumApi, - MusicStore.Visited, - MusicStore.Store.Home, - MusicStore.Store.Catalog - ]; - // Use this method to register work which needs to be performed on module loading. - // Note only providers can be injected as dependencies here. - function configuration($routeProvider, $logProvider) { - // TODO: Enable debug logging based on server config - // TODO: Capture all logged errors and send back to server - $logProvider.debugEnabled(true); - $routeProvider - .when("/", { templateUrl: "ng-apps/MusicStore.Store/Home/Home.html" }) - .when("/albums/genres", { templateUrl: "ng-apps/MusicStore.Store/Catalog/GenreList.html" }) - .when("/albums/genres/:genreId", { templateUrl: "ng-apps/MusicStore.Store/Catalog/GenreDetails.html" }) - .when("/albums/:albumId", { templateUrl: "ng-apps/MusicStore.Store/Catalog/AlbumDetails.html" }) - .otherwise({ redirectTo: "/" }); - } - // Use this method to register work which should be performed when the injector is done loading all modules. - function run($log, userDetails) { - $log.log(userDetails.getUserDetails()); - } - })(Store = MusicStore.Store || (MusicStore.Store = {})); -})(MusicStore || (MusicStore = {})); diff --git a/src/MusicStore.Spa/wwwroot/ng-apps/MusicStore.Store/Catalog/AlbumDetails.html b/src/MusicStore.Spa/wwwroot/ng-apps/MusicStore.Store/Catalog/AlbumDetails.html deleted file mode 100644 index 1a5be7674f..0000000000 --- a/src/MusicStore.Spa/wwwroot/ng-apps/MusicStore.Store/Catalog/AlbumDetails.html +++ /dev/null @@ -1,26 +0,0 @@ -
    -

    {{ viewModel.album.Title }}

    - -

    - -

    - -
    -

    - Genre: - {{ viewModel.album.Genre.Name }} -

    -

    - Artist: - {{ viewModel.album.Artist.Name }} -

    -

    - Price: - {{ viewModel.album.Price | currency }} -

    -

    - - Add to cart -

    -
    -
    \ No newline at end of file diff --git a/src/MusicStore.Spa/wwwroot/ng-apps/MusicStore.Store/Catalog/GenreDetails.html b/src/MusicStore.Spa/wwwroot/ng-apps/MusicStore.Store/Catalog/GenreDetails.html deleted file mode 100644 index 203d2e4164..0000000000 --- a/src/MusicStore.Spa/wwwroot/ng-apps/MusicStore.Store/Catalog/GenreDetails.html +++ /dev/null @@ -1,12 +0,0 @@ -
    -

    {{ viewModel.genre.Name }} Albums

    - - -
    \ No newline at end of file diff --git a/src/MusicStore.Spa/wwwroot/ng-apps/MusicStore.Store/Catalog/GenreList.html b/src/MusicStore.Spa/wwwroot/ng-apps/MusicStore.Store/Catalog/GenreList.html deleted file mode 100644 index 0c78a4bb60..0000000000 --- a/src/MusicStore.Spa/wwwroot/ng-apps/MusicStore.Store/Catalog/GenreList.html +++ /dev/null @@ -1,12 +0,0 @@ -
    -

    Browse Genres

    - -

    - Select from {{ viewModel.genres.length }} genres: -

    - -
    \ No newline at end of file diff --git a/src/MusicStore.Spa/wwwroot/ng-apps/MusicStore.Store/Home/Home.html b/src/MusicStore.Spa/wwwroot/ng-apps/MusicStore.Store/Home/Home.html deleted file mode 100644 index 3bfb802705..0000000000 --- a/src/MusicStore.Spa/wwwroot/ng-apps/MusicStore.Store/Home/Home.html +++ /dev/null @@ -1,15 +0,0 @@ -
    -

    MVC Music Store

    - -
    - - \ No newline at end of file diff --git a/src/MusicStore.Spa/wwwroot/ng-apps/components/GenreMenu/GenreMenu.html b/src/MusicStore.Spa/wwwroot/ng-apps/components/GenreMenu/GenreMenu.html deleted file mode 100644 index 888ae81db7..0000000000 --- a/src/MusicStore.Spa/wwwroot/ng-apps/components/GenreMenu/GenreMenu.html +++ /dev/null @@ -1,12 +0,0 @@ - \ No newline at end of file diff --git a/src/MusicStore/Program.cs b/src/MusicStore/Program.cs index 86de328e29..600037c0fd 100644 --- a/src/MusicStore/Program.cs +++ b/src/MusicStore/Program.cs @@ -6,8 +6,8 @@ using Microsoft.Framework.Configuration; namespace MusicStore { /// - /// This demonstrates how the application can be launched in a console application. - /// "dnx . run" command in the application folder will invoke this. + /// This demonstrates how the application can be launched in a console application. + /// "dnx run" command in the application folder will invoke this. /// public class Program { diff --git a/src/MvcMusicStore.Spa/Apis/AlbumsApiController.cs b/src/MvcMusicStore.Spa/Apis/AlbumsApiController.cs deleted file mode 100644 index af72158df7..0000000000 --- a/src/MvcMusicStore.Spa/Apis/AlbumsApiController.cs +++ /dev/null @@ -1,157 +0,0 @@ -using System.Data.Entity; -using System.Linq; -using System.Web.Helpers; -using System.Web.Mvc; -using MvcMusicStore.Infrastructure; -using MvcMusicStore.Models; - -namespace MvcMusicStore.Apis -{ - public class AlbumsApiController : Controller - { - private readonly MusicStoreEntities _storeContext = new MusicStoreEntities(); - - [Route("api/albums")] - public ActionResult Paged(int page = 1, int pageSize = 50, string sortBy = null) - { - var pagedAlbums = _storeContext.Albums - .Include(a => a.Genre) - .Include(a => a.Artist) - .SortBy(sortBy, a => a.Title) - .ToPagedList(page, pageSize); - - return new SmartJsonResult - { - Data = pagedAlbums - }; - } - - [Route("api/albums/all")] - public ActionResult All() - { - return new SmartJsonResult - { - Data = _storeContext.Albums - .Include(a => a.Genre) - .Include(a => a.Artist) - .OrderBy(a => a.Title) - }; - } - - [Route("api/albums/mostPopular")] - public ActionResult MostPopular(int count = 6) - { - count = count > 0 && count < 20 ? count : 6; - - return new SmartJsonResult - { - Data = _storeContext.Albums - .OrderByDescending(a => a.OrderDetails.Count()) - .Take(count) - }; - } - - [Route("api/albums/{albumId:int}")] - public ActionResult Details(int albumId) - { - return new SmartJsonResult - { - Data = _storeContext.Albums - .Include(a => a.Artist) - .Include(a => a.Genre) - .SingleOrDefault(a => a.AlbumId == albumId) - }; - } - - [Route("api/albums")] - [HttpPost] - [Authorize(Roles = "Administrator")] - public ActionResult CreateAlbum() - { - var album = new Album(); - - if (!TryUpdateModel(album, prefix: null, includeProperties: null, excludeProperties: new[] { "Genre", "Artist", "OrderDetails" })) - { - // Return the model errors - return new ApiResult(ModelState); - } - - // Save the changes to the DB - _storeContext.Albums.Add(album); - _storeContext.SaveChanges(); - - // TODO: Handle missing record, key violations, concurrency issues, etc. - - return new ApiResult - { - Data = album.AlbumId, - Message = "Album created successfully." - }; - } - - [Route("api/albums/{albumId:int}/update")] - [HttpPut] - [Authorize(Roles = "Administrator")] - public ActionResult UpdateAlbum(int albumId) - { - var album = _storeContext.Albums.SingleOrDefault(a => a.AlbumId == albumId); - - if (album == null) - { - return new ApiResult - { - StatusCode = 404, - Message = string.Format("The album with ID {0} was not found.", albumId) - }; - } - - if (!TryUpdateModel(album, prefix: null, includeProperties: null, excludeProperties: new[] { "Genre", "Artist", "OrderDetails" })) - { - // Return the model errors - return new ApiResult(ModelState); - } - - // Save the changes to the DB - _storeContext.SaveChanges(); - - // TODO: Handle missing record, key violations, concurrency issues, etc. - - return new ApiResult - { - Message = "Album updated successfully." - }; - } - - [Route("api/albums/{albumId:int}")] - [HttpDelete] - [Authorize(Roles = "Administrator")] - public ActionResult DeleteAlbum(int albumId) - { - var album = _storeContext.Albums.SingleOrDefault(a => a.AlbumId == albumId); - - if (album != null) - { - _storeContext.Albums.Remove(album); - - // Save the changes to the DB - _storeContext.SaveChanges(); - - // TODO: Handle missing record, key violations, concurrency issues, etc. - } - - return new ApiResult - { - Message = "Album deleted successfully." - }; - } - - protected override void Dispose(bool disposing) - { - if (disposing) - { - _storeContext.Dispose(); - } - base.Dispose(disposing); - } - } -} diff --git a/src/MvcMusicStore.Spa/Apis/ArtistsApiController.cs b/src/MvcMusicStore.Spa/Apis/ArtistsApiController.cs deleted file mode 100644 index 62b3c76e6f..0000000000 --- a/src/MvcMusicStore.Spa/Apis/ArtistsApiController.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Web.Mvc; -using MvcMusicStore.Models; - -namespace MvcMusicStore.Apis -{ - public class ArtistsApiController : Controller - { - private readonly MusicStoreEntities _storeContext = new MusicStoreEntities(); - - [Route("api/artists/lookup")] - public ActionResult Lookup() - { - return new SmartJsonResult - { - Data = _storeContext.Artists.OrderBy(a => a.Name).ToList() - }; - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Apis/GenresApiController.cs b/src/MvcMusicStore.Spa/Apis/GenresApiController.cs deleted file mode 100644 index 1b6addb973..0000000000 --- a/src/MvcMusicStore.Spa/Apis/GenresApiController.cs +++ /dev/null @@ -1,67 +0,0 @@ -using System.Data.Entity; -using System.Linq; -using System.Web.Mvc; -using MvcMusicStore.Models; - -namespace MvcMusicStore.Apis -{ - public class GenresApiController : Controller - { - private readonly MusicStoreEntities _storeContext = new MusicStoreEntities(); - - [Route("api/genres/lookup")] - public ActionResult Lookup() - { - return new SmartJsonResult - { - Data = _storeContext.Genres.Select(g => new { g.GenreId, g.Name }) - }; - } - - [Route("api/genres/menu")] - public ActionResult GenreMenuList(int count = 9) - { - count = count > 0 && count < 20 ? count : 9; - - return new SmartJsonResult - { - Data = _storeContext.Genres - .OrderByDescending(g => g.Albums.Sum(a => a.OrderDetails.Sum(od => od.Quantity))) - .Take(count) - }; - } - - [Route("api/genres")] - public ActionResult GenreList() - { - return new SmartJsonResult - { - Data = _storeContext.Genres - .Include(g => g.Albums) - .OrderBy(g => g.Name) - }; - } - - [Route("api/genres/{genreId:int}/albums")] - public ActionResult GenreAlbums(int genreId) - { - return new SmartJsonResult - { - Data = _storeContext.Albums - .Where(a => a.GenreId == genreId) - .Include(a => a.Genre) - .Include(a => a.Artist) - .OrderBy(a => a.Genre.Name) - }; - } - - protected override void Dispose(bool disposing) - { - if (disposing) - { - _storeContext.Dispose(); - } - base.Dispose(disposing); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/App_Start/FilterConfig.cs b/src/MvcMusicStore.Spa/App_Start/FilterConfig.cs deleted file mode 100644 index a9fc460edc..0000000000 --- a/src/MvcMusicStore.Spa/App_Start/FilterConfig.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Web; -using System.Web.Mvc; - -namespace MvcMusicStore -{ - public class FilterConfig - { - public static void RegisterGlobalFilters(GlobalFilterCollection filters) - { - filters.Add(new HandleErrorAttribute()); - } - } -} diff --git a/src/MvcMusicStore.Spa/App_Start/RouteConfig.cs b/src/MvcMusicStore.Spa/App_Start/RouteConfig.cs deleted file mode 100644 index fda7541ccc..0000000000 --- a/src/MvcMusicStore.Spa/App_Start/RouteConfig.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Web.Mvc; -using System.Web.Routing; - -namespace MvcMusicStore -{ - public class RouteConfig - { - public static void RegisterRoutes(RouteCollection routes) - { - routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); - - routes.RouteExistingFiles = true; - - routes.MapMvcAttributeRoutes(); - - routes.MapRoute( - name: "Default", - url: "{controller}/{action}/{id}", - defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } - ); - } - } -} diff --git a/src/MvcMusicStore.Spa/App_Start/Startup.App.cs b/src/MvcMusicStore.Spa/App_Start/Startup.App.cs deleted file mode 100644 index 053b2a9a30..0000000000 --- a/src/MvcMusicStore.Spa/App_Start/Startup.App.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System.Configuration; -using System.Threading.Tasks; -using Microsoft.AspNet.Identity; -using Microsoft.AspNet.Identity.EntityFramework; -using MvcMusicStore.Models; -using Owin; - -namespace MvcMusicStore -{ - public partial class Startup - { - private const string RoleName = "Administrator"; - - public void ConfigureApp(IAppBuilder app) - { - using (var context = new MusicStoreEntities()) - { - context.Database.Delete(); - context.Database.Create(); - - new SampleData().Seed(context); - } - - CreateAdminUser().Wait(); - } - - private async Task CreateAdminUser() - { - var username = ConfigurationManager.AppSettings["DefaultAdminUsername"]; - var password = ConfigurationManager.AppSettings["DefaultAdminPassword"]; - - using (var context = new ApplicationDbContext()) - { - var userManager = new UserManager(new UserStore(context)); - var roleManager = new RoleManager(new RoleStore(context)); - - var role = new IdentityRole(RoleName); - - var result = await roleManager.RoleExistsAsync(RoleName); - if (!result) - { - await roleManager.CreateAsync(role); - } - - var user = await userManager.FindByNameAsync(username); - if (user == null) - { - user = new ApplicationUser { UserName = username }; - await userManager.CreateAsync(user, password); - await userManager.AddToRoleAsync(user.Id, RoleName); - } - } - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/App_Start/Startup.Auth.cs b/src/MvcMusicStore.Spa/App_Start/Startup.Auth.cs deleted file mode 100644 index 6a7c520351..0000000000 --- a/src/MvcMusicStore.Spa/App_Start/Startup.Auth.cs +++ /dev/null @@ -1,38 +0,0 @@ -using Microsoft.AspNet.Identity; -using Microsoft.Owin; -using Microsoft.Owin.Security.Cookies; -using Owin; - -namespace MvcMusicStore -{ - public partial class Startup - { - // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864 - public void ConfigureAuth(IAppBuilder app) - { - // Enable the application to use a cookie to store information for the signed in user - app.UseCookieAuthentication(new CookieAuthenticationOptions - { - AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, - LoginPath = new PathString("/Account/Login") - }); - // Use a cookie to temporarily store information about a user logging in with a third party login provider - app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); - - // Uncomment the following lines to enable logging in with third party login providers - //app.UseMicrosoftAccountAuthentication( - // clientId: "", - // clientSecret: ""); - - //app.UseTwitterAuthentication( - // consumerKey: "", - // consumerSecret: ""); - - //app.UseFacebookAuthentication( - // appId: "", - // appSecret: ""); - - //app.UseGoogleAuthentication(); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/Site.less b/src/MvcMusicStore.Spa/Client/Site.less deleted file mode 100644 index 64438d2afd..0000000000 --- a/src/MvcMusicStore.Spa/Client/Site.less +++ /dev/null @@ -1,82 +0,0 @@ -@import '../bower_components/bootstrap/less/bootstrap.less'; - -[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak { - display: none !important; -} - -.nav, .pagination, .carousel, .panel-title a { - cursor: pointer; -} - -body { - padding-top: 50px; - padding-bottom: 20px; -} - -/* Set padding to keep content from hitting the edges */ -.body-content { - padding-left: 15px; - padding-right: 15px; -} - -/* Set width on the form input elements since they're 100% wide by default */ -input, -select, -textarea { - /*max-width: 280px;*/ -} - -/* styles for validation helpers */ -.field-validation-error { - color: #b94a48; -} - -.field-validation-valid { - display: none; -} - -input.input-validation-error { - border: 1px solid #b94a48; -} - -input[type="checkbox"].input-validation-error { - border: 0 none; -} - -.validation-summary-errors { - color: #b94a48; -} - -.validation-summary-valid { - display: none; -} - - -/* Music Store additions */ - -ul#album-list li { - height: 160px; -} - -ul#album-list li img:hover { - box-shadow: 1px 1px 7px #777; -} - -ul#album-list li img { - max-width: 100px; - max-height: 100px; - box-shadow: 1px 1px 5px #999; - border: none; - padding: 0; -} - -ul#album-list li a, ul#album-details li a { - text-decoration:none; -} - -ul#album-list li a:hover { - background: none; - -webkit-text-shadow: 1px 1px 2px #bbb; - text-shadow: 1px 1px 2px #bbb; - color: #363430; -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/favicon.ico b/src/MvcMusicStore.Spa/Client/favicon.ico deleted file mode 100644 index a3a799985c..0000000000 Binary files a/src/MvcMusicStore.Spa/Client/favicon.ico and /dev/null differ diff --git a/src/MvcMusicStore.Spa/Client/images/home-showcase.png b/src/MvcMusicStore.Spa/Client/images/home-showcase.png deleted file mode 100644 index 258c19d3cd..0000000000 Binary files a/src/MvcMusicStore.Spa/Client/images/home-showcase.png and /dev/null differ diff --git a/src/MvcMusicStore.Spa/Client/images/logo.png b/src/MvcMusicStore.Spa/Client/images/logo.png deleted file mode 100644 index d334c86256..0000000000 Binary files a/src/MvcMusicStore.Spa/Client/images/logo.png and /dev/null differ diff --git a/src/MvcMusicStore.Spa/Client/images/logo.svg b/src/MvcMusicStore.Spa/Client/images/logo.svg deleted file mode 100644 index ec3cd6aa5b..0000000000 --- a/src/MvcMusicStore.Spa/Client/images/logo.svg +++ /dev/null @@ -1,303 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/MvcMusicStore.Spa/Client/images/placeholder.png b/src/MvcMusicStore.Spa/Client/images/placeholder.png deleted file mode 100644 index 1f73dbb43d..0000000000 Binary files a/src/MvcMusicStore.Spa/Client/images/placeholder.png and /dev/null differ diff --git a/src/MvcMusicStore.Spa/Client/images/placeholder.svg b/src/MvcMusicStore.Spa/Client/images/placeholder.svg deleted file mode 100644 index 07d58202df..0000000000 --- a/src/MvcMusicStore.Spa/Client/images/placeholder.svg +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Admin/Catalog/AlbumDeleteModal.cshtml b/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Admin/Catalog/AlbumDeleteModal.cshtml deleted file mode 100644 index c33efb494e..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Admin/Catalog/AlbumDeleteModal.cshtml +++ /dev/null @@ -1,24 +0,0 @@ - - - \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Admin/Catalog/AlbumDeleteModalController.ts b/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Admin/Catalog/AlbumDeleteModalController.ts deleted file mode 100644 index 9e711d12af..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Admin/Catalog/AlbumDeleteModalController.ts +++ /dev/null @@ -1,30 +0,0 @@ -module MusicStore.Admin.Catalog { - export interface IAlbumDeleteModalViewModel { - album: Models.IAlbum; - ok(); - cancel(); - } - - // We don't register this controller with Angular's DI system because the $modal service - // will create and resolve its dependencies directly - - //@NgController(skip=true) - export class AlbumDeleteModalController implements IAlbumDeleteModalViewModel { - private _modalInstance: ng.ui.bootstrap.IModalServiceInstance; - - constructor($modalInstance: ng.ui.bootstrap.IModalServiceInstance, album: Models.IAlbum) { - this._modalInstance = $modalInstance; - this.album = album; - } - - public album: Models.IAlbum; - - public ok() { - this._modalInstance.close(true); - } - - public cancel() { - this._modalInstance.dismiss("cancel"); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Admin/Catalog/AlbumDetails.cshtml b/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Admin/Catalog/AlbumDetails.cshtml deleted file mode 100644 index 43060109d1..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Admin/Catalog/AlbumDetails.cshtml +++ /dev/null @@ -1,58 +0,0 @@ -@model MvcMusicStore.Models.Album - -
    -

    Album Details

    -
    - - -
    - @Html.LabelFor(m => m.Artist, new { @class = "col-md-2 control-label" }) -
    -

    {{ viewModel.album.Artist.Name }}

    -
    -
    - -
    - @Html.LabelFor(m => m.Genre, new { @class = "col-md-2 control-label" }) -
    -

    {{ viewModel.album.Genre.Name }}

    -
    -
    - -
    - @Html.LabelFor(m => m.Title, new { @class = "col-md-2 control-label" }) -
    -

    {{ viewModel.album.Title }}

    -
    -
    - -
    - @Html.LabelFor(m => m.Price, new { @class = "col-md-2 control-label" }) -
    -

    {{ viewModel.album.Price | currency }}

    -
    -
    - -
    - @Html.LabelFor(m => m.AlbumArtUrl, new { @class = "col-md-2 control-label" }) -
    -

    {{ viewModel.album.AlbumArtUrl }}

    -
    -
    - -
    - -
    -

    Album Art

    -
    -
    - -
    -
    - Edit - - Back to List -
    -
    - -
    diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Admin/Catalog/AlbumDetailsController.ts b/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Admin/Catalog/AlbumDetailsController.ts deleted file mode 100644 index 56543fa57c..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Admin/Catalog/AlbumDetailsController.ts +++ /dev/null @@ -1,58 +0,0 @@ -module MusicStore.Admin.Catalog { - interface IAlbumDetailsRouteParams extends ng.route.IRouteParamsService { - albumId: number; - } - - interface IAlbumDetailsViewModel { - album: Models.IAlbum; - deleteAlbum(); - } - - class AlbumDetailsController implements IAlbumDetailsViewModel { - private _modal: ng.ui.bootstrap.IModalService; - private _location: ng.ILocationService; - private _albumApi: AlbumApi.IAlbumApiService; - private _viewAlert: ViewAlert.IViewAlertService; - - constructor($routeParams: IAlbumDetailsRouteParams, - $modal: ng.ui.bootstrap.IModalService, - $location: ng.ILocationService, - albumApi: AlbumApi.IAlbumApiService, - viewAlert: ViewAlert.IViewAlertService) { - - this._modal = $modal; - this._location = $location; - this._albumApi = albumApi; - this._viewAlert = viewAlert; - - albumApi.getAlbumDetails($routeParams.albumId).then(album => this.album = album); - } - - public album: Models.IAlbum; - - public deleteAlbum() { - var deleteModal = this._modal.open({ - templateUrl: "ng-apps/MusicStore.Admin/Catalog/AlbumDeleteModal.cshtml", - controller: "MusicStore.Admin.Catalog.AlbumDeleteModalController as viewModel", - resolve: { - album: () => this.album - } - }); - - deleteModal.result.then(shouldDelete => { - if (!shouldDelete) { - return; - } - - this._albumApi.deleteAlbum(this.album.AlbumId).then(result => { - // Navigate back to the list - this._viewAlert.alert = { - type: Models.AlertType.success, - message: result.data.Message - }; - this._location.path("/albums").replace(); - }); - }); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Admin/Catalog/AlbumEdit.cshtml b/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Admin/Catalog/AlbumEdit.cshtml deleted file mode 100644 index f997c2def4..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Admin/Catalog/AlbumEdit.cshtml +++ /dev/null @@ -1,99 +0,0 @@ -@model MvcMusicStore.Models.Album - -
    -

    Album {{ viewModel.mode | titlecase }}

    -
    - - - {{ viewModel.alert.message }} -
      -
    • {{ modelError.ErrorMessage }}
    • -
    -
    - -
    -
    - @Html.LabelFor(m => m.Artist, new { @class = "col-md-2 control-label" }) -
    -
    -
    - @Html.ngDropDownListFor(m => m.ArtistId, m => m.Artist.Name, source: "viewModel.artists", nullOption: "-- choose Artist --", - htmlAttributes: new { @class = "form-control", ng_model = "viewModel.album.ArtistId", ng_disabled = "viewModel.disabled || viewModel.artists.length < 2" }) -
    -
    - @Html.ngValidationMessageFor(m => m.ArtistId, "editAlbum", new { @class = "help-block field-validation-error" }) -
    -
    - -
    - @Html.LabelFor(m => m.Genre, new { @class = "col-md-2 control-label" }) -
    -
    -
    - @Html.ngDropDownListFor(m => m.GenreId, m => m.Genre.Name, source: "viewModel.genres", nullOption: "-- choose Genre --", - htmlAttributes: new { @class = "form-control", ng_model = "viewModel.album.GenreId", ng_disabled = "viewModel.disabled || viewModel.genres.length < 2" }) -
    -
    - @Html.ngValidationMessageFor(m => m.GenreId, "editAlbum", new { @class = "help-block field-validation-error" }) -
    -
    - -
    - @Html.LabelFor(m => m.Title, new { @class = "control-label col-md-2" }) -
    -
    -
    - @Html.ngTextBoxFor(m => m.Title, new { @class = "form-control", ng_model = "viewModel.album.Title", ng_disabled = "viewModel.disabled" }) -
    -
    - @Html.ngValidationMessageFor(model => model.Title, "editAlbum", new { @class = "help-block field-validation-error" }) -
    -
    - -
    - @Html.LabelFor(m => m.Price, new { @class = "control-label col-md-2" }) -
    -
    -
    -
    - $ - @Html.ngTextBoxFor(m => m.Price, new { @class = "form-control", ng_model = "viewModel.album.Price", ng_disabled = "viewModel.disabled" }) -
    -
    -
    - @Html.ngValidationMessageFor(model => model.Price, "editAlbum", new { @class = "help-block field-validation-error" }) -
    -
    - -
    - @Html.LabelFor(m => m.AlbumArtUrl, new { @class = "control-label col-md-2" }) -
    -
    -
    - @Html.ngTextBoxFor(m => m.AlbumArtUrl, new { @class = "form-control", ng_model = "viewModel.album.AlbumArtUrl", ng_disabled = "viewModel.disabled" }) -
    -
    - @Html.ngValidationMessageFor(model => model.AlbumArtUrl, "editAlbum", new { @class = "field-validation-error" }) -
    -
    - -
    -
    - Album Art -
    -
    - -
    -
    - - - Back to List -
    -
    -
    -
    \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Admin/Catalog/AlbumEditController.ts b/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Admin/Catalog/AlbumEditController.ts deleted file mode 100644 index f46fcab8ca..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Admin/Catalog/AlbumEditController.ts +++ /dev/null @@ -1,188 +0,0 @@ -module MusicStore.Admin.Catalog { - interface IAlbumDetailsRouteParams extends ng.route.IRouteParamsService { - mode: string; - albumId: number; - } - - interface IAlbumDetailsViewModel { - mode: string; // edit or new - disabled: boolean; - album: Models.IAlbum; - alert: Models.IAlert; - artists: Array; - genres: Array; - save(); - clearAlert(); - } - - class AlbumEditController implements IAlbumDetailsViewModel { - private _albumApi: AlbumApi.IAlbumApiService; - private _artistApi: ArtistApi.IArtistApiService; - private _genreApi: GenreApi.IGenreApiService; - private _viewAlert: ViewAlert.IViewAlertService; - private _modal: ng.ui.bootstrap.IModalService; - private _location: ng.ILocationService; - private _timeout: ng.ITimeoutService; - private _log: ng.ILogService; - - constructor($routeParams: IAlbumDetailsRouteParams, - albumApi: AlbumApi.IAlbumApiService, - artistApi: ArtistApi.IArtistApiService, - genreApi: GenreApi.IGenreApiService, - viewAlert: ViewAlert.IViewAlertService, - $modal: ng.ui.bootstrap.IModalService, - $location: ng.ILocationService, - $timeout: ng.ITimeoutService, - $q: ng.IQService, - $log: ng.ILogService) { - - this._albumApi = albumApi; - this._artistApi = artistApi; - this._genreApi = genreApi; - this._viewAlert = viewAlert; - this._modal = $modal; - this._location = $location; - this._timeout = $timeout; - this._log = $log; - - this.mode = $routeParams.mode; - - this.alert = viewAlert.alert; - - artistApi.getArtistsLookup().then(artists => this.artists = artists); - genreApi.getGenresLookup().then(genres => this.genres = genres); - - if (this.mode.toLowerCase() === "edit") { - // TODO: Handle album load failure - albumApi.getAlbumDetails($routeParams.albumId).then(album => { - this.album = album; - - // Pre-load the lookup arrays with the current values if not set yet - this.genres = this.genres || [album.Genre]; - this.artists = this.artists || [album.Artist]; - - this.disabled = false; - }); - } else { - this.disabled = false; - } - } - - public mode: string; - - public disabled = true; - - public album: Models.IAlbum; - - public alert: Models.IAlert; - - public artists: Array; - - public genres: Array; - - public save() { - this.disabled = true; - - var apiMethod = this.mode.toLowerCase() === "edit" ? this._albumApi.updateAlbum : this._albumApi.createAlbum; - apiMethod = apiMethod.bind(this._albumApi); - - apiMethod(this.album).then( - // Success - response => { - var alert = { - type: Models.AlertType.success, - message: response.data.Message - }; - - // TODO: Do we need to destroy this timeout on controller unload? - this._timeout(() => this.alert !== alert || this.clearAlert(), 3000); - - if (this.mode.toLowerCase() === "new") { - this._log.info("Created album successfully!"); - - var albumId: number = response.data.Data; - - this._viewAlert.alert = alert; - - // Reload the view with the new album ID - this._location.path("/albums/" + albumId + "/edit").replace(); - } else { - this.alert = alert; - this.disabled = false; - this._log.info("Updated album " + this.album.AlbumId + " successfully!"); - } - }, - // Error - response => { - // TODO: Make this common logic, e.g. base controller class, injected helper service, etc. - if (response.status === 400) { - // We made a bad request - if (response.data && response.data.ModelErrors) { - // The server says the update failed validation - // TODO: Map errors back to client validators and/or summary - this.alert = { - type: Models.AlertType.danger, - message: response.data.Message, - modelErrors: response.data.ModelErrors - }; - this.disabled = false; - } else { - // Some other bad request, just show the message - this.alert = { - type: Models.AlertType.danger, - message: response.data.Message - }; - } - } else if (response.status === 404) { - // The album wasn't found, probably deleted. Leave the form disabled and show error message. - this.alert = { - type: Models.AlertType.danger, - message: response.data.Message - }; - } else if (response.status === 401) { - // We need to authenticate again - // TODO: Should we just redirect to login page, show a message with a link, or something else - this.alert = { - type: Models.AlertType.danger, - message: "Your session has timed out. Please log in and try again." - }; - } else if (!response.status) { - // Request timed out or no response from server or worse - this._log.error("Error updating album " + this.album.AlbumId); - this._log.error(response); - this.alert = { type: Models.AlertType.danger, message: "An unexpected error occurred. Please try again." }; - this.disabled = false; - } - }); - } - - public deleteAlbum() { - var deleteModal = this._modal.open({ - templateUrl: "ng-apps/MusicStore.Admin/Catalog/AlbumDeleteModal.cshtml", - controller: "MusicStore.Admin.Catalog.AlbumDeleteModalController as viewModel", - resolve: { - album: () => this.album - } - }); - - deleteModal.result.then(shouldDelete => { - if (!shouldDelete) { - return; - } - - this._albumApi.deleteAlbum(this.album.AlbumId).then(result => { - // Navigate back to the list - this._viewAlert.alert = { - type: Models.AlertType.success, - message: result.data.Message - }; - this._location.path("/albums").replace(); - }); - }); - } - - public clearAlert() { - this.alert = null; - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Admin/Catalog/AlbumList.cshtml b/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Admin/Catalog/AlbumList.cshtml deleted file mode 100644 index 14d945d6d2..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Admin/Catalog/AlbumList.cshtml +++ /dev/null @@ -1,77 +0,0 @@ -@model MvcMusicStore.Models.Album - -
    -

    Albums

    -

    - Create new -

    - - - {{ viewModel.alert.message }} -
      -
    • {{ modelError.ErrorMessage }}
    • -
    -
    - - - - - - - - - - - - - - - - - - - - -
    - @Html.DisplayNameFor(m => m.Genre) - - - - - @Html.DisplayNameFor(m => m.Artist) - - - - - @Html.DisplayNameFor(m => m.Title) - - - - - @Html.DisplayNameFor(m => m.Price) - - - -
    - {{ album.Genre.Name }} - - {{ album.Artist.Name | truncate:25 }} - - {{ album.Title | truncate:25 }} - - {{ album.Price | currency }} - -
    - Details - Edit - Delete -
    -
    - -

    - {{ viewModel.totalCount }} total albums -

    -
    \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Admin/Catalog/AlbumListController.ts b/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Admin/Catalog/AlbumListController.ts deleted file mode 100644 index 420e32c4c9..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Admin/Catalog/AlbumListController.ts +++ /dev/null @@ -1,123 +0,0 @@ -module MusicStore.Admin.Catalog { - interface IAlbumListViewModel { - albums: Array; - totalCount: number; - currentPage: number; - pageSize: number; - loadPage(page?: number); - deleteAlbum(album: Models.IAlbum); - clearAlert(); - } - - class AlbumListController implements IAlbumListViewModel { - private _albumApi: AlbumApi.IAlbumApiService; - private _modal: ng.ui.bootstrap.IModalService; - private _timeout: ng.ITimeoutService; - private _log: ng.ILogService; - - constructor(albumApi: AlbumApi.IAlbumApiService, - viewAlert: ViewAlert.IViewAlertService, - $modal: ng.ui.bootstrap.IModalService, - $timeout: ng.ITimeoutService, - $log: ng.ILogService) { - - this._albumApi = albumApi; - this._modal = $modal; - this._timeout = $timeout; - this._log = $log; - - this.currentPage = 1; - this.pageSize = 50; - this.loadPage(1); - this.sortColumn = "Title"; - - this.showAlert(viewAlert.alert, 3000); - viewAlert.alert = null; - } - - public alert: Models.IAlert; - - public albums: Array; - - public totalCount: number; - - public currentPage: number; - - public pageSize: number; - - public sortColumn: string; - - public sortDescending: boolean; - - public loadPage(page?: number) { - page = page || this.currentPage; - var sortByExpression = this.getSortByExpression(); - this._albumApi.getAlbums(page, this.pageSize, sortByExpression).then(result => { - this.albums = result.Data; - this.currentPage = result.Page; - this.totalCount = result.TotalCount; - }); - } - - public sortBy(column: string) { - if (this.sortColumn === column) { - // Just flip the direction - this.sortDescending = !this.sortDescending; - } else { - this.sortColumn = column; - this.sortDescending = false; - } - - this.loadPage(); - } - - public deleteAlbum(album: Models.IAlbum) { - var deleteModal = this._modal.open({ - templateUrl: "ng-apps/MusicStore.Admin/Catalog/AlbumDeleteModal.cshtml", - controller: "MusicStore.Admin.Catalog.AlbumDeleteModalController as viewModel", - resolve: { - album: () => album - } - }); - - deleteModal.result.then(shouldDelete => { - if (!shouldDelete) { - return; - } - - this._albumApi.deleteAlbum(album.AlbumId).then(result => { - this.loadPage(); - - this.showAlert({ - type: Models.AlertType.success, - message: result.data.Message - }, 3000); - }); - }); - } - - public clearAlert() { - this.alert = null; - } - - private showAlert(alert: Models.IAlert, closeAfter?: number) { - if (!alert) { - return; - } - - this.alert = alert; - - // TODO: Do we need to destroy this timeout on controller unload? - if (closeAfter) { - this._timeout(() => this.alert !== alert || this.clearAlert(), closeAfter); - } - } - - private getSortByExpression() { - if (this.sortDescending) { - return this.sortColumn + " DESC"; - } - return this.sortColumn; - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Admin/MusicStore.Admin.app.ts b/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Admin/MusicStore.Admin.app.ts deleted file mode 100644 index ab415980c8..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Admin/MusicStore.Admin.app.ts +++ /dev/null @@ -1,43 +0,0 @@ -/// - -module MusicStore.Admin { - - var dependencies = [ - "ngRoute", - "ui.bootstrap", - MusicStore.InlineData, - MusicStore.GenreMenu, - MusicStore.UrlResolver, - MusicStore.UserDetails, - MusicStore.LoginLink, - MusicStore.Visited, - MusicStore.TitleCase, - MusicStore.Truncate, - MusicStore.GenreApi, - MusicStore.AlbumApi, - MusicStore.ArtistApi, - MusicStore.ViewAlert, - MusicStore.Admin.Catalog - ]; - - // Use this method to register work which needs to be performed on module loading. - // Note only providers can be injected as dependencies here. - function configuration($routeProvider: ng.route.IRouteProvider, $logProvider: ng.ILogProvider) { - // TODO: Enable debug logging based on server config - // TODO: Capture all logged errors and send back to server - $logProvider.debugEnabled(true); - - // Configure routes - $routeProvider - .when("/albums/:albumId/details", { templateUrl: "ng-apps/MusicStore.Admin/Catalog/AlbumDetails.cshtml" }) - .when("/albums/:albumId/:mode", { templateUrl: "ng-apps/MusicStore.Admin/Catalog/AlbumEdit.cshtml" }) - .when("/albums/:mode", { templateUrl: "ng-apps/MusicStore.Admin/Catalog/AlbumEdit.cshtml" }) - .when("/albums", { templateUrl: "ng-apps/MusicStore.Admin/Catalog/AlbumList.cshtml" }) - .otherwise({ redirectTo: "/albums" }); - } - - // Use this method to register work which should be performed when the injector is done loading all modules. - //function BUG:run() { - - //} -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Store/Catalog/AlbumDetails.html b/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Store/Catalog/AlbumDetails.html deleted file mode 100644 index 1a5be7674f..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Store/Catalog/AlbumDetails.html +++ /dev/null @@ -1,26 +0,0 @@ -
    -

    {{ viewModel.album.Title }}

    - -

    - -

    - -
    -

    - Genre: - {{ viewModel.album.Genre.Name }} -

    -

    - Artist: - {{ viewModel.album.Artist.Name }} -

    -

    - Price: - {{ viewModel.album.Price | currency }} -

    -

    - - Add to cart -

    -
    -
    \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Store/Catalog/AlbumDetailsController.ts b/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Store/Catalog/AlbumDetailsController.ts deleted file mode 100644 index 4f9c52f651..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Store/Catalog/AlbumDetailsController.ts +++ /dev/null @@ -1,22 +0,0 @@ -module MusicStore.Store.Catalog { - interface IAlbumDetailsViewModel { - album: Models.IAlbum; - } - - interface IAlbumDetailsRouteParams extends ng.route.IRouteParamsService { - albumId: number; - } - - class AlbumDetailsController implements IAlbumDetailsViewModel { - public album: Models.IAlbum; - - constructor($routeParams: IAlbumDetailsRouteParams, albumApi: AlbumApi.IAlbumApiService) { - var viewModel = this, - albumId = $routeParams.albumId; - - albumApi.getAlbumDetails(albumId).then(album => { - viewModel.album = album; - }); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Store/Catalog/GenreDetails.html b/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Store/Catalog/GenreDetails.html deleted file mode 100644 index 203d2e4164..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Store/Catalog/GenreDetails.html +++ /dev/null @@ -1,12 +0,0 @@ -
    -

    {{ viewModel.genre.Name }} Albums

    - - -
    \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Store/Catalog/GenreDetailsController.ts b/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Store/Catalog/GenreDetailsController.ts deleted file mode 100644 index f31d158e9a..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Store/Catalog/GenreDetailsController.ts +++ /dev/null @@ -1,21 +0,0 @@ -module MusicStore.Store.Catalog { - interface IGenreDetailsViewModel { - albums: Array; - } - - interface IGenreDetailsRouteParams extends ng.route.IRouteParamsService { - genreId: number; - } - - class GenreDetailsController implements IGenreDetailsViewModel { - public albums: Array; - - constructor($routeParams: IGenreDetailsRouteParams, genreApi: GenreApi.IGenreApiService) { - var viewModel = this; - - genreApi.getGenreAlbums($routeParams.genreId).success(result => { - viewModel.albums = result; - }); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Store/Catalog/GenreList.html b/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Store/Catalog/GenreList.html deleted file mode 100644 index 0c78a4bb60..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Store/Catalog/GenreList.html +++ /dev/null @@ -1,12 +0,0 @@ -
    -

    Browse Genres

    - -

    - Select from {{ viewModel.genres.length }} genres: -

    - -
    \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Store/Catalog/GenreListController.ts b/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Store/Catalog/GenreListController.ts deleted file mode 100644 index 1f187cf204..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Store/Catalog/GenreListController.ts +++ /dev/null @@ -1,17 +0,0 @@ -module MusicStore.Store.Catalog { - interface IGenreListViewModel { - genres: Array; - } - - class GenreListController implements IGenreListViewModel { - public genres: Array; - - constructor(genreApi: GenreApi.IGenreApiService) { - var viewModel = this; - - genreApi.getGenresList().success(function (genres) { - viewModel.genres = genres; - }); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Store/Home/Home.html b/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Store/Home/Home.html deleted file mode 100644 index ca35168092..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Store/Home/Home.html +++ /dev/null @@ -1,15 +0,0 @@ -
    -

    MVC Music Store

    - -
    - - \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Store/Home/HomeController.ts b/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Store/Home/HomeController.ts deleted file mode 100644 index fb17e77da1..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Store/Home/HomeController.ts +++ /dev/null @@ -1,17 +0,0 @@ -module MusicStore.Store.Home { - interface IHomeViewModel { - albums: Array - } - - class HomeController implements IHomeViewModel { - public albums: Array; - - constructor(albumApi: AlbumApi.IAlbumApiService) { - var viewModel = this; - - albumApi.getMostPopularAlbums().then(albums => { - viewModel.albums = albums; - }); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Store/MusicStore.Store.app.ts b/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Store/MusicStore.Store.app.ts deleted file mode 100644 index 393e7e6001..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/MusicStore.Store/MusicStore.Store.app.ts +++ /dev/null @@ -1,38 +0,0 @@ -/// - -module MusicStore.Store { - - var dependencies = [ - "ngRoute", - MusicStore.InlineData, - MusicStore.PreventSubmit, - MusicStore.GenreMenu, - MusicStore.UrlResolver, - MusicStore.UserDetails, - MusicStore.LoginLink, - MusicStore.GenreApi, - MusicStore.AlbumApi, - MusicStore.Store.Home, - MusicStore.Store.Catalog - ]; - - // Use this method to register work which needs to be performed on module loading. - // Note only providers can be injected as dependencies here. - function configuration($routeProvider: ng.route.IRouteProvider, $logProvider: ng.ILogProvider) { - // TODO: Enable debug logging based on server config - // TODO: Capture all logged errors and send back to server - $logProvider.debugEnabled(true); - - $routeProvider - .when("/", { templateUrl: "ng-apps/MusicStore.Store/Home/Home.html" }) - .when("/albums/genres", { templateUrl: "ng-apps/MusicStore.Store/Catalog/GenreList.html" }) - .when("/albums/genres/:genreId", { templateUrl: "ng-apps/MusicStore.Store/Catalog/GenreDetails.html" }) - .when("/albums/:albumId", { templateUrl: "ng-apps/MusicStore.Store/Catalog/AlbumDetails.html" }) - .otherwise({ redirectTo: "/" }); - } - - // Use this method to register work which should be performed when the injector is done loading all modules. - function run($log: ng.ILogService, userDetails: UserDetails.IUserDetailsService) { - $log.log(userDetails.getUserDetails()); - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/Web.config b/src/MvcMusicStore.Spa/Client/ng-apps/Web.config deleted file mode 100644 index b3ccf45399..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/Web.config +++ /dev/null @@ -1,33 +0,0 @@ - - - - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/components/AlbumApi/AlbumApiService.ts b/src/MvcMusicStore.Spa/Client/ng-apps/components/AlbumApi/AlbumApiService.ts deleted file mode 100644 index d68bfd607d..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/components/AlbumApi/AlbumApiService.ts +++ /dev/null @@ -1,98 +0,0 @@ -module MusicStore.AlbumApi { - export interface IAlbumApiService { - getAlbums(page?: number, pageSize?: number, sortBy?: string): ng.IPromise>; - getAlbumDetails(albumId: number): ng.IPromise; - getMostPopularAlbums(count?: number): ng.IPromise>; - createAlbum(album: Models.IAlbum, config?: ng.IRequestConfig): ng.IHttpPromise; - updateAlbum(album: Models.IAlbum, config?: ng.IRequestConfig): ng.IHttpPromise; - deleteAlbum(albumId: number, config?: ng.IRequestConfig): ng.IHttpPromise; - } - - class AlbumApiService implements IAlbumApiService { - private _inlineData: ng.ICacheObject; - private _q: ng.IQService; - private _http: ng.IHttpService; - private _urlResolver: UrlResolver.IUrlResolverService; - - constructor($cacheFactory: ng.ICacheFactoryService, - $q: ng.IQService, - $http: ng.IHttpService, - urlResolver: UrlResolver.IUrlResolverService) { - this._inlineData = $cacheFactory.get("inlineData"); - this._q = $q; - this._http = $http; - this._urlResolver = urlResolver; - } - - public getAlbums(page?: number, pageSize?: number, sortBy?: string) { - var url = this._urlResolver.resolveUrl("~/api/albums"), - query: any = {}, - querySeparator = "?", - inlineData; - - if (page) { - query.page = page; - } - - if (pageSize) { - query.pageSize = pageSize; - } - - if (sortBy) { - query.sortBy = sortBy; - } - - for (var key in query) { - if (query.hasOwnProperty(key)) { - url += querySeparator + key + "=" + encodeURIComponent(query[key]); - if (querySeparator === "?") { - querySeparator = "&"; - } - } - } - - inlineData = this._inlineData ? this._inlineData.get(url) : null; - - if (inlineData) { - return this._q.when(inlineData); - } else { - return this._http.get(url).then(result => result.data); - } - } - - public getAlbumDetails(albumId: number) { - var url = this._urlResolver.resolveUrl("~/api/albums/" + albumId); - return this._http.get(url).then(result => result.data); - } - - public getMostPopularAlbums(count?: number) { - var url = this._urlResolver.resolveUrl("~/api/albums/mostPopular"), - inlineData = this._inlineData ? this._inlineData.get(url) : null; - - if (inlineData) { - return this._q.when(inlineData); - } else { - if (count && count > 0) { - url += "?count=" + count; - } - - return this._http.get(url).then(result => result.data); - } - } - - public createAlbum(album: Models.IAlbum, config?: ng.IRequestConfig) { - var url = this._urlResolver.resolveUrl("api/albums"); - return this._http.post(url, album, config || { timeout: 10000 }); - } - - public updateAlbum(album: Models.IAlbum, config?: ng.IRequestConfig) { - var url = this._urlResolver.resolveUrl("api/albums/" + album.AlbumId + "/update"); - return this._http.put(url, album, config || { timeout: 10000 }); - } - - public deleteAlbum(albumId: number, config?: ng.IRequestConfig) { - var url = this._urlResolver.resolveUrl("api/albums/" + albumId); - return this._http.delete(url, config || { timeout: 10000 }); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/components/ArtistApi/ArtistApiService.ts b/src/MvcMusicStore.Spa/Client/ng-apps/components/ArtistApi/ArtistApiService.ts deleted file mode 100644 index 45a59f3563..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/components/ArtistApi/ArtistApiService.ts +++ /dev/null @@ -1,33 +0,0 @@ -module MusicStore.ArtistApi { - export interface IArtistApiService { - getArtistsLookup(): ng.IPromise>; - } - - class ArtistsApiService implements IArtistApiService { - private _inlineData: ng.ICacheObject; - private _q: ng.IQService; - private _http: ng.IHttpService; - private _urlResolver: UrlResolver.IUrlResolverService; - - constructor($cacheFactory: ng.ICacheFactoryService, - $q: ng.IQService, - $http: ng.IHttpService, - urlResolver: UrlResolver.IUrlResolverService) { - this._inlineData = $cacheFactory.get("inlineData"); - this._q = $q; - this._http = $http; - this._urlResolver = urlResolver; - } - - public getArtistsLookup() { - var url = this._urlResolver.resolveUrl("~/api/artists/lookup"), - inlineData = this._inlineData ? this._inlineData.get(url) : null; - - if (inlineData) { - return this._q.when(inlineData); - } else { - return this._http.get(url).then(result => result.data); - } - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/components/GenreApi/GenreApiService.ts b/src/MvcMusicStore.Spa/Client/ng-apps/components/GenreApi/GenreApiService.ts deleted file mode 100644 index b92d794161..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/components/GenreApi/GenreApiService.ts +++ /dev/null @@ -1,57 +0,0 @@ -module MusicStore.GenreApi { - export interface IGenreApiService { - getGenresLookup(): ng.IPromise>; - getGenresMenu(): ng.IPromise>; - getGenresList(): ng.IHttpPromise>; - getGenreAlbums(genreId: number): ng.IHttpPromise>; - } - - class GenreApiService implements IGenreApiService { - private _inlineData: ng.ICacheObject; - private _q: ng.IQService; - private _http: ng.IHttpService; - private _urlResolver: UrlResolver.IUrlResolverService; - - constructor($cacheFactory: ng.ICacheFactoryService, - $q: ng.IQService, - $http: ng.IHttpService, - urlResolver: UrlResolver.IUrlResolverService) { - this._inlineData = $cacheFactory.get("inlineData"); - this._q = $q; - this._http = $http; - this._urlResolver = urlResolver; - } - - public getGenresLookup() { - var url = this._urlResolver.resolveUrl("~/api/genres/lookup"), - inlineData = this._inlineData ? this._inlineData.get(url) : null; - - if (inlineData) { - return this._q.when(inlineData); - } else { - return this._http.get(url).then(result => result.data); - } - } - - public getGenresMenu() { - var url = this._urlResolver.resolveUrl("~/api/genres/menu"), - inlineData = this._inlineData ? this._inlineData.get(url) : null; - - if (inlineData) { - return this._q.when(inlineData); - } else { - return this._http.get(url).then(result => result.data); - } - } - - public getGenresList() { - var url = this._urlResolver.resolveUrl("~/api/genres"); - return this._http.get(url); - } - - public getGenreAlbums(genreId: number) { - var url = this._urlResolver.resolveUrl("~/api/genres/" + genreId + "/albums"); - return this._http.get(url); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/components/GenreMenu/GenreMenu.html b/src/MvcMusicStore.Spa/Client/ng-apps/components/GenreMenu/GenreMenu.html deleted file mode 100644 index 888ae81db7..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/components/GenreMenu/GenreMenu.html +++ /dev/null @@ -1,12 +0,0 @@ - \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/components/GenreMenu/GenreMenuController.ts b/src/MvcMusicStore.Spa/Client/ng-apps/components/GenreMenu/GenreMenuController.ts deleted file mode 100644 index 2ccfb0f8b1..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/components/GenreMenu/GenreMenuController.ts +++ /dev/null @@ -1,22 +0,0 @@ -module MusicStore.GenreMenu { - interface IGenreMenuViewModel { - genres: Array; - urlBase: string; - } - - class GenreMenuController implements IGenreMenuViewModel { - constructor(genreApi: GenreApi.IGenreApiService, urlResolver: UrlResolver.IUrlResolverService) { - var viewModel = this; - - genreApi.getGenresMenu().then(genres => { - viewModel.genres = genres; - }); - - viewModel.urlBase = urlResolver.base; - } - - public genres: Array; - - public urlBase: string; - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/components/GenreMenu/GenreMenuDirective.ts b/src/MvcMusicStore.Spa/Client/ng-apps/components/GenreMenu/GenreMenuDirective.ts deleted file mode 100644 index 47f9ed2691..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/components/GenreMenu/GenreMenuDirective.ts +++ /dev/null @@ -1,13 +0,0 @@ -module MusicStore.GenreMenu { - - //@NgDirective('appGenreMenu') - class GenreMenuDirective implements ng.IDirective { - public replace = true; - public restrict = "A"; - public templateUrl; - - constructor(urlResolver: UrlResolver.IUrlResolverService) { - this.templateUrl = urlResolver.resolveUrl("~/ng-apps/components/GenreMenu/GenreMenu.html"); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/components/InlineData/InlineDataDirective.ts b/src/MvcMusicStore.Spa/Client/ng-apps/components/InlineData/InlineDataDirective.ts deleted file mode 100644 index ade0a68c1d..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/components/InlineData/InlineDataDirective.ts +++ /dev/null @@ -1,31 +0,0 @@ -module MusicStore.InlineData { - interface InlineDataAttributes extends ng.IAttributes { - type: string; - for: string; - } - - //@NgDirective('appInlineData') - class InlineDataDirective implements ng.IDirective { - private _cache: ng.ICacheObject; - private _log: ng.ILogService; - - constructor($cacheFactory: ng.ICacheFactoryService, $log: ng.ILogService) { - this._cache = $cacheFactory.get("inlineData") || $cacheFactory("inlineData"); - this._log = $log; - } - - public restrict = "A"; - - public link(scope: ng.IScope, element: ng.IAugmentedJQuery, attrs: InlineDataAttributes) { - var data = attrs.type === "application/json" - ? angular.fromJson(element.text()) - : element.text(); - - this._log.info("appInlineData: Inline data element found for " + attrs.for); - - this._cache.put(attrs.for, data); - - //element.remove(); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/components/LoginLink/LoginLinkDirective.ts b/src/MvcMusicStore.Spa/Client/ng-apps/components/LoginLink/LoginLinkDirective.ts deleted file mode 100644 index 051f1acd42..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/components/LoginLink/LoginLinkDirective.ts +++ /dev/null @@ -1,33 +0,0 @@ -module MusicStore.LoginLink { - interface LoginLinkAttributes extends ng.IAttributes { - href: string; - } - - //@NgDirective('appLoginLink') - class LoginLinkDirective implements ng.IDirective { - private _window: ng.IWindowService; - - constructor(urlResolver: UrlResolver.IUrlResolverService, $window: ng.IWindowService) { - this._window = $window; - } - - public restrict = "A"; - - public link(scope: ng.IScope, element: ng.IAugmentedJQuery, attrs: LoginLinkAttributes) { - if (!element.is("a[href]")) { - return; - } - - // Grab the original login URL - var loginUrl = attrs.href; - - element.click(event => { - // Update the returnUrl querystring value to current path - var currentUrl = this._window.location.pathname + this._window.location.search + this._window.location.hash, - newUrl = loginUrl + "?returnUrl=" + encodeURIComponent(currentUrl); - - element.prop("href", newUrl); - }); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/components/Models/IAlbum.ts b/src/MvcMusicStore.Spa/Client/ng-apps/components/Models/IAlbum.ts deleted file mode 100644 index fd8bce8f62..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/components/Models/IAlbum.ts +++ /dev/null @@ -1,16 +0,0 @@ -module MusicStore.Models { - export interface IAlbum { - AlbumId: number; - GenreId: number; - ArtistId: number; - - Title: string; - AlbumArtUrl: string; - Price: number; - - Artist: IArtist; - Genre: IGenre; - - DetailsUrl: string; - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/components/Models/IAlert.ts b/src/MvcMusicStore.Spa/Client/ng-apps/components/Models/IAlert.ts deleted file mode 100644 index f3f3578ab2..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/components/Models/IAlert.ts +++ /dev/null @@ -1,25 +0,0 @@ -module MusicStore.Models { - export interface IAlert { - type: AlertType; - message: string; - } - - export interface IModelErrorAlert extends IAlert { - modelErrors: Array; - } - - export class AlertType { - constructor(public value: string) { - } - - public toString() { - return this.value; - } - - // Values - static success = new AlertType("success"); - static info = new AlertType("info"); - static warning = new AlertType("warning"); - static danger = new AlertType("danger"); - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/components/Models/IApiResult.ts b/src/MvcMusicStore.Spa/Client/ng-apps/components/Models/IApiResult.ts deleted file mode 100644 index c69a3ca54b..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/components/Models/IApiResult.ts +++ /dev/null @@ -1,7 +0,0 @@ -module MusicStore.Models { - export interface IApiResult { - Message?: string; - Data?: any; - ModelErrors?: Array; - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/components/Models/IArtist.ts b/src/MvcMusicStore.Spa/Client/ng-apps/components/Models/IArtist.ts deleted file mode 100644 index 9d40978f30..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/components/Models/IArtist.ts +++ /dev/null @@ -1,6 +0,0 @@ -module MusicStore.Models { - export interface IArtist { - ArtistId: number; - Name: string; - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/components/Models/IGenre.ts b/src/MvcMusicStore.Spa/Client/ng-apps/components/Models/IGenre.ts deleted file mode 100644 index 6b60385fc7..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/components/Models/IGenre.ts +++ /dev/null @@ -1,7 +0,0 @@ -module MusicStore.Models { - export interface IGenre { - GenreId: number; - Name: string; - Description: string; - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/components/Models/IGenreLookup.ts b/src/MvcMusicStore.Spa/Client/ng-apps/components/Models/IGenreLookup.ts deleted file mode 100644 index 1cc50c8e30..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/components/Models/IGenreLookup.ts +++ /dev/null @@ -1,6 +0,0 @@ -module MusicStore.Models { - export interface IGenreLookup { - GenreId: number; - Name: string; - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/components/Models/IModelError.ts b/src/MvcMusicStore.Spa/Client/ng-apps/components/Models/IModelError.ts deleted file mode 100644 index 294ceeb80e..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/components/Models/IModelError.ts +++ /dev/null @@ -1,6 +0,0 @@ -module MusicStore.Models { - export interface IModelError { - FieldName: string; - ErrorMessage: string; - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/components/Models/IPagedList.ts b/src/MvcMusicStore.Spa/Client/ng-apps/components/Models/IPagedList.ts deleted file mode 100644 index e109a6ec1f..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/components/Models/IPagedList.ts +++ /dev/null @@ -1,8 +0,0 @@ -module MusicStore.Models { - export interface IPagedList { - Data: Array; - Page: number; - PageSize: number; - TotalCount: number; - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/components/Models/IUserDetails.ts b/src/MvcMusicStore.Spa/Client/ng-apps/components/Models/IUserDetails.ts deleted file mode 100644 index ddac9992f4..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/components/Models/IUserDetails.ts +++ /dev/null @@ -1,8 +0,0 @@ -module MusicStore.Models { - export interface IUserDetails { - isAuthenticated: boolean; - userName: string; - userId: string; - roles: Array; - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/components/PreventSubmit/PreventSubmitDirective.ts b/src/MvcMusicStore.Spa/Client/ng-apps/components/PreventSubmit/PreventSubmitDirective.ts deleted file mode 100644 index e2d3423de2..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/components/PreventSubmit/PreventSubmitDirective.ts +++ /dev/null @@ -1,24 +0,0 @@ -module MusicStore.PreventSubmit { - interface IPreventSubmitAttributes extends ng.IAttributes { - name: string; - appPreventSubmit: string; - } - - //@NgDirective('appPreventSubmit') - class PreventSubmitDirective implements ng.IDirective { - private _preventSubmit: any; - - public restrict = "A"; - - public link(scope: any, element: ng.IAugmentedJQuery, attrs: IPreventSubmitAttributes) { - // TODO: Just make this directive apply to all
    tags and no-op if no action attr - - element.submit(e => { - if (scope.$eval(attrs.appPreventSubmit)) { - e.preventDefault(); - return false; - } - }); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/components/TitleCase/TitleCaseFilter.ts b/src/MvcMusicStore.Spa/Client/ng-apps/components/TitleCase/TitleCaseFilter.ts deleted file mode 100644 index 98bf617727..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/components/TitleCase/TitleCaseFilter.ts +++ /dev/null @@ -1,18 +0,0 @@ -module MusicStore.TitleCase { - - //@NgFilter('titlecase') - function titleCase(input: string) { - var out = "", - lastChar = ""; - - for (var i = 0; i < input.length; i++) { - out = out + (lastChar === " " || lastChar === "" - ? input.charAt(i).toUpperCase() - : input.charAt(i)); - - lastChar = input.charAt(i); - } - - return out; - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/components/Truncate/TruncateFilter.ts b/src/MvcMusicStore.Spa/Client/ng-apps/components/Truncate/TruncateFilter.ts deleted file mode 100644 index 554631858e..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/components/Truncate/TruncateFilter.ts +++ /dev/null @@ -1,15 +0,0 @@ -module MusicStore.Truncate { - - //@NgFilter - function truncate(input: string, length: number) { - if (!input) { - return input; - } - - if (input.length <= length) { - return input; - } else { - return input.substr(0, length).trim() + "…"; - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/components/UrlResolver/UrlResolverService.ts b/src/MvcMusicStore.Spa/Client/ng-apps/components/UrlResolver/UrlResolverService.ts deleted file mode 100644 index fd47021825..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/components/UrlResolver/UrlResolverService.ts +++ /dev/null @@ -1,39 +0,0 @@ -module MusicStore.UrlResolver { - export interface IUrlResolverService { - base: string; - resolveUrl(relativeUrl: string); - } - - class UrlResolverService implements IUrlResolverService { - private _base: string; - - constructor($rootElement: ng.IAugmentedJQuery) { - this._base = $rootElement.attr("data-url-base"); - - // Add trailing slash if not present - if (this._base === "" || this._base.substr(this._base.length - 1) !== "/") { - this._base = this._base + "/"; - } - } - - public get base() { - return this._base; - } - - public resolveUrl(relativeUrl: string) { - var firstChar = relativeUrl.substr(0, 1); - - if (firstChar === "~") { - relativeUrl = relativeUrl.substr(1); - } - - firstChar = relativeUrl.substr(0, 1); - - if (firstChar === "/") { - relativeUrl = relativeUrl.substr(1); - } - - return this._base + relativeUrl; - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/components/UserDetails/UserDetailsService.ts b/src/MvcMusicStore.Spa/Client/ng-apps/components/UserDetails/UserDetailsService.ts deleted file mode 100644 index 09ecb2d67e..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/components/UserDetails/UserDetailsService.ts +++ /dev/null @@ -1,34 +0,0 @@ -module MusicStore.UserDetails { - export interface IUserDetailsService { - getUserDetails(): Models.IUserDetails; - getUserDetails(elementId: string): Models.IUserDetails; - } - - class UserDetailsService implements IUserDetailsService { - private _document: ng.IDocumentService; - private _userDetails: Models.IUserDetails; - - constructor($document: ng.IDocumentService) { - this._document = $document; - } - - public getUserDetails(elementId = "userDetails") { - if (!this._userDetails) { - //var el = this._document.querySelector("[data-json-id='" + elementId + "']"); - var el = this._document.find("#" + elementId + "[type='application/json']"); - - if (el.length) { - this._userDetails = angular.fromJson(el.text()); - } else { - this._userDetails = { - isAuthenticated: false, - userId: null, - userName: null, - roles: [] - }; - } - } - return this._userDetails; - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/components/ViewMessage/ViewAlertService.ts b/src/MvcMusicStore.Spa/Client/ng-apps/components/ViewMessage/ViewAlertService.ts deleted file mode 100644 index 488dc39010..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/components/ViewMessage/ViewAlertService.ts +++ /dev/null @@ -1,9 +0,0 @@ -module MusicStore.ViewAlert { - export interface IViewAlertService { - alert: Models.IAlert; - } - - class ViewAlertService implements IViewAlertService { - public alert: Models.IAlert; - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/components/Visited/VisitedDirective.ts b/src/MvcMusicStore.Spa/Client/ng-apps/components/Visited/VisitedDirective.ts deleted file mode 100644 index c0ff1edc44..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/components/Visited/VisitedDirective.ts +++ /dev/null @@ -1,49 +0,0 @@ -module MusicStore.Visited { - interface IVisitedFormController extends ng.IFormController { - focus?: boolean; - visited?: boolean; - } - - //@NgDirective('input') - //@NgDirective('select') - class VisitedDirective implements ng.IDirective { - private _window: ng.IWindowService; - - constructor($window: ng.IWindowService) { - this._window = $window; - } - - public restrict = "E"; - - public require = "?ngModel"; - - public link(scope: ng.IScope, element: ng.IAugmentedJQuery, attrs: ng.IAttributes, ctrl: IVisitedFormController) { - if (!ctrl) { - return; - } - - element.on("focus", event => { - element.addClass("has-focus"); - scope.$apply(() => ctrl.focus = true); - }); - - element.on("blur", event => { - element.removeClass("has-focus"); - element.addClass("has-visited"); - scope.$apply(() => { - ctrl.focus = false; - ctrl.visited = true; - }); - }); - - element.closest("form").on("submit", function () { - element.addClass("has-visited"); - - scope.$apply(() => { - ctrl.focus = false; - ctrl.visited = true; - }); - }); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Client/ng-apps/references.ts b/src/MvcMusicStore.Spa/Client/ng-apps/references.ts deleted file mode 100644 index 102e291cec..0000000000 --- a/src/MvcMusicStore.Spa/Client/ng-apps/references.ts +++ /dev/null @@ -1,9 +0,0 @@ -/// -/// -/// - -declare module ng { - export interface ILogProvider { - debugEnabled(enabled: boolean); - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Controllers/AccountController.cs b/src/MvcMusicStore.Spa/Controllers/AccountController.cs deleted file mode 100644 index e63b2b3b42..0000000000 --- a/src/MvcMusicStore.Spa/Controllers/AccountController.cs +++ /dev/null @@ -1,421 +0,0 @@ -using System.Collections.Generic; -using System.Security.Claims; -using System.Threading.Tasks; -using System.Web; -using System.Web.Mvc; -using Microsoft.AspNet.Identity; -using Microsoft.AspNet.Identity.EntityFramework; -using Microsoft.AspNet.Identity.Owin; -using Microsoft.Owin.Security; -using MvcMusicStore.Models; - -namespace MvcMusicStore.Controllers -{ - [Authorize] - public class AccountController : Controller - { - public enum ManageMessageId - { - ChangePasswordSuccess, - SetPasswordSuccess, - RemoveLoginSuccess, - Error - } - - private const string XsrfKey = "XsrfId"; - - private UserManager _userManager; - - public AccountController() - : this(new UserManager(new UserStore(new ApplicationDbContext()))) - { - } - - public AccountController(UserManager userManager) - { - _userManager = userManager; - } - - private IAuthenticationManager AuthenticationManager - { - get { return HttpContext.GetOwinContext().Authentication; } - } - - private async Task MigrateShoppingCart(string userName) - { - using (var storeContext = new MusicStoreEntities()) - { - var cart = ShoppingCart.GetCart(storeContext, this); - - await cart.MigrateCart(userName); - - Session[ShoppingCart.CartSessionKey] = userName; - } - } - - // GET: /Account/Login - [AllowAnonymous] - public ActionResult Login(string returnUrl) - { - ViewBag.ReturnUrl = returnUrl; - - return View(); - } - - // POST: /Account/Login - [HttpPost] - [AllowAnonymous] - [ValidateAntiForgeryToken] - public async Task Login(LoginViewModel model, string returnUrl) - { - if (ModelState.IsValid) - { - var user = await _userManager.FindAsync(model.UserName, model.Password); - if (user != null) - { - await SignInAsync(user, model.RememberMe); - - return RedirectToLocal(returnUrl); - } - - ModelState.AddModelError("", "Invalid username or password."); - } - - return View(model); - } - - // GET: /Account/Register - [AllowAnonymous] - public ActionResult Register() - { - return View(); - } - - // POST: /Account/Register - [HttpPost] - [AllowAnonymous] - [ValidateAntiForgeryToken] - public async Task Register(RegisterViewModel model) - { - if (ModelState.IsValid) - { - var user = new ApplicationUser { UserName = model.UserName }; - var result = await _userManager.CreateAsync(user, model.Password); - if (result.Succeeded) - { - await SignInAsync(user, isPersistent: false); - - return RedirectToAction("Index", "Home"); - } - - AddErrors(result); - } - - return View(model); - } - - // POST: /Account/Disassociate - [HttpPost] - [ValidateAntiForgeryToken] - public async Task Disassociate(string loginProvider, string providerKey) - { - var result = await _userManager.RemoveLoginAsync( - User.Identity.GetUserId(), - new UserLoginInfo(loginProvider, providerKey)); - - return RedirectToAction( - "Manage", - new { Message = result.Succeeded ? ManageMessageId.RemoveLoginSuccess : ManageMessageId.Error }); - } - - // GET: /Account/Manage - public async Task Manage(ManageMessageId? message) - { - switch (message) - { - case ManageMessageId.ChangePasswordSuccess: - ViewBag.StatusMessage = "Your password has been changed."; - break; - case ManageMessageId.SetPasswordSuccess: - ViewBag.StatusMessage = "Your password has been set."; - break; - case ManageMessageId.RemoveLoginSuccess: - ViewBag.StatusMessage = "The external login was removed."; - break; - case ManageMessageId.Error: - ViewBag.StatusMessage = "An error has occurred."; - break; - default: - ViewBag.StatusMessage = ""; - break; - } - - ViewBag.HasLocalPassword = await HasPasswordAsync(); - ViewBag.ReturnUrl = Url.Action("Manage"); - - return View(); - } - - // POST: /Account/Manage - [HttpPost] - [ValidateAntiForgeryToken] - public async Task Manage(ManageUserViewModel model) - { - bool hasPassword = await HasPasswordAsync(); - ViewBag.HasLocalPassword = hasPassword; - ViewBag.ReturnUrl = Url.Action("Manage"); - - if (hasPassword) - { - if (ModelState.IsValid) - { - var result = await _userManager.ChangePasswordAsync( - User.Identity.GetUserId(), - model.OldPassword, - model.NewPassword); - - if (result.Succeeded) - { - return RedirectToAction("Manage", new { Message = ManageMessageId.ChangePasswordSuccess }); - } - - AddErrors(result); - } - } - else - { - var state = ModelState["OldPassword"]; - if (state != null) - { - state.Errors.Clear(); - } - - if (ModelState.IsValid) - { - var result = await _userManager.AddPasswordAsync( - User.Identity.GetUserId(), - model.NewPassword); - - if (result.Succeeded) - { - return RedirectToAction("Manage", new { Message = ManageMessageId.SetPasswordSuccess }); - } - - AddErrors(result); - } - } - - return View(model); - } - - // POST: /Account/ExternalLogin - [HttpPost] - [AllowAnonymous] - [ValidateAntiForgeryToken] - public ActionResult ExternalLogin(string provider, string returnUrl) - { - return new ChallengeResult(provider, - Url.Action("ExternalLoginCallback", "Account", new { ReturnUrl = returnUrl })); - } - - // GET: /Account/ExternalLoginCallback - [AllowAnonymous] - public async Task ExternalLoginCallback(string returnUrl) - { - var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(); - if (loginInfo == null) - { - return RedirectToAction("Login"); - } - - var user = await _userManager.FindAsync(loginInfo.Login); - if (user != null) - { - await SignInAsync(user, false); - - return RedirectToLocal(returnUrl); - } - - ViewBag.ReturnUrl = returnUrl; - ViewBag.LoginProvider = loginInfo.Login.LoginProvider; - - return View("ExternalLoginConfirmation", - new ExternalLoginConfirmationViewModel { UserName = loginInfo.DefaultUserName }); - } - - // POST: /Account/LinkLogin - [HttpPost] - [ValidateAntiForgeryToken] - public ActionResult LinkLogin(string provider) - { - return new ChallengeResult(provider, Url.Action("LinkLoginCallback", "Account"), User.Identity.GetUserId()); - } - - // GET: /Account/LinkLoginCallback - public async Task LinkLoginCallback() - { - var loginInfo = - await AuthenticationManager.GetExternalLoginInfoAsync(XsrfKey, User.Identity.GetUserId()); - - if (loginInfo == null) - { - return RedirectToAction("Manage", new { Message = ManageMessageId.Error }); - } - - var result = await _userManager.AddLoginAsync(User.Identity.GetUserId(), loginInfo.Login); - if (result.Succeeded) - { - return RedirectToAction("Manage"); - } - - return RedirectToAction("Manage", new { Message = ManageMessageId.Error }); - } - - // POST: /Account/ExternalLoginConfirmation - [HttpPost] - [AllowAnonymous] - [ValidateAntiForgeryToken] - public async Task ExternalLoginConfirmation( - ExternalLoginConfirmationViewModel model, - string returnUrl) - { - if (User.Identity.IsAuthenticated) - { - return RedirectToAction("Manage"); - } - - if (ModelState.IsValid) - { - // Get the information about the user from the external login provider - var info = await AuthenticationManager.GetExternalLoginInfoAsync(); - if (info == null) - { - return View("ExternalLoginFailure"); - } - - var user = new ApplicationUser { UserName = model.UserName }; - - var result = await _userManager.CreateAsync(user); - if (result.Succeeded) - { - result = await _userManager.AddLoginAsync(user.Id, info.Login); - - if (result.Succeeded) - { - await SignInAsync(user, false); - return RedirectToLocal(returnUrl); - } - } - - AddErrors(result); - } - - ViewBag.ReturnUrl = returnUrl; - - return View(model); - } - - // POST: /Account/LogOff - [HttpPost] - [ValidateAntiForgeryToken] - public ActionResult LogOff() - { - AuthenticationManager.SignOut(); - - return RedirectToAction("Index", "Home"); - } - - // GET: /Account/ExternalLoginFailure - [AllowAnonymous] - public ActionResult ExternalLoginFailure() - { - return View(); - } - - [ChildActionOnly] - public ActionResult RemoveAccountList() - { - var linkedAccounts = _userManager.GetLogins(User.Identity.GetUserId()); - - ViewBag.ShowRemoveButton = HasPassword() || linkedAccounts.Count > 1; - - return PartialView("_RemoveAccountPartial", linkedAccounts); - } - - protected override void Dispose(bool disposing) - { - if (disposing && _userManager != null) - { - _userManager.Dispose(); - _userManager = null; - } - - base.Dispose(disposing); - } - - private async Task SignInAsync(ApplicationUser user, bool isPersistent) - { - AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie); - - var identity = - await _userManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie); - - AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = isPersistent }, identity); - - await MigrateShoppingCart(user.UserName); - } - - private void AddErrors(IdentityResult result) - { - foreach (var error in result.Errors) - { - ModelState.AddModelError("", error); - } - } - - private bool HasPassword() - { - var user = _userManager.FindById(User.Identity.GetUserId()); - - return user != null && user.PasswordHash != null; - } - - private async Task HasPasswordAsync() - { - var user = await _userManager.FindByIdAsync(User.Identity.GetUserId()); - - return user != null && user.PasswordHash != null; - } - - private ActionResult RedirectToLocal(string returnUrl) - { - return Url.IsLocalUrl(returnUrl) - ? (ActionResult)Redirect(returnUrl) - : RedirectToAction("Index", "Home"); - } - - private class ChallengeResult : HttpUnauthorizedResult - { - private readonly string _loginProvider; - private readonly string _redirectUri; - private readonly string _userId; - - public ChallengeResult(string provider, string redirectUri, string userId = null) - { - _loginProvider = provider; - _redirectUri = redirectUri; - _userId = userId; - } - - public override void ExecuteResult(ControllerContext context) - { - var properties = new AuthenticationProperties { RedirectUri = _redirectUri }; - if (_userId != null) - { - properties.Dictionary[XsrfKey] = _userId; - } - context.HttpContext.GetOwinContext().Authentication.Challenge(properties, _loginProvider); - } - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Controllers/CheckoutController.cs b/src/MvcMusicStore.Spa/Controllers/CheckoutController.cs deleted file mode 100644 index 98b832b767..0000000000 --- a/src/MvcMusicStore.Spa/Controllers/CheckoutController.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System; -using System.Data.Entity; -using System.Threading.Tasks; -using System.Web.Mvc; -using MvcMusicStore.Models; - -namespace MvcMusicStore.Controllers -{ - [Authorize] - public class CheckoutController : Controller - { - private const string PromoCode = "FREE"; - - private readonly MusicStoreEntities _storeContext = new MusicStoreEntities(); - - // GET: /Checkout/ - public ActionResult AddressAndPayment() - { - return View(); - } - - // POST: /Checkout/AddressAndPayment - [HttpPost] - public async Task AddressAndPayment(FormCollection values) - { - var order = new Order(); - TryUpdateModel(order); - - if (ModelState.IsValid - && string.Equals(values["PromoCode"], PromoCode, StringComparison.OrdinalIgnoreCase)) - { - order.Username = User.Identity.Name; - order.OrderDate = DateTime.Now; - - _storeContext.Orders.Add(order); - - await ShoppingCart.GetCart(_storeContext, this).CreateOrder(order); - - await _storeContext.SaveChangesAsync(); - - return RedirectToAction("Complete", new { id = order.OrderId }); - } - - return View(order); - } - - // GET: /Checkout/Complete - public async Task Complete(int id) - { - return await _storeContext.Orders.AnyAsync(o => o.OrderId == id && o.Username == User.Identity.Name) - ? View(id) - : View("Error"); - } - - protected override void Dispose(bool disposing) - { - if (disposing) - { - _storeContext.Dispose(); - } - base.Dispose(disposing); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Controllers/HomeController.cs b/src/MvcMusicStore.Spa/Controllers/HomeController.cs deleted file mode 100644 index 470f1dd0ab..0000000000 --- a/src/MvcMusicStore.Spa/Controllers/HomeController.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.Data.Entity; -using System.Linq; -using System.Threading.Tasks; -using System.Web.Mvc; -using MvcMusicStore.Models; - -namespace MvcMusicStore.Controllers -{ - public class HomeController : Controller - { - private readonly MusicStoreEntities _storeContext = new MusicStoreEntities(); - - // GET: /Home/ - public ActionResult Index() - { - return View(); - } - - protected override void Dispose(bool disposing) - { - if (disposing) - { - _storeContext.Dispose(); - } - base.Dispose(disposing); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Controllers/ShoppingCartController.cs b/src/MvcMusicStore.Spa/Controllers/ShoppingCartController.cs deleted file mode 100644 index c8bd97adcf..0000000000 --- a/src/MvcMusicStore.Spa/Controllers/ShoppingCartController.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System.Data.Entity; -using System.Linq; -using System.Threading.Tasks; -using System.Web.Mvc; -using MvcMusicStore.Models; -using MvcMusicStore.ViewModels; - -namespace MvcMusicStore.Controllers -{ - public class ShoppingCartController : Controller - { - private readonly MusicStoreEntities _storeContext = new MusicStoreEntities(); - - // GET: /ShoppingCart/ - public async Task Index() - { - var cart = ShoppingCart.GetCart(_storeContext, this); - - var viewModel = new ShoppingCartViewModel - { - CartItems = await cart.GetCartItems().ToListAsync(), - CartTotal = await cart.GetTotal() - }; - - return View(viewModel); - } - - // GET: /ShoppingCart/AddToCart/5 - public async Task AddToCart(int id) - { - var cart = ShoppingCart.GetCart(_storeContext, this); - - await cart.AddToCart(await _storeContext.Albums.SingleAsync(a => a.AlbumId == id)); - - await _storeContext.SaveChangesAsync(); - - return RedirectToAction("Index"); - } - - // AJAX: /ShoppingCart/RemoveFromCart/5 - [HttpPost] - public async Task RemoveFromCart(int id) - { - var cart = ShoppingCart.GetCart(_storeContext, this); - - var albumName = await _storeContext.Carts - .Where(i => i.RecordId == id) - .Select(i => i.Album.Title) - .SingleOrDefaultAsync(); - - var itemCount = await cart.RemoveFromCart(id); - - await _storeContext.SaveChangesAsync(); - - var removed = (itemCount > 0) ? " 1 copy of " : string.Empty; - - var results = new ShoppingCartRemoveViewModel - { - Message = removed + albumName + " has been removed from your shopping cart.", - CartTotal = await cart.GetTotal(), - CartCount = await cart.GetCount(), - ItemCount = itemCount, - DeleteId = id - }; - - return Json(results); - } - - [ChildActionOnly] - public ActionResult CartSummary() - { - var cart = ShoppingCart.GetCart(_storeContext, this); - - var cartItems = cart.GetCartItems() - .Select(a => a.Album.Title) - .OrderBy(x => x) - .ToList(); - - ViewBag.CartCount = cartItems.Count(); - ViewBag.CartSummary = string.Join("\n", cartItems.Distinct()); - - return PartialView("CartSummary"); - } - - protected override void Dispose(bool disposing) - { - if (disposing) - { - _storeContext.Dispose(); - } - base.Dispose(disposing); - } - } -} diff --git a/src/MvcMusicStore.Spa/Controllers/StoreManagerController.cs b/src/MvcMusicStore.Spa/Controllers/StoreManagerController.cs deleted file mode 100644 index 8b78c462a0..0000000000 --- a/src/MvcMusicStore.Spa/Controllers/StoreManagerController.cs +++ /dev/null @@ -1,124 +0,0 @@ -using System.Data.Entity; -using System.Linq; -using System.Threading.Tasks; -using System.Web.Mvc; -using MvcMusicStore.Models; - -namespace MvcMusicStore.Controllers -{ - [Authorize(Roles = "Administrator")] - public class StoreManagerController : Controller - { - private readonly MusicStoreEntities _storeContext = new MusicStoreEntities(); - - public ActionResult Index() - { - return View(); - } - - // GET: /StoreManager/Create - public async Task Create() - { - return await BuildView(null); - } - - // POST: /StoreManager/Create - [HttpPost] - public async Task Create(Album album) - { - if (ModelState.IsValid) - { - _storeContext.Albums.Add(album); - - await _storeContext.SaveChangesAsync(); - - return RedirectToAction("Index"); - } - - return await BuildView(album); - } - - // GET: /StoreManager/Edit/5 - public async Task Edit(int id = 0) - { - var album = await _storeContext.Albums.FindAsync(id); - if (album == null) - { - return HttpNotFound(); - } - - return await BuildView(album); - } - - // POST: /StoreManager/Edit/5 - [HttpPost] - public async Task Edit(Album album) - { - if (ModelState.IsValid) - { - _storeContext.Entry(album).State = EntityState.Modified; - - await _storeContext.SaveChangesAsync(); - - return RedirectToAction("Index"); - } - - return await BuildView(album); - } - - // GET: /StoreManager/Delete/5 - public async Task Delete(int id = 0) - { - var album = await _storeContext.Albums.FindAsync(id); - if (album == null) - { - return HttpNotFound(); - } - - return View(album); - } - - // POST: /StoreManager/Delete/5 - [HttpPost, ActionName("Delete")] - public async Task DeleteConfirmed(int id) - { - var album = await _storeContext.Albums.FindAsync(id); - if (album == null) - { - return HttpNotFound(); - } - - _storeContext.Albums.Remove(album); - - await _storeContext.SaveChangesAsync(); - - return RedirectToAction("Index"); - } - - private async Task BuildView(Album album) - { - ViewBag.GenreId = new SelectList( - await _storeContext.Genres.ToListAsync(), - "GenreId", - "Name", - album == null ? null : (object)album.GenreId); - - ViewBag.ArtistId = new SelectList( - await _storeContext.Artists.ToListAsync(), - "ArtistId", - "Name", - album == null ? null : (object)album.ArtistId); - - return View(album); - } - - protected override void Dispose(bool disposing) - { - if (disposing) - { - _storeContext.Dispose(); - } - base.Dispose(disposing); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Controllers/TemplateController.cs b/src/MvcMusicStore.Spa/Controllers/TemplateController.cs deleted file mode 100644 index 608e7bf78c..0000000000 --- a/src/MvcMusicStore.Spa/Controllers/TemplateController.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Web.Mvc; - -namespace MvcMusicStore.Controllers -{ - public class TemplateController : Controller - { - private static readonly string _templateBasePath = "~/Client/ng-apps/"; - - // GET: Template - [Route("ng-apps/{*path}")] - public ActionResult Index(string path) - { - if (!IsValidPath(path)) - { - return HttpNotFound(); - } - - return View(_templateBasePath + path); - } - - private static bool IsValidPath(string path) - { - if (string.IsNullOrWhiteSpace(path)) - { - return false; - } - - var last = '\0'; - for (var i = 0; i < path.Length; i++) - { - var c = path[i]; - if (Char.IsLetterOrDigit(c) - || (c == '/' && last != '/') - || c == '-' - || c == '_' - || (c == '.' && last != '.')) - { - last = c; - continue; - } - return false; - } - - return path.EndsWith(".cshtml", StringComparison.OrdinalIgnoreCase); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Global.asax b/src/MvcMusicStore.Spa/Global.asax deleted file mode 100644 index 8223631056..0000000000 --- a/src/MvcMusicStore.Spa/Global.asax +++ /dev/null @@ -1 +0,0 @@ -<%@ Application Codebehind="Global.asax.cs" Inherits="MvcMusicStore.MvcApplication" Language="C#" %> diff --git a/src/MvcMusicStore.Spa/Global.asax.cs b/src/MvcMusicStore.Spa/Global.asax.cs deleted file mode 100644 index 57b629f843..0000000000 --- a/src/MvcMusicStore.Spa/Global.asax.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Web.Mvc; -using System.Web.Routing; - -namespace MvcMusicStore -{ - public class MvcApplication : System.Web.HttpApplication - { - protected void Application_Start() - { - AreaRegistration.RegisterAllAreas(); - FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); - RouteConfig.RegisterRoutes(RouteTable.Routes); - } - } -} diff --git a/src/MvcMusicStore.Spa/Gruntfile.js b/src/MvcMusicStore.Spa/Gruntfile.js deleted file mode 100644 index 730c732945..0000000000 --- a/src/MvcMusicStore.Spa/Gruntfile.js +++ /dev/null @@ -1,189 +0,0 @@ -/// - -// node-debug (Resolve-Path ~\AppData\Roaming\npm\node_modules\grunt-cli\bin\grunt) task:target - -module.exports = function (grunt) { - /// - - grunt.loadNpmTasks('grunt-contrib-uglify'); - grunt.loadNpmTasks('grunt-contrib-watch'); - grunt.loadNpmTasks('grunt-contrib-copy'); - grunt.loadNpmTasks('grunt-contrib-clean'); - grunt.loadNpmTasks('grunt-contrib-less'); - grunt.loadNpmTasks('grunt-typescript'); - grunt.loadNpmTasks('grunt-tslint'); - grunt.loadNpmTasks('grunt-tsng'); - //grunt.loadNpmTasks('grunt-contrib-jshint'); - //grunt.loadNpmTasks('grunt-contrib-qunit'); - //grunt.loadNpmTasks('grunt-contrib-concat'); - - grunt.initConfig({ - staticFilePattern: '**/*.{js,css,map,html,htm,ico,jpg,jpeg,png,gif,eot,svg,ttf,woff}', - pkg: grunt.file.readJSON('package.json'), - uglify: { - options: { - banner: '/*! <%= pkg.name %> <%= grunt.template.today("dd-mm-yyyy") %> */\n' - }, - release: { - files: { - 'public/app.min.js': ['<%= typescript.dev.dest %>'] - } - } - }, - clean: { - options: { force: true }, - bower: ['public'], - assets: ['public'], - tsng: ['client/**/*.ng.ts'] - }, - copy: { - // This is to work around an issue with the dt-angular bower package https://github.com/dt-bower/dt-angular/issues/4 - fix: { - files: { - "bower_components/jquery/jquery.d.ts": ["bower_components/dt-jquery/jquery.d.ts"] - } - }, - bower: { - files: [ - { // JavaScript - expand: true, - flatten: true, - cwd: "bower_components/", - src: [ - "modernizr/modernizr.js", - "jquery/dist/*.{js,map}", - "jquery.validation/jquery.validate.js", - "jquery.validation/additional-methods.js", - "bootstrap/dist/**/*.js", - "respond/dest/**/*.js", - "angular/*.{js,.js.map}", - "angular-route/*.{js,.js.map}", - "angular-bootstrap/ui-bootstrap*" - ], - dest: "public/js/", - options: { force: true } - }, - { // CSS - expand: true, - flatten: true, - cwd: "bower_components/", - src: [ - "bootstrap/dist/**/*.css", - ], - dest: "public/css/", - options: { force: true } - }, - { // Fonts - expand: true, - flatten: true, - cwd: "bower_components/", - src: [ - "bootstrap/**/*.{woff,svg,eot,ttf}", - ], - dest: "public/fonts/", - options: { force: true } - } - ] - }, - assets: { - files: [ - { - expand: true, - cwd: "Client/", - src: [ - '<%= staticFilePattern %>' - ], - dest: "public/", - options: { force: true } - } - ] - } - }, - less: { - dev: { - options: { - cleancss: false - }, - files: { - "public/css/site.css": "Client/**/*.less" - } - }, - release: { - options: { - cleancss: true - }, - files: { - "public/css/site.css": "Client/**/*.less" - } - } - }, - tsng: { - options: { - extension: ".ng.ts" - }, - dev: { - files: [ - // TODO: Automate the generation of this config based on convention - { - src: ['Client/ng-apps/components/**/*.ts', 'Client/ng-apps/MusicStore.Store/**/*.ts', "!**/*.ng.ts"], - dest: "Client/ng-apps" // This needs to be the same across all sets so shared components work - }, - { - src: ['Client/ng-apps/components/**/*.ts', 'Client/ng-apps/MusicStore.Admin/**/*.ts', "!**/*.ng.ts"], - dest: "Client/ng-apps" // This needs to be the same across all sets so shared components work - } - ] - } - }, - tslint: { - options: { - configuration: grunt.file.readJSON("tslint.json") - }, - files: { - src: ['Client/**/*.ts', '!**/*.ng.ts'] - } - }, - typescript: { - options: { - module: 'amd', // or commonjs - target: 'es5', // or es3 - sourcemap: false - }, - dev: { - files: [ - // TODO: Automate the generation of this config based on convention - { - src: ['Client/ng-apps/components/**/*.ng.ts', 'Client/ng-apps/MusicStore.Store/**/*.ng.ts'], - dest: 'public/js/MusicStore.Store.js' - }, - { - src: ['Client/ng-apps/components/**/*.ng.ts', 'Client/ng-apps/MusicStore.Admin/**/*.ng.ts'], - dest: 'public/js/MusicStore.Admin.js' - } - ] - }, - release: { - options: { - sourcemap: true - }, - files: '<%= typescript.dev.files %>' - } - }, - watch: { - typescript: { - files: ['Client/**/*.ts', "!**/*.ng.ts"], - tasks: ['ts'] - }, - dev: { - files: ['bower_components/<%= staticFilePattern %>', 'Client/<%= staticFilePattern %>'], - tasks: ['dev'] - } - } - }); - - //grunt.registerTask('test', ['jshint', 'qunit']); - grunt.registerTask('ts', ['tslint', 'tsng', 'typescript:dev']); - grunt.registerTask('dev', ['clean', 'copy', 'less:dev', 'ts']); - grunt.registerTask('release', ['clean', 'copy', 'uglify', 'less:release', 'typescript:release']); - grunt.registerTask('default', ['dev']); -}; \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Helpers/AngularExtensions.cs b/src/MvcMusicStore.Spa/Helpers/AngularExtensions.cs deleted file mode 100644 index 3d0b40ec05..0000000000 --- a/src/MvcMusicStore.Spa/Helpers/AngularExtensions.cs +++ /dev/null @@ -1,298 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Linq.Expressions; -using System.Web; -using System.Web.Mvc; -using System.Web.Routing; - -namespace System.Web.Mvc.Html -{ - public static class AngularExtensions - { - public static IHtmlString ngPasswordFor(this HtmlHelper html, Expression> expression) - { - return html.ngTextBoxFor(expression, new RouteValueDictionary { { "type", "password" } }); - } - - public static IHtmlString ngPasswordFor(this HtmlHelper html, Expression> expression, object htmlAttributes) - { - return html.ngTextBoxFor(expression, MergeAttributes( - new RouteValueDictionary { { "type", "password" } }, - HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes))); - } - - public static IHtmlString ngPasswordFor(this HtmlHelper html, Expression> expression, IDictionary htmlAttributes) - { - return html.ngTextBoxFor(expression, MergeAttributes( - new RouteValueDictionary { { "type", "password" } }, - htmlAttributes)); - } - - public static IHtmlString ngTextBoxFor(this HtmlHelper html, Expression> expression) - { - return html.ngTextBoxFor(expression, new RouteValueDictionary()); - } - - public static IHtmlString ngTextBoxFor(this HtmlHelper html, Expression> expression, object htmlAttributes) - { - return html.ngTextBoxFor(expression, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)); - } - - public static IHtmlString ngTextBoxFor(this HtmlHelper html, Expression> expression, IDictionary htmlAttributes) - { - var expressionText = ExpressionHelper.GetExpressionText(expression); - var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData); - var ngAttributes = new Dictionary(); - - // Angular binding to client-side model (scope). This is required for Angular validation to work. - ngAttributes["ng-model"] = html.ViewData.TemplateInfo.GetFullHtmlFieldName(expressionText); - - // Set input type - if (string.Equals(metadata.DataTypeName, Enum.GetName(typeof(DataType), DataType.EmailAddress), StringComparison.OrdinalIgnoreCase)) - { - ngAttributes["type"] = "email"; - } - else if (metadata.ModelType == typeof(Uri) - || string.Equals(metadata.DataTypeName, Enum.GetName(typeof(DataType), DataType.Url), StringComparison.OrdinalIgnoreCase) - || string.Equals(metadata.DataTypeName, Enum.GetName(typeof(DataType), DataType.ImageUrl), StringComparison.OrdinalIgnoreCase)) - { - ngAttributes["type"] = "url"; - } - else if (IsNumberType(metadata.ModelType)) - { - ngAttributes["type"] = "number"; - if (IsIntegerType(metadata.ModelType)) - { - ngAttributes["step"] = "1"; - } - else - { - ngAttributes["step"] = "any"; - } - } - else if (metadata.ModelType == typeof(DateTime)) - { - if (string.Equals(metadata.DataTypeName, Enum.GetName(typeof(DataType), DataType.Date), StringComparison.OrdinalIgnoreCase)) - { - ngAttributes["type"] = "date"; - } - else if (string.Equals(metadata.DataTypeName, Enum.GetName(typeof(DataType), DataType.DateTime), StringComparison.OrdinalIgnoreCase)) - { - ngAttributes["type"] = "datetime"; - } - } - - // Add attributes for Angular validation - var clientValidators = metadata.GetValidators(html.ViewContext.Controller.ControllerContext) - .SelectMany(v => v.GetClientValidationRules()); - - foreach (var validator in clientValidators) - { - if (string.Equals(validator.ValidationType, "length")) - { - if (validator.ValidationParameters.ContainsKey("min")) - { - ngAttributes["ng-minlength"] = validator.ValidationParameters["min"]; - } - if (validator.ValidationParameters.ContainsKey("max")) - { - ngAttributes["ng-maxlength"] = validator.ValidationParameters["max"]; - } - } - else if (string.Equals(validator.ValidationType, "required")) - { - ngAttributes["required"] = null; - } - else if (string.Equals(validator.ValidationType, "range")) - { - if (validator.ValidationParameters.ContainsKey("min")) - { - ngAttributes["min"] = validator.ValidationParameters["min"]; - } - if (validator.ValidationParameters.ContainsKey("max")) - { - ngAttributes["max"] = validator.ValidationParameters["max"]; - } - } - else if (string.Equals(validator.ValidationType, "equalto")) - { - // CompareAttribute validator - var fieldToCompare = validator.ValidationParameters["other"]; // e.g. *.NewPassword - var other = validator.ValidationParameters["other"].ToString(); - if (other.StartsWith("*.")) - { - // The built-in CompareAttributeAdapter prepends *. to the property name so we strip it off here - other = other.Substring("*.".Length); - } - ngAttributes["app-equal-to"] = other; - // TODO: Actually write the Angular directive to use this - } - // TODO: Regex, Phone(regex) - } - - // Render! - return html.TextBoxFor(expression, MergeAttributes(ngAttributes, htmlAttributes)); - } - - private static bool IsNumberType(Type type) - { - switch (Type.GetTypeCode(type)) - { - case TypeCode.Int16: - case TypeCode.Int32: - case TypeCode.Int64: - case TypeCode.UInt16: - case TypeCode.UInt32: - case TypeCode.UInt64: - case TypeCode.Decimal: - case TypeCode.Double: - case TypeCode.Single: - return true; - } - return false; - } - - private static bool IsIntegerType(Type type) - { - switch (Type.GetTypeCode(type)) - { - case TypeCode.Int16: - case TypeCode.Int32: - case TypeCode.Int64: - case TypeCode.UInt16: - case TypeCode.UInt32: - case TypeCode.UInt64: - return true; - } - return false; - } - - public static IHtmlString ngDropDownListFor(this HtmlHelper html, Expression> propertyExpression, Expression> displayExpression, string source, string nullOption, object htmlAttributes) - { - return ngDropDownListFor(html, propertyExpression, displayExpression, source, nullOption, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)); - } - - public static IHtmlString ngDropDownListFor(this HtmlHelper html, Expression> propertyExpression, Expression> displayExpression, string source, string nullOption, IDictionary htmlAttributes) - { - var propertyExpressionText = ExpressionHelper.GetExpressionText(propertyExpression); - var displayExpressionText = ExpressionHelper.GetExpressionText(displayExpression); - var metadata = ModelMetadata.FromLambdaExpression(propertyExpression, html.ViewData); - var tag = new TagBuilder("select"); - - var valueFieldName = html.ViewData.TemplateInfo.GetFullHtmlFieldName(propertyExpressionText); - var displayFieldName = html.ViewData.TemplateInfo.GetFullHtmlFieldName(displayExpressionText); - - var displayFieldNameParts = displayFieldName.Split('.'); - displayFieldName = displayFieldNameParts[displayFieldNameParts.Length - 1]; - - tag.Attributes["id"] = html.ViewData.TemplateInfo.GetFullHtmlFieldId(propertyExpressionText); - tag.Attributes["name"] = valueFieldName; - tag.Attributes["ng-model"] = valueFieldName; - - var ngOptionsFormat = "a.{0} as a.{1} for a in {2}"; - var ngOptions = string.Format(ngOptionsFormat, valueFieldName, displayFieldName, source); - tag.Attributes["ng-options"] = ngOptions; - - if (nullOption != null) - { - var nullOptionTag = new TagBuilder("option"); - nullOptionTag.Attributes["value"] = string.Empty; - nullOptionTag.SetInnerText(nullOption); - tag.InnerHtml = nullOptionTag.ToString(); - } - - if (metadata.IsRequired) - { - tag.Attributes["required"] = string.Empty; - } - - tag.MergeAttributes(htmlAttributes, replaceExisting: true); - - return html.Raw(tag.ToString()); - } - - public static IHtmlString ngValidationMessageFor(this HtmlHelper htmlHelper, Expression> expression, string formName) - { - return ngValidationMessageFor(htmlHelper, expression, formName, ((IDictionary)new RouteValueDictionary())); - } - - public static IHtmlString ngValidationMessageFor(this HtmlHelper htmlHelper, Expression> expression, string formName, object htmlAttributes) - { - return ngValidationMessageFor(htmlHelper, expression, formName, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)); - } - - public static IHtmlString ngValidationMessageFor(this HtmlHelper html, Expression> expression, string formName, IDictionary htmlAttributes) - { - var expressionText = ExpressionHelper.GetExpressionText(expression); - var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData); - var modelName = html.ViewData.TemplateInfo.GetFullHtmlFieldName(expressionText); - - var clientValidators = metadata.GetValidators(html.ViewContext.Controller.ControllerContext) - .SelectMany(v => v.GetClientValidationRules()); - var tags = new List(); - - // Get validation messages from data type - // TODO: How to get validation messages from model metadata? All methods/properties required seem protected internal :( - - foreach (var validator in clientValidators) - { - var tag = new TagBuilder("span"); - tag.Attributes["ng-cloak"] = string.Empty; - - if (string.Equals(validator.ValidationType, "required")) - { - tag.Attributes["ng-show"] = string.Format("({0}.submitAttempted || {0}.{1}.$dirty || {0}.{1}.visited) && {0}.{1}.$error.{2}", formName, modelName, "required"); - tag.SetInnerText(validator.ErrorMessage); - } - else if (string.Equals(validator.ValidationType, "length")) - { - tag.Attributes["ng-show"] = string.Format("({0}.submitAttempted || {0}.{1}.$dirty || {0}.{1}.visited) && ({0}.{1}.$error.minlength || {0}.{1}.$error.maxlength)", - formName, modelName); - tag.SetInnerText(validator.ErrorMessage); - } - else if (string.Equals(validator.ValidationType, "range")) - { - tag.Attributes["ng-show"] = string.Format("({0}.submitAttempted || {0}.{1}.$dirty || {0}.{1}.visited) && ({0}.{1}.$error.min || {0}.{1}.$error.max)", - formName, modelName); - tag.SetInnerText(validator.ErrorMessage); - } - // TODO: Regex, equalto, remote - else - { - continue; - } - - tag.MergeAttributes(htmlAttributes); - tags.Add(tag); - } - - return html.Raw(String.Concat(tags.Select(t => t.ToString()))); - } - - public static string ngValidationClassFor(this HtmlHelper html, Expression> expression, string formName, string className) - { - var expressionText = ExpressionHelper.GetExpressionText(expression); - var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData); - var modelName = html.ViewData.TemplateInfo.GetFullHtmlFieldName(expressionText); - var ngClassFormat = "{{ '{0}' : ({1}.submitAttempted || {1}.{2}.$dirty || {1}.{2}.visited) && {1}.{2}.$invalid }}"; - - return string.Format(ngClassFormat, className, formName, modelName); - } - - private static IDictionary MergeAttributes(IDictionary source, IDictionary target) - { - // Keys in target win over keys in source - foreach (var pair in source) - { - if (!target.ContainsKey(pair.Key)) - { - target[pair.Key] = pair.Value; - } - } - - return target; - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Helpers/GeneralExtensions.cs b/src/MvcMusicStore.Spa/Helpers/GeneralExtensions.cs deleted file mode 100644 index ba15ca5733..0000000000 --- a/src/MvcMusicStore.Spa/Helpers/GeneralExtensions.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace System.Web.Mvc.Html -{ - public static class GeneralExtensions - { - public static IHtmlString Tag(this HtmlHelper htmlHelper, TagBuilder tagBuilder) - { - return htmlHelper.Raw(tagBuilder.ToString()); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Helpers/JsonExtensions.cs b/src/MvcMusicStore.Spa/Helpers/JsonExtensions.cs deleted file mode 100644 index aefa3eda85..0000000000 --- a/src/MvcMusicStore.Spa/Helpers/JsonExtensions.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System.Collections.Generic; -using System.Web.Routing; -using Newtonsoft.Json; - -namespace System.Web.Mvc.Html -{ - public static class JsonExtensions - { - public static IHtmlString Json(this HtmlHelper helper, TData data) - { - return Json(helper, data, ((IDictionary)new RouteValueDictionary())); - } - - public static IHtmlString Json(this HtmlHelper helper, TData data, object htmlAttributes) - { - return Json(helper, data, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)); - } - - public static IHtmlString Json(this HtmlHelper helper, TData data, IDictionary htmlAttributes) - { - var builder = new TagBuilder("script"); - builder.Attributes["type"] = "application/json"; - builder.MergeAttributes(htmlAttributes); - builder.InnerHtml = - (data is JsonString - ? data.ToString() - : JsonConvert.SerializeObject(data)) - .Replace("<", "\u003C").Replace(">", "\u003E"); - - return helper.Tag(builder); - } - - public static IHtmlString InlineData(this HtmlHelper helper, string actionName, string controllerName) - { - var result = helper.Action(actionName, controllerName); - var urlHelper = new UrlHelper(helper.ViewContext.RequestContext); - var url = urlHelper.Action(actionName, controllerName); - - return helper.Json(new JsonString(result), new RouteValueDictionary { - { "app-inline-data", null }, - { "for", url } - }); - } - } - - public class JsonString - { - public JsonString(object value) - : this(value.ToString()) - { - - } - - public JsonString(string value) - { - Value = value; - } - - public string Value { get; private set; } - - public override string ToString() - { - return Value; - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Infrastructure/ApiResult.cs b/src/MvcMusicStore.Spa/Infrastructure/ApiResult.cs deleted file mode 100644 index 40863926ee..0000000000 --- a/src/MvcMusicStore.Spa/Infrastructure/ApiResult.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Web.Mvc; -using Newtonsoft.Json; - -namespace System.Web.Mvc -{ - public class ApiResult : ActionResult - { - public ApiResult(ModelStateDictionary modelState) - : this() - { - if (modelState.Any(m => m.Value.Errors.Count > 0)) - { - StatusCode = 400; - Message = "The model submitted was invalid. Please correct the specified errors and try again."; - ModelErrors = modelState.SelectMany(m => m.Value.Errors.Select(me => new ModelError { FieldName = m.Key, ErrorMessage = me.ErrorMessage })); - } - } - - public ApiResult() - { - - } - - [JsonIgnore] - public int? StatusCode { get; set; } - - public string Message { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] - public object Data { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] - public IEnumerable ModelErrors { get; set; } - - public override void ExecuteResult(ControllerContext context) - { - var json = new SmartJsonResult - { - StatusCode = StatusCode, - Data = this - }; - json.ExecuteResult(context); - } - - public class ModelError - { - public string FieldName { get; set; } - - public string ErrorMessage { get; set; } - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Infrastructure/ForcedModelError.cs b/src/MvcMusicStore.Spa/Infrastructure/ForcedModelError.cs deleted file mode 100644 index 4c74b65d04..0000000000 --- a/src/MvcMusicStore.Spa/Infrastructure/ForcedModelError.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Text; - -namespace System.ComponentModel.DataAnnotations -{ - [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false)] - public class ForcedModelErrorAttribute : ValidationAttribute - { - public ForcedModelErrorAttribute(object failValue) - { - FailValue = failValue; - } - - public object FailValue { get; private set; } - - public override string FormatErrorMessage(string name) - { - return string.Format(CultureInfo.CurrentCulture, "The field {0} was forced to fail model validation.", name); - } - - public override bool IsValid(object value) - { -#if DEBUG - return value == null || !value.Equals(FailValue); -#else - return true; -#endif - } - } -} diff --git a/src/MvcMusicStore.Spa/Infrastructure/PagedList.cs b/src/MvcMusicStore.Spa/Infrastructure/PagedList.cs deleted file mode 100644 index 611a01be75..0000000000 --- a/src/MvcMusicStore.Spa/Infrastructure/PagedList.cs +++ /dev/null @@ -1,126 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Data.Entity; -using System.Linq; -using System.Threading.Tasks; -using System.Web; -using System.Web.Mvc; - -namespace MvcMusicStore.Infrastructure -{ - public interface IPagedList - { - IEnumerable Data { get; } - - int Page { get; } - - int PageSize { get; } - - int TotalCount { get; } - } - - internal class PagedList : IPagedList - { - public PagedList(IEnumerable data, int page, int pageSize, int totalCount) - { - Data = data; - Page = page; - PageSize = pageSize; - TotalCount = totalCount; - } - - public IEnumerable Data { get; private set; } - - public int Page { get; private set; } - - public int PageSize { get; private set; } - - public int TotalCount{get; private set; } - } - - public static class PagedListExtensions - { - public static IPagedList ToPagedList(this IQueryable query, int page, int pageSize) - { - if (query == null) - { - throw new ArgumentNullException(nameof(query)); - } - - var pagingConfig = new PagingConfig(page, pageSize); - var skipCount = ValidatePagePropertiesAndGetSkipCount(pagingConfig); - - var data = query.Skip(skipCount) - .Take(pagingConfig.PageSize) - .ToList(); - - if (skipCount > 0 && data.Count == 0) - { - // Requested page has no records, just return the first page - pagingConfig.Page = 1; - data = query.Take(pagingConfig.PageSize) - .ToList(); - } - - return new PagedList(data, pagingConfig.Page, pagingConfig.PageSize, query.Count()); - } - - public static async Task> ToPagedListAsync(this IQueryable query, int page, int pageSize) - { - if (query == null) - { - throw new ArgumentNullException(nameof(query)); - } - - var pagingConfig = new PagingConfig(page, pageSize); - var skipCount = ValidatePagePropertiesAndGetSkipCount(pagingConfig); - - var data = await query.Skip(skipCount) - .Take(pagingConfig.PageSize) - .ToListAsync(); - - if (skipCount > 0 && data.Count == 0) - { - // Requested page has no records, just return the first page - pagingConfig.Page = 1; - data = await query.Take(pagingConfig.PageSize) - .ToListAsync(); - } - - return new PagedList(data, pagingConfig.Page, pagingConfig.PageSize, await query.CountAsync()); - } - - private static int ValidatePagePropertiesAndGetSkipCount(PagingConfig pagingConfig) - { - if (pagingConfig.Page < 1) - { - pagingConfig.Page = 1; - } - - if (pagingConfig.PageSize < 10) - { - pagingConfig.PageSize = 10; - } - - if (pagingConfig.PageSize > 100) - { - pagingConfig.PageSize = 100; - } - - return pagingConfig.PageSize * (pagingConfig.Page - 1); - } - - internal class PagingConfig - { - public PagingConfig(int page, int pageSize) - { - Page = page; - PageSize = pageSize; - } - - public int Page { get; set; } - - public int PageSize { get; set; } - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Infrastructure/SmartJsonResult.cs b/src/MvcMusicStore.Spa/Infrastructure/SmartJsonResult.cs deleted file mode 100644 index f5330fa424..0000000000 --- a/src/MvcMusicStore.Spa/Infrastructure/SmartJsonResult.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Text; -using System.Web.Mvc; -using Newtonsoft.Json; - -namespace System.Web.Mvc -{ - public class SmartJsonResult : ActionResult - { - public SmartJsonResult() : base() - { - - } - - public JsonSerializerSettings Settings { get; set; } - - public object Data { get; set; } - - public int? StatusCode { get; set; } - - public override void ExecuteResult(ControllerContext context) - { - if (!context.IsChildAction) - { - if (StatusCode.HasValue) - { - context.HttpContext.Response.StatusCode = StatusCode.Value; - } - context.HttpContext.Response.ContentType = "application/json"; - context.HttpContext.Response.ContentEncoding = Encoding.UTF8; - } - - context.HttpContext.Response.Write(JsonConvert.SerializeObject(Data, Settings ?? new JsonSerializerSettings())); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Infrastructure/SortExpression.cs b/src/MvcMusicStore.Spa/Infrastructure/SortExpression.cs deleted file mode 100644 index efe108f5ed..0000000000 --- a/src/MvcMusicStore.Spa/Infrastructure/SortExpression.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using System.Web; -using System.Web.Helpers; -using System.Web.Mvc; - -namespace MvcMusicStore.Infrastructure -{ - public static class SortExpression - { - private const string SORT_DIRECTION_DESC = " DESC"; - - public static IQueryable SortBy(this IQueryable query, string sortExpression, Expression> defaultSortExpression, SortDirection defaultSortDirection = SortDirection.Ascending) where TModel : class - { - return SortBy(query, sortExpression ?? Create(defaultSortExpression, defaultSortDirection)); - } - - public static string Create(Expression> expression, SortDirection sortDirection = SortDirection.Ascending) where TModel : class - { - var expressionText = ExpressionHelper.GetExpressionText(expression); - // TODO: Validate the expression depth, etc. - - var sortExpression = expressionText; - - if (sortDirection == SortDirection.Descending) - { - sortExpression += SORT_DIRECTION_DESC; - } - - return sortExpression; - } - - public static IQueryable SortBy(this IQueryable source, string sortExpression) where T : class - { - - if (source == null) - { - throw new ArgumentNullException(nameof(source)); - } - - if (String.IsNullOrWhiteSpace(sortExpression)) - { - return source; - } - - sortExpression = sortExpression.Trim(); - bool isDescending = false; - - // DataSource control passes the sort parameter with a direction - // if the direction is descending - if (sortExpression.EndsWith(SORT_DIRECTION_DESC, StringComparison.OrdinalIgnoreCase)) - { - isDescending = true; - int descIndex = sortExpression.Length - SORT_DIRECTION_DESC.Length; - sortExpression = sortExpression.Substring(0, descIndex).Trim(); - } - - if (String.IsNullOrEmpty(sortExpression)) - { - return source; - } - - ParameterExpression parameter = Expression.Parameter(source.ElementType, String.Empty); - - // Build up the property expression, e.g.: (m => m.Foo.Bar) - var sortExpressionParts = sortExpression.Split('.'); - Expression propertyExpression = parameter; - foreach (var property in sortExpressionParts) - { - propertyExpression = Expression.Property(propertyExpression, property); - } - - LambdaExpression lambda = Expression.Lambda(propertyExpression, parameter); - - string methodName = (isDescending) ? "OrderByDescending" : "OrderBy"; - - Expression methodCallExpression = Expression.Call( - typeof(Queryable), methodName, - new Type[] { source.ElementType, propertyExpression.Type }, - source.Expression, - Expression.Quote(lambda)); - - return (IQueryable)source.Provider.CreateQuery(methodCallExpression); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Models/AccountViewModels.cs b/src/MvcMusicStore.Spa/Models/AccountViewModels.cs deleted file mode 100644 index 994200cd3c..0000000000 --- a/src/MvcMusicStore.Spa/Models/AccountViewModels.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System.ComponentModel; -using System.ComponentModel.DataAnnotations; - -namespace MvcMusicStore.Models -{ - public class ExternalLoginConfirmationViewModel - { - [Required] - [Display(Name = "User name")] - public string UserName { get; set; } - } - - public class ManageUserViewModel - { - [Required] - [DataType(DataType.Password)] - [Display(Name = "Current password")] - public string OldPassword { get; set; } - - [Required] - [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] - [DataType(DataType.Password)] - [Display(Name = "New password")] - public string NewPassword { get; set; } - - [DataType(DataType.Password)] - [Display(Name = "Confirm new password")] - [Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")] - public string ConfirmPassword { get; set; } - } - - public class LoginViewModel - { - [Required] - [Display(Name = "User name")] - [StringLength(100, MinimumLength = 3)] - public string UserName { get; set; } - - [Required] - [DataType(DataType.Password)] - [Display(Name = "Password")] - public string Password { get; set; } - - [Display(Name = "Remember me?")] - public bool RememberMe { get; set; } - } - - public class RegisterViewModel - { - [Required] - [Display(Name = "User name")] - public string UserName { get; set; } - - [Required] - [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] - [DataType(DataType.Password)] - [Display(Name = "Password")] - public string Password { get; set; } - - [DataType(DataType.Password)] - [Display(Name = "Confirm password")] - [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] - public string ConfirmPassword { get; set; } - } -} diff --git a/src/MvcMusicStore.Spa/Models/Album.cs b/src/MvcMusicStore.Spa/Models/Album.cs deleted file mode 100644 index b9f88827cc..0000000000 --- a/src/MvcMusicStore.Spa/Models/Album.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.DataAnnotations; -using Newtonsoft.Json; - -namespace MvcMusicStore.Models -{ - public class Album - { - [ScaffoldColumn(false)] - public int AlbumId { get; set; } - - public int GenreId { get; set; } - - public int ArtistId { get; set; } - - [Required] - [StringLength(160, MinimumLength = 2)] - [ForcedModelError("Forced Error: Title")] - public string Title { get; set; } - - [Required] - [Range(0.01, 100.00)] - [DataType(DataType.Currency)] - [ForcedModelError(-1)] - public decimal Price { get; set; } - - [DisplayName("Album Art URL")] - [StringLength(1024)] - [ForcedModelError("Forced Error: AlbumArtUrl")] - public string AlbumArtUrl { get; set; } - - public virtual Genre Genre { get; set; } - - public virtual Artist Artist { get; set; } - - [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] - public virtual List OrderDetails { get; set; } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Models/Artist.cs b/src/MvcMusicStore.Spa/Models/Artist.cs deleted file mode 100644 index 20a1e49c1d..0000000000 --- a/src/MvcMusicStore.Spa/Models/Artist.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; - -namespace MvcMusicStore.Models -{ - public class Artist - { - public int ArtistId { get; set; } - public string Name { get; set; } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Models/Cart.cs b/src/MvcMusicStore.Spa/Models/Cart.cs deleted file mode 100644 index 01507a2eb5..0000000000 --- a/src/MvcMusicStore.Spa/Models/Cart.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.ComponentModel.DataAnnotations; - -namespace MvcMusicStore.Models -{ - public class Cart - { - [Key] - public int RecordId { get; set; } - public string CartId { get; set; } - public int AlbumId { get; set; } - public int Count { get; set; } - - [DataType(DataType.DateTime)] - public DateTime DateCreated { get; set; } - - public virtual Album Album { get; set; } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Models/Genre.cs b/src/MvcMusicStore.Spa/Models/Genre.cs deleted file mode 100644 index 88e67ea4d1..0000000000 --- a/src/MvcMusicStore.Spa/Models/Genre.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.Collections.Generic; -using Newtonsoft.Json; - -namespace MvcMusicStore.Models -{ - public class Genre - { - public int GenreId { get; set; } - - public string Name { get; set; } - - public string Description { get; set; } - - [JsonIgnore] - public List Albums { get; set; } - } -} diff --git a/src/MvcMusicStore.Spa/Models/IdentityModels.cs b/src/MvcMusicStore.Spa/Models/IdentityModels.cs deleted file mode 100644 index 464dc16d7e..0000000000 --- a/src/MvcMusicStore.Spa/Models/IdentityModels.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Microsoft.AspNet.Identity.EntityFramework; - -namespace MvcMusicStore.Models -{ - // You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more. - public class ApplicationUser : IdentityUser - { - } - - public class ApplicationDbContext : IdentityDbContext - { - public ApplicationDbContext() - : base("DefaultConnection") - { - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Models/MusicStoreEntities.cs b/src/MvcMusicStore.Spa/Models/MusicStoreEntities.cs deleted file mode 100644 index a62403a0dc..0000000000 --- a/src/MvcMusicStore.Spa/Models/MusicStoreEntities.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.Data.Entity; - -namespace MvcMusicStore.Models -{ - public class MusicStoreEntities : DbContext - { - public MusicStoreEntities() - : base("name=MusicStoreEntities") - { - Configuration.ProxyCreationEnabled = false; - Configuration.LazyLoadingEnabled = false; - } - - public DbSet Albums { get; set; } - public DbSet Genres { get; set; } - public DbSet Artists { get; set; } - public DbSet Carts { get; set; } - public DbSet Orders { get; set; } - public DbSet OrderDetails { get; set; } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Models/Order.cs b/src/MvcMusicStore.Spa/Models/Order.cs deleted file mode 100644 index c06c1a964e..0000000000 --- a/src/MvcMusicStore.Spa/Models/Order.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.DataAnnotations; -using System.Web.Mvc; - -namespace MvcMusicStore.Models -{ - [Bind(Include = "FirstName,LastName,Address,City,State,PostalCode,Country,Phone,Email")] - public class Order - { - public Order() - { - OrderDetails = new List(); - } - - [ScaffoldColumn(false)] - public int OrderId { get; set; } - - [ScaffoldColumn(false)] - public System.DateTime OrderDate { get; set; } - - [ScaffoldColumn(false)] - public string Username { get; set; } - - [Required] - [DisplayName("First Name")] - [StringLength(160)] - public string FirstName { get; set; } - - [Required] - [DisplayName("Last Name")] - [StringLength(160)] - public string LastName { get; set; } - - [Required] - [StringLength(70, MinimumLength = 3)] - public string Address { get; set; } - - [Required] - [StringLength(40)] - public string City { get; set; } - - [Required] - [StringLength(40)] - public string State { get; set; } - - [Required] - [DisplayName("Postal Code")] - [StringLength(10, MinimumLength = 5)] - public string PostalCode { get; set; } - - [Required] - [StringLength(40)] - public string Country { get; set; } - - [Required] - [StringLength(24)] - [DataType(DataType.PhoneNumber)] - public string Phone { get; set; } - - [Required] - [DisplayName("Email Address")] - [RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}", - ErrorMessage = "Email is not valid.")] - [DataType(DataType.EmailAddress)] - public string Email { get; set; } - - [ScaffoldColumn(false)] - public decimal Total { get; set; } - - public List OrderDetails { get; set; } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Models/OrderDetail.cs b/src/MvcMusicStore.Spa/Models/OrderDetail.cs deleted file mode 100644 index e52c3efa93..0000000000 --- a/src/MvcMusicStore.Spa/Models/OrderDetail.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace MvcMusicStore.Models -{ - public class OrderDetail - { - public int OrderDetailId { get; set; } - public int OrderId { get; set; } - public int AlbumId { get; set; } - public int Quantity { get; set; } - public decimal UnitPrice { get; set; } - - public virtual Album Album { get; set; } - public virtual Order Order { get; set; } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Models/SampleData.cs b/src/MvcMusicStore.Spa/Models/SampleData.cs deleted file mode 100644 index 1643ad62e4..0000000000 --- a/src/MvcMusicStore.Spa/Models/SampleData.cs +++ /dev/null @@ -1,4066 +0,0 @@ -using System.Collections.Generic; -using System.Linq; - -namespace MvcMusicStore.Models -{ - public class SampleData - { - public void Seed(MusicStoreEntities context) - { - const string imgUrl = "/images/placeholder.png"; - - AddAlbums(context, imgUrl, AddGenres(context), AddArtists(context)); - - context.SaveChanges(); - } - - private static void AddAlbums( - MusicStoreEntities context, - string imgUrl, - List genres, - List artists) - { - var albums = new[] - { - new Album - { - Title = "The Best Of The Men At Work", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Men At Work"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "...And Justice For All", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Metallica"), - AlbumArtUrl = "https://ia601005.us.archive.org/12/items/mbid-fce9462d-8444-334d-84d4-2bbf1edfe9b5/mbid-fce9462d-8444-334d-84d4-2bbf1edfe9b5-5114338029_thumb250.jpg" - }, - new Album - { - Title = "עד גבול האור", - Genre = genres.Single(g => g.Name == "World"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "אריק אינשטיין"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Black Light Syndrome", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Terry Bozzio, Tony Levin & Steve Stevens"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "10,000 Days", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Tool"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "11i", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Supreme Beings of Leisure"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "1960", - Genre = genres.Single(g => g.Name == "Indie"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Soul-Junk"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "4x4=12 ", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "deadmau5"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "A Copland Celebration, Vol. I", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "London Symphony Orchestra"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "A Lively Mind", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Paul Oakenfold"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "A Matter of Life and Death", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "A Real Dead One", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "A Real Live One", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "A Rush of Blood to the Head", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Coldplay"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "A Soprano Inspired", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Britten Sinfonia, Ivor Bolton & Lesley Garrett"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "A Winter Symphony", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sarah Brightman"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Abbey Road", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Beatles"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Ace Of Spades", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Motörhead"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Achtung Baby", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "U2"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Acústico MTV", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Os Paralamas Do Sucesso"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Adams, John: The Chairman Dances", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Edo de Waart & San Francisco Symphony"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Adrenaline", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Deftones"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Ænima", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Tool"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Afrociberdelia", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Chico Science & Nação Zumbi"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "After the Goldrush", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Neil Young"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Airdrawn Dagger", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sasha"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Album Title Goes Here", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "deadmau5"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Alcohol Fueled Brewtality Live! [Disc 1]", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Black Label Society"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Alcohol Fueled Brewtality Live! [Disc 2]", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Black Label Society"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Alive 2007", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Daft Punk"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "All I Ask of You", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sarah Brightman"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Amen (So Be It)", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Paddy Casey"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Animal Vehicle", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Axis of Awesome"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Ao Vivo [IMPORT]", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Zeca Pagodinho"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Apocalyptic Love", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Slash"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Appetite for Destruction", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Guns N' Roses"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Are You Experienced?", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Jimi Hendrix"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Arquivo II", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Os Paralamas Do Sucesso"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Arquivo Os Paralamas Do Sucesso", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Os Paralamas Do Sucesso"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "A-Sides", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Soundgarden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Audioslave", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Audioslave"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Automatic for the People", - Genre = genres.Single(g => g.Name == "Alternative"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "R.E.M."), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Axé Bahia 2001", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Various Artists"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Babel", - Genre = genres.Single(g => g.Name == "Alternative"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Mumford & Sons"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Bach: Goldberg Variations", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Wilhelm Kempff"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Bach: The Brandenburg Concertos", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Orchestra of The Age of Enlightenment"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Bach: The Cello Suites", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Yo-Yo Ma"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Bach: Toccata & Fugue in D Minor", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Ton Koopman"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Bad Motorfinger", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Soundgarden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Balls to the Wall", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Accept"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Banadeek Ta'ala", - Genre = genres.Single(g => g.Name == "World"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Amr Diab"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Barbie Girl", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Aqua"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Bark at the Moon (Remastered)", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Ozzy Osbourne"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Bartok: Violin & Viola Concertos", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Yehudi Menuhin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Barulhinho Bom", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Marisa Monte"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "BBC Sessions [Disc 1] [Live]", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "BBC Sessions [Disc 2] [Live]", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Be Here Now", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Oasis"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Bedrock 11 Compiled & Mixed", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "John Digweed"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Berlioz: Symphonie Fantastique", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Michael Tilson Thomas"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Beyond Good And Evil", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Cult"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Big Bad Wolf ", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Armand Van Helden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Big Ones", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Aerosmith"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Black Album", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Metallica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Black Sabbath Vol. 4 (Remaster)", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Black Sabbath"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Black Sabbath", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Black Sabbath"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Black", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Metallica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Blackwater Park", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Opeth"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Blizzard of Ozz", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Ozzy Osbourne"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Blood", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "In This Moment"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Blue Moods", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Incognito"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Blue", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Weezer"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Bongo Fury", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Frank Zappa & Captain Beefheart"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Boys & Girls", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Alabama Shakes"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Brave New World", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "B-Sides 1980-1990", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "U2"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Bunkka", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Paul Oakenfold"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "By The Way", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Red Hot Chili Peppers"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Cake: B-Sides and Rarities", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Cake"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Californication", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Red Hot Chili Peppers"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Carmina Burana", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Boston Symphony Orchestra & Seiji Ozawa"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Carried to Dust (Bonus Track Version)", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Calexico"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Carry On", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Chris Cornell"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Cássia Eller - Sem Limite [Disc 1]", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Cássia Eller"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Chemical Wedding", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Bruce Dickinson"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Chill: Brazil (Disc 1)", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Marcos Valle"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Chill: Brazil (Disc 2)", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Antônio Carlos Jobim"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Chocolate Starfish And The Hot Dog Flavored Water", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Limp Bizkit"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Chronicle, Vol. 1", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Creedence Clearwater Revival"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Chronicle, Vol. 2", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Creedence Clearwater Revival"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Ciao, Baby", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "TheStart"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Cidade Negra - Hits", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Cidade Negra"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Classic Munkle: Turbo Edition", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Munkle"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Classics: The Best of Sarah Brightman", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sarah Brightman"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Coda", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Come Away With Me", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Norah Jones"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Come Taste The Band", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Deep Purple"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Comfort Eagle", - Genre = genres.Single(g => g.Name == "Alternative"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Cake"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Common Reaction", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Uh Huh Her "), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Compositores", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "O Terço"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Contraband", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Velvet Revolver"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Core", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Stone Temple Pilots"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Cornerstone", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Styx"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Cosmicolor", - Genre = genres.Single(g => g.Name == "Rap"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "M-Flo"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Cross", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Justice"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Culture of Fear", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Thievery Corporation"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Da Lama Ao Caos", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Chico Science & Nação Zumbi"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Dakshina", - Genre = genres.Single(g => g.Name == "World"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Deva Premal"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Dark Side of the Moon", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Pink Floyd"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Death Magnetic", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Metallica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Deep End of Down", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Above the Fold"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Deep Purple In Rock", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Deep Purple"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Deixa Entrar", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Falamansa"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Deja Vu", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Crosby, Stills, Nash, and Young"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Di Korpu Ku Alma", - Genre = genres.Single(g => g.Name == "World"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Lura"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Diary of a Madman (Remastered)", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Ozzy Osbourne"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Diary of a Madman", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Ozzy Osbourne"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Dirt", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Alice in Chains"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Diver Down", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Van Halen"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Djavan Ao Vivo - Vol. 02", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Djavan"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Djavan Ao Vivo - Vol. 1", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Djavan"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Drum'n'bass for Papa", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Plug"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Duluth", - Genre = genres.Single(g => g.Name == "Country"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Trampled By Turtles"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Dummy", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Portishead"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Duos II", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Luciana Souza/Romero Lubambo"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Earl Scruggs and Friends", - Genre = genres.Single(g => g.Name == "Country"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Earl Scruggs"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Eden", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sarah Brightman"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "El Camino", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Black Keys"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Elegant Gypsy", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Al di Meola"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Elements Of Life", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Tiësto"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Elis Regina-Minha História", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Elis Regina"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Emergency On Planet Earth", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Jamiroquai"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Emotion", - Genre = genres.Single(g => g.Name == "World"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Papa Wemba"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "English Renaissance", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The King's Singers"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Every Kind of Light", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Posies"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Faceless", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Godsmack"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Facelift", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Alice in Chains"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Fair Warning", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Van Halen"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Fear of a Black Planet", - Genre = genres.Single(g => g.Name == "Rap"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Public Enemy"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Fear Of The Dark", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Feels Like Home", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Norah Jones"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Fireball", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Deep Purple"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Fly", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sarah Brightman"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "For Those About To Rock We Salute You", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "AC/DC"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Four", - Genre = genres.Single(g => g.Name == "Blues"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Blues Traveler"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Frank", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Amy Winehouse"), - AlbumArtUrl = "http://coverartarchive.org/release/f51a1d11-98aa-4957-9ad1-f1877aee07a8/3487013199-250.jpg" - }, - new Album - { - Title = "Further Down the Spiral", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Nine Inch Nails"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Garage Inc. (Disc 1)", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Metallica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Garage Inc. (Disc 2)", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Metallica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Garbage", - Genre = genres.Single(g => g.Name == "Alternative"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Garbage"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Good News For People Who Love Bad News", - Genre = genres.Single(g => g.Name == "Indie"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Modest Mouse"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Gordon", - Genre = genres.Single(g => g.Name == "Alternative"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Barenaked Ladies"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Górecki: Symphony No. 3", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Adrian Leaper & Doreen de Feis"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Greatest Hits I", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Queen"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Greatest Hits II", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Queen"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Greatest Hits", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Duck Sauce"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Greatest Hits", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Lenny Kravitz"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Greatest Hits", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Lenny Kravitz"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Greatest Kiss", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Kiss"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Greetings from Michigan", - Genre = genres.Single(g => g.Name == "Indie"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sufjan Stevens"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Group Therapy", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Above & Beyond"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Handel: The Messiah (Highlights)", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Scholars Baroque Ensemble"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Haydn: Symphonies 99 - 104", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Royal Philharmonic Orchestra"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Heart of the Night", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Spyro Gyra"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Heart On", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Eagles of Death Metal"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Holy Diver", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Dio"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Homework", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Daft Punk"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Hot Rocks, 1964-1971 (Disc 1)", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Rolling Stones"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Houses Of The Holy", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "How To Dismantle An Atomic Bomb", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "U2"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Human", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Projected"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Hunky Dory", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "David Bowie"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Hymns", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Projected"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Hysteria", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Def Leppard"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "In Absentia", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Porcupine Tree"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "In Between", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Paul Van Dyk"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "In Rainbows", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Radiohead"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "In Step", - Genre = genres.Single(g => g.Name == "Blues"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Stevie Ray Vaughan & Double Trouble"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "In the court of the Crimson King", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "King Crimson"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "In Through The Out Door", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "In Your Honor [Disc 1]", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Foo Fighters"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "In Your Honor [Disc 2]", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Foo Fighters"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Indestructible", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Rancid"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Infinity", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Journey"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Into The Light", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "David Coverdale"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Introspective > You", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Pet Shop Boys"), - AlbumArtUrl = "http://coverartarchive.org/release/b3c637f8-ffce-3ed8-a0cf-2b58ecfc1b88/1715773107-250.jpg" - }, - new Album - { - Title = "Iron Maiden", - Genre = genres.Single(g => g.Name == "Blues"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "ISAM", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Amon Tobin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "IV", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Jagged Little Pill", - Genre = genres.Single(g => g.Name == "Alternative"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Alanis Morissette"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Jagged Little Pill", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Alanis Morissette"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Jorge Ben Jor 25 Anos", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Jorge Ben"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Jota Quest-1995", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Jota Quest"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Kick", - Genre = genres.Single(g => g.Name == "Alternative"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "INXS"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Kill 'Em All", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Metallica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Kind of Blue", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Miles Davis"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "King For A Day Fool For A Lifetime", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Faith No More"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Kiss", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Carly Rae Jepsen"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Last Call", - Genre = genres.Single(g => g.Name == "Country"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Cayouche"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Le Freak", - Genre = genres.Single(g => g.Name == "R&B"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Chic"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Le Tigre", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Le Tigre"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Led Zeppelin I", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Led Zeppelin II", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Led Zeppelin III", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Let There Be Rock", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "AC/DC"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Little Earthquakes", - Genre = genres.Single(g => g.Name == "Alternative"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Tori Amos"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Live [Disc 1]", - Genre = genres.Single(g => g.Name == "Blues"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Black Crowes"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Live [Disc 2]", - Genre = genres.Single(g => g.Name == "Blues"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Black Crowes"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Live After Death", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Live At Donington 1992 (Disc 1)", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Live At Donington 1992 (Disc 2)", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Live on Earth", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Cat Empire"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Live On Two Legs [Live]", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Pearl Jam"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Living After Midnight", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Judas Priest"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Living", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Paddy Casey"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Load", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Metallica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Love Changes Everything", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sarah Brightman"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "MacArthur Park Suite", - Genre = genres.Single(g => g.Name == "R&B"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Donna Summer"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Machine Head", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Deep Purple"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Magical Mystery Tour", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Beatles"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Mais Do Mesmo", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Legião Urbana"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Maquinarama", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Skank"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Marasim", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Jagjit Singh"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Mascagni: Cavalleria Rusticana", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "James Levine"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Master of Puppets", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Metallica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Mechanics & Mathematics", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Venus Hum"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Mental Jewelry", - Genre = genres.Single(g => g.Name == "Alternative"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Live"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Metallics", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Metallica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "meteora", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Linkin Park"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Meus Momentos", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Gonzaguinha"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Mezmerize", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "System Of A Down"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Mezzanine", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Massive Attack"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Miles Ahead", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Miles Davis"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Milton Nascimento Ao Vivo", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Milton Nascimento"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Minas", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Milton Nascimento"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Minha Historia", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Chico Buarque"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Misplaced Childhood", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Marillion"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "MK III The Final Concerts [Disc 1]", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Deep Purple"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Morning Dance", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Spyro Gyra"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Motley Crue Greatest Hits", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Mötley Crüe"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Moving Pictures", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Rush"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Mozart: Chamber Music", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Nash Ensemble"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Mozart: Symphonies Nos. 40 & 41", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Berliner Philharmoniker"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Murder Ballads", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Nick Cave and the Bad Seeds"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Music For The Jilted Generation", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Prodigy"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "My Generation - The Very Best Of The Who", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Who"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "My Name is Skrillex", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Skrillex"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Na Pista", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Cláudio Zoli"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Nevermind", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Nirvana"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "New Adventures In Hi-Fi", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "R.E.M."), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "New Divide", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Linkin Park"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "New York Dolls", - Genre = genres.Single(g => g.Name == "Punk"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "New York Dolls"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "News Of The World", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Queen"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Nielsen: The Six Symphonies", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Göteborgs Symfoniker & Neeme Järvi"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Night At The Opera", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Queen"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Night Castle", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Trans-Siberian Orchestra"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Nkolo", - Genre = genres.Single(g => g.Name == "World"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Lokua Kanza"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "No More Tears (Remastered)", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Ozzy Osbourne"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "No Prayer For The Dying", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "No Security", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Rolling Stones"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "O Brother, Where Art Thou?", - Genre = genres.Single(g => g.Name == "Country"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Alison Krauss"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "O Samba Poconé", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Skank"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "O(+>", - Genre = genres.Single(g => g.Name == "R&B"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Prince"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Oceania", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Smashing Pumpkins"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Off the Deep End", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Weird Al"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "OK Computer", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Radiohead"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Olodum", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Olodum"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "One Love", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "David Guetta"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Operation: Mindcrime", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Queensrÿche"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Opiate", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Tool"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Outbreak", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Dennis Chambers"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Pachelbel: Canon & Gigue", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "English Concert & Trevor Pinnock"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Paid in Full", - Genre = genres.Single(g => g.Name == "Rap"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Eric B. and Rakim"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Para Siempre", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Vicente Fernandez"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Pause", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Four Tet"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Peace Sells... but Who's Buying", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Megadeth"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Physical Graffiti [Disc 1]", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Physical Graffiti [Disc 2]", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Physical Graffiti", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Piece Of Mind", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Pinkerton", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Weezer"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Plays Metallica By Four Cellos", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Apocalyptica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Pop", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "U2"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Powerslave", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Prenda Minha", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Caetano Veloso"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Presence", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Pretty Hate Machine", - Genre = genres.Single(g => g.Name == "Alternative"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Nine Inch Nails"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Prisoner", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Jezabels"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Privateering", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Mark Knopfler"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Prokofiev: Romeo & Juliet", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Michael Tilson Thomas"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Prokofiev: Symphony No.1", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sergei Prokofiev & Yuri Temirkanov"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "PSY's Best 6th Part 1", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "PSY"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Purcell: The Fairy Queen", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "London Classical Players"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Purpendicular", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Deep Purple"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Purple", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Stone Temple Pilots"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Quanta Gente Veio Ver (Live)", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Gilberto Gil"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Quanta Gente Veio ver--Bônus De Carnaval", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Gilberto Gil"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Quiet Songs", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Aisha Duo"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Raices", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Los Tigres del Norte"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Raising Hell", - Genre = genres.Single(g => g.Name == "Rap"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Run DMC"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Raoul and the Kings of Spain ", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Tears For Fears"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Rattle And Hum", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "U2"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Raul Seixas", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Raul Seixas"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Recovery [Explicit]", - Genre = genres.Single(g => g.Name == "Rap"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Eminem"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Reign In Blood", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Slayer"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Relayed", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Yes"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "ReLoad", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Metallica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Respighi:Pines of Rome", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Eugene Ormandy"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Restless and Wild", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Accept"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Retrospective I (1974-1980)", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Rush"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Revelations", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Audioslave"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Revolver", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Beatles"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Ride the Lighting ", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Metallica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Ride The Lightning", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Metallica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Ring My Bell", - Genre = genres.Single(g => g.Name == "R&B"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Anita Ward"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Riot Act", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Pearl Jam"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Rise of the Phoenix", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Before the Dawn"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Rock In Rio [CD1]", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Rock In Rio [CD2]", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Rock In Rio [CD2]", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Roda De Funk", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Funk Como Le Gusta"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Room for Squares", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "John Mayer"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Root Down", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Jimmy Smith"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Rounds", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Four Tet"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Rubber Factory", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Black Keys"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Rust in Peace", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Megadeth"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Sambas De Enredo 2001", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Various Artists"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Santana - As Years Go By", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Santana"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Santana Live", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Santana"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Saturday Night Fever", - Genre = genres.Single(g => g.Name == "R&B"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Bee Gees"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Scary Monsters and Nice Sprites", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Skrillex"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Scheherazade", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Chicago Symphony Orchestra & Fritz Reiner"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "SCRIABIN: Vers la flamme", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Christopher O'Riley"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Second Coming", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Stone Roses"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Serie Sem Limite (Disc 1)", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Tim Maia"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Serie Sem Limite (Disc 2)", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Tim Maia"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Serious About Men", - Genre = genres.Single(g => g.Name == "Rap"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Rubberbandits"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Seventh Son of a Seventh Son", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Short Bus", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Filter"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Sibelius: Finlandia", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Berliner Philharmoniker"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Singles Collection", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "David Bowie"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Six Degrees of Inner Turbulence", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Dream Theater"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Slave To The Empire", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "T&N"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Slaves And Masters", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Deep Purple"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Slouching Towards Bethlehem", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Robert James"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Smash", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Offspring"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Something Special", - Genre = genres.Single(g => g.Name == "Country"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Dolly Parton"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Somewhere in Time", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Song(s) You Know By Heart", - Genre = genres.Single(g => g.Name == "Country"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Jimmy Buffett"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Sound of Music", - Genre = genres.Single(g => g.Name == "Punk"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Adicts"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "South American Getaway", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The 12 Cellists of The Berlin Philharmonic"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Sozinho Remix Ao Vivo", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Caetano Veloso"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Speak of the Devil", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Ozzy Osbourne"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Spiritual State", - Genre = genres.Single(g => g.Name == "Rap"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Nujabes"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "St. Anger", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Metallica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Still Life", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Opeth"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Stop Making Sense", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Talking Heads"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Stormbringer", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Deep Purple"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Stranger than Fiction", - Genre = genres.Single(g => g.Name == "Punk"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Bad Religion"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Strauss: Waltzes", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Eugene Ormandy"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Supermodified", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Amon Tobin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Supernatural", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Santana"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Surfing with the Alien (Remastered)", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Joe Satriani"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Switched-On Bach", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Wendy Carlos"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Symphony", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sarah Brightman"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Szymanowski: Piano Works, Vol. 1", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Martin Roscoe"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Tchaikovsky: The Nutcracker", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "London Symphony Orchestra"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Ted Nugent", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Ted Nugent"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Teflon Don", - Genre = genres.Single(g => g.Name == "Rap"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Rick Ross"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Tell Another Joke at the Ol' Choppin' Block", - Genre = genres.Single(g => g.Name == "Indie"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Danielson Famile"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Temple of the Dog", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Temple of the Dog"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Ten", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Pearl Jam"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Texas Flood", - Genre = genres.Single(g => g.Name == "Blues"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Stevie Ray Vaughan"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Battle Rages On", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Deep Purple"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Beast Live", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Paul D'Ianno"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Best Of 1980-1990", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "U2"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Best of 1990–2000", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sarah Brightman"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Best of Beethoven", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Nicolaus Esterhazy Sinfonia"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Best Of Billy Cobham", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Billy Cobham"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Best of Ed Motta", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Ed Motta"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Best Of Van Halen, Vol. I", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Van Halen"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Bridge", - Genre = genres.Single(g => g.Name == "R&B"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Melanie Fiona"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Cage", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Tygers of Pan Tang"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Chicago Transit Authority", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Chicago "), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Chronic", - Genre = genres.Single(g => g.Name == "Rap"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Dr. Dre"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Colour And The Shape", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Foo Fighters"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Crane Wife", - Genre = genres.Single(g => g.Name == "Alternative"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Decemberists"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Cream Of Clapton", - Genre = genres.Single(g => g.Name == "Blues"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Eric Clapton"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Cure", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Cure"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Dark Side Of The Moon", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Pink Floyd"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Divine Conspiracy", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Epica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Doors", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Doors"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Dream of the Blue Turtles", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sting"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Essential Miles Davis [Disc 1]", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Miles Davis"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Essential Miles Davis [Disc 2]", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Miles Davis"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Final Concerts (Disc 2)", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Deep Purple"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Final Frontier", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Head and the Heart", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Head and the Heart"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Joshua Tree", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "U2"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Last Night of the Proms", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "BBC Concert Orchestra"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Lumineers", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Lumineers"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Number of The Beast", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Number of The Beast", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Police Greatest Hits", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Police"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Song Remains The Same (Disc 1)", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Song Remains The Same (Disc 2)", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Southern Harmony and Musical Companion", - Genre = genres.Single(g => g.Name == "Blues"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Black Crowes"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Spade", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Butch Walker & The Black Widows"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Stone Roses", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Stone Roses"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Suburbs", - Genre = genres.Single(g => g.Name == "Indie"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Arcade Fire"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Three Tenors Disc1/Disc2", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Carreras, Pavarotti, Domingo"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Trees They Grow So High", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sarah Brightman"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Wall", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Pink Floyd"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The X Factor", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Them Crooked Vultures", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Them Crooked Vultures"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "This Is Happening", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "LCD Soundsystem"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Thunder, Lightning, Strike", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Go! Team"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Time to Say Goodbye", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sarah Brightman"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Time, Love & Tenderness", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Michael Bolton"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Tomorrow Starts Today", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Mobile"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Tribute", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Ozzy Osbourne"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Tuesday Night Music Club", - Genre = genres.Single(g => g.Name == "Alternative"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sheryl Crow"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Umoja", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "BLØF"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Under the Pink", - Genre = genres.Single(g => g.Name == "Alternative"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Tori Amos"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Undertow", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Tool"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Un-Led-Ed", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Dread Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Unplugged [Live]", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Kiss"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Unplugged", - Genre = genres.Single(g => g.Name == "Blues"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Eric Clapton"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Unplugged", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Eric Clapton"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Untrue", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Burial"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Use Your Illusion I", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Guns N' Roses"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Use Your Illusion II", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Guns N' Roses"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Use Your Illusion II", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Guns N' Roses"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Van Halen III", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Van Halen"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Van Halen", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Van Halen"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Version 2.0", - Genre = genres.Single(g => g.Name == "Alternative"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Garbage"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Vinicius De Moraes", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Vinícius De Moraes"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Virtual XI", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Voodoo Lounge", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Rolling Stones"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Vozes do MPB", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Various Artists"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Vs.", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Pearl Jam"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Wagner: Favourite Overtures", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sir Georg Solti & Wiener Philharmoniker"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Walking Into Clarksdale", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Page & Plant"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Wapi Yo", - Genre = genres.Single(g => g.Name == "World"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Lokua Kanza"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "War", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "U2"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Warner 25 Anos", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Antônio Carlos Jobim"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Wasteland R&Btheque", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Raunchy"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Watermark", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Enya"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "We Were Exploding Anyway", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "65daysofstatic"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Weill: The Seven Deadly Sins", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Orchestre de l'Opéra de Lyon"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "White Pony", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Deftones"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Who's Next", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Who"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Wish You Were Here", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Pink Floyd"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "With Oden on Our Side", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Amon Amarth"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Worlds", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Aaron Goldberg"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Worship Music", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Anthrax"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "X&Y", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Coldplay"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Xinti", - Genre = genres.Single(g => g.Name == "World"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sara Tavares"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Yano", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Yano"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Yesterday Once More Disc 1/Disc 2", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Carpenters"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Zooropa", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "U2"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Zoso", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - }; - - context.Albums.AddRange(albums); - } - - private static List AddArtists(MusicStoreEntities context) - { - var artists = new List - { - new Artist { Name = "65daysofstatic" }, - new Artist { Name = "Aaron Goldberg" }, - new Artist { Name = "Above & Beyond" }, - new Artist { Name = "Above the Fold" }, - new Artist { Name = "AC/DC" }, - new Artist { Name = "Accept" }, - new Artist { Name = "Adicts" }, - new Artist { Name = "Adrian Leaper & Doreen de Feis" }, - new Artist { Name = "Aerosmith" }, - new Artist { Name = "Aisha Duo" }, - new Artist { Name = "Al di Meola" }, - new Artist { Name = "Alabama Shakes" }, - new Artist { Name = "Alanis Morissette" }, - new Artist { Name = "Alberto Turco & Nova Schola Gregoriana" }, - new Artist { Name = "Alice in Chains" }, - new Artist { Name = "Alison Krauss" }, - new Artist { Name = "Amon Amarth" }, - new Artist { Name = "Amon Tobin" }, - new Artist { Name = "Amr Diab" }, - new Artist { Name = "Amy Winehouse" }, - new Artist { Name = "Anita Ward" }, - new Artist { Name = "Anthrax" }, - new Artist { Name = "Antônio Carlos Jobim" }, - new Artist { Name = "Apocalyptica" }, - new Artist { Name = "Aqua" }, - new Artist { Name = "Armand Van Helden" }, - new Artist { Name = "Arcade Fire" }, - new Artist { Name = "Audioslave" }, - new Artist { Name = "Bad Religion" }, - new Artist { Name = "Barenaked Ladies" }, - new Artist { Name = "BBC Concert Orchestra" }, - new Artist { Name = "Bee Gees" }, - new Artist { Name = "Before the Dawn" }, - new Artist { Name = "Berliner Philharmoniker" }, - new Artist { Name = "Billy Cobham" }, - new Artist { Name = "Black Label Society" }, - new Artist { Name = "Black Sabbath" }, - new Artist { Name = "BLØF" }, - new Artist { Name = "Blues Traveler" }, - new Artist { Name = "Boston Symphony Orchestra & Seiji Ozawa" }, - new Artist { Name = "Britten Sinfonia, Ivor Bolton & Lesley Garrett" }, - new Artist { Name = "Bruce Dickinson" }, - new Artist { Name = "Buddy Guy" }, - new Artist { Name = "Burial" }, - new Artist { Name = "Butch Walker & The Black Widows" }, - new Artist { Name = "Caetano Veloso" }, - new Artist { Name = "Cake" }, - new Artist { Name = "Calexico" }, - new Artist { Name = "Carly Rae Jepsen" }, - new Artist { Name = "Carreras, Pavarotti, Domingo" }, - new Artist { Name = "Cássia Eller" }, - new Artist { Name = "Cayouche" }, - new Artist { Name = "Chic" }, - new Artist { Name = "Chicago " }, - new Artist { Name = "Chicago Symphony Orchestra & Fritz Reiner" }, - new Artist { Name = "Chico Buarque" }, - new Artist { Name = "Chico Science & Nação Zumbi" }, - new Artist { Name = "Choir Of Westminster Abbey & Simon Preston" }, - new Artist { Name = "Chris Cornell" }, - new Artist { Name = "Christopher O'Riley" }, - new Artist { Name = "Cidade Negra" }, - new Artist { Name = "Cláudio Zoli" }, - new Artist { Name = "Coldplay" }, - new Artist { Name = "Creedence Clearwater Revival" }, - new Artist { Name = "Crosby, Stills, Nash, and Young" }, - new Artist { Name = "Daft Punk" }, - new Artist { Name = "Danielson Famile" }, - new Artist { Name = "David Bowie" }, - new Artist { Name = "David Coverdale" }, - new Artist { Name = "David Guetta" }, - new Artist { Name = "deadmau5" }, - new Artist { Name = "Deep Purple" }, - new Artist { Name = "Def Leppard" }, - new Artist { Name = "Deftones" }, - new Artist { Name = "Dennis Chambers" }, - new Artist { Name = "Deva Premal" }, - new Artist { Name = "Dio" }, - new Artist { Name = "Djavan" }, - new Artist { Name = "Dolly Parton" }, - new Artist { Name = "Donna Summer" }, - new Artist { Name = "Dr. Dre" }, - new Artist { Name = "Dread Zeppelin" }, - new Artist { Name = "Dream Theater" }, - new Artist { Name = "Duck Sauce" }, - new Artist { Name = "Earl Scruggs" }, - new Artist { Name = "Ed Motta" }, - new Artist { Name = "Edo de Waart & San Francisco Symphony" }, - new Artist { Name = "Elis Regina" }, - new Artist { Name = "Eminem" }, - new Artist { Name = "English Concert & Trevor Pinnock" }, - new Artist { Name = "Enya" }, - new Artist { Name = "Epica" }, - new Artist { Name = "Eric B. and Rakim" }, - new Artist { Name = "Eric Clapton" }, - new Artist { Name = "Eugene Ormandy" }, - new Artist { Name = "Faith No More" }, - new Artist { Name = "Falamansa" }, - new Artist { Name = "Filter" }, - new Artist { Name = "Foo Fighters" }, - new Artist { Name = "Four Tet" }, - new Artist { Name = "Frank Zappa & Captain Beefheart" }, - new Artist { Name = "Fretwork" }, - new Artist { Name = "Funk Como Le Gusta" }, - new Artist { Name = "Garbage" }, - new Artist { Name = "Gerald Moore" }, - new Artist { Name = "Gilberto Gil" }, - new Artist { Name = "Godsmack" }, - new Artist { Name = "Gonzaguinha" }, - new Artist { Name = "Göteborgs Symfoniker & Neeme Järvi" }, - new Artist { Name = "Guns N' Roses" }, - new Artist { Name = "Gustav Mahler" }, - new Artist { Name = "In This Moment" }, - new Artist { Name = "Incognito" }, - new Artist { Name = "INXS" }, - new Artist { Name = "Iron Maiden" }, - new Artist { Name = "Jagjit Singh" }, - new Artist { Name = "James Levine" }, - new Artist { Name = "Jamiroquai" }, - new Artist { Name = "Jimi Hendrix" }, - new Artist { Name = "Jimmy Buffett" }, - new Artist { Name = "Jimmy Smith" }, - new Artist { Name = "Joe Satriani" }, - new Artist { Name = "John Digweed" }, - new Artist { Name = "John Mayer" }, - new Artist { Name = "Jorge Ben" }, - new Artist { Name = "Jota Quest" }, - new Artist { Name = "Journey" }, - new Artist { Name = "Judas Priest" }, - new Artist { Name = "Julian Bream" }, - new Artist { Name = "Justice" }, - new Artist { Name = "Orchestre de l'Opéra de Lyon" }, - new Artist { Name = "King Crimson" }, - new Artist { Name = "Kiss" }, - new Artist { Name = "LCD Soundsystem" }, - new Artist { Name = "Le Tigre" }, - new Artist { Name = "Led Zeppelin" }, - new Artist { Name = "Legião Urbana" }, - new Artist { Name = "Lenny Kravitz" }, - new Artist { Name = "Les Arts Florissants & William Christie" }, - new Artist { Name = "Limp Bizkit" }, - new Artist { Name = "Linkin Park" }, - new Artist { Name = "Live" }, - new Artist { Name = "Lokua Kanza" }, - new Artist { Name = "London Symphony Orchestra" }, - new Artist { Name = "Los Tigres del Norte" }, - new Artist { Name = "Luciana Souza/Romero Lubambo" }, - new Artist { Name = "Lulu Santos" }, - new Artist { Name = "Lura" }, - new Artist { Name = "Marcos Valle" }, - new Artist { Name = "Marillion" }, - new Artist { Name = "Marisa Monte" }, - new Artist { Name = "Mark Knopfler" }, - new Artist { Name = "Martin Roscoe" }, - new Artist { Name = "Massive Attack" }, - new Artist { Name = "Maurizio Pollini" }, - new Artist { Name = "Megadeth" }, - new Artist { Name = "Mela Tenenbaum, Pro Musica Prague & Richard Kapp" }, - new Artist { Name = "Melanie Fiona" }, - new Artist { Name = "Men At Work" }, - new Artist { Name = "Metallica" }, - new Artist { Name = "M-Flo" }, - new Artist { Name = "Michael Bolton" }, - new Artist { Name = "Michael Tilson Thomas" }, - new Artist { Name = "Miles Davis" }, - new Artist { Name = "Milton Nascimento" }, - new Artist { Name = "Mobile" }, - new Artist { Name = "Modest Mouse" }, - new Artist { Name = "Mötley Crüe" }, - new Artist { Name = "Motörhead" }, - new Artist { Name = "Mumford & Sons" }, - new Artist { Name = "Munkle" }, - new Artist { Name = "Nash Ensemble" }, - new Artist { Name = "Neil Young" }, - new Artist { Name = "New York Dolls" }, - new Artist { Name = "Nick Cave and the Bad Seeds" }, - new Artist { Name = "Nicolaus Esterhazy Sinfonia" }, - new Artist { Name = "Nine Inch Nails" }, - new Artist { Name = "Nirvana" }, - new Artist { Name = "Norah Jones" }, - new Artist { Name = "Nujabes" }, - new Artist { Name = "O Terço" }, - new Artist { Name = "Oasis" }, - new Artist { Name = "Olodum" }, - new Artist { Name = "Opeth" }, - new Artist { Name = "Orchestra of The Age of Enlightenment" }, - new Artist { Name = "Os Paralamas Do Sucesso" }, - new Artist { Name = "Ozzy Osbourne" }, - new Artist { Name = "Paddy Casey" }, - new Artist { Name = "Page & Plant" }, - new Artist { Name = "Papa Wemba" }, - new Artist { Name = "Paul D'Ianno" }, - new Artist { Name = "Paul Oakenfold" }, - new Artist { Name = "Paul Van Dyk" }, - new Artist { Name = "Pearl Jam" }, - new Artist { Name = "Pet Shop Boys" }, - new Artist { Name = "Pink Floyd" }, - new Artist { Name = "Plug" }, - new Artist { Name = "Porcupine Tree" }, - new Artist { Name = "Portishead" }, - new Artist { Name = "Prince" }, - new Artist { Name = "Projected" }, - new Artist { Name = "PSY" }, - new Artist { Name = "Public Enemy" }, - new Artist { Name = "Queen" }, - new Artist { Name = "Queensrÿche" }, - new Artist { Name = "R.E.M." }, - new Artist { Name = "Radiohead" }, - new Artist { Name = "Rancid" }, - new Artist { Name = "Raul Seixas" }, - new Artist { Name = "Raunchy" }, - new Artist { Name = "Red Hot Chili Peppers" }, - new Artist { Name = "Rick Ross" }, - new Artist { Name = "Robert James" }, - new Artist { Name = "London Classical Players" }, - new Artist { Name = "Royal Philharmonic Orchestra" }, - new Artist { Name = "Run DMC" }, - new Artist { Name = "Rush" }, - new Artist { Name = "Santana" }, - new Artist { Name = "Sara Tavares" }, - new Artist { Name = "Sarah Brightman" }, - new Artist { Name = "Sasha" }, - new Artist { Name = "Scholars Baroque Ensemble" }, - new Artist { Name = "Scorpions" }, - new Artist { Name = "Sergei Prokofiev & Yuri Temirkanov" }, - new Artist { Name = "Sheryl Crow" }, - new Artist { Name = "Sir Georg Solti & Wiener Philharmoniker" }, - new Artist { Name = "Skank" }, - new Artist { Name = "Skrillex" }, - new Artist { Name = "Slash" }, - new Artist { Name = "Slayer" }, - new Artist { Name = "Soul-Junk" }, - new Artist { Name = "Soundgarden" }, - new Artist { Name = "Spyro Gyra" }, - new Artist { Name = "Stevie Ray Vaughan & Double Trouble" }, - new Artist { Name = "Stevie Ray Vaughan" }, - new Artist { Name = "Sting" }, - new Artist { Name = "Stone Temple Pilots" }, - new Artist { Name = "Styx" }, - new Artist { Name = "Sufjan Stevens" }, - new Artist { Name = "Supreme Beings of Leisure" }, - new Artist { Name = "System Of A Down" }, - new Artist { Name = "T&N" }, - new Artist { Name = "Talking Heads" }, - new Artist { Name = "Tears For Fears" }, - new Artist { Name = "Ted Nugent" }, - new Artist { Name = "Temple of the Dog" }, - new Artist { Name = "Terry Bozzio, Tony Levin & Steve Stevens" }, - new Artist { Name = "The 12 Cellists of The Berlin Philharmonic" }, - new Artist { Name = "The Axis of Awesome" }, - new Artist { Name = "The Beatles" }, - new Artist { Name = "The Black Crowes" }, - new Artist { Name = "The Black Keys" }, - new Artist { Name = "The Carpenters" }, - new Artist { Name = "The Cat Empire" }, - new Artist { Name = "The Cult" }, - new Artist { Name = "The Cure" }, - new Artist { Name = "The Decemberists" }, - new Artist { Name = "The Doors" }, - new Artist { Name = "The Eagles of Death Metal" }, - new Artist { Name = "The Go! Team" }, - new Artist { Name = "The Head and the Heart" }, - new Artist { Name = "The Jezabels" }, - new Artist { Name = "The King's Singers" }, - new Artist { Name = "The Lumineers" }, - new Artist { Name = "The Offspring" }, - new Artist { Name = "The Police" }, - new Artist { Name = "The Posies" }, - new Artist { Name = "The Prodigy" }, - new Artist { Name = "The Rolling Stones" }, - new Artist { Name = "The Rubberbandits" }, - new Artist { Name = "The Smashing Pumpkins" }, - new Artist { Name = "The Stone Roses" }, - new Artist { Name = "The Who" }, - new Artist { Name = "Them Crooked Vultures" }, - new Artist { Name = "TheStart" }, - new Artist { Name = "Thievery Corporation" }, - new Artist { Name = "Tiësto" }, - new Artist { Name = "Tim Maia" }, - new Artist { Name = "Ton Koopman" }, - new Artist { Name = "Tool" }, - new Artist { Name = "Tori Amos" }, - new Artist { Name = "Trampled By Turtles" }, - new Artist { Name = "Trans-Siberian Orchestra" }, - new Artist { Name = "Tygers of Pan Tang" }, - new Artist { Name = "U2" }, - new Artist { Name = "UB40" }, - new Artist { Name = "Uh Huh Her " }, - new Artist { Name = "Van Halen" }, - new Artist { Name = "Various Artists" }, - new Artist { Name = "Velvet Revolver" }, - new Artist { Name = "Venus Hum" }, - new Artist { Name = "Vicente Fernandez" }, - new Artist { Name = "Vinícius De Moraes" }, - new Artist { Name = "Weezer" }, - new Artist { Name = "Weird Al" }, - new Artist { Name = "Wendy Carlos" }, - new Artist { Name = "Wilhelm Kempff" }, - new Artist { Name = "Yano" }, - new Artist { Name = "Yehudi Menuhin" }, - new Artist { Name = "Yes" }, - new Artist { Name = "Yo-Yo Ma" }, - new Artist { Name = "Zeca Pagodinho" }, - new Artist { Name = "אריק אינשטיין" } - }; - - context.Artists.AddRange(artists); - - return artists; - } - - private static List AddGenres(MusicStoreEntities context) - { - var genres = new List - { - new Genre { Name = "Pop" }, - new Genre { Name = "Rock" }, - new Genre { Name = "Jazz" }, - new Genre { Name = "Metal" }, - new Genre { Name = "Electronic" }, - new Genre { Name = "Blues" }, - new Genre { Name = "Latin" }, - new Genre { Name = "Rap" }, - new Genre { Name = "Classical" }, - new Genre { Name = "Alternative" }, - new Genre { Name = "Country" }, - new Genre { Name = "R&B" }, - new Genre { Name = "Indie" }, - new Genre { Name = "Punk" }, - new Genre { Name = "World" } - }; - - context.Genres.AddRange(genres); - - return genres; - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Models/ShoppingCart.cs b/src/MvcMusicStore.Spa/Models/ShoppingCart.cs deleted file mode 100644 index cab45712fe..0000000000 --- a/src/MvcMusicStore.Spa/Models/ShoppingCart.cs +++ /dev/null @@ -1,159 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Data.Entity; -using System.Linq; -using System.Threading.Tasks; -using System.Web; -using System.Web.Mvc; - -namespace MvcMusicStore.Models -{ - public class ShoppingCart - { - public const string CartSessionKey = "CartId"; - - private readonly MusicStoreEntities _storeContext; - private readonly string _cartId; - - private ShoppingCart(MusicStoreEntities storeContext, string cartId) - { - _storeContext = storeContext; - _cartId = cartId; - } - - public static ShoppingCart GetCart(MusicStoreEntities storeContext, Controller controller) - { - return new ShoppingCart(storeContext, GetCartId(controller.HttpContext)); - } - - private static string GetCartId(HttpContextBase context) - { - if (context.Session[CartSessionKey] == null) - { - var username = context.User.Identity.Name; - - context.Session[CartSessionKey] = !string.IsNullOrWhiteSpace(username) - ? username - : Guid.NewGuid().ToString(); - } - - return context.Session[CartSessionKey].ToString(); - } - - public async Task AddToCart(Album album) - { - var cartItem = await GetCartItem(album.AlbumId); - - if (cartItem == null) - { - cartItem = new Cart - { - AlbumId = album.AlbumId, - CartId = _cartId, - Count = 1, - DateCreated = DateTime.Now - }; - - _storeContext.Carts.Add(cartItem); - } - else - { - cartItem.Count++; - } - } - - public async Task RemoveFromCart(int id) - { - var cartItem = await GetCartItem(id); - - if (cartItem != null) - { - if (cartItem.Count > 1) - { - return --cartItem.Count; - } - - _storeContext.Carts.Remove(cartItem); - } - - return 0; - } - - private Task GetCartItem(int albumId) - { - return _storeContext.Carts.SingleOrDefaultAsync( - c => c.CartId == _cartId && c.AlbumId == albumId); - } - - public IQueryable GetCartItems() - { - return _storeContext.Carts.Where(c => c.CartId == _cartId); - } - - public Task GetCount() - { - return _storeContext.Carts - .Where(c => c.CartId == _cartId) - .Select(c => c.Count) - .SumAsync(); - } - - public Task GetTotal() - { - return _storeContext.Carts - .Where(c => c.CartId == _cartId) - .Select(c => c.Count * c.Album.Price) - .SumAsync(); - } - - public async Task CreateOrder(Order order) - { - decimal orderTotal = 0; - - var cartItems = await _storeContext.Carts - .Where(c => c.CartId == _cartId) - .Include(c => c.Album) - .ToListAsync(); - - foreach (var item in cartItems) - { - order.OrderDetails.Add(new OrderDetail - { - AlbumId = item.AlbumId, - OrderId = order.OrderId, - UnitPrice = item.Album.Price, - Quantity = item.Count, - }); - - orderTotal += item.Count * item.Album.Price; - } - - order.Total = orderTotal; - - await EmptyCart(); - - return order.OrderId; - } - - private async Task EmptyCart() - { - foreach (var cartItem in await _storeContext.Carts.Where( - c => c.CartId == _cartId).ToListAsync()) - { - _storeContext.Carts.Remove(cartItem); - } - } - - public async Task MigrateCart(string userName) - { - var carts = await _storeContext.Carts.Where(c => c.CartId == _cartId).ToListAsync(); - - foreach (var item in carts) - { - item.CartId = userName; - } - - await _storeContext.SaveChangesAsync(); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/MvcMusicStore.Spa.csproj b/src/MvcMusicStore.Spa/MvcMusicStore.Spa.csproj deleted file mode 100644 index 4e2ea5fb39..0000000000 --- a/src/MvcMusicStore.Spa/MvcMusicStore.Spa.csproj +++ /dev/null @@ -1,329 +0,0 @@ - - - - - - Debug - AnyCPU - - - 2.0 - {408AC102-7FB1-4ADD-A16A-9AACBAFFC2F7} - {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} - Library - Properties - MvcMusicStore - MvcMusicStore - v4.5 - false - true - - - - - 1.0 - False - public/js - - - true - full - false - bin\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\ - TRACE - prompt - 4 - - - - False - ..\..\packages\EntityFramework.6.0.2\lib\net45\EntityFramework.dll - - - False - ..\..\packages\EntityFramework.6.0.2\lib\net45\EntityFramework.SqlServer.dll - - - ..\..\packages\Microsoft.AspNet.Identity.Core.1.0.0\lib\net45\Microsoft.AspNet.Identity.Core.dll - - - ..\..\packages\Microsoft.AspNet.Identity.EntityFramework.1.0.0\lib\net45\Microsoft.AspNet.Identity.EntityFramework.dll - - - ..\..\packages\Microsoft.AspNet.Identity.Owin.1.0.0\lib\net45\Microsoft.AspNet.Identity.Owin.dll - - - - ..\..\packages\Microsoft.Owin.2.0.2\lib\net45\Microsoft.Owin.dll - - - ..\..\packages\Microsoft.Owin.Host.SystemWeb.2.0.0\lib\net45\Microsoft.Owin.Host.SystemWeb.dll - - - ..\..\packages\Microsoft.Owin.Security.2.0.2\lib\net45\Microsoft.Owin.Security.dll - - - ..\..\packages\Microsoft.Owin.Security.Cookies.2.0.2\lib\net45\Microsoft.Owin.Security.Cookies.dll - - - ..\..\packages\Microsoft.Owin.Security.Facebook.2.0.0\lib\net45\Microsoft.Owin.Security.Facebook.dll - - - ..\..\packages\Microsoft.Owin.Security.Google.2.0.0\lib\net45\Microsoft.Owin.Security.Google.dll - - - ..\..\packages\Microsoft.Owin.Security.MicrosoftAccount.2.0.0\lib\net45\Microsoft.Owin.Security.MicrosoftAccount.dll - - - ..\..\packages\Microsoft.Owin.Security.OAuth.2.0.2\lib\net45\Microsoft.Owin.Security.OAuth.dll - - - ..\..\packages\Microsoft.Owin.Security.Twitter.2.0.0\lib\net45\Microsoft.Owin.Security.Twitter.dll - - - True - ..\..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll - - - ..\..\packages\Newtonsoft.Json.4.5.11\lib\net40\Newtonsoft.Json.dll - - - ..\..\packages\Owin.1.0\lib\net40\Owin.dll - - - - - - - - - - - - - False - ..\..\packages\Microsoft.AspNet.WebPages.3.1.1\lib\net45\System.Web.Helpers.dll - - - False - ..\..\packages\Microsoft.AspNet.Mvc.5.1.1\lib\net45\System.Web.Mvc.dll - - - False - ..\..\packages\Microsoft.AspNet.Razor.3.1.1\lib\net45\System.Web.Razor.dll - - - False - ..\..\packages\Microsoft.AspNet.WebPages.3.1.1\lib\net45\System.Web.WebPages.dll - - - False - ..\..\packages\Microsoft.AspNet.WebPages.3.1.1\lib\net45\System.Web.WebPages.Deployment.dll - - - False - ..\..\packages\Microsoft.AspNet.WebPages.3.1.1\lib\net45\System.Web.WebPages.Razor.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Global.asax - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GenreMenu.html - - - - - - - - - - - - - - - - - - - - - Designer - - - Web.config - - - Web.config - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 10.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - - - - False - amd - - - - - - - - - - - - True - True - 43524 - / - http://localhost:43524/ - False - False - - - False - - - - - - \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Properties/AssemblyInfo.cs b/src/MvcMusicStore.Spa/Properties/AssemblyInfo.cs deleted file mode 100644 index 51fbcae968..0000000000 --- a/src/MvcMusicStore.Spa/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("MvcMusicStore")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("MvcMusicStore")] -[assembly: AssemblyCopyright("Copyright © 2013")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("64547e1b-3030-4458-ab71-a970f2916ed6")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/MvcMusicStore.Spa/Startup.cs b/src/MvcMusicStore.Spa/Startup.cs deleted file mode 100644 index 55c2068af4..0000000000 --- a/src/MvcMusicStore.Spa/Startup.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Microsoft.Owin; -using Owin; - -[assembly: OwinStartupAttribute(typeof(MvcMusicStore.Startup))] - -namespace MvcMusicStore -{ - public partial class Startup - { - public void Configuration(IAppBuilder app) - { - ConfigureAuth(app); - - ConfigureApp(app); - } - } -} diff --git a/src/MvcMusicStore.Spa/ViewModels/ShoppingCartRemoveViewModel.cs b/src/MvcMusicStore.Spa/ViewModels/ShoppingCartRemoveViewModel.cs deleted file mode 100644 index b190275d44..0000000000 --- a/src/MvcMusicStore.Spa/ViewModels/ShoppingCartRemoveViewModel.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace MvcMusicStore.ViewModels -{ - public class ShoppingCartRemoveViewModel - { - public string Message { get; set; } - public decimal CartTotal { get; set; } - public int CartCount { get; set; } - public int ItemCount { get; set; } - public int DeleteId { get; set; } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/ViewModels/ShoppingCartViewModel.cs b/src/MvcMusicStore.Spa/ViewModels/ShoppingCartViewModel.cs deleted file mode 100644 index 53702aeb81..0000000000 --- a/src/MvcMusicStore.Spa/ViewModels/ShoppingCartViewModel.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.Collections.Generic; -using MvcMusicStore.Models; - -namespace MvcMusicStore.ViewModels -{ - public class ShoppingCartViewModel - { - public List CartItems { get; set; } - public decimal CartTotal { get; set; } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Views/Account/ExternalLoginConfirmation.cshtml b/src/MvcMusicStore.Spa/Views/Account/ExternalLoginConfirmation.cshtml deleted file mode 100644 index 441dbf7d99..0000000000 --- a/src/MvcMusicStore.Spa/Views/Account/ExternalLoginConfirmation.cshtml +++ /dev/null @@ -1,36 +0,0 @@ -@model MvcMusicStore.Models.ExternalLoginConfirmationViewModel -@{ - ViewBag.Title = "Register"; -} -

    @ViewBag.Title.

    -

    Associate your @ViewBag.LoginProvider account.

    - -@using (Html.BeginForm("ExternalLoginConfirmation", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" })) -{ - @Html.AntiForgeryToken() - -

    Association Form

    -
    - @Html.ValidationSummary(true) -

    - You've successfully authenticated with @ViewBag.LoginProvider. - Please enter a user name for this site below and click the Register button to finish - logging in. -

    -
    - @Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" }) -
    - @Html.TextBoxFor(m => m.UserName, new { @class = "form-control" }) - @Html.ValidationMessageFor(m => m.UserName) -
    -
    -
    -
    - -
    -
    -} - -@section Scripts { - @Scripts.Render("~/bundles/jqueryval") -} diff --git a/src/MvcMusicStore.Spa/Views/Account/ExternalLoginFailure.cshtml b/src/MvcMusicStore.Spa/Views/Account/ExternalLoginFailure.cshtml deleted file mode 100644 index 342eb693d6..0000000000 --- a/src/MvcMusicStore.Spa/Views/Account/ExternalLoginFailure.cshtml +++ /dev/null @@ -1,6 +0,0 @@ -@{ - ViewBag.Title = "Login Failure"; -} - -

    @ViewBag.Title.

    -

    Unsuccessful login with service.

    diff --git a/src/MvcMusicStore.Spa/Views/Account/Login.cshtml b/src/MvcMusicStore.Spa/Views/Account/Login.cshtml deleted file mode 100644 index 8c50e067fb..0000000000 --- a/src/MvcMusicStore.Spa/Views/Account/Login.cshtml +++ /dev/null @@ -1,100 +0,0 @@ -@model MvcMusicStore.Models.LoginViewModel - -@{ - ViewBag.Title = "Log in"; - ViewBag.ngApp = "MusicStore.Store"; -} - -@section NavBarItems { - -
  • -@Html.InlineData("GenreMenuList", "GenresApi") - -} - -

    @ViewBag.Title.

    - -
    -
    -
    - @using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, - new { @class = "form-horizontal", role = "form", novalidate = "", name = "login", - app_prevent_submit = "login.$invalid", - ng_submit = "login.submitAttempted=true" })) - { - @Html.AntiForgeryToken() -

    Use a local account to log in.

    -
    - @Html.ValidationSummary(true) - -
    - @Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" }) -
    -
    -
    - @Html.ngTextBoxFor(m => m.UserName, new { @class = "form-control" }) -
    -
    - @Html.ngValidationMessageFor(m => m.UserName, "login", new { @class = "help-block field-validation-error" }) -
    -
    - - @* What this might look like using Tag Helpers: - <@div class="form-group" validation-for="UserName" validation-form-name="login" validation-class="has-error"> - <@label for="UserName" class="col-md-2 control-label"> -
    - <@input for="UserName" class="form-control" /> - <@span validation-for="UserName" validation-form-name="login" class="field-validation-error"> -
    - - *@ - -
    - @Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" }) -
    -
    -
    - @Html.ngPasswordFor(m => m.Password, new { @class = "form-control" }) -
    -
    - @Html.ngValidationMessageFor(m => m.Password, "login", new { @class = "help-block field-validation-error" }) -
    -
    - -
    -
    -
    - @Html.CheckBoxFor(m => m.RememberMe) - @Html.LabelFor(m => m.RememberMe) -
    -
    -
    - -
    -
    - -
    -
    - -

    - @Html.ActionLink("Register", "Register") if you don't have a local account. -

    - } -
    -
    -
    -
    - @Html.Partial("_ExternalLoginsListPartial", new { Action = "ExternalLogin", ReturnUrl = ViewBag.ReturnUrl }) -
    -
    -
    - -@section Scripts { - - - - @* TODO: This is currently all the compiled TypeScript, non-minified. Need to explore options - for alternate loading schemes, e.g. AMD loader of individual modules, min vs. non-min, etc. *@ - - -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Views/Account/Manage.cshtml b/src/MvcMusicStore.Spa/Views/Account/Manage.cshtml deleted file mode 100644 index 81781bc5dc..0000000000 --- a/src/MvcMusicStore.Spa/Views/Account/Manage.cshtml +++ /dev/null @@ -1,39 +0,0 @@ -@using MvcMusicStore.Models; -@using Microsoft.AspNet.Identity; - -@{ - ViewBag.Title = "Manage Account"; - ViewBag.ngApp = "MusicStore.Store"; -} - -

    @ViewBag.Title.

    - -

    @ViewBag.StatusMessage

    - -
    -
    - @if (ViewBag.HasLocalPassword) - { - @Html.Partial("_ChangePasswordPartial") - } - else - { - @Html.Partial("_SetPasswordPartial") - } - -
    - @Html.Action("RemoveAccountList") - @Html.Partial("_ExternalLoginsListPartial", new { Action = "LinkLogin", ReturnUrl = ViewBag.ReturnUrl }) -
    -
    -
    - -@section Scripts { - - - -@* TODO: This is currently all the compiled TypeScript, non-minified. Need to explore options - for alternate loading schemes, e.g. AMD loader of individual modules, min vs. non-min, etc. *@ - - -} diff --git a/src/MvcMusicStore.Spa/Views/Account/Register.cshtml b/src/MvcMusicStore.Spa/Views/Account/Register.cshtml deleted file mode 100644 index 04ac6e0d12..0000000000 --- a/src/MvcMusicStore.Spa/Views/Account/Register.cshtml +++ /dev/null @@ -1,78 +0,0 @@ -@model MvcMusicStore.Models.RegisterViewModel - -@{ - ViewBag.Title = "Register"; - ViewBag.ngApp = "MusicStore.Store"; -} - -@section NavBarItems { - -
  • -@Html.InlineData("GenreMenuList", "GenresApi") - -} - -

    @ViewBag.Title.

    - -@using (Html.BeginForm("Register", "Account", FormMethod.Post, - new { @class = "form-horizontal", role = "form", novalidate = "", name = "register", - app_prevent_submit = "register.$invalid", - ng_submit = "register.submitAttempted=true" })) -{ - @Html.AntiForgeryToken() -

    Create a new account.

    -
    - @Html.ValidationSummary() - -
    - @Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" }) -
    -
    -
    - @Html.ngTextBoxFor(m => m.UserName, new { @class = "form-control" }) -
    -
    - @Html.ngValidationMessageFor(m => m.UserName, "register", new { @class = "help-block field-validation-error" }) -
    -
    - -
    - @Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" }) -
    -
    -
    - @Html.ngPasswordFor(m => m.Password, new { @class = "form-control" }) -
    -
    - @Html.ngValidationMessageFor(m => m.Password, "register", new { @class = "help-block field-validation-error" }) -
    -
    - -
    - @Html.LabelFor(m => m.ConfirmPassword, new { @class = "col-md-2 control-label" }) -
    -
    -
    - @Html.ngPasswordFor(m => m.ConfirmPassword, new { @class = "form-control" }) -
    -
    - @Html.ngValidationMessageFor(m => m.ConfirmPassword, "register", new { @class = "help-block field-validation-error" }) -
    -
    - -
    -
    - -
    -
    -} - -@section Scripts { - - - -@* TODO: This is currently all the compiled TypeScript, non-minified. Need to explore options - for alternate loading schemes, e.g. AMD loader of individual modules, min vs. non-min, etc. *@ - - -} diff --git a/src/MvcMusicStore.Spa/Views/Account/_ChangePasswordPartial.cshtml b/src/MvcMusicStore.Spa/Views/Account/_ChangePasswordPartial.cshtml deleted file mode 100644 index 26a2ab89e8..0000000000 --- a/src/MvcMusicStore.Spa/Views/Account/_ChangePasswordPartial.cshtml +++ /dev/null @@ -1,58 +0,0 @@ -@using Microsoft.AspNet.Identity - -@model MvcMusicStore.Models.ManageUserViewModel - -

    You're logged in as @User.Identity.GetUserName().

    - -@using (Html.BeginForm("Manage", "Account", FormMethod.Post, - new { @class = "form-horizontal", role = "form", novalidate = "", name = "changePassword", - app_prevent_submit = "changePassword.$invalid", - ng_submit = "changePassword.submitAttempted=true" })) -{ - @Html.AntiForgeryToken() -

    Change Password

    -
    - @Html.ValidationSummary() - -
    - @Html.LabelFor(m => m.OldPassword, new { @class = "col-md-2 control-label" }) -
    -
    -
    - @Html.ngPasswordFor(m => m.OldPassword, new { @class = "form-control" }) -
    -
    - @Html.ngValidationMessageFor(m => m.OldPassword, "changePassword", new { @class = "help-block field-validation-error" }) -
    -
    - -
    - @Html.LabelFor(m => m.NewPassword, new { @class = "col-md-2 control-label" }) -
    -
    -
    - @Html.ngPasswordFor(m => m.NewPassword, new { @class = "form-control" }) -
    -
    - @Html.ngValidationMessageFor(m => m.NewPassword, "changePassword", new { @class = "help-block field-validation-error" }) -
    -
    - -
    - @Html.LabelFor(m => m.ConfirmPassword, new { @class = "col-md-2 control-label" }) -
    -
    -
    - @Html.ngPasswordFor(m => m.ConfirmPassword, new { @class = "form-control" }) -
    -
    - @Html.ngValidationMessageFor(m => m.ConfirmPassword, "changePassword", new { @class = "help-block field-validation-error" }) -
    -
    - -
    -
    - -
    -
    -} diff --git a/src/MvcMusicStore.Spa/Views/Account/_ExternalLoginsListPartial.cshtml b/src/MvcMusicStore.Spa/Views/Account/_ExternalLoginsListPartial.cshtml deleted file mode 100644 index 529e4c5f74..0000000000 --- a/src/MvcMusicStore.Spa/Views/Account/_ExternalLoginsListPartial.cshtml +++ /dev/null @@ -1,31 +0,0 @@ -@using Microsoft.Owin.Security - -

    Use another service to log in.

    -
    -@{ - var loginProviders = Context.GetOwinContext().Authentication.GetExternalAuthenticationTypes(); - if (loginProviders.Count() == 0) - { -
    -

    There are no external authentication services configured. See this article - for details on setting up this ASP.NET application to support logging in via external services.

    -
    - } - else - { - string action = Model.Action; - string returnUrl = Model.ReturnUrl; - using (Html.BeginForm(action, "Account", new { ReturnUrl = returnUrl })) - { - @Html.AntiForgeryToken() -
    -

    - @foreach (AuthenticationDescription p in loginProviders) - { - - } -

    -
    - } - } -} diff --git a/src/MvcMusicStore.Spa/Views/Account/_RemoveAccountPartial.cshtml b/src/MvcMusicStore.Spa/Views/Account/_RemoveAccountPartial.cshtml deleted file mode 100644 index b4c80813bf..0000000000 --- a/src/MvcMusicStore.Spa/Views/Account/_RemoveAccountPartial.cshtml +++ /dev/null @@ -1,34 +0,0 @@ -@model ICollection - -@if (Model.Count > 0) -{ -

    Registered Logins

    - - - @foreach (var account in Model) - { - - - - - } - -
    @account.LoginProvider - @if (ViewBag.ShowRemoveButton) - { - using (Html.BeginForm("Disassociate", "Account")) - { - @Html.AntiForgeryToken() -
    - @Html.Hidden("loginProvider", account.LoginProvider) - @Html.Hidden("providerKey", account.ProviderKey) - -
    - } - } - else - { - @:   - } -
    -} diff --git a/src/MvcMusicStore.Spa/Views/Account/_SetPasswordPartial.cshtml b/src/MvcMusicStore.Spa/Views/Account/_SetPasswordPartial.cshtml deleted file mode 100644 index 4f23219229..0000000000 --- a/src/MvcMusicStore.Spa/Views/Account/_SetPasswordPartial.cshtml +++ /dev/null @@ -1,32 +0,0 @@ -@model MvcMusicStore.Models.ManageUserViewModel - -

    - You do not have a local username/password for this site. Add a local - account so you can log in without an external login. -

    - -@using (Html.BeginForm("Manage", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) -{ - @Html.AntiForgeryToken() - -

    Create Local Login

    -
    - @Html.ValidationSummary() -
    - @Html.LabelFor(m => m.NewPassword, new { @class = "col-md-2 control-label" }) -
    - @Html.PasswordFor(m => m.NewPassword, new { @class = "form-control" }) -
    -
    -
    - @Html.LabelFor(m => m.ConfirmPassword, new { @class = "col-md-2 control-label" }) -
    - @Html.PasswordFor(m => m.ConfirmPassword, new { @class = "form-control" }) -
    -
    -
    -
    - -
    -
    -} diff --git a/src/MvcMusicStore.Spa/Views/Checkout/AddressAndPayment.cshtml b/src/MvcMusicStore.Spa/Views/Checkout/AddressAndPayment.cshtml deleted file mode 100644 index d39b9e916e..0000000000 --- a/src/MvcMusicStore.Spa/Views/Checkout/AddressAndPayment.cshtml +++ /dev/null @@ -1,32 +0,0 @@ -@model MvcMusicStore.Models.Order - -@{ - ViewBag.Title = "Address And Payment"; -} - -@section Scripts { - @Scripts.Render("~/bundles/jqueryval") -} - -@using (Html.BeginForm()) { - -

    Address And Payment

    -
    - Shipping Information - - @Html.EditorForModel() -
    -
    - Payment -

    We're running a promotion: all music is free with the promo code: "FREE"

    - -
    - @Html.Label("Promo Code") -
    -
    - @Html.TextBox("PromoCode") -
    -
    - - -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Views/Checkout/Complete.cshtml b/src/MvcMusicStore.Spa/Views/Checkout/Complete.cshtml deleted file mode 100644 index d34855382e..0000000000 --- a/src/MvcMusicStore.Spa/Views/Checkout/Complete.cshtml +++ /dev/null @@ -1,13 +0,0 @@ -@model int - -@{ - ViewBag.Title = "Checkout Complete"; -} - -

    Checkout Complete

    - -

    Thanks for your order! Your order number is: @Model

    - -

    How about shopping for some more music in our - @Html.ActionLink("Store", "Index", "Home") -

    \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Views/Home/Index.cshtml b/src/MvcMusicStore.Spa/Views/Home/Index.cshtml deleted file mode 100644 index d2fbbaa025..0000000000 --- a/src/MvcMusicStore.Spa/Views/Home/Index.cshtml +++ /dev/null @@ -1,25 +0,0 @@ -@{ - ViewBag.Title = "Home Page"; - ViewBag.ngApp = "MusicStore.Store"; -} - -@section NavBarItems { - -
  • -@Html.InlineData("GenreMenuList", "GenresApi") - -} - -
    - -@Html.InlineData("MostPopular", "AlbumsApi") - -@section Scripts { - - - -@* TODO: This is currently all the compiled TypeScript, non-minified. Need to explore options - for alternate loading schemes, e.g. AMD loader of individual modules, min vs. non-min, etc. *@ - - -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Views/Shared/Error.cshtml b/src/MvcMusicStore.Spa/Views/Shared/Error.cshtml deleted file mode 100644 index be55b17d00..0000000000 --- a/src/MvcMusicStore.Spa/Views/Shared/Error.cshtml +++ /dev/null @@ -1,9 +0,0 @@ -@model System.Web.Mvc.HandleErrorInfo - -@{ - ViewBag.Title = "Error"; -} - -

    Error.

    -

    An error occurred while processing your request.

    - diff --git a/src/MvcMusicStore.Spa/Views/Shared/_Layout.cshtml b/src/MvcMusicStore.Spa/Views/Shared/_Layout.cshtml deleted file mode 100644 index 4dc091fef9..0000000000 --- a/src/MvcMusicStore.Spa/Views/Shared/_Layout.cshtml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - @ViewBag.Title – MVC Music Store - - - - - - -
    - @RenderBody() -
    - -
    - - @* TODO: Need to figure out best way to switch these to min links for release, e.g. new helper, - Grunt task to replace, CDN support, etc. *@ - - @**@ - - - @RenderSection("scripts", required: false) - - diff --git a/src/MvcMusicStore.Spa/Views/Shared/_LoginPartial.cshtml b/src/MvcMusicStore.Spa/Views/Shared/_LoginPartial.cshtml deleted file mode 100644 index db95f4ae3f..0000000000 --- a/src/MvcMusicStore.Spa/Views/Shared/_LoginPartial.cshtml +++ /dev/null @@ -1,45 +0,0 @@ -@using Microsoft.AspNet.Identity - -@{ - Func js = input => Html.Raw(HttpUtility.JavaScriptStringEncode(input, false)); -} - -@if (Request.IsAuthenticated) -{ - using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" })) - { - @Html.AntiForgeryToken() - - - - @Html.Json(new { - isAuthenticated = true, - userName = User.Identity.GetUserName(), - userId = User.Identity.GetUserId(), - roles = ((System.Security.Claims.ClaimsPrincipal)User).Claims - .Where(c => c.Type == System.Security.Claims.ClaimTypes.Role) - .Select(role => role.Value) - }, - new { id = "userDetails" }) - } -} -else -{ - - - @Html.Json(new { - isAuthenticated = false, - userName = (string)null, - userId = (string)null, - roles = Enumerable.Empty() - }, - new { id = "userDetails" }) -} diff --git a/src/MvcMusicStore.Spa/Views/ShoppingCart/CartSummary.cshtml b/src/MvcMusicStore.Spa/Views/ShoppingCart/CartSummary.cshtml deleted file mode 100644 index eae797ebd4..0000000000 --- a/src/MvcMusicStore.Spa/Views/ShoppingCart/CartSummary.cshtml +++ /dev/null @@ -1,9 +0,0 @@ -@if (ViewBag.CartCount > 0) -{ -
  • - - - @ViewBag.CartCount - -
  • -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Views/ShoppingCart/Index.cshtml b/src/MvcMusicStore.Spa/Views/ShoppingCart/Index.cshtml deleted file mode 100644 index 9e757a8a42..0000000000 --- a/src/MvcMusicStore.Spa/Views/ShoppingCart/Index.cshtml +++ /dev/null @@ -1,91 +0,0 @@ -@model MvcMusicStore.ViewModels.ShoppingCartViewModel -@{ - ViewBag.Title = "Shopping Cart"; -} - -@section Scripts { - -} - -

    - Review your cart: -

    -

    - @Html.ActionLink("Checkout >>", "AddressAndPayment", "Checkout") -

    -
    -
    - - - - - - - - @foreach (var item in Model.CartItems) - { - - - - - - - } - - - - - - -
    - Album Name - - Price (each) - - Quantity -
    - @Html.ActionLink(item.Album.Title, - "Details", "Store", new { id = item.AlbumId }, null) - - @item.Album.Price - - @item.Count - - - Remove from cart -
    - Total - - - - @Model.CartTotal -
    \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Views/StoreManager/Create.cshtml b/src/MvcMusicStore.Spa/Views/StoreManager/Create.cshtml deleted file mode 100644 index d338585cf7..0000000000 --- a/src/MvcMusicStore.Spa/Views/StoreManager/Create.cshtml +++ /dev/null @@ -1,72 +0,0 @@ -@model MvcMusicStore.Models.Album - -@{ - ViewBag.Title = "Create"; -} - -

    Create

    - -@using (Html.BeginForm()) -{ - @Html.AntiForgeryToken() - -
    -

    Album

    -
    - @Html.ValidationSummary(true) - -
    - @Html.LabelFor(model => model.GenreId, "GenreId", new { @class = "control-label col-md-2" }) -
    - @Html.DropDownList("GenreId", String.Empty) - @Html.ValidationMessageFor(model => model.GenreId) -
    -
    - -
    - @Html.LabelFor(model => model.ArtistId, "ArtistId", new { @class = "control-label col-md-2" }) -
    - @Html.DropDownList("ArtistId", String.Empty) - @Html.ValidationMessageFor(model => model.ArtistId) -
    -
    - -
    - @Html.LabelFor(model => model.Title, new { @class = "control-label col-md-2" }) -
    - @Html.EditorFor(model => model.Title) - @Html.ValidationMessageFor(model => model.Title) -
    -
    - -
    - @Html.LabelFor(model => model.Price, new { @class = "control-label col-md-2" }) -
    - @Html.EditorFor(model => model.Price) - @Html.ValidationMessageFor(model => model.Price) -
    -
    - -
    - @Html.LabelFor(model => model.AlbumArtUrl, new { @class = "control-label col-md-2" }) -
    - @Html.EditorFor(model => model.AlbumArtUrl) - @Html.ValidationMessageFor(model => model.AlbumArtUrl) -
    -
    - -
    -
    - -
    -
    -
    -} - -
    - @Html.ActionLink("Back to List", "Index") -
    - -@section Scripts { - @Scripts.Render("~/bundles/jqueryval") -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Views/StoreManager/Delete.cshtml b/src/MvcMusicStore.Spa/Views/StoreManager/Delete.cshtml deleted file mode 100644 index df5434633a..0000000000 --- a/src/MvcMusicStore.Spa/Views/StoreManager/Delete.cshtml +++ /dev/null @@ -1,23 +0,0 @@ -@model MvcMusicStore.Models.Album - -@{ - ViewBag.Title = "Delete"; -} - -

    Delete Confirmation

    - -

    - Are you sure you want to delete the album titled - @Model.Title? -

    - -@using (Html.BeginForm()) -{ -

    - -

    -

    - @Html.ActionLink("Back to List", "Index") -

    - -} diff --git a/src/MvcMusicStore.Spa/Views/StoreManager/Index.cshtml b/src/MvcMusicStore.Spa/Views/StoreManager/Index.cshtml deleted file mode 100644 index 1839003730..0000000000 --- a/src/MvcMusicStore.Spa/Views/StoreManager/Index.cshtml +++ /dev/null @@ -1,25 +0,0 @@ -@model IEnumerable - -@{ - ViewBag.Title = "Index"; - ViewBag.ngApp = "MusicStore.Admin"; -} - -

    Store Manager

    - -
    - -@Html.InlineData("Lookup", "ArtistsApi") -@Html.InlineData("Lookup", "GenresApi") - -@section Scripts { - - - - - -@* TODO: This is currently all the compiled TypeScript, non-minified. Need to explore options - for alternate loading schemes, e.g. AMD loader of individual modules, min vs. non-min, etc. *@ - - -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/Views/Web.config b/src/MvcMusicStore.Spa/Views/Web.config deleted file mode 100644 index 4bc2a4b7f2..0000000000 --- a/src/MvcMusicStore.Spa/Views/Web.config +++ /dev/null @@ -1,34 +0,0 @@ - - - - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/MvcMusicStore.Spa/Views/_ViewStart.cshtml b/src/MvcMusicStore.Spa/Views/_ViewStart.cshtml deleted file mode 100644 index 2de62418c0..0000000000 --- a/src/MvcMusicStore.Spa/Views/_ViewStart.cshtml +++ /dev/null @@ -1,3 +0,0 @@ -@{ - Layout = "~/Views/Shared/_Layout.cshtml"; -} diff --git a/src/MvcMusicStore.Spa/Web.Debug.config b/src/MvcMusicStore.Spa/Web.Debug.config deleted file mode 100644 index c1bf1db285..0000000000 --- a/src/MvcMusicStore.Spa/Web.Debug.config +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - diff --git a/src/MvcMusicStore.Spa/Web.Release.config b/src/MvcMusicStore.Spa/Web.Release.config deleted file mode 100644 index bdd237c337..0000000000 --- a/src/MvcMusicStore.Spa/Web.Release.config +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - diff --git a/src/MvcMusicStore.Spa/Web.config b/src/MvcMusicStore.Spa/Web.config deleted file mode 100644 index ffa628e849..0000000000 --- a/src/MvcMusicStore.Spa/Web.config +++ /dev/null @@ -1,129 +0,0 @@ - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/bower.json b/src/MvcMusicStore.Spa/bower.json deleted file mode 100644 index 224510d8ae..0000000000 --- a/src/MvcMusicStore.Spa/bower.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "MvcMusicStore", - "version": "0.0.0", - "private": true, - "dependencies": { - "bootstrap": "~3.1.0", - "jquery.validation": "~1.11.1", - "jquery": "~2.1.0", - "modernizr": "~2.7.1", - "respond": "~1.4.2", - "dt-angular": "~1.2.15", - "angular": "~1.2.15", - "angular-route": "~1.2.15", - "angular-bootstrap": "~0.10.0", - "dt-angular-ui-bootstrap": "*" - } -} diff --git a/src/MvcMusicStore.Spa/package.json b/src/MvcMusicStore.Spa/package.json deleted file mode 100644 index 026f294678..0000000000 --- a/src/MvcMusicStore.Spa/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "MvcMusicStore", - "version": "0.0.0", - "devDependencies": { - "grunt": "~0.4.2", - "grunt-contrib-jshint": "~0.6.3", - "grunt-contrib-uglify": "~0.2.2", - "grunt-contrib-watch": "~0.5.3", - "grunt-contrib-copy": "~0.5.0", - "grunt-contrib-clean": "~0.5.0", - "grunt-contrib-less": "~0.9.0", - "grunt-typescript": "~0.6.1", - "grunt-tslint": "~0.4.1", - "grunt-tsng": "~0.1.3" - } -} \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/packages.config b/src/MvcMusicStore.Spa/packages.config deleted file mode 100644 index 5af7250436..0000000000 --- a/src/MvcMusicStore.Spa/packages.config +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/MvcMusicStore.Spa/tslint.json b/src/MvcMusicStore.Spa/tslint.json deleted file mode 100644 index 975f4ff5c5..0000000000 --- a/src/MvcMusicStore.Spa/tslint.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "rules": { - "class-name": true, - "curly": true, - "eofline": false, - "forin": true, - "indent": [true, 4], - "label-position": true, - "label-undefined": true, - "max-line-length": [true, 140], - "no-arg": true, - "no-bitwise": true, - "no-console": [true, - "debug", - "info", - "time", - "timeEnd", - "trace" - ], - "no-construct": true, - "no-debugger": true, - "no-duplicate-key": true, - "no-duplicate-variable": true, - "no-empty": true, - "no-eval": true, - "no-string-literal": true, - "no-trailing-whitespace": true, - "no-unreachable": true, - "one-line": [true, - "check-open-brace", - "check-catch", - "check-else", - "check-whitespace" - ], - "quotemark": [true, "double"], - "radix": true, - "semicolon": true, - "triple-equals": [true, "allow-null-check"], - "variable-name": false, - "whitespace": [true, - "check-branch", - "check-decl", - "check-operator", - "check-separator", - "check-type" - ] - } -} \ No newline at end of file diff --git a/src/MvcMusicStore/App_Start/BundleConfig.cs b/src/MvcMusicStore/App_Start/BundleConfig.cs deleted file mode 100644 index 04e706d4ac..0000000000 --- a/src/MvcMusicStore/App_Start/BundleConfig.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System.Web; -using System.Web.Optimization; - -namespace MvcMusicStore -{ - public class BundleConfig - { - // For more information on bundling, visit http://go.microsoft.com/fwlink/?LinkId=301862 - public static void RegisterBundles(BundleCollection bundles) - { - bundles.Add(new ScriptBundle("~/bundles/jquery").Include( - "~/Scripts/jquery-{version}.js")); - - bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include( - "~/Scripts/jquery.validate*")); - - // Use the development version of Modernizr to develop with and learn from. Then, when you're - // ready for production, use the build tool at http://modernizr.com to pick only the tests you need. - bundles.Add(new ScriptBundle("~/bundles/modernizr").Include( - "~/Scripts/modernizr-*")); - - bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include( - "~/Scripts/bootstrap.js", - "~/Scripts/respond.js")); - - bundles.Add(new StyleBundle("~/Content/css").Include( - "~/Content/bootstrap.css", - "~/Content/site.css")); - } - } -} diff --git a/src/MvcMusicStore/App_Start/FilterConfig.cs b/src/MvcMusicStore/App_Start/FilterConfig.cs deleted file mode 100644 index a9fc460edc..0000000000 --- a/src/MvcMusicStore/App_Start/FilterConfig.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Web; -using System.Web.Mvc; - -namespace MvcMusicStore -{ - public class FilterConfig - { - public static void RegisterGlobalFilters(GlobalFilterCollection filters) - { - filters.Add(new HandleErrorAttribute()); - } - } -} diff --git a/src/MvcMusicStore/App_Start/RouteConfig.cs b/src/MvcMusicStore/App_Start/RouteConfig.cs deleted file mode 100644 index 23c35ec762..0000000000 --- a/src/MvcMusicStore/App_Start/RouteConfig.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Web.Mvc; -using System.Web.Routing; - -namespace MvcMusicStore -{ - public class RouteConfig - { - public static void RegisterRoutes(RouteCollection routes) - { - routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); - - routes.MapRoute( - name: "Default", - url: "{controller}/{action}/{id}", - defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } - ); - } - } -} diff --git a/src/MvcMusicStore/App_Start/Startup.App.cs b/src/MvcMusicStore/App_Start/Startup.App.cs deleted file mode 100644 index 053b2a9a30..0000000000 --- a/src/MvcMusicStore/App_Start/Startup.App.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System.Configuration; -using System.Threading.Tasks; -using Microsoft.AspNet.Identity; -using Microsoft.AspNet.Identity.EntityFramework; -using MvcMusicStore.Models; -using Owin; - -namespace MvcMusicStore -{ - public partial class Startup - { - private const string RoleName = "Administrator"; - - public void ConfigureApp(IAppBuilder app) - { - using (var context = new MusicStoreEntities()) - { - context.Database.Delete(); - context.Database.Create(); - - new SampleData().Seed(context); - } - - CreateAdminUser().Wait(); - } - - private async Task CreateAdminUser() - { - var username = ConfigurationManager.AppSettings["DefaultAdminUsername"]; - var password = ConfigurationManager.AppSettings["DefaultAdminPassword"]; - - using (var context = new ApplicationDbContext()) - { - var userManager = new UserManager(new UserStore(context)); - var roleManager = new RoleManager(new RoleStore(context)); - - var role = new IdentityRole(RoleName); - - var result = await roleManager.RoleExistsAsync(RoleName); - if (!result) - { - await roleManager.CreateAsync(role); - } - - var user = await userManager.FindByNameAsync(username); - if (user == null) - { - user = new ApplicationUser { UserName = username }; - await userManager.CreateAsync(user, password); - await userManager.AddToRoleAsync(user.Id, RoleName); - } - } - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore/App_Start/Startup.Auth.cs b/src/MvcMusicStore/App_Start/Startup.Auth.cs deleted file mode 100644 index 6a7c520351..0000000000 --- a/src/MvcMusicStore/App_Start/Startup.Auth.cs +++ /dev/null @@ -1,38 +0,0 @@ -using Microsoft.AspNet.Identity; -using Microsoft.Owin; -using Microsoft.Owin.Security.Cookies; -using Owin; - -namespace MvcMusicStore -{ - public partial class Startup - { - // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864 - public void ConfigureAuth(IAppBuilder app) - { - // Enable the application to use a cookie to store information for the signed in user - app.UseCookieAuthentication(new CookieAuthenticationOptions - { - AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, - LoginPath = new PathString("/Account/Login") - }); - // Use a cookie to temporarily store information about a user logging in with a third party login provider - app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); - - // Uncomment the following lines to enable logging in with third party login providers - //app.UseMicrosoftAccountAuthentication( - // clientId: "", - // clientSecret: ""); - - //app.UseTwitterAuthentication( - // consumerKey: "", - // consumerSecret: ""); - - //app.UseFacebookAuthentication( - // appId: "", - // appSecret: ""); - - //app.UseGoogleAuthentication(); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore/Content/Site.css b/src/MvcMusicStore/Content/Site.css deleted file mode 100644 index 23c0d16c53..0000000000 --- a/src/MvcMusicStore/Content/Site.css +++ /dev/null @@ -1,70 +0,0 @@ -body { - padding-top: 50px; - padding-bottom: 20px; -} - -/* Set padding to keep content from hitting the edges */ -.body-content { - padding-left: 15px; - padding-right: 15px; -} - -/* Set width on the form input elements since they're 100% wide by default */ -input, -select, -textarea { - max-width: 280px; -} - -/* styles for validation helpers */ -.field-validation-error { - color: #b94a48; -} - -.field-validation-valid { - display: none; -} - -input.input-validation-error { - border: 1px solid #b94a48; -} - -input[type="checkbox"].input-validation-error { - border: 0 none; -} - -.validation-summary-errors { - color: #b94a48; -} - -.validation-summary-valid { - display: none; -} - - -/* Music Store additions */ - -ul#album-list li { - height: 160px; -} - -ul#album-list li img:hover { - box-shadow: 1px 1px 7px #777; -} - -ul#album-list li img { - box-shadow: 1px 1px 5px #999; - border: none; - padding: 0; -} - -ul#album-list li a, ul#album-details li a { - text-decoration:none; -} - -ul#album-list li a:hover { - background: none; - -webkit-text-shadow: 1px 1px 2px #bbb; - text-shadow: 1px 1px 2px #bbb; - color: #363430; -} \ No newline at end of file diff --git a/src/MvcMusicStore/Content/bootstrap-theme.css b/src/MvcMusicStore/Content/bootstrap-theme.css deleted file mode 100644 index ad11735693..0000000000 --- a/src/MvcMusicStore/Content/bootstrap-theme.css +++ /dev/null @@ -1,384 +0,0 @@ -.btn-default, -.btn-primary, -.btn-success, -.btn-info, -.btn-warning, -.btn-danger { - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.btn-default:active, -.btn-primary:active, -.btn-success:active, -.btn-info:active, -.btn-warning:active, -.btn-danger:active, -.btn-default.active, -.btn-primary.active, -.btn-success.active, -.btn-info.active, -.btn-warning.active, -.btn-danger.active { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} - -.btn:active, -.btn.active { - background-image: none; -} - -.btn-default { - text-shadow: 0 1px 0 #fff; - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(top, #ffffff, 0%, #e6e6e6, 100%); - background-image: -moz-linear-gradient(top, #ffffff 0%, #e6e6e6 100%); - background-image: linear-gradient(to bottom, #ffffff 0%, #e6e6e6 100%); - background-repeat: repeat-x; - border-color: #e0e0e0; - border-color: #ccc; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); -} - -.btn-default:active, -.btn-default.active { - background-color: #e6e6e6; - border-color: #e0e0e0; -} - -.btn-primary { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3071a9)); - background-image: -webkit-linear-gradient(top, #428bca, 0%, #3071a9, 100%); - background-image: -moz-linear-gradient(top, #428bca 0%, #3071a9 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); - background-repeat: repeat-x; - border-color: #2d6ca2; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); -} - -.btn-primary:active, -.btn-primary.active { - background-color: #3071a9; - border-color: #2d6ca2; -} - -.btn-success { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5cb85c), to(#449d44)); - background-image: -webkit-linear-gradient(top, #5cb85c, 0%, #449d44, 100%); - background-image: -moz-linear-gradient(top, #5cb85c 0%, #449d44 100%); - background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); - background-repeat: repeat-x; - border-color: #419641; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); -} - -.btn-success:active, -.btn-success.active { - background-color: #449d44; - border-color: #419641; -} - -.btn-warning { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f0ad4e), to(#ec971f)); - background-image: -webkit-linear-gradient(top, #f0ad4e, 0%, #ec971f, 100%); - background-image: -moz-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); - background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); - background-repeat: repeat-x; - border-color: #eb9316; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); -} - -.btn-warning:active, -.btn-warning.active { - background-color: #ec971f; - border-color: #eb9316; -} - -.btn-danger { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9534f), to(#c9302c)); - background-image: -webkit-linear-gradient(top, #d9534f, 0%, #c9302c, 100%); - background-image: -moz-linear-gradient(top, #d9534f 0%, #c9302c 100%); - background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); - background-repeat: repeat-x; - border-color: #c12e2a; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); -} - -.btn-danger:active, -.btn-danger.active { - background-color: #c9302c; - border-color: #c12e2a; -} - -.btn-info { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5bc0de), to(#31b0d5)); - background-image: -webkit-linear-gradient(top, #5bc0de, 0%, #31b0d5, 100%); - background-image: -moz-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); - background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); - background-repeat: repeat-x; - border-color: #2aabd2; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); -} - -.btn-info:active, -.btn-info.active { - background-color: #31b0d5; - border-color: #2aabd2; -} - -.thumbnail, -.img-thumbnail { - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); -} - -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus, -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - background-color: #357ebd; - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#357ebd)); - background-image: -webkit-linear-gradient(top, #428bca, 0%, #357ebd, 100%); - background-image: -moz-linear-gradient(top, #428bca 0%, #357ebd 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); -} - -.navbar { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#f8f8f8)); - background-image: -webkit-linear-gradient(top, #ffffff, 0%, #f8f8f8, 100%); - background-image: -moz-linear-gradient(top, #ffffff 0%, #f8f8f8 100%); - background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%); - background-repeat: repeat-x; - border-radius: 4px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); -} - -.navbar .navbar-nav > .active > a { - background-color: #f8f8f8; -} - -.navbar-brand, -.navbar-nav > li > a { - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); -} - -.navbar-inverse { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#3c3c3c), to(#222222)); - background-image: -webkit-linear-gradient(top, #3c3c3c, 0%, #222222, 100%); - background-image: -moz-linear-gradient(top, #3c3c3c 0%, #222222 100%); - background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); -} - -.navbar-inverse .navbar-nav > .active > a { - background-color: #222222; -} - -.navbar-inverse .navbar-brand, -.navbar-inverse .navbar-nav > li > a { - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} - -.navbar-static-top, -.navbar-fixed-top, -.navbar-fixed-bottom { - border-radius: 0; -} - -.alert { - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.alert-success { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#dff0d8), to(#c8e5bc)); - background-image: -webkit-linear-gradient(top, #dff0d8, 0%, #c8e5bc, 100%); - background-image: -moz-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); - background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); - background-repeat: repeat-x; - border-color: #b2dba1; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); -} - -.alert-info { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9edf7), to(#b9def0)); - background-image: -webkit-linear-gradient(top, #d9edf7, 0%, #b9def0, 100%); - background-image: -moz-linear-gradient(top, #d9edf7 0%, #b9def0 100%); - background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); - background-repeat: repeat-x; - border-color: #9acfea; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); -} - -.alert-warning { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fcf8e3), to(#f8efc0)); - background-image: -webkit-linear-gradient(top, #fcf8e3, 0%, #f8efc0, 100%); - background-image: -moz-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); - background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); - background-repeat: repeat-x; - border-color: #f5e79e; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); -} - -.alert-danger { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f2dede), to(#e7c3c3)); - background-image: -webkit-linear-gradient(top, #f2dede, 0%, #e7c3c3, 100%); - background-image: -moz-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); - background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); - background-repeat: repeat-x; - border-color: #dca7a7; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); -} - -.progress { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ebebeb), to(#f5f5f5)); - background-image: -webkit-linear-gradient(top, #ebebeb, 0%, #f5f5f5, 100%); - background-image: -moz-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); - background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); -} - -.progress-bar { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3071a9)); - background-image: -webkit-linear-gradient(top, #428bca, 0%, #3071a9, 100%); - background-image: -moz-linear-gradient(top, #428bca 0%, #3071a9 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); -} - -.progress-bar-success { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5cb85c), to(#449d44)); - background-image: -webkit-linear-gradient(top, #5cb85c, 0%, #449d44, 100%); - background-image: -moz-linear-gradient(top, #5cb85c 0%, #449d44 100%); - background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); -} - -.progress-bar-info { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5bc0de), to(#31b0d5)); - background-image: -webkit-linear-gradient(top, #5bc0de, 0%, #31b0d5, 100%); - background-image: -moz-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); - background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); -} - -.progress-bar-warning { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f0ad4e), to(#ec971f)); - background-image: -webkit-linear-gradient(top, #f0ad4e, 0%, #ec971f, 100%); - background-image: -moz-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); - background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); -} - -.progress-bar-danger { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9534f), to(#c9302c)); - background-image: -webkit-linear-gradient(top, #d9534f, 0%, #c9302c, 100%); - background-image: -moz-linear-gradient(top, #d9534f 0%, #c9302c 100%); - background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); -} - -.list-group { - border-radius: 4px; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); -} - -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - text-shadow: 0 -1px 0 #3071a9; - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3278b3)); - background-image: -webkit-linear-gradient(top, #428bca, 0%, #3278b3, 100%); - background-image: -moz-linear-gradient(top, #428bca 0%, #3278b3 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%); - background-repeat: repeat-x; - border-color: #3278b3; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0); -} - -.panel { - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.panel-default > .panel-heading { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f5f5f5), to(#e8e8e8)); - background-image: -webkit-linear-gradient(top, #f5f5f5, 0%, #e8e8e8, 100%); - background-image: -moz-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); -} - -.panel-primary > .panel-heading { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#357ebd)); - background-image: -webkit-linear-gradient(top, #428bca, 0%, #357ebd, 100%); - background-image: -moz-linear-gradient(top, #428bca 0%, #357ebd 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); -} - -.panel-success > .panel-heading { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#dff0d8), to(#d0e9c6)); - background-image: -webkit-linear-gradient(top, #dff0d8, 0%, #d0e9c6, 100%); - background-image: -moz-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); - background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); -} - -.panel-info > .panel-heading { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9edf7), to(#c4e3f3)); - background-image: -webkit-linear-gradient(top, #d9edf7, 0%, #c4e3f3, 100%); - background-image: -moz-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); - background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); -} - -.panel-warning > .panel-heading { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fcf8e3), to(#faf2cc)); - background-image: -webkit-linear-gradient(top, #fcf8e3, 0%, #faf2cc, 100%); - background-image: -moz-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); - background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); -} - -.panel-danger > .panel-heading { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f2dede), to(#ebcccc)); - background-image: -webkit-linear-gradient(top, #f2dede, 0%, #ebcccc, 100%); - background-image: -moz-linear-gradient(top, #f2dede 0%, #ebcccc 100%); - background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); -} - -.well { - background-image: -webkit-gradient(linear, left 0%, left 100%, from(#e8e8e8), to(#f5f5f5)); - background-image: -webkit-linear-gradient(top, #e8e8e8, 0%, #f5f5f5, 100%); - background-image: -moz-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); - background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); - background-repeat: repeat-x; - border-color: #dcdcdc; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); - -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); -} \ No newline at end of file diff --git a/src/MvcMusicStore/Content/bootstrap-theme.min.css b/src/MvcMusicStore/Content/bootstrap-theme.min.css deleted file mode 100644 index cad36b4e60..0000000000 --- a/src/MvcMusicStore/Content/bootstrap-theme.min.css +++ /dev/null @@ -1 +0,0 @@ -.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn:active,.btn.active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left 0,left 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,0%,#e6e6e6,100%);background-image:-moz-linear-gradient(top,#fff 0,#e6e6e6 100%);background-image:linear-gradient(to bottom,#fff 0,#e6e6e6 100%);background-repeat:repeat-x;border-color:#e0e0e0;border-color:#ccc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0)}.btn-default:active,.btn-default.active{background-color:#e6e6e6;border-color:#e0e0e0}.btn-primary{background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#3071a9));background-image:-webkit-linear-gradient(top,#428bca,0%,#3071a9,100%);background-image:-moz-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;border-color:#2d6ca2;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3071a9',GradientType=0)}.btn-primary:active,.btn-primary.active{background-color:#3071a9;border-color:#2d6ca2}.btn-success{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5cb85c),to(#449d44));background-image:-webkit-linear-gradient(top,#5cb85c,0%,#449d44,100%);background-image:-moz-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;border-color:#419641;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c',endColorstr='#ff449d44',GradientType=0)}.btn-success:active,.btn-success.active{background-color:#449d44;border-color:#419641}.btn-warning{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f0ad4e),to(#ec971f));background-image:-webkit-linear-gradient(top,#f0ad4e,0%,#ec971f,100%);background-image:-moz-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;border-color:#eb9316;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e',endColorstr='#ffec971f',GradientType=0)}.btn-warning:active,.btn-warning.active{background-color:#ec971f;border-color:#eb9316}.btn-danger{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9534f),to(#c9302c));background-image:-webkit-linear-gradient(top,#d9534f,0%,#c9302c,100%);background-image:-moz-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;border-color:#c12e2a;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f',endColorstr='#ffc9302c',GradientType=0)}.btn-danger:active,.btn-danger.active{background-color:#c9302c;border-color:#c12e2a}.btn-info{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5bc0de),to(#31b0d5));background-image:-webkit-linear-gradient(top,#5bc0de,0%,#31b0d5,100%);background-image:-moz-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;border-color:#2aabd2;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff31b0d5',GradientType=0)}.btn-info:active,.btn-info.active{background-color:#31b0d5;border-color:#2aabd2}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#357ebd;background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#357ebd));background-image:-webkit-linear-gradient(top,#428bca,0%,#357ebd,100%);background-image:-moz-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff357ebd',GradientType=0)}.navbar{background-image:-webkit-gradient(linear,left 0,left 100%,from(#fff),to(#f8f8f8));background-image:-webkit-linear-gradient(top,#fff,0%,#f8f8f8,100%);background-image:-moz-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);background-repeat:repeat-x;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff8f8f8',GradientType=0);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075)}.navbar .navbar-nav>.active>a{background-color:#f8f8f8}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,0.25)}.navbar-inverse{background-image:-webkit-gradient(linear,left 0,left 100%,from(#3c3c3c),to(#222));background-image:-webkit-linear-gradient(top,#3c3c3c,0%,#222,100%);background-image:-moz-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c',endColorstr='#ff222222',GradientType=0)}.navbar-inverse .navbar-nav>.active>a{background-color:#222}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05)}.alert-success{background-image:-webkit-gradient(linear,left 0,left 100%,from(#dff0d8),to(#c8e5bc));background-image:-webkit-linear-gradient(top,#dff0d8,0%,#c8e5bc,100%);background-image:-moz-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);background-repeat:repeat-x;border-color:#b2dba1;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8',endColorstr='#ffc8e5bc',GradientType=0)}.alert-info{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9edf7),to(#b9def0));background-image:-webkit-linear-gradient(top,#d9edf7,0%,#b9def0,100%);background-image:-moz-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);background-repeat:repeat-x;border-color:#9acfea;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7',endColorstr='#ffb9def0',GradientType=0)}.alert-warning{background-image:-webkit-gradient(linear,left 0,left 100%,from(#fcf8e3),to(#f8efc0));background-image:-webkit-linear-gradient(top,#fcf8e3,0%,#f8efc0,100%);background-image:-moz-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);background-repeat:repeat-x;border-color:#f5e79e;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3',endColorstr='#fff8efc0',GradientType=0)}.alert-danger{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f2dede),to(#e7c3c3));background-image:-webkit-linear-gradient(top,#f2dede,0%,#e7c3c3,100%);background-image:-moz-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);background-repeat:repeat-x;border-color:#dca7a7;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede',endColorstr='#ffe7c3c3',GradientType=0)}.progress{background-image:-webkit-gradient(linear,left 0,left 100%,from(#ebebeb),to(#f5f5f5));background-image:-webkit-linear-gradient(top,#ebebeb,0%,#f5f5f5,100%);background-image:-moz-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb',endColorstr='#fff5f5f5',GradientType=0)}.progress-bar{background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#3071a9));background-image:-webkit-linear-gradient(top,#428bca,0%,#3071a9,100%);background-image:-moz-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3071a9',GradientType=0)}.progress-bar-success{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5cb85c),to(#449d44));background-image:-webkit-linear-gradient(top,#5cb85c,0%,#449d44,100%);background-image:-moz-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c',endColorstr='#ff449d44',GradientType=0)}.progress-bar-info{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5bc0de),to(#31b0d5));background-image:-webkit-linear-gradient(top,#5bc0de,0%,#31b0d5,100%);background-image:-moz-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff31b0d5',GradientType=0)}.progress-bar-warning{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f0ad4e),to(#ec971f));background-image:-webkit-linear-gradient(top,#f0ad4e,0%,#ec971f,100%);background-image:-moz-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e',endColorstr='#ffec971f',GradientType=0)}.progress-bar-danger{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9534f),to(#c9302c));background-image:-webkit-linear-gradient(top,#d9534f,0%,#c9302c,100%);background-image:-moz-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f',endColorstr='#ffc9302c',GradientType=0)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#3278b3));background-image:-webkit-linear-gradient(top,#428bca,0%,#3278b3,100%);background-image:-moz-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);background-repeat:repeat-x;border-color:#3278b3;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3278b3',GradientType=0)}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.panel-default>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f5f5f5),to(#e8e8e8));background-image:-webkit-linear-gradient(top,#f5f5f5,0%,#e8e8e8,100%);background-image:-moz-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#ffe8e8e8',GradientType=0)}.panel-primary>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#357ebd));background-image:-webkit-linear-gradient(top,#428bca,0%,#357ebd,100%);background-image:-moz-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff357ebd',GradientType=0)}.panel-success>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#dff0d8),to(#d0e9c6));background-image:-webkit-linear-gradient(top,#dff0d8,0%,#d0e9c6,100%);background-image:-moz-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8',endColorstr='#ffd0e9c6',GradientType=0)}.panel-info>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9edf7),to(#c4e3f3));background-image:-webkit-linear-gradient(top,#d9edf7,0%,#c4e3f3,100%);background-image:-moz-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7',endColorstr='#ffc4e3f3',GradientType=0)}.panel-warning>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#fcf8e3),to(#faf2cc));background-image:-webkit-linear-gradient(top,#fcf8e3,0%,#faf2cc,100%);background-image:-moz-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3',endColorstr='#fffaf2cc',GradientType=0)}.panel-danger>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f2dede),to(#ebcccc));background-image:-webkit-linear-gradient(top,#f2dede,0%,#ebcccc,100%);background-image:-moz-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede',endColorstr='#ffebcccc',GradientType=0)}.well{background-image:-webkit-gradient(linear,left 0,left 100%,from(#e8e8e8),to(#f5f5f5));background-image:-webkit-linear-gradient(top,#e8e8e8,0%,#f5f5f5,100%);background-image:-moz-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);background-repeat:repeat-x;border-color:#dcdcdc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8',endColorstr='#fff5f5f5',GradientType=0);-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1)} \ No newline at end of file diff --git a/src/MvcMusicStore/Content/bootstrap.css b/src/MvcMusicStore/Content/bootstrap.css deleted file mode 100644 index bbda4eed4a..0000000000 --- a/src/MvcMusicStore/Content/bootstrap.css +++ /dev/null @@ -1,6805 +0,0 @@ -/*! - * Bootstrap v3.0.0 - * - * Copyright 2013 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world by @mdo and @fat. - */ - -/*! normalize.css v2.1.0 | MIT License | git.io/normalize */ - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -nav, -section, -summary { - display: block; -} - -audio, -canvas, -video { - display: inline-block; -} - -audio:not([controls]) { - display: none; - height: 0; -} - -[hidden] { - display: none; -} - -html { - font-family: sans-serif; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} - -body { - margin: 0; -} - -a:focus { - outline: thin dotted; -} - -a:active, -a:hover { - outline: 0; -} - -h1 { - margin: 0.67em 0; - font-size: 2em; -} - -abbr[title] { - border-bottom: 1px dotted; -} - -b, -strong { - font-weight: bold; -} - -dfn { - font-style: italic; -} - -hr { - height: 0; - -moz-box-sizing: content-box; - box-sizing: content-box; -} - -mark { - color: #000; - background: #ff0; -} - -code, -kbd, -pre, -samp { - font-family: monospace, serif; - font-size: 1em; -} - -pre { - white-space: pre-wrap; -} - -q { - quotes: "\201C" "\201D" "\2018" "\2019"; -} - -small { - font-size: 80%; -} - -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -img { - border: 0; -} - -svg:not(:root) { - overflow: hidden; -} - -figure { - margin: 0; -} - -fieldset { - padding: 0.35em 0.625em 0.75em; - margin: 0 2px; - border: 1px solid #c0c0c0; -} - -legend { - padding: 0; - border: 0; -} - -button, -input, -select, -textarea { - margin: 0; - font-family: inherit; - font-size: 100%; -} - -button, -input { - line-height: normal; -} - -button, -select { - text-transform: none; -} - -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - cursor: pointer; - -webkit-appearance: button; -} - -button[disabled], -html input[disabled] { - cursor: default; -} - -input[type="checkbox"], -input[type="radio"] { - padding: 0; - box-sizing: border-box; -} - -input[type="search"] { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - -webkit-appearance: textfield; -} - -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -button::-moz-focus-inner, -input::-moz-focus-inner { - padding: 0; - border: 0; -} - -textarea { - overflow: auto; - vertical-align: top; -} - -table { - border-collapse: collapse; - border-spacing: 0; -} - -@media print { - * { - color: #000 !important; - text-shadow: none !important; - background: transparent !important; - box-shadow: none !important; - } - a, - a:visited { - text-decoration: underline; - } - a[href]:after { - content: " (" attr(href) ")"; - } - abbr[title]:after { - content: " (" attr(title) ")"; - } - .ir a:after, - a[href^="javascript:"]:after, - a[href^="#"]:after { - content: ""; - } - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - @page { - margin: 2cm .5cm; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } - .navbar { - display: none; - } - .table td, - .table th { - background-color: #fff !important; - } - .btn > .caret, - .dropup > .btn > .caret { - border-top-color: #000 !important; - } - .label { - border: 1px solid #000; - } - .table { - border-collapse: collapse !important; - } - .table-bordered th, - .table-bordered td { - border: 1px solid #ddd !important; - } -} - -*, -*:before, -*:after { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -html { - font-size: 62.5%; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} - -body { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 1.428571429; - color: #333333; - background-color: #ffffff; -} - -input, -button, -select, -textarea { - font-family: inherit; - font-size: inherit; - line-height: inherit; -} - -button, -input, -select[multiple], -textarea { - background-image: none; -} - -a { - color: #428bca; - text-decoration: none; -} - -a:hover, -a:focus { - color: #2a6496; - text-decoration: underline; -} - -a:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -img { - vertical-align: middle; -} - -.img-responsive { - display: block; - height: auto; - max-width: 100%; -} - -.img-rounded { - border-radius: 6px; -} - -.img-thumbnail { - display: inline-block; - height: auto; - max-width: 100%; - padding: 4px; - line-height: 1.428571429; - background-color: #ffffff; - border: 1px solid #dddddd; - border-radius: 4px; - -webkit-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; -} - -.img-circle { - border-radius: 50%; -} - -hr { - margin-top: 20px; - margin-bottom: 20px; - border: 0; - border-top: 1px solid #eeeeee; -} - -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0 0 0 0); - border: 0; -} - -p { - margin: 0 0 10px; -} - -.lead { - margin-bottom: 20px; - font-size: 16.099999999999998px; - font-weight: 200; - line-height: 1.4; -} - -@media (min-width: 768px) { - .lead { - font-size: 21px; - } -} - -small { - font-size: 85%; -} - -cite { - font-style: normal; -} - -.text-muted { - color: #999999; -} - -.text-primary { - color: #428bca; -} - -.text-warning { - color: #c09853; -} - -.text-danger { - color: #b94a48; -} - -.text-success { - color: #468847; -} - -.text-info { - color: #3a87ad; -} - -.text-left { - text-align: left; -} - -.text-right { - text-align: right; -} - -.text-center { - text-align: center; -} - -h1, -h2, -h3, -h4, -h5, -h6, -.h1, -.h2, -.h3, -.h4, -.h5, -.h6 { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-weight: 500; - line-height: 1.1; -} - -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small, -.h1 small, -.h2 small, -.h3 small, -.h4 small, -.h5 small, -.h6 small { - font-weight: normal; - line-height: 1; - color: #999999; -} - -h1, -h2, -h3 { - margin-top: 20px; - margin-bottom: 10px; -} - -h4, -h5, -h6 { - margin-top: 10px; - margin-bottom: 10px; -} - -h1, -.h1 { - font-size: 36px; -} - -h2, -.h2 { - font-size: 30px; -} - -h3, -.h3 { - font-size: 24px; -} - -h4, -.h4 { - font-size: 18px; -} - -h5, -.h5 { - font-size: 14px; -} - -h6, -.h6 { - font-size: 12px; -} - -h1 small, -.h1 small { - font-size: 24px; -} - -h2 small, -.h2 small { - font-size: 18px; -} - -h3 small, -.h3 small, -h4 small, -.h4 small { - font-size: 14px; -} - -.page-header { - padding-bottom: 9px; - margin: 40px 0 20px; - border-bottom: 1px solid #eeeeee; -} - -ul, -ol { - margin-top: 0; - margin-bottom: 10px; -} - -ul ul, -ol ul, -ul ol, -ol ol { - margin-bottom: 0; -} - -.list-unstyled { - padding-left: 0; - list-style: none; -} - -.list-inline { - padding-left: 0; - list-style: none; -} - -.list-inline > li { - display: inline-block; - padding-right: 5px; - padding-left: 5px; -} - -dl { - margin-bottom: 20px; -} - -dt, -dd { - line-height: 1.428571429; -} - -dt { - font-weight: bold; -} - -dd { - margin-left: 0; -} - -@media (min-width: 768px) { - .dl-horizontal dt { - float: left; - width: 160px; - overflow: hidden; - clear: left; - text-align: right; - text-overflow: ellipsis; - white-space: nowrap; - } - .dl-horizontal dd { - margin-left: 180px; - } - .dl-horizontal dd:before, - .dl-horizontal dd:after { - display: table; - content: " "; - } - .dl-horizontal dd:after { - clear: both; - } - .dl-horizontal dd:before, - .dl-horizontal dd:after { - display: table; - content: " "; - } - .dl-horizontal dd:after { - clear: both; - } -} - -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #999999; -} - -abbr.initialism { - font-size: 90%; - text-transform: uppercase; -} - -blockquote { - padding: 10px 20px; - margin: 0 0 20px; - border-left: 5px solid #eeeeee; -} - -blockquote p { - font-size: 17.5px; - font-weight: 300; - line-height: 1.25; -} - -blockquote p:last-child { - margin-bottom: 0; -} - -blockquote small { - display: block; - line-height: 1.428571429; - color: #999999; -} - -blockquote small:before { - content: '\2014 \00A0'; -} - -blockquote.pull-right { - padding-right: 15px; - padding-left: 0; - border-right: 5px solid #eeeeee; - border-left: 0; -} - -blockquote.pull-right p, -blockquote.pull-right small { - text-align: right; -} - -blockquote.pull-right small:before { - content: ''; -} - -blockquote.pull-right small:after { - content: '\00A0 \2014'; -} - -q:before, -q:after, -blockquote:before, -blockquote:after { - content: ""; -} - -address { - display: block; - margin-bottom: 20px; - font-style: normal; - line-height: 1.428571429; -} - -code, -pre { - font-family: Monaco, Menlo, Consolas, "Courier New", monospace; -} - -code { - padding: 2px 4px; - font-size: 90%; - color: #c7254e; - white-space: nowrap; - background-color: #f9f2f4; - border-radius: 4px; -} - -pre { - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 1.428571429; - color: #333333; - word-break: break-all; - word-wrap: break-word; - background-color: #f5f5f5; - border: 1px solid #cccccc; - border-radius: 4px; -} - -pre.prettyprint { - margin-bottom: 20px; -} - -pre code { - padding: 0; - font-size: inherit; - color: inherit; - white-space: pre-wrap; - background-color: transparent; - border: 0; -} - -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} - -.container { - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; -} - -.container:before, -.container:after { - display: table; - content: " "; -} - -.container:after { - clear: both; -} - -.container:before, -.container:after { - display: table; - content: " "; -} - -.container:after { - clear: both; -} - -.row { - margin-right: -15px; - margin-left: -15px; -} - -.row:before, -.row:after { - display: table; - content: " "; -} - -.row:after { - clear: both; -} - -.row:before, -.row:after { - display: table; - content: " "; -} - -.row:after { - clear: both; -} - -.col-xs-1, -.col-xs-2, -.col-xs-3, -.col-xs-4, -.col-xs-5, -.col-xs-6, -.col-xs-7, -.col-xs-8, -.col-xs-9, -.col-xs-10, -.col-xs-11, -.col-xs-12, -.col-sm-1, -.col-sm-2, -.col-sm-3, -.col-sm-4, -.col-sm-5, -.col-sm-6, -.col-sm-7, -.col-sm-8, -.col-sm-9, -.col-sm-10, -.col-sm-11, -.col-sm-12, -.col-md-1, -.col-md-2, -.col-md-3, -.col-md-4, -.col-md-5, -.col-md-6, -.col-md-7, -.col-md-8, -.col-md-9, -.col-md-10, -.col-md-11, -.col-md-12, -.col-lg-1, -.col-lg-2, -.col-lg-3, -.col-lg-4, -.col-lg-5, -.col-lg-6, -.col-lg-7, -.col-lg-8, -.col-lg-9, -.col-lg-10, -.col-lg-11, -.col-lg-12 { - position: relative; - min-height: 1px; - padding-right: 15px; - padding-left: 15px; -} - -.col-xs-1, -.col-xs-2, -.col-xs-3, -.col-xs-4, -.col-xs-5, -.col-xs-6, -.col-xs-7, -.col-xs-8, -.col-xs-9, -.col-xs-10, -.col-xs-11 { - float: left; -} - -.col-xs-1 { - width: 8.333333333333332%; -} - -.col-xs-2 { - width: 16.666666666666664%; -} - -.col-xs-3 { - width: 25%; -} - -.col-xs-4 { - width: 33.33333333333333%; -} - -.col-xs-5 { - width: 41.66666666666667%; -} - -.col-xs-6 { - width: 50%; -} - -.col-xs-7 { - width: 58.333333333333336%; -} - -.col-xs-8 { - width: 66.66666666666666%; -} - -.col-xs-9 { - width: 75%; -} - -.col-xs-10 { - width: 83.33333333333334%; -} - -.col-xs-11 { - width: 91.66666666666666%; -} - -.col-xs-12 { - width: 100%; -} - -@media (min-width: 768px) { - .container { - max-width: 750px; - } - .col-sm-1, - .col-sm-2, - .col-sm-3, - .col-sm-4, - .col-sm-5, - .col-sm-6, - .col-sm-7, - .col-sm-8, - .col-sm-9, - .col-sm-10, - .col-sm-11 { - float: left; - } - .col-sm-1 { - width: 8.333333333333332%; - } - .col-sm-2 { - width: 16.666666666666664%; - } - .col-sm-3 { - width: 25%; - } - .col-sm-4 { - width: 33.33333333333333%; - } - .col-sm-5 { - width: 41.66666666666667%; - } - .col-sm-6 { - width: 50%; - } - .col-sm-7 { - width: 58.333333333333336%; - } - .col-sm-8 { - width: 66.66666666666666%; - } - .col-sm-9 { - width: 75%; - } - .col-sm-10 { - width: 83.33333333333334%; - } - .col-sm-11 { - width: 91.66666666666666%; - } - .col-sm-12 { - width: 100%; - } - .col-sm-push-1 { - left: 8.333333333333332%; - } - .col-sm-push-2 { - left: 16.666666666666664%; - } - .col-sm-push-3 { - left: 25%; - } - .col-sm-push-4 { - left: 33.33333333333333%; - } - .col-sm-push-5 { - left: 41.66666666666667%; - } - .col-sm-push-6 { - left: 50%; - } - .col-sm-push-7 { - left: 58.333333333333336%; - } - .col-sm-push-8 { - left: 66.66666666666666%; - } - .col-sm-push-9 { - left: 75%; - } - .col-sm-push-10 { - left: 83.33333333333334%; - } - .col-sm-push-11 { - left: 91.66666666666666%; - } - .col-sm-pull-1 { - right: 8.333333333333332%; - } - .col-sm-pull-2 { - right: 16.666666666666664%; - } - .col-sm-pull-3 { - right: 25%; - } - .col-sm-pull-4 { - right: 33.33333333333333%; - } - .col-sm-pull-5 { - right: 41.66666666666667%; - } - .col-sm-pull-6 { - right: 50%; - } - .col-sm-pull-7 { - right: 58.333333333333336%; - } - .col-sm-pull-8 { - right: 66.66666666666666%; - } - .col-sm-pull-9 { - right: 75%; - } - .col-sm-pull-10 { - right: 83.33333333333334%; - } - .col-sm-pull-11 { - right: 91.66666666666666%; - } - .col-sm-offset-1 { - margin-left: 8.333333333333332%; - } - .col-sm-offset-2 { - margin-left: 16.666666666666664%; - } - .col-sm-offset-3 { - margin-left: 25%; - } - .col-sm-offset-4 { - margin-left: 33.33333333333333%; - } - .col-sm-offset-5 { - margin-left: 41.66666666666667%; - } - .col-sm-offset-6 { - margin-left: 50%; - } - .col-sm-offset-7 { - margin-left: 58.333333333333336%; - } - .col-sm-offset-8 { - margin-left: 66.66666666666666%; - } - .col-sm-offset-9 { - margin-left: 75%; - } - .col-sm-offset-10 { - margin-left: 83.33333333333334%; - } - .col-sm-offset-11 { - margin-left: 91.66666666666666%; - } -} - -@media (min-width: 992px) { - .container { - max-width: 970px; - } - .col-md-1, - .col-md-2, - .col-md-3, - .col-md-4, - .col-md-5, - .col-md-6, - .col-md-7, - .col-md-8, - .col-md-9, - .col-md-10, - .col-md-11 { - float: left; - } - .col-md-1 { - width: 8.333333333333332%; - } - .col-md-2 { - width: 16.666666666666664%; - } - .col-md-3 { - width: 25%; - } - .col-md-4 { - width: 33.33333333333333%; - } - .col-md-5 { - width: 41.66666666666667%; - } - .col-md-6 { - width: 50%; - } - .col-md-7 { - width: 58.333333333333336%; - } - .col-md-8 { - width: 66.66666666666666%; - } - .col-md-9 { - width: 75%; - } - .col-md-10 { - width: 83.33333333333334%; - } - .col-md-11 { - width: 91.66666666666666%; - } - .col-md-12 { - width: 100%; - } - .col-md-push-0 { - left: auto; - } - .col-md-push-1 { - left: 8.333333333333332%; - } - .col-md-push-2 { - left: 16.666666666666664%; - } - .col-md-push-3 { - left: 25%; - } - .col-md-push-4 { - left: 33.33333333333333%; - } - .col-md-push-5 { - left: 41.66666666666667%; - } - .col-md-push-6 { - left: 50%; - } - .col-md-push-7 { - left: 58.333333333333336%; - } - .col-md-push-8 { - left: 66.66666666666666%; - } - .col-md-push-9 { - left: 75%; - } - .col-md-push-10 { - left: 83.33333333333334%; - } - .col-md-push-11 { - left: 91.66666666666666%; - } - .col-md-pull-0 { - right: auto; - } - .col-md-pull-1 { - right: 8.333333333333332%; - } - .col-md-pull-2 { - right: 16.666666666666664%; - } - .col-md-pull-3 { - right: 25%; - } - .col-md-pull-4 { - right: 33.33333333333333%; - } - .col-md-pull-5 { - right: 41.66666666666667%; - } - .col-md-pull-6 { - right: 50%; - } - .col-md-pull-7 { - right: 58.333333333333336%; - } - .col-md-pull-8 { - right: 66.66666666666666%; - } - .col-md-pull-9 { - right: 75%; - } - .col-md-pull-10 { - right: 83.33333333333334%; - } - .col-md-pull-11 { - right: 91.66666666666666%; - } - .col-md-offset-0 { - margin-left: 0; - } - .col-md-offset-1 { - margin-left: 8.333333333333332%; - } - .col-md-offset-2 { - margin-left: 16.666666666666664%; - } - .col-md-offset-3 { - margin-left: 25%; - } - .col-md-offset-4 { - margin-left: 33.33333333333333%; - } - .col-md-offset-5 { - margin-left: 41.66666666666667%; - } - .col-md-offset-6 { - margin-left: 50%; - } - .col-md-offset-7 { - margin-left: 58.333333333333336%; - } - .col-md-offset-8 { - margin-left: 66.66666666666666%; - } - .col-md-offset-9 { - margin-left: 75%; - } - .col-md-offset-10 { - margin-left: 83.33333333333334%; - } - .col-md-offset-11 { - margin-left: 91.66666666666666%; - } -} - -@media (min-width: 1200px) { - .container { - max-width: 1170px; - } - .col-lg-1, - .col-lg-2, - .col-lg-3, - .col-lg-4, - .col-lg-5, - .col-lg-6, - .col-lg-7, - .col-lg-8, - .col-lg-9, - .col-lg-10, - .col-lg-11 { - float: left; - } - .col-lg-1 { - width: 8.333333333333332%; - } - .col-lg-2 { - width: 16.666666666666664%; - } - .col-lg-3 { - width: 25%; - } - .col-lg-4 { - width: 33.33333333333333%; - } - .col-lg-5 { - width: 41.66666666666667%; - } - .col-lg-6 { - width: 50%; - } - .col-lg-7 { - width: 58.333333333333336%; - } - .col-lg-8 { - width: 66.66666666666666%; - } - .col-lg-9 { - width: 75%; - } - .col-lg-10 { - width: 83.33333333333334%; - } - .col-lg-11 { - width: 91.66666666666666%; - } - .col-lg-12 { - width: 100%; - } - .col-lg-push-0 { - left: auto; - } - .col-lg-push-1 { - left: 8.333333333333332%; - } - .col-lg-push-2 { - left: 16.666666666666664%; - } - .col-lg-push-3 { - left: 25%; - } - .col-lg-push-4 { - left: 33.33333333333333%; - } - .col-lg-push-5 { - left: 41.66666666666667%; - } - .col-lg-push-6 { - left: 50%; - } - .col-lg-push-7 { - left: 58.333333333333336%; - } - .col-lg-push-8 { - left: 66.66666666666666%; - } - .col-lg-push-9 { - left: 75%; - } - .col-lg-push-10 { - left: 83.33333333333334%; - } - .col-lg-push-11 { - left: 91.66666666666666%; - } - .col-lg-pull-0 { - right: auto; - } - .col-lg-pull-1 { - right: 8.333333333333332%; - } - .col-lg-pull-2 { - right: 16.666666666666664%; - } - .col-lg-pull-3 { - right: 25%; - } - .col-lg-pull-4 { - right: 33.33333333333333%; - } - .col-lg-pull-5 { - right: 41.66666666666667%; - } - .col-lg-pull-6 { - right: 50%; - } - .col-lg-pull-7 { - right: 58.333333333333336%; - } - .col-lg-pull-8 { - right: 66.66666666666666%; - } - .col-lg-pull-9 { - right: 75%; - } - .col-lg-pull-10 { - right: 83.33333333333334%; - } - .col-lg-pull-11 { - right: 91.66666666666666%; - } - .col-lg-offset-0 { - margin-left: 0; - } - .col-lg-offset-1 { - margin-left: 8.333333333333332%; - } - .col-lg-offset-2 { - margin-left: 16.666666666666664%; - } - .col-lg-offset-3 { - margin-left: 25%; - } - .col-lg-offset-4 { - margin-left: 33.33333333333333%; - } - .col-lg-offset-5 { - margin-left: 41.66666666666667%; - } - .col-lg-offset-6 { - margin-left: 50%; - } - .col-lg-offset-7 { - margin-left: 58.333333333333336%; - } - .col-lg-offset-8 { - margin-left: 66.66666666666666%; - } - .col-lg-offset-9 { - margin-left: 75%; - } - .col-lg-offset-10 { - margin-left: 83.33333333333334%; - } - .col-lg-offset-11 { - margin-left: 91.66666666666666%; - } -} - -table { - max-width: 100%; - background-color: transparent; -} - -th { - text-align: left; -} - -.table { - width: 100%; - margin-bottom: 20px; -} - -.table thead > tr > th, -.table tbody > tr > th, -.table tfoot > tr > th, -.table thead > tr > td, -.table tbody > tr > td, -.table tfoot > tr > td { - padding: 8px; - line-height: 1.428571429; - vertical-align: top; - border-top: 1px solid #dddddd; -} - -.table thead > tr > th { - vertical-align: bottom; - border-bottom: 2px solid #dddddd; -} - -.table caption + thead tr:first-child th, -.table colgroup + thead tr:first-child th, -.table thead:first-child tr:first-child th, -.table caption + thead tr:first-child td, -.table colgroup + thead tr:first-child td, -.table thead:first-child tr:first-child td { - border-top: 0; -} - -.table tbody + tbody { - border-top: 2px solid #dddddd; -} - -.table .table { - background-color: #ffffff; -} - -.table-condensed thead > tr > th, -.table-condensed tbody > tr > th, -.table-condensed tfoot > tr > th, -.table-condensed thead > tr > td, -.table-condensed tbody > tr > td, -.table-condensed tfoot > tr > td { - padding: 5px; -} - -.table-bordered { - border: 1px solid #dddddd; -} - -.table-bordered > thead > tr > th, -.table-bordered > tbody > tr > th, -.table-bordered > tfoot > tr > th, -.table-bordered > thead > tr > td, -.table-bordered > tbody > tr > td, -.table-bordered > tfoot > tr > td { - border: 1px solid #dddddd; -} - -.table-bordered > thead > tr > th, -.table-bordered > thead > tr > td { - border-bottom-width: 2px; -} - -.table-striped > tbody > tr:nth-child(odd) > td, -.table-striped > tbody > tr:nth-child(odd) > th { - background-color: #f9f9f9; -} - -.table-hover > tbody > tr:hover > td, -.table-hover > tbody > tr:hover > th { - background-color: #f5f5f5; -} - -table col[class*="col-"] { - display: table-column; - float: none; -} - -table td[class*="col-"], -table th[class*="col-"] { - display: table-cell; - float: none; -} - -.table > thead > tr > td.active, -.table > tbody > tr > td.active, -.table > tfoot > tr > td.active, -.table > thead > tr > th.active, -.table > tbody > tr > th.active, -.table > tfoot > tr > th.active, -.table > thead > tr.active > td, -.table > tbody > tr.active > td, -.table > tfoot > tr.active > td, -.table > thead > tr.active > th, -.table > tbody > tr.active > th, -.table > tfoot > tr.active > th { - background-color: #f5f5f5; -} - -.table > thead > tr > td.success, -.table > tbody > tr > td.success, -.table > tfoot > tr > td.success, -.table > thead > tr > th.success, -.table > tbody > tr > th.success, -.table > tfoot > tr > th.success, -.table > thead > tr.success > td, -.table > tbody > tr.success > td, -.table > tfoot > tr.success > td, -.table > thead > tr.success > th, -.table > tbody > tr.success > th, -.table > tfoot > tr.success > th { - background-color: #dff0d8; - border-color: #d6e9c6; -} - -.table-hover > tbody > tr > td.success:hover, -.table-hover > tbody > tr > th.success:hover, -.table-hover > tbody > tr.success:hover > td { - background-color: #d0e9c6; - border-color: #c9e2b3; -} - -.table > thead > tr > td.danger, -.table > tbody > tr > td.danger, -.table > tfoot > tr > td.danger, -.table > thead > tr > th.danger, -.table > tbody > tr > th.danger, -.table > tfoot > tr > th.danger, -.table > thead > tr.danger > td, -.table > tbody > tr.danger > td, -.table > tfoot > tr.danger > td, -.table > thead > tr.danger > th, -.table > tbody > tr.danger > th, -.table > tfoot > tr.danger > th { - background-color: #f2dede; - border-color: #eed3d7; -} - -.table-hover > tbody > tr > td.danger:hover, -.table-hover > tbody > tr > th.danger:hover, -.table-hover > tbody > tr.danger:hover > td { - background-color: #ebcccc; - border-color: #e6c1c7; -} - -.table > thead > tr > td.warning, -.table > tbody > tr > td.warning, -.table > tfoot > tr > td.warning, -.table > thead > tr > th.warning, -.table > tbody > tr > th.warning, -.table > tfoot > tr > th.warning, -.table > thead > tr.warning > td, -.table > tbody > tr.warning > td, -.table > tfoot > tr.warning > td, -.table > thead > tr.warning > th, -.table > tbody > tr.warning > th, -.table > tfoot > tr.warning > th { - background-color: #fcf8e3; - border-color: #fbeed5; -} - -.table-hover > tbody > tr > td.warning:hover, -.table-hover > tbody > tr > th.warning:hover, -.table-hover > tbody > tr.warning:hover > td { - background-color: #faf2cc; - border-color: #f8e5be; -} - -@media (max-width: 768px) { - .table-responsive { - width: 100%; - margin-bottom: 15px; - overflow-x: scroll; - overflow-y: hidden; - border: 1px solid #dddddd; - } - .table-responsive > .table { - margin-bottom: 0; - background-color: #fff; - } - .table-responsive > .table > thead > tr > th, - .table-responsive > .table > tbody > tr > th, - .table-responsive > .table > tfoot > tr > th, - .table-responsive > .table > thead > tr > td, - .table-responsive > .table > tbody > tr > td, - .table-responsive > .table > tfoot > tr > td { - white-space: nowrap; - } - .table-responsive > .table-bordered { - border: 0; - } - .table-responsive > .table-bordered > thead > tr > th:first-child, - .table-responsive > .table-bordered > tbody > tr > th:first-child, - .table-responsive > .table-bordered > tfoot > tr > th:first-child, - .table-responsive > .table-bordered > thead > tr > td:first-child, - .table-responsive > .table-bordered > tbody > tr > td:first-child, - .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; - } - .table-responsive > .table-bordered > thead > tr > th:last-child, - .table-responsive > .table-bordered > tbody > tr > th:last-child, - .table-responsive > .table-bordered > tfoot > tr > th:last-child, - .table-responsive > .table-bordered > thead > tr > td:last-child, - .table-responsive > .table-bordered > tbody > tr > td:last-child, - .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; - } - .table-responsive > .table-bordered > thead > tr:last-child > th, - .table-responsive > .table-bordered > tbody > tr:last-child > th, - .table-responsive > .table-bordered > tfoot > tr:last-child > th, - .table-responsive > .table-bordered > thead > tr:last-child > td, - .table-responsive > .table-bordered > tbody > tr:last-child > td, - .table-responsive > .table-bordered > tfoot > tr:last-child > td { - border-bottom: 0; - } -} - -fieldset { - padding: 0; - margin: 0; - border: 0; -} - -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: inherit; - color: #333333; - border: 0; - border-bottom: 1px solid #e5e5e5; -} - -label { - display: inline-block; - margin-bottom: 5px; - font-weight: bold; -} - -input[type="search"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; - /* IE8-9 */ - - line-height: normal; -} - -input[type="file"] { - display: block; -} - -select[multiple], -select[size] { - height: auto; -} - -select optgroup { - font-family: inherit; - font-size: inherit; - font-style: inherit; -} - -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -input[type="number"]::-webkit-outer-spin-button, -input[type="number"]::-webkit-inner-spin-button { - height: auto; -} - -.form-control:-moz-placeholder { - color: #999999; -} - -.form-control::-moz-placeholder { - color: #999999; -} - -.form-control:-ms-input-placeholder { - color: #999999; -} - -.form-control::-webkit-input-placeholder { - color: #999999; -} - -.form-control { - display: block; - width: 100%; - height: 34px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.428571429; - color: #555555; - vertical-align: middle; - background-color: #ffffff; - border: 1px solid #cccccc; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; - transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; -} - -.form-control:focus { - border-color: #66afe9; - outline: 0; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); -} - -.form-control[disabled], -.form-control[readonly], -fieldset[disabled] .form-control { - cursor: not-allowed; - background-color: #eeeeee; -} - -textarea.form-control { - height: auto; -} - -.form-group { - margin-bottom: 15px; -} - -.radio, -.checkbox { - display: block; - min-height: 20px; - padding-left: 20px; - margin-top: 10px; - margin-bottom: 10px; - vertical-align: middle; -} - -.radio label, -.checkbox label { - display: inline; - margin-bottom: 0; - font-weight: normal; - cursor: pointer; -} - -.radio input[type="radio"], -.radio-inline input[type="radio"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { - float: left; - margin-left: -20px; -} - -.radio + .radio, -.checkbox + .checkbox { - margin-top: -5px; -} - -.radio-inline, -.checkbox-inline { - display: inline-block; - padding-left: 20px; - margin-bottom: 0; - font-weight: normal; - vertical-align: middle; - cursor: pointer; -} - -.radio-inline + .radio-inline, -.checkbox-inline + .checkbox-inline { - margin-top: 0; - margin-left: 10px; -} - -input[type="radio"][disabled], -input[type="checkbox"][disabled], -.radio[disabled], -.radio-inline[disabled], -.checkbox[disabled], -.checkbox-inline[disabled], -fieldset[disabled] input[type="radio"], -fieldset[disabled] input[type="checkbox"], -fieldset[disabled] .radio, -fieldset[disabled] .radio-inline, -fieldset[disabled] .checkbox, -fieldset[disabled] .checkbox-inline { - cursor: not-allowed; -} - -.input-sm { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} - -select.input-sm { - height: 30px; - line-height: 30px; -} - -textarea.input-sm { - height: auto; -} - -.input-lg { - height: 45px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.33; - border-radius: 6px; -} - -select.input-lg { - height: 45px; - line-height: 45px; -} - -textarea.input-lg { - height: auto; -} - -.has-warning .help-block, -.has-warning .control-label { - color: #c09853; -} - -.has-warning .form-control { - border-color: #c09853; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.has-warning .form-control:focus { - border-color: #a47e3c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; -} - -.has-warning .input-group-addon { - color: #c09853; - background-color: #fcf8e3; - border-color: #c09853; -} - -.has-error .help-block, -.has-error .control-label { - color: #b94a48; -} - -.has-error .form-control { - border-color: #b94a48; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.has-error .form-control:focus { - border-color: #953b39; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; -} - -.has-error .input-group-addon { - color: #b94a48; - background-color: #f2dede; - border-color: #b94a48; -} - -.has-success .help-block, -.has-success .control-label { - color: #468847; -} - -.has-success .form-control { - border-color: #468847; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.has-success .form-control:focus { - border-color: #356635; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; -} - -.has-success .input-group-addon { - color: #468847; - background-color: #dff0d8; - border-color: #468847; -} - -.form-control-static { - padding-top: 7px; - margin-bottom: 0; -} - -.help-block { - display: block; - margin-top: 5px; - margin-bottom: 10px; - color: #737373; -} - -@media (min-width: 768px) { - .form-inline .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .form-control { - display: inline-block; - } - .form-inline .radio, - .form-inline .checkbox { - display: inline-block; - padding-left: 0; - margin-top: 0; - margin-bottom: 0; - } - .form-inline .radio input[type="radio"], - .form-inline .checkbox input[type="checkbox"] { - float: none; - margin-left: 0; - } -} - -.form-horizontal .control-label, -.form-horizontal .radio, -.form-horizontal .checkbox, -.form-horizontal .radio-inline, -.form-horizontal .checkbox-inline { - padding-top: 7px; - margin-top: 0; - margin-bottom: 0; -} - -.form-horizontal .form-group { - margin-right: -15px; - margin-left: -15px; -} - -.form-horizontal .form-group:before, -.form-horizontal .form-group:after { - display: table; - content: " "; -} - -.form-horizontal .form-group:after { - clear: both; -} - -.form-horizontal .form-group:before, -.form-horizontal .form-group:after { - display: table; - content: " "; -} - -.form-horizontal .form-group:after { - clear: both; -} - -@media (min-width: 768px) { - .form-horizontal .control-label { - text-align: right; - } -} - -.btn { - display: inline-block; - padding: 6px 12px; - margin-bottom: 0; - font-size: 14px; - font-weight: normal; - line-height: 1.428571429; - text-align: center; - white-space: nowrap; - vertical-align: middle; - cursor: pointer; - border: 1px solid transparent; - border-radius: 4px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - -o-user-select: none; - user-select: none; -} - -.btn:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -.btn:hover, -.btn:focus { - color: #333333; - text-decoration: none; -} - -.btn:active, -.btn.active { - background-image: none; - outline: 0; - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} - -.btn.disabled, -.btn[disabled], -fieldset[disabled] .btn { - pointer-events: none; - cursor: not-allowed; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - box-shadow: none; -} - -.btn-default { - color: #333333; - background-color: #ffffff; - border-color: #cccccc; -} - -.btn-default:hover, -.btn-default:focus, -.btn-default:active, -.btn-default.active, -.open .dropdown-toggle.btn-default { - color: #333333; - background-color: #ebebeb; - border-color: #adadad; -} - -.btn-default:active, -.btn-default.active, -.open .dropdown-toggle.btn-default { - background-image: none; -} - -.btn-default.disabled, -.btn-default[disabled], -fieldset[disabled] .btn-default, -.btn-default.disabled:hover, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default:hover, -.btn-default.disabled:focus, -.btn-default[disabled]:focus, -fieldset[disabled] .btn-default:focus, -.btn-default.disabled:active, -.btn-default[disabled]:active, -fieldset[disabled] .btn-default:active, -.btn-default.disabled.active, -.btn-default[disabled].active, -fieldset[disabled] .btn-default.active { - background-color: #ffffff; - border-color: #cccccc; -} - -.btn-primary { - color: #ffffff; - background-color: #428bca; - border-color: #357ebd; -} - -.btn-primary:hover, -.btn-primary:focus, -.btn-primary:active, -.btn-primary.active, -.open .dropdown-toggle.btn-primary { - color: #ffffff; - background-color: #3276b1; - border-color: #285e8e; -} - -.btn-primary:active, -.btn-primary.active, -.open .dropdown-toggle.btn-primary { - background-image: none; -} - -.btn-primary.disabled, -.btn-primary[disabled], -fieldset[disabled] .btn-primary, -.btn-primary.disabled:hover, -.btn-primary[disabled]:hover, -fieldset[disabled] .btn-primary:hover, -.btn-primary.disabled:focus, -.btn-primary[disabled]:focus, -fieldset[disabled] .btn-primary:focus, -.btn-primary.disabled:active, -.btn-primary[disabled]:active, -fieldset[disabled] .btn-primary:active, -.btn-primary.disabled.active, -.btn-primary[disabled].active, -fieldset[disabled] .btn-primary.active { - background-color: #428bca; - border-color: #357ebd; -} - -.btn-warning { - color: #ffffff; - background-color: #f0ad4e; - border-color: #eea236; -} - -.btn-warning:hover, -.btn-warning:focus, -.btn-warning:active, -.btn-warning.active, -.open .dropdown-toggle.btn-warning { - color: #ffffff; - background-color: #ed9c28; - border-color: #d58512; -} - -.btn-warning:active, -.btn-warning.active, -.open .dropdown-toggle.btn-warning { - background-image: none; -} - -.btn-warning.disabled, -.btn-warning[disabled], -fieldset[disabled] .btn-warning, -.btn-warning.disabled:hover, -.btn-warning[disabled]:hover, -fieldset[disabled] .btn-warning:hover, -.btn-warning.disabled:focus, -.btn-warning[disabled]:focus, -fieldset[disabled] .btn-warning:focus, -.btn-warning.disabled:active, -.btn-warning[disabled]:active, -fieldset[disabled] .btn-warning:active, -.btn-warning.disabled.active, -.btn-warning[disabled].active, -fieldset[disabled] .btn-warning.active { - background-color: #f0ad4e; - border-color: #eea236; -} - -.btn-danger { - color: #ffffff; - background-color: #d9534f; - border-color: #d43f3a; -} - -.btn-danger:hover, -.btn-danger:focus, -.btn-danger:active, -.btn-danger.active, -.open .dropdown-toggle.btn-danger { - color: #ffffff; - background-color: #d2322d; - border-color: #ac2925; -} - -.btn-danger:active, -.btn-danger.active, -.open .dropdown-toggle.btn-danger { - background-image: none; -} - -.btn-danger.disabled, -.btn-danger[disabled], -fieldset[disabled] .btn-danger, -.btn-danger.disabled:hover, -.btn-danger[disabled]:hover, -fieldset[disabled] .btn-danger:hover, -.btn-danger.disabled:focus, -.btn-danger[disabled]:focus, -fieldset[disabled] .btn-danger:focus, -.btn-danger.disabled:active, -.btn-danger[disabled]:active, -fieldset[disabled] .btn-danger:active, -.btn-danger.disabled.active, -.btn-danger[disabled].active, -fieldset[disabled] .btn-danger.active { - background-color: #d9534f; - border-color: #d43f3a; -} - -.btn-success { - color: #ffffff; - background-color: #5cb85c; - border-color: #4cae4c; -} - -.btn-success:hover, -.btn-success:focus, -.btn-success:active, -.btn-success.active, -.open .dropdown-toggle.btn-success { - color: #ffffff; - background-color: #47a447; - border-color: #398439; -} - -.btn-success:active, -.btn-success.active, -.open .dropdown-toggle.btn-success { - background-image: none; -} - -.btn-success.disabled, -.btn-success[disabled], -fieldset[disabled] .btn-success, -.btn-success.disabled:hover, -.btn-success[disabled]:hover, -fieldset[disabled] .btn-success:hover, -.btn-success.disabled:focus, -.btn-success[disabled]:focus, -fieldset[disabled] .btn-success:focus, -.btn-success.disabled:active, -.btn-success[disabled]:active, -fieldset[disabled] .btn-success:active, -.btn-success.disabled.active, -.btn-success[disabled].active, -fieldset[disabled] .btn-success.active { - background-color: #5cb85c; - border-color: #4cae4c; -} - -.btn-info { - color: #ffffff; - background-color: #5bc0de; - border-color: #46b8da; -} - -.btn-info:hover, -.btn-info:focus, -.btn-info:active, -.btn-info.active, -.open .dropdown-toggle.btn-info { - color: #ffffff; - background-color: #39b3d7; - border-color: #269abc; -} - -.btn-info:active, -.btn-info.active, -.open .dropdown-toggle.btn-info { - background-image: none; -} - -.btn-info.disabled, -.btn-info[disabled], -fieldset[disabled] .btn-info, -.btn-info.disabled:hover, -.btn-info[disabled]:hover, -fieldset[disabled] .btn-info:hover, -.btn-info.disabled:focus, -.btn-info[disabled]:focus, -fieldset[disabled] .btn-info:focus, -.btn-info.disabled:active, -.btn-info[disabled]:active, -fieldset[disabled] .btn-info:active, -.btn-info.disabled.active, -.btn-info[disabled].active, -fieldset[disabled] .btn-info.active { - background-color: #5bc0de; - border-color: #46b8da; -} - -.btn-link { - font-weight: normal; - color: #428bca; - cursor: pointer; - border-radius: 0; -} - -.btn-link, -.btn-link:active, -.btn-link[disabled], -fieldset[disabled] .btn-link { - background-color: transparent; - -webkit-box-shadow: none; - box-shadow: none; -} - -.btn-link, -.btn-link:hover, -.btn-link:focus, -.btn-link:active { - border-color: transparent; -} - -.btn-link:hover, -.btn-link:focus { - color: #2a6496; - text-decoration: underline; - background-color: transparent; -} - -.btn-link[disabled]:hover, -fieldset[disabled] .btn-link:hover, -.btn-link[disabled]:focus, -fieldset[disabled] .btn-link:focus { - color: #999999; - text-decoration: none; -} - -.btn-lg { - padding: 10px 16px; - font-size: 18px; - line-height: 1.33; - border-radius: 6px; -} - -.btn-sm, -.btn-xs { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} - -.btn-xs { - padding: 1px 5px; -} - -.btn-block { - display: block; - width: 100%; - padding-right: 0; - padding-left: 0; -} - -.btn-block + .btn-block { - margin-top: 5px; -} - -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} - -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} - -.fade.in { - opacity: 1; -} - -.collapse { - display: none; -} - -.collapse.in { - display: block; -} - -.collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition: height 0.35s ease; - transition: height 0.35s ease; -} - -@font-face { - font-family: 'Glyphicons Halflings'; - src: url('../fonts/glyphicons-halflings-regular.eot'); - src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg'); -} - -.glyphicon { - position: relative; - top: 1px; - display: inline-block; - font-family: 'Glyphicons Halflings'; - -webkit-font-smoothing: antialiased; - font-style: normal; - font-weight: normal; - line-height: 1; -} - -.glyphicon-asterisk:before { - content: "\2a"; -} - -.glyphicon-plus:before { - content: "\2b"; -} - -.glyphicon-euro:before { - content: "\20ac"; -} - -.glyphicon-minus:before { - content: "\2212"; -} - -.glyphicon-cloud:before { - content: "\2601"; -} - -.glyphicon-envelope:before { - content: "\2709"; -} - -.glyphicon-pencil:before { - content: "\270f"; -} - -.glyphicon-glass:before { - content: "\e001"; -} - -.glyphicon-music:before { - content: "\e002"; -} - -.glyphicon-search:before { - content: "\e003"; -} - -.glyphicon-heart:before { - content: "\e005"; -} - -.glyphicon-star:before { - content: "\e006"; -} - -.glyphicon-star-empty:before { - content: "\e007"; -} - -.glyphicon-user:before { - content: "\e008"; -} - -.glyphicon-film:before { - content: "\e009"; -} - -.glyphicon-th-large:before { - content: "\e010"; -} - -.glyphicon-th:before { - content: "\e011"; -} - -.glyphicon-th-list:before { - content: "\e012"; -} - -.glyphicon-ok:before { - content: "\e013"; -} - -.glyphicon-remove:before { - content: "\e014"; -} - -.glyphicon-zoom-in:before { - content: "\e015"; -} - -.glyphicon-zoom-out:before { - content: "\e016"; -} - -.glyphicon-off:before { - content: "\e017"; -} - -.glyphicon-signal:before { - content: "\e018"; -} - -.glyphicon-cog:before { - content: "\e019"; -} - -.glyphicon-trash:before { - content: "\e020"; -} - -.glyphicon-home:before { - content: "\e021"; -} - -.glyphicon-file:before { - content: "\e022"; -} - -.glyphicon-time:before { - content: "\e023"; -} - -.glyphicon-road:before { - content: "\e024"; -} - -.glyphicon-download-alt:before { - content: "\e025"; -} - -.glyphicon-download:before { - content: "\e026"; -} - -.glyphicon-upload:before { - content: "\e027"; -} - -.glyphicon-inbox:before { - content: "\e028"; -} - -.glyphicon-play-circle:before { - content: "\e029"; -} - -.glyphicon-repeat:before { - content: "\e030"; -} - -.glyphicon-refresh:before { - content: "\e031"; -} - -.glyphicon-list-alt:before { - content: "\e032"; -} - -.glyphicon-flag:before { - content: "\e034"; -} - -.glyphicon-headphones:before { - content: "\e035"; -} - -.glyphicon-volume-off:before { - content: "\e036"; -} - -.glyphicon-volume-down:before { - content: "\e037"; -} - -.glyphicon-volume-up:before { - content: "\e038"; -} - -.glyphicon-qrcode:before { - content: "\e039"; -} - -.glyphicon-barcode:before { - content: "\e040"; -} - -.glyphicon-tag:before { - content: "\e041"; -} - -.glyphicon-tags:before { - content: "\e042"; -} - -.glyphicon-book:before { - content: "\e043"; -} - -.glyphicon-print:before { - content: "\e045"; -} - -.glyphicon-font:before { - content: "\e047"; -} - -.glyphicon-bold:before { - content: "\e048"; -} - -.glyphicon-italic:before { - content: "\e049"; -} - -.glyphicon-text-height:before { - content: "\e050"; -} - -.glyphicon-text-width:before { - content: "\e051"; -} - -.glyphicon-align-left:before { - content: "\e052"; -} - -.glyphicon-align-center:before { - content: "\e053"; -} - -.glyphicon-align-right:before { - content: "\e054"; -} - -.glyphicon-align-justify:before { - content: "\e055"; -} - -.glyphicon-list:before { - content: "\e056"; -} - -.glyphicon-indent-left:before { - content: "\e057"; -} - -.glyphicon-indent-right:before { - content: "\e058"; -} - -.glyphicon-facetime-video:before { - content: "\e059"; -} - -.glyphicon-picture:before { - content: "\e060"; -} - -.glyphicon-map-marker:before { - content: "\e062"; -} - -.glyphicon-adjust:before { - content: "\e063"; -} - -.glyphicon-tint:before { - content: "\e064"; -} - -.glyphicon-edit:before { - content: "\e065"; -} - -.glyphicon-share:before { - content: "\e066"; -} - -.glyphicon-check:before { - content: "\e067"; -} - -.glyphicon-move:before { - content: "\e068"; -} - -.glyphicon-step-backward:before { - content: "\e069"; -} - -.glyphicon-fast-backward:before { - content: "\e070"; -} - -.glyphicon-backward:before { - content: "\e071"; -} - -.glyphicon-play:before { - content: "\e072"; -} - -.glyphicon-pause:before { - content: "\e073"; -} - -.glyphicon-stop:before { - content: "\e074"; -} - -.glyphicon-forward:before { - content: "\e075"; -} - -.glyphicon-fast-forward:before { - content: "\e076"; -} - -.glyphicon-step-forward:before { - content: "\e077"; -} - -.glyphicon-eject:before { - content: "\e078"; -} - -.glyphicon-chevron-left:before { - content: "\e079"; -} - -.glyphicon-chevron-right:before { - content: "\e080"; -} - -.glyphicon-plus-sign:before { - content: "\e081"; -} - -.glyphicon-minus-sign:before { - content: "\e082"; -} - -.glyphicon-remove-sign:before { - content: "\e083"; -} - -.glyphicon-ok-sign:before { - content: "\e084"; -} - -.glyphicon-question-sign:before { - content: "\e085"; -} - -.glyphicon-info-sign:before { - content: "\e086"; -} - -.glyphicon-screenshot:before { - content: "\e087"; -} - -.glyphicon-remove-circle:before { - content: "\e088"; -} - -.glyphicon-ok-circle:before { - content: "\e089"; -} - -.glyphicon-ban-circle:before { - content: "\e090"; -} - -.glyphicon-arrow-left:before { - content: "\e091"; -} - -.glyphicon-arrow-right:before { - content: "\e092"; -} - -.glyphicon-arrow-up:before { - content: "\e093"; -} - -.glyphicon-arrow-down:before { - content: "\e094"; -} - -.glyphicon-share-alt:before { - content: "\e095"; -} - -.glyphicon-resize-full:before { - content: "\e096"; -} - -.glyphicon-resize-small:before { - content: "\e097"; -} - -.glyphicon-exclamation-sign:before { - content: "\e101"; -} - -.glyphicon-gift:before { - content: "\e102"; -} - -.glyphicon-leaf:before { - content: "\e103"; -} - -.glyphicon-eye-open:before { - content: "\e105"; -} - -.glyphicon-eye-close:before { - content: "\e106"; -} - -.glyphicon-warning-sign:before { - content: "\e107"; -} - -.glyphicon-plane:before { - content: "\e108"; -} - -.glyphicon-random:before { - content: "\e110"; -} - -.glyphicon-comment:before { - content: "\e111"; -} - -.glyphicon-magnet:before { - content: "\e112"; -} - -.glyphicon-chevron-up:before { - content: "\e113"; -} - -.glyphicon-chevron-down:before { - content: "\e114"; -} - -.glyphicon-retweet:before { - content: "\e115"; -} - -.glyphicon-shopping-cart:before { - content: "\e116"; -} - -.glyphicon-folder-close:before { - content: "\e117"; -} - -.glyphicon-folder-open:before { - content: "\e118"; -} - -.glyphicon-resize-vertical:before { - content: "\e119"; -} - -.glyphicon-resize-horizontal:before { - content: "\e120"; -} - -.glyphicon-hdd:before { - content: "\e121"; -} - -.glyphicon-bullhorn:before { - content: "\e122"; -} - -.glyphicon-certificate:before { - content: "\e124"; -} - -.glyphicon-thumbs-up:before { - content: "\e125"; -} - -.glyphicon-thumbs-down:before { - content: "\e126"; -} - -.glyphicon-hand-right:before { - content: "\e127"; -} - -.glyphicon-hand-left:before { - content: "\e128"; -} - -.glyphicon-hand-up:before { - content: "\e129"; -} - -.glyphicon-hand-down:before { - content: "\e130"; -} - -.glyphicon-circle-arrow-right:before { - content: "\e131"; -} - -.glyphicon-circle-arrow-left:before { - content: "\e132"; -} - -.glyphicon-circle-arrow-up:before { - content: "\e133"; -} - -.glyphicon-circle-arrow-down:before { - content: "\e134"; -} - -.glyphicon-globe:before { - content: "\e135"; -} - -.glyphicon-tasks:before { - content: "\e137"; -} - -.glyphicon-filter:before { - content: "\e138"; -} - -.glyphicon-fullscreen:before { - content: "\e140"; -} - -.glyphicon-dashboard:before { - content: "\e141"; -} - -.glyphicon-heart-empty:before { - content: "\e143"; -} - -.glyphicon-link:before { - content: "\e144"; -} - -.glyphicon-phone:before { - content: "\e145"; -} - -.glyphicon-usd:before { - content: "\e148"; -} - -.glyphicon-gbp:before { - content: "\e149"; -} - -.glyphicon-sort:before { - content: "\e150"; -} - -.glyphicon-sort-by-alphabet:before { - content: "\e151"; -} - -.glyphicon-sort-by-alphabet-alt:before { - content: "\e152"; -} - -.glyphicon-sort-by-order:before { - content: "\e153"; -} - -.glyphicon-sort-by-order-alt:before { - content: "\e154"; -} - -.glyphicon-sort-by-attributes:before { - content: "\e155"; -} - -.glyphicon-sort-by-attributes-alt:before { - content: "\e156"; -} - -.glyphicon-unchecked:before { - content: "\e157"; -} - -.glyphicon-expand:before { - content: "\e158"; -} - -.glyphicon-collapse-down:before { - content: "\e159"; -} - -.glyphicon-collapse-up:before { - content: "\e160"; -} - -.glyphicon-log-in:before { - content: "\e161"; -} - -.glyphicon-flash:before { - content: "\e162"; -} - -.glyphicon-log-out:before { - content: "\e163"; -} - -.glyphicon-new-window:before { - content: "\e164"; -} - -.glyphicon-record:before { - content: "\e165"; -} - -.glyphicon-save:before { - content: "\e166"; -} - -.glyphicon-open:before { - content: "\e167"; -} - -.glyphicon-saved:before { - content: "\e168"; -} - -.glyphicon-import:before { - content: "\e169"; -} - -.glyphicon-export:before { - content: "\e170"; -} - -.glyphicon-send:before { - content: "\e171"; -} - -.glyphicon-floppy-disk:before { - content: "\e172"; -} - -.glyphicon-floppy-saved:before { - content: "\e173"; -} - -.glyphicon-floppy-remove:before { - content: "\e174"; -} - -.glyphicon-floppy-save:before { - content: "\e175"; -} - -.glyphicon-floppy-open:before { - content: "\e176"; -} - -.glyphicon-credit-card:before { - content: "\e177"; -} - -.glyphicon-transfer:before { - content: "\e178"; -} - -.glyphicon-cutlery:before { - content: "\e179"; -} - -.glyphicon-header:before { - content: "\e180"; -} - -.glyphicon-compressed:before { - content: "\e181"; -} - -.glyphicon-earphone:before { - content: "\e182"; -} - -.glyphicon-phone-alt:before { - content: "\e183"; -} - -.glyphicon-tower:before { - content: "\e184"; -} - -.glyphicon-stats:before { - content: "\e185"; -} - -.glyphicon-sd-video:before { - content: "\e186"; -} - -.glyphicon-hd-video:before { - content: "\e187"; -} - -.glyphicon-subtitles:before { - content: "\e188"; -} - -.glyphicon-sound-stereo:before { - content: "\e189"; -} - -.glyphicon-sound-dolby:before { - content: "\e190"; -} - -.glyphicon-sound-5-1:before { - content: "\e191"; -} - -.glyphicon-sound-6-1:before { - content: "\e192"; -} - -.glyphicon-sound-7-1:before { - content: "\e193"; -} - -.glyphicon-copyright-mark:before { - content: "\e194"; -} - -.glyphicon-registration-mark:before { - content: "\e195"; -} - -.glyphicon-cloud-download:before { - content: "\e197"; -} - -.glyphicon-cloud-upload:before { - content: "\e198"; -} - -.glyphicon-tree-conifer:before { - content: "\e199"; -} - -.glyphicon-tree-deciduous:before { - content: "\e200"; -} - -.glyphicon-briefcase:before { - content: "\1f4bc"; -} - -.glyphicon-calendar:before { - content: "\1f4c5"; -} - -.glyphicon-pushpin:before { - content: "\1f4cc"; -} - -.glyphicon-paperclip:before { - content: "\1f4ce"; -} - -.glyphicon-camera:before { - content: "\1f4f7"; -} - -.glyphicon-lock:before { - content: "\1f512"; -} - -.glyphicon-bell:before { - content: "\1f514"; -} - -.glyphicon-bookmark:before { - content: "\1f516"; -} - -.glyphicon-fire:before { - content: "\1f525"; -} - -.glyphicon-wrench:before { - content: "\1f527"; -} - -.caret { - display: inline-block; - width: 0; - height: 0; - margin-left: 2px; - vertical-align: middle; - border-top: 4px solid #000000; - border-right: 4px solid transparent; - border-bottom: 0 dotted; - border-left: 4px solid transparent; - content: ""; -} - -.dropdown { - position: relative; -} - -.dropdown-toggle:focus { - outline: 0; -} - -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - font-size: 14px; - list-style: none; - background-color: #ffffff; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.15); - border-radius: 4px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - background-clip: padding-box; -} - -.dropdown-menu.pull-right { - right: 0; - left: auto; -} - -.dropdown-menu .divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} - -.dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 1.428571429; - color: #333333; - white-space: nowrap; -} - -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - color: #ffffff; - text-decoration: none; - background-color: #428bca; -} - -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: #ffffff; - text-decoration: none; - background-color: #428bca; - outline: 0; -} - -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #999999; -} - -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - cursor: not-allowed; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.open > .dropdown-menu { - display: block; -} - -.open > a { - outline: 0; -} - -.dropdown-header { - display: block; - padding: 3px 20px; - font-size: 12px; - line-height: 1.428571429; - color: #999999; -} - -.dropdown-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 990; -} - -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} - -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0 dotted; - border-bottom: 4px solid #000000; - content: ""; -} - -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; -} - -@media (min-width: 768px) { - .navbar-right .dropdown-menu { - right: 0; - left: auto; - } -} - -.btn-default .caret { - border-top-color: #333333; -} - -.btn-primary .caret, -.btn-success .caret, -.btn-warning .caret, -.btn-danger .caret, -.btn-info .caret { - border-top-color: #fff; -} - -.dropup .btn-default .caret { - border-bottom-color: #333333; -} - -.dropup .btn-primary .caret, -.dropup .btn-success .caret, -.dropup .btn-warning .caret, -.dropup .btn-danger .caret, -.dropup .btn-info .caret { - border-bottom-color: #fff; -} - -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-block; - vertical-align: middle; -} - -.btn-group > .btn, -.btn-group-vertical > .btn { - position: relative; - float: left; -} - -.btn-group > .btn:hover, -.btn-group-vertical > .btn:hover, -.btn-group > .btn:focus, -.btn-group-vertical > .btn:focus, -.btn-group > .btn:active, -.btn-group-vertical > .btn:active, -.btn-group > .btn.active, -.btn-group-vertical > .btn.active { - z-index: 2; -} - -.btn-group > .btn:focus, -.btn-group-vertical > .btn:focus { - outline: none; -} - -.btn-group .btn + .btn, -.btn-group .btn + .btn-group, -.btn-group .btn-group + .btn, -.btn-group .btn-group + .btn-group { - margin-left: -1px; -} - -.btn-toolbar:before, -.btn-toolbar:after { - display: table; - content: " "; -} - -.btn-toolbar:after { - clear: both; -} - -.btn-toolbar:before, -.btn-toolbar:after { - display: table; - content: " "; -} - -.btn-toolbar:after { - clear: both; -} - -.btn-toolbar .btn-group { - float: left; -} - -.btn-toolbar > .btn + .btn, -.btn-toolbar > .btn-group + .btn, -.btn-toolbar > .btn + .btn-group, -.btn-toolbar > .btn-group + .btn-group { - margin-left: 5px; -} - -.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0; -} - -.btn-group > .btn:first-child { - margin-left: 0; -} - -.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.btn-group > .btn:last-child:not(:first-child), -.btn-group > .dropdown-toggle:not(:first-child) { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} - -.btn-group > .btn-group { - float: left; -} - -.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} - -.btn-group > .btn-group:first-child > .btn:last-child, -.btn-group > .btn-group:first-child > .dropdown-toggle { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.btn-group > .btn-group:last-child > .btn:first-child { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} - -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} - -.btn-group-xs > .btn { - padding: 5px 10px; - padding: 1px 5px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} - -.btn-group-sm > .btn { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} - -.btn-group-lg > .btn { - padding: 10px 16px; - font-size: 18px; - line-height: 1.33; - border-radius: 6px; -} - -.btn-group > .btn + .dropdown-toggle { - padding-right: 8px; - padding-left: 8px; -} - -.btn-group > .btn-lg + .dropdown-toggle { - padding-right: 12px; - padding-left: 12px; -} - -.btn-group.open .dropdown-toggle { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} - -.btn .caret { - margin-left: 0; -} - -.btn-lg .caret { - border-width: 5px 5px 0; - border-bottom-width: 0; -} - -.dropup .btn-lg .caret { - border-width: 0 5px 5px; -} - -.btn-group-vertical > .btn, -.btn-group-vertical > .btn-group { - display: block; - float: none; - width: 100%; - max-width: 100%; -} - -.btn-group-vertical > .btn-group:before, -.btn-group-vertical > .btn-group:after { - display: table; - content: " "; -} - -.btn-group-vertical > .btn-group:after { - clear: both; -} - -.btn-group-vertical > .btn-group:before, -.btn-group-vertical > .btn-group:after { - display: table; - content: " "; -} - -.btn-group-vertical > .btn-group:after { - clear: both; -} - -.btn-group-vertical > .btn-group > .btn { - float: none; -} - -.btn-group-vertical > .btn + .btn, -.btn-group-vertical > .btn + .btn-group, -.btn-group-vertical > .btn-group + .btn, -.btn-group-vertical > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; -} - -.btn-group-vertical > .btn:not(:first-child):not(:last-child) { - border-radius: 0; -} - -.btn-group-vertical > .btn:first-child:not(:last-child) { - border-top-right-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} - -.btn-group-vertical > .btn:last-child:not(:first-child) { - border-top-right-radius: 0; - border-bottom-left-radius: 4px; - border-top-left-radius: 0; -} - -.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} - -.btn-group-vertical > .btn-group:first-child > .btn:last-child, -.btn-group-vertical > .btn-group:first-child > .dropdown-toggle { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} - -.btn-group-vertical > .btn-group:last-child > .btn:first-child { - border-top-right-radius: 0; - border-top-left-radius: 0; -} - -.btn-group-justified { - display: table; - width: 100%; - border-collapse: separate; - table-layout: fixed; -} - -.btn-group-justified .btn { - display: table-cell; - float: none; - width: 1%; -} - -[data-toggle="buttons"] > .btn > input[type="radio"], -[data-toggle="buttons"] > .btn > input[type="checkbox"] { - display: none; -} - -.input-group { - position: relative; - display: table; - border-collapse: separate; -} - -.input-group.col { - float: none; - padding-right: 0; - padding-left: 0; -} - -.input-group .form-control { - width: 100%; - margin-bottom: 0; -} - -.input-group-lg > .form-control, -.input-group-lg > .input-group-addon, -.input-group-lg > .input-group-btn > .btn { - height: 45px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.33; - border-radius: 6px; -} - -select.input-group-lg > .form-control, -select.input-group-lg > .input-group-addon, -select.input-group-lg > .input-group-btn > .btn { - height: 45px; - line-height: 45px; -} - -textarea.input-group-lg > .form-control, -textarea.input-group-lg > .input-group-addon, -textarea.input-group-lg > .input-group-btn > .btn { - height: auto; -} - -.input-group-sm > .form-control, -.input-group-sm > .input-group-addon, -.input-group-sm > .input-group-btn > .btn { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} - -select.input-group-sm > .form-control, -select.input-group-sm > .input-group-addon, -select.input-group-sm > .input-group-btn > .btn { - height: 30px; - line-height: 30px; -} - -textarea.input-group-sm > .form-control, -textarea.input-group-sm > .input-group-addon, -textarea.input-group-sm > .input-group-btn > .btn { - height: auto; -} - -.input-group-addon, -.input-group-btn, -.input-group .form-control { - display: table-cell; -} - -.input-group-addon:not(:first-child):not(:last-child), -.input-group-btn:not(:first-child):not(:last-child), -.input-group .form-control:not(:first-child):not(:last-child) { - border-radius: 0; -} - -.input-group-addon, -.input-group-btn { - width: 1%; - white-space: nowrap; - vertical-align: middle; -} - -.input-group-addon { - padding: 6px 12px; - font-size: 14px; - font-weight: normal; - line-height: 1; - text-align: center; - background-color: #eeeeee; - border: 1px solid #cccccc; - border-radius: 4px; -} - -.input-group-addon.input-sm { - padding: 5px 10px; - font-size: 12px; - border-radius: 3px; -} - -.input-group-addon.input-lg { - padding: 10px 16px; - font-size: 18px; - border-radius: 6px; -} - -.input-group-addon input[type="radio"], -.input-group-addon input[type="checkbox"] { - margin-top: 0; -} - -.input-group .form-control:first-child, -.input-group-addon:first-child, -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .dropdown-toggle, -.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.input-group-addon:first-child { - border-right: 0; -} - -.input-group .form-control:last-child, -.input-group-addon:last-child, -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .dropdown-toggle, -.input-group-btn:first-child > .btn:not(:first-child) { - border-bottom-left-radius: 0; - border-top-left-radius: 0; -} - -.input-group-addon:last-child { - border-left: 0; -} - -.input-group-btn { - position: relative; - white-space: nowrap; -} - -.input-group-btn > .btn { - position: relative; -} - -.input-group-btn > .btn + .btn { - margin-left: -4px; -} - -.input-group-btn > .btn:hover, -.input-group-btn > .btn:active { - z-index: 2; -} - -.nav { - padding-left: 0; - margin-bottom: 0; - list-style: none; -} - -.nav:before, -.nav:after { - display: table; - content: " "; -} - -.nav:after { - clear: both; -} - -.nav:before, -.nav:after { - display: table; - content: " "; -} - -.nav:after { - clear: both; -} - -.nav > li { - position: relative; - display: block; -} - -.nav > li > a { - position: relative; - display: block; - padding: 10px 15px; -} - -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #eeeeee; -} - -.nav > li.disabled > a { - color: #999999; -} - -.nav > li.disabled > a:hover, -.nav > li.disabled > a:focus { - color: #999999; - text-decoration: none; - cursor: not-allowed; - background-color: transparent; -} - -.nav .open > a, -.nav .open > a:hover, -.nav .open > a:focus { - background-color: #eeeeee; - border-color: #428bca; -} - -.nav .nav-divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} - -.nav > li > a > img { - max-width: none; -} - -.nav-tabs { - border-bottom: 1px solid #dddddd; -} - -.nav-tabs > li { - float: left; - margin-bottom: -1px; -} - -.nav-tabs > li > a { - margin-right: 2px; - line-height: 1.428571429; - border: 1px solid transparent; - border-radius: 4px 4px 0 0; -} - -.nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #dddddd; -} - -.nav-tabs > li.active > a, -.nav-tabs > li.active > a:hover, -.nav-tabs > li.active > a:focus { - color: #555555; - cursor: default; - background-color: #ffffff; - border: 1px solid #dddddd; - border-bottom-color: transparent; -} - -.nav-tabs.nav-justified { - width: 100%; - border-bottom: 0; -} - -.nav-tabs.nav-justified > li { - float: none; -} - -.nav-tabs.nav-justified > li > a { - text-align: center; -} - -@media (min-width: 768px) { - .nav-tabs.nav-justified > li { - display: table-cell; - width: 1%; - } -} - -.nav-tabs.nav-justified > li > a { - margin-right: 0; - border-bottom: 1px solid #dddddd; -} - -.nav-tabs.nav-justified > .active > a { - border-bottom-color: #ffffff; -} - -.nav-pills > li { - float: left; -} - -.nav-pills > li > a { - border-radius: 5px; -} - -.nav-pills > li + li { - margin-left: 2px; -} - -.nav-pills > li.active > a, -.nav-pills > li.active > a:hover, -.nav-pills > li.active > a:focus { - color: #ffffff; - background-color: #428bca; -} - -.nav-stacked > li { - float: none; -} - -.nav-stacked > li + li { - margin-top: 2px; - margin-left: 0; -} - -.nav-justified { - width: 100%; -} - -.nav-justified > li { - float: none; -} - -.nav-justified > li > a { - text-align: center; -} - -@media (min-width: 768px) { - .nav-justified > li { - display: table-cell; - width: 1%; - } -} - -.nav-tabs-justified { - border-bottom: 0; -} - -.nav-tabs-justified > li > a { - margin-right: 0; - border-bottom: 1px solid #dddddd; -} - -.nav-tabs-justified > .active > a { - border-bottom-color: #ffffff; -} - -.tabbable:before, -.tabbable:after { - display: table; - content: " "; -} - -.tabbable:after { - clear: both; -} - -.tabbable:before, -.tabbable:after { - display: table; - content: " "; -} - -.tabbable:after { - clear: both; -} - -.tab-content > .tab-pane, -.pill-content > .pill-pane { - display: none; -} - -.tab-content > .active, -.pill-content > .active { - display: block; -} - -.nav .caret { - border-top-color: #428bca; - border-bottom-color: #428bca; -} - -.nav a:hover .caret { - border-top-color: #2a6496; - border-bottom-color: #2a6496; -} - -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-right-radius: 0; - border-top-left-radius: 0; -} - -.navbar { - position: relative; - z-index: 1000; - min-height: 50px; - margin-bottom: 20px; - border: 1px solid transparent; -} - -.navbar:before, -.navbar:after { - display: table; - content: " "; -} - -.navbar:after { - clear: both; -} - -.navbar:before, -.navbar:after { - display: table; - content: " "; -} - -.navbar:after { - clear: both; -} - -@media (min-width: 768px) { - .navbar { - border-radius: 4px; - } -} - -.navbar-header:before, -.navbar-header:after { - display: table; - content: " "; -} - -.navbar-header:after { - clear: both; -} - -.navbar-header:before, -.navbar-header:after { - display: table; - content: " "; -} - -.navbar-header:after { - clear: both; -} - -@media (min-width: 768px) { - .navbar-header { - float: left; - } -} - -.navbar-collapse { - max-height: 340px; - padding-right: 15px; - padding-left: 15px; - overflow-x: visible; - border-top: 1px solid transparent; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); - -webkit-overflow-scrolling: touch; -} - -.navbar-collapse:before, -.navbar-collapse:after { - display: table; - content: " "; -} - -.navbar-collapse:after { - clear: both; -} - -.navbar-collapse:before, -.navbar-collapse:after { - display: table; - content: " "; -} - -.navbar-collapse:after { - clear: both; -} - -.navbar-collapse.in { - overflow-y: auto; -} - -@media (min-width: 768px) { - .navbar-collapse { - width: auto; - border-top: 0; - box-shadow: none; - } - .navbar-collapse.collapse { - display: block !important; - height: auto !important; - padding-bottom: 0; - overflow: visible !important; - } - .navbar-collapse.in { - overflow-y: visible; - } - .navbar-collapse .navbar-nav.navbar-left:first-child { - margin-left: -15px; - } - .navbar-collapse .navbar-nav.navbar-right:last-child { - margin-right: -15px; - } - .navbar-collapse .navbar-text:last-child { - margin-right: 0; - } -} - -.container > .navbar-header, -.container > .navbar-collapse { - margin-right: -15px; - margin-left: -15px; -} - -@media (min-width: 768px) { - .container > .navbar-header, - .container > .navbar-collapse { - margin-right: 0; - margin-left: 0; - } -} - -.navbar-static-top { - border-width: 0 0 1px; -} - -@media (min-width: 768px) { - .navbar-static-top { - border-radius: 0; - } -} - -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - border-width: 0 0 1px; -} - -@media (min-width: 768px) { - .navbar-fixed-top, - .navbar-fixed-bottom { - border-radius: 0; - } -} - -.navbar-fixed-top { - top: 0; - z-index: 1030; -} - -.navbar-fixed-bottom { - bottom: 0; - margin-bottom: 0; -} - -.navbar-brand { - float: left; - padding: 15px 15px; - font-size: 18px; - line-height: 20px; -} - -.navbar-brand:hover, -.navbar-brand:focus { - text-decoration: none; -} - -@media (min-width: 768px) { - .navbar > .container .navbar-brand { - margin-left: -15px; - } -} - -.navbar-toggle { - position: relative; - float: right; - padding: 9px 10px; - margin-top: 8px; - margin-right: 15px; - margin-bottom: 8px; - background-color: transparent; - border: 1px solid transparent; - border-radius: 4px; -} - -.navbar-toggle .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px; -} - -.navbar-toggle .icon-bar + .icon-bar { - margin-top: 4px; -} - -@media (min-width: 768px) { - .navbar-toggle { - display: none; - } -} - -.navbar-nav { - margin: 7.5px -15px; -} - -.navbar-nav > li > a { - padding-top: 10px; - padding-bottom: 10px; - line-height: 20px; -} - -@media (max-width: 767px) { - .navbar-nav .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - box-shadow: none; - } - .navbar-nav .open .dropdown-menu > li > a, - .navbar-nav .open .dropdown-menu .dropdown-header { - padding: 5px 15px 5px 25px; - } - .navbar-nav .open .dropdown-menu > li > a { - line-height: 20px; - } - .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-nav .open .dropdown-menu > li > a:focus { - background-image: none; - } -} - -@media (min-width: 768px) { - .navbar-nav { - float: left; - margin: 0; - } - .navbar-nav > li { - float: left; - } - .navbar-nav > li > a { - padding-top: 15px; - padding-bottom: 15px; - } -} - -@media (min-width: 768px) { - .navbar-left { - float: left !important; - } - .navbar-right { - float: right !important; - } -} - -.navbar-form { - padding: 10px 15px; - margin-top: 8px; - margin-right: -15px; - margin-bottom: 8px; - margin-left: -15px; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); -} - -@media (min-width: 768px) { - .navbar-form .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .form-control { - display: inline-block; - } - .navbar-form .radio, - .navbar-form .checkbox { - display: inline-block; - padding-left: 0; - margin-top: 0; - margin-bottom: 0; - } - .navbar-form .radio input[type="radio"], - .navbar-form .checkbox input[type="checkbox"] { - float: none; - margin-left: 0; - } -} - -@media (max-width: 767px) { - .navbar-form .form-group { - margin-bottom: 5px; - } -} - -@media (min-width: 768px) { - .navbar-form { - width: auto; - padding-top: 0; - padding-bottom: 0; - margin-right: 0; - margin-left: 0; - border: 0; - -webkit-box-shadow: none; - box-shadow: none; - } -} - -.navbar-nav > li > .dropdown-menu { - margin-top: 0; - border-top-right-radius: 0; - border-top-left-radius: 0; -} - -.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} - -.navbar-nav.pull-right > li > .dropdown-menu, -.navbar-nav > li > .dropdown-menu.pull-right { - right: 0; - left: auto; -} - -.navbar-btn { - margin-top: 8px; - margin-bottom: 8px; -} - -.navbar-text { - float: left; - margin-top: 15px; - margin-bottom: 15px; -} - -@media (min-width: 768px) { - .navbar-text { - margin-right: 15px; - margin-left: 15px; - } -} - -.navbar-default { - background-color: #f8f8f8; - border-color: #e7e7e7; -} - -.navbar-default .navbar-brand { - color: #777777; -} - -.navbar-default .navbar-brand:hover, -.navbar-default .navbar-brand:focus { - color: #5e5e5e; - background-color: transparent; -} - -.navbar-default .navbar-text { - color: #777777; -} - -.navbar-default .navbar-nav > li > a { - color: #777777; -} - -.navbar-default .navbar-nav > li > a:hover, -.navbar-default .navbar-nav > li > a:focus { - color: #333333; - background-color: transparent; -} - -.navbar-default .navbar-nav > .active > a, -.navbar-default .navbar-nav > .active > a:hover, -.navbar-default .navbar-nav > .active > a:focus { - color: #555555; - background-color: #e7e7e7; -} - -.navbar-default .navbar-nav > .disabled > a, -.navbar-default .navbar-nav > .disabled > a:hover, -.navbar-default .navbar-nav > .disabled > a:focus { - color: #cccccc; - background-color: transparent; -} - -.navbar-default .navbar-toggle { - border-color: #dddddd; -} - -.navbar-default .navbar-toggle:hover, -.navbar-default .navbar-toggle:focus { - background-color: #dddddd; -} - -.navbar-default .navbar-toggle .icon-bar { - background-color: #cccccc; -} - -.navbar-default .navbar-collapse, -.navbar-default .navbar-form { - border-color: #e6e6e6; -} - -.navbar-default .navbar-nav > .dropdown > a:hover .caret, -.navbar-default .navbar-nav > .dropdown > a:focus .caret { - border-top-color: #333333; - border-bottom-color: #333333; -} - -.navbar-default .navbar-nav > .open > a, -.navbar-default .navbar-nav > .open > a:hover, -.navbar-default .navbar-nav > .open > a:focus { - color: #555555; - background-color: #e7e7e7; -} - -.navbar-default .navbar-nav > .open > a .caret, -.navbar-default .navbar-nav > .open > a:hover .caret, -.navbar-default .navbar-nav > .open > a:focus .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} - -.navbar-default .navbar-nav > .dropdown > a .caret { - border-top-color: #777777; - border-bottom-color: #777777; -} - -@media (max-width: 767px) { - .navbar-default .navbar-nav .open .dropdown-menu > li > a { - color: #777777; - } - .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { - color: #333333; - background-color: transparent; - } - .navbar-default .navbar-nav .open .dropdown-menu > .active > a, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #555555; - background-color: #e7e7e7; - } - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #cccccc; - background-color: transparent; - } -} - -.navbar-default .navbar-link { - color: #777777; -} - -.navbar-default .navbar-link:hover { - color: #333333; -} - -.navbar-inverse { - background-color: #222222; - border-color: #080808; -} - -.navbar-inverse .navbar-brand { - color: #999999; -} - -.navbar-inverse .navbar-brand:hover, -.navbar-inverse .navbar-brand:focus { - color: #ffffff; - background-color: transparent; -} - -.navbar-inverse .navbar-text { - color: #999999; -} - -.navbar-inverse .navbar-nav > li > a { - color: #999999; -} - -.navbar-inverse .navbar-nav > li > a:hover, -.navbar-inverse .navbar-nav > li > a:focus { - color: #ffffff; - background-color: transparent; -} - -.navbar-inverse .navbar-nav > .active > a, -.navbar-inverse .navbar-nav > .active > a:hover, -.navbar-inverse .navbar-nav > .active > a:focus { - color: #ffffff; - background-color: #080808; -} - -.navbar-inverse .navbar-nav > .disabled > a, -.navbar-inverse .navbar-nav > .disabled > a:hover, -.navbar-inverse .navbar-nav > .disabled > a:focus { - color: #444444; - background-color: transparent; -} - -.navbar-inverse .navbar-toggle { - border-color: #333333; -} - -.navbar-inverse .navbar-toggle:hover, -.navbar-inverse .navbar-toggle:focus { - background-color: #333333; -} - -.navbar-inverse .navbar-toggle .icon-bar { - background-color: #ffffff; -} - -.navbar-inverse .navbar-collapse, -.navbar-inverse .navbar-form { - border-color: #101010; -} - -.navbar-inverse .navbar-nav > .open > a, -.navbar-inverse .navbar-nav > .open > a:hover, -.navbar-inverse .navbar-nav > .open > a:focus { - color: #ffffff; - background-color: #080808; -} - -.navbar-inverse .navbar-nav > .dropdown > a:hover .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} - -.navbar-inverse .navbar-nav > .dropdown > a .caret { - border-top-color: #999999; - border-bottom-color: #999999; -} - -.navbar-inverse .navbar-nav > .open > a .caret, -.navbar-inverse .navbar-nav > .open > a:hover .caret, -.navbar-inverse .navbar-nav > .open > a:focus .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} - -@media (max-width: 767px) { - .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { - border-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { - color: #999999; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { - color: #ffffff; - background-color: transparent; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #ffffff; - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #444444; - background-color: transparent; - } -} - -.navbar-inverse .navbar-link { - color: #999999; -} - -.navbar-inverse .navbar-link:hover { - color: #ffffff; -} - -.breadcrumb { - padding: 8px 15px; - margin-bottom: 20px; - list-style: none; - background-color: #f5f5f5; - border-radius: 4px; -} - -.breadcrumb > li { - display: inline-block; -} - -.breadcrumb > li + li:before { - padding: 0 5px; - color: #cccccc; - content: "/\00a0"; -} - -.breadcrumb > .active { - color: #999999; -} - -.pagination { - display: inline-block; - padding-left: 0; - margin: 20px 0; - border-radius: 4px; -} - -.pagination > li { - display: inline; -} - -.pagination > li > a, -.pagination > li > span { - position: relative; - float: left; - padding: 6px 12px; - margin-left: -1px; - line-height: 1.428571429; - text-decoration: none; - background-color: #ffffff; - border: 1px solid #dddddd; -} - -.pagination > li:first-child > a, -.pagination > li:first-child > span { - margin-left: 0; - border-bottom-left-radius: 4px; - border-top-left-radius: 4px; -} - -.pagination > li:last-child > a, -.pagination > li:last-child > span { - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; -} - -.pagination > li > a:hover, -.pagination > li > span:hover, -.pagination > li > a:focus, -.pagination > li > span:focus { - background-color: #eeeeee; -} - -.pagination > .active > a, -.pagination > .active > span, -.pagination > .active > a:hover, -.pagination > .active > span:hover, -.pagination > .active > a:focus, -.pagination > .active > span:focus { - z-index: 2; - color: #ffffff; - cursor: default; - background-color: #428bca; - border-color: #428bca; -} - -.pagination > .disabled > span, -.pagination > .disabled > a, -.pagination > .disabled > a:hover, -.pagination > .disabled > a:focus { - color: #999999; - cursor: not-allowed; - background-color: #ffffff; - border-color: #dddddd; -} - -.pagination-lg > li > a, -.pagination-lg > li > span { - padding: 10px 16px; - font-size: 18px; -} - -.pagination-lg > li:first-child > a, -.pagination-lg > li:first-child > span { - border-bottom-left-radius: 6px; - border-top-left-radius: 6px; -} - -.pagination-lg > li:last-child > a, -.pagination-lg > li:last-child > span { - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; -} - -.pagination-sm > li > a, -.pagination-sm > li > span { - padding: 5px 10px; - font-size: 12px; -} - -.pagination-sm > li:first-child > a, -.pagination-sm > li:first-child > span { - border-bottom-left-radius: 3px; - border-top-left-radius: 3px; -} - -.pagination-sm > li:last-child > a, -.pagination-sm > li:last-child > span { - border-top-right-radius: 3px; - border-bottom-right-radius: 3px; -} - -.pager { - padding-left: 0; - margin: 20px 0; - text-align: center; - list-style: none; -} - -.pager:before, -.pager:after { - display: table; - content: " "; -} - -.pager:after { - clear: both; -} - -.pager:before, -.pager:after { - display: table; - content: " "; -} - -.pager:after { - clear: both; -} - -.pager li { - display: inline; -} - -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #ffffff; - border: 1px solid #dddddd; - border-radius: 15px; -} - -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: #eeeeee; -} - -.pager .next > a, -.pager .next > span { - float: right; -} - -.pager .previous > a, -.pager .previous > span { - float: left; -} - -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - color: #999999; - cursor: not-allowed; - background-color: #ffffff; -} - -.label { - display: inline; - padding: .2em .6em .3em; - font-size: 75%; - font-weight: bold; - line-height: 1; - color: #ffffff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25em; -} - -.label[href]:hover, -.label[href]:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} - -.label:empty { - display: none; -} - -.label-default { - background-color: #999999; -} - -.label-default[href]:hover, -.label-default[href]:focus { - background-color: #808080; -} - -.label-primary { - background-color: #428bca; -} - -.label-primary[href]:hover, -.label-primary[href]:focus { - background-color: #3071a9; -} - -.label-success { - background-color: #5cb85c; -} - -.label-success[href]:hover, -.label-success[href]:focus { - background-color: #449d44; -} - -.label-info { - background-color: #5bc0de; -} - -.label-info[href]:hover, -.label-info[href]:focus { - background-color: #31b0d5; -} - -.label-warning { - background-color: #f0ad4e; -} - -.label-warning[href]:hover, -.label-warning[href]:focus { - background-color: #ec971f; -} - -.label-danger { - background-color: #d9534f; -} - -.label-danger[href]:hover, -.label-danger[href]:focus { - background-color: #c9302c; -} - -.badge { - display: inline-block; - min-width: 10px; - padding: 3px 7px; - font-size: 12px; - font-weight: bold; - line-height: 1; - color: #ffffff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - background-color: #999999; - border-radius: 10px; -} - -.badge:empty { - display: none; -} - -a.badge:hover, -a.badge:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} - -.btn .badge { - position: relative; - top: -1px; -} - -a.list-group-item.active > .badge, -.nav-pills > .active > a > .badge { - color: #428bca; - background-color: #ffffff; -} - -.nav-pills > li > a > .badge { - margin-left: 3px; -} - -.jumbotron { - padding: 30px; - margin-bottom: 30px; - font-size: 21px; - font-weight: 200; - line-height: 2.1428571435; - color: inherit; - background-color: #eeeeee; -} - -.jumbotron h1 { - line-height: 1; - color: inherit; -} - -.jumbotron p { - line-height: 1.4; -} - -.container .jumbotron { - border-radius: 6px; -} - -@media screen and (min-width: 768px) { - .jumbotron { - padding-top: 48px; - padding-bottom: 48px; - } - .container .jumbotron { - padding-right: 60px; - padding-left: 60px; - } - .jumbotron h1 { - font-size: 63px; - } -} - -.thumbnail { - display: inline-block; - display: block; - height: auto; - max-width: 100%; - padding: 4px; - line-height: 1.428571429; - background-color: #ffffff; - border: 1px solid #dddddd; - border-radius: 4px; - -webkit-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; -} - -.thumbnail > img { - display: block; - height: auto; - max-width: 100%; -} - -a.thumbnail:hover, -a.thumbnail:focus { - border-color: #428bca; -} - -.thumbnail > img { - margin-right: auto; - margin-left: auto; -} - -.thumbnail .caption { - padding: 9px; - color: #333333; -} - -.alert { - padding: 15px; - margin-bottom: 20px; - border: 1px solid transparent; - border-radius: 4px; -} - -.alert h4 { - margin-top: 0; - color: inherit; -} - -.alert .alert-link { - font-weight: bold; -} - -.alert > p, -.alert > ul { - margin-bottom: 0; -} - -.alert > p + p { - margin-top: 5px; -} - -.alert-dismissable { - padding-right: 35px; -} - -.alert-dismissable .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; -} - -.alert-success { - color: #468847; - background-color: #dff0d8; - border-color: #d6e9c6; -} - -.alert-success hr { - border-top-color: #c9e2b3; -} - -.alert-success .alert-link { - color: #356635; -} - -.alert-info { - color: #3a87ad; - background-color: #d9edf7; - border-color: #bce8f1; -} - -.alert-info hr { - border-top-color: #a6e1ec; -} - -.alert-info .alert-link { - color: #2d6987; -} - -.alert-warning { - color: #c09853; - background-color: #fcf8e3; - border-color: #fbeed5; -} - -.alert-warning hr { - border-top-color: #f8e5be; -} - -.alert-warning .alert-link { - color: #a47e3c; -} - -.alert-danger { - color: #b94a48; - background-color: #f2dede; - border-color: #eed3d7; -} - -.alert-danger hr { - border-top-color: #e6c1c7; -} - -.alert-danger .alert-link { - color: #953b39; -} - -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -@-moz-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -@-o-keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 0; - } -} - -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -.progress { - height: 20px; - margin-bottom: 20px; - overflow: hidden; - background-color: #f5f5f5; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); -} - -.progress-bar { - float: left; - width: 0; - height: 100%; - font-size: 12px; - color: #ffffff; - text-align: center; - background-color: #428bca; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -webkit-transition: width 0.6s ease; - transition: width 0.6s ease; -} - -.progress-striped .progress-bar { - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-size: 40px 40px; -} - -.progress.active .progress-bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -moz-animation: progress-bar-stripes 2s linear infinite; - -ms-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} - -.progress-bar-success { - background-color: #5cb85c; -} - -.progress-striped .progress-bar-success { - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-bar-info { - background-color: #5bc0de; -} - -.progress-striped .progress-bar-info { - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-bar-warning { - background-color: #f0ad4e; -} - -.progress-striped .progress-bar-warning { - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-bar-danger { - background-color: #d9534f; -} - -.progress-striped .progress-bar-danger { - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.media, -.media-body { - overflow: hidden; - zoom: 1; -} - -.media, -.media .media { - margin-top: 15px; -} - -.media:first-child { - margin-top: 0; -} - -.media-object { - display: block; -} - -.media-heading { - margin: 0 0 5px; -} - -.media > .pull-left { - margin-right: 10px; -} - -.media > .pull-right { - margin-left: 10px; -} - -.media-list { - padding-left: 0; - list-style: none; -} - -.list-group { - padding-left: 0; - margin-bottom: 20px; -} - -.list-group-item { - position: relative; - display: block; - padding: 10px 15px; - margin-bottom: -1px; - background-color: #ffffff; - border: 1px solid #dddddd; -} - -.list-group-item:first-child { - border-top-right-radius: 4px; - border-top-left-radius: 4px; -} - -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} - -.list-group-item > .badge { - float: right; -} - -.list-group-item > .badge + .badge { - margin-right: 5px; -} - -a.list-group-item { - color: #555555; -} - -a.list-group-item .list-group-item-heading { - color: #333333; -} - -a.list-group-item:hover, -a.list-group-item:focus { - text-decoration: none; - background-color: #f5f5f5; -} - -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - z-index: 2; - color: #ffffff; - background-color: #428bca; - border-color: #428bca; -} - -.list-group-item.active .list-group-item-heading, -.list-group-item.active:hover .list-group-item-heading, -.list-group-item.active:focus .list-group-item-heading { - color: inherit; -} - -.list-group-item.active .list-group-item-text, -.list-group-item.active:hover .list-group-item-text, -.list-group-item.active:focus .list-group-item-text { - color: #e1edf7; -} - -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; -} - -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3; -} - -.panel { - margin-bottom: 20px; - background-color: #ffffff; - border: 1px solid transparent; - border-radius: 4px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); -} - -.panel-body { - padding: 15px; -} - -.panel-body:before, -.panel-body:after { - display: table; - content: " "; -} - -.panel-body:after { - clear: both; -} - -.panel-body:before, -.panel-body:after { - display: table; - content: " "; -} - -.panel-body:after { - clear: both; -} - -.panel > .list-group { - margin-bottom: 0; -} - -.panel > .list-group .list-group-item { - border-width: 1px 0; -} - -.panel > .list-group .list-group-item:first-child { - border-top-right-radius: 0; - border-top-left-radius: 0; -} - -.panel > .list-group .list-group-item:last-child { - border-bottom: 0; -} - -.panel-heading + .list-group .list-group-item:first-child { - border-top-width: 0; -} - -.panel > .table { - margin-bottom: 0; -} - -.panel > .panel-body + .table { - border-top: 1px solid #dddddd; -} - -.panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-right-radius: 3px; - border-top-left-radius: 3px; -} - -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: 16px; -} - -.panel-title > a { - color: inherit; -} - -.panel-footer { - padding: 10px 15px; - background-color: #f5f5f5; - border-top: 1px solid #dddddd; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} - -.panel-group .panel { - margin-bottom: 0; - overflow: hidden; - border-radius: 4px; -} - -.panel-group .panel + .panel { - margin-top: 5px; -} - -.panel-group .panel-heading { - border-bottom: 0; -} - -.panel-group .panel-heading + .panel-collapse .panel-body { - border-top: 1px solid #dddddd; -} - -.panel-group .panel-footer { - border-top: 0; -} - -.panel-group .panel-footer + .panel-collapse .panel-body { - border-bottom: 1px solid #dddddd; -} - -.panel-default { - border-color: #dddddd; -} - -.panel-default > .panel-heading { - color: #333333; - background-color: #f5f5f5; - border-color: #dddddd; -} - -.panel-default > .panel-heading + .panel-collapse .panel-body { - border-top-color: #dddddd; -} - -.panel-default > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #dddddd; -} - -.panel-primary { - border-color: #428bca; -} - -.panel-primary > .panel-heading { - color: #ffffff; - background-color: #428bca; - border-color: #428bca; -} - -.panel-primary > .panel-heading + .panel-collapse .panel-body { - border-top-color: #428bca; -} - -.panel-primary > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #428bca; -} - -.panel-success { - border-color: #d6e9c6; -} - -.panel-success > .panel-heading { - color: #468847; - background-color: #dff0d8; - border-color: #d6e9c6; -} - -.panel-success > .panel-heading + .panel-collapse .panel-body { - border-top-color: #d6e9c6; -} - -.panel-success > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #d6e9c6; -} - -.panel-warning { - border-color: #fbeed5; -} - -.panel-warning > .panel-heading { - color: #c09853; - background-color: #fcf8e3; - border-color: #fbeed5; -} - -.panel-warning > .panel-heading + .panel-collapse .panel-body { - border-top-color: #fbeed5; -} - -.panel-warning > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #fbeed5; -} - -.panel-danger { - border-color: #eed3d7; -} - -.panel-danger > .panel-heading { - color: #b94a48; - background-color: #f2dede; - border-color: #eed3d7; -} - -.panel-danger > .panel-heading + .panel-collapse .panel-body { - border-top-color: #eed3d7; -} - -.panel-danger > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #eed3d7; -} - -.panel-info { - border-color: #bce8f1; -} - -.panel-info > .panel-heading { - color: #3a87ad; - background-color: #d9edf7; - border-color: #bce8f1; -} - -.panel-info > .panel-heading + .panel-collapse .panel-body { - border-top-color: #bce8f1; -} - -.panel-info > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #bce8f1; -} - -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -} - -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); -} - -.well-lg { - padding: 24px; - border-radius: 6px; -} - -.well-sm { - padding: 9px; - border-radius: 3px; -} - -.close { - float: right; - font-size: 21px; - font-weight: bold; - line-height: 1; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; - filter: alpha(opacity=20); -} - -.close:hover, -.close:focus { - color: #000000; - text-decoration: none; - cursor: pointer; - opacity: 0.5; - filter: alpha(opacity=50); -} - -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} - -.modal-open { - overflow: hidden; -} - -body.modal-open, -.modal-open .navbar-fixed-top, -.modal-open .navbar-fixed-bottom { - margin-right: 15px; -} - -.modal { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - display: none; - overflow: auto; - overflow-y: scroll; -} - -.modal.fade .modal-dialog { - -webkit-transform: translate(0, -25%); - -ms-transform: translate(0, -25%); - transform: translate(0, -25%); - -webkit-transition: -webkit-transform 0.3s ease-out; - -moz-transition: -moz-transform 0.3s ease-out; - -o-transition: -o-transform 0.3s ease-out; - transition: transform 0.3s ease-out; -} - -.modal.in .modal-dialog { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - transform: translate(0, 0); -} - -.modal-dialog { - z-index: 1050; - width: auto; - padding: 10px; - margin-right: auto; - margin-left: auto; -} - -.modal-content { - position: relative; - background-color: #ffffff; - border: 1px solid #999999; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - outline: none; - -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - background-clip: padding-box; -} - -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1030; - background-color: #000000; -} - -.modal-backdrop.fade { - opacity: 0; - filter: alpha(opacity=0); -} - -.modal-backdrop.in { - opacity: 0.5; - filter: alpha(opacity=50); -} - -.modal-header { - min-height: 16.428571429px; - padding: 15px; - border-bottom: 1px solid #e5e5e5; -} - -.modal-header .close { - margin-top: -2px; -} - -.modal-title { - margin: 0; - line-height: 1.428571429; -} - -.modal-body { - position: relative; - padding: 20px; -} - -.modal-footer { - padding: 19px 20px 20px; - margin-top: 15px; - text-align: right; - border-top: 1px solid #e5e5e5; -} - -.modal-footer:before, -.modal-footer:after { - display: table; - content: " "; -} - -.modal-footer:after { - clear: both; -} - -.modal-footer:before, -.modal-footer:after { - display: table; - content: " "; -} - -.modal-footer:after { - clear: both; -} - -.modal-footer .btn + .btn { - margin-bottom: 0; - margin-left: 5px; -} - -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} - -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} - -@media screen and (min-width: 768px) { - .modal-dialog { - right: auto; - left: 50%; - width: 600px; - padding-top: 30px; - padding-bottom: 30px; - } - .modal-content { - -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - } -} - -.tooltip { - position: absolute; - z-index: 1030; - display: block; - font-size: 12px; - line-height: 1.4; - opacity: 0; - filter: alpha(opacity=0); - visibility: visible; -} - -.tooltip.in { - opacity: 0.9; - filter: alpha(opacity=90); -} - -.tooltip.top { - padding: 5px 0; - margin-top: -3px; -} - -.tooltip.right { - padding: 0 5px; - margin-left: 3px; -} - -.tooltip.bottom { - padding: 5px 0; - margin-top: 3px; -} - -.tooltip.left { - padding: 0 5px; - margin-left: -3px; -} - -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #ffffff; - text-align: center; - text-decoration: none; - background-color: #000000; - border-radius: 4px; -} - -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} - -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-top-color: #000000; - border-width: 5px 5px 0; -} - -.tooltip.top-left .tooltip-arrow { - bottom: 0; - left: 5px; - border-top-color: #000000; - border-width: 5px 5px 0; -} - -.tooltip.top-right .tooltip-arrow { - right: 5px; - bottom: 0; - border-top-color: #000000; - border-width: 5px 5px 0; -} - -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-right-color: #000000; - border-width: 5px 5px 5px 0; -} - -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-left-color: #000000; - border-width: 5px 0 5px 5px; -} - -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-bottom-color: #000000; - border-width: 0 5px 5px; -} - -.tooltip.bottom-left .tooltip-arrow { - top: 0; - left: 5px; - border-bottom-color: #000000; - border-width: 0 5px 5px; -} - -.tooltip.bottom-right .tooltip-arrow { - top: 0; - right: 5px; - border-bottom-color: #000000; - border-width: 0 5px 5px; -} - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1010; - display: none; - max-width: 276px; - padding: 1px; - text-align: left; - white-space: normal; - background-color: #ffffff; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - background-clip: padding-box; -} - -.popover.top { - margin-top: -10px; -} - -.popover.right { - margin-left: 10px; -} - -.popover.bottom { - margin-top: 10px; -} - -.popover.left { - margin-left: -10px; -} - -.popover-title { - padding: 8px 14px; - margin: 0; - font-size: 14px; - font-weight: normal; - line-height: 18px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-radius: 5px 5px 0 0; -} - -.popover-content { - padding: 9px 14px; -} - -.popover .arrow, -.popover .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} - -.popover .arrow { - border-width: 11px; -} - -.popover .arrow:after { - border-width: 10px; - content: ""; -} - -.popover.top .arrow { - bottom: -11px; - left: 50%; - margin-left: -11px; - border-top-color: #999999; - border-top-color: rgba(0, 0, 0, 0.25); - border-bottom-width: 0; -} - -.popover.top .arrow:after { - bottom: 1px; - margin-left: -10px; - border-top-color: #ffffff; - border-bottom-width: 0; - content: " "; -} - -.popover.right .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-right-color: #999999; - border-right-color: rgba(0, 0, 0, 0.25); - border-left-width: 0; -} - -.popover.right .arrow:after { - bottom: -10px; - left: 1px; - border-right-color: #ffffff; - border-left-width: 0; - content: " "; -} - -.popover.bottom .arrow { - top: -11px; - left: 50%; - margin-left: -11px; - border-bottom-color: #999999; - border-bottom-color: rgba(0, 0, 0, 0.25); - border-top-width: 0; -} - -.popover.bottom .arrow:after { - top: 1px; - margin-left: -10px; - border-bottom-color: #ffffff; - border-top-width: 0; - content: " "; -} - -.popover.left .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-left-color: #999999; - border-left-color: rgba(0, 0, 0, 0.25); - border-right-width: 0; -} - -.popover.left .arrow:after { - right: 1px; - bottom: -10px; - border-left-color: #ffffff; - border-right-width: 0; - content: " "; -} - -.carousel { - position: relative; -} - -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden; -} - -.carousel-inner > .item { - position: relative; - display: none; - -webkit-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; -} - -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - display: block; - height: auto; - max-width: 100%; - line-height: 1; -} - -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; -} - -.carousel-inner > .active { - left: 0; -} - -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; -} - -.carousel-inner > .next { - left: 100%; -} - -.carousel-inner > .prev { - left: -100%; -} - -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; -} - -.carousel-inner > .active.left { - left: -100%; -} - -.carousel-inner > .active.right { - left: 100%; -} - -.carousel-control { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 15%; - font-size: 20px; - color: #ffffff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); - opacity: 0.5; - filter: alpha(opacity=50); -} - -.carousel-control.left { - background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001))); - background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0), color-stop(rgba(0, 0, 0, 0.0001) 100%)); - background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); -} - -.carousel-control.right { - right: 0; - left: auto; - background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5))); - background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0), color-stop(rgba(0, 0, 0, 0.5) 100%)); - background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); -} - -.carousel-control:hover, -.carousel-control:focus { - color: #ffffff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); -} - -.carousel-control .icon-prev, -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-left, -.carousel-control .glyphicon-chevron-right { - position: absolute; - top: 50%; - left: 50%; - z-index: 5; - display: inline-block; -} - -.carousel-control .icon-prev, -.carousel-control .icon-next { - width: 20px; - height: 20px; - margin-top: -10px; - margin-left: -10px; - font-family: serif; -} - -.carousel-control .icon-prev:before { - content: '\2039'; -} - -.carousel-control .icon-next:before { - content: '\203a'; -} - -.carousel-indicators { - position: absolute; - bottom: 10px; - left: 50%; - z-index: 15; - width: 60%; - padding-left: 0; - margin-left: -30%; - text-align: center; - list-style: none; -} - -.carousel-indicators li { - display: inline-block; - width: 10px; - height: 10px; - margin: 1px; - text-indent: -999px; - cursor: pointer; - border: 1px solid #ffffff; - border-radius: 10px; -} - -.carousel-indicators .active { - width: 12px; - height: 12px; - margin: 0; - background-color: #ffffff; -} - -.carousel-caption { - position: absolute; - right: 15%; - bottom: 20px; - left: 15%; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #ffffff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); -} - -.carousel-caption .btn { - text-shadow: none; -} - -@media screen and (min-width: 768px) { - .carousel-control .icon-prev, - .carousel-control .icon-next { - width: 30px; - height: 30px; - margin-top: -15px; - margin-left: -15px; - font-size: 30px; - } - .carousel-caption { - right: 20%; - left: 20%; - padding-bottom: 30px; - } - .carousel-indicators { - bottom: 20px; - } -} - -.clearfix:before, -.clearfix:after { - display: table; - content: " "; -} - -.clearfix:after { - clear: both; -} - -.pull-right { - float: right !important; -} - -.pull-left { - float: left !important; -} - -.hide { - display: none !important; -} - -.show { - display: block !important; -} - -.invisible { - visibility: hidden; -} - -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} - -.affix { - position: fixed; -} - -@-ms-viewport { - width: device-width; -} - -@media screen and (max-width: 400px) { - @-ms-viewport { - width: 320px; - } -} - -.hidden { - display: none !important; - visibility: hidden !important; -} - -.visible-xs { - display: none !important; -} - -tr.visible-xs { - display: none !important; -} - -th.visible-xs, -td.visible-xs { - display: none !important; -} - -@media (max-width: 767px) { - .visible-xs { - display: block !important; - } - tr.visible-xs { - display: table-row !important; - } - th.visible-xs, - td.visible-xs { - display: table-cell !important; - } -} - -@media (min-width: 768px) and (max-width: 991px) { - .visible-xs.visible-sm { - display: block !important; - } - tr.visible-xs.visible-sm { - display: table-row !important; - } - th.visible-xs.visible-sm, - td.visible-xs.visible-sm { - display: table-cell !important; - } -} - -@media (min-width: 992px) and (max-width: 1199px) { - .visible-xs.visible-md { - display: block !important; - } - tr.visible-xs.visible-md { - display: table-row !important; - } - th.visible-xs.visible-md, - td.visible-xs.visible-md { - display: table-cell !important; - } -} - -@media (min-width: 1200px) { - .visible-xs.visible-lg { - display: block !important; - } - tr.visible-xs.visible-lg { - display: table-row !important; - } - th.visible-xs.visible-lg, - td.visible-xs.visible-lg { - display: table-cell !important; - } -} - -.visible-sm { - display: none !important; -} - -tr.visible-sm { - display: none !important; -} - -th.visible-sm, -td.visible-sm { - display: none !important; -} - -@media (max-width: 767px) { - .visible-sm.visible-xs { - display: block !important; - } - tr.visible-sm.visible-xs { - display: table-row !important; - } - th.visible-sm.visible-xs, - td.visible-sm.visible-xs { - display: table-cell !important; - } -} - -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm { - display: block !important; - } - tr.visible-sm { - display: table-row !important; - } - th.visible-sm, - td.visible-sm { - display: table-cell !important; - } -} - -@media (min-width: 992px) and (max-width: 1199px) { - .visible-sm.visible-md { - display: block !important; - } - tr.visible-sm.visible-md { - display: table-row !important; - } - th.visible-sm.visible-md, - td.visible-sm.visible-md { - display: table-cell !important; - } -} - -@media (min-width: 1200px) { - .visible-sm.visible-lg { - display: block !important; - } - tr.visible-sm.visible-lg { - display: table-row !important; - } - th.visible-sm.visible-lg, - td.visible-sm.visible-lg { - display: table-cell !important; - } -} - -.visible-md { - display: none !important; -} - -tr.visible-md { - display: none !important; -} - -th.visible-md, -td.visible-md { - display: none !important; -} - -@media (max-width: 767px) { - .visible-md.visible-xs { - display: block !important; - } - tr.visible-md.visible-xs { - display: table-row !important; - } - th.visible-md.visible-xs, - td.visible-md.visible-xs { - display: table-cell !important; - } -} - -@media (min-width: 768px) and (max-width: 991px) { - .visible-md.visible-sm { - display: block !important; - } - tr.visible-md.visible-sm { - display: table-row !important; - } - th.visible-md.visible-sm, - td.visible-md.visible-sm { - display: table-cell !important; - } -} - -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md { - display: block !important; - } - tr.visible-md { - display: table-row !important; - } - th.visible-md, - td.visible-md { - display: table-cell !important; - } -} - -@media (min-width: 1200px) { - .visible-md.visible-lg { - display: block !important; - } - tr.visible-md.visible-lg { - display: table-row !important; - } - th.visible-md.visible-lg, - td.visible-md.visible-lg { - display: table-cell !important; - } -} - -.visible-lg { - display: none !important; -} - -tr.visible-lg { - display: none !important; -} - -th.visible-lg, -td.visible-lg { - display: none !important; -} - -@media (max-width: 767px) { - .visible-lg.visible-xs { - display: block !important; - } - tr.visible-lg.visible-xs { - display: table-row !important; - } - th.visible-lg.visible-xs, - td.visible-lg.visible-xs { - display: table-cell !important; - } -} - -@media (min-width: 768px) and (max-width: 991px) { - .visible-lg.visible-sm { - display: block !important; - } - tr.visible-lg.visible-sm { - display: table-row !important; - } - th.visible-lg.visible-sm, - td.visible-lg.visible-sm { - display: table-cell !important; - } -} - -@media (min-width: 992px) and (max-width: 1199px) { - .visible-lg.visible-md { - display: block !important; - } - tr.visible-lg.visible-md { - display: table-row !important; - } - th.visible-lg.visible-md, - td.visible-lg.visible-md { - display: table-cell !important; - } -} - -@media (min-width: 1200px) { - .visible-lg { - display: block !important; - } - tr.visible-lg { - display: table-row !important; - } - th.visible-lg, - td.visible-lg { - display: table-cell !important; - } -} - -.hidden-xs { - display: block !important; -} - -tr.hidden-xs { - display: table-row !important; -} - -th.hidden-xs, -td.hidden-xs { - display: table-cell !important; -} - -@media (max-width: 767px) { - .hidden-xs { - display: none !important; - } - tr.hidden-xs { - display: none !important; - } - th.hidden-xs, - td.hidden-xs { - display: none !important; - } -} - -@media (min-width: 768px) and (max-width: 991px) { - .hidden-xs.hidden-sm { - display: none !important; - } - tr.hidden-xs.hidden-sm { - display: none !important; - } - th.hidden-xs.hidden-sm, - td.hidden-xs.hidden-sm { - display: none !important; - } -} - -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-xs.hidden-md { - display: none !important; - } - tr.hidden-xs.hidden-md { - display: none !important; - } - th.hidden-xs.hidden-md, - td.hidden-xs.hidden-md { - display: none !important; - } -} - -@media (min-width: 1200px) { - .hidden-xs.hidden-lg { - display: none !important; - } - tr.hidden-xs.hidden-lg { - display: none !important; - } - th.hidden-xs.hidden-lg, - td.hidden-xs.hidden-lg { - display: none !important; - } -} - -.hidden-sm { - display: block !important; -} - -tr.hidden-sm { - display: table-row !important; -} - -th.hidden-sm, -td.hidden-sm { - display: table-cell !important; -} - -@media (max-width: 767px) { - .hidden-sm.hidden-xs { - display: none !important; - } - tr.hidden-sm.hidden-xs { - display: none !important; - } - th.hidden-sm.hidden-xs, - td.hidden-sm.hidden-xs { - display: none !important; - } -} - -@media (min-width: 768px) and (max-width: 991px) { - .hidden-sm { - display: none !important; - } - tr.hidden-sm { - display: none !important; - } - th.hidden-sm, - td.hidden-sm { - display: none !important; - } -} - -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-sm.hidden-md { - display: none !important; - } - tr.hidden-sm.hidden-md { - display: none !important; - } - th.hidden-sm.hidden-md, - td.hidden-sm.hidden-md { - display: none !important; - } -} - -@media (min-width: 1200px) { - .hidden-sm.hidden-lg { - display: none !important; - } - tr.hidden-sm.hidden-lg { - display: none !important; - } - th.hidden-sm.hidden-lg, - td.hidden-sm.hidden-lg { - display: none !important; - } -} - -.hidden-md { - display: block !important; -} - -tr.hidden-md { - display: table-row !important; -} - -th.hidden-md, -td.hidden-md { - display: table-cell !important; -} - -@media (max-width: 767px) { - .hidden-md.hidden-xs { - display: none !important; - } - tr.hidden-md.hidden-xs { - display: none !important; - } - th.hidden-md.hidden-xs, - td.hidden-md.hidden-xs { - display: none !important; - } -} - -@media (min-width: 768px) and (max-width: 991px) { - .hidden-md.hidden-sm { - display: none !important; - } - tr.hidden-md.hidden-sm { - display: none !important; - } - th.hidden-md.hidden-sm, - td.hidden-md.hidden-sm { - display: none !important; - } -} - -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-md { - display: none !important; - } - tr.hidden-md { - display: none !important; - } - th.hidden-md, - td.hidden-md { - display: none !important; - } -} - -@media (min-width: 1200px) { - .hidden-md.hidden-lg { - display: none !important; - } - tr.hidden-md.hidden-lg { - display: none !important; - } - th.hidden-md.hidden-lg, - td.hidden-md.hidden-lg { - display: none !important; - } -} - -.hidden-lg { - display: block !important; -} - -tr.hidden-lg { - display: table-row !important; -} - -th.hidden-lg, -td.hidden-lg { - display: table-cell !important; -} - -@media (max-width: 767px) { - .hidden-lg.hidden-xs { - display: none !important; - } - tr.hidden-lg.hidden-xs { - display: none !important; - } - th.hidden-lg.hidden-xs, - td.hidden-lg.hidden-xs { - display: none !important; - } -} - -@media (min-width: 768px) and (max-width: 991px) { - .hidden-lg.hidden-sm { - display: none !important; - } - tr.hidden-lg.hidden-sm { - display: none !important; - } - th.hidden-lg.hidden-sm, - td.hidden-lg.hidden-sm { - display: none !important; - } -} - -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-lg.hidden-md { - display: none !important; - } - tr.hidden-lg.hidden-md { - display: none !important; - } - th.hidden-lg.hidden-md, - td.hidden-lg.hidden-md { - display: none !important; - } -} - -@media (min-width: 1200px) { - .hidden-lg { - display: none !important; - } - tr.hidden-lg { - display: none !important; - } - th.hidden-lg, - td.hidden-lg { - display: none !important; - } -} - -.visible-print { - display: none !important; -} - -tr.visible-print { - display: none !important; -} - -th.visible-print, -td.visible-print { - display: none !important; -} - -@media print { - .visible-print { - display: block !important; - } - tr.visible-print { - display: table-row !important; - } - th.visible-print, - td.visible-print { - display: table-cell !important; - } - .hidden-print { - display: none !important; - } - tr.hidden-print { - display: none !important; - } - th.hidden-print, - td.hidden-print { - display: none !important; - } -} \ No newline at end of file diff --git a/src/MvcMusicStore/Content/bootstrap.min.css b/src/MvcMusicStore/Content/bootstrap.min.css deleted file mode 100644 index a553c4f5e0..0000000000 --- a/src/MvcMusicStore/Content/bootstrap.min.css +++ /dev/null @@ -1,9 +0,0 @@ -/*! - * Bootstrap v3.0.0 - * - * Copyright 2013 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world by @mdo and @fat. - *//*! normalize.css v2.1.0 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{margin:.67em 0;font-size:2em}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}hr{height:0;-moz-box-sizing:content-box;box-sizing:content-box}mark{color:#000;background:#ff0}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid #c0c0c0}legend{padding:0;border:0}button,input,select,textarea{margin:0;font-family:inherit;font-size:100%}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{padding:0;box-sizing:border-box}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:2cm .5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*,*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}button,input,select[multiple],textarea{background-image:none}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}img{vertical-align:middle}.img-responsive{display:block;height:auto;max-width:100%}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16.099999999999998px;font-weight:200;line-height:1.4}@media(min-width:768px){.lead{font-size:21px}}small{font-size:85%}cite{font-style:normal}.text-muted{color:#999}.text-primary{color:#428bca}.text-warning{color:#c09853}.text-danger{color:#b94a48}.text-success{color:#468847}.text-info{color:#3a87ad}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}h1 small,.h1 small{font-size:24px}h2 small,.h2 small{font-size:18px}h3 small,.h3 small,h4 small,.h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-bottom:20px}dt,dd{line-height:1.428571429}dt{font-weight:bold}dd{margin-left:0}@media(min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{font-size:17.5px;font-weight:300;line-height:1.25}blockquote p:last-child{margin-bottom:0}blockquote small{display:block;line-height:1.428571429;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:1.428571429}code,pre{font-family:Monaco,Menlo,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;white-space:nowrap;background-color:#f9f2f4;border-radius:4px}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.428571429;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}.row{margin-right:-15px;margin-left:-15px}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11{float:left}.col-xs-1{width:8.333333333333332%}.col-xs-2{width:16.666666666666664%}.col-xs-3{width:25%}.col-xs-4{width:33.33333333333333%}.col-xs-5{width:41.66666666666667%}.col-xs-6{width:50%}.col-xs-7{width:58.333333333333336%}.col-xs-8{width:66.66666666666666%}.col-xs-9{width:75%}.col-xs-10{width:83.33333333333334%}.col-xs-11{width:91.66666666666666%}.col-xs-12{width:100%}@media(min-width:768px){.container{max-width:750px}.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11{float:left}.col-sm-1{width:8.333333333333332%}.col-sm-2{width:16.666666666666664%}.col-sm-3{width:25%}.col-sm-4{width:33.33333333333333%}.col-sm-5{width:41.66666666666667%}.col-sm-6{width:50%}.col-sm-7{width:58.333333333333336%}.col-sm-8{width:66.66666666666666%}.col-sm-9{width:75%}.col-sm-10{width:83.33333333333334%}.col-sm-11{width:91.66666666666666%}.col-sm-12{width:100%}.col-sm-push-1{left:8.333333333333332%}.col-sm-push-2{left:16.666666666666664%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333333333333%}.col-sm-push-5{left:41.66666666666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.333333333333336%}.col-sm-push-8{left:66.66666666666666%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333333333334%}.col-sm-push-11{left:91.66666666666666%}.col-sm-pull-1{right:8.333333333333332%}.col-sm-pull-2{right:16.666666666666664%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333333333333%}.col-sm-pull-5{right:41.66666666666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.333333333333336%}.col-sm-pull-8{right:66.66666666666666%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333333333334%}.col-sm-pull-11{right:91.66666666666666%}.col-sm-offset-1{margin-left:8.333333333333332%}.col-sm-offset-2{margin-left:16.666666666666664%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333333333333%}.col-sm-offset-5{margin-left:41.66666666666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.333333333333336%}.col-sm-offset-8{margin-left:66.66666666666666%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333333333334%}.col-sm-offset-11{margin-left:91.66666666666666%}}@media(min-width:992px){.container{max-width:970px}.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11{float:left}.col-md-1{width:8.333333333333332%}.col-md-2{width:16.666666666666664%}.col-md-3{width:25%}.col-md-4{width:33.33333333333333%}.col-md-5{width:41.66666666666667%}.col-md-6{width:50%}.col-md-7{width:58.333333333333336%}.col-md-8{width:66.66666666666666%}.col-md-9{width:75%}.col-md-10{width:83.33333333333334%}.col-md-11{width:91.66666666666666%}.col-md-12{width:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.333333333333332%}.col-md-push-2{left:16.666666666666664%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333333333333%}.col-md-push-5{left:41.66666666666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.333333333333336%}.col-md-push-8{left:66.66666666666666%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333333333334%}.col-md-push-11{left:91.66666666666666%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.333333333333332%}.col-md-pull-2{right:16.666666666666664%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333333333333%}.col-md-pull-5{right:41.66666666666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.333333333333336%}.col-md-pull-8{right:66.66666666666666%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333333333334%}.col-md-pull-11{right:91.66666666666666%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.333333333333332%}.col-md-offset-2{margin-left:16.666666666666664%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333333333333%}.col-md-offset-5{margin-left:41.66666666666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.333333333333336%}.col-md-offset-8{margin-left:66.66666666666666%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333333333334%}.col-md-offset-11{margin-left:91.66666666666666%}}@media(min-width:1200px){.container{max-width:1170px}.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11{float:left}.col-lg-1{width:8.333333333333332%}.col-lg-2{width:16.666666666666664%}.col-lg-3{width:25%}.col-lg-4{width:33.33333333333333%}.col-lg-5{width:41.66666666666667%}.col-lg-6{width:50%}.col-lg-7{width:58.333333333333336%}.col-lg-8{width:66.66666666666666%}.col-lg-9{width:75%}.col-lg-10{width:83.33333333333334%}.col-lg-11{width:91.66666666666666%}.col-lg-12{width:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.333333333333332%}.col-lg-push-2{left:16.666666666666664%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333333333333%}.col-lg-push-5{left:41.66666666666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.333333333333336%}.col-lg-push-8{left:66.66666666666666%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333333333334%}.col-lg-push-11{left:91.66666666666666%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.333333333333332%}.col-lg-pull-2{right:16.666666666666664%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333333333333%}.col-lg-pull-5{right:41.66666666666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.333333333333336%}.col-lg-pull-8{right:66.66666666666666%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333333333334%}.col-lg-pull-11{right:91.66666666666666%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.333333333333332%}.col-lg-offset-2{margin-left:16.666666666666664%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333333333333%}.col-lg-offset-5{margin-left:41.66666666666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.333333333333336%}.col-lg-offset-8{margin-left:66.66666666666666%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333333333334%}.col-lg-offset-11{margin-left:91.66666666666666%}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:20px}.table thead>tr>th,.table tbody>tr>th,.table tfoot>tr>th,.table thead>tr>td,.table tbody>tr>td,.table tfoot>tr>td{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.table thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table caption+thead tr:first-child th,.table colgroup+thead tr:first-child th,.table thead:first-child tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed thead>tr>th,.table-condensed tbody>tr>th,.table-condensed tfoot>tr>th,.table-condensed thead>tr>td,.table-condensed tbody>tr>td,.table-condensed tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*="col-"]{display:table-column;float:none}table td[class*="col-"],table th[class*="col-"]{display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8;border-color:#d6e9c6}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td{background-color:#d0e9c6;border-color:#c9e2b3}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede;border-color:#eed3d7}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td{background-color:#ebcccc;border-color:#e6c1c7}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3;border-color:#fbeed5}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td{background-color:#faf2cc;border-color:#f8e5be}@media(max-width:768px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:scroll;overflow-y:hidden;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0;background-color:#fff}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>thead>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>thead>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}select[multiple],select[size]{height:auto}select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-webkit-inner-spin-button{height:auto}.form-control:-moz-placeholder{color:#999}.form-control::-moz-placeholder{color:#999}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle;background-color:#fff;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee}textarea.form-control{height:auto}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;padding-left:20px;margin-top:10px;margin-bottom:10px;vertical-align:middle}.radio label,.checkbox label{display:inline;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:normal;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm{height:auto}.input-lg{height:45px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:45px;line-height:45px}textarea.input-lg{height:auto}.has-warning .help-block,.has-warning .control-label{color:#c09853}.has-warning .form-control{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.has-warning .input-group-addon{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.has-error .help-block,.has-error .control-label{color:#b94a48}.has-error .form-control{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.has-error .input-group-addon{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.has-success .help-block,.has-success .control-label{color:#468847}.has-success .form-control{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.has-success .input-group-addon{color:#468847;background-color:#dff0d8;border-color:#468847}.form-control-static{padding-top:7px;margin-bottom:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media(min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block}.form-inline .radio,.form-inline .checkbox{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:none;margin-left:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}@media(min-width:768px){.form-horizontal .control-label{text-align:right}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:normal;line-height:1.428571429;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;border:1px solid transparent;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-link{font-weight:normal;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999;text-decoration:none}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-xs{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs{padding:1px 5px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:normal;line-height:1}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-print:before{content:"\e045"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-briefcase:before{content:"\1f4bc"}.glyphicon-calendar:before{content:"\1f4c5"}.glyphicon-pushpin:before{content:"\1f4cc"}.glyphicon-paperclip:before{content:"\1f4ce"}.glyphicon-camera:before{content:"\1f4f7"}.glyphicon-lock:before{content:"\1f512"}.glyphicon-bell:before{content:"\1f514"}.glyphicon-bookmark:before{content:"\1f516"}.glyphicon-fire:before{content:"\1f525"}.glyphicon-wrench:before{content:"\1f527"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid #000;border-right:4px solid transparent;border-bottom:0 dotted;border-left:4px solid transparent;content:""}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.428571429;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#fff;text-decoration:none;background-color:#428bca}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0 dotted;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media(min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}}.btn-default .caret{border-top-color:#333}.btn-primary .caret,.btn-success .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret{border-top-color:#fff}.dropup .btn-default .caret{border-bottom-color:#333}.dropup .btn-primary .caret,.dropup .btn-success .caret,.dropup .btn-warning .caret,.dropup .btn-danger .caret,.dropup .btn-info .caret{border-bottom-color:#fff}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar .btn-group{float:left}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group,.btn-toolbar>.btn-group+.btn-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group-xs>.btn{padding:5px 10px;padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-bottom-left-radius:4px;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;border-collapse:separate;table-layout:fixed}.btn-group-justified .btn{display:table-cell;float:none;width:1%}[data-toggle="buttons"]>.btn>input[type="radio"],[data-toggle="buttons"]>.btn>input[type="checkbox"]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group.col{float:none;padding-right:0;padding-left:0}.input-group .form-control{width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:45px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:45px;line-height:45px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-4px}.input-group-btn>.btn:hover,.input-group-btn>.btn:active{z-index:2}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center}@media(min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}}.nav-tabs.nav-justified>li>a{margin-right:0;border-bottom:1px solid #ddd}.nav-tabs.nav-justified>.active>a{border-bottom-color:#fff}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:5px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center}@media(min-width:768px){.nav-justified>li{display:table-cell;width:1%}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-bottom:1px solid #ddd}.nav-tabs-justified>.active>a{border-bottom-color:#fff}.tabbable:before,.tabbable:after{display:table;content:" "}.tabbable:after{clear:both}.tabbable:before,.tabbable:after{display:table;content:" "}.tabbable:after{clear:both}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.nav .caret{border-top-color:#428bca;border-bottom-color:#428bca}.nav a:hover .caret{border-top-color:#2a6496;border-bottom-color:#2a6496}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;z-index:1000;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}@media(min-width:768px){.navbar{border-radius:4px}}.navbar-header:before,.navbar-header:after{display:table;content:" "}.navbar-header:after{clear:both}.navbar-header:before,.navbar-header:after{display:table;content:" "}.navbar-header:after{clear:both}@media(min-width:768px){.navbar-header{float:left}}.navbar-collapse{max-height:340px;padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse:before,.navbar-collapse:after{display:table;content:" "}.navbar-collapse:after{clear:both}.navbar-collapse:before,.navbar-collapse:after{display:table;content:" "}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media(min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-collapse .navbar-nav.navbar-left:first-child{margin-left:-15px}.navbar-collapse .navbar-nav.navbar-right:last-child{margin-right:-15px}.navbar-collapse .navbar-text:last-child{margin-right:0}}.container>.navbar-header,.container>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media(min-width:768px){.container>.navbar-header,.container>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{border-width:0 0 1px}@media(min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;border-width:0 0 1px}@media(min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;z-index:1030}.navbar-fixed-bottom{bottom:0;margin-bottom:0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media(min-width:768px){.navbar>.container .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media(min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media(max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media(min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}@media(min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}@media(min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{float:none;margin-left:0}}@media(max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media(min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-nav.pull-right>li>.dropdown-menu,.navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-text{float:left;margin-top:15px;margin-bottom:15px}@media(min-width:768px){.navbar-text{margin-right:15px;margin-left:15px}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e6e6e6}.navbar-default .navbar-nav>.dropdown>a:hover .caret,.navbar-default .navbar-nav>.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.open>a .caret,.navbar-default .navbar-nav>.open>a:hover .caret,.navbar-default .navbar-nav>.open>a:focus .caret{border-top-color:#555;border-bottom-color:#555}.navbar-default .navbar-nav>.dropdown>a .caret{border-top-color:#777;border-bottom-color:#777}@media(max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.dropdown>a:hover .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-nav>.dropdown>a .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .navbar-nav>.open>a .caret,.navbar-inverse .navbar-nav>.open>a:hover .caret,.navbar-inverse .navbar-nav>.open>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}@media(max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#999}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.428571429;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{background-color:#eee}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:#808080}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#999;border-radius:10px}.badge:empty{display:none}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.btn .badge{position:relative;top:-1px}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;font-size:21px;font-weight:200;line-height:2.1428571435;color:inherit;background-color:#eee}.jumbotron h1{line-height:1;color:inherit}.jumbotron p{line-height:1.4}.container .jumbotron{border-radius:6px}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1{font-size:63px}}.thumbnail{display:inline-block;display:block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img{display:block;height:auto;max-width:100%}a.thumbnail:hover,a.thumbnail:focus{border-color:#428bca}.thumbnail>img{margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#356635}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#2d6987}.alert-warning{color:#c09853;background-color:#fcf8e3;border-color:#fbeed5}.alert-warning hr{border-top-color:#f8e5be}.alert-warning .alert-link{color:#a47e3c}.alert-danger{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger hr{border-top-color:#e6c1c7}.alert-danger .alert-link{color:#953b39}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{display:table;content:" "}.panel-body:after{clear:both}.panel-body:before,.panel-body:after{display:table;content:" "}.panel-body:after{clear:both}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0}.panel>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.list-group .list-group-item:last-child{border-bottom:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table{margin-bottom:0}.panel>.panel-body+.table{border-top:1px solid #ddd}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-title{margin-top:0;margin-bottom:0;font-size:16px}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-group .panel{margin-bottom:0;overflow:hidden;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.panel-warning{border-color:#fbeed5}.panel-warning>.panel-heading{color:#c09853;background-color:#fcf8e3;border-color:#fbeed5}.panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#fbeed5}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#fbeed5}.panel-danger{border-color:#eed3d7}.panel-danger>.panel-heading{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#eed3d7}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#eed3d7}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}body.modal-open,.modal-open .navbar-fixed-top,.modal-open .navbar-fixed-bottom{margin-right:15px}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;overflow:auto;overflow-y:scroll}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-dialog{z-index:1050;width:auto;padding:10px;margin-right:auto;margin-left:auto}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{min-height:16.428571429px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.428571429}.modal-body{position:relative;padding:20px}.modal-footer{padding:19px 20px 20px;margin-top:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:before,.modal-footer:after{display:table;content:" "}.modal-footer:after{clear:both}.modal-footer:before,.modal-footer:after{display:table;content:" "}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@media screen and (min-width:768px){.modal-dialog{right:auto;left:50%;width:600px;padding-top:30px;padding-bottom:30px}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}}.tooltip{position:absolute;z-index:1030;display:block;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-bottom-color:#000;border-width:0 5px 5px}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0;content:" "}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0;content:" "}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0;content:" "}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0;content:" "}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;height:auto;max-width:100%;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);opacity:.5;filter:alpha(opacity=50)}.carousel-control.left{background-image:-webkit-gradient(linear,0 top,100% top,from(rgba(0,0,0,0.5)),to(rgba(0,0,0,0.0001)));background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.5) 0),color-stop(rgba(0,0,0,0.0001) 100%));background-image:-moz-linear-gradient(left,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000',endColorstr='#00000000',GradientType=1)}.carousel-control.right{right:0;left:auto;background-image:-webkit-gradient(linear,0 top,100% top,from(rgba(0,0,0,0.0001)),to(rgba(0,0,0,0.5)));background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.0001) 0),color-stop(rgba(0,0,0,0.5) 100%));background-image:-moz-linear-gradient(left,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000',endColorstr='#80000000',GradientType=1)}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;left:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after{display:table;content:" "}.clearfix:after{clear:both}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.affix{position:fixed}@-ms-viewport{width:device-width}@media screen and (max-width:400px){@-ms-viewport{width:320px}}.hidden{display:none!important;visibility:hidden!important}.visible-xs{display:none!important}tr.visible-xs{display:none!important}th.visible-xs,td.visible-xs{display:none!important}@media(max-width:767px){.visible-xs{display:block!important}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-xs.visible-sm{display:block!important}tr.visible-xs.visible-sm{display:table-row!important}th.visible-xs.visible-sm,td.visible-xs.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-xs.visible-md{display:block!important}tr.visible-xs.visible-md{display:table-row!important}th.visible-xs.visible-md,td.visible-xs.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-xs.visible-lg{display:block!important}tr.visible-xs.visible-lg{display:table-row!important}th.visible-xs.visible-lg,td.visible-xs.visible-lg{display:table-cell!important}}.visible-sm{display:none!important}tr.visible-sm{display:none!important}th.visible-sm,td.visible-sm{display:none!important}@media(max-width:767px){.visible-sm.visible-xs{display:block!important}tr.visible-sm.visible-xs{display:table-row!important}th.visible-sm.visible-xs,td.visible-sm.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-sm{display:block!important}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-sm.visible-md{display:block!important}tr.visible-sm.visible-md{display:table-row!important}th.visible-sm.visible-md,td.visible-sm.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-sm.visible-lg{display:block!important}tr.visible-sm.visible-lg{display:table-row!important}th.visible-sm.visible-lg,td.visible-sm.visible-lg{display:table-cell!important}}.visible-md{display:none!important}tr.visible-md{display:none!important}th.visible-md,td.visible-md{display:none!important}@media(max-width:767px){.visible-md.visible-xs{display:block!important}tr.visible-md.visible-xs{display:table-row!important}th.visible-md.visible-xs,td.visible-md.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-md.visible-sm{display:block!important}tr.visible-md.visible-sm{display:table-row!important}th.visible-md.visible-sm,td.visible-md.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-md{display:block!important}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-md.visible-lg{display:block!important}tr.visible-md.visible-lg{display:table-row!important}th.visible-md.visible-lg,td.visible-md.visible-lg{display:table-cell!important}}.visible-lg{display:none!important}tr.visible-lg{display:none!important}th.visible-lg,td.visible-lg{display:none!important}@media(max-width:767px){.visible-lg.visible-xs{display:block!important}tr.visible-lg.visible-xs{display:table-row!important}th.visible-lg.visible-xs,td.visible-lg.visible-xs{display:table-cell!important}}@media(min-width:768px) and (max-width:991px){.visible-lg.visible-sm{display:block!important}tr.visible-lg.visible-sm{display:table-row!important}th.visible-lg.visible-sm,td.visible-lg.visible-sm{display:table-cell!important}}@media(min-width:992px) and (max-width:1199px){.visible-lg.visible-md{display:block!important}tr.visible-lg.visible-md{display:table-row!important}th.visible-lg.visible-md,td.visible-lg.visible-md{display:table-cell!important}}@media(min-width:1200px){.visible-lg{display:block!important}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}.hidden-xs{display:block!important}tr.hidden-xs{display:table-row!important}th.hidden-xs,td.hidden-xs{display:table-cell!important}@media(max-width:767px){.hidden-xs{display:none!important}tr.hidden-xs{display:none!important}th.hidden-xs,td.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-xs.hidden-sm{display:none!important}tr.hidden-xs.hidden-sm{display:none!important}th.hidden-xs.hidden-sm,td.hidden-xs.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-xs.hidden-md{display:none!important}tr.hidden-xs.hidden-md{display:none!important}th.hidden-xs.hidden-md,td.hidden-xs.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-xs.hidden-lg{display:none!important}tr.hidden-xs.hidden-lg{display:none!important}th.hidden-xs.hidden-lg,td.hidden-xs.hidden-lg{display:none!important}}.hidden-sm{display:block!important}tr.hidden-sm{display:table-row!important}th.hidden-sm,td.hidden-sm{display:table-cell!important}@media(max-width:767px){.hidden-sm.hidden-xs{display:none!important}tr.hidden-sm.hidden-xs{display:none!important}th.hidden-sm.hidden-xs,td.hidden-sm.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}tr.hidden-sm{display:none!important}th.hidden-sm,td.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-sm.hidden-md{display:none!important}tr.hidden-sm.hidden-md{display:none!important}th.hidden-sm.hidden-md,td.hidden-sm.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-sm.hidden-lg{display:none!important}tr.hidden-sm.hidden-lg{display:none!important}th.hidden-sm.hidden-lg,td.hidden-sm.hidden-lg{display:none!important}}.hidden-md{display:block!important}tr.hidden-md{display:table-row!important}th.hidden-md,td.hidden-md{display:table-cell!important}@media(max-width:767px){.hidden-md.hidden-xs{display:none!important}tr.hidden-md.hidden-xs{display:none!important}th.hidden-md.hidden-xs,td.hidden-md.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-md.hidden-sm{display:none!important}tr.hidden-md.hidden-sm{display:none!important}th.hidden-md.hidden-sm,td.hidden-md.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}tr.hidden-md{display:none!important}th.hidden-md,td.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-md.hidden-lg{display:none!important}tr.hidden-md.hidden-lg{display:none!important}th.hidden-md.hidden-lg,td.hidden-md.hidden-lg{display:none!important}}.hidden-lg{display:block!important}tr.hidden-lg{display:table-row!important}th.hidden-lg,td.hidden-lg{display:table-cell!important}@media(max-width:767px){.hidden-lg.hidden-xs{display:none!important}tr.hidden-lg.hidden-xs{display:none!important}th.hidden-lg.hidden-xs,td.hidden-lg.hidden-xs{display:none!important}}@media(min-width:768px) and (max-width:991px){.hidden-lg.hidden-sm{display:none!important}tr.hidden-lg.hidden-sm{display:none!important}th.hidden-lg.hidden-sm,td.hidden-lg.hidden-sm{display:none!important}}@media(min-width:992px) and (max-width:1199px){.hidden-lg.hidden-md{display:none!important}tr.hidden-lg.hidden-md{display:none!important}th.hidden-lg.hidden-md,td.hidden-lg.hidden-md{display:none!important}}@media(min-width:1200px){.hidden-lg{display:none!important}tr.hidden-lg{display:none!important}th.hidden-lg,td.hidden-lg{display:none!important}}.visible-print{display:none!important}tr.visible-print{display:none!important}th.visible-print,td.visible-print{display:none!important}@media print{.visible-print{display:block!important}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}.hidden-print{display:none!important}tr.hidden-print{display:none!important}th.hidden-print,td.hidden-print{display:none!important}} \ No newline at end of file diff --git a/src/MvcMusicStore/Controllers/AccountController.cs b/src/MvcMusicStore/Controllers/AccountController.cs deleted file mode 100644 index d31a16462b..0000000000 --- a/src/MvcMusicStore/Controllers/AccountController.cs +++ /dev/null @@ -1,418 +0,0 @@ -using System.Threading.Tasks; -using System.Web; -using System.Web.Mvc; -using Microsoft.AspNet.Identity; -using Microsoft.AspNet.Identity.EntityFramework; -using Microsoft.Owin.Security; -using MvcMusicStore.Models; - -namespace MvcMusicStore.Controllers -{ - [Authorize] - public class AccountController : Controller - { - public enum ManageMessageId - { - ChangePasswordSuccess, - SetPasswordSuccess, - RemoveLoginSuccess, - Error - } - - private const string XsrfKey = "XsrfId"; - - private UserManager _userManager; - - public AccountController() - : this(new UserManager(new UserStore(new ApplicationDbContext()))) - { - } - - public AccountController(UserManager userManager) - { - _userManager = userManager; - } - - private IAuthenticationManager AuthenticationManager - { - get { return HttpContext.GetOwinContext().Authentication; } - } - - private async Task MigrateShoppingCart(string userName) - { - using (var storeContext = new MusicStoreEntities()) - { - var cart = ShoppingCart.GetCart(storeContext, this); - - await cart.MigrateCart(userName); - - Session[ShoppingCart.CartSessionKey] = userName; - } - } - - // GET: /Account/Login - [AllowAnonymous] - public ActionResult Login(string returnUrl) - { - ViewBag.ReturnUrl = returnUrl; - - return View(); - } - - // POST: /Account/Login - [HttpPost] - [AllowAnonymous] - [ValidateAntiForgeryToken] - public async Task Login(LoginViewModel model, string returnUrl) - { - if (ModelState.IsValid) - { - var user = await _userManager.FindAsync(model.UserName, model.Password); - if (user != null) - { - await SignInAsync(user, model.RememberMe); - - return RedirectToLocal(returnUrl); - } - - ModelState.AddModelError("", "Invalid username or password."); - } - - return View(model); - } - - // GET: /Account/Register - [AllowAnonymous] - public ActionResult Register() - { - return View(); - } - - // POST: /Account/Register - [HttpPost] - [AllowAnonymous] - [ValidateAntiForgeryToken] - public async Task Register(RegisterViewModel model) - { - if (ModelState.IsValid) - { - var user = new ApplicationUser { UserName = model.UserName }; - var result = await _userManager.CreateAsync(user, model.Password); - if (result.Succeeded) - { - await SignInAsync(user, false); - - return RedirectToAction("Index", "Home"); - } - - AddErrors(result); - } - - return View(model); - } - - // POST: /Account/Disassociate - [HttpPost] - [ValidateAntiForgeryToken] - public async Task Disassociate(string loginProvider, string providerKey) - { - var result = await _userManager.RemoveLoginAsync( - User.Identity.GetUserId(), - new UserLoginInfo(loginProvider, providerKey)); - - return RedirectToAction( - "Manage", - new { Message = result.Succeeded ? ManageMessageId.RemoveLoginSuccess : ManageMessageId.Error }); - } - - // GET: /Account/Manage - public async Task Manage(ManageMessageId? message) - { - switch (message) - { - case ManageMessageId.ChangePasswordSuccess: - ViewBag.StatusMessage = "Your password has been changed."; - break; - case ManageMessageId.SetPasswordSuccess: - ViewBag.StatusMessage = "Your password has been set."; - break; - case ManageMessageId.RemoveLoginSuccess: - ViewBag.StatusMessage = "The external login was removed."; - break; - case ManageMessageId.Error: - ViewBag.StatusMessage = "An error has occurred."; - break; - default: - ViewBag.StatusMessage = ""; - break; - } - - ViewBag.HasLocalPassword = await HasPasswordAsync(); - ViewBag.ReturnUrl = Url.Action("Manage"); - - return View(); - } - - // POST: /Account/Manage - [HttpPost] - [ValidateAntiForgeryToken] - public async Task Manage(ManageUserViewModel model) - { - bool hasPassword = await HasPasswordAsync(); - ViewBag.HasLocalPassword = hasPassword; - ViewBag.ReturnUrl = Url.Action("Manage"); - - if (hasPassword) - { - if (ModelState.IsValid) - { - var result = await _userManager.ChangePasswordAsync( - User.Identity.GetUserId(), - model.OldPassword, - model.NewPassword); - - if (result.Succeeded) - { - return RedirectToAction("Manage", new { Message = ManageMessageId.ChangePasswordSuccess }); - } - - AddErrors(result); - } - } - else - { - var state = ModelState["OldPassword"]; - if (state != null) - { - state.Errors.Clear(); - } - - if (ModelState.IsValid) - { - var result = await _userManager.AddPasswordAsync( - User.Identity.GetUserId(), - model.NewPassword); - - if (result.Succeeded) - { - return RedirectToAction("Manage", new { Message = ManageMessageId.SetPasswordSuccess }); - } - - AddErrors(result); - } - } - - return View(model); - } - - // POST: /Account/ExternalLogin - [HttpPost] - [AllowAnonymous] - [ValidateAntiForgeryToken] - public ActionResult ExternalLogin(string provider, string returnUrl) - { - return new ChallengeResult(provider, - Url.Action("ExternalLoginCallback", "Account", new { ReturnUrl = returnUrl })); - } - - // GET: /Account/ExternalLoginCallback - [AllowAnonymous] - public async Task ExternalLoginCallback(string returnUrl) - { - var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(); - if (loginInfo == null) - { - return RedirectToAction("Login"); - } - - var user = await _userManager.FindAsync(loginInfo.Login); - if (user != null) - { - await SignInAsync(user, false); - - return RedirectToLocal(returnUrl); - } - - ViewBag.ReturnUrl = returnUrl; - ViewBag.LoginProvider = loginInfo.Login.LoginProvider; - - return View("ExternalLoginConfirmation", - new ExternalLoginConfirmationViewModel { UserName = loginInfo.DefaultUserName }); - } - - // POST: /Account/LinkLogin - [HttpPost] - [ValidateAntiForgeryToken] - public ActionResult LinkLogin(string provider) - { - return new ChallengeResult(provider, Url.Action("LinkLoginCallback", "Account"), User.Identity.GetUserId()); - } - - // GET: /Account/LinkLoginCallback - public async Task LinkLoginCallback() - { - var loginInfo = - await AuthenticationManager.GetExternalLoginInfoAsync(XsrfKey, User.Identity.GetUserId()); - - if (loginInfo == null) - { - return RedirectToAction("Manage", new { Message = ManageMessageId.Error }); - } - - var result = await _userManager.AddLoginAsync(User.Identity.GetUserId(), loginInfo.Login); - if (result.Succeeded) - { - return RedirectToAction("Manage"); - } - - return RedirectToAction("Manage", new { Message = ManageMessageId.Error }); - } - - // POST: /Account/ExternalLoginConfirmation - [HttpPost] - [AllowAnonymous] - [ValidateAntiForgeryToken] - public async Task ExternalLoginConfirmation( - ExternalLoginConfirmationViewModel model, - string returnUrl) - { - if (User.Identity.IsAuthenticated) - { - return RedirectToAction("Manage"); - } - - if (ModelState.IsValid) - { - // Get the information about the user from the external login provider - var info = await AuthenticationManager.GetExternalLoginInfoAsync(); - if (info == null) - { - return View("ExternalLoginFailure"); - } - - var user = new ApplicationUser { UserName = model.UserName }; - - var result = await _userManager.CreateAsync(user); - if (result.Succeeded) - { - result = await _userManager.AddLoginAsync(user.Id, info.Login); - - if (result.Succeeded) - { - await SignInAsync(user, false); - return RedirectToLocal(returnUrl); - } - } - - AddErrors(result); - } - - ViewBag.ReturnUrl = returnUrl; - - return View(model); - } - - // POST: /Account/LogOff - [HttpPost] - [ValidateAntiForgeryToken] - public ActionResult LogOff() - { - AuthenticationManager.SignOut(); - - return RedirectToAction("Index", "Home"); - } - - // GET: /Account/ExternalLoginFailure - [AllowAnonymous] - public ActionResult ExternalLoginFailure() - { - return View(); - } - - [ChildActionOnly] - public ActionResult RemoveAccountList() - { - var linkedAccounts = _userManager.GetLogins(User.Identity.GetUserId()); - - ViewBag.ShowRemoveButton = HasPassword() || linkedAccounts.Count > 1; - - return PartialView("_RemoveAccountPartial", linkedAccounts); - } - - protected override void Dispose(bool disposing) - { - if (disposing && _userManager != null) - { - _userManager.Dispose(); - _userManager = null; - } - - base.Dispose(disposing); - } - - private async Task SignInAsync(ApplicationUser user, bool isPersistent) - { - AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie); - - var identity = - await _userManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie); - - AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = isPersistent }, identity); - - await MigrateShoppingCart(user.UserName); - } - - private void AddErrors(IdentityResult result) - { - foreach (var error in result.Errors) - { - ModelState.AddModelError("", error); - } - } - - private bool HasPassword() - { - var user = _userManager.FindById(User.Identity.GetUserId()); - - return user != null && user.PasswordHash != null; - } - - private async Task HasPasswordAsync() - { - var user = await _userManager.FindByIdAsync(User.Identity.GetUserId()); - - return user != null && user.PasswordHash != null; - } - - private ActionResult RedirectToLocal(string returnUrl) - { - return Url.IsLocalUrl(returnUrl) - ? (ActionResult)Redirect(returnUrl) - : RedirectToAction("Index", "Home"); - } - - private class ChallengeResult : HttpUnauthorizedResult - { - private readonly string _loginProvider; - private readonly string _redirectUri; - private readonly string _userId; - - public ChallengeResult(string provider, string redirectUri, string userId = null) - { - _loginProvider = provider; - _redirectUri = redirectUri; - _userId = userId; - } - - public override void ExecuteResult(ControllerContext context) - { - var properties = new AuthenticationProperties { RedirectUri = _redirectUri }; - if (_userId != null) - { - properties.Dictionary[XsrfKey] = _userId; - } - context.HttpContext.GetOwinContext().Authentication.Challenge(properties, _loginProvider); - } - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore/Controllers/CheckoutController.cs b/src/MvcMusicStore/Controllers/CheckoutController.cs deleted file mode 100644 index 98b832b767..0000000000 --- a/src/MvcMusicStore/Controllers/CheckoutController.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System; -using System.Data.Entity; -using System.Threading.Tasks; -using System.Web.Mvc; -using MvcMusicStore.Models; - -namespace MvcMusicStore.Controllers -{ - [Authorize] - public class CheckoutController : Controller - { - private const string PromoCode = "FREE"; - - private readonly MusicStoreEntities _storeContext = new MusicStoreEntities(); - - // GET: /Checkout/ - public ActionResult AddressAndPayment() - { - return View(); - } - - // POST: /Checkout/AddressAndPayment - [HttpPost] - public async Task AddressAndPayment(FormCollection values) - { - var order = new Order(); - TryUpdateModel(order); - - if (ModelState.IsValid - && string.Equals(values["PromoCode"], PromoCode, StringComparison.OrdinalIgnoreCase)) - { - order.Username = User.Identity.Name; - order.OrderDate = DateTime.Now; - - _storeContext.Orders.Add(order); - - await ShoppingCart.GetCart(_storeContext, this).CreateOrder(order); - - await _storeContext.SaveChangesAsync(); - - return RedirectToAction("Complete", new { id = order.OrderId }); - } - - return View(order); - } - - // GET: /Checkout/Complete - public async Task Complete(int id) - { - return await _storeContext.Orders.AnyAsync(o => o.OrderId == id && o.Username == User.Identity.Name) - ? View(id) - : View("Error"); - } - - protected override void Dispose(bool disposing) - { - if (disposing) - { - _storeContext.Dispose(); - } - base.Dispose(disposing); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore/Controllers/HomeController.cs b/src/MvcMusicStore/Controllers/HomeController.cs deleted file mode 100644 index 710bc42cc8..0000000000 --- a/src/MvcMusicStore/Controllers/HomeController.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System.Data.Entity; -using System.Linq; -using System.Threading.Tasks; -using System.Web.Mvc; -using MvcMusicStore.Models; - -namespace MvcMusicStore.Controllers -{ - public class HomeController : Controller - { - private readonly MusicStoreEntities _storeContext = new MusicStoreEntities(); - - // GET: /Home/ - public async Task Index() - { - return View(await _storeContext.Albums - .OrderByDescending(a => a.OrderDetails.Count()) - .Take(6) - .ToListAsync()); - } - - protected override void Dispose(bool disposing) - { - if (disposing) - { - _storeContext.Dispose(); - } - base.Dispose(disposing); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore/Controllers/ShoppingCartController.cs b/src/MvcMusicStore/Controllers/ShoppingCartController.cs deleted file mode 100644 index c8bd97adcf..0000000000 --- a/src/MvcMusicStore/Controllers/ShoppingCartController.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System.Data.Entity; -using System.Linq; -using System.Threading.Tasks; -using System.Web.Mvc; -using MvcMusicStore.Models; -using MvcMusicStore.ViewModels; - -namespace MvcMusicStore.Controllers -{ - public class ShoppingCartController : Controller - { - private readonly MusicStoreEntities _storeContext = new MusicStoreEntities(); - - // GET: /ShoppingCart/ - public async Task Index() - { - var cart = ShoppingCart.GetCart(_storeContext, this); - - var viewModel = new ShoppingCartViewModel - { - CartItems = await cart.GetCartItems().ToListAsync(), - CartTotal = await cart.GetTotal() - }; - - return View(viewModel); - } - - // GET: /ShoppingCart/AddToCart/5 - public async Task AddToCart(int id) - { - var cart = ShoppingCart.GetCart(_storeContext, this); - - await cart.AddToCart(await _storeContext.Albums.SingleAsync(a => a.AlbumId == id)); - - await _storeContext.SaveChangesAsync(); - - return RedirectToAction("Index"); - } - - // AJAX: /ShoppingCart/RemoveFromCart/5 - [HttpPost] - public async Task RemoveFromCart(int id) - { - var cart = ShoppingCart.GetCart(_storeContext, this); - - var albumName = await _storeContext.Carts - .Where(i => i.RecordId == id) - .Select(i => i.Album.Title) - .SingleOrDefaultAsync(); - - var itemCount = await cart.RemoveFromCart(id); - - await _storeContext.SaveChangesAsync(); - - var removed = (itemCount > 0) ? " 1 copy of " : string.Empty; - - var results = new ShoppingCartRemoveViewModel - { - Message = removed + albumName + " has been removed from your shopping cart.", - CartTotal = await cart.GetTotal(), - CartCount = await cart.GetCount(), - ItemCount = itemCount, - DeleteId = id - }; - - return Json(results); - } - - [ChildActionOnly] - public ActionResult CartSummary() - { - var cart = ShoppingCart.GetCart(_storeContext, this); - - var cartItems = cart.GetCartItems() - .Select(a => a.Album.Title) - .OrderBy(x => x) - .ToList(); - - ViewBag.CartCount = cartItems.Count(); - ViewBag.CartSummary = string.Join("\n", cartItems.Distinct()); - - return PartialView("CartSummary"); - } - - protected override void Dispose(bool disposing) - { - if (disposing) - { - _storeContext.Dispose(); - } - base.Dispose(disposing); - } - } -} diff --git a/src/MvcMusicStore/Controllers/StoreController.cs b/src/MvcMusicStore/Controllers/StoreController.cs deleted file mode 100644 index 2930627fbf..0000000000 --- a/src/MvcMusicStore/Controllers/StoreController.cs +++ /dev/null @@ -1,49 +0,0 @@ -using System.Data.Entity; -using System.Linq; -using System.Threading.Tasks; -using System.Web.Mvc; -using MvcMusicStore.Models; - -namespace MvcMusicStore.Controllers -{ - public class StoreController : Controller - { - private readonly MusicStoreEntities _storeContext = new MusicStoreEntities(); - - // GET: /Store/ - public async Task Index() - { - return View(await _storeContext.Genres.ToListAsync()); - } - - // GET: /Store/Browse?genre=Disco - public async Task Browse(string genre) - { - return View(await _storeContext.Genres.Include("Albums").SingleAsync(g => g.Name == genre)); - } - - public async Task Details(int id) - { - var album = await _storeContext.Albums.FindAsync(id); - - return album != null ? View(album) : (ActionResult)HttpNotFound(); - } - - [ChildActionOnly] - public ActionResult GenreMenu() - { - return PartialView( - _storeContext.Genres.OrderByDescending( - g => g.Albums.Sum(a => a.OrderDetails.Sum(od => od.Quantity))).Take(9).ToList()); - } - - protected override void Dispose(bool disposing) - { - if (disposing) - { - _storeContext.Dispose(); - } - base.Dispose(disposing); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore/Controllers/StoreManagerController.cs b/src/MvcMusicStore/Controllers/StoreManagerController.cs deleted file mode 100644 index 242304f2c8..0000000000 --- a/src/MvcMusicStore/Controllers/StoreManagerController.cs +++ /dev/null @@ -1,141 +0,0 @@ -using System.Data.Entity; -using System.Linq; -using System.Threading.Tasks; -using System.Web.Mvc; -using MvcMusicStore.Models; - -namespace MvcMusicStore.Controllers -{ - [Authorize(Roles = "Administrator")] - public class StoreManagerController : Controller - { - private readonly MusicStoreEntities _storeContext = new MusicStoreEntities(); - - // GET: /StoreManager/ - public async Task Index() - { - return View(await _storeContext.Albums - .Include(a => a.Genre) - .Include(a => a.Artist) - .OrderBy(a => a.Price).ToListAsync()); - } - - // GET: /StoreManager/Details/5 - public async Task Details(int id = 0) - { - var album = await _storeContext.Albums.FindAsync(id); - - if (album == null) - { - return HttpNotFound(); - } - - return View(album); - } - - // GET: /StoreManager/Create - public async Task Create() - { - return await BuildView(null); - } - - // POST: /StoreManager/Create - [HttpPost] - public async Task Create(Album album) - { - if (ModelState.IsValid) - { - _storeContext.Albums.Add(album); - - await _storeContext.SaveChangesAsync(); - - return RedirectToAction("Index"); - } - - return await BuildView(album); - } - - // GET: /StoreManager/Edit/5 - public async Task Edit(int id = 0) - { - var album = await _storeContext.Albums.FindAsync(id); - if (album == null) - { - return HttpNotFound(); - } - - return await BuildView(album); - } - - // POST: /StoreManager/Edit/5 - [HttpPost] - public async Task Edit(Album album) - { - if (ModelState.IsValid) - { - _storeContext.Entry(album).State = EntityState.Modified; - - await _storeContext.SaveChangesAsync(); - - return RedirectToAction("Index"); - } - - return await BuildView(album); - } - - // GET: /StoreManager/Delete/5 - public async Task Delete(int id = 0) - { - var album = await _storeContext.Albums.FindAsync(id); - if (album == null) - { - return HttpNotFound(); - } - - return View(album); - } - - // POST: /StoreManager/Delete/5 - [HttpPost, ActionName("Delete")] - public async Task DeleteConfirmed(int id) - { - var album = await _storeContext.Albums.FindAsync(id); - if (album == null) - { - return HttpNotFound(); - } - - _storeContext.Albums.Remove(album); - - await _storeContext.SaveChangesAsync(); - - return RedirectToAction("Index"); - } - - private async Task BuildView(Album album) - { - ViewBag.GenreId = new SelectList( - await _storeContext.Genres.ToListAsync(), - "GenreId", - "Name", - album == null ? null : (object)album.GenreId); - - ViewBag.ArtistId = new SelectList( - await _storeContext.Artists.ToListAsync(), - "ArtistId", - "Name", - album == null ? null : (object)album.ArtistId); - - return View(album); - } - - protected override void Dispose(bool disposing) - { - if (disposing) - { - _storeContext.Dispose(); - } - base.Dispose(disposing); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore/Global.asax b/src/MvcMusicStore/Global.asax deleted file mode 100644 index 8223631056..0000000000 --- a/src/MvcMusicStore/Global.asax +++ /dev/null @@ -1 +0,0 @@ -<%@ Application Codebehind="Global.asax.cs" Inherits="MvcMusicStore.MvcApplication" Language="C#" %> diff --git a/src/MvcMusicStore/Global.asax.cs b/src/MvcMusicStore/Global.asax.cs deleted file mode 100644 index 45a453df70..0000000000 --- a/src/MvcMusicStore/Global.asax.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Web.Mvc; -using System.Web.Optimization; -using System.Web.Routing; - -namespace MvcMusicStore -{ - public class MvcApplication : System.Web.HttpApplication - { - protected void Application_Start() - { - AreaRegistration.RegisterAllAreas(); - FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); - RouteConfig.RegisterRoutes(RouteTable.Routes); - BundleConfig.RegisterBundles(BundleTable.Bundles); - } - } -} diff --git a/src/MvcMusicStore/Images/home-showcase.png b/src/MvcMusicStore/Images/home-showcase.png deleted file mode 100644 index 258c19d3cd..0000000000 Binary files a/src/MvcMusicStore/Images/home-showcase.png and /dev/null differ diff --git a/src/MvcMusicStore/Images/logo.png b/src/MvcMusicStore/Images/logo.png deleted file mode 100644 index d334c86256..0000000000 Binary files a/src/MvcMusicStore/Images/logo.png and /dev/null differ diff --git a/src/MvcMusicStore/Images/logo.svg b/src/MvcMusicStore/Images/logo.svg deleted file mode 100644 index ec3cd6aa5b..0000000000 --- a/src/MvcMusicStore/Images/logo.svg +++ /dev/null @@ -1,303 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/MvcMusicStore/Images/placeholder.png b/src/MvcMusicStore/Images/placeholder.png deleted file mode 100644 index 1f73dbb43d..0000000000 Binary files a/src/MvcMusicStore/Images/placeholder.png and /dev/null differ diff --git a/src/MvcMusicStore/Images/placeholder.svg b/src/MvcMusicStore/Images/placeholder.svg deleted file mode 100644 index 07d58202df..0000000000 --- a/src/MvcMusicStore/Images/placeholder.svg +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/MvcMusicStore/Models/AccountViewModels.cs b/src/MvcMusicStore/Models/AccountViewModels.cs deleted file mode 100644 index 6e0f121a83..0000000000 --- a/src/MvcMusicStore/Models/AccountViewModels.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace MvcMusicStore.Models -{ - public class ExternalLoginConfirmationViewModel - { - [Required] - [Display(Name = "User name")] - public string UserName { get; set; } - } - - public class ManageUserViewModel - { - [Required] - [DataType(DataType.Password)] - [Display(Name = "Current password")] - public string OldPassword { get; set; } - - [Required] - [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] - [DataType(DataType.Password)] - [Display(Name = "New password")] - public string NewPassword { get; set; } - - [DataType(DataType.Password)] - [Display(Name = "Confirm new password")] - [Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")] - public string ConfirmPassword { get; set; } - } - - public class LoginViewModel - { - [Required] - [Display(Name = "User name")] - public string UserName { get; set; } - - [Required] - [DataType(DataType.Password)] - [Display(Name = "Password")] - public string Password { get; set; } - - [Display(Name = "Remember me?")] - public bool RememberMe { get; set; } - } - - public class RegisterViewModel - { - [Required] - [Display(Name = "User name")] - public string UserName { get; set; } - - [Required] - [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] - [DataType(DataType.Password)] - [Display(Name = "Password")] - public string Password { get; set; } - - [DataType(DataType.Password)] - [Display(Name = "Confirm password")] - [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] - public string ConfirmPassword { get; set; } - } -} diff --git a/src/MvcMusicStore/Models/Album.cs b/src/MvcMusicStore/Models/Album.cs deleted file mode 100644 index fa399c0584..0000000000 --- a/src/MvcMusicStore/Models/Album.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.DataAnnotations; - -namespace MvcMusicStore.Models -{ - public class Album { - [ScaffoldColumn(false)] - - public int AlbumId { get; set; } - - public int GenreId { get; set; } - - public int ArtistId { get; set; } - - [Required] - [StringLength(160, MinimumLength = 2)] - public string Title { get; set; } - - [Required] - [Range(0.01, 100.00)] - - [DataType(DataType.Currency)] - public decimal Price { get; set; } - - [DisplayName("Album Art URL")] - [StringLength(1024)] - public string AlbumArtUrl { get; set; } - - public virtual Genre Genre { get; set; } - public virtual Artist Artist { get; set; } - public virtual List OrderDetails { get; set; } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore/Models/Artist.cs b/src/MvcMusicStore/Models/Artist.cs deleted file mode 100644 index 156675c034..0000000000 --- a/src/MvcMusicStore/Models/Artist.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace MvcMusicStore.Models -{ - public class Artist - { - public int ArtistId { get; set; } - public string Name { get; set; } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore/Models/Cart.cs b/src/MvcMusicStore/Models/Cart.cs deleted file mode 100644 index 01507a2eb5..0000000000 --- a/src/MvcMusicStore/Models/Cart.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.ComponentModel.DataAnnotations; - -namespace MvcMusicStore.Models -{ - public class Cart - { - [Key] - public int RecordId { get; set; } - public string CartId { get; set; } - public int AlbumId { get; set; } - public int Count { get; set; } - - [DataType(DataType.DateTime)] - public DateTime DateCreated { get; set; } - - public virtual Album Album { get; set; } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore/Models/Genre.cs b/src/MvcMusicStore/Models/Genre.cs deleted file mode 100644 index d2e61f4e4a..0000000000 --- a/src/MvcMusicStore/Models/Genre.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.Collections.Generic; - -namespace MvcMusicStore.Models -{ - public class Genre - { - public int GenreId { get; set; } - public string Name { get; set; } - public string Description { get; set; } - public List Albums { get; set; } - } -} diff --git a/src/MvcMusicStore/Models/IdentityModels.cs b/src/MvcMusicStore/Models/IdentityModels.cs deleted file mode 100644 index 464dc16d7e..0000000000 --- a/src/MvcMusicStore/Models/IdentityModels.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Microsoft.AspNet.Identity.EntityFramework; - -namespace MvcMusicStore.Models -{ - // You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more. - public class ApplicationUser : IdentityUser - { - } - - public class ApplicationDbContext : IdentityDbContext - { - public ApplicationDbContext() - : base("DefaultConnection") - { - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore/Models/MusicStoreEntities.cs b/src/MvcMusicStore/Models/MusicStoreEntities.cs deleted file mode 100644 index f58e910e73..0000000000 --- a/src/MvcMusicStore/Models/MusicStoreEntities.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Data.Entity; - -namespace MvcMusicStore.Models -{ - public class MusicStoreEntities : DbContext - { - public MusicStoreEntities() - : base("name=MusicStoreEntities") - { - } - - public DbSet Albums { get; set; } - public DbSet Genres { get; set; } - public DbSet Artists { get; set; } - public DbSet Carts { get; set; } - public DbSet Orders { get; set; } - public DbSet OrderDetails { get; set; } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore/Models/Order.cs b/src/MvcMusicStore/Models/Order.cs deleted file mode 100644 index c06c1a964e..0000000000 --- a/src/MvcMusicStore/Models/Order.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System.Collections.Generic; -using System.ComponentModel; -using System.ComponentModel.DataAnnotations; -using System.Web.Mvc; - -namespace MvcMusicStore.Models -{ - [Bind(Include = "FirstName,LastName,Address,City,State,PostalCode,Country,Phone,Email")] - public class Order - { - public Order() - { - OrderDetails = new List(); - } - - [ScaffoldColumn(false)] - public int OrderId { get; set; } - - [ScaffoldColumn(false)] - public System.DateTime OrderDate { get; set; } - - [ScaffoldColumn(false)] - public string Username { get; set; } - - [Required] - [DisplayName("First Name")] - [StringLength(160)] - public string FirstName { get; set; } - - [Required] - [DisplayName("Last Name")] - [StringLength(160)] - public string LastName { get; set; } - - [Required] - [StringLength(70, MinimumLength = 3)] - public string Address { get; set; } - - [Required] - [StringLength(40)] - public string City { get; set; } - - [Required] - [StringLength(40)] - public string State { get; set; } - - [Required] - [DisplayName("Postal Code")] - [StringLength(10, MinimumLength = 5)] - public string PostalCode { get; set; } - - [Required] - [StringLength(40)] - public string Country { get; set; } - - [Required] - [StringLength(24)] - [DataType(DataType.PhoneNumber)] - public string Phone { get; set; } - - [Required] - [DisplayName("Email Address")] - [RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}", - ErrorMessage = "Email is not valid.")] - [DataType(DataType.EmailAddress)] - public string Email { get; set; } - - [ScaffoldColumn(false)] - public decimal Total { get; set; } - - public List OrderDetails { get; set; } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore/Models/OrderDetail.cs b/src/MvcMusicStore/Models/OrderDetail.cs deleted file mode 100644 index e52c3efa93..0000000000 --- a/src/MvcMusicStore/Models/OrderDetail.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace MvcMusicStore.Models -{ - public class OrderDetail - { - public int OrderDetailId { get; set; } - public int OrderId { get; set; } - public int AlbumId { get; set; } - public int Quantity { get; set; } - public decimal UnitPrice { get; set; } - - public virtual Album Album { get; set; } - public virtual Order Order { get; set; } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore/Models/SampleData.cs b/src/MvcMusicStore/Models/SampleData.cs deleted file mode 100644 index 92984ad9fc..0000000000 --- a/src/MvcMusicStore/Models/SampleData.cs +++ /dev/null @@ -1,4066 +0,0 @@ -using System.Collections.Generic; -using System.Linq; - -namespace MvcMusicStore.Models -{ - public class SampleData - { - public void Seed(MusicStoreEntities context) - { - const string imgUrl = "~/Images/placeholder.png"; - - AddAlbums(context, imgUrl, AddGenres(context), AddArtists(context)); - - context.SaveChanges(); - } - - private static void AddAlbums( - MusicStoreEntities context, - string imgUrl, - List genres, - List artists) - { - var albums = new[] - { - new Album - { - Title = "The Best Of The Men At Work", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Men At Work"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "...And Justice For All", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Metallica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "עד גבול האור", - Genre = genres.Single(g => g.Name == "World"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "אריק אינשטיין"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Black Light Syndrome", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Terry Bozzio, Tony Levin & Steve Stevens"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "10,000 Days", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Tool"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "11i", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Supreme Beings of Leisure"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "1960", - Genre = genres.Single(g => g.Name == "Indie"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Soul-Junk"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "4x4=12 ", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "deadmau5"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "A Copland Celebration, Vol. I", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "London Symphony Orchestra"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "A Lively Mind", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Paul Oakenfold"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "A Matter of Life and Death", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "A Real Dead One", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "A Real Live One", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "A Rush of Blood to the Head", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Coldplay"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "A Soprano Inspired", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Britten Sinfonia, Ivor Bolton & Lesley Garrett"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "A Winter Symphony", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sarah Brightman"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Abbey Road", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Beatles"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Ace Of Spades", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Motörhead"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Achtung Baby", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "U2"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Acústico MTV", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Os Paralamas Do Sucesso"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Adams, John: The Chairman Dances", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Edo de Waart & San Francisco Symphony"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Adrenaline", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Deftones"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Ænima", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Tool"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Afrociberdelia", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Chico Science & Nação Zumbi"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "After the Goldrush", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Neil Young"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Airdrawn Dagger", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sasha"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Album Title Goes Here", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "deadmau5"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Alcohol Fueled Brewtality Live! [Disc 1]", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Black Label Society"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Alcohol Fueled Brewtality Live! [Disc 2]", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Black Label Society"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Alive 2007", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Daft Punk"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "All I Ask of You", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sarah Brightman"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Amen (So Be It)", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Paddy Casey"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Animal Vehicle", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Axis of Awesome"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Ao Vivo [IMPORT]", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Zeca Pagodinho"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Apocalyptic Love", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Slash"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Appetite for Destruction", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Guns N' Roses"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Are You Experienced?", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Jimi Hendrix"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Arquivo II", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Os Paralamas Do Sucesso"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Arquivo Os Paralamas Do Sucesso", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Os Paralamas Do Sucesso"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "A-Sides", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Soundgarden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Audioslave", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Audioslave"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Automatic for the People", - Genre = genres.Single(g => g.Name == "Alternative"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "R.E.M."), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Axé Bahia 2001", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Various Artists"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Babel", - Genre = genres.Single(g => g.Name == "Alternative"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Mumford & Sons"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Bach: Goldberg Variations", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Wilhelm Kempff"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Bach: The Brandenburg Concertos", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Orchestra of The Age of Enlightenment"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Bach: The Cello Suites", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Yo-Yo Ma"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Bach: Toccata & Fugue in D Minor", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Ton Koopman"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Bad Motorfinger", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Soundgarden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Balls to the Wall", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Accept"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Banadeek Ta'ala", - Genre = genres.Single(g => g.Name == "World"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Amr Diab"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Barbie Girl", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Aqua"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Bark at the Moon (Remastered)", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Ozzy Osbourne"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Bartok: Violin & Viola Concertos", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Yehudi Menuhin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Barulhinho Bom", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Marisa Monte"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "BBC Sessions [Disc 1] [Live]", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "BBC Sessions [Disc 2] [Live]", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Be Here Now", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Oasis"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Bedrock 11 Compiled & Mixed", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "John Digweed"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Berlioz: Symphonie Fantastique", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Michael Tilson Thomas"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Beyond Good And Evil", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Cult"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Big Bad Wolf ", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Armand Van Helden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Big Ones", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Aerosmith"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Black Album", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Metallica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Black Sabbath Vol. 4 (Remaster)", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Black Sabbath"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Black Sabbath", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Black Sabbath"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Black", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Metallica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Blackwater Park", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Opeth"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Blizzard of Ozz", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Ozzy Osbourne"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Blood", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "In This Moment"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Blue Moods", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Incognito"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Blue", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Weezer"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Bongo Fury", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Frank Zappa & Captain Beefheart"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Boys & Girls", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Alabama Shakes"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Brave New World", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "B-Sides 1980-1990", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "U2"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Bunkka", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Paul Oakenfold"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "By The Way", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Red Hot Chili Peppers"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Cake: B-Sides and Rarities", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Cake"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Californication", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Red Hot Chili Peppers"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Carmina Burana", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Boston Symphony Orchestra & Seiji Ozawa"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Carried to Dust (Bonus Track Version)", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Calexico"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Carry On", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Chris Cornell"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Cássia Eller - Sem Limite [Disc 1]", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Cássia Eller"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Chemical Wedding", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Bruce Dickinson"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Chill: Brazil (Disc 1)", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Marcos Valle"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Chill: Brazil (Disc 2)", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Antônio Carlos Jobim"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Chocolate Starfish And The Hot Dog Flavored Water", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Limp Bizkit"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Chronicle, Vol. 1", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Creedence Clearwater Revival"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Chronicle, Vol. 2", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Creedence Clearwater Revival"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Ciao, Baby", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "TheStart"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Cidade Negra - Hits", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Cidade Negra"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Classic Munkle: Turbo Edition", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Munkle"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Classics: The Best of Sarah Brightman", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sarah Brightman"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Coda", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Come Away With Me", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Norah Jones"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Come Taste The Band", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Deep Purple"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Comfort Eagle", - Genre = genres.Single(g => g.Name == "Alternative"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Cake"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Common Reaction", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Uh Huh Her "), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Compositores", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "O Terço"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Contraband", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Velvet Revolver"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Core", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Stone Temple Pilots"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Cornerstone", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Styx"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Cosmicolor", - Genre = genres.Single(g => g.Name == "Rap"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "M-Flo"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Cross", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Justice"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Culture of Fear", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Thievery Corporation"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Da Lama Ao Caos", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Chico Science & Nação Zumbi"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Dakshina", - Genre = genres.Single(g => g.Name == "World"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Deva Premal"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Dark Side of the Moon", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Pink Floyd"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Death Magnetic", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Metallica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Deep End of Down", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Above the Fold"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Deep Purple In Rock", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Deep Purple"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Deixa Entrar", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Falamansa"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Deja Vu", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Crosby, Stills, Nash, and Young"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Di Korpu Ku Alma", - Genre = genres.Single(g => g.Name == "World"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Lura"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Diary of a Madman (Remastered)", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Ozzy Osbourne"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Diary of a Madman", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Ozzy Osbourne"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Dirt", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Alice in Chains"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Diver Down", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Van Halen"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Djavan Ao Vivo - Vol. 02", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Djavan"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Djavan Ao Vivo - Vol. 1", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Djavan"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Drum'n'bass for Papa", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Plug"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Duluth", - Genre = genres.Single(g => g.Name == "Country"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Trampled By Turtles"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Dummy", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Portishead"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Duos II", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Luciana Souza/Romero Lubambo"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Earl Scruggs and Friends", - Genre = genres.Single(g => g.Name == "Country"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Earl Scruggs"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Eden", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sarah Brightman"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "El Camino", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Black Keys"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Elegant Gypsy", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Al di Meola"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Elements Of Life", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Tiësto"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Elis Regina-Minha História", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Elis Regina"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Emergency On Planet Earth", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Jamiroquai"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Emotion", - Genre = genres.Single(g => g.Name == "World"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Papa Wemba"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "English Renaissance", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The King's Singers"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Every Kind of Light", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Posies"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Faceless", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Godsmack"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Facelift", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Alice in Chains"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Fair Warning", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Van Halen"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Fear of a Black Planet", - Genre = genres.Single(g => g.Name == "Rap"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Public Enemy"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Fear Of The Dark", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Feels Like Home", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Norah Jones"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Fireball", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Deep Purple"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Fly", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sarah Brightman"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "For Those About To Rock We Salute You", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "AC/DC"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Four", - Genre = genres.Single(g => g.Name == "Blues"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Blues Traveler"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Frank", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Amy Winehouse"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Further Down the Spiral", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Nine Inch Nails"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Garage Inc. (Disc 1)", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Metallica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Garage Inc. (Disc 2)", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Metallica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Garbage", - Genre = genres.Single(g => g.Name == "Alternative"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Garbage"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Good News For People Who Love Bad News", - Genre = genres.Single(g => g.Name == "Indie"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Modest Mouse"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Gordon", - Genre = genres.Single(g => g.Name == "Alternative"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Barenaked Ladies"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Górecki: Symphony No. 3", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Adrian Leaper & Doreen de Feis"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Greatest Hits I", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Queen"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Greatest Hits II", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Queen"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Greatest Hits", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Duck Sauce"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Greatest Hits", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Lenny Kravitz"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Greatest Hits", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Lenny Kravitz"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Greatest Kiss", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Kiss"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Greetings from Michigan", - Genre = genres.Single(g => g.Name == "Indie"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sufjan Stevens"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Group Therapy", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Above & Beyond"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Handel: The Messiah (Highlights)", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Scholars Baroque Ensemble"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Haydn: Symphonies 99 - 104", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Royal Philharmonic Orchestra"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Heart of the Night", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Spyro Gyra"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Heart On", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Eagles of Death Metal"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Holy Diver", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Dio"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Homework", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Daft Punk"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Hot Rocks, 1964-1971 (Disc 1)", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Rolling Stones"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Houses Of The Holy", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "How To Dismantle An Atomic Bomb", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "U2"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Human", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Projected"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Hunky Dory", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "David Bowie"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Hymns", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Projected"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Hysteria", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Def Leppard"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "In Absentia", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Porcupine Tree"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "In Between", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Paul Van Dyk"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "In Rainbows", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Radiohead"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "In Step", - Genre = genres.Single(g => g.Name == "Blues"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Stevie Ray Vaughan & Double Trouble"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "In the court of the Crimson King", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "King Crimson"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "In Through The Out Door", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "In Your Honor [Disc 1]", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Foo Fighters"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "In Your Honor [Disc 2]", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Foo Fighters"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Indestructible", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Rancid"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Infinity", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Journey"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Into The Light", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "David Coverdale"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Introspective", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Pet Shop Boys"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Iron Maiden", - Genre = genres.Single(g => g.Name == "Blues"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "ISAM", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Amon Tobin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "IV", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Jagged Little Pill", - Genre = genres.Single(g => g.Name == "Alternative"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Alanis Morissette"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Jagged Little Pill", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Alanis Morissette"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Jorge Ben Jor 25 Anos", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Jorge Ben"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Jota Quest-1995", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Jota Quest"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Kick", - Genre = genres.Single(g => g.Name == "Alternative"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "INXS"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Kill 'Em All", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Metallica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Kind of Blue", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Miles Davis"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "King For A Day Fool For A Lifetime", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Faith No More"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Kiss", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Carly Rae Jepsen"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Last Call", - Genre = genres.Single(g => g.Name == "Country"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Cayouche"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Le Freak", - Genre = genres.Single(g => g.Name == "R&B"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Chic"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Le Tigre", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Le Tigre"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Led Zeppelin I", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Led Zeppelin II", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Led Zeppelin III", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Let There Be Rock", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "AC/DC"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Little Earthquakes", - Genre = genres.Single(g => g.Name == "Alternative"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Tori Amos"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Live [Disc 1]", - Genre = genres.Single(g => g.Name == "Blues"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Black Crowes"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Live [Disc 2]", - Genre = genres.Single(g => g.Name == "Blues"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Black Crowes"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Live After Death", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Live At Donington 1992 (Disc 1)", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Live At Donington 1992 (Disc 2)", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Live on Earth", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Cat Empire"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Live On Two Legs [Live]", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Pearl Jam"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Living After Midnight", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Judas Priest"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Living", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Paddy Casey"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Load", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Metallica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Love Changes Everything", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sarah Brightman"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "MacArthur Park Suite", - Genre = genres.Single(g => g.Name == "R&B"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Donna Summer"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Machine Head", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Deep Purple"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Magical Mystery Tour", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Beatles"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Mais Do Mesmo", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Legião Urbana"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Maquinarama", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Skank"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Marasim", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Jagjit Singh"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Mascagni: Cavalleria Rusticana", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "James Levine"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Master of Puppets", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Metallica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Mechanics & Mathematics", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Venus Hum"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Mental Jewelry", - Genre = genres.Single(g => g.Name == "Alternative"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Live"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Metallics", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Metallica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "meteora", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Linkin Park"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Meus Momentos", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Gonzaguinha"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Mezmerize", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "System Of A Down"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Mezzanine", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Massive Attack"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Miles Ahead", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Miles Davis"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Milton Nascimento Ao Vivo", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Milton Nascimento"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Minas", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Milton Nascimento"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Minha Historia", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Chico Buarque"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Misplaced Childhood", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Marillion"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "MK III The Final Concerts [Disc 1]", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Deep Purple"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Morning Dance", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Spyro Gyra"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Motley Crue Greatest Hits", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Mötley Crüe"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Moving Pictures", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Rush"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Mozart: Chamber Music", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Nash Ensemble"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Mozart: Symphonies Nos. 40 & 41", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Berliner Philharmoniker"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Murder Ballads", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Nick Cave and the Bad Seeds"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Music For The Jilted Generation", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Prodigy"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "My Generation - The Very Best Of The Who", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Who"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "My Name is Skrillex", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Skrillex"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Na Pista", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Cláudio Zoli"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Nevermind", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Nirvana"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "New Adventures In Hi-Fi", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "R.E.M."), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "New Divide", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Linkin Park"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "New York Dolls", - Genre = genres.Single(g => g.Name == "Punk"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "New York Dolls"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "News Of The World", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Queen"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Nielsen: The Six Symphonies", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Göteborgs Symfoniker & Neeme Järvi"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Night At The Opera", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Queen"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Night Castle", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Trans-Siberian Orchestra"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Nkolo", - Genre = genres.Single(g => g.Name == "World"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Lokua Kanza"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "No More Tears (Remastered)", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Ozzy Osbourne"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "No Prayer For The Dying", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "No Security", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Rolling Stones"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "O Brother, Where Art Thou?", - Genre = genres.Single(g => g.Name == "Country"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Alison Krauss"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "O Samba Poconé", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Skank"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "O(+>", - Genre = genres.Single(g => g.Name == "R&B"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Prince"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Oceania", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Smashing Pumpkins"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Off the Deep End", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Weird Al"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "OK Computer", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Radiohead"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Olodum", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Olodum"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "One Love", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "David Guetta"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Operation: Mindcrime", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Queensrÿche"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Opiate", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Tool"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Outbreak", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Dennis Chambers"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Pachelbel: Canon & Gigue", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "English Concert & Trevor Pinnock"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Paid in Full", - Genre = genres.Single(g => g.Name == "Rap"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Eric B. and Rakim"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Para Siempre", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Vicente Fernandez"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Pause", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Four Tet"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Peace Sells... but Who's Buying", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Megadeth"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Physical Graffiti [Disc 1]", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Physical Graffiti [Disc 2]", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Physical Graffiti", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Piece Of Mind", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Pinkerton", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Weezer"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Plays Metallica By Four Cellos", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Apocalyptica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Pop", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "U2"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Powerslave", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Prenda Minha", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Caetano Veloso"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Presence", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Pretty Hate Machine", - Genre = genres.Single(g => g.Name == "Alternative"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Nine Inch Nails"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Prisoner", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Jezabels"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Privateering", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Mark Knopfler"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Prokofiev: Romeo & Juliet", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Michael Tilson Thomas"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Prokofiev: Symphony No.1", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sergei Prokofiev & Yuri Temirkanov"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "PSY's Best 6th Part 1", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "PSY"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Purcell: The Fairy Queen", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "London Classical Players"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Purpendicular", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Deep Purple"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Purple", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Stone Temple Pilots"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Quanta Gente Veio Ver (Live)", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Gilberto Gil"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Quanta Gente Veio ver--Bônus De Carnaval", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Gilberto Gil"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Quiet Songs", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Aisha Duo"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Raices", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Los Tigres del Norte"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Raising Hell", - Genre = genres.Single(g => g.Name == "Rap"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Run DMC"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Raoul and the Kings of Spain ", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Tears For Fears"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Rattle And Hum", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "U2"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Raul Seixas", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Raul Seixas"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Recovery [Explicit]", - Genre = genres.Single(g => g.Name == "Rap"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Eminem"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Reign In Blood", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Slayer"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Relayed", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Yes"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "ReLoad", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Metallica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Respighi:Pines of Rome", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Eugene Ormandy"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Restless and Wild", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Accept"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Retrospective I (1974-1980)", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Rush"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Revelations", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Audioslave"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Revolver", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Beatles"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Ride the Lighting ", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Metallica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Ride The Lightning", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Metallica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Ring My Bell", - Genre = genres.Single(g => g.Name == "R&B"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Anita Ward"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Riot Act", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Pearl Jam"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Rise of the Phoenix", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Before the Dawn"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Rock In Rio [CD1]", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Rock In Rio [CD2]", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Rock In Rio [CD2]", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Roda De Funk", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Funk Como Le Gusta"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Room for Squares", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "John Mayer"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Root Down", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Jimmy Smith"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Rounds", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Four Tet"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Rubber Factory", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Black Keys"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Rust in Peace", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Megadeth"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Sambas De Enredo 2001", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Various Artists"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Santana - As Years Go By", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Santana"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Santana Live", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Santana"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Saturday Night Fever", - Genre = genres.Single(g => g.Name == "R&B"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Bee Gees"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Scary Monsters and Nice Sprites", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Skrillex"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Scheherazade", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Chicago Symphony Orchestra & Fritz Reiner"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "SCRIABIN: Vers la flamme", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Christopher O'Riley"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Second Coming", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Stone Roses"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Serie Sem Limite (Disc 1)", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Tim Maia"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Serie Sem Limite (Disc 2)", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Tim Maia"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Serious About Men", - Genre = genres.Single(g => g.Name == "Rap"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Rubberbandits"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Seventh Son of a Seventh Son", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Short Bus", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Filter"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Sibelius: Finlandia", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Berliner Philharmoniker"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Singles Collection", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "David Bowie"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Six Degrees of Inner Turbulence", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Dream Theater"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Slave To The Empire", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "T&N"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Slaves And Masters", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Deep Purple"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Slouching Towards Bethlehem", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Robert James"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Smash", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Offspring"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Something Special", - Genre = genres.Single(g => g.Name == "Country"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Dolly Parton"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Somewhere in Time", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Song(s) You Know By Heart", - Genre = genres.Single(g => g.Name == "Country"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Jimmy Buffett"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Sound of Music", - Genre = genres.Single(g => g.Name == "Punk"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Adicts"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "South American Getaway", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The 12 Cellists of The Berlin Philharmonic"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Sozinho Remix Ao Vivo", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Caetano Veloso"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Speak of the Devil", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Ozzy Osbourne"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Spiritual State", - Genre = genres.Single(g => g.Name == "Rap"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Nujabes"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "St. Anger", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Metallica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Still Life", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Opeth"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Stop Making Sense", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Talking Heads"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Stormbringer", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Deep Purple"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Stranger than Fiction", - Genre = genres.Single(g => g.Name == "Punk"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Bad Religion"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Strauss: Waltzes", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Eugene Ormandy"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Supermodified", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Amon Tobin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Supernatural", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Santana"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Surfing with the Alien (Remastered)", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Joe Satriani"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Switched-On Bach", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Wendy Carlos"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Symphony", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sarah Brightman"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Szymanowski: Piano Works, Vol. 1", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Martin Roscoe"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Tchaikovsky: The Nutcracker", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "London Symphony Orchestra"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Ted Nugent", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Ted Nugent"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Teflon Don", - Genre = genres.Single(g => g.Name == "Rap"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Rick Ross"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Tell Another Joke at the Ol' Choppin' Block", - Genre = genres.Single(g => g.Name == "Indie"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Danielson Famile"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Temple of the Dog", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Temple of the Dog"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Ten", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Pearl Jam"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Texas Flood", - Genre = genres.Single(g => g.Name == "Blues"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Stevie Ray Vaughan"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Battle Rages On", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Deep Purple"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Beast Live", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Paul D'Ianno"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Best Of 1980-1990", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "U2"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Best of 1990–2000", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sarah Brightman"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Best of Beethoven", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Nicolaus Esterhazy Sinfonia"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Best Of Billy Cobham", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Billy Cobham"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Best of Ed Motta", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Ed Motta"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Best Of Van Halen, Vol. I", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Van Halen"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Bridge", - Genre = genres.Single(g => g.Name == "R&B"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Melanie Fiona"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Cage", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Tygers of Pan Tang"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Chicago Transit Authority", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Chicago "), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Chronic", - Genre = genres.Single(g => g.Name == "Rap"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Dr. Dre"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Colour And The Shape", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Foo Fighters"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Crane Wife", - Genre = genres.Single(g => g.Name == "Alternative"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Decemberists"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Cream Of Clapton", - Genre = genres.Single(g => g.Name == "Blues"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Eric Clapton"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Cure", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Cure"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Dark Side Of The Moon", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Pink Floyd"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Divine Conspiracy", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Epica"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Doors", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Doors"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Dream of the Blue Turtles", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sting"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Essential Miles Davis [Disc 1]", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Miles Davis"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Essential Miles Davis [Disc 2]", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Miles Davis"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Final Concerts (Disc 2)", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Deep Purple"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Final Frontier", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Head and the Heart", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Head and the Heart"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Joshua Tree", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "U2"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Last Night of the Proms", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "BBC Concert Orchestra"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Lumineers", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Lumineers"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Number of The Beast", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Number of The Beast", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Police Greatest Hits", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Police"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Song Remains The Same (Disc 1)", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Song Remains The Same (Disc 2)", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Southern Harmony and Musical Companion", - Genre = genres.Single(g => g.Name == "Blues"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Black Crowes"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Spade", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Butch Walker & The Black Widows"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Stone Roses", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Stone Roses"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Suburbs", - Genre = genres.Single(g => g.Name == "Indie"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Arcade Fire"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Three Tenors Disc1/Disc2", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Carreras, Pavarotti, Domingo"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Trees They Grow So High", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sarah Brightman"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The Wall", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Pink Floyd"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "The X Factor", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Them Crooked Vultures", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Them Crooked Vultures"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "This Is Happening", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "LCD Soundsystem"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Thunder, Lightning, Strike", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Go! Team"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Time to Say Goodbye", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sarah Brightman"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Time, Love & Tenderness", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Michael Bolton"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Tomorrow Starts Today", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Mobile"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Tribute", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Ozzy Osbourne"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Tuesday Night Music Club", - Genre = genres.Single(g => g.Name == "Alternative"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sheryl Crow"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Umoja", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "BLØF"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Under the Pink", - Genre = genres.Single(g => g.Name == "Alternative"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Tori Amos"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Undertow", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Tool"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Un-Led-Ed", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Dread Zeppelin"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Unplugged [Live]", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Kiss"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Unplugged", - Genre = genres.Single(g => g.Name == "Blues"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Eric Clapton"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Unplugged", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Eric Clapton"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Untrue", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Burial"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Use Your Illusion I", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Guns N' Roses"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Use Your Illusion II", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Guns N' Roses"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Use Your Illusion II", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Guns N' Roses"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Van Halen III", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Van Halen"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Van Halen", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Van Halen"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Version 2.0", - Genre = genres.Single(g => g.Name == "Alternative"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Garbage"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Vinicius De Moraes", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Vinícius De Moraes"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Virtual XI", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Iron Maiden"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Voodoo Lounge", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Rolling Stones"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Vozes do MPB", - Genre = genres.Single(g => g.Name == "Latin"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Various Artists"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Vs.", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Pearl Jam"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Wagner: Favourite Overtures", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sir Georg Solti & Wiener Philharmoniker"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Walking Into Clarksdale", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Page & Plant"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Wapi Yo", - Genre = genres.Single(g => g.Name == "World"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Lokua Kanza"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "War", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "U2"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Warner 25 Anos", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Antônio Carlos Jobim"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Wasteland R&Btheque", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Raunchy"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Watermark", - Genre = genres.Single(g => g.Name == "Electronic"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Enya"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "We Were Exploding Anyway", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "65daysofstatic"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Weill: The Seven Deadly Sins", - Genre = genres.Single(g => g.Name == "Classical"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Orchestre de l'Opéra de Lyon"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "White Pony", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Deftones"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Who's Next", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Who"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Wish You Were Here", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Pink Floyd"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "With Oden on Our Side", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Amon Amarth"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Worlds", - Genre = genres.Single(g => g.Name == "Jazz"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Aaron Goldberg"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Worship Music", - Genre = genres.Single(g => g.Name == "Metal"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Anthrax"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "X&Y", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Coldplay"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Xinti", - Genre = genres.Single(g => g.Name == "World"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Sara Tavares"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Yano", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Yano"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Yesterday Once More Disc 1/Disc 2", - Genre = genres.Single(g => g.Name == "Pop"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "The Carpenters"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Zooropa", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "U2"), - AlbumArtUrl = imgUrl - }, - new Album - { - Title = "Zoso", - Genre = genres.Single(g => g.Name == "Rock"), - Price = 8.99M, - Artist = artists.Single(a => a.Name == "Led Zeppelin"), - AlbumArtUrl = imgUrl - }, - }; - - context.Albums.AddRange(albums); - } - - private static List AddArtists(MusicStoreEntities context) - { - var artists = new List - { - new Artist { Name = "65daysofstatic" }, - new Artist { Name = "Aaron Goldberg" }, - new Artist { Name = "Above & Beyond" }, - new Artist { Name = "Above the Fold" }, - new Artist { Name = "AC/DC" }, - new Artist { Name = "Accept" }, - new Artist { Name = "Adicts" }, - new Artist { Name = "Adrian Leaper & Doreen de Feis" }, - new Artist { Name = "Aerosmith" }, - new Artist { Name = "Aisha Duo" }, - new Artist { Name = "Al di Meola" }, - new Artist { Name = "Alabama Shakes" }, - new Artist { Name = "Alanis Morissette" }, - new Artist { Name = "Alberto Turco & Nova Schola Gregoriana" }, - new Artist { Name = "Alice in Chains" }, - new Artist { Name = "Alison Krauss" }, - new Artist { Name = "Amon Amarth" }, - new Artist { Name = "Amon Tobin" }, - new Artist { Name = "Amr Diab" }, - new Artist { Name = "Amy Winehouse" }, - new Artist { Name = "Anita Ward" }, - new Artist { Name = "Anthrax" }, - new Artist { Name = "Antônio Carlos Jobim" }, - new Artist { Name = "Apocalyptica" }, - new Artist { Name = "Aqua" }, - new Artist { Name = "Armand Van Helden" }, - new Artist { Name = "Arcade Fire" }, - new Artist { Name = "Audioslave" }, - new Artist { Name = "Bad Religion" }, - new Artist { Name = "Barenaked Ladies" }, - new Artist { Name = "BBC Concert Orchestra" }, - new Artist { Name = "Bee Gees" }, - new Artist { Name = "Before the Dawn" }, - new Artist { Name = "Berliner Philharmoniker" }, - new Artist { Name = "Billy Cobham" }, - new Artist { Name = "Black Label Society" }, - new Artist { Name = "Black Sabbath" }, - new Artist { Name = "BLØF" }, - new Artist { Name = "Blues Traveler" }, - new Artist { Name = "Boston Symphony Orchestra & Seiji Ozawa" }, - new Artist { Name = "Britten Sinfonia, Ivor Bolton & Lesley Garrett" }, - new Artist { Name = "Bruce Dickinson" }, - new Artist { Name = "Buddy Guy" }, - new Artist { Name = "Burial" }, - new Artist { Name = "Butch Walker & The Black Widows" }, - new Artist { Name = "Caetano Veloso" }, - new Artist { Name = "Cake" }, - new Artist { Name = "Calexico" }, - new Artist { Name = "Carly Rae Jepsen" }, - new Artist { Name = "Carreras, Pavarotti, Domingo" }, - new Artist { Name = "Cássia Eller" }, - new Artist { Name = "Cayouche" }, - new Artist { Name = "Chic" }, - new Artist { Name = "Chicago " }, - new Artist { Name = "Chicago Symphony Orchestra & Fritz Reiner" }, - new Artist { Name = "Chico Buarque" }, - new Artist { Name = "Chico Science & Nação Zumbi" }, - new Artist { Name = "Choir Of Westminster Abbey & Simon Preston" }, - new Artist { Name = "Chris Cornell" }, - new Artist { Name = "Christopher O'Riley" }, - new Artist { Name = "Cidade Negra" }, - new Artist { Name = "Cláudio Zoli" }, - new Artist { Name = "Coldplay" }, - new Artist { Name = "Creedence Clearwater Revival" }, - new Artist { Name = "Crosby, Stills, Nash, and Young" }, - new Artist { Name = "Daft Punk" }, - new Artist { Name = "Danielson Famile" }, - new Artist { Name = "David Bowie" }, - new Artist { Name = "David Coverdale" }, - new Artist { Name = "David Guetta" }, - new Artist { Name = "deadmau5" }, - new Artist { Name = "Deep Purple" }, - new Artist { Name = "Def Leppard" }, - new Artist { Name = "Deftones" }, - new Artist { Name = "Dennis Chambers" }, - new Artist { Name = "Deva Premal" }, - new Artist { Name = "Dio" }, - new Artist { Name = "Djavan" }, - new Artist { Name = "Dolly Parton" }, - new Artist { Name = "Donna Summer" }, - new Artist { Name = "Dr. Dre" }, - new Artist { Name = "Dread Zeppelin" }, - new Artist { Name = "Dream Theater" }, - new Artist { Name = "Duck Sauce" }, - new Artist { Name = "Earl Scruggs" }, - new Artist { Name = "Ed Motta" }, - new Artist { Name = "Edo de Waart & San Francisco Symphony" }, - new Artist { Name = "Elis Regina" }, - new Artist { Name = "Eminem" }, - new Artist { Name = "English Concert & Trevor Pinnock" }, - new Artist { Name = "Enya" }, - new Artist { Name = "Epica" }, - new Artist { Name = "Eric B. and Rakim" }, - new Artist { Name = "Eric Clapton" }, - new Artist { Name = "Eugene Ormandy" }, - new Artist { Name = "Faith No More" }, - new Artist { Name = "Falamansa" }, - new Artist { Name = "Filter" }, - new Artist { Name = "Foo Fighters" }, - new Artist { Name = "Four Tet" }, - new Artist { Name = "Frank Zappa & Captain Beefheart" }, - new Artist { Name = "Fretwork" }, - new Artist { Name = "Funk Como Le Gusta" }, - new Artist { Name = "Garbage" }, - new Artist { Name = "Gerald Moore" }, - new Artist { Name = "Gilberto Gil" }, - new Artist { Name = "Godsmack" }, - new Artist { Name = "Gonzaguinha" }, - new Artist { Name = "Göteborgs Symfoniker & Neeme Järvi" }, - new Artist { Name = "Guns N' Roses" }, - new Artist { Name = "Gustav Mahler" }, - new Artist { Name = "In This Moment" }, - new Artist { Name = "Incognito" }, - new Artist { Name = "INXS" }, - new Artist { Name = "Iron Maiden" }, - new Artist { Name = "Jagjit Singh" }, - new Artist { Name = "James Levine" }, - new Artist { Name = "Jamiroquai" }, - new Artist { Name = "Jimi Hendrix" }, - new Artist { Name = "Jimmy Buffett" }, - new Artist { Name = "Jimmy Smith" }, - new Artist { Name = "Joe Satriani" }, - new Artist { Name = "John Digweed" }, - new Artist { Name = "John Mayer" }, - new Artist { Name = "Jorge Ben" }, - new Artist { Name = "Jota Quest" }, - new Artist { Name = "Journey" }, - new Artist { Name = "Judas Priest" }, - new Artist { Name = "Julian Bream" }, - new Artist { Name = "Justice" }, - new Artist { Name = "Orchestre de l'Opéra de Lyon" }, - new Artist { Name = "King Crimson" }, - new Artist { Name = "Kiss" }, - new Artist { Name = "LCD Soundsystem" }, - new Artist { Name = "Le Tigre" }, - new Artist { Name = "Led Zeppelin" }, - new Artist { Name = "Legião Urbana" }, - new Artist { Name = "Lenny Kravitz" }, - new Artist { Name = "Les Arts Florissants & William Christie" }, - new Artist { Name = "Limp Bizkit" }, - new Artist { Name = "Linkin Park" }, - new Artist { Name = "Live" }, - new Artist { Name = "Lokua Kanza" }, - new Artist { Name = "London Symphony Orchestra" }, - new Artist { Name = "Los Tigres del Norte" }, - new Artist { Name = "Luciana Souza/Romero Lubambo" }, - new Artist { Name = "Lulu Santos" }, - new Artist { Name = "Lura" }, - new Artist { Name = "Marcos Valle" }, - new Artist { Name = "Marillion" }, - new Artist { Name = "Marisa Monte" }, - new Artist { Name = "Mark Knopfler" }, - new Artist { Name = "Martin Roscoe" }, - new Artist { Name = "Massive Attack" }, - new Artist { Name = "Maurizio Pollini" }, - new Artist { Name = "Megadeth" }, - new Artist { Name = "Mela Tenenbaum, Pro Musica Prague & Richard Kapp" }, - new Artist { Name = "Melanie Fiona" }, - new Artist { Name = "Men At Work" }, - new Artist { Name = "Metallica" }, - new Artist { Name = "M-Flo" }, - new Artist { Name = "Michael Bolton" }, - new Artist { Name = "Michael Tilson Thomas" }, - new Artist { Name = "Miles Davis" }, - new Artist { Name = "Milton Nascimento" }, - new Artist { Name = "Mobile" }, - new Artist { Name = "Modest Mouse" }, - new Artist { Name = "Mötley Crüe" }, - new Artist { Name = "Motörhead" }, - new Artist { Name = "Mumford & Sons" }, - new Artist { Name = "Munkle" }, - new Artist { Name = "Nash Ensemble" }, - new Artist { Name = "Neil Young" }, - new Artist { Name = "New York Dolls" }, - new Artist { Name = "Nick Cave and the Bad Seeds" }, - new Artist { Name = "Nicolaus Esterhazy Sinfonia" }, - new Artist { Name = "Nine Inch Nails" }, - new Artist { Name = "Nirvana" }, - new Artist { Name = "Norah Jones" }, - new Artist { Name = "Nujabes" }, - new Artist { Name = "O Terço" }, - new Artist { Name = "Oasis" }, - new Artist { Name = "Olodum" }, - new Artist { Name = "Opeth" }, - new Artist { Name = "Orchestra of The Age of Enlightenment" }, - new Artist { Name = "Os Paralamas Do Sucesso" }, - new Artist { Name = "Ozzy Osbourne" }, - new Artist { Name = "Paddy Casey" }, - new Artist { Name = "Page & Plant" }, - new Artist { Name = "Papa Wemba" }, - new Artist { Name = "Paul D'Ianno" }, - new Artist { Name = "Paul Oakenfold" }, - new Artist { Name = "Paul Van Dyk" }, - new Artist { Name = "Pearl Jam" }, - new Artist { Name = "Pet Shop Boys" }, - new Artist { Name = "Pink Floyd" }, - new Artist { Name = "Plug" }, - new Artist { Name = "Porcupine Tree" }, - new Artist { Name = "Portishead" }, - new Artist { Name = "Prince" }, - new Artist { Name = "Projected" }, - new Artist { Name = "PSY" }, - new Artist { Name = "Public Enemy" }, - new Artist { Name = "Queen" }, - new Artist { Name = "Queensrÿche" }, - new Artist { Name = "R.E.M." }, - new Artist { Name = "Radiohead" }, - new Artist { Name = "Rancid" }, - new Artist { Name = "Raul Seixas" }, - new Artist { Name = "Raunchy" }, - new Artist { Name = "Red Hot Chili Peppers" }, - new Artist { Name = "Rick Ross" }, - new Artist { Name = "Robert James" }, - new Artist { Name = "London Classical Players" }, - new Artist { Name = "Royal Philharmonic Orchestra" }, - new Artist { Name = "Run DMC" }, - new Artist { Name = "Rush" }, - new Artist { Name = "Santana" }, - new Artist { Name = "Sara Tavares" }, - new Artist { Name = "Sarah Brightman" }, - new Artist { Name = "Sasha" }, - new Artist { Name = "Scholars Baroque Ensemble" }, - new Artist { Name = "Scorpions" }, - new Artist { Name = "Sergei Prokofiev & Yuri Temirkanov" }, - new Artist { Name = "Sheryl Crow" }, - new Artist { Name = "Sir Georg Solti & Wiener Philharmoniker" }, - new Artist { Name = "Skank" }, - new Artist { Name = "Skrillex" }, - new Artist { Name = "Slash" }, - new Artist { Name = "Slayer" }, - new Artist { Name = "Soul-Junk" }, - new Artist { Name = "Soundgarden" }, - new Artist { Name = "Spyro Gyra" }, - new Artist { Name = "Stevie Ray Vaughan & Double Trouble" }, - new Artist { Name = "Stevie Ray Vaughan" }, - new Artist { Name = "Sting" }, - new Artist { Name = "Stone Temple Pilots" }, - new Artist { Name = "Styx" }, - new Artist { Name = "Sufjan Stevens" }, - new Artist { Name = "Supreme Beings of Leisure" }, - new Artist { Name = "System Of A Down" }, - new Artist { Name = "T&N" }, - new Artist { Name = "Talking Heads" }, - new Artist { Name = "Tears For Fears" }, - new Artist { Name = "Ted Nugent" }, - new Artist { Name = "Temple of the Dog" }, - new Artist { Name = "Terry Bozzio, Tony Levin & Steve Stevens" }, - new Artist { Name = "The 12 Cellists of The Berlin Philharmonic" }, - new Artist { Name = "The Axis of Awesome" }, - new Artist { Name = "The Beatles" }, - new Artist { Name = "The Black Crowes" }, - new Artist { Name = "The Black Keys" }, - new Artist { Name = "The Carpenters" }, - new Artist { Name = "The Cat Empire" }, - new Artist { Name = "The Cult" }, - new Artist { Name = "The Cure" }, - new Artist { Name = "The Decemberists" }, - new Artist { Name = "The Doors" }, - new Artist { Name = "The Eagles of Death Metal" }, - new Artist { Name = "The Go! Team" }, - new Artist { Name = "The Head and the Heart" }, - new Artist { Name = "The Jezabels" }, - new Artist { Name = "The King's Singers" }, - new Artist { Name = "The Lumineers" }, - new Artist { Name = "The Offspring" }, - new Artist { Name = "The Police" }, - new Artist { Name = "The Posies" }, - new Artist { Name = "The Prodigy" }, - new Artist { Name = "The Rolling Stones" }, - new Artist { Name = "The Rubberbandits" }, - new Artist { Name = "The Smashing Pumpkins" }, - new Artist { Name = "The Stone Roses" }, - new Artist { Name = "The Who" }, - new Artist { Name = "Them Crooked Vultures" }, - new Artist { Name = "TheStart" }, - new Artist { Name = "Thievery Corporation" }, - new Artist { Name = "Tiësto" }, - new Artist { Name = "Tim Maia" }, - new Artist { Name = "Ton Koopman" }, - new Artist { Name = "Tool" }, - new Artist { Name = "Tori Amos" }, - new Artist { Name = "Trampled By Turtles" }, - new Artist { Name = "Trans-Siberian Orchestra" }, - new Artist { Name = "Tygers of Pan Tang" }, - new Artist { Name = "U2" }, - new Artist { Name = "UB40" }, - new Artist { Name = "Uh Huh Her " }, - new Artist { Name = "Van Halen" }, - new Artist { Name = "Various Artists" }, - new Artist { Name = "Velvet Revolver" }, - new Artist { Name = "Venus Hum" }, - new Artist { Name = "Vicente Fernandez" }, - new Artist { Name = "Vinícius De Moraes" }, - new Artist { Name = "Weezer" }, - new Artist { Name = "Weird Al" }, - new Artist { Name = "Wendy Carlos" }, - new Artist { Name = "Wilhelm Kempff" }, - new Artist { Name = "Yano" }, - new Artist { Name = "Yehudi Menuhin" }, - new Artist { Name = "Yes" }, - new Artist { Name = "Yo-Yo Ma" }, - new Artist { Name = "Zeca Pagodinho" }, - new Artist { Name = "אריק אינשטיין" } - }; - - context.Artists.AddRange(artists); - - return artists; - } - - private static List AddGenres(MusicStoreEntities context) - { - var genres = new List - { - new Genre { Name = "Pop" }, - new Genre { Name = "Rock" }, - new Genre { Name = "Jazz" }, - new Genre { Name = "Metal" }, - new Genre { Name = "Electronic" }, - new Genre { Name = "Blues" }, - new Genre { Name = "Latin" }, - new Genre { Name = "Rap" }, - new Genre { Name = "Classical" }, - new Genre { Name = "Alternative" }, - new Genre { Name = "Country" }, - new Genre { Name = "R&B" }, - new Genre { Name = "Indie" }, - new Genre { Name = "Punk" }, - new Genre { Name = "World" } - }; - - context.Genres.AddRange(genres); - - return genres; - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore/Models/ShoppingCart.cs b/src/MvcMusicStore/Models/ShoppingCart.cs deleted file mode 100644 index 14842c86b8..0000000000 --- a/src/MvcMusicStore/Models/ShoppingCart.cs +++ /dev/null @@ -1,158 +0,0 @@ -using System; -using System.Data.Entity; -using System.Linq; -using System.Threading.Tasks; -using System.Web; -using System.Web.Mvc; - -namespace MvcMusicStore.Models -{ - public class ShoppingCart - { - public const string CartSessionKey = "CartId"; - - private readonly MusicStoreEntities _storeContext; - private readonly string _cartId; - - private ShoppingCart(MusicStoreEntities storeContext, string cartId) - { - _storeContext = storeContext; - _cartId = cartId; - } - - public static ShoppingCart GetCart(MusicStoreEntities storeContext, Controller controller) - { - return new ShoppingCart(storeContext, GetCartId(controller.HttpContext)); - } - - private static string GetCartId(HttpContextBase context) - { - if (context.Session[CartSessionKey] == null) - { - var username = context.User.Identity.Name; - - context.Session[CartSessionKey] = !string.IsNullOrWhiteSpace(username) - ? username - : Guid.NewGuid().ToString(); - } - - return context.Session[CartSessionKey].ToString(); - } - - public async Task AddToCart(Album album) - { - var cartItem = await GetCartItem(album.AlbumId); - - if (cartItem == null) - { - cartItem = new Cart - { - AlbumId = album.AlbumId, - CartId = _cartId, - Count = 1, - DateCreated = DateTime.Now - }; - - _storeContext.Carts.Add(cartItem); - } - else - { - cartItem.Count++; - } - } - - public async Task RemoveFromCart(int id) - { - var cartItem = await GetCartItem(id); - - if (cartItem != null) - { - if (cartItem.Count > 1) - { - return --cartItem.Count; - } - - _storeContext.Carts.Remove(cartItem); - } - - return 0; - } - - private Task GetCartItem(int albumId) - { - return _storeContext.Carts.SingleOrDefaultAsync( - c => c.CartId == _cartId && c.AlbumId == albumId); - } - - public IQueryable GetCartItems() - { - return _storeContext.Carts.Where(c => c.CartId == _cartId); - } - - public Task GetCount() - { - return _storeContext.Carts - .Where(c => c.CartId == _cartId) - .Select(c => c.Count) - .SumAsync(); - } - - public Task GetTotal() - { - return _storeContext.Carts - .Where(c => c.CartId == _cartId) - .Select(c => c.Count * c.Album.Price) - .SumAsync(); - } - - public async Task CreateOrder(Order order) - { - decimal orderTotal = 0; - - var cartItems = await _storeContext.Carts - .Where(c => c.CartId == _cartId) - .Include(c => c.Album) - .ToListAsync(); - - foreach (var item in cartItems) - { - order.OrderDetails.Add(new OrderDetail - { - AlbumId = item.AlbumId, - OrderId = order.OrderId, - UnitPrice = item.Album.Price, - Quantity = item.Count, - }); - - orderTotal += item.Count * item.Album.Price; - } - - order.Total = orderTotal; - - await EmptyCart(); - - return order.OrderId; - } - - private async Task EmptyCart() - { - foreach (var cartItem in await _storeContext.Carts.Where( - c => c.CartId == _cartId).ToListAsync()) - { - _storeContext.Carts.Remove(cartItem); - } - } - - public async Task MigrateCart(string userName) - { - var carts = await _storeContext.Carts.Where(c => c.CartId == _cartId).ToListAsync(); - - foreach (var item in carts) - { - item.CartId = userName; - } - - await _storeContext.SaveChangesAsync(); - } - } -} \ No newline at end of file diff --git a/src/MvcMusicStore/MvcMusicStore.csproj b/src/MvcMusicStore/MvcMusicStore.csproj deleted file mode 100644 index ce1ef8f9ea..0000000000 --- a/src/MvcMusicStore/MvcMusicStore.csproj +++ /dev/null @@ -1,301 +0,0 @@ - - - - - Debug - AnyCPU - - - 2.0 - {25CE8290-EF24-4818-B009-68DC903163D3} - {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} - Library - Properties - MvcMusicStore - MvcMusicStore - v4.5 - false - true - - - - - ..\..\packages\WebGrease.1.5.2\lib - - - true - full - false - bin\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\ - TRACE - prompt - 4 - - - - False - ..\..\packages\Antlr.3.4.1.9004\lib\Antlr3.Runtime.dll - - - False - ..\..\packages\EntityFramework.6.0.2\lib\net45\EntityFramework.dll - - - False - ..\..\packages\EntityFramework.6.0.2\lib\net45\EntityFramework.SqlServer.dll - - - ..\..\packages\Microsoft.AspNet.Identity.Core.1.0.0\lib\net45\Microsoft.AspNet.Identity.Core.dll - - - ..\..\packages\Microsoft.AspNet.Identity.EntityFramework.1.0.0\lib\net45\Microsoft.AspNet.Identity.EntityFramework.dll - - - ..\..\packages\Microsoft.AspNet.Identity.Owin.1.0.0\lib\net45\Microsoft.AspNet.Identity.Owin.dll - - - - False - ..\..\packages\Microsoft.Owin.2.1.0\lib\net45\Microsoft.Owin.dll - - - ..\..\packages\Microsoft.Owin.Host.SystemWeb.2.1.0\lib\net45\Microsoft.Owin.Host.SystemWeb.dll - - - False - ..\..\packages\Microsoft.Owin.Security.2.1.0\lib\net45\Microsoft.Owin.Security.dll - - - ..\..\packages\Microsoft.Owin.Security.Cookies.2.1.0\lib\net45\Microsoft.Owin.Security.Cookies.dll - - - ..\..\packages\Microsoft.Owin.Security.Facebook.2.1.0\lib\net45\Microsoft.Owin.Security.Facebook.dll - - - ..\..\packages\Microsoft.Owin.Security.Google.2.1.0\lib\net45\Microsoft.Owin.Security.Google.dll - - - ..\..\packages\Microsoft.Owin.Security.MicrosoftAccount.2.1.0\lib\net45\Microsoft.Owin.Security.MicrosoftAccount.dll - - - ..\..\packages\Microsoft.Owin.Security.OAuth.2.1.0\lib\net45\Microsoft.Owin.Security.OAuth.dll - - - ..\..\packages\Microsoft.Owin.Security.Twitter.2.1.0\lib\net45\Microsoft.Owin.Security.Twitter.dll - - - True - ..\..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll - - - ..\..\packages\Newtonsoft.Json.5.0.8\lib\net45\Newtonsoft.Json.dll - - - ..\..\packages\Owin.1.0\lib\net40\Owin.dll - - - - - - - - - - - - False - ..\..\packages\Microsoft.AspNet.WebPages.3.0.0\lib\net45\System.Web.Helpers.dll - - - False - ..\..\packages\Microsoft.AspNet.Mvc.5.0.0\lib\net45\System.Web.Mvc.dll - - - ..\..\packages\Microsoft.AspNet.Web.Optimization.1.1.1\lib\net40\System.Web.Optimization.dll - - - False - ..\..\packages\Microsoft.AspNet.Razor.3.0.0\lib\net45\System.Web.Razor.dll - - - False - ..\..\packages\Microsoft.AspNet.WebPages.3.0.0\lib\net45\System.Web.WebPages.dll - - - False - ..\..\packages\Microsoft.AspNet.WebPages.3.0.0\lib\net45\System.Web.WebPages.Deployment.dll - - - False - ..\..\packages\Microsoft.AspNet.WebPages.3.0.0\lib\net45\System.Web.WebPages.Razor.dll - - - - - - - - - - - - - - - - ..\..\packages\WebGrease.1.5.2\lib\WebGrease.dll - - - - - - - - - - - - - - - - Global.asax - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Designer - - - Web.config - - - Web.config - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 10.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - - - - - - - - - - - - True - True - 43524 - / - http://localhost:43524/ - False - False - - - False - - - - - - \ No newline at end of file diff --git a/src/MvcMusicStore/Properties/AssemblyInfo.cs b/src/MvcMusicStore/Properties/AssemblyInfo.cs deleted file mode 100644 index 51fbcae968..0000000000 --- a/src/MvcMusicStore/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("MvcMusicStore")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("MvcMusicStore")] -[assembly: AssemblyCopyright("Copyright © 2013")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("64547e1b-3030-4458-ab71-a970f2916ed6")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/MvcMusicStore/Scripts/_references.js b/src/MvcMusicStore/Scripts/_references.js deleted file mode 100644 index b1bac51ae2..0000000000 Binary files a/src/MvcMusicStore/Scripts/_references.js and /dev/null differ diff --git a/src/MvcMusicStore/Scripts/bootstrap.js b/src/MvcMusicStore/Scripts/bootstrap.js deleted file mode 100644 index 2c64257146..0000000000 --- a/src/MvcMusicStore/Scripts/bootstrap.js +++ /dev/null @@ -1,1999 +0,0 @@ -/** -* bootstrap.js v3.0.0 by @fat and @mdo -* Copyright 2013 Twitter Inc. -* http://www.apache.org/licenses/LICENSE-2.0 -*/ -if (!jQuery) { throw new Error("Bootstrap requires jQuery") } - -/* ======================================================================== - * Bootstrap: transition.js v3.0.0 - * http://twbs.github.com/bootstrap/javascript.html#transitions - * ======================================================================== - * Copyright 2013 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ - - -+function ($) { "use strict"; - - // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) - // ============================================================ - - function transitionEnd() { - var el = document.createElement('bootstrap') - - var transEndEventNames = { - 'WebkitTransition' : 'webkitTransitionEnd' - , 'MozTransition' : 'transitionend' - , 'OTransition' : 'oTransitionEnd otransitionend' - , 'transition' : 'transitionend' - } - - for (var name in transEndEventNames) { - if (el.style[name] !== undefined) { - return { end: transEndEventNames[name] } - } - } - } - - // http://blog.alexmaccaw.com/css-transitions - $.fn.emulateTransitionEnd = function (duration) { - var called = false, $el = this - $(this).one($.support.transition.end, function () { called = true }) - var callback = function () { if (!called) $($el).trigger($.support.transition.end) } - setTimeout(callback, duration) - return this - } - - $(function () { - $.support.transition = transitionEnd() - }) - -}(window.jQuery); - -/* ======================================================================== - * Bootstrap: alert.js v3.0.0 - * http://twbs.github.com/bootstrap/javascript.html#alerts - * ======================================================================== - * Copyright 2013 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ - - -+function ($) { "use strict"; - - // ALERT CLASS DEFINITION - // ====================== - - var dismiss = '[data-dismiss="alert"]' - var Alert = function (el) { - $(el).on('click', dismiss, this.close) - } - - Alert.prototype.close = function (e) { - var $this = $(this) - var selector = $this.attr('data-target') - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 - } - - var $parent = $(selector) - - if (e) e.preventDefault() - - if (!$parent.length) { - $parent = $this.hasClass('alert') ? $this : $this.parent() - } - - $parent.trigger(e = $.Event('close.bs.alert')) - - if (e.isDefaultPrevented()) return - - $parent.removeClass('in') - - function removeElement() { - $parent.trigger('closed.bs.alert').remove() - } - - $.support.transition && $parent.hasClass('fade') ? - $parent - .one($.support.transition.end, removeElement) - .emulateTransitionEnd(150) : - removeElement() - } - - - // ALERT PLUGIN DEFINITION - // ======================= - - var old = $.fn.alert - - $.fn.alert = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.alert') - - if (!data) $this.data('bs.alert', (data = new Alert(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - $.fn.alert.Constructor = Alert - - - // ALERT NO CONFLICT - // ================= - - $.fn.alert.noConflict = function () { - $.fn.alert = old - return this - } - - - // ALERT DATA-API - // ============== - - $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) - -}(window.jQuery); - -/* ======================================================================== - * Bootstrap: button.js v3.0.0 - * http://twbs.github.com/bootstrap/javascript.html#buttons - * ======================================================================== - * Copyright 2013 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ - - -+function ($) { "use strict"; - - // BUTTON PUBLIC CLASS DEFINITION - // ============================== - - var Button = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, Button.DEFAULTS, options) - } - - Button.DEFAULTS = { - loadingText: 'loading...' - } - - Button.prototype.setState = function (state) { - var d = 'disabled' - var $el = this.$element - var val = $el.is('input') ? 'val' : 'html' - var data = $el.data() - - state = state + 'Text' - - if (!data.resetText) $el.data('resetText', $el[val]()) - - $el[val](data[state] || this.options[state]) - - // push to event loop to allow forms to submit - setTimeout(function () { - state == 'loadingText' ? - $el.addClass(d).attr(d, d) : - $el.removeClass(d).removeAttr(d); - }, 0) - } - - Button.prototype.toggle = function () { - var $parent = this.$element.closest('[data-toggle="buttons"]') - - if ($parent.length) { - var $input = this.$element.find('input') - .prop('checked', !this.$element.hasClass('active')) - .trigger('change') - if ($input.prop('type') === 'radio') $parent.find('.active').removeClass('active') - } - - this.$element.toggleClass('active') - } - - - // BUTTON PLUGIN DEFINITION - // ======================== - - var old = $.fn.button - - $.fn.button = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.button') - var options = typeof option == 'object' && option - - if (!data) $this.data('bs.button', (data = new Button(this, options))) - - if (option == 'toggle') data.toggle() - else if (option) data.setState(option) - }) - } - - $.fn.button.Constructor = Button - - - // BUTTON NO CONFLICT - // ================== - - $.fn.button.noConflict = function () { - $.fn.button = old - return this - } - - - // BUTTON DATA-API - // =============== - - $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) { - var $btn = $(e.target) - if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') - $btn.button('toggle') - e.preventDefault() - }) - -}(window.jQuery); - -/* ======================================================================== - * Bootstrap: carousel.js v3.0.0 - * http://twbs.github.com/bootstrap/javascript.html#carousel - * ======================================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ - - -+function ($) { "use strict"; - - // CAROUSEL CLASS DEFINITION - // ========================= - - var Carousel = function (element, options) { - this.$element = $(element) - this.$indicators = this.$element.find('.carousel-indicators') - this.options = options - this.paused = - this.sliding = - this.interval = - this.$active = - this.$items = null - - this.options.pause == 'hover' && this.$element - .on('mouseenter', $.proxy(this.pause, this)) - .on('mouseleave', $.proxy(this.cycle, this)) - } - - Carousel.DEFAULTS = { - interval: 5000 - , pause: 'hover' - , wrap: true - } - - Carousel.prototype.cycle = function (e) { - e || (this.paused = false) - - this.interval && clearInterval(this.interval) - - this.options.interval - && !this.paused - && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) - - return this - } - - Carousel.prototype.getActiveIndex = function () { - this.$active = this.$element.find('.item.active') - this.$items = this.$active.parent().children() - - return this.$items.index(this.$active) - } - - Carousel.prototype.to = function (pos) { - var that = this - var activeIndex = this.getActiveIndex() - - if (pos > (this.$items.length - 1) || pos < 0) return - - if (this.sliding) return this.$element.one('slid', function () { that.to(pos) }) - if (activeIndex == pos) return this.pause().cycle() - - return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) - } - - Carousel.prototype.pause = function (e) { - e || (this.paused = true) - - if (this.$element.find('.next, .prev').length && $.support.transition.end) { - this.$element.trigger($.support.transition.end) - this.cycle(true) - } - - this.interval = clearInterval(this.interval) - - return this - } - - Carousel.prototype.next = function () { - if (this.sliding) return - return this.slide('next') - } - - Carousel.prototype.prev = function () { - if (this.sliding) return - return this.slide('prev') - } - - Carousel.prototype.slide = function (type, next) { - var $active = this.$element.find('.item.active') - var $next = next || $active[type]() - var isCycling = this.interval - var direction = type == 'next' ? 'left' : 'right' - var fallback = type == 'next' ? 'first' : 'last' - var that = this - - if (!$next.length) { - if (!this.options.wrap) return - $next = this.$element.find('.item')[fallback]() - } - - this.sliding = true - - isCycling && this.pause() - - var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction }) - - if ($next.hasClass('active')) return - - if (this.$indicators.length) { - this.$indicators.find('.active').removeClass('active') - this.$element.one('slid', function () { - var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) - $nextIndicator && $nextIndicator.addClass('active') - }) - } - - if ($.support.transition && this.$element.hasClass('slide')) { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $next.addClass(type) - $next[0].offsetWidth // force reflow - $active.addClass(direction) - $next.addClass(direction) - $active - .one($.support.transition.end, function () { - $next.removeClass([type, direction].join(' ')).addClass('active') - $active.removeClass(['active', direction].join(' ')) - that.sliding = false - setTimeout(function () { that.$element.trigger('slid') }, 0) - }) - .emulateTransitionEnd(600) - } else { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $active.removeClass('active') - $next.addClass('active') - this.sliding = false - this.$element.trigger('slid') - } - - isCycling && this.cycle() - - return this - } - - - // CAROUSEL PLUGIN DEFINITION - // ========================== - - var old = $.fn.carousel - - $.fn.carousel = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.carousel') - var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) - var action = typeof option == 'string' ? option : options.slide - - if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) - if (typeof option == 'number') data.to(option) - else if (action) data[action]() - else if (options.interval) data.pause().cycle() - }) - } - - $.fn.carousel.Constructor = Carousel - - - // CAROUSEL NO CONFLICT - // ==================== - - $.fn.carousel.noConflict = function () { - $.fn.carousel = old - return this - } - - - // CAROUSEL DATA-API - // ================= - - $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { - var $this = $(this), href - var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 - var options = $.extend({}, $target.data(), $this.data()) - var slideIndex = $this.attr('data-slide-to') - if (slideIndex) options.interval = false - - $target.carousel(options) - - if (slideIndex = $this.attr('data-slide-to')) { - $target.data('bs.carousel').to(slideIndex) - } - - e.preventDefault() - }) - - $(window).on('load', function () { - $('[data-ride="carousel"]').each(function () { - var $carousel = $(this) - $carousel.carousel($carousel.data()) - }) - }) - -}(window.jQuery); - -/* ======================================================================== - * Bootstrap: collapse.js v3.0.0 - * http://twbs.github.com/bootstrap/javascript.html#collapse - * ======================================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ - - -+function ($) { "use strict"; - - // COLLAPSE PUBLIC CLASS DEFINITION - // ================================ - - var Collapse = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, Collapse.DEFAULTS, options) - this.transitioning = null - - if (this.options.parent) this.$parent = $(this.options.parent) - if (this.options.toggle) this.toggle() - } - - Collapse.DEFAULTS = { - toggle: true - } - - Collapse.prototype.dimension = function () { - var hasWidth = this.$element.hasClass('width') - return hasWidth ? 'width' : 'height' - } - - Collapse.prototype.show = function () { - if (this.transitioning || this.$element.hasClass('in')) return - - var startEvent = $.Event('show.bs.collapse') - this.$element.trigger(startEvent) - if (startEvent.isDefaultPrevented()) return - - var actives = this.$parent && this.$parent.find('> .panel > .in') - - if (actives && actives.length) { - var hasData = actives.data('bs.collapse') - if (hasData && hasData.transitioning) return - actives.collapse('hide') - hasData || actives.data('bs.collapse', null) - } - - var dimension = this.dimension() - - this.$element - .removeClass('collapse') - .addClass('collapsing') - [dimension](0) - - this.transitioning = 1 - - var complete = function () { - this.$element - .removeClass('collapsing') - .addClass('in') - [dimension]('auto') - this.transitioning = 0 - this.$element.trigger('shown.bs.collapse') - } - - if (!$.support.transition) return complete.call(this) - - var scrollSize = $.camelCase(['scroll', dimension].join('-')) - - this.$element - .one($.support.transition.end, $.proxy(complete, this)) - .emulateTransitionEnd(350) - [dimension](this.$element[0][scrollSize]) - } - - Collapse.prototype.hide = function () { - if (this.transitioning || !this.$element.hasClass('in')) return - - var startEvent = $.Event('hide.bs.collapse') - this.$element.trigger(startEvent) - if (startEvent.isDefaultPrevented()) return - - var dimension = this.dimension() - - this.$element - [dimension](this.$element[dimension]()) - [0].offsetHeight - - this.$element - .addClass('collapsing') - .removeClass('collapse') - .removeClass('in') - - this.transitioning = 1 - - var complete = function () { - this.transitioning = 0 - this.$element - .trigger('hidden.bs.collapse') - .removeClass('collapsing') - .addClass('collapse') - } - - if (!$.support.transition) return complete.call(this) - - this.$element - [dimension](0) - .one($.support.transition.end, $.proxy(complete, this)) - .emulateTransitionEnd(350) - } - - Collapse.prototype.toggle = function () { - this[this.$element.hasClass('in') ? 'hide' : 'show']() - } - - - // COLLAPSE PLUGIN DEFINITION - // ========================== - - var old = $.fn.collapse - - $.fn.collapse = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.collapse') - var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) - - if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.collapse.Constructor = Collapse - - - // COLLAPSE NO CONFLICT - // ==================== - - $.fn.collapse.noConflict = function () { - $.fn.collapse = old - return this - } - - - // COLLAPSE DATA-API - // ================= - - $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { - var $this = $(this), href - var target = $this.attr('data-target') - || e.preventDefault() - || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 - var $target = $(target) - var data = $target.data('bs.collapse') - var option = data ? 'toggle' : $this.data() - var parent = $this.attr('data-parent') - var $parent = parent && $(parent) - - if (!data || !data.transitioning) { - if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed') - $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') - } - - $target.collapse(option) - }) - -}(window.jQuery); - -/* ======================================================================== - * Bootstrap: dropdown.js v3.0.0 - * http://twbs.github.com/bootstrap/javascript.html#dropdowns - * ======================================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ - - -+function ($) { "use strict"; - - // DROPDOWN CLASS DEFINITION - // ========================= - - var backdrop = '.dropdown-backdrop' - var toggle = '[data-toggle=dropdown]' - var Dropdown = function (element) { - var $el = $(element).on('click.bs.dropdown', this.toggle) - } - - Dropdown.prototype.toggle = function (e) { - var $this = $(this) - - if ($this.is('.disabled, :disabled')) return - - var $parent = getParent($this) - var isActive = $parent.hasClass('open') - - clearMenus() - - if (!isActive) { - if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { - // if mobile we we use a backdrop because click events don't delegate - $('