summaryrefslogtreecommitdiff
path: root/src/client/pages/settings/profile.vue
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2020-11-25 21:31:34 +0900
committerGitHub <noreply@github.com>2020-11-25 21:31:34 +0900
commit014440850014ee86d766bb07467c2970b17a1fc6 (patch)
treeffb652fe1db3365d430ed72ec2c62aaacfbe21fb /src/client/pages/settings/profile.vue
parentフォントレンダリングを調整 (diff)
downloadmisskey-014440850014ee86d766bb07467c2970b17a1fc6.tar.gz
misskey-014440850014ee86d766bb07467c2970b17a1fc6.tar.bz2
misskey-014440850014ee86d766bb07467c2970b17a1fc6.zip
nanka iroiro (#6853)
* wip * Update maps.ts * wip * wip * wip * wip * Update base.vue * wip * wip * wip * wip * Update link.vue * wip * wip * wip * wip * wip * wip * wip * wip * wip * Update privacy.vue * wip * wip * wip * wip * Update range.vue * wip * wip * wip * wip * Update profile.vue * wip * Update a.vue * Update index.vue * wip * Update sidebar.vue * wip * wip * Update account-info.vue * Update a.vue * wip * wip * Update sounds.vue * wip * wip * wip * wip * wip * wip * wip * wip * Update account-info.vue * Update account-info.vue * wip * wip * wip * Update d-persimmon.json5 * wip
Diffstat (limited to 'src/client/pages/settings/profile.vue')
-rw-r--r--src/client/pages/settings/profile.vue232
1 files changed, 138 insertions, 94 deletions
diff --git a/src/client/pages/settings/profile.vue b/src/client/pages/settings/profile.vue
index 6a523e08cf..4fc4783c49 100644
--- a/src/client/pages/settings/profile.vue
+++ b/src/client/pages/settings/profile.vue
@@ -1,79 +1,67 @@
<template>
-<div class="_section">
- <div class="llvierxe _card">
- <div class="_title"><Fa :icon="faUser"/> {{ $t('profile') }}<small style="display: block; font-weight: normal; opacity: 0.6;">@{{ $store.state.i.username }}@{{ host }}</small></div>
- <div class="_content">
- <div class="header" :style="{ backgroundImage: $store.state.i.bannerUrl ? `url(${ $store.state.i.bannerUrl })` : null }" @click="changeBanner">
- <MkAvatar class="avatar" :user="$store.state.i" :disable-preview="true" :disable-link="true" @click.stop="changeAvatar"/>
- </div>
-
- <MkInput v-model:value="name" :max="30">
- <span>{{ $t('_profile.name') }}</span>
- </MkInput>
+<FormBase class="llvierxe">
+ <div class="header _formItem" :style="{ backgroundImage: $store.state.i.bannerUrl ? `url(${ $store.state.i.bannerUrl })` : null }" @click="changeBanner">
+ <MkAvatar class="avatar" :user="$store.state.i" :disable-preview="true" :disable-link="true" @click.stop="changeAvatar"/>
+ </div>
- <MkTextarea v-model:value="description" :max="500">
- <span>{{ $t('_profile.description') }}</span>
- <template #desc>{{ $t('_profile.youCanIncludeHashtags') }}</template>
- </MkTextarea>
+ <FormInput v-model:value="name" :max="30">
+ <span>{{ $t('_profile.name') }}</span>
+ </FormInput>
- <MkInput v-model:value="location">
- <span>{{ $t('location') }}</span>
- <template #prefix><Fa :icon="faMapMarkerAlt"/></template>
- </MkInput>
+ <FormTextarea v-model:value="description" :max="500">
+ <span>{{ $t('_profile.description') }}</span>
+ <template #desc>{{ $t('_profile.youCanIncludeHashtags') }}</template>
+ </FormTextarea>
- <MkInput v-model:value="birthday" type="date">
- <template #title>{{ $t('birthday') }}</template>
- <template #prefix><Fa :icon="faBirthdayCake"/></template>
- </MkInput>
+ <FormInput v-model:value="location">
+ <span>{{ $t('location') }}</span>
+ <template #prefix><Fa :icon="faMapMarkerAlt"/></template>
+ </FormInput>
- <details class="fields">
- <summary>{{ $t('_profile.metadata') }}</summary>
- <div class="row">
- <MkInput v-model:value="fieldName0">{{ $t('_profile.metadataLabel') }}</MkInput>
- <MkInput v-model:value="fieldValue0">{{ $t('_profile.metadataContent') }}</MkInput>
- </div>
- <div class="row">
- <MkInput v-model:value="fieldName1">{{ $t('_profile.metadataLabel') }}</MkInput>
- <MkInput v-model:value="fieldValue1">{{ $t('_profile.metadataContent') }}</MkInput>
- </div>
- <div class="row">
- <MkInput v-model:value="fieldName2">{{ $t('_profile.metadataLabel') }}</MkInput>
- <MkInput v-model:value="fieldValue2">{{ $t('_profile.metadataContent') }}</MkInput>
- </div>
- <div class="row">
- <MkInput v-model:value="fieldName3">{{ $t('_profile.metadataLabel') }}</MkInput>
- <MkInput v-model:value="fieldValue3">{{ $t('_profile.metadataContent') }}</MkInput>
- </div>
- </details>
+ <FormInput v-model:value="birthday" type="date">
+ <span>{{ $t('birthday') }}</span>
+ <template #prefix><Fa :icon="faBirthdayCake"/></template>
+ </FormInput>
- <MkSwitch v-model:value="isBot">{{ $t('flagAsBot') }}</MkSwitch>
- <MkSwitch v-model:value="isCat">{{ $t('flagAsCat') }}</MkSwitch>
- </div>
- <div class="_footer">
- <MkButton @click="save(true)" primary><Fa :icon="faSave"/> {{ $t('save') }}</MkButton>
- </div>
- </div>
-</div>
+ <FormGroup>
+ <FormButton @click="editMetadata" primary>{{ $t('_profile.metadataEdit') }}</FormButton>
+ <template #caption>{{ $t('_profile.metadataDescription') }}</template>
+ </FormGroup>
+
+ <FormSwitch v-model:value="isCat">{{ $t('flagAsCat') }}<template #desc>{{ $t('flagAsCatDescription') }}</template></FormSwitch>
+
+ <FormSwitch v-model:value="isBot">{{ $t('flagAsBot') }}<template #desc>{{ $t('flagAsBotDescription') }}</template></FormSwitch>
+
+ <FormSwitch v-model:value="alwaysMarkNsfw">{{ $t('alwaysMarkSensitive') }}</FormSwitch>
+
+ <FormButton @click="save(true)" primary><Fa :icon="faSave"/> {{ $t('save') }}</FormButton>
+</FormBase>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import { faUnlockAlt, faCogs, faUser, faMapMarkerAlt, faBirthdayCake } from '@fortawesome/free-solid-svg-icons';
import { faSave } from '@fortawesome/free-regular-svg-icons';
-import MkButton from '@/components/ui/button.vue';
-import MkInput from '@/components/ui/input.vue';
-import MkTextarea from '@/components/ui/textarea.vue';
-import MkSwitch from '@/components/ui/switch.vue';
+import FormButton from '@/components/form/button.vue';
+import FormInput from '@/components/form/input.vue';
+import FormTextarea from '@/components/form/textarea.vue';
+import FormSwitch from '@/components/form/switch.vue';
+import FormTuple from '@/components/form/tuple.vue';
+import FormBase from '@/components/form/base.vue';
+import FormGroup from '@/components/form/group.vue';
import { host } from '@/config';
import { selectFile } from '@/scripts/select-file';
import * as os from '@/os';
export default defineComponent({
components: {
- MkButton,
- MkInput,
- MkTextarea,
- MkSwitch,
+ FormButton,
+ FormInput,
+ FormTextarea,
+ FormSwitch,
+ FormTuple,
+ FormBase,
+ FormGroup,
},
emits: ['info'],
@@ -101,6 +89,7 @@ export default defineComponent({
bannerId: null,
isBot: false,
isCat: false,
+ alwaysMarkNsfw: false,
saving: false,
faSave, faUnlockAlt, faCogs, faUser, faMapMarkerAlt, faBirthdayCake
}
@@ -115,6 +104,7 @@ export default defineComponent({
this.bannerId = this.$store.state.i.bannerId;
this.isBot = this.$store.state.i.isBot;
this.isCat = this.$store.state.i.isCat;
+ this.alwaysMarkNsfw = this.$store.state.i.alwaysMarkNsfw;
this.fieldName0 = this.$store.state.i.fields[0] ? this.$store.state.i.fields[0].name : null;
this.fieldValue0 = this.$store.state.i.fields[0] ? this.$store.state.i.fields[0].value : null;
@@ -147,7 +137,60 @@ export default defineComponent({
});
},
- save(notify) {
+ async editMetadata() {
+ const { canceled, result } = await os.form(this.$t('_profile.metadata'), {
+ fieldName0: {
+ type: 'string',
+ label: this.$t('_profile.metadataLabel') + ' 1',
+ default: this.fieldName0,
+ },
+ fieldValue0: {
+ type: 'string',
+ label: this.$t('_profile.metadataContent') + ' 1',
+ default: this.fieldValue0,
+ },
+ fieldName1: {
+ type: 'string',
+ label: this.$t('_profile.metadataLabel') + ' 2',
+ default: this.fieldName1,
+ },
+ fieldValue1: {
+ type: 'string',
+ label: this.$t('_profile.metadataContent') + ' 2',
+ default: this.fieldValue1,
+ },
+ fieldName2: {
+ type: 'string',
+ label: this.$t('_profile.metadataLabel') + ' 3',
+ default: this.fieldName2,
+ },
+ fieldValue2: {
+ type: 'string',
+ label: this.$t('_profile.metadataContent') + ' 3',
+ default: this.fieldValue2,
+ },
+ fieldName3: {
+ type: 'string',
+ label: this.$t('_profile.metadataLabel') + ' 4',
+ default: this.fieldName3,
+ },
+ fieldValue3: {
+ type: 'string',
+ label: this.$t('_profile.metadataContent') + ' 4',
+ default: this.fieldValue3,
+ },
+ });
+ if (canceled) return;
+
+ this.fieldName0 = result.fieldName0;
+ this.fieldValue0 = result.fieldValue0;
+ this.fieldName1 = result.fieldName1;
+ this.fieldValue1 = result.fieldValue1;
+ this.fieldName2 = result.fieldName2;
+ this.fieldValue2 = result.fieldValue2;
+ this.fieldName3 = result.fieldName3;
+ this.fieldValue3 = result.fieldValue3;
+
const fields = [
{ name: this.fieldName0, value: this.fieldValue0 },
{ name: this.fieldName1, value: this.fieldValue1 },
@@ -155,6 +198,19 @@ export default defineComponent({
{ name: this.fieldName3, value: this.fieldValue3 },
];
+ os.api('i/update', {
+ fields,
+ }).then(i => {
+ os.success();
+ }).catch(err => {
+ os.dialog({
+ type: 'error',
+ text: err.id
+ });
+ });
+ },
+
+ save(notify) {
this.saving = true;
os.api('i/update', {
@@ -162,9 +218,9 @@ export default defineComponent({
description: this.description || null,
location: this.location || null,
birthday: this.birthday || null,
- fields,
isBot: !!this.isBot,
isCat: !!this.isCat,
+ alwaysMarkNsfw: !!this.alwaysMarkNsfw,
}).then(i => {
this.saving = false;
this.$store.state.i.avatarId = i.avatarId;
@@ -189,41 +245,29 @@ export default defineComponent({
<style lang="scss" scoped>
.llvierxe {
- > ._content {
- > .header {
- position: relative;
- height: 150px;
- overflow: hidden;
- background-size: cover;
- background-position: center;
- border-radius: 5px;
- border: solid 1px var(--divider);
- box-sizing: border-box;
- cursor: pointer;
+ > .header {
+ position: relative;
+ height: 150px;
+ overflow: hidden;
+ background-size: cover;
+ background-position: center;
+ border-radius: 5px;
+ border: solid 1px var(--divider);
+ box-sizing: border-box;
+ cursor: pointer;
- > .avatar {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
- display: block;
- width: 72px;
- height: 72px;
- margin: auto;
- cursor: pointer;
- box-shadow: 0 0 0 6px rgba(0, 0, 0, 0.5);
- }
- }
-
- > .fields {
- > .row {
- > * {
- display: inline-block;
- width: 50%;
- margin-bottom: 0;
- }
- }
+ > .avatar {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ display: block;
+ width: 72px;
+ height: 72px;
+ margin: auto;
+ cursor: pointer;
+ box-shadow: 0 0 0 6px rgba(0, 0, 0, 0.5);
}
}
}