You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
4.7 KiB
JavaScript
127 lines
4.7 KiB
JavaScript
var contactmenu = $("#contactmenu");
|
|
|
|
function rebuildContactMenu(uid) {
|
|
const Native = View.share.MainNative;
|
|
Native.SetClicked(NODE_CONTACT, 0, 0, uid);
|
|
var groupId = Native.GetContactGroup(uid);
|
|
var hasMail = Native.HasEmail();
|
|
var needAuth = Native.ContactNeedsAuth(uid);
|
|
var isLocal = Native.IsContactLocal(uid);
|
|
var isInLocalGroup = Native.IsGroupLocal(groupId);
|
|
var isInRoster = Native.IsCurrentInRoster();
|
|
var isSpam = uid == Native.GetSpamContact();
|
|
var isOnline = CommonNative.IsOnline();
|
|
contactmenu.$("#msendmail").setVisible(!isSpam && hasMail);
|
|
var item = contactmenu.$("#maddcontacttoserver");
|
|
item.setVisible(!isSpam && isLocal && isOnline);
|
|
item.state.disabled = groupId == 0 || isInLocalGroup;
|
|
item = contactmenu.$("#mreqxstatus");
|
|
item.setVisible(!isSpam);
|
|
item.state.disabled = !isOnline;
|
|
item = contactmenu.$("#mreqauth");
|
|
item.setVisible(!isSpam && (isModKey || (isInRoster && needAuth)));
|
|
item.state.disabled = !isOnline;
|
|
item = contactmenu.$("#mgrantauth");
|
|
item.setVisible(!isSpam && (isModKey));
|
|
item.state.disabled = !isOnline;
|
|
contactmenu.$("#mreqavatar").setVisible(View.share.commonSettings.supportAvatars && !isSpam);
|
|
contactmenu.$("#mviewinfo").setVisible(!isSpam);
|
|
|
|
var mmovetogroup = contactmenu.$("#mmovetogroup");
|
|
mmovetogroup.state.disabled = !isLocal && !isOnline;
|
|
mmovetogroup.setVisible(!isSpam && isInRoster);
|
|
contactmenu.$("#maddtocl").setVisible(!isSpam && !isInRoster);
|
|
|
|
mmovetogroup.$("> span").text = groupId == 0 ?
|
|
_("Move to group") :
|
|
printf(_("Move from %s to group"), Native.GetGroupName(groupId));
|
|
|
|
if (!isSpam)
|
|
if (isInRoster)
|
|
renderGroupLists(contactmenu.$("#mgrouplist3"), isLocal);
|
|
else
|
|
renderGroupLists(contactmenu.$("#mgrouplist2"), true);
|
|
|
|
contactmenu.$("#mrenamecontact").setVisible(!isSpam);
|
|
contactmenu.$("#mremovecontactfromserver").setVisible(isOnline && isInRoster && (isModKey || !isLocal));
|
|
contactmenu.$("#mdeletecontact").state.disabled = !isLocal && !isOnline;
|
|
contactmenu.$("#mdeletecontacthistory").setVisible(isModKey);
|
|
contactmenu.$("#mdeletecontactandhistory").setVisible(isModKey);
|
|
contactmenu.$("#mdeletecontactandhistory").state.disabled = !isLocal && !isOnline;
|
|
|
|
contactmenu.$("#mseparator").setVisible(!isSpam);
|
|
contactmenu.$("#mignorelist").setVisible(!isSpam);
|
|
var pic = contactmenu.$("#mignorelist").$("div[pic]");
|
|
if (Native.CurrentIsInIgnoreList())
|
|
pic.setIcon("right");
|
|
else
|
|
pic.clearSprite();
|
|
contactmenu.$("#mquietlist").setVisible(!isSpam);
|
|
pic = contactmenu.$("#mquietlist").$("div[pic]");
|
|
if (Native.CurrentIsInQuietList())
|
|
pic.setIcon("right");
|
|
else
|
|
pic.clearSprite();
|
|
|
|
contactmenu.$("#muin").$("> span").text = Native.GetCurrentUIN2Show();
|
|
contactmenu.uin = uid;
|
|
}
|
|
|
|
function openContactMenu(uid, x = 0, y = 0) {
|
|
rebuildContactMenu(uid);
|
|
|
|
if (x == 0 && y == 0) [x, y] = view.box("position", "cursor");
|
|
var pos = 7;
|
|
[pos, x, y] = getPopupPosition(x, y, contactmenu);
|
|
document.popup(contactmenu, {
|
|
anchorAt: 7,
|
|
popupAt: pos,
|
|
x: x,
|
|
y: y
|
|
});
|
|
}
|
|
|
|
setMenuListener(contactmenu, function() {
|
|
const Native = View.share.MainNative;
|
|
var groupid = this.attr["groupid"];
|
|
if (this.parent)
|
|
switch (this.parent.id) {
|
|
case "mgrouplist2":
|
|
if (groupid) Native.AddCurrentToGroup(parseInt(groupid));
|
|
return;
|
|
case "mgrouplist3":
|
|
if (groupid) Native.MoveCurrentToGroup(parseInt(groupid));
|
|
return;
|
|
}
|
|
|
|
switch (this.id) {
|
|
case "msendmsg": Native.OpenChatWithCurrent(); break;
|
|
case "msendmail": Native.SendMailToCurrent(); break;
|
|
case "maddcontacttoserver": Native.AddCurrentContactToServer(); break;
|
|
case "mreqxstatus": Native.CurrentRequestXStatus(); break;
|
|
case "mreqauth": Native.CurrentRequestAuth(); break;
|
|
case "mgrantauth": Native.CurrentGrantAuth(); break;
|
|
case "mreqavatar": Native.CurrentRequestAvatar(); break;
|
|
case "mviewinfo": Native.CurrentViewInfo(); break;
|
|
case "mrenamecontact": {
|
|
Native.ShowAndActivate();
|
|
var main = view.uniqueid == "main" ? view : findWindow("main");
|
|
if (!main) return;
|
|
var cl = main.document.globalThis.cl;
|
|
var opt = cl.getContactByUIN(contactmenu.uin); // only works if contact is visible
|
|
if (opt) {
|
|
opt.execCommand("set-current");
|
|
cl.setClicked(opt);
|
|
opt.startEditing();
|
|
}
|
|
break;
|
|
}
|
|
case "mremovecontactfromserver": Native.RemoveCurrentContactFromServer(); break;
|
|
case "mdeletecontact": Native.DeleteCurrentContact(); break;
|
|
case "mdeletecontacthistory": Native.DeleteCurrentContactHistory(); break;
|
|
case "mdeletecontactandhistory": Native.DeleteCurrentContactAndHistory(); break;
|
|
case "mignorelist": Native.AddCurrentToIgnoreList(); break;
|
|
case "mquietlist": Native.AddCurrentToQuietList(); break;
|
|
case "muin": Clipboard.writeText(contactmenu.uin); break;
|
|
}
|
|
}); |