add history state navigation
This commit is contained in:
parent
04f634a708
commit
906f4a51d6
5 changed files with 17 additions and 11 deletions
|
@ -801,7 +801,7 @@ class Channel extends SnowFlake{
|
|||
}
|
||||
}
|
||||
static genid: number = 0;
|
||||
async getHTML(){
|
||||
async getHTML(addstate=true){
|
||||
const id = ++Channel.genid;
|
||||
if(this.localuser.channelfocus){
|
||||
this.localuser.channelfocus.infinite.delete();
|
||||
|
@ -820,8 +820,9 @@ class Channel extends SnowFlake{
|
|||
this.localuser.userinfo.updateLocal();
|
||||
this.localuser.channelfocus = this;
|
||||
const prom = this.infinite.delete();
|
||||
history.pushState(null, "", "/channels/" + this.guild_id + "/" + this.id);
|
||||
|
||||
if(addstate){
|
||||
history.pushState([this.guild_id,this.id], "", "/channels/" + this.guild_id + "/" + this.id);
|
||||
}
|
||||
this.localuser.pageTitle("#" + this.name);
|
||||
const channelTopic = document.getElementById("channelTopic") as HTMLSpanElement;
|
||||
if(this.topic){
|
||||
|
|
|
@ -180,7 +180,7 @@ class Group extends Channel{
|
|||
this.guild.prevchannel = this;
|
||||
this.localuser.channelfocus = this;
|
||||
const prom = this.infinite.delete();
|
||||
history.pushState(null, "", "/channels/" + this.guild_id + "/" + this.id);
|
||||
history.pushState([this.guild_id,this.id], "", "/channels/" + this.guild_id + "/" + this.id);
|
||||
this.localuser.pageTitle("@" + this.name);
|
||||
(document.getElementById("channelTopic") as HTMLElement).setAttribute("hidden","");
|
||||
|
||||
|
|
|
@ -584,22 +584,22 @@ class Guild extends SnowFlake{
|
|||
}
|
||||
return this.member.hasRole(r);
|
||||
}
|
||||
loadChannel(ID?: string | undefined){
|
||||
loadChannel(ID?: string | undefined,addstate=true){
|
||||
if(ID){
|
||||
const channel = this.localuser.channelids.get(ID);
|
||||
if(channel){
|
||||
channel.getHTML();
|
||||
channel.getHTML(addstate);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if(this.prevchannel){
|
||||
console.log(this.prevchannel);
|
||||
this.prevchannel.getHTML();
|
||||
this.prevchannel.getHTML(addstate);
|
||||
return;
|
||||
}
|
||||
for(const thing of this.channels){
|
||||
if(thing.children.length === 0){
|
||||
thing.getHTML();
|
||||
thing.getHTML(addstate);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -148,7 +148,12 @@ import { I18n } from "./i18n.js";
|
|||
|
||||
const pasteImageElement = document.getElementById("pasteimage") as HTMLDivElement;
|
||||
let replyingTo: Message | null = null;
|
||||
|
||||
window.addEventListener("popstate",(e)=>{
|
||||
if(e.state instanceof Object){
|
||||
thisUser.goToChannel(e.state[1],false);
|
||||
}
|
||||
//console.log(e.state,"state:3")
|
||||
})
|
||||
async function handleEnter(event: KeyboardEvent): Promise<void>{
|
||||
if(thisUser.keyup(event)){return}
|
||||
const channel = thisUser.channelfocus;
|
||||
|
|
|
@ -726,12 +726,12 @@ class Localuser{
|
|||
}
|
||||
}
|
||||
gotoid: string | undefined;
|
||||
async goToChannel(id: string){
|
||||
async goToChannel(id: string,addstate=true){
|
||||
const channel = this.channelids.get(id);
|
||||
if(channel){
|
||||
const guild = channel.guild;
|
||||
guild.loadGuild();
|
||||
guild.loadChannel(id);
|
||||
guild.loadChannel(id,addstate);
|
||||
}else{
|
||||
this.gotoid = id;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue