X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fweb%2FSoneTemplatePage.java;h=b17e0c4ae60532277502bc000e7b87b00dd3fe3b;hb=d0ae5f106a59d7ac808e03287af2e5a33e50ba8b;hp=a6a87df9ca7fe202589a1e5145786e22d0da52ae;hpb=5bcd2637c93dda90b9a1fdb785c5f4b08a04f9e0;p=Sone.git diff --git a/src/main/java/net/pterodactylus/sone/web/SoneTemplatePage.java b/src/main/java/net/pterodactylus/sone/web/SoneTemplatePage.java index a6a87df..b17e0c4 100644 --- a/src/main/java/net/pterodactylus/sone/web/SoneTemplatePage.java +++ b/src/main/java/net/pterodactylus/sone/web/SoneTemplatePage.java @@ -1,5 +1,5 @@ /* - * Freetalk - FreetalkTemplatePage.java - Copyright © 2010 David Roden + * Freetalk - SoneTemplatePage.java - Copyright © 2010 David Roden * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,11 +21,15 @@ import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.Arrays; import java.util.Collection; +import java.util.List; +import java.util.Map; import net.pterodactylus.sone.data.Sone; import net.pterodactylus.sone.main.SonePlugin; import net.pterodactylus.sone.web.page.Page; -import net.pterodactylus.sone.web.page.TemplatePage; +import net.pterodactylus.sone.web.page.FreenetTemplatePage; +import net.pterodactylus.util.collection.ListBuilder; +import net.pterodactylus.util.collection.MapBuilder; import net.pterodactylus.util.template.Template; import net.pterodactylus.util.template.TemplateContext; import freenet.clients.http.SessionManager.Session; @@ -37,11 +41,14 @@ import freenet.support.api.HTTPRequest; * * @author David ‘Bombe’ Roden */ -public class SoneTemplatePage extends TemplatePage { +public class SoneTemplatePage extends FreenetTemplatePage { /** The Sone core. */ protected final WebInterface webInterface; + /** The page title l10n key. */ + private final String pageTitleKey; + /** Whether to require a login. */ private final boolean requireLogin; @@ -53,6 +60,21 @@ public class SoneTemplatePage extends TemplatePage { * The path of the page * @param template * The template to render + * @param webInterface + * The Sone web interface + */ + public SoneTemplatePage(String path, Template template, WebInterface webInterface) { + this(path, template, null, webInterface, false); + } + + /** + * Creates a new template page for Freetalk that does not require the user + * to be logged in. + * + * @param path + * The path of the page + * @param template + * The template to render * @param pageTitleKey * The l10n key of the page title * @param webInterface @@ -69,6 +91,22 @@ public class SoneTemplatePage extends TemplatePage { * The path of the page * @param template * The template to render + * @param webInterface + * The Sone web interface + * @param requireLogin + * Whether this page requires a login + */ + public SoneTemplatePage(String path, Template template, WebInterface webInterface, boolean requireLogin) { + this(path, template, null, webInterface, requireLogin); + } + + /** + * Creates a new template page for Freetalk. + * + * @param path + * The path of the page + * @param template + * The template to render * @param pageTitleKey * The l10n key of the page title * @param webInterface @@ -77,7 +115,8 @@ public class SoneTemplatePage extends TemplatePage { * Whether this page requires a login */ public SoneTemplatePage(String path, Template template, String pageTitleKey, WebInterface webInterface, boolean requireLogin) { - super(path, webInterface.getTemplateContextFactory(), template, webInterface.getL10n(), pageTitleKey, "noPermission.html"); + super(path, webInterface.getTemplateContextFactory(), template, "noPermission.html"); + this.pageTitleKey = pageTitleKey; this.webInterface = webInterface; this.requireLogin = requireLogin; template.getInitialContext().set("webInterface", webInterface); @@ -163,6 +202,25 @@ public class SoneTemplatePage extends TemplatePage { * {@inheritDoc} */ @Override + protected String getPageTitle(Request request) { + if (pageTitleKey != null) { + return webInterface.getL10n().getString(pageTitleKey); + } + return ""; + } + + /** + * {@inheritDoc} + */ + @Override + protected List> getAdditionalLinkNodes(Request request) { + return new ListBuilder>().add(new MapBuilder().put("rel", "search").put("type", "application/opensearchdescription+xml").put("title", "Sone").put("href", "http://" + request.getHttpRequest().getHeader("host") + "/Sone/OpenSearch.xml").get()).get(); + } + + /** + * {@inheritDoc} + */ + @Override protected Collection getStyleSheets() { return Arrays.asList("css/sone.css"); } @@ -213,12 +271,12 @@ public class SoneTemplatePage extends TemplatePage { StringBuilder requestParameters = new StringBuilder(); for (String parameterName : httpRequest.getParameterNames()) { if (requestParameters.length() > 0) { - requestParameters.append('&'); + requestParameters.append("%26"); } String[] parameterValues = httpRequest.getMultipleParam(parameterName); for (String parameterValue : parameterValues) { try { - requestParameters.append(URLEncoder.encode(parameterName, "UTF-8")).append('=').append(URLEncoder.encode(parameterValue, "UTF-8")); + requestParameters.append(URLEncoder.encode(parameterName, "UTF-8")).append("%3d").append(URLEncoder.encode(parameterValue, "UTF-8")); } catch (UnsupportedEncodingException uee1) { /* A JVM without UTF-8? I don’t think so. */ }