diff --git a/sourcing/static/js/build_links.js b/sourcing/static/js/build_links.js index 199d10f..e5ee16a 100644 --- a/sourcing/static/js/build_links.js +++ b/sourcing/static/js/build_links.js @@ -1,47 +1,83 @@ - $('#new-link').hide(); - $('#new-link').click((e) => { - var selection = window.getSelection(); - if(selection.type != 'Range') - return; +function one_line(e, range) { + var text = e.text(); + var before = text.substring(0, range.startOffset); + var span = text.substring(range.startOffset, range.endOffset); + var after = text.substring(range.endOffset); - var range = selection.getRangeAt(0); - var start = range.startContainer; - var start_element = range.startContainer.parentElement; - var end_element = range.endContainer.parentElement; + (e.empty() + .append(before) + .append($('').text(span)) + .append(after)); +} - var start = parseInt(start_element.getAttribute('data-start')) + range.startOffset; - var end = parseInt(end_element.getAttribute('data-start')) + range.endOffset; - var length = end - start; +function first_line(e, range) { + var text = e.text(); + var before = text.substring(0, range.startOffset); + var span = text.substring(range.startOffset); - console.log('start', start, 'length', length); + (e.empty() + .append(before) + .append($('').text(span))); +} - var text = start_element.textContent; - var text1 = text.substring(0, range.startOffset); - var text2 = text.substring(range.startOffset + 1); +function last_line(e, range) { + var text = e.text(); + var span = text.substring(0, range.endOffset); + var after = text.substring(range.endOffset); - console.log([text1, text2]); + (e.empty() + .append($('').text(span)) + .append(after)); +} - var e = start_element; - var count = 0; +function highlight_selection() { + var selection = window.getSelection(); + if(selection.type != 'Range') + return; - while (e != end_element && count < 50) { - $(e).wrapInner(''); - count++; - e = e.nextElementSibling; - } - e = end_element; + var range = selection.getRangeAt(0); + var start = range.startContainer; + var start_element = range.startContainer.parentElement; + var end_element = range.endContainer.parentElement; + + 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(''); + 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(); - - }); - - document.addEventListener('selectionchange', () => { - var selection = window.getSelection(); - if (selection.toString()) { - $('#new-link').show(); - } else { - $('#new-link').hide(); - } - }); + } +});