commit: 79d02bddbe2b77574844b8ade7a09043c31b1c6b
parent 8ade11783aa4740a2cff61f27938f3408c3e0eb0
Author: marcin mikołajczak <git@mkljczk.pl>
Date: Sun, 13 Feb 2022 19:07:49 +0100
Birthdays
Signed-off-by: marcin mikołajczak <git@mkljczk.pl>
Diffstat:
8 files changed, 60 insertions(+), 5 deletions(-)
diff --git a/src/components/settings_modal/tabs/profile_tab.js b/src/components/settings_modal/tabs/profile_tab.js
@@ -29,6 +29,8 @@ const ProfileTab = {
newLocked: this.$store.state.users.currentUser.locked,
newNoRichText: this.$store.state.users.currentUser.no_rich_text,
newDefaultScope: this.$store.state.users.currentUser.default_scope,
+ newBirthday: this.$store.state.users.currentUser.birthday,
+ showBirthday: this.$store.state.users.currentUser.show_birthday,
newFields: this.$store.state.users.currentUser.fields.map(field => ({ name: field.name, value: field.value })),
hideFollows: this.$store.state.users.currentUser.hide_follows,
hideFollowers: this.$store.state.users.currentUser.hide_followers,
@@ -132,7 +134,9 @@ const ProfileTab = {
allow_following_move: this.allowFollowingMove,
hide_follows_count: this.hideFollowsCount,
hide_followers_count: this.hideFollowersCount,
- show_role: this.showRole
+ show_role: this.showRole,
+ birthday: this.newBirthday || null,
+ show_birthday: this.showBirthday
/* eslint-enable camelcase */
} }).then((user) => {
this.newFields.splice(user.fields.length)
diff --git a/src/components/settings_modal/tabs/profile_tab.scss b/src/components/settings_modal/tabs/profile_tab.scss
@@ -124,4 +124,9 @@
padding: 0 0.5em;
}
}
+
+ .birthday-input {
+ display: block;
+ margin-bottom: 1em;
+ }
}
diff --git a/src/components/settings_modal/tabs/profile_tab.vue b/src/components/settings_modal/tabs/profile_tab.vue
@@ -95,6 +95,18 @@
{{ $t('settings.discoverable') }}
</Checkbox>
</p>
+ <div>
+ <p>{{ $t('settings.birthday.label') }}</p>
+ <input
+ id="birthday"
+ v-model="newBirthday"
+ type="date"
+ class="birthday-input"
+ >
+ <Checkbox v-model="showBirthday">
+ {{ $t('settings.birthday.show_birthday') }}
+ </Checkbox>
+ </div>
<div v-if="maxFields > 0">
<p>{{ $t('settings.profile_fields.label') }}</p>
<div
diff --git a/src/components/user_profile/user_profile.js b/src/components/user_profile/user_profile.js
@@ -7,13 +7,16 @@ import TabSwitcher from 'src/components/tab_switcher/tab_switcher.js'
import RichContent from 'src/components/rich_content/rich_content.jsx'
import List from '../list/list.vue'
import withLoadMore from '../../hocs/with_load_more/with_load_more'
+import localeService from 'src/services/locale/locale.service.js'
import { library } from '@fortawesome/fontawesome-svg-core'
import {
- faCircleNotch
+ faCircleNotch,
+ faBirthdayCake
} from '@fortawesome/free-solid-svg-icons'
library.add(
- faCircleNotch
+ faCircleNotch,
+ faBirthdayCake
)
const FollowerList = withLoadMore({
@@ -75,6 +78,10 @@ const UserProfile = {
},
followersTabVisible () {
return this.isUs || !this.user.hide_followers
+ },
+ formattedBirthday () {
+ const browserLocale = localeService.internalToBrowserLocale(this.$i18n.locale)
+ return this.user.birthday && new Date(Date.parse(this.user.birthday)).toLocaleDateString(browserLocale, { timeZone: 'UTC', day: 'numeric', month: 'long', year: 'numeric' })
}
},
methods: {
diff --git a/src/components/user_profile/user_profile.vue b/src/components/user_profile/user_profile.vue
@@ -11,6 +11,16 @@
:allow-zooming-avatar="true"
rounded="top"
/>
+ <span
+ v-if="!!user.birthday"
+ class="user-birthday"
+ >
+ <FAIcon
+ class="fa-old-padding"
+ icon="birthday-cake"
+ />
+ {{ $t('user_card.birthday', { birthday: formattedBirthday }) }}
+ </span>
<div
v-if="user.fields_html && user.fields_html.length > 0"
class="user-profile-fields"
@@ -138,6 +148,10 @@
flex: 2;
flex-basis: 500px;
+ .user-birthday {
+ margin: 0 0.75em 0.5em;
+ }
+
.user-profile-fields {
margin: 0 0.5em;
diff --git a/src/i18n/en.json b/src/i18n/en.json
@@ -399,6 +399,10 @@
"name": "Label",
"value": "Content"
},
+ "birthday": {
+ "label": "Birthday",
+ "show_birthday": "Show my birthday"
+ },
"use_contain_fit": "Don't crop the attachment in thumbnails",
"name": "Name",
"name_bio": "Name & bio",
@@ -774,6 +778,7 @@
"hide_repeats": "Hide repeats",
"show_repeats": "Show repeats",
"bot": "Bot",
+ "birthday": "Born {birthday}",
"admin_menu": {
"moderation": "Moderation",
"grant_admin": "Grant Admin",
diff --git a/src/i18n/pl.json b/src/i18n/pl.json
@@ -633,7 +633,11 @@
"reply_visibility_following_short": "Pokazuj odpowiedzi obserwującym",
"reply_visibility_self_short": "Pokazuj odpowiedzi tylko do mnie",
"sensitive_by_default": "Domyślnie oznaczaj wpisy jako wrażliwe",
- "hide_shoutbox": "Ukryj shoutbox instancji"
+ "hide_shoutbox": "Ukryj shoutbox instancji",
+ "birthday": {
+ "label": "Urodziny",
+ "show_birthday": "Pokazuj moją datę urodzenia"
+ }
},
"time": {
"day": "{0} dzień",
@@ -770,7 +774,8 @@
"highlight": {
"disabled": "Bez wyróżnienia"
},
- "bot": "Bot"
+ "bot": "Bot",
+ "birthday": "Urodzony(-a) {birthday}"
},
"user_profile": {
"timeline_title": "Oś czasu użytkownika",
diff --git a/src/services/entity_normalizer/entity_normalizer.service.js b/src/services/entity_normalizer/entity_normalizer.service.js
@@ -118,6 +118,8 @@ export const parseUser = (data) => {
} else {
output.role = 'member'
}
+
+ output.birthday = data.pleroma.birthday
}
if (data.source) {
@@ -128,6 +130,7 @@ export const parseUser = (data) => {
output.no_rich_text = data.source.pleroma.no_rich_text
output.show_role = data.source.pleroma.show_role
output.discoverable = data.source.pleroma.discoverable
+ output.show_birthday = data.pleroma.show_birthday
}
}