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 <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits