(x, y)
| 574 | } |
| 575 | |
| 576 | async function getImagesAtPos(x, y) { |
| 577 | let eles = Array.from(document.querySelectorAll("*")); |
| 578 | |
| 579 | let pos = validateMouse(x, y); |
| 580 | let sourceEles = []; |
| 581 | eles = eles.reverse().filter((ele) => { |
| 582 | let rect = ele.getBoundingClientRect(); |
| 583 | let isAtMouse = |
| 584 | rect.left <= pos.x && |
| 585 | rect.right >= pos.x && |
| 586 | rect.top <= pos.y && |
| 587 | rect.bottom >= pos.y; |
| 588 | if (isAtMouse && /picture|img/i.test(ele.tagName)) { |
| 589 | let sources = Array.from(ele.querySelectorAll("source")); |
| 590 | if (sources?.length) sourceEles = sourceEles.concat(sources); |
| 591 | } |
| 592 | return isAtMouse; |
| 593 | }); |
| 594 | eles = eles.concat(sourceEles); |
| 595 | eles = eles.concat( |
| 596 | eles |
| 597 | .slice(0, 4) |
| 598 | .map((ele) => getAllChildElements(ele)) |
| 599 | .flat() |
| 600 | ); |
| 601 | |
| 602 | if (!eles.length) return null; |
| 603 | |
| 604 | console.log("eles", eles); |
| 605 | |
| 606 | let results = []; |
| 607 | for (let ele of eles) { |
| 608 | let srcs = getImgSrcsFromElement(ele); |
| 609 | if (srcs && srcs?.length) { |
| 610 | if (!Array.isArray(srcs)) srcs = [srcs]; |
| 611 | srcs.forEach((src) => { |
| 612 | if (!results.find((r) => r.src == src)) results.push({ src, ele }); |
| 613 | }); |
| 614 | } |
| 615 | } |
| 616 | console.log("results", results); |
| 617 | |
| 618 | if (results.length > 1) { |
| 619 | let rank = [/source/i, /img/i, /picture/i, /image/i, /a/i]; |
| 620 | results = results.sort((a, b) => { |
| 621 | let rankA = rank.findIndex((r) => r.test(a.src)); |
| 622 | let rankB = rank.findIndex((r) => r.test(b.src)); |
| 623 | rankA = rankA == -1 ? 100 : rankA; |
| 624 | rankB = rankB == -1 ? 100 : rankB; |
| 625 | return rankB - rankA; |
| 626 | }); |
| 627 | console.log("after sort", results); |
| 628 | } |
| 629 | |
| 630 | // filter out video |
| 631 | results = results.filter(({ ele, src }) => { |
| 632 | return !/iframe/i.test(ele.tagName); |
| 633 | }); |
no test coverage detected