diff --git a/.dist/direct.js b/.dist/direct.js index 507907a..9296048 100644 --- a/.dist/direct.js +++ b/.dist/direct.js @@ -4,7 +4,9 @@ import { Message } from "./message.js"; import { User } from "./user.js"; import { Permissions } from "./permissions.js"; import { SnowFlake } from "./snowflake.js"; +import { Contextmenu } from "./contextmenu.js"; class Direct extends Guild { + channelids; constructor(json, owner) { super(-1, owner, null); this.message_notifications = 0; @@ -35,6 +37,13 @@ class Direct extends Guild { this.printServers(); return thischannel; } + delChannel(json) { + const channel = this.channelids[json.id]; + super.delChannel(json); + if (channel) { + channel.del(); + } + } giveMember(_member) { console.error("not a real guild, can't give member object"); } @@ -76,6 +85,21 @@ dmPermissions.setPermission("STREAM", 1); dmPermissions.setPermission("USE_VAD", 1); class Group extends Channel { user; + static contextmenu = new Contextmenu("channel menu"); + static setupcontextmenu() { + this.contextmenu.addbutton("Copy DM id", function () { + navigator.clipboard.writeText(this.id); + }); + this.contextmenu.addbutton("Mark as read", function () { + this.readbottom(); + }); + this.contextmenu.addbutton("Close DM", function () { + this.deleteChannel(); + }); + this.contextmenu.addbutton("Copy user ID", function () { + navigator.clipboard.writeText(this.user.id); + }); + } constructor(json, owner) { super(-1, owner, json.id); this.owner = owner; @@ -109,6 +133,7 @@ class Group extends Channel { } createguildHTML() { const div = document.createElement("div"); + Group.contextmenu.bindContextmenu(div, this, undefined); this.html = new WeakRef(div); div.classList.add("channeleffects"); const myhtml = document.createElement("span"); @@ -202,6 +227,15 @@ class Group extends Channel { } all = new WeakRef(document.createElement("div")); noti = new WeakRef(document.createElement("div")); + del() { + const all = this.all.deref(); + if (all) { + all.remove(); + } + if (this.myhtml) { + this.myhtml.remove(); + } + } unreads() { const sentdms = document.getElementById("sentdms"); //Need to change sometime const current = this.all.deref(); @@ -244,3 +278,4 @@ class Group extends Channel { } } export { Direct, Group }; +Group.setupcontextmenu(); diff --git a/webpage/direct.ts b/webpage/direct.ts index 00cc791..eb8dd3f 100644 --- a/webpage/direct.ts +++ b/webpage/direct.ts @@ -3,11 +3,13 @@ import{ Channel }from"./channel.js"; import{ Message }from"./message.js"; import{ Localuser }from"./localuser.js"; import{User}from"./user.js"; -import{ dirrectjson, memberjson, messagejson }from"./jsontypes.js"; +import{ channeljson, dirrectjson, memberjson, messagejson }from"./jsontypes.js"; import{ Permissions }from"./permissions.js"; import { SnowFlake } from "./snowflake.js"; +import { Contextmenu } from "./contextmenu.js"; class Direct extends Guild{ + channelids:{[key:string]:Group}; constructor(json:dirrectjson[],owner:Localuser){ super(-1,owner,null); this.message_notifications=0; @@ -38,6 +40,13 @@ class Direct extends Guild{ this.printServers(); return thischannel; } + delChannel(json:channeljson){ + const channel=this.channelids[json.id]; + super.delChannel(json); + if(channel){ + channel.del(); + } + } giveMember(_member:memberjson){ console.error("not a real guild, can't give member object"); } @@ -82,6 +91,24 @@ dmPermissions.setPermission("USE_VAD",1); class Group extends Channel{ user:User; + static contextmenu=new Contextmenu("channel menu"); + static setupcontextmenu(){ + this.contextmenu.addbutton("Copy DM id",function(this:Group){ + navigator.clipboard.writeText(this.id); + }); + + this.contextmenu.addbutton("Mark as read",function(this:Group){ + this.readbottom(); + }); + + this.contextmenu.addbutton("Close DM",function(this:Group){ + this.deleteChannel(); + }); + + this.contextmenu.addbutton("Copy user ID",function(){ + navigator.clipboard.writeText(this.user.id); + }) + } constructor(json:dirrectjson,owner:Direct){ super(-1,owner,json.id); this.owner=owner; @@ -113,6 +140,7 @@ class Group extends Channel{ } createguildHTML(){ const div=document.createElement("div"); + Group.contextmenu.bindContextmenu(div,this,undefined); this.html=new WeakRef(div); div.classList.add("channeleffects"); const myhtml=document.createElement("span"); @@ -123,6 +151,7 @@ class Group extends Channel{ div.onclick=_=>{ this.getHTML(); }; + return div; } async getHTML(){ @@ -205,6 +234,15 @@ class Group extends Channel{ } all:WeakRef=new WeakRef(document.createElement("div")); noti:WeakRef=new WeakRef(document.createElement("div")); + del(){ + const all=this.all.deref(); + if(all){ + all.remove(); + } + if(this.myhtml){ + this.myhtml.remove(); + } + } unreads(){ const sentdms=document.getElementById("sentdms") as HTMLDivElement;//Need to change sometime const current=this.all.deref(); @@ -246,3 +284,4 @@ class Group extends Channel{ } } export{Direct, Group}; +Group.setupcontextmenu();