aboutsummaryrefslogtreecommitdiff
path: root/src/components/settings
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/settings')
-rw-r--r--src/components/settings/settings.js46
-rw-r--r--src/components/settings/settings.vue30
2 files changed, 75 insertions, 1 deletions
diff --git a/src/components/settings/settings.js b/src/components/settings/settings.js
index 998aa354..8d6a6713 100644
--- a/src/components/settings/settings.js
+++ b/src/components/settings/settings.js
@@ -7,14 +7,58 @@ const settings = {
hideAttachmentsLocal: this.$store.state.config.hideAttachments,
hideAttachmentsInConvLocal: this.$store.state.config.hideAttachmentsInConv,
hideNsfwLocal: this.$store.state.config.hideNsfw,
+ muteWordsString: this.$store.state.config.muteWords.join('\n'),
autoLoadLocal: this.$store.state.config.autoLoad,
hoverPreviewLocal: this.$store.state.config.hoverPreview,
- muteWordsString: this.$store.state.config.muteWords.join('\n')
+ previewfile: null
}
},
components: {
StyleSwitcher
},
+ computed: {
+ user () {
+ return this.$store.state.users.currentUser
+ }
+ },
+ methods: {
+ uploadAvatar ({target}) {
+ const file = target.files[0]
+ // eslint-disable-next-line no-undef
+ const reader = new FileReader()
+ reader.onload = ({target}) => {
+ const img = target.result
+ this.previewfile = img
+ }
+ reader.readAsDataURL(file)
+ },
+ submitAvatar () {
+ if (!this.previewfile) { return }
+
+ const img = this.previewfile
+ // eslint-disable-next-line no-undef
+ let imginfo = new Image()
+ let cropX, cropY, cropW, cropH
+ imginfo.src = this.previewfile
+ if (imginfo.height > imginfo.width) {
+ cropX = 0
+ cropW = imginfo.width
+ cropY = Math.floor((imginfo.height - imginfo.width) / 2)
+ cropH = imginfo.width
+ } else {
+ cropY = 0
+ cropH = imginfo.height
+ cropX = Math.floor((imginfo.width - imginfo.height) / 2)
+ cropW = imginfo.height
+ }
+ this.$store.state.api.backendInteractor.updateAvatar({params: {img, cropX, cropY, cropW, cropH}}).then((user) => {
+ if (!user.error) {
+ this.$store.commit('addNewUsers', [user])
+ this.$store.commit('setCurrentUser', user)
+ }
+ })
+ }
+ },
watch: {
hideAttachmentsLocal (value) {
this.$store.dispatch('setOption', { name: 'hideAttachments', value })
diff --git a/src/components/settings/settings.vue b/src/components/settings/settings.vue
index af0242c4..1abb1789 100644
--- a/src/components/settings/settings.vue
+++ b/src/components/settings/settings.vue
@@ -8,6 +8,18 @@
<h2>Theme</h2>
<style-switcher></style-switcher>
</div>
+ <div class="setting-item" v-if="user">
+ <h2>Avatar</h2>
+ <p>Your current avatar:</p>
+ <img :src="user.profile_image_url_original" class="old-avatar"></img>
+ <p>Set new avatar:</p>
+ <img class="new-avatar" v-bind:src="previewfile" v-if="previewfile">
+ </img>
+ <div>
+ <input name="avatar-upload" id="avatar-upload" type="file" @change="uploadAvatar" ></input>
+ </div>
+ <button class="btn btn-default base05 base01-background" v-if="previewfile" @click="submitAvatar">Submit</button>
+ </div>
<div class="setting-item">
<h2>Filtering</h2>
<p>All notices containing these words will be muted, one per line</p>
@@ -52,6 +64,24 @@
width: 100%;
height: 100px;
}
+
+ .old-avatar {
+ width: 128px;
+ border-radius: 5px;
+ }
+
+ .new-avatar {
+ object-fit: cover;
+ width: 128px;
+ height: 128px;
+ border-radius: 5px;
+ }
+
+ .btn {
+ margin-top: 1em;
+ min-height: 28px;
+ width: 10em;
+ }
}
.setting-list {
list-style-type: none;