mediawiki-extensions-Visual.../modules/ve/actions/ve.ContentAction.js
Trevor Parscal 9c22ee346a Added undo-before-apply for new link annotations
When the link inspector is used to create a new annotation, the text is annotated with the default link target derived from the selected text. Then if the inspector is used to change that value, yet another transaction is processed when the inspector is closed.

To avoid having to press undo 2x, this change makes the inspector undo it's first change before applying the changed annotation.

This change also introduces insert, remove and select content actions.

Change-Id: I3e29189158fb01336d6b053bc2a8bda2a91a0a46
2012-11-19 17:10:05 -08:00

70 lines
1.5 KiB
JavaScript

/**
* VisualEditor ContentAction class.
*
* @copyright 2011-2012 VisualEditor Team and others; see AUTHORS.txt
* @license The MIT License (MIT); see LICENSE.txt
*/
/**
* Content action.
*
* @class
* @constructor
* @extends {ve.Action}
* @param {ve.Surface} surface Surface to act on
*/
ve.ContentAction = function VeContentAction( surface ) {
// Parent constructor
ve.Action.call( this, surface );
};
/* Inheritance */
ve.inheritClass( ve.ContentAction, ve.Action );
/* Static Members */
/**
* List of allowed methods for this action.
*
* @static
* @member
*/
ve.ContentAction.static.methods = ['insert', 'remove', 'select'];
/* Methods */
/**
* Sets a given Content.
*
* @method
* @param {String|Array} content Content to insert, can be either a string or array of data
* @param {Boolean} annotate Content should be automatically annotated to match surrounding content
*/
ve.ContentAction.prototype.insert = function ( content, annotate ) {
this.surface.getModel().getFragment().insertContent( content, annotate );
};
/**
* Clears a given Content.
*
* @method
*/
ve.ContentAction.prototype.remove = function () {
this.surface.getModel().getFragment().removeContent();
};
/**
* Selects content in a given range.
*
* @method
* @param {ve.Range} range Range to select
*/
ve.ContentAction.prototype.select = function ( range ) {
this.surface.getModel().change( null, range );
};
/* Registration */
ve.actionFactory.register( 'content', ve.ContentAction );