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
new file mode 100644
index 0000000000..441dbf7d99
--- /dev/null
+++ b/src/MvcMusicStore.Spa/Views/Account/ExternalLoginConfirmation.cshtml
@@ -0,0 +1,36 @@
+@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.
+
+
+
+}
+
+@section Scripts {
+ @Scripts.Render("~/bundles/jqueryval")
+}
diff --git a/src/MvcMusicStore.Spa/Views/Account/ExternalLoginFailure.cshtml b/src/MvcMusicStore.Spa/Views/Account/ExternalLoginFailure.cshtml
new file mode 100644
index 0000000000..342eb693d6
--- /dev/null
+++ b/src/MvcMusicStore.Spa/Views/Account/ExternalLoginFailure.cshtml
@@ -0,0 +1,6 @@
+@{
+ 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
new file mode 100644
index 0000000000..8c50e067fb
--- /dev/null
+++ b/src/MvcMusicStore.Spa/Views/Account/Login.cshtml
@@ -0,0 +1,100 @@
+@model MvcMusicStore.Models.LoginViewModel
+
+@{
+ ViewBag.Title = "Log in";
+ ViewBag.ngApp = "MusicStore.Store";
+}
+
+@section NavBarItems {
+
+
+@Html.InlineData("GenreMenuList", "GenresApi")
+
+}
+
+@ViewBag.Title.
+
+
+
+@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
new file mode 100644
index 0000000000..81781bc5dc
--- /dev/null
+++ b/src/MvcMusicStore.Spa/Views/Account/Manage.cshtml
@@ -0,0 +1,39 @@
+@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
new file mode 100644
index 0000000000..04ac6e0d12
--- /dev/null
+++ b/src/MvcMusicStore.Spa/Views/Account/Register.cshtml
@@ -0,0 +1,78 @@
+@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()
+
+
+
+
+
+
+
+
+}
+
+@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
new file mode 100644
index 0000000000..26a2ab89e8
--- /dev/null
+++ b/src/MvcMusicStore.Spa/Views/Account/_ChangePasswordPartial.cshtml
@@ -0,0 +1,58 @@
+@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()
+
+
+
+
+
+
+
+
+}
diff --git a/src/MvcMusicStore.Spa/Views/Account/_ExternalLoginsListPartial.cshtml b/src/MvcMusicStore.Spa/Views/Account/_ExternalLoginsListPartial.cshtml
new file mode 100644
index 0000000000..529e4c5f74
--- /dev/null
+++ b/src/MvcMusicStore.Spa/Views/Account/_ExternalLoginsListPartial.cshtml
@@ -0,0 +1,31 @@
+@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
new file mode 100644
index 0000000000..b4c80813bf
--- /dev/null
+++ b/src/MvcMusicStore.Spa/Views/Account/_RemoveAccountPartial.cshtml
@@ -0,0 +1,34 @@
+@model ICollection
+
+@if (Model.Count > 0)
+{
+ Registered Logins
+
+}
diff --git a/src/MvcMusicStore.Spa/Views/Account/_SetPasswordPartial.cshtml b/src/MvcMusicStore.Spa/Views/Account/_SetPasswordPartial.cshtml
new file mode 100644
index 0000000000..4f23219229
--- /dev/null
+++ b/src/MvcMusicStore.Spa/Views/Account/_SetPasswordPartial.cshtml
@@ -0,0 +1,32 @@
+@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()
+
+
+
+}
diff --git a/src/MvcMusicStore.Spa/Views/Checkout/AddressAndPayment.cshtml b/src/MvcMusicStore.Spa/Views/Checkout/AddressAndPayment.cshtml
new file mode 100644
index 0000000000..d39b9e916e
--- /dev/null
+++ b/src/MvcMusicStore.Spa/Views/Checkout/AddressAndPayment.cshtml
@@ -0,0 +1,32 @@
+@model MvcMusicStore.Models.Order
+
+@{
+ ViewBag.Title = "Address And Payment";
+}
+
+@section Scripts {
+ @Scripts.Render("~/bundles/jqueryval")
+}
+
+@using (Html.BeginForm()) {
+
+ Address And Payment
+
+
+
+
+}
\ No newline at end of file
diff --git a/src/MvcMusicStore.Spa/Views/Checkout/Complete.cshtml b/src/MvcMusicStore.Spa/Views/Checkout/Complete.cshtml
new file mode 100644
index 0000000000..d34855382e
--- /dev/null
+++ b/src/MvcMusicStore.Spa/Views/Checkout/Complete.cshtml
@@ -0,0 +1,13 @@
+@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
new file mode 100644
index 0000000000..d2fbbaa025
--- /dev/null
+++ b/src/MvcMusicStore.Spa/Views/Home/Index.cshtml
@@ -0,0 +1,25 @@
+@{
+ 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
new file mode 100644
index 0000000000..be55b17d00
--- /dev/null
+++ b/src/MvcMusicStore.Spa/Views/Shared/Error.cshtml
@@ -0,0 +1,9 @@
+@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
new file mode 100644
index 0000000000..4dc091fef9
--- /dev/null
+++ b/src/MvcMusicStore.Spa/Views/Shared/_Layout.cshtml
@@ -0,0 +1,51 @@
+
+
+
+
+
+ @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
new file mode 100644
index 0000000000..db95f4ae3f
--- /dev/null
+++ b/src/MvcMusicStore.Spa/Views/Shared/_LoginPartial.cshtml
@@ -0,0 +1,45 @@
+@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.ActionLink("Hello " + User.Identity.GetUserName() + "!", "Manage", "Account", routeValues: null, htmlAttributes: new { title = "Manage" })
+
+ - Log off
+
+
+ @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.ActionLink("Register", "Register", "Account", routeValues: null, htmlAttributes: new { id = "registerLink" })
+ - @Html.ActionLink("Log in", "Login", "Account", routeValues: null, htmlAttributes: new { id = "loginLink", app_login_link = "" })
+
+
+ @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
new file mode 100644
index 0000000000..eae797ebd4
--- /dev/null
+++ b/src/MvcMusicStore.Spa/Views/ShoppingCart/CartSummary.cshtml
@@ -0,0 +1,9 @@
+@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
new file mode 100644
index 0000000000..9e757a8a42
--- /dev/null
+++ b/src/MvcMusicStore.Spa/Views/ShoppingCart/Index.cshtml
@@ -0,0 +1,91 @@
+@model MvcMusicStore.ViewModels.ShoppingCartViewModel
+@{
+ ViewBag.Title = "Shopping Cart";
+}
+
+@section Scripts {
+
+}
+
+
+ Review your cart:
+
+
+ @Html.ActionLink("Checkout >>", "AddressAndPayment", "Checkout")
+
+
+
+
+
+ |
+ Album Name
+ |
+
+ Price (each)
+ |
+
+ Quantity
+ |
+ |
+
+ @foreach (var item in Model.CartItems)
+ {
+
+ |
+ @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
new file mode 100644
index 0000000000..d338585cf7
--- /dev/null
+++ b/src/MvcMusicStore.Spa/Views/StoreManager/Create.cshtml
@@ -0,0 +1,72 @@
+@model MvcMusicStore.Models.Album
+
+@{
+ ViewBag.Title = "Create";
+}
+
+Create
+
+@using (Html.BeginForm())
+{
+ @Html.AntiForgeryToken()
+
+
+}
+
+
+ @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
new file mode 100644
index 0000000000..df5434633a
--- /dev/null
+++ b/src/MvcMusicStore.Spa/Views/StoreManager/Delete.cshtml
@@ -0,0 +1,23 @@
+@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
new file mode 100644
index 0000000000..1839003730
--- /dev/null
+++ b/src/MvcMusicStore.Spa/Views/StoreManager/Index.cshtml
@@ -0,0 +1,25 @@
+@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
new file mode 100644
index 0000000000..4bc2a4b7f2
--- /dev/null
+++ b/src/MvcMusicStore.Spa/Views/Web.config
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/MvcMusicStore.Spa/Views/_ViewStart.cshtml b/src/MvcMusicStore.Spa/Views/_ViewStart.cshtml
new file mode 100644
index 0000000000..2de62418c0
--- /dev/null
+++ b/src/MvcMusicStore.Spa/Views/_ViewStart.cshtml
@@ -0,0 +1,3 @@
+@{
+ Layout = "~/Views/Shared/_Layout.cshtml";
+}
diff --git a/src/MvcMusicStore.Spa/Web.Debug.config b/src/MvcMusicStore.Spa/Web.Debug.config
new file mode 100644
index 0000000000..c1bf1db285
--- /dev/null
+++ b/src/MvcMusicStore.Spa/Web.Debug.config
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/MvcMusicStore.Spa/Web.Release.config b/src/MvcMusicStore.Spa/Web.Release.config
new file mode 100644
index 0000000000..bdd237c337
--- /dev/null
+++ b/src/MvcMusicStore.Spa/Web.Release.config
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/MvcMusicStore.Spa/Web.config b/src/MvcMusicStore.Spa/Web.config
new file mode 100644
index 0000000000..b95952aba1
--- /dev/null
+++ b/src/MvcMusicStore.Spa/Web.config
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/MvcMusicStore.Spa/bower.json b/src/MvcMusicStore.Spa/bower.json
new file mode 100644
index 0000000000..224510d8ae
--- /dev/null
+++ b/src/MvcMusicStore.Spa/bower.json
@@ -0,0 +1,17 @@
+{
+ "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
new file mode 100644
index 0000000000..19f18975b1
--- /dev/null
+++ b/src/MvcMusicStore.Spa/package.json
@@ -0,0 +1,16 @@
+{
+ "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.2.8",
+ "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
new file mode 100644
index 0000000000..5af7250436
--- /dev/null
+++ b/src/MvcMusicStore.Spa/packages.config
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/MvcMusicStore.Spa/tslint.json b/src/MvcMusicStore.Spa/tslint.json
new file mode 100644
index 0000000000..975f4ff5c5
--- /dev/null
+++ b/src/MvcMusicStore.Spa/tslint.json
@@ -0,0 +1,48 @@
+{
+ "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