From 20c4f0dc103174a70a8af905a78c4e2609e896b2 Mon Sep 17 00:00:00 2001 From: Geometrically <18202329+Geometrically@users.noreply.github.com> Date: Sat, 20 Aug 2022 11:08:21 -0700 Subject: [PATCH] Fix plugin URLs, display, redirects (#619) * Fix plugin URLs, display, redirects * Fix user profile + some redirects not working --- components/ui/ProjectCard.vue | 17 ++++++++++--- pages/_type/_id.vue | 40 ++++++++++++++++++++++--------- pages/index.vue | 4 ++-- pages/search.vue | 1 + pages/settings/index.vue | 9 ------- pages/user/_id.vue | 45 ++++++++++++++++++++++++++++++----- plugins/shorthands.js | 17 +++++++++++++ 7 files changed, 102 insertions(+), 31 deletions(-) diff --git a/components/ui/ProjectCard.vue b/components/ui/ProjectCard.vue index a7bd489d..f5fcd673 100644 --- a/components/ui/ProjectCard.vue +++ b/components/ui/ProjectCard.vue @@ -2,7 +2,7 @@
- +

- {{ name }} + {{ name }}

by @@ -29,7 +32,10 @@

it.data) - if (project.project_type !== data.params.type) { - data.error({ - statusCode: 404, - message: 'Project not found', - }) + const projectLoaders = {} + + for (const version of versions) { + for (const loader of version.loaders) { + projectLoaders[loader] = true + } + } + + project.project_type = data.$getProjectTypeForUrl( + project.project_type, + Object.keys(projectLoaders) + ) + + if ( + project.project_type !== data.params.type || + data.params.id !== project.slug + ) { + const route = data.route.fullPath.split('/') + route.splice(0, 3) + + data.redirect( + 301, + `/${project.project_type}/${project.slug}/${route.join('/')}` + ) return } @@ -1122,7 +1138,9 @@ export default { } &.lowercase { - text-transform: none; + &::first-letter { + text-transform: none; + } } } diff --git a/pages/index.vue b/pages/index.vue index 33371be8..c2f2d0a7 100644 --- a/pages/index.vue +++ b/pages/index.vue @@ -46,7 +46,7 @@ autoplay loop muted - src="~/assets/images/search.mp4" + src="https://cdn.modrinth.com/homepage/search.mp4" playsinline />
diff --git a/pages/search.vue b/pages/search.vue index e197b0d0..8d886619 100644 --- a/pages/search.vue +++ b/pages/search.vue @@ -317,6 +317,7 @@ :client-side="result.client_side" :server-side="result.server_side" :categories="result.display_categories" + :search="true" />

No results found for your query!

diff --git a/pages/settings/index.vue b/pages/settings/index.vue index e5d32b34..0b9cc3cc 100644 --- a/pages/settings/index.vue +++ b/pages/settings/index.vue @@ -195,15 +195,6 @@ export default { return this.$formatNumber(sum) }, - sumFollows() { - let sum = 0 - - for (const projects of this.$user.projects) { - sum += projects.followers - } - - return this.$formatNumber(sum) - }, async changeLayout() { await this.$store.dispatch('cosmetics/save', { searchLayout: this.searchLayout, diff --git a/pages/user/_id.vue b/pages/user/_id.vue index e712bff7..b0cc72ad 100644 --- a/pages/user/_id.vue +++ b/pages/user/_id.vue @@ -178,17 +178,50 @@ export default { ]) ).map((it) => it.data) - const githubUrl = ( - await ( - await fetch(`https://api.github.com/user/` + user.github_id) - ).json() - ).html_url + const [gitHubUser, versions] = ( + await Promise.all([ + data.$axios.get(`https://api.github.com/user/` + user.github_id), + data.$axios.get( + `versions?ids=${JSON.stringify( + [].concat.apply( + [], + projects.map((x) => x.versions) + ) + )}` + ), + ]) + ).map((it) => it.data) + + for (const version of versions) { + const projectIndex = projects.findIndex( + (x) => x.id === version.project_id + ) + + if (projects[projectIndex].loaders) { + for (const loader of version.loaders) { + if (!projects[projectIndex].loaders.includes(loader)) { + projects[projectIndex].loaders.push(loader) + } + } + } else { + projects[projectIndex].loaders = version.loaders + } + } + + for (const project of projects) { + project.categories = project.categories.concat(project.loaders) + + project.project_type = data.$getProjectTypeForUrl( + project.project_type, + project.categories + ) + } return { selectedProjectType: 'all', user, projects, - githubUrl, + githubUrl: gitHubUser.html_url, } } catch { data.error({ diff --git a/plugins/shorthands.js b/plugins/shorthands.js index f658b5b7..179226a6 100644 --- a/plugins/shorthands.js +++ b/plugins/shorthands.js @@ -150,6 +150,23 @@ export default (ctx, inject) => { return formatProjectType(type) } }) + inject('getProjectTypeForUrl', (type, categories) => { + if (type === 'mod') { + const isPlugin = categories.some((category) => { + return ctx.store.state.tag.loaderData.allPluginLoaders.includes( + category + ) + }) + + const isMod = categories.some((category) => { + return ctx.store.state.tag.loaderData.modLoaders.includes(category) + }) + + return isPlugin && isMod ? 'mod' : isPlugin ? 'plugin' : 'mod' + } else { + return type + } + }) } export const formatNumber = (number) => {