announcement.vue (3144B)
- <template>
- <div class="announcement">
- <div class="heading">
- <h4>{{ $t('announcements.title') }}</h4>
- </div>
- <div class="body">
- <rich-content
- v-if="!editing"
- :html="content"
- :emoji="announcement.emojis"
- :handle-links="true"
- />
- <announcement-editor
- v-else
- :announcement="editedAnnouncement"
- />
- </div>
- <div class="footer">
- <div
- v-if="!editing"
- class="times"
- >
- <span v-if="publishedAt">
- {{ $t('announcements.published_time_display', { time: publishedAt }) }}
- </span>
- <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
- v-if="!editing"
- class="actions"
- >
- <button
- v-if="currentUser"
- class="btn button-default"
- :class="{ toggled: isRead }"
- :disabled="inactive"
- :title="inactive ? $t('announcements.inactive_message') : ''"
- @click="markAsRead"
- >
- {{ $t('announcements.mark_as_read_action') }}
- </button>
- <button
- v-if="canEditAnnouncement"
- class="btn button-default"
- @click="enterEditMode"
- >
- {{ $t('announcements.edit_action') }}
- </button>
- <button
- v-if="canEditAnnouncement"
- class="btn button-default"
- @click="deleteAnnouncement"
- >
- {{ $t('announcements.delete_action') }}
- </button>
- </div>
- <div
- v-else
- class="actions"
- >
- <button
- class="btn button-default"
- @click="submitEdit"
- >
- {{ $t('announcements.submit_edit_action') }}
- </button>
- <button
- class="btn button-default"
- @click="cancelEdit"
- >
- {{ $t('announcements.cancel_edit_action') }}
- </button>
- <div
- v-if="editing && editError"
- class="alert error"
- >
- {{ $t('announcements.edit_error', { error }) }}
- <button
- class="button-unstyled"
- @click="clearError"
- >
- <FAIcon
- class="fa-scale-110 fa-old-padding"
- icon="times"
- :title="$t('announcements.close_error')"
- />
- </button>
- </div>
- </div>
- </div>
- </div>
- </template>
- <script src="./announcement.js"></script>
- <style lang="scss">
- .announcement {
- border-bottom: 1px solid var(--border);
- border-radius: 0;
- padding: var(--status-margin);
- .heading,
- .body {
- margin-bottom: var(--status-margin);
- }
- .footer {
- display: flex;
- flex-direction: column;
- .times {
- display: flex;
- flex-direction: column;
- }
- }
- .footer .actions {
- display: flex;
- flex-direction: row;
- justify-content: space-evenly;
- .btn {
- flex: 1;
- margin: 1em;
- max-width: 10em;
- }
- }
- }
- </style>