mediawiki-extensions-Discus.../modules/dt-ve/dt.dm.PingNode.js
David Lynch dccaa5bf65 Add an optional suffix message to mentions
Wikis like jawiki will then be able to customize the message to include
honorifics as they think appropriate.

Bug: T268588
Change-Id: I213fb9fd0a9ed6592ce3548a5b2c3b11a55c1abc
2022-01-19 10:29:10 -06:00

72 lines
1.9 KiB
JavaScript

/*!
* VisualEditor DataModel MWPingNode class.
*
* @copyright 2011-2020 VisualEditor Team and others; see AUTHORS.txt
* @license The MIT License (MIT); see LICENSE.txt
*/
/**
* DataModel MediaWiki ping node. A ping is just a link to a user page, but
* by defining it as a node we can make is a single FocusableNode.
*
* @class
* @extends ve.dm.LeafNode
* @mixes ve.dm.FocusableNode
*
* @constructor
* @param {Object} [element] Reference to element in linear model
*/
function DmMWPingNode() {
// Parent constructor
DmMWPingNode.super.apply( this, arguments );
// Mixin constructor
ve.dm.FocusableNode.call( this );
}
/* Inheritance */
OO.inheritClass( DmMWPingNode, ve.dm.LeafNode );
OO.mixinClass( DmMWPingNode, ve.dm.FocusableNode );
/* Static members */
DmMWPingNode.static.name = 'mwPing';
DmMWPingNode.static.isContent = true;
DmMWPingNode.static.matchTagNames = null;
DmMWPingNode.static.matchRdfaTypes = [];
DmMWPingNode.static.matchFunction = function () {
return false;
};
DmMWPingNode.static.disallowedAnnotationTypes = [ 'link' ];
DmMWPingNode.static.toDomElements = function ( dataElement, doc, converter ) {
var domElements,
prefix = mw.msg( 'discussiontools-replywidget-mention-prefix' ),
suffix = mw.msg( 'discussiontools-replywidget-mention-suffix' ),
title = mw.Title.makeTitle( mw.config.get( 'wgNamespaceIds' ).user, dataElement.attributes.user );
dataElement = ve.dm.MWInternalLinkAnnotation.static.dataElementFromTitle( title );
domElements = ve.dm.MWInternalLinkAnnotation.static.toDomElements( dataElement, doc, converter );
domElements[ 0 ].appendChild(
doc.createTextNode( title.getMainText() )
);
domElements.unshift( document.createTextNode( prefix ) );
domElements.push( document.createTextNode( suffix ) );
return domElements;
};
// toDataElement should never be called for this node
DmMWPingNode.static.toDataElement = null;
/* Registration */
ve.dm.modelRegistry.register( DmMWPingNode );