package freenet.clients.http.wizardsteps; import freenet.clients.http.FirstTimeWizardToadlet; import freenet.clients.http.PageMaker.RenderParameters; import freenet.clients.http.PageNode; import freenet.clients.http.ToadletContext; import freenet.support.HTMLNode; /** * Provides a page content node, forms, and InfoBoxes. Used to wrap ToadletContext access away from Wizard Steps. * A new one should be constructed each time a step is run. */ public class PageHelper { private final ToadletContext toadletContext; private final PersistFields persistFields; private final FirstTimeWizardToadlet.WIZARD_STEP step; private PageNode pageNode; public PageHelper(ToadletContext ctx, PersistFields persistFields, FirstTimeWizardToadlet.WIZARD_STEP step) { this.toadletContext = ctx; this.persistFields = persistFields; this.step = step; } /** * Generates a PageMaker with the appropriate arguments for the wizard. (Ex hiding status and nav bars) * This is so that steps can determine their page title at runtime instead of being limited to one. This is * needed for the physical security page. * @param title desired page title * @return Content HTMLNode to add content to */ public HTMLNode getPageContent(String title) { pageNode = toadletContext.getPageMaker().getPageNode(title, toadletContext, new RenderParameters().renderNavigationLinks(false).renderStatus(false)); return pageNode.content; } /** * After getPageContent has been called, returns page outer HTMLNode. * @return page outer node used to render entire page. */ public HTMLNode getPageOuter() { if (pageNode == null) { throw new NullPointerException("pageNode was not initialized. getPageContent must be called first."); } return pageNode.outer; } public HTMLNode getInfobox(String category, String header, HTMLNode parent, String title, boolean isUnique) { return toadletContext.getPageMaker().getInfobox(category, header, parent, title, isUnique); } public HTMLNode addFormChild(HTMLNode parentNode, String target, String id) { return addFormChild(parentNode, target, id, true); } /** * Generates a form that includes persistence for inter-step fields. This is currently opennet, preset, and step. * Opennet is whether the user enabled opennet, preset is what preset they're using, and step is what POST step * will be used to process the form. * @param parentNode node to add form to * @param target where form should POST to * @param id ID attribute (in HTML) of form * @param includeOpennet whether the opennet field should be persisted. False on the OPENNET step. * @return form node to add buttons, inputs, and whatnot to. */ public HTMLNode addFormChild(HTMLNode parentNode, String target, String id, boolean includeOpennet) { HTMLNode form = toadletContext.addFormChild(parentNode, target, id); if (persistFields.isUsingPreset()) { form.addChild("input", new String[] { "type", "name", "value" }, new String[] { "hidden", "preset", persistFields.preset.name() }); } if (includeOpennet) { form.addChild("input", new String[] { "type", "name", "value" }, new String[] { "hidden", "opennet", String.valueOf(persistFields.opennet) }); } form.addChild("input", new String[] { "type", "name", "value" }, new String[] { "hidden", "step", step.name() }); return form; } }