Merge pull request #238 from getmaxun/cap-list-select
feat: apply conditional visual containment
This commit is contained in:
@@ -31,16 +31,28 @@ export const getElementInformation = async (
|
|||||||
if (originalEl) {
|
if (originalEl) {
|
||||||
let element = originalEl;
|
let element = originalEl;
|
||||||
|
|
||||||
if (originalEl.tagName === 'A') {
|
// if (originalEl.tagName === 'A') {
|
||||||
element = originalEl;
|
// element = originalEl;
|
||||||
} else if (originalEl.parentElement?.tagName === 'A') {
|
// } else if (originalEl.parentElement?.tagName === 'A') {
|
||||||
element = originalEl.parentElement;
|
// element = originalEl.parentElement;
|
||||||
} else {
|
// } else {
|
||||||
// Generic parent finding logic based on visual containment
|
// Generic parent finding logic based on visual containment
|
||||||
|
const containerTags = ['DIV', 'SECTION', 'ARTICLE', 'MAIN', 'HEADER', 'FOOTER', 'NAV', 'ASIDE',
|
||||||
|
'ADDRESS', 'BLOCKQUOTE', 'DETAILS', 'DIALOG', 'FIGURE', 'FIGCAPTION', 'MAIN', 'MARK', 'SUMMARY', 'TIME',
|
||||||
|
'TABLE', 'THEAD', 'TBODY', 'TFOOT', 'TR', 'TH', 'TD', 'CAPTION', 'COLGROUP', 'COL', 'FORM', 'FIELDSET',
|
||||||
|
'LEGEND', 'LABEL', 'INPUT', 'BUTTON', 'SELECT', 'DATALIST', 'OPTGROUP', 'OPTION', 'TEXTAREA', 'OUTPUT',
|
||||||
|
'PROGRESS', 'METER', 'DETAILS', 'SUMMARY', 'MENU', 'MENUITEM', 'MENUITEM', 'APPLET', 'EMBED', 'OBJECT',
|
||||||
|
'PARAM', 'VIDEO', 'AUDIO', 'SOURCE', 'TRACK', 'CANVAS', 'MAP', 'AREA', 'SVG', 'IFRAME', 'FRAME', 'FRAMESET',
|
||||||
|
'LI', 'UL', 'OL', 'DL', 'DT', 'DD', 'HR', 'P', 'PRE', 'LISTING', 'PLAINTEXT', 'A'
|
||||||
|
];
|
||||||
while (element.parentElement) {
|
while (element.parentElement) {
|
||||||
const parentRect = element.parentElement.getBoundingClientRect();
|
const parentRect = element.parentElement.getBoundingClientRect();
|
||||||
const childRect = element.getBoundingClientRect();
|
const childRect = element.getBoundingClientRect();
|
||||||
|
|
||||||
|
if (!containerTags.includes(element.parentElement.tagName)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
// Check if parent visually contains the child
|
// Check if parent visually contains the child
|
||||||
const fullyContained =
|
const fullyContained =
|
||||||
parentRect.left <= childRect.left &&
|
parentRect.left <= childRect.left &&
|
||||||
@@ -57,7 +69,7 @@ export const getElementInformation = async (
|
|||||||
element = element.parentElement;
|
element = element.parentElement;
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
}
|
// }
|
||||||
} }
|
} }
|
||||||
|
|
||||||
let info: {
|
let info: {
|
||||||
@@ -119,15 +131,28 @@ export const getRect = async (page: Page, coordinates: Coordinates) => {
|
|||||||
if (originalEl) {
|
if (originalEl) {
|
||||||
let element = originalEl;
|
let element = originalEl;
|
||||||
|
|
||||||
if (originalEl.tagName === 'A') {
|
// if (originalEl.tagName === 'A') {
|
||||||
element = originalEl;
|
// element = originalEl;
|
||||||
} else if (originalEl.parentElement?.tagName === 'A') {
|
// } else if (originalEl.parentElement?.tagName === 'A') {
|
||||||
element = originalEl.parentElement;
|
// element = originalEl.parentElement;
|
||||||
} else {
|
// } else {
|
||||||
|
const containerTags = ['DIV', 'SECTION', 'ARTICLE', 'MAIN', 'HEADER', 'FOOTER', 'NAV', 'ASIDE',
|
||||||
|
'ADDRESS', 'BLOCKQUOTE', 'DETAILS', 'DIALOG', 'FIGURE', 'FIGCAPTION', 'MAIN', 'MARK', 'SUMMARY', 'TIME',
|
||||||
|
'TABLE', 'THEAD', 'TBODY', 'TFOOT', 'TR', 'TH', 'TD', 'CAPTION', 'COLGROUP', 'COL', 'FORM', 'FIELDSET',
|
||||||
|
'LEGEND', 'LABEL', 'INPUT', 'BUTTON', 'SELECT', 'DATALIST', 'OPTGROUP', 'OPTION', 'TEXTAREA', 'OUTPUT',
|
||||||
|
'PROGRESS', 'METER', 'DETAILS', 'SUMMARY', 'MENU', 'MENUITEM', 'MENUITEM', 'APPLET', 'EMBED', 'OBJECT',
|
||||||
|
'PARAM', 'VIDEO', 'AUDIO', 'SOURCE', 'TRACK', 'CANVAS', 'MAP', 'AREA', 'SVG', 'IFRAME', 'FRAME', 'FRAMESET',
|
||||||
|
'LI', 'UL', 'OL', 'DL', 'DT', 'DD', 'HR', 'P', 'PRE', 'LISTING', 'PLAINTEXT', 'A'
|
||||||
|
];
|
||||||
while (element.parentElement) {
|
while (element.parentElement) {
|
||||||
const parentRect = element.parentElement.getBoundingClientRect();
|
const parentRect = element.parentElement.getBoundingClientRect();
|
||||||
const childRect = element.getBoundingClientRect();
|
const childRect = element.getBoundingClientRect();
|
||||||
|
|
||||||
|
if (!containerTags.includes(element.parentElement.tagName)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const fullyContained =
|
const fullyContained =
|
||||||
parentRect.left <= childRect.left &&
|
parentRect.left <= childRect.left &&
|
||||||
parentRect.right >= childRect.right &&
|
parentRect.right >= childRect.right &&
|
||||||
@@ -142,7 +167,7 @@ export const getRect = async (page: Page, coordinates: Coordinates) => {
|
|||||||
element = element.parentElement;
|
element = element.parentElement;
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
}
|
// }
|
||||||
}}
|
}}
|
||||||
|
|
||||||
//element = element?.parentElement?.tagName === 'A' ? element?.parentElement : element;
|
//element = element?.parentElement?.tagName === 'A' ? element?.parentElement : element;
|
||||||
|
|||||||
Reference in New Issue
Block a user