mediawiki-extensions-Discus.../modules/dt-ve/CommentTarget.js
Bartosz Dziewoński e5abfdbe8a Re-enable keyboard sequences for template, table etc. in new topic tool
They were only disabled in the reply tool, because their wikitext
markup doesn't work when indented. This is not a concern in the new
topic tool.

Rename our sequences that display the wikitext warning to avoid these
items showing up in the command help dialog, and remove overrides for
global ve.ui.commandHelpRegistry. (As a result, the dialog now lists
the blockquote command, which was previously missing even though it
was enabled, but only with the 'Ctrl+8' shortcut and not 'Type ":"'.)

Also remove filtering rules for external paste.

Bug: T311653
Change-Id: I4557c376fcf099d81e91ae5c2b18301d97921180
2022-07-31 02:40:12 +02:00

156 lines
4.3 KiB
JavaScript

var registries = require( './dt.ui.registries.js' );
/**
* DiscussionTools-specific target, inheriting from the stand-alone target
*
* @class
* @extends ve.init.mw.Target
*
* @param {mw.dt.ReplyWidgetVisual} replyWidget
* @param {Object} config Configuration options
*/
function CommentTarget( replyWidget, config ) {
config = config || {};
this.replyWidget = replyWidget;
// Parent constructor
CommentTarget.super.call( this, ve.extendObject( {
toolbarConfig: { position: 'top' }
}, config ) );
}
/* Inheritance */
OO.inheritClass( CommentTarget, ve.init.mw.Target );
/* Static methods */
CommentTarget.static.name = 'discussionTools';
CommentTarget.static.modes = [ 'visual', 'source' ];
if ( OO.ui.isMobile() ) {
// Mobile currently expects one tool per group
CommentTarget.static.toolbarGroups = [
{
name: 'history',
include: [ 'undo' ]
},
{
name: 'style',
classes: [ 've-test-toolbar-style' ],
type: 'list',
icon: 'textStyle',
title: OO.ui.deferMsg( 'visualeditor-toolbar-style-tooltip' ),
label: OO.ui.deferMsg( 'visualeditor-toolbar-style-tooltip' ),
invisibleLabel: true,
include: [ { group: 'textStyle' }, 'language', 'clear' ],
forceExpand: [ 'bold', 'italic', 'clear' ],
promote: [ 'bold', 'italic' ],
demote: [ 'strikethrough', 'code', 'underline', 'language', 'clear' ]
},
{
name: 'link',
include: [ 'link' ]
},
{
name: 'other',
include: [ 'usernameCompletion' ]
},
{
name: 'editMode',
type: 'list',
icon: 'edit',
title: OO.ui.deferMsg( 'visualeditor-mweditmode-tooltip' ),
label: OO.ui.deferMsg( 'visualeditor-mweditmode-tooltip' ),
invisibleLabel: true,
include: [ 'editModeVisual', 'editModeSource' ]
}
];
} else {
CommentTarget.static.toolbarGroups = [
{
name: 'style',
title: OO.ui.deferMsg( 'visualeditor-toolbar-style-tooltip' ),
include: [ 'bold', 'italic', 'moreTextStyle' ]
},
{
name: 'link',
include: [ 'link' ]
},
{
name: 'other',
include: [ 'usernameCompletion' ]
}
];
}
CommentTarget.static.importRules = ve.copy( CommentTarget.static.importRules );
CommentTarget.static.importRules.external.blacklist = ve.extendObject(
{},
CommentTarget.static.importRules.external.blacklist,
{
// Annotations
// Allow pasting external links
'link/mwExternal': false
}
);
CommentTarget.static.importRulesForReplyTool = ve.copy( CommentTarget.static.importRules );
CommentTarget.static.importRulesForReplyTool.external.conversions = ve.extendObject(
{},
CommentTarget.static.importRulesForReplyTool.external.conversions,
{
mwHeading: 'paragraph'
}
);
CommentTarget.static.importRulesForReplyTool.external.blacklist = ve.extendObject(
{},
CommentTarget.static.importRulesForReplyTool.external.blacklist,
{
// Strip all table structure
mwTable: true,
tableSection: true,
tableRow: true,
tableCell: true
}
);
CommentTarget.prototype.attachToolbar = function () {
this.replyWidget.$headerWrapper.append(
this.getToolbar().$element.append( this.replyWidget.modeTabSelect ? this.replyWidget.modeTabSelect.$element : null )
);
this.getToolbar().$element.prepend( this.getSurface().getToolbarDialogs().$element );
};
CommentTarget.prototype.getSurfaceConfig = function ( config ) {
config = ve.extendObject( { mode: this.defaultMode }, config );
return CommentTarget.super.prototype.getSurfaceConfig.call( this, ve.extendObject( {
commandRegistry: config.mode === 'source' ? registries.wikitextCommandRegistry : registries.commandRegistry,
sequenceRegistry: config.mode === 'source' ? registries.wikitextSequenceRegistry :
this.replyWidget.isNewTopic ? registries.sequenceRegistry : registries.sequenceRegistryForReplyTool,
dataTransferHandlerFactory: config.mode === 'source' ? ve.ui.wikitextDataTransferHandlerFactory : ve.ui.dataTransferHandlerFactory,
importRules: this.replyWidget.isNewTopic ? this.constructor.static.importRules : this.constructor.static.importRulesForReplyTool,
// eslint-disable-next-line no-jquery/no-global-selector
$overlayContainer: $( '#content' )
}, config ) );
};
CommentTarget.prototype.editSource = function () {
this.replyWidget.switch( 'source' );
};
CommentTarget.prototype.switchToVisualEditor = function () {
this.replyWidget.switch( 'visual' );
};
/* Registration */
ve.init.mw.targetFactory.register( CommentTarget );
module.exports = CommentTarget;