added javascript madness to add new category
This commit is contained in:
parent
2409a207cf
commit
dfa5277e8c
@ -1,7 +1,9 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Web.Mvc;
|
using System.Web.Mvc;
|
||||||
using JetBrains.Annotations;
|
using JetBrains.Annotations;
|
||||||
|
using Portoa.Web.Controllers;
|
||||||
using VideoGameQuotes.Api;
|
using VideoGameQuotes.Api;
|
||||||
using VideoGameQuotes.Web.Models;
|
using VideoGameQuotes.Web.Models;
|
||||||
using VideoGameQuotes.Web.Security;
|
using VideoGameQuotes.Web.Security;
|
||||||
@ -21,7 +23,6 @@ namespace VideoGameQuotes.Web.Controllers {
|
|||||||
public ActionResult Submit() {
|
public ActionResult Submit() {
|
||||||
var model = new QuoteSubmitModel();
|
var model = new QuoteSubmitModel();
|
||||||
ResetModel(model);
|
ResetModel(model);
|
||||||
|
|
||||||
return View(model);
|
return View(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -29,6 +30,7 @@ namespace VideoGameQuotes.Web.Controllers {
|
|||||||
public ActionResult Submit(QuoteSubmitModel model) {
|
public ActionResult Submit(QuoteSubmitModel model) {
|
||||||
if (!ModelState.IsValid) {
|
if (!ModelState.IsValid) {
|
||||||
ResetModel(model);
|
ResetModel(model);
|
||||||
|
|
||||||
return View(model);
|
return View(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -39,6 +41,26 @@ namespace VideoGameQuotes.Web.Controllers {
|
|||||||
Text = model.QuoteText
|
Text = model.QuoteText
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//categories
|
||||||
|
if ((model.CategoryIds != null && model.CategoryIds.Count > 0)) {
|
||||||
|
//modifying systems, so remove errthing
|
||||||
|
quote.ClearCategories();
|
||||||
|
|
||||||
|
if (model.CategoryIds != null && model.CategoryIds.Count > 0) {
|
||||||
|
foreach (var categoryId in model.CategoryIds) {
|
||||||
|
quote.AddCategory(quoteService.GetCategory(categoryId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//if (!string.IsNullOrEmpty(model.SystemName)) {
|
||||||
|
// game.AddSystem(new GamingSystem {
|
||||||
|
// Name = model.SystemName,
|
||||||
|
// Abbreviation = model.SystemAbbreviation,
|
||||||
|
// ReleaseDate = model.SystemReleaseDate
|
||||||
|
// });
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
|
||||||
if (quote.Game == null) {
|
if (quote.Game == null) {
|
||||||
ResetModel(model);
|
ResetModel(model);
|
||||||
return View(model);
|
return View(model);
|
||||||
@ -129,5 +151,17 @@ namespace VideoGameQuotes.Web.Controllers {
|
|||||||
public ActionResult Quote(int id) {
|
public ActionResult Quote(int id) {
|
||||||
return View(quoteService.GetQuote(id));
|
return View(quoteService.GetQuote(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public JsonResult CreateCategory(Category category) {
|
||||||
|
try {
|
||||||
|
category = quoteService.SaveCategory(category);
|
||||||
|
var data = new Dictionary<string, string> { { "categoryId", category.Id.ToString() }, { "categoryName", category.Name } };
|
||||||
|
return Json(this.CreateJsonResponse(null, data));
|
||||||
|
} catch (Exception e) {
|
||||||
|
return Json(this.CreateJsonErrorResponse(e));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -40,6 +40,7 @@ namespace VideoGameQuotes.Web {
|
|||||||
routes.MapRoute("about", "about", new { controller = "Home", action = "About" });
|
routes.MapRoute("about", "about", new { controller = "Home", action = "About" });
|
||||||
routes.MapRoute("contact", "contact", new { controller = "Home", action = "Contact" });
|
routes.MapRoute("contact", "contact", new { controller = "Home", action = "Contact" });
|
||||||
routes.MapRoute("submit", "submit", new { controller = "Quote", action = "Submit" });
|
routes.MapRoute("submit", "submit", new { controller = "Quote", action = "Submit" });
|
||||||
|
routes.MapRoute("create-category", "category/create", new { controller = "Quote", action = "CreateCategory" });
|
||||||
routes.MapRoute("individual-quote", "q/{id}/{*text}", new { controller = "Quote", action = "Quote" }, new { id = @"\d+" });
|
routes.MapRoute("individual-quote", "q/{id}/{*text}", new { controller = "Quote", action = "Quote" }, new { id = @"\d+" });
|
||||||
routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });
|
routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });
|
||||||
}
|
}
|
||||||
|
@ -54,8 +54,9 @@ namespace VideoGameQuotes.Web.Models {
|
|||||||
.Concat(AllGames.Select(game => new SelectListItem { Value = game.Id.ToString(), Text = game.Name }));
|
.Concat(AllGames.Select(game => new SelectListItem { Value = game.Id.ToString(), Text = game.Name }));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string MakeTable<T>(int cellsPerRow, IEnumerable<T> items, Func<T, string> cellDataCallback) {
|
private static string MakeTable<T>(string tableId, int cellsPerRow, IEnumerable<T> items, Func<T, string> cellDataCallback) {
|
||||||
var table = new TagBuilder("table");
|
var table = new TagBuilder("table");
|
||||||
|
table.MergeAttribute("id", tableId);
|
||||||
var count = 0;
|
var count = 0;
|
||||||
var row = new TagBuilder("tr");
|
var row = new TagBuilder("tr");
|
||||||
var cell = new TagBuilder("td");
|
var cell = new TagBuilder("td");
|
||||||
@ -84,6 +85,7 @@ namespace VideoGameQuotes.Web.Models {
|
|||||||
|
|
||||||
public string MakePublisherTable(HtmlHelper<QuoteSubmitModel> html, int cellsPerRow = 8) {
|
public string MakePublisherTable(HtmlHelper<QuoteSubmitModel> html, int cellsPerRow = 8) {
|
||||||
return MakeTable(
|
return MakeTable(
|
||||||
|
"publisher-checkbox-table",
|
||||||
cellsPerRow,
|
cellsPerRow,
|
||||||
AllPublishers,
|
AllPublishers,
|
||||||
publisher => CreateCheckbox(html, "PublisherIds", publisher.Id, "publisher_" + publisher.Id, publisher.Name)
|
publisher => CreateCheckbox(html, "PublisherIds", publisher.Id, "publisher_" + publisher.Id, publisher.Name)
|
||||||
@ -92,6 +94,7 @@ namespace VideoGameQuotes.Web.Models {
|
|||||||
|
|
||||||
public string MakeSystemTable(HtmlHelper<QuoteSubmitModel> html, int cellsPerRow = 8) {
|
public string MakeSystemTable(HtmlHelper<QuoteSubmitModel> html, int cellsPerRow = 8) {
|
||||||
return MakeTable(
|
return MakeTable(
|
||||||
|
"system-checkbox-table",
|
||||||
cellsPerRow,
|
cellsPerRow,
|
||||||
AllSystems,
|
AllSystems,
|
||||||
system => CreateCheckbox(html, "SystemIds", system.Id, "system_" + system.Id, system.Abbreviation)
|
system => CreateCheckbox(html, "SystemIds", system.Id, "system_" + system.Id, system.Abbreviation)
|
||||||
@ -100,6 +103,7 @@ namespace VideoGameQuotes.Web.Models {
|
|||||||
|
|
||||||
public string MakeCategoryTable(HtmlHelper<QuoteSubmitModel> html, int cellsPerRow = 8) {
|
public string MakeCategoryTable(HtmlHelper<QuoteSubmitModel> html, int cellsPerRow = 8) {
|
||||||
return MakeTable(
|
return MakeTable(
|
||||||
|
"category-checkbox-table",
|
||||||
cellsPerRow,
|
cellsPerRow,
|
||||||
AllCategories,
|
AllCategories,
|
||||||
category => CreateCheckbox(html, "CategoryIds", category.Id, "category_" + category.Id, category.Name)
|
category => CreateCheckbox(html, "CategoryIds", category.Id, "category_" + category.Id, category.Name)
|
||||||
@ -108,6 +112,7 @@ namespace VideoGameQuotes.Web.Models {
|
|||||||
|
|
||||||
public string MakeRegionTable(HtmlHelper<QuoteSubmitModel> html, int cellsPerRow = 8) {
|
public string MakeRegionTable(HtmlHelper<QuoteSubmitModel> html, int cellsPerRow = 8) {
|
||||||
return MakeTable(
|
return MakeTable(
|
||||||
|
"region-checkbox-table",
|
||||||
cellsPerRow,
|
cellsPerRow,
|
||||||
(IEnumerable<Region>)Enum.GetValues(typeof(Region)),
|
(IEnumerable<Region>)Enum.GetValues(typeof(Region)),
|
||||||
region => CreateCheckbox(html, "GameRegions", region, "region_" + (int)region, region.ToString())
|
region => CreateCheckbox(html, "GameRegions", region, "region_" + (int)region, region.ToString())
|
||||||
|
@ -15,6 +15,7 @@ namespace VideoGameQuotes.Web.Services {
|
|||||||
Publisher GetPublisher(int id);
|
Publisher GetPublisher(int id);
|
||||||
GamingSystem GetSystem(int systemId);
|
GamingSystem GetSystem(int systemId);
|
||||||
Category GetCategory(int categoryId);
|
Category GetCategory(int categoryId);
|
||||||
|
Category SaveCategory(Category category);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class QuoteService : IQuoteService {
|
public class QuoteService : IQuoteService {
|
||||||
@ -86,5 +87,10 @@ namespace VideoGameQuotes.Web.Services {
|
|||||||
public Category GetCategory(int categoryId) {
|
public Category GetCategory(int categoryId) {
|
||||||
return categoryRepository.FindById(categoryId);
|
return categoryRepository.FindById(categoryId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[UnitOfWork]
|
||||||
|
public Category SaveCategory(Category category) {
|
||||||
|
return categoryRepository.Save(category);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -124,7 +124,6 @@
|
|||||||
<script type="text/javascript">//<![CDATA[
|
<script type="text/javascript">//<![CDATA[
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
$("#create-game-link").click(function() {
|
$("#create-game-link").click(function() {
|
||||||
//show the create game form
|
|
||||||
var $form = $("#create-game-form");
|
var $form = $("#create-game-form");
|
||||||
if ($form.is(":visible")) {
|
if ($form.is(":visible")) {
|
||||||
$("#create-game-link").text("Create new game");
|
$("#create-game-link").text("Create new game");
|
||||||
@ -139,7 +138,6 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
$("#create-system-link").click(function() {
|
$("#create-system-link").click(function() {
|
||||||
//show the create game form
|
|
||||||
var $form = $("#create-system-form");
|
var $form = $("#create-system-form");
|
||||||
if ($form.is(":visible")) {
|
if ($form.is(":visible")) {
|
||||||
$("#create-system-link").text("Create new system");
|
$("#create-system-link").text("Create new system");
|
||||||
@ -153,7 +151,6 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
$("#create-publisher-link").click(function() {
|
$("#create-publisher-link").click(function() {
|
||||||
//show the create game form
|
|
||||||
var $form = $("#create-publisher-form");
|
var $form = $("#create-publisher-form");
|
||||||
if ($form.is(":visible")) {
|
if ($form.is(":visible")) {
|
||||||
$("#create-publisher-link").text("Create new publisher");
|
$("#create-publisher-link").text("Create new publisher");
|
||||||
@ -165,6 +162,71 @@
|
|||||||
$("#publisher-select").toggle();
|
$("#publisher-select").toggle();
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$("#create-category-link").click(function() {
|
||||||
|
var $table = $("#category-checkbox-table");
|
||||||
|
var $row = $table.find("tr:last");
|
||||||
|
if ($row.find("#new-category-name").length === 0) {
|
||||||
|
var $cell = $("<td/>");
|
||||||
|
if ($row.find("td").length === 8) {
|
||||||
|
$row = $("<tr/>");
|
||||||
|
$table.append($row);
|
||||||
|
}
|
||||||
|
|
||||||
|
$row.append($cell);
|
||||||
|
|
||||||
|
var $input = $("<input/>").attr("id", "new-category-name").attr("type", "text").val("Category name");
|
||||||
|
|
||||||
|
$input.bind("keypress", function(e) {
|
||||||
|
if (e.which === 13) {
|
||||||
|
e.preventDefault(); //make sure the parent form doesn't get submitted
|
||||||
|
|
||||||
|
$input.attr("disabled", "disabled");
|
||||||
|
$.ajax("/category/create", {
|
||||||
|
data: { Name: $input.val() },
|
||||||
|
type: "POST",
|
||||||
|
success: function(data, status, $xhr) {
|
||||||
|
if (data.Error !== null) {
|
||||||
|
alert("An error occurred: " + data.Error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//add category checkbox to table
|
||||||
|
var $checkbox = $("<input/>")
|
||||||
|
.attr({
|
||||||
|
"id": "category_" + data.Data.categoryId,
|
||||||
|
"type": "checkbox",
|
||||||
|
"name": "CategoryIds",
|
||||||
|
"checked": "checked"
|
||||||
|
}).val(data.Data.categoryId);
|
||||||
|
|
||||||
|
var $label = $("<label/>")
|
||||||
|
.attr("for", $checkbox.attr("id"))
|
||||||
|
.text(data.Data.categoryName);
|
||||||
|
|
||||||
|
$input.before($checkbox).before($label);
|
||||||
|
},
|
||||||
|
error: function($xhr, status, error) {
|
||||||
|
alert("An error occurred");
|
||||||
|
},
|
||||||
|
|
||||||
|
complete: function() {
|
||||||
|
$input.remove();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$cell.append($input);
|
||||||
|
$input.select();
|
||||||
|
$(this).text("Cancel new category");
|
||||||
|
} else {
|
||||||
|
$row.find("td:last").remove();
|
||||||
|
$(this).text("Create new category");
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
});
|
});
|
||||||
//]]></script>
|
//]]></script>
|
||||||
|
|
||||||
|
@ -132,7 +132,7 @@ legend {
|
|||||||
border-bottom: 2px solid #000000;
|
border-bottom: 2px solid #000000;
|
||||||
}
|
}
|
||||||
|
|
||||||
#create-game-form, #create-system-form, #create-publisher-form {
|
#create-game-form, #create-system-form, #create-publisher-form, #create-category-form {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
#create-quote-form input[type="text"] {
|
#create-quote-form input[type="text"] {
|
||||||
@ -145,6 +145,9 @@ legend {
|
|||||||
#create-quote-form td {
|
#create-quote-form td {
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
}
|
}
|
||||||
|
#new-category-name {
|
||||||
|
width: 100px !important;
|
||||||
|
}
|
||||||
|
|
||||||
#footer {
|
#footer {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
Loading…
Reference in New Issue
Block a user