       {data} = event
       {textAdded} = @inputSummary
       if textAdded and textAdded isnt data and textAdded.toUpperCase() is data
-        range = @responder?.getSelectedRange()
-        @responder?.setSelectedRange([range[0], range[1] + textAdded.length])
+        range = @getSelectedRange()
+        @setSelectedRange([range[0], range[1] + textAdded.length])
         @responder?.insertString(data)
         @setInputSummary(textAdded: data)
-        @responder?.setSelectedRange(range)
+        @setSelectedRange(range)
 
     dragenter: (event) ->
       event.preventDefault()

    requestAnimationFrame =>
      html = element.innerHTML
      document.body.removeChild(element)
      @responder?.setSelectedRange(selectedRange)
      callback(html)

  @proxyMethod "responder?.expandSelectionInDirection"
  @proxyMethod "responder?.selectionIsInCursorTarget"
  @proxyMethod "responder?.selectionIsExpanded"

    # by the extra <br> rendered to represent them.
    if textDeleted is "\n" and unhandledDeletion
      if textAdded and not unhandledAddition
        if range = @getSelectedRange()
          if @responder?.positionIsBlockBreak(range[1] + textAdded.length)
            unhandledDeletion = false

