mediawiki-extensions-Visual.../modules/ve/ui/tools/ve.ui.HistoryButtonTool.js
Rob Moen 96d97c2aa8 Optimize UI tool state updates.
Rather than each tool requesting annotations, and nodes pertaining to selection,
Emitted event supplies annotations and nodes to each tool's update method.

Using select vs. of traverseLeafNodes for code optimization.
Better documentation for updateTools()

Removed unneeded code.

Change-Id: I7c0baa1cc0f7fb731d6e28b175a76e931e9e2961
2012-09-19 11:16:10 -07:00

83 lines
2 KiB
JavaScript

/**
* VisualEditor user interface HistoryButtonTool class.
*
* @copyright 2011-2012 VisualEditor Team and others; see AUTHORS.txt
* @license The MIT License (MIT); see LICENSE.txt
*/
/**
* Creates an ve.ui.HistoryButtonTool object.
*
* @class
* @constructor
* @extends {ve.ui.ButtonTool}
* @param {ve.ui.Toolbar} toolbar
* @param {String} name
* @param title
* @param data
*/
ve.ui.HistoryButtonTool = function VeUiHistoryButtonTool( toolbar, name, title, data ) {
// Parent constructor
ve.ui.ButtonTool.call( this, toolbar, name, title );
// Properties
this.data = data;
this.enabled = false;
this.toolbar.getSurfaceView().model.addListenerMethod( this, 'history', 'onUpdateState' );
};
/* Inheritance */
ve.inheritClass( ve.ui.HistoryButtonTool, ve.ui.ButtonTool );
/* Methods */
ve.ui.HistoryButtonTool.prototype.onClick = function () {
switch ( this.name ) {
case 'undo':
case 'redo':
if ( this.isButtonEnabled( this.name ) ) {
var surfaceView = this.toolbar.getSurfaceView();
surfaceView.stopPolling();
surfaceView.showSelection(
surfaceView.getModel()[this.name]( 1 ) || surfaceView.model.selection
);
surfaceView.clearPollData();
surfaceView.startPolling();
}
break;
}
};
ve.ui.HistoryButtonTool.prototype.onUpdateState = function () {
this.enabled = this.isButtonEnabled( this.name );
this.updateEnabled();
};
ve.ui.HistoryButtonTool.prototype.isButtonEnabled = function ( name ) {
var surfaceModel = this.toolbar.getSurfaceView().getModel();
switch ( name ) {
case 'undo':
return surfaceModel.bigStack.length - surfaceModel.undoIndex > 0;
case 'redo':
return surfaceModel.undoIndex > 0;
default:
return false;
}
};
/* Registration */
ve.ui.Tool.tools.undo = {
'constructor': ve.ui.HistoryButtonTool,
'name': 'undo',
'title': ve.msg( 'visualeditor-historybutton-undo-tooltip' )
};
ve.ui.Tool.tools.redo = {
'constructor': ve.ui.HistoryButtonTool,
'name': 'redo',
'title': ve.msg( 'visualeditor-historybutton-redo-tooltip' )
};