diff options
| author | Alex Yatskov <alex@foosoft.net> | 2016-03-19 19:02:58 -0700 | 
|---|---|---|
| committer | Alex Yatskov <alex@foosoft.net> | 2016-03-19 19:02:58 -0700 | 
| commit | 0eeacbf5c84878d6cdb69f8d889d03ae56d60a48 (patch) | |
| tree | 532dcca8cce25697f7bc56afd3f78031ed1541b8 | |
| parent | 3fd7ab16ac6f3c97822951eaddd7d9a090cea48a (diff) | |
Some selection tests.
| -rw-r--r-- | content.js | 71 | 
1 files changed, 37 insertions, 34 deletions
| @@ -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());  } |