Carbon/src/js/room-picker.js

120 lines
2.2 KiB
JavaScript
Raw Normal View History

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()