akkoma-fe/src/components/shout_panel/shout_panel.vue

156 lines
3 KiB
Vue
Raw Normal View History

2017-12-05 10:02:41 +00:00
<template>
2019-07-05 07:17:44 +00:00
<div
2019-07-06 21:54:17 +00:00
v-if="!collapsed || !floating"
class="shout-panel"
2019-07-05 07:17:44 +00:00
>
<div class="panel panel-default">
2019-07-05 07:17:44 +00:00
<div
class="panel-heading timeline-heading"
:class="{ 'shout-heading': floating }"
2019-07-05 07:17:44 +00:00
@click.stop.prevent="togglePanel"
>
2018-01-26 14:11:34 +00:00
<div class="title">
{{ $t('shoutbox.title') }}
2020-10-20 21:01:28 +00:00
<FAIcon
2019-07-05 07:17:44 +00:00
v-if="floating"
2020-10-20 18:18:23 +00:00
icon="times"
class="close-icon"
2019-07-05 07:17:44 +00:00
/>
2018-01-26 14:11:34 +00:00
</div>
2017-12-05 10:02:41 +00:00
</div>
<div class="shout-window">
2019-07-05 07:17:44 +00:00
<div
v-for="message in messages"
:key="message.id"
class="shout-message"
2019-07-05 07:17:44 +00:00
>
<span class="shout-avatar">
2019-07-05 07:17:44 +00:00
<img :src="message.author.avatar">
2017-12-05 10:02:41 +00:00
</span>
<div class="shout-content">
<router-link
class="shout-name"
2019-07-05 07:17:44 +00:00
:to="userProfileLink(message.author)"
>
{{ message.author.username }}
</router-link>
<br>
<span class="shout-text">
2019-07-05 07:17:44 +00:00
{{ message.text }}
</span>
</div>
2017-12-05 10:02:41 +00:00
</div>
</div>
<div class="shout-input">
2019-07-05 07:17:44 +00:00
<textarea
v-model="currentMessage"
class="shout-input-textarea"
2019-07-05 07:17:44 +00:00
rows="1"
@keyup.enter="submit(currentMessage)"
/>
2017-12-05 10:02:41 +00:00
</div>
</div>
</div>
2019-07-05 07:17:44 +00:00
<div
v-else
class="shout-panel"
2019-07-05 07:17:44 +00:00
>
<div class="panel panel-default">
2019-07-05 07:17:44 +00:00
<div
class="panel-heading stub timeline-heading shout-heading"
2019-07-05 07:17:44 +00:00
@click.stop.prevent="togglePanel"
>
<div class="title">
2020-10-20 21:31:16 +00:00
<FAIcon
class="icon"
icon="bullhorn"
/>
{{ $t('shoutbox.title') }}
</div>
</div>
</div>
</div>
2017-12-05 10:02:41 +00:00
</template>
<script src="./shout_panel.js"></script>
2017-12-05 10:02:41 +00:00
<style lang="scss">
@import '../../_variables.scss';
.floating-shout {
position: fixed;
bottom: 0px;
z-index: 1000;
max-width: 25em;
}
.floating-shout.left {
left: 0px;
}
.floating-shout:not(.left) {
right: 0px;
}
.shout-panel {
.shout-heading {
2020-05-07 13:10:53 +00:00
cursor: pointer;
2020-10-20 21:01:28 +00:00
.icon {
2020-05-07 13:10:53 +00:00
color: $fallback--text;
color: var(--text, $fallback--text);
margin-right: 0.5em;
}
.title {
display: flex;
justify-content: space-between;
align-items: center;
2020-05-07 13:10:53 +00:00
}
}
.shout-window {
2020-05-07 13:10:53 +00:00
overflow-y: auto;
overflow-x: hidden;
max-height: 20em;
}
.shout-window-container {
2020-05-07 13:10:53 +00:00
height: 100%;
}
.shout-message {
2020-05-07 13:10:53 +00:00
display: flex;
padding: 0.2em 0.5em
2018-04-07 16:30:27 +00:00
}
.shout-avatar {
2020-05-07 13:10:53 +00:00
img {
height: 24px;
width: 24px;
border-radius: $fallback--avatarRadius;
border-radius: var(--avatarRadius, $fallback--avatarRadius);
margin-right: 0.5em;
margin-top: 0.25em;
}
2018-04-07 16:30:27 +00:00
}
.shout-input {
display: flex;
2020-05-07 13:10:53 +00:00
textarea {
flex: 1;
margin: 0.6em;
min-height: 3.5em;
resize: none;
}
}
.shout-panel {
2020-05-07 13:10:53 +00:00
.title {
display: flex;
justify-content: space-between;
}
}
}
2017-12-05 10:02:41 +00:00
</style>