More reverting

This commit is contained in:
CodexAdrian
2023-05-10 01:13:43 -04:00
parent b9c029125f
commit 49a6b2c83a
4 changed files with 408 additions and 435 deletions

View File

@@ -248,7 +248,7 @@ onBeforeUnmount(() => {
padding-right: 1rem;
}
.initializing-icon-active,
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.3s ease;
}

View File

@@ -51,7 +51,7 @@ onMounted(async () => {
searchStore.instanceContext = null
}
searchStore.searchInput = ''
await handleReset(true)
await handleReset()
loading.value = false
})
@@ -128,227 +128,221 @@ watch(
</script>
<template>
<transition name="fade">
<div class="search-container">
<aside class="filter-panel">
<Instance
v-if="searchStore.instanceContext"
:instance="searchStore.instanceContext"
small
/>
<Button
role="button"
:disabled="
!(
searchStore.facets.length > 0 ||
searchStore.orFacets.length > 0 ||
searchStore.environments.server === true ||
searchStore.environments.client === true ||
searchStore.openSource === true ||
searchStore.activeVersions.length > 0
)
"
@click="handleReset"
><ClearIcon />Clear Filters</Button
>
<div
v-for="categoryList in Array.from(sortedCategories)"
:key="categoryList[0]"
class="categories"
>
<h2>{{ formatCategoryHeader(categoryList[0]) }}</h2>
<div v-for="category in categoryList[1]" :key="category.name">
<SearchFilter
:active-filters="searchStore.facets"
:icon="category.icon"
:display-name="category.name"
:facet-name="`categories:${encodeURIComponent(category.name)}`"
class="filter-checkbox"
@toggle="toggleFacet"
/>
</div>
</div>
<div
v-if="
showLoaders &&
searchStore.projectType !== 'datapack' &&
searchStore.projectType !== 'resourcepack' &&
searchStore.projectType !== 'shader'
"
class="loaders"
>
<h2>Loaders</h2>
<div
v-for="loader in loaders.filter((l) =>
l.supported_project_types?.includes(searchStore.projectType)
)"
:key="loader"
>
<SearchFilter
:active-filters="searchStore.orFacets"
:icon="loader.icon"
:display-name="loader.name"
:facet-name="`categories:${encodeURIComponent(loader.name)}`"
class="filter-checkbox"
@toggle="toggleOrFacet"
/>
</div>
</div>
<div v-if="searchStore.projectType !== 'datapack'" class="environment">
<h2>Environments</h2>
<div class="search-container">
<aside class="filter-panel">
<Instance v-if="searchStore.instanceContext" :instance="searchStore.instanceContext" small />
<Button
role="button"
:disabled="
!(
searchStore.facets.length > 0 ||
searchStore.orFacets.length > 0 ||
searchStore.environments.server === true ||
searchStore.environments.client === true ||
searchStore.openSource === true ||
searchStore.activeVersions.length > 0
)
"
@click="handleReset"
><ClearIcon />Clear Filters</Button
>
<div
v-for="categoryList in Array.from(sortedCategories)"
:key="categoryList[0]"
class="categories"
>
<h2>{{ formatCategoryHeader(categoryList[0]) }}</h2>
<div v-for="category in categoryList[1]" :key="category.name">
<SearchFilter
v-model="searchStore.environments.client"
display-name="Client"
facet-name="client"
:active-filters="searchStore.facets"
:icon="category.icon"
:display-name="category.name"
:facet-name="`categories:${encodeURIComponent(category.name)}`"
class="filter-checkbox"
@click="getSearchResults"
>
<ClientIcon aria-hidden="true" />
</SearchFilter>
<SearchFilter
v-model="searchStore.environments.server"
display-name="Server"
facet-name="server"
class="filter-checkbox"
@click="getSearchResults"
>
<ServerIcon aria-hidden="true" />
</SearchFilter>
</div>
<div v-if="showVersions" class="versions">
<h2>Minecraft versions</h2>
<Checkbox v-model="showSnapshots" class="filter-checkbox">Show snapshots</Checkbox>
<multiselect
v-model="searchStore.activeVersions"
:options="
showSnapshots
? availableGameVersions.map((x) => x.version)
: availableGameVersions
.filter((it) => it.version_type === 'release')
.map((x) => x.version)
"
:multiple="true"
:searchable="true"
:show-no-results="false"
:close-on-select="false"
:clear-search-on-select="false"
:show-labels="false"
placeholder="Choose versions..."
@update:model-value="getSearchResults"
@toggle="toggleFacet"
/>
</div>
<div class="open-source">
<h2>Open source</h2>
<Checkbox
v-model="searchStore.openSource"
class="filter-checkbox"
@click="getSearchResults"
>
Open source
</Checkbox>
</div>
</aside>
<div class="search">
<Card class="project-type-container">
<NavRow
:links="
searchStore.instanceContext
? [
{ label: 'Mods', href: `/browse/mod` },
{ label: 'Datapacks', href: `/browse/datapack` },
{ label: 'Shaders', href: `/browse/shader` },
{ label: 'Resource Packs', href: `/browse/resourcepack` },
]
: [
{ label: 'Modpacks', href: '/browse/modpack' },
{ label: 'Mods', href: '/browse/mod' },
{ label: 'Datapacks', href: '/browse/datapack' },
{ label: 'Shaders', href: '/browse/shader' },
{ label: 'Resource Packs', href: '/browse/resourcepack' },
]
"
/>
</Card>
<Card class="search-panel-container">
<div class="search-panel">
<div class="iconified-input">
<SearchIcon aria-hidden="true" />
<input
v-model="searchStore.searchInput"
type="text"
:placeholder="`Search ${searchStore.projectType}s...`"
@input="getSearchResults"
/>
</div>
<span>Sort by</span>
<DropdownSelect
v-model="searchStore.filter"
name="Sort dropdown"
:options="[
'Relevance',
'Download count',
'Follow count',
'Recently published',
'Recently updated',
]"
class="sort-dropdown"
@change="getSearchResults"
/>
<span>Show per page</span>
<DropdownSelect
v-model="searchStore.limit"
name="Limit dropdown"
:options="[5, 10, 15, 20, 50, 100]"
:default-value="searchStore.limit.toString()"
:model-value="searchStore.limit.toString()"
class="limit-dropdown"
@change="getSearchResults"
/>
</div>
</Card>
<Pagination
:page="searchStore.currentPage"
:count="searchStore.pageCount"
@switch-page="switchPage"
/>
<SplashScreen v-if="loading"/>
<section v-else class="project-list display-mode--list instance-results" role="list">
<ProjectCard
v-for="result in searchStore.searchResults"
:id="`${result?.project_id}/`"
:key="result?.project_id"
class="result-project-item"
:type="result?.project_type"
:name="result?.title"
:description="result?.description"
:icon-url="result?.icon_url"
:downloads="result?.downloads?.toString()"
:follows="result?.follows?.toString()"
:created-at="result?.date_created"
:updated-at="result?.date_modified"
:categories="[
...categories.filter(
(cat) =>
result?.display_categories.includes(cat.name) &&
cat.project_type === searchStore.projectType
),
...loaders.filter(
(loader) =>
result?.display_categories.includes(loader.name) &&
loader.supported_project_types?.includes(searchStore.projectType)
),
]"
:project-type-display="result?.project_type"
project-type-url="project"
:server-side="result?.server_side"
:client-side="result?.client_side"
:show-updated-date="false"
:color="result?.color"
/>
</section>
</div>
<div
v-if="
showLoaders &&
searchStore.projectType !== 'datapack' &&
searchStore.projectType !== 'resourcepack' &&
searchStore.projectType !== 'shader'
"
class="loaders"
>
<h2>Loaders</h2>
<div
v-for="loader in loaders.filter((l) =>
l.supported_project_types?.includes(searchStore.projectType)
)"
:key="loader"
>
<SearchFilter
:active-filters="searchStore.orFacets"
:icon="loader.icon"
:display-name="loader.name"
:facet-name="`categories:${encodeURIComponent(loader.name)}`"
class="filter-checkbox"
@toggle="toggleOrFacet"
/>
</div>
</div>
<div v-if="searchStore.projectType !== 'datapack'" class="environment">
<h2>Environments</h2>
<SearchFilter
v-model="searchStore.environments.client"
display-name="Client"
facet-name="client"
class="filter-checkbox"
@click="getSearchResults"
>
<ClientIcon aria-hidden="true" />
</SearchFilter>
<SearchFilter
v-model="searchStore.environments.server"
display-name="Server"
facet-name="server"
class="filter-checkbox"
@click="getSearchResults"
>
<ServerIcon aria-hidden="true" />
</SearchFilter>
</div>
<div v-if="showVersions" class="versions">
<h2>Minecraft versions</h2>
<Checkbox v-model="showSnapshots" class="filter-checkbox">Show snapshots</Checkbox>
<multiselect
v-model="searchStore.activeVersions"
:options="
showSnapshots
? availableGameVersions.map((x) => x.version)
: availableGameVersions
.filter((it) => it.version_type === 'release')
.map((x) => x.version)
"
:multiple="true"
:searchable="true"
:show-no-results="false"
:close-on-select="false"
:clear-search-on-select="false"
:show-labels="false"
placeholder="Choose versions..."
@update:model-value="getSearchResults"
/>
</div>
<div class="open-source">
<h2>Open source</h2>
<Checkbox
v-model="searchStore.openSource"
class="filter-checkbox"
@click="getSearchResults"
>
Open source
</Checkbox>
</div>
</aside>
<div class="search">
<Card class="project-type-container">
<NavRow
:links="
searchStore.instanceContext
? [
{ label: 'Mods', href: `/browse/mod` },
{ label: 'Datapacks', href: `/browse/datapack` },
{ label: 'Shaders', href: `/browse/shader` },
{ label: 'Resource Packs', href: `/browse/resourcepack` },
]
: [
{ label: 'Modpacks', href: '/browse/modpack' },
{ label: 'Mods', href: '/browse/mod' },
{ label: 'Datapacks', href: '/browse/datapack' },
{ label: 'Shaders', href: '/browse/shader' },
{ label: 'Resource Packs', href: '/browse/resourcepack' },
]
"
/>
</Card>
<Card class="search-panel-container">
<div class="search-panel">
<div class="iconified-input">
<SearchIcon aria-hidden="true" />
<input
v-model="searchStore.searchInput"
type="text"
:placeholder="`Search ${searchStore.projectType}s...`"
@input="getSearchResults"
/>
</div>
<span>Sort by</span>
<DropdownSelect
v-model="searchStore.filter"
name="Sort dropdown"
:options="[
'Relevance',
'Download count',
'Follow count',
'Recently published',
'Recently updated',
]"
class="sort-dropdown"
@change="getSearchResults"
/>
<span>Show per page</span>
<DropdownSelect
v-model="searchStore.limit"
name="Limit dropdown"
:options="[5, 10, 15, 20, 50, 100]"
:default-value="searchStore.limit.toString()"
:model-value="searchStore.limit.toString()"
class="limit-dropdown"
@change="getSearchResults"
/>
</div>
</Card>
<Pagination
:page="searchStore.currentPage"
:count="searchStore.pageCount"
@switch-page="switchPage"
/>
<SplashScreen v-if="loading" />
<section v-else class="project-list display-mode--list instance-results" role="list">
<ProjectCard
v-for="result in searchStore.searchResults"
:id="`${result?.project_id}/`"
:key="result?.project_id"
class="result-project-item"
:type="result?.project_type"
:name="result?.title"
:description="result?.description"
:icon-url="result?.icon_url"
:downloads="result?.downloads?.toString()"
:follows="result?.follows?.toString()"
:created-at="result?.date_created"
:updated-at="result?.date_modified"
:categories="[
...categories.filter(
(cat) =>
result?.display_categories.includes(cat.name) &&
cat.project_type === searchStore.projectType
),
...loaders.filter(
(loader) =>
result?.display_categories.includes(loader.name) &&
loader.supported_project_types?.includes(searchStore.projectType)
),
]"
:project-type-display="result?.project_type"
project-type-url="project"
:server-side="result?.server_side"
:client-side="result?.client_side"
:show-updated-date="false"
:color="result?.color"
/>
</section>
</div>
</transition>
</div>
</template>
<style src="vue-multiselect/dist/vue-multiselect.css"></style>

