package app
import jp.sf.amateras.scalatra.forms._
import service._
import util.WritableRepositoryAuthenticator
class LabelsController extends LabelsControllerBase
with LabelsService with RepositoryService with AccountService with WritableRepositoryAuthenticator
trait LabelsControllerBase extends ControllerBase {
self: LabelsService with RepositoryService with WritableRepositoryAuthenticator =>
case class LabelForm(labelName: String, color: String)
val newForm = mapping(
"newLabelName" -> trim(label("Label name", text(required, identifier, maxlength(100)))),
"newColor" -> trim(label("Color", text(required, color)))
)(LabelForm.apply)
val editForm = mapping(
"editLabelName" -> trim(label("Label name", text(required, identifier, maxlength(100)))),
"editColor" -> trim(label("Color", text(required, color)))
)(LabelForm.apply)
post("/:owner/:repository/issues/label/new", newForm)(writableRepository { form =>
val owner = params("owner")
val repository = params("repository")
createLabel(owner, repository, form.labelName, form.color.substring(1))
redirect("/%s/%s/issues".format(owner, repository))
})
ajaxGet("/:owner/:repository/issues/label/edit")(writableRepository {
val owner = params("owner")
val repository = params("repository")
getRepository(owner, repository, baseUrl)
.map(issues.labels.html.editlist(getLabels(owner, repository), _)) getOrElse NotFound()
})
ajaxGet("/:owner/:repository/issues/label/:labelId/edit")(writableRepository {
val owner = params("owner")
val repository = params("repository")
val labelId = params("labelId").toInt
getRepository(owner, repository, baseUrl).map { repositoryInfo =>
getLabel(owner, repository, labelId).map(label => issues.labels.html.edit(Some(label), repositoryInfo)) getOrElse NotFound()
} getOrElse NotFound()
})
ajaxPost("/:owner/:repository/issues/label/:labelId/edit", editForm)(writableRepository { form =>
val owner = params("owner")
val repository = params("repository")
val labelId = params("labelId").toInt
getRepository(owner, repository, baseUrl).map{ repositoryInfo =>
updateLabel(owner, repository, labelId, form.labelName, form.color.substring(1))
issues.labels.html.editlist(getLabels(owner, repository), repositoryInfo)
} getOrElse NotFound()
})
ajaxGet("/:owner/:repository/issues/label/:labelId/delete")(writableRepository {
val owner = params("owner")
val repository = params("repository")
val labelId = params("labelId").toInt
getRepository(owner, repository, baseUrl).map { repositoryInfo =>
deleteLabel(owner, repository, labelId)
issues.labels.html.editlist(getLabels(owner, repository), repositoryInfo)
} getOrElse NotFound()
})
}