ImageInlineUtils.java
package fr.sii.ogham.html.inliner.impl.jsoup;
import static fr.sii.ogham.html.inliner.ImageInlinerConstants.INLINED_ATTR;
import static fr.sii.ogham.html.inliner.ImageInlinerConstants.INLINE_MODE_ATTR;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import org.jsoup.select.Elements;
import fr.sii.ogham.html.inliner.ImageInlinerConstants;
import fr.sii.ogham.html.inliner.ImageInlinerConstants.InlineMode;
/**
* Helper class that factorizes code for classes that are using Jsoup inliners.
*
* @author Aurélien Baudet
*
*/
public final class ImageInlineUtils {
/**
* Checks if inlining mode is allowed on the provided element.
*
* @param img
* the image element to check if the actual inlining mode is
* allowed
* @param mode
* the actual mode
* @return true if this mode is allowed, false otherwise
*/
@SuppressWarnings("squid:S1126")
public static boolean isInlineModeAllowed(Node img, InlineMode mode) {
// if already inlined => reject (do not inline twice)
if (!img.attr(INLINED_ATTR).isEmpty()) {
return false;
}
// if inline mode defined but not the wanted mode => reject
if (!img.attr(INLINE_MODE_ATTR).isEmpty() && !mode.is(img.attr(INLINE_MODE_ATTR))) {
return false;
}
// if inline mode defined and matches the wanted mode => allow
// if no inline mode defined => allow (any mode allowed)
return true;
}
/**
* Remove attributes that are used only by Ogham:
* <ul>
* <li>{@link ImageInlinerConstants#INLINE_MODE_ATTR}</li>
* <li>{@link ImageInlinerConstants#INLINED_ATTR}</li>
* </ul>
*
* @param html
* the html to clean
* @return the cleaned html
*/
public static String removeOghamAttributes(String html) {
Document doc = Jsoup.parse(html);
Elements imgs = doc.select("img");
for (Element img : imgs) {
img.removeAttr(INLINE_MODE_ATTR);
img.removeAttr(INLINED_ATTR);
}
return doc.outerHtml();
}
private ImageInlineUtils() {
super();
}
}