diff --git a/src/index.ts b/src/index.ts index a8d1f9a..4e015f7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -58,13 +58,65 @@ function recurseElement(page: Page, el: Element) { }); } } - if ( - ["audio", "video", "img", "source", "iframe", "track"].includes(el.name) - ) { + + if (["audio", "video"].includes(el.name)) { + const sources = getSources(el); + for (const source of sources) { + if (source.attribs.src) { + checkUrl(page, source, source.attribs.src); + } else { + report.things.push({ + type: "media-no-src", + description: getHtml(rawHtml, source), + }); + } + } + } + if (["picture"].includes(el.name)) { + const sources = getSources(el); + for (const source of sources) { + if (source.attribs.srcset) { + // TODO: implementar srcset #3 + } else { + report.things.push({ + type: "media-no-src", + description: getHtml(rawHtml, source), + }); + } + } + } + if (["img"].includes(el.name)) { + if (el.attribs.srcset) { + // TODO: implementar srcset #3 + } + } + if (["audio", "video"].includes(el.name)) { + const sources = getSources(el); + if (sources.length > 0) { + for (const source of sources) { + if (source.attribs.src) { + checkUrl(page, source, source.attribs.src); + } else { + report.things.push({ + type: "media-no-src", + description: getHtml(rawHtml, source), + }); + } + } + } else { + if (el.attribs.src) { + checkUrl(page, el, el.attribs.src); + } else { + report.things.push({ + type: "media-no-src", + description: getHtml(rawHtml, el), + }); + } + } + } + if (["img", "iframe", "track"].includes(el.name)) { if (el.attribs.src) { checkUrl(page, el, el.attribs.src); - } else if (el.attribs.srcset) { - // TODO: implementar srcset #3 } else { report.things.push({ type: "media-no-src", @@ -80,6 +132,12 @@ function recurseElement(page: Page, el: Element) { } } +function getSources(el: Element) { + return el.children.filter( + (c) => c.type === "tag" && c.name === "source" + ) as Element[]; +} + function checkUrl({ report, rawHtml }: Page, el: Element, url: string) { if (isHttp(url)) { report.things.push({