feat: generate highlighter for shadoDOM and mixedDOM elements
This commit is contained in:
@@ -120,7 +120,13 @@ export const BrowserWindow = () => {
|
|||||||
const highlighterHandler = useCallback((data: { rect: DOMRect, selector: string, elementInfo: ElementInfo | null, childSelectors?: string[] }) => {
|
const highlighterHandler = useCallback((data: { rect: DOMRect, selector: string, elementInfo: ElementInfo | null, childSelectors?: string[] }) => {
|
||||||
if (getList === true) {
|
if (getList === true) {
|
||||||
if (listSelector) {
|
if (listSelector) {
|
||||||
|
console.log("LIST SELEECTORRRRR: ", listSelector);
|
||||||
|
console.log("DATA SELEECTORRRRR: ", data.selector);
|
||||||
|
console.log("CHILDREEENN SELECORRRR: ", data.childSelectors);
|
||||||
socket?.emit('listSelector', { selector: listSelector });
|
socket?.emit('listSelector', { selector: listSelector });
|
||||||
|
|
||||||
|
const hasValidChildSelectors = Array.isArray(data.childSelectors) && data.childSelectors.length > 0;
|
||||||
|
|
||||||
if (limitMode) {
|
if (limitMode) {
|
||||||
setHighlighterData(null);
|
setHighlighterData(null);
|
||||||
} else if (paginationMode) {
|
} else if (paginationMode) {
|
||||||
@@ -133,7 +139,29 @@ export const BrowserWindow = () => {
|
|||||||
} else if (data.childSelectors && data.childSelectors.includes(data.selector)) {
|
} else if (data.childSelectors && data.childSelectors.includes(data.selector)) {
|
||||||
// highlight only valid child elements within the listSelector
|
// highlight only valid child elements within the listSelector
|
||||||
setHighlighterData(data);
|
setHighlighterData(data);
|
||||||
} else {
|
} else if (data.elementInfo?.isShadowRoot && data.childSelectors) {
|
||||||
|
// New case: Handle pure Shadow DOM elements
|
||||||
|
// Check if the selector matches any shadow root child selectors
|
||||||
|
const isShadowChild = data.childSelectors.some(childSelector =>
|
||||||
|
data.selector.includes('>>') && // Shadow DOM uses >> for piercing
|
||||||
|
childSelector.split('>>').some(part =>
|
||||||
|
data.selector.includes(part.trim())
|
||||||
|
)
|
||||||
|
);
|
||||||
|
setHighlighterData(isShadowChild ? data : null);
|
||||||
|
} else if (data.selector.includes('>>') && hasValidChildSelectors) {
|
||||||
|
// New case: Handle mixed DOM cases
|
||||||
|
// Split the selector into parts and check each against child selectors
|
||||||
|
const selectorParts = data.selector.split('>>').map(part => part.trim());
|
||||||
|
const isValidMixedSelector = selectorParts.some(part =>
|
||||||
|
// Now we know data.childSelectors is defined
|
||||||
|
data.childSelectors!.some(childSelector =>
|
||||||
|
childSelector.includes(part)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
setHighlighterData(isValidMixedSelector ? data : null);
|
||||||
|
}
|
||||||
|
else {
|
||||||
// if !valid child in normal mode, clear the highlighter
|
// if !valid child in normal mode, clear the highlighter
|
||||||
setHighlighterData(null);
|
setHighlighterData(null);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user