Esanders has uploaded a new change for review.
https://gerrit.wikimedia.org/r/70644
Change subject: Prevent overlapping link annotations
......................................................................
Prevent overlapping link annotations
Use the 'all' mode of SurfaceFragment#getAnnotations to correctly
handle the selections which include linked and non-linked text
in the LinkInspector.
Bug: 50208
Change-Id: I1cab7f3cc4fc9589eced01ad38c59fe5b9622a57
---
M modules/ve/dm/ve.dm.SurfaceFragment.js
M modules/ve/ui/inspectors/ve.ui.LinkInspector.js
M modules/ve/ui/ve.ui.Inspector.js
3 files changed, 12 insertions(+), 7 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor
refs/changes/44/70644/1
diff --git a/modules/ve/dm/ve.dm.SurfaceFragment.js
b/modules/ve/dm/ve.dm.SurfaceFragment.js
index f6c612e..73dd03c 100644
--- a/modules/ve/dm/ve.dm.SurfaceFragment.js
+++ b/modules/ve/dm/ve.dm.SurfaceFragment.js
@@ -353,7 +353,7 @@
* argument to get all annotations that occur within the fragment.
*
* @method
- * @param {boolean} [all] Get annotations cover some of the fragment
+ * @param {boolean} [all] Get annotations which only cover some of the fragment
* @returns {ve.dm.AnnotationSet} All annotation objects range is covered by
*/
ve.dm.SurfaceFragment.prototype.getAnnotations = function ( all ) {
diff --git a/modules/ve/ui/inspectors/ve.ui.LinkInspector.js
b/modules/ve/ui/inspectors/ve.ui.LinkInspector.js
index 92d3fe3..2f0551f 100644
--- a/modules/ve/ui/inspectors/ve.ui.LinkInspector.js
+++ b/modules/ve/ui/inspectors/ve.ui.LinkInspector.js
@@ -72,7 +72,7 @@
ve.ui.LinkInspector.prototype.onSetup = function () {
var expandedFragment, trimmedFragment, truncatedFragment,
fragment = this.surface.getModel().getFragment( null, true ),
- annotation = this.getMatchingAnnotations( fragment ).get( 0 );
+ annotation = this.getMatchingAnnotations( fragment, true ).get(
0 );
// Parent method
ve.ui.Inspector.prototype.onSetup.call( this );
@@ -111,7 +111,11 @@
*/
ve.ui.LinkInspector.prototype.onOpen = function () {
var fragment = this.surface.getModel().getFragment( null, true ),
- annotation = this.getMatchingAnnotations( fragment ).get( 0 );
+ annotation = this.getMatchingAnnotations( fragment, true ).get(
0 ),
+ // Note that we don't set the 'all' flag here so that any
+ // non-annotated content is annotated on close
+ initialAnnotation = this.getMatchingAnnotations( fragment
).get( 0 );
+
// Parent method
ve.ui.Inspector.prototype.onOpen.call( this );
@@ -119,7 +123,7 @@
// Wait for animation to complete
setTimeout( ve.bind( function () {
// Setup annotation
- this.initialAnnotationHash = annotation && ve.getHash(
annotation );
+ this.initialAnnotationHash = initialAnnotation && ve.getHash(
initialAnnotation );
this.targetInput.setAnnotation( annotation );
this.targetInput.$input.focus().select();
}, this ), 200 );
@@ -174,7 +178,7 @@
}
if ( clear ) {
// Clear all existing annotations
- annotations = this.getMatchingAnnotations( fragment ).get();
+ annotations = this.getMatchingAnnotations( fragment, true
).get();
for ( i = 0, len = annotations.length; i < len; i++ ) {
fragment.annotateContent( 'clear', annotations[i] );
}
diff --git a/modules/ve/ui/ve.ui.Inspector.js b/modules/ve/ui/ve.ui.Inspector.js
index 31b23bb..f173e3b 100644
--- a/modules/ve/ui/ve.ui.Inspector.js
+++ b/modules/ve/ui/ve.ui.Inspector.js
@@ -136,12 +136,13 @@
*
* @method
* @param {ve.dm.SurfaceFragment} fragment Fragment to get matching
annotations within
+ * @param {boolean} [all] Get annotations which only cover some of the fragment
* @returns {ve.dm.AnnotationSet} Matching annotations
*/
-ve.ui.Inspector.prototype.getMatchingAnnotations = function ( fragment ) {
+ve.ui.Inspector.prototype.getMatchingAnnotations = function ( fragment, all ) {
var constructor = this.constructor;
- return fragment.getAnnotations().filter( function ( annnotation ) {
+ return fragment.getAnnotations( all ).filter( function ( annnotation ) {
return ve.ui.viewRegistry.isViewRelatedToModel( constructor,
annnotation );
} );
};
--
To view, visit https://gerrit.wikimedia.org/r/70644
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I1cab7f3cc4fc9589eced01ad38c59fe5b9622a57
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits