aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Yatskov <alex@foosoft.net>2016-03-19 19:02:58 -0700
committerAlex Yatskov <alex@foosoft.net>2016-03-19 19:02:58 -0700
commit0eeacbf5c84878d6cdb69f8d889d03ae56d60a48 (patch)
tree532dcca8cce25697f7bc56afd3f78031ed1541b8
parent3fd7ab16ac6f3c97822951eaddd7d9a090cea48a (diff)
Some selection tests.
-rw-r--r--content.js71
1 files changed, 37 insertions, 34 deletions
diff --git a/content.js b/content.js
index 119fce55..9fd77e49 100644
--- a/content.js
+++ b/content.js
@@ -1,50 +1,53 @@
/*
- * Copyright (c) 2016 Alex Yatskov <alex@foosoft.net>
+ * Copyright (C) 2016 Alex Yatskov <alex@foosoft.net>
* Author: Alex Yatskov <alex@foosoft.net>
*
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
+ * 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.
*
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
+ * 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.
*
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-function insertBreakAtPoint(e) {
- var range;
- var textNode;
- var offset;
-
- if (document.caretPositionFromPoint) {
- range = document.caretPositionFromPoint(e.clientX, e.clientY);
- textNode = range.offsetNode;
- offset = range.offset;
- } else if (document.caretRangeFromPoint) {
- range = document.caretRangeFromPoint(e.clientX, e.clientY);
- textNode = range.startContainer;
- offset = range.startOffset;
+
+function getRangeAtCursor(e, lookAhead) {
+ const range = document.caretRangeFromPoint(e.clientX, e.clientY);
+ if (range === null) {
+ return null
}
- // only split TEXT_NODEs
- if (textNode.nodeType == 3) {
- var replacement = textNode.splitText(offset);
- var br = document.createElement('br');
- textNode.parentNode.insertBefore(br, replacement);
+ const node = range.startContainer;
+ if (node.nodeType !== 3 /* TEXT_NODE */) {
+ return null;
}
+
+ const offset = range.startOffset;
+ const length = Math.min(node.length - offset, lookAhead);
+
+ range.setEnd(node, offset + length);
+ return range;
}
function onMouseDown(e) {
- insertBreakAtPoint(e);
+ const range = getRangeAtCursor(e, 20);
+ if (range === null) {
+ return;
+ }
+
+ const selection = window.getSelection();
+ selection.removeAllRanges();
+ selection.addRange(range);
+
+ e.preventDefault();
+
+ console.log(range.toString());
}