Merge "Make toolbars, toolgroups and tools toolFactory independent"

This commit is contained in:
jenkins-bot 2013-10-03 22:42:58 +00:00 committed by Gerrit Code Review
commit 2b46215a2c
7 changed files with 37 additions and 15 deletions

View file

@ -90,7 +90,7 @@ ve.ui.MWSyntaxHighlightSimpleSurface = function VeUiMWSyntaxHighlightSimpleSurfa
this.searchRegex = null; this.searchRegex = null;
this.searchHasResult = false; this.searchHasResult = false;
this.toolbar = new ve.ui.Toolbar({ '$$': this.$$ }); this.toolbar = new ve.ui.Toolbar( ve.ui.syntaxHighlightEditorToolFactory, { '$$': this.$$ });
this.toolbar.setup([{ this.toolbar.setup([{
'include':[ 'synhiUndo', 'synhiRedo', 'synhiIndent', 'synhiBeautify' ] 'include':[ 'synhiUndo', 'synhiRedo', 'synhiIndent', 'synhiBeautify' ]
}]); }]);

View file

@ -37,6 +37,12 @@ ve.ui.MWSyntaxHighlightTool.static.autoAdd = true;
ve.ui.toolFactory.register( ve.ui.MWSyntaxHighlightTool ); ve.ui.toolFactory.register( ve.ui.MWSyntaxHighlightTool );
/*
* Factory for SyntaxHighlight tools.
*/
ve.ui.syntaxHighlightEditorToolFactory = new ve.ui.ToolFactory();
/* SyntaxHighlight Editor Tools */
ve.ui.MWSyntaxHighlightEditorTool = function VeUiMWSyntaxHighlightEditorTool( toolbar, config ) { ve.ui.MWSyntaxHighlightEditorTool = function VeUiMWSyntaxHighlightEditorTool( toolbar, config ) {
// Parent constructor // Parent constructor
@ -67,7 +73,7 @@ ve.ui.MWSynHiUndoTool.static.method = 'undo';
ve.ui.MWSynHiUndoTool.static.icon = 'undo'; ve.ui.MWSynHiUndoTool.static.icon = 'undo';
ve.ui.MWSynHiUndoTool.static.titleMessage = 'visualeditor-historybutton-undo-tooltip'; ve.ui.MWSynHiUndoTool.static.titleMessage = 'visualeditor-historybutton-undo-tooltip';
ve.ui.MWSynHiUndoTool.static.autoAdd = false; ve.ui.MWSynHiUndoTool.static.autoAdd = false;
ve.ui.toolFactory.register( ve.ui.MWSynHiUndoTool ); ve.ui.syntaxHighlightEditorToolFactory.register( ve.ui.MWSynHiUndoTool );
ve.ui.MWSynHiRedoTool = function VeUiMWSynHiRedoTool( toolbar, config ) { ve.ui.MWSynHiRedoTool = function VeUiMWSynHiRedoTool( toolbar, config ) {
ve.ui.MWSyntaxHighlightEditorTool.call( this, toolbar, config ); ve.ui.MWSyntaxHighlightEditorTool.call( this, toolbar, config );
@ -79,7 +85,7 @@ ve.ui.MWSynHiRedoTool.static.method = 'redo';
ve.ui.MWSynHiRedoTool.static.icon = 'redo'; ve.ui.MWSynHiRedoTool.static.icon = 'redo';
ve.ui.MWSynHiRedoTool.static.titleMessage = 'visualeditor-historybutton-redo-tooltip'; ve.ui.MWSynHiRedoTool.static.titleMessage = 'visualeditor-historybutton-redo-tooltip';
ve.ui.MWSynHiRedoTool.static.autoAdd = false; ve.ui.MWSynHiRedoTool.static.autoAdd = false;
ve.ui.toolFactory.register( ve.ui.MWSynHiRedoTool ); ve.ui.syntaxHighlightEditorToolFactory.register( ve.ui.MWSynHiRedoTool );
ve.ui.MWSynHiIndentTool = function VeUiMWSynHiIndentTool( toolbar, config ) { ve.ui.MWSynHiIndentTool = function VeUiMWSynHiIndentTool( toolbar, config ) {
ve.ui.MWSyntaxHighlightEditorTool.call( this, toolbar, config ); ve.ui.MWSyntaxHighlightEditorTool.call( this, toolbar, config );
@ -91,7 +97,7 @@ ve.ui.MWSynHiIndentTool.static.method = 'indent';
ve.ui.MWSynHiIndentTool.static.icon = 'indent-list'; ve.ui.MWSynHiIndentTool.static.icon = 'indent-list';
ve.ui.MWSynHiIndentTool.static.titleMessage = ''; ve.ui.MWSynHiIndentTool.static.titleMessage = '';
ve.ui.MWSynHiIndentTool.static.autoAdd = false; ve.ui.MWSynHiIndentTool.static.autoAdd = false;
ve.ui.toolFactory.register( ve.ui.MWSynHiIndentTool ); ve.ui.syntaxHighlightEditorToolFactory.register( ve.ui.MWSynHiIndentTool );
ve.ui.MWSynHiBeautifyTool = function VeUiMWSynHiBeautifyTool( toolbar, config ) { ve.ui.MWSynHiBeautifyTool = function VeUiMWSynHiBeautifyTool( toolbar, config ) {
ve.ui.MWSyntaxHighlightEditorTool.call( this, toolbar, config ); ve.ui.MWSyntaxHighlightEditorTool.call( this, toolbar, config );
@ -103,4 +109,4 @@ ve.ui.MWSynHiBeautifyTool.static.method = 'doBeautify';
ve.ui.MWSynHiBeautifyTool.static.icon = 'reformat'; ve.ui.MWSynHiBeautifyTool.static.icon = 'reformat';
ve.ui.MWSynHiBeautifyTool.static.titleMessage = ''; ve.ui.MWSynHiBeautifyTool.static.titleMessage = '';
ve.ui.MWSynHiBeautifyTool.static.autoAdd = false; ve.ui.MWSynHiBeautifyTool.static.autoAdd = false;
ve.ui.toolFactory.register( ve.ui.MWSynHiBeautifyTool ); ve.ui.syntaxHighlightEditorToolFactory.register( ve.ui.MWSynHiBeautifyTool );

View file

@ -76,6 +76,8 @@ ve.ui.DialogTool.prototype.onSelect = function () {
*/ */
ve.ui.DialogTool.prototype.onUpdateState = function ( nodes ) { ve.ui.DialogTool.prototype.onUpdateState = function ( nodes ) {
if ( nodes.length ) { if ( nodes.length ) {
this.setActive( ve.ui.toolFactory.getToolForNode( nodes[0] ) === this.constructor ); this.setActive(
this.toolbar.getToolFactory().getToolForNode( nodes[0] ) === this.constructor
);
} }
}; };

View file

@ -75,9 +75,8 @@ ve.ui.InspectorTool.prototype.onSelect = function () {
* @param {ve.dm.AnnotationSet} partial Annotations that cover some or all of the current selection * @param {ve.dm.AnnotationSet} partial Annotations that cover some or all of the current selection
*/ */
ve.ui.InspectorTool.prototype.onUpdateState = function ( nodes, full ) { ve.ui.InspectorTool.prototype.onUpdateState = function ( nodes, full ) {
this.setActive( var toolFactory = this.toolbar.getToolFactory();
ve.ui.toolFactory.getToolsForAnnotations( full ).indexOf( this.constructor ) !== -1 this.setActive( toolFactory.getToolsForAnnotations( full ).indexOf( this.constructor ) !== -1 );
);
}; };
/** /**

View file

@ -22,7 +22,7 @@ ve.ui.SurfaceToolbar = function VeUiSurfaceToolbar( surface, options ) {
options = options || {}; options = options || {};
// Parent constructor // Parent constructor
ve.ui.Toolbar.call( this, options ); ve.ui.Toolbar.call( this, ve.ui.toolFactory, options );
// Properties // Properties
this.surface = surface; this.surface = surface;

View file

@ -53,7 +53,7 @@ ve.ui.ToolGroup = function VeUiToolGroup( toolbar, config ) {
'mouseover': ve.bind( this.onMouseOver, this ), 'mouseover': ve.bind( this.onMouseOver, this ),
'mouseout': ve.bind( this.onMouseOut, this ) 'mouseout': ve.bind( this.onMouseOut, this )
} ); } );
ve.ui.toolFactory.connect( this, { 'register': 'onToolFactoryRegister' } ); this.toolbar.getToolFactory().connect( this, { 'register': 'onToolFactoryRegister' } );
ve.ui.triggerRegistry.connect( this, { 'register': 'onTriggerRegistryRegister' } ); ve.ui.triggerRegistry.connect( this, { 'register': 'onTriggerRegistryRegister' } );
// Initialization // Initialization
@ -267,7 +267,9 @@ ve.ui.ToolGroup.prototype.populate = function () {
names = {}, names = {},
add = [], add = [],
remove = [], remove = [],
list = ve.ui.toolFactory.getTools( this.include, this.exclude, this.promote, this.demote ); list = this.toolbar.getToolFactory().getTools(
this.include, this.exclude, this.promote, this.demote
);
// Build a list of needed tools // Build a list of needed tools
for ( i = 0, len = list.length; i < len; i++ ) { for ( i = 0, len = list.length; i < len; i++ ) {
@ -276,7 +278,8 @@ ve.ui.ToolGroup.prototype.populate = function () {
tool = this.tools[name]; tool = this.tools[name];
if ( !tool ) { if ( !tool ) {
// Auto-initialize tools on first use // Auto-initialize tools on first use
this.tools[name] = tool = ve.ui.toolFactory.create( name, this.toolbar ); this.tools[name] = tool =
this.toolbar.getToolFactory().create( name, this.toolbar );
this.updateToolTitle( name ); this.updateToolTitle( name );
} }
this.toolbar.reserveTool( name ); this.toolbar.reserveTool( name );
@ -315,7 +318,7 @@ ve.ui.ToolGroup.prototype.destroy = function () {
var name; var name;
this.clearItems(); this.clearItems();
ve.ui.toolFactory.disconnect( this ); this.toolbar.getToolFactory().disconnect( this );
for ( name in this.tools ) { for ( name in this.tools ) {
this.toolbar.releaseTool( name ); this.toolbar.releaseTool( name );
this.tools[name].disconnect( this ).destroy(); this.tools[name].disconnect( this ).destroy();

View file

@ -14,11 +14,12 @@
* @mixins ve.ui.GroupElement * @mixins ve.ui.GroupElement
* *
* @constructor * @constructor
* @param {ve.Factory} toolFactory Factory for creating tools
* @param {Object} [options] Configuration options * @param {Object} [options] Configuration options
* @cfg {boolean} [actions] Add an actions section opposite to the tools * @cfg {boolean} [actions] Add an actions section opposite to the tools
* @cfg {boolean} [shadow] Add a shadow below the toolbar * @cfg {boolean} [shadow] Add a shadow below the toolbar
*/ */
ve.ui.Toolbar = function VeUiToolbar( options ) { ve.ui.Toolbar = function VeUiToolbar( toolFactory, options ) {
// Configuration initialization // Configuration initialization
options = options || {}; options = options || {};
@ -30,6 +31,7 @@ ve.ui.Toolbar = function VeUiToolbar( options ) {
ve.ui.GroupElement.call( this, this.$$( '<div>' ) ); ve.ui.GroupElement.call( this, this.$$( '<div>' ) );
// Properties // Properties
this.toolFactory = toolFactory;
this.groups = []; this.groups = [];
this.tools = {}; this.tools = {};
this.$bar = this.$$( '<div>' ); this.$bar = this.$$( '<div>' );
@ -64,6 +66,16 @@ ve.mixinClass( ve.ui.Toolbar, ve.ui.GroupElement );
/* Methods */ /* Methods */
/**
* Get the tool factory.
*
* @method
* @returns {ve.Factory} Tool factory
*/
ve.ui.Toolbar.prototype.getToolFactory = function () {
return this.toolFactory;
};
/** /**
* Sets up handles and preloads required information for the toolbar to work. * Sets up handles and preloads required information for the toolbar to work.
* This must be called immediately after it is attached to a visible document. * This must be called immediately after it is attached to a visible document.