c3d2-web/content/static/candy/src/core/chatUser.js

266 lines
5.6 KiB
JavaScript

/** File: chatUser.js
* Candy - Chats are not dead yet.
*
* Authors:
* - Patrick Stadler <patrick.stadler@gmail.com>
* - Michael Weibel <michael.weibel@gmail.com>
*
* Copyright:
* (c) 2011 Amiado Group AG. All rights reserved.
* (c) 2012-2014 Patrick Stadler & Michael Weibel. All rights reserved.
*/
'use strict';
/* global Candy, Strophe */
/** Class: Candy.Core.ChatUser
* Chat User
*/
Candy.Core.ChatUser = function(jid, nick, affiliation, role) {
/** Constant: ROLE_MODERATOR
* Moderator role
*/
this.ROLE_MODERATOR = 'moderator';
/** Constant: AFFILIATION_OWNER
* Affiliation owner
*/
this.AFFILIATION_OWNER = 'owner';
/** Object: data
* User data containing:
* - jid
* - nick
* - affiliation
* - role
* - privacyLists
* - customData to be used by e.g. plugins
*/
this.data = {
jid: jid,
nick: Strophe.unescapeNode(nick),
affiliation: affiliation,
role: role,
privacyLists: {},
customData: {},
previousNick: undefined
};
/** Function: getJid
* Gets an unescaped user jid
*
* See:
* <Candy.Util.unescapeJid>
*
* Returns:
* (String) - jid
*/
this.getJid = function() {
if(this.data.jid) {
return Candy.Util.unescapeJid(this.data.jid);
}
return;
};
/** Function: getEscapedJid
* Escapes the user's jid (node & resource get escaped)
*
* See:
* <Candy.Util.escapeJid>
*
* Returns:
* (String) - escaped jid
*/
this.getEscapedJid = function() {
return Candy.Util.escapeJid(this.data.jid);
};
/** Function: setJid
* Sets a user's jid
*
* Parameters:
* (String) jid - New Jid
*/
this.setJid = function(jid) {
this.data.jid = jid;
};
/** Function: getNick
* Gets user nick
*
* Returns:
* (String) - nick
*/
this.getNick = function() {
return Strophe.unescapeNode(this.data.nick);
};
/** Function: setNick
* Sets a user's nick
*
* Parameters:
* (String) nick - New nick
*/
this.setNick = function(nick) {
this.data.nick = nick;
};
/** Function: getRole
* Gets user role
*
* Returns:
* (String) - role
*/
this.getRole = function() {
return this.data.role;
};
/** Function: setRole
* Sets user role
*
* Parameters:
* (String) role - Role
*/
this.setRole = function(role) {
this.data.role = role;
};
/** Function: setAffiliation
* Sets user affiliation
*
* Parameters:
* (String) affiliation - new affiliation
*/
this.setAffiliation = function(affiliation) {
this.data.affiliation = affiliation;
};
/** Function: getAffiliation
* Gets user affiliation
*
* Returns:
* (String) - affiliation
*/
this.getAffiliation = function() {
return this.data.affiliation;
};
/** Function: isModerator
* Check if user is moderator. Depends on the room.
*
* Returns:
* (Boolean) - true if user has role moderator or affiliation owner
*/
this.isModerator = function() {
return this.getRole() === this.ROLE_MODERATOR || this.getAffiliation() === this.AFFILIATION_OWNER;
};
/** Function: addToOrRemoveFromPrivacyList
* Convenience function for adding/removing users from ignore list.
*
* Check if user is already in privacy list. If yes, remove it. If no, add it.
*
* Parameters:
* (String) list - To which privacy list the user should be added / removed from. Candy supports curently only the "ignore" list.
* (String) jid - User jid to add/remove
*
* Returns:
* (Array) - Current privacy list.
*/
this.addToOrRemoveFromPrivacyList = function(list, jid) {
if (!this.data.privacyLists[list]) {
this.data.privacyLists[list] = [];
}
var index = -1;
if ((index = this.data.privacyLists[list].indexOf(jid)) !== -1) {
this.data.privacyLists[list].splice(index, 1);
} else {
this.data.privacyLists[list].push(jid);
}
return this.data.privacyLists[list];
};
/** Function: getPrivacyList
* Returns the privacy list of the listname of the param.
*
* Parameters:
* (String) list - To which privacy list the user should be added / removed from. Candy supports curently only the "ignore" list.
*
* Returns:
* (Array) - Privacy List
*/
this.getPrivacyList = function(list) {
if (!this.data.privacyLists[list]) {
this.data.privacyLists[list] = [];
}
return this.data.privacyLists[list];
};
/** Function: setPrivacyLists
* Sets privacy lists.
*
* Parameters:
* (Object) lists - List object
*/
this.setPrivacyLists = function(lists) {
this.data.privacyLists = lists;
};
/** Function: isInPrivacyList
* Tests if this user ignores the user provided by jid.
*
* Parameters:
* (String) list - Privacy list
* (String) jid - Jid to test for
*
* Returns:
* (Boolean)
*/
this.isInPrivacyList = function(list, jid) {
if (!this.data.privacyLists[list]) {
return false;
}
return this.data.privacyLists[list].indexOf(jid) !== -1;
};
/** Function: setCustomData
* Stores custom data
*
* Parameter:
* (Object) data - Object containing custom data
*/
this.setCustomData = function(data) {
this.data.customData = data;
};
/** Function: getCustomData
* Retrieve custom data
*
* Returns:
* (Object) - Object containing custom data
*/
this.getCustomData = function() {
return this.data.customData;
};
/** Function: setPreviousNick
* If user has nickname changed, set previous nickname.
*
* Parameters:
* (String) previousNick - the previous nickname
*/
this.setPreviousNick = function(previousNick) {
this.data.previousNick = previousNick;
};
/** Function: hasNicknameChanged
* Gets the previous nickname if available.
*
* Returns:
* (String) - previous nickname
*/
this.getPreviousNick = function() {
return this.data.previousNick;
};
};