diff --git a/packages/page-controller/src/PageController.ts b/packages/page-controller/src/PageController.ts index d168e4d..c30f508 100644 --- a/packages/page-controller/src/PageController.ts +++ b/packages/page-controller/src/PageController.ts @@ -14,7 +14,6 @@ import { scrollVertically, selectOptionElement, } from './actions' -import { VIEWPORT_EXPANSION } from './constants' import * as dom from './dom' import type { FlatDomTree, InteractiveElementDomNode } from './dom/dom_tree/type' import { getPageInfo } from './dom/getPageInfo' @@ -24,7 +23,6 @@ import { patchReact } from './patches/react' * Configuration for PageController */ export interface PageControllerConfig extends dom.DomConfig { - viewportExpansion?: number /** Enable visual mask overlay during operations (default: false) */ enableMask?: boolean } @@ -131,7 +129,7 @@ export class PageController extends EventTarget { const url = window.location.href const title = document.title const pi = getPageInfo() - const viewportExpansion = this.config.viewportExpansion ?? VIEWPORT_EXPANSION + const viewportExpansion = dom.resolveViewportExpansion(this.config.viewportExpansion) await this.updateTree() diff --git a/packages/page-controller/src/constants.ts b/packages/page-controller/src/constants.ts deleted file mode 100644 index ebe131e..0000000 --- a/packages/page-controller/src/constants.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Copyright (C) 2025 Alibaba Group Holding Limited - * All rights reserved. - */ - -/** - * Viewport expansion for DOM tree extraction. - * -1 means full page (no viewport restriction) - * 0 means viewport only - * positive values expand the viewport by that many pixels - * - * @note Since isTopElement depends on elementFromPoint, - * it returns null when out of viewport, this feature has no practical use, only differ between -1 and 0 - */ -// export const VIEWPORT_EXPANSION = 100 -export const VIEWPORT_EXPANSION = -1 diff --git a/packages/page-controller/src/dom/index.ts b/packages/page-controller/src/dom/index.ts index f8e2608..2968c0c 100644 --- a/packages/page-controller/src/dom/index.ts +++ b/packages/page-controller/src/dom/index.ts @@ -1,4 +1,3 @@ -import { VIEWPORT_EXPANSION } from '../constants' import domTree from './dom_tree/index.js' import { ElementDomNode, @@ -7,7 +6,23 @@ import { TextDomNode, } from './dom_tree/type' +/** + * Viewport expansion for DOM tree extraction. + * -1 means full page (no viewport restriction) + * 0 means viewport only + * positive values expand the viewport by that many pixels + * + * @note Since isTopElement depends on elementFromPoint, + * it returns null when out of viewport, this feature has no practical use, only differ between -1 and 0 + */ +const DEFAULT_VIEWPORT_EXPANSION = -1 + +export function resolveViewportExpansion(viewportExpansion?: number): number { + return viewportExpansion ?? DEFAULT_VIEWPORT_EXPANSION +} + export interface DomConfig { + viewportExpansion?: number interactiveBlacklist?: (Element | (() => Element))[] interactiveWhitelist?: (Element | (() => Element))[] includeAttributes?: string[] @@ -21,6 +36,8 @@ export interface DomConfig { const newElementsCache = new WeakMap() export function getFlatTree(config: DomConfig): FlatDomTree { + const viewportExpansion = resolveViewportExpansion(config.viewportExpansion) + const interactiveBlacklist = [] as Element[] for (const item of config.interactiveBlacklist || []) { if (typeof item === 'function') { @@ -43,7 +60,7 @@ export function getFlatTree(config: DomConfig): FlatDomTree { doHighlightElements: true, debugMode: true, focusHighlightIndex: -1, - viewportExpansion: VIEWPORT_EXPANSION, + viewportExpansion, interactiveBlacklist, interactiveWhitelist, highlightOpacity: config.highlightOpacity ?? 0.0,