[MediaWiki-commits] [Gerrit] Implement ve.dm.Selection#getCoveringRange - change (VisualEditor/VisualEditor)

2016-04-11 Thread jenkins-bot (Code Review)
jenkins-bot has submitted this change and it was merged.

Change subject: Implement ve.dm.Selection#getCoveringRange
..


Implement ve.dm.Selection#getCoveringRange

Change-Id: I8512e6f67ca7025f8890663c10b4d69cb8063dd0
---
M src/ce/nodes/ve.ce.SectionNode.js
M src/ce/ve.ce.Surface.js
M src/dm/selections/ve.dm.LinearSelection.js
M src/dm/selections/ve.dm.NullSelection.js
M src/dm/selections/ve.dm.TableSelection.js
M src/dm/ve.dm.Selection.js
M src/ui/dialogs/ve.ui.FindAndReplaceDialog.js
7 files changed, 46 insertions(+), 13 deletions(-)

Approvals:
  Jforrester: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/src/ce/nodes/ve.ce.SectionNode.js 
b/src/ce/nodes/ve.ce.SectionNode.js
index 3238729..3618db4 100644
--- a/src/ce/nodes/ve.ce.SectionNode.js
+++ b/src/ce/nodes/ve.ce.SectionNode.js
@@ -72,10 +72,10 @@
  * @param {ve.dm.Selection} selection Selection
  */
 ve.ce.SectionNode.prototype.onSurfaceModelSelect = function ( selection ) {
-   var ranges = selection.getRanges(),
+   var coveringRange = selection.getCoveringRange(),
sectionNode = this;
 
-   if ( ranges.length && this.model.getRange().containsRange( ranges[ 0 ] 
) ) {
+   if ( coveringRange && this.model.getRange().containsRange( new 
ve.Range( coveringRange.start ) ) ) {
// Only set this as the active node if active node is empty, or 
not a
// descendent of this node.
if ( !this.surface.getActiveNode() || 
!this.surface.getActiveNode().traverseUpstream( function ( node ) { return node 
!== sectionNode; } ) ) {
diff --git a/src/ce/ve.ce.Surface.js b/src/ce/ve.ce.Surface.js
index 735806a..7940ccc 100644
--- a/src/ce/ve.ce.Surface.js
+++ b/src/ce/ve.ce.Surface.js
@@ -1696,8 +1696,15 @@
documentModel = surfaceModel.getDocument();
 
if ( selection instanceof ve.dm.LinearSelection ) {
-   range = selection.getRanges()[ 0 ];
+   // Pasting over a linear selection? Remove first.
+   if ( !selection.isCollapsed() ) {
+   tx = ve.dm.Transaction.newFromRemoval( documentModel, 
selection.getRange() );
+   selection = selection.translateByTransaction( tx );
+   surfaceModel.change( tx, selection );
+   }
+   range = selection.getRange();
} else if ( selection instanceof ve.dm.TableSelection ) {
+   // Selection removal is handled in after paste for tables 
(depends on pasted content)
range = new ve.Range( selection.getRanges()[ 0 ].start );
} else {
e.preventDefault();
@@ -1718,14 +1725,6 @@
.replace( /^[\s\S]*/, 
'' )
.replace( /[\s\S]*$/, '' 
);
}
-   }
-
-   // Pasting into a range? Remove first.
-   if ( !range.isCollapsed() ) {
-   tx = ve.dm.Transaction.newFromRemoval( documentModel, range );
-   selection = selection.translateByTransaction( tx );
-   surfaceModel.change( tx, selection );
-   range = selection.getRanges()[ 0 ];
}
 
// Save scroll position before changing focus to "offscreen" paste 
target
@@ -1940,6 +1939,7 @@
return;
}
 
+   // Range to remove
range = selection.getRanges()[ 0 ];
 
if ( slice ) {
@@ -2767,7 +2767,7 @@
return;
}
 
-   sequences = this.getSurface().sequenceRegistry.findMatching( 
model.getDocument().data, selection.getModel().getRanges()[ 0 ].end );
+   sequences = this.getSurface().sequenceRegistry.findMatching( 
model.getDocument().data, selection.getModel().getCoveringRange().end );
 
// sequences.length will likely be 0 or 1 so don't cache
for ( i = 0; i < sequences.length; i++ ) {
diff --git a/src/dm/selections/ve.dm.LinearSelection.js 
b/src/dm/selections/ve.dm.LinearSelection.js
index 6f475d7..e97d81c 100644
--- a/src/dm/selections/ve.dm.LinearSelection.js
+++ b/src/dm/selections/ve.dm.LinearSelection.js
@@ -111,6 +111,13 @@
 };
 
 /**
+ * @inheritdoc
+ */
+ve.dm.LinearSelection.prototype.getCoveringRange = function () {
+   return this.range;
+};
+
+/**
  * Get the range for this selection
  *
  * @return {ve.Range} Range
diff --git a/src/dm/selections/ve.dm.NullSelection.js 
b/src/dm/selections/ve.dm.NullSelection.js
index d9023aa..7f0a370 100644
--- a/src/dm/selections/ve.dm.NullSelection.js
+++ b/src/dm/selections/ve.dm.NullSelection.js
@@ -83,6 +83,13 @@
 /**
  * @inheritdoc
  */
+ve.dm.NullSelection.prototype.getCoveringRange = function () {
+   return null;
+};
+
+/**
+ * @inheritdoc
+ */
 ve.dm.NullSelection.prototype.equals = function ( other ) {
return other instanceof ve.dm.NullSelection &&
this.getDocument() === other.getDocument();
diff --git 

[MediaWiki-commits] [Gerrit] Implement ve.dm.Selection#getCoveringRange - change (VisualEditor/VisualEditor)

2016-04-09 Thread Esanders (Code Review)
Esanders has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/282463

Change subject: Implement ve.dm.Selection#getCoveringRange
..

Implement ve.dm.Selection#getCoveringRange

Change-Id: I8512e6f67ca7025f8890663c10b4d69cb8063dd0
---
M src/ce/nodes/ve.ce.SectionNode.js
M src/ce/ve.ce.Surface.js
M src/dm/selections/ve.dm.LinearSelection.js
M src/dm/selections/ve.dm.NullSelection.js
M src/dm/selections/ve.dm.TableSelection.js
M src/dm/ve.dm.Selection.js
M src/ui/dialogs/ve.ui.FindAndReplaceDialog.js
7 files changed, 42 insertions(+), 8 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/VisualEditor/VisualEditor 
refs/changes/63/282463/1

diff --git a/src/ce/nodes/ve.ce.SectionNode.js 
b/src/ce/nodes/ve.ce.SectionNode.js
index 3238729..3618db4 100644
--- a/src/ce/nodes/ve.ce.SectionNode.js
+++ b/src/ce/nodes/ve.ce.SectionNode.js
@@ -72,10 +72,10 @@
  * @param {ve.dm.Selection} selection Selection
  */
 ve.ce.SectionNode.prototype.onSurfaceModelSelect = function ( selection ) {
-   var ranges = selection.getRanges(),
+   var coveringRange = selection.getCoveringRange(),
sectionNode = this;
 
-   if ( ranges.length && this.model.getRange().containsRange( ranges[ 0 ] 
) ) {
+   if ( coveringRange && this.model.getRange().containsRange( new 
ve.Range( coveringRange.start ) ) ) {
// Only set this as the active node if active node is empty, or 
not a
// descendent of this node.
if ( !this.surface.getActiveNode() || 
!this.surface.getActiveNode().traverseUpstream( function ( node ) { return node 
!== sectionNode; } ) ) {
diff --git a/src/ce/ve.ce.Surface.js b/src/ce/ve.ce.Surface.js
index 735806a..4283d8e 100644
--- a/src/ce/ve.ce.Surface.js
+++ b/src/ce/ve.ce.Surface.js
@@ -1696,9 +1696,9 @@
documentModel = surfaceModel.getDocument();
 
if ( selection instanceof ve.dm.LinearSelection ) {
-   range = selection.getRanges()[ 0 ];
+   range = selection.getCoveringRange();
} else if ( selection instanceof ve.dm.TableSelection ) {
-   range = new ve.Range( selection.getRanges()[ 0 ].start );
+   range = new ve.Range( selection.getCoveringRange().start );
} else {
e.preventDefault();
return;
@@ -1725,7 +1725,7 @@
tx = ve.dm.Transaction.newFromRemoval( documentModel, range );
selection = selection.translateByTransaction( tx );
surfaceModel.change( tx, selection );
-   range = selection.getRanges()[ 0 ];
+   range = selection.getCoveringRange();
}
 
// Save scroll position before changing focus to "offscreen" paste 
target
@@ -1940,7 +1940,7 @@
return;
}
 
-   range = selection.getRanges()[ 0 ];
+   range = selection.getCoveringRange();
 
if ( slice ) {
// Pasting non-table content into table: just replace the the 
first cell with the pasted content
@@ -2567,6 +2567,7 @@
 
 ve.ce.Surface.prototype.handleObservedChanges = function ( oldState, newState 
) {
var newSelection, transaction, removedUnicorns,
+   activeNode, coveringRange, nodeRange, containsStart, 
containsEnd,
surface = this,
dmDoc = this.getModel().getDocument(),
insertedText = false;
@@ -2767,7 +2768,7 @@
return;
}
 
-   sequences = this.getSurface().sequenceRegistry.findMatching( 
model.getDocument().data, selection.getModel().getRanges()[ 0 ].end );
+   sequences = this.getSurface().sequenceRegistry.findMatching( 
model.getDocument().data, selection.getModel().getCoveringRange().end );
 
// sequences.length will likely be 0 or 1 so don't cache
for ( i = 0; i < sequences.length; i++ ) {
diff --git a/src/dm/selections/ve.dm.LinearSelection.js 
b/src/dm/selections/ve.dm.LinearSelection.js
index 6f475d7..e97d81c 100644
--- a/src/dm/selections/ve.dm.LinearSelection.js
+++ b/src/dm/selections/ve.dm.LinearSelection.js
@@ -111,6 +111,13 @@
 };
 
 /**
+ * @inheritdoc
+ */
+ve.dm.LinearSelection.prototype.getCoveringRange = function () {
+   return this.range;
+};
+
+/**
  * Get the range for this selection
  *
  * @return {ve.Range} Range
diff --git a/src/dm/selections/ve.dm.NullSelection.js 
b/src/dm/selections/ve.dm.NullSelection.js
index d9023aa..7f0a370 100644
--- a/src/dm/selections/ve.dm.NullSelection.js
+++ b/src/dm/selections/ve.dm.NullSelection.js
@@ -83,6 +83,13 @@
 /**
  * @inheritdoc
  */
+ve.dm.NullSelection.prototype.getCoveringRange = function () {
+   return null;
+};
+
+/**
+ * @inheritdoc
+ */
 ve.dm.NullSelection.prototype.equals = function ( other ) {
return other instanceof ve.dm.NullSelection &&
this.getDocument() === other.getDocument();
diff --git