private void findEmbeddedContent(Node node, List<EmbeddedContent> out) {
if (node instanceof Element) {
Element el = (Element) node;
ElKey key = ElKey.forElement(el);
ContentType expected = null;
ExternalReference extRef = null;
String defaultMimeType = null;
EmbeddedContent.Scheduling scheduling = EmbeddedContent.Scheduling.NORMAL;
if (SCRIPT.equals(key)) {
expected = ContentType.JS;
extRef = externalReferenceFromAttr(el, SCRIPT_SRC);
if (Strings.eqIgnoreCase(
"defer",
el.getAttributeNS(SCRIPT_DEFER.ns.uri, SCRIPT_DEFER.localName))) {
scheduling = EmbeddedContent.Scheduling.DEFERRED;
} else if (Strings.eqIgnoreCase(
"async",
el.getAttributeNS(SCRIPT_ASYNC.ns.uri, SCRIPT_ASYNC.localName))) {
scheduling = EmbeddedContent.Scheduling.ASYNC;
}
} else if (STYLE.equals(key)) {
expected = ContentType.CSS;
} else if (LINK.equals(key)
&& Strings.eqIgnoreCase(
"stylesheet",
el.getAttributeNS(LINK_REL.ns.uri, LINK_REL.localName))) {
extRef = externalReferenceFromAttr(el, LINK_HREF);
if (extRef != null) {
expected = ContentType.CSS;
defaultMimeType = ContentType.CSS.mimeType;
}
}
if (expected != null) {
String mimeType = getMimeTypeFromHtmlTypeAttribute(el, key);
if (mimeType == null) { mimeType = defaultMimeType; }
ContentType actualType = mimeType != null
? ContentType.fromMimeType(mimeType) : null;
if (actualType == expected) {
if (extRef == null) {
out.add(fromElementBody(el, expected, scheduling));
} else {