mediawiki-extensions-Visual.../modules/ve-mw/ui/inspectors/ve.ui.MWLinkInspector.js
Trevor Parscal a4491c12f8 Make link inspector re-usable by splitting it up
Objective:

* Make the majority of link inspector, which is generic to any annotation,
  usable for other annotation inspectors

This was merged earlier (f7107fa20d) but broke master, so it was
reverted (092fa74dee). This commit also incorporates 5dcf5d1c49.

Change-Id: Ib9190dee66ce064d69962f9c4c5b3a710be8ad07
2013-07-12 17:58:04 +00:00

86 lines
2.2 KiB
JavaScript

/*!
* VisualEditor UserInterface LinkInspector class.
*
* @copyright 2011-2013 VisualEditor Team and others; see AUTHORS.txt
* @license The MIT License (MIT); see LICENSE.txt
*/
/*global mw */
/**
* MediaWiki link inspector.
*
* @class
* @extends ve.ui.LinkInspector
*
* @constructor
* @param {ve.ui.Surface} surface
* @param {Object} [config] Config options
*/
ve.ui.MWLinkInspector = function VeUiMWLinkInspector( surface, config ) {
// Parent constructor
ve.ui.LinkInspector.call( this, surface, config );
};
/* Inheritance */
ve.inheritClass( ve.ui.MWLinkInspector, ve.ui.LinkInspector );
/* Static properties */
ve.ui.MWLinkInspector.static.modelClasses = [
ve.dm.MWExternalLinkAnnotation, ve.dm.MWInternalLinkAnnotation
];
ve.ui.MWLinkInspector.static.linkTargetInputWidget = ve.ui.MWLinkTargetInputWidget;
/* Methods */
/**
* Gets an annotation object from a target.
*
* The type of link is automatically detected based on some crude heuristics.
*
* @method
* @param {string} target Link target
* @returns {ve.dm.MWInternalLinkAnnotation|ve.dm.MWExternalLinkAnnotation}
*/
ve.ui.MWLinkInspector.prototype.getAnnotationFromText = function ( target ) {
var title;
// Figure out if this is an internal or external link
if ( ve.init.platform.getExternalLinkUrlProtocolsRegExp().test( target ) ) {
// External link
return new ve.dm.MWExternalLinkAnnotation( {
'type': 'link/mwExternal',
'attributes': {
'href': target
}
} );
} else {
// Internal link
// TODO: In the longer term we'll want to have autocompletion and existence and validity
// checks using AJAX
try {
title = new mw.Title( target );
if ( title.getNamespaceId() === 6 || title.getNamespaceId() === 14 ) {
// File: or Category: link
// We have to prepend a colon so this is interpreted as a link
// rather than an image inclusion or categorization
target = ':' + target;
}
} catch ( e ) { }
return new ve.dm.MWInternalLinkAnnotation( {
'type': 'link/mwInternal',
'attributes': {
'title': target,
'normalizedTitle': ve.dm.MWInternalLinkAnnotation.static.normalizeTitle( target )
}
} );
}
};
/* Registration */
ve.ui.inspectorFactory.register( 'mwLink', ve.ui.MWLinkInspector );