website/src/views/Projects.vue

507 lines
14 KiB
Vue
Raw Normal View History

2021-10-23 22:57:48 +11:00
<template>
<div id="projects">
2022-06-30 20:56:10 +10:00
<v-container :fluid="$vuetify.breakpoint.lgAndDown">
<v-card elevation="8" class="troplo-header rounded-xl text-center" v-if="false">
<v-container>
<div v-if="!$vuetify.breakpoint.mobile" class="troplo-header-title">
Troplo
</div>
<div
v-if="$vuetify.breakpoint.mobile"
class="troplo-header-title"
style="background: -webkit-radial-gradient(#0179f3, #0190ea)"
>
T
</div>
</v-container>
</v-card>
2022-02-05 21:17:10 +11:00
<p class="justify-center text-center text-h4">My Projects</p>
2021-11-01 15:17:50 +11:00
<v-row>
2021-11-06 00:40:51 +11:00
<v-col md="3" v-for="(project, index) in getVisible" :key="index">
2022-02-06 19:16:27 +11:00
<v-card class="rounded-xl troplo-p" elevation="8">
2022-06-30 20:56:10 +10:00
<v-hover v-slot="{ hover }">
<v-img :alt="'Image of ' + project.name" :src="getImage(project.internalName)">
<a :href="getImage(project.internalName)" target="_blank">
<v-fade-transition v-if="hover">
<v-overlay absolute>
<v-icon large>mdi-open-in-new</v-icon>
</v-overlay>
</v-fade-transition>
</a>
</v-img>
</v-hover>
2021-11-01 21:23:57 +11:00
2022-02-05 14:39:37 +11:00
<v-card-title>{{ project.name }}</v-card-title>
2021-11-01 21:23:57 +11:00
<v-card-text>
2022-02-05 21:28:05 +11:00
<span style="white-space: pre-line; overflow-wrap: anywhere">{{
project.description
}}</span>
2021-11-01 21:23:57 +11:00
</v-card-text>
<v-divider class="mx-4"></v-divider>
2022-02-05 14:39:37 +11:00
<v-card-title>Information</v-card-title>
2021-11-01 21:23:57 +11:00
<v-card-text>
2022-02-05 14:39:37 +11:00
<v-chip-group column>
2021-11-01 15:17:50 +11:00
<v-chip
2022-02-05 21:28:05 +11:00
v-for="tag in project.tags"
:key="tag.id"
:href="tag.link"
:color="tag.color"
2022-02-06 18:22:18 +11:00
:disabled="!tag.link"
2022-02-06 19:16:27 +11:00
class="troplo-p"
2022-02-06 18:22:18 +11:00
:text-color="tag.textColor || 'white'"
2022-02-05 21:28:05 +11:00
style="opacity: 1"
2021-11-01 15:17:50 +11:00
>
2022-04-04 22:27:44 +10:00
<v-img
v-if="tag.icon === 'crystal'"
src="../assets/icons/crystal-icon.svg"
width="30"
height="30"
></v-img>
2022-02-06 18:22:18 +11:00
<v-icon v-if="tag.icon !== 'crystal'">{{ tag.icon }}</v-icon>
<template v-if="tag.icon">&nbsp;</template>
2022-02-05 14:39:37 +11:00
{{ tag.name }}
2021-11-01 15:17:50 +11:00
</v-chip>
2021-11-01 21:23:57 +11:00
</v-chip-group>
</v-card-text>
<v-divider v-if="project.links.length" class="mx-4"></v-divider>
2022-02-05 14:39:37 +11:00
<v-card-actions v-if="project.links.length">
2021-11-01 21:23:57 +11:00
<v-btn
2022-02-05 21:28:05 +11:00
v-for="link in project.links"
:key="link.name"
color="blue"
text
:href="link.link"
2021-11-01 21:23:57 +11:00
>
2022-02-05 14:39:37 +11:00
{{ link.name }}
2021-11-01 21:23:57 +11:00
</v-btn>
</v-card-actions>
2021-11-01 15:17:50 +11:00
</v-card>
</v-col>
</v-row>
2021-10-23 22:57:48 +11:00
</v-container>
</div>
</template>
<script>
export default {
2021-11-01 15:17:50 +11:00
name: "Projects",
data() {
return {
projects: [
2022-06-30 20:56:10 +10:00
/* {
2021-11-01 15:17:50 +11:00
id: 1,
name: "Kaverti",
internalName: "kaverti",
tags: [
{
internalName: "inactive",
name: "Discontinued",
color: "error",
icon: "mdi-alert-circle"
},
2021-11-01 21:23:57 +11:00
{
internalName: "vue",
name: "Vue",
icon: "mdi-vuejs",
color: "#42b883",
2021-11-06 00:40:51 +11:00
link: "https://vuejs.org"
2021-11-01 21:23:57 +11:00
},
{
internalName: "express",
name: "Express",
icon: "mdi-nodejs",
2021-11-06 00:40:51 +11:00
link: "https://expressjs.com"
2022-02-05 14:39:37 +11:00
}
2021-11-01 15:17:50 +11:00
],
2022-02-05 14:39:37 +11:00
description:
2022-02-05 21:28:05 +11:00
"A 3D sandbox game, and social avatar platform written in Express and Vue.js.",
2021-11-01 15:17:50 +11:00
visible: true,
2022-02-05 21:17:10 +11:00
links: []
2022-06-30 20:56:10 +10:00
},*/
2021-11-01 15:17:50 +11:00
{
id: 2,
2022-06-30 20:56:10 +10:00
name: "Jet.pics",
2021-11-01 15:17:50 +11:00
internalName: "proj01",
tags: [
{
internalName: "active",
name: "Active",
2021-11-01 21:23:57 +11:00
icon: "mdi-check-circle",
2021-11-01 15:17:50 +11:00
color: "success"
},
2021-11-01 21:23:57 +11:00
{
internalName: "vue",
name: "Vue",
icon: "mdi-vuejs",
color: "#42b883",
2021-11-06 00:40:51 +11:00
link: "https://vuejs.org"
2021-11-01 21:23:57 +11:00
},
2022-07-30 20:10:21 +10:00
{
internalName: "vuetify",
name: "Vuetify",
icon: "mdi-vuetify",
link: "https://vuetify.com",
color: "#2196F3"
},
2021-11-01 21:23:57 +11:00
{
internalName: "express",
name: "Express",
icon: "mdi-nodejs",
2021-11-06 00:40:51 +11:00
link: "https://expressjs.com"
2022-02-05 14:39:37 +11:00
}
2021-11-01 15:17:50 +11:00
],
2022-02-05 14:39:37 +11:00
description:
2022-02-05 21:28:05 +11:00
"An invite only file uploading service written in Express and Vue.js.",
2021-11-01 15:17:50 +11:00
visible: true,
2022-02-05 14:39:37 +11:00
links: [
{
name: "Website",
2022-06-30 20:56:10 +10:00
link: "https://jet.pics"
2022-02-05 14:39:37 +11:00
}
]
2021-11-01 15:17:50 +11:00
},
2022-07-30 20:10:21 +10:00
{
id: 12,
name: "Colubrina",
internalName: "colubrina",
tags: [
{
internalName: "active",
name: "Active",
icon: "mdi-check-circle",
color: "success"
},
{
internalName: "vue",
name: "Vue",
icon: "mdi-vuejs",
color: "#42b883",
link: "https://vuejs.org"
},
{
internalName: "vuetify",
name: "Vuetify",
icon: "mdi-vuetify",
link: "https://vuetify.com",
color: "#2196F3"
},
{
internalName: "express",
name: "Express",
icon: "mdi-nodejs",
link: "https://expressjs.com"
},
],
description:
"Colubrina - a simple open source chat platform written in Vue, Vuetify, NodeJS, and Socket.io.",
visible: true,
links: [
{
name: "Website",
link: "https://colubrina.troplo.com"
},
{
name: "Git Repository",
link: "https://github.com/Troplo/Colubrina"
}
]
},
2022-04-04 22:27:44 +10:00
{
id: 11,
name: "BetterCompass",
internalName: "compass-vue",
tags: [
{
2022-11-19 18:11:25 +11:00
internalName: "inactive",
name: "Discontinued",
color: "error",
icon: "mdi-alert-circle"
2022-04-04 22:27:44 +10:00
},
{
internalName: "vue",
name: "Vue",
icon: "mdi-vuejs",
color: "#42b883",
link: "https://vuejs.org"
},
2022-07-30 20:10:21 +10:00
{
internalName: "vuetify",
name: "Vuetify",
icon: "mdi-vuetify",
link: "https://vuetify.com",
color: "#2196F3"
},
2022-04-04 22:27:44 +10:00
{
internalName: "express",
name: "Express",
icon: "mdi-nodejs",
link: "https://expressjs.com"
}
],
description:
"An open source modern frontend for the JDLF Compass School Manager written in Vue.js.",
visible: true,
links: [
{
name: "Website",
link: "https://compass.troplo.com"
},
{
name: "Git Repository",
2022-11-19 18:11:25 +11:00
link: "https://github.com/ElectricS01/BetterCompass"
2022-04-04 22:27:44 +10:00
}
]
},
2021-11-01 15:17:50 +11:00
{
id: 3,
2022-02-06 18:22:18 +11:00
name: "Mira",
2021-11-01 15:17:50 +11:00
internalName: "mira",
tags: [
{
2022-02-06 23:46:34 +11:00
internalName: "active",
name: "Active",
icon: "mdi-check-circle",
color: "success"
2021-11-01 15:17:50 +11:00
},
2021-11-01 21:23:57 +11:00
{
internalName: "vue",
name: "Vue",
icon: "mdi-vuejs",
color: "#42b883",
2021-11-06 00:40:51 +11:00
link: "https://vuejs.org"
2021-11-01 21:23:57 +11:00
},
{
internalName: "crystal",
2022-02-06 18:22:18 +11:00
color: "white",
textColor: "black",
2021-11-01 21:23:57 +11:00
name: "Crystal",
2022-02-06 18:22:18 +11:00
icon: "crystal",
2021-11-06 00:40:51 +11:00
link: "https://crystal-lang.org"
2022-02-05 14:39:37 +11:00
}
2021-11-01 15:17:50 +11:00
],
description: "EPUB reader written in Crystal and Vue.js.",
visible: true,
2022-02-05 14:39:37 +11:00
links: [
{
name: "Git Repository",
link: "https://github.com/pinnoto/mira"
}
]
2021-11-01 21:23:57 +11:00
},
2022-11-19 18:11:25 +11:00
/*{
2022-02-15 22:33:39 +11:00
id: 10,
name: "Vixlatio",
internalName: "vixlatio",
2021-11-01 21:23:57 +11:00
tags: [
{
2022-02-06 23:46:34 +11:00
internalName: "active",
name: "Active",
icon: "mdi-check-circle",
color: "success"
2021-11-01 21:23:57 +11:00
},
{
internalName: "vue",
name: "Vue",
icon: "mdi-vuejs",
color: "#42b883",
2021-11-06 00:40:51 +11:00
link: "https://vuejs.org"
2021-11-01 21:23:57 +11:00
},
{
2022-02-15 22:33:39 +11:00
internalName: "express",
name: "Express",
2021-11-01 21:23:57 +11:00
icon: "mdi-nodejs",
2022-02-15 22:33:39 +11:00
link: "https://expressjs.com"
2022-02-05 14:39:37 +11:00
}
2021-11-01 21:23:57 +11:00
],
2022-04-04 22:27:44 +10:00
description:
"Developer for Vixlatio, a blazing fast gaming platform that is powered by the creativity of its users.",
2021-11-01 21:23:57 +11:00
visible: true,
2022-02-05 14:39:37 +11:00
links: [
{
name: "Website",
2022-02-15 22:33:39 +11:00
link: "https://vixlatio.com"
2022-02-05 14:39:37 +11:00
}
]
2022-11-19 18:11:25 +11:00
},*/
2021-11-01 21:23:57 +11:00
{
id: 5,
2022-02-06 18:22:18 +11:00
name: "Berri",
2021-11-01 21:23:57 +11:00
internalName: "berri",
tags: [
{
2022-07-30 20:10:21 +10:00
internalName: "development-halted",
name: "Halted",
icon: "mdi-pause-octagon",
color: "warning"
2021-11-01 21:23:57 +11:00
},
{
internalName: "vue",
name: "Vue",
icon: "mdi-vuejs",
color: "#42b883",
2021-11-06 00:40:51 +11:00
link: "https://vuejs.org"
2021-11-01 21:23:57 +11:00
},
{
internalName: "crystal",
2022-02-06 18:22:18 +11:00
color: "white",
2021-11-01 21:23:57 +11:00
name: "Crystal",
2022-02-06 18:22:18 +11:00
textColor: "black",
icon: "crystal",
2021-11-06 00:40:51 +11:00
link: "https://crystal-lang.org"
2022-02-05 14:39:37 +11:00
}
2021-11-01 21:23:57 +11:00
],
2022-02-05 14:39:37 +11:00
description:
2022-02-05 21:28:05 +11:00
"Open source file hosting service which aims to be performant, and modular.\nName not finalized.",
2021-11-01 21:23:57 +11:00
visible: true,
links: {}
},
2022-07-30 20:10:21 +10:00
{
id: 13,
name: "Kansas",
internalName: "kansas",
tags: [
{
internalName: "development-halted",
name: "Halted",
icon: "mdi-pause-octagon",
color: "warning"
},
{
internalName: "vue",
name: "Vue",
icon: "mdi-vuejs",
color: "#42b883",
link: "https://vuejs.org"
},
{
internalName: "vuetify",
name: "Vuetify",
icon: "mdi-vuetify",
link: "https://vuetify.com",
color: "#2196F3"
},
{
internalName: "express",
name: "Express",
icon: "mdi-nodejs",
link: "https://expressjs.com"
}
],
description:
"Open source project tracking software written in Vue.js.",
visible: true,
links: {}
},
2021-11-01 21:23:57 +11:00
{
id: 6,
name: "Flowinity",
internalName: "flowinity",
tags: [
{
2022-02-06 23:46:34 +11:00
internalName: "development-halted",
name: "Halted",
icon: "mdi-pause-octagon",
color: "warning"
2022-04-04 22:27:44 +10:00
}
2021-11-01 21:23:57 +11:00
],
description: "A tech blog.",
visible: true,
links: {}
},
{
id: 7,
2022-02-06 18:22:18 +11:00
name: "Troplo's Website",
2021-11-01 21:23:57 +11:00
internalName: "troplo-website",
tags: [
2022-02-04 23:59:48 +11:00
{
internalName: "active",
name: "Active",
icon: "mdi-check-circle",
color: "success"
},
2021-11-01 21:23:57 +11:00
{
internalName: "vue",
name: "Vue",
icon: "mdi-vuejs",
color: "#42b883",
2021-11-06 00:40:51 +11:00
link: "https://vuejs.org"
2022-07-30 20:10:21 +10:00
},
{
internalName: "vuetify",
name: "Vuetify",
icon: "mdi-vuetify",
link: "https://vuetify.com",
color: "#2196F3"
},
2021-11-01 21:23:57 +11:00
],
2022-02-05 21:28:05 +11:00
description: "The website you are viewing right now.",
2022-02-04 23:59:48 +11:00
visible: true,
2021-11-01 21:23:57 +11:00
links: [
{
name: "Git Repository",
2022-02-05 21:17:10 +11:00
link: "https://github.com/Troplo/website"
2021-11-01 21:23:57 +11:00
},
{
name: "Website",
link: "https://troplo.com"
2022-02-05 14:39:37 +11:00
}
]
2021-11-01 15:17:50 +11:00
},
2022-02-04 23:59:48 +11:00
{
id: 8,
2022-02-06 18:22:18 +11:00
name: "Psittacus",
2022-02-04 23:59:48 +11:00
internalName: "psittacus",
tags: [
{
2022-02-06 23:46:34 +11:00
internalName: "development-halted",
name: "Halted",
icon: "mdi-pause-octagon",
color: "warning"
2022-02-04 23:59:48 +11:00
},
{
internalName: "vue",
name: "Vue",
icon: "mdi-vuejs",
color: "#42b883",
link: "https://vuejs.org"
},
{
internalName: "tauri",
name: "Tauri",
icon: "mdi-infinity",
color: "#24c8db",
link: "https://tauri.studio"
2022-02-05 14:39:37 +11:00
}
2022-02-04 23:59:48 +11:00
],
2022-02-05 14:39:37 +11:00
description: "Code editor. Coming soon.",
2022-02-04 23:59:48 +11:00
visible: true,
links: []
2022-02-15 22:33:39 +11:00
}
2022-02-05 21:28:05 +11:00
]
}
},
computed: {
getVisible() {
return this.projects.filter((i) => i.visible)
}
},
methods: {
getImage(image) {
try {
return require("../assets/images/" + image + ".png")
} catch {
return (
2022-02-06 18:43:11 +11:00
"https://dummyimage.com/3840x2035/151515/ffffff.png&text=" + image
2022-02-05 21:28:05 +11:00
)
}
2021-11-01 21:23:57 +11:00
}
2021-11-01 15:17:50 +11:00
}
2021-10-23 22:57:48 +11:00
}
2022-02-05 14:39:37 +11:00
</script>