Package fitnesse.wikitext.parser

Source Code of fitnesse.wikitext.parser.Collapsible

package fitnesse.wikitext.parser;

import fitnesse.html.HtmlTag;
import fitnesse.html.RawHtml;

public class Collapsible extends SymbolType implements Rule, Translation {

    private static final String STATE = "State";
    public static final String CLOSED = " closed";
    private static final String INVISIBLE = " invisible";

    public Collapsible() {
      super("Collapsible");
      wikiMatcher(new Matcher().startLine().string("!").repeat('*'));
      wikiRule(this);
      htmlTranslation(this);
  }

    public Maybe<Symbol> parse(Symbol current, Parser parser) {
        String state = "";
        Symbol next = parser.moveNext(1);
        if (next.getContent().equals(">")) {
            state = CLOSED;
            next = parser.moveNext(1);
        }
        else if (next.getContent().equals("<")) {
            state = INVISIBLE;
            next = parser.moveNext(1);
        }
        if (!next.isType(SymbolType.Whitespace)) return Symbol.nothing;

        Symbol titleText = parser.parseToIgnoreFirst(SymbolType.Newline);
        if (parser.atEnd()) return Symbol.nothing;

        Symbol bodyText = parser.parseTo(SymbolType.CloseCollapsible);
        if (parser.atEnd()) return Symbol.nothing;

        // Remove trailing newline so we do not introduce excessive whitespace in the page.
        if (parser.peek().isType(SymbolType.Newline)) {
            parser.moveNext(1);
        }

        return new Maybe<Symbol>(current
                .putProperty(STATE, state)
                .add(titleText)
                .add(bodyText));
    }

    public String toTarget(Translator translator, Symbol symbol) {
        String option = symbol.getProperty(Collapsible.STATE);
        String title = translator.translate(symbol.childAt(0));
        String body = translator.translate(symbol.childAt(1));
        return generateHtml(option, title, body);
    }

    private String makeInvisibleSection(String body) {
        HtmlTag section = new HtmlTag("div", body);
        section.addAttribute("class", "invisible");
        return section.html();
    }

    public static String generateHtml(String state, String titleText, String bodyText) {
        HtmlTag outerBlock = new HtmlTag("div");
        outerBlock.addAttribute("class", "collapsible" + state);
       
        outerBlock.add(new RawHtml("<ul>" +
            "<li><a href='#' class='expandall'>Expand</a></li>" +
            "<li><a href='#' class='collapseall'>Collapse</a></li>" +
            "</ul>"));

        HtmlTag title = new HtmlTag("p", titleText);
        title.addAttribute("class", "title");
        outerBlock.add(title);
       
        HtmlTag body = new HtmlTag("div", bodyText);
        outerBlock.add(body);
       
        return outerBlock.html();
    }
   

}
TOP

Related Classes of fitnesse.wikitext.parser.Collapsible

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.