jenkins-bot has submitted this change and it was merged.

Change subject: Use the preview widget in context items
......................................................................


Use the preview widget in context items

Use the newly created preview widget to render consistent previews
of references in the context items and search widget.

Depends on ve-core fix Ia7e96e048e4b

Bug: T93042
Change-Id: I3a7f6402018924a18efbb49ba61a16787c41f1f4
---
M modules/ve-mw/ui/contextitems/ve.ui.MWReferenceContextItem.js
M modules/ve-mw/ui/widgets/ve.ui.MWReferenceSearchWidget.js
2 files changed, 34 insertions(+), 41 deletions(-)

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



diff --git a/modules/ve-mw/ui/contextitems/ve.ui.MWReferenceContextItem.js 
b/modules/ve-mw/ui/contextitems/ve.ui.MWReferenceContextItem.js
index 2488125..220fbd0 100644
--- a/modules/ve-mw/ui/contextitems/ve.ui.MWReferenceContextItem.js
+++ b/modules/ve-mw/ui/contextitems/ve.ui.MWReferenceContextItem.js
@@ -18,7 +18,7 @@
 ve.ui.MWReferenceContextItem = function VeMWReferenceContextItem() {
        // Parent constructor
        ve.ui.MWReferenceContextItem.super.apply( this, arguments );
-
+       this.view = null;
        // Initialization
        this.$element.addClass( 've-ui-mwReferenceContextItem' );
 };
@@ -48,35 +48,13 @@
  * @return {jQuery} DOM rendering of reference
  */
 ve.ui.MWReferenceContextItem.prototype.getRendering = function () {
-       var ref = ve.dm.MWReferenceModel.static.newFromReferenceNode( 
this.model ),
-               view = new ve.ce.InternalItemNode(
-                       this.model.getDocument().getInternalList().getItemNode( 
ref.getListIndex() )
-               );
-
-       // HACK: PHP parser doesn't wrap single lines in a paragraph
-       if ( view.$element.children().length === 1 && view.$element.children( 
'p' ).length === 1 ) {
-               // unwrap inner
-               view.$element.children().replaceWith( 
view.$element.children().contents() );
-       }
-
-       // Cleanup
-       view.destroy();
-
-       // Make all links open in a new window (sync rendering)
-       view.$element.find( 'a' ).attr( 'target', '_blank' );
-
-       // Make all links open in a new window (async rendering)
-       ve.BranchNode.static.traverse( view, function ( node ) {
-               // Duck type ve.ce.GeneratedContentNode
-               if ( typeof node.generateContents === 'function' ) {
-                       node.once( 'rerender', function () {
-                               node.$element.find( 'a' ).attr( 'target', 
'_blank' );
-                       } );
-               }
-       } );
+       var refModel = ve.dm.MWReferenceModel.static.newFromReferenceNode( 
this.model );
+       this.view = new ve.ui.PreviewWidget(
+               refModel.getDocument().getInternalList().getItemNode( 
refModel.getListIndex() )
+       );
 
        // WARNING: The $element property may be rendered into asynchronously
-       return view.$element;
+       return this.view.$element;
 };
 
 /**
@@ -93,6 +71,18 @@
        this.$body.empty().append( this.getRendering() );
 };
 
+/**
+ * @inheritdoc
+ */
+ve.ui.MWReferenceContextItem.prototype.teardown = function () {
+       if ( this.view ) {
+               this.view.destroy();
+       }
+
+       // Call parent
+       ve.ui.MWReferenceContextItem.super.prototype.teardown.call( this );
+};
+
 /* Registration */
 
 ve.ui.contextItemFactory.register( ve.ui.MWReferenceContextItem );
diff --git a/modules/ve-mw/ui/widgets/ve.ui.MWReferenceSearchWidget.js 
b/modules/ve-mw/ui/widgets/ve.ui.MWReferenceSearchWidget.js
index 71b683d..cd6abc7 100644
--- a/modules/ve-mw/ui/widgets/ve.ui.MWReferenceSearchWidget.js
+++ b/modules/ve-mw/ui/widgets/ve.ui.MWReferenceSearchWidget.js
@@ -150,7 +150,7 @@
                return;
        }
 
-       var i, iLen, j, jLen, ref, group, groupName, groupNames, view, text, 
firstNodes, indexOrder,
+       var i, iLen, j, jLen, refModel, group, groupName, groupNames, view, 
text, firstNodes, indexOrder,
                refGroup, refNode, matches, name, citation,
                groups = this.internalList.getNodeGroups();
 
@@ -169,25 +169,29 @@
                group = groups[groupName];
                firstNodes = group.firstNodes;
                indexOrder = group.indexOrder;
+
                for ( j = 0, jLen = indexOrder.length; j < jLen; j++ ) {
                        refNode = firstNodes[indexOrder[j]];
-                       ref = 
ve.dm.MWReferenceModel.static.newFromReferenceNode( refNode );
-                       view = new ve.ce.InternalItemNode( 
this.internalList.getItemNode( ref.getListIndex() ) );
+                       refModel = 
ve.dm.MWReferenceModel.static.newFromReferenceNode( refNode );
+                       view = new ve.ui.PreviewWidget(
+                               
refModel.getDocument().getInternalList().getItemNode( refModel.getListIndex() )
+                       );
 
-                       // HACK: PHP parser doesn't wrap single lines in a 
paragraph
-                       if ( view.$element.children().length === 1 && 
view.$element.children( 'p' ).length === 1 ) {
-                               // unwrap inner
-                               view.$element.children().replaceWith( 
view.$element.children().contents() );
-                       }
-
-                       refGroup = ref.getGroup();
+                       refGroup = refModel.getGroup();
                        citation = ( refGroup && refGroup.length ? refGroup + ' 
' : '' ) + ( j + 1 );
-                       matches = ref.getListKey().match( /^literal\/(.*)$/ );
+                       matches = refModel.getListKey().match( 
/^literal\/(.*)$/ );
                        name = matches && matches[1] || '';
                        // Hide previously auto-generated reference names
                        if ( name.match( /^:[0-9]+$/ ) ) {
                                name = '';
                        }
+
+                       // TODO: At some point we need to make sure this text 
is updated in
+                       // case the view node is still rendering. This 
shouldn't happen because
+                       // all references are supposed to be in the store and 
therefore are
+                       // immediately rendered, but we shouldn't trust that on 
principle to
+                       // account for edge cases.
+
                        // Make visible text, citation and reference name 
searchable
                        text = [ view.$element.text().toLowerCase(), citation, 
name ].join( ' ' );
                        // Make URLs searchable
@@ -196,11 +200,10 @@
                        this.index.push( {
                                $element: view.$element,
                                text: text,
-                               reference: ref,
+                               reference: refModel,
                                citation: citation,
                                name: name
                        } );
-                       view.destroy();
                }
        }
 

-- 
To view, visit https://gerrit.wikimedia.org/r/200762
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I3a7f6402018924a18efbb49ba61a16787c41f1f4
Gerrit-PatchSet: 15
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Mooeypoo <[email protected]>
Gerrit-Reviewer: Catrope <[email protected]>
Gerrit-Reviewer: Esanders <[email protected]>
Gerrit-Reviewer: Jforrester <[email protected]>
Gerrit-Reviewer: Mooeypoo <[email protected]>
Gerrit-Reviewer: Trevor Parscal <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to