wikimedia/mediawiki-extensions-VisualEditor

View on GitHub
modules/ve-mw/preinit/ve.init.MWEditModeTool.js

Summary

Maintainability
A
2 hrs
Test Coverage
/*!
 * VisualEditor MediaWiki edit mode tool classes.
 *
 * @copyright See AUTHORS.txt
 * @license The MIT License (MIT); see LICENSE.txt
 */

mw.libs.ve = mw.libs.ve || {};

/**
 * MediaWiki edit mode tool.
 *
 * @class
 * @abstract
 * @extends OO.ui.Tool
 * @constructor
 * @param {OO.ui.ToolGroup} toolGroup
 * @param {Object} [config] Config options
 */
mw.libs.ve.MWEditModeTool = function VeUiMWEditModeTool() {
    // Parent constructor
    mw.libs.ve.MWEditModeTool.super.apply( this, arguments );

    this.modeAvailable = null;
};

/* Inheritance */

OO.inheritClass( mw.libs.ve.MWEditModeTool, OO.ui.Tool );

/* Static Properties */

mw.libs.ve.MWEditModeTool.static.editMode = null;
mw.libs.ve.MWEditModeTool.static.group = 'editMode';
mw.libs.ve.MWEditModeTool.static.autoAddToCatchall = false;
mw.libs.ve.MWEditModeTool.static.unavailableTooltip = null;

/* Methods */

/**
 * Switch editors
 */
mw.libs.ve.MWEditModeTool.prototype.switch = function () {
    this.toolbar.emit( 'switchEditor', this.constructor.static.editMode );
};

/**
 * Get current edit mode
 *
 * @return {string} Current edit mode
 */
mw.libs.ve.MWEditModeTool.prototype.getMode = function () {
    return 'source';
};

/**
 * Check if edit mode is available
 *
 * @param {string} Edit mode
 * @return {boolean} Edit mode is available
 */
mw.libs.ve.MWEditModeTool.prototype.isModeAvailable = function () {
    return true;
};

/**
 * @inheritdoc
 */
mw.libs.ve.MWEditModeTool.prototype.onSelect = function () {
    if ( this.getMode() !== this.constructor.static.editMode ) {
        this.switch();
    }
    this.setActive( this.getMode() === this.constructor.static.editMode );
};

/**
 * @inheritdoc
 */
mw.libs.ve.MWEditModeTool.prototype.onUpdateState = function () {
    const modeAvailable = this.isModeAvailable( this.constructor.static.editMode );

    // Change title if state has changed
    if ( this.modeAvailable !== modeAvailable ) {
        this.$link.attr( 'title', modeAvailable ?
            OO.ui.resolveMsg( this.constructor.static.title ) :
            OO.ui.resolveMsg( this.constructor.static.unavailableTooltip )
        );
        this.setDisabled( !modeAvailable );
        this.modeAvailable = modeAvailable;
    }
    this.setActive( this.getMode() === this.constructor.static.editMode );
};

/**
 * MediaWiki edit mode visual tool.
 *
 * @class
 * @extends mw.libs.ve.MWEditModeTool
 * @constructor
 * @param {OO.ui.ToolGroup} toolGroup
 * @param {Object} [config] Config options
 */
mw.libs.ve.MWEditModeVisualTool = function VeUiMWEditModeVisualTool() {
    // Parent constructor
    mw.libs.ve.MWEditModeVisualTool.super.apply( this, arguments );
};

OO.inheritClass( mw.libs.ve.MWEditModeVisualTool, mw.libs.ve.MWEditModeTool );

mw.libs.ve.MWEditModeVisualTool.static.editMode = 'visual';
mw.libs.ve.MWEditModeVisualTool.static.name = 'editModeVisual';
mw.libs.ve.MWEditModeVisualTool.static.icon = 'eye';
mw.libs.ve.MWEditModeVisualTool.static.title =
    OO.ui.deferMsg( 'visualeditor-mweditmodeve-tool-current' );
mw.libs.ve.MWEditModeVisualTool.static.unavailableTooltip =
    OO.ui.deferMsg( 'visualeditor-mweditmodeve-tool-unavailable' );

/**
 * MediaWiki edit mode source tool.
 *
 * @class
 * @extends mw.libs.ve.MWEditModeTool
 * @constructor
 * @param {OO.ui.ToolGroup} toolGroup
 * @param {Object} [config] Config options
 */
mw.libs.ve.MWEditModeSourceTool = function VeUiMWEditModeSourceTool() {
    // Parent constructor
    mw.libs.ve.MWEditModeSourceTool.super.apply( this, arguments );
};

OO.inheritClass( mw.libs.ve.MWEditModeSourceTool, mw.libs.ve.MWEditModeTool );

mw.libs.ve.MWEditModeSourceTool.static.editMode = 'source';
mw.libs.ve.MWEditModeSourceTool.static.name = 'editModeSource';
mw.libs.ve.MWEditModeSourceTool.static.icon = 'wikiText';
mw.libs.ve.MWEditModeSourceTool.static.title =
    OO.ui.deferMsg( 'visualeditor-mweditmodesource-tool-current' );
mw.libs.ve.MWEditModeSourceTool.static.unavailableTooltip =
    OO.ui.deferMsg( 'visualeditor-mweditmodesource-tool-unavailable' );