mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-03 03:55:58 +01:00
64 lines
2.6 KiB
Scala
64 lines
2.6 KiB
Scala
package app
|
|
|
|
import jp.sf.amateras.scalatra.forms._
|
|
import service._
|
|
import util.CollaboratorsAuthenticator
|
|
|
|
class LabelsController extends LabelsControllerBase
|
|
with LabelsService with RepositoryService with AccountService with CollaboratorsAuthenticator
|
|
|
|
trait LabelsControllerBase extends ControllerBase {
|
|
self: LabelsService with RepositoryService with CollaboratorsAuthenticator =>
|
|
|
|
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)))
|
|
)(LabelForm.apply)
|
|
|
|
post("/:owner/:repository/issues/label/new", newForm)(collaboratorsOnly { (form, repository) =>
|
|
createLabel(repository.owner, repository.name, form.labelName, form.color.substring(1))
|
|
redirect(s"/${repository.owner}/${repository.name}/issues")
|
|
})
|
|
|
|
ajaxGet("/:owner/:repository/issues/label/edit")(collaboratorsOnly { repository =>
|
|
issues.labels.html.editlist(getLabels(repository.owner, repository.name), repository)
|
|
})
|
|
|
|
ajaxGet("/:owner/:repository/issues/label/:labelId/edit")(collaboratorsOnly { repository =>
|
|
getLabel(repository.owner, repository.name, params("labelId").toInt).map { label =>
|
|
issues.labels.html.edit(Some(label), repository)
|
|
} getOrElse NotFound()
|
|
})
|
|
|
|
ajaxPost("/:owner/:repository/issues/label/:labelId/edit", editForm)(collaboratorsOnly { (form, repository) =>
|
|
updateLabel(repository.owner, repository.name, params("labelId").toInt, form.labelName, form.color.substring(1))
|
|
issues.labels.html.editlist(getLabels(repository.owner, repository.name), repository)
|
|
})
|
|
|
|
ajaxGet("/:owner/:repository/issues/label/:labelId/delete")(collaboratorsOnly { repository =>
|
|
deleteLabel(repository.owner, repository.name, params("labelId").toInt)
|
|
issues.labels.html.editlist(getLabels(repository.owner, repository.name), repository)
|
|
})
|
|
|
|
/**
|
|
* Constraint for the identifier such as user name, repository name or page name.
|
|
*/
|
|
private def labelName: Constraint = new Constraint(){
|
|
def validate(name: String, value: String): Option[String] =
|
|
if(!value.matches("^[^,]+$")){
|
|
Some(s"${name} contains invalid character.")
|
|
} else if(value.startsWith("_") || value.startsWith("-")){
|
|
Some(s"${name} starts with invalid character.")
|
|
} else {
|
|
None
|
|
}
|
|
}
|
|
|
|
} |