⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 roster.js

📁 WEB IM 实现 j2ee项目的IM功能 可继承到现有的系统当中
💻 JS
📖 第 1 页 / 共 2 页
字号:
    A[A.length] =  "</div>";  }  this.rosterW.getElementById("roster").innerHTML = A.join('');  this.updateStyleIE();}function getUserElementId(user, group) {  var groupName = group.name || 'Unfiled';  return htmlEnc(user.jid)+"/"+groupName+"Entry";}function getRosterUserClass(usersHidden, user, group) {  return (usersHidden && (user.status == 'unavailable' || user.status == 'stalker') && !user.lastsrc && group.name != "Gateways" ?          "hidden" : "rosterUser");}function getRosterGroupHeaderClass(usersHidden, group) {  return (usersHidden && group.onlUserCount == 0 && group.messagesPending == 0 && group.name != "Gateways" ?         'rosterGroupHeaderHidden':'rosterGroupHeader');}function getUserElementTitle(user) {  var elTitle = user.name  if (user.realjid) {    elTitle += "&#10;JID: ";    elTitle += htmlEnc(user.realjid);  } else {    elTitle += "&#10;JID: ";    elTitle += htmlEnc(user.jid);  }  elTitle += "&#10;";  elTitle += "Status";  elTitle += ": ";  elTitle += user.status;  if (user.statusMsg) {    elTitle += "&#10;";    elTitle += "Message";    elTitle += ": ";    elTitle += htmlEnc(user.statusMsg);  }  if ((user.messages.length + user.chatmsgs.length) > 0) {    elTitle += "&#10;";    elTitle += ""+(user.messages.length + user.chatmsgs.length)+" message(s) pending";  }  return elTitle;}function getUserInnerHTML(user, group) {  var userImg = (user.lastsrc) ? messageImg : eval(user.status + "Led");  var A = new Array();  A[A.length] = "<nobr><img src=\"";  A[A.length] = userImg.src;  A[A.length] = "\" name=\"";  A[A.length] = htmlEnc(user.jid);  A[A.length] = "/";  A[A.length] = group.name;  A[A.length] = "\" width='16' height='16' border='0' align='left'>";  A[A.length] = "<div><span class=\"nickName\">";  A[A.length] = user.name;  A[A.length] = "</span>";  if (user.statusMsg) {    A[A.length] = "<br clear=all><nobr><span class=\"statusMsg\">";    A[A.length] = htmlEnc(user.statusMsg);    A[A.length] = "</span></nobr>";  }  A[A.length] =  "</div></nobr>";  return A.join('');}function updateRoster() {  Debug.log('updating roster',2);  for (var i=0; i<this.groups.length; i++) {    var group = this.groups[i];    group.users = group.users.sort(rosterSort);    var groupEl = this.rosterW.getElementById(group.name);    if (groupEl) { // update group      for (var j=0; j<group.users.length; j++) {        var user = group.users[j];        var userElId = getUserElementId(user,group);        var userEl = this.rosterW.getElementById(userElId);        if (!userEl) { // add user          userEl = document.createElement('div');          userEl.id = userElId;          userEl.className = getRosterUserClass(this.usersHidden, user, group);          var onclickHandler = function(el, user, roster) {            var e = el;            var jid = htmlEnc(user.jid);            var r = roster;            var toggler = function() { r.userClicked(e, jid); };            return toggler;          }          userEl.onclick = onclickHandler(userEl, user, this);//"return userClicked(this,'"+htmlEnc(user.jid)+"');";          userEl.title = getUserElementTitle(user);          userEl.innerHTML = getUserInnerHTML(user, group);          var siblingEl;          var k = j+1;          while (!siblingEl && k<group.users.length) {            siblingEl = this.rosterW.getElementById(getUserElementId(group.users[k],group));            k++;          }          if (!siblingEl) {            groupEl.appendChild(userEl)          } else {            groupEl.insertBefore(userEl,siblingEl);          }        } else { // update user          userEl.className = getRosterUserClass(this.usersHidden, user, group);          userEl.title = getUserElementTitle(user);          var userImg = (user.lastsrc) ? messageImg : eval(user.status + "Led");          userEl.getElementsByTagName('img')[0].src = userImg.src;          var spanEls = userEl.getElementsByTagName('span');          spanEls[0].innerHTML = user.name          if (user.statusMsg) {            if (spanEls[1]) {              spanEls[1].innerHTML = htmlEnc(user.statusMsg);            } else {              var A = new Array();              A[A.length] = "<br clear=all><nobr><span class=\"statusMsg\">";              A[A.length] = htmlEnc(user.statusMsg);              A[A.length] = "</span></nobr>";              userEl.getElementsByTagName('div')[0].innerHTML += A.join('');            }          }        }      } // done with users      var groupHeaderEl = this.rosterW.getElementById(group.name+'Head');      if (groupHeaderEl) {        groupHeaderEl.className = getRosterGroupHeaderClass(this.usersHidden, group);        if (this.rosterW.getElementById(group.name+'On'))           this.rosterW.getElementById(group.name+'On').innerHTML = group.onlUserCount;        if (this.rosterW.getElementById(group.name+'All'))          this.rosterW.getElementById(group.name+'All').innerHTML = group.users.length;      }    } else { // add group      var groupHeaderEl = document.createElement('div');      groupHeaderEl.id = group.name+"Head";      groupHeaderEl.className = getRosterGroupHeaderClass(this.usersHidden, group);      var onclickHandler = function(group) {        var groupName = group.name;        var toggler = function() { parent.top.roster.toggleGrp(groupName); };        return toggler;      }      groupHeaderEl.onclick = onclickHandler(group);      var A = new Array();      A[A.length] = "<nobr>";      var toggleImg = (this.hiddenGroups[group.name])?'images/group_close.gif':'images/group_open.gif';      A[A.length] = "<img src='";      A[A.length] = toggleImg;      A[A.length] ="' name='";      A[A.length] = group.name;      A[A.length] = "Img'> ";      A[A.length] = group.name;      A[A.length] = " (<span id='";      A[A.length] = group.name;      A[A.length] = "On'>";      A[A.length] = group.onlUserCount;      A[A.length] = "</span>/<span id='";// put total number in span, also - sam      A[A.length] = group.name;      A[A.length] = "All'>";      A[A.length] = group.users.length;      A[A.length] = "</span>)";      A[A.length] = "</nobr>";      groupHeaderEl.innerHTML = A.join('');      groupEl = document.createElement('div');      groupEl.id = group.name;      var rosterGroupClass = (            (this.usersHidden && group.onlUserCount == 0 &&             group.messagesPending == 0 &&             group.name != "Gateways")            || this.hiddenGroups[group.name])        ? 'hidden':'rosterGroup';      groupEl.className = rosterGroupClass;      A = new Array();      for (var j=0; j<group.users.length; j++) {        var user = group.users[j];        A[A.length] = "<div id=\"";        A[A.length] = htmlEnc(user.jid);        A[A.length] = "/";        A[A.length] = group.name;        A[A.length] = "Entry\" class=\"";        A[A.length] = getRosterUserClass(this.usersHidden, user, group);        A[A.length] = "\" onClick=\"return userClicked(this,'";        A[A.length] = htmlEnc(user.jid);        A[A.length] = "');\" title=\"";        A[A.length] = getUserElementTitle(user);        A[A.length] = "\">";        A[A.length] = getUserInnerHTML(user, group);        A[A.length] =  "</div>";      } /* END inner loop */      groupEl.innerHTML = A.join('');      var siblingEl;      var j = i + 1;      while (!siblingEl && j < this.groups.length) {        siblingEl = this.rosterW.getElementById(this.groups[j].name+'Head');        j++;      }      var rosterEl = this.rosterW.getElementById("roster");      if (!siblingEl) {        rosterEl.appendChild(groupHeaderEl)        rosterEl.appendChild(groupEl);      } else {        rosterEl.insertBefore(groupHeaderEl, siblingEl);        rosterEl.insertBefore(groupEl, siblingEl);      }    }  }}// moved into Roster from iRoster.html and groupchat_iroster.html - samfunction RosterSelectUser(el) {  if(this.lastUserSelected)    this.lastUserSelected.className = "rosterUser";  el.className = "rosterUserSelected";  this.lastUserSelected = el;}function RosterUserClicked(el,jid) {  this.selectUser(el);  if (this.name == 'GroupchatRoster') {    return parent.top.user.roster.openChat(jid);  }  var user = parent.top.roster.getUserByJID(parent.top.cutResource(jid));	if(user && typeof(user.type) != 'undefined' && user.type == 'groupchat')		return parent.top.openGroupchat(jid);	if (!parent.top.isGateway(jid))		return parent.top.roster.openChat(jid);}/*********************************************************************** * GROUPCHAT ROSTER *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */function GCRosterSort(a,b) {  return (a.name.toLowerCase()<b.name.toLowerCase())?-1:1;}function GroupchatRosterPrint() {  var A = new Array();    this.groups = this.groups.sort(GCRosterSort);  /* ***   * loop rostergroups    */  for (var i=0; i<this.groups.length; i++) {    var rosterGroupHeadClass = (this.groups[i].users.length == 0) ? 'rosterGroupHeaderHidden':'rosterGroupHeader';    A[A.length] = "<div id='";		A[A.length] = this.groups[i].name;		A[A.length] = "Head' class='";		A[A.length] = rosterGroupHeadClass;		A[A.length] = "'><nobr>&nbsp;";    A[A.length] = this.groups[i].users.length;		A[A.length] = " ";		A[A.length] = this.groups[i].name;    A[A.length] = "</nobr></div>";    A[A.length] = "<div id='";		A[A.length] = this.groups[i].name;		A[A.length] = "' class='rosterGroup'>";        this.groups[i].users = this.groups[i].users.sort(rosterSort);		/* ***		 * loop users in rostergroup 		 */    for (var j=0; j<this.groups[i].users.length; j++) {      var user = this.groups[i].users[j];      var rosterUserClass = (this.usersHidden && 			     (user.status == 'unavailable' || 			      user.status == 'stalker') && 			     !user.lastsrc) 	? "hidden":"rosterUser";            A[A.length] = "<div id=\"";			A[A.length] = htmlEnc(user.jid);			A[A.length] = "/";			A[A.length] = this.groups[i].name;			A[A.length] = "Entry\" class=\"";			A[A.length] = rosterUserClass;			A[A.length] = "\" onClick=\"return userClicked(this,'";			A[A.length] = htmlEnc(user.jid).replace(/\'/g,"\\\'")+"');\" title=\"";			A[A.length] = user.name;			if (user.realjid) {				A[A.length] = "&#10;JID: ";				A[A.length] = htmlEnc(user.realjid);			} else {				A[A.length] = "&#10;JID: ";				A[A.length] = htmlEnc(user.jid);			}			A[A.length] = "&#10;";			A[A.length] = "Status";			A[A.length] = ": ";			A[A.length] = user.status;      if (user.statusMsg) {        A[A.length] = "&#10;";				A[A.length] = "Message";				A[A.length] = ": ";				A[A.length] = htmlEnc(user.statusMsg);			}			if ((user.messages.length + user.chatmsgs.length) > 0) {				A[A.length] = "&#10;";				A[A.length] = ""+(user.messages.length + user.chatmsgs.length)+" message(s) pending";			}      A[A.length] = "\"><nobr>";      var userImg = (user.lastsrc) ? messageImg : eval(user.status + "Led");      A[A.length] = "<img src=\"";			A[A.length] = userImg.src;			A[A.length] = "\" name=\"";			A[A.length] = htmlEnc(user.jid);			A[A.length] = "/";			A[A.length] = this.groups[i].name;			A[A.length] = "\" width=16 height=16 border=0 align=\"left\">";      A[A.length] = "<div><span class=\"nickName\">";			A[A.length] = user.name;			A[A.length] = "</span>";      if (user.statusMsg) {        A[A.length] = "<br clear=all><nobr><span class=\"statusMsg\">";				A[A.length] = htmlEnc(user.statusMsg);				A[A.length] = "</span></nobr>";			}      A[A.length] = "</div></nobr></div>";    } /* END inner loop */    A[A.length] = "</div>";  }  this.rosterW.getElementById("roster").innerHTML = A.join('');  this.updateStyleIE();}function GroupchatRosterUserAdd2Group(group) {  this.groups = [group];}function GroupchatRosterUser(jid,name) {  this.base = RosterUser;  this.base(jid,'',[''],name);	this.jid = this.fulljid; // always use fulljid  this.affiliation = 'none';  this.role = 'none';  this.add2Group = GroupchatRosterUserAdd2Group;}GroupchatRosterUser.prototype = new RosterUser;function getRosterGetRealJIDByNick(nick) {  for (var i=0; i<this.users.length; i++)    if (this.users[i].name == nick)      return this.users[i].realjid;  return null;}function getRosterGetFullJIDByNick(nick) {  for (var i=0; i<this.users.length; i++)    if (this.users[i].name == nick)      return this.users[i].fulljid;  return null;}			function getGroupchatRosterUserByJID(jid) {  // need to search fulljid here  return getElFromArrByProp(this.users,"fulljid",jid);}function GroupchatRoster(targetW) {  this.base = Roster;  this.base(null);  this.usersHidden = true;  this.targetW = targetW.frames.groupchatRoster;  this.rosterW = this.targetW.groupchatIRoster.document;  this.name = 'GroupchatRoster';  this.print = GroupchatRosterPrint;  this.getUserByJID = getGroupchatRosterUserByJID;  this.getRealJIDByNick = getRosterGetRealJIDByNick;  this.getFullJIDByNick = getRosterGetFullJIDByNick;}GroupchatRoster.prototype = new Roster();// some images - no idea why they are defined herevar messageImg = new Image();messageImg.src = "images/message.gif";var grp_open_img = new Image();grp_open_img.src = 'images/group_open.gif';var grp_close_img = new Image();grp_close_img.src = 'images/group_close.gif';var arrow_right_blinking = new Image();arrow_right_blinking.src = 'images/arrow_right_blinking.gif';

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -