Advertisement
Guest User

Untitled

a guest
Jun 25th, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.24 KB | None | 0 0
  1. # Get curret position in Content Editable div
  2. getSelectionCharacterOffsetWithin = (element) ->
  3. start = 0
  4. end = 0
  5. doc = element.ownerDocument or element.document
  6. win = doc.defaultView or doc.parentWindow
  7. sel = undefined
  8. if typeof win.getSelection != 'undefined'
  9. sel = win.getSelection()
  10. if sel.rangeCount > 0
  11. range = win.getSelection().getRangeAt(0)
  12. preCaretRange = range.cloneRange()
  13. preCaretRange.selectNodeContents element
  14. preCaretRange.setEnd range.startContainer, range.startOffset
  15. start = preCaretRange.toString().length
  16. preCaretRange.setEnd range.endContainer, range.endOffset
  17. end = preCaretRange.toString().length
  18. else if (sel = doc.selection) and sel.type != 'Control'
  19. textRange = sel.createRange()
  20. preCaretTextRange = doc.body.createTextRange()
  21. preCaretTextRange.moveToElementText element
  22. preCaretTextRange.setEndPoint 'EndToStart', textRange
  23. start = preCaretTextRange.text.length
  24. preCaretTextRange.setEndPoint 'EndToEnd', textRange
  25. end = preCaretTextRange.text.length
  26. {
  27. start: start
  28. end: end
  29. }
  30.  
  31. $(document).on 'input', '.reply-area', (e) ->
  32. currentElement = e.target
  33.  
  34. reportSelection = (element) ->
  35. selOffsets = getSelectionCharacterOffsetWithin(element)
  36. return selOffsets.start
  37.  
  38. currentCursorPosition = reportSelection(currentElement)
  39.  
  40. updateTextArea = (element) ->
  41. # Get clicked user email
  42. thread_user_email = element.querySelector('.thread-user-email').textContent
  43.  
  44. # Get element
  45. elementToInsert = $(currentElement).html()
  46.  
  47. # Cursor position, email to insert, Text before cursor and text after cursor
  48. splitIndex = currentCursorPosition
  49. sliceIndex = currentCursorPosition - 1
  50. sliceString = elementToInsert.slice(sliceIndex, splitIndex)
  51. beforeString = elementToInsert.substring(0, sliceIndex)
  52. afterString = elementToInsert.substring(splitIndex)
  53. emailToInsert = '+' + thread_user_email + ' '
  54.  
  55. # Updated reply, comment text
  56. $(currentElement).html(beforeString + emailToInsert + afterString)
  57.  
  58. # Hide the list
  59. $(thread_users_list).hide()
  60.  
  61. $('.thread-users-list li').click (e) ->
  62. e.stopImmediatePropagation()
  63. updateTextArea(this)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement