/*!
 * VisualEditor UserInterface CheckListTool classes.
 *
 * @copyright See AUTHORS.txt
 */

/**
 * UserInterface list tool.
 *
 * @class
 * @extends ve.ui.Tool
 * @constructor
 * @param {OO.ui.ToolGroup} toolGroup
 * @param {Object} [config] Configuration options
 */
ve.ui.CheckListTool = function VeUiCheckListTool() {
	// Parent constructor
	ve.ui.CheckListTool.super.apply( this, arguments );

	// Properties
	this.method = null;
};

/* Inheritance */

OO.inheritClass( ve.ui.CheckListTool, ve.ui.Tool );

/* Static Properties */

ve.ui.CheckListTool.static.deactivateOnSelect = false;

/* Methods */

/**
 * @inheritdoc
 */
ve.ui.CheckListTool.prototype.onUpdateState = function ( fragment ) {
	// Parent method
	ve.ui.CheckListTool.super.prototype.onUpdateState.apply( this, arguments );

	const isMatching = fragment.hasMatchingAncestor( 'checkList' );
	this.setActive( isMatching );
};

ve.ui.CheckListTool.static.name = 'checkList';
ve.ui.CheckListTool.static.group = 'structure';
ve.ui.CheckListTool.static.icon = 'checkAll';
ve.ui.CheckListTool.static.title =
	OO.ui.deferMsg( 'visualeditor-listbutton-check-tooltip' );
ve.ui.CheckListTool.static.commandName = 'checkList';

/* Registration */

ve.ui.toolFactory.register( ve.ui.CheckListTool );

/* Command */

ve.ui.commandRegistry.register(
	new ve.ui.Command(
		'checkList', 'list', 'toggle',
		{ args: [ null, false, 'checkList' ], supportedSelections: [ 'linear' ] }
	)
);

/* Command help */

ve.ui.commandHelpRegistry.register( 'formatting', 'listCheckList', {
	sequences: [ 'checkList' ], label: OO.ui.deferMsg( 'visualeditor-listbutton-check-tooltip' )
} );

/* Sequence */

ve.ui.sequenceRegistry.register(
	new ve.ui.Sequence( 'checkList', 'checkList', [ { type: 'paragraph' }, '[', ']', ' ' ], 3 )
);
