wikimedia/mediawiki-extensions-VisualEditor

View on GitHub
editcheck/modules/EditCheckInspector.js

Summary

Maintainability
A
3 hrs
Test Coverage
/*!
 * VisualEditor UserInterface EditCheckInspector class.
 *
 * @copyright See AUTHORS.txt
 */

/**
 * Edit check inspector
 *
 * @class
 * @extends ve.ui.FragmentInspector
 *
 * @constructor
 * @param {Object} [config] Configuration options
 */
ve.ui.EditCheckInspector = function VeUiEditCheckInspector( config ) {
    // Parent constructor
    ve.ui.EditCheckInspector.super.call( this, config );

    // Pre-initialization
    this.$element.addClass( 've-ui-editCheckInspector' );
};

/* Inheritance */

OO.inheritClass( ve.ui.EditCheckInspector, ve.ui.FragmentInspector );

ve.ui.EditCheckInspector.static.name = 'editCheckReferencesInspector';

// ve.ui.EditCheckInspector.static.title = OO.ui.deferMsg( 'editcheck-dialog-title' );
ve.ui.EditCheckInspector.static.title = OO.ui.deferMsg( 'editcheck-dialog-addref-title' );

// ve.ui.EditCheckInspector.static.size = 'context';

ve.ui.EditCheckInspector.static.actions = [
    {
        label: OO.ui.deferMsg( 'visualeditor-dialog-action-cancel' ),
        flags: [ 'safe', 'back' ],
        modes: [ 'mobile', 'desktop' ]
    },
    {
        action: 'continue',
        icon: 'next',
        flags: [ 'primary', 'progressive' ],
        modes: [ 'mobile' ]
    }
];

/* Methods */

/**
 * @inheritdoc
 */
ve.ui.EditCheckInspector.prototype.initialize = function () {
    // Parent method
    ve.ui.EditCheckInspector.super.prototype.initialize.call( this );

    // Survey panel
    this.answerRadioSelect = new OO.ui.RadioSelectWidget( {
        items: [
            new OO.ui.RadioOptionWidget( {
                data: 'uncertain',
                label: ve.msg( 'editcheck-dialog-addref-reject-uncertain' )
            } ),
            new OO.ui.RadioOptionWidget( {
                data: 'common-knowledge',
                label: ve.msg( 'editcheck-dialog-addref-reject-common-knowledge' )
            } ),
            new OO.ui.RadioOptionWidget( {
                data: 'irrelevant',
                label: ve.msg( 'editcheck-dialog-addref-reject-irrelevant' )
            } ),
            new OO.ui.RadioOptionWidget( {
                data: 'other',
                label: ve.msg( 'editcheck-dialog-addref-reject-other' )
            } )
        ]
    } );
    this.answerRadioSelect.connect( this, { select: 'updateActions' } );

    this.answerConfirm = new OO.ui.ButtonWidget( {
        flags: [ 'progressive' ],
        framed: false,
        label: ve.msg( 'ooui-dialog-process-continue' ),
        disabled: true
    } );
    this.answerConfirm.toggle( !OO.ui.isMobile() );
    this.answerConfirm.connect( this, { click: [ 'executeAction', 'continue' ] } );

    this.form.addItems(
        new OO.ui.FieldsetLayout( {
            label: ve.msg( 'editcheck-dialog-addref-reject-question' ),
            items: [
                new OO.ui.FieldLayout( this.answerRadioSelect, {
                    label: ve.msg( 'editcheck-dialog-addref-reject-description' ),
                    align: 'top'
                } ),
                new OO.ui.FieldLayout( this.answerConfirm, {
                    align: 'left'
                } )
            ]
        } )
    );
};

ve.ui.EditCheckInspector.prototype.updateActions = function () {
    const isSelected = !!this.answerRadioSelect.findSelectedItem();
    // desktop
    this.answerConfirm.setDisabled( !isSelected );
    // mobile
    this.actions.setAbilities( { continue: isSelected } );
};

/**
 * @inheritdoc
 */
ve.ui.EditCheckInspector.prototype.getSetupProcess = function ( data ) {
    data = data || {};
    return ve.ui.EditCheckInspector.super.prototype.getSetupProcess.call( this, data )
        .first( function () {
            this.surface = data.surface;
            this.saveProcessDeferred = data.saveProcessDeferred;
            this.answerRadioSelect.selectItem( null );
        }, this );
};

/**
 * @inheritdoc
 */
ve.ui.EditCheckInspector.prototype.getReadyProcess = function ( data ) {
    return ve.ui.EditCheckInspector.super.prototype.getReadyProcess.call( this, data )
        .first( function () {
            this.actions.setMode( OO.ui.isMobile() ? 'mobile' : 'desktop' );
            this.updateActions();
        }, this );
};

ve.ui.EditCheckInspector.prototype.getActionProcess = function ( action ) {
    if ( action === '' ) {
        return new OO.ui.Process( function () {
            this.close();
        }, this );
    }

    if ( action === 'continue' ) {
        return new OO.ui.Process( function () {
            this.close( { action: 'reject', reason: this.answerRadioSelect.findSelectedItem().getData() } );
            ve.track( 'activity.editCheckReferences', { action: 'dialog-choose-' + this.answerRadioSelect.findSelectedItem().getData() } );
        }, this );
    }

    return ve.ui.EditCheckInspector.super.prototype.getActionProcess.call( this, action );
};

/* Registration */

ve.ui.windowFactory.register( ve.ui.EditCheckInspector );