Current Path : /var/www/axolotl/data/www/arhangelsk.axolotls.ru/a537b/ |
Current File : /var/www/axolotl/data/www/arhangelsk.axolotls.ru/a537b/view.tar |
dialog/config.php 0000664 00000000627 14774417471 0010010 0 ustar 00 <? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die(); } return [ 'js' => [ './dist/dialog.bundle.js', ], 'css' => [ './dist/dialog.bundle.css', ], 'rel' => [ 'main.polyfill.core', 'main.polyfill.intersectionobserver', 'ui.vue', 'ui.vue.vuex', 'im.view.message', 'im.const', 'im.lib.utils', 'im.lib.animation', 'im.lib.logger', ], 'skip_core' => true, ]; dialog/bundle.config.js 0000664 00000000124 14774417471 0011075 0 ustar 00 module.exports = { input: './src/dialog.js', output: './dist/dialog.bundle.js', }; dialog/src/dialog.css 0000664 00000016305 14774417471 0010572 0 ustar 00 .bx-im-dialog { display: flex; height: 100%; overflow: hidden; } .bx-im-dialog-ajax { text-decoration: dotted; } .bx-im-dialog-list { overflow-y: auto; width: 100%; } .bx-im-dialog-list-scroll-blocked { overflow: hidden; } .bx-im-dialog-list-box { width: 100%; display: flex; flex-direction: column; flex-wrap: nowrap; -webkit-overflow-scrolling: touch; overflow-x: hidden; overflow-y: auto; padding: 10px 0; } .bx-im-dialog-scroll-button-box { position: absolute; right: 0; bottom: 0; width: 55px; height: 55px; z-index: 1; -webkit-tap-highlight-color: transparent; outline: none; } .bx-im-dialog-scroll-button { background: #fff; border: 1px solid #ececec; box-shadow: 0 2px 1px 0 rgba(0,0,0,0.2); border-radius: 50%; width: 34px; height: 34px; margin-top: 10px; margin-left: 7px; cursor: pointer; transition: background-color .2s; text-align: center; } .bx-im-dialog-scroll-button:hover { background-color: #f9f9f9; } .bx-im-dialog-scroll-button-arrow { display: inline-block; width: 7px; height: 7px; border-top: 3px solid #bbb8b8; border-right: 3px solid #bbb8b8; transform: rotate(135deg); margin-top: 11px; cursor: pointer; box-sizing: content-box; } .bx-im-dialog-scroll-button-counter { width: 100%; text-align: center; margin-top:-7px; position: absolute; } .bx-im-dialog-scroll-button-counter-digit { display: inline-block; font: 11px/16px "Helvetica Neue", Helvetica, Arial, sans-serif; color: #fff; padding: 0 5px 0 5px; border: 2px solid #fff; border-radius: 10px; background-color: #17b0e1; } .bx-im-dialog-scroll-button-enter-active, .bx-im-dialog-scroll-button-leave-active { transition: bottom .2s ease-out; } .bx-im-dialog-scroll-button-enter, .bx-im-dialog-scroll-button-leave-to { bottom: -60px; } .bx-im-dialog-message-animation-enter-active, .bx-im-dialog-message-animation-leave-active { transition: 0s; } .bx-im-dialog-list-item {} .bx-im-dialog-group { font: 14px/19px "Helvetica Neue", Helvetica, Arial, sans-serif; text-overflow: ellipsis; white-space: nowrap; text-align: center; position: relative; } .bx-im-dialog-group-date { background-color: rgba(7, 5, 27, 0.62); border: 1px solid rgba(7, 5, 27, 0.1); text-shadow: none; color: #fff!important; display: inline-block; padding: 5px 15px; border-radius: 15px; font-size: 14px; text-decoration: none; margin: 10px 15px; } .bx-im-dialog-group-float.bx-im-dialog-group-date { position: absolute; display: block; margin-top: 32px; z-index: 30; -webkit-transform: translateZ(0); transform: translateZ(0); } .bx-im-dialog-load-more { position: relative; text-align: center; } .bx-im-dialog-load-more + .bx-im-dialog-list-box { padding-top: 0; } .bx-im-dialog-load-more-history { padding-bottom: 0; } .bx-im-dialog-load-more-unread { padding-top: 0; padding-bottom: 13px; } .bx-im-dialog-load-more-text:before { position: absolute; margin-left: -30px; margin-top: 4px; width: 20px; height: 20px; background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cpath%20d%3D%22M1%2010c0%204.9706%204.0294%209%209%209s9-4.0294%209-9-4.0294-9-9-9c-2.4048%200-4.5893.9432-6.2038%202.4798%22%20stroke%3D%22%23677B8F%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22/%3E%3C/svg%3E'); background-repeat: no-repeat; -ms-animation: bx-im-dialog-load-more .8s linear infinite; -webkit-animation: bx-im-dialog-load-more .8s linear infinite; animation: bx-im-dialog-load-more .8s linear infinite; content: "" } .bx-im-dialog-load-more-text { display: inline-block; height: 29px; font: 15px/29px "Helvetica Neue",Helvetica,Arial,sans-serif; color: #687B8C; vertical-align: top; padding: 10px 15px; padding-left: 30px; } .bx-im-dialog-dark-background .bx-im-dialog-load-more-text { color: #949494; } @-webkit-keyframes bx-im-dialog-load-more { 0% { -webkit-transform:rotate(0deg); transform:rotate(0deg); } 100% { -webkit-transform:rotate(360deg); transform:rotate(360deg); } } @keyframes bx-im-dialog-load-more { 0% { -moz-transform:rotate(0deg); transform:rotate(0deg); } 100% { -moz-transform:rotate(360deg); transform:rotate(360deg); } } .bx-im-dialog-status { padding: 0 20px 15px; display: block; font: 15px/19px "Helvetica Neue", Helvetica, Arial, sans-serif; color: #585858; word-wrap: break-word; vertical-align: middle; -moz-user-select:none; -webkit-user-select:none; user-select:none; cursor: default; position: relative; } .bx-im-dialog-status-enter-active, .bx-im-dialog-status-leave-active { transition: opacity .1s ease-out; } .bx-im-dialog-status-leave-active { transition: opacity .05s ease-out; } .bx-im-dialog-status-enter, .bx-im-dialog-status-leave-to { opacity: 0; } .bx-im-dialog-status-writing { width: 20px; height: 11px; display: inline-block; background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%228%22%20height%3D%222%22%3E%0A%20%20%3Cg%20fill%3D%22%23717171%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Crect%20width%3D%221.6%22%20height%3D%222%22%20rx%3D%22.8%22/%3E%0A%20%20%20%20%3Crect%20width%3D%221.6%22%20height%3D%222%22%20x%3D%223.2%22%20rx%3D%22.8%22/%3E%0A%20%20%20%20%3Crect%20width%3D%221.6%22%20height%3D%222%22%20x%3D%226.4%22%20rx%3D%22.8%22/%3E%0A%20%20%3C/g%3E%0A%3C/svg%3E%0A'); background-repeat: no-repeat; background-position: bottom left; vertical-align: middle; } .bx-im-dialog-status-writing:before { -webkit-animation: imWriting 1.4s linear infinite; animation: imWriting 1.4s linear infinite; content: ''; height: 16px; position: absolute; width: 19px; margin-left: 10px; margin-top:-1px; background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2210%22%20height%3D%2210%22%3E%0A%20%20%3Cpath%20fill%3D%22%23717171%22%20fill-rule%3D%22evenodd%22%20d%3D%22M7.8128%204.807L5.1751%202.1694a.041.041%200%200%200-.0578%200L.0328%207.2538c-.0739.0733%200%202.696%200%202.696s2.6222.0734%202.6961%200l5.0845-5.0844a.0416.0416%200%200%200-.0006-.0583zM1.0647%208.9376v-1.047h1.0495V8.94H1.0647v-.0025zm8.8785-6.2584L7.3054.0413a.0421.0421%200%200%200-.0578%200L6.1144%201.1746a.0416.0416%200%200%200%200%20.0577l2.6378%202.6378a.041.041%200%200%200%20.0577%200l1.1338-1.1333a.0427.0427%200%200%200-.0028-.0577h.0023z%22/%3E%0A%3C/svg%3E%0A'); background-repeat: no-repeat; zoom:1; } @-webkit-keyframes imWriting { 0% { margin-left: 1px; margin-top:-0px; } 20% { margin-left: 4px; margin-top:-1px; } 60% { margin-left: 8px; margin-top:-2px; } 65% { margin-left: 8px; margin-top:-2px; } 70% { margin-left: 8px; margin-top:-3px; -webkit-transform:rotate(-20deg); transform:rotate(-20deg); } 90% { margin-left: 8px; margin-top:-5px; -webkit-transform:rotate(-40deg); transform:rotate(-40deg); } 100% { margin-left: 1px; margin-top:-3px; } } @keyframes imWriting { 0% { margin-left: 1px; margin-top:-0px; } 20% { margin-left: 4px; margin-top:-1px; } 60% { margin-left: 8px; margin-top:-2px; } 65% { margin-left: 8px; margin-top:-2px; } 70% { margin-left: 8px; margin-top:-3px; transform:rotate(-20deg); } 90% { margin-left: 8px; margin-top:-5px; transform:rotate(-40deg); } 100% { margin-left: 1px; margin-top:-3px; } } dialog/src/dialog.js 0000664 00000124103 14774417471 0010412 0 ustar 00 /** * Bitrix Messenger * Dialog Vue component * * @package bitrix * @subpackage im * @copyright 2001-2019 Bitrix */ import './dialog.css'; import 'main.polyfill.intersectionobserver'; import {Vue} from 'ui.vue'; import {Vuex} from 'ui.vue.vuex'; import 'im.view.message'; import {DeviceType, MutationType, DialogReferenceClassName, DialogType} from "im.const"; import {Utils as MessengerUtils} from "im.lib.utils"; import {Animation} from "im.lib.animation"; import {Logger} from "im.lib.logger"; const TemplateType = Object.freeze({ message: 'message', delimiter: 'delimiter', group: 'group', historyLoader: 'historyLoader', unreadLoader: 'unreadLoader', button: 'button', }); const ObserverType = Object.freeze({ history: 'history', unread: 'unread', read: 'read', none: 'none', }); const LoadButtonTypes = Object.freeze({ before: 'before', after: 'after' }); const AnimationType = Object.freeze({ none: 'none', mixed: 'mixed', enter: 'enter', leave: 'leave', }); Vue.component('bx-im-view-dialog', { /** * @emits 'requestHistory' {lastId: number, limit: number} * @emits 'requestUnread' {lastId: number, limit: number} * @emits 'readMessage' {id: number} * @emits 'quoteMessage' {message: object} * @emits 'click' {event: MouseEvent} * @emits 'clickByUserName' {user: object, event: MouseEvent} * @emits 'clickByUploadCancel' {file: object, event: MouseEvent} * @emits 'clickByKeyboardButton' {message: object, action: string, params: Object} * @emits 'clickByChatTeaser' {message: object, event: MouseEvent} * @emits 'clickByMessageMenu' {message: object, event: MouseEvent} * @emits 'clickByCommand' {type: string, value: string, event: MouseEvent} * @emits 'clickByMention' {type: string, value: string, event: MouseEvent} * @emits 'clickByMessageRetry' {message: object, event: MouseEvent} * @emits 'clickByReadedList' {list: array, event: MouseEvent} * @emits 'setMessageReaction' {message: object, reaction: object} * @emits 'openMessageReactionList' {message: object, values: object} */ /** * @listens props.listenEventScrollToBottom {force:boolean, cancelIfScrollChange:boolean} (global|application) -- scroll dialog to bottom, see more in methods.onScrollToBottom() * @listens props.listenEventRequestHistory {count:number} (application) * @listens props.listenEventRequestUnread {count:number} (application) * @listens props.listenEventSendReadMessages {} (application) */ props: { userId: { default: 0 }, dialogId: { default: 0 }, chatId: { default: 0 }, messageLimit: { default: 20 }, messageExtraCount: { default: 0 }, listenEventScrollToBottom: { default: '' }, listenEventRequestHistory: { default: '' }, listenEventRequestUnread: { default: '' }, listenEventSendReadMessages: { default: '' }, enableReadMessages: { default: true }, enableReactions: { default: true }, enableDateActions: { default: true }, enableCreateContent: { default: true }, enableGestureQuote: { default: true }, enableGestureQuoteFromRight: { default: true }, enableGestureMenu: { default: false }, showMessageUserName: { default: true }, showMessageAvatar: { default: true }, showMessageMenu: { default: true }, }, data() { return { scrollAnimating: false, showScrollButton: false, messageShowCount: 0, unreadLoaderShow: false, historyLoaderBlocked: false, historyLoaderShow: true, startMessageLimit: 0, templateMessageScrollOffset: 20, templateMessageWithNameDifferent: 29, // name block + padding top TemplateType: TemplateType, ObserverType: ObserverType, DialogReferenceClassName: DialogReferenceClassName, captureMove: false, capturedMoveEvent: null, lastMessageId: null, maxMessageId: null, } }, created() { this.showScrollButton = this.unreadCounter > 0; this.scrollChangedByUser = false; this.scrollButtonDiff = 100; this.scrollButtonShowTimeout = null; this.scrollPosition = 0; this.scrollPositionChangeTime = new Date().getTime(); this.animationScrollHeightStart = 0; this.animationScrollHeightEnd = 0; this.animationScrollTop = 0; this.animationScrollChange = 0; this.animationScrollLastUserId = 0; this.animationType = AnimationType.none; this.animationCollection = []; this.animationCollectionOffset = {}; this.animationLastElementBeforeStart = 0; this.observers = {}; this.requestHistoryInterval = null; this.requestUnreadInterval = null; this.lastAuthorId = 0; this.firstMessageId = null; this.firstUnreadMessageId = null; this.dateFormatFunction = null; this.cacheGroupTitle = {}; this.waitLoadHistory = false; this.waitLoadUnread = false; this.skipUnreadScroll = false; this.readMessageQueue = []; this.readMessageTarget = {}; this.readMessageDelayed = MessengerUtils.debounce(this.readMessage, 50, this); this.requestHistoryBlockIntersect = false; this.requestHistoryDelayed = MessengerUtils.debounce(this.requestHistory, 50, this); this.requestUnreadBlockIntersect = false; this.requestUnreadDelayed = MessengerUtils.debounce(this.requestUnread, 50, this); this.startMessageLimit = this.messageLimit; if (this.listenEventScrollToBottom) { Vue.event.$on(this.listenEventScrollToBottom, this.onScrollToBottom); this.$root.$on(this.listenEventScrollToBottom, this.onScrollToBottom); } if (this.listenEventRequestHistory) { Vue.event.$on(this.listenEventRequestHistory, this.onRequestHistoryAnswer); this.$root.$on(this.listenEventRequestHistory, this.onRequestHistoryAnswer); } if (this.listenEventRequestUnread) { Vue.event.$on(this.listenEventRequestUnread, this.onRequestUnreadAnswer); this.$root.$on(this.listenEventRequestUnread, this.onRequestUnreadAnswer); } if (this.listenEventSendReadMessages) { Vue.event.$on(this.listenEventSendReadMessages, this.onSendReadMessages); this.$root.$on(this.listenEventSendReadMessages, this.onSendReadMessages); } window.addEventListener("orientationchange", this.onOrientationChange); window.addEventListener('focus', this.onWindowFocus); window.addEventListener('blur', this.onWindowBlur); Vue.event.$on('bitrixmobile:controller:focus', this.onWindowFocus); Vue.event.$on('bitrixmobile:controller:blur', this.onWindowBlur); }, beforeDestroy() { this.observers = {}; clearTimeout(this.scrollButtonShowTimeout); clearInterval(this.requestHistoryInterval); clearInterval(this.requestUnreadInterval); if (this.listenEventScrollToBottom) { Vue.event.$off(this.listenEventScrollToBottom, this.onScrollToBottom); this.$root.$off(this.listenEventScrollToBottom, this.onScrollToBottom); } if (this.listenEventRequestHistory) { Vue.event.$off(this.listenEventRequestHistory, this.onRequestHistoryAnswer); this.$root.$off(this.listenEventRequestHistory, this.onRequestHistoryAnswer); } if (this.listenEventRequestUnread) { Vue.event.$off(this.listenEventRequestUnread, this.onRequestUnreadAnswer); this.$root.$off(this.listenEventRequestUnread, this.onRequestUnreadAnswer); } if (this.listenEventSendReadMessages) { Vue.event.$off(this.listenEventSendReadMessages, this.onSendReadMessages); this.$root.$off(this.listenEventSendReadMessages, this.onSendReadMessages); } window.removeEventListener("orientationchange", this.onOrientationChange); window.removeEventListener('focus', this.onWindowFocus); window.removeEventListener('blur', this.onWindowBlur); Vue.event.$off('bitrixmobile:controller:focus', this.onWindowFocus); Vue.event.$off('bitrixmobile:controller:blur', this.onWindowBlur); }, mounted() { let unreadId = Utils.getFirstUnreadMessage(this.collection); if (unreadId) { Utils.scrollToFirstUnreadMessage(this, this.collection, unreadId, true) } else { let body = this.$refs.body; Utils.scrollToPosition(this, body.scrollHeight - body.clientHeight); } this.windowFocused = MessengerUtils.platform.isBitrixMobile()? true: document.hasFocus(); }, computed: { localize() { return Vue.getFilteredPhrases('IM_MESSENGER_DIALOG_', this.$root.$bitrixMessages); }, dialog() { let dialog = this.$store.getters['dialogues/get'](this.dialogId); return dialog? dialog: this.$store.getters['dialogues/getBlank'](); }, collectionMutationType() { return this.$store.getters['messages/getMutationType'](this.chatId); }, collection() { return this.$store.getters['messages/get'](this.chatId); }, elementsWithLimit() { let unreadCount = this.collection.filter(element => element.unread).length; let showLimit = this.messageExtraCount + this.messageLimit * 2; if (unreadCount > showLimit) { showLimit = unreadCount; } let start = this.collection.length - showLimit; if (!this.historyLoaderShow || start < 0) { start = 0; } let slicedCollection = start === 0? this.collection: this.collection.slice(start, this.collection.length); this.messageShowCount = slicedCollection.length; this.firstMessageId = null; this.lastMessageId = 0; this.maxMessageId = 0; this.lastMessageAuthorId = 0; let collection = []; let lastAuthorId = 0; let groupNode = {}; this.firstUnreadMessageId = 0; let unreadCountInSlicedCollection = 0; if (this.messageShowCount > 0) { slicedCollection.forEach(element => { if (this.firstMessageId === null || this.firstMessageId > element.id) { this.firstMessageId = element.id; } if (this.maxMessageId < element.id) { this.maxMessageId = element.id; } this.lastMessageId = element.id; let group = this._groupTitle(element.date); if (!groupNode[group.title]) { groupNode[group.title] = group.id; collection.push(Blocks.getGroup(group.id, group.title)); } else if (lastAuthorId !== element.authorId) { collection.push(Blocks.getDelimiter(element.id)); } collection.push(element); lastAuthorId = element.authorId; if (element.unread) { if (!this.firstUnreadMessageId) { this.firstUnreadMessageId = element.id; } unreadCountInSlicedCollection++; } }); this.lastMessageAuthorId = lastAuthorId; } else { this.firstMessageId = 0; } if ( this.collection.length >= this.messageLimit && this.collection.length >= this.messageShowCount && this.historyLoaderBlocked === false ) { this.historyLoaderShow = true; } else { this.historyLoaderShow = false; } if (this.dialog.unreadLastId > this.maxMessageId) { this.unreadLoaderShow = true; } else { this.unreadLoaderShow = false; } return collection; }, statusWriting() { clearTimeout(this.scrollToTimeout); if (this.dialog.writingList.length === 0) { return ''; } if (!this.scrollChangedByUser && !this.showScrollButton) { this.scrollToTimeout = setTimeout(() => this.scrollTo({duration: 500}), 300); } return this.localize.IM_MESSENGER_DIALOG_WRITES_MESSAGE.replace( '#USER#', this.dialog.writingList.map(element => element.userName).join(', ') ); }, statusReaded() { clearTimeout(this.scrollToTimeout); if (this.dialog.readedList.length === 0) { return ''; } let text = ''; if (this.dialog.type === DialogType.private) { let record = this.dialog.readedList[0]; if ( record.messageId === this.lastMessageId && record.userId !== this.lastMessageAuthorId ) { let dateFormat = MessengerUtils.date.getFormatType( BX.Messenger.Const.DateFormat.readedTitle, this.$root.$bitrixMessages ); text = this.localize.IM_MESSENGER_DIALOG_MESSAGES_READED_USER.replace( '#DATE#', this._getDateFormat().format(dateFormat, record.date) ); } } else { let readedList = this.dialog.readedList.filter(record => record.messageId === this.lastMessageId && record.userId !== this.lastMessageAuthorId); if (readedList.length === 1) { text = this.localize.IM_MESSENGER_DIALOG_MESSAGES_READED_CHAT.replace( '#USERS#', readedList[0].userName ); } else if (readedList.length > 1) { text = this.localize.IM_MESSENGER_DIALOG_MESSAGES_READED_CHAT.replace( '#USERS#', this.localize.IM_MESSENGER_DIALOG_MESSAGES_READED_CHAT_PLURAL .replace('#USER#', readedList[0].userName) .replace('#COUNT#', readedList.length-1) .replace('[LINK]', '') .replace('[/LINK]', '') ); } } if (!text) { return ''; } if (!this.scrollChangedByUser && !this.showScrollButton) { this.scrollToTimeout = setTimeout(() => this.scrollTo({duration: 500}), 300); } return text; }, unreadCounter() { return this.dialog.counter > 999? 999: this.dialog.counter; }, scrollBlocked() { if (this.application.device.type !== DeviceType.mobile) { return false; } return this.scrollAnimating || this.captureMove; }, isDarkBackground() { return this.application.options.darkBackground; }, isMobile() { return this.application.device.type === DeviceType.mobile; }, AnimationType: () => AnimationType, ...Vuex.mapState({ application: state => state.application, }) }, methods: { onDialogClick(event) { if (Vue.testNode(event.target, {className: 'bx-im-message-command'})) { this.onCommandClick(event); } else if (Vue.testNode(event.target, {className: 'bx-im-mention'})) { this.onMentionClick(event); } this.windowFocused = true; this.$emit('click', {event}); }, onDialogMove(event) { if (!this.captureMove) { return; } this.capturedMoveEvent = event; }, onCommandClick(event) { let value = ''; if ( event.target.dataset.entity === 'send' || event.target.dataset.entity === 'put' ) { value = event.target.nextSibling.innerHTML; } else if (event.target.dataset.entity === 'call') { value = event.target.dataset.command; } this.$emit('clickByCommand', {type: event.target.dataset.entity, value, event}); }, onMentionClick(event) { this.$emit('clickByMention', {type: event.target.dataset.type, value: event.target.dataset.value, event}); }, onScroll(event) { clearTimeout(this.scrollToTimeout); this.scrollPosition = event.target.scrollTop; this.scrollPositionChangeTime = new Date().getTime(); this.scrollChangedByUser = !(event.target.scrollTop + this.scrollButtonDiff >= event.target.scrollHeight - event.target.clientHeight); clearTimeout(this.scrollButtonShowTimeout); this.scrollButtonShowTimeout = setTimeout(() => { if (this.scrollChangedByUser) { if (!this.showScrollButton) { this.showScrollButton = true; } } else { if (this.showScrollButton && !this.unreadLoaderShow) { this.showScrollButton = false; } } }, 200); if (event.target.scrollTop === event.target.scrollHeight - event.target.offsetHeight) { clearTimeout(this.scrollButtonShowTimeout); if (this.showScrollButton && !this.unreadLoaderShow) { this.showScrollButton = false; } } }, scrollToBottom(params = {}) { let { force = false, cancelIfScrollChange = false, duration = null } = params; if (cancelIfScrollChange && this.scrollChangedByUser) { return false; } let body = this.$refs.body; if (this.dialog.counter > 0) { let scrollToMessageId = this.dialog.counter > 1 && this.firstUnreadMessageId? this.firstUnreadMessageId: this.lastMessageId; Utils.scrollToFirstUnreadMessage(this, this.collection, scrollToMessageId); if (this.dialog.counter < this.startMessageLimit) { this.historyLoaderShow = true; this.historyLoaderBlocked = false; } return true; } this.showScrollButton = false; if (force) { Utils.scrollToPosition(this, body.scrollHeight - body.clientHeight); if (this.messageExtraCount) { this.$store.commit('application/clearDialogExtraCount'); } this.historyLoaderShow = true; this.historyLoaderBlocked = false; } else { let scrollParams = {}; if (duration) { scrollParams.duration = duration; } this.scrollTo({ callback: () => { if (this.messageExtraCount) { this.$store.commit('application/clearDialogExtraCount'); } this.historyLoaderShow = true; this.historyLoaderBlocked = false; }, ...scrollParams }); } }, scrollTo(params = {}) { if (this.animateScrollId) { Animation.cancel(this.animateScrollId); this.scrollAnimating = false; } if (typeof params === 'function') { params = {callback: params}; } let body = this.$refs.body; if (!body) { if (params.callback && typeof params.callback === 'function') { params.callback(); } this.animateScrollId = null; this.scrollAnimating = false; return true; } if ( MessengerUtils.platform.isIos() && ( MessengerUtils.platform.getIosVersion() > 12 && MessengerUtils.platform.getIosVersion() < 13.2 ) ) { body.scrollTop = body.scrollHeight - body.clientHeight; return true; } let { start = body.scrollTop, end = body.scrollHeight - body.clientHeight, increment = 20, callback, duration = 500 } = params; let container = this.$refs.container; if (container && (end - start) > container.offsetHeight * 3) { start = end - container.offsetHeight * 3; Logger.warn('Dialog.scrollTo: Scroll trajectory has been reduced'); } this.scrollAnimating = true; Logger.warn('Dialog.scrollTo: User scroll blocked while scrolling'); this.animateScrollId = Animation.start({ start, end, increment, duration, element: body, elementProperty: 'scrollTop', callback: () => { this.animateScrollId = null; this.scrollAnimating = false; if (callback && typeof callback === 'function') { callback(); } }, }); }, onScrollToBottom(event = {}) { event.force = event.force === true; event.cancelIfScrollChange = event.cancelIfScrollChange === true; if (this.firstUnreadMessageId) { Logger.warn('Dialog.onScrollToBottom: canceled - unread messages'); return false; } this.scrollToBottom(event); return true; }, onOrientationChange(event = {}) { clearTimeout(this.scrollToTimeout); if (this.application.device.type !== DeviceType.mobile) { return false; } Logger.log('Orientation changed'); if (!this.scrollChangedByUser) { this.scrollToTimeout = setTimeout(() => this.scrollToBottom({force: true}), 300); } }, onWindowFocus(event = {}) { this.windowFocused = true; this.readMessage(); return true; }, onWindowBlur(event = {}) { this.windowFocused = false; }, requestHistory() { if (!this.requestHistoryBlockIntersect) { return false; } if (this.waitLoadHistory || !this.windowFocused || this.animateScrollId) { this.requestHistoryDelayed(); return false; } if ( this.scrollPositionChangeTime + 100 > new Date().getTime() // || this.$refs.body.scrollTop < 0 ) { this.requestHistoryDelayed(); return true; } this.waitLoadHistory = true; clearTimeout(this.waitLoadHistoryTimeout); this.waitLoadHistoryTimeout = setTimeout(() => { this.waitLoadHistory = false; }, 10000); let length = this.collection.length; let messageShowCount = this.messageShowCount; if (length > messageShowCount) { let element = this.$refs.body.getElementsByClassName(DialogReferenceClassName.listItem)[0]; this.$store.commit('application/increaseDialogExtraCount', {count: this.startMessageLimit}); Utils.scrollToElementAfterLoadHistory(this, element); return true; } this.$emit('requestHistory', {lastId: this.firstMessageId}); }, requestUnread() { if (!this.requestUnreadBlockIntersect) { return false; } if (this.waitLoadUnread || !this.windowFocused || this.animateScrollId) { this.requestUnreadDelayed(); return false; } if ( this.scrollPositionChangeTime + 10 > new Date().getTime() //|| this.$refs.body.scrollTop > this.$refs.body.scrollHeight - this.$refs.body.clientHeight ) { this.requestUnreadDelayed(); return true; } this.waitLoadUnread = true; this.skipUnreadScroll = true; this.$emit('requestUnread', {lastId: this.lastMessageId}); }, onRequestHistoryAnswer(event = {}) { if (event.error) { this.historyLoaderBlocked = false; } else { this.historyLoaderBlocked = event.count < this.startMessageLimit; this.$store.commit('application/increaseDialogExtraCount', {count: event.count}); } if (this.historyLoaderBlocked) { this.historyLoaderShow = false; } let element = this.$refs.body.getElementsByClassName(DialogReferenceClassName.listItem)[0]; if (event.count > 0) { if (element) { Utils.scrollToElementAfterLoadHistory(this, element); } } else if (event.error) { element.scrollIntoView(true); } else { Utils.scrollToPosition(this, 0); } clearTimeout(this.waitLoadHistoryTimeout); this.waitLoadHistoryTimeout = setTimeout(() => { this.waitLoadHistory = false; }, 1000); return true; }, onRequestUnreadAnswer(event = {}) { if (event.error) { this.historyLoaderBlocked = false; } else { if (event.count < this.startMessageLimit) { this.unreadLoaderShow = false; } this.$store.commit('application/increaseDialogExtraCount', {count: event.count}); } let body = this.$refs.body; if (event.count > 0) { } else if (event.error) { let element = this.$refs.body.getElementsByClassName(DialogReferenceClassName.listUnreadLoader)[0]; if (element) { Utils.scrollToPosition(this, body.scrollTop - element.offsetHeight*2); } else { Utils.scrollToPosition(this, body.scrollHeight - body.clientHeight); } } else { Utils.scrollToPosition(this, body.scrollHeight - body.clientHeight); } setTimeout(() => this.waitLoadUnread = false, 1000); return true; }, onSendReadMessages(event = {}) { this.readMessageDelayed(); return true; }, readMessage() { if (!this.windowFocused) { return false; } this.readMessageQueue = this.readMessageQueue.filter(messageId => { if (this.readMessageTarget[messageId]) { if (this.observers[ObserverType.read]) { this.observers[ObserverType.read].unobserve(this.readMessageTarget[messageId]); } delete this.readMessageTarget[messageId]; } this.requestReadMessage(messageId); return false; }); }, requestReadMessage(messageId) { this.$emit('readMessage', {id: messageId}); }, onClickByUserName(event) { if (!this.windowFocused) { return false; } this.$emit('clickByUserName', event) }, onClickByUploadCancel(event) { if (!this.windowFocused) { return false; } this.$emit('clickByUploadCancel', event) }, onClickByKeyboardButton(event) { if (!this.windowFocused) { return false; } this.$emit('clickByKeyboardButton', event) }, onClickByChatTeaser(event) { this.$emit('clickByChatTeaser', event) }, onClickByMessageMenu(event) { if (!this.windowFocused) { return false; } this.$emit('clickByMessageMenu', event) }, onClickByMessageRetry(event) { if (!this.windowFocused) { return false; } this.$emit('clickByMessageRetry', event) }, onClickByReadedList(event) { const readedList = this.dialog.readedList.filter(record => record.messageId === this.lastMessageId && record.userId !== this.lastMessageAuthorId); this.$emit('clickByReadedList', {list: readedList, event}) }, onMessageReactionSet(event) { this.$emit('setMessageReaction', event) }, onMessageReactionListOpen(event) { this.$emit('openMessageReactionList', event) }, onDragMessage(event) { if (!this.windowFocused) { return false; } this.captureMove = event.result; if (!event.result) { this.capturedMoveEvent = null; } }, onQuoteMessage(event) { if (!this.windowFocused) { return false; } this.$emit('quoteMessage', event) }, _getDateFormat() { if (this.dateFormatFunction) { return this.dateFormatFunction; } this.dateFormatFunction = Object.create(BX.Main.Date); if (this.$root.$bitrixMessages) { this.dateFormatFunction._getMessage = (phrase) => this.$root.$bitrixMessages[phrase]; } return this.dateFormatFunction; }, _groupTitle(date) { const id = Utils.getDateFormat(date); if (this.cacheGroupTitle[id]) { return { id: id, title: this.cacheGroupTitle[id] }; } let dateFormat = MessengerUtils.date.getFormatType( BX.Messenger.Const.DateFormat.groupTitle, this.$root.$bitrixMessages ); this.cacheGroupTitle[id] = this._getDateFormat().format(dateFormat, date); return { id: id, title: this.cacheGroupTitle[id] }; }, animationTrigger(type, start, element) { let templateId = element.dataset.templateId; let templateType = element.dataset.type; let body = this.$refs.body; if (!body || !templateId) { return false; } if (start) { if (!this.animationScrollHeightStart) { this.animationScrollHeightStart = body.scrollHeight; this.animationScrollHeightEnd = body.scrollHeight; this.animationScrollTop = body.scrollTop; this.animationScrollChange = 0; clearTimeout(this.scrollToTimeout); this.scrollChangedByUser = !(body.scrollTop + this.scrollButtonDiff >= body.scrollHeight - body.clientHeight); if (this.scrollChangedByUser && !this.showScrollButton && this.unreadCounter > 1) { this.showScrollButton = true; } } } else { this.animationScrollHeightEnd = body.scrollHeight; } if ( !this.collectionMutationType.applied && this.collectionMutationType.initialType !== MutationType.set ) { if (start) { this.animationCollection.push(templateId); } else { this.animationCollection = this.animationCollection.filter(id => { delete this.animationCollectionOffset[templateId]; return id !== templateId; }); } this.animationStart(); return false; } if ( !this.collectionMutationType.applied && this.collectionMutationType.initialType === MutationType.set && this.collectionMutationType.appliedType === MutationType.setBefore ) { let unreadId = Utils.getFirstUnreadMessage(this.collection); if (unreadId) { Utils.scrollToFirstUnreadMessage(this, this.collection, unreadId, true); return false; } Utils.scrollToPosition(this, body.scrollHeight - body.clientHeight); if (start) { this.animationCollection.push(templateId); } else { this.animationCollection = this.animationCollection.filter(id => { delete this.animationCollectionOffset[templateId]; return id !== templateId; }); } this.animationStart(); return false; } if (start) { if (type === AnimationType.leave) { this.animationCollectionOffset[templateId] = element.offsetHeight; } if (this.animationType === AnimationType.none) { this.animationType = type; } else if (this.animationType !== type) { this.animationType = AnimationType.mixed; } this.animationCollection.push(templateId); } else { if (type === AnimationType.enter) { let offset = element.offsetHeight; this.animationScrollChange += offset; body.scrollTop += offset; } else if (type === AnimationType.leave) { let offset = this.animationCollectionOffset[templateId]? this.animationCollectionOffset[templateId]: 0; this.animationScrollChange -= offset; body.scrollTop -= offset; this.animationScrollLastIsDelimeter = templateType !== TemplateType.message; } this.animationCollection = this.animationCollection.filter(id => { delete this.animationCollectionOffset[templateId]; return id !== templateId; }); } this.animationStart(); }, animationStart() { if (this.animationCollection.length > 0) { return false; } let body = this.$refs.body; if (this.animationType === AnimationType.leave) { let newScrollPosition = 0; // fix for chrome dom rendering: while delete node, scroll change immediately if (body.scrollTop !== this.animationScrollTop + this.animationScrollChange) { newScrollPosition = this.animationScrollTop + this.animationScrollChange } else { newScrollPosition = body.scrollTop; } // fix position if last element the same type of new element if (!this.animationScrollLastIsDelimeter) { newScrollPosition += this.templateMessageWithNameDifferent; } if (newScrollPosition !== body.scrollTop) { Utils.scrollToPosition(this, newScrollPosition); } } else if (this.animationType === AnimationType.mixed) { let unreadId = Utils.getFirstUnreadMessage(this.collection); if (unreadId) { Utils.scrollToFirstUnreadMessage(this, this.collection, unreadId, true); } } this.animationType = AnimationType.none; this.animationScrollHeightStart = 0; this.animationScrollHeightEnd = 0; this.animationScrollTop = 0; this.animationScrollChange = 0; if (Utils.scrollByMutationType(this)) { return false; } if (this.scrollChangedByUser) { Logger.warn('Dialog.animationStart: canceled: scroll changed by user'); return false; } if (this.unreadCounter > 0 && this.firstUnreadMessageId) { if (this.skipUnreadScroll) { this.skipUnreadScroll = false; return; } Utils.scrollToFirstUnreadMessage(this, this.collection, this.firstUnreadMessageId); return; } this.scrollTo(() => { if (this.unreadCounter <= 0 && this.messageExtraCount) { this.$store.commit('application/clearDialogExtraCount'); } }); }, }, directives: { 'bx-im-directive-dialog-observer': { inserted(element, bindings, vnode) { if (bindings.value === ObserverType.none) { return false; } if (!vnode.context.observers[bindings.value]) { vnode.context.observers[bindings.value] = Utils.getMessageLoaderObserver({ type: bindings.value, context: vnode.context }); } vnode.context.observers[bindings.value].observe(element); return true; }, unbind(element, bindings, vnode) { if (bindings.value === ObserverType.none) { return true; } if (vnode.context.observers[bindings.value]) { vnode.context.observers[bindings.value].unobserve(element); } return true; } }, }, template: ` <div class="bx-im-dialog" @click="onDialogClick" @touchmove="onDialogMove" ref="container"> <div :class="[DialogReferenceClassName.listBody, { 'bx-im-dialog-list-scroll-blocked': scrollBlocked, 'bx-im-dialog-dark-background': isDarkBackground, 'bx-im-dialog-mobile': isMobile, }]" @scroll.passive="onScroll" ref="body"> <template v-if="historyLoaderShow"> <div class="bx-im-dialog-load-more bx-im-dialog-load-more-history" v-bx-im-directive-dialog-observer="ObserverType.history"> <span class="bx-im-dialog-load-more-text">{{ localize.IM_MESSENGER_DIALOG_LOAD_MESSAGES }}</span> </div> </template> <transition-group tag="div" class="bx-im-dialog-list-box" name="bx-im-dialog-message-animation" @before-enter="animationTrigger(AnimationType.enter, true, $event)" @after-enter="animationTrigger(AnimationType.enter, false, $event)" @before-leave="animationTrigger(AnimationType.leave, true, $event)" @after-leave="animationTrigger(AnimationType.leave, false, $event)" > <template v-for="element in elementsWithLimit"> <template v-if="element.templateType == TemplateType.message"> <div :class="['bx-im-dialog-list-item', DialogReferenceClassName.listItem, DialogReferenceClassName.listItem+'-'+element.id]" :data-message-id="element.id" :data-template-id="element.templateId" :data-type="element.templateType" :key="element.templateId" v-bx-im-directive-dialog-observer="element.unread? ObserverType.read: ObserverType.none"> <component :is="element.params.COMPONENT_ID" :userId="userId" :dialogId="dialogId" :chatId="chatId" :dialog="dialog" :message="element" :enableReactions="enableReactions" :enableDateActions="enableDateActions" :enableCreateContent="showMessageMenu" :enableGestureQuote="enableGestureQuote" :enableGestureQuoteFromRight="enableGestureQuoteFromRight" :enableGestureMenu="enableGestureMenu" :showName="showMessageUserName" :showAvatar="showMessageAvatar" :showMenu="showMessageMenu" :capturedMoveEvent="capturedMoveEvent" :referenceContentClassName="DialogReferenceClassName.listItem" :referenceContentBodyClassName="DialogReferenceClassName.listItemBody" :referenceContentNameClassName="DialogReferenceClassName.listItemName" @clickByUserName="onClickByUserName" @clickByUploadCancel="onClickByUploadCancel" @clickByKeyboardButton="onClickByKeyboardButton" @clickByChatTeaser="onClickByChatTeaser" @clickByMessageMenu="onClickByMessageMenu" @clickByMessageRetry="onClickByMessageRetry" @setMessageReaction="onMessageReactionSet" @openMessageReactionList="onMessageReactionListOpen" @dragMessage="onDragMessage" @quoteMessage="onQuoteMessage" /> </div> </template> <template v-else-if="element.templateType == TemplateType.group"> <div class="bx-im-dialog-group" :data-template-id="element.templateId" :data-type="element.templateType" :key="element.templateId"> <div class="bx-im-dialog-group-date">{{ element.text }}</div> </div> </template> <template v-else-if="element.templateType == TemplateType.delimiter"> <div class="bx-im-dialog-delimiter" :data-template-id="element.templateId" :data-type="element.templateType" :key="element.templateId"></div> </template> </template> </transition-group> <template v-if="unreadLoaderShow"> <div :class="['bx-im-dialog-load-more', 'bx-im-dialog-load-more-unread', DialogReferenceClassName.listUnreadLoader]" v-bx-im-directive-dialog-observer="ObserverType.unread"> <span class="bx-im-dialog-load-more-text">{{ localize.IM_MESSENGER_DIALOG_LOAD_MESSAGES }}</span> </div> </template> <transition name="bx-im-dialog-status"> <template v-if="statusWriting"> <div class="bx-im-dialog-status"> <span class="bx-im-dialog-status-writing"></span> {{ statusWriting }} </div> </template> <template v-else-if="statusReaded"> <div class="bx-im-dialog-status" @click="onClickByReadedList"> {{ statusReaded }} </div> </template> </transition> </div> <transition name="bx-im-dialog-scroll-button"> <div v-show="showScrollButton || unreadLoaderShow && unreadCounter" class="bx-im-dialog-scroll-button-box" @click="scrollToBottom()"> <div class="bx-im-dialog-scroll-button"> <div v-show="unreadCounter" class="bx-im-dialog-scroll-button-counter"> <div class="bx-im-dialog-scroll-button-counter-digit">{{unreadCounter}}</div> </div> <div class="bx-im-dialog-scroll-button-arrow"></div> </div> </div> </transition> </div> ` }); const Utils = { getDateFormat(date) { return date.toJSON().slice(0,10); }, scrollToMessage(context, collection, messageId = 0, force = false, stickToTop = true) { let body = context.$refs.body; let element = body.getElementsByClassName(DialogReferenceClassName.listItem+'-'+messageId)[0]; let end = 0; if (!element) { if (stickToTop) { end = 10; } else { end = body.scrollHeight - body.clientHeight; } } else if (stickToTop) { end = element.offsetTop - (context.templateMessageScrollOffset/2); } else { end = element.offsetTop + element.offsetHeight - body.clientHeight + (context.templateMessageScrollOffset/2); } if (force) { this.scrollToPosition(context, end); } else { context.scrollTo({end}); } return true; }, getFirstUnreadMessage(collection) { let unreadId = null; for (let index = collection.length-1; index >= 0; index--) { if (!collection[index].unread) { break; } unreadId = collection[index].id; } return unreadId; }, scrollToPosition(context, position) { let body = context.$refs.body; if (!body) { return false; } if (context.animateScrollId) { Animation.cancel(context.animateScrollId); this.scrollAnimating = false; context.animateScrollId = null; } body.scrollTop = position; }, scrollByMutationType(context) { if ( context.collectionMutationType.applied || context.collectionMutationType.initialType !== MutationType.set) { return false; } context.$store.dispatch('messages/applyMutationType', {chatId: context.chatId}); if (context.collectionMutationType.appliedType === MutationType.setBefore) { let body = context.$refs.body; this.scrollToPosition(context, body.scrollHeight - body.clientHeight); return true; } if (context.collectionMutationType.scrollMessageId > 0) { let unreadId = Utils.getFirstUnreadMessage(context.collection); let toMessageId = context.collectionMutationType.scrollMessageId; let force = !context.collectionMutationType.scrollStickToTop; let stickToTop = context.collectionMutationType.scrollStickToTop; if (unreadId && toMessageId > unreadId) { stickToTop = true; force = true; toMessageId = unreadId; unreadId = null; } Utils.scrollToMessage(context, context.collection, toMessageId, force, stickToTop); if (unreadId) { Utils.scrollToMessage(context, context.collection, unreadId); return true; } } return false; }, scrollToFirstUnreadMessage(context, collection, unreadId = null, force = false) { let body = context.$refs.body; let element = false; if (unreadId !== null) { element = body.getElementsByClassName(DialogReferenceClassName.listItem+'-'+unreadId)[0]; } if (!element) { unreadId = this.getFirstUnreadMessage(collection); } this.scrollToMessage(context, collection, unreadId, force); }, scrollToElementAfterLoadHistory(context, element) { let elementBody = element.getElementsByClassName(DialogReferenceClassName.listItemBody)[0]; if (elementBody) { element = elementBody; } let previousOffsetTop = element.getBoundingClientRect().top; context.$nextTick(() => { clearTimeout(context.waitLoadHistoryTimeout); context.waitLoadHistoryTimeout = setTimeout(() => { context.waitLoadHistory = false; }, 1000); if (!element) { return false; } this.scrollToPosition(context, element.getBoundingClientRect().top - previousOffsetTop); }); }, scrollToElementAfterLoadUnread(context, firstMessageId = 0) { context.showScrollButton = true; if (firstMessageId) { this.scrollToMessage(context, context.collection, firstMessageId, false, false); } }, getMessageLoaderObserver(config) { if ( typeof window.IntersectionObserver === 'undefined' || config.value === ObserverType.none ) { return { observe: () => {}, unobserve: () => {} }; } let observerCallback, observerOptions; if (config.type === ObserverType.read) { observerCallback = function (entries, observer) { entries.forEach(function(entry) { let sendReadEvent = false; if (entry.isIntersecting) { if (entry.intersectionRatio >= 1) { sendReadEvent = true; } else if ( entry.intersectionRatio > 0 && entry.rootBounds.height < entry.boundingClientRect.height + 20 && entry.intersectionRect.height > entry.rootBounds.height / 2 ) { sendReadEvent = true; } } if (sendReadEvent) { config.context.readMessageQueue.push(entry.target.dataset.messageId); config.context.readMessageTarget[entry.target.dataset.messageId] = entry.target; } else { config.context.readMessageQueue = config.context.readMessageQueue.filter(messageId => messageId !== entry.target.dataset.messageId); delete config.context.readMessageTarget[entry.target.dataset.messageId]; } if (config.context.enableReadMessages) { config.context.readMessageDelayed(); } }); }; observerOptions = { root: config.context.$refs.body, threshold: new Array(101).fill(0).map((zero, index) => index * 0.01) }; } else { observerCallback = function (entries, observer) { entries.forEach(function(entry) { if (entry.isIntersecting) { if (config.type === ObserverType.unread) { config.context.requestUnreadBlockIntersect = true; config.context.requestUnreadDelayed(); } else { config.context.requestHistoryBlockIntersect = true; config.context.requestHistoryDelayed(); } } else { if (config.type === ObserverType.unread) { config.context.requestUnreadBlockIntersect = false; } else { config.context.requestHistoryBlockIntersect = false; } } }); }; observerOptions = { root: config.context.$refs.body, threshold: [0, 0.01, 0.99, 1] }; } return new IntersectionObserver(observerCallback, observerOptions); } }; const Blocks = { getDelimiter(id = 0) { return { templateId: 'delimiter'+id, templateType: TemplateType.delimiter }; }, getGroup(id = 0, text = '') { return { templateId: 'group'+id, templateType: TemplateType.group, text: text }; }, getHistoryLoader() { return { templateId: 'historyLoader', templateType: TemplateType.historyLoader, }; }, getUnreadLoader() { return { templateId: 'unreadLoader', templateType: TemplateType.unreadLoader, }; }, getLoadButton(id = 0, text = '', type = LoadButtonTypes.before) { return { templateId: 'loadButton'+id+type, templateType: TemplateType.button, text: text, type: type, messageId: id }; } }; dialog/dist/dialog.bundle.js.map 0000664 00000270713 14774417471 0012623 0 ustar 00 {"version":3,"file":"dialog.bundle.js","sources":["../src/dialog.js"],"sourcesContent":["/**\n * Bitrix Messenger\n * Dialog Vue component\n *\n * @package bitrix\n * @subpackage im\n * @copyright 2001-2019 Bitrix\n */\n\nimport './dialog.css';\nimport 'main.polyfill.intersectionobserver';\nimport {Vue} from 'ui.vue';\nimport {Vuex} from 'ui.vue.vuex';\nimport 'im.view.message';\nimport {DeviceType, MutationType, DialogReferenceClassName, DialogType} from \"im.const\";\nimport {Utils as MessengerUtils} from \"im.lib.utils\";\nimport {Animation} from \"im.lib.animation\";\nimport {Logger} from \"im.lib.logger\";\n\nconst TemplateType = Object.freeze({\n\tmessage: 'message',\n\tdelimiter: 'delimiter',\n\tgroup: 'group',\n\thistoryLoader: 'historyLoader',\n\tunreadLoader: 'unreadLoader',\n\tbutton: 'button',\n});\n\nconst ObserverType = Object.freeze({\n\thistory: 'history',\n\tunread: 'unread',\n\tread: 'read',\n\tnone: 'none',\n});\n\nconst LoadButtonTypes = Object.freeze({\n\tbefore: 'before',\n\tafter: 'after'\n});\n\nconst AnimationType = Object.freeze({\n\tnone: 'none',\n\tmixed: 'mixed',\n\tenter: 'enter',\n\tleave: 'leave',\n});\n\nVue.component('bx-im-view-dialog',\n{\n\t/**\n\t * @emits 'requestHistory' {lastId: number, limit: number}\n\t * @emits 'requestUnread' {lastId: number, limit: number}\n\t * @emits 'readMessage' {id: number}\n\t * @emits 'quoteMessage' {message: object}\n\t * @emits 'click' {event: MouseEvent}\n\t * @emits 'clickByUserName' {user: object, event: MouseEvent}\n\t * @emits 'clickByUploadCancel' {file: object, event: MouseEvent}\n\t * @emits 'clickByKeyboardButton' {message: object, action: string, params: Object}\n\t * @emits 'clickByChatTeaser' {message: object, event: MouseEvent}\n\t * @emits 'clickByMessageMenu' {message: object, event: MouseEvent}\n\t * @emits 'clickByCommand' {type: string, value: string, event: MouseEvent}\n\t * @emits 'clickByMention' {type: string, value: string, event: MouseEvent}\n\t * @emits 'clickByMessageRetry' {message: object, event: MouseEvent}\n\t * @emits 'clickByReadedList' {list: array, event: MouseEvent}\n\t * @emits 'setMessageReaction' {message: object, reaction: object}\n\t * @emits 'openMessageReactionList' {message: object, values: object}\n\t */\n\n\t/**\n\t * @listens props.listenEventScrollToBottom {force:boolean, cancelIfScrollChange:boolean} (global|application) -- scroll dialog to bottom, see more in methods.onScrollToBottom()\n\t * @listens props.listenEventRequestHistory {count:number} (application)\n\t * @listens props.listenEventRequestUnread {count:number} (application)\n\t * @listens props.listenEventSendReadMessages {} (application)\n\t */\n\tprops:\n\t{\n\t\tuserId: { default: 0 },\n\t\tdialogId: { default: 0 },\n\t\tchatId: { default: 0 },\n\t\tmessageLimit: { default: 20 },\n\t\tmessageExtraCount: { default: 0 },\n\t\tlistenEventScrollToBottom: { default: '' },\n\t\tlistenEventRequestHistory: { default: '' },\n\t\tlistenEventRequestUnread: { default: '' },\n\t\tlistenEventSendReadMessages: { default: '' },\n\t\tenableReadMessages: { default: true },\n\t\tenableReactions: { default: true },\n\t\tenableDateActions: { default: true },\n\t\tenableCreateContent: { default: true },\n\t\tenableGestureQuote: { default: true },\n\t\tenableGestureQuoteFromRight: { default: true },\n\t\tenableGestureMenu: { default: false },\n\t\tshowMessageUserName: { default: true },\n\t\tshowMessageAvatar: { default: true },\n\t\tshowMessageMenu: { default: true },\n\t},\n\tdata()\n\t{\n\t\treturn {\n\t\t\tscrollAnimating: false,\n\t\t\tshowScrollButton: false,\n\t\t\tmessageShowCount: 0,\n\t\t\tunreadLoaderShow: false,\n\t\t\thistoryLoaderBlocked: false,\n\t\t\thistoryLoaderShow: true,\n\t\t\tstartMessageLimit: 0,\n\t\t\ttemplateMessageScrollOffset: 20,\n\t\t\ttemplateMessageWithNameDifferent: 29, // name block + padding top\n\t\t\tTemplateType: TemplateType,\n\t\t\tObserverType: ObserverType,\n\t\t\tDialogReferenceClassName: DialogReferenceClassName,\n\t\t\tcaptureMove: false,\n\t\t\tcapturedMoveEvent: null,\n\t\t\tlastMessageId: null,\n\t\t\tmaxMessageId: null,\n\t\t}\n\t},\n\tcreated()\n\t{\n\t\tthis.showScrollButton = this.unreadCounter > 0;\n\n\t\tthis.scrollChangedByUser = false;\n\t\tthis.scrollButtonDiff = 100;\n\t\tthis.scrollButtonShowTimeout = null;\n\t\tthis.scrollPosition = 0;\n\t\tthis.scrollPositionChangeTime = new Date().getTime();\n\n\t\tthis.animationScrollHeightStart = 0;\n\t\tthis.animationScrollHeightEnd = 0;\n\t\tthis.animationScrollTop = 0;\n\t\tthis.animationScrollChange = 0;\n\t\tthis.animationScrollLastUserId = 0;\n\t\tthis.animationType = AnimationType.none;\n\t\tthis.animationCollection = [];\n\t\tthis.animationCollectionOffset = {};\n\t\tthis.animationLastElementBeforeStart = 0;\n\n\t\tthis.observers = {};\n\n\t\tthis.requestHistoryInterval = null;\n\t\tthis.requestUnreadInterval = null;\n\n\t\tthis.lastAuthorId = 0;\n\t\tthis.firstMessageId = null;\n\t\tthis.firstUnreadMessageId = null;\n\t\tthis.dateFormatFunction = null;\n\t\tthis.cacheGroupTitle = {};\n\n\t\tthis.waitLoadHistory = false;\n\t\tthis.waitLoadUnread = false;\n\t\tthis.skipUnreadScroll = false;\n\n\t\tthis.readMessageQueue = [];\n\t\tthis.readMessageTarget = {};\n\t\tthis.readMessageDelayed = MessengerUtils.debounce(this.readMessage, 50, this);\n\n\t\tthis.requestHistoryBlockIntersect = false;\n\t\tthis.requestHistoryDelayed = MessengerUtils.debounce(this.requestHistory, 50, this);\n\n\t\tthis.requestUnreadBlockIntersect = false;\n\t\tthis.requestUnreadDelayed = MessengerUtils.debounce(this.requestUnread, 50, this);\n\n\t\tthis.startMessageLimit = this.messageLimit;\n\n\t\tif (this.listenEventScrollToBottom)\n\t\t{\n\t\t\tVue.event.$on(this.listenEventScrollToBottom, this.onScrollToBottom);\n\t\t\tthis.$root.$on(this.listenEventScrollToBottom, this.onScrollToBottom);\n\t\t}\n\t\tif (this.listenEventRequestHistory)\n\t\t{\n\t\t\tVue.event.$on(this.listenEventRequestHistory, this.onRequestHistoryAnswer);\n\t\t\tthis.$root.$on(this.listenEventRequestHistory, this.onRequestHistoryAnswer);\n\t\t}\n\t\tif (this.listenEventRequestUnread)\n\t\t{\n\t\t\tVue.event.$on(this.listenEventRequestUnread, this.onRequestUnreadAnswer);\n\t\t\tthis.$root.$on(this.listenEventRequestUnread, this.onRequestUnreadAnswer);\n\t\t}\n\t\tif (this.listenEventSendReadMessages)\n\t\t{\n\t\t\tVue.event.$on(this.listenEventSendReadMessages, this.onSendReadMessages);\n\t\t\tthis.$root.$on(this.listenEventSendReadMessages, this.onSendReadMessages);\n\t\t}\n\n\t\twindow.addEventListener(\"orientationchange\", this.onOrientationChange);\n\t\twindow.addEventListener('focus', this.onWindowFocus);\n\t\twindow.addEventListener('blur', this.onWindowBlur);\n\n\t\tVue.event.$on('bitrixmobile:controller:focus', this.onWindowFocus);\n\t\tVue.event.$on('bitrixmobile:controller:blur', this.onWindowBlur);\n\t},\n\tbeforeDestroy()\n\t{\n\t\tthis.observers = {};\n\n\t\tclearTimeout(this.scrollButtonShowTimeout);\n\t\tclearInterval(this.requestHistoryInterval);\n\t\tclearInterval(this.requestUnreadInterval);\n\n\t\tif (this.listenEventScrollToBottom)\n\t\t{\n\t\t\tVue.event.$off(this.listenEventScrollToBottom, this.onScrollToBottom);\n\t\t\tthis.$root.$off(this.listenEventScrollToBottom, this.onScrollToBottom);\n\t\t}\n\t\tif (this.listenEventRequestHistory)\n\t\t{\n\t\t\tVue.event.$off(this.listenEventRequestHistory, this.onRequestHistoryAnswer);\n\t\t\tthis.$root.$off(this.listenEventRequestHistory, this.onRequestHistoryAnswer);\n\t\t}\n\t\tif (this.listenEventRequestUnread)\n\t\t{\n\t\t\tVue.event.$off(this.listenEventRequestUnread, this.onRequestUnreadAnswer);\n\t\t\tthis.$root.$off(this.listenEventRequestUnread, this.onRequestUnreadAnswer);\n\t\t}\n\t\tif (this.listenEventSendReadMessages)\n\t\t{\n\t\t\tVue.event.$off(this.listenEventSendReadMessages, this.onSendReadMessages);\n\t\t\tthis.$root.$off(this.listenEventSendReadMessages, this.onSendReadMessages);\n\t\t}\n\n\t\twindow.removeEventListener(\"orientationchange\", this.onOrientationChange);\n\t\twindow.removeEventListener('focus', this.onWindowFocus);\n\t\twindow.removeEventListener('blur', this.onWindowBlur);\n\n\t\tVue.event.$off('bitrixmobile:controller:focus', this.onWindowFocus);\n\t\tVue.event.$off('bitrixmobile:controller:blur', this.onWindowBlur);\n\t},\n\tmounted()\n\t{\n\t\tlet unreadId = Utils.getFirstUnreadMessage(this.collection);\n\t\tif (unreadId)\n\t\t{\n\t\t\tUtils.scrollToFirstUnreadMessage(this, this.collection, unreadId, true)\n\t\t}\n\t\telse\n\t\t{\n\t\t\tlet body = this.$refs.body;\n\t\t\tUtils.scrollToPosition(this, body.scrollHeight - body.clientHeight);\n\t\t}\n\t\tthis.windowFocused = MessengerUtils.platform.isBitrixMobile()? true: document.hasFocus();\n\t},\n\tcomputed:\n\t{\n\t\tlocalize()\n\t\t{\n\t\t\treturn Vue.getFilteredPhrases('IM_MESSENGER_DIALOG_', this.$root.$bitrixMessages);\n\t\t},\n\t\tdialog()\n\t\t{\n\t\t\tlet dialog = this.$store.getters['dialogues/get'](this.dialogId);\n\t\t\treturn dialog? dialog: this.$store.getters['dialogues/getBlank']();\n\t\t},\n\t\tcollectionMutationType()\n\t\t{\n\t\t\treturn this.$store.getters['messages/getMutationType'](this.chatId);\n\t\t},\n\t\tcollection()\n\t\t{\n\t\t\treturn this.$store.getters['messages/get'](this.chatId);\n\t\t},\n\t\telementsWithLimit()\n\t\t{\n\t\t\tlet unreadCount = this.collection.filter(element => element.unread).length;\n\t\t\tlet showLimit = this.messageExtraCount + this.messageLimit * 2;\n\t\t\tif (unreadCount > showLimit)\n\t\t\t{\n\t\t\t\tshowLimit = unreadCount;\n\t\t\t}\n\n\t\t\tlet start = this.collection.length - showLimit;\n\t\t\tif (!this.historyLoaderShow || start < 0)\n\t\t\t{\n\t\t\t\tstart = 0;\n\t\t\t}\n\n\t\t\tlet slicedCollection = start === 0? this.collection: this.collection.slice(start, this.collection.length);\n\t\t\tthis.messageShowCount = slicedCollection.length;\n\n\t\t\tthis.firstMessageId = null;\n\t\t\tthis.lastMessageId = 0;\n\t\t\tthis.maxMessageId = 0;\n\t\t\tthis.lastMessageAuthorId = 0;\n\n\t\t\tlet collection = [];\n\t\t\tlet lastAuthorId = 0;\n\t\t\tlet groupNode = {};\n\n\t\t\tthis.firstUnreadMessageId = 0;\n\t\t\tlet unreadCountInSlicedCollection = 0;\n\n\t\t\tif (this.messageShowCount > 0)\n\t\t\t{\n\t\t\t\tslicedCollection.forEach(element =>\n\t\t\t\t{\n\t\t\t\t\tif (this.firstMessageId === null || this.firstMessageId > element.id)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.firstMessageId = element.id;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.maxMessageId < element.id)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.maxMessageId = element.id;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.lastMessageId = element.id;\n\n\t\t\t\t\tlet group = this._groupTitle(element.date);\n\t\t\t\t\tif (!groupNode[group.title])\n\t\t\t\t\t{\n\t\t\t\t\t\tgroupNode[group.title] = group.id;\n\t\t\t\t\t\tcollection.push(Blocks.getGroup(group.id, group.title));\n\t\t\t\t\t}\n\t\t\t\t\telse if (lastAuthorId !== element.authorId)\n\t\t\t\t\t{\n\t\t\t\t\t\tcollection.push(Blocks.getDelimiter(element.id));\n\t\t\t\t\t}\n\n\t\t\t\t\tcollection.push(element);\n\n\t\t\t\t\tlastAuthorId = element.authorId;\n\n\t\t\t\t\tif (element.unread)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (!this.firstUnreadMessageId)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.firstUnreadMessageId = element.id;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tunreadCountInSlicedCollection++;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis.lastMessageAuthorId = lastAuthorId;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.firstMessageId = 0;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tthis.collection.length >= this.messageLimit\n\t\t\t\t&& this.collection.length >= this.messageShowCount\n\t\t\t\t&& this.historyLoaderBlocked === false\n\t\t\t)\n\t\t\t{\n\t\t\t\tthis.historyLoaderShow = true;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.historyLoaderShow = false;\n\t\t\t}\n\n\t\t\tif (this.dialog.unreadLastId > this.maxMessageId)\n\t\t\t{\n\t\t\t\tthis.unreadLoaderShow = true;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.unreadLoaderShow = false;\n\t\t\t}\n\n\t\t\treturn collection;\n\t\t},\n\t\tstatusWriting()\n\t\t{\n\t\t\tclearTimeout(this.scrollToTimeout);\n\n\t\t\tif (this.dialog.writingList.length === 0)\n\t\t\t{\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tif (!this.scrollChangedByUser && !this.showScrollButton)\n\t\t\t{\n\t\t\t\tthis.scrollToTimeout = setTimeout(() => this.scrollTo({duration: 500}), 300);\n\t\t\t}\n\n\t\t\treturn this.localize.IM_MESSENGER_DIALOG_WRITES_MESSAGE.replace(\n\t\t\t\t'#USER#', this.dialog.writingList.map(element => element.userName).join(', ')\n\t\t\t);\n\t\t},\n\t\tstatusReaded()\n\t\t{\n\t\t\tclearTimeout(this.scrollToTimeout);\n\n\t\t\tif (this.dialog.readedList.length === 0)\n\t\t\t{\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tlet text = '';\n\n\t\t\tif (this.dialog.type === DialogType.private)\n\t\t\t{\n\t\t\t\tlet record = this.dialog.readedList[0];\n\t\t\t\tif (\n\t\t\t\t\trecord.messageId === this.lastMessageId\n\t\t\t\t\t&& record.userId !== this.lastMessageAuthorId\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\tlet dateFormat = MessengerUtils.date.getFormatType(\n\t\t\t\t\t\tBX.Messenger.Const.DateFormat.readedTitle,\n\t\t\t\t\t\tthis.$root.$bitrixMessages\n\t\t\t\t\t);\n\n\t\t\t\t\ttext = this.localize.IM_MESSENGER_DIALOG_MESSAGES_READED_USER.replace(\n\t\t\t\t\t\t'#DATE#', this._getDateFormat().format(dateFormat, record.date)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tlet readedList = this.dialog.readedList.filter(record => record.messageId === this.lastMessageId && record.userId !== this.lastMessageAuthorId);\n\t\t\t\tif (readedList.length === 1)\n\t\t\t\t{\n\t\t\t\t\ttext = this.localize.IM_MESSENGER_DIALOG_MESSAGES_READED_CHAT.replace(\n\t\t\t\t\t\t'#USERS#', readedList[0].userName\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\telse if (readedList.length > 1)\n\t\t\t\t{\n\t\t\t\t\ttext = this.localize.IM_MESSENGER_DIALOG_MESSAGES_READED_CHAT.replace(\n\t\t\t\t\t\t'#USERS#',\n\t\t\t\t\t\tthis.localize.IM_MESSENGER_DIALOG_MESSAGES_READED_CHAT_PLURAL\n\t\t\t\t\t\t\t\t.replace('#USER#', readedList[0].userName)\n\t\t\t\t\t\t\t\t.replace('#COUNT#', readedList.length-1)\n\t\t\t\t\t\t\t\t.replace('[LINK]', '')\n\t\t\t\t\t\t\t\t.replace('[/LINK]', '')\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!text)\n\t\t\t{\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tif (!this.scrollChangedByUser && !this.showScrollButton)\n\t\t\t{\n\t\t\t\tthis.scrollToTimeout = setTimeout(() => this.scrollTo({duration: 500}), 300);\n\t\t\t}\n\n\t\t\treturn text;\n\t\t},\n\t\tunreadCounter()\n\t\t{\n\t\t\treturn this.dialog.counter > 999? 999: this.dialog.counter;\n\t\t},\n\t\tscrollBlocked()\n\t\t{\n\t\t\tif (this.application.device.type !== DeviceType.mobile)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn this.scrollAnimating || this.captureMove;\n\t\t},\n\t\tisDarkBackground()\n\t\t{\n\t\t\treturn this.application.options.darkBackground;\n\t\t},\n\t\tisMobile()\n\t\t{\n\t\t\treturn this.application.device.type === DeviceType.mobile;\n\t\t},\n\n\t\tAnimationType: () => AnimationType,\n\n\t\t...Vuex.mapState({\n\t\t\tapplication: state => state.application,\n\t\t})\n\t},\n\tmethods:\n\t{\n\t\tonDialogClick(event)\n\t\t{\n\t\t\tif (Vue.testNode(event.target, {className: 'bx-im-message-command'}))\n\t\t\t{\n\t\t\t\tthis.onCommandClick(event);\n\t\t\t}\n\t\t\telse if (Vue.testNode(event.target, {className: 'bx-im-mention'}))\n\t\t\t{\n\t\t\t\tthis.onMentionClick(event);\n\t\t\t}\n\n\t\t\tthis.windowFocused = true;\n\t\t\tthis.$emit('click', {event});\n\t\t},\n\t\tonDialogMove(event)\n\t\t{\n\t\t\tif (!this.captureMove)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.capturedMoveEvent = event;\n\t\t},\n\t\tonCommandClick(event)\n\t\t{\n\t\t\tlet value = '';\n\n\t\t\tif (\n\t\t\t\tevent.target.dataset.entity === 'send'\n\t\t\t\t|| event.target.dataset.entity === 'put'\n\t\t\t)\n\t\t\t{\n\t\t\t\tvalue = event.target.nextSibling.innerHTML;\n\t\t\t}\n\t\t\telse if (event.target.dataset.entity === 'call')\n\t\t\t{\n\t\t\t\tvalue = event.target.dataset.command;\n\t\t\t}\n\n\t\t\tthis.$emit('clickByCommand', {type: event.target.dataset.entity, value, event});\n\t\t},\n\t\tonMentionClick(event)\n\t\t{\n\t\t\tthis.$emit('clickByMention', {type: event.target.dataset.type, value: event.target.dataset.value, event});\n\t\t},\n\t\tonScroll(event)\n\t\t{\n\t\t\tclearTimeout(this.scrollToTimeout);\n\n\t\t\tthis.scrollPosition = event.target.scrollTop;\n\t\t\tthis.scrollPositionChangeTime = new Date().getTime();\n\n\t\t\tthis.scrollChangedByUser = !(event.target.scrollTop + this.scrollButtonDiff >= event.target.scrollHeight - event.target.clientHeight);\n\n\t\t\tclearTimeout(this.scrollButtonShowTimeout);\n\t\t\tthis.scrollButtonShowTimeout = setTimeout(() =>\n\t\t\t{\n\t\t\t\tif (this.scrollChangedByUser)\n\t\t\t\t{\n\t\t\t\t\tif (!this.showScrollButton)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.showScrollButton = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif (this.showScrollButton && !this.unreadLoaderShow)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.showScrollButton = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, 200);\n\n\t\t\tif (event.target.scrollTop === event.target.scrollHeight - event.target.offsetHeight)\n\t\t\t{\n\t\t\t\tclearTimeout(this.scrollButtonShowTimeout);\n\n\t\t\t\tif (this.showScrollButton && !this.unreadLoaderShow)\n\t\t\t\t{\n\t\t\t\t\tthis.showScrollButton = false;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tscrollToBottom(params = {})\n\t\t{\n\t\t\tlet {\n\t\t\t\tforce = false,\n\t\t\t\tcancelIfScrollChange = false,\n\t\t\t\tduration = null\n\t\t\t} = params;\n\n\t\t\tif (cancelIfScrollChange && this.scrollChangedByUser)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tlet body = this.$refs.body;\n\n\t\t\tif (this.dialog.counter > 0)\n\t\t\t{\n\t\t\t\tlet scrollToMessageId = this.dialog.counter > 1 && this.firstUnreadMessageId? this.firstUnreadMessageId: this.lastMessageId;\n\t\t\t\tUtils.scrollToFirstUnreadMessage(this, this.collection, scrollToMessageId);\n\n\t\t\t\tif (this.dialog.counter < this.startMessageLimit)\n\t\t\t\t{\n\t\t\t\t\tthis.historyLoaderShow = true;\n\t\t\t\t\tthis.historyLoaderBlocked = false;\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tthis.showScrollButton = false;\n\n\t\t\tif (force)\n\t\t\t{\n\t\t\t\tUtils.scrollToPosition(this, body.scrollHeight - body.clientHeight);\n\n\t\t\t\tif (this.messageExtraCount)\n\t\t\t\t{\n\t\t\t\t\tthis.$store.commit('application/clearDialogExtraCount');\n\t\t\t\t}\n\t\t\t\tthis.historyLoaderShow = true;\n\t\t\t\tthis.historyLoaderBlocked = false;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tlet scrollParams = {};\n\t\t\t\tif (duration)\n\t\t\t\t{\n\t\t\t\t\tscrollParams.duration = duration;\n\t\t\t\t}\n\t\t\t\tthis.scrollTo({\n\t\t\t\t\tcallback: () => {\n\t\t\t\t\t\tif (this.messageExtraCount)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.$store.commit('application/clearDialogExtraCount');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.historyLoaderShow = true;\n\t\t\t\t\t\tthis.historyLoaderBlocked = false;\n\t\t\t\t\t},\n\t\t\t\t\t...scrollParams\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\tscrollTo(params = {})\n\t\t{\n\t\t\tif (this.animateScrollId)\n\t\t\t{\n\t\t\t\tAnimation.cancel(this.animateScrollId);\n\t\t\t\tthis.scrollAnimating = false;\n\t\t\t}\n\t\t\tif (typeof params === 'function')\n\t\t\t{\n\t\t\t\tparams = {callback: params};\n\t\t\t}\n\n\t\t\tlet body = this.$refs.body;\n\t\t\tif (!body)\n\t\t\t{\n\t\t\t\tif (params.callback && typeof params.callback === 'function')\n\t\t\t\t{\n\t\t\t\t\tparams.callback();\n\t\t\t\t}\n\t\t\t\tthis.animateScrollId = null;\n\t\t\t\tthis.scrollAnimating = false;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tMessengerUtils.platform.isIos() && (\n\t\t\t\t\tMessengerUtils.platform.getIosVersion() > 12\n\t\t\t\t\t&& MessengerUtils.platform.getIosVersion() < 13.2\n\t\t\t\t)\n\t\t\t)\n\t\t\t{\n\t\t\t\tbody.scrollTop = body.scrollHeight - body.clientHeight;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tlet {\n\t\t\t\tstart = body.scrollTop,\n\t\t\t\tend = body.scrollHeight - body.clientHeight,\n\t\t\t\tincrement = 20,\n\t\t\t\tcallback,\n\t\t\t\tduration = 500\n\t\t\t} = params;\n\n\t\t\tlet container = this.$refs.container;\n\n\t\t\tif (container && (end - start) > container.offsetHeight * 3)\n\t\t\t{\n\t\t\t\tstart = end - container.offsetHeight * 3;\n\t\t\t\tLogger.warn('Dialog.scrollTo: Scroll trajectory has been reduced');\n\t\t\t}\n\n\t\t\tthis.scrollAnimating = true;\n\t\t\tLogger.warn('Dialog.scrollTo: User scroll blocked while scrolling');\n\n\t\t\tthis.animateScrollId = Animation.start({\n\t\t\t\tstart,\n\t\t\t\tend,\n\t\t\t\tincrement,\n\t\t\t\tduration,\n\n\t\t\t\telement: body,\n\t\t\t\telementProperty: 'scrollTop',\n\n\t\t\t\tcallback: () =>\n\t\t\t\t{\n\t\t\t\t\tthis.animateScrollId = null;\n\t\t\t\t\tthis.scrollAnimating = false;\n\t\t\t\t\tif (callback && typeof callback === 'function')\n\t\t\t\t\t{\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t\tonScrollToBottom(event = {})\n\t\t{\n\t\t\tevent.force = event.force === true;\n\t\t\tevent.cancelIfScrollChange = event.cancelIfScrollChange === true;\n\n\t\t\tif (this.firstUnreadMessageId)\n\t\t\t{\n\t\t\t\tLogger.warn('Dialog.onScrollToBottom: canceled - unread messages');\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis.scrollToBottom(event);\n\n\t\t\treturn true;\n\t\t},\n\t\tonOrientationChange(event = {})\n\t\t{\n\t\t\tclearTimeout(this.scrollToTimeout);\n\n\t\t\tif (this.application.device.type !== DeviceType.mobile)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tLogger.log('Orientation changed');\n\n\t\t\tif (!this.scrollChangedByUser)\n\t\t\t{\n\t\t\t\tthis.scrollToTimeout = setTimeout(() => this.scrollToBottom({force: true}), 300);\n\t\t\t}\n\t\t},\n\t\tonWindowFocus(event = {})\n\t\t{\n\t\t\tthis.windowFocused = true;\n\t\t\tthis.readMessage();\n\n\t\t\treturn true;\n\t\t},\n\t\tonWindowBlur(event = {})\n\t\t{\n\t\t\tthis.windowFocused = false;\n\t\t},\n\t\trequestHistory()\n\t\t{\n\t\t\tif (!this.requestHistoryBlockIntersect)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (this.waitLoadHistory || !this.windowFocused || this.animateScrollId)\n\t\t\t{\n\t\t\t\tthis.requestHistoryDelayed();\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tthis.scrollPositionChangeTime + 100 > new Date().getTime()\n\t\t\t//\t|| this.$refs.body.scrollTop < 0\n\t\t\t)\n\t\t\t{\n\t\t\t\tthis.requestHistoryDelayed();\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tthis.waitLoadHistory = true;\n\n\t\t\tclearTimeout(this.waitLoadHistoryTimeout);\n\t\t\tthis.waitLoadHistoryTimeout = setTimeout(() => {\n\t\t\t\tthis.waitLoadHistory = false;\n\t\t\t}, 10000);\n\n\t\t\tlet length = this.collection.length;\n\t\t\tlet messageShowCount = this.messageShowCount;\n\t\t\tif (length > messageShowCount)\n\t\t\t{\n\t\t\t\tlet element = this.$refs.body.getElementsByClassName(DialogReferenceClassName.listItem)[0];\n\n\t\t\t\tthis.$store.commit('application/increaseDialogExtraCount', {count: this.startMessageLimit});\n\t\t\t\tUtils.scrollToElementAfterLoadHistory(this, element);\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tthis.$emit('requestHistory', {lastId: this.firstMessageId});\n\t\t},\n\t\trequestUnread()\n\t\t{\n\t\t\tif (!this.requestUnreadBlockIntersect)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (this.waitLoadUnread || !this.windowFocused || this.animateScrollId)\n\t\t\t{\n\t\t\t\tthis.requestUnreadDelayed();\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tthis.scrollPositionChangeTime + 10 > new Date().getTime()\n\t\t\t\t//|| this.$refs.body.scrollTop > this.$refs.body.scrollHeight - this.$refs.body.clientHeight\n\t\t\t)\n\t\t\t{\n\t\t\t\tthis.requestUnreadDelayed();\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tthis.waitLoadUnread = true;\n\t\t\tthis.skipUnreadScroll = true;\n\n\t\t\tthis.$emit('requestUnread', {lastId: this.lastMessageId});\n\t\t},\n\t\tonRequestHistoryAnswer(event = {})\n\t\t{\n\t\t\tif (event.error)\n\t\t\t{\n\t\t\t\tthis.historyLoaderBlocked = false;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.historyLoaderBlocked = event.count < this.startMessageLimit;\n\t\t\t\tthis.$store.commit('application/increaseDialogExtraCount', {count: event.count});\n\t\t\t}\n\n\t\t\tif (this.historyLoaderBlocked)\n\t\t\t{\n\t\t\t\tthis.historyLoaderShow = false;\n\t\t\t}\n\n\t\t\tlet element = this.$refs.body.getElementsByClassName(DialogReferenceClassName.listItem)[0];\n\n\t\t\tif (event.count > 0)\n\t\t\t{\n\t\t\t\tif (element)\n\t\t\t\t{\n\t\t\t\t\tUtils.scrollToElementAfterLoadHistory(this, element);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (event.error)\n\t\t\t{\n\t\t\t\telement.scrollIntoView(true);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tUtils.scrollToPosition(this, 0);\n\t\t\t}\n\n\t\t\tclearTimeout(this.waitLoadHistoryTimeout);\n\t\t\tthis.waitLoadHistoryTimeout = setTimeout(() => {\n\t\t\t\tthis.waitLoadHistory = false;\n\t\t\t}, 1000);\n\n\t\t\treturn true;\n\t\t},\n\t\tonRequestUnreadAnswer(event = {})\n\t\t{\n\t\t\tif (event.error)\n\t\t\t{\n\t\t\t\tthis.historyLoaderBlocked = false;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (event.count < this.startMessageLimit)\n\t\t\t\t{\n\t\t\t\t\tthis.unreadLoaderShow = false;\n\t\t\t\t}\n\t\t\t\tthis.$store.commit('application/increaseDialogExtraCount', {count: event.count});\n\t\t\t}\n\n\t\t\tlet body = this.$refs.body;\n\t\t\tif (event.count > 0)\n\t\t\t{\n\t\t\t}\n\t\t\telse if (event.error)\n\t\t\t{\n\t\t\t\tlet element = this.$refs.body.getElementsByClassName(DialogReferenceClassName.listUnreadLoader)[0];\n\t\t\t\tif (element)\n\t\t\t\t{\n\t\t\t\t\tUtils.scrollToPosition(this, body.scrollTop - element.offsetHeight*2);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tUtils.scrollToPosition(this, body.scrollHeight - body.clientHeight);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tUtils.scrollToPosition(this, body.scrollHeight - body.clientHeight);\n\t\t\t}\n\n\t\t\tsetTimeout(() => this.waitLoadUnread = false, 1000);\n\n\t\t\treturn true;\n\t\t},\n\t\tonSendReadMessages(event = {})\n\t\t{\n\t\t\tthis.readMessageDelayed();\n\n\t\t\treturn true;\n\t\t},\n\t\treadMessage()\n\t\t{\n\t\t\tif (!this.windowFocused)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis.readMessageQueue = this.readMessageQueue.filter(messageId =>\n\t\t\t{\n\t\t\t\tif (this.readMessageTarget[messageId])\n\t\t\t\t{\n\t\t\t\t\tif (this.observers[ObserverType.read])\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.observers[ObserverType.read].unobserve(this.readMessageTarget[messageId]);\n\t\t\t\t\t}\n\t\t\t\t\tdelete this.readMessageTarget[messageId];\n\t\t\t\t}\n\n\t\t\t\tthis.requestReadMessage(messageId);\n\t\t\t\treturn false;\n\t\t\t});\n\t\t},\n\t\trequestReadMessage(messageId)\n\t\t{\n\t\t\tthis.$emit('readMessage', {id: messageId});\n\t\t},\n\n\t\tonClickByUserName(event)\n\t\t{\n\t\t\tif (!this.windowFocused)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.$emit('clickByUserName', event)\n\t\t},\n\n\t\tonClickByUploadCancel(event)\n\t\t{\n\t\t\tif (!this.windowFocused)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.$emit('clickByUploadCancel', event)\n\t\t},\n\n\t\tonClickByKeyboardButton(event)\n\t\t{\n\t\t\tif (!this.windowFocused)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.$emit('clickByKeyboardButton', event)\n\t\t},\n\n\t\tonClickByChatTeaser(event)\n\t\t{\n\t\t\tthis.$emit('clickByChatTeaser', event)\n\t\t},\n\n\t\tonClickByMessageMenu(event)\n\t\t{\n\t\t\tif (!this.windowFocused)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.$emit('clickByMessageMenu', event)\n\t\t},\n\n\t\tonClickByMessageRetry(event)\n\t\t{\n\t\t\tif (!this.windowFocused)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.$emit('clickByMessageRetry', event)\n\t\t},\n\n\t\tonClickByReadedList(event)\n\t\t{\n\t\t\tconst readedList = this.dialog.readedList.filter(record => record.messageId === this.lastMessageId && record.userId !== this.lastMessageAuthorId);\n\t\t\tthis.$emit('clickByReadedList', {list: readedList, event})\n\t\t},\n\n\t\tonMessageReactionSet(event)\n\t\t{\n\t\t\tthis.$emit('setMessageReaction', event)\n\t\t},\n\n\t\tonMessageReactionListOpen(event)\n\t\t{\n\t\t\tthis.$emit('openMessageReactionList', event)\n\t\t},\n\n\t\tonDragMessage(event)\n\t\t{\n\t\t\tif (!this.windowFocused)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.captureMove = event.result;\n\n\t\t\tif (!event.result)\n\t\t\t{\n\t\t\t\tthis.capturedMoveEvent = null;\n\t\t\t}\n\t\t},\n\n\t\tonQuoteMessage(event)\n\t\t{\n\t\t\tif (!this.windowFocused)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.$emit('quoteMessage', event)\n\t\t},\n\n\t\t_getDateFormat()\n\t\t{\n\t\t\tif (this.dateFormatFunction)\n\t\t\t{\n\t\t\t\treturn this.dateFormatFunction;\n\t\t\t}\n\n\t\t\tthis.dateFormatFunction = Object.create(BX.Main.Date);\n\t\t\tif (this.$root.$bitrixMessages)\n\t\t\t{\n\t\t\t\tthis.dateFormatFunction._getMessage = (phrase) => this.$root.$bitrixMessages[phrase];\n\t\t\t}\n\n\t\t\treturn this.dateFormatFunction;\n\t\t},\n\t\t_groupTitle(date)\n\t\t{\n\t\t\tconst id = Utils.getDateFormat(date);\n\t\t\tif (this.cacheGroupTitle[id])\n\t\t\t{\n\t\t\t\treturn {\n\t\t\t\t\tid: id,\n\t\t\t\t\ttitle: this.cacheGroupTitle[id]\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tlet dateFormat = MessengerUtils.date.getFormatType(\n\t\t\t\tBX.Messenger.Const.DateFormat.groupTitle,\n\t\t\t\tthis.$root.$bitrixMessages\n\t\t\t);\n\n\t\t\tthis.cacheGroupTitle[id] = this._getDateFormat().format(dateFormat, date);\n\n\t\t\treturn {\n\t\t\t\tid: id,\n\t\t\t\ttitle: this.cacheGroupTitle[id]\n\t\t\t};\n\t\t},\n\n\t\tanimationTrigger(type, start, element)\n\t\t{\n\t\t\tlet templateId = element.dataset.templateId;\n\t\t\tlet templateType = element.dataset.type;\n\t\t\tlet body = this.$refs.body;\n\n\t\t\tif (!body || !templateId)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (start)\n\t\t\t{\n\t\t\t\tif (!this.animationScrollHeightStart)\n\t\t\t\t{\n\t\t\t\t\tthis.animationScrollHeightStart = body.scrollHeight;\n\t\t\t\t\tthis.animationScrollHeightEnd = body.scrollHeight;\n\t\t\t\t\tthis.animationScrollTop = body.scrollTop;\n\t\t\t\t\tthis.animationScrollChange = 0;\n\n\t\t\t\t\tclearTimeout(this.scrollToTimeout);\n\t\t\t\t\tthis.scrollChangedByUser = !(body.scrollTop + this.scrollButtonDiff >= body.scrollHeight - body.clientHeight);\n\n\t\t\t\t\tif (this.scrollChangedByUser && !this.showScrollButton && this.unreadCounter > 1)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.showScrollButton = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.animationScrollHeightEnd = body.scrollHeight;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t!this.collectionMutationType.applied\n\t\t\t\t&& this.collectionMutationType.initialType !== MutationType.set\n\t\t\t)\n\t\t\t{\n\t\t\t\tif (start)\n\t\t\t\t{\n\t\t\t\t\tthis.animationCollection.push(templateId);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.animationCollection = this.animationCollection.filter(id => {\n\t\t\t\t\t\tdelete this.animationCollectionOffset[templateId];\n\t\t\t\t\t\treturn id !== templateId;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthis.animationStart();\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t!this.collectionMutationType.applied\n\t\t\t\t&& this.collectionMutationType.initialType === MutationType.set\n\t\t\t\t&& this.collectionMutationType.appliedType === MutationType.setBefore\n\t\t\t)\n\t\t\t{\n\t\t\t\tlet unreadId = Utils.getFirstUnreadMessage(this.collection);\n\t\t\t\tif (unreadId)\n\t\t\t\t{\n\t\t\t\t\tUtils.scrollToFirstUnreadMessage(this, this.collection, unreadId, true);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tUtils.scrollToPosition(this, body.scrollHeight - body.clientHeight);\n\n\t\t\t\tif (start)\n\t\t\t\t{\n\t\t\t\t\tthis.animationCollection.push(templateId);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.animationCollection = this.animationCollection.filter(id => {\n\t\t\t\t\t\tdelete this.animationCollectionOffset[templateId];\n\t\t\t\t\t\treturn id !== templateId;\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tthis.animationStart();\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (start)\n\t\t\t{\n\t\t\t\tif (type === AnimationType.leave)\n\t\t\t\t{\n\t\t\t\t\tthis.animationCollectionOffset[templateId] = element.offsetHeight;\n\t\t\t\t}\n\n\t\t\t\tif (this.animationType === AnimationType.none)\n\t\t\t\t{\n\t\t\t\t\tthis.animationType = type;\n\t\t\t\t}\n\t\t\t\telse if (this.animationType !== type)\n\t\t\t\t{\n\t\t\t\t\tthis.animationType = AnimationType.mixed;\n\t\t\t\t}\n\n\t\t\t\tthis.animationCollection.push(templateId);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (type === AnimationType.enter)\n\t\t\t\t{\n\t\t\t\t\tlet offset = element.offsetHeight;\n\n\t\t\t\t\tthis.animationScrollChange += offset;\n\t\t\t\t\tbody.scrollTop += offset;\n\t\t\t\t}\n\t\t\t\telse if (type === AnimationType.leave)\n\t\t\t\t{\n\t\t\t\t\tlet offset = this.animationCollectionOffset[templateId]? this.animationCollectionOffset[templateId]: 0;\n\t\t\t\t\tthis.animationScrollChange -= offset;\n\t\t\t\t\tbody.scrollTop -= offset;\n\n\t\t\t\t\tthis.animationScrollLastIsDelimeter = templateType !== TemplateType.message;\n\t\t\t\t}\n\n\t\t\t\tthis.animationCollection = this.animationCollection.filter(id => {\n\t\t\t\t\tdelete this.animationCollectionOffset[templateId];\n\t\t\t\t\treturn id !== templateId;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.animationStart();\n\t\t},\n\n\t\tanimationStart()\n\t\t{\n\t\t\tif (this.animationCollection.length > 0)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tlet body = this.$refs.body;\n\n\t\t\tif (this.animationType === AnimationType.leave)\n\t\t\t{\n\t\t\t\tlet newScrollPosition = 0;\n\n\t\t\t\t// fix for chrome dom rendering: while delete node, scroll change immediately\n\t\t\t\tif (body.scrollTop !== this.animationScrollTop + this.animationScrollChange)\n\t\t\t\t{\n\t\t\t\t\tnewScrollPosition = this.animationScrollTop + this.animationScrollChange\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tnewScrollPosition = body.scrollTop;\n\t\t\t\t}\n\n\t\t\t\t// fix position if last element the same type of new element\n\t\t\t\tif (!this.animationScrollLastIsDelimeter)\n\t\t\t\t{\n\t\t\t\t\tnewScrollPosition += this.templateMessageWithNameDifferent;\n\t\t\t\t}\n\n\t\t\t\tif (newScrollPosition !== body.scrollTop)\n\t\t\t\t{\n\t\t\t\t\tUtils.scrollToPosition(this, newScrollPosition);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (this.animationType === AnimationType.mixed)\n\t\t\t{\n\t\t\t\tlet unreadId = Utils.getFirstUnreadMessage(this.collection);\n\t\t\t\tif (unreadId)\n\t\t\t\t{\n\t\t\t\t\tUtils.scrollToFirstUnreadMessage(this, this.collection, unreadId, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.animationType = AnimationType.none;\n\t\t\tthis.animationScrollHeightStart = 0;\n\t\t\tthis.animationScrollHeightEnd = 0;\n\t\t\tthis.animationScrollTop = 0;\n\t\t\tthis.animationScrollChange = 0;\n\n\t\t\tif (Utils.scrollByMutationType(this))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (this.scrollChangedByUser)\n\t\t\t{\n\t\t\t\tLogger.warn('Dialog.animationStart: canceled: scroll changed by user');\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (this.unreadCounter > 0 && this.firstUnreadMessageId)\n\t\t\t{\n\t\t\t\tif (this.skipUnreadScroll)\n\t\t\t\t{\n\t\t\t\t\tthis.skipUnreadScroll = false;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tUtils.scrollToFirstUnreadMessage(this, this.collection, this.firstUnreadMessageId);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.scrollTo(() =>\n\t\t\t{\n\t\t\t\tif (this.unreadCounter <= 0 && this.messageExtraCount)\n\t\t\t\t{\n\t\t\t\t\tthis.$store.commit('application/clearDialogExtraCount');\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t},\n\n\tdirectives:\n\t{\n\t\t'bx-im-directive-dialog-observer':\n\t\t{\n\t\t\tinserted(element, bindings, vnode)\n\t\t\t{\n\t\t\t\tif (bindings.value === ObserverType.none)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (!vnode.context.observers[bindings.value])\n\t\t\t\t{\n\t\t\t\t\tvnode.context.observers[bindings.value] = Utils.getMessageLoaderObserver({\n\t\t\t\t\t\ttype: bindings.value,\n\t\t\t\t\t\tcontext: vnode.context\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tvnode.context.observers[bindings.value].observe(element);\n\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tunbind(element, bindings, vnode)\n\t\t\t{\n\t\t\t\tif (bindings.value === ObserverType.none)\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tif (vnode.context.observers[bindings.value])\n\t\t\t\t{\n\t\t\t\t\tvnode.context.observers[bindings.value].unobserve(element);\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t},\n\n\ttemplate: `\n\t\t<div class=\"bx-im-dialog\" @click=\"onDialogClick\" @touchmove=\"onDialogMove\" ref=\"container\">\t\n\t\t\t<div :class=\"[DialogReferenceClassName.listBody, {\n\t\t\t\t'bx-im-dialog-list-scroll-blocked': scrollBlocked, \n\t\t\t\t'bx-im-dialog-dark-background': isDarkBackground,\n\t\t\t\t'bx-im-dialog-mobile': isMobile,\n\t\t\t}]\" @scroll.passive=\"onScroll\" ref=\"body\">\n\t\t\t\t<template v-if=\"historyLoaderShow\">\n\t\t\t\t\t<div class=\"bx-im-dialog-load-more bx-im-dialog-load-more-history\" v-bx-im-directive-dialog-observer=\"ObserverType.history\">\n\t\t\t\t\t\t<span class=\"bx-im-dialog-load-more-text\">{{ localize.IM_MESSENGER_DIALOG_LOAD_MESSAGES }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\t\t\t\t<transition-group \n\t\t\t\t\ttag=\"div\" class=\"bx-im-dialog-list-box\" name=\"bx-im-dialog-message-animation\" \n\t\t\t\t\t@before-enter=\"animationTrigger(AnimationType.enter, true, $event)\" \n\t\t\t\t\t@after-enter=\"animationTrigger(AnimationType.enter, false, $event)\" \n\t\t\t\t\t@before-leave=\"animationTrigger(AnimationType.leave, true, $event)\" \n\t\t\t\t\t@after-leave=\"animationTrigger(AnimationType.leave, false, $event)\"\n\t\t\t\t>\n\t\t\t\t\t<template v-for=\"element in elementsWithLimit\">\n\t\t\t\t\t\t<template v-if=\"element.templateType == TemplateType.message\">\n\t\t\t\t\t\t\t<div :class=\"['bx-im-dialog-list-item', DialogReferenceClassName.listItem, DialogReferenceClassName.listItem+'-'+element.id]\" :data-message-id=\"element.id\" :data-template-id=\"element.templateId\" :data-type=\"element.templateType\" :key=\"element.templateId\" v-bx-im-directive-dialog-observer=\"element.unread? ObserverType.read: ObserverType.none\">\t\t\t\n\t\t\t\t\t\t\t\t<component :is=\"element.params.COMPONENT_ID\"\n\t\t\t\t\t\t\t\t\t:userId=\"userId\" \n\t\t\t\t\t\t\t\t\t:dialogId=\"dialogId\"\n\t\t\t\t\t\t\t\t\t:chatId=\"chatId\"\n\t\t\t\t\t\t\t\t\t:dialog=\"dialog\"\n\t\t\t\t\t\t\t\t\t:message=\"element\"\n\t\t\t\t\t\t\t\t\t:enableReactions=\"enableReactions\"\n\t\t\t\t\t\t\t\t\t:enableDateActions=\"enableDateActions\"\n\t\t\t\t\t\t\t\t\t:enableCreateContent=\"showMessageMenu\"\n\t\t\t\t\t\t\t\t\t:enableGestureQuote=\"enableGestureQuote\"\n\t\t\t\t\t\t\t\t\t:enableGestureQuoteFromRight=\"enableGestureQuoteFromRight\"\n\t\t\t\t\t\t\t\t\t:enableGestureMenu=\"enableGestureMenu\"\n\t\t\t\t\t\t\t\t\t:showName=\"showMessageUserName\"\n\t\t\t\t\t\t\t\t\t:showAvatar=\"showMessageAvatar\"\n\t\t\t\t\t\t\t\t\t:showMenu=\"showMessageMenu\"\n\t\t\t\t\t\t\t\t\t:capturedMoveEvent=\"capturedMoveEvent\"\n\t\t\t\t\t\t\t\t\t:referenceContentClassName=\"DialogReferenceClassName.listItem\"\n\t\t\t\t\t\t\t\t\t:referenceContentBodyClassName=\"DialogReferenceClassName.listItemBody\"\n\t\t\t\t\t\t\t\t\t:referenceContentNameClassName=\"DialogReferenceClassName.listItemName\"\n\t\t\t\t\t\t\t\t\t@clickByUserName=\"onClickByUserName\"\n\t\t\t\t\t\t\t\t\t@clickByUploadCancel=\"onClickByUploadCancel\"\n\t\t\t\t\t\t\t\t\t@clickByKeyboardButton=\"onClickByKeyboardButton\"\n\t\t\t\t\t\t\t\t\t@clickByChatTeaser=\"onClickByChatTeaser\"\n\t\t\t\t\t\t\t\t\t@clickByMessageMenu=\"onClickByMessageMenu\"\n\t\t\t\t\t\t\t\t\t@clickByMessageRetry=\"onClickByMessageRetry\"\n\t\t\t\t\t\t\t\t\t@setMessageReaction=\"onMessageReactionSet\"\n\t\t\t\t\t\t\t\t\t@openMessageReactionList=\"onMessageReactionListOpen\"\n\t\t\t\t\t\t\t\t\t@dragMessage=\"onDragMessage\"\n\t\t\t\t\t\t\t\t\t@quoteMessage=\"onQuoteMessage\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<template v-else-if=\"element.templateType == TemplateType.group\">\n\t\t\t\t\t\t\t<div class=\"bx-im-dialog-group\" :data-template-id=\"element.templateId\" :data-type=\"element.templateType\" :key=\"element.templateId\">\n\t\t\t\t\t\t\t\t<div class=\"bx-im-dialog-group-date\">{{ element.text }}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<template v-else-if=\"element.templateType == TemplateType.delimiter\">\n\t\t\t\t\t\t\t<div class=\"bx-im-dialog-delimiter\" :data-template-id=\"element.templateId\" :data-type=\"element.templateType\" :key=\"element.templateId\"></div>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</template>\n\t\t\t\t</transition-group>\n\t\t\t\t<template v-if=\"unreadLoaderShow\">\n\t\t\t\t\t<div :class=\"['bx-im-dialog-load-more', 'bx-im-dialog-load-more-unread', DialogReferenceClassName.listUnreadLoader]\" v-bx-im-directive-dialog-observer=\"ObserverType.unread\">\n\t\t\t\t\t\t<span class=\"bx-im-dialog-load-more-text\">{{ localize.IM_MESSENGER_DIALOG_LOAD_MESSAGES }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\t\t\t\t<transition name=\"bx-im-dialog-status\">\n\t\t\t\t\t<template v-if=\"statusWriting\">\n\t\t\t\t\t\t<div class=\"bx-im-dialog-status\">\n\t\t\t\t\t\t\t<span class=\"bx-im-dialog-status-writing\"></span>\n\t\t\t\t\t\t\t{{ statusWriting }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</template>\n\t\t\t\t\t<template v-else-if=\"statusReaded\">\n\t\t\t\t\t\t<div class=\"bx-im-dialog-status\" @click=\"onClickByReadedList\">\n\t\t\t\t\t\t\t{{ statusReaded }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</template>\n\t\t\t\t</transition>\n\t\t\t</div>\n\t\t\t<transition name=\"bx-im-dialog-scroll-button\">\n\t\t\t\t<div v-show=\"showScrollButton || unreadLoaderShow && unreadCounter\" class=\"bx-im-dialog-scroll-button-box\" @click=\"scrollToBottom()\">\n\t\t\t\t\t<div class=\"bx-im-dialog-scroll-button\">\n\t\t\t\t\t\t<div v-show=\"unreadCounter\" class=\"bx-im-dialog-scroll-button-counter\">\n\t\t\t\t\t\t\t<div class=\"bx-im-dialog-scroll-button-counter-digit\">{{unreadCounter}}</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"bx-im-dialog-scroll-button-arrow\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</transition>\n\t\t</div>\n\t`\n});\n\nconst Utils = {\n\tgetDateFormat(date)\n\t{\n\t\treturn date.toJSON().slice(0,10);\n\t},\n\n\tscrollToMessage(context, collection, messageId = 0, force = false, stickToTop = true)\n\t{\n\t\tlet body = context.$refs.body;\n\n\t\tlet element = body.getElementsByClassName(DialogReferenceClassName.listItem+'-'+messageId)[0];\n\n\t\tlet end = 0;\n\t\tif (!element)\n\t\t{\n\t\t\tif (stickToTop)\n\t\t\t{\n\t\t\t\tend = 10;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tend = body.scrollHeight - body.clientHeight;\n\t\t\t}\n\t\t}\n\t\telse if (stickToTop)\n\t\t{\n\t\t\tend = element.offsetTop - (context.templateMessageScrollOffset/2);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tend = element.offsetTop + element.offsetHeight - body.clientHeight + (context.templateMessageScrollOffset/2);\n\t\t}\n\n\t\tif (force)\n\t\t{\n\t\t\tthis.scrollToPosition(context, end);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tcontext.scrollTo({end});\n\t\t}\n\n\t\treturn true;\n\t},\n\n\tgetFirstUnreadMessage(collection)\n\t{\n\t\tlet unreadId = null;\n\n\t\tfor (let index = collection.length-1; index >= 0; index--)\n\t\t{\n\t\t\tif (!collection[index].unread)\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tunreadId = collection[index].id;\n\t\t}\n\n\t\treturn unreadId;\n\t},\n\n\tscrollToPosition(context, position)\n\t{\n\t\tlet body = context.$refs.body;\n\t\tif (!body)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tif (context.animateScrollId)\n\t\t{\n\t\t\tAnimation.cancel(context.animateScrollId);\n\t\t\tthis.scrollAnimating = false;\n\t\t\tcontext.animateScrollId = null;\n\t\t}\n\n\t\tbody.scrollTop = position;\n\t},\n\n\tscrollByMutationType(context)\n\t{\n\t\tif (\n\t\t\tcontext.collectionMutationType.applied\n\t\t\t|| context.collectionMutationType.initialType !== MutationType.set)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tcontext.$store.dispatch('messages/applyMutationType', {chatId: context.chatId});\n\n\t\tif (context.collectionMutationType.appliedType === MutationType.setBefore)\n\t\t{\n\t\t\tlet body = context.$refs.body;\n\t\t\tthis.scrollToPosition(context, body.scrollHeight - body.clientHeight);\n\n\t\t\treturn true;\n\t\t}\n\n\t\tif (context.collectionMutationType.scrollMessageId > 0)\n\t\t{\n\t\t\tlet unreadId = Utils.getFirstUnreadMessage(context.collection);\n\t\t\tlet toMessageId = context.collectionMutationType.scrollMessageId;\n\t\t\tlet force = !context.collectionMutationType.scrollStickToTop;\n\t\t\tlet stickToTop = context.collectionMutationType.scrollStickToTop;\n\n\t\t\tif (unreadId && toMessageId > unreadId)\n\t\t\t{\n\t\t\t\tstickToTop = true;\n\t\t\t\tforce = true;\n\t\t\t\ttoMessageId = unreadId;\n\t\t\t\tunreadId = null;\n\t\t\t}\n\n\t\t\tUtils.scrollToMessage(context, context.collection, toMessageId, force, stickToTop);\n\n\t\t\tif (unreadId)\n\t\t\t{\n\t\t\t\tUtils.scrollToMessage(context, context.collection, unreadId);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\tscrollToFirstUnreadMessage(context, collection, unreadId = null, force = false)\n\t{\n\t\tlet body = context.$refs.body;\n\n\t\tlet element = false;\n\t\tif (unreadId !== null)\n\t\t{\n\t\t\telement = body.getElementsByClassName(DialogReferenceClassName.listItem+'-'+unreadId)[0];\n\t\t}\n\t\tif (!element)\n\t\t{\n\t\t\tunreadId = this.getFirstUnreadMessage(collection);\n\t\t}\n\n\t\tthis.scrollToMessage(context, collection, unreadId, force);\n\t},\n\n\tscrollToElementAfterLoadHistory(context, element)\n\t{\n\t\tlet elementBody = element.getElementsByClassName(DialogReferenceClassName.listItemBody)[0];\n\t\tif (elementBody)\n\t\t{\n\t\t\telement = elementBody;\n\t\t}\n\n\t\tlet previousOffsetTop = element.getBoundingClientRect().top;\n\n\t\tcontext.$nextTick(() =>\n\t\t{\n\t\t\tclearTimeout(context.waitLoadHistoryTimeout);\n\t\t\tcontext.waitLoadHistoryTimeout = setTimeout(() => {\n\t\t\t\tcontext.waitLoadHistory = false;\n\t\t\t}, 1000);\n\n\t\t\tif (!element)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis.scrollToPosition(context, element.getBoundingClientRect().top - previousOffsetTop);\n\t\t});\n\t},\n\n\tscrollToElementAfterLoadUnread(context, firstMessageId = 0)\n\t{\n\t\tcontext.showScrollButton = true;\n\n\t\tif (firstMessageId)\n\t\t{\n\t\t\tthis.scrollToMessage(context, context.collection, firstMessageId, false, false);\n\t\t}\n\t},\n\n\tgetMessageLoaderObserver(config)\n\t{\n\t\tif (\n\t\t\ttypeof window.IntersectionObserver === 'undefined'\n\t\t\t|| config.value === ObserverType.none\n\t\t)\n\t\t{\n\t\t\treturn {\n\t\t\t\tobserve: () => {},\n\t\t\t\tunobserve: () => {}\n\t\t\t};\n\t\t}\n\n\t\tlet observerCallback, observerOptions;\n\n\t\tif (config.type === ObserverType.read)\n\t\t{\n\t\t\tobserverCallback = function (entries, observer)\n\t\t\t{\n\t\t\t\tentries.forEach(function(entry)\n\t\t\t\t{\n\t\t\t\t\tlet sendReadEvent = false;\n\t\t\t\t\tif (entry.isIntersecting)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (entry.intersectionRatio >= 1)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsendReadEvent = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (\n\t\t\t\t\t\t\tentry.intersectionRatio > 0\n\t\t\t\t\t\t\t&& entry.rootBounds.height < entry.boundingClientRect.height + 20\n\t\t\t\t\t\t\t&& entry.intersectionRect.height > entry.rootBounds.height / 2\n\t\t\t\t\t\t)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsendReadEvent = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (sendReadEvent)\n\t\t\t\t\t{\n\t\t\t\t\t\tconfig.context.readMessageQueue.push(entry.target.dataset.messageId);\n\t\t\t\t\t\tconfig.context.readMessageTarget[entry.target.dataset.messageId] = entry.target;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tconfig.context.readMessageQueue = config.context.readMessageQueue.filter(messageId => messageId !== entry.target.dataset.messageId);\n\t\t\t\t\t\tdelete config.context.readMessageTarget[entry.target.dataset.messageId];\n\t\t\t\t\t}\n\n\t\t\t\t\tif (config.context.enableReadMessages)\n\t\t\t\t\t{\n\t\t\t\t\t\tconfig.context.readMessageDelayed();\n\t\t\t\t\t}\n\n\t\t\t\t});\n\t\t\t};\n\t\t\tobserverOptions = {\n\t\t\t\troot: config.context.$refs.body,\n\t\t\t\tthreshold: new Array(101).fill(0).map((zero, index) => index * 0.01)\n\t\t\t};\n\t\t}\n\t\telse\n\t\t{\n\t\t\tobserverCallback = function (entries, observer)\n\t\t\t{\n\t\t\t\tentries.forEach(function(entry)\n\t\t\t\t{\n\t\t\t\t\tif (entry.isIntersecting)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (config.type === ObserverType.unread)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconfig.context.requestUnreadBlockIntersect = true;\n\t\t\t\t\t\t\tconfig.context.requestUnreadDelayed();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconfig.context.requestHistoryBlockIntersect = true;\n\t\t\t\t\t\t\tconfig.context.requestHistoryDelayed();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tif (config.type === ObserverType.unread)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconfig.context.requestUnreadBlockIntersect = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconfig.context.requestHistoryBlockIntersect = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\t\t\tobserverOptions = {\n\t\t\t\troot: config.context.$refs.body,\n\t\t\t\tthreshold: [0, 0.01, 0.99, 1]\n\t\t\t};\n\t\t}\n\n\t\treturn new IntersectionObserver(observerCallback, observerOptions);\n\t}\n};\n\nconst Blocks = {\n\tgetDelimiter(id = 0)\n\t{\n\t\treturn {\n\t\t\ttemplateId: 'delimiter'+id,\n\t\t\ttemplateType: TemplateType.delimiter\n\t\t};\n\t},\n\tgetGroup(id = 0, text = '')\n\t{\n\t\treturn {\n\t\t\ttemplateId: 'group'+id,\n\t\t\ttemplateType: TemplateType.group,\n\t\t\ttext: text\n\t\t};\n\t},\n\tgetHistoryLoader()\n\t{\n\t\treturn {\n\t\t\ttemplateId: 'historyLoader',\n\t\t\ttemplateType: TemplateType.historyLoader,\n\t\t};\n\t},\n\tgetUnreadLoader()\n\t{\n\t\treturn {\n\t\t\ttemplateId: 'unreadLoader',\n\t\t\ttemplateType: TemplateType.unreadLoader,\n\t\t};\n\t},\n\tgetLoadButton(id = 0, text = '', type = LoadButtonTypes.before)\n\t{\n\t\treturn {\n\t\t\ttemplateId: 'loadButton'+id+type,\n\t\t\ttemplateType: TemplateType.button,\n\t\t\ttext: text,\n\t\t\ttype: type,\n\t\t\tmessageId: id\n\t\t};\n\t}\n};\n"],"names":["TemplateType","Object","freeze","message","delimiter","group","historyLoader","unreadLoader","button","ObserverType","history","unread","read","none","LoadButtonTypes","before","after","AnimationType","mixed","enter","leave","Vue","component","props","userId","default","dialogId","chatId","messageLimit","messageExtraCount","listenEventScrollToBottom","listenEventRequestHistory","listenEventRequestUnread","listenEventSendReadMessages","enableReadMessages","enableReactions","enableDateActions","enableCreateContent","enableGestureQuote","enableGestureQuoteFromRight","enableGestureMenu","showMessageUserName","showMessageAvatar","showMessageMenu","data","scrollAnimating","showScrollButton","messageShowCount","unreadLoaderShow","historyLoaderBlocked","historyLoaderShow","startMessageLimit","templateMessageScrollOffset","templateMessageWithNameDifferent","DialogReferenceClassName","captureMove","capturedMoveEvent","lastMessageId","maxMessageId","created","unreadCounter","scrollChangedByUser","scrollButtonDiff","scrollButtonShowTimeout","scrollPosition","scrollPositionChangeTime","Date","getTime","animationScrollHeightStart","animationScrollHeightEnd","animationScrollTop","animationScrollChange","animationScrollLastUserId","animationType","animationCollection","animationCollectionOffset","animationLastElementBeforeStart","observers","requestHistoryInterval","requestUnreadInterval","lastAuthorId","firstMessageId","firstUnreadMessageId","dateFormatFunction","cacheGroupTitle","waitLoadHistory","waitLoadUnread","skipUnreadScroll","readMessageQueue","readMessageTarget","readMessageDelayed","MessengerUtils","debounce","readMessage","requestHistoryBlockIntersect","requestHistoryDelayed","requestHistory","requestUnreadBlockIntersect","requestUnreadDelayed","requestUnread","event","$on","onScrollToBottom","$root","onRequestHistoryAnswer","onRequestUnreadAnswer","onSendReadMessages","window","addEventListener","onOrientationChange","onWindowFocus","onWindowBlur","beforeDestroy","clearTimeout","clearInterval","$off","removeEventListener","mounted","unreadId","Utils","getFirstUnreadMessage","collection","scrollToFirstUnreadMessage","body","$refs","scrollToPosition","scrollHeight","clientHeight","windowFocused","platform","isBitrixMobile","document","hasFocus","computed","localize","getFilteredPhrases","$bitrixMessages","dialog","$store","getters","collectionMutationType","elementsWithLimit","unreadCount","filter","element","length","showLimit","start","slicedCollection","slice","lastMessageAuthorId","groupNode","forEach","id","_groupTitle","date","title","push","Blocks","getGroup","authorId","getDelimiter","unreadLastId","statusWriting","scrollToTimeout","writingList","setTimeout","scrollTo","duration","IM_MESSENGER_DIALOG_WRITES_MESSAGE","replace","map","userName","join","statusReaded","readedList","text","type","DialogType","private","record","messageId","dateFormat","getFormatType","BX","Messenger","Const","DateFormat","readedTitle","IM_MESSENGER_DIALOG_MESSAGES_READED_USER","_getDateFormat","format","IM_MESSENGER_DIALOG_MESSAGES_READED_CHAT","IM_MESSENGER_DIALOG_MESSAGES_READED_CHAT_PLURAL","counter","scrollBlocked","application","device","DeviceType","mobile","isDarkBackground","options","darkBackground","isMobile","Vuex","mapState","state","methods","onDialogClick","testNode","target","className","onCommandClick","onMentionClick","$emit","onDialogMove","value","dataset","entity","nextSibling","innerHTML","command","onScroll","scrollTop","offsetHeight","scrollToBottom","params","force","cancelIfScrollChange","scrollToMessageId","commit","scrollParams","callback","animateScrollId","Animation","cancel","isIos","getIosVersion","end","increment","container","Logger","warn","elementProperty","log","waitLoadHistoryTimeout","getElementsByClassName","listItem","count","scrollToElementAfterLoadHistory","lastId","error","scrollIntoView","listUnreadLoader","unobserve","requestReadMessage","onClickByUserName","onClickByUploadCancel","onClickByKeyboardButton","onClickByChatTeaser","onClickByMessageMenu","onClickByMessageRetry","onClickByReadedList","list","onMessageReactionSet","onMessageReactionListOpen","onDragMessage","result","onQuoteMessage","create","Main","_getMessage","phrase","getDateFormat","groupTitle","animationTrigger","templateId","templateType","applied","initialType","MutationType","set","animationStart","appliedType","setBefore","offset","animationScrollLastIsDelimeter","newScrollPosition","scrollByMutationType","directives","inserted","bindings","vnode","context","getMessageLoaderObserver","observe","unbind","template","toJSON","scrollToMessage","stickToTop","offsetTop","index","position","dispatch","scrollMessageId","toMessageId","scrollStickToTop","elementBody","listItemBody","previousOffsetTop","getBoundingClientRect","top","$nextTick","scrollToElementAfterLoadUnread","config","IntersectionObserver","observerCallback","observerOptions","entries","observer","entry","sendReadEvent","isIntersecting","intersectionRatio","rootBounds","height","boundingClientRect","intersectionRect","root","threshold","Array","fill","zero","getHistoryLoader","getUnreadLoader","getLoadButton"],"mappings":";;;CAAA;;;;;;;;AASA,CAUA,IAAMA,YAAY,GAAGC,MAAM,CAACC,MAAP,CAAc;CAClCC,EAAAA,OAAO,EAAE,SADyB;CAElCC,EAAAA,SAAS,EAAE,WAFuB;CAGlCC,EAAAA,KAAK,EAAE,OAH2B;CAIlCC,EAAAA,aAAa,EAAE,eAJmB;CAKlCC,EAAAA,YAAY,EAAE,cALoB;CAMlCC,EAAAA,MAAM,EAAE;CAN0B,CAAd,CAArB;CASA,IAAMC,YAAY,GAAGR,MAAM,CAACC,MAAP,CAAc;CAClCQ,EAAAA,OAAO,EAAE,SADyB;CAElCC,EAAAA,MAAM,EAAE,QAF0B;CAGlCC,EAAAA,IAAI,EAAE,MAH4B;CAIlCC,EAAAA,IAAI,EAAE;CAJ4B,CAAd,CAArB;CAOA,IAAMC,eAAe,GAAGb,MAAM,CAACC,MAAP,CAAc;CACrCa,EAAAA,MAAM,EAAE,QAD6B;CAErCC,EAAAA,KAAK,EAAE;CAF8B,CAAd,CAAxB;;CAKA,IAAMC,cAAa,GAAGhB,MAAM,CAACC,MAAP,CAAc;CACnCW,EAAAA,IAAI,EAAE,MAD6B;CAEnCK,EAAAA,KAAK,EAAE,OAF4B;CAGnCC,EAAAA,KAAK,EAAE,OAH4B;CAInCC,EAAAA,KAAK,EAAE;CAJ4B,CAAd,CAAtB;;AAOAC,WAAG,CAACC,SAAJ,CAAc,mBAAd,EACA;CACC;;;;;;;;;;;;;;;;;;;CAmBA;;;;;;CAMAC,EAAAA,KAAK,EACL;CACCC,IAAAA,MAAM,EAAE;CAAEC,MAAAA,OAAO,EAAE;CAAX,KADT;CAECC,IAAAA,QAAQ,EAAE;CAAED,MAAAA,OAAO,EAAE;CAAX,KAFX;CAGCE,IAAAA,MAAM,EAAE;CAAEF,MAAAA,OAAO,EAAE;CAAX,KAHT;CAICG,IAAAA,YAAY,EAAE;CAAEH,MAAAA,OAAO,EAAE;CAAX,KAJf;CAKCI,IAAAA,iBAAiB,EAAE;CAAEJ,MAAAA,OAAO,EAAE;CAAX,KALpB;CAMCK,IAAAA,yBAAyB,EAAE;CAAEL,MAAAA,OAAO,EAAE;CAAX,KAN5B;CAOCM,IAAAA,yBAAyB,EAAE;CAAEN,MAAAA,OAAO,EAAE;CAAX,KAP5B;CAQCO,IAAAA,wBAAwB,EAAE;CAAEP,MAAAA,OAAO,EAAE;CAAX,KAR3B;CASCQ,IAAAA,2BAA2B,EAAE;CAAER,MAAAA,OAAO,EAAE;CAAX,KAT9B;CAUCS,IAAAA,kBAAkB,EAAE;CAAET,MAAAA,OAAO,EAAE;CAAX,KAVrB;CAWCU,IAAAA,eAAe,EAAE;CAAEV,MAAAA,OAAO,EAAE;CAAX,KAXlB;CAYCW,IAAAA,iBAAiB,EAAE;CAAEX,MAAAA,OAAO,EAAE;CAAX,KAZpB;CAaCY,IAAAA,mBAAmB,EAAE;CAAEZ,MAAAA,OAAO,EAAE;CAAX,KAbtB;CAcCa,IAAAA,kBAAkB,EAAE;CAAEb,MAAAA,OAAO,EAAE;CAAX,KAdrB;CAeCc,IAAAA,2BAA2B,EAAE;CAAEd,MAAAA,OAAO,EAAE;CAAX,KAf9B;CAgBCe,IAAAA,iBAAiB,EAAE;CAAEf,MAAAA,OAAO,EAAE;CAAX,KAhBpB;CAiBCgB,IAAAA,mBAAmB,EAAE;CAAEhB,MAAAA,OAAO,EAAE;CAAX,KAjBtB;CAkBCiB,IAAAA,iBAAiB,EAAE;CAAEjB,MAAAA,OAAO,EAAE;CAAX,KAlBpB;CAmBCkB,IAAAA,eAAe,EAAE;CAAElB,MAAAA,OAAO,EAAE;CAAX;CAnBlB,GA3BD;CAgDCmB,EAAAA,IAhDD,kBAiDC;CACC,WAAO;CACNC,MAAAA,eAAe,EAAE,KADX;CAENC,MAAAA,gBAAgB,EAAE,KAFZ;CAGNC,MAAAA,gBAAgB,EAAE,CAHZ;CAINC,MAAAA,gBAAgB,EAAE,KAJZ;CAKNC,MAAAA,oBAAoB,EAAE,KALhB;CAMNC,MAAAA,iBAAiB,EAAE,IANb;CAONC,MAAAA,iBAAiB,EAAE,CAPb;CAQNC,MAAAA,2BAA2B,EAAE,EARvB;CASNC,MAAAA,gCAAgC,EAAE,EAT5B;CASgC;CACtCrD,MAAAA,YAAY,EAAEA,YAVR;CAWNS,MAAAA,YAAY,EAAEA,YAXR;CAYN6C,MAAAA,wBAAwB,EAAEA,iCAZpB;CAaNC,MAAAA,WAAW,EAAE,KAbP;CAcNC,MAAAA,iBAAiB,EAAE,IAdb;CAeNC,MAAAA,aAAa,EAAE,IAfT;CAgBNC,MAAAA,YAAY,EAAE;CAhBR,KAAP;CAkBA,GApEF;CAqECC,EAAAA,OArED,qBAsEC;CACC,SAAKb,gBAAL,GAAwB,KAAKc,aAAL,GAAqB,CAA7C;CAEA,SAAKC,mBAAL,GAA2B,KAA3B;CACA,SAAKC,gBAAL,GAAwB,GAAxB;CACA,SAAKC,uBAAL,GAA+B,IAA/B;CACA,SAAKC,cAAL,GAAsB,CAAtB;CACA,SAAKC,wBAAL,GAAgC,IAAIC,IAAJ,GAAWC,OAAX,EAAhC;CAEA,SAAKC,0BAAL,GAAkC,CAAlC;CACA,SAAKC,wBAAL,GAAgC,CAAhC;CACA,SAAKC,kBAAL,GAA0B,CAA1B;CACA,SAAKC,qBAAL,GAA6B,CAA7B;CACA,SAAKC,yBAAL,GAAiC,CAAjC;CACA,SAAKC,aAAL,GAAqBxD,cAAa,CAACJ,IAAnC;CACA,SAAK6D,mBAAL,GAA2B,EAA3B;CACA,SAAKC,yBAAL,GAAiC,EAAjC;CACA,SAAKC,+BAAL,GAAuC,CAAvC;CAEA,SAAKC,SAAL,GAAiB,EAAjB;CAEA,SAAKC,sBAAL,GAA8B,IAA9B;CACA,SAAKC,qBAAL,GAA6B,IAA7B;CAEA,SAAKC,YAAL,GAAoB,CAApB;CACA,SAAKC,cAAL,GAAsB,IAAtB;CACA,SAAKC,oBAAL,GAA4B,IAA5B;CACA,SAAKC,kBAAL,GAA0B,IAA1B;CACA,SAAKC,eAAL,GAAuB,EAAvB;CAEA,SAAKC,eAAL,GAAuB,KAAvB;CACA,SAAKC,cAAL,GAAsB,KAAtB;CACA,SAAKC,gBAAL,GAAwB,KAAxB;CAEA,SAAKC,gBAAL,GAAwB,EAAxB;CACA,SAAKC,iBAAL,GAAyB,EAAzB;CACA,SAAKC,kBAAL,GAA0BC,kBAAc,CAACC,QAAf,CAAwB,KAAKC,WAA7B,EAA0C,EAA1C,EAA8C,IAA9C,CAA1B;CAEA,SAAKC,4BAAL,GAAoC,KAApC;CACA,SAAKC,qBAAL,GAA6BJ,kBAAc,CAACC,QAAf,CAAwB,KAAKI,cAA7B,EAA6C,EAA7C,EAAiD,IAAjD,CAA7B;CAEA,SAAKC,2BAAL,GAAmC,KAAnC;CACA,SAAKC,oBAAL,GAA4BP,kBAAc,CAACC,QAAf,CAAwB,KAAKO,aAA7B,EAA4C,EAA5C,EAAgD,IAAhD,CAA5B;CAEA,SAAKhD,iBAAL,GAAyB,KAAKvB,YAA9B;;CAEA,QAAI,KAAKE,yBAAT,EACA;CACCT,MAAAA,UAAG,CAAC+E,KAAJ,CAAUC,GAAV,CAAc,KAAKvE,yBAAnB,EAA8C,KAAKwE,gBAAnD;CACA,WAAKC,KAAL,CAAWF,GAAX,CAAe,KAAKvE,yBAApB,EAA+C,KAAKwE,gBAApD;CACA;;CACD,QAAI,KAAKvE,yBAAT,EACA;CACCV,MAAAA,UAAG,CAAC+E,KAAJ,CAAUC,GAAV,CAAc,KAAKtE,yBAAnB,EAA8C,KAAKyE,sBAAnD;CACA,WAAKD,KAAL,CAAWF,GAAX,CAAe,KAAKtE,yBAApB,EAA+C,KAAKyE,sBAApD;CACA;;CACD,QAAI,KAAKxE,wBAAT,EACA;CACCX,MAAAA,UAAG,CAAC+E,KAAJ,CAAUC,GAAV,CAAc,KAAKrE,wBAAnB,EAA6C,KAAKyE,qBAAlD;CACA,WAAKF,KAAL,CAAWF,GAAX,CAAe,KAAKrE,wBAApB,EAA8C,KAAKyE,qBAAnD;CACA;;CACD,QAAI,KAAKxE,2BAAT,EACA;CACCZ,MAAAA,UAAG,CAAC+E,KAAJ,CAAUC,GAAV,CAAc,KAAKpE,2BAAnB,EAAgD,KAAKyE,kBAArD;CACA,WAAKH,KAAL,CAAWF,GAAX,CAAe,KAAKpE,2BAApB,EAAiD,KAAKyE,kBAAtD;CACA;;CAEDC,IAAAA,MAAM,CAACC,gBAAP,CAAwB,mBAAxB,EAA6C,KAAKC,mBAAlD;CACAF,IAAAA,MAAM,CAACC,gBAAP,CAAwB,OAAxB,EAAiC,KAAKE,aAAtC;CACAH,IAAAA,MAAM,CAACC,gBAAP,CAAwB,MAAxB,EAAgC,KAAKG,YAArC;CAEA1F,IAAAA,UAAG,CAAC+E,KAAJ,CAAUC,GAAV,CAAc,+BAAd,EAA+C,KAAKS,aAApD;CACAzF,IAAAA,UAAG,CAAC+E,KAAJ,CAAUC,GAAV,CAAc,8BAAd,EAA8C,KAAKU,YAAnD;CACA,GA/IF;CAgJCC,EAAAA,aAhJD,2BAiJC;CACC,SAAKnC,SAAL,GAAiB,EAAjB;CAEAoC,IAAAA,YAAY,CAAC,KAAKlD,uBAAN,CAAZ;CACAmD,IAAAA,aAAa,CAAC,KAAKpC,sBAAN,CAAb;CACAoC,IAAAA,aAAa,CAAC,KAAKnC,qBAAN,CAAb;;CAEA,QAAI,KAAKjD,yBAAT,EACA;CACCT,MAAAA,UAAG,CAAC+E,KAAJ,CAAUe,IAAV,CAAe,KAAKrF,yBAApB,EAA+C,KAAKwE,gBAApD;CACA,WAAKC,KAAL,CAAWY,IAAX,CAAgB,KAAKrF,yBAArB,EAAgD,KAAKwE,gBAArD;CACA;;CACD,QAAI,KAAKvE,yBAAT,EACA;CACCV,MAAAA,UAAG,CAAC+E,KAAJ,CAAUe,IAAV,CAAe,KAAKpF,yBAApB,EAA+C,KAAKyE,sBAApD;CACA,WAAKD,KAAL,CAAWY,IAAX,CAAgB,KAAKpF,yBAArB,EAAgD,KAAKyE,sBAArD;CACA;;CACD,QAAI,KAAKxE,wBAAT,EACA;CACCX,MAAAA,UAAG,CAAC+E,KAAJ,CAAUe,IAAV,CAAe,KAAKnF,wBAApB,EAA8C,KAAKyE,qBAAnD;CACA,WAAKF,KAAL,CAAWY,IAAX,CAAgB,KAAKnF,wBAArB,EAA+C,KAAKyE,qBAApD;CACA;;CACD,QAAI,KAAKxE,2BAAT,EACA;CACCZ,MAAAA,UAAG,CAAC+E,KAAJ,CAAUe,IAAV,CAAe,KAAKlF,2BAApB,EAAiD,KAAKyE,kBAAtD;CACA,WAAKH,KAAL,CAAWY,IAAX,CAAgB,KAAKlF,2BAArB,EAAkD,KAAKyE,kBAAvD;CACA;;CAEDC,IAAAA,MAAM,CAACS,mBAAP,CAA2B,mBAA3B,EAAgD,KAAKP,mBAArD;CACAF,IAAAA,MAAM,CAACS,mBAAP,CAA2B,OAA3B,EAAoC,KAAKN,aAAzC;CACAH,IAAAA,MAAM,CAACS,mBAAP,CAA2B,MAA3B,EAAmC,KAAKL,YAAxC;CAEA1F,IAAAA,UAAG,CAAC+E,KAAJ,CAAUe,IAAV,CAAe,+BAAf,EAAgD,KAAKL,aAArD;CACAzF,IAAAA,UAAG,CAAC+E,KAAJ,CAAUe,IAAV,CAAe,8BAAf,EAA+C,KAAKJ,YAApD;CACA,GAnLF;CAoLCM,EAAAA,OApLD,qBAqLC;CACC,QAAIC,QAAQ,GAAGC,KAAK,CAACC,qBAAN,CAA4B,KAAKC,UAAjC,CAAf;;CACA,QAAIH,QAAJ,EACA;CACCC,MAAAA,KAAK,CAACG,0BAAN,CAAiC,IAAjC,EAAuC,KAAKD,UAA5C,EAAwDH,QAAxD,EAAkE,IAAlE;CACA,KAHD,MAKA;CACC,UAAIK,IAAI,GAAG,KAAKC,KAAL,CAAWD,IAAtB;CACAJ,MAAAA,KAAK,CAACM,gBAAN,CAAuB,IAAvB,EAA6BF,IAAI,CAACG,YAAL,GAAoBH,IAAI,CAACI,YAAtD;CACA;;CACD,SAAKC,aAAL,GAAqBrC,kBAAc,CAACsC,QAAf,CAAwBC,cAAxB,KAA0C,IAA1C,GAAgDC,QAAQ,CAACC,QAAT,EAArE;CACA,GAjMF;CAkMCC,EAAAA,QAAQ;CAEPC,IAAAA,QAFO,sBAGP;CACC,aAAOjH,UAAG,CAACkH,kBAAJ,CAAuB,sBAAvB,EAA+C,KAAKhC,KAAL,CAAWiC,eAA1D,CAAP;CACA,KALM;CAMPC,IAAAA,MANO,oBAOP;CACC,UAAIA,MAAM,GAAG,KAAKC,MAAL,CAAYC,OAAZ,CAAoB,eAApB,EAAqC,KAAKjH,QAA1C,CAAb;CACA,aAAO+G,MAAM,GAAEA,MAAF,GAAU,KAAKC,MAAL,CAAYC,OAAZ,CAAoB,oBAApB,GAAvB;CACA,KAVM;CAWPC,IAAAA,sBAXO,oCAYP;CACC,aAAO,KAAKF,MAAL,CAAYC,OAAZ,CAAoB,0BAApB,EAAgD,KAAKhH,MAArD,CAAP;CACA,KAdM;CAeP8F,IAAAA,UAfO,wBAgBP;CACC,aAAO,KAAKiB,MAAL,CAAYC,OAAZ,CAAoB,cAApB,EAAoC,KAAKhH,MAAzC,CAAP;CACA,KAlBM;CAmBPkH,IAAAA,iBAnBO,+BAoBP;CAAA;;CACC,UAAIC,WAAW,GAAG,KAAKrB,UAAL,CAAgBsB,MAAhB,CAAuB,UAAAC,OAAO;CAAA,eAAIA,OAAO,CAACrI,MAAZ;CAAA,OAA9B,EAAkDsI,MAApE;CACA,UAAIC,SAAS,GAAG,KAAKrH,iBAAL,GAAyB,KAAKD,YAAL,GAAoB,CAA7D;;CACA,UAAIkH,WAAW,GAAGI,SAAlB,EACA;CACCA,QAAAA,SAAS,GAAGJ,WAAZ;CACA;;CAED,UAAIK,KAAK,GAAG,KAAK1B,UAAL,CAAgBwB,MAAhB,GAAyBC,SAArC;;CACA,UAAI,CAAC,KAAKhG,iBAAN,IAA2BiG,KAAK,GAAG,CAAvC,EACA;CACCA,QAAAA,KAAK,GAAG,CAAR;CACA;;CAED,UAAIC,gBAAgB,GAAGD,KAAK,KAAK,CAAV,GAAa,KAAK1B,UAAlB,GAA8B,KAAKA,UAAL,CAAgB4B,KAAhB,CAAsBF,KAAtB,EAA6B,KAAK1B,UAAL,CAAgBwB,MAA7C,CAArD;CACA,WAAKlG,gBAAL,GAAwBqG,gBAAgB,CAACH,MAAzC;CAEA,WAAKhE,cAAL,GAAsB,IAAtB;CACA,WAAKxB,aAAL,GAAqB,CAArB;CACA,WAAKC,YAAL,GAAoB,CAApB;CACA,WAAK4F,mBAAL,GAA2B,CAA3B;CAEA,UAAI7B,UAAU,GAAG,EAAjB;CACA,UAAIzC,YAAY,GAAG,CAAnB;CACA,UAAIuE,SAAS,GAAG,EAAhB;CAEA,WAAKrE,oBAAL,GAA4B,CAA5B;AACA;CAEA,UAAI,KAAKnC,gBAAL,GAAwB,CAA5B,EACA;CACCqG,QAAAA,gBAAgB,CAACI,OAAjB,CAAyB,UAAAR,OAAO,EAChC;CACC,cAAI,KAAI,CAAC/D,cAAL,KAAwB,IAAxB,IAAgC,KAAI,CAACA,cAAL,GAAsB+D,OAAO,CAACS,EAAlE,EACA;CACC,YAAA,KAAI,CAACxE,cAAL,GAAsB+D,OAAO,CAACS,EAA9B;CACA;;CAED,cAAI,KAAI,CAAC/F,YAAL,GAAoBsF,OAAO,CAACS,EAAhC,EACA;CACC,YAAA,KAAI,CAAC/F,YAAL,GAAoBsF,OAAO,CAACS,EAA5B;CACA;;CAED,UAAA,KAAI,CAAChG,aAAL,GAAqBuF,OAAO,CAACS,EAA7B;;CAEA,cAAIpJ,KAAK,GAAG,KAAI,CAACqJ,WAAL,CAAiBV,OAAO,CAACW,IAAzB,CAAZ;;CACA,cAAI,CAACJ,SAAS,CAAClJ,KAAK,CAACuJ,KAAP,CAAd,EACA;CACCL,YAAAA,SAAS,CAAClJ,KAAK,CAACuJ,KAAP,CAAT,GAAyBvJ,KAAK,CAACoJ,EAA/B;CACAhC,YAAAA,UAAU,CAACoC,IAAX,CAAgBC,MAAM,CAACC,QAAP,CAAgB1J,KAAK,CAACoJ,EAAtB,EAA0BpJ,KAAK,CAACuJ,KAAhC,CAAhB;CACA,WAJD,MAKK,IAAI5E,YAAY,KAAKgE,OAAO,CAACgB,QAA7B,EACL;CACCvC,YAAAA,UAAU,CAACoC,IAAX,CAAgBC,MAAM,CAACG,YAAP,CAAoBjB,OAAO,CAACS,EAA5B,CAAhB;CACA;;CAEDhC,UAAAA,UAAU,CAACoC,IAAX,CAAgBb,OAAhB;CAEAhE,UAAAA,YAAY,GAAGgE,OAAO,CAACgB,QAAvB;;CAEA,cAAIhB,OAAO,CAACrI,MAAZ,EACA;CACC,gBAAI,CAAC,KAAI,CAACuE,oBAAV,EACA;CACC,cAAA,KAAI,CAACA,oBAAL,GAA4B8D,OAAO,CAACS,EAApC;CACA;CAED;CACD,SArCD;CAuCA,aAAKH,mBAAL,GAA2BtE,YAA3B;CACA,OA1CD,MA4CA;CACC,aAAKC,cAAL,GAAsB,CAAtB;CACA;;CAED,UACC,KAAKwC,UAAL,CAAgBwB,MAAhB,IAA0B,KAAKrH,YAA/B,IACG,KAAK6F,UAAL,CAAgBwB,MAAhB,IAA0B,KAAKlG,gBADlC,IAEG,KAAKE,oBAAL,KAA8B,KAHlC,EAKA;CACC,aAAKC,iBAAL,GAAyB,IAAzB;CACA,OAPD,MASA;CACC,aAAKA,iBAAL,GAAyB,KAAzB;CACA;;CAED,UAAI,KAAKuF,MAAL,CAAYyB,YAAZ,GAA2B,KAAKxG,YAApC,EACA;CACC,aAAKV,gBAAL,GAAwB,IAAxB;CACA,OAHD,MAKA;CACC,aAAKA,gBAAL,GAAwB,KAAxB;CACA;;CAED,aAAOyE,UAAP;CACA,KAxHM;CAyHP0C,IAAAA,aAzHO,2BA0HP;CAAA;;CACClD,MAAAA,YAAY,CAAC,KAAKmD,eAAN,CAAZ;;CAEA,UAAI,KAAK3B,MAAL,CAAY4B,WAAZ,CAAwBpB,MAAxB,KAAmC,CAAvC,EACA;CACC,eAAO,EAAP;CACA;;CAED,UAAI,CAAC,KAAKpF,mBAAN,IAA6B,CAAC,KAAKf,gBAAvC,EACA;CACC,aAAKsH,eAAL,GAAuBE,UAAU,CAAC;CAAA,iBAAM,MAAI,CAACC,QAAL,CAAc;CAACC,YAAAA,QAAQ,EAAE;CAAX,WAAd,CAAN;CAAA,SAAD,EAAuC,GAAvC,CAAjC;CACA;;CAED,aAAO,KAAKlC,QAAL,CAAcmC,kCAAd,CAAiDC,OAAjD,CACN,QADM,EACI,KAAKjC,MAAL,CAAY4B,WAAZ,CAAwBM,GAAxB,CAA4B,UAAA3B,OAAO;CAAA,eAAIA,OAAO,CAAC4B,QAAZ;CAAA,OAAnC,EAAyDC,IAAzD,CAA8D,IAA9D,CADJ,CAAP;CAGA,KA1IM;CA2IPC,IAAAA,YA3IO,0BA4IP;CAAA;;CACC7D,MAAAA,YAAY,CAAC,KAAKmD,eAAN,CAAZ;;CAEA,UAAI,KAAK3B,MAAL,CAAYsC,UAAZ,CAAuB9B,MAAvB,KAAkC,CAAtC,EACA;CACC,eAAO,EAAP;CACA;;CAED,UAAI+B,IAAI,GAAG,EAAX;;CAEA,UAAI,KAAKvC,MAAL,CAAYwC,IAAZ,KAAqBC,mBAAU,CAACC,OAApC,EACA;CACC,YAAIC,MAAM,GAAG,KAAK3C,MAAL,CAAYsC,UAAZ,CAAuB,CAAvB,CAAb;;CACA,YACCK,MAAM,CAACC,SAAP,KAAqB,KAAK5H,aAA1B,IACG2H,MAAM,CAAC5J,MAAP,KAAkB,KAAK8H,mBAF3B,EAIA;CACC,cAAIgC,UAAU,GAAG3F,kBAAc,CAACgE,IAAf,CAAoB4B,aAApB,CAChBC,EAAE,CAACC,SAAH,CAAaC,KAAb,CAAmBC,UAAnB,CAA8BC,WADd,EAEhB,KAAKrF,KAAL,CAAWiC,eAFK,CAAjB;CAKAwC,UAAAA,IAAI,GAAG,KAAK1C,QAAL,CAAcuD,wCAAd,CAAuDnB,OAAvD,CACN,QADM,EACI,KAAKoB,cAAL,GAAsBC,MAAtB,CAA6BT,UAA7B,EAAyCF,MAAM,CAACzB,IAAhD,CADJ,CAAP;CAGA;CACD,OAjBD,MAmBA;CACC,YAAIoB,UAAU,GAAG,KAAKtC,MAAL,CAAYsC,UAAZ,CAAuBhC,MAAvB,CAA8B,UAAAqC,MAAM;CAAA,iBAAIA,MAAM,CAACC,SAAP,KAAqB,MAAI,CAAC5H,aAA1B,IAA2C2H,MAAM,CAAC5J,MAAP,KAAkB,MAAI,CAAC8H,mBAAtE;CAAA,SAApC,CAAjB;;CACA,YAAIyB,UAAU,CAAC9B,MAAX,KAAsB,CAA1B,EACA;CACC+B,UAAAA,IAAI,GAAG,KAAK1C,QAAL,CAAc0D,wCAAd,CAAuDtB,OAAvD,CACN,SADM,EACKK,UAAU,CAAC,CAAD,CAAV,CAAcH,QADnB,CAAP;CAGA,SALD,MAMK,IAAIG,UAAU,CAAC9B,MAAX,GAAoB,CAAxB,EACL;CACC+B,UAAAA,IAAI,GAAG,KAAK1C,QAAL,CAAc0D,wCAAd,CAAuDtB,OAAvD,CACN,SADM,EAEN,KAAKpC,QAAL,CAAc2D,+CAAd,CACGvB,OADH,CACW,QADX,EACqBK,UAAU,CAAC,CAAD,CAAV,CAAcH,QADnC,EAEGF,OAFH,CAEW,SAFX,EAEsBK,UAAU,CAAC9B,MAAX,GAAkB,CAFxC,EAGGyB,OAHH,CAGW,QAHX,EAGqB,EAHrB,EAIGA,OAJH,CAIW,SAJX,EAIsB,EAJtB,CAFM,CAAP;CAQA;CACD;;CAED,UAAI,CAACM,IAAL,EACA;CACC,eAAO,EAAP;CACA;;CAED,UAAI,CAAC,KAAKnH,mBAAN,IAA6B,CAAC,KAAKf,gBAAvC,EACA;CACC,aAAKsH,eAAL,GAAuBE,UAAU,CAAC;CAAA,iBAAM,MAAI,CAACC,QAAL,CAAc;CAACC,YAAAA,QAAQ,EAAE;CAAX,WAAd,CAAN;CAAA,SAAD,EAAuC,GAAvC,CAAjC;CACA;;CAED,aAAOQ,IAAP;CACA,KAzMM;CA0MPpH,IAAAA,aA1MO,2BA2MP;CACC,aAAO,KAAK6E,MAAL,CAAYyD,OAAZ,GAAsB,GAAtB,GAA2B,GAA3B,GAAgC,KAAKzD,MAAL,CAAYyD,OAAnD;CACA,KA7MM;CA8MPC,IAAAA,aA9MO,2BA+MP;CACC,UAAI,KAAKC,WAAL,CAAiBC,MAAjB,CAAwBpB,IAAxB,KAAiCqB,mBAAU,CAACC,MAAhD,EACA;CACC,eAAO,KAAP;CACA;;CAED,aAAO,KAAK1J,eAAL,IAAwB,KAAKU,WAApC;CACA,KAtNM;CAuNPiJ,IAAAA,gBAvNO,8BAwNP;CACC,aAAO,KAAKJ,WAAL,CAAiBK,OAAjB,CAAyBC,cAAhC;CACA,KA1NM;CA2NPC,IAAAA,QA3NO,sBA4NP;CACC,aAAO,KAAKP,WAAL,CAAiBC,MAAjB,CAAwBpB,IAAxB,KAAiCqB,mBAAU,CAACC,MAAnD;CACA,KA9NM;CAgOPtL,IAAAA,aAAa,EAAE;CAAA,aAAMA,cAAN;CAAA;CAhOR,KAkOJ2L,gBAAI,CAACC,QAAL,CAAc;CAChBT,IAAAA,WAAW,EAAE,qBAAAU,KAAK;CAAA,aAAIA,KAAK,CAACV,WAAV;CAAA;CADF,GAAd,CAlOI,CAlMT;CAwaCW,EAAAA,OAAO,EACP;CACCC,IAAAA,aADD,yBACe5G,KADf,EAEC;CACC,UAAI/E,UAAG,CAAC4L,QAAJ,CAAa7G,KAAK,CAAC8G,MAAnB,EAA2B;CAACC,QAAAA,SAAS,EAAE;CAAZ,OAA3B,CAAJ,EACA;CACC,aAAKC,cAAL,CAAoBhH,KAApB;CACA,OAHD,MAIK,IAAI/E,UAAG,CAAC4L,QAAJ,CAAa7G,KAAK,CAAC8G,MAAnB,EAA2B;CAACC,QAAAA,SAAS,EAAE;CAAZ,OAA3B,CAAJ,EACL;CACC,aAAKE,cAAL,CAAoBjH,KAApB;CACA;;CAED,WAAK4B,aAAL,GAAqB,IAArB;CACA,WAAKsF,KAAL,CAAW,OAAX,EAAoB;CAAClH,QAAAA,KAAK,EAALA;CAAD,OAApB;CACA,KAdF;CAeCmH,IAAAA,YAfD,wBAecnH,KAfd,EAgBC;CACC,UAAI,CAAC,KAAK7C,WAAV,EACA;CACC;CACA;;CAED,WAAKC,iBAAL,GAAyB4C,KAAzB;CACA,KAvBF;CAwBCgH,IAAAA,cAxBD,0BAwBgBhH,KAxBhB,EAyBC;CACC,UAAIoH,KAAK,GAAG,EAAZ;;CAEA,UACCpH,KAAK,CAAC8G,MAAN,CAAaO,OAAb,CAAqBC,MAArB,KAAgC,MAAhC,IACGtH,KAAK,CAAC8G,MAAN,CAAaO,OAAb,CAAqBC,MAArB,KAAgC,KAFpC,EAIA;CACCF,QAAAA,KAAK,GAAGpH,KAAK,CAAC8G,MAAN,CAAaS,WAAb,CAAyBC,SAAjC;CACA,OAND,MAOK,IAAIxH,KAAK,CAAC8G,MAAN,CAAaO,OAAb,CAAqBC,MAArB,KAAgC,MAApC,EACL;CACCF,QAAAA,KAAK,GAAGpH,KAAK,CAAC8G,MAAN,CAAaO,OAAb,CAAqBI,OAA7B;CACA;;CAED,WAAKP,KAAL,CAAW,gBAAX,EAA6B;CAACrC,QAAAA,IAAI,EAAE7E,KAAK,CAAC8G,MAAN,CAAaO,OAAb,CAAqBC,MAA5B;CAAoCF,QAAAA,KAAK,EAALA,KAApC;CAA2CpH,QAAAA,KAAK,EAALA;CAA3C,OAA7B;CACA,KAzCF;CA0CCiH,IAAAA,cA1CD,0BA0CgBjH,KA1ChB,EA2CC;CACC,WAAKkH,KAAL,CAAW,gBAAX,EAA6B;CAACrC,QAAAA,IAAI,EAAE7E,KAAK,CAAC8G,MAAN,CAAaO,OAAb,CAAqBxC,IAA5B;CAAkCuC,QAAAA,KAAK,EAAEpH,KAAK,CAAC8G,MAAN,CAAaO,OAAb,CAAqBD,KAA9D;CAAqEpH,QAAAA,KAAK,EAALA;CAArE,OAA7B;CACA,KA7CF;CA8CC0H,IAAAA,QA9CD,oBA8CU1H,KA9CV,EA+CC;CAAA;;CACCa,MAAAA,YAAY,CAAC,KAAKmD,eAAN,CAAZ;CAEA,WAAKpG,cAAL,GAAsBoC,KAAK,CAAC8G,MAAN,CAAaa,SAAnC;CACA,WAAK9J,wBAAL,GAAgC,IAAIC,IAAJ,GAAWC,OAAX,EAAhC;CAEA,WAAKN,mBAAL,GAA2B,EAAEuC,KAAK,CAAC8G,MAAN,CAAaa,SAAb,GAAyB,KAAKjK,gBAA9B,IAAkDsC,KAAK,CAAC8G,MAAN,CAAapF,YAAb,GAA4B1B,KAAK,CAAC8G,MAAN,CAAanF,YAA7F,CAA3B;CAEAd,MAAAA,YAAY,CAAC,KAAKlD,uBAAN,CAAZ;CACA,WAAKA,uBAAL,GAA+BuG,UAAU,CAAC,YAC1C;CACC,YAAI,MAAI,CAACzG,mBAAT,EACA;CACC,cAAI,CAAC,MAAI,CAACf,gBAAV,EACA;CACC,YAAA,MAAI,CAACA,gBAAL,GAAwB,IAAxB;CACA;CACD,SAND,MAQA;CACC,cAAI,MAAI,CAACA,gBAAL,IAAyB,CAAC,MAAI,CAACE,gBAAnC,EACA;CACC,YAAA,MAAI,CAACF,gBAAL,GAAwB,KAAxB;CACA;CACD;CACD,OAhBwC,EAgBtC,GAhBsC,CAAzC;;CAkBA,UAAIsD,KAAK,CAAC8G,MAAN,CAAaa,SAAb,KAA2B3H,KAAK,CAAC8G,MAAN,CAAapF,YAAb,GAA4B1B,KAAK,CAAC8G,MAAN,CAAac,YAAxE,EACA;CACC/G,QAAAA,YAAY,CAAC,KAAKlD,uBAAN,CAAZ;;CAEA,YAAI,KAAKjB,gBAAL,IAAyB,CAAC,KAAKE,gBAAnC,EACA;CACC,eAAKF,gBAAL,GAAwB,KAAxB;CACA;CACD;CACD,KAnFF;CAqFCmL,IAAAA,cArFD,4BAsFC;CAAA;;CAAA,UADeC,MACf,uEADwB,EACxB;CAAA,0BAKKA,MALL,CAEEC,KAFF;CAAA,UAEEA,KAFF,8BAEU,KAFV;CAAA,kCAKKD,MALL,CAGEE,oBAHF;CAAA,UAGEA,oBAHF,sCAGyB,KAHzB;CAAA,6BAKKF,MALL,CAIE1D,QAJF;CAAA,UAIEA,QAJF,iCAIa,IAJb;;CAOC,UAAI4D,oBAAoB,IAAI,KAAKvK,mBAAjC,EACA;CACC,eAAO,KAAP;CACA;;CAED,UAAI8D,IAAI,GAAG,KAAKC,KAAL,CAAWD,IAAtB;;CAEA,UAAI,KAAKc,MAAL,CAAYyD,OAAZ,GAAsB,CAA1B,EACA;CACC,YAAImC,iBAAiB,GAAG,KAAK5F,MAAL,CAAYyD,OAAZ,GAAsB,CAAtB,IAA2B,KAAKhH,oBAAhC,GAAsD,KAAKA,oBAA3D,GAAiF,KAAKzB,aAA9G;CACA8D,QAAAA,KAAK,CAACG,0BAAN,CAAiC,IAAjC,EAAuC,KAAKD,UAA5C,EAAwD4G,iBAAxD;;CAEA,YAAI,KAAK5F,MAAL,CAAYyD,OAAZ,GAAsB,KAAK/I,iBAA/B,EACA;CACC,eAAKD,iBAAL,GAAyB,IAAzB;CACA,eAAKD,oBAAL,GAA4B,KAA5B;CACA;;CAED,eAAO,IAAP;CACA;;CAED,WAAKH,gBAAL,GAAwB,KAAxB;;CAEA,UAAIqL,KAAJ,EACA;CACC5G,QAAAA,KAAK,CAACM,gBAAN,CAAuB,IAAvB,EAA6BF,IAAI,CAACG,YAAL,GAAoBH,IAAI,CAACI,YAAtD;;CAEA,YAAI,KAAKlG,iBAAT,EACA;CACC,eAAK6G,MAAL,CAAY4F,MAAZ,CAAmB,mCAAnB;CACA;;CACD,aAAKpL,iBAAL,GAAyB,IAAzB;CACA,aAAKD,oBAAL,GAA4B,KAA5B;CACA,OAVD,MAYA;CACC,YAAIsL,YAAY,GAAG,EAAnB;;CACA,YAAI/D,QAAJ,EACA;CACC+D,UAAAA,YAAY,CAAC/D,QAAb,GAAwBA,QAAxB;CACA;;CACD,aAAKD,QAAL;CACCiE,UAAAA,QAAQ,EAAE,oBAAM;CACf,gBAAI,MAAI,CAAC3M,iBAAT,EACA;CACC,cAAA,MAAI,CAAC6G,MAAL,CAAY4F,MAAZ,CAAmB,mCAAnB;CACA;;CACD,YAAA,MAAI,CAACpL,iBAAL,GAAyB,IAAzB;CACA,YAAA,MAAI,CAACD,oBAAL,GAA4B,KAA5B;CACA;CARF,WASIsL,YATJ;CAWA;CACD,KAlJF;CAoJChE,IAAAA,QApJD,sBAqJC;CAAA;;CAAA,UADS2D,MACT,uEADkB,EAClB;;CACC,UAAI,KAAKO,eAAT,EACA;CACCC,QAAAA,0BAAS,CAACC,MAAV,CAAiB,KAAKF,eAAtB;CACA,aAAK5L,eAAL,GAAuB,KAAvB;CACA;;CACD,UAAI,OAAOqL,MAAP,KAAkB,UAAtB,EACA;CACCA,QAAAA,MAAM,GAAG;CAACM,UAAAA,QAAQ,EAAEN;CAAX,SAAT;CACA;;CAED,UAAIvG,IAAI,GAAG,KAAKC,KAAL,CAAWD,IAAtB;;CACA,UAAI,CAACA,IAAL,EACA;CACC,YAAIuG,MAAM,CAACM,QAAP,IAAmB,OAAON,MAAM,CAACM,QAAd,KAA2B,UAAlD,EACA;CACCN,UAAAA,MAAM,CAACM,QAAP;CACA;;CACD,aAAKC,eAAL,GAAuB,IAAvB;CACA,aAAK5L,eAAL,GAAuB,KAAvB;CACA,eAAO,IAAP;CACA;;CAED,UACC8C,kBAAc,CAACsC,QAAf,CAAwB2G,KAAxB,MACCjJ,kBAAc,CAACsC,QAAf,CAAwB4G,aAAxB,KAA0C,EAA1C,IACGlJ,kBAAc,CAACsC,QAAf,CAAwB4G,aAAxB,KAA0C,IAH/C,EAMA;CACClH,QAAAA,IAAI,CAACoG,SAAL,GAAiBpG,IAAI,CAACG,YAAL,GAAoBH,IAAI,CAACI,YAA1C;CACA,eAAO,IAAP;CACA;;CAhCF,oBAwCKmG,MAxCL;CAAA,kCAmCE/E,KAnCF;CAAA,UAmCEA,KAnCF,8BAmCUxB,IAAI,CAACoG,SAnCf;CAAA,gCAoCEe,GApCF;CAAA,UAoCEA,GApCF,4BAoCQnH,IAAI,CAACG,YAAL,GAAoBH,IAAI,CAACI,YApCjC;CAAA,sCAqCEgH,SArCF;CAAA,UAqCEA,SArCF,kCAqCc,EArCd;CAAA,UAsCEP,SAtCF,WAsCEA,QAtCF;CAAA,sCAuCEhE,QAvCF;CAAA,UAuCEA,QAvCF,kCAuCa,GAvCb;CA0CC,UAAIwE,SAAS,GAAG,KAAKpH,KAAL,CAAWoH,SAA3B;;CAEA,UAAIA,SAAS,IAAKF,GAAG,GAAG3F,KAAP,GAAgB6F,SAAS,CAAChB,YAAV,GAAyB,CAA1D,EACA;CACC7E,QAAAA,KAAK,GAAG2F,GAAG,GAAGE,SAAS,CAAChB,YAAV,GAAyB,CAAvC;CACAiB,QAAAA,oBAAM,CAACC,IAAP,CAAY,qDAAZ;CACA;;CAED,WAAKrM,eAAL,GAAuB,IAAvB;CACAoM,MAAAA,oBAAM,CAACC,IAAP,CAAY,sDAAZ;CAEA,WAAKT,eAAL,GAAuBC,0BAAS,CAACvF,KAAV,CAAgB;CACtCA,QAAAA,KAAK,EAALA,KADsC;CAEtC2F,QAAAA,GAAG,EAAHA,GAFsC;CAGtCC,QAAAA,SAAS,EAATA,SAHsC;CAItCvE,QAAAA,QAAQ,EAARA,QAJsC;CAMtCxB,QAAAA,OAAO,EAAErB,IAN6B;CAOtCwH,QAAAA,eAAe,EAAE,WAPqB;CAStCX,QAAAA,QAAQ,EAAE,oBACV;CACC,UAAA,MAAI,CAACC,eAAL,GAAuB,IAAvB;CACA,UAAA,MAAI,CAAC5L,eAAL,GAAuB,KAAvB;;CACA,cAAI2L,SAAQ,IAAI,OAAOA,SAAP,KAAoB,UAApC,EACA;CACCA,YAAAA,SAAQ;CACR;CACD;CAjBqC,OAAhB,CAAvB;CAmBA,KA7NF;CA8NClI,IAAAA,gBA9ND,8BA+NC;CAAA,UADiBF,KACjB,uEADyB,EACzB;CACCA,MAAAA,KAAK,CAAC+H,KAAN,GAAc/H,KAAK,CAAC+H,KAAN,KAAgB,IAA9B;CACA/H,MAAAA,KAAK,CAACgI,oBAAN,GAA6BhI,KAAK,CAACgI,oBAAN,KAA+B,IAA5D;;CAEA,UAAI,KAAKlJ,oBAAT,EACA;CACC+J,QAAAA,oBAAM,CAACC,IAAP,CAAY,qDAAZ;CACA,eAAO,KAAP;CACA;;CAED,WAAKjB,cAAL,CAAoB7H,KAApB;CAEA,aAAO,IAAP;CACA,KA5OF;CA6OCS,IAAAA,mBA7OD,iCA8OC;CAAA;CACCI,MAAAA,YAAY,CAAC,KAAKmD,eAAN,CAAZ;;CAEA,UAAI,KAAKgC,WAAL,CAAiBC,MAAjB,CAAwBpB,IAAxB,KAAiCqB,mBAAU,CAACC,MAAhD,EACA;CACC,eAAO,KAAP;CACA;;CAED0C,MAAAA,oBAAM,CAACG,GAAP,CAAW,qBAAX;;CAEA,UAAI,CAAC,KAAKvL,mBAAV,EACA;CACC,aAAKuG,eAAL,GAAuBE,UAAU,CAAC;CAAA,iBAAM,MAAI,CAAC2D,cAAL,CAAoB;CAACE,YAAAA,KAAK,EAAE;CAAR,WAApB,CAAN;CAAA,SAAD,EAA2C,GAA3C,CAAjC;CACA;CACD,KA5PF;CA6PCrH,IAAAA,aA7PD,2BA8PC;AAAA,CACC,WAAKkB,aAAL,GAAqB,IAArB;CACA,WAAKnC,WAAL;CAEA,aAAO,IAAP;CACA,KAnQF;CAoQCkB,IAAAA,YApQD,0BAqQC;AAAA,CACC,WAAKiB,aAAL,GAAqB,KAArB;CACA,KAvQF;CAwQChC,IAAAA,cAxQD,4BAyQC;CAAA;;CACC,UAAI,CAAC,KAAKF,4BAAV,EACA;CACC,eAAO,KAAP;CACA;;CAED,UAAI,KAAKT,eAAL,IAAwB,CAAC,KAAK2C,aAA9B,IAA+C,KAAKyG,eAAxD,EACA;CACC,aAAK1I,qBAAL;CACA,eAAO,KAAP;CACA;;CAED,UACC,KAAK9B,wBAAL,GAAgC,GAAhC,GAAsC,IAAIC,IAAJ,GAAWC,OAAX,EADvC;CAAA,QAIA;CACC,eAAK4B,qBAAL;CACA,iBAAO,IAAP;CACA;;CAED,WAAKV,eAAL,GAAuB,IAAvB;CAEA4B,MAAAA,YAAY,CAAC,KAAKoI,sBAAN,CAAZ;CACA,WAAKA,sBAAL,GAA8B/E,UAAU,CAAC,YAAM;CAC9C,QAAA,MAAI,CAACjF,eAAL,GAAuB,KAAvB;CACA,OAFuC,EAErC,KAFqC,CAAxC;CAIA,UAAI4D,MAAM,GAAG,KAAKxB,UAAL,CAAgBwB,MAA7B;CACA,UAAIlG,gBAAgB,GAAG,KAAKA,gBAA5B;;CACA,UAAIkG,MAAM,GAAGlG,gBAAb,EACA;CACC,YAAIiG,OAAO,GAAG,KAAKpB,KAAL,CAAWD,IAAX,CAAgB2H,sBAAhB,CAAuChM,iCAAwB,CAACiM,QAAhE,EAA0E,CAA1E,CAAd;CAEA,aAAK7G,MAAL,CAAY4F,MAAZ,CAAmB,sCAAnB,EAA2D;CAACkB,UAAAA,KAAK,EAAE,KAAKrM;CAAb,SAA3D;CACAoE,QAAAA,KAAK,CAACkI,+BAAN,CAAsC,IAAtC,EAA4CzG,OAA5C;CAEA,eAAO,IAAP;CACA;;CAED,WAAKsE,KAAL,CAAW,gBAAX,EAA6B;CAACoC,QAAAA,MAAM,EAAE,KAAKzK;CAAd,OAA7B;CACA,KAlTF;CAmTCkB,IAAAA,aAnTD,2BAoTC;CACC,UAAI,CAAC,KAAKF,2BAAV,EACA;CACC,eAAO,KAAP;CACA;;CAED,UAAI,KAAKX,cAAL,IAAuB,CAAC,KAAK0C,aAA7B,IAA8C,KAAKyG,eAAvD,EACA;CACC,aAAKvI,oBAAL;CACA,eAAO,KAAP;CACA;;CAED,UACC,KAAKjC,wBAAL,GAAgC,EAAhC,GAAqC,IAAIC,IAAJ,GAAWC,OAAX,EADtC;CAAA,QAIA;CACC,eAAK+B,oBAAL;CACA,iBAAO,IAAP;CACA;;CAED,WAAKZ,cAAL,GAAsB,IAAtB;CACA,WAAKC,gBAAL,GAAwB,IAAxB;CAEA,WAAK+H,KAAL,CAAW,eAAX,EAA4B;CAACoC,QAAAA,MAAM,EAAE,KAAKjM;CAAd,OAA5B;CACA,KA7UF;CA8UC+C,IAAAA,sBA9UD,oCA+UC;CAAA;;CAAA,UADuBJ,KACvB,uEAD+B,EAC/B;;CACC,UAAIA,KAAK,CAACuJ,KAAV,EACA;CACC,aAAK1M,oBAAL,GAA4B,KAA5B;CACA,OAHD,MAKA;CACC,aAAKA,oBAAL,GAA4BmD,KAAK,CAACoJ,KAAN,GAAc,KAAKrM,iBAA/C;CACA,aAAKuF,MAAL,CAAY4F,MAAZ,CAAmB,sCAAnB,EAA2D;CAACkB,UAAAA,KAAK,EAAEpJ,KAAK,CAACoJ;CAAd,SAA3D;CACA;;CAED,UAAI,KAAKvM,oBAAT,EACA;CACC,aAAKC,iBAAL,GAAyB,KAAzB;CACA;;CAED,UAAI8F,OAAO,GAAG,KAAKpB,KAAL,CAAWD,IAAX,CAAgB2H,sBAAhB,CAAuChM,iCAAwB,CAACiM,QAAhE,EAA0E,CAA1E,CAAd;;CAEA,UAAInJ,KAAK,CAACoJ,KAAN,GAAc,CAAlB,EACA;CACC,YAAIxG,OAAJ,EACA;CACCzB,UAAAA,KAAK,CAACkI,+BAAN,CAAsC,IAAtC,EAA4CzG,OAA5C;CACA;CACD,OAND,MAOK,IAAI5C,KAAK,CAACuJ,KAAV,EACL;CACC3G,QAAAA,OAAO,CAAC4G,cAAR,CAAuB,IAAvB;CACA,OAHI,MAKL;CACCrI,QAAAA,KAAK,CAACM,gBAAN,CAAuB,IAAvB,EAA6B,CAA7B;CACA;;CAEDZ,MAAAA,YAAY,CAAC,KAAKoI,sBAAN,CAAZ;CACA,WAAKA,sBAAL,GAA8B/E,UAAU,CAAC,YAAM;CAC9C,QAAA,MAAI,CAACjF,eAAL,GAAuB,KAAvB;CACA,OAFuC,EAErC,IAFqC,CAAxC;CAIA,aAAO,IAAP;CACA,KAvXF;CAwXCoB,IAAAA,qBAxXD,mCAyXC;CAAA;;CAAA,UADsBL,KACtB,uEAD8B,EAC9B;;CACC,UAAIA,KAAK,CAACuJ,KAAV,EACA;CACC,aAAK1M,oBAAL,GAA4B,KAA5B;CACA,OAHD,MAKA;CACC,YAAImD,KAAK,CAACoJ,KAAN,GAAc,KAAKrM,iBAAvB,EACA;CACC,eAAKH,gBAAL,GAAwB,KAAxB;CACA;;CACD,aAAK0F,MAAL,CAAY4F,MAAZ,CAAmB,sCAAnB,EAA2D;CAACkB,UAAAA,KAAK,EAAEpJ,KAAK,CAACoJ;CAAd,SAA3D;CACA;;CAED,UAAI7H,IAAI,GAAG,KAAKC,KAAL,CAAWD,IAAtB;;CACA,UAAIvB,KAAK,CAACoJ,KAAN,GAAc,CAAlB,EACA,CADA,MAGK,IAAIpJ,KAAK,CAACuJ,KAAV,EACL;CACC,YAAI3G,OAAO,GAAG,KAAKpB,KAAL,CAAWD,IAAX,CAAgB2H,sBAAhB,CAAuChM,iCAAwB,CAACuM,gBAAhE,EAAkF,CAAlF,CAAd;;CACA,YAAI7G,OAAJ,EACA;CACCzB,UAAAA,KAAK,CAACM,gBAAN,CAAuB,IAAvB,EAA6BF,IAAI,CAACoG,SAAL,GAAiB/E,OAAO,CAACgF,YAAR,GAAqB,CAAnE;CACA,SAHD,MAKA;CACCzG,UAAAA,KAAK,CAACM,gBAAN,CAAuB,IAAvB,EAA6BF,IAAI,CAACG,YAAL,GAAoBH,IAAI,CAACI,YAAtD;CACA;CACD,OAXI,MAaL;CACCR,QAAAA,KAAK,CAACM,gBAAN,CAAuB,IAAvB,EAA6BF,IAAI,CAACG,YAAL,GAAoBH,IAAI,CAACI,YAAtD;CACA;;CAEDuC,MAAAA,UAAU,CAAC;CAAA,eAAM,OAAI,CAAChF,cAAL,GAAsB,KAA5B;CAAA,OAAD,EAAoC,IAApC,CAAV;CAEA,aAAO,IAAP;CACA,KA/ZF;CAgaCoB,IAAAA,kBAhaD,gCAiaC;AAAA,CACC,WAAKhB,kBAAL;CAEA,aAAO,IAAP;CACA,KAraF;CAsaCG,IAAAA,WAtaD,yBAuaC;CAAA;;CACC,UAAI,CAAC,KAAKmC,aAAV,EACA;CACC,eAAO,KAAP;CACA;;CAED,WAAKxC,gBAAL,GAAwB,KAAKA,gBAAL,CAAsBuD,MAAtB,CAA6B,UAAAsC,SAAS,EAC9D;CACC,YAAI,OAAI,CAAC5F,iBAAL,CAAuB4F,SAAvB,CAAJ,EACA;CACC,cAAI,OAAI,CAACxG,SAAL,CAAepE,YAAY,CAACG,IAA5B,CAAJ,EACA;CACC,YAAA,OAAI,CAACiE,SAAL,CAAepE,YAAY,CAACG,IAA5B,EAAkCkP,SAAlC,CAA4C,OAAI,CAACrK,iBAAL,CAAuB4F,SAAvB,CAA5C;CACA;;CACD,iBAAO,OAAI,CAAC5F,iBAAL,CAAuB4F,SAAvB,CAAP;CACA;;CAED,QAAA,OAAI,CAAC0E,kBAAL,CAAwB1E,SAAxB;;CACA,eAAO,KAAP;CACA,OAbuB,CAAxB;CAcA,KA3bF;CA4bC0E,IAAAA,kBA5bD,8BA4boB1E,SA5bpB,EA6bC;CACC,WAAKiC,KAAL,CAAW,aAAX,EAA0B;CAAC7D,QAAAA,EAAE,EAAE4B;CAAL,OAA1B;CACA,KA/bF;CAicC2E,IAAAA,iBAjcD,6BAicmB5J,KAjcnB,EAkcC;CACC,UAAI,CAAC,KAAK4B,aAAV,EACA;CACC,eAAO,KAAP;CACA;;CACD,WAAKsF,KAAL,CAAW,iBAAX,EAA8BlH,KAA9B;CACA,KAxcF;CA0cC6J,IAAAA,qBA1cD,iCA0cuB7J,KA1cvB,EA2cC;CACC,UAAI,CAAC,KAAK4B,aAAV,EACA;CACC,eAAO,KAAP;CACA;;CACD,WAAKsF,KAAL,CAAW,qBAAX,EAAkClH,KAAlC;CACA,KAjdF;CAmdC8J,IAAAA,uBAndD,mCAmdyB9J,KAndzB,EAodC;CACC,UAAI,CAAC,KAAK4B,aAAV,EACA;CACC,eAAO,KAAP;CACA;;CACD,WAAKsF,KAAL,CAAW,uBAAX,EAAoClH,KAApC;CACA,KA1dF;CA4dC+J,IAAAA,mBA5dD,+BA4dqB/J,KA5drB,EA6dC;CACC,WAAKkH,KAAL,CAAW,mBAAX,EAAgClH,KAAhC;CACA,KA/dF;CAieCgK,IAAAA,oBAjeD,gCAiesBhK,KAjetB,EAkeC;CACC,UAAI,CAAC,KAAK4B,aAAV,EACA;CACC,eAAO,KAAP;CACA;;CACD,WAAKsF,KAAL,CAAW,oBAAX,EAAiClH,KAAjC;CACA,KAxeF;CA0eCiK,IAAAA,qBA1eD,iCA0euBjK,KA1evB,EA2eC;CACC,UAAI,CAAC,KAAK4B,aAAV,EACA;CACC,eAAO,KAAP;CACA;;CACD,WAAKsF,KAAL,CAAW,qBAAX,EAAkClH,KAAlC;CACA,KAjfF;CAmfCkK,IAAAA,mBAnfD,+BAmfqBlK,KAnfrB,EAofC;CAAA;;CACC,UAAM2E,UAAU,GAAG,KAAKtC,MAAL,CAAYsC,UAAZ,CAAuBhC,MAAvB,CAA8B,UAAAqC,MAAM;CAAA,eAAIA,MAAM,CAACC,SAAP,KAAqB,OAAI,CAAC5H,aAA1B,IAA2C2H,MAAM,CAAC5J,MAAP,KAAkB,OAAI,CAAC8H,mBAAtE;CAAA,OAApC,CAAnB;CACA,WAAKgE,KAAL,CAAW,mBAAX,EAAgC;CAACiD,QAAAA,IAAI,EAAExF,UAAP;CAAmB3E,QAAAA,KAAK,EAALA;CAAnB,OAAhC;CACA,KAvfF;CAyfCoK,IAAAA,oBAzfD,gCAyfsBpK,KAzftB,EA0fC;CACC,WAAKkH,KAAL,CAAW,oBAAX,EAAiClH,KAAjC;CACA,KA5fF;CA8fCqK,IAAAA,yBA9fD,qCA8f2BrK,KA9f3B,EA+fC;CACC,WAAKkH,KAAL,CAAW,yBAAX,EAAsClH,KAAtC;CACA,KAjgBF;CAmgBCsK,IAAAA,aAngBD,yBAmgBetK,KAngBf,EAogBC;CACC,UAAI,CAAC,KAAK4B,aAAV,EACA;CACC,eAAO,KAAP;CACA;;CACD,WAAKzE,WAAL,GAAmB6C,KAAK,CAACuK,MAAzB;;CAEA,UAAI,CAACvK,KAAK,CAACuK,MAAX,EACA;CACC,aAAKnN,iBAAL,GAAyB,IAAzB;CACA;CACD,KA/gBF;CAihBCoN,IAAAA,cAjhBD,0BAihBgBxK,KAjhBhB,EAkhBC;CACC,UAAI,CAAC,KAAK4B,aAAV,EACA;CACC,eAAO,KAAP;CACA;;CACD,WAAKsF,KAAL,CAAW,cAAX,EAA2BlH,KAA3B;CACA,KAxhBF;CA0hBC0F,IAAAA,cA1hBD,4BA2hBC;CAAA;;CACC,UAAI,KAAK3G,kBAAT,EACA;CACC,eAAO,KAAKA,kBAAZ;CACA;;CAED,WAAKA,kBAAL,GAA0BlF,MAAM,CAAC4Q,MAAP,CAAcrF,EAAE,CAACsF,IAAH,CAAQ5M,IAAtB,CAA1B;;CACA,UAAI,KAAKqC,KAAL,CAAWiC,eAAf,EACA;CACC,aAAKrD,kBAAL,CAAwB4L,WAAxB,GAAsC,UAACC,MAAD;CAAA,iBAAY,OAAI,CAACzK,KAAL,CAAWiC,eAAX,CAA2BwI,MAA3B,CAAZ;CAAA,SAAtC;CACA;;CAED,aAAO,KAAK7L,kBAAZ;CACA,KAxiBF;CAyiBCuE,IAAAA,WAziBD,uBAyiBaC,IAziBb,EA0iBC;CACC,UAAMF,EAAE,GAAGlC,KAAK,CAAC0J,aAAN,CAAoBtH,IAApB,CAAX;;CACA,UAAI,KAAKvE,eAAL,CAAqBqE,EAArB,CAAJ,EACA;CACC,eAAO;CACNA,UAAAA,EAAE,EAAEA,EADE;CAENG,UAAAA,KAAK,EAAE,KAAKxE,eAAL,CAAqBqE,EAArB;CAFD,SAAP;CAIA;;CAED,UAAI6B,UAAU,GAAG3F,kBAAc,CAACgE,IAAf,CAAoB4B,aAApB,CAChBC,EAAE,CAACC,SAAH,CAAaC,KAAb,CAAmBC,UAAnB,CAA8BuF,UADd,EAEhB,KAAK3K,KAAL,CAAWiC,eAFK,CAAjB;CAKA,WAAKpD,eAAL,CAAqBqE,EAArB,IAA2B,KAAKqC,cAAL,GAAsBC,MAAtB,CAA6BT,UAA7B,EAAyC3B,IAAzC,CAA3B;CAEA,aAAO;CACNF,QAAAA,EAAE,EAAEA,EADE;CAENG,QAAAA,KAAK,EAAE,KAAKxE,eAAL,CAAqBqE,EAArB;CAFD,OAAP;CAIA,KA/jBF;CAikBC0H,IAAAA,gBAjkBD,4BAikBkBlG,IAjkBlB,EAikBwB9B,KAjkBxB,EAikB+BH,OAjkB/B,EAkkBC;CAAA;;CACC,UAAIoI,UAAU,GAAGpI,OAAO,CAACyE,OAAR,CAAgB2D,UAAjC;CACA,UAAIC,YAAY,GAAGrI,OAAO,CAACyE,OAAR,CAAgBxC,IAAnC;CACA,UAAItD,IAAI,GAAG,KAAKC,KAAL,CAAWD,IAAtB;;CAEA,UAAI,CAACA,IAAD,IAAS,CAACyJ,UAAd,EACA;CACC,eAAO,KAAP;CACA;;CAED,UAAIjI,KAAJ,EACA;CACC,YAAI,CAAC,KAAK/E,0BAAV,EACA;CACC,eAAKA,0BAAL,GAAkCuD,IAAI,CAACG,YAAvC;CACA,eAAKzD,wBAAL,GAAgCsD,IAAI,CAACG,YAArC;CACA,eAAKxD,kBAAL,GAA0BqD,IAAI,CAACoG,SAA/B;CACA,eAAKxJ,qBAAL,GAA6B,CAA7B;CAEA0C,UAAAA,YAAY,CAAC,KAAKmD,eAAN,CAAZ;CACA,eAAKvG,mBAAL,GAA2B,EAAE8D,IAAI,CAACoG,SAAL,GAAiB,KAAKjK,gBAAtB,IAA0C6D,IAAI,CAACG,YAAL,GAAoBH,IAAI,CAACI,YAArE,CAA3B;;CAEA,cAAI,KAAKlE,mBAAL,IAA4B,CAAC,KAAKf,gBAAlC,IAAsD,KAAKc,aAAL,GAAqB,CAA/E,EACA;CACC,iBAAKd,gBAAL,GAAwB,IAAxB;CACA;CACD;CACD,OAjBD,MAmBA;CACC,aAAKuB,wBAAL,GAAgCsD,IAAI,CAACG,YAArC;CACA;;CAED,UACC,CAAC,KAAKc,sBAAL,CAA4B0I,OAA7B,IACG,KAAK1I,sBAAL,CAA4B2I,WAA5B,KAA4CC,qBAAY,CAACC,GAF7D,EAIA;CACC,YAAItI,KAAJ,EACA;CACC,eAAKzE,mBAAL,CAAyBmF,IAAzB,CAA8BuH,UAA9B;CACA,SAHD,MAKA;CACC,eAAK1M,mBAAL,GAA2B,KAAKA,mBAAL,CAAyBqE,MAAzB,CAAgC,UAAAU,EAAE,EAAI;CAChE,mBAAO,OAAI,CAAC9E,yBAAL,CAA+ByM,UAA/B,CAAP;CACA,mBAAO3H,EAAE,KAAK2H,UAAd;CACA,WAH0B,CAA3B;CAIA;;CACD,aAAKM,cAAL;CACA,eAAO,KAAP;CACA;;CAED,UACC,CAAC,KAAK9I,sBAAL,CAA4B0I,OAA7B,IACG,KAAK1I,sBAAL,CAA4B2I,WAA5B,KAA4CC,qBAAY,CAACC,GAD5D,IAEG,KAAK7I,sBAAL,CAA4B+I,WAA5B,KAA4CH,qBAAY,CAACI,SAH7D,EAKA;CACC,YAAItK,QAAQ,GAAGC,KAAK,CAACC,qBAAN,CAA4B,KAAKC,UAAjC,CAAf;;CACA,YAAIH,QAAJ,EACA;CACCC,UAAAA,KAAK,CAACG,0BAAN,CAAiC,IAAjC,EAAuC,KAAKD,UAA5C,EAAwDH,QAAxD,EAAkE,IAAlE;CACA,iBAAO,KAAP;CACA;;CAEDC,QAAAA,KAAK,CAACM,gBAAN,CAAuB,IAAvB,EAA6BF,IAAI,CAACG,YAAL,GAAoBH,IAAI,CAACI,YAAtD;;CAEA,YAAIoB,KAAJ,EACA;CACC,eAAKzE,mBAAL,CAAyBmF,IAAzB,CAA8BuH,UAA9B;CACA,SAHD,MAKA;CACC,eAAK1M,mBAAL,GAA2B,KAAKA,mBAAL,CAAyBqE,MAAzB,CAAgC,UAAAU,EAAE,EAAI;CAChE,mBAAO,OAAI,CAAC9E,yBAAL,CAA+ByM,UAA/B,CAAP;CACA,mBAAO3H,EAAE,KAAK2H,UAAd;CACA,WAH0B,CAA3B;CAIA;;CAED,aAAKM,cAAL;CACA,eAAO,KAAP;CACA;;CAED,UAAIvI,KAAJ,EACA;CACC,YAAI8B,IAAI,KAAKhK,cAAa,CAACG,KAA3B,EACA;CACC,eAAKuD,yBAAL,CAA+ByM,UAA/B,IAA6CpI,OAAO,CAACgF,YAArD;CACA;;CAED,YAAI,KAAKvJ,aAAL,KAAuBxD,cAAa,CAACJ,IAAzC,EACA;CACC,eAAK4D,aAAL,GAAqBwG,IAArB;CACA,SAHD,MAIK,IAAI,KAAKxG,aAAL,KAAuBwG,IAA3B,EACL;CACC,eAAKxG,aAAL,GAAqBxD,cAAa,CAACC,KAAnC;CACA;;CAED,aAAKwD,mBAAL,CAAyBmF,IAAzB,CAA8BuH,UAA9B;CACA,OAjBD,MAmBA;CACC,YAAInG,IAAI,KAAKhK,cAAa,CAACE,KAA3B,EACA;CACC,cAAI0Q,MAAM,GAAG7I,OAAO,CAACgF,YAArB;CAEA,eAAKzJ,qBAAL,IAA8BsN,MAA9B;CACAlK,UAAAA,IAAI,CAACoG,SAAL,IAAkB8D,MAAlB;CACA,SAND,MAOK,IAAI5G,IAAI,KAAKhK,cAAa,CAACG,KAA3B,EACL;CACC,cAAIyQ,OAAM,GAAG,KAAKlN,yBAAL,CAA+ByM,UAA/B,IAA4C,KAAKzM,yBAAL,CAA+ByM,UAA/B,CAA5C,GAAwF,CAArG;;CACA,eAAK7M,qBAAL,IAA8BsN,OAA9B;CACAlK,UAAAA,IAAI,CAACoG,SAAL,IAAkB8D,OAAlB;CAEA,eAAKC,8BAAL,GAAsCT,YAAY,KAAKrR,YAAY,CAACG,OAApE;CACA;;CAED,aAAKuE,mBAAL,GAA2B,KAAKA,mBAAL,CAAyBqE,MAAzB,CAAgC,UAAAU,EAAE,EAAI;CAChE,iBAAO,OAAI,CAAC9E,yBAAL,CAA+ByM,UAA/B,CAAP;CACA,iBAAO3H,EAAE,KAAK2H,UAAd;CACA,SAH0B,CAA3B;CAIA;;CAED,WAAKM,cAAL;CACA,KAjsBF;CAmsBCA,IAAAA,cAnsBD,4BAosBC;CAAA;;CACC,UAAI,KAAKhN,mBAAL,CAAyBuE,MAAzB,GAAkC,CAAtC,EACA;CACC,eAAO,KAAP;CACA;;CAED,UAAItB,IAAI,GAAG,KAAKC,KAAL,CAAWD,IAAtB;;CAEA,UAAI,KAAKlD,aAAL,KAAuBxD,cAAa,CAACG,KAAzC,EACA;CACC,YAAI2Q,iBAAiB,GAAG,CAAxB,CADD;;CAIC,YAAIpK,IAAI,CAACoG,SAAL,KAAmB,KAAKzJ,kBAAL,GAA0B,KAAKC,qBAAtD,EACA;CACCwN,UAAAA,iBAAiB,GAAG,KAAKzN,kBAAL,GAA0B,KAAKC,qBAAnD;CACA,SAHD,MAKA;CACCwN,UAAAA,iBAAiB,GAAGpK,IAAI,CAACoG,SAAzB;CACA,SAXF;;;CAcC,YAAI,CAAC,KAAK+D,8BAAV,EACA;CACCC,UAAAA,iBAAiB,IAAI,KAAK1O,gCAA1B;CACA;;CAED,YAAI0O,iBAAiB,KAAKpK,IAAI,CAACoG,SAA/B,EACA;CACCxG,UAAAA,KAAK,CAACM,gBAAN,CAAuB,IAAvB,EAA6BkK,iBAA7B;CACA;CACD,OAxBD,MAyBK,IAAI,KAAKtN,aAAL,KAAuBxD,cAAa,CAACC,KAAzC,EACL;CACC,YAAIoG,QAAQ,GAAGC,KAAK,CAACC,qBAAN,CAA4B,KAAKC,UAAjC,CAAf;;CACA,YAAIH,QAAJ,EACA;CACCC,UAAAA,KAAK,CAACG,0BAAN,CAAiC,IAAjC,EAAuC,KAAKD,UAA5C,EAAwDH,QAAxD,EAAkE,IAAlE;CACA;CACD;;CAED,WAAK7C,aAAL,GAAqBxD,cAAa,CAACJ,IAAnC;CACA,WAAKuD,0BAAL,GAAkC,CAAlC;CACA,WAAKC,wBAAL,GAAgC,CAAhC;CACA,WAAKC,kBAAL,GAA0B,CAA1B;CACA,WAAKC,qBAAL,GAA6B,CAA7B;;CAEA,UAAIgD,KAAK,CAACyK,oBAAN,CAA2B,IAA3B,CAAJ,EACA;CACC,eAAO,KAAP;CACA;;CAED,UAAI,KAAKnO,mBAAT,EACA;CACCoL,QAAAA,oBAAM,CAACC,IAAP,CAAY,yDAAZ;CACA,eAAO,KAAP;CACA;;CAED,UAAI,KAAKtL,aAAL,GAAqB,CAArB,IAA0B,KAAKsB,oBAAnC,EACA;CACC,YAAI,KAAKK,gBAAT,EACA;CACC,eAAKA,gBAAL,GAAwB,KAAxB;CACA;CACA;;CAEDgC,QAAAA,KAAK,CAACG,0BAAN,CAAiC,IAAjC,EAAuC,KAAKD,UAA5C,EAAwD,KAAKvC,oBAA7D;CACA;CACA;;CAED,WAAKqF,QAAL,CAAc,YACd;CACC,YAAI,OAAI,CAAC3G,aAAL,IAAsB,CAAtB,IAA2B,OAAI,CAAC/B,iBAApC,EACA;CACC,UAAA,OAAI,CAAC6G,MAAL,CAAY4F,MAAZ,CAAmB,mCAAnB;CACA;CACD,OAND;CAOA;CAlxBF,GAzaD;CA8rCC2D,EAAAA,UAAU,EACV;CACC,uCACA;CACCC,MAAAA,QADD,oBACUlJ,OADV,EACmBmJ,QADnB,EAC6BC,KAD7B,EAEC;CACC,YAAID,QAAQ,CAAC3E,KAAT,KAAmB/M,YAAY,CAACI,IAApC,EACA;CACC,iBAAO,KAAP;CACA;;CAED,YAAI,CAACuR,KAAK,CAACC,OAAN,CAAcxN,SAAd,CAAwBsN,QAAQ,CAAC3E,KAAjC,CAAL,EACA;CACC4E,UAAAA,KAAK,CAACC,OAAN,CAAcxN,SAAd,CAAwBsN,QAAQ,CAAC3E,KAAjC,IAA0CjG,KAAK,CAAC+K,wBAAN,CAA+B;CACxErH,YAAAA,IAAI,EAAEkH,QAAQ,CAAC3E,KADyD;CAExE6E,YAAAA,OAAO,EAAED,KAAK,CAACC;CAFyD,WAA/B,CAA1C;CAIA;;CACDD,QAAAA,KAAK,CAACC,OAAN,CAAcxN,SAAd,CAAwBsN,QAAQ,CAAC3E,KAAjC,EAAwC+E,OAAxC,CAAgDvJ,OAAhD;CAEA,eAAO,IAAP;CACA,OAlBF;CAmBCwJ,MAAAA,MAnBD,kBAmBQxJ,OAnBR,EAmBiBmJ,QAnBjB,EAmB2BC,KAnB3B,EAoBC;CACC,YAAID,QAAQ,CAAC3E,KAAT,KAAmB/M,YAAY,CAACI,IAApC,EACA;CACC,iBAAO,IAAP;CACA;;CAED,YAAIuR,KAAK,CAACC,OAAN,CAAcxN,SAAd,CAAwBsN,QAAQ,CAAC3E,KAAjC,CAAJ,EACA;CACC4E,UAAAA,KAAK,CAACC,OAAN,CAAcxN,SAAd,CAAwBsN,QAAQ,CAAC3E,KAAjC,EAAwCsC,SAAxC,CAAkD9G,OAAlD;CACA;;CAED,eAAO,IAAP;CACA;CAhCF;CAFD,GA/rCD;CAquCCyJ,EAAAA,QAAQ;CAruCT,CADA;CAu0CA,IAAMlL,KAAK,GAAG;CACb0J,EAAAA,aADa,yBACCtH,IADD,EAEb;CACC,WAAOA,IAAI,CAAC+I,MAAL,GAAcrJ,KAAd,CAAoB,CAApB,EAAsB,EAAtB,CAAP;CACA,GAJY;CAMbsJ,EAAAA,eANa,2BAMGN,OANH,EAMY5K,UANZ,EAOb;CAAA,QADqC4D,SACrC,uEADiD,CACjD;CAAA,QADoD8C,KACpD,uEAD4D,KAC5D;CAAA,QADmEyE,UACnE,uEADgF,IAChF;CACC,QAAIjL,IAAI,GAAG0K,OAAO,CAACzK,KAAR,CAAcD,IAAzB;CAEA,QAAIqB,OAAO,GAAGrB,IAAI,CAAC2H,sBAAL,CAA4BhM,iCAAwB,CAACiM,QAAzB,GAAkC,GAAlC,GAAsClE,SAAlE,EAA6E,CAA7E,CAAd;CAEA,QAAIyD,GAAG,GAAG,CAAV;;CACA,QAAI,CAAC9F,OAAL,EACA;CACC,UAAI4J,UAAJ,EACA;CACC9D,QAAAA,GAAG,GAAG,EAAN;CACA,OAHD,MAKA;CACCA,QAAAA,GAAG,GAAGnH,IAAI,CAACG,YAAL,GAAoBH,IAAI,CAACI,YAA/B;CACA;CACD,KAVD,MAWK,IAAI6K,UAAJ,EACL;CACC9D,MAAAA,GAAG,GAAG9F,OAAO,CAAC6J,SAAR,GAAqBR,OAAO,CAACjP,2BAAR,GAAoC,CAA/D;CACA,KAHI,MAKL;CACC0L,MAAAA,GAAG,GAAG9F,OAAO,CAAC6J,SAAR,GAAoB7J,OAAO,CAACgF,YAA5B,GAA2CrG,IAAI,CAACI,YAAhD,GAAgEsK,OAAO,CAACjP,2BAAR,GAAoC,CAA1G;CACA;;CAED,QAAI+K,KAAJ,EACA;CACC,WAAKtG,gBAAL,CAAsBwK,OAAtB,EAA+BvD,GAA/B;CACA,KAHD,MAKA;CACCuD,MAAAA,OAAO,CAAC9H,QAAR,CAAiB;CAACuE,QAAAA,GAAG,EAAHA;CAAD,OAAjB;CACA;;CAED,WAAO,IAAP;CACA,GA3CY;CA6CbtH,EAAAA,qBA7Ca,iCA6CSC,UA7CT,EA8Cb;CACC,QAAIH,QAAQ,GAAG,IAAf;;CAEA,SAAK,IAAIwL,KAAK,GAAGrL,UAAU,CAACwB,MAAX,GAAkB,CAAnC,EAAsC6J,KAAK,IAAI,CAA/C,EAAkDA,KAAK,EAAvD,EACA;CACC,UAAI,CAACrL,UAAU,CAACqL,KAAD,CAAV,CAAkBnS,MAAvB,EACA;CACC;CACA;;CAED2G,MAAAA,QAAQ,GAAGG,UAAU,CAACqL,KAAD,CAAV,CAAkBrJ,EAA7B;CACA;;CAED,WAAOnC,QAAP;CACA,GA5DY;CA8DbO,EAAAA,gBA9Da,4BA8DIwK,OA9DJ,EA8DaU,QA9Db,EA+Db;CACC,QAAIpL,IAAI,GAAG0K,OAAO,CAACzK,KAAR,CAAcD,IAAzB;;CACA,QAAI,CAACA,IAAL,EACA;CACC,aAAO,KAAP;CACA;;CAED,QAAI0K,OAAO,CAAC5D,eAAZ,EACA;CACCC,MAAAA,0BAAS,CAACC,MAAV,CAAiB0D,OAAO,CAAC5D,eAAzB;CACA,WAAK5L,eAAL,GAAuB,KAAvB;CACAwP,MAAAA,OAAO,CAAC5D,eAAR,GAA0B,IAA1B;CACA;;CAED9G,IAAAA,IAAI,CAACoG,SAAL,GAAiBgF,QAAjB;CACA,GA9EY;CAgFbf,EAAAA,oBAhFa,gCAgFQK,OAhFR,EAiFb;CACC,QACCA,OAAO,CAACzJ,sBAAR,CAA+B0I,OAA/B,IACGe,OAAO,CAACzJ,sBAAR,CAA+B2I,WAA/B,KAA+CC,qBAAY,CAACC,GAFhE,EAGA;CACC,aAAO,KAAP;CACA;;CAEDY,IAAAA,OAAO,CAAC3J,MAAR,CAAesK,QAAf,CAAwB,4BAAxB,EAAsD;CAACrR,MAAAA,MAAM,EAAE0Q,OAAO,CAAC1Q;CAAjB,KAAtD;;CAEA,QAAI0Q,OAAO,CAACzJ,sBAAR,CAA+B+I,WAA/B,KAA+CH,qBAAY,CAACI,SAAhE,EACA;CACC,UAAIjK,IAAI,GAAG0K,OAAO,CAACzK,KAAR,CAAcD,IAAzB;CACA,WAAKE,gBAAL,CAAsBwK,OAAtB,EAA+B1K,IAAI,CAACG,YAAL,GAAoBH,IAAI,CAACI,YAAxD;CAEA,aAAO,IAAP;CACA;;CAED,QAAIsK,OAAO,CAACzJ,sBAAR,CAA+BqK,eAA/B,GAAiD,CAArD,EACA;CACC,UAAI3L,QAAQ,GAAGC,KAAK,CAACC,qBAAN,CAA4B6K,OAAO,CAAC5K,UAApC,CAAf;CACA,UAAIyL,WAAW,GAAGb,OAAO,CAACzJ,sBAAR,CAA+BqK,eAAjD;CACA,UAAI9E,KAAK,GAAG,CAACkE,OAAO,CAACzJ,sBAAR,CAA+BuK,gBAA5C;CACA,UAAIP,UAAU,GAAGP,OAAO,CAACzJ,sBAAR,CAA+BuK,gBAAhD;;CAEA,UAAI7L,QAAQ,IAAI4L,WAAW,GAAG5L,QAA9B,EACA;CACCsL,QAAAA,UAAU,GAAG,IAAb;CACAzE,QAAAA,KAAK,GAAG,IAAR;CACA+E,QAAAA,WAAW,GAAG5L,QAAd;CACAA,QAAAA,QAAQ,GAAG,IAAX;CACA;;CAEDC,MAAAA,KAAK,CAACoL,eAAN,CAAsBN,OAAtB,EAA+BA,OAAO,CAAC5K,UAAvC,EAAmDyL,WAAnD,EAAgE/E,KAAhE,EAAuEyE,UAAvE;;CAEA,UAAItL,QAAJ,EACA;CACCC,QAAAA,KAAK,CAACoL,eAAN,CAAsBN,OAAtB,EAA+BA,OAAO,CAAC5K,UAAvC,EAAmDH,QAAnD;CACA,eAAO,IAAP;CACA;CACD;;CAED,WAAO,KAAP;CACA,GA5HY;CA8HbI,EAAAA,0BA9Ha,sCA8Hc2K,OA9Hd,EA8HuB5K,UA9HvB,EA+Hb;CAAA,QADgDH,QAChD,uEAD2D,IAC3D;CAAA,QADiE6G,KACjE,uEADyE,KACzE;CACC,QAAIxG,IAAI,GAAG0K,OAAO,CAACzK,KAAR,CAAcD,IAAzB;CAEA,QAAIqB,OAAO,GAAG,KAAd;;CACA,QAAI1B,QAAQ,KAAK,IAAjB,EACA;CACC0B,MAAAA,OAAO,GAAGrB,IAAI,CAAC2H,sBAAL,CAA4BhM,iCAAwB,CAACiM,QAAzB,GAAkC,GAAlC,GAAsCjI,QAAlE,EAA4E,CAA5E,CAAV;CACA;;CACD,QAAI,CAAC0B,OAAL,EACA;CACC1B,MAAAA,QAAQ,GAAG,KAAKE,qBAAL,CAA2BC,UAA3B,CAAX;CACA;;CAED,SAAKkL,eAAL,CAAqBN,OAArB,EAA8B5K,UAA9B,EAA0CH,QAA1C,EAAoD6G,KAApD;CACA,GA7IY;CA+IbsB,EAAAA,+BA/Ia,2CA+ImB4C,OA/InB,EA+I4BrJ,OA/I5B,EAgJb;CAAA;;CACC,QAAIoK,WAAW,GAAGpK,OAAO,CAACsG,sBAAR,CAA+BhM,iCAAwB,CAAC+P,YAAxD,EAAsE,CAAtE,CAAlB;;CACA,QAAID,WAAJ,EACA;CACCpK,MAAAA,OAAO,GAAGoK,WAAV;CACA;;CAED,QAAIE,iBAAiB,GAAGtK,OAAO,CAACuK,qBAAR,GAAgCC,GAAxD;CAEAnB,IAAAA,OAAO,CAACoB,SAAR,CAAkB,YAClB;CACCxM,MAAAA,YAAY,CAACoL,OAAO,CAAChD,sBAAT,CAAZ;CACAgD,MAAAA,OAAO,CAAChD,sBAAR,GAAiC/E,UAAU,CAAC,YAAM;CACjD+H,QAAAA,OAAO,CAAChN,eAAR,GAA0B,KAA1B;CACA,OAF0C,EAExC,IAFwC,CAA3C;;CAIA,UAAI,CAAC2D,OAAL,EACA;CACC,eAAO,KAAP;CACA;;CAED,MAAA,OAAI,CAACnB,gBAAL,CAAsBwK,OAAtB,EAA+BrJ,OAAO,CAACuK,qBAAR,GAAgCC,GAAhC,GAAsCF,iBAArE;CACA,KAbD;CAcA,GAvKY;CAyKbI,EAAAA,8BAzKa,0CAyKkBrB,OAzKlB,EA0Kb;CAAA,QADwCpN,cACxC,uEADyD,CACzD;CACCoN,IAAAA,OAAO,CAACvP,gBAAR,GAA2B,IAA3B;;CAEA,QAAImC,cAAJ,EACA;CACC,WAAK0N,eAAL,CAAqBN,OAArB,EAA8BA,OAAO,CAAC5K,UAAtC,EAAkDxC,cAAlD,EAAkE,KAAlE,EAAyE,KAAzE;CACA;CACD,GAjLY;CAmLbqN,EAAAA,wBAnLa,oCAmLYqB,MAnLZ,EAoLb;CACC,QACC,OAAOhN,MAAM,CAACiN,oBAAd,KAAuC,WAAvC,IACGD,MAAM,CAACnG,KAAP,KAAiB/M,YAAY,CAACI,IAFlC,EAIA;CACC,aAAO;CACN0R,QAAAA,OAAO,EAAE,mBAAM,EADT;CAENzC,QAAAA,SAAS,EAAE,qBAAM;CAFX,OAAP;CAIA;;CAED,QAAI+D,gBAAJ,EAAsBC,eAAtB;;CAEA,QAAIH,MAAM,CAAC1I,IAAP,KAAgBxK,YAAY,CAACG,IAAjC,EACA;CACCiT,MAAAA,gBAAgB,GAAG,0BAAUE,OAAV,EAAmBC,QAAnB,EACnB;CACCD,QAAAA,OAAO,CAACvK,OAAR,CAAgB,UAASyK,KAAT,EAChB;CACC,cAAIC,aAAa,GAAG,KAApB;;CACA,cAAID,KAAK,CAACE,cAAV,EACA;CACC,gBAAIF,KAAK,CAACG,iBAAN,IAA2B,CAA/B,EACA;CACCF,cAAAA,aAAa,GAAG,IAAhB;CACA,aAHD,MAIK,IACJD,KAAK,CAACG,iBAAN,GAA0B,CAA1B,IACGH,KAAK,CAACI,UAAN,CAAiBC,MAAjB,GAA0BL,KAAK,CAACM,kBAAN,CAAyBD,MAAzB,GAAkC,EAD/D,IAEGL,KAAK,CAACO,gBAAN,CAAuBF,MAAvB,GAAgCL,KAAK,CAACI,UAAN,CAAiBC,MAAjB,GAA0B,CAHzD,EAKL;CACCJ,cAAAA,aAAa,GAAG,IAAhB;CACA;CACD;;CAED,cAAIA,aAAJ,EACA;CACCP,YAAAA,MAAM,CAACtB,OAAP,CAAe7M,gBAAf,CAAgCqE,IAAhC,CAAqCoK,KAAK,CAAC/G,MAAN,CAAaO,OAAb,CAAqBpC,SAA1D;CACAsI,YAAAA,MAAM,CAACtB,OAAP,CAAe5M,iBAAf,CAAiCwO,KAAK,CAAC/G,MAAN,CAAaO,OAAb,CAAqBpC,SAAtD,IAAmE4I,KAAK,CAAC/G,MAAzE;CACA,WAJD,MAMA;CACCyG,YAAAA,MAAM,CAACtB,OAAP,CAAe7M,gBAAf,GAAkCmO,MAAM,CAACtB,OAAP,CAAe7M,gBAAf,CAAgCuD,MAAhC,CAAuC,UAAAsC,SAAS;CAAA,qBAAIA,SAAS,KAAK4I,KAAK,CAAC/G,MAAN,CAAaO,OAAb,CAAqBpC,SAAvC;CAAA,aAAhD,CAAlC;CACA,mBAAOsI,MAAM,CAACtB,OAAP,CAAe5M,iBAAf,CAAiCwO,KAAK,CAAC/G,MAAN,CAAaO,OAAb,CAAqBpC,SAAtD,CAAP;CACA;;CAED,cAAIsI,MAAM,CAACtB,OAAP,CAAenQ,kBAAnB,EACA;CACCyR,YAAAA,MAAM,CAACtB,OAAP,CAAe3M,kBAAf;CACA;CAED,SAnCD;CAoCA,OAtCD;;CAuCAoO,MAAAA,eAAe,GAAG;CACjBW,QAAAA,IAAI,EAAEd,MAAM,CAACtB,OAAP,CAAezK,KAAf,CAAqBD,IADV;CAEjB+M,QAAAA,SAAS,EAAE,IAAIC,KAAJ,CAAU,GAAV,EAAeC,IAAf,CAAoB,CAApB,EAAuBjK,GAAvB,CAA2B,UAACkK,IAAD,EAAO/B,KAAP;CAAA,iBAAiBA,KAAK,GAAG,IAAzB;CAAA,SAA3B;CAFM,OAAlB;CAIA,KA7CD,MA+CA;CACCe,MAAAA,gBAAgB,GAAG,0BAAUE,OAAV,EAAmBC,QAAnB,EACnB;CACCD,QAAAA,OAAO,CAACvK,OAAR,CAAgB,UAASyK,KAAT,EAChB;CACC,cAAIA,KAAK,CAACE,cAAV,EACA;CACC,gBAAIR,MAAM,CAAC1I,IAAP,KAAgBxK,YAAY,CAACE,MAAjC,EACA;CACCgT,cAAAA,MAAM,CAACtB,OAAP,CAAepM,2BAAf,GAA6C,IAA7C;CACA0N,cAAAA,MAAM,CAACtB,OAAP,CAAenM,oBAAf;CACA,aAJD,MAMA;CACCyN,cAAAA,MAAM,CAACtB,OAAP,CAAevM,4BAAf,GAA8C,IAA9C;CACA6N,cAAAA,MAAM,CAACtB,OAAP,CAAetM,qBAAf;CACA;CACD,WAZD,MAcA;CACC,gBAAI4N,MAAM,CAAC1I,IAAP,KAAgBxK,YAAY,CAACE,MAAjC,EACA;CACCgT,cAAAA,MAAM,CAACtB,OAAP,CAAepM,2BAAf,GAA6C,KAA7C;CACA,aAHD,MAKA;CACC0N,cAAAA,MAAM,CAACtB,OAAP,CAAevM,4BAAf,GAA8C,KAA9C;CACA;CACD;CACD,SA1BD;CA2BA,OA7BD;;CA8BAgO,MAAAA,eAAe,GAAG;CACjBW,QAAAA,IAAI,EAAEd,MAAM,CAACtB,OAAP,CAAezK,KAAf,CAAqBD,IADV;CAEjB+M,QAAAA,SAAS,EAAE,CAAC,CAAD,EAAI,IAAJ,EAAU,IAAV,EAAgB,CAAhB;CAFM,OAAlB;CAIA;;CAED,WAAO,IAAId,oBAAJ,CAAyBC,gBAAzB,EAA2CC,eAA3C,CAAP;CACA;CAvRY,CAAd;CA0RA,IAAMhK,MAAM,GAAG;CACdG,EAAAA,YADc,0BAEd;CAAA,QADaR,EACb,uEADkB,CAClB;CACC,WAAO;CACN2H,MAAAA,UAAU,EAAE,cAAY3H,EADlB;CAEN4H,MAAAA,YAAY,EAAErR,YAAY,CAACI;CAFrB,KAAP;CAIA,GAPa;CAQd2J,EAAAA,QARc,sBASd;CAAA,QADSN,EACT,uEADc,CACd;CAAA,QADiBuB,IACjB,uEADwB,EACxB;CACC,WAAO;CACNoG,MAAAA,UAAU,EAAE,UAAQ3H,EADd;CAEN4H,MAAAA,YAAY,EAAErR,YAAY,CAACK,KAFrB;CAGN2K,MAAAA,IAAI,EAAEA;CAHA,KAAP;CAKA,GAfa;CAgBd8J,EAAAA,gBAhBc,8BAiBd;CACC,WAAO;CACN1D,MAAAA,UAAU,EAAE,eADN;CAENC,MAAAA,YAAY,EAAErR,YAAY,CAACM;CAFrB,KAAP;CAIA,GAtBa;CAuBdyU,EAAAA,eAvBc,6BAwBd;CACC,WAAO;CACN3D,MAAAA,UAAU,EAAE,cADN;CAENC,MAAAA,YAAY,EAAErR,YAAY,CAACO;CAFrB,KAAP;CAIA,GA7Ba;CA8BdyU,EAAAA,aA9Bc,2BA+Bd;CAAA,QADcvL,EACd,uEADmB,CACnB;CAAA,QADsBuB,IACtB,uEAD6B,EAC7B;CAAA,QADiCC,IACjC,uEADwCnK,eAAe,CAACC,MACxD;CACC,WAAO;CACNqQ,MAAAA,UAAU,EAAE,eAAa3H,EAAb,GAAgBwB,IADtB;CAENoG,MAAAA,YAAY,EAAErR,YAAY,CAACQ,MAFrB;CAGNwK,MAAAA,IAAI,EAAEA,IAHA;CAINC,MAAAA,IAAI,EAAEA,IAJA;CAKNI,MAAAA,SAAS,EAAE5B;CALL,KAAP;CAOA;CAvCa,CAAf;;;;"} dialog/dist/dialog.bundle.map.js 0000664 00000072326 14774417471 0012623 0 ustar 00 {"version":3,"sources":["dialog.bundle.js"],"names":["exports","main_polyfill_intersectionobserver","ui_vue","ui_vue_vuex","im_view_message","im_const","im_lib_utils","im_lib_animation","im_lib_logger","TemplateType","Object","freeze","message","delimiter","group","historyLoader","unreadLoader","button","ObserverType","history","unread","read","none","LoadButtonTypes","before","after","_AnimationType","mixed","enter","leave","Vue","component","props","userId","default","dialogId","chatId","messageLimit","messageExtraCount","listenEventScrollToBottom","listenEventRequestHistory","listenEventRequestUnread","listenEventSendReadMessages","enableReadMessages","enableReactions","enableDateActions","enableCreateContent","enableGestureQuote","enableGestureQuoteFromRight","enableGestureMenu","showMessageUserName","showMessageAvatar","showMessageMenu","data","scrollAnimating","showScrollButton","messageShowCount","unreadLoaderShow","historyLoaderBlocked","historyLoaderShow","startMessageLimit","templateMessageScrollOffset","templateMessageWithNameDifferent","DialogReferenceClassName","captureMove","capturedMoveEvent","lastMessageId","maxMessageId","created","this","unreadCounter","scrollChangedByUser","scrollButtonDiff","scrollButtonShowTimeout","scrollPosition","scrollPositionChangeTime","Date","getTime","animationScrollHeightStart","animationScrollHeightEnd","animationScrollTop","animationScrollChange","animationScrollLastUserId","animationType","animationCollection","animationCollectionOffset","animationLastElementBeforeStart","observers","requestHistoryInterval","requestUnreadInterval","lastAuthorId","firstMessageId","firstUnreadMessageId","dateFormatFunction","cacheGroupTitle","waitLoadHistory","waitLoadUnread","skipUnreadScroll","readMessageQueue","readMessageTarget","readMessageDelayed","Utils","debounce","readMessage","requestHistoryBlockIntersect","requestHistoryDelayed","requestHistory","requestUnreadBlockIntersect","requestUnreadDelayed","requestUnread","event","$on","onScrollToBottom","$root","onRequestHistoryAnswer","onRequestUnreadAnswer","onSendReadMessages","window","addEventListener","onOrientationChange","onWindowFocus","onWindowBlur","beforeDestroy","clearTimeout","clearInterval","$off","removeEventListener","mounted","unreadId","getFirstUnreadMessage","collection","scrollToFirstUnreadMessage","body","$refs","scrollToPosition","scrollHeight","clientHeight","windowFocused","platform","isBitrixMobile","document","hasFocus","computed","babelHelpers","objectSpread","localize","getFilteredPhrases","$bitrixMessages","dialog","$store","getters","collectionMutationType","elementsWithLimit","_this","unreadCount","filter","element","length","showLimit","start","slicedCollection","slice","lastMessageAuthorId","groupNode","forEach","id","_groupTitle","date","title","push","Blocks","getGroup","authorId","getDelimiter","unreadLastId","statusWriting","_this2","scrollToTimeout","writingList","setTimeout","scrollTo","duration","IM_MESSENGER_DIALOG_WRITES_MESSAGE","replace","map","userName","join","statusReaded","_this3","readedList","text","type","DialogType","private","record","messageId","dateFormat","getFormatType","BX","Messenger","Const","DateFormat","readedTitle","IM_MESSENGER_DIALOG_MESSAGES_READED_USER","_getDateFormat","format","IM_MESSENGER_DIALOG_MESSAGES_READED_CHAT","IM_MESSENGER_DIALOG_MESSAGES_READED_CHAT_PLURAL","counter","scrollBlocked","application","device","DeviceType","mobile","isDarkBackground","options","darkBackground","isMobile","AnimationType","Vuex","mapState","state","methods","onDialogClick","testNode","target","className","onCommandClick","onMentionClick","$emit","onDialogMove","value","dataset","entity","nextSibling","innerHTML","command","onScroll","_this4","scrollTop","offsetHeight","scrollToBottom","_this5","params","arguments","undefined","_params$force","force","_params$cancelIfScrol","cancelIfScrollChange","_params$duration","scrollToMessageId","commit","scrollParams","callback","_this6","animateScrollId","Animation","cancel","isIos","getIosVersion","_params","_params$start","_params$end","end","_params$increment","increment","_callback","_params$duration2","container","Logger","warn","elementProperty","_this7","log","_this8","waitLoadHistoryTimeout","getElementsByClassName","listItem","count","scrollToElementAfterLoadHistory","lastId","_this9","error","scrollIntoView","_this10","listUnreadLoader","_this11","unobserve","requestReadMessage","onClickByUserName","onClickByUploadCancel","onClickByKeyboardButton","onClickByChatTeaser","onClickByMessageMenu","onClickByMessageRetry","onClickByReadedList","_this12","list","onMessageReactionSet","onMessageReactionListOpen","onDragMessage","result","onQuoteMessage","_this13","create","Main","_getMessage","phrase","getDateFormat","groupTitle","animationTrigger","_this14","templateId","templateType","applied","initialType","MutationType","set","animationStart","appliedType","setBefore","offset","_offset","animationScrollLastIsDelimeter","_this15","newScrollPosition","scrollByMutationType","directives","bx-im-directive-dialog-observer","inserted","bindings","vnode","context","getMessageLoaderObserver","observe","unbind","template","toJSON","scrollToMessage","stickToTop","offsetTop","index","position","dispatch","scrollMessageId","toMessageId","scrollStickToTop","_this16","elementBody","listItemBody","previousOffsetTop","getBoundingClientRect","top","$nextTick","scrollToElementAfterLoadUnread","config","IntersectionObserver","observerCallback","observerOptions","entries","observer","entry","sendReadEvent","isIntersecting","intersectionRatio","rootBounds","height","boundingClientRect","intersectionRect","root","threshold","Array","fill","zero","getHistoryLoader","getUnreadLoader","getLoadButton","Lib"],"mappings":"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","file":"dialog.bundle.map.js"} dialog/dist/dialog.bundle.min.js 0000664 00000100054 14774417471 0012617 0 ustar 00 (function(t,e,i,s,o,n,a,r,l){"use strict";var c=Object.freeze({message:"message",delimiter:"delimiter",group:"group",historyLoader:"historyLoader",unreadLoader:"unreadLoader",button:"button"});var u=Object.freeze({history:"history",unread:"unread",read:"read",none:"none"});var d=Object.freeze({before:"before",after:"after"});var h=Object.freeze({none:"none",mixed:"mixed",enter:"enter",leave:"leave"});i.Vue.component("bx-im-view-dialog",{props:{userId:{default:0},dialogId:{default:0},chatId:{default:0},messageLimit:{default:20},messageExtraCount:{default:0},listenEventScrollToBottom:{default:""},listenEventRequestHistory:{default:""},listenEventRequestUnread:{default:""},listenEventSendReadMessages:{default:""},enableReadMessages:{default:true},enableReactions:{default:true},enableDateActions:{default:true},enableCreateContent:{default:true},enableGestureQuote:{default:true},enableGestureQuoteFromRight:{default:true},enableGestureMenu:{default:false},showMessageUserName:{default:true},showMessageAvatar:{default:true},showMessageMenu:{default:true}},data:function t(){return{scrollAnimating:false,showScrollButton:false,messageShowCount:0,unreadLoaderShow:false,historyLoaderBlocked:false,historyLoaderShow:true,startMessageLimit:0,templateMessageScrollOffset:20,templateMessageWithNameDifferent:29,TemplateType:c,ObserverType:u,DialogReferenceClassName:n.DialogReferenceClassName,captureMove:false,capturedMoveEvent:null,lastMessageId:null,maxMessageId:null}},created:function t(){this.showScrollButton=this.unreadCounter>0;this.scrollChangedByUser=false;this.scrollButtonDiff=100;this.scrollButtonShowTimeout=null;this.scrollPosition=0;this.scrollPositionChangeTime=(new Date).getTime();this.animationScrollHeightStart=0;this.animationScrollHeightEnd=0;this.animationScrollTop=0;this.animationScrollChange=0;this.animationScrollLastUserId=0;this.animationType=h.none;this.animationCollection=[];this.animationCollectionOffset={};this.animationLastElementBeforeStart=0;this.observers={};this.requestHistoryInterval=null;this.requestUnreadInterval=null;this.lastAuthorId=0;this.firstMessageId=null;this.firstUnreadMessageId=null;this.dateFormatFunction=null;this.cacheGroupTitle={};this.waitLoadHistory=false;this.waitLoadUnread=false;this.skipUnreadScroll=false;this.readMessageQueue=[];this.readMessageTarget={};this.readMessageDelayed=a.Utils.debounce(this.readMessage,50,this);this.requestHistoryBlockIntersect=false;this.requestHistoryDelayed=a.Utils.debounce(this.requestHistory,50,this);this.requestUnreadBlockIntersect=false;this.requestUnreadDelayed=a.Utils.debounce(this.requestUnread,50,this);this.startMessageLimit=this.messageLimit;if(this.listenEventScrollToBottom){i.Vue.event.$on(this.listenEventScrollToBottom,this.onScrollToBottom);this.$root.$on(this.listenEventScrollToBottom,this.onScrollToBottom)}if(this.listenEventRequestHistory){i.Vue.event.$on(this.listenEventRequestHistory,this.onRequestHistoryAnswer);this.$root.$on(this.listenEventRequestHistory,this.onRequestHistoryAnswer)}if(this.listenEventRequestUnread){i.Vue.event.$on(this.listenEventRequestUnread,this.onRequestUnreadAnswer);this.$root.$on(this.listenEventRequestUnread,this.onRequestUnreadAnswer)}if(this.listenEventSendReadMessages){i.Vue.event.$on(this.listenEventSendReadMessages,this.onSendReadMessages);this.$root.$on(this.listenEventSendReadMessages,this.onSendReadMessages)}window.addEventListener("orientationchange",this.onOrientationChange);window.addEventListener("focus",this.onWindowFocus);window.addEventListener("blur",this.onWindowBlur);i.Vue.event.$on("bitrixmobile:controller:focus",this.onWindowFocus);i.Vue.event.$on("bitrixmobile:controller:blur",this.onWindowBlur)},beforeDestroy:function t(){this.observers={};clearTimeout(this.scrollButtonShowTimeout);clearInterval(this.requestHistoryInterval);clearInterval(this.requestUnreadInterval);if(this.listenEventScrollToBottom){i.Vue.event.$off(this.listenEventScrollToBottom,this.onScrollToBottom);this.$root.$off(this.listenEventScrollToBottom,this.onScrollToBottom)}if(this.listenEventRequestHistory){i.Vue.event.$off(this.listenEventRequestHistory,this.onRequestHistoryAnswer);this.$root.$off(this.listenEventRequestHistory,this.onRequestHistoryAnswer)}if(this.listenEventRequestUnread){i.Vue.event.$off(this.listenEventRequestUnread,this.onRequestUnreadAnswer);this.$root.$off(this.listenEventRequestUnread,this.onRequestUnreadAnswer)}if(this.listenEventSendReadMessages){i.Vue.event.$off(this.listenEventSendReadMessages,this.onSendReadMessages);this.$root.$off(this.listenEventSendReadMessages,this.onSendReadMessages)}window.removeEventListener("orientationchange",this.onOrientationChange);window.removeEventListener("focus",this.onWindowFocus);window.removeEventListener("blur",this.onWindowBlur);i.Vue.event.$off("bitrixmobile:controller:focus",this.onWindowFocus);i.Vue.event.$off("bitrixmobile:controller:blur",this.onWindowBlur)},mounted:function t(){var e=f.getFirstUnreadMessage(this.collection);if(e){f.scrollToFirstUnreadMessage(this,this.collection,e,true)}else{var i=this.$refs.body;f.scrollToPosition(this,i.scrollHeight-i.clientHeight)}this.windowFocused=a.Utils.platform.isBitrixMobile()?true:document.hasFocus()},computed:babelHelpers.objectSpread({localize:function t(){return i.Vue.getFilteredPhrases("IM_MESSENGER_DIALOG_",this.$root.$bitrixMessages)},dialog:function t(){var t=this.$store.getters["dialogues/get"](this.dialogId);return t?t:this.$store.getters["dialogues/getBlank"]()},collectionMutationType:function t(){return this.$store.getters["messages/getMutationType"](this.chatId)},collection:function t(){return this.$store.getters["messages/get"](this.chatId)},elementsWithLimit:function t(){var e=this;var i=this.collection.filter(function(t){return t.unread}).length;var s=this.messageExtraCount+this.messageLimit*2;if(i>s){s=i}var o=this.collection.length-s;if(!this.historyLoaderShow||o<0){o=0}var n=o===0?this.collection:this.collection.slice(o,this.collection.length);this.messageShowCount=n.length;this.firstMessageId=null;this.lastMessageId=0;this.maxMessageId=0;this.lastMessageAuthorId=0;var a=[];var r=0;var l={};this.firstUnreadMessageId=0;if(this.messageShowCount>0){n.forEach(function(t){if(e.firstMessageId===null||e.firstMessageId>t.id){e.firstMessageId=t.id}if(e.maxMessageId<t.id){e.maxMessageId=t.id}e.lastMessageId=t.id;var i=e._groupTitle(t.date);if(!l[i.title]){l[i.title]=i.id;a.push(g.getGroup(i.id,i.title))}else if(r!==t.authorId){a.push(g.getDelimiter(t.id))}a.push(t);r=t.authorId;if(t.unread){if(!e.firstUnreadMessageId){e.firstUnreadMessageId=t.id}}});this.lastMessageAuthorId=r}else{this.firstMessageId=0}if(this.collection.length>=this.messageLimit&&this.collection.length>=this.messageShowCount&&this.historyLoaderBlocked===false){this.historyLoaderShow=true}else{this.historyLoaderShow=false}if(this.dialog.unreadLastId>this.maxMessageId){this.unreadLoaderShow=true}else{this.unreadLoaderShow=false}return a},statusWriting:function t(){var e=this;clearTimeout(this.scrollToTimeout);if(this.dialog.writingList.length===0){return""}if(!this.scrollChangedByUser&&!this.showScrollButton){this.scrollToTimeout=setTimeout(function(){return e.scrollTo({duration:500})},300)}return this.localize.IM_MESSENGER_DIALOG_WRITES_MESSAGE.replace("#USER#",this.dialog.writingList.map(function(t){return t.userName}).join(", "))},statusReaded:function t(){var e=this;clearTimeout(this.scrollToTimeout);if(this.dialog.readedList.length===0){return""}var i="";if(this.dialog.type===n.DialogType.private){var s=this.dialog.readedList[0];if(s.messageId===this.lastMessageId&&s.userId!==this.lastMessageAuthorId){var o=a.Utils.date.getFormatType(BX.Messenger.Const.DateFormat.readedTitle,this.$root.$bitrixMessages);i=this.localize.IM_MESSENGER_DIALOG_MESSAGES_READED_USER.replace("#DATE#",this._getDateFormat().format(o,s.date))}}else{var r=this.dialog.readedList.filter(function(t){return t.messageId===e.lastMessageId&&t.userId!==e.lastMessageAuthorId});if(r.length===1){i=this.localize.IM_MESSENGER_DIALOG_MESSAGES_READED_CHAT.replace("#USERS#",r[0].userName)}else if(r.length>1){i=this.localize.IM_MESSENGER_DIALOG_MESSAGES_READED_CHAT.replace("#USERS#",this.localize.IM_MESSENGER_DIALOG_MESSAGES_READED_CHAT_PLURAL.replace("#USER#",r[0].userName).replace("#COUNT#",r.length-1).replace("[LINK]","").replace("[/LINK]",""))}}if(!i){return""}if(!this.scrollChangedByUser&&!this.showScrollButton){this.scrollToTimeout=setTimeout(function(){return e.scrollTo({duration:500})},300)}return i},unreadCounter:function t(){return this.dialog.counter>999?999:this.dialog.counter},scrollBlocked:function t(){if(this.application.device.type!==n.DeviceType.mobile){return false}return this.scrollAnimating||this.captureMove},isDarkBackground:function t(){return this.application.options.darkBackground},isMobile:function t(){return this.application.device.type===n.DeviceType.mobile},AnimationType:function t(){return h}},s.Vuex.mapState({application:function t(e){return e.application}})),methods:{onDialogClick:function t(e){if(i.Vue.testNode(e.target,{className:"bx-im-message-command"})){this.onCommandClick(e)}else if(i.Vue.testNode(e.target,{className:"bx-im-mention"})){this.onMentionClick(e)}this.windowFocused=true;this.$emit("click",{event:e})},onDialogMove:function t(e){if(!this.captureMove){return}this.capturedMoveEvent=e},onCommandClick:function t(e){var i="";if(e.target.dataset.entity==="send"||e.target.dataset.entity==="put"){i=e.target.nextSibling.innerHTML}else if(e.target.dataset.entity==="call"){i=e.target.dataset.command}this.$emit("clickByCommand",{type:e.target.dataset.entity,value:i,event:e})},onMentionClick:function t(e){this.$emit("clickByMention",{type:e.target.dataset.type,value:e.target.dataset.value,event:e})},onScroll:function t(e){var i=this;clearTimeout(this.scrollToTimeout);this.scrollPosition=e.target.scrollTop;this.scrollPositionChangeTime=(new Date).getTime();this.scrollChangedByUser=!(e.target.scrollTop+this.scrollButtonDiff>=e.target.scrollHeight-e.target.clientHeight);clearTimeout(this.scrollButtonShowTimeout);this.scrollButtonShowTimeout=setTimeout(function(){if(i.scrollChangedByUser){if(!i.showScrollButton){i.showScrollButton=true}}else{if(i.showScrollButton&&!i.unreadLoaderShow){i.showScrollButton=false}}},200);if(e.target.scrollTop===e.target.scrollHeight-e.target.offsetHeight){clearTimeout(this.scrollButtonShowTimeout);if(this.showScrollButton&&!this.unreadLoaderShow){this.showScrollButton=false}}},scrollToBottom:function t(){var e=this;var i=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var s=i.force,o=s===void 0?false:s,n=i.cancelIfScrollChange,a=n===void 0?false:n,r=i.duration,l=r===void 0?null:r;if(a&&this.scrollChangedByUser){return false}var c=this.$refs.body;if(this.dialog.counter>0){var u=this.dialog.counter>1&&this.firstUnreadMessageId?this.firstUnreadMessageId:this.lastMessageId;f.scrollToFirstUnreadMessage(this,this.collection,u);if(this.dialog.counter<this.startMessageLimit){this.historyLoaderShow=true;this.historyLoaderBlocked=false}return true}this.showScrollButton=false;if(o){f.scrollToPosition(this,c.scrollHeight-c.clientHeight);if(this.messageExtraCount){this.$store.commit("application/clearDialogExtraCount")}this.historyLoaderShow=true;this.historyLoaderBlocked=false}else{var d={};if(l){d.duration=l}this.scrollTo(babelHelpers.objectSpread({callback:function t(){if(e.messageExtraCount){e.$store.commit("application/clearDialogExtraCount")}e.historyLoaderShow=true;e.historyLoaderBlocked=false}},d))}},scrollTo:function t(){var e=this;var i=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};if(this.animateScrollId){r.Animation.cancel(this.animateScrollId);this.scrollAnimating=false}if(typeof i==="function"){i={callback:i}}var s=this.$refs.body;if(!s){if(i.callback&&typeof i.callback==="function"){i.callback()}this.animateScrollId=null;this.scrollAnimating=false;return true}if(a.Utils.platform.isIos()&&a.Utils.platform.getIosVersion()>12&&a.Utils.platform.getIosVersion()<13.2){s.scrollTop=s.scrollHeight-s.clientHeight;return true}var o=i,n=o.start,c=n===void 0?s.scrollTop:n,u=o.end,d=u===void 0?s.scrollHeight-s.clientHeight:u,h=o.increment,f=h===void 0?20:h,g=o.callback,m=o.duration,v=m===void 0?500:m;var p=this.$refs.container;if(p&&d-c>p.offsetHeight*3){c=d-p.offsetHeight*3;l.Logger.warn("Dialog.scrollTo: Scroll trajectory has been reduced")}this.scrollAnimating=true;l.Logger.warn("Dialog.scrollTo: User scroll blocked while scrolling");this.animateScrollId=r.Animation.start({start:c,end:d,increment:f,duration:v,element:s,elementProperty:"scrollTop",callback:function t(){e.animateScrollId=null;e.scrollAnimating=false;if(g&&typeof g==="function"){g()}}})},onScrollToBottom:function t(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};e.force=e.force===true;e.cancelIfScrollChange=e.cancelIfScrollChange===true;if(this.firstUnreadMessageId){l.Logger.warn("Dialog.onScrollToBottom: canceled - unread messages");return false}this.scrollToBottom(e);return true},onOrientationChange:function t(){var e=this;clearTimeout(this.scrollToTimeout);if(this.application.device.type!==n.DeviceType.mobile){return false}l.Logger.log("Orientation changed");if(!this.scrollChangedByUser){this.scrollToTimeout=setTimeout(function(){return e.scrollToBottom({force:true})},300)}},onWindowFocus:function t(){this.windowFocused=true;this.readMessage();return true},onWindowBlur:function t(){this.windowFocused=false},requestHistory:function t(){var e=this;if(!this.requestHistoryBlockIntersect){return false}if(this.waitLoadHistory||!this.windowFocused||this.animateScrollId){this.requestHistoryDelayed();return false}if(this.scrollPositionChangeTime+100>(new Date).getTime()){this.requestHistoryDelayed();return true}this.waitLoadHistory=true;clearTimeout(this.waitLoadHistoryTimeout);this.waitLoadHistoryTimeout=setTimeout(function(){e.waitLoadHistory=false},1e4);var i=this.collection.length;var s=this.messageShowCount;if(i>s){var o=this.$refs.body.getElementsByClassName(n.DialogReferenceClassName.listItem)[0];this.$store.commit("application/increaseDialogExtraCount",{count:this.startMessageLimit});f.scrollToElementAfterLoadHistory(this,o);return true}this.$emit("requestHistory",{lastId:this.firstMessageId})},requestUnread:function t(){if(!this.requestUnreadBlockIntersect){return false}if(this.waitLoadUnread||!this.windowFocused||this.animateScrollId){this.requestUnreadDelayed();return false}if(this.scrollPositionChangeTime+10>(new Date).getTime()){this.requestUnreadDelayed();return true}this.waitLoadUnread=true;this.skipUnreadScroll=true;this.$emit("requestUnread",{lastId:this.lastMessageId})},onRequestHistoryAnswer:function t(){var e=this;var i=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};if(i.error){this.historyLoaderBlocked=false}else{this.historyLoaderBlocked=i.count<this.startMessageLimit;this.$store.commit("application/increaseDialogExtraCount",{count:i.count})}if(this.historyLoaderBlocked){this.historyLoaderShow=false}var s=this.$refs.body.getElementsByClassName(n.DialogReferenceClassName.listItem)[0];if(i.count>0){if(s){f.scrollToElementAfterLoadHistory(this,s)}}else if(i.error){s.scrollIntoView(true)}else{f.scrollToPosition(this,0)}clearTimeout(this.waitLoadHistoryTimeout);this.waitLoadHistoryTimeout=setTimeout(function(){e.waitLoadHistory=false},1e3);return true},onRequestUnreadAnswer:function t(){var e=this;var i=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};if(i.error){this.historyLoaderBlocked=false}else{if(i.count<this.startMessageLimit){this.unreadLoaderShow=false}this.$store.commit("application/increaseDialogExtraCount",{count:i.count})}var s=this.$refs.body;if(i.count>0);else if(i.error){var o=this.$refs.body.getElementsByClassName(n.DialogReferenceClassName.listUnreadLoader)[0];if(o){f.scrollToPosition(this,s.scrollTop-o.offsetHeight*2)}else{f.scrollToPosition(this,s.scrollHeight-s.clientHeight)}}else{f.scrollToPosition(this,s.scrollHeight-s.clientHeight)}setTimeout(function(){return e.waitLoadUnread=false},1e3);return true},onSendReadMessages:function t(){this.readMessageDelayed();return true},readMessage:function t(){var e=this;if(!this.windowFocused){return false}this.readMessageQueue=this.readMessageQueue.filter(function(t){if(e.readMessageTarget[t]){if(e.observers[u.read]){e.observers[u.read].unobserve(e.readMessageTarget[t])}delete e.readMessageTarget[t]}e.requestReadMessage(t);return false})},requestReadMessage:function t(e){this.$emit("readMessage",{id:e})},onClickByUserName:function t(e){if(!this.windowFocused){return false}this.$emit("clickByUserName",e)},onClickByUploadCancel:function t(e){if(!this.windowFocused){return false}this.$emit("clickByUploadCancel",e)},onClickByKeyboardButton:function t(e){if(!this.windowFocused){return false}this.$emit("clickByKeyboardButton",e)},onClickByChatTeaser:function t(e){this.$emit("clickByChatTeaser",e)},onClickByMessageMenu:function t(e){if(!this.windowFocused){return false}this.$emit("clickByMessageMenu",e)},onClickByMessageRetry:function t(e){if(!this.windowFocused){return false}this.$emit("clickByMessageRetry",e)},onClickByReadedList:function t(e){var i=this;var s=this.dialog.readedList.filter(function(t){return t.messageId===i.lastMessageId&&t.userId!==i.lastMessageAuthorId});this.$emit("clickByReadedList",{list:s,event:e})},onMessageReactionSet:function t(e){this.$emit("setMessageReaction",e)},onMessageReactionListOpen:function t(e){this.$emit("openMessageReactionList",e)},onDragMessage:function t(e){if(!this.windowFocused){return false}this.captureMove=e.result;if(!e.result){this.capturedMoveEvent=null}},onQuoteMessage:function t(e){if(!this.windowFocused){return false}this.$emit("quoteMessage",e)},_getDateFormat:function t(){var e=this;if(this.dateFormatFunction){return this.dateFormatFunction}this.dateFormatFunction=Object.create(BX.Main.Date);if(this.$root.$bitrixMessages){this.dateFormatFunction._getMessage=function(t){return e.$root.$bitrixMessages[t]}}return this.dateFormatFunction},_groupTitle:function t(e){var i=f.getDateFormat(e);if(this.cacheGroupTitle[i]){return{id:i,title:this.cacheGroupTitle[i]}}var s=a.Utils.date.getFormatType(BX.Messenger.Const.DateFormat.groupTitle,this.$root.$bitrixMessages);this.cacheGroupTitle[i]=this._getDateFormat().format(s,e);return{id:i,title:this.cacheGroupTitle[i]}},animationTrigger:function t(e,i,s){var o=this;var a=s.dataset.templateId;var r=s.dataset.type;var l=this.$refs.body;if(!l||!a){return false}if(i){if(!this.animationScrollHeightStart){this.animationScrollHeightStart=l.scrollHeight;this.animationScrollHeightEnd=l.scrollHeight;this.animationScrollTop=l.scrollTop;this.animationScrollChange=0;clearTimeout(this.scrollToTimeout);this.scrollChangedByUser=!(l.scrollTop+this.scrollButtonDiff>=l.scrollHeight-l.clientHeight);if(this.scrollChangedByUser&&!this.showScrollButton&&this.unreadCounter>1){this.showScrollButton=true}}}else{this.animationScrollHeightEnd=l.scrollHeight}if(!this.collectionMutationType.applied&&this.collectionMutationType.initialType!==n.MutationType.set){if(i){this.animationCollection.push(a)}else{this.animationCollection=this.animationCollection.filter(function(t){delete o.animationCollectionOffset[a];return t!==a})}this.animationStart();return false}if(!this.collectionMutationType.applied&&this.collectionMutationType.initialType===n.MutationType.set&&this.collectionMutationType.appliedType===n.MutationType.setBefore){var u=f.getFirstUnreadMessage(this.collection);if(u){f.scrollToFirstUnreadMessage(this,this.collection,u,true);return false}f.scrollToPosition(this,l.scrollHeight-l.clientHeight);if(i){this.animationCollection.push(a)}else{this.animationCollection=this.animationCollection.filter(function(t){delete o.animationCollectionOffset[a];return t!==a})}this.animationStart();return false}if(i){if(e===h.leave){this.animationCollectionOffset[a]=s.offsetHeight}if(this.animationType===h.none){this.animationType=e}else if(this.animationType!==e){this.animationType=h.mixed}this.animationCollection.push(a)}else{if(e===h.enter){var d=s.offsetHeight;this.animationScrollChange+=d;l.scrollTop+=d}else if(e===h.leave){var g=this.animationCollectionOffset[a]?this.animationCollectionOffset[a]:0;this.animationScrollChange-=g;l.scrollTop-=g;this.animationScrollLastIsDelimeter=r!==c.message}this.animationCollection=this.animationCollection.filter(function(t){delete o.animationCollectionOffset[a];return t!==a})}this.animationStart()},animationStart:function t(){var e=this;if(this.animationCollection.length>0){return false}var i=this.$refs.body;if(this.animationType===h.leave){var s=0;if(i.scrollTop!==this.animationScrollTop+this.animationScrollChange){s=this.animationScrollTop+this.animationScrollChange}else{s=i.scrollTop}if(!this.animationScrollLastIsDelimeter){s+=this.templateMessageWithNameDifferent}if(s!==i.scrollTop){f.scrollToPosition(this,s)}}else if(this.animationType===h.mixed){var o=f.getFirstUnreadMessage(this.collection);if(o){f.scrollToFirstUnreadMessage(this,this.collection,o,true)}}this.animationType=h.none;this.animationScrollHeightStart=0;this.animationScrollHeightEnd=0;this.animationScrollTop=0;this.animationScrollChange=0;if(f.scrollByMutationType(this)){return false}if(this.scrollChangedByUser){l.Logger.warn("Dialog.animationStart: canceled: scroll changed by user");return false}if(this.unreadCounter>0&&this.firstUnreadMessageId){if(this.skipUnreadScroll){this.skipUnreadScroll=false;return}f.scrollToFirstUnreadMessage(this,this.collection,this.firstUnreadMessageId);return}this.scrollTo(function(){if(e.unreadCounter<=0&&e.messageExtraCount){e.$store.commit("application/clearDialogExtraCount")}})}},directives:{"bx-im-directive-dialog-observer":{inserted:function t(e,i,s){if(i.value===u.none){return false}if(!s.context.observers[i.value]){s.context.observers[i.value]=f.getMessageLoaderObserver({type:i.value,context:s.context})}s.context.observers[i.value].observe(e);return true},unbind:function t(e,i,s){if(i.value===u.none){return true}if(s.context.observers[i.value]){s.context.observers[i.value].unobserve(e)}return true}}},template:'\n\t\t<div class="bx-im-dialog" @click="onDialogClick" @touchmove="onDialogMove" ref="container">\t\n\t\t\t<div :class="[DialogReferenceClassName.listBody, {\n\t\t\t\t\'bx-im-dialog-list-scroll-blocked\': scrollBlocked, \n\t\t\t\t\'bx-im-dialog-dark-background\': isDarkBackground,\n\t\t\t\t\'bx-im-dialog-mobile\': isMobile,\n\t\t\t}]" @scroll.passive="onScroll" ref="body">\n\t\t\t\t<template v-if="historyLoaderShow">\n\t\t\t\t\t<div class="bx-im-dialog-load-more bx-im-dialog-load-more-history" v-bx-im-directive-dialog-observer="ObserverType.history">\n\t\t\t\t\t\t<span class="bx-im-dialog-load-more-text">{{ localize.IM_MESSENGER_DIALOG_LOAD_MESSAGES }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\t\t\t\t<transition-group \n\t\t\t\t\ttag="div" class="bx-im-dialog-list-box" name="bx-im-dialog-message-animation" \n\t\t\t\t\t@before-enter="animationTrigger(AnimationType.enter, true, $event)" \n\t\t\t\t\t@after-enter="animationTrigger(AnimationType.enter, false, $event)" \n\t\t\t\t\t@before-leave="animationTrigger(AnimationType.leave, true, $event)" \n\t\t\t\t\t@after-leave="animationTrigger(AnimationType.leave, false, $event)"\n\t\t\t\t>\n\t\t\t\t\t<template v-for="element in elementsWithLimit">\n\t\t\t\t\t\t<template v-if="element.templateType == TemplateType.message">\n\t\t\t\t\t\t\t<div :class="[\'bx-im-dialog-list-item\', DialogReferenceClassName.listItem, DialogReferenceClassName.listItem+\'-\'+element.id]" :data-message-id="element.id" :data-template-id="element.templateId" :data-type="element.templateType" :key="element.templateId" v-bx-im-directive-dialog-observer="element.unread? ObserverType.read: ObserverType.none">\t\t\t\n\t\t\t\t\t\t\t\t<component :is="element.params.COMPONENT_ID"\n\t\t\t\t\t\t\t\t\t:userId="userId" \n\t\t\t\t\t\t\t\t\t:dialogId="dialogId"\n\t\t\t\t\t\t\t\t\t:chatId="chatId"\n\t\t\t\t\t\t\t\t\t:dialog="dialog"\n\t\t\t\t\t\t\t\t\t:message="element"\n\t\t\t\t\t\t\t\t\t:enableReactions="enableReactions"\n\t\t\t\t\t\t\t\t\t:enableDateActions="enableDateActions"\n\t\t\t\t\t\t\t\t\t:enableCreateContent="showMessageMenu"\n\t\t\t\t\t\t\t\t\t:enableGestureQuote="enableGestureQuote"\n\t\t\t\t\t\t\t\t\t:enableGestureQuoteFromRight="enableGestureQuoteFromRight"\n\t\t\t\t\t\t\t\t\t:enableGestureMenu="enableGestureMenu"\n\t\t\t\t\t\t\t\t\t:showName="showMessageUserName"\n\t\t\t\t\t\t\t\t\t:showAvatar="showMessageAvatar"\n\t\t\t\t\t\t\t\t\t:showMenu="showMessageMenu"\n\t\t\t\t\t\t\t\t\t:capturedMoveEvent="capturedMoveEvent"\n\t\t\t\t\t\t\t\t\t:referenceContentClassName="DialogReferenceClassName.listItem"\n\t\t\t\t\t\t\t\t\t:referenceContentBodyClassName="DialogReferenceClassName.listItemBody"\n\t\t\t\t\t\t\t\t\t:referenceContentNameClassName="DialogReferenceClassName.listItemName"\n\t\t\t\t\t\t\t\t\t@clickByUserName="onClickByUserName"\n\t\t\t\t\t\t\t\t\t@clickByUploadCancel="onClickByUploadCancel"\n\t\t\t\t\t\t\t\t\t@clickByKeyboardButton="onClickByKeyboardButton"\n\t\t\t\t\t\t\t\t\t@clickByChatTeaser="onClickByChatTeaser"\n\t\t\t\t\t\t\t\t\t@clickByMessageMenu="onClickByMessageMenu"\n\t\t\t\t\t\t\t\t\t@clickByMessageRetry="onClickByMessageRetry"\n\t\t\t\t\t\t\t\t\t@setMessageReaction="onMessageReactionSet"\n\t\t\t\t\t\t\t\t\t@openMessageReactionList="onMessageReactionListOpen"\n\t\t\t\t\t\t\t\t\t@dragMessage="onDragMessage"\n\t\t\t\t\t\t\t\t\t@quoteMessage="onQuoteMessage"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<template v-else-if="element.templateType == TemplateType.group">\n\t\t\t\t\t\t\t<div class="bx-im-dialog-group" :data-template-id="element.templateId" :data-type="element.templateType" :key="element.templateId">\n\t\t\t\t\t\t\t\t<div class="bx-im-dialog-group-date">{{ element.text }}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<template v-else-if="element.templateType == TemplateType.delimiter">\n\t\t\t\t\t\t\t<div class="bx-im-dialog-delimiter" :data-template-id="element.templateId" :data-type="element.templateType" :key="element.templateId"></div>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</template>\n\t\t\t\t</transition-group>\n\t\t\t\t<template v-if="unreadLoaderShow">\n\t\t\t\t\t<div :class="[\'bx-im-dialog-load-more\', \'bx-im-dialog-load-more-unread\', DialogReferenceClassName.listUnreadLoader]" v-bx-im-directive-dialog-observer="ObserverType.unread">\n\t\t\t\t\t\t<span class="bx-im-dialog-load-more-text">{{ localize.IM_MESSENGER_DIALOG_LOAD_MESSAGES }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\t\t\t\t<transition name="bx-im-dialog-status">\n\t\t\t\t\t<template v-if="statusWriting">\n\t\t\t\t\t\t<div class="bx-im-dialog-status">\n\t\t\t\t\t\t\t<span class="bx-im-dialog-status-writing"></span>\n\t\t\t\t\t\t\t{{ statusWriting }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</template>\n\t\t\t\t\t<template v-else-if="statusReaded">\n\t\t\t\t\t\t<div class="bx-im-dialog-status" @click="onClickByReadedList">\n\t\t\t\t\t\t\t{{ statusReaded }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</template>\n\t\t\t\t</transition>\n\t\t\t</div>\n\t\t\t<transition name="bx-im-dialog-scroll-button">\n\t\t\t\t<div v-show="showScrollButton || unreadLoaderShow && unreadCounter" class="bx-im-dialog-scroll-button-box" @click="scrollToBottom()">\n\t\t\t\t\t<div class="bx-im-dialog-scroll-button">\n\t\t\t\t\t\t<div v-show="unreadCounter" class="bx-im-dialog-scroll-button-counter">\n\t\t\t\t\t\t\t<div class="bx-im-dialog-scroll-button-counter-digit">{{unreadCounter}}</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class="bx-im-dialog-scroll-button-arrow"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</transition>\n\t\t</div>\n\t'});var f={getDateFormat:function t(e){return e.toJSON().slice(0,10)},scrollToMessage:function t(e,i){var s=arguments.length>2&&arguments[2]!==undefined?arguments[2]:0;var o=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;var a=arguments.length>4&&arguments[4]!==undefined?arguments[4]:true;var r=e.$refs.body;var l=r.getElementsByClassName(n.DialogReferenceClassName.listItem+"-"+s)[0];var c=0;if(!l){if(a){c=10}else{c=r.scrollHeight-r.clientHeight}}else if(a){c=l.offsetTop-e.templateMessageScrollOffset/2}else{c=l.offsetTop+l.offsetHeight-r.clientHeight+e.templateMessageScrollOffset/2}if(o){this.scrollToPosition(e,c)}else{e.scrollTo({end:c})}return true},getFirstUnreadMessage:function t(e){var i=null;for(var s=e.length-1;s>=0;s--){if(!e[s].unread){break}i=e[s].id}return i},scrollToPosition:function t(e,i){var s=e.$refs.body;if(!s){return false}if(e.animateScrollId){r.Animation.cancel(e.animateScrollId);this.scrollAnimating=false;e.animateScrollId=null}s.scrollTop=i},scrollByMutationType:function t(e){if(e.collectionMutationType.applied||e.collectionMutationType.initialType!==n.MutationType.set){return false}e.$store.dispatch("messages/applyMutationType",{chatId:e.chatId});if(e.collectionMutationType.appliedType===n.MutationType.setBefore){var i=e.$refs.body;this.scrollToPosition(e,i.scrollHeight-i.clientHeight);return true}if(e.collectionMutationType.scrollMessageId>0){var s=f.getFirstUnreadMessage(e.collection);var o=e.collectionMutationType.scrollMessageId;var a=!e.collectionMutationType.scrollStickToTop;var r=e.collectionMutationType.scrollStickToTop;if(s&&o>s){r=true;a=true;o=s;s=null}f.scrollToMessage(e,e.collection,o,a,r);if(s){f.scrollToMessage(e,e.collection,s);return true}}return false},scrollToFirstUnreadMessage:function t(e,i){var s=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;var o=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;var a=e.$refs.body;var r=false;if(s!==null){r=a.getElementsByClassName(n.DialogReferenceClassName.listItem+"-"+s)[0]}if(!r){s=this.getFirstUnreadMessage(i)}this.scrollToMessage(e,i,s,o)},scrollToElementAfterLoadHistory:function t(e,i){var s=this;var o=i.getElementsByClassName(n.DialogReferenceClassName.listItemBody)[0];if(o){i=o}var a=i.getBoundingClientRect().top;e.$nextTick(function(){clearTimeout(e.waitLoadHistoryTimeout);e.waitLoadHistoryTimeout=setTimeout(function(){e.waitLoadHistory=false},1e3);if(!i){return false}s.scrollToPosition(e,i.getBoundingClientRect().top-a)})},scrollToElementAfterLoadUnread:function t(e){var i=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;e.showScrollButton=true;if(i){this.scrollToMessage(e,e.collection,i,false,false)}},getMessageLoaderObserver:function t(e){if(typeof window.IntersectionObserver==="undefined"||e.value===u.none){return{observe:function t(){},unobserve:function t(){}}}var i,s;if(e.type===u.read){i=function t(i,s){i.forEach(function(t){var i=false;if(t.isIntersecting){if(t.intersectionRatio>=1){i=true}else if(t.intersectionRatio>0&&t.rootBounds.height<t.boundingClientRect.height+20&&t.intersectionRect.height>t.rootBounds.height/2){i=true}}if(i){e.context.readMessageQueue.push(t.target.dataset.messageId);e.context.readMessageTarget[t.target.dataset.messageId]=t.target}else{e.context.readMessageQueue=e.context.readMessageQueue.filter(function(e){return e!==t.target.dataset.messageId});delete e.context.readMessageTarget[t.target.dataset.messageId]}if(e.context.enableReadMessages){e.context.readMessageDelayed()}})};s={root:e.context.$refs.body,threshold:new Array(101).fill(0).map(function(t,e){return e*.01})}}else{i=function t(i,s){i.forEach(function(t){if(t.isIntersecting){if(e.type===u.unread){e.context.requestUnreadBlockIntersect=true;e.context.requestUnreadDelayed()}else{e.context.requestHistoryBlockIntersect=true;e.context.requestHistoryDelayed()}}else{if(e.type===u.unread){e.context.requestUnreadBlockIntersect=false}else{e.context.requestHistoryBlockIntersect=false}}})};s={root:e.context.$refs.body,threshold:[0,.01,.99,1]}}return new IntersectionObserver(i,s)}};var g={getDelimiter:function t(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:0;return{templateId:"delimiter"+e,templateType:c.delimiter}},getGroup:function t(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:0;var i=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"";return{templateId:"group"+e,templateType:c.group,text:i}},getHistoryLoader:function t(){return{templateId:"historyLoader",templateType:c.historyLoader}},getUnreadLoader:function t(){return{templateId:"unreadLoader",templateType:c.unreadLoader}},getLoadButton:function t(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:0;var i=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"";var s=arguments.length>2&&arguments[2]!==undefined?arguments[2]:d.before;return{templateId:"loadButton"+e+s,templateType:c.button,text:i,type:s,messageId:e}}}})(this.window=this.window||{},BX,BX,BX,window,BX.Messenger.Const,BX.Messenger.Lib,BX.Messenger.Lib,BX.Messenger.Lib); //# sourceMappingURL=dialog.bundle.map.js dialog/dist/dialog.bundle.js 0000664 00000147423 14774417471 0012050 0 ustar 00 (function (exports,main_polyfill_intersectionobserver,ui_vue,ui_vue_vuex,im_view_message,im_const,im_lib_utils,im_lib_animation,im_lib_logger) { 'use strict'; /** * Bitrix Messenger * Dialog Vue component * * @package bitrix * @subpackage im * @copyright 2001-2019 Bitrix */ var TemplateType = Object.freeze({ message: 'message', delimiter: 'delimiter', group: 'group', historyLoader: 'historyLoader', unreadLoader: 'unreadLoader', button: 'button' }); var ObserverType = Object.freeze({ history: 'history', unread: 'unread', read: 'read', none: 'none' }); var LoadButtonTypes = Object.freeze({ before: 'before', after: 'after' }); var _AnimationType = Object.freeze({ none: 'none', mixed: 'mixed', enter: 'enter', leave: 'leave' }); ui_vue.Vue.component('bx-im-view-dialog', { /** * @emits 'requestHistory' {lastId: number, limit: number} * @emits 'requestUnread' {lastId: number, limit: number} * @emits 'readMessage' {id: number} * @emits 'quoteMessage' {message: object} * @emits 'click' {event: MouseEvent} * @emits 'clickByUserName' {user: object, event: MouseEvent} * @emits 'clickByUploadCancel' {file: object, event: MouseEvent} * @emits 'clickByKeyboardButton' {message: object, action: string, params: Object} * @emits 'clickByChatTeaser' {message: object, event: MouseEvent} * @emits 'clickByMessageMenu' {message: object, event: MouseEvent} * @emits 'clickByCommand' {type: string, value: string, event: MouseEvent} * @emits 'clickByMention' {type: string, value: string, event: MouseEvent} * @emits 'clickByMessageRetry' {message: object, event: MouseEvent} * @emits 'clickByReadedList' {list: array, event: MouseEvent} * @emits 'setMessageReaction' {message: object, reaction: object} * @emits 'openMessageReactionList' {message: object, values: object} */ /** * @listens props.listenEventScrollToBottom {force:boolean, cancelIfScrollChange:boolean} (global|application) -- scroll dialog to bottom, see more in methods.onScrollToBottom() * @listens props.listenEventRequestHistory {count:number} (application) * @listens props.listenEventRequestUnread {count:number} (application) * @listens props.listenEventSendReadMessages {} (application) */ props: { userId: { default: 0 }, dialogId: { default: 0 }, chatId: { default: 0 }, messageLimit: { default: 20 }, messageExtraCount: { default: 0 }, listenEventScrollToBottom: { default: '' }, listenEventRequestHistory: { default: '' }, listenEventRequestUnread: { default: '' }, listenEventSendReadMessages: { default: '' }, enableReadMessages: { default: true }, enableReactions: { default: true }, enableDateActions: { default: true }, enableCreateContent: { default: true }, enableGestureQuote: { default: true }, enableGestureQuoteFromRight: { default: true }, enableGestureMenu: { default: false }, showMessageUserName: { default: true }, showMessageAvatar: { default: true }, showMessageMenu: { default: true } }, data: function data() { return { scrollAnimating: false, showScrollButton: false, messageShowCount: 0, unreadLoaderShow: false, historyLoaderBlocked: false, historyLoaderShow: true, startMessageLimit: 0, templateMessageScrollOffset: 20, templateMessageWithNameDifferent: 29, // name block + padding top TemplateType: TemplateType, ObserverType: ObserverType, DialogReferenceClassName: im_const.DialogReferenceClassName, captureMove: false, capturedMoveEvent: null, lastMessageId: null, maxMessageId: null }; }, created: function created() { this.showScrollButton = this.unreadCounter > 0; this.scrollChangedByUser = false; this.scrollButtonDiff = 100; this.scrollButtonShowTimeout = null; this.scrollPosition = 0; this.scrollPositionChangeTime = new Date().getTime(); this.animationScrollHeightStart = 0; this.animationScrollHeightEnd = 0; this.animationScrollTop = 0; this.animationScrollChange = 0; this.animationScrollLastUserId = 0; this.animationType = _AnimationType.none; this.animationCollection = []; this.animationCollectionOffset = {}; this.animationLastElementBeforeStart = 0; this.observers = {}; this.requestHistoryInterval = null; this.requestUnreadInterval = null; this.lastAuthorId = 0; this.firstMessageId = null; this.firstUnreadMessageId = null; this.dateFormatFunction = null; this.cacheGroupTitle = {}; this.waitLoadHistory = false; this.waitLoadUnread = false; this.skipUnreadScroll = false; this.readMessageQueue = []; this.readMessageTarget = {}; this.readMessageDelayed = im_lib_utils.Utils.debounce(this.readMessage, 50, this); this.requestHistoryBlockIntersect = false; this.requestHistoryDelayed = im_lib_utils.Utils.debounce(this.requestHistory, 50, this); this.requestUnreadBlockIntersect = false; this.requestUnreadDelayed = im_lib_utils.Utils.debounce(this.requestUnread, 50, this); this.startMessageLimit = this.messageLimit; if (this.listenEventScrollToBottom) { ui_vue.Vue.event.$on(this.listenEventScrollToBottom, this.onScrollToBottom); this.$root.$on(this.listenEventScrollToBottom, this.onScrollToBottom); } if (this.listenEventRequestHistory) { ui_vue.Vue.event.$on(this.listenEventRequestHistory, this.onRequestHistoryAnswer); this.$root.$on(this.listenEventRequestHistory, this.onRequestHistoryAnswer); } if (this.listenEventRequestUnread) { ui_vue.Vue.event.$on(this.listenEventRequestUnread, this.onRequestUnreadAnswer); this.$root.$on(this.listenEventRequestUnread, this.onRequestUnreadAnswer); } if (this.listenEventSendReadMessages) { ui_vue.Vue.event.$on(this.listenEventSendReadMessages, this.onSendReadMessages); this.$root.$on(this.listenEventSendReadMessages, this.onSendReadMessages); } window.addEventListener("orientationchange", this.onOrientationChange); window.addEventListener('focus', this.onWindowFocus); window.addEventListener('blur', this.onWindowBlur); ui_vue.Vue.event.$on('bitrixmobile:controller:focus', this.onWindowFocus); ui_vue.Vue.event.$on('bitrixmobile:controller:blur', this.onWindowBlur); }, beforeDestroy: function beforeDestroy() { this.observers = {}; clearTimeout(this.scrollButtonShowTimeout); clearInterval(this.requestHistoryInterval); clearInterval(this.requestUnreadInterval); if (this.listenEventScrollToBottom) { ui_vue.Vue.event.$off(this.listenEventScrollToBottom, this.onScrollToBottom); this.$root.$off(this.listenEventScrollToBottom, this.onScrollToBottom); } if (this.listenEventRequestHistory) { ui_vue.Vue.event.$off(this.listenEventRequestHistory, this.onRequestHistoryAnswer); this.$root.$off(this.listenEventRequestHistory, this.onRequestHistoryAnswer); } if (this.listenEventRequestUnread) { ui_vue.Vue.event.$off(this.listenEventRequestUnread, this.onRequestUnreadAnswer); this.$root.$off(this.listenEventRequestUnread, this.onRequestUnreadAnswer); } if (this.listenEventSendReadMessages) { ui_vue.Vue.event.$off(this.listenEventSendReadMessages, this.onSendReadMessages); this.$root.$off(this.listenEventSendReadMessages, this.onSendReadMessages); } window.removeEventListener("orientationchange", this.onOrientationChange); window.removeEventListener('focus', this.onWindowFocus); window.removeEventListener('blur', this.onWindowBlur); ui_vue.Vue.event.$off('bitrixmobile:controller:focus', this.onWindowFocus); ui_vue.Vue.event.$off('bitrixmobile:controller:blur', this.onWindowBlur); }, mounted: function mounted() { var unreadId = Utils.getFirstUnreadMessage(this.collection); if (unreadId) { Utils.scrollToFirstUnreadMessage(this, this.collection, unreadId, true); } else { var body = this.$refs.body; Utils.scrollToPosition(this, body.scrollHeight - body.clientHeight); } this.windowFocused = im_lib_utils.Utils.platform.isBitrixMobile() ? true : document.hasFocus(); }, computed: babelHelpers.objectSpread({ localize: function localize() { return ui_vue.Vue.getFilteredPhrases('IM_MESSENGER_DIALOG_', this.$root.$bitrixMessages); }, dialog: function dialog() { var dialog = this.$store.getters['dialogues/get'](this.dialogId); return dialog ? dialog : this.$store.getters['dialogues/getBlank'](); }, collectionMutationType: function collectionMutationType() { return this.$store.getters['messages/getMutationType'](this.chatId); }, collection: function collection() { return this.$store.getters['messages/get'](this.chatId); }, elementsWithLimit: function elementsWithLimit() { var _this = this; var unreadCount = this.collection.filter(function (element) { return element.unread; }).length; var showLimit = this.messageExtraCount + this.messageLimit * 2; if (unreadCount > showLimit) { showLimit = unreadCount; } var start = this.collection.length - showLimit; if (!this.historyLoaderShow || start < 0) { start = 0; } var slicedCollection = start === 0 ? this.collection : this.collection.slice(start, this.collection.length); this.messageShowCount = slicedCollection.length; this.firstMessageId = null; this.lastMessageId = 0; this.maxMessageId = 0; this.lastMessageAuthorId = 0; var collection = []; var lastAuthorId = 0; var groupNode = {}; this.firstUnreadMessageId = 0; if (this.messageShowCount > 0) { slicedCollection.forEach(function (element) { if (_this.firstMessageId === null || _this.firstMessageId > element.id) { _this.firstMessageId = element.id; } if (_this.maxMessageId < element.id) { _this.maxMessageId = element.id; } _this.lastMessageId = element.id; var group = _this._groupTitle(element.date); if (!groupNode[group.title]) { groupNode[group.title] = group.id; collection.push(Blocks.getGroup(group.id, group.title)); } else if (lastAuthorId !== element.authorId) { collection.push(Blocks.getDelimiter(element.id)); } collection.push(element); lastAuthorId = element.authorId; if (element.unread) { if (!_this.firstUnreadMessageId) { _this.firstUnreadMessageId = element.id; } } }); this.lastMessageAuthorId = lastAuthorId; } else { this.firstMessageId = 0; } if (this.collection.length >= this.messageLimit && this.collection.length >= this.messageShowCount && this.historyLoaderBlocked === false) { this.historyLoaderShow = true; } else { this.historyLoaderShow = false; } if (this.dialog.unreadLastId > this.maxMessageId) { this.unreadLoaderShow = true; } else { this.unreadLoaderShow = false; } return collection; }, statusWriting: function statusWriting() { var _this2 = this; clearTimeout(this.scrollToTimeout); if (this.dialog.writingList.length === 0) { return ''; } if (!this.scrollChangedByUser && !this.showScrollButton) { this.scrollToTimeout = setTimeout(function () { return _this2.scrollTo({ duration: 500 }); }, 300); } return this.localize.IM_MESSENGER_DIALOG_WRITES_MESSAGE.replace('#USER#', this.dialog.writingList.map(function (element) { return element.userName; }).join(', ')); }, statusReaded: function statusReaded() { var _this3 = this; clearTimeout(this.scrollToTimeout); if (this.dialog.readedList.length === 0) { return ''; } var text = ''; if (this.dialog.type === im_const.DialogType.private) { var record = this.dialog.readedList[0]; if (record.messageId === this.lastMessageId && record.userId !== this.lastMessageAuthorId) { var dateFormat = im_lib_utils.Utils.date.getFormatType(BX.Messenger.Const.DateFormat.readedTitle, this.$root.$bitrixMessages); text = this.localize.IM_MESSENGER_DIALOG_MESSAGES_READED_USER.replace('#DATE#', this._getDateFormat().format(dateFormat, record.date)); } } else { var readedList = this.dialog.readedList.filter(function (record) { return record.messageId === _this3.lastMessageId && record.userId !== _this3.lastMessageAuthorId; }); if (readedList.length === 1) { text = this.localize.IM_MESSENGER_DIALOG_MESSAGES_READED_CHAT.replace('#USERS#', readedList[0].userName); } else if (readedList.length > 1) { text = this.localize.IM_MESSENGER_DIALOG_MESSAGES_READED_CHAT.replace('#USERS#', this.localize.IM_MESSENGER_DIALOG_MESSAGES_READED_CHAT_PLURAL.replace('#USER#', readedList[0].userName).replace('#COUNT#', readedList.length - 1).replace('[LINK]', '').replace('[/LINK]', '')); } } if (!text) { return ''; } if (!this.scrollChangedByUser && !this.showScrollButton) { this.scrollToTimeout = setTimeout(function () { return _this3.scrollTo({ duration: 500 }); }, 300); } return text; }, unreadCounter: function unreadCounter() { return this.dialog.counter > 999 ? 999 : this.dialog.counter; }, scrollBlocked: function scrollBlocked() { if (this.application.device.type !== im_const.DeviceType.mobile) { return false; } return this.scrollAnimating || this.captureMove; }, isDarkBackground: function isDarkBackground() { return this.application.options.darkBackground; }, isMobile: function isMobile() { return this.application.device.type === im_const.DeviceType.mobile; }, AnimationType: function AnimationType() { return _AnimationType; } }, ui_vue_vuex.Vuex.mapState({ application: function application(state) { return state.application; } })), methods: { onDialogClick: function onDialogClick(event) { if (ui_vue.Vue.testNode(event.target, { className: 'bx-im-message-command' })) { this.onCommandClick(event); } else if (ui_vue.Vue.testNode(event.target, { className: 'bx-im-mention' })) { this.onMentionClick(event); } this.windowFocused = true; this.$emit('click', { event: event }); }, onDialogMove: function onDialogMove(event) { if (!this.captureMove) { return; } this.capturedMoveEvent = event; }, onCommandClick: function onCommandClick(event) { var value = ''; if (event.target.dataset.entity === 'send' || event.target.dataset.entity === 'put') { value = event.target.nextSibling.innerHTML; } else if (event.target.dataset.entity === 'call') { value = event.target.dataset.command; } this.$emit('clickByCommand', { type: event.target.dataset.entity, value: value, event: event }); }, onMentionClick: function onMentionClick(event) { this.$emit('clickByMention', { type: event.target.dataset.type, value: event.target.dataset.value, event: event }); }, onScroll: function onScroll(event) { var _this4 = this; clearTimeout(this.scrollToTimeout); this.scrollPosition = event.target.scrollTop; this.scrollPositionChangeTime = new Date().getTime(); this.scrollChangedByUser = !(event.target.scrollTop + this.scrollButtonDiff >= event.target.scrollHeight - event.target.clientHeight); clearTimeout(this.scrollButtonShowTimeout); this.scrollButtonShowTimeout = setTimeout(function () { if (_this4.scrollChangedByUser) { if (!_this4.showScrollButton) { _this4.showScrollButton = true; } } else { if (_this4.showScrollButton && !_this4.unreadLoaderShow) { _this4.showScrollButton = false; } } }, 200); if (event.target.scrollTop === event.target.scrollHeight - event.target.offsetHeight) { clearTimeout(this.scrollButtonShowTimeout); if (this.showScrollButton && !this.unreadLoaderShow) { this.showScrollButton = false; } } }, scrollToBottom: function scrollToBottom() { var _this5 = this; var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var _params$force = params.force, force = _params$force === void 0 ? false : _params$force, _params$cancelIfScrol = params.cancelIfScrollChange, cancelIfScrollChange = _params$cancelIfScrol === void 0 ? false : _params$cancelIfScrol, _params$duration = params.duration, duration = _params$duration === void 0 ? null : _params$duration; if (cancelIfScrollChange && this.scrollChangedByUser) { return false; } var body = this.$refs.body; if (this.dialog.counter > 0) { var scrollToMessageId = this.dialog.counter > 1 && this.firstUnreadMessageId ? this.firstUnreadMessageId : this.lastMessageId; Utils.scrollToFirstUnreadMessage(this, this.collection, scrollToMessageId); if (this.dialog.counter < this.startMessageLimit) { this.historyLoaderShow = true; this.historyLoaderBlocked = false; } return true; } this.showScrollButton = false; if (force) { Utils.scrollToPosition(this, body.scrollHeight - body.clientHeight); if (this.messageExtraCount) { this.$store.commit('application/clearDialogExtraCount'); } this.historyLoaderShow = true; this.historyLoaderBlocked = false; } else { var scrollParams = {}; if (duration) { scrollParams.duration = duration; } this.scrollTo(babelHelpers.objectSpread({ callback: function callback() { if (_this5.messageExtraCount) { _this5.$store.commit('application/clearDialogExtraCount'); } _this5.historyLoaderShow = true; _this5.historyLoaderBlocked = false; } }, scrollParams)); } }, scrollTo: function scrollTo() { var _this6 = this; var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; if (this.animateScrollId) { im_lib_animation.Animation.cancel(this.animateScrollId); this.scrollAnimating = false; } if (typeof params === 'function') { params = { callback: params }; } var body = this.$refs.body; if (!body) { if (params.callback && typeof params.callback === 'function') { params.callback(); } this.animateScrollId = null; this.scrollAnimating = false; return true; } if (im_lib_utils.Utils.platform.isIos() && im_lib_utils.Utils.platform.getIosVersion() > 12 && im_lib_utils.Utils.platform.getIosVersion() < 13.2) { body.scrollTop = body.scrollHeight - body.clientHeight; return true; } var _params = params, _params$start = _params.start, start = _params$start === void 0 ? body.scrollTop : _params$start, _params$end = _params.end, end = _params$end === void 0 ? body.scrollHeight - body.clientHeight : _params$end, _params$increment = _params.increment, increment = _params$increment === void 0 ? 20 : _params$increment, _callback = _params.callback, _params$duration2 = _params.duration, duration = _params$duration2 === void 0 ? 500 : _params$duration2; var container = this.$refs.container; if (container && end - start > container.offsetHeight * 3) { start = end - container.offsetHeight * 3; im_lib_logger.Logger.warn('Dialog.scrollTo: Scroll trajectory has been reduced'); } this.scrollAnimating = true; im_lib_logger.Logger.warn('Dialog.scrollTo: User scroll blocked while scrolling'); this.animateScrollId = im_lib_animation.Animation.start({ start: start, end: end, increment: increment, duration: duration, element: body, elementProperty: 'scrollTop', callback: function callback() { _this6.animateScrollId = null; _this6.scrollAnimating = false; if (_callback && typeof _callback === 'function') { _callback(); } } }); }, onScrollToBottom: function onScrollToBottom() { var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; event.force = event.force === true; event.cancelIfScrollChange = event.cancelIfScrollChange === true; if (this.firstUnreadMessageId) { im_lib_logger.Logger.warn('Dialog.onScrollToBottom: canceled - unread messages'); return false; } this.scrollToBottom(event); return true; }, onOrientationChange: function onOrientationChange() { var _this7 = this; clearTimeout(this.scrollToTimeout); if (this.application.device.type !== im_const.DeviceType.mobile) { return false; } im_lib_logger.Logger.log('Orientation changed'); if (!this.scrollChangedByUser) { this.scrollToTimeout = setTimeout(function () { return _this7.scrollToBottom({ force: true }); }, 300); } }, onWindowFocus: function onWindowFocus() { this.windowFocused = true; this.readMessage(); return true; }, onWindowBlur: function onWindowBlur() { this.windowFocused = false; }, requestHistory: function requestHistory() { var _this8 = this; if (!this.requestHistoryBlockIntersect) { return false; } if (this.waitLoadHistory || !this.windowFocused || this.animateScrollId) { this.requestHistoryDelayed(); return false; } if (this.scrollPositionChangeTime + 100 > new Date().getTime() // || this.$refs.body.scrollTop < 0 ) { this.requestHistoryDelayed(); return true; } this.waitLoadHistory = true; clearTimeout(this.waitLoadHistoryTimeout); this.waitLoadHistoryTimeout = setTimeout(function () { _this8.waitLoadHistory = false; }, 10000); var length = this.collection.length; var messageShowCount = this.messageShowCount; if (length > messageShowCount) { var element = this.$refs.body.getElementsByClassName(im_const.DialogReferenceClassName.listItem)[0]; this.$store.commit('application/increaseDialogExtraCount', { count: this.startMessageLimit }); Utils.scrollToElementAfterLoadHistory(this, element); return true; } this.$emit('requestHistory', { lastId: this.firstMessageId }); }, requestUnread: function requestUnread() { if (!this.requestUnreadBlockIntersect) { return false; } if (this.waitLoadUnread || !this.windowFocused || this.animateScrollId) { this.requestUnreadDelayed(); return false; } if (this.scrollPositionChangeTime + 10 > new Date().getTime() //|| this.$refs.body.scrollTop > this.$refs.body.scrollHeight - this.$refs.body.clientHeight ) { this.requestUnreadDelayed(); return true; } this.waitLoadUnread = true; this.skipUnreadScroll = true; this.$emit('requestUnread', { lastId: this.lastMessageId }); }, onRequestHistoryAnswer: function onRequestHistoryAnswer() { var _this9 = this; var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; if (event.error) { this.historyLoaderBlocked = false; } else { this.historyLoaderBlocked = event.count < this.startMessageLimit; this.$store.commit('application/increaseDialogExtraCount', { count: event.count }); } if (this.historyLoaderBlocked) { this.historyLoaderShow = false; } var element = this.$refs.body.getElementsByClassName(im_const.DialogReferenceClassName.listItem)[0]; if (event.count > 0) { if (element) { Utils.scrollToElementAfterLoadHistory(this, element); } } else if (event.error) { element.scrollIntoView(true); } else { Utils.scrollToPosition(this, 0); } clearTimeout(this.waitLoadHistoryTimeout); this.waitLoadHistoryTimeout = setTimeout(function () { _this9.waitLoadHistory = false; }, 1000); return true; }, onRequestUnreadAnswer: function onRequestUnreadAnswer() { var _this10 = this; var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; if (event.error) { this.historyLoaderBlocked = false; } else { if (event.count < this.startMessageLimit) { this.unreadLoaderShow = false; } this.$store.commit('application/increaseDialogExtraCount', { count: event.count }); } var body = this.$refs.body; if (event.count > 0) ; else if (event.error) { var element = this.$refs.body.getElementsByClassName(im_const.DialogReferenceClassName.listUnreadLoader)[0]; if (element) { Utils.scrollToPosition(this, body.scrollTop - element.offsetHeight * 2); } else { Utils.scrollToPosition(this, body.scrollHeight - body.clientHeight); } } else { Utils.scrollToPosition(this, body.scrollHeight - body.clientHeight); } setTimeout(function () { return _this10.waitLoadUnread = false; }, 1000); return true; }, onSendReadMessages: function onSendReadMessages() { this.readMessageDelayed(); return true; }, readMessage: function readMessage() { var _this11 = this; if (!this.windowFocused) { return false; } this.readMessageQueue = this.readMessageQueue.filter(function (messageId) { if (_this11.readMessageTarget[messageId]) { if (_this11.observers[ObserverType.read]) { _this11.observers[ObserverType.read].unobserve(_this11.readMessageTarget[messageId]); } delete _this11.readMessageTarget[messageId]; } _this11.requestReadMessage(messageId); return false; }); }, requestReadMessage: function requestReadMessage(messageId) { this.$emit('readMessage', { id: messageId }); }, onClickByUserName: function onClickByUserName(event) { if (!this.windowFocused) { return false; } this.$emit('clickByUserName', event); }, onClickByUploadCancel: function onClickByUploadCancel(event) { if (!this.windowFocused) { return false; } this.$emit('clickByUploadCancel', event); }, onClickByKeyboardButton: function onClickByKeyboardButton(event) { if (!this.windowFocused) { return false; } this.$emit('clickByKeyboardButton', event); }, onClickByChatTeaser: function onClickByChatTeaser(event) { this.$emit('clickByChatTeaser', event); }, onClickByMessageMenu: function onClickByMessageMenu(event) { if (!this.windowFocused) { return false; } this.$emit('clickByMessageMenu', event); }, onClickByMessageRetry: function onClickByMessageRetry(event) { if (!this.windowFocused) { return false; } this.$emit('clickByMessageRetry', event); }, onClickByReadedList: function onClickByReadedList(event) { var _this12 = this; var readedList = this.dialog.readedList.filter(function (record) { return record.messageId === _this12.lastMessageId && record.userId !== _this12.lastMessageAuthorId; }); this.$emit('clickByReadedList', { list: readedList, event: event }); }, onMessageReactionSet: function onMessageReactionSet(event) { this.$emit('setMessageReaction', event); }, onMessageReactionListOpen: function onMessageReactionListOpen(event) { this.$emit('openMessageReactionList', event); }, onDragMessage: function onDragMessage(event) { if (!this.windowFocused) { return false; } this.captureMove = event.result; if (!event.result) { this.capturedMoveEvent = null; } }, onQuoteMessage: function onQuoteMessage(event) { if (!this.windowFocused) { return false; } this.$emit('quoteMessage', event); }, _getDateFormat: function _getDateFormat() { var _this13 = this; if (this.dateFormatFunction) { return this.dateFormatFunction; } this.dateFormatFunction = Object.create(BX.Main.Date); if (this.$root.$bitrixMessages) { this.dateFormatFunction._getMessage = function (phrase) { return _this13.$root.$bitrixMessages[phrase]; }; } return this.dateFormatFunction; }, _groupTitle: function _groupTitle(date) { var id = Utils.getDateFormat(date); if (this.cacheGroupTitle[id]) { return { id: id, title: this.cacheGroupTitle[id] }; } var dateFormat = im_lib_utils.Utils.date.getFormatType(BX.Messenger.Const.DateFormat.groupTitle, this.$root.$bitrixMessages); this.cacheGroupTitle[id] = this._getDateFormat().format(dateFormat, date); return { id: id, title: this.cacheGroupTitle[id] }; }, animationTrigger: function animationTrigger(type, start, element) { var _this14 = this; var templateId = element.dataset.templateId; var templateType = element.dataset.type; var body = this.$refs.body; if (!body || !templateId) { return false; } if (start) { if (!this.animationScrollHeightStart) { this.animationScrollHeightStart = body.scrollHeight; this.animationScrollHeightEnd = body.scrollHeight; this.animationScrollTop = body.scrollTop; this.animationScrollChange = 0; clearTimeout(this.scrollToTimeout); this.scrollChangedByUser = !(body.scrollTop + this.scrollButtonDiff >= body.scrollHeight - body.clientHeight); if (this.scrollChangedByUser && !this.showScrollButton && this.unreadCounter > 1) { this.showScrollButton = true; } } } else { this.animationScrollHeightEnd = body.scrollHeight; } if (!this.collectionMutationType.applied && this.collectionMutationType.initialType !== im_const.MutationType.set) { if (start) { this.animationCollection.push(templateId); } else { this.animationCollection = this.animationCollection.filter(function (id) { delete _this14.animationCollectionOffset[templateId]; return id !== templateId; }); } this.animationStart(); return false; } if (!this.collectionMutationType.applied && this.collectionMutationType.initialType === im_const.MutationType.set && this.collectionMutationType.appliedType === im_const.MutationType.setBefore) { var unreadId = Utils.getFirstUnreadMessage(this.collection); if (unreadId) { Utils.scrollToFirstUnreadMessage(this, this.collection, unreadId, true); return false; } Utils.scrollToPosition(this, body.scrollHeight - body.clientHeight); if (start) { this.animationCollection.push(templateId); } else { this.animationCollection = this.animationCollection.filter(function (id) { delete _this14.animationCollectionOffset[templateId]; return id !== templateId; }); } this.animationStart(); return false; } if (start) { if (type === _AnimationType.leave) { this.animationCollectionOffset[templateId] = element.offsetHeight; } if (this.animationType === _AnimationType.none) { this.animationType = type; } else if (this.animationType !== type) { this.animationType = _AnimationType.mixed; } this.animationCollection.push(templateId); } else { if (type === _AnimationType.enter) { var offset = element.offsetHeight; this.animationScrollChange += offset; body.scrollTop += offset; } else if (type === _AnimationType.leave) { var _offset = this.animationCollectionOffset[templateId] ? this.animationCollectionOffset[templateId] : 0; this.animationScrollChange -= _offset; body.scrollTop -= _offset; this.animationScrollLastIsDelimeter = templateType !== TemplateType.message; } this.animationCollection = this.animationCollection.filter(function (id) { delete _this14.animationCollectionOffset[templateId]; return id !== templateId; }); } this.animationStart(); }, animationStart: function animationStart() { var _this15 = this; if (this.animationCollection.length > 0) { return false; } var body = this.$refs.body; if (this.animationType === _AnimationType.leave) { var newScrollPosition = 0; // fix for chrome dom rendering: while delete node, scroll change immediately if (body.scrollTop !== this.animationScrollTop + this.animationScrollChange) { newScrollPosition = this.animationScrollTop + this.animationScrollChange; } else { newScrollPosition = body.scrollTop; } // fix position if last element the same type of new element if (!this.animationScrollLastIsDelimeter) { newScrollPosition += this.templateMessageWithNameDifferent; } if (newScrollPosition !== body.scrollTop) { Utils.scrollToPosition(this, newScrollPosition); } } else if (this.animationType === _AnimationType.mixed) { var unreadId = Utils.getFirstUnreadMessage(this.collection); if (unreadId) { Utils.scrollToFirstUnreadMessage(this, this.collection, unreadId, true); } } this.animationType = _AnimationType.none; this.animationScrollHeightStart = 0; this.animationScrollHeightEnd = 0; this.animationScrollTop = 0; this.animationScrollChange = 0; if (Utils.scrollByMutationType(this)) { return false; } if (this.scrollChangedByUser) { im_lib_logger.Logger.warn('Dialog.animationStart: canceled: scroll changed by user'); return false; } if (this.unreadCounter > 0 && this.firstUnreadMessageId) { if (this.skipUnreadScroll) { this.skipUnreadScroll = false; return; } Utils.scrollToFirstUnreadMessage(this, this.collection, this.firstUnreadMessageId); return; } this.scrollTo(function () { if (_this15.unreadCounter <= 0 && _this15.messageExtraCount) { _this15.$store.commit('application/clearDialogExtraCount'); } }); } }, directives: { 'bx-im-directive-dialog-observer': { inserted: function inserted(element, bindings, vnode) { if (bindings.value === ObserverType.none) { return false; } if (!vnode.context.observers[bindings.value]) { vnode.context.observers[bindings.value] = Utils.getMessageLoaderObserver({ type: bindings.value, context: vnode.context }); } vnode.context.observers[bindings.value].observe(element); return true; }, unbind: function unbind(element, bindings, vnode) { if (bindings.value === ObserverType.none) { return true; } if (vnode.context.observers[bindings.value]) { vnode.context.observers[bindings.value].unobserve(element); } return true; } } }, template: "\n\t\t<div class=\"bx-im-dialog\" @click=\"onDialogClick\" @touchmove=\"onDialogMove\" ref=\"container\">\t\n\t\t\t<div :class=\"[DialogReferenceClassName.listBody, {\n\t\t\t\t'bx-im-dialog-list-scroll-blocked': scrollBlocked, \n\t\t\t\t'bx-im-dialog-dark-background': isDarkBackground,\n\t\t\t\t'bx-im-dialog-mobile': isMobile,\n\t\t\t}]\" @scroll.passive=\"onScroll\" ref=\"body\">\n\t\t\t\t<template v-if=\"historyLoaderShow\">\n\t\t\t\t\t<div class=\"bx-im-dialog-load-more bx-im-dialog-load-more-history\" v-bx-im-directive-dialog-observer=\"ObserverType.history\">\n\t\t\t\t\t\t<span class=\"bx-im-dialog-load-more-text\">{{ localize.IM_MESSENGER_DIALOG_LOAD_MESSAGES }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\t\t\t\t<transition-group \n\t\t\t\t\ttag=\"div\" class=\"bx-im-dialog-list-box\" name=\"bx-im-dialog-message-animation\" \n\t\t\t\t\t@before-enter=\"animationTrigger(AnimationType.enter, true, $event)\" \n\t\t\t\t\t@after-enter=\"animationTrigger(AnimationType.enter, false, $event)\" \n\t\t\t\t\t@before-leave=\"animationTrigger(AnimationType.leave, true, $event)\" \n\t\t\t\t\t@after-leave=\"animationTrigger(AnimationType.leave, false, $event)\"\n\t\t\t\t>\n\t\t\t\t\t<template v-for=\"element in elementsWithLimit\">\n\t\t\t\t\t\t<template v-if=\"element.templateType == TemplateType.message\">\n\t\t\t\t\t\t\t<div :class=\"['bx-im-dialog-list-item', DialogReferenceClassName.listItem, DialogReferenceClassName.listItem+'-'+element.id]\" :data-message-id=\"element.id\" :data-template-id=\"element.templateId\" :data-type=\"element.templateType\" :key=\"element.templateId\" v-bx-im-directive-dialog-observer=\"element.unread? ObserverType.read: ObserverType.none\">\t\t\t\n\t\t\t\t\t\t\t\t<component :is=\"element.params.COMPONENT_ID\"\n\t\t\t\t\t\t\t\t\t:userId=\"userId\" \n\t\t\t\t\t\t\t\t\t:dialogId=\"dialogId\"\n\t\t\t\t\t\t\t\t\t:chatId=\"chatId\"\n\t\t\t\t\t\t\t\t\t:dialog=\"dialog\"\n\t\t\t\t\t\t\t\t\t:message=\"element\"\n\t\t\t\t\t\t\t\t\t:enableReactions=\"enableReactions\"\n\t\t\t\t\t\t\t\t\t:enableDateActions=\"enableDateActions\"\n\t\t\t\t\t\t\t\t\t:enableCreateContent=\"showMessageMenu\"\n\t\t\t\t\t\t\t\t\t:enableGestureQuote=\"enableGestureQuote\"\n\t\t\t\t\t\t\t\t\t:enableGestureQuoteFromRight=\"enableGestureQuoteFromRight\"\n\t\t\t\t\t\t\t\t\t:enableGestureMenu=\"enableGestureMenu\"\n\t\t\t\t\t\t\t\t\t:showName=\"showMessageUserName\"\n\t\t\t\t\t\t\t\t\t:showAvatar=\"showMessageAvatar\"\n\t\t\t\t\t\t\t\t\t:showMenu=\"showMessageMenu\"\n\t\t\t\t\t\t\t\t\t:capturedMoveEvent=\"capturedMoveEvent\"\n\t\t\t\t\t\t\t\t\t:referenceContentClassName=\"DialogReferenceClassName.listItem\"\n\t\t\t\t\t\t\t\t\t:referenceContentBodyClassName=\"DialogReferenceClassName.listItemBody\"\n\t\t\t\t\t\t\t\t\t:referenceContentNameClassName=\"DialogReferenceClassName.listItemName\"\n\t\t\t\t\t\t\t\t\t@clickByUserName=\"onClickByUserName\"\n\t\t\t\t\t\t\t\t\t@clickByUploadCancel=\"onClickByUploadCancel\"\n\t\t\t\t\t\t\t\t\t@clickByKeyboardButton=\"onClickByKeyboardButton\"\n\t\t\t\t\t\t\t\t\t@clickByChatTeaser=\"onClickByChatTeaser\"\n\t\t\t\t\t\t\t\t\t@clickByMessageMenu=\"onClickByMessageMenu\"\n\t\t\t\t\t\t\t\t\t@clickByMessageRetry=\"onClickByMessageRetry\"\n\t\t\t\t\t\t\t\t\t@setMessageReaction=\"onMessageReactionSet\"\n\t\t\t\t\t\t\t\t\t@openMessageReactionList=\"onMessageReactionListOpen\"\n\t\t\t\t\t\t\t\t\t@dragMessage=\"onDragMessage\"\n\t\t\t\t\t\t\t\t\t@quoteMessage=\"onQuoteMessage\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<template v-else-if=\"element.templateType == TemplateType.group\">\n\t\t\t\t\t\t\t<div class=\"bx-im-dialog-group\" :data-template-id=\"element.templateId\" :data-type=\"element.templateType\" :key=\"element.templateId\">\n\t\t\t\t\t\t\t\t<div class=\"bx-im-dialog-group-date\">{{ element.text }}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<template v-else-if=\"element.templateType == TemplateType.delimiter\">\n\t\t\t\t\t\t\t<div class=\"bx-im-dialog-delimiter\" :data-template-id=\"element.templateId\" :data-type=\"element.templateType\" :key=\"element.templateId\"></div>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</template>\n\t\t\t\t</transition-group>\n\t\t\t\t<template v-if=\"unreadLoaderShow\">\n\t\t\t\t\t<div :class=\"['bx-im-dialog-load-more', 'bx-im-dialog-load-more-unread', DialogReferenceClassName.listUnreadLoader]\" v-bx-im-directive-dialog-observer=\"ObserverType.unread\">\n\t\t\t\t\t\t<span class=\"bx-im-dialog-load-more-text\">{{ localize.IM_MESSENGER_DIALOG_LOAD_MESSAGES }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\t\t\t\t<transition name=\"bx-im-dialog-status\">\n\t\t\t\t\t<template v-if=\"statusWriting\">\n\t\t\t\t\t\t<div class=\"bx-im-dialog-status\">\n\t\t\t\t\t\t\t<span class=\"bx-im-dialog-status-writing\"></span>\n\t\t\t\t\t\t\t{{ statusWriting }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</template>\n\t\t\t\t\t<template v-else-if=\"statusReaded\">\n\t\t\t\t\t\t<div class=\"bx-im-dialog-status\" @click=\"onClickByReadedList\">\n\t\t\t\t\t\t\t{{ statusReaded }}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</template>\n\t\t\t\t</transition>\n\t\t\t</div>\n\t\t\t<transition name=\"bx-im-dialog-scroll-button\">\n\t\t\t\t<div v-show=\"showScrollButton || unreadLoaderShow && unreadCounter\" class=\"bx-im-dialog-scroll-button-box\" @click=\"scrollToBottom()\">\n\t\t\t\t\t<div class=\"bx-im-dialog-scroll-button\">\n\t\t\t\t\t\t<div v-show=\"unreadCounter\" class=\"bx-im-dialog-scroll-button-counter\">\n\t\t\t\t\t\t\t<div class=\"bx-im-dialog-scroll-button-counter-digit\">{{unreadCounter}}</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"bx-im-dialog-scroll-button-arrow\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</transition>\n\t\t</div>\n\t" }); var Utils = { getDateFormat: function getDateFormat(date) { return date.toJSON().slice(0, 10); }, scrollToMessage: function scrollToMessage(context, collection) { var messageId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; var force = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; var stickToTop = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; var body = context.$refs.body; var element = body.getElementsByClassName(im_const.DialogReferenceClassName.listItem + '-' + messageId)[0]; var end = 0; if (!element) { if (stickToTop) { end = 10; } else { end = body.scrollHeight - body.clientHeight; } } else if (stickToTop) { end = element.offsetTop - context.templateMessageScrollOffset / 2; } else { end = element.offsetTop + element.offsetHeight - body.clientHeight + context.templateMessageScrollOffset / 2; } if (force) { this.scrollToPosition(context, end); } else { context.scrollTo({ end: end }); } return true; }, getFirstUnreadMessage: function getFirstUnreadMessage(collection) { var unreadId = null; for (var index = collection.length - 1; index >= 0; index--) { if (!collection[index].unread) { break; } unreadId = collection[index].id; } return unreadId; }, scrollToPosition: function scrollToPosition(context, position) { var body = context.$refs.body; if (!body) { return false; } if (context.animateScrollId) { im_lib_animation.Animation.cancel(context.animateScrollId); this.scrollAnimating = false; context.animateScrollId = null; } body.scrollTop = position; }, scrollByMutationType: function scrollByMutationType(context) { if (context.collectionMutationType.applied || context.collectionMutationType.initialType !== im_const.MutationType.set) { return false; } context.$store.dispatch('messages/applyMutationType', { chatId: context.chatId }); if (context.collectionMutationType.appliedType === im_const.MutationType.setBefore) { var body = context.$refs.body; this.scrollToPosition(context, body.scrollHeight - body.clientHeight); return true; } if (context.collectionMutationType.scrollMessageId > 0) { var unreadId = Utils.getFirstUnreadMessage(context.collection); var toMessageId = context.collectionMutationType.scrollMessageId; var force = !context.collectionMutationType.scrollStickToTop; var stickToTop = context.collectionMutationType.scrollStickToTop; if (unreadId && toMessageId > unreadId) { stickToTop = true; force = true; toMessageId = unreadId; unreadId = null; } Utils.scrollToMessage(context, context.collection, toMessageId, force, stickToTop); if (unreadId) { Utils.scrollToMessage(context, context.collection, unreadId); return true; } } return false; }, scrollToFirstUnreadMessage: function scrollToFirstUnreadMessage(context, collection) { var unreadId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var force = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; var body = context.$refs.body; var element = false; if (unreadId !== null) { element = body.getElementsByClassName(im_const.DialogReferenceClassName.listItem + '-' + unreadId)[0]; } if (!element) { unreadId = this.getFirstUnreadMessage(collection); } this.scrollToMessage(context, collection, unreadId, force); }, scrollToElementAfterLoadHistory: function scrollToElementAfterLoadHistory(context, element) { var _this16 = this; var elementBody = element.getElementsByClassName(im_const.DialogReferenceClassName.listItemBody)[0]; if (elementBody) { element = elementBody; } var previousOffsetTop = element.getBoundingClientRect().top; context.$nextTick(function () { clearTimeout(context.waitLoadHistoryTimeout); context.waitLoadHistoryTimeout = setTimeout(function () { context.waitLoadHistory = false; }, 1000); if (!element) { return false; } _this16.scrollToPosition(context, element.getBoundingClientRect().top - previousOffsetTop); }); }, scrollToElementAfterLoadUnread: function scrollToElementAfterLoadUnread(context) { var firstMessageId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; context.showScrollButton = true; if (firstMessageId) { this.scrollToMessage(context, context.collection, firstMessageId, false, false); } }, getMessageLoaderObserver: function getMessageLoaderObserver(config) { if (typeof window.IntersectionObserver === 'undefined' || config.value === ObserverType.none) { return { observe: function observe() {}, unobserve: function unobserve() {} }; } var observerCallback, observerOptions; if (config.type === ObserverType.read) { observerCallback = function observerCallback(entries, observer) { entries.forEach(function (entry) { var sendReadEvent = false; if (entry.isIntersecting) { if (entry.intersectionRatio >= 1) { sendReadEvent = true; } else if (entry.intersectionRatio > 0 && entry.rootBounds.height < entry.boundingClientRect.height + 20 && entry.intersectionRect.height > entry.rootBounds.height / 2) { sendReadEvent = true; } } if (sendReadEvent) { config.context.readMessageQueue.push(entry.target.dataset.messageId); config.context.readMessageTarget[entry.target.dataset.messageId] = entry.target; } else { config.context.readMessageQueue = config.context.readMessageQueue.filter(function (messageId) { return messageId !== entry.target.dataset.messageId; }); delete config.context.readMessageTarget[entry.target.dataset.messageId]; } if (config.context.enableReadMessages) { config.context.readMessageDelayed(); } }); }; observerOptions = { root: config.context.$refs.body, threshold: new Array(101).fill(0).map(function (zero, index) { return index * 0.01; }) }; } else { observerCallback = function observerCallback(entries, observer) { entries.forEach(function (entry) { if (entry.isIntersecting) { if (config.type === ObserverType.unread) { config.context.requestUnreadBlockIntersect = true; config.context.requestUnreadDelayed(); } else { config.context.requestHistoryBlockIntersect = true; config.context.requestHistoryDelayed(); } } else { if (config.type === ObserverType.unread) { config.context.requestUnreadBlockIntersect = false; } else { config.context.requestHistoryBlockIntersect = false; } } }); }; observerOptions = { root: config.context.$refs.body, threshold: [0, 0.01, 0.99, 1] }; } return new IntersectionObserver(observerCallback, observerOptions); } }; var Blocks = { getDelimiter: function getDelimiter() { var id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; return { templateId: 'delimiter' + id, templateType: TemplateType.delimiter }; }, getGroup: function getGroup() { var id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; var text = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; return { templateId: 'group' + id, templateType: TemplateType.group, text: text }; }, getHistoryLoader: function getHistoryLoader() { return { templateId: 'historyLoader', templateType: TemplateType.historyLoader }; }, getUnreadLoader: function getUnreadLoader() { return { templateId: 'unreadLoader', templateType: TemplateType.unreadLoader }; }, getLoadButton: function getLoadButton() { var id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; var text = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : LoadButtonTypes.before; return { templateId: 'loadButton' + id + type, templateType: TemplateType.button, text: text, type: type, messageId: id }; } }; }((this.window = this.window || {}),BX,BX,BX,window,BX.Messenger.Const,BX.Messenger.Lib,BX.Messenger.Lib,BX.Messenger.Lib)); //# sourceMappingURL=dialog.bundle.js.map dialog/dist/dialog.bundle.min.css 0000664 00000016256 14774417471 0013005 0 ustar 00 .bx-im-dialog{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;overflow:hidden}.bx-im-dialog-ajax{-webkit-text-decoration:dotted;text-decoration:dotted}.bx-im-dialog-list{overflow-y:auto;width:100%}.bx-im-dialog-list-scroll-blocked{overflow:hidden}.bx-im-dialog-list-box{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-overflow-scrolling:touch;overflow-x:hidden;overflow-y:auto;padding:10px 0}.bx-im-dialog-scroll-button-box{position:absolute;right:0;bottom:0;width:55px;height:55px;z-index:1;-webkit-tap-highlight-color:transparent;outline:0}.bx-im-dialog-scroll-button{background:#fff;border:1px solid #ececec;-webkit-box-shadow:0 2px 1px 0 rgba(0,0,0,0.2);box-shadow:0 2px 1px 0 rgba(0,0,0,0.2);border-radius:50%;width:34px;height:34px;margin-top:10px;margin-left:7px;cursor:pointer;-webkit-transition:background-color .2s;-o-transition:background-color .2s;transition:background-color .2s;text-align:center}.bx-im-dialog-scroll-button:hover{background-color:#f9f9f9}.bx-im-dialog-scroll-button-arrow{display:inline-block;width:7px;height:7px;border-top:3px solid #bbb8b8;border-right:3px solid #bbb8b8;-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);transform:rotate(135deg);margin-top:11px;cursor:pointer;-webkit-box-sizing:content-box;box-sizing:content-box}.bx-im-dialog-scroll-button-counter{width:100%;text-align:center;margin-top:-7px;position:absolute}.bx-im-dialog-scroll-button-counter-digit{display:inline-block;font:11px/16px "Helvetica Neue",Helvetica,Arial,sans-serif;color:#fff;padding:0 5px 0 5px;border:2px solid #fff;border-radius:10px;background-color:#17b0e1}.bx-im-dialog-scroll-button-enter-active,.bx-im-dialog-scroll-button-leave-active{-webkit-transition:bottom .2s ease-out;-o-transition:bottom .2s ease-out;transition:bottom .2s ease-out}.bx-im-dialog-scroll-button-enter,.bx-im-dialog-scroll-button-leave-to{bottom:-60px}.bx-im-dialog-message-animation-enter-active,.bx-im-dialog-message-animation-leave-active{-webkit-transition:0s;-o-transition:0s;transition:0s}.bx-im-dialog-group{font:14px/19px "Helvetica Neue",Helvetica,Arial,sans-serif;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap;text-align:center;position:relative}.bx-im-dialog-group-date{background-color:rgba(7,5,27,0.62);border:1px solid rgba(7,5,27,0.1);text-shadow:none;color:#fff!important;display:inline-block;padding:5px 15px;border-radius:15px;font-size:14px;text-decoration:none;margin:10px 15px}.bx-im-dialog-group-float.bx-im-dialog-group-date{position:absolute;display:block;margin-top:32px;z-index:30;-webkit-transform:translateZ(0);transform:translateZ(0)}.bx-im-dialog-load-more{position:relative;text-align:center}.bx-im-dialog-load-more+.bx-im-dialog-list-box{padding-top:0}.bx-im-dialog-load-more-history{padding-bottom:0}.bx-im-dialog-load-more-unread{padding-top:0;padding-bottom:13px}.bx-im-dialog-load-more-text:before{position:absolute;margin-left:-30px;margin-top:4px;width:20px;height:20px; background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cpath%20d%3D%22M1%2010c0%204.9706%204.0294%209%209%209s9-4.0294%209-9-4.0294-9-9-9c-2.4048%200-4.5893.9432-6.2038%202.4798%22%20stroke%3D%22%23677B8F%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22/%3E%3C/svg%3E'); background-repeat:no-repeat;-webkit-animation:bx-im-dialog-load-more .8s linear infinite;animation:bx-im-dialog-load-more .8s linear infinite;content:""}.bx-im-dialog-load-more-text{display:inline-block;height:29px;font:15px/29px "Helvetica Neue",Helvetica,Arial,sans-serif;color:#687b8c;vertical-align:top;padding:10px 15px;padding-left:30px}.bx-im-dialog-dark-background .bx-im-dialog-load-more-text{color:#949494}@-webkit-keyframes bx-im-dialog-load-more{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes bx-im-dialog-load-more{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.bx-im-dialog-status{padding:0 20px 15px;display:block;font:15px/19px "Helvetica Neue",Helvetica,Arial,sans-serif;color:#585858;word-wrap:break-word;vertical-align:middle;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;cursor:default;position:relative}.bx-im-dialog-status-enter-active,.bx-im-dialog-status-leave-active{-webkit-transition:opacity .1s ease-out;-o-transition:opacity .1s ease-out;transition:opacity .1s ease-out}.bx-im-dialog-status-leave-active{-webkit-transition:opacity .05s ease-out;-o-transition:opacity .05s ease-out;transition:opacity .05s ease-out}.bx-im-dialog-status-enter,.bx-im-dialog-status-leave-to{opacity:0}.bx-im-dialog-status-writing{width:20px;height:11px;display:inline-block; background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%228%22%20height%3D%222%22%3E%0A%20%20%3Cg%20fill%3D%22%23717171%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Crect%20width%3D%221.6%22%20height%3D%222%22%20rx%3D%22.8%22/%3E%0A%20%20%20%20%3Crect%20width%3D%221.6%22%20height%3D%222%22%20x%3D%223.2%22%20rx%3D%22.8%22/%3E%0A%20%20%20%20%3Crect%20width%3D%221.6%22%20height%3D%222%22%20x%3D%226.4%22%20rx%3D%22.8%22/%3E%0A%20%20%3C/g%3E%0A%3C/svg%3E%0A'); background-repeat:no-repeat;background-position:bottom left;vertical-align:middle}.bx-im-dialog-status-writing:before{-webkit-animation:imWriting 1.4s linear infinite;animation:imWriting 1.4s linear infinite;content:'';height:16px;position:absolute;width:19px;margin-left:10px;margin-top:-1px; background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2210%22%20height%3D%2210%22%3E%0A%20%20%3Cpath%20fill%3D%22%23717171%22%20fill-rule%3D%22evenodd%22%20d%3D%22M7.8128%204.807L5.1751%202.1694a.041.041%200%200%200-.0578%200L.0328%207.2538c-.0739.0733%200%202.696%200%202.696s2.6222.0734%202.6961%200l5.0845-5.0844a.0416.0416%200%200%200-.0006-.0583zM1.0647%208.9376v-1.047h1.0495V8.94H1.0647v-.0025zm8.8785-6.2584L7.3054.0413a.0421.0421%200%200%200-.0578%200L6.1144%201.1746a.0416.0416%200%200%200%200%20.0577l2.6378%202.6378a.041.041%200%200%200%20.0577%200l1.1338-1.1333a.0427.0427%200%200%200-.0028-.0577h.0023z%22/%3E%0A%3C/svg%3E%0A'); background-repeat:no-repeat;zoom:1}@-webkit-keyframes imWriting{0%{margin-left:1px;margin-top:-0px}20%{margin-left:4px;margin-top:-1px}60%{margin-left:8px;margin-top:-2px}65%{margin-left:8px;margin-top:-2px}70%{margin-left:8px;margin-top:-3px;-webkit-transform:rotate(-20deg);transform:rotate(-20deg)}90%{margin-left:8px;margin-top:-5px;-webkit-transform:rotate(-40deg);transform:rotate(-40deg)}100%{margin-left:1px;margin-top:-3px}}@keyframes imWriting{0%{margin-left:1px;margin-top:-0px}20%{margin-left:4px;margin-top:-1px}60%{margin-left:8px;margin-top:-2px}65%{margin-left:8px;margin-top:-2px}70%{margin-left:8px;margin-top:-3px;-webkit-transform:rotate(-20deg);transform:rotate(-20deg)}90%{margin-left:8px;margin-top:-5px;-webkit-transform:rotate(-40deg);transform:rotate(-40deg)}100%{margin-left:1px;margin-top:-3px}} dialog/dist/dialog.bundle.css 0000664 00000020115 14774417471 0012210 0 ustar 00 .bx-im-dialog { display: -webkit-box; display: -ms-flexbox; display: flex; height: 100%; overflow: hidden; } .bx-im-dialog-ajax { -webkit-text-decoration: dotted; text-decoration: dotted; } .bx-im-dialog-list { overflow-y: auto; width: 100%; } .bx-im-dialog-list-scroll-blocked { overflow: hidden; } .bx-im-dialog-list-box { width: 100%; display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-orient: vertical; -webkit-box-direction: normal; -ms-flex-direction: column; flex-direction: column; -ms-flex-wrap: nowrap; flex-wrap: nowrap; -webkit-overflow-scrolling: touch; overflow-x: hidden; overflow-y: auto; padding: 10px 0; } .bx-im-dialog-scroll-button-box { position: absolute; right: 0; bottom: 0; width: 55px; height: 55px; z-index: 1; -webkit-tap-highlight-color: transparent; outline: none; } .bx-im-dialog-scroll-button { background: #fff; border: 1px solid #ececec; -webkit-box-shadow: 0 2px 1px 0 rgba(0,0,0,0.2); box-shadow: 0 2px 1px 0 rgba(0,0,0,0.2); border-radius: 50%; width: 34px; height: 34px; margin-top: 10px; margin-left: 7px; cursor: pointer; -webkit-transition: background-color .2s; -o-transition: background-color .2s; transition: background-color .2s; text-align: center; } .bx-im-dialog-scroll-button:hover { background-color: #f9f9f9; } .bx-im-dialog-scroll-button-arrow { display: inline-block; width: 7px; height: 7px; border-top: 3px solid #bbb8b8; border-right: 3px solid #bbb8b8; -webkit-transform: rotate(135deg); -ms-transform: rotate(135deg); transform: rotate(135deg); margin-top: 11px; cursor: pointer; -webkit-box-sizing: content-box; box-sizing: content-box; } .bx-im-dialog-scroll-button-counter { width: 100%; text-align: center; margin-top:-7px; position: absolute; } .bx-im-dialog-scroll-button-counter-digit { display: inline-block; font: 11px/16px "Helvetica Neue", Helvetica, Arial, sans-serif; color: #fff; padding: 0 5px 0 5px; border: 2px solid #fff; border-radius: 10px; background-color: #17b0e1; } .bx-im-dialog-scroll-button-enter-active, .bx-im-dialog-scroll-button-leave-active { -webkit-transition: bottom .2s ease-out; -o-transition: bottom .2s ease-out; transition: bottom .2s ease-out; } .bx-im-dialog-scroll-button-enter, .bx-im-dialog-scroll-button-leave-to { bottom: -60px; } .bx-im-dialog-message-animation-enter-active, .bx-im-dialog-message-animation-leave-active { -webkit-transition: 0s; -o-transition: 0s; transition: 0s; } .bx-im-dialog-list-item {} .bx-im-dialog-group { font: 14px/19px "Helvetica Neue", Helvetica, Arial, sans-serif; -o-text-overflow: ellipsis; text-overflow: ellipsis; white-space: nowrap; text-align: center; position: relative; } .bx-im-dialog-group-date { background-color: rgba(7, 5, 27, 0.62); border: 1px solid rgba(7, 5, 27, 0.1); text-shadow: none; color: #fff!important; display: inline-block; padding: 5px 15px; border-radius: 15px; font-size: 14px; text-decoration: none; margin: 10px 15px; } .bx-im-dialog-group-float.bx-im-dialog-group-date { position: absolute; display: block; margin-top: 32px; z-index: 30; -webkit-transform: translateZ(0); transform: translateZ(0); } .bx-im-dialog-load-more { position: relative; text-align: center; } .bx-im-dialog-load-more + .bx-im-dialog-list-box { padding-top: 0; } .bx-im-dialog-load-more-history { padding-bottom: 0; } .bx-im-dialog-load-more-unread { padding-top: 0; padding-bottom: 13px; } .bx-im-dialog-load-more-text:before { position: absolute; margin-left: -30px; margin-top: 4px; width: 20px; height: 20px; background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cpath%20d%3D%22M1%2010c0%204.9706%204.0294%209%209%209s9-4.0294%209-9-4.0294-9-9-9c-2.4048%200-4.5893.9432-6.2038%202.4798%22%20stroke%3D%22%23677B8F%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22/%3E%3C/svg%3E'); background-repeat: no-repeat; -webkit-animation: bx-im-dialog-load-more .8s linear infinite; animation: bx-im-dialog-load-more .8s linear infinite; content: "" } .bx-im-dialog-load-more-text { display: inline-block; height: 29px; font: 15px/29px "Helvetica Neue",Helvetica,Arial,sans-serif; color: #687B8C; vertical-align: top; padding: 10px 15px; padding-left: 30px; } .bx-im-dialog-dark-background .bx-im-dialog-load-more-text { color: #949494; } @-webkit-keyframes bx-im-dialog-load-more { 0% { -webkit-transform:rotate(0deg); transform:rotate(0deg); } 100% { -webkit-transform:rotate(360deg); transform:rotate(360deg); } } @keyframes bx-im-dialog-load-more { 0% { -webkit-transform:rotate(0deg); transform:rotate(0deg); } 100% { -webkit-transform:rotate(360deg); transform:rotate(360deg); } } .bx-im-dialog-status { padding: 0 20px 15px; display: block; font: 15px/19px "Helvetica Neue", Helvetica, Arial, sans-serif; color: #585858; word-wrap: break-word; vertical-align: middle; -moz-user-select:none; -webkit-user-select:none; -ms-user-select:none; user-select:none; cursor: default; position: relative; } .bx-im-dialog-status-enter-active, .bx-im-dialog-status-leave-active { -webkit-transition: opacity .1s ease-out; -o-transition: opacity .1s ease-out; transition: opacity .1s ease-out; } .bx-im-dialog-status-leave-active { -webkit-transition: opacity .05s ease-out; -o-transition: opacity .05s ease-out; transition: opacity .05s ease-out; } .bx-im-dialog-status-enter, .bx-im-dialog-status-leave-to { opacity: 0; } .bx-im-dialog-status-writing { width: 20px; height: 11px; display: inline-block; background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%228%22%20height%3D%222%22%3E%0A%20%20%3Cg%20fill%3D%22%23717171%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Crect%20width%3D%221.6%22%20height%3D%222%22%20rx%3D%22.8%22/%3E%0A%20%20%20%20%3Crect%20width%3D%221.6%22%20height%3D%222%22%20x%3D%223.2%22%20rx%3D%22.8%22/%3E%0A%20%20%20%20%3Crect%20width%3D%221.6%22%20height%3D%222%22%20x%3D%226.4%22%20rx%3D%22.8%22/%3E%0A%20%20%3C/g%3E%0A%3C/svg%3E%0A'); background-repeat: no-repeat; background-position: bottom left; vertical-align: middle; } .bx-im-dialog-status-writing:before { -webkit-animation: imWriting 1.4s linear infinite; animation: imWriting 1.4s linear infinite; content: ''; height: 16px; position: absolute; width: 19px; margin-left: 10px; margin-top:-1px; background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2210%22%20height%3D%2210%22%3E%0A%20%20%3Cpath%20fill%3D%22%23717171%22%20fill-rule%3D%22evenodd%22%20d%3D%22M7.8128%204.807L5.1751%202.1694a.041.041%200%200%200-.0578%200L.0328%207.2538c-.0739.0733%200%202.696%200%202.696s2.6222.0734%202.6961%200l5.0845-5.0844a.0416.0416%200%200%200-.0006-.0583zM1.0647%208.9376v-1.047h1.0495V8.94H1.0647v-.0025zm8.8785-6.2584L7.3054.0413a.0421.0421%200%200%200-.0578%200L6.1144%201.1746a.0416.0416%200%200%200%200%20.0577l2.6378%202.6378a.041.041%200%200%200%20.0577%200l1.1338-1.1333a.0427.0427%200%200%200-.0028-.0577h.0023z%22/%3E%0A%3C/svg%3E%0A'); background-repeat: no-repeat; zoom:1; } @-webkit-keyframes imWriting { 0% { margin-left: 1px; margin-top:-0px; } 20% { margin-left: 4px; margin-top:-1px; } 60% { margin-left: 8px; margin-top:-2px; } 65% { margin-left: 8px; margin-top:-2px; } 70% { margin-left: 8px; margin-top:-3px; -webkit-transform:rotate(-20deg); transform:rotate(-20deg); } 90% { margin-left: 8px; margin-top:-5px; -webkit-transform:rotate(-40deg); transform:rotate(-40deg); } 100% { margin-left: 1px; margin-top:-3px; } } @keyframes imWriting { 0% { margin-left: 1px; margin-top:-0px; } 20% { margin-left: 4px; margin-top:-1px; } 60% { margin-left: 8px; margin-top:-2px; } 65% { margin-left: 8px; margin-top:-2px; } 70% { margin-left: 8px; margin-top:-3px; -webkit-transform:rotate(-20deg); transform:rotate(-20deg); } 90% { margin-left: 8px; margin-top:-5px; -webkit-transform:rotate(-40deg); transform:rotate(-40deg); } 100% { margin-left: 1px; margin-top:-3px; } } dialog/lang/ua/config.php 0000664 00000000722 14774417471 0011332 0 ustar 00 <? $MESS["IM_MESSENGER_DIALOG_LOAD_MESSAGES"] = "Завантаження повідомлень"; $MESS["IM_MESSENGER_DIALOG_MESSAGES_READED_CHAT"] = "Переглянуто: #USERS#"; $MESS["IM_MESSENGER_DIALOG_MESSAGES_READED_CHAT_PLURAL"] = "#USER# і [LINK] ще #COUNT#[/LINK]"; $MESS["IM_MESSENGER_DIALOG_MESSAGES_READED_USER"] = "Переглянуто: #DATE#"; $MESS["IM_MESSENGER_DIALOG_WRITES_MESSAGE"] = "#USER# пише повідомлення..."; ?>