chat_panel.vue (2952B)
- <template>
- <div
- v-if="!collapsed || !floating"
- class="chat-panel"
- >
- <div class="panel panel-default">
- <div
- class="panel-heading timeline-heading"
- :class="{ 'chat-heading': floating }"
- @click.stop.prevent="togglePanel"
- >
- <div class="title">
- {{ $t('shoutbox.title') }}
- <FAIcon
- v-if="floating"
- icon="times"
- class="close-icon"
- />
- </div>
- </div>
- <div class="chat-window">
- <div
- v-for="message in messages"
- :key="message.id"
- class="chat-message"
- >
- <span class="chat-avatar">
- <img :src="message.author.avatar">
- </span>
- <div class="chat-content">
- <router-link
- class="chat-name"
- :to="userProfileLink(message.author)"
- >
- {{ message.author.username }}
- </router-link>
- <br>
- <span class="chat-text">
- {{ message.text }}
- </span>
- </div>
- </div>
- </div>
- <div class="chat-input">
- <textarea
- v-model="currentMessage"
- class="chat-input-textarea"
- rows="1"
- @keyup.enter="submit(currentMessage)"
- />
- </div>
- </div>
- </div>
- <div
- v-else
- class="chat-panel"
- >
- <div class="panel panel-default">
- <div
- class="panel-heading stub timeline-heading chat-heading"
- @click.stop.prevent="togglePanel"
- >
- <div class="title">
- <FAIcon
- class="icon"
- icon="bullhorn"
- />
- {{ $t('shoutbox.title') }}
- </div>
- </div>
- </div>
- </div>
- </template>
- <script src="./chat_panel.js"></script>
- <style lang="scss">
- @import '../../_variables.scss';
- .floating-chat {
- position: fixed;
- right: 0px;
- bottom: 0px;
- z-index: 1000;
- max-width: 25em;
- }
- .chat-panel {
- .chat-heading {
- cursor: pointer;
- .icon {
- color: $fallback--text;
- color: var(--text, $fallback--text);
- margin-right: 0.5em;
- }
- .title {
- display: flex;
- justify-content: space-between;
- align-items: center;
- }
- }
- .chat-window {
- overflow-y: auto;
- overflow-x: hidden;
- max-height: 20em;
- }
- .chat-window-container {
- height: 100%;
- }
- .chat-message {
- display: flex;
- padding: 0.2em 0.5em
- }
- .chat-avatar {
- img {
- height: 24px;
- width: 24px;
- border-radius: $fallback--avatarRadius;
- border-radius: var(--avatarRadius, $fallback--avatarRadius);
- margin-right: 0.5em;
- margin-top: 0.25em;
- }
- }
- .chat-input {
- display: flex;
- textarea {
- flex: 1;
- margin: 0.6em;
- min-height: 3.5em;
- resize: none;
- }
- }
- .chat-panel {
- .title {
- display: flex;
- justify-content: space-between;
- }
- }
- }
- </style>