Add option to display chat message data
This commit is contained in:
parent
c6fbad3c52
commit
96f8bf24a8
5 changed files with 87 additions and 12 deletions
|
|
@ -6,10 +6,12 @@
|
||||||
</h3>
|
</h3>
|
||||||
<div v-if="desiresContent || print">
|
<div v-if="desiresContent || print">
|
||||||
<span v-for="message in topic.messages" :key="message.id">
|
<span v-for="message in topic.messages" :key="message.id">
|
||||||
<Message :message="message" />
|
<Message :message="message" :show_message_data="show_message_data" />
|
||||||
<span> </span>
|
<span> </span>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div style="float: none"><div style="page-break-after: always"></div></div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
@ -26,7 +28,7 @@ export default {
|
||||||
desiresContent: false,
|
desiresContent: false,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
props: ["topic", "print"],
|
props: ["topic", "print", "show_message_data"],
|
||||||
computed: {
|
computed: {
|
||||||
toggleSymbol() {
|
toggleSymbol() {
|
||||||
let r = "";
|
let r = "";
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,39 @@
|
||||||
<template>
|
<template>
|
||||||
<span :class="classes" class="message">
|
<div class="message-outer">
|
||||||
|
<div class="message-data" v-if="show_message_data">
|
||||||
|
<div class="from">{{ message.sender_full_name }}</div>
|
||||||
|
<div class="time">{{ time }}</div>
|
||||||
|
</div>
|
||||||
|
<div :class="classes" class="message">
|
||||||
<vue3-markdown-it :source="content" v-bind="$mdOpts"></vue3-markdown-it>
|
<vue3-markdown-it :source="content" v-bind="$mdOpts"></vue3-markdown-it>
|
||||||
|
</div>
|
||||||
|
<div class="message-data-reactions" v-if="show_message_data">
|
||||||
|
<span
|
||||||
|
class="reaction"
|
||||||
|
v-for="reaction in message.reactions"
|
||||||
|
:key="reaction"
|
||||||
|
>
|
||||||
|
{{ String.fromCodePoint("0x" + reaction.emoji_code) }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
<div class="reactions ui">
|
<div class="reactions ui">
|
||||||
<template v-for="reaction in reactions" :key="reaction">
|
<template v-for="reaction in reactions" :key="reaction">
|
||||||
{{ reaction }}
|
{{ reaction }}
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
</span>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import emoji from "../../mixins/emoji";
|
||||||
var EmojiConvertor = require("emoji-js");
|
var EmojiConvertor = require("emoji-js");
|
||||||
var emojiConv = new EmojiConvertor();
|
var emojiConv = new EmojiConvertor();
|
||||||
/*eslint no-unused-vars: "off"*/
|
/*eslint no-unused-vars: "off"*/
|
||||||
/*eslint no-undef: "off"*/
|
/*eslint no-undef: "off"*/
|
||||||
export default {
|
export default {
|
||||||
name: "Message",
|
name: "Message",
|
||||||
props: ["message"],
|
props: ["message", "show_message_data"],
|
||||||
|
mixins: [emoji],
|
||||||
computed: {
|
computed: {
|
||||||
rawJSON() {
|
rawJSON() {
|
||||||
return "```json\n" + JSON.stringify(this.message, null, 2) + "\n```";
|
return "```json\n" + JSON.stringify(this.message, null, 2) + "\n```";
|
||||||
|
|
@ -58,6 +75,12 @@ export default {
|
||||||
classes() {
|
classes() {
|
||||||
return this.message.reactions.map((r) => "u" + r.emoji_code);
|
return this.message.reactions.map((r) => "u" + r.emoji_code);
|
||||||
},
|
},
|
||||||
|
time() {
|
||||||
|
var ts = this.message.timestamp;
|
||||||
|
var ts_ms = ts * 1000;
|
||||||
|
var date_ob = new Date(ts_ms);
|
||||||
|
return date_ob.toLocaleString();
|
||||||
|
},
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
// console.log(this.message.content);
|
// console.log(this.message.content);
|
||||||
|
|
@ -90,4 +113,19 @@ export default {
|
||||||
all: revert;
|
all: revert;
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.message-data {
|
||||||
|
display: flex;
|
||||||
|
border-bottom: 1px solid #666;
|
||||||
|
}
|
||||||
|
.message-data > div {
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.message-data .from:after {
|
||||||
|
content: ":";
|
||||||
|
}
|
||||||
|
.message-data .time {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
@ -6,6 +6,7 @@
|
||||||
:key="topic.title"
|
:key="topic.title"
|
||||||
:topic="topic"
|
:topic="topic"
|
||||||
:print="print"
|
:print="print"
|
||||||
|
:show_message_data="show_message_data"
|
||||||
/>
|
/>
|
||||||
</section>
|
</section>
|
||||||
</template>
|
</template>
|
||||||
|
|
@ -24,7 +25,7 @@ export default {
|
||||||
...mapGetters(["sortedTopics"]),
|
...mapGetters(["sortedTopics"]),
|
||||||
},
|
},
|
||||||
methods: {},
|
methods: {},
|
||||||
props: ["print"],
|
props: ["print", "show_message_data"],
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
export default {
|
export default {
|
||||||
methods: {
|
methods: {
|
||||||
toEmojiCode: (emoji) => {
|
toEmojiCode: (emoji) => {
|
||||||
console.log(emoji);
|
// console.log(emoji);
|
||||||
return emoji.replace(/\p{Emoji}/gu, (m) => m.codePointAt(0).toString(16));
|
return emoji.replace(/\p{Emoji}/gu, (m) => m.codePointAt(0).toString(16));
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,13 +4,22 @@
|
||||||
{{ show_ui ? "Hide" : "Show" }} UI
|
{{ show_ui ? "Hide" : "Show" }} UI
|
||||||
</button>
|
</button>
|
||||||
<splitpanes class="default-theme">
|
<splitpanes class="default-theme">
|
||||||
<pane v-if="show_ui" size="10" min-size="5">
|
<pane v-if="show_ui" size="10" min-size="5" @resize="resizer">
|
||||||
<Streams />
|
<Streams />
|
||||||
|
<div class="controls">
|
||||||
<button @click="toggle_ui">{{ show_ui ? "Hide" : "Show" }} UI</button>
|
<button @click="toggle_ui">{{ show_ui ? "Hide" : "Show" }} UI</button>
|
||||||
<button @click="print">Print</button>
|
<button @click="print">Print</button>
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
id="msg-data"
|
||||||
|
value="1"
|
||||||
|
v-model="show_message_data"
|
||||||
|
/>
|
||||||
|
<label for="msg-data">Show chat message data</label>
|
||||||
|
</div>
|
||||||
</pane>
|
</pane>
|
||||||
<pane size="55">
|
<pane size="55">
|
||||||
<Content :print="!show_ui" />
|
<Content :print="!show_ui" :show_message_data="show_message_data" />
|
||||||
</pane>
|
</pane>
|
||||||
<pane v-if="show_ui" size="35" min-size="15">
|
<pane v-if="show_ui" size="35" min-size="15">
|
||||||
<Rules />
|
<Rules />
|
||||||
|
|
@ -41,6 +50,8 @@ export default {
|
||||||
data: () => {
|
data: () => {
|
||||||
return {
|
return {
|
||||||
show_ui: true,
|
show_ui: true,
|
||||||
|
show_message_data: false,
|
||||||
|
panel_sizes: { 0: 10, 1: 55, 2: 35 },
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|
@ -49,6 +60,9 @@ export default {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
resizer(e, i) {
|
||||||
|
console.log(e, i);
|
||||||
|
},
|
||||||
print() {
|
print() {
|
||||||
// let prev = this.show_ui;
|
// let prev = this.show_ui;
|
||||||
this.toggle_ui(null, false);
|
this.toggle_ui(null, false);
|
||||||
|
|
@ -90,6 +104,11 @@ export default {
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.controls {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
.print .pane-wrapper {
|
.print .pane-wrapper {
|
||||||
height: auto;
|
height: auto;
|
||||||
}
|
}
|
||||||
|
|
@ -102,6 +121,21 @@ export default {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* absolutely needed to make the page breaks work (next style) */
|
||||||
|
.print section {
|
||||||
|
display: block !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.print .body {
|
||||||
|
page-break-after: always;
|
||||||
|
border-bottom: 3px dotted green;
|
||||||
|
}
|
||||||
|
.print .body:first-of-type {
|
||||||
|
page-break-after: always;
|
||||||
|
border-bottom: 3px dotted yellow;
|
||||||
|
}
|
||||||
|
|
||||||
.float-btn {
|
.float-btn {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
z-index: 1000;
|
z-index: 1000;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue