]> git.immae.eu Git - github/bastienwirtz/homer.git/blame - src/components/Message.vue
Add support for a message icon
[github/bastienwirtz/homer.git] / src / components / Message.vue
CommitLineData
b9c5fcf0 1<template>
7ef65940 2 <article v-if="show" class="message" :class="message.style">
0e045b4c
GC
3 <div v-if="message.title || message.icon" class="message-header">
4 <p>
5 <i v-if="message.icon" :class="`fa-fw ${message.icon}`"></i>
6 {{ message.title }}
7 </p>
b9c5fcf0 8 </div>
8ae1fe8a
BW
9 <div
10 v-if="message.content"
11 class="message-body"
12 v-html="message.content"
13 ></div>
b9c5fcf0
BW
14 </article>
15</template>
16
17<script>
18export default {
19 name: "Message",
20 props: {
21 item: Object,
22 },
7ef65940
BW
23 data: function () {
24 return {
25 show: false,
26 message: {},
27 };
28 },
29 created: async function () {
b9c5fcf0 30 // Look for a new message if an endpoint is provided.
7ef65940 31 this.message = Object.assign({}, this.item);
b9c5fcf0 32 if (this.item && this.item.url) {
7ef65940
BW
33 const fetchedMessage = await this.getMessage(this.item.url);
34 // keep the original config value if no value is provided by the endpoint
35 for (const prop of ["title", "style", "content"]) {
36 if (prop in fetchedMessage && fetchedMessage[prop] !== null) {
37 this.message[prop] = fetchedMessage[prop];
b9c5fcf0 38 }
7ef65940 39 }
b9c5fcf0 40 }
7ef65940 41 this.show = this.message.title || this.message.content;
b9c5fcf0
BW
42 },
43 methods: {
44 getMessage: function (url) {
45 return fetch(url).then(function (response) {
46 if (response.status != 200) {
47 return;
48 }
49 return response.json();
50 });
51 },
52 },
53};
54</script>