Matmarex has uploaded a new change for review. https://gerrit.wikimedia.org/r/61190
Change subject: Make ve.ce.Surface.getSelectionRect() work on Opera ...................................................................... Make ve.ce.Surface.getSelectionRect() work on Opera .getClientRects() on a collapsed native range returns an empty collection on Opera, causing an exception to be thrown by rangy. Handle collapsed ranges separately, by using .surroundContents() to insert an empty <span> into the DOM, then read the span's offset. Bug: 47772 Change-Id: I4bad882d1d6fb83bcdcfd0de3bfc9af52960c2ff --- M modules/ve/ce/ve.ce.Surface.js 1 file changed, 31 insertions(+), 5 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor refs/changes/90/61190/1 diff --git a/modules/ve/ce/ve.ce.Surface.js b/modules/ve/ce/ve.ce.Surface.js index ff7403c..82816ad 100644 --- a/modules/ve/ce/ve.ce.Surface.js +++ b/modules/ve/ce/ve.ce.Surface.js @@ -136,14 +136,40 @@ * @static */ ve.ce.Surface.getSelectionRect = function () { + var rangySel, span, offset; if ( !rangy.initialized ) { rangy.init(); } - var rangySel = rangy.getSelection(); - return { - start: rangySel.getStartDocumentPos(), - end: rangySel.getEndDocumentPos() - }; + + rangySel = rangy.getSelection(); + + if ( rangySel.rangeCount === 0 ) { + // We can't do anything if there's no selection + return null; + } else if ( rangySel.isCollapsed ) { + // Empty selection - just a caret + // .getClientRects() on a collapsed native range returns an empty collection on Opera, + // causing an exception to be thrown by rangy + span = document.createElement( 'span' ); + rangySel.getRangeAt( 0 ).surroundContents( span ); + offset = $( span ).offset(); + span.parentNode.removeChild( span ); + + // Calculate offset relative to window + offset.top -= $( window ).scrollTop(); + offset.left -= $( window ).scrollLeft(); + + return { + start: { x: offset.left, y: offset.top }, + end: { x: offset.left, y: offset.top } + }; + } else { + // Normal selection + return { + start: rangySel.getStartDocumentPos(), + end: rangySel.getEndDocumentPos() + }; + } }; -- To view, visit https://gerrit.wikimedia.org/r/61190 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I4bad882d1d6fb83bcdcfd0de3bfc9af52960c2ff Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/VisualEditor Gerrit-Branch: master Gerrit-Owner: Matmarex <matma....@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits