forked from mirrors/amputoma-fe
![Ekaterina Vaartis](/assets/img/avatar_default.png)
The locale can now be configured in settings and is stored in Vuex. The changes are applied immidiately after selection. The list of languages is taken from the messages file, which contains all the available locales (and a new value, `interfaceLanguage`, to control the translation of this option in the options menu) Closes #36
148 lines
4.8 KiB
Vue
148 lines
4.8 KiB
Vue
<template>
|
|
<div class="settings panel panel-default">
|
|
<div class="panel-heading">
|
|
{{$t('settings.settings')}}
|
|
</div>
|
|
<div class="panel-body">
|
|
<div class="setting-item">
|
|
<h2>{{$t('settings.theme')}}</h2>
|
|
<style-switcher></style-switcher>
|
|
</div>
|
|
<div class="setting-item">
|
|
<h2>{{$t('settings.filtering')}}</h2>
|
|
<p>{{$t('settings.filtering_explanation')}}</p>
|
|
<textarea id="muteWords" v-model="muteWordsString"></textarea>
|
|
</div>
|
|
<div class="setting-item">
|
|
<h2>{{$t('nav.timeline')}}</h2>
|
|
<ul class="setting-list">
|
|
<li>
|
|
<input type="checkbox" id="collapseMessageWithSubject" v-model="collapseMessageWithSubjectLocal">
|
|
<label for="collapseMessageWithSubject">{{$t('settings.collapse_subject')}}</label>
|
|
</li>
|
|
<li>
|
|
<input type="checkbox" id="streaming" v-model="streamingLocal">
|
|
<label for="streaming">{{$t('settings.streaming')}}</label>
|
|
<ul class="setting-list suboptions" :class="[{disabled: !streamingLocal}]">
|
|
<li>
|
|
<input :disabled="!streamingLocal" type="checkbox" id="pauseOnUnfocused" v-model="pauseOnUnfocusedLocal">
|
|
<label for="pauseOnUnfocused">{{$t('settings.pause_on_unfocused')}}</label>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<input type="checkbox" id="autoload" v-model="autoLoadLocal">
|
|
<label for="autoload">{{$t('settings.autoload')}}</label>
|
|
</li>
|
|
<li>
|
|
<input type="checkbox" id="hoverPreview" v-model="hoverPreviewLocal">
|
|
<label for="hoverPreview">{{$t('settings.reply_link_preview')}}</label>
|
|
</li>
|
|
<li>
|
|
<label for="replyVisibility" class="select">
|
|
<select id="replyVisibility" v-model="replyVisibilityLocal">
|
|
<option value="all" selected>{{$t('settings.reply_visibility_all')}}</option>
|
|
<option value="following">{{$t('settings.reply_visibility_following')}}</option>
|
|
<option value="self">{{$t('settings.reply_visibility_self')}}</option>
|
|
</select>
|
|
<i class="icon-down-open"/>
|
|
</label>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<div class="setting-item">
|
|
<h2>{{$t('settings.attachments')}}</h2>
|
|
<ul class="setting-list">
|
|
<li>
|
|
<input type="checkbox" id="hideAttachments" v-model="hideAttachmentsLocal">
|
|
<label for="hideAttachments">{{$t('settings.hide_attachments_in_tl')}}</label>
|
|
</li>
|
|
<li>
|
|
<input type="checkbox" id="hideAttachmentsInConv" v-model="hideAttachmentsInConvLocal">
|
|
<label for="hideAttachmentsInConv">{{$t('settings.hide_attachments_in_convo')}}</label>
|
|
</li>
|
|
<li>
|
|
<input type="checkbox" id="hideNsfw" v-model="hideNsfwLocal">
|
|
<label for="hideNsfw">{{$t('settings.nsfw_clickthrough')}}</label>
|
|
</li>
|
|
<li>
|
|
<input type="checkbox" id="stopGifs" v-model="stopGifs">
|
|
<label for="stopGifs">{{$t('settings.stop_gifs')}}</label>
|
|
</li>
|
|
<li>
|
|
<input type="checkbox" id="loopVideo" v-model="loopVideoLocal">
|
|
<label for="loopVideo">{{$t('settings.loop_video')}}</label>
|
|
<ul class="setting-list suboptions" :class="[{disabled: !streamingLocal}]">
|
|
<li>
|
|
<input :disabled="!loopVideoLocal || !loopSilentAvailable" type="checkbox" id="loopVideoSilentOnly" v-model="loopVideoSilentOnlyLocal">
|
|
<label for="loopVideoSilentOnly">{{$t('settings.loop_video_silent_only')}}</label>
|
|
<div v-if="!loopSilentAvailable" class="unavailable">
|
|
<i class="icon-globe"/>! {{$t('settings.limited_availability')}}
|
|
</div>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<div class="setting-item">
|
|
<h2>{{ $t('settings.interfaceLanguage') }}</h2>
|
|
<interface-language-switcher />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script src="./settings.js">
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
@import '../../_variables.scss';
|
|
|
|
.setting-item {
|
|
border-bottom: 2px solid var(--btn, $fallback--btn);
|
|
margin: 1em 1em 1.4em;
|
|
padding-bottom: 1.4em;
|
|
|
|
|
|
textarea {
|
|
width: 100%;
|
|
height: 100px;
|
|
}
|
|
|
|
.unavailable,
|
|
.unavailable i {
|
|
color: var(--cRed, $fallback--cRed);
|
|
color: $fallback--cRed;
|
|
}
|
|
|
|
.old-avatar {
|
|
width: 128px;
|
|
border-radius: $fallback--avatarRadius;
|
|
border-radius: var(--avatarRadius, $fallback--avatarRadius);
|
|
}
|
|
|
|
.new-avatar {
|
|
object-fit: cover;
|
|
width: 128px;
|
|
height: 128px;
|
|
border-radius: $fallback--avatarRadius;
|
|
border-radius: var(--avatarRadius, $fallback--avatarRadius);
|
|
}
|
|
|
|
.btn {
|
|
margin-top: 1em;
|
|
min-height: 28px;
|
|
width: 10em;
|
|
}
|
|
}
|
|
.setting-list {
|
|
list-style-type: none;
|
|
padding-left: 2em;
|
|
li {
|
|
margin-bottom: 0.5em;
|
|
}
|
|
.suboptions {
|
|
margin-top: 0.3em
|
|
}
|
|
}
|
|
</style>
|