From bd9c1cffe132b26f858ea011d7772896ca874fbd Mon Sep 17 00:00:00 2001
From: JesseBrault0709 <62299747+JesseBrault0709@users.noreply.github.com>
Date: Mon, 3 Jun 2024 12:20:02 +0200
Subject: [PATCH] Basic server, styling, and layout.
---
.../com/jessebrault/site/StandardPage.groovy | 7 ++
.../com/jessebrault/site/HeadTemplate.wvc | 7 ++
.../com/jessebrault/site/HeaderTemplate.wvc | 11 ++-
.../jessebrault/site/StandardPageTemplate.wvc | 9 ++-
.../java/com/jessebrault/site/JbHandler.java | 37 +++++----
.../java/com/jessebrault/site/JbServer.java | 16 +++-
start | 14 +++-
static/main.css | 75 +++++++++++++++++++
8 files changed, 145 insertions(+), 31 deletions(-)
create mode 100644 static/main.css
diff --git a/components/groovy/com/jessebrault/site/StandardPage.groovy b/components/groovy/com/jessebrault/site/StandardPage.groovy
index 30dec7c..d1bcbb1 100644
--- a/components/groovy/com/jessebrault/site/StandardPage.groovy
+++ b/components/groovy/com/jessebrault/site/StandardPage.groovy
@@ -2,6 +2,9 @@ package com.jessebrault.site
import groowt.view.component.web.BaseWebViewComponent
+import java.time.LocalDate
+import java.time.format.DateTimeFormatter
+
class StandardPage extends BaseWebViewComponent {
final String title
@@ -14,4 +17,8 @@ class StandardPage extends BaseWebViewComponent {
this.children
}
+ String getCopyrightYear() {
+ LocalDate.now().format(DateTimeFormatter.ofPattern('yyyy'))
+ }
+
}
diff --git a/components/resources/com/jessebrault/site/HeadTemplate.wvc b/components/resources/com/jessebrault/site/HeadTemplate.wvc
index fec9098..b4e5103 100644
--- a/components/resources/com/jessebrault/site/HeadTemplate.wvc
+++ b/components/resources/com/jessebrault/site/HeadTemplate.wvc
@@ -3,5 +3,12 @@ package com.jessebrault.site
---
+
$title
+
+
+
+
+
+
diff --git a/components/resources/com/jessebrault/site/HeaderTemplate.wvc b/components/resources/com/jessebrault/site/HeaderTemplate.wvc
index 36a9612..de810dd 100644
--- a/components/resources/com/jessebrault/site/HeaderTemplate.wvc
+++ b/components/resources/com/jessebrault/site/HeaderTemplate.wvc
@@ -1,9 +1,14 @@
+---
+package com.jessebrault.site
+---
diff --git a/components/resources/com/jessebrault/site/StandardPageTemplate.wvc b/components/resources/com/jessebrault/site/StandardPageTemplate.wvc
index 3a7cb57..6698d07 100644
--- a/components/resources/com/jessebrault/site/StandardPageTemplate.wvc
+++ b/components/resources/com/jessebrault/site/StandardPageTemplate.wvc
@@ -1,10 +1,15 @@
---
package com.jessebrault.site
---
-
+
- <% bodyChildren -> pageChildren.each { bodyChildren << it } %>
+
+ <% children -> pageChildren.each { children << it } %>
+
+
diff --git a/src/server/java/com/jessebrault/site/JbHandler.java b/src/server/java/com/jessebrault/site/JbHandler.java
index 7664b86..652ad30 100644
--- a/src/server/java/com/jessebrault/site/JbHandler.java
+++ b/src/server/java/com/jessebrault/site/JbHandler.java
@@ -8,25 +8,22 @@ import org.eclipse.jetty.util.Callback;
import java.nio.ByteBuffer;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.util.Set;
import java.util.regex.Pattern;
public final class JbHandler extends Handler.Abstract {
- private static final Pattern extensionPattern = Pattern.compile("\\.(?.+)$");
+ private static final Pattern extensionPattern = Pattern.compile(".*\\..+$");
- private static String getExtension(String path) {
+ private static boolean hasExtension(String path) {
final var m = extensionPattern.matcher(path);
- if (m.matches()) {
- return m.group("extension");
- } else {
- return null;
- }
+ return m.matches();
}
- private final Path base;
+ private final Set bases;
- public JbHandler(Path base) {
- this.base = base;
+ public JbHandler(Set bases) {
+ this.bases = bases;
}
@Override
@@ -44,21 +41,21 @@ public final class JbHandler extends Handler.Abstract {
relative = "index.html";
}
- final String extension = getExtension(relative);
- if (extension == null) {
+ if (!hasExtension(relative)) {
relative = relative + ".html";
}
- final Path resolved = base.resolve(relative);
- if (!Files.exists(resolved)) {
- return false;
- } else {
- try (final var inputStream = Files.newInputStream(resolved)) {
- final ByteBuffer byteBuffer = ByteBuffer.wrap(inputStream.readAllBytes());
- response.write(true, byteBuffer, callback);
+ for (final Path base : this.bases) {
+ final Path resolved = base.resolve(relative);
+ if (Files.exists(resolved)) {
+ try (final var inputStream = Files.newInputStream(resolved)) {
+ final ByteBuffer byteBuffer = ByteBuffer.wrap(inputStream.readAllBytes());
+ response.write(true, byteBuffer, callback);
+ }
+ return true;
}
- return true;
}
+ return false;
}
}
diff --git a/src/server/java/com/jessebrault/site/JbServer.java b/src/server/java/com/jessebrault/site/JbServer.java
index c9549be..ba632b6 100644
--- a/src/server/java/com/jessebrault/site/JbServer.java
+++ b/src/server/java/com/jessebrault/site/JbServer.java
@@ -10,6 +10,8 @@ import org.slf4j.LoggerFactory;
import picocli.CommandLine;
import java.nio.file.Path;
+import java.util.HashSet;
+import java.util.Set;
@CommandLine.Command(
name = "jbServer",
@@ -30,8 +32,11 @@ public class JbServer implements Runnable {
@CommandLine.Option(names = { "-p", "--port" }, defaultValue = "8080")
private int port;
- @CommandLine.Option(names = { "-b", "--base" }, defaultValue = "dist/default")
- private Path base;
+ @CommandLine.Option(names = { "-d", "--dist" }, defaultValue = "default")
+ private String dist;
+
+ @CommandLine.Option(names = { "-s", "--static", "--static-dir" }, arity = "0..*", defaultValue = "static")
+ private Set staticDirs;
@Override
public void run() {
@@ -45,7 +50,12 @@ public class JbServer implements Runnable {
server.addConnector(connector);
final Handler.Sequence sequence = new Handler.Sequence();
- sequence.addHandler(new JbHandler(this.base));
+
+ final Set bases = new HashSet<>();
+ bases.add(Path.of("dist", this.dist));
+ bases.addAll(this.staticDirs);
+
+ sequence.addHandler(new JbHandler(bases));
sequence.addHandler(new DefaultHandler());
server.setHandler(sequence);
diff --git a/start b/start
index 90a1f9f..5bdba9a 100755
--- a/start
+++ b/start
@@ -1,5 +1,13 @@
#!/usr/bin/env bash
-gradle -q installServerDist \
- && bin/ssg build -g \
- && build/install/jb-ssg-site-server/bin/JbServer "$@"
+function jbServer() {
+ if [ "$1" == "--debug" ]; then
+ shift
+ build/install/jb-ssg-site-server/bin/JbServer \
+ -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:8192 "$@"
+ else
+ build/install/jb-ssg-site-server/bin/JbServer "$@"
+ fi
+}
+
+gradle -q installServerDist && jbServer
diff --git a/static/main.css b/static/main.css
new file mode 100644
index 0000000..58d441c
--- /dev/null
+++ b/static/main.css
@@ -0,0 +1,75 @@
+.cormorant-garamond-regular {
+ font-family: 'Cormorant Garamond', serif;
+ font-weight: 400;
+ font-style: normal;
+}
+
+.cormorant-garamond-semibold {
+ font-family: 'Cormorant Garamond', serif;
+ font-weight: 600;
+ font-style: normal;
+}
+
+.eb-garamond-regular {
+ font-family: 'EB Garamond', serif;
+ font-optical-sizing: auto;
+ font-weight: 400;
+ font-style: normal;
+}
+
+.eb-garamond-semibold {
+ font-family: 'EB Garamond', serif;
+ font-optical-sizing: auto;
+ font-weight: 600;
+ font-style: normal;
+}
+
+html {
+ font-size: 14pt;
+}
+
+body {
+ margin: 0;
+ padding: 0;
+}
+
+header,
+footer {
+ display: flex;
+ align-items: center;
+ padding: 0 25px;
+}
+
+header {
+ justify-content: space-between;
+}
+
+footer {
+ justify-content: center;
+}
+
+header .titles {
+ display: flex;
+ align-items: baseline;
+ column-gap: 15px;
+}
+
+nav ul {
+ display: flex;
+ column-gap: 25px;
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+main {
+ padding: 0 25px;
+ text-align: justify;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+
+main > * {
+ max-width: 700px;
+}