View File

@@ -125,237 +125,235 @@ const setJavaInstall = (javaInstall) => {
</script>
<template>
<div>
<Modal ref="detectJavaModal" header="Select java version">
<div class="auto-detect-modal">
<div class="table">
<div class="table-row table-head">
<div class="table-cell table-text">Version</div>
<div class="table-cell table-text">Path</div>
<div class="table-cell table-text">Actions</div>
<div>
<Modal ref="detectJavaModal" header="Select java version">
<div class="auto-detect-modal">
<div class="table">
<div class="table-row table-head">
<div class="table-cell table-text">Version</div>
<div class="table-cell table-text">Path</div>
<div class="table-cell table-text">Actions</div>
</div>
<div
v-for="javaInstall in chosenInstallOptions"
:key="javaInstall.path"
class="table-row"
>
<div class="table-cell table-text">
<span>{{ javaInstall.version }}</span>
</div>
<div
v-for="javaInstall in chosenInstallOptions"
:key="javaInstall.path"
class="table-row"
>
<div class="table-cell table-text">
<span>{{ javaInstall.version }}</span>
</div>
<div class="table-cell table-text">
<span>{{ javaInstall.path }}</span>
</div>
<div class="table-cell table-text manage">
<Button
:disabled="
<div class="table-cell table-text">
<span>{{ javaInstall.path }}</span>
</div>
<div class="table-cell table-text manage">
<Button
:disabled="
settings.java_globals.JAVA_17.path === javaInstall.path ||
settings.java_globals.JAVA_8.path === javaInstall.path
"
class="select-btn"
@click="() => setJavaInstall(javaInstall)"
>
<span
v-if="
settings.java_globals.JAVA_17.path === javaInstall.path ||
settings.java_globals.JAVA_8.path === javaInstall.path
"
class="select-btn"
@click="() => setJavaInstall(javaInstall)"
>
<span
v-if="
settings.java_globals.JAVA_17.path === javaInstall.path ||
settings.java_globals.JAVA_8.path === javaInstall.path
"
>
<CheckIcon />Selected
</span>
<span v-else><PlusIcon />Select</span>
</Button>
</div>
</div>
<div v-if="chosenInstallOptions.length === 0" class="table-row entire-row">
<div class="table-cell table-text">No JARS Found!</div>
<CheckIcon />Selected
</span>
<span v-else><PlusIcon />Select</span>
</Button>
</div>
</div>
<div v-if="chosenInstallOptions.length === 0" class="table-row entire-row">
<div class="table-cell table-text">No JARS Found!</div>
</div>
</div>
</Modal>
<Card class="theming">
<h2>Display</h2>
</div>
</Modal>
<Card class="theming">
<h2>Display</h2>
<div class="toggle-setting">
<div class="description">
<h3>Color theme</h3>
<p>Change the global launcher color theme.</p>
</div>
<DropdownSelect
name="Theme dropdown"
:options="themeStore.themeOptions"
:default-value="settings.theme"
:model-value="settings.theme"
class="theme-dropdown"
@change="handleTheme"
/>
</div>
<div class="toggle-setting">
<div class="description">
<h3>Collapsed navigation mode</h3>
<p>Change the style of the side navigation bar</p>
</div>
<Toggle
:model-value="themeStore.collapsedNavigation"
:checked="themeStore.collapsedNavigation"
@update:model-value="(value) => handleCollapse(value)"
/>
</div>
</Card>
<Card class="settings-card">
<h2 class="settings-title">Java</h2>
<div class="settings-group">
<h3>Java 17 Location</h3>
<div class="toggle-setting">
<div class="description">
<h3>Color theme</h3>
<p>Change the global launcher color theme.</p>
</div>
<DropdownSelect
name="Theme dropdown"
:options="themeStore.themeOptions"
:default-value="settings.theme"
:model-value="settings.theme"
class="theme-dropdown"
@change="handleTheme"
/>
</div>
<div class="toggle-setting">
<div class="description">
<h3>Collapsed navigation mode</h3>
<p>Change the style of the side navigation bar</p>
</div>
<Toggle
:model-value="themeStore.collapsedNavigation"
:checked="themeStore.collapsedNavigation"
@update:model-value="(value) => handleCollapse(value)"
/>
</div>
</Card>
<Card class="settings-card">
<h2 class="settings-title">Java</h2>
<div class="settings-group">
<h3>Java 17 Location</h3>
<div class="toggle-setting">
<input
v-model="settings.java_globals.JAVA_17.path"
type="text"
class="input installation-input"
placeholder="/path/to/java17"
/>
<span class="installation-buttons">
<Button @click="() => loadJavaModal(17)">
<SearchIcon />
Auto Detect
</Button>
<Button @click="handleJava17FileInput">
<BrowseIcon />
Browse
</Button>
<Button @click="handleJava17Test">
<PlayIcon />
Test
</Button>
<AnimatedLogo v-if="testingJava17 === true" class="testing-loader" />
<CheckIcon
v-else-if="java17Success === true && testingJava17 === false"
class="test-success"
/>
<XIcon
v-else-if="java17Success === false && testingJava17 === false"
class="test-fail"
/>
</span>
</div>
</div>
<div class="settings-group">
<h3>Java 8 Location</h3>
<div class="toggle-setting">
<input
v-model="settings.java_globals.JAVA_8.path"
type="text"
class="input installation-input"
placeholder="/path/to/java8"
/>
<span class="installation-buttons">
<Button @click="() => loadJavaModal(8)">
<SearchIcon />
Auto Detect
</Button>
<Button @click="handleJava8FileInput">
<BrowseIcon />
Browse
</Button>
<Button @click="handleJava8Test">
<PlayIcon />
Test
</Button>
<AnimatedLogo v-if="testingJava8 === true" class="testing-loader" />
<CheckIcon
v-else-if="java8Success === true && testingJava8 === false"
class="test-success"
/>
<XIcon
v-else-if="java8Success === false && testingJava8 === false"
class="test-fail"
/>
</span>
</div>
</div>
<hr class="card-divider" />
<div class="settings-group">
<h3>Java Arguments</h3>
<input
v-model="settings.custom_java_args"
v-model="settings.java_globals.JAVA_17.path"
type="text"
class="input installation-input"
placeholder="Enter java arguments..."
placeholder="/path/to/java17"
/>
<span class="installation-buttons">
<Button @click="() => loadJavaModal(17)">
<SearchIcon />
Auto Detect
</Button>
<Button @click="handleJava17FileInput">
<BrowseIcon />
Browse
</Button>
<Button @click="handleJava17Test">
<PlayIcon />
Test
</Button>
<AnimatedLogo v-if="testingJava17 === true" class="testing-loader" />
<CheckIcon
v-else-if="java17Success === true && testingJava17 === false"
class="test-success"
/>
<XIcon
v-else-if="java17Success === false && testingJava17 === false"
class="test-fail"
/>
</span>
</div>
<div class="settings-group">
<h3>Environment Arguments</h3>
</div>
<div class="settings-group">
<h3>Java 8 Location</h3>
<div class="toggle-setting">
<input
v-model="settings.custom_env_args"
v-model="settings.java_globals.JAVA_8.path"
type="text"
class="input installation-input"
placeholder="Enter environment arguments..."
placeholder="/path/to/java8"
/>
<span class="installation-buttons">
<Button @click="() => loadJavaModal(8)">
<SearchIcon />
Auto Detect
</Button>
<Button @click="handleJava8FileInput">
<BrowseIcon />
Browse
</Button>
<Button @click="handleJava8Test">
<PlayIcon />
Test
</Button>
<AnimatedLogo v-if="testingJava8 === true" class="testing-loader" />
<CheckIcon
v-else-if="java8Success === true && testingJava8 === false"
class="test-success"
/>
<XIcon v-else-if="java8Success === false && testingJava8 === false" class="test-fail" />
</span>
</div>
<hr class="card-divider" />
</div>
<hr class="card-divider" />
<div class="settings-group">
<h3>Java Arguments</h3>
<input
v-model="settings.custom_java_args"
type="text"
class="input installation-input"
placeholder="Enter java arguments..."
/>
</div>
<div class="settings-group">
<h3>Environment Arguments</h3>
<input
v-model="settings.custom_env_args"
type="text"
class="input installation-input"
placeholder="Enter environment arguments..."
/>
</div>
<hr class="card-divider" />
<div class="settings-group">
<div class="sliders">
<span class="slider">
Minimum Memory
<Slider v-model="settings.memory.minimum" :min="1000" :max="8200" :step="10" />
</span>
<span class="slider">
Maximum Memory
<Slider v-model="settings.memory.maximum" :min="1000" :max="8200" :step="10" />
</span>
</div>
</div>
</Card>
<Card class="settings-card">
<h2 class="settings-title">Window Size</h2>
<div class="settings-group">
<div class="settings-group">
<div class="sliders">
<span class="slider">
Minimum Memory
<Slider v-model="settings.memory.minimum" :min="1000" :max="8200" :step="10" />
Width
<Slider v-model="settings.game_resolution[0]" :min="400" :max="2562" :step="2" />
</span>
<span class="slider">
Maximum Memory
<Slider v-model="settings.memory.maximum" :min="1000" :max="8200" :step="10" />
Height
<Slider v-model="settings.game_resolution[1]" :min="400" :max="2562" :step="2" />
</span>
</div>
</div>
</Card>
<Card class="settings-card">
<h2 class="settings-title">Window Size</h2>
<div class="settings-group">
<div class="settings-group">
<div class="sliders">
<span class="slider">
Width
<Slider v-model="settings.game_resolution[0]" :min="400" :max="2562" :step="2" />
</span>
<span class="slider">
Height
<Slider v-model="settings.game_resolution[1]" :min="400" :max="2562" :step="2" />
</span>
</div>
</div>
</div>
</Card>
<Card class="settings-card">
<h2 class="settings-title">Launcher Settings</h2>
<div class="settings-group">
<h3>Resource Management</h3>
<div class="toggle-setting">
<span>Maximum Concurrent Downloads</span>
<Slider
v-model="settings.max_concurrent_downloads"
class="concurrent-downloads"
:min="1"
:max="100"
:step="1"
/>
</div>
</Card>
<Card class="settings-card">
<h2 class="settings-title">Launcher Settings</h2>
<div class="settings-group">
<h3>Resource Management</h3>
<div class="toggle-setting">
<span>Maximum Concurrent Downloads</span>
<Slider
v-model="settings.max_concurrent_downloads"
class="concurrent-downloads"
:min="1"
:max="100"
:step="1"
/>
</div>
</div>
</Card>
<Card class="settings-card">
<h2 class="settings-title">Commands</h2>
<div class="settings-group">
<div class="toggle-setting">
Pre Launch
<input v-model="settings.hooks.pre_launch" type="text" class="input" />
</div>
</Card>
<Card class="settings-card">
<h2 class="settings-title">Commands</h2>
<div class="settings-group">
<div class="toggle-setting">
Pre Launch
<input v-model="settings.hooks.pre_launch" type="text" class="input" />
</div>
<div class="toggle-setting">
Wrapper
<input v-model="settings.hooks.wrapper" type="text" class="input" />
</div>
<div class="toggle-setting">
Post Launch
<input v-model="settings.hooks.post_exit" type="text" class="input" />
</div>
<div class="toggle-setting">
Wrapper
<input v-model="settings.hooks.wrapper" type="text" class="input" />
</div>
</Card>
</div>
<div class="toggle-setting">
Post Launch
<input v-model="settings.hooks.post_exit" type="text" class="input" />
</div>
</div>
</Card>
</div>
</template>
<style lang="scss">
.concurrent-downloads {
width: 80% !important;

View File

@@ -356,23 +356,4 @@ Button {
height: 1px;
margin: var(--gap-xl) 0;
}
.loading-icon {
width: 1.5rem;
height: 1.5rem;
animation: spin 1s linear infinite;
color: var(--color-base);
:deep(svg) {
color: var(--color-base);
fill: var(--color-base);
left: 2rem;
width: 1.5rem;
height: 1.5rem;
}
:deep(path) {
fill: var(--color-base) !important;
}
}
</style>