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.
RnQ/Distro/Template/menus/contactmenu.js

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;
}
});