mirror of
https://github.com/Rakantor/personal-portfolio.git
synced 2025-12-17 19:36:32 +01:00
Cleanup code
This commit is contained in:
@@ -3,22 +3,18 @@ import vuetify from 'vite-plugin-vuetify'
|
|||||||
// https://v3.nuxtjs.org/api/configuration/nuxt.config
|
// https://v3.nuxtjs.org/api/configuration/nuxt.config
|
||||||
export default defineNuxtConfig({
|
export default defineNuxtConfig({
|
||||||
ssr: false,
|
ssr: false,
|
||||||
|
|
||||||
css: [
|
css: [
|
||||||
'vuetify/styles',
|
'vuetify/styles',
|
||||||
'~/assets/variables.scss'
|
'~/assets/variables.scss'
|
||||||
],
|
],
|
||||||
|
|
||||||
vite: {
|
vite: {
|
||||||
ssr: {
|
ssr: {
|
||||||
noExternal: ['vuetify'] // add the vuetify vite plugin
|
noExternal: ['vuetify'] // add the vuetify vite plugin
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
build: {
|
build: {
|
||||||
transpile: ['vuetify']
|
transpile: ['vuetify']
|
||||||
},
|
},
|
||||||
|
|
||||||
app: {
|
app: {
|
||||||
head: {
|
head: {
|
||||||
// titleTemplate: '%s | Home',
|
// titleTemplate: '%s | Home',
|
||||||
@@ -40,10 +36,8 @@ export default defineNuxtConfig({
|
|||||||
],
|
],
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins
|
// Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins
|
||||||
plugins: [],
|
plugins: [],
|
||||||
|
|
||||||
// Modules: https://go.nuxtjs.dev/config-modules
|
// Modules: https://go.nuxtjs.dev/config-modules
|
||||||
modules: [
|
modules: [
|
||||||
// https://go.nuxtjs.dev/axios
|
// https://go.nuxtjs.dev/axios
|
||||||
@@ -56,7 +50,6 @@ export default defineNuxtConfig({
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
||||||
i18n: {
|
i18n: {
|
||||||
// { vueI18n: './i18n.config.ts' }
|
// { vueI18n: './i18n.config.ts' }
|
||||||
// TODO: Revert to config file once the bug in 8.0.0-beta.11 has been fixed
|
// TODO: Revert to config file once the bug in 8.0.0-beta.11 has been fixed
|
||||||
|
|||||||
@@ -1,14 +1,13 @@
|
|||||||
<template>
|
<template>
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12">
|
<v-col cols="12">
|
||||||
<span class="text-h5 text-md-h4 text-high-emphasis">{{ $t('bioTitle') }}</span>
|
<span class="text-h5 text-md-h4 text-high-emphasis">
|
||||||
|
{{ $t('bioTitle') }}
|
||||||
|
</span>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col cols="12">
|
<v-col cols="12">
|
||||||
<v-sheet color="transparent" class="text-medium-emphasis">
|
<v-sheet color="transparent" class="text-medium-emphasis">
|
||||||
<i18n-t
|
<i18n-t keypath="bioBody" tag="p">
|
||||||
keypath="bioBody"
|
|
||||||
tag="p"
|
|
||||||
>
|
|
||||||
<template v-slot:mmorpg>
|
<template v-slot:mmorpg>
|
||||||
<NuxtLink :href="mmorpgWikiUrl" target="_blank">MMORPG</NuxtLink>
|
<NuxtLink :href="mmorpgWikiUrl" target="_blank">MMORPG</NuxtLink>
|
||||||
</template>
|
</template>
|
||||||
@@ -43,7 +42,9 @@
|
|||||||
>
|
>
|
||||||
<v-icon :icon="value.icon" :size="getButtonSize(value.level) - 10"></v-icon>
|
<v-icon :icon="value.icon" :size="getButtonSize(value.level) - 10"></v-icon>
|
||||||
</v-btn>
|
</v-btn>
|
||||||
<span class="text-overline text-primary d-flex flex-column ma-0 pa-0">{{ value.title }}</span>
|
<span class="text-overline text-primary d-flex flex-column ma-0 pa-0">
|
||||||
|
{{ value.title }}
|
||||||
|
</span>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
</v-col>
|
</v-col>
|
||||||
@@ -109,6 +110,7 @@ export default {
|
|||||||
// const frameworks = _groupBy(this.frameworks, e => e.level)
|
// const frameworks = _groupBy(this.frameworks, e => e.level)
|
||||||
const tech = _groupBy(this.tech, e => e.level)
|
const tech = _groupBy(this.tech, e => e.level)
|
||||||
const os = _groupBy(this.os, e => e.level)
|
const os = _groupBy(this.os, e => e.level)
|
||||||
|
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
title: 'languagesFrameworks',
|
title: 'languagesFrameworks',
|
||||||
@@ -123,17 +125,18 @@ export default {
|
|||||||
data: Object.keys(os).sort().reverse().map(e => os[e])
|
data: Object.keys(os).sort().reverse().map(e => os[e])
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
|
||||||
skills () {
|
|
||||||
return [...this.languages, ...this.frameworks, ...this.tech, ...this.os]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
getButtonSize (level) {
|
getButtonSize (level) {
|
||||||
|
const large = this.$vuetify.display.smAndDown ? 64 : 96
|
||||||
|
const medium = this.$vuetify.display.smAndDown ? 48 : 64
|
||||||
|
const small = this.$vuetify.display.smAndDown ? 32 : 48
|
||||||
|
|
||||||
switch (level) {
|
switch (level) {
|
||||||
case 1: return this.$vuetify.display.smAndDown ? 32 : 48
|
case 1: return small
|
||||||
case 2: return this.$vuetify.display.smAndDown ? 48 : 64
|
case 2: return medium
|
||||||
default: return this.$vuetify.display.smAndDown ? 64 : 96
|
default: return large
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,9 @@
|
|||||||
<ImageCarousel ref="imageCarousel" />
|
<ImageCarousel ref="imageCarousel" />
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col cols="12">
|
<v-col cols="12">
|
||||||
<span class="text-h5 font-weight-medium">{{ $t('portfolioTitle') }}</span>
|
<span class="text-h5 font-weight-medium">
|
||||||
|
{{ $t('portfolioTitle') }}
|
||||||
|
</span>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col v-for="(project, index) of projects" :key="index" cols="12" lg="4" md="6">
|
<v-col v-for="(project, index) of projects" :key="index" cols="12" lg="4" md="6">
|
||||||
<v-card height="100%" class="d-flex flex-column">
|
<v-card height="100%" class="d-flex flex-column">
|
||||||
@@ -10,7 +12,6 @@
|
|||||||
v-model="carouselIndex[index]"
|
v-model="carouselIndex[index]"
|
||||||
:show-arrows="project.images.length > 1 ? 'hover' : false"
|
:show-arrows="project.images.length > 1 ? 'hover' : false"
|
||||||
:hide-delimiters="project.images.length <= 1"
|
:hide-delimiters="project.images.length <= 1"
|
||||||
hide-delimiter-background
|
|
||||||
height="auto"
|
height="auto"
|
||||||
>
|
>
|
||||||
<v-carousel-item v-for="image of project.images" :key="image"
|
<v-carousel-item v-for="image of project.images" :key="image"
|
||||||
@@ -50,14 +51,14 @@
|
|||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
<v-card-actions class="d-flex flex-row flex-wrap justify-center align-center">
|
<v-card-actions class="d-flex flex-row flex-wrap justify-center align-center">
|
||||||
<img v-for="t of project.tech" :key="tech[t].title"
|
<img v-for="t of project.tech" :key="tech[t].title"
|
||||||
:src="generateBadgen(tech[t].title, tech[t].iconUrl)"
|
:src="generateBadgen(tech[t].title, tech[t].icon)"
|
||||||
:height="20"
|
:height="20"
|
||||||
class="ma-1"
|
class="ma-1"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<!-- colored badges
|
<!-- colored badges
|
||||||
<img v-for="t of project.tech" :key="tech[t].title"
|
<img v-for="t of project.tech" :key="tech[t].title"
|
||||||
:src="`https://badgen.net/badge/icon/${tech[t].title}?icon=${tech[t].iconUrl}${tech[t].color}&label`"
|
:src="`https://badgen.net/badge/icon/${tech[t].title}?icon=${tech[t].icon}${tech[t].color}&label`"
|
||||||
:height="20"
|
:height="20"
|
||||||
class="ma-1"
|
class="ma-1"
|
||||||
/>
|
/>
|
||||||
@@ -69,7 +70,7 @@
|
|||||||
target="_blank"
|
target="_blank"
|
||||||
>
|
>
|
||||||
<img v-for="t of project.tech" :key="tech[t].title"
|
<img v-for="t of project.tech" :key="tech[t].title"
|
||||||
:src="`https://badgen.net/badge/icon/${tech[t].title}?icon=${tech[t].iconUrl}${tech[t].color}&label`"
|
:src="`https://badgen.net/badge/icon/${tech[t].title}?icon=${tech[t].icon}${tech[t].color}&label`"
|
||||||
:height="20"
|
:height="20"
|
||||||
class="ma-1"
|
class="ma-1"
|
||||||
/>
|
/>
|
||||||
@@ -89,13 +90,13 @@ import { siAndroid, siAmazonaws, siMicrosoftazure, siFirebase, siGithub,
|
|||||||
siVuedotjs, siVuetify, siIbmwatson, siWordpress } from 'simple-icons'
|
siVuedotjs, siVuetify, siIbmwatson, siWordpress } from 'simple-icons'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'PortfolioComponent',
|
name: 'PortfolioPage',
|
||||||
data: () => ({
|
data: () => ({
|
||||||
cdn: 'https://d29l6egdxvgg9c.cloudfront.net/',
|
cdn: 'https://d29l6egdxvgg9c.cloudfront.net/',
|
||||||
projects: [
|
projects: [
|
||||||
{
|
{
|
||||||
title: 'Torii SRS (v2-beta)',
|
title: 'Torii SRS (v2-beta)',
|
||||||
subtitle: 'Progressive Web App',
|
subtitle: 'Progressive Web App (SPA)',
|
||||||
description: 'toriiWeb',
|
description: 'toriiWeb',
|
||||||
tech: ['vue2', 'vuetify2', 'mysql', 'php', 'aws', 'azure', 'watson', 'heroku'],
|
tech: ['vue2', 'vuetify2', 'mysql', 'php', 'aws', 'azure', 'watson', 'heroku'],
|
||||||
projectUrl: 'beta.torii-srs.com',
|
projectUrl: 'beta.torii-srs.com',
|
||||||
@@ -107,7 +108,7 @@ export default {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Torii SRS (v1)',
|
title: 'Torii SRS (v1)',
|
||||||
subtitle: 'Cross-platform app',
|
subtitle: 'Cross-Platform App',
|
||||||
description: 'toriiJava',
|
description: 'toriiJava',
|
||||||
tech: ['java', 'libgdx', 'mysql', 'php', 'aws', 'wordpress'],
|
tech: ['java', 'libgdx', 'mysql', 'php', 'aws', 'wordpress'],
|
||||||
projectUrl: 'torii-srs.com',
|
projectUrl: 'torii-srs.com',
|
||||||
@@ -118,7 +119,7 @@ export default {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'IU Quiz App',
|
title: 'IU Quiz App',
|
||||||
subtitle: 'Web App',
|
subtitle: 'Web App (SPA)',
|
||||||
description: 'iuQuizApp',
|
description: 'iuQuizApp',
|
||||||
tech: ['nuxt2', 'vuetify2', 'firebase'],
|
tech: ['nuxt2', 'vuetify2', 'firebase'],
|
||||||
repoUrl: 'github.com/Rakantor/iu-quiz-app',
|
repoUrl: 'github.com/Rakantor/iu-quiz-app',
|
||||||
@@ -127,14 +128,14 @@ export default {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Menacing Blue',
|
title: 'Menacing Blue',
|
||||||
subtitle: 'Cross-platform app',
|
subtitle: 'Cross-Platform App',
|
||||||
description: 'pmb',
|
description: 'pmb',
|
||||||
tech: ['java', 'libgdx'],
|
tech: ['java', 'libgdx'],
|
||||||
images: ['pmb-6.png', 'pmb-1.png', 'pmb-2.png', 'pmb-3.png', 'pmb-4.png', 'pmb-5.png', 'pmb-7.jpg']
|
images: ['pmb-6.png', 'pmb-1.png', 'pmb-2.png', 'pmb-3.png', 'pmb-4.png', 'pmb-5.png', 'pmb-7.jpg']
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Personal Website',
|
title: 'Personal Website',
|
||||||
subtitle: 'Web App',
|
subtitle: 'Web App (SPA)',
|
||||||
description: 'personalWebsite',
|
description: 'personalWebsite',
|
||||||
tech: ['nuxt3', 'vuetify3', 'ghpages'],
|
tech: ['nuxt3', 'vuetify3', 'ghpages'],
|
||||||
repoUrl: 'github.com/Rakantor/personal-portfolio',
|
repoUrl: 'github.com/Rakantor/personal-portfolio',
|
||||||
@@ -144,7 +145,7 @@ export default {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'IU Gamer App',
|
title: 'IU Gamer App',
|
||||||
subtitle: 'Android app',
|
subtitle: 'Android App',
|
||||||
description: 'iuGamerApp',
|
description: 'iuGamerApp',
|
||||||
tech: ['java', 'android', 'firebase'],
|
tech: ['java', 'android', 'firebase'],
|
||||||
repoUrl: 'github.com/Rakantor/iubh-gamer-app',
|
repoUrl: 'github.com/Rakantor/iubh-gamer-app',
|
||||||
@@ -152,105 +153,40 @@ export default {
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
tech: {
|
tech: {
|
||||||
android: {
|
android: { title: 'Android', color: '3DDC84', icon: siAndroid },
|
||||||
title: 'Android',
|
aws: { title: 'AWS', color: '232F3E', icon: siAmazonaws },
|
||||||
color: '3DDC84',
|
azure: { title: 'Azure', color: '0078D4', icon: siMicrosoftazure },
|
||||||
iconUrl: siAndroid,
|
firebase: { title: 'Firebase', color: 'FFCA28', icon: siFirebase },
|
||||||
},
|
ghpages: { title: 'GH Pages', color: '222222', icon: siGithub },
|
||||||
aws: {
|
heroku: { title: 'Heroku', color: '430098', icon: siHeroku },
|
||||||
title: 'AWS',
|
java: { title: 'Java', color: 'FF7800', icon: siCoffeescript },
|
||||||
color: '232F3E',
|
libgdx: { title: 'libGDX', color: '990000', icon: siYoutubegaming },
|
||||||
iconUrl: siAmazonaws,
|
mysql: { title: 'MySQL', color: '4479A1', icon: siMysql },
|
||||||
},
|
nuxt2: { title: 'Nuxt 2', color: '00DC82', icon: siNuxtdotjs },
|
||||||
azure: {
|
nuxt3: { title: 'Nuxt 3', color: '00DC82', icon: siNuxtdotjs },
|
||||||
title: 'Azure',
|
php: { title: 'PHP', color: '777BB4', icon: siPhp },
|
||||||
color: '0078D4',
|
vue2: { title: 'Vue 2', color: '4FC08D', icon: siVuedotjs },
|
||||||
iconUrl: siMicrosoftazure,
|
vuetify2: { title: 'Vuetify 2', color: '1867C0', icon: siVuetify },
|
||||||
},
|
vuetify3: { title: 'Vuetify 3', color: '1867C0', icon: siVuetify },
|
||||||
firebase: {
|
watson: { title: 'Watson', color: 'BE95FF', icon: siIbmwatson },
|
||||||
title: 'Firebase',
|
wordpress: { title: 'WordPress', color: '21759B', icon: siWordpress }
|
||||||
color: 'FFCA28',
|
|
||||||
iconUrl: siFirebase,
|
|
||||||
},
|
|
||||||
ghpages: {
|
|
||||||
title: 'GH Pages',
|
|
||||||
color: '222222',
|
|
||||||
iconUrl: siGithub,
|
|
||||||
},
|
|
||||||
heroku: {
|
|
||||||
title: 'Heroku',
|
|
||||||
color: '430098',
|
|
||||||
iconUrl: siHeroku,
|
|
||||||
},
|
|
||||||
java: {
|
|
||||||
title: 'Java',
|
|
||||||
color: 'FF7800',
|
|
||||||
iconUrl: siCoffeescript,
|
|
||||||
},
|
|
||||||
libgdx: {
|
|
||||||
title: 'libGDX',
|
|
||||||
color: '990000',
|
|
||||||
iconUrl: siYoutubegaming,
|
|
||||||
},
|
|
||||||
mysql: {
|
|
||||||
title: 'MySQL',
|
|
||||||
color: '4479A1',
|
|
||||||
iconUrl: siMysql,
|
|
||||||
},
|
|
||||||
nuxt2: {
|
|
||||||
title: 'Nuxt 2',
|
|
||||||
color: '00DC82',
|
|
||||||
iconUrl: siNuxtdotjs,
|
|
||||||
},
|
|
||||||
nuxt3: {
|
|
||||||
title: 'Nuxt 3',
|
|
||||||
color: '00DC82',
|
|
||||||
iconUrl: siNuxtdotjs,
|
|
||||||
},
|
|
||||||
php: {
|
|
||||||
title: 'PHP',
|
|
||||||
color: '777BB4',
|
|
||||||
iconUrl: siPhp,
|
|
||||||
},
|
|
||||||
vue2: {
|
|
||||||
title: 'Vue 2',
|
|
||||||
color: '4FC08D',
|
|
||||||
iconUrl: siVuedotjs,
|
|
||||||
},
|
|
||||||
vuetify2: {
|
|
||||||
title: 'Vuetify 2',
|
|
||||||
color: '1867C0',
|
|
||||||
iconUrl: siVuetify,
|
|
||||||
},
|
|
||||||
vuetify3: {
|
|
||||||
title: 'Vuetify 3',
|
|
||||||
color: '1867C0',
|
|
||||||
iconUrl: siVuetify,
|
|
||||||
},
|
|
||||||
watson: {
|
|
||||||
title: 'Watson',
|
|
||||||
color: 'BE95FF',
|
|
||||||
iconUrl: siIbmwatson,
|
|
||||||
},
|
|
||||||
wordpress: {
|
|
||||||
title: 'WordPress',
|
|
||||||
color: '21759B',
|
|
||||||
iconUrl: siWordpress,
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
carouselIndex: []
|
carouselIndex: []
|
||||||
}),
|
}),
|
||||||
methods: {
|
methods: {
|
||||||
generateBadgen (label, iconUrl) {
|
/*
|
||||||
// const iconColor = iconUrl.hex
|
* https://github.com/badgen/badgen
|
||||||
|
*/
|
||||||
|
generateBadgen (label, icon) {
|
||||||
|
// const iconColor = icon.hex
|
||||||
const iconColor = 'FFFFFF' // white
|
const iconColor = 'FFFFFF' // white
|
||||||
const iconSvg = iconUrl.svg.replace('<path ', `<path fill="#${iconColor}" `)
|
const iconSvg = icon.svg.replace('<path ', `<path fill="#${iconColor}" `) // Change SVG icon color
|
||||||
const svg = badgen({
|
const svg = badgen({
|
||||||
label: '',
|
label: '',
|
||||||
status: label,
|
status: label,
|
||||||
// color: iconColor,
|
// color: iconColor,
|
||||||
color: this.$vuetify.theme.current.colors.backgroundTertiary.slice(1),
|
color: this.$vuetify.theme.current.colors.backgroundTertiary.slice(1), // Remove leading '#' from hex string
|
||||||
style: 'classic',
|
style: 'classic', // Can be 'classic' or 'flat'
|
||||||
icon: `data:image/svg+xml;utf8,${encodeURIComponent(iconSvg)}`
|
icon: `data:image/svg+xml;utf8,${encodeURIComponent(iconSvg)}`
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user