diff options
Diffstat (limited to 'ext/js/dom')
-rw-r--r-- | ext/js/dom/document-util.js | 17 | ||||
-rw-r--r-- | ext/js/dom/text-source-generator.js | 47 |
2 files changed, 48 insertions, 16 deletions
diff --git a/ext/js/dom/document-util.js b/ext/js/dom/document-util.js index 235a42d0..27acc046 100644 --- a/ext/js/dom/document-util.js +++ b/ext/js/dom/document-util.js @@ -28,8 +28,6 @@ export class DocumentUtil { static _transparentColorPattern = /rgba\s*\([^)]*,\s*0(?:\.0+)?\s*\)/; /** @type {?boolean} */ static _cssZoomSupported = null; - /** @type {import('document-util').GetRangeFromPointHandler[]} @readonly */ - static _getRangeFromPointHandlers = []; /** * Scans the document for text or elements with text information at the given coordinate. @@ -37,14 +35,9 @@ export class DocumentUtil { * @param {number} x The x coordinate to search at. * @param {number} y The y coordinate to search at. * @param {import('document-util').GetRangeFromPointOptions} options Options to configure how element detection is performed. - * @returns {?TextSourceRange|TextSourceElement} A range for the hovered text or element, or `null` if no applicable content was found. + * @returns {?import('text-source').TextSource} A range for the hovered text or element, or `null` if no applicable content was found. */ static getRangeFromPoint(x, y, options) { - for (const handler of this._getRangeFromPointHandlers) { - const r = handler(x, y, options); - if (r !== null) { return r; } - } - const {deepContentScan, normalizeCssZoom} = options; const elements = this._getElementsFromPoint(x, y, deepContentScan); @@ -94,14 +87,6 @@ export class DocumentUtil { } /** - * Registers a custom handler for scanning for text or elements at the input position. - * @param {import('document-util').GetRangeFromPointHandler} handler The handler callback which will be invoked when calling `getRangeFromPoint`. - */ - static registerGetRangeFromPointHandler(handler) { - this._getRangeFromPointHandlers.push(handler); - } - - /** * Extract a sentence from a document. * @param {TextSourceRange|TextSourceElement} source The text source object, either `TextSourceRange` or `TextSourceElement`. * @param {boolean} layoutAwareScan Whether or not layout-aware scan mode should be used. diff --git a/ext/js/dom/text-source-generator.js b/ext/js/dom/text-source-generator.js new file mode 100644 index 00000000..0435e69b --- /dev/null +++ b/ext/js/dom/text-source-generator.js @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2024 Yomitan Authors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +import {DocumentUtil} from './document-util.js'; + +export class TextSourceGenerator { + constructor() { + /** @type {import('text-source-generator').GetRangeFromPointHandler[]} @readonly */ + this._getRangeFromPointHandlers = []; + } + + /** + * @param {number} x + * @param {number} y + * @param {import('document-util').GetRangeFromPointOptions} options + * @returns {?import('text-source').TextSource} + */ + getRangeFromPoint(x, y, options) { + for (const handler of this._getRangeFromPointHandlers) { + const result = handler(x, y, options); + if (result !== null) { return result; } + } + return DocumentUtil.getRangeFromPoint(x, y, options); + } + + /** + * Registers a custom handler for scanning for text or elements at the input position. + * @param {import('text-source-generator').GetRangeFromPointHandler} handler The handler callback which will be invoked when calling `getRangeFromPoint`. + */ + registerGetRangeFromPointHandler(handler) { + this._getRangeFromPointHandlers.push(handler); + } +} |