diff options
| author | Tusooa Zhu <tusooa@kazv.moe> | 2022-03-17 16:51:32 -0400 |
|---|---|---|
| committer | tusooa <tusooa@kazv.moe> | 2022-11-24 18:27:14 -0500 |
| commit | 04fbb6d93d6217812dc1b594b65f237bcee692a7 (patch) | |
| tree | ada2938f4f1311f992265fee4034422186d5d007 /src/components/announcement | |
| parent | ce84557190a46e2bb9eee202dd09c91d13d95ca6 (diff) | |
Show announcement dates
Diffstat (limited to 'src/components/announcement')
| -rw-r--r-- | src/components/announcement/announcement.js | 35 | ||||
| -rw-r--r-- | src/components/announcement/announcement.vue | 54 |
2 files changed, 74 insertions, 15 deletions
diff --git a/src/components/announcement/announcement.js b/src/components/announcement/announcement.js index b1f5ee77..309eecea 100644 --- a/src/components/announcement/announcement.js +++ b/src/components/announcement/announcement.js @@ -1,6 +1,21 @@ import { mapState } from 'vuex' +import AnnouncementEditor from '../announcement_editor/announcement_editor.vue' +import localeService from '../../services/locale/locale.service.js' const Announcement = { + components: { + AnnouncementEditor + }, + data () { + return { + editing: false, + newAnnouncement: { + content: '', + startsAt: undefined, + endsAt: undefined + } + } + }, props: { announcement: Object }, @@ -13,6 +28,22 @@ const Announcement = { }, isRead () { return this.announcement.read + }, + startsAt () { + const time = this.announcement['starts_at'] + if (!time) { + return + } + + return this.formatTimeOrDate(time, localeService.internalToBrowserLocale(this.$i18n.locale)) + }, + endsAt () { + const time = this.announcement['ends_at'] + if (!time) { + return + } + + return this.formatTimeOrDate(time, localeService.internalToBrowserLocale(this.$i18n.locale)) } }, methods: { @@ -23,6 +54,10 @@ const Announcement = { }, deleteAnnouncement () { return this.$store.dispatch('deleteAnnouncement', this.announcement.id) + }, + formatTimeOrDate (time, locale) { + const d = new Date(time) + return this.announcement['all_day'] ? d.toLocaleDateString(locale) : d.toLocaleString(locale) } } } diff --git a/src/components/announcement/announcement.vue b/src/components/announcement/announcement.vue index d6f35b9f..5ddeebf5 100644 --- a/src/components/announcement/announcement.vue +++ b/src/components/announcement/announcement.vue @@ -5,27 +5,42 @@ </div> <div class="body"> <rich-content + v-if="!editing" :html="content" :emoji="announcement.emojis" :handle-links="true" /> + <announcement-editor + v-else + :announcement="newAnnouncement" + /> </div> <div class="footer"> - <button - v-if="currentUser" - class="btn button-default" - :class="{ toggled: isRead }" - @click="markAsRead" - > - {{ $t('announcements.mark_as_read_action') }} - </button> - <button - v-if="currentUser && currentUser.role === 'admin'" - class="btn button-default" - @click="deleteAnnouncement" - > - {{ $t('announcements.delete_action') }} - </button> + <div class="times"> + <span v-if="startsAt"> + {{ $t('announcements.start_time_display', { time: startsAt }) }} + </span> + <span v-if="endsAt"> + {{ $t('announcements.end_time_display', { time: endsAt }) }} + </span> + </div> + <div class="actions"> + <button + v-if="currentUser" + class="btn button-default" + :class="{ toggled: isRead }" + @click="markAsRead" + > + {{ $t('announcements.mark_as_read_action') }} + </button> + <button + v-if="currentUser && currentUser.role === 'admin'" + class="btn button-default" + @click="deleteAnnouncement" + > + {{ $t('announcements.delete_action') }} + </button> + </div> </div> </div> </template> @@ -48,6 +63,15 @@ .footer { display: flex; + flex-direction: column; + .times { + display: flex; + flex-direction: column; + } + } + + .footer .actions { + display: flex; flex-direction: row; justify-content: space-around; |
