package folioxml.export.html;
import folioxml.core.InvalidMarkupException;
import folioxml.export.NodeListProcessor;
import folioxml.xml.Node;
import folioxml.xml.NodeFilter;
import folioxml.xml.NodeList;
import java.io.IOException;
import java.util.UUID;
public class Notes implements NodeListProcessor {
private String imageDataUri = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABHVBMVEVMaXH8+tH37pj69bpuZiP375vz53WmmymsoCqxpSpsZCOimCn48qn38aJ0ayRxaST375/48qz06X/y5Wx5cCX59bz27I38+dG0qCv59Lf164r38aX06oH06Hf48af59LT5867UuFOckSmijSKflCj7+Mr69r/698H253z27pb17It1biWDeSZ/dSWIfiaTgiHy5WqTgiv69r706oLSxmLo2WiUhjLNslLEsjqWhCX7+Mz587H7+Mf8+c6pnir8+tP798To2F9oXRrNsEb14FuMgC2ymSDy5m2fjDjCtEj69Lb698KWiyjNslSNgieSiCdnXR7Pw1eZjih8cybk1lqGfzKxpUWAdRt9cyHMwV+HfSaroUXx42Ty42VsYyNrt5qTAAAAAXRSTlMAQObYZgAAAMVJREFUeF6NyFOCA0EABcB0j23Htrm2bd//GHmzJ0h9VmYDYShJorgnCIpSLZcR0v4/EgSEkBuESILd1FYN7hFCbQcOUteNO4TSqNfHY89jGCaK+ojqVVQobEOxaFldxJOlqmo+nySappk9xCs1TY5yHKW01XpGfLw1myfL2Pfb7Th2Ef33QeWsMp1ks7Zt64ivz8Ft6Xg0y+V4njcQXf774aK0mB+eO47DInrD4aNxNFqdXr78/MoI1+10dN2QWZb9k+XMGu/iHKaE4S6MAAAAAElFTkSuQmCC";
public NodeList process(NodeList nodes) throws InvalidMarkupException, IOException {
NodeList objects = nodes.filterByTagName("note", true);
for (Node t : objects.list()) {
String id = "note_" + UUID.randomUUID().toString();
String heading = t.get("title").replace("'", "\\'"); //TODO: AND html encoding is needed too...
Node link = new Node("<a class=\"highslide noteIcon\" href=\"#\" onclick=\"return hs.htmlExpand(this, { maincontentId: '" + id + "', headingText: '" + heading + "'})\"><img src=\"" + imageDataUri + "\" alt=\"Notes\" /></a>");
t.insertBeforeThis(link);
t.setTagName("div", true);
t.set("class", "highslide-maincontent");
t.set("id", id);
t.removeAttr("width");
t.removeAttr("height");
//And move outside the parent paragraph.... but don't move outside a context node.
Node insertAfter = t.ancestors().sublist(null, t.ancestors().filter(new NodeFilter("infobase-meta|record|note|popup|namedPopup")).first(false)).filter(new NodeFilter("p")).first();
if (insertAfter != null) insertAfter.insertBeforeThis(t.remove(false));
}
return nodes;
}
}