EmitterUtil.java
package docsite.util;
import java.nio.file.*;
import java.util.regex.*;
import static j2html.TagCreator.*;
import docsite.*;
import j2html.tags.specialized.*;
public final class EmitterUtil {
private EmitterUtil() { /*avoid instantiation */ }
private static Pattern faPattern = Pattern.compile("(fa.?):([^:]+)");
public static ATag internalLink(String title, String url) {
return a(title).withClass("internal").withHref(url);
}
public static ATag internalLinkWithIcon(Path baseDir, String title, String url, String icon, ImageResolver images) {
return a()
.withClasses("label internal")
.withHref(url)
.with(
icon(baseDir, icon,images),
span(title)
);
}
public static ATag externalLinkWithIcon(Path baseDir, String title, String url, String icon, ImageResolver images) {
return a()
.withClasses("label external")
.withHref(url)
.withTarget("_blank")
.withRel("external noreferrer noopener nofollow")
.with(
icon(baseDir, icon, images),
span(title)
);
}
public static ATag externalLinkWithImage(Path baseDir, String title, String url, String icon, ImageResolver images) {
return a()
.withClasses("label external")
.withHref(url)
.withTarget("_blank")
.withRel("external noreferrer noopener nofollow")
.with(
image(baseDir, icon, images),
span(title)
);
}
public static ITag icon(Path baseDir, String icon, ImageResolver images) {
if (icon == null || icon.isBlank()) {
return i().withClass("hidden");
}
Matcher faMatcher = faPattern.matcher(icon);
if (faMatcher.matches()) {
return i().withClasses(faMatcher.group(1)+" fa-"+faMatcher.group(2));
}
if (Files.exists(baseDir.resolve(icon))) {
return i().withClass("external-icon").withStyle("background-image: url('"+images.imageFile(icon)+"')");
}
return i().withClass("external-icon").withStyle("background-image: url('"+icon+"')");
}
public static ImgTag image(Path baseDir, String source, ImageResolver images) {
if (source == null || source.isBlank()) {
return img().withClass("hidden");
}
if (Files.exists(baseDir.resolve(source))) {
return img().withSrc(images.imageFile(source));
}
return img().withSrc(source);
}
public static ATag externalLink(String title, String url) {
return a(title)
.withClass("external")
.withHref(url)
.withTarget("_blank")
.withRel("external noreferrer noopener nofollow");
}
public static String href(String name) {
return name.strip().toLowerCase().replace(" ", "-");
}
public static String href(Section section) {
if (section.type() == Section.SectionType.embedded) {
return href(section.name()+"/"+section.siteIndex());
} else {
return href(section.name());
}
}
public static String page(String name) {
return href(name)+ ".html";
}
public static String page(String name, SiteLanguage language) {
return language.isPrimary() ? page(name) : href(name)+ "_"+language.language()+".html";
}
public static LinkTag stylesheet(String href) {
return link().attr("href",href).attr("rel","stylesheet");
}
public static String withLanguage(SiteLanguage language, String path) {
if (language.isPrimary()) {
return path;
}
int extensionPosition = path.lastIndexOf('.');
if (extensionPosition == -1) {
return path+"_"+language.language();
} else {
return path.substring(0,extensionPosition)+"_"+language.language()+path.substring(extensionPosition);
}
}
}