2018-07-08 10:50:11 +00:00
|
|
|
<template>
|
2018-07-08 13:42:54 +00:00
|
|
|
<div
|
|
|
|
id="chat-container"
|
2019-02-25 05:38:13 +00:00
|
|
|
class="window"
|
|
|
|
>
|
2018-07-08 13:42:54 +00:00
|
|
|
<div
|
|
|
|
id="chat"
|
2018-07-09 10:44:12 +00:00
|
|
|
:data-id="channel.id"
|
2018-07-08 17:26:26 +00:00
|
|
|
:class="{
|
2018-09-13 09:16:27 +00:00
|
|
|
'hide-motd': !this.$root.settings.motd,
|
|
|
|
'colored-nicks': this.$root.settings.coloredNicks,
|
|
|
|
'show-seconds': this.$root.settings.showSeconds,
|
2019-02-25 05:38:13 +00:00
|
|
|
}"
|
|
|
|
>
|
2018-07-08 12:18:17 +00:00
|
|
|
<div
|
|
|
|
:id="'chan-' + channel.id"
|
|
|
|
:class="[channel.type, 'chan', 'active']"
|
|
|
|
:data-id="channel.id"
|
|
|
|
:data-type="channel.type"
|
|
|
|
:aria-label="channel.name"
|
2019-02-25 05:38:13 +00:00
|
|
|
role="tabpanel"
|
|
|
|
>
|
2018-07-08 12:18:17 +00:00
|
|
|
<div class="header">
|
2018-07-08 10:50:11 +00:00
|
|
|
<button
|
2018-07-08 12:18:17 +00:00
|
|
|
class="lt"
|
2019-02-25 05:38:13 +00:00
|
|
|
aria-label="Toggle channel list"
|
|
|
|
/>
|
2018-07-08 12:18:17 +00:00
|
|
|
<span class="title">{{ channel.name }}</span>
|
|
|
|
<span
|
|
|
|
:title="channel.topic"
|
2019-02-25 05:38:13 +00:00
|
|
|
class="topic"
|
|
|
|
><ParsedMessage
|
|
|
|
v-if="channel.topic"
|
|
|
|
:network="network"
|
|
|
|
:text="channel.topic"
|
|
|
|
/></span>
|
2018-07-08 12:18:17 +00:00
|
|
|
<button
|
|
|
|
class="menu"
|
2019-02-25 05:38:13 +00:00
|
|
|
aria-label="Open the context menu"
|
|
|
|
/>
|
2018-07-08 12:18:17 +00:00
|
|
|
<span
|
|
|
|
v-if="channel.type === 'channel'"
|
|
|
|
class="rt-tooltip tooltipped tooltipped-w"
|
2019-02-25 05:38:13 +00:00
|
|
|
aria-label="Toggle user list"
|
|
|
|
>
|
2018-07-08 12:18:17 +00:00
|
|
|
<button
|
|
|
|
class="rt"
|
2019-02-25 05:38:13 +00:00
|
|
|
aria-label="Toggle user list"
|
|
|
|
/>
|
2018-07-08 12:18:17 +00:00
|
|
|
</span>
|
2018-07-08 10:50:11 +00:00
|
|
|
</div>
|
2018-07-10 09:16:24 +00:00
|
|
|
<div
|
|
|
|
v-if="channel.type === 'special'"
|
2019-02-25 05:38:13 +00:00
|
|
|
class="chat-content"
|
|
|
|
>
|
2018-07-19 10:01:52 +00:00
|
|
|
<div class="chat">
|
|
|
|
<div class="messages">
|
|
|
|
<div class="msg">
|
2018-12-17 10:29:49 +00:00
|
|
|
<Component
|
2018-07-19 10:01:52 +00:00
|
|
|
:is="specialComponent"
|
2018-07-19 17:44:24 +00:00
|
|
|
:network="network"
|
2019-02-25 05:38:13 +00:00
|
|
|
:channel="channel"
|
|
|
|
/>
|
2018-07-19 10:01:52 +00:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
2018-07-10 09:16:24 +00:00
|
|
|
</div>
|
|
|
|
<div
|
|
|
|
v-else
|
2019-02-25 05:38:13 +00:00
|
|
|
class="chat-content"
|
|
|
|
>
|
2018-09-24 12:47:39 +00:00
|
|
|
<div
|
2019-02-18 06:27:35 +00:00
|
|
|
:class="['scroll-down tooltipped tooltipped-w', {'scroll-down-shown': !channel.scrolledToBottom}]"
|
|
|
|
aria-label="Jump to recent messages"
|
2019-02-25 05:38:13 +00:00
|
|
|
@click="$refs.messageList.jumpToBottom()"
|
|
|
|
>
|
2018-09-24 12:47:39 +00:00
|
|
|
<div class="scroll-down-arrow" />
|
|
|
|
</div>
|
2018-07-18 11:16:21 +00:00
|
|
|
<MessageList
|
2018-09-18 09:20:40 +00:00
|
|
|
ref="messageList"
|
2018-07-19 17:44:24 +00:00
|
|
|
:network="network"
|
2019-02-25 05:38:13 +00:00
|
|
|
:channel="channel"
|
|
|
|
/>
|
2018-07-08 17:22:01 +00:00
|
|
|
<ChatUserList
|
2018-07-08 12:18:17 +00:00
|
|
|
v-if="channel.type === 'channel'"
|
2019-02-25 05:38:13 +00:00
|
|
|
:channel="channel"
|
|
|
|
/>
|
2018-07-08 10:50:11 +00:00
|
|
|
</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"
|
2019-02-25 05:38:13 +00:00
|
|
|
@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"
|
2019-02-25 05:38:13 +00:00
|
|
|
:channel="channel"
|
|
|
|
/>
|
2018-07-08 10:50:11 +00:00
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
2018-07-12 08:41:40 +00:00
|
|
|
import ParsedMessage from "./ParsedMessage.vue";
|
2018-07-08 17:22:01 +00:00
|
|
|
import MessageList from "./MessageList.vue";
|
2018-07-08 13:42:54 +00:00
|
|
|
import ChatInput from "./ChatInput.vue";
|
2018-07-08 17:22:01 +00:00
|
|
|
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";
|
2018-07-08 10:50:11 +00:00
|
|
|
|
|
|
|
export default {
|
|
|
|
name: "Chat",
|
|
|
|
components: {
|
2018-07-12 08:41:40 +00:00
|
|
|
ParsedMessage,
|
2018-07-08 17:22:01 +00:00
|
|
|
MessageList,
|
2018-07-08 13:42:54 +00:00
|
|
|
ChatInput,
|
2018-07-08 17:22:01 +00:00
|
|
|
ChatUserList,
|
2018-07-08 10:50:11 +00:00
|
|
|
},
|
|
|
|
props: {
|
2018-07-08 12:18:17 +00:00
|
|
|
network: Object,
|
2018-07-08 10:50:11 +00:00
|
|
|
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
|
|
|
},
|
|
|
|
},
|
2018-09-14 13:28:39 +00:00
|
|
|
methods: {
|
|
|
|
hideUserVisibleError() {
|
|
|
|
this.$root.currentUserVisibleError = null;
|
2018-09-14 17:22:54 +00:00
|
|
|
},
|
2018-09-14 13:28:39 +00:00
|
|
|
},
|
2018-07-12 11:14:15 +00:00
|
|
|
};
|
2018-07-08 10:50:11 +00:00
|
|
|
</script>
|