Alex Monk has uploaded a new change for review.

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

Change subject: Mark interwiki links as known in LinkTargetInputWidget
......................................................................

Mark interwiki links as known in LinkTargetInputWidget

Bit messy at the moment.

Bug: T72504
Change-Id: I4b08f1c6d70f371f7f9a05d0856111721f4edb35
---
M modules/ve-mw/ui/widgets/ve.ui.MWLinkTargetInputWidget.js
1 file changed, 39 insertions(+), 11 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor 
refs/changes/88/182988/1

diff --git a/modules/ve-mw/ui/widgets/ve.ui.MWLinkTargetInputWidget.js 
b/modules/ve-mw/ui/widgets/ve.ui.MWLinkTargetInputWidget.js
index f91d890..4d05b5d 100644
--- a/modules/ve-mw/ui/widgets/ve.ui.MWLinkTargetInputWidget.js
+++ b/modules/ve-mw/ui/widgets/ve.ui.MWLinkTargetInputWidget.js
@@ -16,6 +16,8 @@
  * @param {Object} [config] Configuration options
  */
 ve.ui.MWLinkTargetInputWidget = function VeUiMWLinkTargetInputWidget( config ) 
{
+       var widget = this;
+
        // Config initialization
        config = config || {};
 
@@ -34,6 +36,17 @@
        // Initialization
        this.$element.addClass( 've-ui-mwLinkTargetInputWidget' );
        this.lookupMenu.$element.addClass( 've-ui-mwLinkTargetInputWidget-menu' 
);
+
+       this.interwikiPrefixes = [];
+       this.interwikiPrefixesPromise = 
ve.init.target.constructor.static.apiRequest( {
+               action: 'query',
+               meta: 'siteinfo',
+               siprop: 'interwikimap'
+       } ).done( function ( data ) {
+               $.each( data.query.interwikimap, function ( index, interwiki ) {
+                       widget.interwikiPrefixes.push( interwiki.prefix );
+               } );
+       } );
 };
 
 /* Inheritance */
@@ -102,21 +115,36 @@
  * @returns {jqXHR} AJAX object without success or fail handlers attached
  */
 ve.ui.MWLinkTargetInputWidget.prototype.getLookupRequest = function () {
+       var widget = this, promiseAbortObject = { abort: function () {
+               // Do nothing. This is just so OOUI doesn't break due to abort 
being undefined.
+       } };
+
        if ( mw.Title.newFromText( this.value ) ) {
-               return ve.init.target.constructor.static.apiRequest( {
-                       action: 'query',
-                       generator: 'prefixsearch',
-                       gpssearch: this.value,
-                       gpsnamespace: 0,
-                       prop: 'info|pageprops',
-                       ppprop: 'disambiguation'
-               } );
+               return this.interwikiPrefixesPromise.then( function () {
+                       var interwiki = widget.value.substring( 0, 
widget.value.indexOf( ':' ) );
+                       if ( interwiki && interwiki !== '' ) {
+                               return $.Deferred().resolve( { query: {
+                                       pages: [{
+                                               title: widget.value
+                                       }]
+                               } } ).promise( promiseAbortObject );
+                       } else {
+                               var req = 
ve.init.target.constructor.static.apiRequest( {
+                                       action: 'query',
+                                       generator: 'prefixsearch',
+                                       gpssearch: widget.value,
+                                       gpsnamespace: 0,
+                                       prop: 'info|pageprops',
+                                       ppprop: 'disambiguation'
+                               } );
+                               promiseAbortObject.abort = req.abort.bind( req 
);
+                               return req;
+                       }
+               } ).promise( promiseAbortObject );
        } else {
                // Don't send invalid titles to the API.
                // Just pretend it returned nothing so we can show the 'invalid 
title' section
-               return $.Deferred().resolve( {} ).promise( { abort: function () 
{
-                       // Do nothing. This is just so OOUI doesn't break due 
to abort being undefined.
-               } } );
+               return $.Deferred().resolve( {} ).promise( promiseAbortObject );
        }
 };
 

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4b08f1c6d70f371f7f9a05d0856111721f4edb35
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Alex Monk <[email protected]>

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

Reply via email to