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=540f36e09c7cf2a1f871d188c785cd60be2d578b;hp=8cf5f6131ec7074250b62446b31b5d4b0c4c44ff;hb=aaf780d3c2a6f5ce47295786f3963c8b93f6a145;hpb=63c6904d0034dbec520aaf24a2dc0ea435d0107a 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 8cf5f61..540f36e 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–2019 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 @@ -36,6 +36,7 @@ open class FreenetTemplatePage( 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 @@ -70,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() @@ -93,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) }