Fix highlighting of selection.
This commit is contained in:
parent
d18cadd884
commit
baaa9b9c37
|
@ -1,47 +1,83 @@
|
||||||
$('#new-link').hide();
|
function one_line(e, range) {
|
||||||
$('#new-link').click((e) => {
|
var text = e.text();
|
||||||
var selection = window.getSelection();
|
var before = text.substring(0, range.startOffset);
|
||||||
if(selection.type != 'Range')
|
var span = text.substring(range.startOffset, range.endOffset);
|
||||||
return;
|
var after = text.substring(range.endOffset);
|
||||||
|
|
||||||
var range = selection.getRangeAt(0);
|
(e.empty()
|
||||||
var start = range.startContainer;
|
.append(before)
|
||||||
var start_element = range.startContainer.parentElement;
|
.append($('<span class="selected-span">').text(span))
|
||||||
var end_element = range.endContainer.parentElement;
|
.append(after));
|
||||||
|
}
|
||||||
|
|
||||||
var start = parseInt(start_element.getAttribute('data-start')) + range.startOffset;
|
function first_line(e, range) {
|
||||||
var end = parseInt(end_element.getAttribute('data-start')) + range.endOffset;
|
var text = e.text();
|
||||||
var length = end - start;
|
var before = text.substring(0, range.startOffset);
|
||||||
|
var span = text.substring(range.startOffset);
|
||||||
|
|
||||||
console.log('start', start, 'length', length);
|
(e.empty()
|
||||||
|
.append(before)
|
||||||
|
.append($('<span class="selected-span">').text(span)));
|
||||||
|
}
|
||||||
|
|
||||||
var text = start_element.textContent;
|
function last_line(e, range) {
|
||||||
var text1 = text.substring(0, range.startOffset);
|
var text = e.text();
|
||||||
var text2 = text.substring(range.startOffset + 1);
|
var span = text.substring(0, range.endOffset);
|
||||||
|
var after = text.substring(range.endOffset);
|
||||||
|
|
||||||
console.log([text1, text2]);
|
(e.empty()
|
||||||
|
.append($('<span class="selected-span">').text(span))
|
||||||
|
.append(after));
|
||||||
|
}
|
||||||
|
|
||||||
var e = start_element;
|
function highlight_selection() {
|
||||||
var count = 0;
|
var selection = window.getSelection();
|
||||||
|
if(selection.type != 'Range')
|
||||||
|
return;
|
||||||
|
|
||||||
while (e != end_element && count < 50) {
|
var range = selection.getRangeAt(0);
|
||||||
$(e).wrapInner('<span class="selected-span"></span>');
|
var start = range.startContainer;
|
||||||
count++;
|
var start_element = range.startContainer.parentElement;
|
||||||
e = e.nextElementSibling;
|
var end_element = range.endContainer.parentElement;
|
||||||
}
|
|
||||||
e = end_element;
|
var start = parseInt(start_element.getAttribute('data-start')) + range.startOffset;
|
||||||
|
var end = parseInt(end_element.getAttribute('data-start')) + range.endOffset;
|
||||||
|
var length = end - start;
|
||||||
|
|
||||||
|
console.log('start', start, 'length', length);
|
||||||
|
|
||||||
|
if (start_element == end_element) {
|
||||||
|
console.log('one line');
|
||||||
|
return one_line($(start_element), range);
|
||||||
|
}
|
||||||
|
|
||||||
|
first_line($(start_element), range);
|
||||||
|
|
||||||
|
var e = start_element.nextElementSibling;
|
||||||
|
var count = 0;
|
||||||
|
|
||||||
|
while (e != end_element && count < 50) {
|
||||||
$(e).wrapInner('<span class="selected-span"></span>');
|
$(e).wrapInner('<span class="selected-span"></span>');
|
||||||
|
count++;
|
||||||
|
e = e.nextElementSibling;
|
||||||
|
}
|
||||||
|
|
||||||
selection.removeAllRanges();
|
last_line($(end_element), range);
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#new-link').hide();
|
||||||
|
$('#new-link').click((e) => {
|
||||||
|
var selection = window.getSelection();
|
||||||
|
highlight_selection();
|
||||||
|
selection.removeAllRanges();
|
||||||
|
$('#new-link').hide();
|
||||||
|
});
|
||||||
|
|
||||||
|
document.addEventListener('selectionchange', () => {
|
||||||
|
var selection = window.getSelection();
|
||||||
|
if (selection.toString()) {
|
||||||
|
$('#new-link').show();
|
||||||
|
} else {
|
||||||
$('#new-link').hide();
|
$('#new-link').hide();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
document.addEventListener('selectionchange', () => {
|
|
||||||
var selection = window.getSelection();
|
|
||||||
if (selection.toString()) {
|
|
||||||
$('#new-link').show();
|
|
||||||
} else {
|
|
||||||
$('#new-link').hide();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
Loading…
Reference in a new issue