Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Get curret position in Content Editable div
- getSelectionCharacterOffsetWithin = (element) ->
- start = 0
- end = 0
- doc = element.ownerDocument or element.document
- win = doc.defaultView or doc.parentWindow
- sel = undefined
- if typeof win.getSelection != 'undefined'
- sel = win.getSelection()
- if sel.rangeCount > 0
- range = win.getSelection().getRangeAt(0)
- preCaretRange = range.cloneRange()
- preCaretRange.selectNodeContents element
- preCaretRange.setEnd range.startContainer, range.startOffset
- start = preCaretRange.toString().length
- preCaretRange.setEnd range.endContainer, range.endOffset
- end = preCaretRange.toString().length
- else if (sel = doc.selection) and sel.type != 'Control'
- textRange = sel.createRange()
- preCaretTextRange = doc.body.createTextRange()
- preCaretTextRange.moveToElementText element
- preCaretTextRange.setEndPoint 'EndToStart', textRange
- start = preCaretTextRange.text.length
- preCaretTextRange.setEndPoint 'EndToEnd', textRange
- end = preCaretTextRange.text.length
- {
- start: start
- end: end
- }
- $(document).on 'input', '.reply-area', (e) ->
- currentElement = e.target
- reportSelection = (element) ->
- selOffsets = getSelectionCharacterOffsetWithin(element)
- return selOffsets.start
- currentCursorPosition = reportSelection(currentElement)
- updateTextArea = (element) ->
- # Get clicked user email
- thread_user_email = element.querySelector('.thread-user-email').textContent
- # Get element
- elementToInsert = $(currentElement).html()
- # Cursor position, email to insert, Text before cursor and text after cursor
- splitIndex = currentCursorPosition
- sliceIndex = currentCursorPosition - 1
- sliceString = elementToInsert.slice(sliceIndex, splitIndex)
- beforeString = elementToInsert.substring(0, sliceIndex)
- afterString = elementToInsert.substring(splitIndex)
- emailToInsert = '+' + thread_user_email + ' '
- # Updated reply, comment text
- $(currentElement).html(beforeString + emailToInsert + afterString)
- # Hide the list
- $(thread_users_list).hide()
- $('.thread-users-list li').click (e) ->
- e.stopImmediatePropagation()
- updateTextArea(this)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement