workadventure/front/src/Components/Menu/SettingsSubMenu.svelte

247 lines
8.5 KiB
Svelte
Raw Normal View History

<script lang="typescript">
2021-12-06 16:12:37 +01:00
import { localUserStore } from "../../Connexion/LocalUserStore";
import { videoConstraintStore } from "../../Stores/MediaStore";
import { HtmlUtils } from "../../WebRtc/HtmlUtils";
import { isMobile } from "../../Enum/EnvironmentVariable";
import { menuVisiblilityStore } from "../../Stores/MenuStore";
import { languages, translator, _ } from "../../Translator/Translator";
2021-12-06 16:12:37 +01:00
let fullscreen: boolean = localUserStore.getFullscreen();
let notification: boolean = localUserStore.getNotification() === "granted";
let forceCowebsiteTrigger: boolean = localUserStore.getForceCowebsiteTrigger();
let ignoreFollowRequests: boolean = localUserStore.getIgnoreFollowRequests();
2021-12-06 16:12:37 +01:00
let valueGame: number = localUserStore.getGameQualityValue();
let valueVideo: number = localUserStore.getVideoQualityValue();
2022-01-07 01:50:47 +01:00
let valueLanguage: string = translator.getStringByLanguage(translator.getCurrentLanguage()) ?? "en-US";
2021-12-06 16:12:37 +01:00
let previewValueGame = valueGame;
let previewValueVideo = valueVideo;
2022-01-07 01:50:47 +01:00
let previewValueLanguage = valueLanguage;
2021-12-06 16:12:37 +01:00
function saveSetting() {
2022-01-07 01:50:47 +01:00
let change = false;
if (valueLanguage !== previewValueLanguage) {
previewValueLanguage = valueLanguage;
translator.switchLanguage(previewValueLanguage);
change = true;
2021-12-06 16:12:37 +01:00
}
if (valueVideo !== previewValueVideo) {
previewValueVideo = valueVideo;
videoConstraintStore.setFrameRate(valueVideo);
}
2022-01-07 01:50:47 +01:00
if (valueGame !== previewValueGame) {
previewValueGame = valueGame;
localUserStore.setGameQualityValue(valueGame);
change = true;
}
if (change) {
window.location.reload();
}
2021-12-06 16:12:37 +01:00
closeMenu();
}
2021-12-06 16:12:37 +01:00
function changeFullscreen() {
const body = HtmlUtils.querySelectorOrFail("body");
if (body) {
if (document.fullscreenElement !== null && !fullscreen) {
2022-01-04 16:48:47 +01:00
document.exitFullscreen().catch((e) => console.error(e));
2021-12-06 16:12:37 +01:00
} else {
2022-01-04 16:48:47 +01:00
body.requestFullscreen().catch((e) => console.error(e));
2021-12-06 16:12:37 +01:00
}
localUserStore.setFullscreen(fullscreen);
}
}
2021-12-06 16:12:37 +01:00
function changeNotification() {
if (Notification.permission === "granted") {
localUserStore.setNotification(notification ? "granted" : "denied");
} else {
2022-01-04 16:48:47 +01:00
Notification.requestPermission()
.then((response) => {
if (response === "granted") {
localUserStore.setNotification(notification ? "granted" : "denied");
} else {
localUserStore.setNotification("denied");
notification = false;
}
})
.catch((e) => console.error(e));
}
}
function changeForceCowebsiteTrigger() {
localUserStore.setForceCowebsiteTrigger(forceCowebsiteTrigger);
}
function changeIgnoreFollowRequests() {
localUserStore.setIgnoreFollowRequests(ignoreFollowRequests);
}
2021-12-06 16:12:37 +01:00
function closeMenu() {
menuVisiblilityStore.set(false);
}
</script>
<div class="settings-main" on:submit|preventDefault={saveSetting}>
<section>
<h3>{_("menu.settings.game-quality.title")}</h3>
<div class="nes-select is-dark">
<select bind:value={valueGame}>
2021-12-19 16:01:51 +01:00
<option value={120}
>{isMobile()
? _("menu.settings.game-quality.short.high")
: _("menu.settings.game-quality.long.high")}</option
2021-12-19 16:01:51 +01:00
>
2021-12-06 16:12:37 +01:00
<option value={60}
2021-12-19 16:01:51 +01:00
>{isMobile()
? _("menu.settings.game-quality.short.medium")
: _("menu.settings.game-quality.long.medium")}</option
2021-12-19 16:01:51 +01:00
>
<option value={40}
>{isMobile()
? _("menu.settings.game-quality.short.minimum")
: _("menu.settings.game-quality.long.minimum")}</option
2021-12-19 16:01:51 +01:00
>
<option value={20}
>{isMobile()
? _("menu.settings.game-quality.short.small")
: _("menu.settings.game-quality.long.small")}</option
2021-12-06 16:12:37 +01:00
>
</select>
</div>
</section>
<section>
<h3>{_("menu.settings.video-quality.title")}</h3>
<div class="nes-select is-dark">
<select bind:value={valueVideo}>
2021-12-19 16:01:51 +01:00
<option value={30}
>{isMobile()
? _("menu.settings.video-quality.short.high")
: _("menu.settings.video-quality.long.high")}</option
2021-12-19 16:01:51 +01:00
>
2021-12-06 16:12:37 +01:00
<option value={20}
2021-12-19 16:01:51 +01:00
>{isMobile()
? _("menu.settings.video-quality.short.medium")
: _("menu.settings.video-quality.long.medium")}</option
2021-12-19 16:01:51 +01:00
>
<option value={10}
>{isMobile()
? _("menu.settings.video-quality.short.minimum")
: _("menu.settings.video-quality.long.minimum")}</option
2021-12-19 16:01:51 +01:00
>
<option value={5}
>{isMobile()
? _("menu.settings.video-quality.short.small")
: _("menu.settings.video-quality.long.small")}</option
2021-12-06 16:12:37 +01:00
>
</select>
</div>
</section>
2022-01-07 01:50:47 +01:00
<section>
<h3>{_("menu.settings.language.title")}</h3>
2022-01-07 01:50:47 +01:00
<div class="nes-select is-dark">
<select class="languages-switcher" bind:value={valueLanguage}>
<!-- svelte-ignore missing-declaration -->
{#each languages as language}
<option value={language.id}>{`${language.language} (${language.country})`}</option>
{/each}
</select>
</div>
</section>
<section class="settings-section-save">
<p>{_("menu.settings.save.warning")}</p>
2021-12-19 16:01:51 +01:00
<button type="button" class="nes-btn is-primary" on:click|preventDefault={saveSetting}
>{_("menu.settings.save.button")}</button
2021-12-19 16:01:51 +01:00
>
</section>
<section class="settings-section-noSaveOption">
<label>
2021-12-06 16:12:37 +01:00
<input
type="checkbox"
class="nes-checkbox is-dark"
bind:checked={fullscreen}
on:change={changeFullscreen}
/>
<span>{_("menu.settings.fullscreen")}</span>
</label>
<label>
2021-12-06 16:12:37 +01:00
<input
type="checkbox"
class="nes-checkbox is-dark"
bind:checked={notification}
on:change={changeNotification}
/>
<span>{_("menu.settings.notifications")}</span>
</label>
<label>
<input
type="checkbox"
class="nes-checkbox is-dark"
bind:checked={forceCowebsiteTrigger}
on:change={changeForceCowebsiteTrigger}
/>
<span>{_("menu.settings.cowebsite-trigger")}</span>
</label>
<label>
<input
type="checkbox"
class="nes-checkbox is-dark"
bind:checked={ignoreFollowRequests}
on:change={changeIgnoreFollowRequests}
/>
<span>{_("menu.settings.ignore-follow-request")}</span>
</label>
</section>
</div>
<style lang="scss">
2021-12-06 16:12:37 +01:00
div.settings-main {
height: calc(100% - 40px);
overflow-y: auto;
2021-12-06 16:12:37 +01:00
section {
width: 100%;
padding: 20px 20px 0;
margin-bottom: 20px;
text-align: center;
2021-12-06 16:12:37 +01:00
div.nes-select select:focus {
outline: none;
}
}
section.settings-section-save {
text-align: center;
p {
margin: 16px 0;
}
}
section.settings-section-noSaveOption {
display: flex;
align-items: center;
flex-wrap: wrap;
2021-12-06 16:12:37 +01:00
label {
flex: 1 1 auto;
text-align: center;
margin: 0 0 15px;
}
}
2022-01-07 01:50:47 +01:00
.languages-switcher option {
text-transform: capitalize;
}
}
2021-12-06 16:12:37 +01:00
@media only screen and (max-width: 800px), only screen and (max-height: 800px) {
div.settings-main {
section {
padding: 0;
}
}
}
2021-12-06 16:12:37 +01:00
</style>