toggleable dark theme
looks bad but that's because I don't want to spend much time on it because it looks bad (dark themes in general usually) I also plan to add more themes and user generated themes
This commit is contained in:
parent
abc294dcc1
commit
6a11f7ec6c
7 changed files with 78 additions and 2 deletions
|
@ -2,20 +2,28 @@ package eu.m724.talkpages;
|
||||||
|
|
||||||
import io.quarkus.qute.CheckedTemplate;
|
import io.quarkus.qute.CheckedTemplate;
|
||||||
import io.quarkus.qute.TemplateInstance;
|
import io.quarkus.qute.TemplateInstance;
|
||||||
|
import io.vertx.core.http.Cookie;
|
||||||
|
import io.vertx.core.http.HttpServerRequest;
|
||||||
import jakarta.inject.Inject;
|
import jakarta.inject.Inject;
|
||||||
import jakarta.ws.rs.GET;
|
import jakarta.ws.rs.GET;
|
||||||
import jakarta.ws.rs.Path;
|
import jakarta.ws.rs.Path;
|
||||||
import jakarta.ws.rs.Produces;
|
import jakarta.ws.rs.Produces;
|
||||||
import jakarta.ws.rs.QueryParam;
|
import jakarta.ws.rs.QueryParam;
|
||||||
import jakarta.ws.rs.core.MediaType;
|
import jakarta.ws.rs.core.MediaType;
|
||||||
|
import jakarta.ws.rs.core.NewCookie;
|
||||||
import jakarta.ws.rs.core.Response;
|
import jakarta.ws.rs.core.Response;
|
||||||
import org.jboss.resteasy.reactive.RestResponse.Status;
|
import org.jboss.resteasy.reactive.RestResponse.Status;
|
||||||
|
|
||||||
|
import java.net.URI;
|
||||||
|
|
||||||
@Path("/")
|
@Path("/")
|
||||||
public class IndexResource {
|
public class IndexResource {
|
||||||
@Inject
|
@Inject
|
||||||
RedirectService redirectService;
|
RedirectService redirectService;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
HttpServerRequest request;
|
||||||
|
|
||||||
@CheckedTemplate
|
@CheckedTemplate
|
||||||
public static class Templates {
|
public static class Templates {
|
||||||
public static native TemplateInstance index();
|
public static native TemplateInstance index();
|
||||||
|
@ -27,6 +35,29 @@ public class IndexResource {
|
||||||
return Templates.index();
|
return Templates.index();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("/theme")
|
||||||
|
public Response toggleDark() {
|
||||||
|
Cookie cookie = request.getCookie("dark");
|
||||||
|
|
||||||
|
NewCookie newCookie;
|
||||||
|
if (cookie == null) {
|
||||||
|
newCookie = new NewCookie.Builder("dark")
|
||||||
|
.path("/")
|
||||||
|
.value("1")
|
||||||
|
.maxAge(31560000)
|
||||||
|
.build();
|
||||||
|
} else {
|
||||||
|
newCookie = new NewCookie.Builder("dark")
|
||||||
|
.path("/")
|
||||||
|
.value("0")
|
||||||
|
.maxAge(0)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
return Response.temporaryRedirect(URI.create("/")).cookie(newCookie).build();
|
||||||
|
}
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
@Path("/search")
|
@Path("/search")
|
||||||
public Response search(@QueryParam("query") String query) {
|
public Response search(@QueryParam("query") String query) {
|
||||||
|
|
|
@ -5,6 +5,8 @@ import eu.m724.talkpages.orm.entity.content.Page;
|
||||||
import eu.m724.talkpages.orm.entity.content.PageRevision;
|
import eu.m724.talkpages.orm.entity.content.PageRevision;
|
||||||
import io.quarkus.runtime.LaunchMode;
|
import io.quarkus.runtime.LaunchMode;
|
||||||
import io.quarkus.runtime.StartupEvent;
|
import io.quarkus.runtime.StartupEvent;
|
||||||
|
import io.vertx.ext.web.Router;
|
||||||
|
import io.vertx.ext.web.handler.StaticHandler;
|
||||||
import jakarta.enterprise.event.Observes;
|
import jakarta.enterprise.event.Observes;
|
||||||
import jakarta.inject.Inject;
|
import jakarta.inject.Inject;
|
||||||
import jakarta.inject.Singleton;
|
import jakarta.inject.Singleton;
|
||||||
|
@ -23,6 +25,12 @@ public class Startup {
|
||||||
@ConfigProperty(name = "talkpages.createExamplePage")
|
@ConfigProperty(name = "talkpages.createExamplePage")
|
||||||
private boolean createExamplePage;
|
private boolean createExamplePage;
|
||||||
|
|
||||||
|
void installStaticRoute(@Observes StartupEvent startupEvent, Router router) {
|
||||||
|
router.route()
|
||||||
|
.path("/static/*")
|
||||||
|
.handler(StaticHandler.create("static/"));
|
||||||
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public void examplePage(@Observes StartupEvent ignoredEvent) {
|
public void examplePage(@Observes StartupEvent ignoredEvent) {
|
||||||
if (Account.findById(1) != null) {
|
if (Account.findById(1) != null) {
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
package eu.m724.talkpages.template;
|
package eu.m724.talkpages.template;
|
||||||
|
|
||||||
import io.quarkus.qute.TemplateExtension;
|
import io.quarkus.qute.TemplateExtension;
|
||||||
|
import io.vertx.core.http.Cookie;
|
||||||
|
import io.vertx.core.http.HttpServerRequest;
|
||||||
import jakarta.enterprise.context.ApplicationScoped;
|
import jakarta.enterprise.context.ApplicationScoped;
|
||||||
|
import jakarta.inject.Inject;
|
||||||
import org.jsoup.Jsoup;
|
import org.jsoup.Jsoup;
|
||||||
import org.jsoup.safety.Safelist;
|
import org.jsoup.safety.Safelist;
|
||||||
|
|
||||||
|
|
21
src/main/java/eu/m724/talkpages/template/ThemeExtension.java
Normal file
21
src/main/java/eu/m724/talkpages/template/ThemeExtension.java
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
package eu.m724.talkpages.template;
|
||||||
|
|
||||||
|
import eu.m724.talkpages.RedirectService;
|
||||||
|
import io.quarkus.arc.Arc;
|
||||||
|
import io.quarkus.qute.TemplateExtension;
|
||||||
|
import io.vertx.core.Vertx;
|
||||||
|
import io.vertx.core.http.Cookie;
|
||||||
|
import io.vertx.core.http.HttpServerRequest;
|
||||||
|
import jakarta.inject.Inject;
|
||||||
|
import jakarta.ws.rs.core.Request;
|
||||||
|
|
||||||
|
@TemplateExtension(namespace = "theme")
|
||||||
|
public class ThemeExtension {
|
||||||
|
public static boolean darkTheme() {
|
||||||
|
// this is bad
|
||||||
|
HttpServerRequest request = Arc.container().instance(HttpServerRequest.class).get();
|
||||||
|
Cookie cookie = request.getCookie("dark");
|
||||||
|
|
||||||
|
return cookie == null || cookie.getValue().equals("0");
|
||||||
|
}
|
||||||
|
}
|
9
src/main/resources/static/dark.css
Normal file
9
src/main/resources/static/dark.css
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
body {
|
||||||
|
background: #202020;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:link { color: #e0d0ff; }
|
||||||
|
a:visited { color: #d0c0ff; }
|
||||||
|
a:hover { color: #e0e0ff; }
|
||||||
|
a:active { color: #e0d0ff; }
|
|
@ -13,6 +13,7 @@
|
||||||
{#else}
|
{#else}
|
||||||
<li><a href="/auth/logout">Logout ({user:name})</a></li>
|
<li><a href="/auth/logout">Logout ({user:name})</a></li>
|
||||||
{/if}
|
{/if}
|
||||||
|
<li><a href="/theme">{#if theme:darkTheme}Light mode{#else}Dark mode{/if}</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<small>Running <a href="/page/TalkPages">TalkPages</a> version {config:["quarkus.application.version"]}</small>
|
<small>Running <a href="/page/TalkPages">TalkPages</a> version {config:["quarkus.application.version"]}</small>
|
||||||
|
|
|
@ -4,6 +4,9 @@
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<!-- TODO opengraph tags and maybe some nice css. also add errors and stuff here -->
|
<!-- TODO opengraph tags and maybe some nice css. also add errors and stuff here -->
|
||||||
|
{#if theme:darkTheme}
|
||||||
|
<link rel="stylesheet" href="/static/dark.css">
|
||||||
|
{/if}
|
||||||
<title>{#insert pageTitle /}{#if !customTitle??} - TalkPages{/if}</title> <!-- I give up -->
|
<title>{#insert pageTitle /}{#if !customTitle??} - TalkPages{/if}</title> <!-- I give up -->
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
Loading…
Reference in a new issue