From 7a8dba19ee930ff09a5fcd659d6cbcfffb011091 Mon Sep 17 00:00:00 2001 From: efim Date: Fri, 22 Sep 2023 17:01:43 +0000 Subject: [PATCH] init: simple cask, initial template --- 16-countries-page-from-api/.project | 0 16-countries-page-from-api/build.sbt | 14 +++++++ 16-countries-page-from-api/default.nix | 22 ++++++++++ .../project/build.properties | 1 + .../project/plugins.sbt | 1 + .../src/main/resources/templates/lala.html | 24 +++++++++++ .../src/main/scala/example/Main.scala | 40 +++++++++++++++++++ .../src/test/scala/example/ExampleSuite.scala | 8 ++++ flake.nix | 5 +++ 9 files changed, 115 insertions(+) create mode 100644 16-countries-page-from-api/.project create mode 100644 16-countries-page-from-api/build.sbt create mode 100644 16-countries-page-from-api/default.nix create mode 100644 16-countries-page-from-api/project/build.properties create mode 100644 16-countries-page-from-api/project/plugins.sbt create mode 100644 16-countries-page-from-api/src/main/resources/templates/lala.html create mode 100644 16-countries-page-from-api/src/main/scala/example/Main.scala create mode 100644 16-countries-page-from-api/src/test/scala/example/ExampleSuite.scala diff --git a/16-countries-page-from-api/.project b/16-countries-page-from-api/.project new file mode 100644 index 0000000..e69de29 diff --git a/16-countries-page-from-api/build.sbt b/16-countries-page-from-api/build.sbt new file mode 100644 index 0000000..33cf94a --- /dev/null +++ b/16-countries-page-from-api/build.sbt @@ -0,0 +1,14 @@ + +val toolkitV = "0.1.7" +val toolkit = "org.scala-lang" %% "toolkit" % toolkitV +val toolkitTest = "org.scala-lang" %% "toolkit-test" % toolkitV + +val cask = "com.lihaoyi" %% "cask" % "0.9.1" + +ThisBuild / scalaVersion := "3.2.2" +libraryDependencies += cask +libraryDependencies += toolkit +libraryDependencies += (toolkitTest % Test) + +// https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf +libraryDependencies += "org.thymeleaf" % "thymeleaf" % "3.1.2.RELEASE" diff --git a/16-countries-page-from-api/default.nix b/16-countries-page-from-api/default.nix new file mode 100644 index 0000000..1c08b81 --- /dev/null +++ b/16-countries-page-from-api/default.nix @@ -0,0 +1,22 @@ +{ pkgs, lib, sbt-derivation }: +let + pname = "countries-page"; +in { + package = sbt-derivation.lib.mkSbtDerivation { + inherit pkgs pname; + # ...and the rest of the arguments + version = "0.0.1"; + src = pkgs.nix-gitignore.gitignoreSource [ ] ./.; + nativeBuildInputs = [ pkgs.nodePackages.tailwindcss ]; + buildPhase = '' + tailwindcss -i ./src/input.css -o ./src/main/resources/public/output.css + sbt assembly + ''; + installPhase = '' + mkdir -p $out/bin + cp target/scala-*/${pname}-assembly-*.jar $out/bin/${pname}.jar + ''; + + depsSha256 = ""; + }; +} diff --git a/16-countries-page-from-api/project/build.properties b/16-countries-page-from-api/project/build.properties new file mode 100644 index 0000000..40b3b8e --- /dev/null +++ b/16-countries-page-from-api/project/build.properties @@ -0,0 +1 @@ +sbt.version=1.9.0 diff --git a/16-countries-page-from-api/project/plugins.sbt b/16-countries-page-from-api/project/plugins.sbt new file mode 100644 index 0000000..59cd318 --- /dev/null +++ b/16-countries-page-from-api/project/plugins.sbt @@ -0,0 +1 @@ +addSbtPlugin("io.spray" % "sbt-revolver" % "0.10.0") diff --git a/16-countries-page-from-api/src/main/resources/templates/lala.html b/16-countries-page-from-api/src/main/resources/templates/lala.html new file mode 100644 index 0000000..874ce66 --- /dev/null +++ b/16-countries-page-from-api/src/main/resources/templates/lala.html @@ -0,0 +1,24 @@ + + + + + + Untitled + + + + + + + + + +

Hello!

+ + diff --git a/16-countries-page-from-api/src/main/scala/example/Main.scala b/16-countries-page-from-api/src/main/scala/example/Main.scala new file mode 100644 index 0000000..3975066 --- /dev/null +++ b/16-countries-page-from-api/src/main/scala/example/Main.scala @@ -0,0 +1,40 @@ +package example + +import org.thymeleaf.templatemode.TemplateMode +import org.thymeleaf.TemplateEngine +import org.thymeleaf.context.Context +import cask.model.Response +object MinimalApplication extends cask.MainRoutes{ + @cask.get("/") + def hello() = { + val context = new Context() + val yo = engine.process("lala", context) + Response( + yo, + headers = Seq("Content-Type" -> "text/html; charset=utf-8") + ) + } + + @cask.post("/do-thing") + def doThing(request: cask.Request) = { + request.text().reverse + } + + initialize() + + def buildTemplateEngine(): TemplateEngine = { + import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver + val templateResolver = new ClassLoaderTemplateResolver() + templateResolver.setTemplateMode(TemplateMode.HTML) + templateResolver.setPrefix("/templates/") + templateResolver.setSuffix(".html") + templateResolver.setCacheTTLMs(3600000L); + + val templateEngine = new TemplateEngine() + templateEngine.setTemplateResolver(templateResolver) + + templateEngine + } + + val engine: TemplateEngine = buildTemplateEngine() +} diff --git a/16-countries-page-from-api/src/test/scala/example/ExampleSuite.scala b/16-countries-page-from-api/src/test/scala/example/ExampleSuite.scala new file mode 100644 index 0000000..26c55ab --- /dev/null +++ b/16-countries-page-from-api/src/test/scala/example/ExampleSuite.scala @@ -0,0 +1,8 @@ +package example + +class ExampleSuite extends munit.FunSuite: + + test("addition") { + assert(1 + 1 == 2) + } +end ExampleSuite diff --git a/flake.nix b/flake.nix index ca88806..4daef86 100644 --- a/flake.nix +++ b/flake.nix @@ -32,6 +32,10 @@ inherit pkgs sbt-derivation; lib = pkgs.lib; }; + flags-page = import ./16-countries-page-from-api { + inherit pkgs sbt-derivation; + lib = pkgs.lib; + }; in { devShells.default = pkgs.mkShell { buildInputs = [ @@ -58,6 +62,7 @@ packages.multi-step-form = multi-step-form.package; packages.multi-step-form-image = multi-step-form.image; nixosModules.multi-step-form = multi-step-form.module; + packages.flag-page = flags-page.package; }); # see https://serokell.io/blog/practical-nix-flakes }