From 25c3fe17b412d78c5d10c4f9d0d07cafb9e61b7f Mon Sep 17 00:00:00 2001 From: Cadence Ember Date: Tue, 20 Oct 2020 23:26:32 +1300 Subject: [PATCH] Actually delete build directory --- build/index.html | 35 --- build/static/Anchor.js | 15 -- build/static/Timeline.js | 282 ------------------------- build/static/basic.js | 160 -------------- build/static/channels.svg | 83 -------- build/static/chat-input.js | 37 ---- build/static/chat.js | 65 ------ build/static/directs.svg | 72 ------- build/static/groups.js | 14 -- build/static/join-event.svg | 80 ------- build/static/lsm.js | 11 - build/static/main.css | 261 ----------------------- build/static/room-picker.js | 230 -------------------- build/static/store/Subscribable.js | 38 ---- build/static/store/SubscribeMapList.js | 86 -------- build/static/store/SubscribeSet.js | 50 ----- build/static/store/SubscribeValue.js | 47 ----- build/static/store/store.js | 17 -- build/static/sync/sync.js | 127 ----------- build/static/whitney-400.woff | Bin 77784 -> 0 bytes build/static/whitney-500.woff | Bin 76744 -> 0 bytes 21 files changed, 1710 deletions(-) delete mode 100644 build/index.html delete mode 100644 build/static/Anchor.js delete mode 100644 build/static/Timeline.js delete mode 100644 build/static/basic.js delete mode 100644 build/static/channels.svg delete mode 100644 build/static/chat-input.js delete mode 100644 build/static/chat.js delete mode 100644 build/static/directs.svg delete mode 100644 build/static/groups.js delete mode 100644 build/static/join-event.svg delete mode 100644 build/static/lsm.js delete mode 100644 build/static/main.css delete mode 100644 build/static/room-picker.js delete mode 100644 build/static/store/Subscribable.js delete mode 100644 build/static/store/SubscribeMapList.js delete mode 100644 build/static/store/SubscribeSet.js delete mode 100644 build/static/store/SubscribeValue.js delete mode 100644 build/static/store/store.js delete mode 100644 build/static/sync/sync.js delete mode 100644 build/static/whitney-400.woff delete mode 100644 build/static/whitney-500.woff diff --git a/build/index.html b/build/index.html deleted file mode 100644 index 29b927a..0000000 --- a/build/index.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - Carbon - - -
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
- - \ No newline at end of file diff --git a/build/static/Anchor.js b/build/static/Anchor.js deleted file mode 100644 index d07e239..0000000 --- a/build/static/Anchor.js +++ /dev/null @@ -1,15 +0,0 @@ -import {ElemJS} from "../static/basic.js?static=4212436742" - -class Anchor extends ElemJS { - constructor() { - super("div") - this.class("c-anchor") - } - - scroll() { - // console.log("anchor scrolled") - this.element.scrollIntoView({block: "start"}) - } -} - -export {Anchor} diff --git a/build/static/Timeline.js b/build/static/Timeline.js deleted file mode 100644 index 9383763..0000000 --- a/build/static/Timeline.js +++ /dev/null @@ -1,282 +0,0 @@ -import {ElemJS, ejs} from "../static/basic.js?static=4212436742" -import {Subscribable} from "../static/store/Subscribable.js?static=19b7e44aa6" -import {store} from "../static/store/store.js?static=ce3066287b" -import {Anchor} from "../static/Anchor.js?static=85efd1a836" -import * as lsm from "../static/lsm.js?static=aed2c7ca35" -import {resolveMxc} from "../static/functions.js?static=e3784c70ce" - -const dateFormatter = Intl.DateTimeFormat("default", {hour: "numeric", minute: "numeric", day: "numeric", month: "short", year: "numeric"}) - -let sentIndex = 0 - -function getTxnId() { - return Date.now() + (sentIndex++) -} - -function eventSearch(list, event, min = 0, max = -1) { - if (list.length === 0) return {success: false, i: 0} - - if (max === -1) max = list.length - 1 - let mid = Math.floor((max + min) / 2) - // success condition - if (list[mid] && list[mid].data.event_id === event.data.event_id) return {success: true, i: mid} - // failed condition - if (min >= max) { - while (mid !== -1 && (!list[mid] || list[mid].data.origin_server_ts > event.data.origin_server_ts)) mid-- - return { - success: false, - i: mid + 1 - } - } - // recurse (below) - if (list[mid].data.origin_server_ts > event.data.origin_server_ts) return eventSearch(list, event, min, mid-1) - // recurse (above) - else return eventSearch(list, event, mid+1, max) -} - -class Event extends ElemJS { - constructor(data) { - super("div") - this.class("c-message") - this.data = null - this.group = null - this.update(data) - } - - setGroup(group) { - this.group = group - } - - update(data) { - this.data = data - this.render() - } - - removeEvent() { - if (this.group) this.group.removeEvent(this) - else this.remove() - } - - render() { - this.element.classList[this.data.pending ? "add" : "remove"]("c-message--pending") - this.text(this.data.content.body) - } -} - -class Sender { - constructor(roomID, mxid) { - this.sender = store.rooms.get(roomID).value().members.get(mxid) - this.sender.subscribe("changeSelf", this.update.bind(this)) - this.name = new ElemJS("div").class("c-message-group__name") - this.avatar = new ElemJS("div").class("c-message-group__avatar") - this.update() - } - - update() { - if (this.sender.exists()) { - // name - this.name.text(this.sender.value().content.displayname) - - // avatar - this.avatar.clearChildren() - if (this.sender.value().content.avatar_url) { - this.avatar.child( - ejs("img").class("c-message-group__icon").attribute("src", resolveMxc(this.sender.value().content.avatar_url, 96, "crop")) - ) - } else { - this.avatar.child( - ejs("div").class("c-message-group__icon", "c-message-group__icon--no-icon") - ) - } - } - } -} - -class EventGroup extends ElemJS { - constructor(reactive, list) { - super("div") - this.class("c-message-group") - this.reactive = reactive - this.list = list - this.data = { - sender: list[0].data.sender, - origin_server_ts: list[0].data.origin_server_ts - } - this.sender = new Sender(this.reactive.id, this.data.sender) - this.child( - this.sender.avatar, - this.messages = ejs("div").class("c-message-group__messages").child( - ejs("div").class("c-message-group__intro").child( - this.sender.name, - ejs("div").class("c-message-group__date").text(dateFormatter.format(this.data.origin_server_ts)) - ), - ...this.list - ) - ) - } - - addEvent(event) { - const index = eventSearch(this.list, event).i - event.setGroup(this) - this.list.splice(index, 0, event) - this.messages.childAt(index + 1, event) - } - - removeEvent(event) { - const search = eventSearch(this.list, event) - if (!search.success) throw new Error(`Event ${event.data.event_id} not found in this group`) - const index = search.i - // actually remove the event - this.list.splice(index, 1) - event.remove() // should get everything else - if (this.list.length === 0) this.reactive.removeGroup(this) - } -} - -class ReactiveTimeline extends ElemJS { - constructor(id, list) { - super("div") - this.class("c-event-groups") - this.id = id - this.list = list - this.render() - } - - addEvent(event) { - const search = eventSearch(this.list, event) - // console.log(search, this.list.map(l => l.data.sender), event.data) - if (!search.success && search.i >= 1) this.tryAddGroups(event, [search.i-1, search.i]) - else this.tryAddGroups(event, [search.i]) - } - - tryAddGroups(event, indices) { - const success = indices.some(i => { - if (!this.list[i]) { - // if (printed++ < 100) console.log("tryadd success, created group") - const group = new EventGroup(this, [event]) - this.list.splice(i, 0, group) - this.childAt(i, group) - return true - } else if (this.list[i] && this.list[i].data.sender === event.data.sender) { - // if (printed++ < 100) console.log("tryadd success, using existing group") - this.list[i].addEvent(event) - return true - } - }) - if (!success) console.log("tryadd failure", indices, this.list.map(l => l.data.sender), event.data) - } - - removeGroup(group) { - const index = this.list.indexOf(group) - this.list.splice(index, 1) - group.remove() // should get everything else - } - - render() { - this.clearChildren() - this.list.forEach(group => this.child(group)) - this.anchor = new Anchor() - this.child(this.anchor) - } -} - -class Timeline extends Subscribable { - constructor(id) { - super() - Object.assign(this.events, { - beforeChange: [], - afterChange: [] - }) - Object.assign(this.eventDeps, { - beforeChange: [], - afterChange: [] - }) - this.id = id - this.list = [] - this.map = new Map() - this.reactiveTimeline = new ReactiveTimeline(id, []) - this.latest = 0 - this.pending = new Set() - } - - updateEvents(events) { - this.broadcast("beforeChange") - for (const eventData of events) { - this.latest = Math.max(this.latest, eventData.origin_server_ts) - let id = eventData.event_id - if (eventData.sender === lsm.get("mx_user_id") && eventData.content && this.pending.has(eventData.content["chat.carbon.message.pending_id"])) { - id = eventData.content["chat.carbon.message.pending_id"] - } - if (this.map.has(id)) { - this.map.get(id).update(eventData) - } else { - const event = new Event(eventData) - this.map.set(id, event) - this.reactiveTimeline.addEvent(event) - } - } - this.broadcast("afterChange") - } - - removeEvent(id) { - if (!this.map.has(id)) throw new Error(`Tried to delete event ID ${id} which does not exist`) - this.map.get(id).removeEvent() - this.map.delete(id) - } - - getTimeline() { - return this.reactiveTimeline - } - - send(body) { - const tx = getTxnId() - const id = `pending$${tx}` - this.pending.add(id) - const content = { - msgtype: "m.text", - body, - "chat.carbon.message.pending_id": id - } - const fakeEvent = { - origin_server_ts: Date.now(), - event_id: id, - sender: lsm.get("mx_user_id"), - content, - pending: true - } - this.updateEvents([fakeEvent]) - return fetch(`${lsm.get("domain")}/_matrix/client/r0/rooms/${this.id}/send/m.room.message/${tx}?access_token=${lsm.get("access_token")}`, { - method: "PUT", - body: JSON.stringify(content), - headers: { - "Content-Type": "application/json" - } - })/*.then(() => { - const subscription = () => { - this.removeEvent(id) - this.unsubscribe("afterChange", subscription) - } - this.subscribe("afterChange", subscription) - })*/ - } -/* - getGroupedEvents() { - let currentSender = Symbol("N/A") - let groups = [] - let currentGroup = [] - for (const event of this.list) { - if (event.sender === currentSender) { - currentGroup.push(event) - } else { - if (currentGroup.length) groups.push(currentGroup) - currentGroup = [event] - currentSender = event.sender - } - } - if (currentGroup.length) groups.push(currentGroup) - return groups - } - */ -} - -export {Timeline} diff --git a/build/static/basic.js b/build/static/basic.js deleted file mode 100644 index 1f3e695..0000000 --- a/build/static/basic.js +++ /dev/null @@ -1,160 +0,0 @@ -/** - * Shortcut for querySelector. - * @template {HTMLElement} T - * @returns {T} - */ -const q = s => document.querySelector(s); -/** - * Shortcut for querySelectorAll. - * @template {HTMLElement} T - * @returns {T[]} - */ -const qa = s => document.querySelectorAll(s); - -/** - * An easier, chainable, object-oriented way to create and update elements - * and children according to related data. Subclass ElemJS to create useful, - * advanced data managers, or just use it inline to quickly make a custom element. - * Created by Cadence Ember in 2018. - */ -class ElemJS { - constructor(type) { - if (type instanceof HTMLElement) { - // If passed an existing element, bind to it - this.bind(type); - } else { - // Otherwise, create a new detached element to bind to - this.bind(document.createElement(type)); - } - this.children = []; - } - - /** Bind this construct to an existing element on the page. */ - bind(element) { - this.element = element; - this.element.js = this; - return this; - } - - /** Add a class. */ - class() { - for (let name of arguments) if (name) this.element.classList.add(name); - return this; - } - - /** Remove a class. */ - removeClass() { - for (let name of arguments) if (name) this.element.classList.remove(name); - return this; - } - - /** Set a JS property on the element. */ - direct(name, value) { - if (name) this.element[name] = value; - return this; - } - - /** Set an attribute on the element. */ - attribute(name, value) { - if (name) this.element.setAttribute(name, value != undefined ? value : ""); - return this; - } - - /** Set a style on the element. */ - style(name, value) { - if (name) this.element.style[name] = value; - return this; - } - - /** Set the element's ID. */ - id(name) { - if (name) this.element.id = name; - return this; - } - - /** Attach a callback function to an event on the element. */ - on(name, callback) { - this.element.addEventListener(name, callback); - return this; - } - - /** Set the element's text. */ - text(name) { - this.element.innerText = name; - return this; - } - - /** Create a text node and add it to the element. */ - addText(name) { - const node = document.createTextNode(name); - this.element.appendChild(node); - return this; - } - - /** Set the element's HTML content. */ - html(name) { - this.element.innerHTML = name; - return this; - } - - /** - * Add children to the element. - * Children can either be an instance of ElemJS, in - * which case the element will be appended as a child, - * or a string, in which case the string will be added as a text node. - * Each child should be a parameter to this method. - */ - child(...children) { - for (const toAdd of children) { - if (typeof toAdd === "object" && toAdd !== null) { - // Should be an instance of ElemJS, so append as child - toAdd.parent = this; - this.element.appendChild(toAdd.element); - this.children.push(toAdd); - } else if (typeof toAdd === "string") { - // Is a string, so add as text node - this.addText(toAdd); - } - } - return this; - } - - childAt(index, toAdd) { - if (typeof toAdd === "object" && toAdd !== null) { - toAdd.parent = this; - this.children.splice(index, 0, toAdd); - if (index >= this.element.childNodes.length) { - this.element.appendChild(toAdd.element) - } else { - this.element.childNodes[index].insertAdjacentElement("beforebegin", toAdd.element) - } - } - } - - /** - * Remove all children from the element. - */ - clearChildren() { - this.children.length = 0; - while (this.element.lastChild) this.element.removeChild(this.element.lastChild); - } - - /** - * Remove this element. - */ - remove() { - let index; - if (this.parent && (index = this.parent.children.indexOf(this)) !== -1) { - this.parent.children.splice(index, 1); - } - this.parent = null; - this.element.remove(); - } -} - -/** Shortcut for `new ElemJS`. */ -function ejs(tag) { - return new ElemJS(tag); -} - -export {q, qa, ElemJS, ejs} diff --git a/build/static/channels.svg b/build/static/channels.svg deleted file mode 100644 index 121c251..0000000 --- a/build/static/channels.svg +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - diff --git a/build/static/chat-input.js b/build/static/chat-input.js deleted file mode 100644 index ca01cc1..0000000 --- a/build/static/chat-input.js +++ /dev/null @@ -1,37 +0,0 @@ -import {q} from "../static/basic.js?static=4212436742" -import {store} from "../static/store/store.js?static=ce3066287b" -import * as lsm from "../static/lsm.js?static=aed2c7ca35" -import {chat} from "../static/chat.js?static=b01b3716ff" - -const input = q("#c-chat-textarea") - -store.activeRoom.subscribe("changeSelf", () => { - if (store.activeRoom.exists()) { - input.focus() - } -}) - -input.addEventListener("keydown", event => { - if (event.key === "Enter" && !event.shiftKey && !event.ctrlKey) { - event.preventDefault() - const body = input.value - send(input.value) - input.value = "" - fixHeight() - } -}) - -input.addEventListener("input", () => { - fixHeight() -}) - -function fixHeight() { - input.style.height = "0px" - // console.log(input.clientHeight, input.scrollHeight) - input.style.height = (input.scrollHeight + 1) + "px" -} - -function send(body) { - if (!store.activeRoom.exists()) return - return store.activeRoom.value().timeline.send(body) -} diff --git a/build/static/chat.js b/build/static/chat.js deleted file mode 100644 index 8bb324d..0000000 --- a/build/static/chat.js +++ /dev/null @@ -1,65 +0,0 @@ -import {ElemJS, q, ejs} from "../static/basic.js?static=4212436742" -import {store} from "../static/store/store.js?static=ce3066287b" - -const chatMessages = q("#c-chat-messages") - -class Chat extends ElemJS { - constructor() { - super(q("#c-chat")) - - this.removableSubscriptions = [] - - store.activeRoom.subscribe("changeSelf", this.changeRoom.bind(this)) - - this.render() - } - - unsubscribe() { - this.removableSubscriptions.forEach(({name, target, subscription}) => { - target.unsubscribe(name, subscription) - }) - this.removableSubscriptions.length = 0 - } - - changeRoom() { - // disconnect from the previous room - this.unsubscribe() - // connect to the new room's timeline updater - if (store.activeRoom.exists()) { - const timeline = store.activeRoom.value().timeline - const subscription = () => { - // scroll anchor does not work if the timeline is scrolled to the top. - // at the start, when there are not enough messages for a full screen, this is the case. - // once there are enough messages that scrolling is necessary, we initiate a scroll down to activate the scroll anchor. - let oldDifference = chatMessages.scrollHeight - chatMessages.clientHeight - setTimeout(() => { - let newDifference = chatMessages.scrollHeight - chatMessages.clientHeight - // console.log("height difference", oldDifference, newDifference) - if (oldDifference < 24) { // this is jank - this.element.parentElement.scrollBy(0, 1000) - } - }, 0) - } - const name = "beforeChange" - this.removableSubscriptions.push({name, target: timeline, subscription}) - timeline.subscribe(name, subscription) - } - this.render() - } - - render() { - this.clearChildren() - if (store.activeRoom.exists()) { - const reactiveTimeline = store.activeRoom.value().timeline.getTimeline() - this.child(reactiveTimeline) - setTimeout(() => { - this.element.parentElement.scrollBy(0, 1) - reactiveTimeline.anchor.scroll() - }, 0) - } - } -} - -const chat = new Chat() - -export {chat} diff --git a/build/static/directs.svg b/build/static/directs.svg deleted file mode 100644 index b1ed08b..0000000 --- a/build/static/directs.svg +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/build/static/groups.js b/build/static/groups.js deleted file mode 100644 index 3500e27..0000000 --- a/build/static/groups.js +++ /dev/null @@ -1,14 +0,0 @@ -import {q} from "../static/basic.js?static=4212436742" - -let state = "CLOSED" - -const groups = q("#c-groups-display") -const rooms = q("#c-rooms") - -groups.addEventListener("click", () => { - groups.classList.add("c-groups__display--closed") -}) - -rooms.addEventListener("mouseout", () => { - groups.classList.remove("c-groups__display--closed") -}) diff --git a/build/static/join-event.svg b/build/static/join-event.svg deleted file mode 100644 index 042e3bd..0000000 --- a/build/static/join-event.svg +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/build/static/lsm.js b/build/static/lsm.js deleted file mode 100644 index 7338343..0000000 --- a/build/static/lsm.js +++ /dev/null @@ -1,11 +0,0 @@ -function get(name) { - return localStorage.getItem(name) -} - -function set(name, value) { - return localStorage.setItem(name, value) -} - -window.lsm = {get, set} - -export {get, set} diff --git a/build/static/main.css b/build/static/main.css deleted file mode 100644 index e78cd1a..0000000 --- a/build/static/main.css +++ /dev/null @@ -1,261 +0,0 @@ -@font-face { - font-family: Whitney; - font-weight: 400; - src: url(/static/whitney-400.woff?static=0f823bc4b5) format("woff2"); -} -@font-face { - font-family: Whitney; - font-weight: 500; - src: url(/static/whitney-500.woff?static=ba33ed18fe) format("woff2"); -} -body { - font-family: sans-serif; - background-color: #36393e; - color: #ddd; - font-size: 16px; - font-family: Whitney; - line-height: 1.45; - margin: 0; - height: 100vh; - font-weight: 400; -} - -.main { - height: 100vh; - display: flex; -} - -.c-rooms { - background-color: #2f3135; - padding: 8px; - width: 240px; - font-size: 18px; - font-weight: 500; - overflow-y: auto; - scrollbar-width: thin; - scrollbar-color: #202224 #2f3135; - flex-shrink: 0; -} - -.c-room { - display: flex; - align-items: center; - padding: 6px 8px; - margin: 2px 0; - cursor: pointer; - border-radius: 8px; -} -.c-room:not(.c-room--active):hover { - background-color: #393c42; -} -.c-room--active { - background-color: #42454a; -} -.c-room__icon { - width: 32px; - height: 32px; - margin-right: 8px; - border-radius: 50%; - flex-shrink: 0; -} -.c-room__icon--no-icon { - background-color: #bbb; -} -.c-room__name { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.c-groups { - position: relative; - width: 80px; - flex-shrink: 0; - font-size: 22px; - font-weight: 500; -} -.c-groups__display { - background-color: #202224; - overflow: hidden; - width: 80px; - position: absolute; - left: 0; - top: 0; - bottom: 0; - right: 0; - transition: width ease-out 0.12s; - scrollbar-width: thin; - scrollbar-color: #42454a #202224; -} -.c-groups__display:not(.c-groups__display--closed):hover { - width: 320px; - overflow-y: auto; -} -.c-groups__container { - width: 320px; - padding: 8px; -} - -.c-group { - display: flex; - align-items: center; - padding: 4px 8px; - cursor: pointer; - border-radius: 8px; -} -.c-group:hover { - background-color: #2f3135; -} -.c-group__icon { - width: 48px; - height: 48px; - background-color: #393c42; - border-radius: 50%; - margin-right: 16px; - flex-shrink: 0; - transition: border-radius ease-out 0.12s; -} -.c-group--active .c-group__icon { - border-radius: 28%; -} -.c-group__name { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.c-group-marker { - position: absolute; - top: 5px; - opacity: 0; - transform: translateY(8px); - transition: transform ease 0.12s, opacity ease-out 0.12s; - height: 46px; - width: 6px; - background-color: #ccc; - border-radius: 0px 6px 6px 0px; -} - -.c-event-groups * { - overflow-anchor: none; -} - -.c-message-group, .c-message-event { - margin-top: 12px; - padding-top: 12px; - border-top: 1px solid #4b4e54; -} - -.c-message-group { - display: flex; -} -.c-message-group__avatar { - flex-shrink: 0; - margin-right: 16px; - cursor: pointer; -} -.c-message-group__icon { - width: 40px; - height: 40px; - border-radius: 50%; -} -.c-message-group__icon--no-icon { - background-color: #48d; -} -.c-message-group__intro { - display: flex; - align-items: baseline; -} -.c-message-group__name { - color: #5bf; - margin: -2px 0px -3px; - font-size: 19px; - font-weight: 500; - cursor: pointer; -} -.c-message-group__name:hover { - text-decoration: underline; -} -.c-message-group__date { - font-size: 14px; - margin-left: 9px; - color: #999; -} - -.c-message { - margin-top: 4px; - opacity: 1; - transition: opacity 0.2s ease-out; -} -.c-message--pending { - opacity: 0.5; -} - -.c-message-event { - padding-top: 10px; - padding-left: 6px; -} -.c-message-event__inner { - display: flex; - align-items: center; -} -.c-message-event__icon { - margin-right: 8px; - position: relative; - top: 1px; -} - -.c-message-notice { - padding: 12px; -} -.c-message-notice__inner { - text-align: center; - padding: 12px; - background-color: #42454a; - border-radius: 8px; -} - -.c-chat { - display: grid; - grid-template-rows: 1fr 82px; - align-items: end; - flex: 1; -} -.c-chat__messages { - height: 100%; - overflow-y: scroll; - scrollbar-color: #202224 #2f3135; - display: grid; - align-items: end; -} -.c-chat__inner { - padding: 20px 20px 20px; -} - -.c-chat-input { - width: 100%; - border-top: 2px solid #4b4e54; - background-color: #36393e; -} -.c-chat-input__textarea { - width: calc(100% - 40px); - height: 39.2px; - box-sizing: border-box; - margin: 20px; - padding: 8px; - font-family: inherit; - font-size: inherit; - background-color: #42454a; - color: #fff; - appearance: none; - -moz-appearance: none; - -webkit-appearance: none; - border: none; - border-radius: 8px; - resize: none; -} - -.c-anchor { - overflow-anchor: auto; - height: 1px; -} \ No newline at end of file diff --git a/build/static/room-picker.js b/build/static/room-picker.js deleted file mode 100644 index 75e6c0b..0000000 --- a/build/static/room-picker.js +++ /dev/null @@ -1,230 +0,0 @@ -import {q, ElemJS, ejs} from "../static/basic.js?static=4212436742" -import {store} from "../static/store/store.js?static=ce3066287b" -import {SubscribeMapList} from "../static/store/SubscribeMapList.js?static=b2732c5460" -import {SubscribeValue} from "../static/store/SubscribeValue.js?static=215b6a5099" -import {Timeline} from "../static/Timeline.js?static=1393b78916" -import * as lsm from "../static/lsm.js?static=aed2c7ca35" -import {resolveMxc} from "../static/functions.js?static=e3784c70ce" - -class ActiveGroupMarker extends ElemJS { - constructor() { - super(q("#c-group-marker")) - store.activeGroup.subscribe("changeSelf", this.render.bind(this)) - } - - render() { - if (store.activeGroup.exists()) { - const group = store.activeGroup.value() - this.style("opacity", 1) - this.style("transform", `translateY(${group.element.offsetTop}px)`) - } else { - this.style("opacity", 0) - } - } -} - -const activeGroupMarker = new ActiveGroupMarker() - -class Group extends ElemJS { - constructor(key, data) { - super("div") - - this.data = data - this.order = this.data.order - - 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) - ) - - this.on("click", this.onClick.bind(this)) - - store.activeGroup.subscribe("changeSelf", this.render.bind(this)) - } - - render() { - const active = store.activeGroup.value() === this - this.element.classList[active ? "add" : "remove"]("c-group--active") - } - - onClick() { - store.activeGroup.set(this) - } -} - -class Room extends ElemJS { - constructor(id, data) { - super("div") - - this.id = id - this.data = data - this.timeline = new Timeline(this.id) - this.group = null - this.members = new SubscribeMapList(SubscribeValue) - - this.class("c-room") - - this.on("click", this.onClick.bind(this)) - store.activeRoom.subscribe("changeSelf", this.render.bind(this)) - - this.render() - } - - get order() { - if (this.group) { - let chars = 36 - let total = 0 - const name = this.getName() - for (let i = 0; i < name.length; i++) { - const c = name[i] - let d = 0 - if (c >= "A" && c <= "Z") d = c.charCodeAt(0) - 65 + 10 - else if (c >= "a" && c <= "z") d = c.charCodeAt(0) - 97 + 10 - else if (c >= "0" && c <= "9") d = +c - total += d * chars ** (-i) - } - return total - } else { - return -this.timeline.latest - } - } - - getName() { - let name = this.data.state.events.find(e => e.type === "m.room.name") - if (name) { - name = name.content.name - } else { - const users = this.data.summary["m.heroes"] - const usernames = users.map(u => (u.match(/^@([^:]+):/) || [])[1] || u) - name = usernames.join(", ") - } - return name - } - - getIcon() { - const avatar = this.data.state.events.find(e => e.type === "m.room.avatar") - if (avatar) { - return resolveMxc(avatar.content.url || avatar.content.avatar_url, 32, "crop") - } else { - return null - } - } - - isDirect() { - return store.directs.has(this.id) - } - - setGroup(id) { - this.group = id - } - - getGroup() { - if (this.group) { - return store.groups.get(this.group).value() - } else { - return this.isDirect() ? store.groups.get("directs").value() : store.groups.get("channels").value() - } - } - - onClick() { - store.activeRoom.set(this) - } - - render() { - this.clearChildren() - // data - const icon = this.getIcon() - if (icon) { - this.child(ejs("img").class("c-room__icon").attribute("src", icon)) - } else { - this.child(ejs("div").class("c-room__icon", "c-room__icon--no-icon")) - } - this.child(ejs("div").class("c-room__name").text(this.getName())) - // active - const active = store.activeRoom.value() === this - this.element.classList[active ? "add" : "remove"]("c-room--active") - } -} - -class Rooms extends ElemJS { - constructor() { - super(q("#c-rooms")) - - this.roomData = [] - this.rooms = [] - - store.rooms.subscribe("askAdd", this.askAdd.bind(this)) - store.rooms.subscribe("addItem", this.addItem.bind(this)) - // store.rooms.subscribe("changeItem", this.render.bind(this)) - store.activeGroup.subscribe("changeSelf", this.render.bind(this)) - store.directs.subscribe("changeItem", this.render.bind(this)) - store.newEvents.subscribe("changeSelf", this.sort.bind(this)) - - this.render() - } - - sort() { - store.rooms.sort() - this.render() - } - - askAdd(event, {key, data}) { - const room = new Room(key, data) - store.rooms.addEnd(key, room) - } - - addItem(event, key) { - const room = store.rooms.get(key).value() - if (room.getGroup() === store.activeGroup.value()) { - this.child(room) - } - } - - render() { - this.clearChildren() - let first = null - // set room list - store.rooms.forEach((id, room) => { - if (room.value().getGroup() === store.activeGroup.value()) { - if (!first) first = room.value() - this.child(room.value()) - } - }) - // if needed, change the active room to be an item in the room list - if (!store.activeRoom.exists() || store.activeRoom.value().getGroup() !== store.activeGroup.value()) { - if (first) { - store.activeRoom.set(first) - } else { - store.activeRoom.delete() - } - } - } -} -const rooms = new Rooms() - -class Groups extends ElemJS { - constructor() { - super(q("#c-groups-list")) - - store.groups.subscribe("askAdd", this.askAdd.bind(this)) - store.groups.subscribe("changeItem", this.render.bind(this)) - } - - askAdd(event, {key, data}) { - const group = new Group(key, data) - store.groups.addEnd(key, group) - store.groups.sort() - } - - render() { - this.clearChildren() - store.groups.forEach((key, item) => { - this.child(item.value()) - }) - } -} -const groups = new Groups() diff --git a/build/static/store/Subscribable.js b/build/static/store/Subscribable.js deleted file mode 100644 index 6c7640e..0000000 --- a/build/static/store/Subscribable.js +++ /dev/null @@ -1,38 +0,0 @@ -class Subscribable { - constructor() { - this.events = { - addSelf: [], - editSelf: [], - removeSelf: [], - changeSelf: [] - } - this.eventDeps = { - addSelf: ["changeSelf"], - editSelf: ["changeSelf"], - removeSelf: ["changeSelf"], - changeSelf: [] - } - } - - subscribe(event, callback) { - if (this.events[event]) { - this.events[event].push(callback) - } else { - throw new Error(`Cannot subscribe to non-existent event ${event}, available events are: ${Object.keys(this.events).join(", ")}`) - } - } - - unsubscribe(event, callback) { - const index = this.events[event].indexOf(callback) - if (index === -1) throw new Error(`Tried to remove a nonexisting subscription from event ${event}`) - this.events[event].splice(index, 1) - } - - broadcast(event, data) { - this.eventDeps[event].concat(event).forEach(eventName => { - this.events[eventName].forEach(f => f(event, data)) - }) - } -} - -export {Subscribable} diff --git a/build/static/store/SubscribeMapList.js b/build/static/store/SubscribeMapList.js deleted file mode 100644 index 189119c..0000000 --- a/build/static/store/SubscribeMapList.js +++ /dev/null @@ -1,86 +0,0 @@ -import {Subscribable} from "../../static/store/Subscribable.js?static=19b7e44aa6" -import {SubscribeValue} from "../../static/store/SubscribeValue.js?static=215b6a5099" - -class SubscribeMapList extends Subscribable { - constructor(inner) { - super() - this.inner = inner - Object.assign(this.events, { - addItem: [], - deleteItem: [], - editItem: [], - changeItem: [], - askAdd: [] - }) - Object.assign(this.eventDeps, { - addItem: ["changeItem"], - deleteItem: ["changeItem"], - editItem: ["changeItem"], - changeItem: [], - askAdd: [] - }) - this.map = new Map() - this.list = [] - } - - has(key) { - return this.map.has(key) && this.map.get(key).exists() - } - - get(key) { - if (this.map.has(key)) { - return this.map.get(key) - } else { - const item = new this.inner() - this.map.set(key, item) - return item - } - } - - forEach(f) { - this.list.forEach(key => f(key, this.get(key))) - } - - askAdd(key, data) { - this.broadcast("askAdd", {key, data}) - } - - addStart(key, value) { - this._add(key, value, true) - } - - addEnd(key, value) { - this._add(key, value, false) - } - - sort() { - this.list.sort((a, b) => { - const orderA = this.map.get(a).value().order - const orderB = this.map.get(b).value().order - return orderA - orderB - }) - this.broadcast("changeItem") - } - - _add(key, value, start) { - let s - if (this.map.has(key)) { - const exists = this.map.get(key).exists() - s = this.map.get(key).set(value) - if (exists) { - this.broadcast("editItem", key) - } else { - this.broadcast("addItem", key) - } - } else { - s = new this.inner().set(value) - this.map.set(key, s) - if (start) this.list.unshift(key) - else this.list.push(key) - this.broadcast("addItem", key) - } - return s - } -} - -export {SubscribeMapList} diff --git a/build/static/store/SubscribeSet.js b/build/static/store/SubscribeSet.js deleted file mode 100644 index e43128f..0000000 --- a/build/static/store/SubscribeSet.js +++ /dev/null @@ -1,50 +0,0 @@ -import {Subscribable} from "../../static/store/Subscribable.js?static=19b7e44aa6" - -class SubscribeSet extends Subscribable { - constructor() { - super() - Object.assign(this.events, { - addItem: [], - deleteItem: [], - changeItem: [], - askAdd: [] - }) - Object.assign(this.eventDeps, { - addItem: ["changeItem"], - deleteItem: ["changeItem"], - changeItem: [], - askAdd: [] - }) - this.set = new Set() - } - - has(key) { - return this.set.has(key) - } - - forEach(f) { - for (const key of this.set.keys()) { - f(key) - } - } - - askAdd(key) { - this.broadcast("askAdd", key) - } - - add(key) { - if (!this.set.has(key)) { - this.set.add(key) - this.broadcast("addItem", key) - } - } - - delete(key) { - if (this.set.has(key)) { - this.set.delete(key) - this.broadcast("deleteItem", key) - } - } -} - -export {SubscribeSet} diff --git a/build/static/store/SubscribeValue.js b/build/static/store/SubscribeValue.js deleted file mode 100644 index e8dceb6..0000000 --- a/build/static/store/SubscribeValue.js +++ /dev/null @@ -1,47 +0,0 @@ -import {Subscribable} from "../../static/store/Subscribable.js?static=19b7e44aa6" - -class SubscribeValue extends Subscribable { - constructor() { - super() - this.hasData = false - this.data = null - } - - exists() { - return this.hasData - } - - value() { - if (this.hasData) return this.data - else return null - } - - set(data) { - const exists = this.exists() - this.data = data - this.hasData = true - if (exists) { - this.broadcast("editSelf", this.data) - } else { - this.broadcast("addSelf", this.data) - } - return this - } - - edit(f) { - if (this.exists()) { - f(this.data) - this.set(this.data) - } else { - throw new Error("Tried to edit a SubscribeValue that had no value") - } - } - - delete() { - this.hasData = false - this.broadcast("removeSelf") - return this - } -} - -export {SubscribeValue} diff --git a/build/static/store/store.js b/build/static/store/store.js deleted file mode 100644 index 1450a68..0000000 --- a/build/static/store/store.js +++ /dev/null @@ -1,17 +0,0 @@ -import {Subscribable} from "../../static/store/Subscribable.js?static=19b7e44aa6" -import {SubscribeMapList} from "../../static/store/SubscribeMapList.js?static=b2732c5460" -import {SubscribeSet} from "../../static/store/SubscribeSet.js?static=39a1c0a2a4" -import {SubscribeValue} from "../../static/store/SubscribeValue.js?static=215b6a5099" - -const store = { - groups: new SubscribeMapList(SubscribeValue), - rooms: new SubscribeMapList(SubscribeValue), - directs: new SubscribeSet(), - activeGroup: new SubscribeValue(), - activeRoom: new SubscribeValue(), - newEvents: new Subscribable() -} - -window.store = store - -export {store} diff --git a/build/static/sync/sync.js b/build/static/sync/sync.js deleted file mode 100644 index 3b6fc34..0000000 --- a/build/static/sync/sync.js +++ /dev/null @@ -1,127 +0,0 @@ -import {store} from "../../static/store/store.js?static=ce3066287b" -import * as lsm from "../../static/lsm.js?static=aed2c7ca35" -import {resolveMxc} from "../../static/functions.js?static=e3784c70ce" - -let lastBatch = null - -function sync() { - const url = new URL(`${lsm.get("domain")}/_matrix/client/r0/sync`) - url.searchParams.append("access_token", lsm.get("access_token")) - const filter = { - room: { - // pulling more from the timeline massively increases download size - timeline: { - limit: 5 - }, - // members are not currently needed - state: { - lazy_load_members: true - } - }, - presence: { - // presence is not implemented, ignore it - types: [] - } - } - url.searchParams.append("filter", JSON.stringify(filter)) - url.searchParams.append("timeout", 20000) - if (lastBatch) { - url.searchParams.append("since", lastBatch) - } - return fetch(url.toString()).then(res => res.json()).then(root => { - lastBatch = root.next_batch - return root - }) -} - -function manageSync(root) { - try { - let newEvents = false - - // set up directs - const directs = root.account_data.events.find(e => e.type === "m.direct") - if (directs) { - Object.values(directs.content).forEach(ids => { - ids.forEach(id => store.directs.add(id)) - }) - } - - // set up rooms - Object.entries(root.rooms.join).forEach(([id, room]) => { - if (!store.rooms.has(id)) { - store.rooms.askAdd(id, room) - } - const storeRoom = store.rooms.get(id).value() - room.state.events.forEach(event => { - if (event.type === "m.room.member") { - storeRoom.members.get(event.state_key).set(event) - } - }) - const timeline = storeRoom.timeline - if (room.timeline.events.length) newEvents = true - timeline.updateEvents(room.timeline.events) - }) - - // set up groups - Promise.all( - Object.keys(root.groups.join).map(id => { - if (!store.groups.has(id)) { - return Promise.all(["profile", "rooms"].map(path => { - const url = new URL(`${lsm.get("domain")}/_matrix/client/r0/groups/${id}/${path}`) - url.searchParams.append("access_token", lsm.get("access_token")) - return fetch(url.toString()).then(res => res.json()) - })).then(([profile, rooms]) => { - rooms = rooms.chunk - let order = 999 - let orderEvent = root.account_data.events.find(e => e.type === "im.vector.web.tag_ordering") - if (orderEvent) { - if (orderEvent.content.tags.includes(id)) { - order = orderEvent.content.tags.indexOf(id) - } - } - const data = { - name: profile.name, - icon: resolveMxc(profile.avatar_url, 96, "crop"), - order - } - store.groups.askAdd(id, data) - rooms.forEach(groupRoom => { - if (store.rooms.has(groupRoom.room_id)) { - store.rooms.get(groupRoom.room_id).value().setGroup(id) - } - }) - }) - } - }) - ).then(() => { - store.rooms.sort() - }) - if (newEvents) store.newEvents.broadcast("changeSelf") - } catch (e) { - console.error(root) - throw e - } -} - -function syncLoop() { - return sync().then(manageSync).then(syncLoop) -} - -;[ - { - id: "directs", - name: "Directs", - icon: staticFiles.get("/assets/icons/directs.svg"), - order: -2 - }, - { - id: "channels", - name: "Channels", - icon: staticFiles.get("/assets/icons/channels.svg"), - order: -1 - } -].forEach(data => store.groups.askAdd(data.id, data)) - -store.activeGroup.set(store.groups.get("directs").value()) - -syncLoop() diff --git a/build/static/whitney-400.woff b/build/static/whitney-400.woff deleted file mode 100644 index 2b3308154b56e5e8b22e7a5ab4ab2b72610693c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77784 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 UCy8cAiqi>1DF{Lt235`f0;?-f=Kufz