mediawiki-extensions-Visual.../modules/ve-mw/ui/pages/ve.ui.MWTemplatePage.js
Thiemo Kreuz d5857c20f5 Remove invisible stuff from BookletLayout OutlineItems
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
2022-06-20 09:31:53 +00:00

171 lines
5.8 KiB
JavaScript

/*!
* VisualEditor user interface MWTemplatePage class.
*
* @copyright 2011-2020 VisualEditor Team and others; see AUTHORS.txt
* @license The MIT License (MIT); see LICENSE.txt
*/
/**
* MediaWiki transclusion dialog template page.
*
* @class
* @extends OO.ui.PageLayout
*
* @constructor
* @param {ve.dm.MWTemplateModel} template Template model
* @param {string} name Unique symbolic name of page
* @param {Object} [config] Configuration options
* @cfg {jQuery} [$overlay] Overlay to render dropdowns in
* @cfg {boolean} [isReadOnly] Page is read-only
*/
ve.ui.MWTemplatePage = function VeUiMWTemplatePage( template, name, config ) {
var link = template.getTemplateDataQueryTitle(),
veConfig = mw.config.get( 'wgVisualEditorConfig' );
// Configuration initialization
config = ve.extendObject( {
scrollable: false
}, config );
// Parent constructor
ve.ui.MWTemplatePage.super.call( this, name, config );
// Properties
this.template = template;
this.spec = template.getSpec();
this.$description = $( '<div>' )
.addClass( 've-ui-mwTemplatePage-description' );
this.infoFieldset = new OO.ui.FieldsetLayout( {
label: this.spec.getLabel(),
icon: 'puzzle'
} );
// Initialization
this.$description
.text( this.spec.getDescription() );
// The transcluded page may be dynamically generated or unspecified in the DOM
// for other reasons (T68724). In that case we can't tell the user what the
// template is called, nor link to the template page. However, if we know for
// certain that the template doesn't exist, be explicit about it (T162694).
var linkData = ve.init.platform.linkCache.getCached( '_missing/' + link ),
knownAsMissing = link && linkData && linkData.missing;
var key,
messageStyle = 've-ui-mwTemplatePage-description-missing',
$addMessageHere = this.$description;
if ( this.spec.getDescription() ) {
key = !veConfig.transclusionDialogNewSidebar ?
'visualeditor-dialog-transclusion-more-template-description' :
'visualeditor-dialog-transclusion-see-template';
messageStyle = 've-ui-mwTemplatePage-description-extra';
$addMessageHere = $( '<span>' );
this.$description.append( $( '<hr>' ), $addMessageHere );
} else if ( !veConfig.transclusionDialogNewSidebar ) {
if ( knownAsMissing ) {
key = 'visualeditor-dialog-transclusion-absent-template';
} else if ( link ) {
key = 'visualeditor-dialog-transclusion-no-template-description';
}
// Note this leaves dynamic template names like {{ {{foo}} }} without a message.
} else if ( !link || knownAsMissing ) {
var title;
try {
title = link && new mw.Title( link );
} catch ( e ) {
}
// When {{User:Foo}} can be parsed as "Foo", we know the ":" is not syntax.
key = title && title.getMain().indexOf( ':' ) === -1 ?
'visualeditor-dialog-transclusion-template-title-nonexistent' :
'visualeditor-dialog-transclusion-template-title-modifier';
} else {
key = 'visualeditor-dialog-transclusion-no-template-description';
}
if ( key ) {
// The following messages are used here:
// * visualeditor-dialog-transclusion-absent-template
// * visualeditor-dialog-transclusion-more-template-description
// * visualeditor-dialog-transclusion-no-template-description
// * visualeditor-dialog-transclusion-see-template
// * visualeditor-dialog-transclusion-template-title-modifier
// * visualeditor-dialog-transclusion-template-title-nonexistent
var $msg = mw.message( key, this.spec.getLabel(), link ).parseDom();
// The following classes are used here:
// * ve-ui-mwTemplatePage-description-extra
// * ve-ui-mwTemplatePage-description-missing
$addMessageHere.addClass( messageStyle ).append( $msg );
ve.targetLinksToNewWindow( $addMessageHere[ 0 ] );
}
this.$description.find( 'a[href]' )
.on( 'click', function () {
ve.track( 'activity.transclusion', { action: 'template-doc-link-click' } );
} );
this.infoFieldset.$element
.append( this.$description );
if ( veConfig.transclusionDialogNewSidebar && !knownAsMissing ) {
var noticeWidget;
if ( this.template.getSpec().getDocumentedParameterOrder().length &&
!this.template.getSpec().isDocumented()
) {
noticeWidget = new OO.ui.MessageWidget( {
label: mw.message( 'visualeditor-dialog-transclusion-no-template-data-description', link ).parseDom(),
classes: [ 've-ui-mwTransclusionDialog-template-note' ],
type: 'warning'
} );
}
if ( noticeWidget && noticeWidget.$element ) {
ve.targetLinksToNewWindow( noticeWidget.$element[ 0 ] );
this.infoFieldset.$element.append( noticeWidget.$element );
}
}
this.$element
.addClass( 've-ui-mwTemplatePage' )
.append( this.infoFieldset.$element );
if ( !config.isReadOnly ) {
if ( !veConfig.transclusionDialogNewSidebar ) {
// This button is only shown as a last resort when this …TemplatePage is neither followed by
// a …ParameterPage (i.e. the template doesn't have parameters) nor a
// …ParameterPlaceholderPage (i.e. the parameter search widget isn't shown). This state
// should be unreachable, but isn't. Hiding this is done via CSS.
var addButton = new OO.ui.ButtonWidget( {
framed: false,
icon: 'parameter',
label: ve.msg( 'visualeditor-dialog-transclusion-add-param' )
} )
.connect( this, { click: 'addPlaceholderParameter' } );
$( '<div>' )
.addClass( 've-ui-mwTemplatePage-more' )
.append( addButton.$element )
.appendTo( this.$element );
}
}
};
/* Inheritance */
OO.inheritClass( ve.ui.MWTemplatePage, OO.ui.PageLayout );
/* Methods */
/**
* @inheritdoc
*/
ve.ui.MWTemplatePage.prototype.setupOutlineItem = function () {
this.outlineItem
// Basic properties to make the OO.ui.OutlineControlsWidget buttons behave sane
.setMovable( true )
.setRemovable( true );
};
ve.ui.MWTemplatePage.prototype.addPlaceholderParameter = function () {
this.template.addParameter( new ve.dm.MWParameterModel( this.template ) );
};