hardlounge/client/components/Chat.vue

125 lines
2.9 KiB
Vue
Raw Normal View History

<template>
2018-07-08 13:42:54 +00:00
<div
id="chat-container"
class="window">
<div
id="chat"
2018-07-09 10:44:12 +00:00
:data-id="channel.id"
:class="{
'hide-motd': !this.$root.settings.motd,
'colored-nicks': this.$root.settings.coloredNicks,
'show-seconds': this.$root.settings.showSeconds,
2018-12-17 10:29:49 +00:00
}">
<div
:id="'chan-' + channel.id"
:class="[channel.type, 'chan', 'active']"
:data-id="channel.id"
:data-type="channel.type"
:aria-label="channel.name"
2018-07-29 17:57:14 +00:00
role="tabpanel">
<div class="header">
<button
class="lt"
2018-07-29 17:57:14 +00:00
aria-label="Toggle channel list" />
<span class="title">{{ channel.name }}</span>
<span
:title="channel.topic"
2018-07-12 08:41:40 +00:00
class="topic"><ParsedMessage
v-if="channel.topic"
2018-07-19 17:44:24 +00:00
:network="network"
2018-07-29 17:57:14 +00:00
:text="channel.topic" /></span>
<button
class="menu"
2018-07-29 17:57:14 +00:00
aria-label="Open the context menu" />
<span
v-if="channel.type === 'channel'"
class="rt-tooltip tooltipped tooltipped-w"
aria-label="Toggle user list">
<button
class="rt"
2018-07-29 17:57:14 +00:00
aria-label="Toggle user list" />
</span>
</div>
2018-07-10 09:16:24 +00:00
<div
v-if="channel.type === 'special'"
class="chat-content">
<div class="chat">
<div class="messages">
<div class="msg">
2018-12-17 10:29:49 +00:00
<Component
:is="specialComponent"
2018-07-19 17:44:24 +00:00
:network="network"
2018-07-29 17:57:14 +00:00
:channel="channel" />
</div>
</div>
</div>
2018-07-10 09:16:24 +00:00
</div>
<div
v-else
class="chat-content">
<div
:class="['scroll-down', {'scroll-down-shown': !channel.scrolledToBottom}]"
@click="$refs.messageList.jumpToBottom()">
<div class="scroll-down-arrow" />
</div>
<MessageList
2018-09-18 09:20:40 +00:00
ref="messageList"
2018-07-19 17:44:24 +00:00
:network="network"
:channel="channel" />
<ChatUserList
v-if="channel.type === 'channel'"
2018-07-29 17:57:14 +00:00
:channel="channel" />
</div>
</div>
</div>
2018-08-31 10:43:21 +00:00
<div
2018-09-09 13:09:19 +00:00
v-if="this.$root.currentUserVisibleError"
2018-10-16 10:21:16 +00:00
id="user-visible-error"
@click="hideUserVisibleError">{{ this.$root.currentUserVisibleError }}</div>
2018-09-03 07:58:33 +00:00
<span id="upload-progressbar" />
2018-07-08 13:42:54 +00:00
<ChatInput
:network="network"
2018-07-29 17:57:14 +00:00
:channel="channel" />
</div>
</template>
<script>
2018-07-12 08:41:40 +00:00
import ParsedMessage from "./ParsedMessage.vue";
import MessageList from "./MessageList.vue";
2018-07-08 13:42:54 +00:00
import ChatInput from "./ChatInput.vue";
import ChatUserList from "./ChatUserList.vue";
2018-07-10 09:16:24 +00:00
import ListBans from "./Special/ListBans.vue";
2018-07-10 09:37:48 +00:00
import ListChannels from "./Special/ListChannels.vue";
2018-07-11 07:54:32 +00:00
import ListIgnored from "./Special/ListIgnored.vue";
export default {
name: "Chat",
components: {
2018-07-12 08:41:40 +00:00
ParsedMessage,
MessageList,
2018-07-08 13:42:54 +00:00
ChatInput,
ChatUserList,
},
props: {
network: Object,
channel: Object,
},
2018-07-10 09:16:24 +00:00
computed: {
specialComponent() {
2018-07-10 09:37:48 +00:00
switch (this.channel.special) {
case "list_bans": return ListBans;
case "list_channels": return ListChannels;
2018-07-11 07:54:32 +00:00
case "list_ignored": return ListIgnored;
2018-07-10 09:16:24 +00:00
}
2018-12-17 10:29:49 +00:00
return undefined;
2018-07-10 09:16:24 +00:00
},
},
methods: {
hideUserVisibleError() {
this.$root.currentUserVisibleError = null;
},
},
};
</script>