jenkins-bot has submitted this change and it was merged.
Change subject: Fixing inspector popup position
..
Fixing inspector popup position
The inspector popup should appear relative to the position of the related
calling method - either relative to the cursor (like in links and language)
or relative to the focusableNode (like in templates/transclusion).
Bug: 50905
Change-Id: I07f58d0c6561adecbec560fc24bcb6e590f2cd9f
---
M modules/ve/ui/ve.ui.Context.js
1 file changed, 38 insertions(+), 22 deletions(-)
Approvals:
Trevor Parscal: Looks good to me, approved
jenkins-bot: Verified
diff --git a/modules/ve/ui/ve.ui.Context.js b/modules/ve/ui/ve.ui.Context.js
index 9eb1d42..077a52f 100644
--- a/modules/ve/ui/ve.ui.Context.js
+++ b/modules/ve/ui/ve.ui.Context.js
@@ -249,46 +249,62 @@
surface = this.surface.getView(),
inspector = this.inspectors.getCurrent(),
focusedNode = surface.getFocusedNode(),
- // Get cursor position
- position = surface.getSelectionRect(),
- surfaceOffset = surface.$.offset();
+ surfaceOffset = surface.$.offset(),
+ $node, nodePosition, cursorPosition, position;
- // translate from ce surface
- position = {
- y: position.end.y - surfaceOffset.top,
- x: position.end.x - surfaceOffset.left
- };
-
- if ( position ) {
- $container = inspector ? this.inspectors.$ : this.$menu;
+ $container = inspector ? this.inspectors.$ : this.$menu;
+ if ( focusedNode ) {
+ // We're on top of a node
+ $node = focusedNode.$;
+ nodePosition = $node.position();
if ( this.embedded ) {
+ // Get the position relative to the surface it is
embedded in
focusableOffset = ve.Element.getRelativePosition(
- focusedNode.$focusable, this.surface.$
+ $node, this.surface.$
);
- focusableWidth = focusedNode.$focusable.outerWidth();
position = { 'y': focusableOffset.top };
- // RTL check for Page-level (CE)
+
+ // When inspector is embedded in RTL, it requires
+ // adjustments to the relative positioning (pop up on
the other side):
if ( this.surface.view.getDir() === 'rtl' ) {
position.x = focusableOffset.left;
this.popup.align = 'left';
} else {
+ focusableWidth = $node.outerWidth();
position.x = focusableOffset.left +
focusableWidth;
this.popup.align = 'right';
}
} else {
+ // Get the position of the focusedNode:
+ position = {
+ x: nodePosition.left,
+ y: nodePosition.top
+ };
this.popup.align = 'center';
}
- this.$.css( { 'left': position.x, 'top': position.y } );
+ } else {
+ // We're on top of a selected text
+ // Get the position of the cursor
+ cursorPosition = surface.getSelectionRect();
- this.popup.display(
- position.x,
- position.y,
- $container.outerWidth( true ),
- $container.outerHeight( true ),
- transition
- );
+ // Correct for surface offset:
+ position = {
+ x: cursorPosition.end.x - surfaceOffset.left,
+ y: cursorPosition.end.y - surfaceOffset.top
+ };
+ this.popup.align = 'center';
}
+ this.$.css( { 'left': position.x, 'top': position.y } );
+
+ this.popup.display(
+ position.x,
+ position.y,
+ $container.outerWidth( true ),
+ $container.outerHeight( true ),
+ transition
+ );
+
return this;
};
--
To view, visit https://gerrit.wikimedia.org/r/79165
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I07f58d0c6561adecbec560fc24bcb6e590f2cd9f
Gerrit-PatchSet: 6
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Mooeypoo mor...@gmail.com
Gerrit-Reviewer: Amire80 amir.ahar...@mail.huji.ac.il
Gerrit-Reviewer: Catrope roan.katt...@gmail.com
Gerrit-Reviewer: Inez i...@wikia-inc.com
Gerrit-Reviewer: Trevor Parscal tpars...@wikimedia.org