Browse Source
- FLEX laytout needs a lot of work. The content pane won't clamp to a max height, grows, and pushes the input pane off the bottom of the view.develop
4 changed files with 244 additions and 66 deletions
@ -0,0 +1,16 @@ |
|||||
|
mixin renderChatMessage (message) |
||||
|
.chat-message |
||||
|
.uk-flex |
||||
|
.uk-width-auto.no-select |
||||
|
img(src="/img/default-member.png").member-profile-icon |
||||
|
.uk-width-expand |
||||
|
.message-attribution.uk-margin-small.no-select |
||||
|
.uk-flex.uk-flex-top |
||||
|
.uk-width-expand |
||||
|
if (message.author.displayName && (message.author.displayName.length > 0)) |
||||
|
.author-display-name= message.author.displayName |
||||
|
.author-username @#{message.author.username} |
||||
|
.uk-width-auto |
||||
|
.message-timestamp= dayjs(message.created).format('h:mm a') |
||||
|
.message-content |
||||
|
div!= marked.parse(message.content) |
@ -1,41 +1,100 @@ |
|||||
extends ../../layout/main |
extends ../../layout/main |
||||
block view-content |
block view-content |
||||
|
|
||||
|
include ../components/message |
||||
|
|
||||
|
mixin renderMemberListEntry (member, options) |
||||
|
- |
||||
|
options = Object.assign({ |
||||
|
active: false, |
||||
|
idle: false, |
||||
|
audioActive: false, |
||||
|
audioIndicatorActive: false, |
||||
|
}, options); |
||||
|
|
||||
|
li( |
||||
|
data-user-id= member._id, |
||||
|
data-username= member.username, |
||||
|
class={ 'entry-active': options.active, 'entry-idle': options.idle, 'entry-audio-active': options.audioActive }, |
||||
|
).member-list-entry |
||||
|
div(uk-grid).uk-grid-collapse.uk-flex-middle |
||||
|
.uk-width-auto |
||||
|
img(src="/img/default-member.png").member-profile-icon |
||||
|
.uk-width-expand= member.username |
||||
|
.uk-width-auto |
||||
|
div(data-member-id= member._id, class={ 'indicator-active': options.audioIndicatorActive }).member-audio-indicator |
||||
|
i.fas.fa-volume-off |
||||
|
|
||||
|
mixin renderLiveMember (member) |
||||
|
div(data-user-id= member._id, data-username= member.username).stage-live-member |
||||
|
video(src="/static/video/gdl-crush.mp4", autoplay, muted, loop, disablepictureinpicture, disableremoteplayback) |
||||
|
.uk-flex.live-meta.no-select |
||||
|
.live-username.uk-width-expand |
||||
|
.uk-text-truncate= member.displayName || member.username |
||||
|
.uk-width-auto |
||||
|
i.fas.fa-volume-off |
||||
|
.uk-width-auto |
||||
|
.uk-margin-small-left |
||||
|
i.fas.fa-cog |
||||
|
|
||||
.dtp-chat-stage |
.dtp-chat-stage |
||||
.chat-sidebar |
.chat-sidebar |
||||
.chat-stage-header Active Members |
.chat-stage-header Active Members |
||||
.sidebar-panel This is a sidebar content panel. It should word-wrap correctly and will be used to display usernames in the room with status. |
.sidebar-panel |
||||
|
ul(id="chat-active-members").uk-list.uk-list-collapse |
||||
|
+renderMemberListEntry(user) |
||||
|
+renderMemberListEntry(user) |
||||
|
+renderMemberListEntry(user) |
||||
|
+renderMemberListEntry(user) |
||||
|
+renderMemberListEntry(user) |
||||
|
+renderMemberListEntry(user) |
||||
|
+renderMemberListEntry(user) |
||||
|
+renderMemberListEntry(user) |
||||
|
+renderMemberListEntry(user) |
||||
|
+renderMemberListEntry(user) |
||||
|
+renderMemberListEntry(user) |
||||
|
+renderMemberListEntry(user) |
||||
|
|
||||
.chat-stage-header Idle Members |
.chat-stage-header Idle Members |
||||
.sidebar-panel This is a sidebar content panel. It should word-wrap correctly and will be used to display usernames in the room with status. |
.sidebar-panel |
||||
|
ul(id="chat-idle-members").uk-list.uk-list-collapse |
||||
|
+renderMemberListEntry(user, { idle: true }) |
||||
|
+renderMemberListEntry(user, { idle: true }) |
||||
|
+renderMemberListEntry(user, { idle: true }) |
||||
|
+renderMemberListEntry(user, { idle: true }) |
||||
|
|
||||
.chat-container |
.chat-container |
||||
.chat-stage-header |
.chat-stage-header |
||||
div(uk-grid) |
div(uk-grid) |
||||
.uk-width-expand= room.name |
.uk-width-expand= room.name |
||||
|
|
||||
|
|
||||
.chat-content-panel |
.chat-content-panel |
||||
.chat-media |
div(uk-grid).uk-grid-collapse.live-content |
||||
div(uk-grid) |
.uk-width-expand |
||||
.uk-width-1-4 |
.chat-media |
||||
.live-member |
div(uk-grid) |
||||
video(src="/static/video/gdl-crush.mp4", autoplay, muted, loop, disablepictureinpicture, disableremoteplayback) |
div(class="uk-width-1-1 uk-width-1-2@m uk-width-1-3@l uk-width-1-4@xl") |
||||
.uk-flex.live-meta |
+renderLiveMember(user) |
||||
.live-username.uk-width-expand Rob Colbert |
|
||||
.uk-width-auto |
.uk-width-auto |
||||
i.fas.fa-volume-off |
.chat-messages |
||||
.uk-width-auto |
- |
||||
.uk-margin-small-left |
var testMessage = { |
||||
i.fas.fa-cog |
created: new Date(), |
||||
|
author: user, |
||||
.chat-messages This is the chat content panel. It should word-wrap and scroll correctly, and will be where individual chat messages will render as they arrive and are sent. |
content: "This is the chat content panel. It should word-wrap and scroll correctly, and will be where individual chat messages will render as they arrive and are sent.", |
||||
|
}; |
||||
.chat-input-panel |
|
||||
textarea(id="chat-input", name="chatInput", rows=2).uk-textarea.uk-resize-none.uk-border-rounded |
+renderChatMessage(testMessage) |
||||
.uk-margin-small |
+renderChatMessage(testMessage) |
||||
.uk-flex |
+renderChatMessage(testMessage) |
||||
.uk-width-expand |
+renderChatMessage(testMessage) |
||||
.uk-width-auto |
|
||||
button(type="submit", uk-tooltip={ title: 'Send message' }).uk-button.uk-button-default.uk-button-small.uk-border-rounded |
.chat-input-panel |
||||
i.fas.fa-paper-plane |
textarea(id="chat-input", name="chatInput", rows=2).uk-textarea.uk-resize-none.uk-border-rounded |
||||
|
.uk-margin-small |
||||
|
.uk-flex |
||||
|
.uk-width-expand |
||||
|
.uk-width-auto |
||||
|
button(type="submit", uk-tooltip={ title: 'Send message' }).uk-button.uk-button-default.uk-button-small.uk-border-rounded |
||||
|
i.fas.fa-paper-plane |
Loading…
Reference in new issue