diff --git a/.dist/channel.js b/.dist/channel.js index c125a48..c06d558 100644 --- a/.dist/channel.js +++ b/.dist/channel.js @@ -930,6 +930,10 @@ class Channel extends SnowFlake { if (this.localuser.channelfocus !== this) { return; } + for (const elm of messages.getElementsByClassName("scroller")) { + elm.remove(); + console.warn("rouge element detected and removed"); + } messages.append(await this.infinite.getDiv(id)); this.infinite.updatestuff(); this.infinite.watchForChange().then(async (_) => { diff --git a/.dist/guild.js b/.dist/guild.js index 6d5ac95..f19c40d 100644 --- a/.dist/guild.js +++ b/.dist/guild.js @@ -46,7 +46,7 @@ class Guild extends SnowFlake { }); Guild.contextmenu.addbutton("Create invite", function () { }, null, _ => true, _ => false); - Guild.contextmenu.addbutton("Settings[temp]", function () { + Guild.contextmenu.addbutton("Settings", function () { this.generateSettings(); }); /* -----things left for later----- @@ -62,6 +62,16 @@ class Guild extends SnowFlake { } generateSettings() { const settings = new Settings("Settings for " + this.properties.name); + { + const overview = settings.addButton("Overview"); + const form = overview.addForm("", _ => { }, { + headers: this.headers, + traditionalSubmit: true, + fetchURL: this.info.api + "/guilds/" + this.id, + method: "PATCH" + }); + form.addTextInput("Name:", "name", { initText: this.properties.name }); + } const s1 = settings.addButton("roles"); const permlist = []; for (const thing of this.roles) { diff --git a/.dist/infiniteScroller.js b/.dist/infiniteScroller.js index 3144019..9eac035 100644 --- a/.dist/infiniteScroller.js +++ b/.dist/infiniteScroller.js @@ -17,6 +17,9 @@ class InfiniteScroller { timeout; async getDiv(initialId, bottom = true) { //div.classList.add("flexttb") + if (this.div) { + throw new Error("Div already exists, exiting."); + } const scroll = document.createElement("div"); scroll.classList.add("flexttb", "scroller"); this.beenloaded = false; @@ -63,6 +66,7 @@ class InfiniteScroller { averageheight = 60; checkscroll() { if (this.beenloaded && this.div && !document.body.contains(this.div)) { + console.warn("not in document"); this.div = null; } } diff --git a/.dist/settings.js b/.dist/settings.js index 0454812..60b4073 100644 --- a/.dist/settings.js +++ b/.dist/settings.js @@ -544,6 +544,12 @@ class Options { this.generate(text); return text; } + addForm(name, onSubmit, { ltr = false, submitText = "Submit", fetchURL = "", headers = {}, method = "POST", traditionalSubmit = false } = {}) { + const options = new Form(name, this, onSubmit, { ltr, submitText, fetchURL, headers, method, traditionalSubmit }); + this.options.push(options); + this.generate(options); + return options; + } generate(elm) { const container = this.container.deref(); if (container) { diff --git a/webpage/channel.ts b/webpage/channel.ts index 5ab1884..2e61250 100644 --- a/webpage/channel.ts +++ b/webpage/channel.ts @@ -935,6 +935,10 @@ class Channel extends SnowFlake{ if(this.localuser.channelfocus!==this){ return; } + for(const elm of messages.getElementsByClassName("scroller")){ + elm.remove(); + console.warn("rouge element detected and removed") + } messages.append(await this.infinite.getDiv(id)); this.infinite.updatestuff(); this.infinite.watchForChange().then(async _=>{ diff --git a/webpage/guild.ts b/webpage/guild.ts index 6a12668..a84f7c0 100644 --- a/webpage/guild.ts +++ b/webpage/guild.ts @@ -55,7 +55,7 @@ class Guild extends SnowFlake{ Guild.contextmenu.addbutton("Create invite",function(this:Guild){ },null,_=>true,_=>false); - Guild.contextmenu.addbutton("Settings[temp]",function(this:Guild){ + Guild.contextmenu.addbutton("Settings",function(this:Guild){ this.generateSettings(); }); /* -----things left for later----- @@ -71,7 +71,16 @@ class Guild extends SnowFlake{ } generateSettings(){ const settings=new Settings("Settings for "+this.properties.name); - + { + const overview=settings.addButton("Overview"); + const form=overview.addForm("",_=>{},{ + headers:this.headers, + traditionalSubmit:true, + fetchURL:this.info.api+"/guilds/"+this.id, + method:"PATCH" + }) + form.addTextInput("Name:","name",{initText:this.properties.name}) + } const s1=settings.addButton("roles"); const permlist:[Role,Permissions][]=[]; for(const thing of this.roles){ diff --git a/webpage/infiniteScroller.ts b/webpage/infiniteScroller.ts index 64339f5..7a6d593 100644 --- a/webpage/infiniteScroller.ts +++ b/webpage/infiniteScroller.ts @@ -17,6 +17,9 @@ class InfiniteScroller{ timeout:NodeJS.Timeout|null; async getDiv(initialId:string,bottom=true):Promise{ //div.classList.add("flexttb") + if(this.div){ + throw new Error("Div already exists, exiting.") + } const scroll=document.createElement("div"); scroll.classList.add("flexttb","scroller"); this.beenloaded=false; @@ -66,6 +69,7 @@ class InfiniteScroller{ averageheight:number=60; checkscroll(){ if(this.beenloaded&&this.div&&!document.body.contains(this.div)){ + console.warn("not in document"); this.div=null; } } diff --git a/webpage/settings.ts b/webpage/settings.ts index b91cead..a42edc6 100644 --- a/webpage/settings.ts +++ b/webpage/settings.ts @@ -556,6 +556,12 @@ class Options implements OptionsElement{ this.generate(text); return text; } + addForm(name:string,onSubmit:((arg1:object)=>void),{ltr=false,submitText="Submit",fetchURL="",headers={},method="POST",traditionalSubmit=false}={}){ + const options=new Form(name,this,onSubmit,{ltr,submitText,fetchURL,headers,method,traditionalSubmit}); + this.options.push(options); + this.generate(options); + return options; + } generate(elm:OptionsElement){ const container=this.container.deref(); if(container){