120 lines
2.2 KiB
JavaScript
120 lines
2.2 KiB
JavaScript
|
import {q, ElemJS, ejs} from "./basic.js"
|
||
|
|
||
|
class Group extends ElemJS {
|
||
|
constructor(groups, data) {
|
||
|
super("div")
|
||
|
|
||
|
this.groups = groups
|
||
|
this.data = data
|
||
|
|
||
|
this.on("click", this.onClick.bind(this))
|
||
|
|
||
|
this.class("c-group")
|
||
|
this.child(
|
||
|
(this.data.icon
|
||
|
? ejs("img").class("c-group__icon").attribute("src", this.data.icon)
|
||
|
: ejs("div").class("c-group__icon")
|
||
|
),
|
||
|
ejs("div").class("c-group__name").text(this.data.name)
|
||
|
)
|
||
|
}
|
||
|
|
||
|
onClick() {
|
||
|
this.groups.setGroup(this)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class Room extends ElemJS {
|
||
|
constructor(name) {
|
||
|
super("div")
|
||
|
|
||
|
this.name = name
|
||
|
|
||
|
this.class("c-room")
|
||
|
this.child(
|
||
|
ejs("div").class("c-room__icon"),
|
||
|
ejs("div").class("c-room__name").text(this.name)
|
||
|
)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class Rooms extends ElemJS {
|
||
|
constructor() {
|
||
|
super(q("#c-rooms"))
|
||
|
|
||
|
this.rooms = []
|
||
|
|
||
|
this.render()
|
||
|
}
|
||
|
|
||
|
setRooms(rooms) {
|
||
|
this.rooms = rooms
|
||
|
this.render()
|
||
|
}
|
||
|
|
||
|
render() {
|
||
|
this.clearChildren()
|
||
|
for (const room of this.rooms) {
|
||
|
this.child(new Room(room.name))
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
const rooms = new Rooms()
|
||
|
|
||
|
class Groups extends ElemJS {
|
||
|
constructor() {
|
||
|
super(q("#c-groups-list"))
|
||
|
this.groups = [
|
||
|
{name: "Directs", icon: "/static/directs.svg", rooms: [
|
||
|
{name: "riley"},
|
||
|
{name: "BadAtNames"},
|
||
|
{name: "lynxano"},
|
||
|
{name: "quarky"},
|
||
|
{name: "lepton"},
|
||
|
{name: "ash"},
|
||
|
{name: "mewmew"},
|
||
|
{name: "Toniob"},
|
||
|
{name: "cockandball"}
|
||
|
]},
|
||
|
{name: "Channels", icon: "/static/channels.svg", rooms: [
|
||
|
{name: "Carbon brainstorming"},
|
||
|
{name: "Bibliogram"},
|
||
|
{name: "Monsters Inc Debate Hall"},
|
||
|
{name: "DRB clan"},
|
||
|
{name: "mettaton simp zone"}
|
||
|
]},
|
||
|
{name: "Fediverse Drama Museum", rooms: [
|
||
|
{name: "witches"},
|
||
|
{name: "snouts"},
|
||
|
{name: "monads"},
|
||
|
{name: "radical"},
|
||
|
{name: "blobcat"}
|
||
|
]},
|
||
|
{name: "Epicord", rooms: [
|
||
|
{name: "main"},
|
||
|
{name: "gaming"},
|
||
|
{name: "inhalers"},
|
||
|
{name: "minecraft"},
|
||
|
{name: "osu"},
|
||
|
{name: "covid"}
|
||
|
]},
|
||
|
{name: "Invidious", rooms: [
|
||
|
]}
|
||
|
]
|
||
|
this.render()
|
||
|
this.setGroup(this.children[0])
|
||
|
}
|
||
|
|
||
|
setGroup(group) {
|
||
|
rooms.setRooms(group.data.rooms)
|
||
|
}
|
||
|
|
||
|
render() {
|
||
|
this.clearChildren()
|
||
|
for (const group of this.groups) {
|
||
|
this.child(new Group(this, group))
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
const groups = new Groups()
|