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=900ece9299c7cbb6386e0fbd879d17a31ccf7b09;hb=HEAD;hpb=110a933c2724aba6a604fc5eed6372ff1e1e6144 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 900ece9..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,17 +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, 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) = "" @@ -71,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() @@ -94,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) }