forked from cadence/Carbon
Merge branch 'princess' into drone
This commit is contained in:
commit
4c6523a9a7
6 changed files with 78 additions and 9 deletions
65
README.md
Normal file
65
README.md
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
# 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=f7c0898b94">
|
<link rel="stylesheet" type="text/css" href="static/main.css?static=e9db1a3439">
|
||||||
<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, 32, "crop"))
|
ejs("img").class("c-message-group__icon").attribute("src", resolveMxc(this.sender.value().content.avatar_url, 96, "crop"))
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
this.avatar.child(
|
this.avatar.child(
|
||||||
ejs("div").class("c-message-group__icon")
|
ejs("div").class("c-message-group__icon", "c-message-group__icon--no-icon")
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -155,9 +155,11 @@ body {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
.c-message-group__icon {
|
.c-message-group__icon {
|
||||||
width: 32px;
|
width: 40px;
|
||||||
height: 32px;
|
height: 40px;
|
||||||
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, 32, "crop"))
|
ejs("img").class("c-message-group__icon").attribute("src", resolveMxc(this.sender.value().content.avatar_url, 96, "crop"))
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
this.avatar.child(
|
this.avatar.child(
|
||||||
ejs("div").class("c-message-group__icon")
|
ejs("div").class("c-message-group__icon", "c-message-group__icon--no-icon")
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,11 +17,13 @@
|
||||||
cursor: pointer
|
cursor: pointer
|
||||||
|
|
||||||
&__icon
|
&__icon
|
||||||
$size: 32px
|
$size: 40px
|
||||||
width: $size
|
width: $size
|
||||||
height: $size
|
height: $size
|
||||||
border-radius: 50%
|
border-radius: 50%
|
||||||
background-color: #48d
|
|
||||||
|
&--no-icon
|
||||||
|
background-color: #48d
|
||||||
|
|
||||||
&__intro
|
&__intro
|
||||||
display: flex
|
display: flex
|
||||||
|
|
Loading…
Reference in a new issue