mediawiki-extensions-Visual.../modules/ve-mw/ui/widgets/ve.ui.MWInternalLinkAnnotationWidget.js

81 lines
2 KiB
JavaScript
Raw Normal View History

/*!
* VisualEditor UserInterface MWInternalLinkAnnotationWidget class.
*
* @copyright 2011-2015 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 );
/* 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 ) {
return new ve.ui.MWLinkTargetInputWidget( {
icon: 'search',
$overlay: config.$overlay
} );
};
/**
* @inheritdoc
*/
ve.ui.MWInternalLinkAnnotationWidget.prototype.getAnnotationFromText = function ( value ) {
var title,
target = value.trim();
// Keep annotation in sync with value
if ( target === '' ) {
return null;
} else {
title = mw.Title.newFromText( target );
if (
title &&
( title.getNamespaceId() === 6 || title.getNamespaceId() === 14 ) &&
target[0] !== ':'
) {
// Prepend links to File and Category namespace with a colon
target = ':' + target;
}
return new ve.dm.MWInternalLinkAnnotation( {
type: 'link/mwInternal',
attributes: {
title: target,
// bug 62816: we really need a builder for this stuff
normalizedTitle: ve.dm.MWInternalLinkAnnotation.static.normalizeTitle( target ),
lookupTitle: ve.dm.MWInternalLinkAnnotation.static.getLookupTitle( target )
}
} );
}
};
/**
* @inheritdoc
*/
ve.ui.MWInternalLinkAnnotationWidget.prototype.getTextFromAnnotation = function ( annotation ) {
return annotation ? annotation.getAttribute( 'title' ) : '';
};