aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/fg/js/client.js10
-rw-r--r--ext/fg/js/source-element.js (renamed from ext/fg/js/source-input.js)21
-rw-r--r--ext/fg/js/source-image.js65
-rw-r--r--ext/manifest.json3
4 files changed, 18 insertions, 81 deletions
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
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 <alex@foosoft.net>
- * Author: Alex Yatskov <alex@foosoft.net>
- *
- * 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 <http://www.gnu.org/licenses/>.
- */
-
-
-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"