В итоге я написал работающий класс который сохраняет как обычное так и реверсивное выделение:
class Selection
constructor: ->
@anchorNode = null
@anchorOffset = null
@focusNode = null
@focusOffset = null
clear: ->
@anchorNode = null
@anchorOffset = null
@focusNode = null
@focusOffset = null
save: ->
selection = window.getSelection()
@anchorNode = selection.anchorNode
@anchorOffset = selection.anchorOffset
@focusNode = selection.focusNode
@focusOffset = selection.focusOffset
return
restore: ->
selection = window.getSelection()
selection.removeAllRanges()
unless @anchorNode then return
range = document.createRange()
range.setStart(@anchorNode, @anchorOffset)
selection.addRange(range)
selection.extend(@focusNode, @focusOffset)
return
В итоге мы ренджи не трогаем, мы у селекшена запоминаем стартовую и конечную точки, а потом при ресторе, мы создаем коллапсовый замкнутый рендж задавая ему лишь стартовую точку, и продолжаем (extend) его в нужном направлении до конечной точки, подобное extend заставляет нам сохранить направление выделения. И выделение под курсором не обрывается ^_^
Еще один момент в EDGE такое выделение сбрасывается при любой активности мышкой, по этому щас я добавлю проверку на то нажата ли клафиша мышки или отпущена. И если нажата то буду думать что делать