Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/views/rooms.vue
add-admin-interface
adb 4 years ago
commit 433fbac3fa

@ -35,11 +35,11 @@ export default {
roomId: String roomId: String
}, },
methods: { methods: {
async sendMessage(){ sendMessage(){
let content = this.msg.content; let content = this.msg.content;
if (!content.body) return; if (!content.body.trim()) return;
let msgSend = Object.assign({}, this.msg); let msgSend = Object.assign({}, this.msg);
await matrix.sendEvent(msgSend, this.roomId); matrix.sendEvent(msgSend, this.roomId);
content.body = ""; content.body = "";
let id = this.$refs.newMessageInput; let id = this.$refs.newMessageInput;
id.style.height = "1.25rem"; id.style.height = "1.25rem";
@ -88,6 +88,7 @@ export default {
position: relative; position: relative;
margin-top: 1.25rem; margin-top: 1.25rem;
margin-bottom: 0.75rem; margin-bottom: 0.75rem;
padding: 0;
left: 2rem; left: 2rem;
min-height: 1.5rem; min-height: 1.5rem;
max-height: 10rem; max-height: 10rem;

@ -0,0 +1,14 @@
export default class {
constructor(element) {
this.element = element
}
scrollToBottom(){
this.setScrollBottom(0);
}
getScrollBottom(){
return this.element.scrollHeight - this.element.scrollTop - this.element.offsetHeight;
}
setScrollBottom(height){
this.element.scrollTop = this.element.scrollHeight - this.element.offsetHeight - height;
}
}

@ -1,12 +1,12 @@
<template> <template>
<div> <div>
<div ref="chatContainer" class="chatContainer"> <div ref="chatContainer" class="chatContainer">
<div @scroll="scrollHandler()" ref="msgContainer" id="messagesContainer" class="messagesContainer"> <div @scroll="onScroll()" ref="msgContainer" id="messagesContainer" class="messagesContainer">
<div v-if="loadingStatus" @click="loadEvents()" class="loadMore">{{loadingStatus}}</div> <div v-if="loadingStatus" @click="loadEvents()" class="loadMore">{{loadingStatus}}</div>
<p v-if="room.timeline.length === 0" class="chatInfo">this room is empty</p> <p v-if="room.timeline.length === 0" class="chatInfo">this room is empty</p>
<timeline :timeline="room.timeline" :group-timeline="isGroup()" :user="user" :roomId="room.roomId" /> <timeline :timeline="room.timeline" :group-timeline="isGroup()" :user="user" :roomId="room.roomId" />
</div> </div>
<icon v-if="showScrollBtn" @click.native="scrollToBottom()" id="scrollDown" ic="./sym/expand_more-black-24dp.svg" /> <icon v-if="showScrollBtn" @click.native="scroll.scrollToBottom()" id="scrollDown" ic="./sym/expand_more-black-24dp.svg" />
</div> </div>
<newMessage :onResize="height=>resize(height)" :roomId="room.roomId"/> <newMessage :onResize="height=>resize(height)" :roomId="room.roomId"/>
<topBanner :room="room" :close-chat="()=>closeChat()" :open-chat-info="()=>openChatInfo()"/> <topBanner :room="room" :close-chat="()=>closeChat()" :open-chat-info="()=>openChatInfo()"/>
@ -20,6 +20,7 @@ import Icon from '@/components/icon';
import {matrix} from '@/main'; import {matrix} from '@/main';
import splitArray from '@/lib/splitArray.js' import splitArray from '@/lib/splitArray.js'
import timeline from '@/components/timeline'; import timeline from '@/components/timeline';
import scrollHandler from "@/lib/scrollHandler";
export default { export default {
name: 'chat', name: 'chat',
@ -36,13 +37,9 @@ export default {
openChatInfo: Function openChatInfo: Function
}, },
methods:{ methods:{
scrollToBottom(){ onScroll(){
this.$refs.msgContainer.scrollTop = this.$refs.msgContainer.scrollHeight;
},
scrollHandler(){
if (this.$refs.msgContainer.scrollTop === 0) this.loadEvents(); if (this.$refs.msgContainer.scrollTop === 0) this.loadEvents();
let msg = this.$refs.msgContainer; this.showScrollBtn = this.scroll.getScrollBottom() > 400;
this.showScrollBtn = msg.scrollHeight - msg.scrollTop > msg.offsetHeight + 200;
}, },
resize(height){ resize(height){
this.$refs.chatContainer.style.height = `calc(100% - ${height}px - 3.5rem)`; this.$refs.chatContainer.style.height = `calc(100% - ${height}px - 3.5rem)`;
@ -51,9 +48,11 @@ export default {
return Object.keys(this.room.currentState.members).length > 2; return Object.keys(this.room.currentState.members).length > 2;
}, },
async loadEvents(){ async loadEvents(){
let scrollBottom = this.scroll.getScrollBottom();
this.loadingStatus = 'loading ...'; this.loadingStatus = 'loading ...';
await matrix.client.paginateEventTimeline(this.room.getLiveTimeline(), {backwards: true}) await matrix.client.paginateEventTimeline(this.room.getLiveTimeline(), {backwards: true})
.then(state => this.loadingStatus = state?'load more':false); .then(state => this.loadingStatus = state?'load more':false);
this.scroll.setScrollBottom(scrollBottom);
}, },
getUser(userId){ getUser(userId){
return matrix.client.getUser(userId); return matrix.client.getUser(userId);
@ -64,14 +63,16 @@ export default {
return { return {
showScrollBtn: false, showScrollBtn: false,
scrollOnUpdate: true, scrollOnUpdate: true,
loadingStatus: 'load more' loadingStatus: 'load more',
scroll: ()=>{}
} }
}, },
updated(){ updated(){
//this.scrollToBottom(); if(this.scroll.getScrollBottom() < 400) this.scroll.scrollToBottom();
}, },
mounted(){ mounted(){
//this.scrollToBottom(); this.scroll = new scrollHandler(this.$refs.msgContainer);
this.scroll.scrollToBottom();
} }
} }
</script> </script>

@ -8,7 +8,7 @@
<input v-model="search" class="input" type="text" maxlength="50" placeholder="search"><br> <input v-model="search" class="input" type="text" maxlength="50" placeholder="search"><br>
<div v-for="room in matrix.rooms" :key="room.roomId" @click="openChat(room)" > <div v-for="room in matrix.rooms" :key="room.roomId" @click="openChat(room)" >
<room-list-element <room-list-element
v-if="!search || room.name.toLowerCase().includes(search.toLowerCase())" v-if="!search || room.name.toLowerCase().includes(search.toLowerCase().trim())"
:room="room" :room="room"
class="roomListElement" class="roomListElement"
/> />
@ -45,10 +45,11 @@ export default {
}, },
methods:{ methods:{
openChat(room){ openChat(room){
this.currentRoom = undefined
this.$nextTick(() => this.currentRoom = room);
this.showChatInfo = false; this.showChatInfo = false;
this.currentRoom = room; this.currentRoom = room;
this.$router.push(`/rooms/${room.roomId}`); this.$router.push(`/rooms/${room.roomId}`);
this.$forceUpdate();
this.search = ''; this.search = '';
}, },
getMxcFromRoom getMxcFromRoom

Loading…
Cancel
Save