diff --git a/src/range.coffee b/src/range.coffee index 41e6a2d..5322d5a 100644 --- a/src/range.coffee +++ b/src/range.coffee @@ -278,7 +278,10 @@ class Range.NormalizedRange # # Returns a Range object. toRange: -> - range = document.createRange() + # If we're using the rangy library for older browsers, use that. + # Otherwise just use document. + doc = rangy ? document + range = doc.createRange() range.setStartBefore(@start) range.setEndAfter(@end) range diff --git a/src/util.coffee b/src/util.coffee index 3e2dc8c..e7e460f 100644 --- a/src/util.coffee +++ b/src/util.coffee @@ -87,7 +87,10 @@ Util.contains = (parent, child) -> # value of the selection. What this returns is very close to what the user # actually sees. Util.readRangeViaSelection = (range) -> - sel = Util.getGlobal().getSelection() # Get the browser selection object + # If we're using the rangy library for older browsers, use that. + # Otherwise get window from the global space. + win = rangy ? Util.getGlobal() + sel = win.getSelection() # Get the browser selection object sel.removeAllRanges() # clear the selection sel.addRange range.toRange() # Select the range sel.toString() # Read out the selection diff --git a/test/spec/range_spec.coffee b/test/spec/range_spec.coffee index 3538183..4ccb649 100644 --- a/test/spec/range_spec.coffee +++ b/test/spec/range_spec.coffee @@ -214,13 +214,15 @@ describe 'Range', -> setStartBefore: sinon.spy() setEndAfter: sinon.spy() - sinon.stub(document, 'createRange').returns(mockRange) + doc = rangy ? document + + sinon.stub(doc, 'createRange').returns(mockRange) r.toRange() - assert(document.createRange.calledOnce) + assert(doc.createRange.calledOnce) assert(mockRange.setStartBefore.calledOnce) assert.isTrue(mockRange.setStartBefore.calledWith(r.start)) assert(mockRange.setEndAfter.calledOnce) assert.isTrue(mockRange.setEndAfter.calledWith(r.end)) - document.createRange.restore() + doc.createRange.restore()