mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor
synced 2024-12-20 02:01:20 +00:00
d5857c20f5
Technically the old BookletLayout sidebar is still there. But it's never visible, effectively dead, and meant to be removed. This patch just empties the OutlineItems of all template dialog related pages without actually disabling the old sidebar. Note this partly reverts Ie57f462. Bug: T310859 Bug: T310866 Change-Id: Ic0b7d703f369045ed342426563f8eeb3e47046db
235 lines
6.6 KiB
JavaScript
235 lines
6.6 KiB
JavaScript
/**
|
|
* Placeholder page for a currently unnamed parameter. Represented as an unnamed
|
|
* {@see ve.dm.MWParameterModel} in the corresponding {@see ve.dm.MWTemplateModel}.
|
|
*
|
|
* @class
|
|
* @extends OO.ui.PageLayout
|
|
*
|
|
* @constructor
|
|
* @param {ve.dm.MWParameterModel} parameter Reference to a placeholder parameter with an empty
|
|
* name, as well as to the template the parameter belongs to
|
|
* @param {string} name Unique symbolic name of page
|
|
* @param {Object} [config] Configuration options
|
|
* @cfg {jQuery} [$overlay] Overlay to render dropdowns in
|
|
*/
|
|
ve.ui.MWAddParameterPage = function VeUiMWAddParameterPage( parameter, name, config ) {
|
|
// Parent constructor
|
|
ve.ui.MWAddParameterPage.super.call( this, name, ve.extendObject( {
|
|
scrollable: false
|
|
}, config ) );
|
|
|
|
this.template = parameter.getTemplate();
|
|
this.isExpanded = false;
|
|
|
|
// Header button to expand
|
|
this.addParameterInputHeader = new OO.ui.ButtonWidget( {
|
|
label: ve.msg( 'visualeditor-dialog-transclusion-add-undocumented-param' ),
|
|
icon: 'add',
|
|
framed: false,
|
|
inline: true,
|
|
classes: [ 've-ui-mwTransclusionDialog-addParameterFieldset-header' ]
|
|
} )
|
|
.connect( this, { click: 'togglePlaceholder' } );
|
|
|
|
this.addParameterFieldset = new OO.ui.FieldsetLayout( {
|
|
label: this.addParameterInputHeader.$element,
|
|
classes: [ 've-ui-mwTransclusionDialog-addParameterFieldset' ]
|
|
} );
|
|
|
|
// Init visibility
|
|
this.togglePlaceholder( false );
|
|
|
|
// Initialization
|
|
this.$element
|
|
.addClass( 've-ui-mwAddParameterPage' )
|
|
.append( this.addParameterFieldset.$element );
|
|
};
|
|
|
|
/* Inheritance */
|
|
|
|
OO.inheritClass( ve.ui.MWAddParameterPage, OO.ui.PageLayout );
|
|
|
|
/* Methods */
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
ve.ui.MWAddParameterPage.prototype.initialize = function () {
|
|
this.template
|
|
.connect( this, {
|
|
// There is a "change" event, but it triggers way to often even for content changes
|
|
add: 'onTemplateParametersChanged',
|
|
remove: 'onTemplateParametersChanged'
|
|
} );
|
|
|
|
this.paramInputField = new OO.ui.TextInputWidget( {
|
|
placeholder: ve.msg( 'visualeditor-dialog-transclusion-add-param-placeholder' )
|
|
} )
|
|
.connect( this, {
|
|
change: 'updateParameterNameValidation',
|
|
enter: 'onParameterNameSubmitted'
|
|
} );
|
|
this.saveButton = new OO.ui.ButtonWidget( {
|
|
label: ve.msg( 'visualeditor-dialog-transclusion-add-param-save' ),
|
|
flags: [ 'primary', 'progressive' ],
|
|
disabled: true
|
|
} )
|
|
.connect( this, { click: 'onParameterNameSubmitted' } );
|
|
|
|
this.actionFieldLayout = new OO.ui.ActionFieldLayout(
|
|
this.paramInputField,
|
|
this.saveButton,
|
|
{
|
|
classes: [ 've-ui-mwTransclusionDialog-addParameterFieldset-input' ],
|
|
align: 'top'
|
|
}
|
|
);
|
|
|
|
var link = this.template.getTitle() || this.template.getTarget().wt;
|
|
var $helpText = mw.message(
|
|
'visualeditor-dialog-transclusion-add-param-help',
|
|
link
|
|
).parseDom();
|
|
ve.init.platform.linkCache.styleElement( link, $helpText.filter( 'a:not(.external)' ) );
|
|
|
|
// Copied from {@see OO.ui.FieldsetLayout} because there is no method to do this later
|
|
var helpWidget = new OO.ui.LabelWidget( {
|
|
label: $helpText,
|
|
classes: [ 'oo-ui-inline-help' ]
|
|
} );
|
|
|
|
ve.targetLinksToNewWindow( helpWidget.$element[ 0 ] );
|
|
|
|
this.addParameterFieldset.$element.append(
|
|
helpWidget.$element,
|
|
this.addParameterFieldset.$group,
|
|
this.actionFieldLayout.$element
|
|
);
|
|
};
|
|
|
|
/**
|
|
* @inheritDoc OO.ui.PanelLayout
|
|
*/
|
|
ve.ui.MWAddParameterPage.prototype.focus = function () {
|
|
if ( this.isExpanded ) {
|
|
this.paramInputField.focus();
|
|
return;
|
|
}
|
|
|
|
// Parent method
|
|
ve.ui.MWAddParameterPage.super.prototype.focus.apply( this, arguments );
|
|
};
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
ve.ui.MWAddParameterPage.prototype.onTemplateParametersChanged = function () {
|
|
this.updateParameterNameValidation( this.paramInputField.getValue() );
|
|
};
|
|
|
|
/**
|
|
* @private
|
|
* @param {string} value
|
|
*/
|
|
ve.ui.MWAddParameterPage.prototype.updateParameterNameValidation = function ( value ) {
|
|
var paramName = value.trim(),
|
|
errors = this.getValidationErrors( paramName );
|
|
|
|
this.actionFieldLayout.setErrors( errors );
|
|
this.saveButton.setDisabled( !paramName || errors.length );
|
|
};
|
|
|
|
/**
|
|
* @private
|
|
* @fires focusTemplateParameterById
|
|
*/
|
|
ve.ui.MWAddParameterPage.prototype.onParameterNameSubmitted = function () {
|
|
var name = this.paramInputField.getValue().trim();
|
|
if ( !name || this.saveButton.isDisabled() ) {
|
|
return;
|
|
}
|
|
|
|
this.paramInputField.setValue( '' );
|
|
|
|
if ( this.template.hasParameter( name ) ) {
|
|
return;
|
|
}
|
|
|
|
var param = new ve.dm.MWParameterModel( this.template, name );
|
|
this.template.addParameter( param );
|
|
this.emit( 'focusTemplateParameterById', param.getId() );
|
|
|
|
ve.track( 'activity.transclusion', {
|
|
action: 'add-unknown-parameter'
|
|
} );
|
|
};
|
|
|
|
/**
|
|
* @private
|
|
* @param {string} name Parameter name or alias
|
|
* @return {jQuery[]} An array as accepted by {@see OO.ui.FieldLayout.setErrors}
|
|
*/
|
|
ve.ui.MWAddParameterPage.prototype.getValidationErrors = function ( name ) {
|
|
if ( !name ) {
|
|
return [];
|
|
}
|
|
|
|
var forbiddenCharacter = name.match( /[={|}]/ );
|
|
if ( forbiddenCharacter ) {
|
|
return [ mw.message( 'visualeditor-dialog-transclusion-add-param-error-forbidden-char',
|
|
forbiddenCharacter[ 0 ] ).parseDom() ];
|
|
}
|
|
|
|
var key,
|
|
spec = this.template.getSpec();
|
|
|
|
if ( spec.getParameterAliases( name ).indexOf( name ) !== -1 ) {
|
|
key = 'visualeditor-dialog-transclusion-add-param-error-alias';
|
|
} else if ( this.template.hasParameter( name ) ) {
|
|
key = 'visualeditor-dialog-transclusion-add-param-error-exists-selected';
|
|
} else if ( spec.isParameterDeprecated( name ) ) {
|
|
key = 'visualeditor-dialog-transclusion-add-param-error-deprecated';
|
|
} else if ( spec.isKnownParameterOrAlias( name ) ) {
|
|
key = 'visualeditor-dialog-transclusion-add-param-error-exists-unselected';
|
|
}
|
|
|
|
if ( !key ) {
|
|
return [];
|
|
}
|
|
|
|
var label = spec.getParameterLabel( this.template.getOriginalParameterName( name ) ),
|
|
// eslint-disable-next-line mediawiki/msg-doc
|
|
$msg = mw.message( key, name, label ).parseDom();
|
|
ve.targetLinksToNewWindow( $( '<div>' ).append( $msg )[ 0 ] );
|
|
return [ $msg ];
|
|
};
|
|
|
|
/**
|
|
* @private
|
|
* @param {boolean} [expand]
|
|
*/
|
|
ve.ui.MWAddParameterPage.prototype.togglePlaceholder = function ( expand ) {
|
|
this.isExpanded = expand === undefined ? !this.isExpanded : !!expand;
|
|
|
|
this.addParameterInputHeader.setIcon( this.isExpanded ? 'subtract' : 'add' );
|
|
this.addParameterFieldset.$element.toggleClass(
|
|
've-ui-mwTransclusionDialog-addParameterFieldset-collapsed',
|
|
!this.isExpanded
|
|
);
|
|
if ( this.isExpanded ) {
|
|
if ( !this.paramInputField ) {
|
|
this.initialize();
|
|
}
|
|
this.paramInputField.focus();
|
|
}
|
|
};
|
|
|
|
/**
|
|
* @inheritDoc OO.ui.PageLayout
|
|
*/
|
|
ve.ui.MWAddParameterPage.prototype.setupOutlineItem = function () {
|
|
this.outlineItem
|
|
// Basic properties to make the OO.ui.OutlineControlsWidget buttons behave sane
|
|
.setLevel( 1 );
|
|
};
|