Bug fixes, blocking and various other changes

This commit is contained in:
MathMan05 2024-08-21 11:37:26 -05:00
parent 42a438f6dc
commit dbee2f3628
22 changed files with 679 additions and 370 deletions

View file

@ -1,7 +1,7 @@
class Contextmenu{
class Contextmenu<x,y>{
static currentmenu;
name:string;
buttons:[string,Function,string|null,Function,Function,string][];
buttons:[string,(e:MouseEvent)=>void,string|null,(this:x,arg:y)=>boolean,(this:x,arg:y)=>boolean,string][];
div:HTMLDivElement;
static setup(){
Contextmenu.currentmenu="";
@ -19,28 +19,28 @@ class Contextmenu{
this.name=name;
this.buttons=[]
}
addbutton(text:string,onclick:Function,img:null|string=null,shown=_=>true,enabled=_=>true){
addbutton(text:string,onclick:(e:MouseEvent)=>void,img:null|string=null,shown:(this:x,arg:y)=>boolean=_=>true,enabled:(this:x,arg:y)=>boolean=_=>true){
this.buttons.push([text,onclick,img,shown,enabled,"button"]);
return {};
}
addsubmenu(text:string,onclick:(e:MouseEvent)=>void,img=null,shown=_=>true,enabled=_=>true){
addsubmenu(text:string,onclick:(e:MouseEvent)=>void,img=null,shown:(this:x,arg:y)=>boolean=_=>true,enabled:(this:x,arg:y)=>boolean=_=>true){
this.buttons.push([text,onclick,img,shown,enabled,"submenu"])
return {};
}
makemenu(x:number,y:number,addinfo:any,obj:HTMLElement){
makemenu(x:number,y:number,addinfo:any,other:y){
const div=document.createElement("div");
div.classList.add("contextmenu","flexttb");
for(const thing of this.buttons){
if(!thing[3](addinfo)){continue;}
if(!thing[3].bind(addinfo)(other)){continue;}
const intext=document.createElement("button")
intext.disabled=!thing[4]();
intext.disabled=!thing[4].bind(addinfo)(other);
intext.classList.add("contextbutton")
intext.textContent=thing[0]
console.log(thing)
if(thing[5]==="button"){
intext.onclick=thing[1].bind(addinfo,obj);
intext.onclick=thing[1].bind(addinfo,other);
}else if(thing[5]==="submenu"){
intext.onclick=thing[1].bind(addinfo);
intext.onclick=thing[1].bind(addinfo,other);
}
div.appendChild(intext);
@ -56,11 +56,11 @@ class Contextmenu{
Contextmenu.currentmenu=div;
return this.div;
}
bind(obj:HTMLElement,addinfo:any=undefined){
bindContextmenu(obj:HTMLElement,addinfo:x,other:y){
const func=(event) => {
event.preventDefault();
event.stopImmediatePropagation();
this.makemenu(event.clientX,event.clientY,addinfo,obj)
this.makemenu(event.clientX,event.clientY,addinfo,other);
}
obj.addEventListener("contextmenu", func);
return func;