📄 roster.js
字号:
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 += " JID: "; elTitle += htmlEnc(user.realjid); } else { elTitle += " JID: "; elTitle += htmlEnc(user.jid); } elTitle += " "; elTitle += "Status"; elTitle += ": "; elTitle += user.status; if (user.statusMsg) { elTitle += " "; elTitle += "Message"; elTitle += ": "; elTitle += htmlEnc(user.statusMsg); } if ((user.messages.length + user.chatmsgs.length) > 0) { elTitle += " "; 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> "; 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] = " JID: "; A[A.length] = htmlEnc(user.realjid); } else { A[A.length] = " JID: "; A[A.length] = htmlEnc(user.jid); } A[A.length] = " "; A[A.length] = "Status"; A[A.length] = ": "; A[A.length] = user.status; if (user.statusMsg) { A[A.length] = " "; A[A.length] = "Message"; A[A.length] = ": "; A[A.length] = htmlEnc(user.statusMsg); } if ((user.messages.length + user.chatmsgs.length) > 0) { A[A.length] = " "; 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 + -