X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Fweb%2Fpage%2FFreenetTemplatePage.kt;h=3912f987ae26605ecf5f59d41462d209fe35e593;hp=c9ec17398eba15355c48abda1e9d82dad2da4143;hb=HEAD;hpb=e3da46d8947ab8a542a156069b3b24c13fd011df diff --git a/src/main/kotlin/net/pterodactylus/sone/web/page/FreenetTemplatePage.kt b/src/main/kotlin/net/pterodactylus/sone/web/page/FreenetTemplatePage.kt index c9ec173..3912f98 100644 --- a/src/main/kotlin/net/pterodactylus/sone/web/page/FreenetTemplatePage.kt +++ b/src/main/kotlin/net/pterodactylus/sone/web/page/FreenetTemplatePage.kt @@ -1,5 +1,5 @@ /* - * Sone - FreenetTemplatePage.java - Copyright © 2010–2019 David Roden + * Sone - FreenetTemplatePage.kt - Copyright © 2010–2020 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 @@ -31,18 +31,17 @@ import java.util.logging.Logger.* * fit into Freenet’s web interface. */ open class FreenetTemplatePage( - private val path: String, private val templateRenderer: TemplateRenderer, loaders: Loaders, - template: Template, private val invalidFormPasswordRedirectTarget: String ) : FreenetPage, LinkEnabledCallback { + private val pageMakerInteractionFactory: PageMakerInteractionFactory = DefaultPageMakerInteractionFactory() open val styleSheets: Collection = emptySet() open val shortcutIcon: String? get() = null open val isFullAccessOnly get() = false - override fun getPath() = path + override fun getPath() = toadletPath open fun getPageTitle(request: FreenetRequest) = "" @@ -56,7 +55,7 @@ open class FreenetTemplatePage( override fun isEnabled(toadletContext: ToadletContext) = !isFullAccessOnly - private val template = templatePath?.let(loaders::loadTemplate) ?: template + private val template = templatePath?.let(loaders::loadTemplate) ?: Template() override fun handleRequest(request: FreenetRequest, response: Response): Response { getRedirectTarget(request)?.let { redirectTarget -> return RedirectResponse(redirectTarget) } @@ -72,16 +71,11 @@ open class FreenetTemplatePage( return RedirectResponse(invalidFormPasswordRedirectTarget) } } - val pageMaker = toadletContext.pageMaker - val pageNode = pageMaker.getPageNode(getPageTitle(request), toadletContext) - styleSheets.forEach(pageNode::addCustomStyleSheet) - getAdditionalLinkNodes(request) - .map { it to pageNode.headNode.addChild("link") } - .forEach { (linkNodeParameters, linkNode) -> - linkNodeParameters.forEach(linkNode::addAttribute) - } - shortcutIcon?.let { pageNode.addForwardLink("icon", it) } + val pageMakerInteraction = pageMakerInteractionFactory.createPageMaker(toadletContext, getPageTitle(request)) + styleSheets.forEach(pageMakerInteraction::addStyleSheet) + getAdditionalLinkNodes(request).forEach(pageMakerInteraction::addLinkNode) + shortcutIcon?.let(pageMakerInteraction::addShortcutIcon) val output = try { val start = System.nanoTime() @@ -95,15 +89,18 @@ open class FreenetTemplatePage( return RedirectResponse(re1.target ?: "") } - pageNode.content.addChild("%", output) + pageMakerInteraction.setContent(output) - return response.setStatusCode(200).setStatusText("OK").setContentType("text/html").write(pageNode.outer.generate()) + return response.setStatusCode(200).setStatusText("OK").setContentType("text/html").write(pageMakerInteraction.renderPage()) } open fun processTemplate(request: FreenetRequest, templateContext: TemplateContext) { /* do nothing. */ } + fun redirectTo(target: String?): Nothing = + throw RedirectException(target) + class RedirectException(val target: String?) : Exception() { override fun toString(): String = format("RedirectException{target='%s'}", target) }