aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorBastien Wirtz <bastien.wirtz@gmail.com>2021-10-06 22:55:09 +0200
committerBastien Wirtz <bastien.wirtz@gmail.com>2021-10-06 22:55:09 +0200
commit2ca4faad9cb336ac8904bbc775fdcc2a12731b90 (patch)
tree76f26d0503c5f86e6240e3d84fa4e793cc4c44ed /src
parentc7dc6bfd0d73f803914092593d440d8b27e2c851 (diff)
downloadhomer-2ca4faad9cb336ac8904bbc775fdcc2a12731b90.tar.gz
homer-2ca4faad9cb336ac8904bbc775fdcc2a12731b90.tar.zst
homer-2ca4faad9cb336ac8904bbc775fdcc2a12731b90.zip
Extendable base service for easier development.
Diffstat (limited to 'src')
-rw-r--r--src/components/Service.vue5
-rw-r--r--src/components/services/AdGuardHome.vue60
-rw-r--r--src/components/services/Generic.vue33
-rw-r--r--src/components/services/Ping.vue49
4 files changed, 55 insertions, 92 deletions
diff --git a/src/components/Service.vue b/src/components/Service.vue
index 8686759..39a9ac4 100644
--- a/src/components/Service.vue
+++ b/src/components/Service.vue
@@ -7,16 +7,13 @@ import Generic from "./services/Generic.vue";
7 7
8export default { 8export default {
9 name: "Service", 9 name: "Service",
10 components: {
11 Generic,
12 },
13 props: { 10 props: {
14 item: Object, 11 item: Object,
15 }, 12 },
16 computed: { 13 computed: {
17 component() { 14 component() {
18 const type = this.item.type || "Generic"; 15 const type = this.item.type || "Generic";
19 if (type == "Generic") { 16 if (type === "Generic") {
20 return Generic; 17 return Generic;
21 } 18 }
22 return () => import(`./services/${type}.vue`); 19 return () => import(`./services/${type}.vue`);
diff --git a/src/components/services/AdGuardHome.vue b/src/components/services/AdGuardHome.vue
index 61d4bed..16881fa 100644
--- a/src/components/services/AdGuardHome.vue
+++ b/src/components/services/AdGuardHome.vue
@@ -1,49 +1,35 @@
1<template> 1<template>
2 <div> 2 <Generic :item="item">
3 <div class="card" :class="item.class"> 3 <template #content>
4 <a :href="item.url" :target="item.target" rel="noreferrer"> 4 <p class="title is-4">{{ item.name }}</p>
5 <div class="card-content"> 5 <p class="subtitle is-6">
6 <div class="media"> 6 <template v-if="item.subtitle">
7 <div v-if="item.logo" class="media-left"> 7 {{ item.subtitle }}
8 <figure class="image is-48x48"> 8 </template>
9 <img :src="item.logo" :alt="`${item.name} logo`" /> 9 <template v-else-if="stats">
10 </figure> 10 {{ percentage }}&percnt; blocked
11 </div> 11 </template>
12 <div v-if="item.icon" class="media-left"> 12 </p>
13 <figure class="image is-48x48"> 13 </template>
14 <i style="font-size: 35px" :class="['fa-fw', item.icon]"></i> 14 <template #indicator>
15 </figure> 15 <div class="status" :class="protection">
16 </div> 16 {{ protection }}
17 <div class="media-content"> 17 </div>
18 <p class="title is-4">{{ item.name }}</p> 18 </template>
19 <p class="subtitle is-6"> 19 </Generic>
20 <template v-if="item.subtitle">
21 {{ item.subtitle }}
22 </template>
23 <template v-else-if="stats">
24 {{ percentage }}&percnt; blocked
25 </template>
26 </p>
27 </div>
28 <div class="status" :class="protection">
29 {{ protection }}
30 </div>
31 </div>
32 <div class="tag" :class="item.tagstyle" v-if="item.tag">
33 <strong class="tag-text">#{{ item.tag }}</strong>
34 </div>
35 </div>
36 </a>
37 </div>
38 </div>
39</template> 20</template>
40 21
41<script> 22<script>
23import Generic from "./Generic.vue";
24
42export default { 25export default {
43 name: "AdGuardHome", 26 name: "AdGuardHome",
44 props: { 27 props: {
45 item: Object, 28 item: Object,
46 }, 29 },
30 components: {
31 Generic,
32 },
47 data: () => { 33 data: () => {
48 return { 34 return {
49 status: null, 35 status: null,
diff --git a/src/components/services/Generic.vue b/src/components/services/Generic.vue
index 08bd3f6..af65a8c 100644
--- a/src/components/services/Generic.vue
+++ b/src/components/services/Generic.vue
@@ -8,22 +8,27 @@
8 <a :href="item.url" :target="item.target" rel="noreferrer"> 8 <a :href="item.url" :target="item.target" rel="noreferrer">
9 <div class="card-content"> 9 <div class="card-content">
10 <div :class="mediaClass"> 10 <div :class="mediaClass">
11 <div v-if="item.logo" class="media-left"> 11 <slot name="icon">
12 <figure class="image is-48x48"> 12 <div v-if="item.logo" class="media-left">
13 <img :src="item.logo" :alt="`${item.name} logo`" /> 13 <figure class="image is-48x48">
14 </figure> 14 <img :src="item.logo" :alt="`${item.name} logo`" />
15 </div> 15 </figure>
16 <div v-if="item.icon" class="media-left"> 16 </div>
17 <figure class="image is-48x48"> 17 <div v-if="item.icon" class="media-left">
18 <i style="font-size: 35px" :class="['fa-fw', item.icon]"></i> 18 <figure class="image is-48x48">
19 </figure> 19 <i style="font-size: 35px" :class="['fa-fw', item.icon]"></i>
20 </div> 20 </figure>
21 </div>
22 </slot>
21 <div class="media-content"> 23 <div class="media-content">
22 <p class="title is-4">{{ item.name }}</p> 24 <slot name="content">
23 <p class="subtitle is-6" v-if="item.subtitle"> 25 <p class="title is-4">{{ item.name }}</p>
24 {{ item.subtitle }} 26 <p class="subtitle is-6" v-if="item.subtitle">
25 </p> 27 {{ item.subtitle }}
28 </p>
29 </slot>
26 </div> 30 </div>
31 <slot name="indicator" class="indicator"></slot>
27 </div> 32 </div>
28 <div class="tag" :class="item.tagstyle" v-if="item.tag"> 33 <div class="tag" :class="item.tagstyle" v-if="item.tag">
29 <strong class="tag-text">#{{ item.tag }}</strong> 34 <strong class="tag-text">#{{ item.tag }}</strong>
diff --git a/src/components/services/Ping.vue b/src/components/services/Ping.vue
index e693af4..6fd3ec5 100644
--- a/src/components/services/Ping.vue
+++ b/src/components/services/Ping.vue
@@ -1,46 +1,24 @@
1<template> 1<template>
2 <div> 2 <Generic :item="item">
3 <div class="card" :class="item.class"> 3 <template #indicator>
4 <a :href="item.url" :target="item.target" rel="noreferrer"> 4 <div v-if="status" class="status" :class="status">
5 <div class="card-content"> 5 {{ status }}
6 <div class="media"> 6 </div>
7 <div v-if="item.logo" class="media-left"> 7 </template>
8 <figure class="image is-48x48"> 8 </Generic>
9 <img :src="item.logo" :alt="`${item.name} logo`" />
10 </figure>
11 </div>
12 <div v-if="item.icon" class="media-left">
13 <figure class="image is-48x48">
14 <i style="font-size: 35px" :class="['fa-fw', item.icon]"></i>
15 </figure>
16 </div>
17 <div class="media-content">
18 <p class="title is-4">{{ item.name }}</p>
19 <p class="subtitle is-6">
20 <template v-if="item.subtitle">
21 {{ item.subtitle }}
22 </template>
23 </p>
24 </div>
25 <div v-if="status" class="status" :class="status">
26 {{ status }}
27 </div>
28 </div>
29 <div class="tag" :class="item.tagstyle" v-if="item.tag">
30 <strong class="tag-text">#{{ item.tag }}</strong>
31 </div>
32 </div>
33 </a>
34 </div>
35 </div>
36</template> 9</template>
37 10
38<script> 11<script>
12import Generic from "./Generic.vue";
13
39export default { 14export default {
40 name: "Ping", 15 name: "Ping",
41 props: { 16 props: {
42 item: Object, 17 item: Object,
43 }, 18 },
19 components: {
20 Generic,
21 },
44 data: () => ({ 22 data: () => ({
45 status: null, 23 status: null,
46 }), 24 }),
@@ -70,9 +48,6 @@ export default {
70</script> 48</script>
71 49
72<style scoped lang="scss"> 50<style scoped lang="scss">
73.media-left img {
74 max-height: 100%;
75}
76.status { 51.status {
77 font-size: 0.8rem; 52 font-size: 0.8rem;
78 color: var(--text-title); 53 color: var(--text-title);