mirror of
https://github.com/an-anime-team/an-anime-game-launcher.git
synced 2024-12-20 17:01:47 +03:00
Added svelte components
- made `SelectionBox` component - made `DXVKSelectionList` component - updated locales files - added locale selection based on `SelectionBox` component
This commit is contained in:
parent
e86058dabe
commit
8937a8eba9
13 changed files with 139 additions and 111 deletions
|
@ -148,14 +148,14 @@ This is our current roadmap goals. You can find older ones [here](ROADMAP.md)
|
||||||
* Voice data update (installation) required
|
* Voice data update (installation) required
|
||||||
* Patch unavailable
|
* Patch unavailable
|
||||||
* Test patch available
|
* Test patch available
|
||||||
* Make Vue components
|
* Make Svelte components
|
||||||
* <s>Checkbox</s>
|
* <s>Checkbox</s>
|
||||||
* <s>Selectbox</s>
|
* <s>Selectbox</s>
|
||||||
* SelectionList
|
* SelectionList
|
||||||
* SelectableCheckbox
|
* SelectableCheckbox
|
||||||
* PropertiesEditor
|
* PropertiesEditor
|
||||||
* Rewrite sass code, provide more flexible theming ability
|
* Rewrite sass code, provide more flexible theming ability
|
||||||
* <s>Add `vue-i18n`</s>
|
* <s>Add `svelte-i18n`</s>
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
|
|
|
@ -3,10 +3,12 @@ settings:
|
||||||
general:
|
general:
|
||||||
title: General
|
title: General
|
||||||
items:
|
items:
|
||||||
test1: Hello 1
|
|
||||||
test2: Hello 2
|
|
||||||
test3: Hello 3
|
|
||||||
|
|
||||||
# Language selection
|
# Language selection
|
||||||
lang:
|
lang:
|
||||||
launcher: Language
|
launcher:
|
||||||
|
title: Launcher
|
||||||
|
items:
|
||||||
|
en-us: English (US)
|
||||||
|
ru-ru: Русский
|
||||||
|
|
||||||
|
dxvks: DXVK
|
|
@ -1,12 +1,14 @@
|
||||||
settings:
|
settings:
|
||||||
# General
|
# Основное
|
||||||
general:
|
general:
|
||||||
title: Основное
|
title: Основное
|
||||||
items:
|
items:
|
||||||
test1: Привет 1
|
# Выбор языка
|
||||||
test2: Привет 2
|
|
||||||
test3: Привет 3
|
|
||||||
|
|
||||||
# Language selection
|
|
||||||
lang:
|
lang:
|
||||||
launcher: Язык
|
launcher:
|
||||||
|
title: Лаунчер
|
||||||
|
items:
|
||||||
|
en-us: English (US)
|
||||||
|
ru-ru: Русский
|
||||||
|
|
||||||
|
dxvks: DXVK
|
|
@ -1,38 +0,0 @@
|
||||||
<template>
|
|
||||||
<div class="checkbox" :class="{'checkbox-active': active}">
|
|
||||||
{{ $t(`settings.${locale.split('.')[0]}.items.${locale.substring(locale.indexOf('.') + 1)}`) }}
|
|
||||||
|
|
||||||
<div class="checkbox-mark" @click="updateSetting">
|
|
||||||
<img src="../assets/svgs/checkmark.svg" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import { defineComponent } from 'vue';
|
|
||||||
import Configs from '../ts/Configs';
|
|
||||||
|
|
||||||
export default defineComponent({
|
|
||||||
props: ['locale', 'prop'],
|
|
||||||
|
|
||||||
data: () => ({
|
|
||||||
active: false
|
|
||||||
}),
|
|
||||||
|
|
||||||
created()
|
|
||||||
{
|
|
||||||
Configs.get(this.prop).then((active) => this.active = active as boolean);
|
|
||||||
},
|
|
||||||
|
|
||||||
methods: {
|
|
||||||
updateSetting()
|
|
||||||
{
|
|
||||||
this.active = !this.active;
|
|
||||||
|
|
||||||
Configs.set(this.prop, this.active);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style src="../sass/components/checkbox.sass" lang="sass"></style>
|
|
|
@ -1,9 +0,0 @@
|
||||||
<script lang="ts">
|
|
||||||
import { defineComponent } from 'vue';
|
|
||||||
|
|
||||||
import SelectionListItem from './bases/SelectionListItem.vue';
|
|
||||||
|
|
||||||
export default defineComponent({
|
|
||||||
mixins: [SelectionListItem]
|
|
||||||
});
|
|
||||||
</script>
|
|
36
src/components/DXVKSelectionList.svelte
Normal file
36
src/components/DXVKSelectionList.svelte
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
<script lang="ts">
|
||||||
|
import { _ } from 'svelte-i18n';
|
||||||
|
|
||||||
|
import DXVK from '../ts/core/DXVK';
|
||||||
|
|
||||||
|
import type {
|
||||||
|
DXVK as TDXVK
|
||||||
|
} from '../ts/types/DXVK';
|
||||||
|
|
||||||
|
let dxvks: TDXVK[] = [];
|
||||||
|
|
||||||
|
DXVK.list().then((list) => dxvks = list);
|
||||||
|
|
||||||
|
import Delete from '../assets/images/delete.png';
|
||||||
|
import Download from '../assets/images/download.png';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<h2>{ $_('settings.general.items.dxvks') }</h2>
|
||||||
|
|
||||||
|
<div class="list">
|
||||||
|
{#each dxvks as dxvk}
|
||||||
|
<div class="list-item">
|
||||||
|
{ dxvk.version }
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<span></span>
|
||||||
|
|
||||||
|
<!-- svelte-ignore a11y-missing-attribute -->
|
||||||
|
<img class="item-delete" src={Delete}>
|
||||||
|
|
||||||
|
<!-- svelte-ignore a11y-missing-attribute -->
|
||||||
|
<img class="item-download" src={Download}>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{/each}
|
||||||
|
</div>
|
|
@ -1,10 +0,0 @@
|
||||||
<script lang="ts">
|
|
||||||
import { defineComponent } from 'vue';
|
|
||||||
import Configs from '../ts/Configs';
|
|
||||||
|
|
||||||
import SelectionList from './bases/SelectionList.vue';
|
|
||||||
|
|
||||||
export default defineComponent({
|
|
||||||
mixins: [SelectionList]
|
|
||||||
});
|
|
||||||
</script>
|
|
66
src/components/SelectionBox.svelte
Normal file
66
src/components/SelectionBox.svelte
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
<script lang="ts">
|
||||||
|
import { _ } from 'svelte-i18n';
|
||||||
|
|
||||||
|
import Configs from '../ts/Configs';
|
||||||
|
|
||||||
|
export let prop: string = '';
|
||||||
|
export let lang: string = '';
|
||||||
|
export let items: ArrayLike<string> = [];
|
||||||
|
export let valueChanged: (value: string) => void = () => {};
|
||||||
|
|
||||||
|
import Arrow from '../assets/svgs/arrow.svg';
|
||||||
|
|
||||||
|
let selectionOpen = false;
|
||||||
|
let selectedValue;
|
||||||
|
|
||||||
|
const selectionChanged = (e: MouseEvent) => {
|
||||||
|
const li = e.target as HTMLElement;
|
||||||
|
|
||||||
|
if (!li.classList.contains('selected'))
|
||||||
|
{
|
||||||
|
const lis = li.parentElement!.children!;
|
||||||
|
|
||||||
|
for (let i = 0; i < lis.length; i++)
|
||||||
|
lis[i].classList.remove('selected');
|
||||||
|
|
||||||
|
li.classList.add('selected');
|
||||||
|
|
||||||
|
Configs.set(prop, li.getAttribute('data-value'));
|
||||||
|
|
||||||
|
selectionOpen = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Configs.get(prop).then((value) => selectedValue = value);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="select" class:select-active={selectionOpen}>
|
||||||
|
<span>{ $_(lang) }</span>
|
||||||
|
|
||||||
|
<div class="select-options">
|
||||||
|
<ul>
|
||||||
|
{#each Object.keys(items) as itemLang}
|
||||||
|
<li
|
||||||
|
data-value={itemLang}
|
||||||
|
|
||||||
|
on:click={selectionChanged}
|
||||||
|
|
||||||
|
on:click={() => {
|
||||||
|
selectedValue = itemLang;
|
||||||
|
|
||||||
|
valueChanged(selectedValue);
|
||||||
|
}}
|
||||||
|
|
||||||
|
class:selected={itemLang === selectedValue}
|
||||||
|
>{ $_(items[itemLang]) }</li>
|
||||||
|
{/each}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="selected-item" on:click={() => selectionOpen = !selectionOpen}>
|
||||||
|
<span>{ $_(items[selectedValue]) }</span>
|
||||||
|
|
||||||
|
<!-- svelte-ignore a11y-missing-attribute -->
|
||||||
|
<img src={Arrow} />
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -1,13 +0,0 @@
|
||||||
<template>
|
|
||||||
<div class="list">
|
|
||||||
<slot></slot>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import { defineComponent } from 'vue';
|
|
||||||
|
|
||||||
export default defineComponent({});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style src="../../sass/components/selectionList.sass" lang="sass"></style>
|
|
|
@ -1,19 +0,0 @@
|
||||||
<template>
|
|
||||||
<div class="list-item">
|
|
||||||
{{ title }}
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<span></span>
|
|
||||||
<img class="item-delete" src="../../assets/images/delete.png">
|
|
||||||
<img class="item-download" src="../../assets/images/download.png">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import { defineComponent } from 'vue';
|
|
||||||
|
|
||||||
export default defineComponent({
|
|
||||||
props: ['title']
|
|
||||||
});
|
|
||||||
</script>
|
|
|
@ -1,6 +1,8 @@
|
||||||
@use "sass:map"
|
@use "sass:map"
|
||||||
|
|
||||||
@import "components/checkbox"
|
@import "components/checkbox"
|
||||||
|
@import "components/selectionBox"
|
||||||
|
@import "components/selectionList"
|
||||||
|
|
||||||
@mixin themable($theme-name, $theme-map)
|
@mixin themable($theme-name, $theme-map)
|
||||||
body[data-theme=#{$theme-name}]
|
body[data-theme=#{$theme-name}]
|
||||||
|
|
|
@ -3,6 +3,16 @@
|
||||||
import { _, locale, locales } from 'svelte-i18n';
|
import { _, locale, locales } from 'svelte-i18n';
|
||||||
|
|
||||||
import Checkbox from './components/Checkbox.svelte';
|
import Checkbox from './components/Checkbox.svelte';
|
||||||
|
import SelectionBox from './components/SelectionBox.svelte';
|
||||||
|
import DXVKSelectionList from './components/DXVKSelectionList.svelte';
|
||||||
|
|
||||||
|
let availableLocales: ArrayLike<string> = [];
|
||||||
|
|
||||||
|
$locales.forEach((locale) => {
|
||||||
|
availableLocales[locale] = `settings.general.items.lang.launcher.items.${locale}`;
|
||||||
|
});
|
||||||
|
|
||||||
|
availableLocales = availableLocales;
|
||||||
|
|
||||||
import Window from './ts/neutralino/Window';
|
import Window from './ts/neutralino/Window';
|
||||||
|
|
||||||
|
@ -21,15 +31,14 @@
|
||||||
<div class="settings-item" id="general">
|
<div class="settings-item" id="general">
|
||||||
<h1>{$_('settings.general.title')}</h1>
|
<h1>{$_('settings.general.title')}</h1>
|
||||||
|
|
||||||
<Checkbox lang="settings.general.items.test1" prop="test.1" />
|
<SelectionBox
|
||||||
<Checkbox lang="settings.general.items.test2" prop="test.2" />
|
lang="settings.general.items.lang.launcher.title"
|
||||||
<Checkbox lang="settings.general.items.test3" prop="test.3" />
|
prop="lang.launcher"
|
||||||
|
items={availableLocales}
|
||||||
|
valueChanged={(value) => $locale = value}
|
||||||
|
/>
|
||||||
|
|
||||||
<select bind:value={$locale}>
|
<DXVKSelectionList />
|
||||||
{#each $locales as locale}
|
|
||||||
<option value={locale}>{locale}</option>
|
|
||||||
{/each}
|
|
||||||
</select>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
Loading…
Reference in a new issue