mediawiki-extensions-Visual.../modules/ve-mw/ui/widgets/ve.ui.MWInternalLinkAnnotationWidget.js
Ed Sanders 3b09a0719c Link inspector: Turn off 'addQueryInput'
The double result creates more confusion that it clears up,
and now that the query input is always used for text insertion
it is less of an issue that we don't have a case-exact match
in the results list.

Bug: T230819
Change-Id: I58cbe740fa7d0327aadd5dd111161bb7087a4ddb
2019-08-27 12:17:44 +01:00

114 lines
3.5 KiB
JavaScript

/*!
* VisualEditor UserInterface MWInternalLinkAnnotationWidget class.
*
* @copyright 2011-2019 VisualEditor Team and others; see AUTHORS.txt
* @license The MIT License (MIT); see LICENSE.txt
*/
/**
* Creates an ve.ui.MWInternalLinkAnnotationWidget object.
*
* @class
* @extends ve.ui.LinkAnnotationWidget
*
* @constructor
* @param {Object} [config] Configuration options
*/
ve.ui.MWInternalLinkAnnotationWidget = function VeUiMWInternalLinkAnnotationWidget() {
// Parent constructor
ve.ui.MWInternalLinkAnnotationWidget.super.apply( this, arguments );
};
/* Inheritance */
OO.inheritClass( ve.ui.MWInternalLinkAnnotationWidget, ve.ui.LinkAnnotationWidget );
/* Static Methods */
/**
* @inheritdoc
*/
ve.ui.MWInternalLinkAnnotationWidget.static.getAnnotationFromText = function ( value ) {
var trimmed = value.trim(),
title = mw.Title.newFromText( trimmed );
if ( !title ) {
return null;
}
return ve.dm.MWInternalLinkAnnotation.static.newFromTitle( title, trimmed );
};
/**
* @inheritdoc
*/
ve.ui.MWInternalLinkAnnotationWidget.static.getTextFromAnnotation = function ( annotation ) {
return annotation ? annotation.getAttribute( 'normalizedTitle' ) : '';
};
/* Methods */
/**
* Create a text input widget to be used by the annotation widget
*
* @param {Object} [config] Configuration options
* @return {OO.ui.TextInputWidget} Text input widget
*/
ve.ui.MWInternalLinkAnnotationWidget.prototype.createInputWidget = function ( config ) {
var input = new mw.widgets.TitleSearchWidget( ve.extendObject( {
icon: 'search',
excludeCurrentPage: true,
showImages: mw.config.get( 'wgVisualEditorConfig' ).usePageImages,
showDescriptions: mw.config.get( 'wgVisualEditorConfig' ).usePageDescriptions,
showInterwikis: true,
addQueryInput: false,
api: ve.init.target.getContentApi(),
cache: ve.init.platform.linkCache
}, config ) );
// Put query first in DOM
// TODO: Consider upstreaming this to SearchWidget
input.$element.prepend( input.$query );
// Remove 'maxlength', because it should not apply to full URLs, which we allow users to paste
// here. Maximum length of page titles will still be enforced by JS validation later (we can't
// override maxLength config option, because that would break the validation).
input.getQuery().$input.removeAttr( 'maxlength' );
return input;
};
/**
* @inheritdoc
*/
ve.ui.MWInternalLinkAnnotationWidget.prototype.getTextInputWidget = function () {
return this.input.query;
};
// #getHref returns the link title, not a fully resolved URL, however the only
// use case of widget.getHref is for link insertion text, which expects a title.
//
// Callers needing the full resolved URL should use ve.resolveUrl
/**
* @inheritdoc
*/
ve.ui.MWInternalLinkAnnotationWidget.prototype.onTextChange = function ( value ) {
var targetData,
htmlDoc = this.getElementDocument();
// Specific thing we want to check: has a valid URL for an internal page
// been pasted into here, in which case we want to convert it to just the
// page title. This has to happen /here/ because a URL can reference a
// valid page while not being a valid Title (e.g. if it contains a "%").
if ( ve.init.platform.getExternalLinkUrlProtocolsRegExp().test( value ) ) {
targetData = ve.dm.MWInternalLinkAnnotation.static.getTargetDataFromHref(
value,
htmlDoc
);
if ( targetData.isInternal ) {
value = targetData.title;
this.input.query.setValue( targetData.title );
}
}
return ve.ui.MWInternalLinkAnnotationWidget.super.prototype.onTextChange.call( this, value );
};