Some selection tests.

This commit is contained in:
Alex Yatskov 2016-03-19 19:02:58 -07:00
parent 3fd7ab16ac
commit 0eeacbf5c8

View File

@ -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> * Author: Alex Yatskov <alex@foosoft.net>
* *
* Permission is hereby granted, free of charge, to any person obtaining a copy of * This program is free software: you can redistribute it and/or modify
* this software and associated documentation files (the "Software"), to deal in * it under the terms of the GNU General Public License as published by
* the Software without restriction, including without limitation the rights to * the Free Software Foundation, either version 3 of the License, or
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * (at your option) any later version.
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
* *
* The above copyright notice and this permission notice shall be included in all * This program is distributed in the hope that it will be useful,
* copies or substantial portions of the Software. * 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 * You should have received a copy of the GNU General Public License
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * along with this program. If not, see <http://www.gnu.org/licenses/>.
* 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.
*/ */
function insertBreakAtPoint(e) {
var range;
var textNode;
var offset;
if (document.caretPositionFromPoint) { function getRangeAtCursor(e, lookAhead) {
range = document.caretPositionFromPoint(e.clientX, e.clientY); const range = document.caretRangeFromPoint(e.clientX, e.clientY);
textNode = range.offsetNode; if (range === null) {
offset = range.offset; return null
} else if (document.caretRangeFromPoint) {
range = document.caretRangeFromPoint(e.clientX, e.clientY);
textNode = range.startContainer;
offset = range.startOffset;
} }
// only split TEXT_NODEs const node = range.startContainer;
if (textNode.nodeType == 3) { if (node.nodeType !== 3 /* TEXT_NODE */) {
var replacement = textNode.splitText(offset); return null;
var br = document.createElement('br');
textNode.parentNode.insertBefore(br, replacement);
} }
const offset = range.startOffset;
const length = Math.min(node.length - offset, lookAhead);
range.setEnd(node, offset + length);
return range;
} }
function onMouseDown(e) { 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());
} }