diff --git a/ext/fg/js/client.js b/ext/fg/js/client.js index a98f715a..34a1a605 100644 --- a/ext/fg/js/client.js +++ b/ext/fg/js/client.js @@ -211,13 +211,9 @@ class Client { static textSourceFromPoint(point) { const element = document.elementFromPoint(point.x, point.y); if (element !== null) { - switch (element.nodeName) { - case 'IMG': - return new TextSourceImage(element); - case 'INPUT': - case 'BUTTON': - case 'TEXTAREA': - return new TextSourceInput(element); + const names = ['IMG', 'INPUT', 'BUTTON', 'TEXTAREA']; + if (names.indexOf(element.nodeName) !== -1) { + return new TextSourceElement(element); } } diff --git a/ext/fg/js/source-input.js b/ext/fg/js/source-element.js similarity index 71% rename from ext/fg/js/source-input.js rename to ext/fg/js/source-element.js index d3c92793..3110ed53 100644 --- a/ext/fg/js/source-input.js +++ b/ext/fg/js/source-element.js @@ -17,14 +17,14 @@ */ -class TextSourceInput { - constructor(input, length=-1) { - this.input = input; +class TextSourceElement { + constructor(element, length=-1) { + this.element = element; this.length = length; } clone() { - return new TextSourceInput(this.input, this.length); + return new TextSourceElement(this.element, this.length); } text() { @@ -33,7 +33,14 @@ class TextSourceInput { } textRaw() { - return this.input.nodeName === 'BUTTON' ? this.input.innerHTML : this.input.value; + switch (this.element.nodeName) { + case 'BUTTON': + return this.element.innerHTML; + case 'IMG': + return this.element.getAttribute('alt'); + default: + return this.element.value; + } } setStartOffset(length) { @@ -52,7 +59,7 @@ class TextSourceInput { } getRect() { - return this.input.getBoundingClientRect(); + return this.element.getBoundingClientRect(); } select() { @@ -64,6 +71,6 @@ class TextSourceInput { } equals(other) { - return other.input && other.textRaw() == this.textRaw(); + return other.element && other.textRaw() == this.textRaw(); } } diff --git a/ext/fg/js/source-image.js b/ext/fg/js/source-image.js deleted file mode 100644 index 319f25fe..00000000 --- a/ext/fg/js/source-image.js +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (C) 2016 Alex Yatskov - * Author: Alex Yatskov - * - * 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 . - */ - - -class TextSourceImage { - constructor(image) { - this.img = image; - this.length = -1; - } - - text() { - const text = this.textRaw(); - return this.length < 0 ? text : text.substring(0, this.length); - } - - textRaw() { - return this.img.getAttribute('alt') || ''; - } - - setStartOffset(length) { - // NOP - return 0; - } - - setEndOffset(length) { - this.length = length; - return length; - } - - containsPoint(point) { - const rect = this.getRect(); - return point.x >= rect.left && point.x <= rect.right; - } - - getRect() { - return this.img.getBoundingClientRect(); - } - - select() { - // NOP - } - - deselect() { - // NOP - } - - equals(other) { - return other.img && other.textRaw() == this.textRaw(); - } -} diff --git a/ext/manifest.json b/ext/manifest.json index b82773d0..fad336f2 100644 --- a/ext/manifest.json +++ b/ext/manifest.json @@ -13,8 +13,7 @@ "matches": ["*://*/*", "file://*/*"], "js": [ "fg/js/source-range.js", - "fg/js/source-image.js", - "fg/js/source-input.js", + "fg/js/source-element.js", "fg/js/popup.js", "fg/js/api.js", "fg/js/client.js"