mediawiki-extensions-Revisi.../modules/ext.RevisionSlider.Revision.js
Leszek Manicki c7190cf97d Add support for GENDER to the username label in the tooltip
After fetching a batch of revision data, user names are extracted
and another API query is made to get gender preferences for users.

This change also moves a code responsible for MediaWiki API calls
to its own class.

Bug: T136367
Change-Id: Id11fe14e9ca37829141ae92b13b51f10f992eb96
2016-07-26 11:50:59 +02:00

172 lines
2.9 KiB
JavaScript

( function ( mw, $ ) {
/*global moment:false */
/**
* @param {Object} data - Containing keys `id`, `size`, `comment`, `parsedcomment`, `timestamp`, `user` and `minor`
* @constructor
*/
var Revision = function ( data ) {
this.id = data.revid;
this.size = data.size;
this.timestamp = data.timestamp;
this.minor = data.hasOwnProperty( 'minor' ) && ( data.minor || data.minor === '' );
// Comments and users can be suppressed thus we must check if they exist
if ( typeof data.comment !== 'undefined' ) {
this.comment = data.comment;
}
if ( typeof data.parsedcomment !== 'undefined' ) {
this.parsedComment = data.parsedcomment;
}
if ( typeof data.user !== 'undefined' ) {
this.user = data.user;
}
};
$.extend( Revision.prototype, {
/**
* @type {number}
*/
id: 0,
/**
* @type {number}
*/
size: 0,
/**
* @type {string}
*/
comment: '',
/**
* @type {boolean}
*/
minor: false,
/**
* @type {string}
*/
parsedComment: '',
/**
* @type {string}
*/
timestamp: '',
/**
* @type {string}
*/
user: '',
/**
* @type {string}
*/
userGender: '',
/**
* @type {number}
*/
relativeSize: 0,
/**
* @return {number}
*/
getId: function () {
return this.id;
},
/**
* @return {number}
*/
getSize: function () {
return this.size;
},
/**
* @return {boolean}
*/
isMinor: function () {
return this.minor;
},
/**
* @return {string}
*/
getParsedComment: function () {
return this.parsedComment;
},
/**
* @return {boolean}
*/
hasEmptyComment: function () {
return this.getComment().trim().length === 0;
},
/**
* @return {string}
*/
getComment: function () {
return this.comment;
},
/**
* Uses moment.js to format the date
*
* @param {string} rawDate
* @return {string}
*/
formatDate: function ( rawDate ) {
// Moment's offset works "backwards", as the number of minutes
// behind UTC, so we need to make this number negative
var offset = -mw.libs.revisionSlider.userOffset;
return moment( rawDate ).zone( offset ).format( 'HH:mm, D MMM YYYY' );
},
/**
* @return {string}
*/
getFormattedDate: function () {
return this.formatDate( this.timestamp );
},
/**
* @return {string}
*/
getUser: function () {
return this.user;
},
/**
* @param {string} gender
*/
setUserGender: function ( gender ) {
this.userGender = gender;
},
/**
* @return {string}
*/
getUserGender: function () {
return this.userGender;
},
/**
* @param {number} size
*/
setRelativeSize: function ( size ) {
this.relativeSize = size;
},
/**
* @return {number}
*/
getRelativeSize: function () {
return this.relativeSize;
}
} );
mw.libs.revisionSlider = mw.libs.revisionSlider || {};
mw.libs.revisionSlider.Revision = Revision;
}( mediaWiki, jQuery ) );