diff --git a/src/main/scala/app/LabelsController.scala b/src/main/scala/app/LabelsController.scala index 652674b..f84012d 100644 --- a/src/main/scala/app/LabelsController.scala +++ b/src/main/scala/app/LabelsController.scala @@ -5,6 +5,7 @@ import util.{ReferrerAuthenticator, CollaboratorsAuthenticator} import util.Implicits._ import org.scalatra.i18n.Messages +import org.scalatra.Ok class LabelsController extends LabelsControllerBase with LabelsService with IssuesService with RepositoryService with AccountService @@ -16,14 +17,9 @@ case class LabelForm(labelName: String, color: String) - val newForm = mapping( - "newLabelName" -> trim(label("Label name", text(required, labelName, maxlength(100)))), - "newColor" -> trim(label("Color", text(required, color))) - )(LabelForm.apply) - - val editForm = mapping( - "editLabelName" -> trim(label("Label name", text(required, labelName, maxlength(100)))), - "editColor" -> trim(label("Color", text(required, color))) + val labelForm = mapping( + "labelName" -> trim(label("Label name", text(required, labelName, maxlength(100)))), + "labelColor" -> trim(label("Color", text(required, color))) )(LabelForm.apply) get("/:owner/:repository/issues/labels")(referrersOnly { repository => @@ -38,9 +34,14 @@ issues.labels.html.edit(None, repository) }) - post("/:owner/:repository/issues/labels/new", newForm)(collaboratorsOnly { (form, repository) => - createLabel(repository.owner, repository.name, form.labelName, form.color.substring(1)) - redirect(s"/${repository.owner}/${repository.name}/issues/labels") + ajaxPost("/:owner/:repository/issues/labels/new", labelForm)(collaboratorsOnly { (form, repository) => + val labelId = createLabel(repository.owner, repository.name, form.labelName, form.color.substring(1)) + issues.labels.html.label( + getLabel(repository.owner, repository.name, labelId).get, + // TODO futility + countIssueGroupByLabels(repository.owner, repository.name, IssuesService.IssueSearchCondition()), + repository, + hasWritePermission(repository.owner, repository.name, context.loginAccount)) }) ajaxGet("/:owner/:repository/issues/labels/:labelId/edit")(collaboratorsOnly { repository => @@ -49,14 +50,19 @@ } getOrElse NotFound() }) - post("/:owner/:repository/issues/labels/:labelId/edit", editForm)(collaboratorsOnly { (form, repository) => + ajaxPost("/:owner/:repository/issues/labels/:labelId/edit", labelForm)(collaboratorsOnly { (form, repository) => updateLabel(repository.owner, repository.name, params("labelId").toInt, form.labelName, form.color.substring(1)) - redirect(s"/${repository.owner}/${repository.name}/issues/labels") + issues.labels.html.label( + getLabel(repository.owner, repository.name, params("labelId").toInt).get, + // TODO futility + countIssueGroupByLabels(repository.owner, repository.name, IssuesService.IssueSearchCondition()), + repository, + hasWritePermission(repository.owner, repository.name, context.loginAccount)) }) - get("/:owner/:repository/issues/labels/:labelId/delete")(collaboratorsOnly { repository => + ajaxPost("/:owner/:repository/issues/labels/:labelId/delete")(collaboratorsOnly { repository => deleteLabel(repository.owner, repository.name, params("labelId").toInt) - redirect(s"/${repository.owner}/${repository.name}/issues/labels") + Ok() }) /** diff --git a/src/main/scala/model/Labels.scala b/src/main/scala/model/Labels.scala index e36746a..73ba1b7 100644 --- a/src/main/scala/model/Labels.scala +++ b/src/main/scala/model/Labels.scala @@ -29,9 +29,9 @@ val b = color.substring(4, 6) if(Integer.parseInt(r, 16) + Integer.parseInt(g, 16) + Integer.parseInt(b, 16) > 408){ - "000000" + "black" } else { - "FFFFFF" + "white" } } } diff --git a/src/main/scala/service/LabelsService.scala b/src/main/scala/service/LabelsService.scala index 37c3d35..de1dcb8 100644 --- a/src/main/scala/service/LabelsService.scala +++ b/src/main/scala/service/LabelsService.scala @@ -12,8 +12,8 @@ def getLabel(owner: String, repository: String, labelId: Int)(implicit s: Session): Option[Label] = Labels.filter(_.byPrimaryKey(owner, repository, labelId)).firstOption - def createLabel(owner: String, repository: String, labelName: String, color: String)(implicit s: Session): Unit = - Labels insert Label( + def createLabel(owner: String, repository: String, labelName: String, color: String)(implicit s: Session): Int = + Labels returning Labels.map(_.labelId) += Label( userName = owner, repositoryName = repository, labelName = labelName, diff --git a/src/main/twirl/issues/labels/edit.scala.html b/src/main/twirl/issues/labels/edit.scala.html index c420b8d..b21d33d 100644 --- a/src/main/twirl/issues/labels/edit.scala.html +++ b/src/main/twirl/issues/labels/edit.scala.html @@ -1,41 +1,61 @@ @(label: Option[model.Label], repository: service.RepositoryService.RepositoryInfo)(implicit context: app.Context) @import context._ @import view.helpers._ -@defining(if(label.isEmpty) "new" else "edit"){ mode => -