thelounge/client/components/Message.vue

85 lines
2.2 KiB
Vue
Raw Normal View History

<template>
<div
:id="'msg-' + message.id"
:class="['msg', message.type, {self: message.self, highlight: message.highlight}]"
:data-from="message.from && message.from.nick"
>
<span
:aria-label="message.time | localetime"
class="time tooltipped tooltipped-e">{{ message.time | tz }}</span>
<template v-if="message.type === 'unhandled'">
<span class="from">[{{ message.command }}]</span>
<span class="content">
<span
v-for="(param, id) in message.params"
2018-07-10 09:45:54 +02:00
:key="id">{{ param }} </span>
</span>
</template>
2018-07-09 12:44:12 +02:00
<template v-else-if="isAction()">
<span class="from"/>
<component
:is="messageComponent"
:message="message"/>
</template>
<template v-if="message.type === 'action'">
<span class="from"/>
<span class="content">
<span class="text"><Username :user="message.from"/> <ParsedMessage :message="message"/></span>
<LinkPreview
v-for="preview in message.previews"
:keep-scroll-position="keepScrollPosition"
:key="preview.link"
:link="preview"/>
</span>
</template>
2018-07-09 12:44:12 +02:00
<template v-else>
<span class="from">
<template v-if="message.from && message.from.nick">
<Username :user="message.from"/>
</template>
</span>
<span class="content">
2018-07-12 10:41:40 +02:00
<span class="text"><ParsedMessage :message="message"/></span>
2018-07-10 13:57:11 +02:00
<LinkPreview
v-for="preview in message.previews"
:keep-scroll-position="keepScrollPosition"
:key="preview.link"
2018-07-10 13:57:11 +02:00
:link="preview"/>
</span>
</template>
</div>
</template>
<script>
import Username from "./Username.vue";
2018-07-10 13:57:11 +02:00
import LinkPreview from "./LinkPreview.vue";
import ParsedMessage from "./ParsedMessage.vue";
2018-07-09 12:44:12 +02:00
import MessageTypes from "./MessageTypes";
MessageTypes.ParsedMessage = ParsedMessage;
2018-07-10 13:57:11 +02:00
MessageTypes.LinkPreview = LinkPreview;
2018-07-09 12:44:12 +02:00
MessageTypes.Username = Username;
export default {
name: "Message",
2018-07-09 12:44:12 +02:00
components: MessageTypes,
props: {
message: Object,
keepScrollPosition: Function,
},
2018-07-09 12:44:12 +02:00
computed: {
messageComponent() {
return "message-" + this.message.type;
},
},
mounted() {
require("../js/renderPreview");
},
2018-07-09 12:44:12 +02:00
methods: {
isAction() {
return typeof MessageTypes["message-" + this.message.type] !== "undefined";
},
},
};
</script>