mediawiki-extensions-Visual.../modules/ve/ui/tools/ve.ui.DialogButtonTool.js
Trevor Parscal bf254f44da UI "Views" refactor
Objective:

Make it possible for inspectors to inspect nodes or annotations, rather
than only annotations. Meanwhile, also make it possible for dialogs to
edit an annotation.

Strategy:

Switch from using type patterns to associate inspectors with annotations
to using arrays of classes, similar to how dialogs already work.
Introduce a view registry which provides lookups for relationships
between models and views. This is more centralized and less repetitive
than implement matching functions for both annotations and nodes in both
the dialog and inspector factories.

Changes:

*.php
* Added links to new file

ve.AnnotationAction.js
* Removed unused parameter to filter annotations using a string or regexp

ve.dm.AnnotationSet.js
* Switched from property/value arguments to callbacks

ve.ui.*(Dialog|Inspector).js
* Replaced type patterns with class lists
* Added class to view registry

ve.ui.*Tool.js, ve.ui.Context.js
* Updated model/view relationship lookup

ve.ui.*Factory.js
* Removed overly-specific lookup functions

ve.ui.Inspector.js
* Removed typePattern property
* Updated model/view relationship lookup

ve.ui.ViewRegistry.js
* New class!
* Migrated node and annotation lookup functions from factories

Change-Id: Ic2bbcf072fdd87e5ce8a03fe1ae3e6d8d50e2593
2013-04-18 15:53:50 -07:00

67 lines
1.5 KiB
JavaScript

/*!
* VisualEditor UserInterface DialogButtonTool class.
*
* @copyright 2011-2013 VisualEditor Team and others; see AUTHORS.txt
* @license The MIT License (MIT); see LICENSE.txt
*/
/**
* UserInterface dialog button tool.
*
* @abstract
* @class
* @extends ve.ui.ButtonTool
* @constructor
* @param {ve.ui.Toolbar} toolbar
* @param {Object} [config] Config options
*/
ve.ui.DialogButtonTool = function VeUiDialogButtonTool( toolbar, config ) {
// Parent constructor
ve.ui.ButtonTool.call( this, toolbar, config );
};
/* Inheritance */
ve.inheritClass( ve.ui.DialogButtonTool, ve.ui.ButtonTool );
/* Static Properties */
/**
* Symbolic name of dialog the button opens.
*
* @abstract
* @static
* @property
* @type {string}
* @inheritable
*/
ve.ui.DialogButtonTool.static.dialog = '';
/* Methods */
/**
* Handle the button being clicked.
*
* @method
*/
ve.ui.DialogButtonTool.prototype.onClick = function () {
this.toolbar.getSurface().dialogs.open( this.constructor.static.dialog );
};
/**
* Handle the toolbar state being updated.
*
* @method
* @param {ve.dm.Node[]} nodes List of nodes covered by the current selection
* @param {ve.dm.AnnotationSet} full Annotations that cover all of the current selection
* @param {ve.dm.AnnotationSet} partial Annotations that cover some or all of the current selection
*/
ve.ui.DialogButtonTool.prototype.onUpdateState = function ( nodes ) {
if ( nodes.length ) {
this.setActive(
ve.ui.viewRegistry.getViewsForNode( nodes[0] )
.indexOf( this.constructor.static.dialog ) !== -1
);
}
};