Compare commits
No commits in common. "4c6523a9a70afaf0907bcd8f92734da332e5f062" and "c725b336792d3dd8dc81ca2764d47f6a5acb355f" have entirely different histories.
4c6523a9a7
...
c725b33679
6 changed files with 9 additions and 78 deletions
65
README.md
65
README.md
|
@ -1,65 +0,0 @@
|
||||||
# Carbon Chat
|
|
||||||
|
|
||||||
Carbon is the Matrix client for Discord refugees.
|
|
||||||
|
|
||||||
## The dream
|
|
||||||
|
|
||||||
Carbon's planned features, compared to Discord:
|
|
||||||
|
|
||||||
- End to end encryption
|
|
||||||
- $0 per-account custom emojis and custom emoji packs
|
|
||||||
- Uses the open Matrix and Mumble systems
|
|
||||||
- Much better IRC layout
|
|
||||||
- Probably more
|
|
||||||
|
|
||||||
Carbon's planned features, compared to Element:
|
|
||||||
|
|
||||||
- Get rid of the unmanageable combined rooms list
|
|
||||||
- Groups like Discord's guilds
|
|
||||||
- Always have one group selected at a time
|
|
||||||
- Synchronised membership, moderators, power levels and bans
|
|
||||||
- Ordered channel list
|
|
||||||
- Unread indicators
|
|
||||||
- Add existing channels to groups
|
|
||||||
- Pin any channel to the groups bar
|
|
||||||
- Tidy Mumble integration to add voice channels
|
|
||||||
- More reliable unreads
|
|
||||||
- Per-account custom emojis (Ponies+FluffyChat integration) and custom emoji packs
|
|
||||||
- Slightly better IRC layout
|
|
||||||
- Probably more
|
|
||||||
|
|
||||||
## The reality
|
|
||||||
|
|
||||||
Carbon is currently _technically_ usable as a chat app, but is very
|
|
||||||
early in development. These important features still need to be
|
|
||||||
implemented:
|
|
||||||
|
|
||||||
- Login GUI
|
|
||||||
- Unreads
|
|
||||||
- Chat history
|
|
||||||
- Formatting
|
|
||||||
- Emojis
|
|
||||||
- Reactions
|
|
||||||
- Groups v2
|
|
||||||
- Group management
|
|
||||||
- Pinned channels
|
|
||||||
- Mumble integration
|
|
||||||
|
|
||||||
## The code
|
|
||||||
|
|
||||||
### Building
|
|
||||||
|
|
||||||
npm install -D
|
|
||||||
npm run rebuild
|
|
||||||
|
|
||||||
### Hosting
|
|
||||||
|
|
||||||
Send the files from the `build` folder to a static file server. Apply
|
|
||||||
a long cache-control header to everything served under `/static`, and
|
|
||||||
no cache-control header to everything else.
|
|
||||||
|
|
||||||
### Developing
|
|
||||||
|
|
||||||
npm run watch
|
|
||||||
|
|
||||||
Files will be rebuilt as you save them.
|
|
|
@ -2,7 +2,7 @@
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<link rel="stylesheet" type="text/css" href="static/main.css?static=e9db1a3439">
|
<link rel="stylesheet" type="text/css" href="static/main.css?static=f7c0898b94">
|
||||||
<script type="module" src="static/groups.js?static=2cc7f0daf8"></script>
|
<script type="module" src="static/groups.js?static=2cc7f0daf8"></script>
|
||||||
<script type="module" src="static/chat-input.js?static=16321d4eb4"></script>
|
<script type="module" src="static/chat-input.js?static=16321d4eb4"></script>
|
||||||
<script type="module" src="static/room-picker.js?static=edb9a5f669"></script>
|
<script type="module" src="static/room-picker.js?static=edb9a5f669"></script>
|
||||||
|
|
|
@ -81,11 +81,11 @@ class Sender {
|
||||||
this.avatar.clearChildren()
|
this.avatar.clearChildren()
|
||||||
if (this.sender.value().content.avatar_url) {
|
if (this.sender.value().content.avatar_url) {
|
||||||
this.avatar.child(
|
this.avatar.child(
|
||||||
ejs("img").class("c-message-group__icon").attribute("src", resolveMxc(this.sender.value().content.avatar_url, 96, "crop"))
|
ejs("img").class("c-message-group__icon").attribute("src", resolveMxc(this.sender.value().content.avatar_url, 32, "crop"))
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
this.avatar.child(
|
this.avatar.child(
|
||||||
ejs("div").class("c-message-group__icon", "c-message-group__icon--no-icon")
|
ejs("div").class("c-message-group__icon")
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -155,11 +155,9 @@ body {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
.c-message-group__icon {
|
.c-message-group__icon {
|
||||||
width: 40px;
|
width: 32px;
|
||||||
height: 40px;
|
height: 32px;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
}
|
|
||||||
.c-message-group__icon--no-icon {
|
|
||||||
background-color: #48d;
|
background-color: #48d;
|
||||||
}
|
}
|
||||||
.c-message-group__intro {
|
.c-message-group__intro {
|
||||||
|
|
|
@ -81,11 +81,11 @@ class Sender {
|
||||||
this.avatar.clearChildren()
|
this.avatar.clearChildren()
|
||||||
if (this.sender.value().content.avatar_url) {
|
if (this.sender.value().content.avatar_url) {
|
||||||
this.avatar.child(
|
this.avatar.child(
|
||||||
ejs("img").class("c-message-group__icon").attribute("src", resolveMxc(this.sender.value().content.avatar_url, 96, "crop"))
|
ejs("img").class("c-message-group__icon").attribute("src", resolveMxc(this.sender.value().content.avatar_url, 32, "crop"))
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
this.avatar.child(
|
this.avatar.child(
|
||||||
ejs("div").class("c-message-group__icon", "c-message-group__icon--no-icon")
|
ejs("div").class("c-message-group__icon")
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,12 +17,10 @@
|
||||||
cursor: pointer
|
cursor: pointer
|
||||||
|
|
||||||
&__icon
|
&__icon
|
||||||
$size: 40px
|
$size: 32px
|
||||||
width: $size
|
width: $size
|
||||||
height: $size
|
height: $size
|
||||||
border-radius: 50%
|
border-radius: 50%
|
||||||
|
|
||||||
&--no-icon
|
|
||||||
background-color: #48d
|
background-color: #48d
|
||||||
|
|
||||||
&__intro
|
&__intro
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue