Package freenet.clients.http.wizardsteps

Source Code of freenet.clients.http.wizardsteps.WELCOME

package freenet.clients.http.wizardsteps;

import freenet.clients.http.*;
import freenet.config.Config;
import freenet.config.EnumerableOptionCallback;
import freenet.config.Option;
import freenet.support.HTMLNode;
import freenet.support.Logger;
import freenet.support.api.HTTPRequest;

/**
* This step is the first, and provides a small welcome screen and an option to change the language.
*/
public class WELCOME implements Step {

  private final Config config;

  /**
   * Constructs a new WELCOME GET handler.
   * @param config Node config; cannot be null. Used to build language drop-down and change language.
   */
  public WELCOME(Config config) {
    this.config = config;
  }
  /**
   * Renders the first page of the wizard into the given content node.
   * @param request used to check whether the user is using a browser with incognito mode.
   */
  @Override
  public void getStep(HTTPRequest request, PageHelper helper) {
    HTMLNode contentNode = helper.getPageContent(WizardL10n.l10n("homepageTitle"));
    boolean incognito = request.isParameterSet("incognito");

    HTMLNode optionsTable = contentNode.addChild("table");
    HTMLNode tableHeader = optionsTable.addChild("tr");
    HTMLNode tableRow = optionsTable.addChild("tr");

    //Low security option
    addSecurityTableCell(tableHeader, tableRow, "Low", helper, incognito);

    //High security option
    addSecurityTableCell(tableHeader, tableRow, "High", helper, incognito);

    //Detailed wizard option
    addSecurityTableCell(tableHeader, tableRow, "None", helper, incognito);

    HTMLNode languageForm = helper.addFormChild(contentNode, ".", "languageForm");
    //Add option dropdown for languages
    Option<?> language = config.get("node").getOption("l10n");
    EnumerableOptionCallback l10nCallback = (EnumerableOptionCallback)language.getCallback();
    HTMLNode dropDown = ConfigToadlet.addComboBox(language.getValueDisplayString(), l10nCallback, language.getName(), false);
    //Submit automatically upon selection if Javascript.
    dropDown.addAttribute("onchange", "this.form.submit()");
    languageForm.addChild(dropDown);
    //Otherwise fall back to submit button if no Javascript
    languageForm.addChild("noscript").addChild("input", "type", "submit");
  }

  @Override
  public String postStep(HTTPRequest request) {
    //The user changed their language on the welcome page. Change the language and re-render the page.
    //Presets are handled within FirstTimeWizardToadlet because it can access all steps.
    String desiredLanguage = request.getPartAsStringFailsafe("l10n", 4096);
    try {
      config.get("node").set("l10n", desiredLanguage);
    } catch (freenet.config.InvalidConfigValueException e) {
      Logger.error(this, "Failed to set language to " + desiredLanguage + ". " + e);
    } catch (freenet.config.NodeNeedRestartException e) {
      //Changing language doesn't require a restart, at least as of version 1385.
      //Doing so would be really annoying as the node would have to start up again
      //which could be very slow.
    }
    return FirstTimeWizardToadlet.WIZARD_STEP.WELCOME.name();
  }

  /**
   * Adds a table cell with information about a given security level and button.
   * @param row "tr" node to add cell content to
   * @param header "tr" node to add header to
   * @param preset suffix for security level keys.
   * @param helper used to add a form
   * @param incognito whether incognito mode is enabled
   */
  private void addSecurityTableCell(HTMLNode header, HTMLNode row, String preset, PageHelper helper, boolean incognito) {
    header.addChild("th", "width", "33%", WizardL10n.l10n("presetTitle"+preset));
    HTMLNode tableCell = row.addChild("td");
    tableCell.addChild("p", WizardL10n.l10n("preset" + preset));
    HTMLNode centerForm = tableCell.addChild("div", "style", "text-align:center;");
    HTMLNode secForm = helper.addFormChild(centerForm, ".", "SecForm"+preset);
    secForm.addChild("input",
            new String[]{"type", "name", "value", },
            new String[]{"hidden", "incognito", String.valueOf(incognito), });
    secForm.addChild("input",
            new String[]{"type", "name", "value"},
            new String[]{"submit", "preset" + preset, WizardL10n.l10n("presetChoose" + preset)});
  }
}
TOP

Related Classes of freenet.clients.http.wizardsteps.WELCOME

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.