
skinny.task.generator.ScaffoldSspGenerator.scala Maven / Gradle / Ivy
package skinny.task.generator
import skinny.controller.Params
/**
* Scaffold generator with ssp template.
*/
object ScaffoldSspGenerator extends ScaffoldSspGenerator
/**
* Scaffold generator with ssp template.
*/
trait ScaffoldSspGenerator extends ScaffoldGenerator {
val packageImportsWarning =
s"""<%-- Be aware of package imports.
| 1. ${sourceDir}/templates/ScalatePackage.scala
| 2. scalateTemplateConfig in project/Build.scala
|--%>""".stripMargin
override def formHtmlCode(namespaces: Seq[String], resources: String, resource: String, nameAndTypeNamePairs: Seq[(String, String)]): String = {
val controllerName = "Controllers." + toControllerName(namespaces, resources)
"<%@val s: skinny.Skinny %>\n<%@val keyAndErrorMessages: skinny.KeyAndErrorMessages %>\n\n" +
packageImportsWarning + "\n\n" +
nameAndTypeNamePairs.toList.map { case (k, t) => (k, extractTypeIfOptionOrSeq(t)) }.map {
case (name, "Boolean") =>
s"""
|
|
|
|
|
|
|
|""".stripMargin
case (name, "DateTime") =>
s"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| #if (keyAndErrorMessages.hasErrors("${toSnakeCase(name)}"))
|
| #for (error <- keyAndErrorMessages.getErrors("${toSnakeCase(name)}"))
|
| #end
|
| #end
|
|
|""".stripMargin
case (name, "LocalDate") =>
s"""
|
|
|
|
|
|
|
|
|
|
|
|
|
| #if (keyAndErrorMessages.hasErrors("${toSnakeCase(name)}"))
|
| #for (error <- keyAndErrorMessages.getErrors("${toSnakeCase(name)}"))
|
| #end
|
| #end
|
|
|""".stripMargin
case (name, "LocalTime") =>
s"""
|
|
|
|
|
|
|
|
|
|
|
|
|
| #if (keyAndErrorMessages.hasErrors("${toSnakeCase(name)}"))
|
| #for (error <- keyAndErrorMessages.getErrors("${toSnakeCase(name)}"))
|
| #end
|
| #end
|
|
|""".stripMargin
case (name, _) =>
s"""
|
|
|
|
|
|
|
| #if (keyAndErrorMessages.hasErrors("${toSnakeCase(name)}"))
|
| #for (error <- keyAndErrorMessages.getErrors("${toSnakeCase(name)}"))
|
| #end
|
| #end
|
|
|""".stripMargin
}.mkString +
s"""
| $${unescape(s.csrfHiddenInputTag)}
|
| $${s.i18n.getOrKey("cancel")}
|
|""".stripMargin
}
override def newHtmlCode(namespaces: Seq[String], resources: String, resource: String, nameAndTypeNamePairs: Seq[(String, String)]): String = {
val controllerName = "Controllers." + toControllerName(namespaces, resources)
s"""<%@val s: skinny.Skinny %>
|
|${packageImportsWarning}
|
|$${s.i18n.getOrKey("${resource}.new")}
|
|
|<%--
|#for (e <- s.errorMessages)
|$${e}
|#end
|--%>
|
|
|""".stripMargin
}
override def editHtmlCode(namespaces: Seq[String], resources: String, resource: String, nameAndTypeNamePairs: Seq[(String, String)]): String = {
val controllerName = "Controllers." + toControllerName(namespaces, resources)
s"""<%@val s: skinny.Skinny %>
|
|${packageImportsWarning}
|
|$${s.i18n.getOrKey("${resource}.edit")} : #$${s.params.id}
|
|
|<%--
|#for (e <- s.errorMessages)
|$${e}
|#end
|--%>
|
|
|""".stripMargin
}
override def indexHtmlCode(namespaces: Seq[String], resources: String, resource: String, nameAndTypeNamePairs: Seq[(String, String)]): String = {
val controllerName = "Controllers." + toControllerName(namespaces, resources)
val modelClassName = toClassName(resource)
s"""<%@val s: skinny.Skinny %>
|<%@val items: Seq[${toNamespace(modelPackage, namespaces)}.${modelClassName}] %>
|<%@val totalPages: Int %>
|<%@val page: Int = s.params.page.map(_.toString.toInt).getOrElse(1) %>
|
|${packageImportsWarning}
|
|$${s.i18n.getOrKey("${resource}.list")}
|
|#for (notice <- s.flash.notice)
| $${notice}
|#end
|
|#if (totalPages > 1)
|
| -
| 1)}">«
|
| <% val maxPage = Math.min(totalPages, if (page <= 5) 11 else page + 5) %>
| #for (i <- Math.max(1, maxPage - 10) to maxPage)
| -
| i)}">$${i}
|
| #end
| -
| totalPages)}">»
|
| -
| $${Math.min(page, totalPages)} / $${totalPages}
|
|
|#end
|
|
|
|
|${((primaryKeyName -> "Long") :: nameAndTypeNamePairs.toList).map { case (k, _) => " ${s.i18n.getOrKey(\"" + resource + "." + k + "\")} " }.mkString("\n")}
|
|
|
|
| #for (item <- items)
|
|${((primaryKeyName -> "Long") :: nameAndTypeNamePairs.toList).map { case (k, _) => s" $${item.${k}} " }.mkString("\n")}
|
| item.${primaryKeyName})}" class="btn btn-default">$${s.i18n.getOrKey("detail")}
| item.${primaryKeyName})}" class="btn btn-info">$${s.i18n.getOrKey("edit")}
| item.${primaryKeyName})}" rel="nofollow" class="btn btn-danger">$${s.i18n.getOrKey("delete")}
|
|
| #end
| #if (items.isEmpty)
|
| $${s.i18n.getOrKey("empty")}
|
| #end
|
|
|
|$${s.i18n.getOrKey("new")}
|""".stripMargin
}
override def showHtmlCode(namespaces: Seq[String], resources: String, resource: String, nameAndTypeNamePairs: Seq[(String, String)]): String = {
val controllerName = "Controllers." + toControllerName(namespaces, resources)
val modelClassName = toClassName(resource)
val modelNamespace = toNamespace(modelPackage, namespaces)
val attributesPart = ((primaryKeyName -> "Long") :: nameAndTypeNamePairs.toList).map {
case (name, _) =>
s"""
| $${s.i18n.getOrKey("${resource}.${name}")}
| $${item.${name}}
|
|""".stripMargin
}.mkString
s"""<%@val item: ${modelNamespace}.${modelClassName} %>
|<%@val s: skinny.Skinny %>
|
|${packageImportsWarning}
|
|$${s.i18n.getOrKey("${resource}.detail")}
|
|#for (notice <- s.flash.notice)
| $${notice}
|#end
|
|
|${attributesPart}
|
|
|
|
|
|""".stripMargin
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy