mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor
synced 2024-12-04 02:39:02 +00:00
7be9f92de7
Surface model annotate method previously cleared basic tool annotation objects. Now that bold and other annotations have htmlAttributes from parsoid, we must gather annotations by type from selection and iterate through to properly clear. Change-Id: Id53bf5733078524ae5aac376e01b9679eb8c32df
104 lines
2.6 KiB
JavaScript
104 lines
2.6 KiB
JavaScript
/**
|
|
* VisualEditor user interface AnnotationButtonTool class.
|
|
*
|
|
* @copyright 2011-2012 VisualEditor Team and others; see AUTHORS.txt
|
|
* @license The MIT License (MIT); see LICENSE.txt
|
|
*/
|
|
|
|
/**
|
|
* Creates an ve.ui.AnnotationButtonTool object.
|
|
*
|
|
* @class
|
|
* @constructor
|
|
* @extends {ve.ui.ButtonTool}
|
|
* @param {ve.ui.Toolbar} toolbar
|
|
* @param {String} name
|
|
* @param title
|
|
* @param {Object} data
|
|
*/
|
|
ve.ui.AnnotationButtonTool = function VeUiAnnotationButtonTool( toolbar, name, title, data ) {
|
|
// Parent constructor
|
|
ve.ui.ButtonTool.call( this, toolbar, name, title );
|
|
|
|
// Properties
|
|
this.annotation = data.annotation;
|
|
this.inspector = data.inspector;
|
|
this.active = false;
|
|
};
|
|
|
|
/* Inheritance */
|
|
|
|
ve.inheritClass( ve.ui.AnnotationButtonTool, ve.ui.ButtonTool );
|
|
|
|
/* Methods */
|
|
|
|
ve.ui.AnnotationButtonTool.prototype.onClick = function () {
|
|
var surfaceView = this.toolbar.getSurfaceView(),
|
|
surfaceModel = surfaceView.model,
|
|
documentModel = surfaceModel.getDocument(),
|
|
selection = surfaceModel.getSelection(),
|
|
annotations,
|
|
i;
|
|
|
|
if ( this.inspector ) {
|
|
if ( selection && selection.getLength() ) {
|
|
surfaceView.contextView.openInspector( this.inspector );
|
|
}
|
|
} else {
|
|
if ( this.active ) {
|
|
// Get all annotations by type.
|
|
annotations = documentModel
|
|
.getAnnotationsFromRange( surfaceModel.getSelection() )
|
|
.getAnnotationsOfType( this.annotation.type )
|
|
.get();
|
|
// Clear each selected annotation.
|
|
for( i = 0; i < annotations.length; i++ ) {
|
|
surfaceModel.annotate( 'clear', annotations[i] );
|
|
}
|
|
} else {
|
|
// Set annotation.
|
|
surfaceModel.annotate( 'set', this.annotation );
|
|
}
|
|
}
|
|
};
|
|
|
|
ve.ui.AnnotationButtonTool.prototype.onUpdateState = function ( annotations ) {
|
|
if ( annotations.hasAnnotationOfType( this.annotation.type ) ) {
|
|
this.$.addClass( 've-ui-toolbarButtonTool-down' );
|
|
this.active = true;
|
|
} else {
|
|
this.$.removeClass( 've-ui-toolbarButtonTool-down' );
|
|
this.active = false;
|
|
}
|
|
};
|
|
|
|
/* Registration */
|
|
|
|
ve.ui.Tool.tools.bold = {
|
|
'constructor': ve.ui.AnnotationButtonTool,
|
|
'name': 'bold',
|
|
'title': ve.msg( 'visualeditor-annotationbutton-bold-tooltip' ),
|
|
'data': {
|
|
'annotation': { 'type': 'textStyle/bold' }
|
|
}
|
|
};
|
|
|
|
ve.ui.Tool.tools.italic = {
|
|
'constructor': ve.ui.AnnotationButtonTool,
|
|
'name': 'italic',
|
|
'title': ve.msg( 'visualeditor-annotationbutton-italic-tooltip' ),
|
|
'data': {
|
|
'annotation': { 'type': 'textStyle/italic' }
|
|
}
|
|
};
|
|
|
|
ve.ui.Tool.tools.link = {
|
|
'constructor': ve.ui.AnnotationButtonTool,
|
|
'name': 'link',
|
|
'title': ve.msg( 'visualeditor-annotationbutton-link-tooltip' ),
|
|
'data': {
|
|
'annotation': { 'type': 'link/WikiLink', 'data': { 'title': '' } },
|
|
'inspector': 'link'
|
|
}
|
|
};
|