mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/DiscussionTools
synced 2024-12-01 03:26:28 +00:00
48d5a67d41
The same ReplyWidget instance can be re-used when the user cancels replying and then starts replying again to the same comment. Previously, the initial values passed to the constructor (when switching modes) would still persist in this case, even if they were incorrect. Bug: T263061 Change-Id: I3dff007456bfd4f3149c718ae72fbf373a2e2913
115 lines
2.8 KiB
JavaScript
115 lines
2.8 KiB
JavaScript
/**
|
|
* @external CommentController
|
|
* @external CommentItem
|
|
*/
|
|
|
|
/**
|
|
* DiscussionTools ReplyWidgetPlain class
|
|
*
|
|
* @class mw.dt.ReplyWidgetPlain
|
|
* @extends mw.dt.ReplyWidget
|
|
* @constructor
|
|
* @param {CommentController} commentController
|
|
* @param {CommentItem} comment
|
|
* @param {string} pageName
|
|
* @param {number} oldId
|
|
* @param {Object} [config]
|
|
*/
|
|
function ReplyWidgetPlain() {
|
|
// Parent constructor
|
|
ReplyWidgetPlain.super.apply( this, arguments );
|
|
|
|
this.$element.addClass( 'dt-ui-replyWidget-plain' );
|
|
}
|
|
|
|
/* Inheritance */
|
|
|
|
OO.inheritClass( ReplyWidgetPlain, require( 'ext.discussionTools.ReplyWidget' ) );
|
|
|
|
/* Methods */
|
|
|
|
ReplyWidgetPlain.prototype.createReplyBodyWidget = function ( config ) {
|
|
var textInput = new OO.ui.MultilineTextInputWidget( $.extend( {
|
|
rows: 3,
|
|
// TODO: Fix upstream to support a value meaning no max limit (e.g. Infinity)
|
|
maxRows: 999,
|
|
autosize: true,
|
|
// The following classes are used here:
|
|
// * mw-editfont-monospace
|
|
// * mw-editfont-sans-serif
|
|
// * mw-editfont-serif
|
|
classes: [ 'mw-editfont-' + mw.user.options.get( 'editfont' ) ]
|
|
}, config ) );
|
|
// Fix jquery.ime position (T255191)
|
|
textInput.$input.addClass( 'ime-position-inside' );
|
|
return textInput;
|
|
};
|
|
|
|
ReplyWidgetPlain.prototype.focus = function () {
|
|
this.replyBodyWidget.focus();
|
|
|
|
return this;
|
|
};
|
|
|
|
ReplyWidgetPlain.prototype.clear = function () {
|
|
this.replyBodyWidget.setValue( '' );
|
|
|
|
this.storage.remove( this.storagePrefix + '/body' );
|
|
|
|
// Parent method
|
|
ReplyWidgetPlain.super.prototype.clear.apply( this, arguments );
|
|
};
|
|
|
|
ReplyWidgetPlain.prototype.isEmpty = function () {
|
|
return !this.replyBodyWidget.getValue().trim();
|
|
};
|
|
|
|
ReplyWidgetPlain.prototype.getMode = function () {
|
|
return 'source';
|
|
};
|
|
|
|
ReplyWidgetPlain.prototype.onInputChange = function () {
|
|
var wikitext;
|
|
|
|
// Parent method
|
|
ReplyWidgetPlain.super.prototype.onInputChange.apply( this, arguments );
|
|
|
|
wikitext = this.getValue();
|
|
this.storage.set( this.storagePrefix + '/body', wikitext );
|
|
};
|
|
|
|
ReplyWidgetPlain.prototype.setup = function ( data ) {
|
|
var autosaveValue = this.storage.get( this.storagePrefix + '/body' );
|
|
|
|
data = data || {};
|
|
|
|
// Parent method
|
|
ReplyWidgetPlain.super.prototype.setup.apply( this, arguments );
|
|
|
|
// Events
|
|
this.replyBodyWidget.connect( this, { change: this.onInputChangeThrottled } );
|
|
|
|
this.replyBodyWidget.setValue( data.value || autosaveValue );
|
|
|
|
// needs to bind after the initial setValue:
|
|
this.replyBodyWidget.once( 'change', this.onFirstTransaction.bind( this ) );
|
|
|
|
this.afterSetup();
|
|
|
|
return this;
|
|
};
|
|
|
|
ReplyWidgetPlain.prototype.teardown = function () {
|
|
this.replyBodyWidget.disconnect( this );
|
|
this.replyBodyWidget.off( 'change' );
|
|
|
|
// Parent method
|
|
return ReplyWidgetPlain.super.prototype.teardown.call( this );
|
|
};
|
|
|
|
ReplyWidgetPlain.prototype.getValue = function () {
|
|
return this.replyBodyWidget.getValue();
|
|
};
|
|
|
|
module.exports = ReplyWidgetPlain;
|