-
-
- {{ name }}
-
-
-
-
+
-
-
- Universal {{ projectTypeDisplay }}
-
-
-
- Client {{ projectTypeDisplay }}
-
-
-
- Server {{ projectTypeDisplay }}
-
-
-
- A {{ projectTypeDisplay }}
-
-
- {{ description }} -
-+ {{ description }} +
+- {{ $formatNumber(downloads) }} downloads{{ $formatNumber(downloads) }} + downloads
- {{ $formatNumber(follows) }} followers{{ $formatNumber(follows) }} + followers
Frog
+You've been frogged! 🐸
+
+ Minecraft versions
@@ -303,6 +303,28 @@ @input="onSearchChange(currentPage)" />Loading...
-No results found for your query!
@@ -354,18 +388,21 @@ @@ -892,6 +941,7 @@ export default { flex-direction: row; gap: var(--spacing-card-md); flex-wrap: wrap; + align-items: center; .labeled-control { flex: 1; diff --git a/pages/settings/follows.vue b/pages/settings/follows.vue index 61f7a44b..ca6fbd16 100644 --- a/pages/settings/follows.vue +++ b/pages/settings/follows.vue @@ -1,5 +1,5 @@ -Project list display mode
+Feature flags
@@ -239,13 +260,15 @@ import ReportIcon from '~/assets/images/utils/report.svg?inline' import SunriseIcon from '~/assets/images/utils/sunrise.svg?inline' import DownloadIcon from '~/assets/images/utils/download.svg?inline' import SettingsIcon from '~/assets/images/utils/settings.svg?inline' -import PlusIcon from '~/assets/images/utils/plus.svg?inline' import UpToDate from '~/assets/images/illustrations/up_to_date.svg?inline' import UserIcon from '~/assets/images/utils/user.svg?inline' import EditIcon from '~/assets/images/utils/edit.svg?inline' import HeartIcon from '~/assets/images/utils/heart.svg?inline' import CrossIcon from '~/assets/images/utils/x.svg?inline' import SaveIcon from '~/assets/images/utils/save.svg?inline' +import GridIcon from '~/assets/images/utils/grid.svg?inline' +import ListIcon from '~/assets/images/utils/list.svg?inline' +import ImageIcon from '~/assets/images/utils/image.svg?inline' import FileInput from '~/components/ui/FileInput' import ModalReport from '~/components/ui/ModalReport' import ModalCreation from '~/components/ui/ModalCreation' @@ -269,7 +292,6 @@ export default { ReportIcon, Badge, SettingsIcon, - PlusIcon, UpToDate, UserIcon, EditIcon, @@ -277,6 +299,9 @@ export default { HeartIcon, CrossIcon, SaveIcon, + GridIcon, + ListIcon, + ImageIcon, }, async asyncData(data) { try { @@ -486,6 +511,15 @@ export default { } this.$nuxt.$loading.finish() }, + async cycleSearchDisplayMode() { + const value = this.$cosmetics.searchDisplayMode.user + const newValue = this.$cycleValue(value, this.$tag.projectViewModes) + await this.$store.dispatch('cosmetics/saveSearchDisplayMode', { + projectType: 'user', + mode: newValue, + $cookies: this.$cookies, + }) + }, }, } @@ -533,6 +567,7 @@ export default { justify-content: space-between; flex-wrap: wrap; row-gap: 0.5rem; + padding-right: var(--spacing-card-bg); } .sidebar { diff --git a/plugins/shorthands.js b/plugins/shorthands.js index f5be1aa4..0ff5164f 100644 --- a/plugins/shorthands.js +++ b/plugins/shorthands.js @@ -175,6 +175,7 @@ export default (ctx, inject) => { return type } }) + inject('cycleValue', cycleValue) } export const formatNumber = (number) => { @@ -333,3 +334,8 @@ export const formatVersions = (versionArray, store) => { return output.join(', ') } + +export const cycleValue = (value, values) => { + const index = values.indexOf(value) + 1 + return values[index % values.length] +} diff --git a/store/cosmetics.js b/store/cosmetics.js index 16815efd..23618da6 100644 --- a/store/cosmetics.js +++ b/store/cosmetics.js @@ -6,14 +6,23 @@ const parameters = { path: '/', } -export const state = () => ({ +export const defaults = { searchLayout: false, projectLayout: false, modpacksAlphaNotice: true, advancedRendering: true, externalLinksNewTab: true, notUsingBlockers: false, -}) + searchDisplayMode: { + mod: 'list', + plugin: 'list', + resourcepack: 'gallery', + modpack: 'list', + user: 'list', + }, +} + +export const state = () => defaults export const mutations = { SET_SEARCH_LAYOUT(state, searchLayout) { @@ -31,6 +40,9 @@ export const mutations = { SET_EXTERNAL_LINKS_NEW_TAB(state, externalLinksNewTab) { state.externalLinksNewTab = externalLinksNewTab }, + SET_SEARCH_DISPLAY_MODE(state, { projectType, mode }) { + state.searchDisplayMode[projectType] = mode + }, SET_NOT_USING_BLOCKERS(state, notUsingBlockers) { state.notUsingBlockers = notUsingBlockers }, @@ -38,11 +50,34 @@ export const mutations = { export const actions = { fetchCosmetics({ commit }, $cookies) { - commit('SET_PROJECT_LAYOUT', $cookies.get('project-layout')) - commit('SET_SEARCH_LAYOUT', $cookies.get('search-layout')) - commit('SET_MODPACKS_ALPHA_NOTICE', $cookies.get('modpacks-alpha-notice')) - commit('SET_ADVANCED_RENDERING', $cookies.get('advanced-rendering')) - commit('SET_EXTERNAL_LINKS_NEW_TAB', $cookies.get('external-links-new-tab')) + commit( + 'SET_PROJECT_LAYOUT', + $cookies.get('project-layout') ?? defaults.projectLayout + ) + commit( + 'SET_SEARCH_LAYOUT', + $cookies.get('search-layout') ?? defaults.searchLayout + ) + commit( + 'SET_MODPACKS_ALPHA_NOTICE', + $cookies.get('modpacks-alpha-notice') ?? defaults.modpacksAlphaNotice + ) + commit( + 'SET_ADVANCED_RENDERING', + $cookies.get('advanced-rendering') ?? defaults.advancedRendering + ) + commit( + 'SET_EXTERNAL_LINKS_NEW_TAB', + $cookies.get('external-links-new-tab') ?? defaults.externalLinksNewTab + ) + Object.keys(defaults.searchDisplayMode).forEach((projectType) => { + commit('SET_SEARCH_DISPLAY_MODE', { + projectType, + mode: + $cookies.get('search-display-mode-' + projectType) ?? + defaults.searchDisplayMode[projectType], + }) + }) }, save( { commit }, @@ -67,4 +102,9 @@ export const actions = { $cookies.set('advanced-rendering', advancedRendering, parameters) $cookies.set('external-links-new-tab', externalLinksNewTab, parameters) }, + saveSearchDisplayMode({ commit }, { projectType, mode, $cookies }) { + commit('SET_SEARCH_DISPLAY_MODE', { projectType, mode }) + + $cookies.set('search-display-mode-' + projectType, mode, parameters) + }, } diff --git a/store/tag.js b/store/tag.js index 448d28e8..84584021 100644 --- a/store/tag.js +++ b/store/tag.js @@ -44,4 +44,5 @@ export const state = () => ({ ], modLoaders: ['forge', 'fabric', 'quilt', 'liteloader', 'modloader', 'rift'], }, + projectViewModes: ['list', 'grid', 'gallery'], })