From f7224dc801bc82c5daa836c126be223c12d203cf Mon Sep 17 00:00:00 2001
From: Jason Volk
Date: Sat, 25 Nov 2017 15:23:15 -0700
Subject: [PATCH] client: Checkpoint client.
---
modules/static/charybdis.css | 370 ++++++++++++--------
modules/static/charybdis/main.js | 11 +-
modules/static/charybdis/mc.js | 3 +
modules/static/charybdis/room/controller.js | 14 +-
modules/static/charybdis/room/events.js | 51 ++-
modules/static/charybdis/room/send.js | 12 +-
modules/static/charybdis/room/timeline.js | 2 +-
modules/static/index.html | 120 +++++--
8 files changed, 390 insertions(+), 193 deletions(-)
diff --git a/modules/static/charybdis.css b/modules/static/charybdis.css
index 6532ea7fb..4535aa7fa 100644
--- a/modules/static/charybdis.css
+++ b/modules/static/charybdis.css
@@ -38,6 +38,11 @@
--fsG: 9px;
/* Paragraphs */
+ --fsPA: 19px;
+ --fsPB: 17px;
+ --fsPC: 16px;
+ --fsPD: 15px;
+ --fsPE: 11px;
--fsP: 15px;
/* Icons */
@@ -122,6 +127,7 @@ body.loaded
transition: opacity 1.5s cubic-bezier(0.25, 0.01, 1.0, 1.0);
}
+
/**************************************************************
* IRCd root class
*
@@ -250,6 +256,7 @@ body.loaded
font-size: var(--fsP);
font-family: NixieOne;
letter-spacing: 0.15pt;
+ line-height: 1.2em;
color: inherit;
}
@@ -1033,16 +1040,6 @@ body.loaded
}
-/************************************************
- * Event
- */
-
-.ircd form.event
-{
-
-}
-
-
/************************************************
************************************************
*
@@ -1193,34 +1190,31 @@ body.loaded
#charybdis_login
{
position: relative;
+ height: 100%;
flex-flow: column nowrap;
min-width: 25vw;
- flex-shrink: 0;
- align-self: stretch;
align-items: stretch;
justify-content: center;
background-color: var(--pal-AA);
}
-#charybdis_login_form
-{
- align-items: flex-end;
- margin: 0px 1vw 0px 1vw;
-}
-
.ircd .login_
{
max-width: 50vw;
- word-wrap: break-word;
+}
+
+#charybdis_login_form
+{
}
.ircd .login_ form
{
- display: flex;
position: relative;
flex-flow: column nowrap;
align-items: center;
justify-content: center;
+ margin: 0px;
+ padding: 0px;
}
/* This doesn't exist in the HTML until generated */
@@ -1254,19 +1248,28 @@ body.loaded
.ircd .login_ h3
{
- font-size: 2.25vw;
- align-self: center;
- text-shadow: 1px 1px 0px var(--pal-AC);
+ font-size: 1.50vw;
+ align-self: flex-end;
align-items: baseline;
- letter-spacing: -2px;
- color: var(--pal-AD);
+ letter-spacing: -1px;
+ margin: 0px 10px 0px 10px;
}
.ircd .login_ h3 b
{
- text-shadow: 2px 1px 0px var(--pal-AC);
+ font-size: 1.95vw;
+}
+
+.ircd .login_ h3 .matrix
+{
+ text-shadow: 1px 1px 0px var(--pal-AB);
+ color: var(--pal-AD);
+}
+
+.ircd .login_ h3 .construct
+{
+ text-shadow: 1px 1px 0px var(--pal-AB);
color: var(--pal-CD);
- font-size: 5vw;
}
.ircd .login_ h1:hover
@@ -1279,10 +1282,11 @@ body.loaded
{
height: 65px;
width: 100%;
+ flex-grow: 0;
box-sizing: border-box;
- margin: 10px 0px 0px 0px;
+ margin: 5px 0px 5px 0px;
padding: 0px 4px 0px 4px;
- border-radius: 3px;
+ border-radius: 0px;
}
.ircd .login_ div.submit
@@ -1298,8 +1302,10 @@ body.loaded
{
align-items: center;
justify-content: center;
+ margin: 5px 0px 5px 0px;
padding: 10px 15px 10px 15px;
- border: 1px solid var(--pal-AD);
+ border-top: 1px solid var(--pal-AD);
+ border-bottom: 1px solid var(--pal-AD);
letter-spacing: 1px;
font-weight: bold;
font-size: 17px;
@@ -1308,12 +1314,10 @@ body.loaded
.ircd .login_ .submit button[name=login_]
{
- margin-right: 5px;
}
.ircd .login_ .submit button[name=register]
{
- margin-left: 5px;
}
.ircd .login_ button.submit:hover
@@ -1367,19 +1371,18 @@ div.main
flex-flow: column nowrap;
align-items: stretch;
justify-content: flex-start;
- border-left: 1px solid var(--pal-AC);
}
.ircd .rooms
-.main h1
+div.main > *
{
- display: flex;
- flex-grow: 1;
- flex-shrink: 0;
- align-items: flex-end;
- justify-content: center;
- margin-top: 5px;
- margin-bottom: 5px;
+ border-left: 1px solid var(--pal-AB);
+}
+
+.ircd .rooms
+div.main > div:first-child
+{
+ border-left: 1px solid var(--pal-AC);
}
.ircd .rooms
@@ -1809,7 +1812,8 @@ div.main > form.search label
.ircd div.rooms div.current
{
- flex-flow: column nowrap;
+ flex-flow: row nowrap;
+ flex-grow: 1;
}
/************************************************
@@ -1818,12 +1822,6 @@ div.main > form.search label
*
*/
-#charybdis_room
-{
- flex-grow: 1;
- flex-basis: 100%
-}
-
.ircd div.room
{
flex-grow: 1;
@@ -2620,8 +2618,7 @@ div.main > form.search label
justify-content: flex-start;
background-color: var(--pal-DE);
border-top: 1px solid var(--pal-AD);
- overflow-y: auto;
- overflow-x: hidden;
+ border-left: 1px solid var(--pal-AE);
}
.ircd .room div.members div.menu
@@ -2630,7 +2627,6 @@ div.main > form.search label
flex-flow: row nowrap;
align-items: stretch;
padding: 5px 4px 5px 4px;
- border-bottom: 1px solid var(--pal-AD);
background-color: var(--pal-AA);
}
@@ -2672,7 +2668,23 @@ div.main > form.search label
align-items: stretch;
justify-content: flex-start;
background-color: var(--pal-DE);
- border-left: 1px solid var(--pal-AE);
+ overflow-y: auto;
+ overflow-x: hidden;
+}
+
+.ircd .room div.main div.members ::-webkit-scrollbar-thumb
+{
+ background-color: var(--pal-DE);
+}
+
+.ircd .room div.main div.members ::-webkit-scrollbar-track
+{
+ background-color: var(--pal-AA);
+}
+
+.ircd .room div.main div.members ::-webkit-scrollbar-button
+{
+ background-color: var(--pal-AA);
}
.ircd .room div.members div.list .loading i
@@ -2683,6 +2695,7 @@ div.main > form.search label
.ircd .room div.members div.list div.member
{
+ flex-grow: 1;
flex-flow: column nowrap;
align-items: stretch;
justify-content: center;
@@ -2693,6 +2706,7 @@ div.main > form.search label
.ircd .room div.members div.list .member div.head
{
+ flex-grow: 1;
position: relative;
flex-flow: row nowrap;
align-items: center;
@@ -2726,6 +2740,7 @@ div.main > form.search label
{
padding: 1px 2px 1px 2px;
border-radius: 3px;
+ font-size: calc(var(--fsF));
}
.ircd .room div.members div.list .member.active div.head .idle
@@ -2746,7 +2761,6 @@ div.main > form.search label
.ircd .room div.members div.list .member div.head .domain
{
- align-self: flex-end;
padding: 1px 3px 1px 3px;
max-width: 20ch;
text-overflow: ellipsis;
@@ -2797,7 +2811,7 @@ div.main > form.search label
.ircd .room div.members div.list .member div.info
{
- flex-grow: 1;
+ flex-grow: 8;
flex-shrink: 0;
flex-flow: column nowrap;
align-items: stretch;
@@ -2893,16 +2907,16 @@ div.main > form.search label
align-items: center;
justify-content: flex-end;
padding: 0px 5px 0px 5px;
- background-color: var(--pal-AA);
cursor: pointer;
}
.ircd .room div.members div.list .member .info div.event p
{
+ word-wrap: break-word;
font-size: calc(var(--fsE));
font-family: courier;
font-weight: bold;
- color: white;
+ color: var(--pal-AA);
}
.ircd .room div.members div.list .member .info div.event p:hover
@@ -2915,39 +2929,28 @@ div.main > form.search label
flex-grow: 1;
flex-flow: column nowrap;
align-items: stretch;
- justify-content: flex-start;
- padding: 5px 5px 5px 5px;
- border-top: 1px solid var(--pal-AD);
+ padding: 2px;
}
.ircd .room div.members div.list .member .info .menu .item
{
- flex-grow: 0;
- position: relative;
- flex-flow: row nowrap;
+ flex-flow: column nowrap;
align-items: center;
- justify-content: stretch;
- background-color: var(--pal-AD);
- margin: 4px 5px 5px 5px;
- border-radius: 5px;
-}
-
-.ircd .room div.members div.list .member .info .menu .item:hover
-{
- background-color: var(--pal-AC);
-}
-
-.ircd .room div.members div.list .member .info .menu .item .name
-{
- align-self: center;
+ justify-content: center;
+ background-color: var(--pal-AA);
}
.ircd .room div.members div.list .member .menu .item .icon
{
- position: absolute;
font-size: calc(var(--fsIB));
}
+.ircd .room div.members div.list .member .info .menu .item .name
+{
+ text-align: center;
+ font-size: calc(var(--fsC));
+}
+
.ircd .room div.members div.invite
{
height: 15px;
@@ -2994,12 +2997,12 @@ div.main > form.search label
.ircd .room div.members form.search
{
position: relative;
+ flex-shrink: 0;
flex-flow: column nowrap;
align-items: stretch;
justify-content: stretch;
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
- border-left: 1px solid var(--pal-AE);
background-color: var(--pal-DE);
}
@@ -3008,12 +3011,12 @@ div.main > form.search label
padding: 2px 4px 2px 4px;
align-self: flex-end;
color: var(--pal-AC);
+ display: none;
}
.ircd .room div.members form.search input
{
height: 24px;
- width: 100%;
border-top: 1px solid var(--pal-AE);
padding: 5px 10px 5px 10px;
margin: 0px 0px 0px 0px;
@@ -3132,7 +3135,7 @@ div.main > form.search label
flex-shrink: 0;
position: relative;
flex-flow: row nowrap;
- align-items: flex-start;
+ align-items: first baseline;
justify-content: flex-start;
align-content: flex-start;
direction: ltr;
@@ -3151,6 +3154,21 @@ div.main > form.search label
margin-top: 5px;
}
+.ircd .room .main div.event.grouping_start
+{
+ padding-top: 6px;
+}
+
+.ircd .room .main div.event.grouping_end
+{
+ padding-bottom: 6px;
+}
+
+.ircd .room div.main div.event.show_info
+{
+ border: 1px dashed var(--pal-DC);
+}
+
.ircd .room div.main div.event div.timeline
{
flex-flow: row nowrap;
@@ -3178,40 +3196,90 @@ div.main > form.search label
.ircd .room div.main div.event div.timeline div.info
{
- padding: 10px 10px 10px 5px;
+ position: relative;
+ padding: 5px 5px 5px 5px;
border-radius: 0px 5px 5px 0px;
- background-color: var(--pal-AD);
+ background-color: var(--pal-AA);
}
.ircd .room div.main div.event div.timeline div.info .id
{
align-items: flex-end;
- font-size: calc(var(--fsD));
+ font-size: calc(var(--fsE));
+ font-family: monospace;
font-weight: bold;
color: white;
- border-bottom: 1px dotted var(--pal-AE);
+ border-bottom: 1px solid var(--pal-AD);
}
.ircd .room div.main div.event div.timeline div.info form
{
- margin: 10px 0px 10px 0px;
+ position: relative;
}
.ircd .room div.main div.event div.timeline div.info form.event
{
- padding-top: 5px;
border-left: 0px;
- background-color: var(--pal-AD);
border-radius: 0px 0px 0px 0px;
}
+.ircd .room div.main div.event div.timeline div.info form.event div.object
+{
+ flex-grow: 1;
+ box-sizing: border-box;
+ border-top: 0px solid var(--pal-AD);
+ border-bottom: 0px solid var(--pal-AD);
+ border-left: 0px solid var(--pal-AD);
+ border-radius: 0px 0px 0px 0px;
+ margin: 0px 0px 0px 0px;
+ padding: 0px 0px 0px 0px;
+}
+
+.ircd .room div.main div.event div.timeline div.info form.event div.member
+{
+ box-sizing: border-box;
+ margin: 0px 0px 0px 0px;
+ padding: 0px 0px 1px 0px;
+}
+
+.ircd .room div.main div.event div.timeline div.info form.event div.member:first-child
+{
+ margin-top: 0px;
+ padding-top: 0px;
+}
+
+.ircd .room div.main div.event div.timeline div.info form.event div.member:last-child
+{
+ margin-bottom: 0px;
+ padding-bottom: 0px;
+}
+
.ircd .room div.main div.event div.timeline div.info form.event .key
{
+ box-sizing: border-box;
+ align-self: stretch;
+ align-items: center;
+ justify-content: flex-start;
+ border-bottom: 1px solid var(--pal-AD);
+ font-size: calc(var(--fsF));
color: white;
+ text-align: center;
+}
+
+.ircd .room div.main div.event div.timeline div.info form.event input.value
+{
+ box-sizing: border-box;
+ margin: 0px 1px 0px 1px;
+ padding: 0px 5px 0px 5px;
+ align-items: center;
+ justify-content: center;
+ font-family: courier;
+ font-size: calc(var(--fsE));
}
.ircd .room div.main div.event div.timeline div.info form.menu
{
+ display: none
}
.ircd .room div.main div.event div.timeline div.info form.menu .name
@@ -3236,10 +3304,13 @@ div.main > form.search label
.ircd .room div.main div.event .sender,
.ircd .room div.main div.event .target
{
+ flex-shrink: 0;
flex-flow: row nowrap;
- align-self: flex-start;
- align-items: center;
+ align-self: first baseline;
+ align-items: first baseline;
justify-content: flex-end;
+ font-size: 16px;
+ width: 20ch;
white-space: nowrap;
/* overflow-wrap: break-word; */
/* overflow: hidden; */
@@ -3248,12 +3319,11 @@ div.main > form.search label
letter-spacing: 0px;
font-weight: normal;
color: var(--pal-AB);
- width: 25ch;
}
.ircd .room div.main div.event .sender
{
- padding: 0px 10px 0px 5px;
+ padding: 0px 15px 0px 5px;
}
.ircd .room div.main div.event .target
@@ -3265,7 +3335,6 @@ div.main > form.search label
.ircd .room div.main div.event .target .name
{
font-weight: normal;
- font-size: 16px;
color: var(--pal-BB);
}
@@ -3295,7 +3364,7 @@ div.main > form.search label
.ircd .room div.main div.event .sender .bracket,
.ircd .room div.main div.event .target .bracket
{
- display: inline-flex;
+ align-self: center;
}
.ircd .room div.main div.event .sender .domain,
@@ -3304,17 +3373,21 @@ div.main > form.search label
align-self: center;
font-size: 11px;
color: var(--pal-AD);
- padding: 0px 1px 0px 2px;
+ padding: 0px 1px 1px 2px;
}
/* Message events */
.ircd .room div.main div.event div.message
{
- align-self: stretch;
- align-items: flex-start;
+ align-self: flex-start;
+ align-items: center;
+ justify-content: flex-start;
+ text-align: left;
line-break: strict;
color: var(--pal-AB);
+ overflow-wrap: normal;
+ padding-right: 8ch; /* added for the timestamp for now */
}
.ircd .room div.main div.event .message .default
@@ -3327,17 +3400,20 @@ div.main > form.search label
justify-content: flex-end;
}
-.ircd .room div.main div.event .message .text
+.ircd .room div.main div.event .message p.text
{
flex-grow: 0;
- font-family: Lato;
- padding: 0px 5px 0px 5px;
- font-size: calc(var(--fsP));
- line-height: 1em;
+ font-family: Helvetica;
+ padding: 0px 0px 0px 0px;
+ font-size: calc(var(--fsPC));
line-break: strict;
word-wrap: normal;
overflow-wrap: normal;
white-space: pre-wrap;
+ font-smoothing: antialiased;
+ -moz-font-smoothing: antialiased;
+ -webkit-font-smoothing: antialiased;
+ text-rendering: optimizeLegibility;
color: black;
}
@@ -3360,6 +3436,10 @@ div.main > form.search label
.ircd .room div.main div.event .message .emote
{
+ flex-grow: 0;
+ font-family: Arial;
+ line-height: 1em;
+ color: var(--pal-AC);
}
.ircd .room div.main div.event .message .image
@@ -3463,27 +3543,27 @@ div.main > form.search label
align-items: stretch;
justify-content: flex-start;
padding: 0px 0px 0px 0px;
- margin: 1px 0px 0px 0px;
+ margin: 0px 0px 1px 0px;
}
.ircd .room .main div.state.event div.handler div.changed h1
{
flex-grow: 0;
+ flex-shrink: 0;
flex-basis: 25%;
+ max-width: 20ch;
align-self: stretch;
align-items: center;
- text-align: center;
justify-content: center;
- padding: 5px 10px 5px 10px;
margin: 0px;
- font-size: calc(var(--fsB));
- background-color: var(--pal-AA);
- text-shadow: 0px 0px var(--pal-AC);
+ padding: 1px 10px 1px 10px;
border-top: 1px solid var(--pal-AB);
border-left: 1px solid var(--pal-AB);
- border-bottom: 1px solid var(--pal-AB);
- border-right: 1px solid var(--pal-AD);
- border-radius: 3px 0px 0px 3px;
+ border-radius: 3px 0px 0px 0px;
+ background-color: var(--pal-AA);
+ font-size: calc(var(--fsC));
+ text-shadow: 0px 0px var(--pal-AC);
+ text-align: center;
color: var(--pal-DE);
}
@@ -3492,9 +3572,39 @@ div.main > form.search label
border: 2px dotted var(--pal-DF);
}
- /* background: -webkit-linear-gradient(left, var(--pal-DD), var(--pal-DE)); */
-
.ircd .room .main div.state.event div.handler div.changed h2
+{
+ flex-grow: 0;
+ flex-shrink: 0;
+ align-self: stretch;
+ align-items: center;
+ justify-content: center;
+ width: 12ch;
+ padding: 1px 5px 1px 5px;
+ margin: 0px;
+ font-size: calc(var(--fsC));
+ border-top: 1px solid var(--pal-DA);
+ border-right: 1px solid var(--pal-DA);
+ background-color: var(--pal-DD);
+ color: var(--pal-AC);
+}
+
+.ircd .room .main div.state.event div.handler div.changed h3
+{
+ flex-grow: 1;
+ align-items: center;
+ justify-content: flex-start;
+ padding: 0px 10px 0px 10px;
+ margin: 0px 0px 0px 0px;
+ font-size: calc(var(--fsE));
+ border-top: 1px solid var(--pal-DD);
+ border-right: 1px solid var(--pal-DD);
+ border-radius: 0px 3px 0px 0px;
+ font-weight: normal;
+ color: black;
+}
+
+.ircd .room .main div.state.event div.handler div.changed h4
{
flex-grow: 1;
align-self: stretch;
@@ -3502,58 +3612,38 @@ div.main > form.search label
justify-content: center;
padding: 0px 0px 0px 0px;
margin: 0px 0px 0px 0px;
- font-size: calc(var(--fsB));
- border-top: 1px solid var(--pal-DA);
- border-right: 1px solid var(--pal-DA);
- border-bottom: 1px solid var(--pal-DA);
- border-radius: 0px 3px 3px 0px;
+ font-size: calc(var(--fsC));
+ border-top: 1px solid var(--pal-DD);
+ border-right: 1px solid var(--pal-DD);
+ border-radius: 0px 3px 0px 0px;
color: black;
}
-.ircd .room .main div.state.event div.handler.unhandled div.changed h2
+.ircd .room .main div.state.event div.handler.unhandled div.changed h3
{
color: var(--pal-CC);
font-family: monospace;
}
-.ircd .room .main div.state.event div.handler div.changed h3
-{
- flex-grow: 1;
- flex-flow: row nowrap;
- align-self: stretch;
- align-items: center;
- justify-content: flex-start;
- letter-spacing: 1px;
- padding: 0px 10px 0px 10px;
- margin: 0px;
- font-size: calc(var(--fsC));
- border-top: 1px solid var(--pal-DA);
- border-right: 1px solid var(--pal-DA);
- border-bottom: 1px solid var(--pal-DA);
- border-radius: 0px 3px 3px 0px;
- color: var(--pal-AB);
-}
-
.ircd .room .main div.state.event div.handler div.changed > *
{
- align-self: center;
}
.ircd .room .main div.state.event div.m_room_member div.changed span
{
- font-weight: bold;
}
.ircd .room .main div.state.event div.m_room_member div.changed span.state_key
{
color: var(--pal-BB);
- font-size: calc(var(--fsB));
+ font-size: calc(var(--fsD));
}
.ircd .room .main div.state.event div.m_room_member div.changed span.domain
{
color: var(--pal-AA);
- font-size: calc(var(--fsB));
+ font-size: calc(var(--fsD));
+ font-weight: normal;
}
.ircd .room .main div.event.state div.m_room_power_levels div.levels
diff --git a/modules/static/charybdis/main.js b/modules/static/charybdis/main.js
index e97843077..b86031f02 100644
--- a/modules/static/charybdis/main.js
+++ b/modules/static/charybdis/main.js
@@ -192,7 +192,6 @@ mc.main["beforeunload"] = function(event)
{
mc.main.interrupt();
event.preventDefault();
- event.stopPropagation();
return false;
};
@@ -234,11 +233,17 @@ mc.main.fault = async function(error)
if(error.name == "timeout")
{
console.warn("client timeout");
- delete mc.ng.root().error;
- delete mc.ng.mc().error;
mc.ng.root().error = undefined;
mc.ng.mc().error = undefined;
mc.ng.apply.later();
+ await new Promise((res, rej) =>
+ {
+ mc.timeout(5000, () =>
+ {
+ res();
+ });
+ });
+
return true;
}
diff --git a/modules/static/charybdis/mc.js b/modules/static/charybdis/mc.js
index 428db6a11..08fe87f4c 100644
--- a/modules/static/charybdis/mc.js
+++ b/modules/static/charybdis/mc.js
@@ -78,6 +78,9 @@ mc.opts =
// timestamp.
ordering: true,
+ // Default setting for number of events rendered/shown by the timeline
+ timeline_limit: 256,
+
account_data:
{
key: "ircd_storage",
diff --git a/modules/static/charybdis/room/controller.js b/modules/static/charybdis/room/controller.js
index cfcbb89de..cc2312b90 100644
--- a/modules/static/charybdis/room/controller.js
+++ b/modules/static/charybdis/room/controller.js
@@ -84,9 +84,15 @@ mc.ng.app.controller('room', class extends mc.ng.controller
sender_domid(sender)
{
+ if(!sender)
+ return sender;
+
let sid = this.sender_sid(sender);
let domid = mc.m.domid(sender);
- let remain = 26 - sid.length;
+ if(!domid)
+ return sender;
+
+ let remain = 24 - sid.length;
let start = remain < domid.length? domid.length - remain : 0;
let ret = domid.substr(start, remain);
if(ret.length < domid.length)
@@ -99,8 +105,8 @@ mc.ng.app.controller('room', class extends mc.ng.controller
{
let displayname = maybe(() => mc.users[sender].displayname);
let str = displayname? displayname : mc.m.sid(sender);
- let len = 28 - 2;
- return str.substr(0, len);
+ let len = 28 - 3;
+ return str? str.substr(0, len) : sender;
}
open_bracket(event)
@@ -155,7 +161,7 @@ mc.ng.app.controller('room', class extends mc.ng.controller
dots_to_underscores(str)
{
- return str.replace(/\./g, '_');
+ return defined(str)? str.replace(/\./g, '_') : str;
}
handler_exists(type)
diff --git a/modules/static/charybdis/room/events.js b/modules/static/charybdis/room/events.js
index 3ca25373c..54640b34a 100644
--- a/modules/static/charybdis/room/events.js
+++ b/modules/static/charybdis/room/events.js
@@ -91,6 +91,10 @@ room.events.prototype.can_render = function(event, $index)
if(this.room.control.content.type[event.type] === false)
return false;
+ //if(this.room.timeline.length > this.room.timeline.opts.limit)
+ // if($index < this.room.timeline.horizon)
+ // return false;
+
return true;
};
@@ -108,12 +112,49 @@ room.events.prototype.can_show = function(event, $index)
if(this.room.control.content.event_id[event.event_id] === false)
return false;
- if($index < this.room.timeline.horizon)
- return false;
-
- if(this.room.timeline.length > this.room.timeline.opts.limit)
- if($index < this.room.timeline.opts.limit)
+ if($index < this.room.timeline.length - this.room.timeline.opts.limit)
+ if($index < this.room.timeline.horizon)
return false;
return true;
};
+
+/* Right now before (if ever) the event timeline is split up into groupings
+ * of events to provide margins and collapse for a grouping we use this to
+ * determine if the event before it is
+ */
+room.events.prototype.is_grouping_start = function(event, $index)
+{
+ let prev = this.room.timeline[$index - 1];
+ if(!prev)
+ return true;
+
+ if(event.type == "m.room.message" && prev.type != event.type)
+ return true;
+
+ if(event.type == "m.room.message" && event.sender != prev.sender)
+ return true;
+
+ if(event.type != "m.room.message" && prev.type == "m.room.message")
+ return true;
+
+ return false;
+};
+
+room.events.prototype.is_grouping_end = function(event, $index)
+{
+ let next = this.room.timeline[$index + 1];
+ if(!next)
+ return false;
+
+ if(event.type == "m.room.message" && next.type != event.type)
+ return true;
+
+ if(event.type == "m.room.message" && next.sender != event.sender)
+ return true;
+
+ if(event.type != "m.room.message" && next.type == "m.room.message")
+ return true;
+
+ return false;
+};
diff --git a/modules/static/charybdis/room/send.js b/modules/static/charybdis/room/send.js
index 4ea4ef3f5..3be116712 100644
--- a/modules/static/charybdis/room/send.js
+++ b/modules/static/charybdis/room/send.js
@@ -141,8 +141,8 @@ room.send.message.text = function(text, opts = {})
{
content:
{
- msgtype: "m.text",
body: text,
+ msgtype: "m.text",
},
});
@@ -158,8 +158,8 @@ room.send.message.emote = function(text, opts = {})
{
content:
{
- msgtype: "m.emote",
body: text,
+ msgtype: "m.emote",
}
});
@@ -175,9 +175,9 @@ room.send.message.image = function(url, body = url, opts = {})
{
content:
{
+ body: body,
msgtype: "m.image",
url: url,
- body: body,
},
});
@@ -193,13 +193,13 @@ room.send.message.video = function(url, body = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef
{
content:
{
- url: url,
- msgtype: "m.video",
+ body: body,
info:
{
mimetype: "text/plain"
},
- body: body,
+ msgtype: "m.video",
+ url: url,
},
});
diff --git a/modules/static/charybdis/room/timeline.js b/modules/static/charybdis/room/timeline.js
index 9c46b1e9d..786e406b1 100644
--- a/modules/static/charybdis/room/timeline.js
+++ b/modules/static/charybdis/room/timeline.js
@@ -71,7 +71,7 @@ room.timeline.opts =
// The number of non-state events in the timeline is trimmed to this value
// on the antipode to the last insertion. Increasing this value can make
// scrolling smoother. Decreasing this value can save memory.
- limit: 512,
+ limit: mc.opts.timeline_limit,
// Keeps the timeline filled to the limit
autofill: true,
diff --git a/modules/static/index.html b/modules/static/index.html
index 215504042..1abafa430 100644
--- a/modules/static/index.html
+++ b/modules/static/index.html
@@ -14,7 +14,7 @@ lang="en"
/>
- Charybdis 5 - Internet Relay Chat Matrix
+ Matrix Construct
@@ -48,7 +48,7 @@ ng-app="ircd"
ng-class="{ loaded: true }"
>
-
+--------------------------------------------------------------------------- -->
@@ -2082,9 +2105,9 @@ type="text/ng-template"
CREATE
-
+
{{ room.id }}
-
+
@@ -2098,9 +2121,9 @@ type="text/ng-template"
POWER LEVELS
-
+
-
+
CANONICAL ALIAS
-
+
{{ event.content.alias }}
-
+
@@ -2168,9 +2191,9 @@ type="text/ng-template"
JOIN RULES
-
+
{{ event.content.join_rule }}
-
+
@@ -2223,9 +2246,9 @@ type="text/ng-template"
GUEST ACCESS
-
+
{{ event.content.guest_access }}
-
+
@@ -2239,9 +2262,9 @@ type="text/ng-template"
ALIASES
-
+
-
+
ROOM NAME
-
{{ event.content.name }}
-
-
+
from {{ room.name }} to {{ event.content.name }}
-
+
+
+
+
+
@@ -2297,7 +2345,7 @@ type="text/ng-template"
class="text"
ng-switch-when="m.text"
>{{event.content.body}}
-
+
{{event.type}}
-
-
+
+