diff options
author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2024-01-31 08:40:57 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-31 13:40:57 +0000 |
commit | 2356223942a21d1683ac38eed8e7b9485f453d87 (patch) | |
tree | 4e97b53a9d4829378ebc60eb5b8e40b6f5b665ee /ext/js/dom/text-source-generator.js | |
parent | 87ed7c8affd3ade9d3cd2d9ed1a61dd5f224e473 (diff) |
Document util + google docs util state refactor (#590)
* Remove static from GoogleDocsUtil since it has state
* Create TextSourceGenerator
* Remove DocumentUtil custom registrations
* Use TextSourceGenerator
Diffstat (limited to 'ext/js/dom/text-source-generator.js')
-rw-r--r-- | ext/js/dom/text-source-generator.js | 47 |
1 files changed, 47 insertions, 0 deletions
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); + } +} |