org.nasdanika.html.impl.HTMLPageImpl Maven / Gradle / Ivy
package org.nasdanika.html.impl;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import org.nasdanika.common.Adaptable;
import org.nasdanika.html.HTMLFactory;
import org.nasdanika.html.HTMLPage;
import org.nasdanika.html.Tag;
import org.nasdanika.html.TagName;
public class HTMLPageImpl implements HTMLPage, Adaptable {
private HTMLFactory factory;
private Tag html;
private Tag head;
private Tag body;
HTMLPageImpl(HTMLFactory factory) {
this.factory = factory;
head = factory.tag(TagName.head);
body = factory.tag(TagName.body);
html = factory.tag(TagName.html, head, body);
}
@Override
public Object produce(int indent) {
return ""+html.produce(indent);
}
@Override
public HTMLPage body(Object... content) {
body.content(content);
return this;
}
/**
* Adds external script to the header.
* @param url
*/
public Tag script(Object url) {
Tag script = factory.tag(TagName.script).attribute("src", url);
head(script);
return script;
}
/**
* Adds stylesheet to the header.
* @param url
*/
public Tag stylesheet(Object url) {
Tag stylesheet = factory.tag(TagName.link).attribute("rel", "stylesheet").attribute("href", url);
head(stylesheet);
return stylesheet;
}
/**
* Adds content to html head element of the page.
* @param content
*/
public HTMLPage head(Object... content) {
head.content(content);
return this;
}
/**
* Adds page title.
* @param title
*/
public Tag title(Object title) {
Tag ret = factory.tag(TagName.title, title);
head(ret);
return ret;
}
@Override
public String toString() {
return HTMLElementImpl.stringify(produce(0));
}
@Override
public HTMLPage lang(Object lang) {
html.attribute("lang", lang);
return this;
}
@Override
public HTMLFactory getFactory() {
return factory;
}
@SuppressWarnings("unchecked")
@Override
public TT adaptTo(Class type) {
if (type == InputStream.class) {
String str = toString();
return (TT) new ByteArrayInputStream(str.getBytes(StandardCharsets.UTF_8));
}
return Adaptable.super.adaptTo(type);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy