Current Path : /var/www/axolotl/data/www/arhangelsk.axolotls.ru/a537b/ |
Current File : /var/www/axolotl/data/www/arhangelsk.axolotls.ru/a537b/model.tar |
config.php 0000664 00000000405 14773234674 0006544 0 ustar 00 <? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die(); } return [ 'js' => [ './dist/registry.bundle.js', ], 'rel' => [ 'main.polyfill.core', 'im.const', 'ui.vue', 'ui.vue.vuex', 'im.lib.utils', ], 'skip_core' => true, ]; bundle.config.js 0000664 00000000172 14773234674 0007642 0 ustar 00 module.exports = { input: './src/registry.js', output: './dist/registry.bundle.js', namespace: 'BX.Messenger.Model', }; src/registry.js 0000664 00000000554 14773234674 0007570 0 ustar 00 import {ApplicationModel} from './application.js'; import {MessagesModel} from './messages.js'; import {DialoguesModel} from './dialogues.js'; import {UsersModel} from './users.js'; import {FilesModel} from './files.js'; import {RecentModel} from './recent.js'; export { ApplicationModel, MessagesModel, DialoguesModel, UsersModel, FilesModel, RecentModel } src/application.js 0000664 00000014524 14773234674 0010225 0 ustar 00 /** * Bitrix Messenger * Application model (Vuex Builder model) * * @package bitrix * @subpackage im * @copyright 2001-2019 Bitrix */ import {DeviceType, DeviceOrientation} from 'im.const'; import {VuexBuilderModel} from 'ui.vue.vuex'; class ApplicationModel extends VuexBuilderModel { getName() { return 'application'; } getState() { return { common: { host: this.getVariable('common.host', location.protocol+'//'+location.host), siteId: this.getVariable('common.siteId', 'default'), userId: this.getVariable('common.userId', 0), languageId: this.getVariable('common.languageId', 'en'), }, dialog: { dialogId: this.getVariable('dialog.dialogId', '0'), chatId: this.getVariable('dialog.chatId', 0), diskFolderId: this.getVariable('dialog.diskFolderId', 0), messageLimit: this.getVariable('dialog.messageLimit', 20), enableReadMessages: this.getVariable('dialog.enableReadMessages', true), messageExtraCount: 0, }, disk: { enabled: false, maxFileSize: 5242880, }, mobile: { keyboardShow: false, }, device: { type: this.getVariable('device.type', DeviceType.desktop), orientation: this.getVariable('device.orientation', DeviceOrientation.portrait), }, options: { quoteEnable: this.getVariable('options.quoteEnable', true), quoteFromRight: this.getVariable('options.quoteFromRight', true), autoplayVideo: this.getVariable('options.autoplayVideo', true), darkBackground: this.getVariable('options.darkBackground', false), showSmiles: false }, error: { active: false, code: '', description: '', }, } } getStateSaveException() { return Object.assign({ common: this.getVariable('saveException.common', null), dialog: this.getVariable('saveException.dialog', null), mobile: this.getVariable('saveException.mobile', null), device: this.getVariable('saveException.device', null), error: this.getVariable('saveException.error', null) }); } getActions() { return { set: (store, payload) => { store.commit('set', this.validate(payload)); }, showSmiles: (store, payload) => { store.commit('showSmiles') }, hideSmiles: (store, payload) => { store.commit('hideSmiles'); } } } getMutations() { return { set: (state, payload) => { let hasChange = false; for (let group in payload) { if (!payload.hasOwnProperty(group)) { continue; } for (let field in payload[group]) { if (!payload[group].hasOwnProperty(field)) { continue; } state[group][field] = payload[group][field]; hasChange = true; } } if (hasChange && this.isSaveNeeded(payload)) { this.saveState(state); } }, increaseDialogExtraCount(state, payload = {}) { let {count = 1} = payload; state.dialog.messageExtraCount += count; }, decreaseDialogExtraCount(state, payload = {}) { let {count = 1} = payload; let newCounter = state.dialog.messageExtraCount - count; if (newCounter <= 0) { newCounter = 0; } state.dialog.messageExtraCount = newCounter; }, clearDialogExtraCount(state) { state.dialog.messageExtraCount = 0; }, showSmiles(state) { state.options.showSmiles = true; }, hideSmiles(state) { state.options.showSmiles = false; } } } validate(fields) { const result = {}; if (typeof fields.common === 'object' && fields.common) { result.common = {}; if (typeof fields.common.userId === 'number') { result.common.userId = fields.common.userId; } if (typeof fields.common.languageId === 'string') { result.common.languageId = fields.common.languageId; } } if (typeof fields.dialog === 'object' && fields.dialog) { result.dialog = {}; if (typeof fields.dialog.dialogId === 'number') { result.dialog.dialogId = fields.dialog.dialogId.toString(); result.dialog.chatId = 0; } else if (typeof fields.dialog.dialogId === 'string') { result.dialog.dialogId = fields.dialog.dialogId; if (typeof fields.dialog.chatId !== 'number') { let chatId = fields.dialog.dialogId; if (chatId.startsWith('chat')) { chatId = fields.dialog.dialogId.substr(4); } chatId = parseInt(chatId); result.dialog.chatId = !isNaN(chatId)? chatId: 0; fields.dialog.chatId = result.dialog.chatId; } } if (typeof fields.dialog.chatId === 'number') { result.dialog.chatId = fields.dialog.chatId; } if (typeof fields.dialog.diskFolderId === 'number') { result.dialog.diskFolderId = fields.dialog.diskFolderId; } if (typeof fields.dialog.messageLimit === 'number') { result.dialog.messageLimit = fields.dialog.messageLimit; } if (typeof fields.dialog.messageExtraCount === 'number') { result.dialog.messageExtraCount = fields.dialog.messageExtraCount; } if (typeof fields.dialog.enableReadMessages === 'boolean') { result.dialog.enableReadMessages = fields.dialog.enableReadMessages; } } if (typeof fields.disk === 'object' && fields.disk) { result.disk = {}; if (typeof fields.disk.enabled === 'boolean') { result.disk.enabled = fields.disk.enabled; } if (typeof fields.disk.maxFileSize === 'number') { result.disk.maxFileSize = fields.disk.maxFileSize; } } if (typeof fields.mobile === 'object' && fields.mobile) { result.mobile = {}; if (typeof fields.mobile.keyboardShow === 'boolean') { result.mobile.keyboardShow = fields.mobile.keyboardShow; } } if (typeof fields.device === 'object' && fields.device) { result.device = {}; if (typeof fields.device.type === 'string' && typeof DeviceType[fields.device.type] !== 'undefined') { result.device.type = fields.device.type; } if (typeof fields.device.orientation === 'string' && typeof DeviceOrientation[fields.device.orientation] !== 'undefined') { result.device.orientation = fields.device.orientation; } } if (typeof fields.error === 'object' && fields.error) { if (typeof fields.error.active === 'boolean') { result.error = { active: fields.error.active, code: fields.error.code.toString() || '', description: fields.error.description.toString() || '', }; } } return result; } } export {ApplicationModel}; src/files.js 0000664 00000032474 14773234674 0007030 0 ustar 00 /** * Bitrix Messenger * File model (Vuex Builder model) * * @package bitrix * @subpackage im * @copyright 2001-2019 Bitrix */ import {Vue} from 'ui.vue'; import {VuexBuilderModel} from 'ui.vue.vuex'; import {FileStatus, FileType, MutationType} from 'im.const'; import {Utils} from "im.lib.utils"; class FilesModel extends VuexBuilderModel { getName() { return 'files'; } getState() { return { created: 0, host: this.getVariable('host', location.protocol+'//'+location.host), collection: {}, index: {}, } } getElementState(params = {}) { let { id = 0, chatId = 0, name = this.getVariable('default.name', ''), } = params; return { id, chatId, name, templateId: id, date: new Date(), type: 'file', extension: "", icon: "empty", size: 0, image: false, status: FileStatus.done, progress: 100, authorId: 0, authorName: "", urlPreview: "", urlShow: "", urlDownload: "", init: false }; } getGetters() { return { get: state => (chatId, fileId, getTemporary = false) => { if (!chatId || !fileId) { return null; } if (!state.index[chatId] || !state.index[chatId][fileId]) { return null; } if (!getTemporary && !state.index[chatId][fileId].init) { return null; } return state.index[chatId][fileId]; }, getList: state => chatId => { if (!state.index[chatId]) { return null; } return state.index[chatId]; }, getBlank: state => params => { return this.getElementState(params); } } } getActions() { return { add: (store, payload) => { let result = this.validate(Object.assign({}, payload), {host: store.state.host}); result.id = 'temporary' + (new Date).getTime() + store.state.created; result.templateId = result.id; result.init = true; store.commit('add', Object.assign({}, this.getElementState(), result)); return result.id; }, set: (store, payload) => { if (payload instanceof Array) { payload = payload.map(file => { let result = this.validate(Object.assign({}, file), {host: store.state.host}); result.templateId = result.id; return Object.assign({}, this.getElementState(), result, {init: true}); }); } else { let result = this.validate(Object.assign({}, payload), {host: store.state.host}); result.templateId = result.id; payload = []; payload.push( Object.assign({}, this.getElementState(), result, {init: true}) ); } store.commit('set', { insertType : MutationType.setAfter, data : payload }); }, setBefore: (store, payload) => { if (payload instanceof Array) { payload = payload.map(file => { let result = this.validate(Object.assign({}, file), {host: store.state.host}); result.templateId = result.id; return Object.assign({}, this.getElementState(), result, {init: true}); }); } else { let result = this.validate(Object.assign({}, payload), {host: store.state.host}); result.templateId = result.id; payload = []; payload.push( Object.assign({}, this.getElementState(), result, {init: true}) ); } store.commit('set', { actionName: 'setBefore', insertType : MutationType.setBefore, data : payload }); }, update: (store, payload) => { let result = this.validate(Object.assign({}, payload.fields), {host: store.state.host}); store.commit('initCollection', {chatId: payload.chatId}); let index = store.state.collection[payload.chatId].findIndex(el => el.id === payload.id); if (index < 0) { return false; } store.commit('update', { id : payload.id, chatId : payload.chatId, index : index, fields : result }); if (payload.fields.blink) { setTimeout(() => { store.commit('update', { id : payload.id , chatId : payload.chatId, fields : {blink: false} }); }, 1000); } return true; }, delete: (store, payload) => { store.commit('delete', { id : payload.id, chatId : payload.chatId }); return true; }, saveState: (store, payload) => { store.commit('saveState', {}); return true; }, } } getMutations() { return { initCollection: (state, payload) => { this.initCollection(state, payload); }, add: (state, payload) => { this.initCollection(state, payload); state.collection[payload.chatId].push(payload); state.index[payload.chatId][payload.id] = payload; state.created += 1; this.saveState(state); }, set: (state, payload) => { for (let element of payload.data) { this.initCollection(state, {chatId: element.chatId}); let index = state.collection[element.chatId].findIndex(el => el.id === element.id); if (index > -1) { delete element.templateId; state.collection[element.chatId][index] = Object.assign(state.collection[element.chatId][index], element); } else if (payload.insertType === MutationType.setBefore) { state.collection[element.chatId].unshift(element); } else { state.collection[element.chatId].push(element); } state.index[element.chatId][element.id] = element; this.saveState(state); } }, update: (state, payload) => { this.initCollection(state, payload); let index = -1; if (typeof payload.index !== 'undefined' && state.collection[payload.chatId][payload.index]) { index = payload.index; } else { index = state.collection[payload.chatId].findIndex(el => el.id === payload.id); } if (index >= 0) { delete payload.fields.templateId; let element = Object.assign( state.collection[payload.chatId][index], payload.fields ); state.collection[payload.chatId][index] = element; state.index[payload.chatId][element.id] = element; this.saveState(state); } }, delete: (state, payload) => { this.initCollection(state, payload); state.collection[payload.chatId] = state.collection[payload.chatId].filter(element => element.id !== payload.id); delete state.index[payload.chatId][payload.id]; this.saveState(state); }, saveState: (state, payload) => { this.saveState(state); }, } } initCollection(state, payload) { if (typeof state.collection[payload.chatId] !== 'undefined') { return true; } Vue.set(state.collection, payload.chatId, []); Vue.set(state.index, payload.chatId, {}); return true; } getLoadedState(state) { if (!state || typeof state !== 'object') { return state; } if (typeof state.collection !== 'object') { return state; } state.index = {}; for (let chatId in state.collection) { if (!state.collection.hasOwnProperty(chatId)) { continue; } state.index[chatId] = {}; state.collection[chatId] .filter(file => file != null) .forEach(file => { state.index[chatId][file.id] = file; }); } return state; } getSaveFileList() { if (!this.db) { return []; } if (!this.store.getters['messages/getSaveFileList']) { return []; } let list = this.store.getters['messages/getSaveFileList'](); if (!list) { return []; } return list; } getSaveTimeout() { return 250; } saveState(state) { if (!this.isSaveAvailable()) { return false; } super.saveState(() => { let list = this.getSaveFileList(); if (!list) { return false; } let storedState = { collection: {}, }; for (let chatId in list) { if (!list.hasOwnProperty(chatId)) { continue; } list[chatId].forEach(fileId => { if (!state.index[chatId]) { return false; } if (!state.index[chatId][fileId]) { return false; } if (!storedState.collection[chatId]) { storedState.collection[chatId] = []; } storedState.collection[chatId].push( state.index[chatId][fileId] ); }); } return storedState; }); } validate(fields, options = {}) { const result = {}; options.host = options.host || this.getState().host; if (typeof fields.id === "number") { result.id = fields.id; } else if (typeof fields.id === "string") { if (fields.id.startsWith('temporary')) { result.id = fields.id; } else { result.id = parseInt(fields.id); } } if (typeof fields.templateId === "number") { result.templateId = fields.templateId; } else if (typeof fields.templateId === "string") { if (fields.templateId.startsWith('temporary')) { result.templateId = fields.templateId; } else { result.templateId = parseInt(fields.templateId); } } if (typeof fields.chatId === "number" || typeof fields.chatId === "string") { result.chatId = parseInt(fields.chatId); } if (typeof fields.date !== "undefined") { result.date = Utils.date.cast(fields.date); } if (typeof fields.type === "string") { result.type = fields.type; } if (typeof fields.extension === "string") { result.extension = fields.extension.toString(); if (result.type === 'image') { result.icon = 'img'; } else if (result.type === 'video') { result.icon = 'mov'; } else { result.icon = FilesModel.getIconType(result.extension); } } if (typeof fields.name === "string" || typeof fields.name === "number") { result.name = fields.name.toString(); } if (typeof fields.size === "number" || typeof fields.size === "string") { result.size = parseInt(fields.size); } if (typeof fields.image === 'boolean') { result.image = false; } else if (typeof fields.image === 'object' && fields.image) { result.image = { width: 0, height: 0, }; if (typeof fields.image.width === "string" || typeof fields.image.width === "number") { result.image.width = parseInt(fields.image.width); } if (typeof fields.image.height === "string" || typeof fields.image.height === "number") { result.image.height = parseInt(fields.image.height); } if (result.image.width <= 0 || result.image.height <= 0) { result.image = false; } } if (typeof fields.status === "string" && typeof FileStatus[fields.status] !== 'undefined') { result.status = fields.status; } if (typeof fields.progress === "number" || typeof fields.progress === "string") { result.progress = parseInt(fields.progress); } if (typeof fields.authorId === "number" || typeof fields.authorId === "string") { result.authorId = parseInt(fields.authorId); } if (typeof fields.authorName === "string" || typeof fields.authorName === "number") { result.authorName = fields.authorName.toString(); } if (typeof fields.urlPreview === 'string') { if ( !fields.urlPreview || fields.urlPreview.startsWith('http') || fields.urlPreview.startsWith('bx') || fields.urlPreview.startsWith('file') ) { result.urlPreview = fields.urlPreview; } else { result.urlPreview = options.host+fields.urlPreview; } } if (typeof fields.urlDownload === 'string') { if ( !fields.urlDownload || fields.urlDownload.startsWith('http') || fields.urlDownload.startsWith('bx') || fields.urlPreview.startsWith('file') ) { result.urlDownload = fields.urlDownload; } else { result.urlDownload = options.host+fields.urlDownload; } } if (typeof fields.urlShow === 'string') { if ( !fields.urlShow || fields.urlShow.startsWith('http') || fields.urlShow.startsWith('bx') || fields.urlShow.startsWith('file') ) { result.urlShow = fields.urlShow; } else { result.urlShow = options.host+fields.urlShow; } } return result; } static getType(type) { type = type.toString().toLowerCase().split('.').splice(-1)[0]; switch(type) { case 'png': case 'jpe': case 'jpg': case 'jpeg': case 'gif': case 'heic': case 'bmp': return FileType.image; case 'mp4': case 'mkv': case 'webm': case 'mpeg': case 'hevc': case 'avi': case '3gp': case 'flv': case 'm4v': case 'ogg': case 'wmv': case 'mov': return FileType.video; case 'mp3': return FileType.audio; } return FileType.file } static getIconType(extension) { let icon = 'empty'; switch(extension.toString()) { case 'png': case 'jpe': case 'jpg': case 'jpeg': case 'gif': case 'heic': case 'bmp': icon = 'img'; break; case 'mp4': case 'mkv': case 'webm': case 'mpeg': case 'hevc': case 'avi': case '3gp': case 'flv': case 'm4v': case 'ogg': case 'wmv': case 'mov': icon = 'mov'; break; case 'txt': icon = 'txt'; break; case 'doc': case 'docx': icon = 'doc'; break; case 'xls': case 'xlsx': icon = 'xls'; break; case 'php': icon = 'php'; break; case 'pdf': icon = 'pdf'; break; case 'ppt': case 'pptx': icon = 'ppt'; break; case 'rar': icon = 'rar'; break; case 'zip': case '7z': case 'tar': case 'gz': case 'gzip': icon = 'zip'; break; case 'set': icon = 'set'; break; case 'conf': case 'ini': case 'plist': icon = 'set'; break; } return icon; } } export {FilesModel}; src/messages.js 0000664 00000110420 14773234674 0007521 0 ustar 00 /** * Bitrix Messenger * Message model (Vuex Builder model) * * @package bitrix * @subpackage im * @copyright 2001-2019 Bitrix */ import {Vue} from 'ui.vue'; import {VuexBuilderModel} from 'ui.vue.vuex'; import {MutationType, StorageLimit} from 'im.const'; import {Utils} from "im.lib.utils"; const IntersectionType = { empty: 'empty', equal: 'equal', none: 'none', found: 'found', foundReverse: 'foundReverse', }; class MessagesModel extends VuexBuilderModel { getName() { return 'messages'; } getState() { return { created: 0, collection: {}, mutationType: {}, saveMessageList: {}, saveFileList: {}, saveUserList: {}, host: this.getVariable('host', location.protocol+'//'+location.host), } } getElementState() { return { templateId: 0, templateType: 'message', id: 0, chatId: 0, authorId: 0, date: new Date(), text: "", textConverted: "", params: { TYPE : 'default', COMPONENT_ID : 'bx-im-view-message', }, push: false, unread: false, sending: false, error: false, retry: false, blink: false, }; } getGetters() { return { getMutationType: state => chatId => { if (!state.mutationType[chatId]) { return {initialType: MutationType.none, appliedType: MutationType.none}; } return state.mutationType[chatId]; }, getLastId: state => chatId => { if (!state.collection[chatId] || state.collection[chatId].length <= 0) { return null; } let lastId = 0; for (let i = 0; i < state.collection[chatId].length; i++) { let element = state.collection[chatId][i]; if ( element.push || element.sending || element.id.toString().startsWith('temporary') ) { continue; } if (lastId < element.id) { lastId = element.id; } } return lastId? lastId: null; }, getMessage: state => (chatId, messageId) => { if (!state.collection[chatId] || state.collection[chatId].length <= 0) { return null; } for (let index = state.collection[chatId].length-1; index >= 0; index--) { if (state.collection[chatId][index].id === messageId) { return state.collection[chatId][index]; } } return null; }, get: state => chatId => { if (!state.collection[chatId] || state.collection[chatId].length <= 0) { return []; } return state.collection[chatId]; }, getBlank: state => params => { return this.getElementState(); }, getSaveFileList: state => params => { return state.saveFileList; }, getSaveUserList: state => params => { return state.saveUserList; }, } } getActions() { return { add: (store, payload) => { let result = this.validate(Object.assign({}, payload)); result.params = Object.assign({}, this.getElementState().params, result.params); result.id = 'temporary' + (new Date).getTime() + store.state.created; result.templateId = result.id; result.unread = false; store.commit('add', Object.assign({}, this.getElementState(), result)); if (payload.sending !== false) { store.dispatch('actionStart', { id: result.id, chatId: result.chatId, }); } return result.id; }, actionStart: (store, payload) => { if (/^\d+$/.test(payload.id)) { payload.id = parseInt(payload.id); } payload.chatId = parseInt(payload.chatId); Vue.nextTick(() => { store.commit('update', { id : payload.id , chatId : payload.chatId, fields : {sending: true} }); }); }, actionError: (store, payload) => { if (/^\d+$/.test(payload.id)) { payload.id = parseInt(payload.id); } payload.chatId = parseInt(payload.chatId); Vue.nextTick(() => { store.commit('update', { id : payload.id , chatId : payload.chatId, fields : {sending: false, error: true, retry: payload.retry !== false} }); }); }, actionFinish: (store, payload) => { if (/^\d+$/.test(payload.id)) { payload.id = parseInt(payload.id); } payload.chatId = parseInt(payload.chatId); Vue.nextTick(() => { store.commit('update', { id : payload.id , chatId : payload.chatId, fields : {sending: false, error: false, retry: false} }); }); }, set: (store, payload) => { if (payload instanceof Array) { payload = payload.map(message => this.prepareMessage(message, {host: store.state.host})); } else { let result = this.prepareMessage(payload, {host: store.state.host}); (payload = []).push(result); } store.commit('set', { insertType : MutationType.set, data : payload }); }, setAfter: (store, payload) => { if (payload instanceof Array) { payload = payload.map(message => this.prepareMessage(message)); } else { let result = this.prepareMessage(payload); (payload = []).push(result); } store.commit('set', { insertType : MutationType.setAfter, data : payload }); }, setBefore: (store, payload) => { if (payload instanceof Array) { payload = payload.map(message => this.prepareMessage(message)); } else { let result = this.prepareMessage(payload); (payload = []).push(result); } store.commit('set', { insertType : MutationType.setBefore, data : payload }); }, update: (store, payload) => { if (/^\d+$/.test(payload.id)) { payload.id = parseInt(payload.id); } if (/^\d+$/.test(payload.chatId)) { payload.chatId = parseInt(payload.chatId); } store.commit('initCollection', {chatId: payload.chatId}); let index = store.state.collection[payload.chatId].findIndex(el => el.id === payload.id); if (index < 0) { return false; } let result = this.validate(Object.assign({}, payload.fields)); if (result.params) { result.params = Object.assign( {}, this.getElementState().params, store.state.collection[payload.chatId][index].params, result.params ); } store.commit('update', { id : payload.id, chatId : payload.chatId, index : index, fields : result }); if (payload.fields.blink) { setTimeout(() => { store.commit('update', { id : payload.id , chatId : payload.chatId, fields : {blink: false} }); }, 1000); } return true; }, delete: (store, payload) => { if (!(payload.id instanceof Array)) { payload.id = [payload.id]; } payload.id = payload.id.map(id => { if (/^\d+$/.test(id)) { id = parseInt(id); } return id; }); store.commit('delete', { chatId : payload.chatId, elements : payload.id, }); return true; }, clear: (store, payload) => { payload.chatId = parseInt(payload.chatId); store.commit('clear', { chatId : payload.chatId }); return true; }, applyMutationType: (store, payload) => { payload.chatId = parseInt(payload.chatId); store.commit('applyMutationType', { chatId : payload.chatId }); return true; }, readMessages: (store, payload) => { payload.readId = parseInt(payload.readId) || 0; payload.chatId = parseInt(payload.chatId); if (typeof store.state.collection[payload.chatId] === 'undefined') { return {count: 0} } let count = 0; for (let index = store.state.collection[payload.chatId].length-1; index >= 0; index--) { let element = store.state.collection[payload.chatId][index]; if (!element.unread) continue; if (payload.readId === 0 || element.id <= payload.readId) { count++; } } store.commit('readMessages', { chatId: payload.chatId, readId: payload.readId, }); return {count}; }, unreadMessages: (store, payload) => { payload.unreadId = parseInt(payload.unreadId) || 0; payload.chatId = parseInt(payload.chatId); if (typeof store.state.collection[payload.chatId] === 'undefined' || !payload.unreadId) { return {count: 0} } let count = 0; for (let index = store.state.collection[payload.chatId].length-1; index >= 0; index--) { let element = store.state.collection[payload.chatId][index]; if (element.unread) continue; if (element.id >= payload.unreadId) { count++; } } store.commit('unreadMessages', { chatId: payload.chatId, unreadId: payload.unreadId, }); return {count}; }, } } getMutations() { return { initCollection: (state, payload) => { return this.initCollection(state, payload); }, add: (state, payload) => { this.initCollection(state, {chatId: payload.chatId}); this.setMutationType(state, {chatId: payload.chatId, initialType: MutationType.add}); state.collection[payload.chatId].push(payload); state.saveMessageList[payload.chatId].push(payload.id); state.created += 1; this.saveState(state, payload.chatId); }, set: (state, payload) => { let chats = []; let chatsSave = []; let mutationType = {}; mutationType.initialType = payload.insertType; if (payload.insertType === MutationType.set) { payload.insertType = MutationType.setAfter; let elements = {}; payload.data.forEach(element => { if (!elements[element.chatId]) { elements[element.chatId] = []; } elements[element.chatId].push(element.id); }); for (let chatId in elements) { if (!elements.hasOwnProperty(chatId)) continue; this.initCollection(state, {chatId}); if ( state.saveMessageList[chatId].length > elements[chatId].length || elements[chatId].length < StorageLimit.messages ) { state.collection[chatId] = state.collection[chatId].filter(element => elements[chatId].includes(element.id)); state.saveMessageList[chatId] = state.saveMessageList[chatId].filter(id => elements[chatId].includes(id)); } let intersection = this.manageCacheBeforeSet( [...state.saveMessageList[chatId].reverse()], elements[chatId] ); if (intersection.type === IntersectionType.none) { if (intersection.foundElements.length > 0) { state.collection[chatId] = state.collection[chatId].filter(element => !intersection.foundElements.includes(element.id)); state.saveMessageList[chatId] = state.saveMessageList[chatId].filter(id => !intersection.foundElements.includes(id)); } this.removeIntersectionCacheElements = state.collection[chatId].map(element => element.id); clearTimeout(this.removeIntersectionCacheTimeout); this.removeIntersectionCacheTimeout = setTimeout(() => { state.collection[chatId] = state.collection[chatId].filter(element => !this.removeIntersectionCacheElements.includes(element.id)); state.saveMessageList[chatId] = state.saveMessageList[chatId].filter(id => !this.removeIntersectionCacheElements.includes(id)); this.removeIntersectionCacheElements = []; }, 1000); } else { if (intersection.type === IntersectionType.foundReverse) { payload.insertType = MutationType.setBefore; payload.data = payload.data.reverse(); } } if (intersection.foundElements.length > 0) { if (intersection.type === IntersectionType.found && intersection.noneElements[0]) { mutationType.scrollStickToTop = false; mutationType.scrollMessageId = intersection.foundElements[intersection.foundElements.length-1]; } else { mutationType.scrollStickToTop = false; mutationType.scrollMessageId = 0; } } else if (intersection.type === IntersectionType.none) { mutationType.scrollStickToTop = false; mutationType.scrollMessageId = payload.data[0].id; } } } mutationType.appliedType = payload.insertType; for (let element of payload.data) { this.initCollection(state, {chatId: element.chatId}); let index = state.collection[element.chatId].findIndex(el => el.id === element.id); if (index > -1) { delete element.templateId; state.collection[element.chatId][index] = Object.assign( state.collection[element.chatId][index], element ); } else if (payload.insertType === MutationType.setBefore) { state.collection[element.chatId].unshift(element); } else if (payload.insertType === MutationType.setAfter) { state.collection[element.chatId].push(element); } chats.push(element.chatId); if (this.store.getters['dialogues/canSaveChat'] && this.store.getters['dialogues/canSaveChat'](element.chatId)) { chatsSave.push(element.chatId); } } chats = [...new Set(chats)]; chatsSave = [...new Set(chatsSave)]; // check array for correct order of messages if (mutationType.initialType === MutationType.set) { chats.forEach(chatId => { let lastElementId = 0; let needApplySort = false; for (let i = 0; i < state.collection[chatId].length; i++) { let element = state.collection[chatId][i]; if (element.id < lastElementId) { needApplySort = true; break; } lastElementId = element.id; } if (needApplySort) { state.collection[chatId].sort((a, b) => a.id - b.id); } }); } chats.forEach(chatId => { this.setMutationType(state, {chatId: chatId, ...mutationType}); }); if (mutationType.initialType !== MutationType.setBefore) { chatsSave.forEach(chatId => { this.saveState(state, chatId); }); } }, update: (state, payload) => { this.initCollection(state, {chatId: payload.chatId}); let index = -1; if (typeof payload.index !== 'undefined' && state.collection[payload.chatId][payload.index]) { index = payload.index; } else { index = state.collection[payload.chatId].findIndex(el => el.id === payload.id); } if (index >= 0) { let isSaveState = ( state.saveMessageList[payload.chatId].includes(state.collection[payload.chatId][index].id) || payload.fields.id && !payload.fields.id.toString().startsWith('temporary') && state.collection[payload.chatId][index].id.toString().startsWith('temporary') ); delete payload.fields.templateId; state.collection[payload.chatId][index] = Object.assign( state.collection[payload.chatId][index], payload.fields ); if (isSaveState) { this.saveState(state, payload.chatId); } } }, delete: (state, payload) => { this.initCollection(state, {chatId: payload.chatId}); this.setMutationType(state, {chatId: payload.chatId, initialType: MutationType.delete}); state.collection[payload.chatId] = state.collection[payload.chatId].filter(element => !payload.elements.includes(element.id)); if (state.saveMessageList[payload.chatId].length > 0) { for (let id of payload.elements) { if (state.saveMessageList[payload.chatId].includes(id)) { this.saveState(state, payload.chatId); break; } } } }, clear: (state, payload) => { this.initCollection(state, {chatId: payload.chatId}); this.setMutationType(state, {chatId: payload.chatId, initialType: 'clear'}); state.collection[payload.chatId] = []; state.saveMessageList[payload.chatId] = []; }, applyMutationType: (state, payload) => { if (typeof state.mutationType[payload.chatId] === 'undefined') { Vue.set(state.mutationType, payload.chatId, {applied: false, initialType: MutationType.none, appliedType: MutationType.none, scrollStickToTop: 0, scrollMessageId: 0}); } state.mutationType[payload.chatId].applied = true; }, readMessages: (state, payload) => { this.initCollection(state, {chatId: payload.chatId}); let saveNeeded = false; for (let index = state.collection[payload.chatId].length-1; index >= 0; index--) { let element = state.collection[payload.chatId][index]; if (!element.unread) continue; if (payload.readId === 0 || element.id <= payload.readId) { state.collection[payload.chatId][index] = Object.assign( state.collection[payload.chatId][index], {unread: false} ); saveNeeded = true; } } if (saveNeeded) { this.saveState(state, payload.chatId); } }, unreadMessages: (state, payload) => { this.initCollection(state, {chatId: payload.chatId}); let saveNeeded = false; for (let index = state.collection[payload.chatId].length-1; index >= 0; index--) { let element = state.collection[payload.chatId][index]; if (element.unread) continue; if (element.id >= payload.unreadId) { state.collection[payload.chatId][index] = Object.assign( state.collection[payload.chatId][index], {unread: true} ); saveNeeded = true; } } if (saveNeeded) { this.saveState(state, payload.chatId); this.updateSubordinateStates(); } }, } } initCollection(state, payload) { if (typeof payload.chatId === 'undefined') { return false; } if ( typeof payload.chatId === 'undefined' || typeof state.collection[payload.chatId] !== 'undefined' ) { return true; } Vue.set(state.collection, payload.chatId, payload.messages? [].concat(payload.messages): []); Vue.set(state.mutationType, payload.chatId, {applied: false, initialType: MutationType.none, appliedType: MutationType.none, scrollStickToTop: 0, scrollMessageId: 0}); Vue.set(state.saveMessageList, payload.chatId, []); Vue.set(state.saveFileList, payload.chatId, []); Vue.set(state.saveUserList, payload.chatId, []); return true; } setMutationType(state, payload) { let mutationType = { applied: false, initialType: MutationType.none, appliedType: MutationType.none, scrollStickToTop: false, scrollMessageId: 0 }; if (payload.initialType && !payload.appliedType) { payload.appliedType = payload.initialType; } if (typeof state.mutationType[payload.chatId] === 'undefined') { Vue.set(state.mutationType, payload.chatId, mutationType); } state.mutationType[payload.chatId] = {...mutationType, ...payload}; return true; } prepareMessage(message, options = {}) { let result = this.validate(Object.assign({}, message), options); result.params = Object.assign({}, this.getElementState().params, result.params); result.templateId = result.id; return Object.assign({}, this.getElementState(), result); } manageCacheBeforeSet(cache, elements, recursive = false) { let result = { type: IntersectionType.empty, foundElements: [], noneElements: [] }; if (!cache || cache.length <= 0) { return result; } for (let id of elements) { if (cache.includes(id)) { if (result.type === IntersectionType.empty) { result.type = IntersectionType.found; } result.foundElements.push(id); } else { if (result.type === IntersectionType.empty) { result.type = IntersectionType.none; } result.noneElements.push(id); } } if ( result.type === IntersectionType.found && cache.length === elements.length && result.foundElements.length === elements.length ) { result.type = IntersectionType.equal; } else if ( result.type === IntersectionType.none && !recursive && result.foundElements.length > 0 ) { let reverseResult = this.manageCacheBeforeSet(cache.reverse(), elements.reverse(), true); if (reverseResult.type === IntersectionType.found) { reverseResult.type = IntersectionType.foundReverse; return reverseResult; } } return result; } updateSaveLists(state, chatId) { if (!this.isSaveAvailable()) { return true; } if ( !chatId || !this.store.getters['dialogues/canSaveChat'] || !this.store.getters['dialogues/canSaveChat'](chatId) ) { return false; } this.initCollection(state, {chatId: chatId}); let count = 0; let saveMessageList = []; let saveFileList = []; let saveUserList = []; let dialog = this.store.getters['dialogues/getByChatId'](chatId); if (dialog && dialog.type === 'private') { saveUserList.push(parseInt(dialog.dialogId)); } for (let index = state.collection[chatId].length-1; index >= 0; index--) { if (state.collection[chatId][index].id.toString().startsWith('temporary')) { continue; } if (count >= StorageLimit.messages && !state.collection[chatId][index].unread) { break; } saveMessageList.unshift(state.collection[chatId][index].id); count++; } saveMessageList = saveMessageList.slice(0, StorageLimit.messages); state.collection[chatId].filter(element => saveMessageList.includes(element.id)).forEach(element => { if (element.authorId > 0) { saveUserList.push(element.authorId); } if (element.params.FILE_ID instanceof Array) { saveFileList = element.params.FILE_ID.concat(saveFileList); } }); state.saveMessageList[chatId] = saveMessageList; state.saveFileList[chatId] = [...new Set(saveFileList)]; state.saveUserList[chatId] = [...new Set(saveUserList)]; return true; } getSaveTimeout() { return 150; } saveState(state, chatId) { if (!this.updateSaveLists(state, chatId)) { return false; } super.saveState(() => { let storedState = { collection: {}, saveMessageList: {}, saveUserList: {}, saveFileList: {}, }; for (let chatId in state.saveMessageList) { if (!state.saveMessageList.hasOwnProperty(chatId)) { continue; } if (!state.collection[chatId]) { continue; } if (!storedState.collection[chatId]) { storedState.collection[chatId] = []; } state.collection[chatId] .filter(element => state.saveMessageList[chatId].includes(element.id)) .forEach(element => storedState.collection[chatId].push(element)) ; storedState.saveMessageList[chatId] = state.saveMessageList[chatId]; storedState.saveFileList[chatId] = state.saveFileList[chatId]; storedState.saveUserList[chatId] = state.saveUserList[chatId]; } return storedState; }); } updateSubordinateStates() { this.store.dispatch('users/saveState'); this.store.dispatch('files/saveState'); } validate(fields, options) { const result = {}; if (typeof fields.id === "number") { result.id = fields.id; } else if (typeof fields.id === "string") { if (fields.id.startsWith('temporary')) { result.id = fields.id; } else { result.id = parseInt(fields.id); } } if (typeof fields.templateId === "number") { result.templateId = fields.templateId; } else if (typeof fields.templateId === "string") { if (fields.templateId.startsWith('temporary')) { result.templateId = fields.templateId; } else { result.templateId = parseInt(fields.templateId); } } if (typeof fields.chat_id !== 'undefined') { fields.chatId = fields.chat_id; } if (typeof fields.chatId === "number" || typeof fields.chatId === "string") { result.chatId = parseInt(fields.chatId); } if (typeof fields.date !== "undefined") { result.date = Utils.date.cast(fields.date); } // previous P&P format if (typeof fields.textOriginal === "string" || typeof fields.textOriginal === "number") { result.text = fields.textOriginal.toString(); if (typeof fields.text === "string" || typeof fields.text === "number") { result.textConverted = this.convertToHtml({ text: fields.text.toString(), isConverted: true }); } } else // modern format { if (typeof fields.text_converted !== 'undefined') { fields.textConverted = fields.text_converted; } if (typeof fields.textConverted === "string" || typeof fields.textConverted === "number") { result.textConverted = fields.textConverted.toString(); } if (typeof fields.text === "string" || typeof fields.text === "number") { result.text = fields.text.toString(); let isConverted = typeof result.textConverted !== 'undefined'; result.textConverted = this.convertToHtml({ text: isConverted? result.textConverted: result.text, isConverted }); } } if (typeof fields.senderId !== 'undefined') { fields.authorId = fields.senderId; } else if (typeof fields.author_id !== 'undefined') { fields.authorId = fields.author_id; } if (typeof fields.authorId === "number" || typeof fields.authorId === "string") { if (fields.system === true || fields.system === 'Y') { result.authorId = 0; } else { result.authorId = parseInt(fields.authorId); } } if (typeof fields.params === "object" && fields.params !== null) { const params = this.validateParams(fields.params, options); if (params) { result.params = params; } } if (typeof fields.push === "boolean") { result.push = fields.push; } if (typeof fields.sending === "boolean") { result.sending = fields.sending; } if (typeof fields.unread === "boolean") { result.unread = fields.unread; } if (typeof fields.blink === "boolean") { result.blink = fields.blink; } if (typeof fields.error === "boolean" || typeof fields.error === "string") { result.error = fields.error; } if (typeof fields.retry === "boolean") { result.retry = fields.retry; } return result; } validateParams(params, options) { const result = {}; try { for (let field in params) { if (!params.hasOwnProperty(field)) { continue; } if (field === 'COMPONENT_ID') { if (typeof params[field] === "string" && BX.Vue.isComponent(params[field])) { result[field] = params[field]; } } else if (field === 'LIKE') { if (params[field] instanceof Array) { result['REACTION'] = {like: params[field].map(element => parseInt(element))}; } } else if (field === 'CHAT_LAST_DATE') { result[field] = Utils.date.cast(params[field]); } else if (field === 'AVATAR') { if (params[field]) { result[field] = params[field].startsWith('http') ? params[field] : options.host + params[field]; } } else if (field === 'NAME') { if (params[field]) { result[field] = params[field]; } } else { result[field] = params[field]; } } } catch (e) {} let hasResultElements = false; for (let field in result) { if (!result.hasOwnProperty(field)) { continue; } hasResultElements = true; break } return hasResultElements? result: null; } convertToHtml(params = {}) { let { quote = true, image = true, text = '', highlightText = '', isConverted = false, enableBigSmile = true } = params; text = text.trim(); if (!isConverted) { text = text.replace(/&/g, '&').replace(/"/g, '"').replace(/</g, '<').replace(/>/g, '>'); } if (text.startsWith('/me')) { text = `<i>${text.substr(4)}</i>`; } else if (text.startsWith('/loud')) { text = `<b>${text.substr(6)}</b>`; } const quoteSign = ">>"; if (quote && text.indexOf(quoteSign) >= 0) { let textPrepareFlag = false; let textPrepare = text.split(isConverted? "<br />": "\n"); for (let i = 0; i < textPrepare.length; i++) { if (textPrepare[i].startsWith(quoteSign)) { textPrepare[i] = textPrepare[i].replace(quoteSign, '<div class="bx-im-message-content-quote"><div class="bx-im-message-content-quote-wrap">'); while (++i < textPrepare.length && textPrepare[i].startsWith(quoteSign)) { textPrepare[i] = textPrepare[i].replace(quoteSign, ''); } textPrepare[i - 1] += '</div></div><br>'; textPrepareFlag = true; } } text = textPrepare.join("<br />"); } text = text.replace(/\n/gi, '<br />'); text = text.replace(/\t/gi, ' '); text = this.decodeBbCode(text, false, enableBigSmile); if (quote) { text = text.replace(/------------------------------------------------------<br \/>(.*?)\[(.*?)\]<br \/>(.*?)------------------------------------------------------(<br \/>)?/g, function (whole, p1, p2, p3, p4, offset) { return (offset > 0? '<br>': '') + "<div class=\"bx-im-message-content-quote\"><div class=\"bx-im-message-content-quote-wrap\"><div class=\"bx-im-message-content-quote-name\"><span class=\"bx-im-message-content-quote-name-text\">" + p1 + "</span><span class=\"bx-im-message-content-quote-name-time\">" + p2 + "</span></div>" + p3 + "</div></div><br />"; }); text = text.replace(/------------------------------------------------------<br \/>(.*?)------------------------------------------------------(<br \/>)?/g, function (whole, p1, p2, p3, offset) { return (offset > 0? '<br>': '') + "<div class=\"bx-im-message-content-quote\"><div class=\"bx-im-message-content-quote-wrap\">" + p1 + "</div></div><br />"; }); } if (image) { let changed = false; text = text.replace(/<a(.*?)>(http[s]{0,1}:\/\/.*?)<\/a>/ig, function(whole, aInner, text, offset) { if(!text.match(/(\.(jpg|jpeg|png|gif)\?|\.(jpg|jpeg|png|gif)$)/i) || text.indexOf("/docs/pub/") > 0 || text.indexOf("logout=yes") > 0) { return whole; } else { changed = true; return (offset > 0? '<br />':'')+'<a' +aInner+ ' target="_blank" class="bx-im-element-file-image"><img src="'+text+'" class="bx-im-element-file-image-source-text" onerror="BX.Messenger.Model.MessagesModel.hideErrorImage(this)"></a></span>'; } }); if (changed) { text = text.replace(/<\/span>(\n?)<br(\s\/?)>/ig, '</span>').replace(/<br(\s\/?)>(\n?)<br(\s\/?)>(\n?)<span/ig, '<br /><span'); } } if (highlightText) { text = text.replace(new RegExp("(" + highlightText.replace(/[\-\[\]\/{}()*+?.\\^$|]/g, "\\$&") + ")", 'ig'), '<span class="bx-messenger-highlight">$1</span>'); } if (enableBigSmile) { text = text.replace( /^(\s*<img\s+src=[^>]+?data-code=[^>]+?data-definition="UHD"[^>]+?style="width:)(\d+)(px[^>]+?height:)(\d+)(px[^>]+?class="bx-smile"\s*\/?>\s*)$/, function doubleSmileSize(match, start, width, middle, height, end) { return start + (parseInt(width, 10) * 1.7) + middle + (parseInt(height, 10) * 1.7) + end; } ); } if (text.substr(-6) == '<br />') { text = text.substr(0, text.length - 6); } text = text.replace(/<br><br \/>/ig, '<br />'); text = text.replace(/<br \/><br>/ig, '<br />'); return text; }; decodeBbCode(text, textOnly = false, enableBigSmile = true) { return MessagesModel.decodeBbCode({text, textOnly, enableBigSmile}) } static decodeBbCode(params = {}) { let {text, textOnly = false, enableBigSmile = true} = params; let codeReplacement = []; text = text.replace(/\[CODE\]\n?(.*?)\[\/CODE\]/sig, function(whole, text) { let id = codeReplacement.length; codeReplacement.push(text); return '####REPLACEMENT_MARK_'+id+'####'; }); text = text.replace(/\[LIKE\]/ig, '<span class="bx-smile bx-im-smile-like"></span>'); text = text.replace(/\[DISLIKE\]/ig, '<span class="bx-smile bx-im-smile-dislike"></span>'); text = text.replace(/\[USER=([0-9]{1,})\](.*?)\[\/USER\]/ig, (whole, userId, text) => '<span class="bx-im-mention" data-type="USER" data-value="'+userId+'">'+text+'</span>'); text = text.replace(/\[CHAT=(imol\|)?([0-9]{1,})\](.*?)\[\/CHAT\]/ig, (whole, openlines, chatId, text) => openlines? text: '<span class="bx-im-mention" data-type="CHAT" data-value="chat'+chatId+'">'+text+'</span>'); // TODO tag CHAT if (false && Utils.device.isMobile()) { let replacements = []; text = text.replace(/\[CALL(?:=(.+?))?\](.+?)?\[\/CALL\]/ig, (whole, number, text) => { let index = replacements.length; replacements.push({number, text}); return `####REPLACEMENT_MARK_${index}####`; }); text = text.replace(/[+]{0,1}(?:[-\/. ()\[\]~;#,]*[0-9]){10,}[^\n\r<][-\/. ()\[\]~;#,0-9^]*/g, (number) => { let pureNumber = number.replace(/\D/g, ''); return `[CALL=${pureNumber}]${number}[/CALL]`; }); replacements.forEach((item, index) => { text = text.replace(`####REPLACEMENT_MARK_${index}####`, `[CALL=${item.number}]${item.text}[/CALL]`) }); } text = text.replace(/\[CALL(?:=(.+?))?\](.+?)?\[\/CALL\]/ig, (whole, number, text) => '<span class="bx-im-mention" data-type="CALL" data-value="'+Utils.text.htmlspecialchars(number)+'">'+text+'</span>'); // TODO tag CHAT text = text.replace(/\[PCH=([0-9]{1,})\](.*?)\[\/PCH\]/ig, (whole, historyId, text) => text); // TODO tag PCH text = text.replace(/\[SEND(?:=(.+?))?\](.+?)?\[\/SEND\]/ig, (whole, command, text) => { let html = ''; text = text? text: command; command = (command? command: text).replace('<br />', '\n'); if (!textOnly && text) { text = text.replace(/<([\w]+)[^>]*>(.*?)<\\1>/i, "$2", text); text = text.replace(/\[([\w]+)[^\]]*\](.*?)\[\/\1\]/i, "$2", text); html = '<span class="bx-im-message-command-wrap">'+ '<span class="bx-im-message-command" data-entity="send">'+text+'</span>'+ '<span class="bx-im-message-command-data">'+command+'</span>'+ '</span>'; } else { html = text; } return html; }); text = text.replace(/\[PUT(?:=(.+?))?\](.+?)?\[\/PUT\]/ig, (whole, command, text) => { let html = ''; text = text? text: command; command = (command? command: text).replace('<br />', '\n'); if (!textOnly && text) { text = text.replace(/<([\w]+)[^>]*>(.*?)<\/\1>/i, "$2", text); text = text.replace(/\[([\w]+)[^\]]*\](.*?)\[\/\1\]/i, "$2", text); html = '<span class="bx-im-message-command" data-entity="put">'+text+'</span>'; html += '<span class="bx-im-message-command-data">'+command+'</span>'; } else { html = text; } return html; }); let textElementSize = 0; if (enableBigSmile) { textElementSize = text.replace(/\[icon\=([^\]]*)\]/ig, '').trim().length; } text = text.replace(/\[icon\=([^\]]*)\]/ig, (whole) => { let url = whole.match(/icon\=(\S+[^\s.,> )\];\'\"!?])/i); if (url && url[1]) { url = url[1]; } else { return ''; } let attrs = {'src': url, 'border': 0}; let size = whole.match(/size\=(\d+)/i); if (size && size[1]) { attrs['width'] = size[1]; attrs['height'] = size[1]; } else { let width = whole.match(/width\=(\d+)/i); if (width && width[1]) { attrs['width'] = width[1]; } let height = whole.match(/height\=(\d+)/i); if (height && height[1]) { attrs['height'] = height[1]; } if (attrs['width'] && !attrs['height']) { attrs['height'] = attrs['width']; } else if (attrs['height'] && !attrs['width']) { attrs['width'] = attrs['height']; } else if (attrs['height'] && attrs['width']) {} else { attrs['width'] = 20; attrs['height'] = 20; } } attrs['width'] = attrs['width']>100? 100: attrs['width']; attrs['height'] = attrs['height']>100? 100: attrs['height']; if (enableBigSmile && textElementSize === 0 && attrs['width'] === attrs['height'] && attrs['width'] === 20) { attrs['width'] = 40; attrs['height'] = 40; } let title = whole.match(/title\=(.*[^\s\]])/i); if (title && title[1]) { title = title[1]; if (title.indexOf('width=') > -1) { title = title.substr(0, title.indexOf('width=')) } if (title.indexOf('height=') > -1) { title = title.substr(0, title.indexOf('height=')) } if (title.indexOf('size=') > -1) { title = title.substr(0, title.indexOf('size=')) } if (title) { attrs['title'] = Utils.text.htmlspecialchars(title).trim(); attrs['alt'] = attrs['title']; } } let attributes = ''; for (let name in attrs) { if (attrs.hasOwnProperty(name)) { attributes += name+'="'+attrs[name]+'" '; } } return '<img class="bx-smile bx-icon" '+attributes+'>'; }); codeReplacement.forEach((code, index) => { text = text.replace('####REPLACEMENT_MARK_'+index+'####', !textOnly? '<div class="bx-im-message-content-code">'+code+'</div>': code ) }); return text; } static hideErrorImage(element) { if (element.parentNode && element.parentNode) { element.parentNode.innerHTML = '<a href="'+element.src+'" target="_blank">'+element.src+'</a>'; } return true; }; } export {MessagesModel}; src/recent.js 0000664 00000024073 14773234674 0007202 0 ustar 00 /** * Bitrix Messenger * User model (Vuex Builder model) * * @package bitrix * @subpackage im * @copyright 2001-2019 Bitrix */ import {Vue} from 'ui.vue'; import {VuexBuilderModel} from 'ui.vue.vuex'; import {Utils} from "im.lib.utils"; class RecentModel extends VuexBuilderModel { getName() { return 'recent'; } getState() { return { host: this.getVariable('host', location.protocol+'//'+location.host), collection: { pinned: [], general: [] } } } getElementState(params = {}) { return { id: 0, templateId: '', template: 'item', chatType: 'chat', sectionCode: 'general', avatar: '', color: '#048bd0', title: '', message: { id: 0, text: '', date: new Date() }, counter: 0, pinned: false, chatId: 0, userId: 0 }; } getGetters() { return { get: state => dialogId => { return this.findItem(state.collection, dialogId); } }; } getActions() { return { set: (store, payload) => { let result = {}; if (payload.pinned instanceof Array) { result.pinned = payload.pinned.map( recentItem => this.prepareItem(recentItem, { host: store.state.host, sectionCode: 'pinned' }) ); } else if (typeof payload.pinned !== 'undefined') { let pinned = []; pinned.push(this.prepareItem(payload.pinned, { host: store.state.host, sectionCode: 'pinned' })); result.pinned = pinned; } if (payload.general instanceof Array) { result.general = payload.general.map( recentItem => this.prepareItem(recentItem, { host: store.state.host }) ); } else if (typeof payload.general !== 'undefined') { let general = []; general.push(this.prepareItem(payload.general, { host: store.state.host })); result.general = general; } store.commit('set', result); }, updatePlaceholders: (store, payload) => { if (!(payload.items instanceof Array)) { return false; } payload.items = payload.items.map(element => this.prepareItem(element)); payload.items.forEach((element, index) => { let placeholderId = 'placeholder' + (payload.firstMessage + index); let existingPlaceholder = this.findItem( store.state.collection, placeholderId, 'templateId' ); let existingItem = this.findItem(store.state.collection, element.id); if (existingItem.element) { store.commit('update', { index: existingItem.index, fields: Object.assign({}, element), section: 'general' }); store.commit('delete', { index: existingPlaceholder.index, section: 'general' }); } else { store.commit('update', { index: existingPlaceholder.index, fields: Object.assign({}, element), section: 'general' }); } }); }, update: (store, payload) => { if ( typeof payload !== 'object' || payload instanceof Array || !payload.id || !payload.fields ) { return false; } if (typeof payload.id === 'string' && !payload.id.startsWith('chat') && payload.id !== 'notify') { payload.id = parseInt(payload.id); } let existingItem = this.findItem(store.state.collection, payload.id); if (!existingItem.element) { return false; } store.commit('update', { index: existingItem.index, fields: Object.assign({}, this.validate(payload.fields)), section: existingItem.element.sectionCode }); }, pin: (store, payload) => { if ( typeof payload !== 'object' || payload instanceof Array || !payload.id || typeof payload.action !== 'boolean' ) { return false; } if (typeof payload.id === 'string' && !payload.id.startsWith('chat') && payload.id !== 'notify') { payload.id = parseInt(payload.id); } let existingItem = this.findItem(store.state.collection, payload.id, undefined, payload.action? 'general': 'pinned'); if (!existingItem.element) { return true; } if (payload.action) { store.state.collection.pinned.push( Object.assign({}, existingItem.element, { sectionCode: 'pinned', pinned: true }) ); store.state.collection.pinned.sort(this.sortListByMessageDate); store.commit('delete', { index: existingItem.index, section: 'general' }); } else { store.state.collection.general.push( Object.assign({}, existingItem.element, { sectionCode: 'general', pinned: false }) ); store.state.collection.general.sort(this.sortListByMessageDate); store.commit('delete', { index: existingItem.index, section: 'pinned' }); } }, clearPlaceholders: (store, payload) => { store.state.collection.general = store.state.collection.general.filter(element => { return !element.id.toString().startsWith('placeholder'); }); }, delete: (store, payload) => { if ( typeof payload !== 'object' || payload instanceof Array || !payload.id ) { return false; } if (typeof payload.id === 'string' && !payload.id.startsWith('chat') && payload.id !== 'notify') { payload.id = parseInt(payload.id); } let existingItem = this.findItem(store.state.collection, payload.id); if (!existingItem.element) { return false; } store.commit('delete', { index: existingItem.index, section: existingItem.element.sectionCode }); } } } getMutations() { return { set: (state, payload) => { if (payload.general instanceof Array) { payload.general.forEach(element => { let {index, alreadyExists} = this.initCollection(state, element, 'general'); if (alreadyExists) { state.collection.general[index] = Object.assign( {}, state.collection.general[index], element ); } }); } if (payload.pinned instanceof Array) { payload.pinned.forEach(element => { let {index, alreadyExists} = this.initCollection(state, element, 'pinned'); if (alreadyExists) { state.collection.pinned[index] = Object.assign( {}, state.collection.pinned[index], element ); } }); } }, update: (state, payload) => { if ( !payload || payload instanceof Array || typeof payload.fields !== 'object' || typeof payload.index !== 'number' || typeof payload.section !== 'string' ) { return false; } state.collection[payload.section][payload.index] = Object.assign( {}, state.collection[payload.section][payload.index], payload.fields ); state.collection[payload.section].sort(this.sortListByMessageDate); }, delete: (state, payload) => { if ( !payload || payload instanceof Array || typeof payload.index !== 'number' || typeof payload.section !== 'string' ) { return false; } state.collection[payload.section].splice(payload.index, 1); } } } initCollection(state, payload, section) { let existingItem = this.findItem(state.collection, payload.id, undefined, section); if (existingItem.element) { return {index: existingItem.index, alreadyExists: true}; } let newLength = state.collection[section].push(Object.assign( {}, this.getElementState(), payload )); return {index: newLength - 1, alreadyExists: false}; } validate(fields, options = {}) { const result = {}; if (typeof fields.id === "number" || typeof fields.id === "string") { result.id = fields.id; } if (typeof fields.templateId === 'string') { result.templateId = fields.templateId; } if (typeof fields.template === 'string') { result.template = fields.template; } if (typeof fields.type === "string") { if (fields.type === 'chat') { if (fields.chat.type === 'open') { result.chatType = 'open'; } else if (fields.chat.type === 'chat') { result.chatType = 'chat'; } } else if (fields.type === 'user') { result.chatType = 'user'; } else if (fields.type === 'notification') { result.chatType = 'notification'; fields.title = 'Notifications'; } } if (typeof fields.avatar === 'string') { let avatar; if (!fields.avatar || fields.avatar.endsWith('/js/im/images/blank.gif')) { avatar = ''; } else if (fields.avatar.startsWith('http')) { avatar = fields.avatar; } else { avatar = options.host + fields.avatar; } if (avatar) { result.avatar = encodeURI(avatar); } } if (typeof fields.color === 'string') { result.color = fields.color; } if (typeof fields.title === "string") { result.title = fields.title; } if ( typeof fields.message === "object" && !(fields.message instanceof Array) && fields.message !== null) { result.message = fields.message; } if (typeof fields.counter === 'number') { result.counter = fields.counter; } if (typeof fields.pinned === 'boolean') { result.pinned = fields.pinned; } if (typeof fields.chatId === 'number') { result.chatId = fields.chatId; } if (typeof fields.userId === 'number') { result.userId = fields.userId; } return result; } sortListByMessageDate(a, b) { if (a.message && b.message) { let timestampA = new Date(a.message.date).getTime(); let timestampB = new Date(b.message.date).getTime(); return timestampB - timestampA; } } prepareItem(item, options = {}) { let result = this.validate(Object.assign({}, item)); return Object.assign({}, this.getElementState(), result, options); } findItem(store, value, key = 'id', section = 'general') { let result = {}; if (typeof store[section] === undefined) { return result; } let elementIndex = store[section].findIndex((element, index) => { return element[key] === value; }); if (elementIndex !== -1) { result.index = elementIndex; result.element = store[section][elementIndex]; return result; } return result; } } export {RecentModel}; src/dialogues.js 0000664 00000043251 14773234674 0007675 0 ustar 00 /** * Bitrix Messenger * Dialogues model (Vuex Builder model) * * @package bitrix * @subpackage im * @copyright 2001-2019 Bitrix */ import {Vue} from 'ui.vue'; import {VuexBuilderModel} from 'ui.vue.vuex'; import {StorageLimit} from "im.const"; import {Utils} from "im.lib.utils"; class DialoguesModel extends VuexBuilderModel { getName() { return 'dialogues'; } getState() { return { host: this.getVariable('host', location.protocol+'//'+location.host), collection: {}, saveDialogList: [], saveChatList: [], } } getStateSaveException() { return { host: null } } getElementStateSaveException() { return { writingList: null, quoteId: null } } getElementState() { return { dialogId: '0', chatId: 0, counter: 0, unreadId: 0, unreadLastId: 0, managerList: [], readedList: [], writingList: [], textareaMessage: "", quoteId: 0, editId: 0, init: false, name: "", owner: 0, extranet: false, avatar: "", color: "#17A3EA", type: "chat", entityType: "", entityId: "", entityData1: "", entityData2: "", entityData3: "", dateCreate: new Date(), restrictions: { avatar: true, extend: true, leave: true, leaveOwner: true, rename: true } }; } getGetters() { return { get: state => dialogId => { if (!state.collection[dialogId]) { return null; } return state.collection[dialogId]; }, getByChatId: state => chatId => { chatId = parseInt(chatId); for (let dialogId in state.collection) { if (!state.collection.hasOwnProperty(dialogId)) { continue; } if (state.collection[dialogId].chatId === chatId) { return state.collection[dialogId]; } } return null; }, getBlank: state => params => { return this.getElementState(); }, getQuoteId: state => dialogId => { if (!state.collection[dialogId]) { return 0; } return state.collection[dialogId].quoteId; }, getEditId: state => dialogId => { if (!state.collection[dialogId]) { return 0; } return state.collection[dialogId].editId; }, canSaveChat: state => chatId => { if (/^\d+$/.test(chatId)) { chatId = parseInt(chatId); } return state.saveChatList.includes(parseInt(chatId)); }, canSaveDialog: state => dialogId => { return state.saveDialogList.includes(dialogId.toString()); }, isPrivateDialog: state => dialogId => { dialogId = dialogId.toString(); return state.collection[dialogId.toString()] && state.collection[dialogId].type === 'private'; }, } } getActions() { return { set: (store, payload) => { if (payload instanceof Array) { payload = payload.map(dialog => { return Object.assign( {}, this.validate(Object.assign({}, dialog), {host: store.state.host}), {init: true} ); }); } else { let result = []; result.push(Object.assign( {}, this.validate(Object.assign({}, payload), {host: store.state.host}), {init: true} )); payload = result; } store.commit('set', payload); }, update: (store, payload) => { if ( typeof store.state.collection[payload.dialogId] === 'undefined' || store.state.collection[payload.dialogId].init === false ) { return true; } store.commit('update', { dialogId : payload.dialogId, fields : this.validate(Object.assign({}, payload.fields), {host: store.state.host}) }); return true; }, delete: (store, payload) => { store.commit('delete', payload.dialogId); return true; }, updateWriting: (store, payload) => { if ( typeof store.state.collection[payload.dialogId] === 'undefined' || store.state.collection[payload.dialogId].init === false ) { return true; } let index = store.state.collection[payload.dialogId].writingList.findIndex(el => el.userId === payload.userId); if (payload.action) { if (index >= 0) { return true; } else { let writingList = [].concat(store.state.collection[payload.dialogId].writingList); writingList.unshift({ userId: payload.userId, userName: payload.userName, }); store.commit('update', { actionName: 'updateWriting/1', dialogId : payload.dialogId, fields : this.validate({writingList}, {host: store.state.host}) }); } } else { if (index >= 0) { let writingList = store.state.collection[payload.dialogId].writingList.filter(el => el.userId !== payload.userId); store.commit('update', { actionName: 'updateWriting/2', dialogId : payload.dialogId, fields : this.validate({writingList}, {host: store.state.host}) }); return true; } else { return true; } } return false; }, updateReaded: (store, payload) => { if ( typeof store.state.collection[payload.dialogId] === 'undefined' || store.state.collection[payload.dialogId].init === false ) { return true; } let readedList = store.state.collection[payload.dialogId].readedList.filter(el => el.userId !== payload.userId); if (payload.action) { readedList.push({ userId: payload.userId, userName: payload.userName || '', messageId: payload.messageId, date: payload.date || (new Date()), }); } store.commit('update', { actionName: 'updateReaded', dialogId : payload.dialogId, fields : this.validate({readedList}, {host: store.state.host}) }); return false; }, increaseCounter: (store, payload) => { if ( typeof store.state.collection[payload.dialogId] === 'undefined' || store.state.collection[payload.dialogId].init === false ) { return true; } let counter = store.state.collection[payload.dialogId].counter; if (counter === 100) { return true; } let increasedCounter = counter + payload.count; if (increasedCounter > 100) { increasedCounter = 100; } let fields = { counter: increasedCounter }; if (typeof payload.unreadLastId !== 'undefined') { fields.unreadLastId = payload.unreadLastId; } store.commit('update', { actionName: 'increaseCounter', dialogId : payload.dialogId, fields }); return false; }, decreaseCounter: (store, payload) => { if ( typeof store.state.collection[payload.dialogId] === 'undefined' || store.state.collection[payload.dialogId].init === false ) { return true; } let counter = store.state.collection[payload.dialogId].counter; if (counter === 100) { return true; } let decreasedCounter = counter - payload.count; if (decreasedCounter < 0) { decreasedCounter = 0; } let unreadId = payload.unreadId > store.state.collection[payload.dialogId].unreadId? payload.unreadId: store.state.collection[payload.dialogId].unreadId; if ( store.state.collection[payload.dialogId].unreadId !== unreadId || store.state.collection[payload.dialogId].counter !== decreasedCounter ) { if (decreasedCounter === 0) { unreadId = 0; } store.commit('update', { actionName: 'decreaseCounter', dialogId : payload.dialogId, fields : { counter: decreasedCounter, unreadId: unreadId } }); } return false; }, saveDialog: (store, payload) => { if ( typeof store.state.collection[payload.dialogId] === 'undefined' || store.state.collection[payload.dialogId].init === false ) { return true; } store.commit('saveDialog', { dialogId : payload.dialogId, chatId : payload.chatId }); return false; }, }; } getMutations() { return { initCollection: (state, payload) => { this.initCollection(state, payload); }, saveDialog: (state, payload) => { // TODO if payload.dialogId is IMOL, skip update this flag if (!(payload.chatId > 0 && payload.dialogId.length > 0)) { return false; } let saveDialogList = state.saveDialogList.filter(function(element) { return element !== payload.dialogId; }); saveDialogList.unshift(payload.dialogId); saveDialogList = saveDialogList.slice(0, StorageLimit.dialogues); if (state.saveDialogList.join(',') === saveDialogList.join(',')) { return true; } state.saveDialogList = saveDialogList; let saveChatList = state.saveChatList.filter(function(element) { return element !== payload.chatId; }); saveChatList.unshift(payload.chatId); state.saveChatList = saveChatList.slice(0, StorageLimit.dialogues); this.saveState(state); }, set: (state, payload) => { for (let element of payload) { this.initCollection(state, {dialogId: element.dialogId}); state.collection[element.dialogId] = Object.assign( this.getElementState(), state.collection[element.dialogId], element ); } // TODO if payload.dialogId is IMOL, skip update cache this.saveState(state); }, update: (state, payload) => { this.initCollection(state, payload); state.collection[payload.dialogId] = Object.assign( state.collection[payload.dialogId], payload.fields ); // TODO if payload.dialogId is IMOL, skip update cache this.saveState(state); }, delete: (state, payload) => { delete state.collection[payload.dialogId]; // TODO if payload.dialogId is IMOL, skip update cache this.saveState(state); } }; } initCollection(state, payload) { if (typeof state.collection[payload.dialogId] !== 'undefined') { return true } Vue.set(state.collection, payload.dialogId, this.getElementState()); if (payload.fields) { state.collection[payload.dialogId] = Object.assign( state.collection[payload.dialogId], this.validate(Object.assign({}, payload.fields), {host: state.host}) ); } return true; } getSaveTimeout() { return 100; } saveState(state = {}) { if (!this.isSaveAvailable()) { return true; } super.saveState(() => { let storedState = { collection: {}, saveDialogList: [].concat(state.saveDialogList), saveChatList: [].concat(state.saveChatList), }; state.saveDialogList.forEach(dialogId => { if (!state.collection[dialogId]) return false; storedState.collection[dialogId] = Object.assign( this.getElementState(), this.cloneState(state.collection[dialogId], this.getElementStateSaveException()) ); }); return storedState; }); } validate(fields, options = {}) { const result = {}; options.host = options.host || this.getState().host; if (typeof fields.dialog_id !== 'undefined') { fields.dialogId = fields.dialog_id; } if (typeof fields.dialogId === "number" || typeof fields.dialogId === "string") { result.dialogId = fields.dialogId.toString(); } if (typeof fields.chat_id !== 'undefined') { fields.chatId = fields.chat_id; } else if (typeof fields.id !== 'undefined') { fields.chatId = fields.id; } if (typeof fields.chatId === "number" || typeof fields.chatId === "string") { result.chatId = parseInt(fields.chatId); } if (typeof fields.quoteId === "number") { result.quoteId = parseInt(fields.quoteId); } if (typeof fields.editId === "number") { result.editId = parseInt(fields.editId); } if (typeof fields.counter === "number" || typeof fields.counter === "string") { result.counter = parseInt(fields.counter); } if (typeof fields.unread_id !== 'undefined') { fields.unreadId = fields.unread_id; } if (typeof fields.unreadId === "number" || typeof fields.unreadId === "string") { result.unreadId = parseInt(fields.unreadId); } if (typeof fields.unread_last_id !== 'undefined') { fields.unreadLastId = fields.unread_last_id; } if (typeof fields.unreadLastId === "number" || typeof fields.unreadLastId === "string") { result.unreadLastId = parseInt(fields.unreadLastId); } if (typeof fields.readed_list !== 'undefined') { fields.readedList = fields.readed_list; } if (typeof fields.readedList !== 'undefined') { result.readedList = []; if (fields.readedList instanceof Array) { fields.readedList.forEach(element => { let record = {}; if (typeof element.user_id !== 'undefined') { element.userId = element.user_id; } if (typeof element.user_name !== 'undefined') { element.userName = element.user_name; } if (typeof element.message_id !== 'undefined') { element.messageId = element.message_id; } if (!element.userId || !element.userName || !element.messageId) { return false; } record.userId = parseInt(element.userId); record.userName = element.userName.toString(); record.messageId = parseInt(element.messageId); record.date = Utils.date.cast(element.date); result.readedList.push(record); }) } } if (typeof fields.writing_list !== 'undefined') { fields.writingList = fields.writing_list; } if (typeof fields.writingList !== 'undefined') { result.writingList = []; if (fields.writingList instanceof Array) { fields.writingList.forEach(element => { let record = {}; if (!element.userId) { return false; } record.userId = parseInt(element.userId); record.userName = element.userName; result.writingList.push(record); }) } } if (typeof fields.manager_list !== 'undefined') { fields.managerList = fields.manager_list; } if (typeof fields.managerList !== 'undefined') { result.managerList = []; if (fields.managerList instanceof Array) { fields.managerList.forEach(userId => { userId = parseInt(userId); if (userId > 0) { result.managerList.push(userId); } }); } } if (typeof fields.mute_list !== 'undefined') { fields.muteList = fields.mute_list; } if (typeof fields.muteList !== 'undefined') { result.muteList = []; if (fields.muteList instanceof Array) { fields.muteList.forEach(userId => { userId = parseInt(userId); if (userId > 0) { result.muteList.push(userId); } }); } } if (typeof fields.textareaMessage !== 'undefined') { result.textareaMessage = fields.textareaMessage.toString(); } if (typeof fields.title !== 'undefined') { fields.name = fields.title; } if (typeof fields.name === "string" || typeof fields.name === "number") { result.name = fields.name.toString(); } if (typeof fields.owner !== 'undefined') { fields.ownerId = fields.owner; } if (typeof fields.ownerId === "number" || typeof fields.ownerId === "string") { result.ownerId = parseInt(fields.ownerId); } if (typeof fields.extranet === "boolean") { result.extranet = fields.extranet; } if (typeof fields.avatar === 'string') { let avatar; if (!fields.avatar || fields.avatar.endsWith('/js/im/images/blank.gif')) { avatar = ''; } else if (fields.avatar.startsWith('http')) { avatar = fields.avatar; } else { avatar = options.host + fields.avatar; } if (avatar) { result.avatar = encodeURI(avatar); } } if (typeof fields.color === "string") { result.color = fields.color.toString(); } if (typeof fields.type === "string") { result.type = fields.type.toString(); } if (typeof fields.entity_type !== 'undefined') { fields.entityType = fields.entity_type; } if (typeof fields.entityType === "string") { result.entityType = fields.entityType.toString(); } if (typeof fields.entity_id !== 'undefined') { fields.entityId = fields.entity_id; } if (typeof fields.entityId === "string" || typeof fields.entityId === "number") { result.entityId = fields.entityId.toString(); } if (typeof fields.entity_data_1 !== 'undefined') { fields.entityData1 = fields.entity_data_1; } if (typeof fields.entityData1 === "string") { result.entityData1 = fields.entityData1.toString(); } if (typeof fields.entity_data_2 !== 'undefined') { fields.entityData2 = fields.entity_data_2; } if (typeof fields.entityData2 === "string") { result.entityData2 = fields.entityData2.toString(); } if (typeof fields.entity_data_3 !== 'undefined') { fields.entityData3 = fields.entity_data_3; } if (typeof fields.entityData3 === "string") { result.entityData3 = fields.entityData3.toString(); } if (typeof fields.date_create !== 'undefined') { fields.dateCreate = fields.date_create; } if (typeof fields.dateCreate !== "undefined") { result.dateCreate = Utils.date.cast(fields.dateCreate); } if (typeof fields.dateLastOpen !== "undefined") { result.dateLastOpen = Utils.date.cast(fields.dateLastOpen); } if (typeof fields.restrictions === 'object' && fields.restrictions) { result.restrictions = {}; if (typeof fields.restrictions.AVATAR === 'boolean') { result.restrictions.avatar = fields.restrictions.AVATAR; } if (typeof fields.restrictions.EXTEND === 'boolean') { result.restrictions.extend = fields.restrictions.EXTEND; } if (typeof fields.restrictions.LEAVE === 'boolean') { result.restrictions.leave = fields.restrictions.LEAVE; } if (typeof fields.restrictions.LEAVE_OWNER === 'boolean') { result.restrictions.leaveOwner = fields.restrictions.LEAVE_OWNER; } if (typeof fields.restrictions.RENAME === 'boolean') { result.restrictions.rename = fields.restrictions.RENAME; } } return result; } } export {DialoguesModel}; src/users.js 0000664 00000034256 14773234674 0007067 0 ustar 00 /** * Bitrix Messenger * User model (Vuex Builder model) * * @package bitrix * @subpackage im * @copyright 2001-2019 Bitrix */ import {Vue} from 'ui.vue'; import {VuexBuilderModel} from 'ui.vue.vuex'; import {Utils} from "im.lib.utils"; class UsersModel extends VuexBuilderModel { getName() { return 'users'; } getState() { this.startOnlineCheckInterval(); return { host: this.getVariable('host', location.protocol+'//'+location.host), collection: {}, onlineList: [], mobileOnlineList: [], absentList: [] } } getElementState(params = {}) { let { id = 0, name = this.getVariable('default.name', ''), firstName = this.getVariable('default.name', ''), lastName = '', } = params; return { id, name, firstName, lastName, workPosition: "", color: "#048bd0", avatar: "", gender: "M", birthday: false, isBirthday: false, extranet: false, network: false, bot: false, connector: false, externalAuthId: "default", status: "online", idle: false, lastActivityDate: false, mobileLastDate: false, isOnline: false, isMobileOnline: false, absent: false, isAbsent: false, departments: [], phones: { workPhone: "", personalMobile: "", personalPhone: "", innerPhone: "", }, init: false }; } getGetters() { return { get: state => (userId, getTemporary = false) => { userId = parseInt(userId); if (userId <= 0) { if (getTemporary) { userId = 0; } else { return null; } } if ( !getTemporary && (!state.collection[userId] || !state.collection[userId].init) ) { return null; } if (!state.collection[userId]) { return this.getElementState({id: userId}); } return state.collection[userId]; }, getBlank: state => params => { return this.getElementState(params); } } } getActions() { return { set: (store, payload) => { if (payload instanceof Array) { payload = payload.map(user => { return Object.assign( {}, this.getElementState(), this.validate(Object.assign({}, user), {host: store.state.host}), {init: true} ); }); } else { let result = []; result.push(Object.assign( {}, this.getElementState(), this.validate(Object.assign({}, payload), {host: store.state.host}), {init: true} )); payload = result; } store.commit('set', payload); }, update: (store, payload) => { payload.id = parseInt(payload.id); if ( typeof store.state.collection[payload.id] === 'undefined' || store.state.collection[payload.id].init === false ) { return true; } store.commit('update', { id : payload.id, fields : this.validate(Object.assign({}, payload.fields), {host: store.state.host}) }); return true; }, delete: (store, payload) => { store.commit('delete', payload.id); return true; }, saveState: (store, payload) => { store.commit('saveState', {}); return true; }, } } getMutations() { return { set: (state, payload) => { for (let element of payload) { this.initCollection(state, {id: element.id}); state.collection[element.id] = element; let status = Utils.user.getOnlineStatus(element); if (status.isOnline) { state.collection[element.id].isOnline = true; this.addToOnlineList(state, element.id); } let mobileStatus = Utils.user.isMobileActive(element); if (mobileStatus) { state.collection[element.id].isMobileOnline = true; this.addToMobileOnlineList(state, element.id); } if (element.birthday) { let today = Utils.date.format(new Date(), "d-m"); if (element.birthday === today) { state.collection[element.id].isBirthday = true; let timeToNextMidnight = this.getTimeToNextMidnight(); setTimeout(() => { state.collection[element.id].isBirthday = false; }, timeToNextMidnight); } } if (element.absent) { element.isAbsent = true; if (!state.absentList.includes(element.id)) { this.addToAbsentList(state, element.id); let timeToNextMidnight = this.getTimeToNextMidnight(); let timeToNextDay = 1000*60*60*24; setTimeout(() => { setInterval(() => this.startAbsentCheckInterval(state), timeToNextDay); }, timeToNextMidnight); } } this.saveState(state); } }, update: (state, payload) => { this.initCollection(state, payload); let lastActivityDate = state.collection[payload.id].lastActivityDate.getTime(); let newActivityDate = payload.fields.lastActivityDate.getTime(); if (newActivityDate > lastActivityDate) { let status = Utils.user.getOnlineStatus(payload.fields); if (status.isOnline) { state.collection[payload.id].isOnline = true; this.addToOnlineList(state, payload.fields.id); } } if (state.collection[payload.id].mobileLastDate !== payload.fields.mobileLastDate) { let mobileStatus = Utils.user.isMobileActive(payload.fields); if (mobileStatus) { state.collection[payload.id].isMobileOnline = true; this.addToMobileOnlineList(state, payload.fields.id); } } state.collection[payload.id] = Object.assign( state.collection[payload.id], payload.fields ); this.saveState(state); }, delete: (state, payload) => { delete state.collection[payload.id]; this.saveState(state); }, saveState: (state, payload) => { this.saveState(state); }, } } initCollection(state, payload) { if (typeof state.collection[payload.id] !== 'undefined') { return true; } Vue.set(state.collection, payload.id, this.getElementState()); return true; } getSaveUserList() { if (!this.db) { return []; } if (!this.store.getters['messages/getSaveUserList']) { return []; } let list = this.store.getters['messages/getSaveUserList'](); if (!list) { return []; } return list; } getSaveTimeout() { return 250; } saveState(state) { if (!this.isSaveAvailable()) { return false; } super.saveState(() => { let list = this.getSaveUserList(); if (!list) { return false; } let storedState = { collection: {}, }; let exceptionList = { absent: true, idle: true, mobileLastDate: true, lastActivityDate: true, }; for (let chatId in list) { if (!list.hasOwnProperty(chatId)) { continue; } list[chatId].forEach(userId => { if (!state.collection[userId]) { return false; } storedState.collection[userId] = this.cloneState(state.collection[userId], exceptionList); }); } return storedState; }); } validate(fields, options = {}) { const result = {}; options.host = options.host || this.getState().host; if (typeof fields.id === "number" || typeof fields.id === "string") { result.id = parseInt(fields.id); } if (typeof fields.first_name !== "undefined") { fields.firstName = fields.first_name; } if (typeof fields.last_name !== "undefined") { fields.lastName = fields.last_name; } if (typeof fields.name === "string" || typeof fields.name === "number") { result.name = fields.name.toString(); if (typeof fields.firstName !== "undefined" && !fields.firstName) { let elementsOfName = fields.name.split(' '); if (elementsOfName.length > 1) { delete elementsOfName[elementsOfName.length-1]; fields.firstName = elementsOfName.join(' ').trim(); } else { fields.firstName = result.name; } } if (typeof fields.lastName !== "undefined" && !fields.lastName) { let elementsOfName = fields.name.split(' '); if (elementsOfName.length > 1) { fields.lastName = elementsOfName[elementsOfName.length-1]; } else { fields.lastName = ''; } } } if (typeof fields.firstName === "string" || typeof fields.name === "number") { result.firstName = fields.firstName.toString(); } if (typeof fields.lastName === "string" || typeof fields.name === "number") { result.lastName = fields.lastName.toString(); } if (typeof fields.work_position !== "undefined") { fields.workPosition = fields.work_position; } if (typeof fields.workPosition === "string" || typeof fields.workPosition === "number") { result.workPosition = fields.workPosition.toString(); } if (typeof fields.color === "string") { result.color = fields.color; } if (typeof fields.avatar === 'string') { let avatar; if (!fields.avatar || fields.avatar.endsWith('/js/im/images/blank.gif')) { avatar = ''; } else if (fields.avatar.startsWith('http')) { avatar = fields.avatar; } else { avatar = options.host + fields.avatar; } if (avatar) { result.avatar = encodeURI(avatar); } } if (typeof fields.gender !== 'undefined') { result.gender = fields.gender === 'F'? 'F': 'M'; } if (typeof fields.birthday === "string") { result.birthday = fields.birthday; } if (typeof fields.extranet === "boolean") { result.extranet = fields.extranet; } if (typeof fields.network === "boolean") { result.network = fields.network; } if (typeof fields.bot === "boolean") { result.bot = fields.bot; } if (typeof fields.connector === "boolean") { result.connector = fields.connector; } if (typeof fields.external_auth_id !== "undefined") { fields.externalAuthId = fields.external_auth_id; } if (typeof fields.externalAuthId === "string" && fields.externalAuthId) { result.externalAuthId = fields.externalAuthId; } if (typeof fields.status === "string") { result.status = fields.status; } if (typeof fields.idle !== "undefined") { result.idle = Utils.date.cast(fields.idle, false); } if (typeof fields.last_activity_date !== "undefined") { fields.lastActivityDate = fields.last_activity_date; } if (typeof fields.lastActivityDate !== "undefined") { result.lastActivityDate = Utils.date.cast(fields.lastActivityDate, false); } if (typeof fields.mobile_last_date !== "undefined") { fields.mobileLastDate = fields.mobile_last_date; } if (typeof fields.mobileLastDate !== "undefined") { result.mobileLastDate = Utils.date.cast(fields.mobileLastDate, false); } if (typeof fields.absent !== "undefined") { result.absent = Utils.date.cast(fields.absent, false); } if (typeof fields.departments !== 'undefined') { result.departments = []; if (fields.departments instanceof Array) { fields.departments.forEach(departmentId => { departmentId = parseInt(departmentId); if (departmentId > 0) { result.departments.push(departmentId); } }); } } if (typeof fields.phones === 'object' && fields.phones) { result.phones = {}; if (typeof fields.phones.work_phone !== "undefined") { fields.phones.workPhone = fields.phones.work_phone; } if (typeof fields.phones.workPhone === 'string' || typeof fields.phones.workPhone === 'number') { result.phones.workPhone = fields.phones.workPhone.toString(); } if (typeof fields.phones.personal_mobile !== "undefined") { fields.phones.personalMobile = fields.phones.personal_mobile; } if (typeof fields.phones.personalMobile === 'string' || typeof fields.phones.personalMobile === 'number') { result.phones.personalMobile = fields.phones.personalMobile.toString(); } if (typeof fields.phones.personal_phone !== "undefined") { fields.phones.personalPhone = fields.phones.personal_phone; } if (typeof fields.phones.personalPhone === 'string' || typeof fields.phones.personalPhone === 'number') { result.phones.personalPhone = fields.phones.personalPhone.toString(); } if (typeof fields.phones.inner_phone !== "undefined") { fields.phones.innerPhone = fields.phones.inner_phone; } if (typeof fields.phones.innerPhone === 'string' || typeof fields.phones.innerPhone === 'number') { result.phones.innerPhone = fields.phones.innerPhone.toString(); } } return result; } addToOnlineList(state, id) { if (!state.onlineList.includes(id)) { state.onlineList.push(id); } } addToMobileOnlineList(state, id) { if (!state.mobileOnlineList.includes(id)) { state.mobileOnlineList.push(id); } } addToAbsentList(state, id) { if (!state.absentList.includes(id)) { state.absentList.push(id); } } getTimeToNextMidnight() { let nextMidnight = new Date(new Date().setHours(24,0,0)).getTime(); return nextMidnight - new Date(); } startAbsentCheckInterval(state) { for (let userId of state.absentList) { let user = state.collection[userId]; if (!user) { continue; } let currentTime = new Date().getTime(); let absentEnd = new Date(state.collection[userId].absent).getTime(); if (absentEnd <= currentTime) { state.absentList = state.absentList.filter(element => { return element !== userId; }); user.isAbsent = false; } } } startOnlineCheckInterval() { const intervalTime = 60000; setInterval(() => { for (let userId of this.store.state.users.onlineList) { let user = this.store.state.users.collection[userId]; if (!user) { continue; } let status = Utils.user.getOnlineStatus(user); if (status.isOnline) { user.isOnline = true; } else { user.isOnline = false; this.store.state.users.onlineList = this.store.state.users.onlineList.filter(element => { return element !== userId }); } } for (let userId of this.store.state.users.mobileOnlineList) { let user = this.store.state.users.collection[userId]; if (!user) { continue; } let mobileStatus = Utils.user.isMobileActive(user); if (mobileStatus) { user.isMobileOnline = true; } else { user.isMobileOnline = false; this.store.state.users.mobileOnlineList = this.store.state.users.mobileOnlineList.filter(element => { return element !== userId }); } } }, intervalTime); } } export {UsersModel}; dist/registry.bundle.js.map 0000664 00000752157 14773234674 0012005 0 ustar 00 {"version":3,"file":"registry.bundle.js","sources":["../src/application.js","../src/messages.js","../src/dialogues.js","../src/users.js","../src/files.js","../src/recent.js"],"sourcesContent":["/**\n * Bitrix Messenger\n * Application model (Vuex Builder model)\n *\n * @package bitrix\n * @subpackage im\n * @copyright 2001-2019 Bitrix\n */\n\nimport {DeviceType, DeviceOrientation} from 'im.const';\nimport {VuexBuilderModel} from 'ui.vue.vuex';\n\nclass ApplicationModel extends VuexBuilderModel\n{\n\tgetName()\n\t{\n\t\treturn 'application';\n\t}\n\n\tgetState()\n\t{\n\t\treturn {\n\t\t\tcommon:\n\t\t\t{\n\t\t\t\thost: this.getVariable('common.host', location.protocol+'//'+location.host),\n\t\t\t\tsiteId: this.getVariable('common.siteId', 'default'),\n\t\t\t\tuserId: this.getVariable('common.userId', 0),\n\t\t\t\tlanguageId: this.getVariable('common.languageId', 'en'),\n\t\t\t},\n\t\t\tdialog:\n\t\t\t{\n\t\t\t\tdialogId: this.getVariable('dialog.dialogId', '0'),\n\t\t\t\tchatId: this.getVariable('dialog.chatId', 0),\n\t\t\t\tdiskFolderId: this.getVariable('dialog.diskFolderId', 0),\n\t\t\t\tmessageLimit: this.getVariable('dialog.messageLimit', 20),\n\t\t\t\tenableReadMessages: this.getVariable('dialog.enableReadMessages', true),\n\t\t\t\tmessageExtraCount: 0,\n\t\t\t},\n\t\t\tdisk:\n\t\t\t{\n\t\t\t\tenabled: false,\n\t\t\t\tmaxFileSize: 5242880,\n\t\t\t},\n\t\t\tmobile:\n\t\t\t{\n\t\t\t\tkeyboardShow: false,\n\t\t\t},\n\t\t\tdevice:\n\t\t\t{\n\t\t\t\ttype: this.getVariable('device.type', DeviceType.desktop),\n\t\t\t\torientation: this.getVariable('device.orientation', DeviceOrientation.portrait),\n\t\t\t},\n\t\t\toptions:\n\t\t\t{\n\t\t\t\tquoteEnable: this.getVariable('options.quoteEnable', true),\n\t\t\t\tquoteFromRight: this.getVariable('options.quoteFromRight', true),\n\t\t\t\tautoplayVideo: this.getVariable('options.autoplayVideo', true),\n\t\t\t\tdarkBackground: this.getVariable('options.darkBackground', false),\n\t\t\t\tshowSmiles: false\n\t\t\t},\n\t\t\terror:\n\t\t\t{\n\t\t\t\tactive: false,\n\t\t\t\tcode: '',\n\t\t\t\tdescription: '',\n\t\t\t},\n\t\t}\n\t}\n\n\tgetStateSaveException()\n\t{\n\t\treturn Object.assign({\n\t\t\tcommon: this.getVariable('saveException.common', null),\n\t\t\tdialog: this.getVariable('saveException.dialog', null),\n\t\t\tmobile: this.getVariable('saveException.mobile', null),\n\t\t\tdevice: this.getVariable('saveException.device', null),\n\t\t\terror: this.getVariable('saveException.error', null)\n\t\t});\n\t}\n\n\tgetActions()\n\t{\n\t\treturn {\n\t\t\tset: (store, payload) =>\n\t\t\t{\n\t\t\t\tstore.commit('set', this.validate(payload));\n\t\t\t},\n\t\t\tshowSmiles: (store, payload) =>\n\t\t\t{\n\t\t\t\tstore.commit('showSmiles')\n\t\t\t},\n\t\t\thideSmiles: (store, payload) =>\n\t\t\t{\n\t\t\t\tstore.commit('hideSmiles');\n\t\t\t}\n\t\t}\n\t}\n\n\tgetMutations()\n\t{\n\t\treturn {\n\t\t\tset: (state, payload) =>\n\t\t\t{\n\t\t\t\tlet hasChange = false;\n\t\t\t\tfor (let group in payload)\n\t\t\t\t{\n\t\t\t\t\tif (!payload.hasOwnProperty(group))\n\t\t\t\t\t{\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (let field in payload[group])\n\t\t\t\t\t{\n\t\t\t\t\t\tif (!payload[group].hasOwnProperty(field))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstate[group][field] = payload[group][field];\n\t\t\t\t\t\thasChange = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (hasChange && this.isSaveNeeded(payload))\n\t\t\t\t{\n\t\t\t\t\tthis.saveState(state);\n\t\t\t\t}\n\t\t\t},\n\t\t\tincreaseDialogExtraCount(state, payload = {})\n\t\t\t{\n\t\t\t\tlet {count = 1} = payload;\n\n\t\t\t\tstate.dialog.messageExtraCount += count;\n\t\t\t},\n\t\t\tdecreaseDialogExtraCount(state, payload = {})\n\t\t\t{\n\t\t\t\tlet {count = 1} = payload;\n\n\t\t\t\tlet newCounter = state.dialog.messageExtraCount - count;\n\t\t\t\tif (newCounter <= 0)\n\t\t\t\t{\n\t\t\t\t\tnewCounter = 0;\n\t\t\t\t}\n\n\t\t\t\tstate.dialog.messageExtraCount = newCounter;\n\t\t\t},\n\t\t\tclearDialogExtraCount(state)\n\t\t\t{\n\t\t\t\tstate.dialog.messageExtraCount = 0;\n\t\t\t},\n\t\t\tshowSmiles(state)\n\t\t\t{\n\t\t\t\tstate.options.showSmiles = true;\n\t\t\t},\n\t\t\thideSmiles(state)\n\t\t\t{\n\t\t\t\tstate.options.showSmiles = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tvalidate(fields)\n\t{\n\t\tconst result = {};\n\n\t\tif (typeof fields.common === 'object' && fields.common)\n\t\t{\n\t\t\tresult.common = {};\n\n\t\t\tif (typeof fields.common.userId === 'number')\n\t\t\t{\n\t\t\t\tresult.common.userId = fields.common.userId;\n\t\t\t}\n\n\t\t\tif (typeof fields.common.languageId === 'string')\n\t\t\t{\n\t\t\t\tresult.common.languageId = fields.common.languageId;\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.dialog === 'object' && fields.dialog)\n\t\t{\n\t\t\tresult.dialog = {};\n\n\t\t\tif (typeof fields.dialog.dialogId === 'number')\n\t\t\t{\n\t\t\t\tresult.dialog.dialogId = fields.dialog.dialogId.toString();\n\t\t\t\tresult.dialog.chatId = 0;\n\t\t\t}\n\t\t\telse if (typeof fields.dialog.dialogId === 'string')\n\t\t\t{\n\t\t\t\tresult.dialog.dialogId = fields.dialog.dialogId;\n\n\t\t\t\tif (typeof fields.dialog.chatId !== 'number')\n\t\t\t\t{\n\t\t\t\t\tlet chatId = fields.dialog.dialogId;\n\t\t\t\t\tif (chatId.startsWith('chat'))\n\t\t\t\t\t{\n\t\t\t\t\t\tchatId = fields.dialog.dialogId.substr(4);\n\t\t\t\t\t}\n\n\t\t\t\t\tchatId = parseInt(chatId);\n\n\t\t\t\t\tresult.dialog.chatId = !isNaN(chatId)? chatId: 0;\n\t\t\t\t\tfields.dialog.chatId = result.dialog.chatId;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof fields.dialog.chatId === 'number')\n\t\t\t{\n\t\t\t\tresult.dialog.chatId = fields.dialog.chatId;\n\t\t\t}\n\n\t\t\tif (typeof fields.dialog.diskFolderId === 'number')\n\t\t\t{\n\t\t\t\tresult.dialog.diskFolderId = fields.dialog.diskFolderId;\n\t\t\t}\n\n\t\t\tif (typeof fields.dialog.messageLimit === 'number')\n\t\t\t{\n\t\t\t\tresult.dialog.messageLimit = fields.dialog.messageLimit;\n\t\t\t}\n\n\t\t\tif (typeof fields.dialog.messageExtraCount === 'number')\n\t\t\t{\n\t\t\t\tresult.dialog.messageExtraCount = fields.dialog.messageExtraCount;\n\t\t\t}\n\n\t\t\tif (typeof fields.dialog.enableReadMessages === 'boolean')\n\t\t\t{\n\t\t\t\tresult.dialog.enableReadMessages = fields.dialog.enableReadMessages;\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.disk === 'object' && fields.disk)\n\t\t{\n\t\t\tresult.disk = {};\n\n\t\t\tif (typeof fields.disk.enabled === 'boolean')\n\t\t\t{\n\t\t\t\tresult.disk.enabled = fields.disk.enabled;\n\t\t\t}\n\n\t\t\tif (typeof fields.disk.maxFileSize === 'number')\n\t\t\t{\n\t\t\t\tresult.disk.maxFileSize = fields.disk.maxFileSize;\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.mobile === 'object' && fields.mobile)\n\t\t{\n\t\t\tresult.mobile = {};\n\n\t\t\tif (typeof fields.mobile.keyboardShow === 'boolean')\n\t\t\t{\n\t\t\t\tresult.mobile.keyboardShow = fields.mobile.keyboardShow;\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.device === 'object' && fields.device)\n\t\t{\n\t\t\tresult.device = {};\n\n\t\t\tif (typeof fields.device.type === 'string' && typeof DeviceType[fields.device.type] !== 'undefined')\n\t\t\t{\n\t\t\t\tresult.device.type = fields.device.type;\n\t\t\t}\n\n\t\t\tif (typeof fields.device.orientation === 'string' && typeof DeviceOrientation[fields.device.orientation] !== 'undefined')\n\t\t\t{\n\t\t\t\tresult.device.orientation = fields.device.orientation;\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.error === 'object' && fields.error)\n\t\t{\n\t\t\tif (typeof fields.error.active === 'boolean')\n\t\t\t{\n\t\t\t\tresult.error = {\n\t\t\t\t\tactive: fields.error.active,\n\t\t\t\t\tcode: fields.error.code.toString() || '',\n\t\t\t\t\tdescription: fields.error.description.toString() || '',\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n}\n\nexport {ApplicationModel};","/**\n * Bitrix Messenger\n * Message model (Vuex Builder model)\n *\n * @package bitrix\n * @subpackage im\n * @copyright 2001-2019 Bitrix\n */\n\n\nimport {Vue} from 'ui.vue';\nimport {VuexBuilderModel} from 'ui.vue.vuex';\nimport {MutationType, StorageLimit} from 'im.const';\nimport {Utils} from \"im.lib.utils\";\n\nconst IntersectionType = {\n\tempty: 'empty',\n\tequal: 'equal',\n\tnone: 'none',\n\tfound: 'found',\n\tfoundReverse: 'foundReverse',\n};\n\nclass MessagesModel extends VuexBuilderModel\n{\n\tgetName()\n\t{\n\t\treturn 'messages';\n\t}\n\n\tgetState()\n\t{\n\t\treturn {\n\t\t\tcreated: 0,\n\t\t\tcollection: {},\n\t\t\tmutationType: {},\n\t\t\tsaveMessageList: {},\n\t\t\tsaveFileList: {},\n\t\t\tsaveUserList: {},\n\t\t\thost: this.getVariable('host', location.protocol+'//'+location.host),\n\t\t}\n\t}\n\n\tgetElementState()\n\t{\n\t\treturn {\n\t\t\ttemplateId: 0,\n\t\t\ttemplateType: 'message',\n\n\t\t\tid: 0,\n\t\t\tchatId: 0,\n\t\t\tauthorId: 0,\n\t\t\tdate: new Date(),\n\t\t\ttext: \"\",\n\t\t\ttextConverted: \"\",\n\t\t\tparams: {\n\t\t\t\tTYPE : 'default',\n\t\t\t\tCOMPONENT_ID : 'bx-im-view-message',\n\t\t\t},\n\n\t\t\tpush: false,\n\t\t\tunread: false,\n\t\t\tsending: false,\n\t\t\terror: false,\n\t\t\tretry: false,\n\t\t\tblink: false,\n\t\t};\n\t}\n\n\tgetGetters()\n\t{\n\t\treturn {\n\n\t\t\tgetMutationType: state => chatId =>\n\t\t\t{\n\t\t\t\tif (!state.mutationType[chatId])\n\t\t\t\t{\n\t\t\t\t\treturn {initialType: MutationType.none, appliedType: MutationType.none};\n\t\t\t\t}\n\n\t\t\t\treturn state.mutationType[chatId];\n\t\t\t},\n\t\t\tgetLastId: state => chatId =>\n\t\t\t{\n\t\t\t\tif (!state.collection[chatId] || state.collection[chatId].length <= 0)\n\t\t\t\t{\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tlet lastId = 0;\n\n\t\t\t\tfor (let i = 0; i < state.collection[chatId].length; i++)\n\t\t\t\t{\n\t\t\t\t\tlet element = state.collection[chatId][i];\n\t\t\t\t\tif (\n\t\t\t\t\t\telement.push\n\t\t\t\t\t\t|| element.sending\n\t\t\t\t\t\t|| element.id.toString().startsWith('temporary')\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (lastId < element.id)\n\t\t\t\t\t{\n\t\t\t\t\t\tlastId = element.id;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn lastId? lastId: null;\n\t\t\t},\n\t\t\tgetMessage: state => (chatId, messageId) =>\n\t\t\t{\n\t\t\t\tif (!state.collection[chatId] || state.collection[chatId].length <= 0)\n\t\t\t\t{\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tfor (let index = state.collection[chatId].length-1; index >= 0; index--)\n\t\t\t\t{\n\t\t\t\t\tif (state.collection[chatId][index].id === messageId)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn state.collection[chatId][index];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tget: state => chatId =>\n\t\t\t{\n\t\t\t\tif (!state.collection[chatId] || state.collection[chatId].length <= 0)\n\t\t\t\t{\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\n\t\t\t\treturn state.collection[chatId];\n\t\t\t},\n\t\t\tgetBlank: state => params =>\n\t\t\t{\n\t\t\t\treturn this.getElementState();\n\t\t\t},\n\t\t\tgetSaveFileList: state => params =>\n\t\t\t{\n\t\t\t\treturn state.saveFileList;\n\t\t\t},\n\t\t\tgetSaveUserList: state => params =>\n\t\t\t{\n\t\t\t\treturn state.saveUserList;\n\t\t\t},\n\t\t}\n\t}\n\n\tgetActions()\n\t{\n\t\treturn {\n\t\t\tadd: (store, payload) =>\n\t\t\t{\n\t\t\t\tlet result = this.validate(Object.assign({}, payload));\n\t\t\t\tresult.params = Object.assign({}, this.getElementState().params, result.params);\n\t\t\t\tresult.id = 'temporary' + (new Date).getTime() + store.state.created;\n\t\t\t\tresult.templateId = result.id;\n\t\t\t\tresult.unread = false;\n\n\t\t\t\tstore.commit('add', Object.assign({}, this.getElementState(), result));\n\n\t\t\t\tif (payload.sending !== false)\n\t\t\t\t{\n\t\t\t\t\tstore.dispatch('actionStart', {\n\t\t\t\t\t\tid: result.id,\n\t\t\t\t\t\tchatId: result.chatId,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn result.id;\n\t\t\t},\n\t\t\tactionStart: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (/^\\d+$/.test(payload.id))\n\t\t\t\t{\n\t\t\t\t\tpayload.id = parseInt(payload.id);\n\t\t\t\t}\n\n\t\t\t\tpayload.chatId = parseInt(payload.chatId);\n\n\t\t\t\tVue.nextTick(() => {\n\t\t\t\t\tstore.commit('update', {\n\t\t\t\t\t\tid : payload.id ,\n\t\t\t\t\t\tchatId : payload.chatId,\n\t\t\t\t\t\tfields : {sending: true}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tactionError: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (/^\\d+$/.test(payload.id))\n\t\t\t\t{\n\t\t\t\t\tpayload.id = parseInt(payload.id);\n\t\t\t\t}\n\t\t\t\tpayload.chatId = parseInt(payload.chatId);\n\n\t\t\t\tVue.nextTick(() => {\n\t\t\t\t\tstore.commit('update', {\n\t\t\t\t\t\tid : payload.id ,\n\t\t\t\t\t\tchatId : payload.chatId,\n\t\t\t\t\t\tfields : {sending: false, error: true, retry: payload.retry !== false}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tactionFinish: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (/^\\d+$/.test(payload.id))\n\t\t\t\t{\n\t\t\t\t\tpayload.id = parseInt(payload.id);\n\t\t\t\t}\n\t\t\t\tpayload.chatId = parseInt(payload.chatId);\n\n\t\t\t\tVue.nextTick(() => {\n\t\t\t\t\tstore.commit('update', {\n\t\t\t\t\t\tid : payload.id ,\n\t\t\t\t\t\tchatId : payload.chatId,\n\t\t\t\t\t\tfields : {sending: false, error: false, retry: false}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tset: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (payload instanceof Array)\n\t\t\t\t{\n\t\t\t\t\tpayload = payload.map(message => this.prepareMessage(message, {host: store.state.host}));\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tlet result = this.prepareMessage(payload, {host: store.state.host});\n\t\t\t\t\t(payload = []).push(result);\n\t\t\t\t}\n\n\t\t\t\tstore.commit('set', {\n\t\t\t\t\tinsertType : MutationType.set,\n\t\t\t\t\tdata : payload\n\t\t\t\t});\n\t\t\t},\n\t\t\tsetAfter: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (payload instanceof Array)\n\t\t\t\t{\n\t\t\t\t\tpayload = payload.map(message => this.prepareMessage(message));\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tlet result = this.prepareMessage(payload);\n\t\t\t\t\t(payload = []).push(result);\n\t\t\t\t}\n\n\t\t\t\tstore.commit('set', {\n\t\t\t\t\tinsertType : MutationType.setAfter,\n\t\t\t\t\tdata : payload\n\t\t\t\t});\n\t\t\t},\n\t\t\tsetBefore: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (payload instanceof Array)\n\t\t\t\t{\n\t\t\t\t\tpayload = payload.map(message => this.prepareMessage(message));\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tlet result = this.prepareMessage(payload);\n\t\t\t\t\t(payload = []).push(result);\n\t\t\t\t}\n\n\t\t\t\tstore.commit('set', {\n\t\t\t\t\tinsertType : MutationType.setBefore,\n\t\t\t\t\tdata : payload\n\t\t\t\t});\n\t\t\t},\n\t\t\tupdate: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (/^\\d+$/.test(payload.id))\n\t\t\t\t{\n\t\t\t\t\tpayload.id = parseInt(payload.id);\n\t\t\t\t}\n\t\t\t\tif (/^\\d+$/.test(payload.chatId))\n\t\t\t\t{\n\t\t\t\t\tpayload.chatId = parseInt(payload.chatId);\n\t\t\t\t}\n\n\t\t\t\tstore.commit('initCollection', {chatId: payload.chatId});\n\n\t\t\t\tlet index = store.state.collection[payload.chatId].findIndex(el => el.id === payload.id);\n\t\t\t\tif (index < 0)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tlet result = this.validate(Object.assign({}, payload.fields));\n\n\t\t\t\tif (result.params)\n\t\t\t\t{\n\t\t\t\t\tresult.params = Object.assign(\n\t\t\t\t\t\t{},\n\t\t\t\t\t\tthis.getElementState().params,\n\t\t\t\t\t\tstore.state.collection[payload.chatId][index].params,\n\t\t\t\t\t\tresult.params\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tstore.commit('update', {\n\t\t\t\t\tid : payload.id,\n\t\t\t\t\tchatId : payload.chatId,\n\t\t\t\t\tindex : index,\n\t\t\t\t\tfields : result\n\t\t\t\t});\n\n\t\t\t\tif (payload.fields.blink)\n\t\t\t\t{\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tstore.commit('update', {\n\t\t\t\t\t\t\tid : payload.id ,\n\t\t\t\t\t\t\tchatId : payload.chatId,\n\t\t\t\t\t\t\tfields : {blink: false}\n\t\t\t\t\t\t});\n\t\t\t\t\t}, 1000);\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tdelete: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (!(payload.id instanceof Array))\n\t\t\t\t{\n\t\t\t\t\tpayload.id = [payload.id];\n\t\t\t\t}\n\n\t\t\t\tpayload.id = payload.id.map(id => {\n\t\t\t\t\tif (/^\\d+$/.test(id))\n\t\t\t\t\t{\n\t\t\t\t\t\tid = parseInt(id);\n\t\t\t\t\t}\n\t\t\t\t\treturn id;\n\t\t\t\t});\n\n\t\t\t\tstore.commit('delete', {\n\t\t\t\t\tchatId : payload.chatId,\n\t\t\t\t\telements : payload.id,\n\t\t\t\t});\n\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tclear: (store, payload) =>\n\t\t\t{\n\t\t\t\tpayload.chatId = parseInt(payload.chatId);\n\n\t\t\t\tstore.commit('clear', {\n\t\t\t\t\tchatId : payload.chatId\n\t\t\t\t});\n\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tapplyMutationType: (store, payload) =>\n\t\t\t{\n\t\t\t\tpayload.chatId = parseInt(payload.chatId);\n\n\t\t\t\tstore.commit('applyMutationType', {\n\t\t\t\t\tchatId : payload.chatId\n\t\t\t\t});\n\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\treadMessages: (store, payload) =>\n\t\t\t{\n\t\t\t\tpayload.readId = parseInt(payload.readId) || 0;\n\t\t\t\tpayload.chatId = parseInt(payload.chatId);\n\n\t\t\t\tif (typeof store.state.collection[payload.chatId] === 'undefined')\n\t\t\t\t{\n\t\t\t\t\treturn {count: 0}\n\t\t\t\t}\n\n\t\t\t\tlet count = 0;\n\t\t\t\tfor (let index = store.state.collection[payload.chatId].length-1; index >= 0; index--)\n\t\t\t\t{\n\t\t\t\t\tlet element = store.state.collection[payload.chatId][index];\n\t\t\t\t\tif (!element.unread)\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tif (payload.readId === 0 || element.id <= payload.readId)\n\t\t\t\t\t{\n\t\t\t\t\t\tcount++;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tstore.commit('readMessages', {\n\t\t\t\t\tchatId: payload.chatId,\n\t\t\t\t\treadId: payload.readId,\n\t\t\t\t});\n\n\t\t\t\treturn {count};\n\t\t\t},\n\t\t\tunreadMessages: (store, payload) =>\n\t\t\t{\n\t\t\t\tpayload.unreadId = parseInt(payload.unreadId) || 0;\n\t\t\t\tpayload.chatId = parseInt(payload.chatId);\n\n\t\t\t\tif (typeof store.state.collection[payload.chatId] === 'undefined' || !payload.unreadId)\n\t\t\t\t{\n\t\t\t\t\treturn {count: 0}\n\t\t\t\t}\n\n\t\t\t\tlet count = 0;\n\t\t\t\tfor (let index = store.state.collection[payload.chatId].length-1; index >= 0; index--)\n\t\t\t\t{\n\t\t\t\t\tlet element = store.state.collection[payload.chatId][index];\n\t\t\t\t\tif (element.unread)\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tif (element.id >= payload.unreadId)\n\t\t\t\t\t{\n\t\t\t\t\t\tcount++;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tstore.commit('unreadMessages', {\n\t\t\t\t\tchatId: payload.chatId,\n\t\t\t\t\tunreadId: payload.unreadId,\n\t\t\t\t});\n\n\t\t\t\treturn {count};\n\t\t\t},\n\t\t}\n\t}\n\n\tgetMutations()\n\t{\n\t\treturn {\n\t\t\tinitCollection: (state, payload) =>\n\t\t\t{\n\t\t\t\treturn this.initCollection(state, payload);\n\t\t\t},\n\t\t\tadd: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.initCollection(state, {chatId: payload.chatId});\n\t\t\t\tthis.setMutationType(state, {chatId: payload.chatId, initialType: MutationType.add});\n\n\t\t\t\tstate.collection[payload.chatId].push(payload);\n\t\t\t\tstate.saveMessageList[payload.chatId].push(payload.id);\n\n\t\t\t\tstate.created += 1;\n\n\t\t\t\tthis.saveState(state, payload.chatId);\n\t\t\t},\n\t\t\tset: (state, payload) =>\n\t\t\t{\n\t\t\t\tlet chats = [];\n\t\t\t\tlet chatsSave = [];\n\t\t\t\tlet mutationType = {};\n\n\t\t\t\tmutationType.initialType = payload.insertType;\n\n\t\t\t\tif (payload.insertType === MutationType.set)\n\t\t\t\t{\n\t\t\t\t\tpayload.insertType = MutationType.setAfter;\n\n\t\t\t\t\tlet elements = {};\n\t\t\t\t\tpayload.data.forEach(element => {\n\t\t\t\t\t\tif (!elements[element.chatId])\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\telements[element.chatId] = [];\n\t\t\t\t\t\t}\n\t\t\t\t\t\telements[element.chatId].push(element.id);\n\t\t\t\t\t});\n\n\t\t\t\t\tfor (let chatId in elements)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (!elements.hasOwnProperty(chatId))\n\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t\tthis.initCollection(state, {chatId});\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tstate.saveMessageList[chatId].length > elements[chatId].length\n\t\t\t\t\t\t\t|| elements[chatId].length < StorageLimit.messages\n\t\t\t\t\t\t)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstate.collection[chatId] = state.collection[chatId].filter(element => elements[chatId].includes(element.id));\n\t\t\t\t\t\t\tstate.saveMessageList[chatId] = state.saveMessageList[chatId].filter(id => elements[chatId].includes(id));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet intersection = this.manageCacheBeforeSet(\n\t\t\t\t\t\t\t[...state.saveMessageList[chatId].reverse()],\n\t\t\t\t\t\t\telements[chatId]\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (intersection.type === IntersectionType.none)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (intersection.foundElements.length > 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tstate.collection[chatId] = state.collection[chatId].filter(element => !intersection.foundElements.includes(element.id));\n\t\t\t\t\t\t\t\tstate.saveMessageList[chatId] = state.saveMessageList[chatId].filter(id => !intersection.foundElements.includes(id));\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.removeIntersectionCacheElements = state.collection[chatId].map(element => element.id);\n\n\t\t\t\t\t\t\tclearTimeout(this.removeIntersectionCacheTimeout);\n\t\t\t\t\t\t\tthis.removeIntersectionCacheTimeout = setTimeout(() => {\n\t\t\t\t\t\t\t\tstate.collection[chatId] = state.collection[chatId].filter(element => !this.removeIntersectionCacheElements.includes(element.id));\n\t\t\t\t\t\t\t\tstate.saveMessageList[chatId] = state.saveMessageList[chatId].filter(id => !this.removeIntersectionCacheElements.includes(id));\n\t\t\t\t\t\t\t\tthis.removeIntersectionCacheElements = [];\n\t\t\t\t\t\t\t}, 1000);\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\tif (intersection.type === IntersectionType.foundReverse)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpayload.insertType = MutationType.setBefore;\n\t\t\t\t\t\t\t\tpayload.data = payload.data.reverse();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (intersection.foundElements.length > 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (intersection.type === IntersectionType.found && intersection.noneElements[0])\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tmutationType.scrollStickToTop = false;\n\t\t\t\t\t\t\t\tmutationType.scrollMessageId = intersection.foundElements[intersection.foundElements.length-1];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tmutationType.scrollStickToTop = false;\n\t\t\t\t\t\t\t\tmutationType.scrollMessageId = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (intersection.type === IntersectionType.none)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmutationType.scrollStickToTop = false;\n\t\t\t\t\t\t\tmutationType.scrollMessageId = payload.data[0].id;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tmutationType.appliedType = payload.insertType;\n\n\t\t\t\tfor (let element of payload.data)\n\t\t\t\t{\n\t\t\t\t\tthis.initCollection(state, {chatId: element.chatId});\n\n\t\t\t\t\tlet index = state.collection[element.chatId].findIndex(el => el.id === element.id);\n\t\t\t\t\tif (index > -1)\n\t\t\t\t\t{\n\t\t\t\t\t\tdelete element.templateId;\n\n\t\t\t\t\t\tstate.collection[element.chatId][index] = Object.assign(\n\t\t\t\t\t\t\tstate.collection[element.chatId][index],\n\t\t\t\t\t\t\telement\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\telse if (payload.insertType === MutationType.setBefore)\n\t\t\t\t\t{\n\t\t\t\t\t\tstate.collection[element.chatId].unshift(element);\n\t\t\t\t\t}\n\t\t\t\t\telse if (payload.insertType === MutationType.setAfter)\n\t\t\t\t\t{\n\t\t\t\t\t\tstate.collection[element.chatId].push(element);\n\t\t\t\t\t}\n\n\t\t\t\t\tchats.push(element.chatId);\n\n\t\t\t\t\tif (this.store.getters['dialogues/canSaveChat'] && this.store.getters['dialogues/canSaveChat'](element.chatId))\n\t\t\t\t\t{\n\t\t\t\t\t\tchatsSave.push(element.chatId);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tchats = [...new Set(chats)];\n\t\t\t\tchatsSave = [...new Set(chatsSave)];\n\n\t\t\t\t// check array for correct order of messages\n\t\t\t\tif (mutationType.initialType === MutationType.set)\n\t\t\t\t{\n\t\t\t\t\tchats.forEach(chatId =>\n\t\t\t\t\t{\n\t\t\t\t\t\tlet lastElementId = 0;\n\t\t\t\t\t\tlet needApplySort = false;\n\t\t\t\t\t\tfor (let i = 0; i < state.collection[chatId].length; i++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlet element = state.collection[chatId][i];\n\t\t\t\t\t\t\tif (element.id < lastElementId)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tneedApplySort = true;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlastElementId = element.id;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (needApplySort)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstate.collection[chatId].sort((a, b) => a.id - b.id);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tchats.forEach(chatId => {\n\t\t\t\t\tthis.setMutationType(state, {chatId: chatId, ...mutationType});\n\t\t\t\t});\n\n\t\t\t\tif (mutationType.initialType !== MutationType.setBefore)\n\t\t\t\t{\n\t\t\t\t\tchatsSave.forEach(chatId => {\n\t\t\t\t\t\tthis.saveState(state, chatId);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\tupdate: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.initCollection(state, {chatId: payload.chatId});\n\n\t\t\t\tlet index = -1;\n\t\t\t\tif (typeof payload.index !== 'undefined' && state.collection[payload.chatId][payload.index])\n\t\t\t\t{\n\t\t\t\t\tindex = payload.index;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tindex = state.collection[payload.chatId].findIndex(el => el.id === payload.id);\n\t\t\t\t}\n\n\t\t\t\tif (index >= 0)\n\t\t\t\t{\n\t\t\t\t\tlet isSaveState = (\n\t\t\t\t\t\tstate.saveMessageList[payload.chatId].includes(state.collection[payload.chatId][index].id)\n\t\t\t\t\t\t|| payload.fields.id && !payload.fields.id.toString().startsWith('temporary') && state.collection[payload.chatId][index].id.toString().startsWith('temporary')\n\t\t\t\t\t);\n\n\t\t\t\t\tdelete payload.fields.templateId;\n\n\t\t\t\t\tstate.collection[payload.chatId][index] = Object.assign(\n\t\t\t\t\t\tstate.collection[payload.chatId][index],\n\t\t\t\t\t\tpayload.fields\n\t\t\t\t\t);\n\n\t\t\t\t\tif (isSaveState)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.saveState(state, payload.chatId);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelete: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.initCollection(state, {chatId: payload.chatId});\n\t\t\t\tthis.setMutationType(state, {chatId: payload.chatId, initialType: MutationType.delete});\n\n\t\t\t\tstate.collection[payload.chatId] = state.collection[payload.chatId].filter(element => !payload.elements.includes(element.id));\n\n\t\t\t\tif (state.saveMessageList[payload.chatId].length > 0)\n\t\t\t\t{\n\t\t\t\t\tfor (let id of payload.elements)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (state.saveMessageList[payload.chatId].includes(id))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.saveState(state, payload.chatId);\n\n\t\t\t\t\t\t\tbreak;\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\tclear: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.initCollection(state, {chatId: payload.chatId});\n\t\t\t\tthis.setMutationType(state, {chatId: payload.chatId, initialType: 'clear'});\n\n\t\t\t\tstate.collection[payload.chatId] = [];\n\t\t\t\tstate.saveMessageList[payload.chatId] = [];\n\t\t\t},\n\t\t\tapplyMutationType: (state, payload) =>\n\t\t\t{\n\t\t\t\tif (typeof state.mutationType[payload.chatId] === 'undefined')\n\t\t\t\t{\n\t\t\t\t\tVue.set(state.mutationType, payload.chatId, {applied: false, initialType: MutationType.none, appliedType: MutationType.none, scrollStickToTop: 0, scrollMessageId: 0});\n\t\t\t\t}\n\n\t\t\t\tstate.mutationType[payload.chatId].applied = true;\n\t\t\t},\n\t\t\treadMessages: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.initCollection(state, {chatId: payload.chatId});\n\n\t\t\t\tlet saveNeeded = false;\n\t\t\t\tfor (let index = state.collection[payload.chatId].length-1; index >= 0; index--)\n\t\t\t\t{\n\t\t\t\t\tlet element = state.collection[payload.chatId][index];\n\t\t\t\t\tif (!element.unread)\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tif (payload.readId === 0 || element.id <= payload.readId)\n\t\t\t\t\t{\n\t\t\t\t\t\tstate.collection[payload.chatId][index] = Object.assign(\n\t\t\t\t\t\t\tstate.collection[payload.chatId][index],\n\t\t\t\t\t\t\t{unread: false}\n\t\t\t\t\t\t);\n\t\t\t\t\t\tsaveNeeded = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (saveNeeded)\n\t\t\t\t{\n\t\t\t\t\tthis.saveState(state, payload.chatId);\n\t\t\t\t}\n\t\t\t},\n\t\t\tunreadMessages: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.initCollection(state, {chatId: payload.chatId});\n\n\t\t\t\tlet saveNeeded = false;\n\t\t\t\tfor (let index = state.collection[payload.chatId].length-1; index >= 0; index--)\n\t\t\t\t{\n\t\t\t\t\tlet element = state.collection[payload.chatId][index];\n\t\t\t\t\tif (element.unread)\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tif (element.id >= payload.unreadId)\n\t\t\t\t\t{\n\t\t\t\t\t\tstate.collection[payload.chatId][index] = Object.assign(\n\t\t\t\t\t\t\tstate.collection[payload.chatId][index],\n\t\t\t\t\t\t\t{unread: true}\n\t\t\t\t\t\t);\n\t\t\t\t\t\tsaveNeeded = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (saveNeeded)\n\t\t\t\t{\n\t\t\t\t\tthis.saveState(state, payload.chatId);\n\t\t\t\t\tthis.updateSubordinateStates();\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t}\n\n\tinitCollection(state, payload)\n\t{\n\t\tif (typeof payload.chatId === 'undefined')\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tif (\n\t\t\ttypeof payload.chatId === 'undefined'\n\t\t\t|| typeof state.collection[payload.chatId] !== 'undefined'\n\t\t)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tVue.set(state.collection, payload.chatId, payload.messages? [].concat(payload.messages): []);\n\t\tVue.set(state.mutationType, payload.chatId, {applied: false, initialType: MutationType.none, appliedType: MutationType.none, scrollStickToTop: 0, scrollMessageId: 0});\n\t\tVue.set(state.saveMessageList, payload.chatId, []);\n\t\tVue.set(state.saveFileList, payload.chatId, []);\n\t\tVue.set(state.saveUserList, payload.chatId, []);\n\n\t\treturn true;\n\t}\n\n\tsetMutationType(state, payload)\n\t{\n\t\tlet mutationType = {\n\t\t\tapplied: false,\n\t\t\tinitialType: MutationType.none,\n\t\t\tappliedType: MutationType.none,\n\t\t\tscrollStickToTop: false,\n\t\t\tscrollMessageId: 0\n\t\t};\n\n\t\tif (payload.initialType && !payload.appliedType)\n\t\t{\n\t\t\tpayload.appliedType = payload.initialType;\n\t\t}\n\n\t\tif (typeof state.mutationType[payload.chatId] === 'undefined')\n\t\t{\n\t\t\tVue.set(state.mutationType, payload.chatId, mutationType);\n\t\t}\n\n\t\tstate.mutationType[payload.chatId] = {...mutationType, ...payload};\n\n\t\treturn true;\n\t}\n\n\tprepareMessage(message, options = {})\n\t{\n\t\tlet result = this.validate(Object.assign({}, message), options);\n\n\t\tresult.params = Object.assign({}, this.getElementState().params, result.params);\n\t\tresult.templateId = result.id;\n\n\t\treturn Object.assign({}, this.getElementState(), result);\n\t}\n\n\tmanageCacheBeforeSet(cache, elements, recursive = false)\n\t{\n\t\tlet result = {\n\t\t\ttype: IntersectionType.empty,\n\t\t\tfoundElements: [],\n\t\t\tnoneElements: []\n\t\t};\n\n\t\tif (!cache || cache.length <= 0)\n\t\t{\n\t\t\treturn result;\n\t\t}\n\n\t\tfor (let id of elements)\n\t\t{\n\t\t\tif (cache.includes(id))\n\t\t\t{\n\t\t\t\tif (result.type === IntersectionType.empty)\n\t\t\t\t{\n\t\t\t\t\tresult.type = IntersectionType.found;\n\t\t\t\t}\n\t\t\t\tresult.foundElements.push(id);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (result.type === IntersectionType.empty)\n\t\t\t\t{\n\t\t\t\t\tresult.type = IntersectionType.none;\n\t\t\t\t}\n\t\t\t\tresult.noneElements.push(id);\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\tresult.type === IntersectionType.found\n\t\t\t&& cache.length === elements.length\n\t\t\t&& result.foundElements.length === elements.length\n\t\t)\n\t\t{\n\t\t\tresult.type = IntersectionType.equal;\n\t\t}\n\t\telse if (\n\t\t\tresult.type === IntersectionType.none\n\t\t\t&& !recursive\n\t\t\t&& result.foundElements.length > 0\n\t\t)\n\t\t{\n\t\t\tlet reverseResult = this.manageCacheBeforeSet(cache.reverse(), elements.reverse(), true);\n\t\t\tif (reverseResult.type === IntersectionType.found)\n\t\t\t{\n\t\t\t\treverseResult.type = IntersectionType.foundReverse;\n\t\t\t\treturn reverseResult;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tupdateSaveLists(state, chatId)\n\t{\n\t\tif (!this.isSaveAvailable())\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tif (\n\t\t\t!chatId\n\t\t\t|| !this.store.getters['dialogues/canSaveChat']\n\t\t\t|| !this.store.getters['dialogues/canSaveChat'](chatId)\n\t\t)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.initCollection(state, {chatId: chatId});\n\n\t\tlet count = 0;\n\t\tlet saveMessageList = [];\n\t\tlet saveFileList = [];\n\t\tlet saveUserList = [];\n\n\t\tlet dialog = this.store.getters['dialogues/getByChatId'](chatId);\n\t\tif (dialog && dialog.type === 'private')\n\t\t{\n\t\t\tsaveUserList.push(parseInt(dialog.dialogId));\n\t\t}\n\n\t\tfor (let index = state.collection[chatId].length-1; index >= 0; index--)\n\t\t{\n\t\t\tif (state.collection[chatId][index].id.toString().startsWith('temporary'))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (count >= StorageLimit.messages && !state.collection[chatId][index].unread)\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tsaveMessageList.unshift(state.collection[chatId][index].id);\n\n\t\t\tcount++;\n\t\t}\n\n\t\tsaveMessageList = saveMessageList.slice(0, StorageLimit.messages);\n\n\t\tstate.collection[chatId].filter(element => saveMessageList.includes(element.id)).forEach(element =>\n\t\t{\n\t\t\tif (element.authorId > 0)\n\t\t\t{\n\t\t\t\tsaveUserList.push(element.authorId);\n\t\t\t}\n\n\t\t\tif (element.params.FILE_ID instanceof Array)\n\t\t\t{\n\t\t\t\tsaveFileList = element.params.FILE_ID.concat(saveFileList);\n\t\t\t}\n\t\t});\n\n\t\tstate.saveMessageList[chatId] = saveMessageList;\n\t\tstate.saveFileList[chatId] = [...new Set(saveFileList)];\n\t\tstate.saveUserList[chatId] = [...new Set(saveUserList)];\n\n\t\treturn true;\n\t}\n\n\tgetSaveTimeout()\n\t{\n\t\treturn 150;\n\t}\n\n\tsaveState(state, chatId)\n\t{\n\t\tif (!this.updateSaveLists(state, chatId))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tsuper.saveState(() =>\n\t\t{\n\t\t\tlet storedState = {\n\t\t\t\tcollection: {},\n\t\t\t\tsaveMessageList: {},\n\t\t\t\tsaveUserList: {},\n\t\t\t\tsaveFileList: {},\n\t\t\t};\n\n\t\t\tfor (let chatId in state.saveMessageList)\n\t\t\t{\n\t\t\t\tif (!state.saveMessageList.hasOwnProperty(chatId))\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (!state.collection[chatId])\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (!storedState.collection[chatId])\n\t\t\t\t{\n\t\t\t\t\tstoredState.collection[chatId] = [];\n\t\t\t\t}\n\n\t\t\t\tstate.collection[chatId]\n\t\t\t\t\t.filter(element => state.saveMessageList[chatId].includes(element.id))\n\t\t\t\t\t.forEach(element => storedState.collection[chatId].push(element))\n\t\t\t\t;\n\n\t\t\t\tstoredState.saveMessageList[chatId] = state.saveMessageList[chatId];\n\t\t\t\tstoredState.saveFileList[chatId] = state.saveFileList[chatId];\n\t\t\t\tstoredState.saveUserList[chatId] = state.saveUserList[chatId];\n\t\t\t}\n\n\t\t\treturn storedState;\n\t\t});\n\t}\n\n\tupdateSubordinateStates()\n\t{\n\t\tthis.store.dispatch('users/saveState');\n\t\tthis.store.dispatch('files/saveState');\n\t}\n\n\tvalidate(fields, options)\n\t{\n\t\tconst result = {};\n\n\t\tif (typeof fields.id === \"number\")\n\t\t{\n\t\t\tresult.id = fields.id;\n\t\t}\n\t\telse if (typeof fields.id === \"string\")\n\t\t{\n\t\t\tif (fields.id.startsWith('temporary'))\n\t\t\t{\n\t\t\t\tresult.id = fields.id;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tresult.id = parseInt(fields.id);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.templateId === \"number\")\n\t\t{\n\t\t\tresult.templateId = fields.templateId;\n\t\t}\n\t\telse if (typeof fields.templateId === \"string\")\n\t\t{\n\t\t\tif (fields.templateId.startsWith('temporary'))\n\t\t\t{\n\t\t\t\tresult.templateId = fields.templateId;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tresult.templateId = parseInt(fields.templateId);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.chat_id !== 'undefined')\n\t\t{\n\t\t\tfields.chatId = fields.chat_id;\n\t\t}\n\t\tif (typeof fields.chatId === \"number\" || typeof fields.chatId === \"string\")\n\t\t{\n\t\t\tresult.chatId = parseInt(fields.chatId);\n\t\t}\n\t\tif (typeof fields.date !== \"undefined\")\n\t\t{\n\t\t\tresult.date = Utils.date.cast(fields.date);\n\t\t}\n\n\t\t// previous P&P format\n\t\tif (typeof fields.textOriginal === \"string\" || typeof fields.textOriginal === \"number\")\n\t\t{\n\t\t\tresult.text = fields.textOriginal.toString();\n\n\t\t\tif (typeof fields.text === \"string\" || typeof fields.text === \"number\")\n\t\t\t{\n\t\t\t\tresult.textConverted = this.convertToHtml({\n\t\t\t\t\ttext: fields.text.toString(),\n\t\t\t\t\tisConverted: true\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse // modern format\n\t\t{\n\t\t\tif (typeof fields.text_converted !== 'undefined')\n\t\t\t{\n\t\t\t\tfields.textConverted = fields.text_converted;\n\t\t\t}\n\t\t\tif (typeof fields.textConverted === \"string\" || typeof fields.textConverted === \"number\")\n\t\t\t{\n\t\t\t\tresult.textConverted = fields.textConverted.toString();\n\t\t\t}\n\t\t\tif (typeof fields.text === \"string\" || typeof fields.text === \"number\")\n\t\t\t{\n\t\t\t\tresult.text = fields.text.toString();\n\n\t\t\t\tlet isConverted = typeof result.textConverted !== 'undefined';\n\n\t\t\t\tresult.textConverted = this.convertToHtml({\n\t\t\t\t\ttext: isConverted? result.textConverted: result.text,\n\t\t\t\t\tisConverted\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.senderId !== 'undefined')\n\t\t{\n\t\t\tfields.authorId = fields.senderId;\n\t\t}\n\t\telse if (typeof fields.author_id !== 'undefined')\n\t\t{\n\t\t\tfields.authorId = fields.author_id;\n\t\t}\n\t\tif (typeof fields.authorId === \"number\" || typeof fields.authorId === \"string\")\n\t\t{\n\t\t\tif (fields.system === true || fields.system === 'Y')\n\t\t\t{\n\t\t\t\tresult.authorId = 0;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tresult.authorId = parseInt(fields.authorId);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.params === \"object\" && fields.params !== null)\n\t\t{\n\t\t\tconst params = this.validateParams(fields.params, options);\n\t\t\tif (params)\n\t\t\t{\n\t\t\t\tresult.params = params;\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.push === \"boolean\")\n\t\t{\n\t\t\tresult.push = fields.push;\n\t\t}\n\n\t\tif (typeof fields.sending === \"boolean\")\n\t\t{\n\t\t\tresult.sending = fields.sending;\n\t\t}\n\n\t\tif (typeof fields.unread === \"boolean\")\n\t\t{\n\t\t\tresult.unread = fields.unread;\n\t\t}\n\n\t\tif (typeof fields.blink === \"boolean\")\n\t\t{\n\t\t\tresult.blink = fields.blink;\n\t\t}\n\n\t\tif (typeof fields.error === \"boolean\" || typeof fields.error === \"string\")\n\t\t{\n\t\t\tresult.error = fields.error;\n\t\t}\n\n\t\tif (typeof fields.retry === \"boolean\")\n\t\t{\n\t\t\tresult.retry = fields.retry;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tvalidateParams(params, options)\n\t{\n\t\tconst result = {};\n\t\ttry\n\t\t{\n\t\t\tfor (let field in params)\n\t\t\t{\n\t\t\t\tif (!params.hasOwnProperty(field))\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (field === 'COMPONENT_ID')\n\t\t\t\t{\n\t\t\t\t\tif (typeof params[field] === \"string\" && BX.Vue.isComponent(params[field]))\n\t\t\t\t\t{\n\t\t\t\t\t\tresult[field] = params[field];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (field === 'LIKE')\n\t\t\t\t{\n\t\t\t\t\tif (params[field] instanceof Array)\n\t\t\t\t\t{\n\t\t\t\t\t\tresult['REACTION'] = {like: params[field].map(element => parseInt(element))};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (field === 'CHAT_LAST_DATE')\n\t\t\t\t{\n\t\t\t\t\tresult[field] = Utils.date.cast(params[field]);\n\t\t\t\t}\n\t\t\t\telse if (field === 'AVATAR')\n\t\t\t\t{\n\t\t\t\t\tif (params[field])\n\t\t\t\t\t{\n\t\t\t\t\t\tresult[field] = params[field].startsWith('http') ? params[field] : options.host + params[field];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (field === 'NAME')\n\t\t\t\t{\n\t\t\t\t\tif (params[field])\n\t\t\t\t\t{\n\t\t\t\t\t\tresult[field] = params[field];\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\tresult[field] = params[field];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcatch (e) {}\n\n\t\tlet hasResultElements = false;\n\t\tfor (let field in result)\n\t\t{\n\t\t\tif (!result.hasOwnProperty(field))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\thasResultElements = true;\n\t\t\tbreak\n\t\t}\n\n\t\treturn hasResultElements? result: null;\n\t}\n\n\tconvertToHtml(params = {})\n\t{\n\t\tlet {\n\t\t\tquote = true,\n\t\t\timage = true,\n\t\t\ttext = '',\n\t\t\thighlightText = '',\n\t\t\tisConverted = false,\n\t\t\tenableBigSmile = true\n\t\t} = params;\n\n\t\ttext = text.trim();\n\n\t\tif (!isConverted)\n\t\t{\n\t\t\ttext = text.replace(/&/g, '&').replace(/\"/g, '"').replace(/</g, '<').replace(/>/g, '>');\n\t\t}\n\n\t\tif (text.startsWith('/me'))\n\t\t{\n\t\t\ttext = `<i>${text.substr(4)}</i>`;\n\t\t}\n\t\telse if (text.startsWith('/loud'))\n\t\t{\n\t\t\ttext = `<b>${text.substr(6)}</b>`;\n\t\t}\n\n\t\tconst quoteSign = \">>\";\n\t\tif (quote && text.indexOf(quoteSign) >= 0)\n\t\t{\n\t\t\tlet textPrepareFlag = false;\n\t\t\tlet textPrepare = text.split(isConverted? \"<br />\": \"\\n\");\n\t\t\tfor (let i = 0; i < textPrepare.length; i++)\n\t\t\t{\n\t\t\t\tif (textPrepare[i].startsWith(quoteSign))\n\t\t\t\t{\n\t\t\t\t\ttextPrepare[i] = textPrepare[i].replace(quoteSign, '<div class=\"bx-im-message-content-quote\"><div class=\"bx-im-message-content-quote-wrap\">');\n\t\t\t\t\twhile (++i < textPrepare.length && textPrepare[i].startsWith(quoteSign))\n\t\t\t\t\t{\n\t\t\t\t\t\ttextPrepare[i] = textPrepare[i].replace(quoteSign, '');\n\t\t\t\t\t}\n\t\t\t\t\ttextPrepare[i - 1] += '</div></div><br>';\n\t\t\t\t\ttextPrepareFlag = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttext = textPrepare.join(\"<br />\");\n\t\t}\n\n\t\ttext = text.replace(/\\n/gi, '<br />');\n\n\t\ttext = text.replace(/\\t/gi, ' ');\n\n\t\ttext = this.decodeBbCode(text, false, enableBigSmile);\n\n\t\tif (quote)\n\t\t{\n\t\t\ttext = text.replace(/------------------------------------------------------<br \\/>(.*?)\\[(.*?)\\]<br \\/>(.*?)------------------------------------------------------(<br \\/>)?/g, function (whole, p1, p2, p3, p4, offset) {\n\t\t\t\treturn (offset > 0? '<br>': '') + \"<div class=\\\"bx-im-message-content-quote\\\"><div class=\\\"bx-im-message-content-quote-wrap\\\"><div class=\\\"bx-im-message-content-quote-name\\\"><span class=\\\"bx-im-message-content-quote-name-text\\\">\" + p1 + \"</span><span class=\\\"bx-im-message-content-quote-name-time\\\">\" + p2 + \"</span></div>\" + p3 + \"</div></div><br />\";\n\t\t\t});\n\t\t\ttext = text.replace(/------------------------------------------------------<br \\/>(.*?)------------------------------------------------------(<br \\/>)?/g, function (whole, p1, p2, p3, offset) {\n\t\t\t\treturn (offset > 0? '<br>': '') + \"<div class=\\\"bx-im-message-content-quote\\\"><div class=\\\"bx-im-message-content-quote-wrap\\\">\" + p1 + \"</div></div><br />\";\n\t\t\t});\n\t\t}\n\n\t\tif (image)\n\t\t{\n\t\t\tlet changed = false;\n\t\t\ttext = text.replace(/<a(.*?)>(http[s]{0,1}:\\/\\/.*?)<\\/a>/ig, function(whole, aInner, text, offset)\n\t\t\t{\n\t\t\t\tif(!text.match(/(\\.(jpg|jpeg|png|gif)\\?|\\.(jpg|jpeg|png|gif)$)/i) || text.indexOf(\"/docs/pub/\") > 0 || text.indexOf(\"logout=yes\") > 0)\n\t\t\t\t{\n\t\t\t\t\treturn whole;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tchanged = true;\n\t\t\t\t\treturn (offset > 0? '<br />':'')+'<a' +aInner+ ' target=\"_blank\" class=\"bx-im-element-file-image\"><img src=\"'+text+'\" class=\"bx-im-element-file-image-source-text\" onerror=\"BX.Messenger.Model.MessagesModel.hideErrorImage(this)\"></a></span>';\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (changed)\n\t\t\t{\n\t\t\t\ttext = text.replace(/<\\/span>(\\n?)<br(\\s\\/?)>/ig, '</span>').replace(/<br(\\s\\/?)>(\\n?)<br(\\s\\/?)>(\\n?)<span/ig, '<br /><span');\n\t\t\t}\n\t\t}\n\n\t\tif (highlightText)\n\t\t{\n\t\t\ttext = text.replace(new RegExp(\"(\" + highlightText.replace(/[\\-\\[\\]\\/{}()*+?.\\\\^$|]/g, \"\\\\$&\") + \")\", 'ig'), '<span class=\"bx-messenger-highlight\">$1</span>');\n\t\t}\n\n\t\tif (enableBigSmile)\n\t\t{\n\t\t\ttext = text.replace(\n\t\t\t\t/^(\\s*<img\\s+src=[^>]+?data-code=[^>]+?data-definition=\"UHD\"[^>]+?style=\"width:)(\\d+)(px[^>]+?height:)(\\d+)(px[^>]+?class=\"bx-smile\"\\s*\\/?>\\s*)$/,\n\t\t\t\tfunction doubleSmileSize(match, start, width, middle, height, end) {\n\t\t\t\t\treturn start + (parseInt(width, 10) * 1.7) + middle + (parseInt(height, 10) * 1.7) + end;\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tif (text.substr(-6) == '<br />')\n\t\t{\n\t\t\ttext = text.substr(0, text.length - 6);\n\t\t}\n\t\ttext = text.replace(/<br><br \\/>/ig, '<br />');\n\t\ttext = text.replace(/<br \\/><br>/ig, '<br />');\n\n\t\treturn text;\n\t};\n\n\tdecodeBbCode(text, textOnly = false, enableBigSmile = true)\n\t{\n\t\treturn MessagesModel.decodeBbCode({text, textOnly, enableBigSmile})\n\t}\n\n\tstatic decodeBbCode(params = {})\n\t{\n\t\tlet {text, textOnly = false, enableBigSmile = true} = params;\n\n\t\tlet codeReplacement = [];\n\n\t\ttext = text.replace(/\\[CODE\\]\\n?(.*?)\\[\\/CODE\\]/sig, function(whole, text)\n\t\t{\n\t\t\tlet id = codeReplacement.length;\n\t\t\tcodeReplacement.push(text);\n\t\t\treturn '####REPLACEMENT_MARK_'+id+'####';\n\t\t});\n\n\t\ttext = text.replace(/\\[LIKE\\]/ig, '<span class=\"bx-smile bx-im-smile-like\"></span>');\n\t\ttext = text.replace(/\\[DISLIKE\\]/ig, '<span class=\"bx-smile bx-im-smile-dislike\"></span>');\n\n\t\ttext = text.replace(/\\[USER=([0-9]{1,})\\](.*?)\\[\\/USER\\]/ig, (whole, userId, text) => '<span class=\"bx-im-mention\" data-type=\"USER\" data-value=\"'+userId+'\">'+text+'</span>');\n\n\t\ttext = text.replace(/\\[CHAT=(imol\\|)?([0-9]{1,})\\](.*?)\\[\\/CHAT\\]/ig, (whole, openlines, chatId, text) => openlines? text: '<span class=\"bx-im-mention\" data-type=\"CHAT\" data-value=\"chat'+chatId+'\">'+text+'</span>'); // TODO tag CHAT\n\n\t\tif (false && Utils.device.isMobile())\n\t\t{\n\t\t\tlet replacements = [];\n\t\t\ttext = text.replace(/\\[CALL(?:=(.+?))?\\](.+?)?\\[\\/CALL\\]/ig, (whole, number, text) => {\n\t\t\t\tlet index = replacements.length;\n\t\t\t\treplacements.push({number, text});\n\t\t\t\treturn `####REPLACEMENT_MARK_${index}####`;\n\t\t\t});\n\n\t\t\ttext = text.replace(/[+]{0,1}(?:[-\\/. ()\\[\\]~;#,]*[0-9]){10,}[^\\n\\r<][-\\/. ()\\[\\]~;#,0-9^]*/g, (number) => {\n\t\t\t\tlet pureNumber = number.replace(/\\D/g, '');\n\t\t\t\treturn `[CALL=${pureNumber}]${number}[/CALL]`;\n\t\t\t});\n\n\t\t\treplacements.forEach((item, index) => {\n\t\t\t\ttext = text.replace(`####REPLACEMENT_MARK_${index}####`, `[CALL=${item.number}]${item.text}[/CALL]`)\n\t\t\t});\n\t\t}\n\n\t\ttext = text.replace(/\\[CALL(?:=(.+?))?\\](.+?)?\\[\\/CALL\\]/ig, (whole, number, text) => '<span class=\"bx-im-mention\" data-type=\"CALL\" data-value=\"'+Utils.text.htmlspecialchars(number)+'\">'+text+'</span>'); // TODO tag CHAT\n\n\n\t\ttext = text.replace(/\\[PCH=([0-9]{1,})\\](.*?)\\[\\/PCH\\]/ig, (whole, historyId, text) => text); // TODO tag PCH\n\n\t\ttext = text.replace(/\\[SEND(?:=(.+?))?\\](.+?)?\\[\\/SEND\\]/ig, (whole, command, text) =>\n\t\t{\n\t\t\tlet html = '';\n\n\t\t\ttext = text? text: command;\n\t\t\tcommand = (command? command: text).replace('<br />', '\\n');\n\n\t\t\tif (!textOnly && text)\n\t\t\t{\n\t\t\t\ttext = text.replace(/<([\\w]+)[^>]*>(.*?)<\\\\1>/i, \"$2\", text);\n\t\t\t\ttext = text.replace(/\\[([\\w]+)[^\\]]*\\](.*?)\\[\\/\\1\\]/i, \"$2\", text);\n\n\t\t\t\thtml = '<span class=\"bx-im-message-command-wrap\">'+\n\t\t\t\t\t'<span class=\"bx-im-message-command\" data-entity=\"send\">'+text+'</span>'+\n\t\t\t\t\t'<span class=\"bx-im-message-command-data\">'+command+'</span>'+\n\t\t\t\t'</span>';\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\thtml = text;\n\t\t\t}\n\n\t\t\treturn html;\n\t\t});\n\n\t\ttext = text.replace(/\\[PUT(?:=(.+?))?\\](.+?)?\\[\\/PUT\\]/ig, (whole, command, text) =>\n\t\t{\n\t\t\tlet html = '';\n\n\t\t\ttext = text? text: command;\n\t\t\tcommand = (command? command: text).replace('<br />', '\\n');\n\n\t\t\tif (!textOnly && text)\n\t\t\t{\n\t\t\t\ttext = text.replace(/<([\\w]+)[^>]*>(.*?)<\\/\\1>/i, \"$2\", text);\n\t\t\t\ttext = text.replace(/\\[([\\w]+)[^\\]]*\\](.*?)\\[\\/\\1\\]/i, \"$2\", text);\n\n\t\t\t\thtml = '<span class=\"bx-im-message-command\" data-entity=\"put\">'+text+'</span>';\n\t\t\t\thtml += '<span class=\"bx-im-message-command-data\">'+command+'</span>';\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\thtml = text;\n\t\t\t}\n\n\t\t\treturn html;\n\t\t});\n\n\t\tlet textElementSize = 0;\n\t\tif (enableBigSmile)\n\t\t{\n\t\t\ttextElementSize = text.replace(/\\[icon\\=([^\\]]*)\\]/ig, '').trim().length;\n\t\t}\n\n\t\ttext = text.replace(/\\[icon\\=([^\\]]*)\\]/ig, (whole) =>\n\t\t{\n\t\t\tlet url = whole.match(/icon\\=(\\S+[^\\s.,> )\\];\\'\\\"!?])/i);\n\t\t\tif (url && url[1])\n\t\t\t{\n\t\t\t\turl = url[1];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tlet attrs = {'src': url, 'border': 0};\n\n\t\t\tlet size = whole.match(/size\\=(\\d+)/i);\n\t\t\tif (size && size[1])\n\t\t\t{\n\t\t\t\tattrs['width'] = size[1];\n\t\t\t\tattrs['height'] = size[1];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tlet width = whole.match(/width\\=(\\d+)/i);\n\t\t\t\tif (width && width[1])\n\t\t\t\t{\n\t\t\t\t\tattrs['width'] = width[1];\n\t\t\t\t}\n\n\t\t\t\tlet height = whole.match(/height\\=(\\d+)/i);\n\t\t\t\tif (height && height[1])\n\t\t\t\t{\n\t\t\t\t\tattrs['height'] = height[1];\n\t\t\t\t}\n\n\t\t\t\tif (attrs['width'] && !attrs['height'])\n\t\t\t\t{\n\t\t\t\t\tattrs['height'] = attrs['width'];\n\t\t\t\t}\n\t\t\t\telse if (attrs['height'] && !attrs['width'])\n\t\t\t\t{\n\t\t\t\t\tattrs['width'] = attrs['height'];\n\t\t\t\t}\n\t\t\t\telse if (attrs['height'] && attrs['width'])\n\t\t\t\t{}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tattrs['width'] = 20;\n\t\t\t\t\tattrs['height'] = 20;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tattrs['width'] = attrs['width']>100? 100: attrs['width'];\n\t\t\tattrs['height'] = attrs['height']>100? 100: attrs['height'];\n\n\t\t\tif (enableBigSmile && textElementSize === 0 && attrs['width'] === attrs['height'] && attrs['width'] === 20)\n\t\t\t{\n\t\t\t\tattrs['width'] = 40;\n\t\t\t\tattrs['height'] = 40;\n\t\t\t}\n\n\t\t\tlet title = whole.match(/title\\=(.*[^\\s\\]])/i);\n\t\t\tif (title && title[1])\n\t\t\t{\n\t\t\t\ttitle = title[1];\n\t\t\t\tif (title.indexOf('width=') > -1)\n\t\t\t\t{\n\t\t\t\t\ttitle = title.substr(0, title.indexOf('width='))\n\t\t\t\t}\n\t\t\t\tif (title.indexOf('height=') > -1)\n\t\t\t\t{\n\t\t\t\t\ttitle = title.substr(0, title.indexOf('height='))\n\t\t\t\t}\n\t\t\t\tif (title.indexOf('size=') > -1)\n\t\t\t\t{\n\t\t\t\t\ttitle = title.substr(0, title.indexOf('size='))\n\t\t\t\t}\n\t\t\t\tif (title)\n\t\t\t\t{\n\t\t\t\t\tattrs['title'] = Utils.text.htmlspecialchars(title).trim();\n\t\t\t\t\tattrs['alt'] = attrs['title'];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet attributes = '';\n\t\t\tfor (let name in attrs)\n\t\t\t{\n\t\t\t\tif (attrs.hasOwnProperty(name))\n\t\t\t\t{\n\t\t\t\t\tattributes += name+'=\"'+attrs[name]+'\" ';\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\treturn '<img class=\"bx-smile bx-icon\" '+attributes+'>';\n\t\t});\n\n\t\tcodeReplacement.forEach((code, index) => {\n\t\t\ttext = text.replace('####REPLACEMENT_MARK_'+index+'####',\n\t\t\t\t!textOnly? '<div class=\"bx-im-message-content-code\">'+code+'</div>': code\n\t\t\t)\n\t\t});\n\n\t\treturn text;\n\t}\n\n\tstatic hideErrorImage(element)\n\t{\n\t\tif (element.parentNode && element.parentNode)\n\t\t{\n\t\t\telement.parentNode.innerHTML = '<a href=\"'+element.src+'\" target=\"_blank\">'+element.src+'</a>';\n\t\t}\n\t\treturn true;\n\t};\n}\n\nexport {MessagesModel};","\n/**\n * Bitrix Messenger\n * Dialogues model (Vuex Builder model)\n *\n * @package bitrix\n * @subpackage im\n * @copyright 2001-2019 Bitrix\n */\n\nimport {Vue} from 'ui.vue';\nimport {VuexBuilderModel} from 'ui.vue.vuex';\nimport {StorageLimit} from \"im.const\";\nimport {Utils} from \"im.lib.utils\";\n\nclass DialoguesModel extends VuexBuilderModel\n{\n\tgetName()\n\t{\n\t\treturn 'dialogues';\n\t}\n\n\tgetState()\n\t{\n\t\treturn {\n\t\t\thost: this.getVariable('host', location.protocol+'//'+location.host),\n\t\t\tcollection: {},\n\t\t\tsaveDialogList: [],\n\t\t\tsaveChatList: [],\n\t\t}\n\t}\n\n\tgetStateSaveException()\n\t{\n\t\treturn {\n\t\t\thost: null\n\t\t}\n\t}\n\n\tgetElementStateSaveException()\n\t{\n\t\treturn {\n\t\t\twritingList: null,\n\t\t\tquoteId: null\n\t\t}\n\t}\n\n\tgetElementState()\n\t{\n\t\treturn {\n\t\t\tdialogId: '0',\n\t\t\tchatId: 0,\n\t\t\tcounter: 0,\n\t\t\tunreadId: 0,\n\t\t\tunreadLastId: 0,\n\t\t\tmanagerList: [],\n\t\t\treadedList: [],\n\t\t\twritingList: [],\n\t\t\ttextareaMessage: \"\",\n\t\t\tquoteId: 0,\n\t\t\teditId: 0,\n\t\t\tinit: false,\n\n\t\t\tname: \"\",\n\t\t\towner: 0,\n\t\t\textranet: false,\n\t\t\tavatar: \"\",\n\t\t\tcolor: \"#17A3EA\",\n\t\t\ttype: \"chat\",\n\t\t\tentityType: \"\",\n\t\t\tentityId: \"\",\n\t\t\tentityData1: \"\",\n\t\t\tentityData2: \"\",\n\t\t\tentityData3: \"\",\n\t\t\tdateCreate: new Date(),\n\t\t\trestrictions: {\n\t\t\t\tavatar: true,\n\t\t\t\textend: true,\n\t\t\t\tleave: true,\n\t\t\t\tleaveOwner: true,\n\t\t\t\trename: true\n\t\t\t}\n\t\t};\n\t}\n\n\tgetGetters()\n\t{\n\t\treturn {\n\t\t\tget: state => dialogId =>\n\t\t\t{\n\t\t\t\tif (!state.collection[dialogId])\n\t\t\t\t{\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn state.collection[dialogId];\n\t\t\t},\n\t\t\tgetByChatId: state => chatId =>\n\t\t\t{\n\t\t\t\tchatId = parseInt(chatId);\n\n\t\t\t\tfor (let dialogId in state.collection)\n\t\t\t\t{\n\t\t\t\t\tif (!state.collection.hasOwnProperty(dialogId))\n\t\t\t\t\t{\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (state.collection[dialogId].chatId === chatId)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn state.collection[dialogId];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tgetBlank: state => params =>\n\t\t\t{\n\t\t\t\treturn this.getElementState();\n\t\t\t},\n\t\t\tgetQuoteId: state => dialogId =>\n\t\t\t{\n\t\t\t\tif (!state.collection[dialogId])\n\t\t\t\t{\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn state.collection[dialogId].quoteId;\n\t\t\t},\n\t\t\tgetEditId: state => dialogId =>\n\t\t\t{\n\t\t\t\tif (!state.collection[dialogId])\n\t\t\t\t{\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn state.collection[dialogId].editId;\n\t\t\t},\n\t\t\tcanSaveChat: state => chatId =>\n\t\t\t{\n\t\t\t\tif (/^\\d+$/.test(chatId))\n\t\t\t\t{\n\t\t\t\t\tchatId = parseInt(chatId);\n\t\t\t\t}\n\t\t\t\treturn state.saveChatList.includes(parseInt(chatId));\n\t\t\t},\n\t\t\tcanSaveDialog: state => dialogId =>\n\t\t\t{\n\t\t\t\treturn state.saveDialogList.includes(dialogId.toString());\n\t\t\t},\n\t\t\tisPrivateDialog: state => dialogId =>\n\t\t\t{\n\t\t\t\tdialogId = dialogId.toString();\n\t\t\t\treturn state.collection[dialogId.toString()] && state.collection[dialogId].type === 'private';\n\t\t\t},\n\t\t}\n\t}\n\n\tgetActions()\n\t{\n\t\treturn {\n\t\t\tset: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (payload instanceof Array)\n\t\t\t\t{\n\t\t\t\t\tpayload = payload.map(dialog => {\n\t\t\t\t\t\treturn Object.assign(\n\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\tthis.validate(Object.assign({}, dialog), {host: store.state.host}),\n\t\t\t\t\t\t\t{init: true}\n\t\t\t\t\t\t);\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\tlet result = [];\n\t\t\t\t\tresult.push(Object.assign(\n\t\t\t\t\t\t{},\n\t\t\t\t\t\tthis.validate(Object.assign({}, payload), {host: store.state.host}),\n\t\t\t\t\t\t{init: true}\n\t\t\t\t\t));\n\t\t\t\t\tpayload = result;\n\t\t\t\t}\n\n\t\t\t\tstore.commit('set', payload);\n\t\t\t},\n\n\t\t\tupdate: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (\n\t\t\t\t\ttypeof store.state.collection[payload.dialogId] === 'undefined'\n\t\t\t\t\t|| store.state.collection[payload.dialogId].init === false\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tstore.commit('update', {\n\t\t\t\t\tdialogId : payload.dialogId,\n\t\t\t\t\tfields : this.validate(Object.assign({}, payload.fields), {host: store.state.host})\n\t\t\t\t});\n\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tdelete: (store, payload) =>\n\t\t\t{\n\t\t\t\tstore.commit('delete', payload.dialogId);\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tupdateWriting: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (\n\t\t\t\t\ttypeof store.state.collection[payload.dialogId] === 'undefined'\n\t\t\t\t\t|| store.state.collection[payload.dialogId].init === false\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tlet index = store.state.collection[payload.dialogId].writingList.findIndex(el => el.userId === payload.userId);\n\t\t\t\tif (payload.action)\n\t\t\t\t{\n\t\t\t\t\tif (index >= 0)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tlet writingList = [].concat(store.state.collection[payload.dialogId].writingList);\n\t\t\t\t\t\twritingList.unshift({\n\t\t\t\t\t\t\tuserId: payload.userId,\n\t\t\t\t\t\t\tuserName: payload.userName,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tstore.commit('update', {\n\t\t\t\t\t\t\tactionName: 'updateWriting/1',\n\t\t\t\t\t\t\tdialogId : payload.dialogId,\n\t\t\t\t\t\t\tfields : this.validate({writingList}, {host: store.state.host})\n\t\t\t\t\t\t});\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 (index >= 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet writingList = store.state.collection[payload.dialogId].writingList.filter(el => el.userId !== payload.userId);\n\t\t\t\t\t\tstore.commit('update', {\n\t\t\t\t\t\t\tactionName: 'updateWriting/2',\n\t\t\t\t\t\t\tdialogId : payload.dialogId,\n\t\t\t\t\t\t\tfields : this.validate({writingList}, {host: store.state.host})\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\tupdateReaded: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (\n\t\t\t\t\ttypeof store.state.collection[payload.dialogId] === 'undefined'\n\t\t\t\t\t|| store.state.collection[payload.dialogId].init === false\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tlet readedList = store.state.collection[payload.dialogId].readedList.filter(el => el.userId !== payload.userId);\n\n\t\t\t\tif (payload.action)\n\t\t\t\t{\n\t\t\t\t\treadedList.push({\n\t\t\t\t\t\tuserId: payload.userId,\n\t\t\t\t\t\tuserName: payload.userName || '',\n\t\t\t\t\t\tmessageId: payload.messageId,\n\t\t\t\t\t\tdate: payload.date || (new Date()),\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tstore.commit('update', {\n\t\t\t\t\tactionName: 'updateReaded',\n\t\t\t\t\tdialogId : payload.dialogId,\n\t\t\t\t\tfields : this.validate({readedList}, {host: store.state.host})\n\t\t\t\t});\n\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\tincreaseCounter: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (\n\t\t\t\t\ttypeof store.state.collection[payload.dialogId] === 'undefined'\n\t\t\t\t\t|| store.state.collection[payload.dialogId].init === false\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tlet counter = store.state.collection[payload.dialogId].counter;\n\t\t\t\tif (counter === 100)\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tlet increasedCounter = counter + payload.count;\n\t\t\t\tif (increasedCounter > 100)\n\t\t\t\t{\n\t\t\t\t\tincreasedCounter = 100;\n\t\t\t\t}\n\n\t\t\t\tlet fields = {\n\t\t\t\t\tcounter: increasedCounter\n\t\t\t\t};\n\n\t\t\t\tif (typeof payload.unreadLastId !== 'undefined')\n\t\t\t\t{\n\t\t\t\t\tfields.unreadLastId = payload.unreadLastId;\n\t\t\t\t}\n\n\t\t\t\tstore.commit('update', {\n\t\t\t\t\tactionName: 'increaseCounter',\n\t\t\t\t\tdialogId : payload.dialogId,\n\t\t\t\t\tfields\n\t\t\t\t});\n\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\tdecreaseCounter: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (\n\t\t\t\t\ttypeof store.state.collection[payload.dialogId] === 'undefined'\n\t\t\t\t\t|| store.state.collection[payload.dialogId].init === false\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tlet counter = store.state.collection[payload.dialogId].counter;\n\t\t\t\tif (counter === 100)\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tlet decreasedCounter = counter - payload.count;\n\t\t\t\tif (decreasedCounter < 0)\n\t\t\t\t{\n\t\t\t\t\tdecreasedCounter = 0;\n\t\t\t\t}\n\n\t\t\t\tlet unreadId = payload.unreadId > store.state.collection[payload.dialogId].unreadId? payload.unreadId: store.state.collection[payload.dialogId].unreadId;\n\n\t\t\t\tif (\n\t\t\t\t\tstore.state.collection[payload.dialogId].unreadId !== unreadId\n\t\t\t\t\t|| store.state.collection[payload.dialogId].counter !== decreasedCounter\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\tif (decreasedCounter === 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tunreadId = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tstore.commit('update', {\n\t\t\t\t\t\tactionName: 'decreaseCounter',\n\t\t\t\t\t\tdialogId : payload.dialogId,\n\t\t\t\t\t\tfields : {\n\t\t\t\t\t\t\tcounter: decreasedCounter,\n\t\t\t\t\t\t\tunreadId: unreadId\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\tsaveDialog: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (\n\t\t\t\t\ttypeof store.state.collection[payload.dialogId] === 'undefined'\n\t\t\t\t\t|| store.state.collection[payload.dialogId].init === false\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tstore.commit('saveDialog', {\n\t\t\t\t\tdialogId : payload.dialogId,\n\t\t\t\t\tchatId : payload.chatId\n\t\t\t\t});\n\n\t\t\t\treturn false;\n\t\t\t},\n\t\t};\n\t}\n\n\tgetMutations()\n\t{\n\t\treturn {\n\t\t\tinitCollection: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.initCollection(state, payload);\n\t\t\t},\n\t\t\tsaveDialog: (state, payload) =>\n\t\t\t{\n\t\t\t\t// TODO if payload.dialogId is IMOL, skip update this flag\n\t\t\t\tif (!(payload.chatId > 0 && payload.dialogId.length > 0))\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tlet saveDialogList = state.saveDialogList.filter(function(element) {\n\t\t\t\t\treturn element !== payload.dialogId;\n\t\t\t\t});\n\n\t\t\t\tsaveDialogList.unshift(payload.dialogId);\n\n\t\t\t\tsaveDialogList = saveDialogList.slice(0, StorageLimit.dialogues);\n\n\t\t\t\tif (state.saveDialogList.join(',') === saveDialogList.join(','))\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tstate.saveDialogList = saveDialogList;\n\n\n\t\t\t\tlet saveChatList = state.saveChatList.filter(function(element) {\n\t\t\t\t\treturn element !== payload.chatId;\n\t\t\t\t});\n\n\t\t\t\tsaveChatList.unshift(payload.chatId);\n\n\t\t\t\tstate.saveChatList = saveChatList.slice(0, StorageLimit.dialogues);\n\n\t\t\t\tthis.saveState(state);\n\t\t\t},\n\t\t\tset: (state, payload) =>\n\t\t\t{\n\t\t\t\tfor (let element of payload)\n\t\t\t\t{\n\t\t\t\t\tthis.initCollection(state, {dialogId: element.dialogId});\n\n\t\t\t\t\tstate.collection[element.dialogId] = Object.assign(\n\t\t\t\t\t\tthis.getElementState(),\n\t\t\t\t\t\tstate.collection[element.dialogId],\n\t\t\t\t\t\telement\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// TODO if payload.dialogId is IMOL, skip update cache\n\t\t\t\tthis.saveState(state);\n\t\t\t},\n\t\t\tupdate: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.initCollection(state, payload);\n\n\t\t\t\tstate.collection[payload.dialogId] = Object.assign(\n\t\t\t\t\tstate.collection[payload.dialogId],\n\t\t\t\t\tpayload.fields\n\t\t\t\t);\n\n\t\t\t\t// TODO if payload.dialogId is IMOL, skip update cache\n\t\t\t\tthis.saveState(state);\n\t\t\t},\n\t\t\tdelete: (state, payload) =>\n\t\t\t{\n\t\t\t\tdelete state.collection[payload.dialogId];\n\n\t\t\t\t// TODO if payload.dialogId is IMOL, skip update cache\n\t\t\t\tthis.saveState(state);\n\t\t\t}\n\t\t};\n\t}\n\n\tinitCollection(state, payload)\n\t{\n\t\tif (typeof state.collection[payload.dialogId] !== 'undefined')\n\t\t{\n\t\t\treturn true\n\t\t}\n\n\t\tVue.set(state.collection, payload.dialogId, this.getElementState());\n\n\t\tif (payload.fields)\n\t\t{\n\t\t\tstate.collection[payload.dialogId] = Object.assign(\n\t\t\t\tstate.collection[payload.dialogId],\n\t\t\t\tthis.validate(Object.assign({}, payload.fields), {host: state.host})\n\t\t\t);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tgetSaveTimeout()\n\t{\n\t\treturn 100;\n\t}\n\n\tsaveState(state = {})\n\t{\n\t\tif (!this.isSaveAvailable())\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tsuper.saveState(() =>\n\t\t{\n\t\t\tlet storedState = {\n\t\t\t\tcollection: {},\n\t\t\t\tsaveDialogList: [].concat(state.saveDialogList),\n\t\t\t\tsaveChatList: [].concat(state.saveChatList),\n\t\t\t};\n\n\t\t\tstate.saveDialogList.forEach(dialogId => {\n\t\t\t\tif (!state.collection[dialogId])\n\t\t\t\t\treturn false;\n\n\t\t\t\tstoredState.collection[dialogId] = Object.assign(\n\t\t\t\t\tthis.getElementState(),\n\t\t\t\t\tthis.cloneState(state.collection[dialogId], this.getElementStateSaveException())\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn storedState;\n\t\t});\n\t}\n\n\tvalidate(fields, options = {})\n\t{\n\t\tconst result = {};\n\n\t\toptions.host = options.host || this.getState().host;\n\n\t\tif (typeof fields.dialog_id !== 'undefined')\n\t\t{\n\t\t\tfields.dialogId = fields.dialog_id;\n\t\t}\n\t\tif (typeof fields.dialogId === \"number\" || typeof fields.dialogId === \"string\")\n\t\t{\n\t\t\tresult.dialogId = fields.dialogId.toString();\n\t\t}\n\n\t\tif (typeof fields.chat_id !== 'undefined')\n\t\t{\n\t\t\tfields.chatId = fields.chat_id;\n\t\t}\n\t\telse if (typeof fields.id !== 'undefined')\n\t\t{\n\t\t\tfields.chatId = fields.id;\n\t\t}\n\t\tif (typeof fields.chatId === \"number\" || typeof fields.chatId === \"string\")\n\t\t{\n\t\t\tresult.chatId = parseInt(fields.chatId);\n\t\t}\n\t\tif (typeof fields.quoteId === \"number\")\n\t\t{\n\t\t\tresult.quoteId = parseInt(fields.quoteId);\n\t\t}\n\t\tif (typeof fields.editId === \"number\")\n\t\t{\n\t\t\tresult.editId = parseInt(fields.editId);\n\t\t}\n\n\t\tif (typeof fields.counter === \"number\" || typeof fields.counter === \"string\")\n\t\t{\n\t\t\tresult.counter = parseInt(fields.counter);\n\t\t}\n\n\t\tif (typeof fields.unread_id !== 'undefined')\n\t\t{\n\t\t\tfields.unreadId = fields.unread_id;\n\t\t}\n\t\tif (typeof fields.unreadId === \"number\" || typeof fields.unreadId === \"string\")\n\t\t{\n\t\t\tresult.unreadId = parseInt(fields.unreadId);\n\t\t}\n\n\t\tif (typeof fields.unread_last_id !== 'undefined')\n\t\t{\n\t\t\tfields.unreadLastId = fields.unread_last_id;\n\t\t}\n\t\tif (typeof fields.unreadLastId === \"number\" || typeof fields.unreadLastId === \"string\")\n\t\t{\n\t\t\tresult.unreadLastId = parseInt(fields.unreadLastId);\n\t\t}\n\n\t\tif (typeof fields.readed_list !== 'undefined')\n\t\t{\n\t\t\tfields.readedList = fields.readed_list;\n\t\t}\n\t\tif (typeof fields.readedList !== 'undefined')\n\t\t{\n\t\t\tresult.readedList = [];\n\n\t\t\tif (fields.readedList instanceof Array)\n\t\t\t{\n\t\t\t\tfields.readedList.forEach(element =>\n\t\t\t\t{\n\t\t\t\t\tlet record = {};\n\t\t\t\t\tif (typeof element.user_id !== 'undefined')\n\t\t\t\t\t{\n\t\t\t\t\t\telement.userId = element.user_id;\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof element.user_name !== 'undefined')\n\t\t\t\t\t{\n\t\t\t\t\t\telement.userName = element.user_name;\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof element.message_id !== 'undefined')\n\t\t\t\t\t{\n\t\t\t\t\t\telement.messageId = element.message_id;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!element.userId || !element.userName || !element.messageId)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\trecord.userId = parseInt(element.userId);\n\t\t\t\t\trecord.userName = element.userName.toString();\n\t\t\t\t\trecord.messageId = parseInt(element.messageId);\n\n\t\t\t\t\trecord.date = Utils.date.cast(element.date);\n\n\t\t\t\t\tresult.readedList.push(record);\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.writing_list !== 'undefined')\n\t\t{\n\t\t\tfields.writingList = fields.writing_list;\n\t\t}\n\t\tif (typeof fields.writingList !== 'undefined')\n\t\t{\n\t\t\tresult.writingList = [];\n\n\t\t\tif (fields.writingList instanceof Array)\n\t\t\t{\n\t\t\t\tfields.writingList.forEach(element =>\n\t\t\t\t{\n\t\t\t\t\tlet record = {};\n\n\t\t\t\t\tif (!element.userId)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\trecord.userId = parseInt(element.userId);\n\t\t\t\t\trecord.userName = element.userName;\n\n\t\t\t\t\tresult.writingList.push(record);\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.manager_list !== 'undefined')\n\t\t{\n\t\t\tfields.managerList = fields.manager_list;\n\t\t}\n\t\tif (typeof fields.managerList !== 'undefined')\n\t\t{\n\t\t\tresult.managerList = [];\n\n\t\t\tif (fields.managerList instanceof Array)\n\t\t\t{\n\t\t\t\tfields.managerList.forEach(userId =>\n\t\t\t\t{\n\t\t\t\t\tuserId = parseInt(userId);\n\t\t\t\t\tif (userId > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tresult.managerList.push(userId);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.mute_list !== 'undefined')\n\t\t{\n\t\t\tfields.muteList = fields.mute_list;\n\t\t}\n\t\tif (typeof fields.muteList !== 'undefined')\n\t\t{\n\t\t\tresult.muteList = [];\n\n\t\t\tif (fields.muteList instanceof Array)\n\t\t\t{\n\t\t\t\tfields.muteList.forEach(userId =>\n\t\t\t\t{\n\t\t\t\t\tuserId = parseInt(userId);\n\t\t\t\t\tif (userId > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tresult.muteList.push(userId);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.textareaMessage !== 'undefined')\n\t\t{\n\t\t\tresult.textareaMessage = fields.textareaMessage.toString();\n\t\t}\n\n\t\tif (typeof fields.title !== 'undefined')\n\t\t{\n\t\t\tfields.name = fields.title;\n\t\t}\n\t\tif (typeof fields.name === \"string\" || typeof fields.name === \"number\")\n\t\t{\n\t\t\tresult.name = fields.name.toString();\n\t\t}\n\n\t\tif (typeof fields.owner !== 'undefined')\n\t\t{\n\t\t\tfields.ownerId = fields.owner;\n\t\t}\n\t\tif (typeof fields.ownerId === \"number\" || typeof fields.ownerId === \"string\")\n\t\t{\n\t\t\tresult.ownerId = parseInt(fields.ownerId);\n\t\t}\n\n\t\tif (typeof fields.extranet === \"boolean\")\n\t\t{\n\t\t\tresult.extranet = fields.extranet;\n\t\t}\n\n\t\tif (typeof fields.avatar === 'string')\n\t\t{\n\t\t\tlet avatar;\n\n\t\t\tif (!fields.avatar || fields.avatar.endsWith('/js/im/images/blank.gif'))\n\t\t\t{\n\t\t\t\tavatar = '';\n\t\t\t}\n\t\t\telse if (fields.avatar.startsWith('http'))\n\t\t\t{\n\t\t\t\tavatar = fields.avatar;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tavatar = options.host + fields.avatar;\n\t\t\t}\n\n\t\t\tif (avatar)\n\t\t\t{\n\t\t\t\tresult.avatar = encodeURI(avatar);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.color === \"string\")\n\t\t{\n\t\t\tresult.color = fields.color.toString();\n\t\t}\n\n\t\tif (typeof fields.type === \"string\")\n\t\t{\n\t\t\tresult.type = fields.type.toString();\n\t\t}\n\n\t\tif (typeof fields.entity_type !== 'undefined')\n\t\t{\n\t\t\tfields.entityType = fields.entity_type;\n\t\t}\n\t\tif (typeof fields.entityType === \"string\")\n\t\t{\n\t\t\tresult.entityType = fields.entityType.toString();\n\t\t}\n\t\tif (typeof fields.entity_id !== 'undefined')\n\t\t{\n\t\t\tfields.entityId = fields.entity_id;\n\t\t}\n\t\tif (typeof fields.entityId === \"string\" || typeof fields.entityId === \"number\")\n\t\t{\n\t\t\tresult.entityId = fields.entityId.toString();\n\t\t}\n\n\t\tif (typeof fields.entity_data_1 !== 'undefined')\n\t\t{\n\t\t\tfields.entityData1 = fields.entity_data_1;\n\t\t}\n\t\tif (typeof fields.entityData1 === \"string\")\n\t\t{\n\t\t\tresult.entityData1 = fields.entityData1.toString();\n\t\t}\n\n\t\tif (typeof fields.entity_data_2 !== 'undefined')\n\t\t{\n\t\t\tfields.entityData2 = fields.entity_data_2;\n\t\t}\n\t\tif (typeof fields.entityData2 === \"string\")\n\t\t{\n\t\t\tresult.entityData2 = fields.entityData2.toString();\n\t\t}\n\n\t\tif (typeof fields.entity_data_3 !== 'undefined')\n\t\t{\n\t\t\tfields.entityData3 = fields.entity_data_3;\n\t\t}\n\t\tif (typeof fields.entityData3 === \"string\")\n\t\t{\n\t\t\tresult.entityData3 = fields.entityData3.toString();\n\t\t}\n\n\t\tif (typeof fields.date_create !== 'undefined')\n\t\t{\n\t\t\tfields.dateCreate = fields.date_create;\n\t\t}\n\n\t\tif (typeof fields.dateCreate !== \"undefined\")\n\t\t{\n\t\t\tresult.dateCreate = Utils.date.cast(fields.dateCreate);\n\t\t}\n\n\t\tif (typeof fields.dateLastOpen !== \"undefined\")\n\t\t{\n\t\t\tresult.dateLastOpen = Utils.date.cast(fields.dateLastOpen);\n\t\t}\n\n\t\tif (typeof fields.restrictions === 'object' && fields.restrictions)\n\t\t{\n\t\t\tresult.restrictions = {};\n\n\t\t\tif (typeof fields.restrictions.AVATAR === 'boolean')\n\t\t\t{\n\t\t\t\tresult.restrictions.avatar = fields.restrictions.AVATAR;\n\t\t\t}\n\n\t\t\tif (typeof fields.restrictions.EXTEND === 'boolean')\n\t\t\t{\n\t\t\t\tresult.restrictions.extend = fields.restrictions.EXTEND;\n\t\t\t}\n\n\t\t\tif (typeof fields.restrictions.LEAVE === 'boolean')\n\t\t\t{\n\t\t\t\tresult.restrictions.leave = fields.restrictions.LEAVE;\n\t\t\t}\n\n\t\t\tif (typeof fields.restrictions.LEAVE_OWNER === 'boolean')\n\t\t\t{\n\t\t\t\tresult.restrictions.leaveOwner = fields.restrictions.LEAVE_OWNER;\n\t\t\t}\n\n\t\t\tif (typeof fields.restrictions.RENAME === 'boolean')\n\t\t\t{\n\t\t\t\tresult.restrictions.rename = fields.restrictions.RENAME;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n}\n\nexport {DialoguesModel};","/**\n * Bitrix Messenger\n * User model (Vuex Builder model)\n *\n * @package bitrix\n * @subpackage im\n * @copyright 2001-2019 Bitrix\n */\n\nimport {Vue} from 'ui.vue';\nimport {VuexBuilderModel} from 'ui.vue.vuex';\nimport {Utils} from \"im.lib.utils\";\n\nclass UsersModel extends VuexBuilderModel\n{\n\tgetName()\n\t{\n\t\treturn 'users';\n\t}\n\n\tgetState()\n\t{\n\t\tthis.startOnlineCheckInterval();\n\n\t\treturn {\n\t\t\thost: this.getVariable('host', location.protocol+'//'+location.host),\n\t\t\tcollection: {},\n\t\t\tonlineList: [],\n\t\t\tmobileOnlineList: [],\n\t\t\tabsentList: []\n\t\t}\n\t}\n\n\tgetElementState(params = {})\n\t{\n\t\tlet {\n\t\t\tid = 0,\n\t\t\tname = this.getVariable('default.name', ''),\n\t\t\tfirstName = this.getVariable('default.name', ''),\n\t\t\tlastName = '',\n\t\t} = params;\n\n\t\treturn {\n\t\t\tid,\n\t\t\tname,\n\t\t\tfirstName,\n\t\t\tlastName,\n\t\t\tworkPosition: \"\",\n\t\t\tcolor: \"#048bd0\",\n\t\t\tavatar: \"\",\n\t\t\tgender: \"M\",\n\t\t\tbirthday: false,\n\t\t\tisBirthday: false,\n\t\t\textranet: false,\n\t\t\tnetwork: false,\n\t\t\tbot: false,\n\t\t\tconnector: false,\n\t\t\texternalAuthId: \"default\",\n\t\t\tstatus: \"online\",\n\t\t\tidle: false,\n\t\t\tlastActivityDate: false,\n\t\t\tmobileLastDate: false,\n\t\t\tisOnline: false,\n\t\t\tisMobileOnline: false,\n\t\t\tabsent: false,\n\t\t\tisAbsent: false,\n\t\t\tdepartments: [],\n\t\t\tphones: {\n\t\t\t\tworkPhone: \"\",\n\t\t\t\tpersonalMobile: \"\",\n\t\t\t\tpersonalPhone: \"\",\n\t\t\t\tinnerPhone: \"\",\n\t\t\t},\n\t\t\tinit: false\n\t\t};\n\t}\n\n\tgetGetters()\n\t{\n\t\treturn {\n\t\t\tget: state => (userId, getTemporary = false) =>\n\t\t\t{\n\t\t\t\tuserId = parseInt(userId);\n\n\t\t\t\tif (userId <= 0)\n\t\t\t\t{\n\t\t\t\t\tif (getTemporary)\n\t\t\t\t\t{\n\t\t\t\t\t\tuserId = 0;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\t!getTemporary\n\t\t\t\t\t&& (!state.collection[userId] || !state.collection[userId].init)\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (!state.collection[userId])\n\t\t\t\t{\n\t\t\t\t\treturn this.getElementState({id: userId});\n\t\t\t\t}\n\n\t\t\t\treturn state.collection[userId];\n\t\t\t},\n\t\t\tgetBlank: state => params =>\n\t\t\t{\n\t\t\t\treturn this.getElementState(params);\n\t\t\t}\n\t\t}\n\t}\n\n\tgetActions()\n\t{\n\t\treturn {\n\t\t\tset: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (payload instanceof Array)\n\t\t\t\t{\n\t\t\t\t\tpayload = payload.map(user => {\n\t\t\t\t\t\treturn Object.assign(\n\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\tthis.getElementState(),\n\t\t\t\t\t\t\tthis.validate(Object.assign({}, user), {host: store.state.host}),\n\t\t\t\t\t\t\t{init: true}\n\t\t\t\t\t\t);\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\tlet result = [];\n\t\t\t\t\tresult.push(Object.assign(\n\t\t\t\t\t\t{},\n\t\t\t\t\t\tthis.getElementState(),\n\t\t\t\t\t\tthis.validate(Object.assign({}, payload), {host: store.state.host}),\n\t\t\t\t\t\t{init: true}\n\t\t\t\t\t));\n\t\t\t\t\tpayload = result;\n\t\t\t\t}\n\n\t\t\t\tstore.commit('set', payload);\n\t\t\t},\n\t\t\tupdate: (store, payload) =>\n\t\t\t{\n\t\t\t\tpayload.id = parseInt(payload.id);\n\n\t\t\t\tif (\n\t\t\t\t\ttypeof store.state.collection[payload.id] === 'undefined'\n\t\t\t\t\t|| store.state.collection[payload.id].init === false\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tstore.commit('update', {\n\t\t\t\t\tid : payload.id,\n\t\t\t\t\tfields : this.validate(Object.assign({}, payload.fields), {host: store.state.host})\n\t\t\t\t});\n\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tdelete: (store, payload) =>\n\t\t\t{\n\t\t\t\tstore.commit('delete', payload.id);\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tsaveState: (store, payload) =>\n\t\t\t{\n\t\t\t\tstore.commit('saveState', {});\n\t\t\t\treturn true;\n\t\t\t},\n\t\t}\n\t}\n\n\tgetMutations()\n\t{\n\t\treturn {\n\t\t\tset: (state, payload) =>\n\t\t\t{\n\t\t\t\tfor (let element of payload)\n\t\t\t\t{\n\t\t\t\t\tthis.initCollection(state, {id: element.id});\n\n\t\t\t\t\tstate.collection[element.id] = element;\n\n\t\t\t\t\tlet status = Utils.user.getOnlineStatus(element);\n\t\t\t\t\tif (status.isOnline)\n\t\t\t\t\t{\n\t\t\t\t\t\tstate.collection[element.id].isOnline = true;\n\t\t\t\t\t\tthis.addToOnlineList(state, element.id);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet mobileStatus = Utils.user.isMobileActive(element);\n\t\t\t\t\tif (mobileStatus)\n\t\t\t\t\t{\n\t\t\t\t\t\tstate.collection[element.id].isMobileOnline = true;\n\t\t\t\t\t\tthis.addToMobileOnlineList(state, element.id);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (element.birthday)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet today = Utils.date.format(new Date(), \"d-m\");\n\t\t\t\t\t\tif (element.birthday === today)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstate.collection[element.id].isBirthday = true;\n\n\t\t\t\t\t\t\tlet timeToNextMidnight = this.getTimeToNextMidnight();\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\tstate.collection[element.id].isBirthday = false;\n\t\t\t\t\t\t\t}, timeToNextMidnight);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (element.absent)\n\t\t\t\t\t{\n\t\t\t\t\t\telement.isAbsent = true;\n\n\t\t\t\t\t\tif (!state.absentList.includes(element.id))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.addToAbsentList(state, element.id);\n\n\t\t\t\t\t\t\tlet timeToNextMidnight = this.getTimeToNextMidnight();\n\t\t\t\t\t\t\tlet timeToNextDay = 1000*60*60*24;\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\tsetInterval(() => this.startAbsentCheckInterval(state), timeToNextDay);\n\t\t\t\t\t\t\t}, timeToNextMidnight);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.saveState(state);\n\t\t\t\t}\n\t\t\t},\n\t\t\tupdate: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.initCollection(state, payload);\n\n\t\t\t\tlet lastActivityDate = state.collection[payload.id].lastActivityDate.getTime();\n\t\t\t\tlet newActivityDate = payload.fields.lastActivityDate.getTime();\n\n\t\t\t\tif (newActivityDate > lastActivityDate)\n\t\t\t\t{\n\t\t\t\t\tlet status = Utils.user.getOnlineStatus(payload.fields);\n\t\t\t\t\tif (status.isOnline)\n\t\t\t\t\t{\n\t\t\t\t\t\tstate.collection[payload.id].isOnline = true;\n\t\t\t\t\t\tthis.addToOnlineList(state, payload.fields.id);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (state.collection[payload.id].mobileLastDate !== payload.fields.mobileLastDate)\n\t\t\t\t{\n\t\t\t\t\tlet mobileStatus = Utils.user.isMobileActive(payload.fields);\n\t\t\t\t\tif (mobileStatus)\n\t\t\t\t\t{\n\t\t\t\t\t\tstate.collection[payload.id].isMobileOnline = true;\n\t\t\t\t\t\tthis.addToMobileOnlineList(state, payload.fields.id);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tstate.collection[payload.id] = Object.assign(\n\t\t\t\t\tstate.collection[payload.id],\n\t\t\t\t\tpayload.fields\n\t\t\t\t);\n\n\t\t\t\tthis.saveState(state);\n\t\t\t},\n\t\t\tdelete: (state, payload) =>\n\t\t\t{\n\t\t\t\tdelete state.collection[payload.id];\n\t\t\t\tthis.saveState(state);\n\t\t\t},\n\t\t\tsaveState: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.saveState(state);\n\t\t\t},\n\t\t}\n\t}\n\n\tinitCollection(state, payload)\n\t{\n\t\tif (typeof state.collection[payload.id] !== 'undefined')\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tVue.set(state.collection, payload.id, this.getElementState());\n\n\t\treturn true;\n\t}\n\n\tgetSaveUserList()\n\t{\n\t\tif (!this.db)\n\t\t{\n\t\t\treturn [];\n\t\t}\n\n\t\tif (!this.store.getters['messages/getSaveUserList'])\n\t\t{\n\t\t\treturn [];\n\t\t}\n\n\t\tlet list = this.store.getters['messages/getSaveUserList']();\n\t\tif (!list)\n\t\t{\n\t\t\treturn [];\n\t\t}\n\n\t\treturn list;\n\t}\n\n\tgetSaveTimeout()\n\t{\n\t\treturn 250;\n\t}\n\n\tsaveState(state)\n\t{\n\t\tif (!this.isSaveAvailable())\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tsuper.saveState(() =>\n\t\t{\n\t\t\tlet list = this.getSaveUserList();\n\t\t\tif (!list)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tlet storedState = {\n\t\t\t\tcollection: {},\n\t\t\t};\n\n\t\t\tlet exceptionList = {\n\t\t\t\tabsent: true,\n\t\t\t\tidle: true,\n\t\t\t\tmobileLastDate: true,\n\t\t\t\tlastActivityDate: true,\n\t\t\t};\n\n\t\t\tfor (let chatId in list)\n\t\t\t{\n\t\t\t\tif (!list.hasOwnProperty(chatId))\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlist[chatId].forEach(userId =>\n\t\t\t\t{\n\t\t\t\t\tif (!state.collection[userId])\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tstoredState.collection[userId] = this.cloneState(state.collection[userId], exceptionList);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn storedState;\n\t\t});\n\t}\n\n\tvalidate(fields, options = {})\n\t{\n\t\tconst result = {};\n\n\t\toptions.host = options.host || this.getState().host;\n\n\t\tif (typeof fields.id === \"number\" || typeof fields.id === \"string\")\n\t\t{\n\t\t\tresult.id = parseInt(fields.id);\n\t\t}\n\n\t\tif (typeof fields.first_name !== \"undefined\")\n\t\t{\n\t\t\tfields.firstName = fields.first_name;\n\t\t}\n\t\tif (typeof fields.last_name !== \"undefined\")\n\t\t{\n\t\t\tfields.lastName = fields.last_name;\n\t\t}\n\t\tif (typeof fields.name === \"string\" || typeof fields.name === \"number\")\n\t\t{\n\t\t\tresult.name = fields.name.toString();\n\n\t\t\tif (typeof fields.firstName !== \"undefined\" && !fields.firstName)\n\t\t\t{\n\t\t\t\tlet elementsOfName = fields.name.split(' ');\n\t\t\t\tif (elementsOfName.length > 1)\n\t\t\t\t{\n\t\t\t\t\tdelete elementsOfName[elementsOfName.length-1];\n\t\t\t\t\tfields.firstName = elementsOfName.join(' ').trim();\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tfields.firstName = result.name;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof fields.lastName !== \"undefined\" && !fields.lastName)\n\t\t\t{\n\t\t\t\tlet elementsOfName = fields.name.split(' ');\n\t\t\t\tif (elementsOfName.length > 1)\n\t\t\t\t{\n\t\t\t\t\tfields.lastName = elementsOfName[elementsOfName.length-1];\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tfields.lastName = '';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.firstName === \"string\" || typeof fields.name === \"number\")\n\t\t{\n\t\t\tresult.firstName = fields.firstName.toString();\n\t\t}\n\t\tif (typeof fields.lastName === \"string\" || typeof fields.name === \"number\")\n\t\t{\n\t\t\tresult.lastName = fields.lastName.toString();\n\t\t}\n\n\t\tif (typeof fields.work_position !== \"undefined\")\n\t\t{\n\t\t\tfields.workPosition = fields.work_position;\n\t\t}\n\t\tif (typeof fields.workPosition === \"string\" || typeof fields.workPosition === \"number\")\n\t\t{\n\t\t\tresult.workPosition = fields.workPosition.toString();\n\t\t}\n\n\t\tif (typeof fields.color === \"string\")\n\t\t{\n\t\t\tresult.color = fields.color;\n\t\t}\n\n\t\tif (typeof fields.avatar === 'string')\n\t\t{\n\t\t\tlet avatar;\n\n\t\t\tif (!fields.avatar || fields.avatar.endsWith('/js/im/images/blank.gif'))\n\t\t\t{\n\t\t\t\tavatar = '';\n\t\t\t}\n\t\t\telse if (fields.avatar.startsWith('http'))\n\t\t\t{\n\t\t\t\tavatar = fields.avatar;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tavatar = options.host + fields.avatar;\n\t\t\t}\n\n\t\t\tif (avatar)\n\t\t\t{\n\t\t\t\tresult.avatar = encodeURI(avatar);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.gender !== 'undefined')\n\t\t{\n\t\t\tresult.gender = fields.gender === 'F'? 'F': 'M';\n\t\t}\n\n\t\tif (typeof fields.birthday === \"string\")\n\t\t{\n\t\t\tresult.birthday = fields.birthday;\n\t\t}\n\n\t\tif (typeof fields.extranet === \"boolean\")\n\t\t{\n\t\t\tresult.extranet = fields.extranet;\n\t\t}\n\n\t\tif (typeof fields.network === \"boolean\")\n\t\t{\n\t\t\tresult.network = fields.network;\n\t\t}\n\n\t\tif (typeof fields.bot === \"boolean\")\n\t\t{\n\t\t\tresult.bot = fields.bot;\n\t\t}\n\n\t\tif (typeof fields.connector === \"boolean\")\n\t\t{\n\t\t\tresult.connector = fields.connector;\n\t\t}\n\n\t\tif (typeof fields.external_auth_id !== \"undefined\")\n\t\t{\n\t\t\tfields.externalAuthId = fields.external_auth_id;\n\t\t}\n\t\tif (typeof fields.externalAuthId === \"string\" && fields.externalAuthId)\n\t\t{\n\t\t\tresult.externalAuthId = fields.externalAuthId;\n\t\t}\n\n\t\tif (typeof fields.status === \"string\")\n\t\t{\n\t\t\tresult.status = fields.status;\n\t\t}\n\n\t\tif (typeof fields.idle !== \"undefined\")\n\t\t{\n\t\t\tresult.idle = Utils.date.cast(fields.idle, false);\n\t\t}\n\t\tif (typeof fields.last_activity_date !== \"undefined\")\n\t\t{\n\t\t\tfields.lastActivityDate = fields.last_activity_date;\n\t\t}\n\t\tif (typeof fields.lastActivityDate !== \"undefined\")\n\t\t{\n\t\t\tresult.lastActivityDate = Utils.date.cast(fields.lastActivityDate, false);\n\t\t}\n\t\tif (typeof fields.mobile_last_date !== \"undefined\")\n\t\t{\n\t\t\tfields.mobileLastDate = fields.mobile_last_date;\n\t\t}\n\t\tif (typeof fields.mobileLastDate !== \"undefined\")\n\t\t{\n\t\t\tresult.mobileLastDate = Utils.date.cast(fields.mobileLastDate, false);\n\t\t}\n\n\t\tif (typeof fields.absent !== \"undefined\")\n\t\t{\n\t\t\tresult.absent = Utils.date.cast(fields.absent, false);\n\t\t}\n\n\t\tif (typeof fields.departments !== 'undefined')\n\t\t{\n\t\t\tresult.departments = [];\n\n\t\t\tif (fields.departments instanceof Array)\n\t\t\t{\n\t\t\t\tfields.departments.forEach(departmentId =>\n\t\t\t\t{\n\t\t\t\t\tdepartmentId = parseInt(departmentId);\n\t\t\t\t\tif (departmentId > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tresult.departments.push(departmentId);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.phones === 'object' && fields.phones)\n\t\t{\n\t\t\tresult.phones = {};\n\n\t\t\tif (typeof fields.phones.work_phone !== \"undefined\")\n\t\t\t{\n\t\t\t\tfields.phones.workPhone = fields.phones.work_phone;\n\t\t\t}\n\t\t\tif (typeof fields.phones.workPhone === 'string' || typeof fields.phones.workPhone === 'number')\n\t\t\t{\n\t\t\t\tresult.phones.workPhone = fields.phones.workPhone.toString();\n\t\t\t}\n\n\t\t\tif (typeof fields.phones.personal_mobile !== \"undefined\")\n\t\t\t{\n\t\t\t\tfields.phones.personalMobile = fields.phones.personal_mobile;\n\t\t\t}\n\t\t\tif (typeof fields.phones.personalMobile === 'string' || typeof fields.phones.personalMobile === 'number')\n\t\t\t{\n\t\t\t\tresult.phones.personalMobile = fields.phones.personalMobile.toString();\n\t\t\t}\n\n\t\t\tif (typeof fields.phones.personal_phone !== \"undefined\")\n\t\t\t{\n\t\t\t\tfields.phones.personalPhone = fields.phones.personal_phone;\n\t\t\t}\n\t\t\tif (typeof fields.phones.personalPhone === 'string' || typeof fields.phones.personalPhone === 'number')\n\t\t\t{\n\t\t\t\tresult.phones.personalPhone = fields.phones.personalPhone.toString();\n\t\t\t}\n\n\t\t\tif (typeof fields.phones.inner_phone !== \"undefined\")\n\t\t\t{\n\t\t\t\tfields.phones.innerPhone = fields.phones.inner_phone;\n\t\t\t}\n\t\t\tif (typeof fields.phones.innerPhone === 'string' || typeof fields.phones.innerPhone === 'number')\n\t\t\t{\n\t\t\t\tresult.phones.innerPhone = fields.phones.innerPhone.toString();\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\taddToOnlineList(state, id)\n\t{\n\t\tif (!state.onlineList.includes(id))\n\t\t{\n\t\t\tstate.onlineList.push(id);\n\t\t}\n\t}\n\n\taddToMobileOnlineList(state, id)\n\t{\n\t\tif (!state.mobileOnlineList.includes(id))\n\t\t{\n\t\t\tstate.mobileOnlineList.push(id);\n\t\t}\n\t}\n\n\taddToAbsentList(state, id)\n\t{\n\t\tif (!state.absentList.includes(id))\n\t\t{\n\t\t\tstate.absentList.push(id);\n\t\t}\n\t}\n\n\tgetTimeToNextMidnight()\n\t{\n\t\tlet nextMidnight = new Date(new Date().setHours(24,0,0)).getTime();\n\t\treturn nextMidnight - new Date();\n\t}\n\n\tstartAbsentCheckInterval(state)\n\t{\n\t\tfor (let userId of state.absentList)\n\t\t{\n\t\t\tlet user = state.collection[userId];\n\n\t\t\tif (!user)\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet currentTime = new Date().getTime();\n\t\t\tlet absentEnd = new Date(state.collection[userId].absent).getTime();\n\n\t\t\tif (absentEnd <= currentTime)\n\t\t\t{\n\t\t\t\tstate.absentList = state.absentList.filter(element => {\n\t\t\t\t\treturn element !== userId;\n\t\t\t\t});\n\t\t\t\tuser.isAbsent = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tstartOnlineCheckInterval()\n\t{\n\t\tconst intervalTime = 60000;\n\n\t\tsetInterval(() => {\n\t\t\tfor (let userId of this.store.state.users.onlineList)\n\t\t\t{\n\t\t\t\tlet user = this.store.state.users.collection[userId];\n\n\t\t\t\tif (!user)\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet status = Utils.user.getOnlineStatus(user);\n\t\t\t\tif (status.isOnline)\n\t\t\t\t{\n\t\t\t\t\tuser.isOnline = true;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tuser.isOnline = false;\n\t\t\t\t\tthis.store.state.users.onlineList = this.store.state.users.onlineList.filter(element => {\n\t\t\t\t\t\treturn element !== userId\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (let userId of this.store.state.users.mobileOnlineList)\n\t\t\t{\n\t\t\t\tlet user = this.store.state.users.collection[userId];\n\n\t\t\t\tif (!user)\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet mobileStatus = Utils.user.isMobileActive(user);\n\t\t\t\tif (mobileStatus)\n\t\t\t\t{\n\t\t\t\t\tuser.isMobileOnline = true;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tuser.isMobileOnline = false;\n\t\t\t\t\tthis.store.state.users.mobileOnlineList = this.store.state.users.mobileOnlineList.filter(element => {\n\t\t\t\t\t\treturn element !== userId\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}, intervalTime);\n\t}\n}\n\nexport {UsersModel};","/**\n * Bitrix Messenger\n * File model (Vuex Builder model)\n *\n * @package bitrix\n * @subpackage im\n * @copyright 2001-2019 Bitrix\n */\n\n\nimport {Vue} from 'ui.vue';\nimport {VuexBuilderModel} from 'ui.vue.vuex';\nimport {FileStatus, FileType, MutationType} from 'im.const';\nimport {Utils} from \"im.lib.utils\";\n\nclass FilesModel extends VuexBuilderModel\n{\n\tgetName()\n\t{\n\t\treturn 'files';\n\t}\n\n\tgetState()\n\t{\n\t\treturn {\n\t\t\tcreated: 0,\n\t\t\thost: this.getVariable('host', location.protocol+'//'+location.host),\n\t\t\tcollection: {},\n\t\t\tindex: {},\n\t\t}\n\t}\n\n\tgetElementState(params = {})\n\t{\n\t\tlet {\n\t\t\tid = 0,\n\t\t\tchatId = 0,\n\t\t\tname = this.getVariable('default.name', ''),\n\t\t} = params;\n\n\t\treturn {\n\t\t\tid,\n\t\t\tchatId,\n\t\t\tname,\n\t\t\ttemplateId: id,\n\t\t\tdate: new Date(),\n\t\t\ttype: 'file',\n\t\t\textension: \"\",\n\t\t\ticon: \"empty\",\n\t\t\tsize: 0,\n\t\t\timage: false,\n\t\t\tstatus: FileStatus.done,\n\t\t\tprogress: 100,\n\t\t\tauthorId: 0,\n\t\t\tauthorName: \"\",\n\t\t\turlPreview: \"\",\n\t\t\turlShow: \"\",\n\t\t\turlDownload: \"\",\n\t\t\tinit: false\n\t\t};\n\t}\n\n\tgetGetters()\n\t{\n\t\treturn {\n\t\t\tget: state => (chatId, fileId, getTemporary = false) =>\n\t\t\t{\n\t\t\t\tif (!chatId || !fileId)\n\t\t\t\t{\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (!state.index[chatId] || !state.index[chatId][fileId])\n\t\t\t\t{\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (!getTemporary && !state.index[chatId][fileId].init)\n\t\t\t\t{\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn state.index[chatId][fileId];\n\t\t\t},\n\t\t\tgetList: state => chatId =>\n\t\t\t{\n\t\t\t\tif (!state.index[chatId])\n\t\t\t\t{\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn state.index[chatId];\n\t\t\t},\n\t\t\tgetBlank: state => params =>\n\t\t\t{\n\t\t\t\treturn this.getElementState(params);\n\t\t\t}\n\t\t}\n\t}\n\n\tgetActions()\n\t{\n\t\treturn {\n\t\t\tadd: (store, payload) =>\n\t\t\t{\n\t\t\t\tlet result = this.validate(Object.assign({}, payload), {host: store.state.host});\n\t\t\t\tresult.id = 'temporary' + (new Date).getTime() + store.state.created;\n\t\t\t\tresult.templateId = result.id;\n\t\t\t\tresult.init = true;\n\n\t\t\t\tstore.commit('add', Object.assign({}, this.getElementState(), result));\n\n\t\t\t\treturn result.id;\n\t\t\t},\n\t\t\tset: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (payload instanceof Array)\n\t\t\t\t{\n\t\t\t\t\tpayload = payload.map(file => {\n\t\t\t\t\t\tlet result = this.validate(Object.assign({}, file), {host: store.state.host});\n\t\t\t\t\t\tresult.templateId = result.id;\n\t\t\t\t\t\treturn Object.assign({}, this.getElementState(), result, {init: 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\tlet result = this.validate(Object.assign({}, payload), {host: store.state.host});\n\t\t\t\t\tresult.templateId = result.id;\n\t\t\t\t\tpayload = [];\n\t\t\t\t\tpayload.push(\n\t\t\t\t\t\tObject.assign({}, this.getElementState(), result, {init: true})\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tstore.commit('set', {\n\t\t\t\t\tinsertType : MutationType.setAfter,\n\t\t\t\t\tdata : payload\n\t\t\t\t});\n\t\t\t},\n\t\t\tsetBefore: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (payload instanceof Array)\n\t\t\t\t{\n\t\t\t\t\tpayload = payload.map(file => {\n\t\t\t\t\t\tlet result = this.validate(Object.assign({}, file), {host: store.state.host});\n\t\t\t\t\t\tresult.templateId = result.id;\n\t\t\t\t\t\treturn Object.assign({}, this.getElementState(), result, {init: 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\tlet result = this.validate(Object.assign({}, payload), {host: store.state.host});\n\t\t\t\t\tresult.templateId = result.id;\n\t\t\t\t\tpayload = [];\n\t\t\t\t\tpayload.push(\n\t\t\t\t\t\tObject.assign({}, this.getElementState(), result, {init: true})\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tstore.commit('set', {\n\t\t\t\t\tactionName: 'setBefore',\n\t\t\t\t\tinsertType : MutationType.setBefore,\n\t\t\t\t\tdata : payload\n\t\t\t\t});\n\t\t\t},\n\t\t\tupdate: (store, payload) =>\n\t\t\t{\n\t\t\t\tlet result = this.validate(Object.assign({}, payload.fields), {host: store.state.host});\n\n\t\t\t\tstore.commit('initCollection', {chatId: payload.chatId});\n\n\t\t\t\tlet index = store.state.collection[payload.chatId].findIndex(el => el.id === payload.id);\n\t\t\t\tif (index < 0)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tstore.commit('update', {\n\t\t\t\t\tid : payload.id,\n\t\t\t\t\tchatId : payload.chatId,\n\t\t\t\t\tindex : index,\n\t\t\t\t\tfields : result\n\t\t\t\t});\n\n\t\t\t\tif (payload.fields.blink)\n\t\t\t\t{\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tstore.commit('update', {\n\t\t\t\t\t\t\tid : payload.id ,\n\t\t\t\t\t\t\tchatId : payload.chatId,\n\t\t\t\t\t\t\tfields : {blink: false}\n\t\t\t\t\t\t});\n\t\t\t\t\t}, 1000);\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tdelete: (store, payload) =>\n\t\t\t{\n\t\t\t\tstore.commit('delete', {\n\t\t\t\t\tid : payload.id,\n\t\t\t\t\tchatId : payload.chatId\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tsaveState: (store, payload) =>\n\t\t\t{\n\t\t\t\tstore.commit('saveState', {});\n\t\t\t\treturn true;\n\t\t\t},\n\t\t}\n\t}\n\n\tgetMutations()\n\t{\n\t\treturn {\n\t\t\tinitCollection: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.initCollection(state, payload);\n\t\t\t},\n\t\t\tadd: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.initCollection(state, payload);\n\n\t\t\t\tstate.collection[payload.chatId].push(payload);\n\t\t\t\tstate.index[payload.chatId][payload.id] = payload;\n\n\t\t\t\tstate.created += 1;\n\n\t\t\t\tthis.saveState(state);\n\t\t\t},\n\t\t\tset: (state, payload) =>\n\t\t\t{\n\t\t\t\tfor (let element of payload.data)\n\t\t\t\t{\n\t\t\t\t\tthis.initCollection(state, {chatId: element.chatId});\n\n\t\t\t\t\tlet index = state.collection[element.chatId].findIndex(el => el.id === element.id);\n\t\t\t\t\tif (index > -1)\n\t\t\t\t\t{\n\t\t\t\t\t\tdelete element.templateId;\n\t\t\t\t\t\tstate.collection[element.chatId][index] = Object.assign(state.collection[element.chatId][index], element);\n\t\t\t\t\t}\n\t\t\t\t\telse if (payload.insertType === MutationType.setBefore)\n\t\t\t\t\t{\n\t\t\t\t\t\tstate.collection[element.chatId].unshift(element);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tstate.collection[element.chatId].push(element);\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.index[element.chatId][element.id] = element;\n\n\t\t\t\t\tthis.saveState(state);\n\t\t\t\t}\n\t\t\t},\n\t\t\tupdate: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.initCollection(state, payload);\n\n\t\t\t\tlet index = -1;\n\t\t\t\tif (typeof payload.index !== 'undefined' && state.collection[payload.chatId][payload.index])\n\t\t\t\t{\n\t\t\t\t\tindex = payload.index;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tindex = state.collection[payload.chatId].findIndex(el => el.id === payload.id);\n\t\t\t\t}\n\n\t\t\t\tif (index >= 0)\n\t\t\t\t{\n\t\t\t\t\tdelete payload.fields.templateId;\n\t\t\t\t\tlet element = Object.assign(\n\t\t\t\t\t\tstate.collection[payload.chatId][index],\n\t\t\t\t\t\tpayload.fields\n\t\t\t\t\t);\n\t\t\t\t\tstate.collection[payload.chatId][index] = element;\n\t\t\t\t\tstate.index[payload.chatId][element.id] = element;\n\n\t\t\t\t\tthis.saveState(state);\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelete: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.initCollection(state, payload);\n\n\t\t\t\tstate.collection[payload.chatId] = state.collection[payload.chatId].filter(element => element.id !== payload.id);\n\t\t\t\tdelete state.index[payload.chatId][payload.id];\n\n\t\t\t\tthis.saveState(state);\n\t\t\t},\n\t\t\tsaveState: (state, payload) =>\n\t\t\t{\n\t\t\t\tthis.saveState(state);\n\t\t\t},\n\t\t}\n\t}\n\n\tinitCollection(state, payload)\n\t{\n\t\tif (typeof state.collection[payload.chatId] !== 'undefined')\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tVue.set(state.collection, payload.chatId, []);\n\t\tVue.set(state.index, payload.chatId, {});\n\n\t\treturn true;\n\t}\n\n\tgetLoadedState(state)\n\t{\n\t\tif (!state || typeof state !== 'object')\n\t\t{\n\t\t\treturn state;\n\t\t}\n\n\t\tif (typeof state.collection !== 'object')\n\t\t{\n\t\t\treturn state;\n\t\t}\n\n\t\tstate.index = {};\n\n\t\tfor (let chatId in state.collection)\n\t\t{\n\t\t\tif (!state.collection.hasOwnProperty(chatId))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tstate.index[chatId] = {};\n\n\t\t\tstate.collection[chatId]\n\t\t\t\t.filter(file => file != null)\n\t\t\t\t.forEach(file => {\n\t\t\t\t\tstate.index[chatId][file.id] = file;\n\t\t\t});\n\t\t}\n\n\t\treturn state;\n\t}\n\n\tgetSaveFileList()\n\t{\n\t\tif (!this.db)\n\t\t{\n\t\t\treturn [];\n\t\t}\n\n\t\tif (!this.store.getters['messages/getSaveFileList'])\n\t\t{\n\t\t\treturn [];\n\t\t}\n\n\t\tlet list = this.store.getters['messages/getSaveFileList']();\n\t\tif (!list)\n\t\t{\n\t\t\treturn [];\n\t\t}\n\n\t\treturn list;\n\t}\n\n\tgetSaveTimeout()\n\t{\n\t\treturn 250;\n\t}\n\n\tsaveState(state)\n\t{\n\t\tif (!this.isSaveAvailable())\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tsuper.saveState(() =>\n\t\t{\n\t\t\tlet list = this.getSaveFileList();\n\t\t\tif (!list)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tlet storedState = {\n\t\t\t\tcollection: {},\n\t\t\t};\n\n\t\t\tfor (let chatId in list)\n\t\t\t{\n\t\t\t\tif (!list.hasOwnProperty(chatId))\n\t\t\t\t{\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlist[chatId].forEach(fileId =>\n\t\t\t\t{\n\t\t\t\t\tif (!state.index[chatId])\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!state.index[chatId][fileId])\n\t\t\t\t\t{\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!storedState.collection[chatId])\n\t\t\t\t\t{\n\t\t\t\t\t\tstoredState.collection[chatId] = [];\n\t\t\t\t\t}\n\n\t\t\t\t\tstoredState.collection[chatId].push(\n\t\t\t\t\t\tstate.index[chatId][fileId]\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn storedState;\n\t\t});\n\t}\n\n\tvalidate(fields, options = {})\n\t{\n\t\tconst result = {};\n\n\t\toptions.host = options.host || this.getState().host;\n\n\t\tif (typeof fields.id === \"number\")\n\t\t{\n\t\t\tresult.id = fields.id;\n\t\t}\n\t\telse if (typeof fields.id === \"string\")\n\t\t{\n\t\t\tif (fields.id.startsWith('temporary'))\n\t\t\t{\n\t\t\t\tresult.id = fields.id;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tresult.id = parseInt(fields.id);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.templateId === \"number\")\n\t\t{\n\t\t\tresult.templateId = fields.templateId;\n\t\t}\n\t\telse if (typeof fields.templateId === \"string\")\n\t\t{\n\t\t\tif (fields.templateId.startsWith('temporary'))\n\t\t\t{\n\t\t\t\tresult.templateId = fields.templateId;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tresult.templateId = parseInt(fields.templateId);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.chatId === \"number\" || typeof fields.chatId === \"string\")\n\t\t{\n\t\t\tresult.chatId = parseInt(fields.chatId);\n\t\t}\n\n\t\tif (typeof fields.date !== \"undefined\")\n\t\t{\n\t\t\tresult.date = Utils.date.cast(fields.date);\n\t\t}\n\n\t\tif (typeof fields.type === \"string\")\n\t\t{\n\t\t\tresult.type = fields.type;\n\t\t}\n\n\t\tif (typeof fields.extension === \"string\")\n\t\t{\n\t\t\tresult.extension = fields.extension.toString();\n\n\t\t\tif (result.type === 'image')\n\t\t\t{\n\t\t\t\tresult.icon = 'img';\n\t\t\t}\n\t\t\telse if (result.type === 'video')\n\t\t\t{\n\t\t\t\tresult.icon = 'mov';\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tresult.icon = FilesModel.getIconType(result.extension);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.name === \"string\" || typeof fields.name === \"number\")\n\t\t{\n\t\t\tresult.name = fields.name.toString();\n\t\t}\n\n\n\t\tif (typeof fields.size === \"number\" || typeof fields.size === \"string\")\n\t\t{\n\t\t\tresult.size = parseInt(fields.size);\n\t\t}\n\n\t\tif (typeof fields.image === 'boolean')\n\t\t{\n\t\t\tresult.image = false;\n\t\t}\n\t\telse if (typeof fields.image === 'object' && fields.image)\n\t\t{\n\t\t\tresult.image = {\n\t\t\t\twidth: 0,\n\t\t\t\theight: 0,\n\t\t\t};\n\n\t\t\tif (typeof fields.image.width === \"string\" || typeof fields.image.width === \"number\")\n\t\t\t{\n\t\t\t\tresult.image.width = parseInt(fields.image.width);\n\t\t\t}\n\t\t\tif (typeof fields.image.height === \"string\" || typeof fields.image.height === \"number\")\n\t\t\t{\n\t\t\t\tresult.image.height = parseInt(fields.image.height);\n\t\t\t}\n\n\t\t\tif (result.image.width <= 0 || result.image.height <= 0)\n\t\t\t{\n\t\t\t\tresult.image = false;\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.status === \"string\" && typeof FileStatus[fields.status] !== 'undefined')\n\t\t{\n\t\t\tresult.status = fields.status;\n\t\t}\n\n\t\tif (typeof fields.progress === \"number\" || typeof fields.progress === \"string\")\n\t\t{\n\t\t\tresult.progress = parseInt(fields.progress);\n\t\t}\n\n\t\tif (typeof fields.authorId === \"number\" || typeof fields.authorId === \"string\")\n\t\t{\n\t\t\tresult.authorId = parseInt(fields.authorId);\n\t\t}\n\n\t\tif (typeof fields.authorName === \"string\" || typeof fields.authorName === \"number\")\n\t\t{\n\t\t\tresult.authorName = fields.authorName.toString();\n\t\t}\n\n\t\tif (typeof fields.urlPreview === 'string')\n\t\t{\n\t\t\tif (\n\t\t\t\t!fields.urlPreview\n\t\t\t\t|| fields.urlPreview.startsWith('http')\n\t\t\t\t|| fields.urlPreview.startsWith('bx')\n\t\t\t\t|| fields.urlPreview.startsWith('file')\n\t\t\t)\n\t\t\t{\n\t\t\t\tresult.urlPreview = fields.urlPreview;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tresult.urlPreview = options.host+fields.urlPreview;\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.urlDownload === 'string')\n\t\t{\n\t\t\tif (\n\t\t\t\t!fields.urlDownload\n\t\t\t\t|| fields.urlDownload.startsWith('http')\n\t\t\t\t|| fields.urlDownload.startsWith('bx')\n\t\t\t\t|| fields.urlPreview.startsWith('file')\n\t\t\t)\n\t\t\t{\n\t\t\t\tresult.urlDownload = fields.urlDownload;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tresult.urlDownload = options.host+fields.urlDownload;\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.urlShow === 'string')\n\t\t{\n\t\t\tif (\n\t\t\t\t!fields.urlShow\n\t\t\t\t|| fields.urlShow.startsWith('http')\n\t\t\t\t|| fields.urlShow.startsWith('bx')\n\t\t\t\t|| fields.urlShow.startsWith('file')\n\t\t\t)\n\t\t\t{\n\t\t\t\tresult.urlShow = fields.urlShow;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tresult.urlShow = options.host+fields.urlShow;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tstatic getType(type)\n\t{\n\t\ttype = type.toString().toLowerCase().split('.').splice(-1)[0];\n\n\t\tswitch(type)\n\t\t{\n\t\t\tcase 'png':\n\t\t\tcase 'jpe':\n\t\t\tcase 'jpg':\n\t\t\tcase 'jpeg':\n\t\t\tcase 'gif':\n\t\t\tcase 'heic':\n\t\t\tcase 'bmp':\n\t\t\t\treturn FileType.image;\n\n\t\t\tcase 'mp4':\n\t\t\tcase 'mkv':\n\t\t\tcase 'webm':\n\t\t\tcase 'mpeg':\n\t\t\tcase 'hevc':\n\t\t\tcase 'avi':\n\t\t\tcase '3gp':\n\t\t\tcase 'flv':\n\t\t\tcase 'm4v':\n\t\t\tcase 'ogg':\n\t\t\tcase 'wmv':\n\t\t\tcase 'mov':\n\t\t\t\treturn FileType.video;\n\n\t\t\tcase 'mp3':\n\t\t\t\treturn FileType.audio;\n\t\t}\n\n\t\treturn FileType.file\n\t}\n\n\tstatic getIconType(extension)\n\t{\n\t\tlet icon = 'empty';\n\n\t\tswitch(extension.toString())\n\t\t{\n\t\t\tcase 'png':\n\t\t\tcase 'jpe':\n\t\t\tcase 'jpg':\n\t\t\tcase 'jpeg':\n\t\t\tcase 'gif':\n\t\t\tcase 'heic':\n\t\t\tcase 'bmp':\n\t\t\t\ticon = 'img';\n\t\t\t\tbreak;\n\n\t\t\tcase 'mp4':\n\t\t\tcase 'mkv':\n\t\t\tcase 'webm':\n\t\t\tcase 'mpeg':\n\t\t\tcase 'hevc':\n\t\t\tcase 'avi':\n\t\t\tcase '3gp':\n\t\t\tcase 'flv':\n\t\t\tcase 'm4v':\n\t\t\tcase 'ogg':\n\t\t\tcase 'wmv':\n\t\t\tcase 'mov':\n\t\t\t\ticon = 'mov';\n\t\t\t\tbreak;\n\n\t\t\tcase 'txt':\n\t\t\t\ticon = 'txt';\n\t\t\t\tbreak;\n\n\t\t\tcase 'doc':\n\t\t\tcase 'docx':\n\t\t\t\ticon = 'doc';\n\t\t\t\tbreak;\n\n\t\t\tcase 'xls':\n\t\t\tcase 'xlsx':\n\t\t\t\ticon = 'xls';\n\t\t\t\tbreak;\n\n\t\t\tcase 'php':\n\t\t\t\ticon = 'php';\n\t\t\t\tbreak;\n\n\t\t\tcase 'pdf':\n\t\t\t\ticon = 'pdf';\n\t\t\t\tbreak;\n\n\t\t\tcase 'ppt':\n\t\t\tcase 'pptx':\n\t\t\t\ticon = 'ppt';\n\t\t\t\tbreak;\n\n\t\t\tcase 'rar':\n\t\t\t\ticon = 'rar';\n\t\t\t\tbreak;\n\n\t\t\tcase 'zip':\n\t\t\tcase '7z':\n\t\t\tcase 'tar':\n\t\t\tcase 'gz':\n\t\t\tcase 'gzip':\n\t\t\t\ticon = 'zip';\n\t\t\t\tbreak;\n\n\t\t\tcase 'set':\n\t\t\t\ticon = 'set';\n\t\t\t\tbreak;\n\n\t\t\tcase 'conf':\n\t\t\tcase 'ini':\n\t\t\tcase 'plist':\n\t\t\t\ticon = 'set';\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn icon;\n\t}\n}\n\nexport {FilesModel};","/**\n * Bitrix Messenger\n * User model (Vuex Builder model)\n *\n * @package bitrix\n * @subpackage im\n * @copyright 2001-2019 Bitrix\n */\n\nimport {Vue} from 'ui.vue';\nimport {VuexBuilderModel} from 'ui.vue.vuex';\nimport {Utils} from \"im.lib.utils\";\n\nclass RecentModel extends VuexBuilderModel\n{\n\tgetName()\n\t{\n\t\treturn 'recent';\n\t}\n\n\tgetState()\n\t{\n\t\treturn {\n\t\t\thost: this.getVariable('host', location.protocol+'//'+location.host),\n\t\t\tcollection: {\n\t\t\t\tpinned: [],\n\t\t\t\tgeneral: []\n\t\t\t}\n\t\t}\n\t}\n\n\tgetElementState(params = {})\n\t{\n\t\treturn {\n\t\t\tid: 0,\n\t\t\ttemplateId: '',\n\t\t\ttemplate: 'item',\n\t\t\tchatType: 'chat',\n\t\t\tsectionCode: 'general',\n\t\t\tavatar: '',\n\t\t\tcolor: '#048bd0',\n\t\t\ttitle: '',\n\t\t\tmessage: {\n\t\t\t\tid: 0,\n\t\t\t\ttext: '',\n\t\t\t\tdate: new Date()\n\t\t\t},\n\t\t\tcounter: 0,\n\t\t\tpinned: false,\n\t\t\tchatId: 0,\n\t\t\tuserId: 0\n\t\t};\n\t}\n\n\tgetGetters()\n\t{\n\t\treturn {\n\t\t\tget: state => dialogId =>\n\t\t\t{\n\t\t\t\treturn this.findItem(state.collection, dialogId);\n\t\t\t}\n\t\t};\n\t}\n\n\tgetActions()\n\t{\n\t\treturn {\n\t\t\tset: (store, payload) =>\n\t\t\t{\n\t\t\t\tlet result = {};\n\n\t\t\t\tif (payload.pinned instanceof Array)\n\t\t\t\t{\n\t\t\t\t\tresult.pinned = payload.pinned.map(\n\t\t\t\t\t\trecentItem => this.prepareItem(recentItem, { host: store.state.host, sectionCode: 'pinned' })\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\telse if (typeof payload.pinned !== 'undefined')\n\t\t\t\t{\n\t\t\t\t\tlet pinned = [];\n\t\t\t\t\tpinned.push(this.prepareItem(payload.pinned, { host: store.state.host, sectionCode: 'pinned' }));\n\n\t\t\t\t\tresult.pinned = pinned;\n\t\t\t\t}\n\n\t\t\t\tif (payload.general instanceof Array)\n\t\t\t\t{\n\t\t\t\t\tresult.general = payload.general.map(\n\t\t\t\t\t\trecentItem => this.prepareItem(recentItem, { host: store.state.host })\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\telse if (typeof payload.general !== 'undefined')\n\t\t\t\t{\n\t\t\t\t\tlet general = [];\n\t\t\t\t\tgeneral.push(this.prepareItem(payload.general, { host: store.state.host }));\n\n\t\t\t\t\tresult.general = general;\n\t\t\t\t}\n\n\t\t\t\tstore.commit('set', result);\n\t\t\t},\n\n\t\t\tupdatePlaceholders: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (!(payload.items instanceof Array))\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tpayload.items = payload.items.map(element => this.prepareItem(element));\n\n\t\t\t\tpayload.items.forEach((element, index) => {\n\t\t\t\t\tlet placeholderId = 'placeholder' + (payload.firstMessage + index);\n\t\t\t\t\tlet existingPlaceholder = this.findItem(\n\t\t\t\t\t\tstore.state.collection,\n\t\t\t\t\t\tplaceholderId,\n\t\t\t\t\t\t'templateId'\n\t\t\t\t\t);\n\n\t\t\t\t\tlet existingItem = this.findItem(store.state.collection, element.id);\n\n\t\t\t\t\tif (existingItem.element)\n\t\t\t\t\t{\n\t\t\t\t\t\tstore.commit('update', {\n\t\t\t\t\t\t\tindex: existingItem.index,\n\t\t\t\t\t\t\tfields: Object.assign({}, element),\n\t\t\t\t\t\t\tsection: 'general'\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tstore.commit('delete', {\n\t\t\t\t\t\t\tindex: existingPlaceholder.index,\n\t\t\t\t\t\t\tsection: 'general'\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\tstore.commit('update', {\n\t\t\t\t\t\t\tindex: existingPlaceholder.index,\n\t\t\t\t\t\t\tfields: Object.assign({}, element),\n\t\t\t\t\t\t\tsection: 'general'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\n\t\t\tupdate: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (\n\t\t\t\t\ttypeof payload !== 'object' ||\n\t\t\t\t\tpayload instanceof Array ||\n\t\t\t\t\t!payload.id ||\n\t\t\t\t\t!payload.fields\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (typeof payload.id === 'string' && !payload.id.startsWith('chat') && payload.id !== 'notify')\n\t\t\t\t{\n\t\t\t\t\tpayload.id = parseInt(payload.id);\n\t\t\t\t}\n\n\t\t\t\tlet existingItem = this.findItem(store.state.collection, payload.id);\n\n\t\t\t\tif (!existingItem.element)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tstore.commit('update', {\n\t\t\t\t\tindex: existingItem.index,\n\t\t\t\t\tfields: Object.assign({}, this.validate(payload.fields)),\n\t\t\t\t\tsection: existingItem.element.sectionCode\n\t\t\t\t});\n\t\t\t},\n\n\t\t\tpin: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (\n\t\t\t\t\ttypeof payload !== 'object' ||\n\t\t\t\t\tpayload instanceof Array ||\n\t\t\t\t\t!payload.id ||\n\t\t\t\t\ttypeof payload.action !== 'boolean'\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (typeof payload.id === 'string' && !payload.id.startsWith('chat') && payload.id !== 'notify')\n\t\t\t\t{\n\t\t\t\t\tpayload.id = parseInt(payload.id);\n\t\t\t\t}\n\n\t\t\t\tlet existingItem = this.findItem(store.state.collection, payload.id, undefined, payload.action? 'general': 'pinned');\n\n\t\t\t\tif (!existingItem.element)\n\t\t\t\t{\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tif (payload.action)\n\t\t\t\t{\n\t\t\t\t\tstore.state.collection.pinned.push(\n\t\t\t\t\t\tObject.assign({}, existingItem.element, {\n\t\t\t\t\t\t\tsectionCode: 'pinned',\n\t\t\t\t\t\t\tpinned: true\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t\tstore.state.collection.pinned.sort(this.sortListByMessageDate);\n\n\t\t\t\t\tstore.commit('delete', {\n\t\t\t\t\t\tindex: existingItem.index,\n\t\t\t\t\t\tsection: 'general'\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\tstore.state.collection.general.push(\n\t\t\t\t\t\tObject.assign({}, existingItem.element, {\n\t\t\t\t\t\t\tsectionCode: 'general',\n\t\t\t\t\t\t\tpinned: false\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t\tstore.state.collection.general.sort(this.sortListByMessageDate);\n\n\t\t\t\t\tstore.commit('delete', {\n\t\t\t\t\t\tindex: existingItem.index,\n\t\t\t\t\t\tsection: 'pinned'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tclearPlaceholders: (store, payload) =>\n\t\t\t{\n\t\t\t\tstore.state.collection.general = store.state.collection.general.filter(element => {\n\t\t\t\t\treturn !element.id.toString().startsWith('placeholder');\n\t\t\t\t});\n\t\t\t},\n\n\t\t\tdelete: (store, payload) =>\n\t\t\t{\n\t\t\t\tif (\n\t\t\t\t\ttypeof payload !== 'object' ||\n\t\t\t\t\tpayload instanceof Array ||\n\t\t\t\t\t!payload.id\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (typeof payload.id === 'string' && !payload.id.startsWith('chat') && payload.id !== 'notify')\n\t\t\t\t{\n\t\t\t\t\tpayload.id = parseInt(payload.id);\n\t\t\t\t}\n\n\t\t\t\tlet existingItem = this.findItem(store.state.collection, payload.id);\n\n\t\t\t\tif (!existingItem.element)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tstore.commit('delete', {\n\t\t\t\t\tindex: existingItem.index,\n\t\t\t\t\tsection: existingItem.element.sectionCode\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tgetMutations()\n\t{\n\t\treturn {\n\t\t\tset: (state, payload) => {\n\t\t\t\tif (payload.general instanceof Array)\n\t\t\t\t{\n\t\t\t\t\tpayload.general.forEach(element => {\n\t\t\t\t\t\tlet {index, alreadyExists} = this.initCollection(state, element, 'general');\n\n\t\t\t\t\t\tif (alreadyExists)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstate.collection.general[index] = Object.assign(\n\t\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\t\tstate.collection.general[index],\n\t\t\t\t\t\t\t\telement\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (payload.pinned instanceof Array)\n\t\t\t\t{\n\t\t\t\t\tpayload.pinned.forEach(element => {\n\t\t\t\t\t\tlet {index, alreadyExists} = this.initCollection(state, element, 'pinned');\n\t\t\t\t\t\tif (alreadyExists)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstate.collection.pinned[index] = Object.assign(\n\t\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\t\tstate.collection.pinned[index],\n\t\t\t\t\t\t\t\telement\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tupdate: (state, payload) => {\n\t\t\t\tif (\n\t\t\t\t\t!payload ||\n\t\t\t\t\tpayload instanceof Array ||\n\t\t\t\t\ttypeof payload.fields !== 'object' ||\n\t\t\t\t\ttypeof payload.index !== 'number' ||\n\t\t\t\t\ttypeof payload.section !== 'string'\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tstate.collection[payload.section][payload.index] = Object.assign(\n\t\t\t\t\t{},\n\t\t\t\t\tstate.collection[payload.section][payload.index],\n\t\t\t\t\tpayload.fields\n\t\t\t\t);\n\n\t\t\t\tstate.collection[payload.section].sort(this.sortListByMessageDate);\n\t\t\t},\n\n\t\t\tdelete: (state, payload) => {\n\t\t\t\tif (\n\t\t\t\t\t!payload ||\n\t\t\t\t\tpayload instanceof Array ||\n\t\t\t\t\ttypeof payload.index !== 'number' ||\n\t\t\t\t\ttypeof payload.section !== 'string'\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tstate.collection[payload.section].splice(payload.index, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\tinitCollection(state, payload, section)\n\t{\n\t\tlet existingItem = this.findItem(state.collection, payload.id, undefined, section);\n\n\t\tif (existingItem.element)\n\t\t{\n\t\t\treturn {index: existingItem.index, alreadyExists: true};\n\t\t}\n\n\t\tlet newLength = state.collection[section].push(Object.assign(\n\t\t\t{},\n\t\t\tthis.getElementState(),\n\t\t\tpayload\n\t\t));\n\n\t\treturn {index: newLength - 1, alreadyExists: false};\n\t}\n\n\tvalidate(fields, options = {})\n\t{\n\t\tconst result = {};\n\n\t\tif (typeof fields.id === \"number\" || typeof fields.id === \"string\")\n\t\t{\n\t\t\tresult.id = fields.id;\n\t\t}\n\n\t\tif (typeof fields.templateId === 'string')\n\t\t{\n\t\t\tresult.templateId = fields.templateId;\n\t\t}\n\n\t\tif (typeof fields.template === 'string')\n\t\t{\n\t\t\tresult.template = fields.template;\n\t\t}\n\n\t\tif (typeof fields.type === \"string\")\n\t\t{\n\t\t\tif (fields.type === 'chat')\n\t\t\t{\n\t\t\t\tif (fields.chat.type === 'open')\n\t\t\t\t{\n\t\t\t\t\tresult.chatType = 'open';\n\t\t\t\t}\n\t\t\t\telse if (fields.chat.type === 'chat')\n\t\t\t\t{\n\t\t\t\t\tresult.chatType = 'chat';\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (fields.type === 'user')\n\t\t\t{\n\t\t\t\tresult.chatType = 'user';\n\t\t\t}\n\t\t\telse if (fields.type === 'notification')\n\t\t\t{\n\t\t\t\tresult.chatType = 'notification';\n\t\t\t\tfields.title = 'Notifications';\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.avatar === 'string')\n\t\t{\n\t\t\tlet avatar;\n\n\t\t\tif (!fields.avatar || fields.avatar.endsWith('/js/im/images/blank.gif'))\n\t\t\t{\n\t\t\t\tavatar = '';\n\t\t\t}\n\t\t\telse if (fields.avatar.startsWith('http'))\n\t\t\t{\n\t\t\t\tavatar = fields.avatar;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tavatar = options.host + fields.avatar;\n\t\t\t}\n\n\t\t\tif (avatar)\n\t\t\t{\n\t\t\t\tresult.avatar = encodeURI(avatar);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof fields.color === 'string')\n\t\t{\n\t\t\tresult.color = fields.color;\n\t\t}\n\n\t\tif (typeof fields.title === \"string\")\n\t\t{\n\t\t\tresult.title = fields.title;\n\t\t}\n\n\t\tif (\n\t\t\ttypeof fields.message === \"object\" &&\n\t\t\t!(fields.message instanceof Array) &&\n\t\t\tfields.message !== null)\n\t\t{\n\t\t\tresult.message = fields.message;\n\t\t}\n\n\t\tif (typeof fields.counter === 'number')\n\t\t{\n\t\t\tresult.counter = fields.counter;\n\t\t}\n\n\t\tif (typeof fields.pinned === 'boolean')\n\t\t{\n\t\t\tresult.pinned = fields.pinned;\n\t\t}\n\n\t\tif (typeof fields.chatId === 'number')\n\t\t{\n\t\t\tresult.chatId = fields.chatId;\n\t\t}\n\n\t\tif (typeof fields.userId === 'number')\n\t\t{\n\t\t\tresult.userId = fields.userId;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tsortListByMessageDate(a, b)\n\t{\n\t\tif (a.message && b.message)\n\t\t{\n\t\t\tlet timestampA = new Date(a.message.date).getTime();\n\t\t\tlet timestampB = new Date(b.message.date).getTime();\n\n\t\t\treturn timestampB - timestampA;\n\t\t}\n\t}\n\n\tprepareItem(item, options = {})\n\t{\n\t\tlet result = this.validate(Object.assign({}, item));\n\n\t\treturn Object.assign({}, this.getElementState(), result, options);\n\t}\n\n\tfindItem(store, value, key = 'id', section = 'general')\n\t{\n\t\tlet result = {};\n\t\tif (typeof store[section] === undefined)\n\t\t{\n\t\t\treturn result;\n\t\t}\n\n\t\tlet elementIndex = store[section].findIndex((element, index) => {\n\t\t\treturn element[key] === value;\n\t\t});\n\n\t\tif (elementIndex !== -1)\n\t\t{\n\t\t\tresult.index = elementIndex;\n\t\t\tresult.element = store[section][elementIndex];\n\n\t\t\treturn result;\n\t\t}\n\n\t\treturn result;\n\t}\n}\n\nexport {RecentModel};"],"names":["ApplicationModel","common","host","getVariable","location","protocol","siteId","userId","languageId","dialog","dialogId","chatId","diskFolderId","messageLimit","enableReadMessages","messageExtraCount","disk","enabled","maxFileSize","mobile","keyboardShow","device","type","DeviceType","desktop","orientation","DeviceOrientation","portrait","options","quoteEnable","quoteFromRight","autoplayVideo","darkBackground","showSmiles","error","active","code","description","Object","assign","set","store","payload","commit","validate","hideSmiles","state","hasChange","group","hasOwnProperty","field","isSaveNeeded","saveState","increaseDialogExtraCount","count","decreaseDialogExtraCount","newCounter","clearDialogExtraCount","fields","result","toString","startsWith","substr","parseInt","isNaN","VuexBuilderModel","IntersectionType","empty","equal","none","found","foundReverse","MessagesModel","created","collection","mutationType","saveMessageList","saveFileList","saveUserList","templateId","templateType","id","authorId","date","Date","text","textConverted","params","TYPE","COMPONENT_ID","push","unread","sending","retry","blink","getMutationType","initialType","MutationType","appliedType","getLastId","length","lastId","i","element","getMessage","messageId","index","get","getBlank","getElementState","getSaveFileList","getSaveUserList","add","getTime","dispatch","actionStart","test","Vue","nextTick","actionError","actionFinish","Array","map","message","prepareMessage","insertType","data","setAfter","setBefore","update","findIndex","el","setTimeout","delete","elements","clear","applyMutationType","readMessages","readId","unreadMessages","unreadId","initCollection","setMutationType","chats","chatsSave","forEach","StorageLimit","messages","filter","includes","intersection","manageCacheBeforeSet","reverse","foundElements","removeIntersectionCacheElements","clearTimeout","removeIntersectionCacheTimeout","noneElements","scrollStickToTop","scrollMessageId","unshift","getters","Set","lastElementId","needApplySort","sort","a","b","isSaveState","applied","saveNeeded","updateSubordinateStates","concat","cache","recursive","reverseResult","isSaveAvailable","slice","FILE_ID","updateSaveLists","storedState","chat_id","Utils","cast","textOriginal","convertToHtml","isConverted","text_converted","senderId","author_id","system","validateParams","BX","isComponent","like","e","hasResultElements","quote","image","highlightText","enableBigSmile","trim","replace","quoteSign","indexOf","textPrepare","split","textPrepareFlag","join","decodeBbCode","whole","p1","p2","p3","p4","offset","changed","aInner","match","RegExp","doubleSmileSize","start","width","middle","height","end","textOnly","codeReplacement","openlines","number","htmlspecialchars","historyId","command","html","textElementSize","url","attrs","size","title","attributes","name","parentNode","innerHTML","src","DialoguesModel","saveDialogList","saveChatList","writingList","quoteId","counter","unreadLastId","managerList","readedList","textareaMessage","editId","init","owner","extranet","avatar","color","entityType","entityId","entityData1","entityData2","entityData3","dateCreate","restrictions","extend","leave","leaveOwner","rename","getByChatId","getQuoteId","getEditId","canSaveChat","canSaveDialog","isPrivateDialog","updateWriting","action","userName","actionName","updateReaded","increaseCounter","increasedCounter","decreaseCounter","decreasedCounter","saveDialog","dialogues","cloneState","getElementStateSaveException","getState","dialog_id","unread_id","unread_last_id","readed_list","record","user_id","user_name","message_id","writing_list","manager_list","mute_list","muteList","ownerId","endsWith","encodeURI","entity_type","entity_id","entity_data_1","entity_data_2","entity_data_3","date_create","dateLastOpen","AVATAR","EXTEND","LEAVE","LEAVE_OWNER","RENAME","UsersModel","startOnlineCheckInterval","onlineList","mobileOnlineList","absentList","firstName","lastName","workPosition","gender","birthday","isBirthday","network","bot","connector","externalAuthId","status","idle","lastActivityDate","mobileLastDate","isOnline","isMobileOnline","absent","isAbsent","departments","phones","workPhone","personalMobile","personalPhone","innerPhone","getTemporary","user","getOnlineStatus","addToOnlineList","mobileStatus","isMobileActive","addToMobileOnlineList","today","format","timeToNextMidnight","getTimeToNextMidnight","addToAbsentList","timeToNextDay","setInterval","startAbsentCheckInterval","newActivityDate","db","list","exceptionList","first_name","last_name","elementsOfName","work_position","external_auth_id","last_activity_date","mobile_last_date","departmentId","work_phone","personal_mobile","personal_phone","inner_phone","nextMidnight","setHours","currentTime","absentEnd","intervalTime","users","FilesModel","extension","icon","FileStatus","done","progress","authorName","urlPreview","urlShow","urlDownload","fileId","getList","file","getIconType","toLowerCase","splice","FileType","video","audio","RecentModel","pinned","general","template","chatType","sectionCode","findItem","recentItem","prepareItem","updatePlaceholders","items","placeholderId","firstMessage","existingPlaceholder","existingItem","section","pin","undefined","sortListByMessageDate","clearPlaceholders","alreadyExists","newLength","chat","timestampA","timestampB","item","value","key","elementIndex"],"mappings":"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"} dist/registry.bundle.map.js 0000664 00000232167 14773234674 0011777 0 ustar 00 {"version":3,"sources":["registry.bundle.js"],"names":["this","BX","Messenger","exports","im_const","ui_vue","ui_vue_vuex","im_lib_utils","ApplicationModel","_VuexBuilderModel","babelHelpers","inherits","classCallCheck","possibleConstructorReturn","getPrototypeOf","apply","arguments","createClass","key","value","getName","getState","common","host","getVariable","location","protocol","siteId","userId","languageId","dialog","dialogId","chatId","diskFolderId","messageLimit","enableReadMessages","messageExtraCount","disk","enabled","maxFileSize","mobile","keyboardShow","device","type","DeviceType","desktop","orientation","DeviceOrientation","portrait","options","quoteEnable","quoteFromRight","autoplayVideo","darkBackground","showSmiles","error","active","code","description","getStateSaveException","Object","assign","getActions","_this","set","store","payload","commit","validate","hideSmiles","getMutations","_this2","state","hasChange","group","hasOwnProperty","field","isSaveNeeded","saveState","increaseDialogExtraCount","length","undefined","_payload$count","count","decreaseDialogExtraCount","_payload$count2","newCounter","clearDialogExtraCount","fields","result","typeof","toString","startsWith","substr","parseInt","isNaN","VuexBuilderModel","IntersectionType","empty","equal","none","found","foundReverse","MessagesModel","created","collection","mutationType","saveMessageList","saveFileList","saveUserList","getElementState","templateId","templateType","id","authorId","date","Date","text","textConverted","params","TYPE","COMPONENT_ID","push","unread","sending","retry","blink","getGetters","getMutationType","initialType","MutationType","appliedType","getLastId","lastId","i","element","getMessage","messageId","index","get","getBlank","getSaveFileList","getSaveUserList","add","getTime","dispatch","actionStart","test","Vue","nextTick","actionError","actionFinish","Array","map","message","prepareMessage","insertType","data","setAfter","setBefore","update","findIndex","el","setTimeout","delete","_delete","elements","clear","applyMutationType","readMessages","readId","unreadMessages","unreadId","_this3","initCollection","setMutationType","chats","chatsSave","forEach","_loop","StorageLimit","messages","filter","includes","intersection","manageCacheBeforeSet","toConsumableArray","reverse","foundElements","removeIntersectionCacheElements","clearTimeout","removeIntersectionCacheTimeout","noneElements","scrollStickToTop","scrollMessageId","_ret","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_loop2","_step","unshift","getters","_iterator","Symbol","iterator","next","done","err","return","Set","lastElementId","needApplySort","sort","a","b","objectSpread","isSaveState","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_iterator2","_step2","applied","saveNeeded","updateSubordinateStates","concat","cache","recursive","_iteratorNormalCompletion3","_didIteratorError3","_iteratorError3","_iterator3","_step3","reverseResult","updateSaveLists","isSaveAvailable","slice","FILE_ID","getSaveTimeout","prototype","call","storedState","_loop3","_chatId","_ret2","chat_id","Utils","cast","textOriginal","convertToHtml","isConverted","text_converted","senderId","author_id","system","validateParams","isComponent","like","e","hasResultElements","_field","_params$quote","quote","_params$image","image","_params$text","_params$highlightText","highlightText","_params$isConverted","_params$enableBigSmil","enableBigSmile","trim","replace","quoteSign","indexOf","textPrepare","split","join","decodeBbCode","whole","p1","p2","p3","p4","offset","changed","aInner","match","RegExp","doubleSmileSize","start","width","middle","height","end","textOnly","_params$textOnly","_params$enableBigSmil2","codeReplacement","openlines","number","htmlspecialchars","historyId","command","html","textElementSize","url","attrs","src","border","size","title","attributes","name","hideErrorImage","parentNode","innerHTML","DialoguesModel","saveDialogList","saveChatList","getElementStateSaveException","writingList","quoteId","counter","unreadLastId","managerList","readedList","textareaMessage","editId","init","owner","extranet","avatar","color","entityType","entityId","entityData1","entityData2","entityData3","dateCreate","restrictions","extend","leave","leaveOwner","rename","getByChatId","getQuoteId","getEditId","canSaveChat","canSaveDialog","isPrivateDialog","updateWriting","action","userName","actionName","_writingList","updateReaded","increaseCounter","increasedCounter","decreaseCounter","decreasedCounter","saveDialog","dialogues","_this4","cloneState","dialog_id","unread_id","unread_last_id","readed_list","record","user_id","user_name","message_id","writing_list","manager_list","mute_list","muteList","ownerId","endsWith","encodeURI","entity_type","entity_id","entity_data_1","entity_data_2","entity_data_3","date_create","dateLastOpen","AVATAR","EXTEND","LEAVE","LEAVE_OWNER","RENAME","UsersModel","startOnlineCheckInterval","onlineList","mobileOnlineList","absentList","_params$id","_params$name","_params$firstName","firstName","_params$lastName","lastName","workPosition","gender","birthday","isBirthday","network","bot","connector","externalAuthId","status","idle","lastActivityDate","mobileLastDate","isOnline","isMobileOnline","absent","isAbsent","departments","phones","workPhone","personalMobile","personalPhone","innerPhone","getTemporary","user","getOnlineStatus","addToOnlineList","mobileStatus","isMobileActive","addToMobileOnlineList","today","format","timeToNextMidnight","getTimeToNextMidnight","addToAbsentList","_timeToNextMidnight","timeToNextDay","setInterval","startAbsentCheckInterval","newActivityDate","db","list","exceptionList","first_name","last_name","elementsOfName","_elementsOfName","work_position","external_auth_id","last_activity_date","mobile_last_date","departmentId","work_phone","personal_mobile","personal_phone","inner_phone","nextMidnight","setHours","currentTime","absentEnd","_this5","intervalTime","users","_iteratorNormalCompletion4","_didIteratorError4","_iteratorError4","_loop4","_step4","_iterator4","_ret3","FilesModel","_params$chatId","extension","icon","FileStatus","progress","authorName","urlPreview","urlShow","urlDownload","fileId","getList","file","getLoadedState","getIconType","getType","toLowerCase","splice","FileType","video","audio","RecentModel","pinned","general","template","chatType","sectionCode","findItem","recentItem","prepareItem","updatePlaceholders","items","placeholderId","firstMessage","existingPlaceholder","existingItem","section","pin","sortListByMessageDate","clearPlaceholders","_this3$initCollection","alreadyExists","_this3$initCollection2","newLength","chat","timestampA","timestampB","item","elementIndex","Model","Const","Lib"],"mappings":"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","file":"registry.bundle.map.js"} dist/registry.bundle.js 0000664 00000425073 14773234674 0011223 0 ustar 00 this.BX = this.BX || {}; this.BX.Messenger = this.BX.Messenger || {}; (function (exports,im_const,ui_vue,ui_vue_vuex,im_lib_utils) { 'use strict'; /** * Bitrix Messenger * Application model (Vuex Builder model) * * @package bitrix * @subpackage im * @copyright 2001-2019 Bitrix */ var ApplicationModel = /*#__PURE__*/ function (_VuexBuilderModel) { babelHelpers.inherits(ApplicationModel, _VuexBuilderModel); function ApplicationModel() { babelHelpers.classCallCheck(this, ApplicationModel); return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(ApplicationModel).apply(this, arguments)); } babelHelpers.createClass(ApplicationModel, [{ key: "getName", value: function getName() { return 'application'; } }, { key: "getState", value: function getState() { return { common: { host: this.getVariable('common.host', location.protocol + '//' + location.host), siteId: this.getVariable('common.siteId', 'default'), userId: this.getVariable('common.userId', 0), languageId: this.getVariable('common.languageId', 'en') }, dialog: { dialogId: this.getVariable('dialog.dialogId', '0'), chatId: this.getVariable('dialog.chatId', 0), diskFolderId: this.getVariable('dialog.diskFolderId', 0), messageLimit: this.getVariable('dialog.messageLimit', 20), enableReadMessages: this.getVariable('dialog.enableReadMessages', true), messageExtraCount: 0 }, disk: { enabled: false, maxFileSize: 5242880 }, mobile: { keyboardShow: false }, device: { type: this.getVariable('device.type', im_const.DeviceType.desktop), orientation: this.getVariable('device.orientation', im_const.DeviceOrientation.portrait) }, options: { quoteEnable: this.getVariable('options.quoteEnable', true), quoteFromRight: this.getVariable('options.quoteFromRight', true), autoplayVideo: this.getVariable('options.autoplayVideo', true), darkBackground: this.getVariable('options.darkBackground', false), showSmiles: false }, error: { active: false, code: '', description: '' } }; } }, { key: "getStateSaveException", value: function getStateSaveException() { return Object.assign({ common: this.getVariable('saveException.common', null), dialog: this.getVariable('saveException.dialog', null), mobile: this.getVariable('saveException.mobile', null), device: this.getVariable('saveException.device', null), error: this.getVariable('saveException.error', null) }); } }, { key: "getActions", value: function getActions() { var _this = this; return { set: function set(store, payload) { store.commit('set', _this.validate(payload)); }, showSmiles: function showSmiles(store, payload) { store.commit('showSmiles'); }, hideSmiles: function hideSmiles(store, payload) { store.commit('hideSmiles'); } }; } }, { key: "getMutations", value: function getMutations() { var _this2 = this; return { set: function set(state, payload) { var hasChange = false; for (var group in payload) { if (!payload.hasOwnProperty(group)) { continue; } for (var field in payload[group]) { if (!payload[group].hasOwnProperty(field)) { continue; } state[group][field] = payload[group][field]; hasChange = true; } } if (hasChange && _this2.isSaveNeeded(payload)) { _this2.saveState(state); } }, increaseDialogExtraCount: function increaseDialogExtraCount(state) { var payload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var _payload$count = payload.count, count = _payload$count === void 0 ? 1 : _payload$count; state.dialog.messageExtraCount += count; }, decreaseDialogExtraCount: function decreaseDialogExtraCount(state) { var payload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var _payload$count2 = payload.count, count = _payload$count2 === void 0 ? 1 : _payload$count2; var newCounter = state.dialog.messageExtraCount - count; if (newCounter <= 0) { newCounter = 0; } state.dialog.messageExtraCount = newCounter; }, clearDialogExtraCount: function clearDialogExtraCount(state) { state.dialog.messageExtraCount = 0; }, showSmiles: function showSmiles(state) { state.options.showSmiles = true; }, hideSmiles: function hideSmiles(state) { state.options.showSmiles = false; } }; } }, { key: "validate", value: function validate(fields) { var result = {}; if (babelHelpers.typeof(fields.common) === 'object' && fields.common) { result.common = {}; if (typeof fields.common.userId === 'number') { result.common.userId = fields.common.userId; } if (typeof fields.common.languageId === 'string') { result.common.languageId = fields.common.languageId; } } if (babelHelpers.typeof(fields.dialog) === 'object' && fields.dialog) { result.dialog = {}; if (typeof fields.dialog.dialogId === 'number') { result.dialog.dialogId = fields.dialog.dialogId.toString(); result.dialog.chatId = 0; } else if (typeof fields.dialog.dialogId === 'string') { result.dialog.dialogId = fields.dialog.dialogId; if (typeof fields.dialog.chatId !== 'number') { var chatId = fields.dialog.dialogId; if (chatId.startsWith('chat')) { chatId = fields.dialog.dialogId.substr(4); } chatId = parseInt(chatId); result.dialog.chatId = !isNaN(chatId) ? chatId : 0; fields.dialog.chatId = result.dialog.chatId; } } if (typeof fields.dialog.chatId === 'number') { result.dialog.chatId = fields.dialog.chatId; } if (typeof fields.dialog.diskFolderId === 'number') { result.dialog.diskFolderId = fields.dialog.diskFolderId; } if (typeof fields.dialog.messageLimit === 'number') { result.dialog.messageLimit = fields.dialog.messageLimit; } if (typeof fields.dialog.messageExtraCount === 'number') { result.dialog.messageExtraCount = fields.dialog.messageExtraCount; } if (typeof fields.dialog.enableReadMessages === 'boolean') { result.dialog.enableReadMessages = fields.dialog.enableReadMessages; } } if (babelHelpers.typeof(fields.disk) === 'object' && fields.disk) { result.disk = {}; if (typeof fields.disk.enabled === 'boolean') { result.disk.enabled = fields.disk.enabled; } if (typeof fields.disk.maxFileSize === 'number') { result.disk.maxFileSize = fields.disk.maxFileSize; } } if (babelHelpers.typeof(fields.mobile) === 'object' && fields.mobile) { result.mobile = {}; if (typeof fields.mobile.keyboardShow === 'boolean') { result.mobile.keyboardShow = fields.mobile.keyboardShow; } } if (babelHelpers.typeof(fields.device) === 'object' && fields.device) { result.device = {}; if (typeof fields.device.type === 'string' && typeof im_const.DeviceType[fields.device.type] !== 'undefined') { result.device.type = fields.device.type; } if (typeof fields.device.orientation === 'string' && typeof im_const.DeviceOrientation[fields.device.orientation] !== 'undefined') { result.device.orientation = fields.device.orientation; } } if (babelHelpers.typeof(fields.error) === 'object' && fields.error) { if (typeof fields.error.active === 'boolean') { result.error = { active: fields.error.active, code: fields.error.code.toString() || '', description: fields.error.description.toString() || '' }; } } return result; } }]); return ApplicationModel; }(ui_vue_vuex.VuexBuilderModel); /** * Bitrix Messenger * Message model (Vuex Builder model) * * @package bitrix * @subpackage im * @copyright 2001-2019 Bitrix */ var IntersectionType = { empty: 'empty', equal: 'equal', none: 'none', found: 'found', foundReverse: 'foundReverse' }; var MessagesModel = /*#__PURE__*/ function (_VuexBuilderModel) { babelHelpers.inherits(MessagesModel, _VuexBuilderModel); function MessagesModel() { babelHelpers.classCallCheck(this, MessagesModel); return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(MessagesModel).apply(this, arguments)); } babelHelpers.createClass(MessagesModel, [{ key: "getName", value: function getName() { return 'messages'; } }, { key: "getState", value: function getState() { return { created: 0, collection: {}, mutationType: {}, saveMessageList: {}, saveFileList: {}, saveUserList: {}, host: this.getVariable('host', location.protocol + '//' + location.host) }; } }, { key: "getElementState", value: function getElementState() { return { templateId: 0, templateType: 'message', id: 0, chatId: 0, authorId: 0, date: new Date(), text: "", textConverted: "", params: { TYPE: 'default', COMPONENT_ID: 'bx-im-view-message' }, push: false, unread: false, sending: false, error: false, retry: false, blink: false }; } }, { key: "getGetters", value: function getGetters() { var _this = this; return { getMutationType: function getMutationType(state) { return function (chatId) { if (!state.mutationType[chatId]) { return { initialType: im_const.MutationType.none, appliedType: im_const.MutationType.none }; } return state.mutationType[chatId]; }; }, getLastId: function getLastId(state) { return function (chatId) { if (!state.collection[chatId] || state.collection[chatId].length <= 0) { return null; } var lastId = 0; for (var i = 0; i < state.collection[chatId].length; i++) { var element = state.collection[chatId][i]; if (element.push || element.sending || element.id.toString().startsWith('temporary')) { continue; } if (lastId < element.id) { lastId = element.id; } } return lastId ? lastId : null; }; }, getMessage: function getMessage(state) { return function (chatId, messageId) { if (!state.collection[chatId] || state.collection[chatId].length <= 0) { return null; } for (var index = state.collection[chatId].length - 1; index >= 0; index--) { if (state.collection[chatId][index].id === messageId) { return state.collection[chatId][index]; } } return null; }; }, get: function get(state) { return function (chatId) { if (!state.collection[chatId] || state.collection[chatId].length <= 0) { return []; } return state.collection[chatId]; }; }, getBlank: function getBlank(state) { return function (params) { return _this.getElementState(); }; }, getSaveFileList: function getSaveFileList(state) { return function (params) { return state.saveFileList; }; }, getSaveUserList: function getSaveUserList(state) { return function (params) { return state.saveUserList; }; } }; } }, { key: "getActions", value: function getActions() { var _this2 = this; return { add: function add(store, payload) { var result = _this2.validate(Object.assign({}, payload)); result.params = Object.assign({}, _this2.getElementState().params, result.params); result.id = 'temporary' + new Date().getTime() + store.state.created; result.templateId = result.id; result.unread = false; store.commit('add', Object.assign({}, _this2.getElementState(), result)); if (payload.sending !== false) { store.dispatch('actionStart', { id: result.id, chatId: result.chatId }); } return result.id; }, actionStart: function actionStart(store, payload) { if (/^\d+$/.test(payload.id)) { payload.id = parseInt(payload.id); } payload.chatId = parseInt(payload.chatId); ui_vue.Vue.nextTick(function () { store.commit('update', { id: payload.id, chatId: payload.chatId, fields: { sending: true } }); }); }, actionError: function actionError(store, payload) { if (/^\d+$/.test(payload.id)) { payload.id = parseInt(payload.id); } payload.chatId = parseInt(payload.chatId); ui_vue.Vue.nextTick(function () { store.commit('update', { id: payload.id, chatId: payload.chatId, fields: { sending: false, error: true, retry: payload.retry !== false } }); }); }, actionFinish: function actionFinish(store, payload) { if (/^\d+$/.test(payload.id)) { payload.id = parseInt(payload.id); } payload.chatId = parseInt(payload.chatId); ui_vue.Vue.nextTick(function () { store.commit('update', { id: payload.id, chatId: payload.chatId, fields: { sending: false, error: false, retry: false } }); }); }, set: function set(store, payload) { if (payload instanceof Array) { payload = payload.map(function (message) { return _this2.prepareMessage(message, { host: store.state.host }); }); } else { var result = _this2.prepareMessage(payload, { host: store.state.host }); (payload = []).push(result); } store.commit('set', { insertType: im_const.MutationType.set, data: payload }); }, setAfter: function setAfter(store, payload) { if (payload instanceof Array) { payload = payload.map(function (message) { return _this2.prepareMessage(message); }); } else { var result = _this2.prepareMessage(payload); (payload = []).push(result); } store.commit('set', { insertType: im_const.MutationType.setAfter, data: payload }); }, setBefore: function setBefore(store, payload) { if (payload instanceof Array) { payload = payload.map(function (message) { return _this2.prepareMessage(message); }); } else { var result = _this2.prepareMessage(payload); (payload = []).push(result); } store.commit('set', { insertType: im_const.MutationType.setBefore, data: payload }); }, update: function update(store, payload) { if (/^\d+$/.test(payload.id)) { payload.id = parseInt(payload.id); } if (/^\d+$/.test(payload.chatId)) { payload.chatId = parseInt(payload.chatId); } store.commit('initCollection', { chatId: payload.chatId }); var index = store.state.collection[payload.chatId].findIndex(function (el) { return el.id === payload.id; }); if (index < 0) { return false; } var result = _this2.validate(Object.assign({}, payload.fields)); if (result.params) { result.params = Object.assign({}, _this2.getElementState().params, store.state.collection[payload.chatId][index].params, result.params); } store.commit('update', { id: payload.id, chatId: payload.chatId, index: index, fields: result }); if (payload.fields.blink) { setTimeout(function () { store.commit('update', { id: payload.id, chatId: payload.chatId, fields: { blink: false } }); }, 1000); } return true; }, delete: function _delete(store, payload) { if (!(payload.id instanceof Array)) { payload.id = [payload.id]; } payload.id = payload.id.map(function (id) { if (/^\d+$/.test(id)) { id = parseInt(id); } return id; }); store.commit('delete', { chatId: payload.chatId, elements: payload.id }); return true; }, clear: function clear(store, payload) { payload.chatId = parseInt(payload.chatId); store.commit('clear', { chatId: payload.chatId }); return true; }, applyMutationType: function applyMutationType(store, payload) { payload.chatId = parseInt(payload.chatId); store.commit('applyMutationType', { chatId: payload.chatId }); return true; }, readMessages: function readMessages(store, payload) { payload.readId = parseInt(payload.readId) || 0; payload.chatId = parseInt(payload.chatId); if (typeof store.state.collection[payload.chatId] === 'undefined') { return { count: 0 }; } var count = 0; for (var index = store.state.collection[payload.chatId].length - 1; index >= 0; index--) { var element = store.state.collection[payload.chatId][index]; if (!element.unread) continue; if (payload.readId === 0 || element.id <= payload.readId) { count++; } } store.commit('readMessages', { chatId: payload.chatId, readId: payload.readId }); return { count: count }; }, unreadMessages: function unreadMessages(store, payload) { payload.unreadId = parseInt(payload.unreadId) || 0; payload.chatId = parseInt(payload.chatId); if (typeof store.state.collection[payload.chatId] === 'undefined' || !payload.unreadId) { return { count: 0 }; } var count = 0; for (var index = store.state.collection[payload.chatId].length - 1; index >= 0; index--) { var element = store.state.collection[payload.chatId][index]; if (element.unread) continue; if (element.id >= payload.unreadId) { count++; } } store.commit('unreadMessages', { chatId: payload.chatId, unreadId: payload.unreadId }); return { count: count }; } }; } }, { key: "getMutations", value: function getMutations() { var _this3 = this; return { initCollection: function initCollection(state, payload) { return _this3.initCollection(state, payload); }, add: function add(state, payload) { _this3.initCollection(state, { chatId: payload.chatId }); _this3.setMutationType(state, { chatId: payload.chatId, initialType: im_const.MutationType.add }); state.collection[payload.chatId].push(payload); state.saveMessageList[payload.chatId].push(payload.id); state.created += 1; _this3.saveState(state, payload.chatId); }, set: function set(state, payload) { var chats = []; var chatsSave = []; var mutationType = {}; mutationType.initialType = payload.insertType; if (payload.insertType === im_const.MutationType.set) { (function () { payload.insertType = im_const.MutationType.setAfter; var elements = {}; payload.data.forEach(function (element) { if (!elements[element.chatId]) { elements[element.chatId] = []; } elements[element.chatId].push(element.id); }); var _loop = function _loop(chatId) { if (!elements.hasOwnProperty(chatId)) return "continue"; _this3.initCollection(state, { chatId: chatId }); if (state.saveMessageList[chatId].length > elements[chatId].length || elements[chatId].length < im_const.StorageLimit.messages) { state.collection[chatId] = state.collection[chatId].filter(function (element) { return elements[chatId].includes(element.id); }); state.saveMessageList[chatId] = state.saveMessageList[chatId].filter(function (id) { return elements[chatId].includes(id); }); } var intersection = _this3.manageCacheBeforeSet(babelHelpers.toConsumableArray(state.saveMessageList[chatId].reverse()), elements[chatId]); if (intersection.type === IntersectionType.none) { if (intersection.foundElements.length > 0) { state.collection[chatId] = state.collection[chatId].filter(function (element) { return !intersection.foundElements.includes(element.id); }); state.saveMessageList[chatId] = state.saveMessageList[chatId].filter(function (id) { return !intersection.foundElements.includes(id); }); } _this3.removeIntersectionCacheElements = state.collection[chatId].map(function (element) { return element.id; }); clearTimeout(_this3.removeIntersectionCacheTimeout); _this3.removeIntersectionCacheTimeout = setTimeout(function () { state.collection[chatId] = state.collection[chatId].filter(function (element) { return !_this3.removeIntersectionCacheElements.includes(element.id); }); state.saveMessageList[chatId] = state.saveMessageList[chatId].filter(function (id) { return !_this3.removeIntersectionCacheElements.includes(id); }); _this3.removeIntersectionCacheElements = []; }, 1000); } else { if (intersection.type === IntersectionType.foundReverse) { payload.insertType = im_const.MutationType.setBefore; payload.data = payload.data.reverse(); } } if (intersection.foundElements.length > 0) { if (intersection.type === IntersectionType.found && intersection.noneElements[0]) { mutationType.scrollStickToTop = false; mutationType.scrollMessageId = intersection.foundElements[intersection.foundElements.length - 1]; } else { mutationType.scrollStickToTop = false; mutationType.scrollMessageId = 0; } } else if (intersection.type === IntersectionType.none) { mutationType.scrollStickToTop = false; mutationType.scrollMessageId = payload.data[0].id; } }; for (var chatId in elements) { var _ret = _loop(chatId); if (_ret === "continue") continue; } })(); } mutationType.appliedType = payload.insertType; var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { var _loop2 = function _loop2() { var element = _step.value; _this3.initCollection(state, { chatId: element.chatId }); var index = state.collection[element.chatId].findIndex(function (el) { return el.id === element.id; }); if (index > -1) { delete element.templateId; state.collection[element.chatId][index] = Object.assign(state.collection[element.chatId][index], element); } else if (payload.insertType === im_const.MutationType.setBefore) { state.collection[element.chatId].unshift(element); } else if (payload.insertType === im_const.MutationType.setAfter) { state.collection[element.chatId].push(element); } chats.push(element.chatId); if (_this3.store.getters['dialogues/canSaveChat'] && _this3.store.getters['dialogues/canSaveChat'](element.chatId)) { chatsSave.push(element.chatId); } }; for (var _iterator = payload.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { _loop2(); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } chats = babelHelpers.toConsumableArray(new Set(chats)); chatsSave = babelHelpers.toConsumableArray(new Set(chatsSave)); // check array for correct order of messages if (mutationType.initialType === im_const.MutationType.set) { chats.forEach(function (chatId) { var lastElementId = 0; var needApplySort = false; for (var i = 0; i < state.collection[chatId].length; i++) { var element = state.collection[chatId][i]; if (element.id < lastElementId) { needApplySort = true; break; } lastElementId = element.id; } if (needApplySort) { state.collection[chatId].sort(function (a, b) { return a.id - b.id; }); } }); } chats.forEach(function (chatId) { _this3.setMutationType(state, babelHelpers.objectSpread({ chatId: chatId }, mutationType)); }); if (mutationType.initialType !== im_const.MutationType.setBefore) { chatsSave.forEach(function (chatId) { _this3.saveState(state, chatId); }); } }, update: function update(state, payload) { _this3.initCollection(state, { chatId: payload.chatId }); var index = -1; if (typeof payload.index !== 'undefined' && state.collection[payload.chatId][payload.index]) { index = payload.index; } else { index = state.collection[payload.chatId].findIndex(function (el) { return el.id === payload.id; }); } if (index >= 0) { var isSaveState = state.saveMessageList[payload.chatId].includes(state.collection[payload.chatId][index].id) || payload.fields.id && !payload.fields.id.toString().startsWith('temporary') && state.collection[payload.chatId][index].id.toString().startsWith('temporary'); delete payload.fields.templateId; state.collection[payload.chatId][index] = Object.assign(state.collection[payload.chatId][index], payload.fields); if (isSaveState) { _this3.saveState(state, payload.chatId); } } }, delete: function _delete(state, payload) { _this3.initCollection(state, { chatId: payload.chatId }); _this3.setMutationType(state, { chatId: payload.chatId, initialType: im_const.MutationType.delete }); state.collection[payload.chatId] = state.collection[payload.chatId].filter(function (element) { return !payload.elements.includes(element.id); }); if (state.saveMessageList[payload.chatId].length > 0) { var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { for (var _iterator2 = payload.elements[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var id = _step2.value; if (state.saveMessageList[payload.chatId].includes(id)) { _this3.saveState(state, payload.chatId); break; } } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2.return != null) { _iterator2.return(); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } } }, clear: function clear(state, payload) { _this3.initCollection(state, { chatId: payload.chatId }); _this3.setMutationType(state, { chatId: payload.chatId, initialType: 'clear' }); state.collection[payload.chatId] = []; state.saveMessageList[payload.chatId] = []; }, applyMutationType: function applyMutationType(state, payload) { if (typeof state.mutationType[payload.chatId] === 'undefined') { ui_vue.Vue.set(state.mutationType, payload.chatId, { applied: false, initialType: im_const.MutationType.none, appliedType: im_const.MutationType.none, scrollStickToTop: 0, scrollMessageId: 0 }); } state.mutationType[payload.chatId].applied = true; }, readMessages: function readMessages(state, payload) { _this3.initCollection(state, { chatId: payload.chatId }); var saveNeeded = false; for (var index = state.collection[payload.chatId].length - 1; index >= 0; index--) { var element = state.collection[payload.chatId][index]; if (!element.unread) continue; if (payload.readId === 0 || element.id <= payload.readId) { state.collection[payload.chatId][index] = Object.assign(state.collection[payload.chatId][index], { unread: false }); saveNeeded = true; } } if (saveNeeded) { _this3.saveState(state, payload.chatId); } }, unreadMessages: function unreadMessages(state, payload) { _this3.initCollection(state, { chatId: payload.chatId }); var saveNeeded = false; for (var index = state.collection[payload.chatId].length - 1; index >= 0; index--) { var element = state.collection[payload.chatId][index]; if (element.unread) continue; if (element.id >= payload.unreadId) { state.collection[payload.chatId][index] = Object.assign(state.collection[payload.chatId][index], { unread: true }); saveNeeded = true; } } if (saveNeeded) { _this3.saveState(state, payload.chatId); _this3.updateSubordinateStates(); } } }; } }, { key: "initCollection", value: function initCollection(state, payload) { if (typeof payload.chatId === 'undefined') { return false; } if (typeof payload.chatId === 'undefined' || typeof state.collection[payload.chatId] !== 'undefined') { return true; } ui_vue.Vue.set(state.collection, payload.chatId, payload.messages ? [].concat(payload.messages) : []); ui_vue.Vue.set(state.mutationType, payload.chatId, { applied: false, initialType: im_const.MutationType.none, appliedType: im_const.MutationType.none, scrollStickToTop: 0, scrollMessageId: 0 }); ui_vue.Vue.set(state.saveMessageList, payload.chatId, []); ui_vue.Vue.set(state.saveFileList, payload.chatId, []); ui_vue.Vue.set(state.saveUserList, payload.chatId, []); return true; } }, { key: "setMutationType", value: function setMutationType(state, payload) { var mutationType = { applied: false, initialType: im_const.MutationType.none, appliedType: im_const.MutationType.none, scrollStickToTop: false, scrollMessageId: 0 }; if (payload.initialType && !payload.appliedType) { payload.appliedType = payload.initialType; } if (typeof state.mutationType[payload.chatId] === 'undefined') { ui_vue.Vue.set(state.mutationType, payload.chatId, mutationType); } state.mutationType[payload.chatId] = babelHelpers.objectSpread({}, mutationType, payload); return true; } }, { key: "prepareMessage", value: function prepareMessage(message) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var result = this.validate(Object.assign({}, message), options); result.params = Object.assign({}, this.getElementState().params, result.params); result.templateId = result.id; return Object.assign({}, this.getElementState(), result); } }, { key: "manageCacheBeforeSet", value: function manageCacheBeforeSet(cache, elements) { var recursive = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var result = { type: IntersectionType.empty, foundElements: [], noneElements: [] }; if (!cache || cache.length <= 0) { return result; } var _iteratorNormalCompletion3 = true; var _didIteratorError3 = false; var _iteratorError3 = undefined; try { for (var _iterator3 = elements[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { var id = _step3.value; if (cache.includes(id)) { if (result.type === IntersectionType.empty) { result.type = IntersectionType.found; } result.foundElements.push(id); } else { if (result.type === IntersectionType.empty) { result.type = IntersectionType.none; } result.noneElements.push(id); } } } catch (err) { _didIteratorError3 = true; _iteratorError3 = err; } finally { try { if (!_iteratorNormalCompletion3 && _iterator3.return != null) { _iterator3.return(); } } finally { if (_didIteratorError3) { throw _iteratorError3; } } } if (result.type === IntersectionType.found && cache.length === elements.length && result.foundElements.length === elements.length) { result.type = IntersectionType.equal; } else if (result.type === IntersectionType.none && !recursive && result.foundElements.length > 0) { var reverseResult = this.manageCacheBeforeSet(cache.reverse(), elements.reverse(), true); if (reverseResult.type === IntersectionType.found) { reverseResult.type = IntersectionType.foundReverse; return reverseResult; } } return result; } }, { key: "updateSaveLists", value: function updateSaveLists(state, chatId) { if (!this.isSaveAvailable()) { return true; } if (!chatId || !this.store.getters['dialogues/canSaveChat'] || !this.store.getters['dialogues/canSaveChat'](chatId)) { return false; } this.initCollection(state, { chatId: chatId }); var count = 0; var saveMessageList = []; var saveFileList = []; var saveUserList = []; var dialog = this.store.getters['dialogues/getByChatId'](chatId); if (dialog && dialog.type === 'private') { saveUserList.push(parseInt(dialog.dialogId)); } for (var index = state.collection[chatId].length - 1; index >= 0; index--) { if (state.collection[chatId][index].id.toString().startsWith('temporary')) { continue; } if (count >= im_const.StorageLimit.messages && !state.collection[chatId][index].unread) { break; } saveMessageList.unshift(state.collection[chatId][index].id); count++; } saveMessageList = saveMessageList.slice(0, im_const.StorageLimit.messages); state.collection[chatId].filter(function (element) { return saveMessageList.includes(element.id); }).forEach(function (element) { if (element.authorId > 0) { saveUserList.push(element.authorId); } if (element.params.FILE_ID instanceof Array) { saveFileList = element.params.FILE_ID.concat(saveFileList); } }); state.saveMessageList[chatId] = saveMessageList; state.saveFileList[chatId] = babelHelpers.toConsumableArray(new Set(saveFileList)); state.saveUserList[chatId] = babelHelpers.toConsumableArray(new Set(saveUserList)); return true; } }, { key: "getSaveTimeout", value: function getSaveTimeout() { return 150; } }, { key: "saveState", value: function saveState(state, chatId) { if (!this.updateSaveLists(state, chatId)) { return false; } babelHelpers.get(babelHelpers.getPrototypeOf(MessagesModel.prototype), "saveState", this).call(this, function () { var storedState = { collection: {}, saveMessageList: {}, saveUserList: {}, saveFileList: {} }; var _loop3 = function _loop3(_chatId) { if (!state.saveMessageList.hasOwnProperty(_chatId)) { return "continue"; } if (!state.collection[_chatId]) { return "continue"; } if (!storedState.collection[_chatId]) { storedState.collection[_chatId] = []; } state.collection[_chatId].filter(function (element) { return state.saveMessageList[_chatId].includes(element.id); }).forEach(function (element) { return storedState.collection[_chatId].push(element); }); storedState.saveMessageList[_chatId] = state.saveMessageList[_chatId]; storedState.saveFileList[_chatId] = state.saveFileList[_chatId]; storedState.saveUserList[_chatId] = state.saveUserList[_chatId]; }; for (var _chatId in state.saveMessageList) { var _ret2 = _loop3(_chatId); if (_ret2 === "continue") continue; } return storedState; }); } }, { key: "updateSubordinateStates", value: function updateSubordinateStates() { this.store.dispatch('users/saveState'); this.store.dispatch('files/saveState'); } }, { key: "validate", value: function validate(fields, options) { var result = {}; if (typeof fields.id === "number") { result.id = fields.id; } else if (typeof fields.id === "string") { if (fields.id.startsWith('temporary')) { result.id = fields.id; } else { result.id = parseInt(fields.id); } } if (typeof fields.templateId === "number") { result.templateId = fields.templateId; } else if (typeof fields.templateId === "string") { if (fields.templateId.startsWith('temporary')) { result.templateId = fields.templateId; } else { result.templateId = parseInt(fields.templateId); } } if (typeof fields.chat_id !== 'undefined') { fields.chatId = fields.chat_id; } if (typeof fields.chatId === "number" || typeof fields.chatId === "string") { result.chatId = parseInt(fields.chatId); } if (typeof fields.date !== "undefined") { result.date = im_lib_utils.Utils.date.cast(fields.date); } // previous P&P format if (typeof fields.textOriginal === "string" || typeof fields.textOriginal === "number") { result.text = fields.textOriginal.toString(); if (typeof fields.text === "string" || typeof fields.text === "number") { result.textConverted = this.convertToHtml({ text: fields.text.toString(), isConverted: true }); } } else // modern format { if (typeof fields.text_converted !== 'undefined') { fields.textConverted = fields.text_converted; } if (typeof fields.textConverted === "string" || typeof fields.textConverted === "number") { result.textConverted = fields.textConverted.toString(); } if (typeof fields.text === "string" || typeof fields.text === "number") { result.text = fields.text.toString(); var isConverted = typeof result.textConverted !== 'undefined'; result.textConverted = this.convertToHtml({ text: isConverted ? result.textConverted : result.text, isConverted: isConverted }); } } if (typeof fields.senderId !== 'undefined') { fields.authorId = fields.senderId; } else if (typeof fields.author_id !== 'undefined') { fields.authorId = fields.author_id; } if (typeof fields.authorId === "number" || typeof fields.authorId === "string") { if (fields.system === true || fields.system === 'Y') { result.authorId = 0; } else { result.authorId = parseInt(fields.authorId); } } if (babelHelpers.typeof(fields.params) === "object" && fields.params !== null) { var params = this.validateParams(fields.params, options); if (params) { result.params = params; } } if (typeof fields.push === "boolean") { result.push = fields.push; } if (typeof fields.sending === "boolean") { result.sending = fields.sending; } if (typeof fields.unread === "boolean") { result.unread = fields.unread; } if (typeof fields.blink === "boolean") { result.blink = fields.blink; } if (typeof fields.error === "boolean" || typeof fields.error === "string") { result.error = fields.error; } if (typeof fields.retry === "boolean") { result.retry = fields.retry; } return result; } }, { key: "validateParams", value: function validateParams(params, options) { var result = {}; try { for (var field in params) { if (!params.hasOwnProperty(field)) { continue; } if (field === 'COMPONENT_ID') { if (typeof params[field] === "string" && BX.Vue.isComponent(params[field])) { result[field] = params[field]; } } else if (field === 'LIKE') { if (params[field] instanceof Array) { result['REACTION'] = { like: params[field].map(function (element) { return parseInt(element); }) }; } } else if (field === 'CHAT_LAST_DATE') { result[field] = im_lib_utils.Utils.date.cast(params[field]); } else if (field === 'AVATAR') { if (params[field]) { result[field] = params[field].startsWith('http') ? params[field] : options.host + params[field]; } } else if (field === 'NAME') { if (params[field]) { result[field] = params[field]; } } else { result[field] = params[field]; } } } catch (e) {} var hasResultElements = false; for (var _field in result) { if (!result.hasOwnProperty(_field)) { continue; } hasResultElements = true; break; } return hasResultElements ? result : null; } }, { key: "convertToHtml", value: function convertToHtml() { var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var _params$quote = params.quote, quote = _params$quote === void 0 ? true : _params$quote, _params$image = params.image, image = _params$image === void 0 ? true : _params$image, _params$text = params.text, text = _params$text === void 0 ? '' : _params$text, _params$highlightText = params.highlightText, highlightText = _params$highlightText === void 0 ? '' : _params$highlightText, _params$isConverted = params.isConverted, isConverted = _params$isConverted === void 0 ? false : _params$isConverted, _params$enableBigSmil = params.enableBigSmile, enableBigSmile = _params$enableBigSmil === void 0 ? true : _params$enableBigSmil; text = text.trim(); if (!isConverted) { text = text.replace(/&/g, '&').replace(/"/g, '"').replace(/</g, '<').replace(/>/g, '>'); } if (text.startsWith('/me')) { text = "<i>".concat(text.substr(4), "</i>"); } else if (text.startsWith('/loud')) { text = "<b>".concat(text.substr(6), "</b>"); } var quoteSign = ">>"; if (quote && text.indexOf(quoteSign) >= 0) { var textPrepare = text.split(isConverted ? "<br />" : "\n"); for (var i = 0; i < textPrepare.length; i++) { if (textPrepare[i].startsWith(quoteSign)) { textPrepare[i] = textPrepare[i].replace(quoteSign, '<div class="bx-im-message-content-quote"><div class="bx-im-message-content-quote-wrap">'); while (++i < textPrepare.length && textPrepare[i].startsWith(quoteSign)) { textPrepare[i] = textPrepare[i].replace(quoteSign, ''); } textPrepare[i - 1] += '</div></div><br>'; } } text = textPrepare.join("<br />"); } text = text.replace(/\n/gi, '<br />'); text = text.replace(/\t/gi, ' '); text = this.decodeBbCode(text, false, enableBigSmile); if (quote) { text = text.replace(/------------------------------------------------------<br \/>(.*?)\[(.*?)\]<br \/>(.*?)------------------------------------------------------(<br \/>)?/g, function (whole, p1, p2, p3, p4, offset) { return (offset > 0 ? '<br>' : '') + "<div class=\"bx-im-message-content-quote\"><div class=\"bx-im-message-content-quote-wrap\"><div class=\"bx-im-message-content-quote-name\"><span class=\"bx-im-message-content-quote-name-text\">" + p1 + "</span><span class=\"bx-im-message-content-quote-name-time\">" + p2 + "</span></div>" + p3 + "</div></div><br />"; }); text = text.replace(/------------------------------------------------------<br \/>(.*?)------------------------------------------------------(<br \/>)?/g, function (whole, p1, p2, p3, offset) { return (offset > 0 ? '<br>' : '') + "<div class=\"bx-im-message-content-quote\"><div class=\"bx-im-message-content-quote-wrap\">" + p1 + "</div></div><br />"; }); } if (image) { var changed = false; text = text.replace(/<a(.*?)>(http[s]{0,1}:\/\/.*?)<\/a>/ig, function (whole, aInner, text, offset) { if (!text.match(/(\.(jpg|jpeg|png|gif)\?|\.(jpg|jpeg|png|gif)$)/i) || text.indexOf("/docs/pub/") > 0 || text.indexOf("logout=yes") > 0) { return whole; } else { changed = true; return (offset > 0 ? '<br />' : '') + '<a' + aInner + ' target="_blank" class="bx-im-element-file-image"><img src="' + text + '" class="bx-im-element-file-image-source-text" onerror="BX.Messenger.Model.MessagesModel.hideErrorImage(this)"></a></span>'; } }); if (changed) { text = text.replace(/<\/span>(\n?)<br(\s\/?)>/ig, '</span>').replace(/<br(\s\/?)>(\n?)<br(\s\/?)>(\n?)<span/ig, '<br /><span'); } } if (highlightText) { text = text.replace(new RegExp("(" + highlightText.replace(/[\-\[\]\/{}()*+?.\\^$|]/g, "\\$&") + ")", 'ig'), '<span class="bx-messenger-highlight">$1</span>'); } if (enableBigSmile) { text = text.replace(/^(\s*<img\s+src=[^>]+?data-code=[^>]+?data-definition="UHD"[^>]+?style="width:)(\d+)(px[^>]+?height:)(\d+)(px[^>]+?class="bx-smile"\s*\/?>\s*)$/, function doubleSmileSize(match, start, width, middle, height, end) { return start + parseInt(width, 10) * 1.7 + middle + parseInt(height, 10) * 1.7 + end; }); } if (text.substr(-6) == '<br />') { text = text.substr(0, text.length - 6); } text = text.replace(/<br><br \/>/ig, '<br />'); text = text.replace(/<br \/><br>/ig, '<br />'); return text; } }, { key: "decodeBbCode", value: function decodeBbCode(text) { var textOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var enableBigSmile = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; return MessagesModel.decodeBbCode({ text: text, textOnly: textOnly, enableBigSmile: enableBigSmile }); } }], [{ key: "decodeBbCode", value: function decodeBbCode() { var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var text = params.text, _params$textOnly = params.textOnly, textOnly = _params$textOnly === void 0 ? false : _params$textOnly, _params$enableBigSmil2 = params.enableBigSmile, enableBigSmile = _params$enableBigSmil2 === void 0 ? true : _params$enableBigSmil2; var codeReplacement = []; text = text.replace(/\[CODE\]\n?([\s\S]*?)\[\/CODE\]/ig, function (whole, text) { var id = codeReplacement.length; codeReplacement.push(text); return '####REPLACEMENT_MARK_' + id + '####'; }); text = text.replace(/\[LIKE\]/ig, '<span class="bx-smile bx-im-smile-like"></span>'); text = text.replace(/\[DISLIKE\]/ig, '<span class="bx-smile bx-im-smile-dislike"></span>'); text = text.replace(/\[USER=([0-9]{1,})\](.*?)\[\/USER\]/ig, function (whole, userId, text) { return '<span class="bx-im-mention" data-type="USER" data-value="' + userId + '">' + text + '</span>'; }); text = text.replace(/\[CHAT=(imol\|)?([0-9]{1,})\](.*?)\[\/CHAT\]/ig, function (whole, openlines, chatId, text) { return openlines ? text : '<span class="bx-im-mention" data-type="CHAT" data-value="chat' + chatId + '">' + text + '</span>'; }); // TODO tag CHAT text = text.replace(/\[CALL(?:=(.+?))?\](.+?)?\[\/CALL\]/ig, function (whole, number, text) { return '<span class="bx-im-mention" data-type="CALL" data-value="' + im_lib_utils.Utils.text.htmlspecialchars(number) + '">' + text + '</span>'; }); // TODO tag CHAT text = text.replace(/\[PCH=([0-9]{1,})\](.*?)\[\/PCH\]/ig, function (whole, historyId, text) { return text; }); // TODO tag PCH text = text.replace(/\[SEND(?:=(.+?))?\](.+?)?\[\/SEND\]/ig, function (whole, command, text) { var html = ''; text = text ? text : command; command = (command ? command : text).replace('<br />', '\n'); if (!textOnly && text) { text = text.replace(/<([\w]+)[^>]*>(.*?)<\\1>/i, "$2", text); text = text.replace(/\[([\w]+)[^\]]*\](.*?)\[\/\1\]/i, "$2", text); html = '<span class="bx-im-message-command-wrap">' + '<span class="bx-im-message-command" data-entity="send">' + text + '</span>' + '<span class="bx-im-message-command-data">' + command + '</span>' + '</span>'; } else { html = text; } return html; }); text = text.replace(/\[PUT(?:=(.+?))?\](.+?)?\[\/PUT\]/ig, function (whole, command, text) { var html = ''; text = text ? text : command; command = (command ? command : text).replace('<br />', '\n'); if (!textOnly && text) { text = text.replace(/<([\w]+)[^>]*>(.*?)<\/\1>/i, "$2", text); text = text.replace(/\[([\w]+)[^\]]*\](.*?)\[\/\1\]/i, "$2", text); html = '<span class="bx-im-message-command" data-entity="put">' + text + '</span>'; html += '<span class="bx-im-message-command-data">' + command + '</span>'; } else { html = text; } return html; }); var textElementSize = 0; if (enableBigSmile) { textElementSize = text.replace(/\[icon\=([^\]]*)\]/ig, '').trim().length; } text = text.replace(/\[icon\=([^\]]*)\]/ig, function (whole) { var url = whole.match(/icon\=(\S+[^\s.,> )\];\'\"!?])/i); if (url && url[1]) { url = url[1]; } else { return ''; } var attrs = { 'src': url, 'border': 0 }; var size = whole.match(/size\=(\d+)/i); if (size && size[1]) { attrs['width'] = size[1]; attrs['height'] = size[1]; } else { var width = whole.match(/width\=(\d+)/i); if (width && width[1]) { attrs['width'] = width[1]; } var height = whole.match(/height\=(\d+)/i); if (height && height[1]) { attrs['height'] = height[1]; } if (attrs['width'] && !attrs['height']) { attrs['height'] = attrs['width']; } else if (attrs['height'] && !attrs['width']) { attrs['width'] = attrs['height']; } else if (attrs['height'] && attrs['width']) ; else { attrs['width'] = 20; attrs['height'] = 20; } } attrs['width'] = attrs['width'] > 100 ? 100 : attrs['width']; attrs['height'] = attrs['height'] > 100 ? 100 : attrs['height']; if (enableBigSmile && textElementSize === 0 && attrs['width'] === attrs['height'] && attrs['width'] === 20) { attrs['width'] = 40; attrs['height'] = 40; } var title = whole.match(/title\=(.*[^\s\]])/i); if (title && title[1]) { title = title[1]; if (title.indexOf('width=') > -1) { title = title.substr(0, title.indexOf('width=')); } if (title.indexOf('height=') > -1) { title = title.substr(0, title.indexOf('height=')); } if (title.indexOf('size=') > -1) { title = title.substr(0, title.indexOf('size=')); } if (title) { attrs['title'] = im_lib_utils.Utils.text.htmlspecialchars(title).trim(); attrs['alt'] = attrs['title']; } } var attributes = ''; for (var name in attrs) { if (attrs.hasOwnProperty(name)) { attributes += name + '="' + attrs[name] + '" '; } } return '<img class="bx-smile bx-icon" ' + attributes + '>'; }); codeReplacement.forEach(function (code, index) { text = text.replace('####REPLACEMENT_MARK_' + index + '####', !textOnly ? '<div class="bx-im-message-content-code">' + code + '</div>' : code); }); return text; } }, { key: "hideErrorImage", value: function hideErrorImage(element) { if (element.parentNode && element.parentNode) { element.parentNode.innerHTML = '<a href="' + element.src + '" target="_blank">' + element.src + '</a>'; } return true; } }]); return MessagesModel; }(ui_vue_vuex.VuexBuilderModel); /** * Bitrix Messenger * Dialogues model (Vuex Builder model) * * @package bitrix * @subpackage im * @copyright 2001-2019 Bitrix */ var DialoguesModel = /*#__PURE__*/ function (_VuexBuilderModel) { babelHelpers.inherits(DialoguesModel, _VuexBuilderModel); function DialoguesModel() { babelHelpers.classCallCheck(this, DialoguesModel); return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(DialoguesModel).apply(this, arguments)); } babelHelpers.createClass(DialoguesModel, [{ key: "getName", value: function getName() { return 'dialogues'; } }, { key: "getState", value: function getState() { return { host: this.getVariable('host', location.protocol + '//' + location.host), collection: {}, saveDialogList: [], saveChatList: [] }; } }, { key: "getStateSaveException", value: function getStateSaveException() { return { host: null }; } }, { key: "getElementStateSaveException", value: function getElementStateSaveException() { return { writingList: null, quoteId: null }; } }, { key: "getElementState", value: function getElementState() { return { dialogId: '0', chatId: 0, counter: 0, unreadId: 0, unreadLastId: 0, managerList: [], readedList: [], writingList: [], textareaMessage: "", quoteId: 0, editId: 0, init: false, name: "", owner: 0, extranet: false, avatar: "", color: "#17A3EA", type: "chat", entityType: "", entityId: "", entityData1: "", entityData2: "", entityData3: "", dateCreate: new Date(), restrictions: { avatar: true, extend: true, leave: true, leaveOwner: true, rename: true } }; } }, { key: "getGetters", value: function getGetters() { var _this = this; return { get: function get(state) { return function (dialogId) { if (!state.collection[dialogId]) { return null; } return state.collection[dialogId]; }; }, getByChatId: function getByChatId(state) { return function (chatId) { chatId = parseInt(chatId); for (var dialogId in state.collection) { if (!state.collection.hasOwnProperty(dialogId)) { continue; } if (state.collection[dialogId].chatId === chatId) { return state.collection[dialogId]; } } return null; }; }, getBlank: function getBlank(state) { return function (params) { return _this.getElementState(); }; }, getQuoteId: function getQuoteId(state) { return function (dialogId) { if (!state.collection[dialogId]) { return 0; } return state.collection[dialogId].quoteId; }; }, getEditId: function getEditId(state) { return function (dialogId) { if (!state.collection[dialogId]) { return 0; } return state.collection[dialogId].editId; }; }, canSaveChat: function canSaveChat(state) { return function (chatId) { if (/^\d+$/.test(chatId)) { chatId = parseInt(chatId); } return state.saveChatList.includes(parseInt(chatId)); }; }, canSaveDialog: function canSaveDialog(state) { return function (dialogId) { return state.saveDialogList.includes(dialogId.toString()); }; }, isPrivateDialog: function isPrivateDialog(state) { return function (dialogId) { dialogId = dialogId.toString(); return state.collection[dialogId.toString()] && state.collection[dialogId].type === 'private'; }; } }; } }, { key: "getActions", value: function getActions() { var _this2 = this; return { set: function set(store, payload) { if (payload instanceof Array) { payload = payload.map(function (dialog) { return Object.assign({}, _this2.validate(Object.assign({}, dialog), { host: store.state.host }), { init: true }); }); } else { var result = []; result.push(Object.assign({}, _this2.validate(Object.assign({}, payload), { host: store.state.host }), { init: true })); payload = result; } store.commit('set', payload); }, update: function update(store, payload) { if (typeof store.state.collection[payload.dialogId] === 'undefined' || store.state.collection[payload.dialogId].init === false) { return true; } store.commit('update', { dialogId: payload.dialogId, fields: _this2.validate(Object.assign({}, payload.fields), { host: store.state.host }) }); return true; }, delete: function _delete(store, payload) { store.commit('delete', payload.dialogId); return true; }, updateWriting: function updateWriting(store, payload) { if (typeof store.state.collection[payload.dialogId] === 'undefined' || store.state.collection[payload.dialogId].init === false) { return true; } var index = store.state.collection[payload.dialogId].writingList.findIndex(function (el) { return el.userId === payload.userId; }); if (payload.action) { if (index >= 0) { return true; } else { var writingList = [].concat(store.state.collection[payload.dialogId].writingList); writingList.unshift({ userId: payload.userId, userName: payload.userName }); store.commit('update', { actionName: 'updateWriting/1', dialogId: payload.dialogId, fields: _this2.validate({ writingList: writingList }, { host: store.state.host }) }); } } else { if (index >= 0) { var _writingList = store.state.collection[payload.dialogId].writingList.filter(function (el) { return el.userId !== payload.userId; }); store.commit('update', { actionName: 'updateWriting/2', dialogId: payload.dialogId, fields: _this2.validate({ writingList: _writingList }, { host: store.state.host }) }); return true; } else { return true; } } return false; }, updateReaded: function updateReaded(store, payload) { if (typeof store.state.collection[payload.dialogId] === 'undefined' || store.state.collection[payload.dialogId].init === false) { return true; } var readedList = store.state.collection[payload.dialogId].readedList.filter(function (el) { return el.userId !== payload.userId; }); if (payload.action) { readedList.push({ userId: payload.userId, userName: payload.userName || '', messageId: payload.messageId, date: payload.date || new Date() }); } store.commit('update', { actionName: 'updateReaded', dialogId: payload.dialogId, fields: _this2.validate({ readedList: readedList }, { host: store.state.host }) }); return false; }, increaseCounter: function increaseCounter(store, payload) { if (typeof store.state.collection[payload.dialogId] === 'undefined' || store.state.collection[payload.dialogId].init === false) { return true; } var counter = store.state.collection[payload.dialogId].counter; if (counter === 100) { return true; } var increasedCounter = counter + payload.count; if (increasedCounter > 100) { increasedCounter = 100; } var fields = { counter: increasedCounter }; if (typeof payload.unreadLastId !== 'undefined') { fields.unreadLastId = payload.unreadLastId; } store.commit('update', { actionName: 'increaseCounter', dialogId: payload.dialogId, fields: fields }); return false; }, decreaseCounter: function decreaseCounter(store, payload) { if (typeof store.state.collection[payload.dialogId] === 'undefined' || store.state.collection[payload.dialogId].init === false) { return true; } var counter = store.state.collection[payload.dialogId].counter; if (counter === 100) { return true; } var decreasedCounter = counter - payload.count; if (decreasedCounter < 0) { decreasedCounter = 0; } var unreadId = payload.unreadId > store.state.collection[payload.dialogId].unreadId ? payload.unreadId : store.state.collection[payload.dialogId].unreadId; if (store.state.collection[payload.dialogId].unreadId !== unreadId || store.state.collection[payload.dialogId].counter !== decreasedCounter) { if (decreasedCounter === 0) { unreadId = 0; } store.commit('update', { actionName: 'decreaseCounter', dialogId: payload.dialogId, fields: { counter: decreasedCounter, unreadId: unreadId } }); } return false; }, saveDialog: function saveDialog(store, payload) { if (typeof store.state.collection[payload.dialogId] === 'undefined' || store.state.collection[payload.dialogId].init === false) { return true; } store.commit('saveDialog', { dialogId: payload.dialogId, chatId: payload.chatId }); return false; } }; } }, { key: "getMutations", value: function getMutations() { var _this3 = this; return { initCollection: function initCollection(state, payload) { _this3.initCollection(state, payload); }, saveDialog: function saveDialog(state, payload) { // TODO if payload.dialogId is IMOL, skip update this flag if (!(payload.chatId > 0 && payload.dialogId.length > 0)) { return false; } var saveDialogList = state.saveDialogList.filter(function (element) { return element !== payload.dialogId; }); saveDialogList.unshift(payload.dialogId); saveDialogList = saveDialogList.slice(0, im_const.StorageLimit.dialogues); if (state.saveDialogList.join(',') === saveDialogList.join(',')) { return true; } state.saveDialogList = saveDialogList; var saveChatList = state.saveChatList.filter(function (element) { return element !== payload.chatId; }); saveChatList.unshift(payload.chatId); state.saveChatList = saveChatList.slice(0, im_const.StorageLimit.dialogues); _this3.saveState(state); }, set: function set(state, payload) { var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = payload[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var element = _step.value; _this3.initCollection(state, { dialogId: element.dialogId }); state.collection[element.dialogId] = Object.assign(_this3.getElementState(), state.collection[element.dialogId], element); } // TODO if payload.dialogId is IMOL, skip update cache } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } _this3.saveState(state); }, update: function update(state, payload) { _this3.initCollection(state, payload); state.collection[payload.dialogId] = Object.assign(state.collection[payload.dialogId], payload.fields); // TODO if payload.dialogId is IMOL, skip update cache _this3.saveState(state); }, delete: function _delete(state, payload) { delete state.collection[payload.dialogId]; // TODO if payload.dialogId is IMOL, skip update cache _this3.saveState(state); } }; } }, { key: "initCollection", value: function initCollection(state, payload) { if (typeof state.collection[payload.dialogId] !== 'undefined') { return true; } ui_vue.Vue.set(state.collection, payload.dialogId, this.getElementState()); if (payload.fields) { state.collection[payload.dialogId] = Object.assign(state.collection[payload.dialogId], this.validate(Object.assign({}, payload.fields), { host: state.host })); } return true; } }, { key: "getSaveTimeout", value: function getSaveTimeout() { return 100; } }, { key: "saveState", value: function saveState() { var _this4 = this; var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; if (!this.isSaveAvailable()) { return true; } babelHelpers.get(babelHelpers.getPrototypeOf(DialoguesModel.prototype), "saveState", this).call(this, function () { var storedState = { collection: {}, saveDialogList: [].concat(state.saveDialogList), saveChatList: [].concat(state.saveChatList) }; state.saveDialogList.forEach(function (dialogId) { if (!state.collection[dialogId]) return false; storedState.collection[dialogId] = Object.assign(_this4.getElementState(), _this4.cloneState(state.collection[dialogId], _this4.getElementStateSaveException())); }); return storedState; }); } }, { key: "validate", value: function validate(fields) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var result = {}; options.host = options.host || this.getState().host; if (typeof fields.dialog_id !== 'undefined') { fields.dialogId = fields.dialog_id; } if (typeof fields.dialogId === "number" || typeof fields.dialogId === "string") { result.dialogId = fields.dialogId.toString(); } if (typeof fields.chat_id !== 'undefined') { fields.chatId = fields.chat_id; } else if (typeof fields.id !== 'undefined') { fields.chatId = fields.id; } if (typeof fields.chatId === "number" || typeof fields.chatId === "string") { result.chatId = parseInt(fields.chatId); } if (typeof fields.quoteId === "number") { result.quoteId = parseInt(fields.quoteId); } if (typeof fields.editId === "number") { result.editId = parseInt(fields.editId); } if (typeof fields.counter === "number" || typeof fields.counter === "string") { result.counter = parseInt(fields.counter); } if (typeof fields.unread_id !== 'undefined') { fields.unreadId = fields.unread_id; } if (typeof fields.unreadId === "number" || typeof fields.unreadId === "string") { result.unreadId = parseInt(fields.unreadId); } if (typeof fields.unread_last_id !== 'undefined') { fields.unreadLastId = fields.unread_last_id; } if (typeof fields.unreadLastId === "number" || typeof fields.unreadLastId === "string") { result.unreadLastId = parseInt(fields.unreadLastId); } if (typeof fields.readed_list !== 'undefined') { fields.readedList = fields.readed_list; } if (typeof fields.readedList !== 'undefined') { result.readedList = []; if (fields.readedList instanceof Array) { fields.readedList.forEach(function (element) { var record = {}; if (typeof element.user_id !== 'undefined') { element.userId = element.user_id; } if (typeof element.user_name !== 'undefined') { element.userName = element.user_name; } if (typeof element.message_id !== 'undefined') { element.messageId = element.message_id; } if (!element.userId || !element.userName || !element.messageId) { return false; } record.userId = parseInt(element.userId); record.userName = element.userName.toString(); record.messageId = parseInt(element.messageId); record.date = im_lib_utils.Utils.date.cast(element.date); result.readedList.push(record); }); } } if (typeof fields.writing_list !== 'undefined') { fields.writingList = fields.writing_list; } if (typeof fields.writingList !== 'undefined') { result.writingList = []; if (fields.writingList instanceof Array) { fields.writingList.forEach(function (element) { var record = {}; if (!element.userId) { return false; } record.userId = parseInt(element.userId); record.userName = element.userName; result.writingList.push(record); }); } } if (typeof fields.manager_list !== 'undefined') { fields.managerList = fields.manager_list; } if (typeof fields.managerList !== 'undefined') { result.managerList = []; if (fields.managerList instanceof Array) { fields.managerList.forEach(function (userId) { userId = parseInt(userId); if (userId > 0) { result.managerList.push(userId); } }); } } if (typeof fields.mute_list !== 'undefined') { fields.muteList = fields.mute_list; } if (typeof fields.muteList !== 'undefined') { result.muteList = []; if (fields.muteList instanceof Array) { fields.muteList.forEach(function (userId) { userId = parseInt(userId); if (userId > 0) { result.muteList.push(userId); } }); } } if (typeof fields.textareaMessage !== 'undefined') { result.textareaMessage = fields.textareaMessage.toString(); } if (typeof fields.title !== 'undefined') { fields.name = fields.title; } if (typeof fields.name === "string" || typeof fields.name === "number") { result.name = fields.name.toString(); } if (typeof fields.owner !== 'undefined') { fields.ownerId = fields.owner; } if (typeof fields.ownerId === "number" || typeof fields.ownerId === "string") { result.ownerId = parseInt(fields.ownerId); } if (typeof fields.extranet === "boolean") { result.extranet = fields.extranet; } if (typeof fields.avatar === 'string') { var avatar; if (!fields.avatar || fields.avatar.endsWith('/js/im/images/blank.gif')) { avatar = ''; } else if (fields.avatar.startsWith('http')) { avatar = fields.avatar; } else { avatar = options.host + fields.avatar; } if (avatar) { result.avatar = encodeURI(avatar); } } if (typeof fields.color === "string") { result.color = fields.color.toString(); } if (typeof fields.type === "string") { result.type = fields.type.toString(); } if (typeof fields.entity_type !== 'undefined') { fields.entityType = fields.entity_type; } if (typeof fields.entityType === "string") { result.entityType = fields.entityType.toString(); } if (typeof fields.entity_id !== 'undefined') { fields.entityId = fields.entity_id; } if (typeof fields.entityId === "string" || typeof fields.entityId === "number") { result.entityId = fields.entityId.toString(); } if (typeof fields.entity_data_1 !== 'undefined') { fields.entityData1 = fields.entity_data_1; } if (typeof fields.entityData1 === "string") { result.entityData1 = fields.entityData1.toString(); } if (typeof fields.entity_data_2 !== 'undefined') { fields.entityData2 = fields.entity_data_2; } if (typeof fields.entityData2 === "string") { result.entityData2 = fields.entityData2.toString(); } if (typeof fields.entity_data_3 !== 'undefined') { fields.entityData3 = fields.entity_data_3; } if (typeof fields.entityData3 === "string") { result.entityData3 = fields.entityData3.toString(); } if (typeof fields.date_create !== 'undefined') { fields.dateCreate = fields.date_create; } if (typeof fields.dateCreate !== "undefined") { result.dateCreate = im_lib_utils.Utils.date.cast(fields.dateCreate); } if (typeof fields.dateLastOpen !== "undefined") { result.dateLastOpen = im_lib_utils.Utils.date.cast(fields.dateLastOpen); } if (babelHelpers.typeof(fields.restrictions) === 'object' && fields.restrictions) { result.restrictions = {}; if (typeof fields.restrictions.AVATAR === 'boolean') { result.restrictions.avatar = fields.restrictions.AVATAR; } if (typeof fields.restrictions.EXTEND === 'boolean') { result.restrictions.extend = fields.restrictions.EXTEND; } if (typeof fields.restrictions.LEAVE === 'boolean') { result.restrictions.leave = fields.restrictions.LEAVE; } if (typeof fields.restrictions.LEAVE_OWNER === 'boolean') { result.restrictions.leaveOwner = fields.restrictions.LEAVE_OWNER; } if (typeof fields.restrictions.RENAME === 'boolean') { result.restrictions.rename = fields.restrictions.RENAME; } } return result; } }]); return DialoguesModel; }(ui_vue_vuex.VuexBuilderModel); /** * Bitrix Messenger * User model (Vuex Builder model) * * @package bitrix * @subpackage im * @copyright 2001-2019 Bitrix */ var UsersModel = /*#__PURE__*/ function (_VuexBuilderModel) { babelHelpers.inherits(UsersModel, _VuexBuilderModel); function UsersModel() { babelHelpers.classCallCheck(this, UsersModel); return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(UsersModel).apply(this, arguments)); } babelHelpers.createClass(UsersModel, [{ key: "getName", value: function getName() { return 'users'; } }, { key: "getState", value: function getState() { this.startOnlineCheckInterval(); return { host: this.getVariable('host', location.protocol + '//' + location.host), collection: {}, onlineList: [], mobileOnlineList: [], absentList: [] }; } }, { key: "getElementState", value: function getElementState() { var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var _params$id = params.id, id = _params$id === void 0 ? 0 : _params$id, _params$name = params.name, name = _params$name === void 0 ? this.getVariable('default.name', '') : _params$name, _params$firstName = params.firstName, firstName = _params$firstName === void 0 ? this.getVariable('default.name', '') : _params$firstName, _params$lastName = params.lastName, lastName = _params$lastName === void 0 ? '' : _params$lastName; return { id: id, name: name, firstName: firstName, lastName: lastName, workPosition: "", color: "#048bd0", avatar: "", gender: "M", birthday: false, isBirthday: false, extranet: false, network: false, bot: false, connector: false, externalAuthId: "default", status: "online", idle: false, lastActivityDate: false, mobileLastDate: false, isOnline: false, isMobileOnline: false, absent: false, isAbsent: false, departments: [], phones: { workPhone: "", personalMobile: "", personalPhone: "", innerPhone: "" }, init: false }; } }, { key: "getGetters", value: function getGetters() { var _this = this; return { get: function get(state) { return function (userId) { var getTemporary = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; userId = parseInt(userId); if (userId <= 0) { if (getTemporary) { userId = 0; } else { return null; } } if (!getTemporary && (!state.collection[userId] || !state.collection[userId].init)) { return null; } if (!state.collection[userId]) { return _this.getElementState({ id: userId }); } return state.collection[userId]; }; }, getBlank: function getBlank(state) { return function (params) { return _this.getElementState(params); }; } }; } }, { key: "getActions", value: function getActions() { var _this2 = this; return { set: function set(store, payload) { if (payload instanceof Array) { payload = payload.map(function (user) { return Object.assign({}, _this2.getElementState(), _this2.validate(Object.assign({}, user), { host: store.state.host }), { init: true }); }); } else { var result = []; result.push(Object.assign({}, _this2.getElementState(), _this2.validate(Object.assign({}, payload), { host: store.state.host }), { init: true })); payload = result; } store.commit('set', payload); }, update: function update(store, payload) { payload.id = parseInt(payload.id); if (typeof store.state.collection[payload.id] === 'undefined' || store.state.collection[payload.id].init === false) { return true; } store.commit('update', { id: payload.id, fields: _this2.validate(Object.assign({}, payload.fields), { host: store.state.host }) }); return true; }, delete: function _delete(store, payload) { store.commit('delete', payload.id); return true; }, saveState: function saveState(store, payload) { store.commit('saveState', {}); return true; } }; } }, { key: "getMutations", value: function getMutations() { var _this3 = this; return { set: function set(state, payload) { var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { var _loop = function _loop() { var element = _step.value; _this3.initCollection(state, { id: element.id }); state.collection[element.id] = element; var status = im_lib_utils.Utils.user.getOnlineStatus(element); if (status.isOnline) { state.collection[element.id].isOnline = true; _this3.addToOnlineList(state, element.id); } var mobileStatus = im_lib_utils.Utils.user.isMobileActive(element); if (mobileStatus) { state.collection[element.id].isMobileOnline = true; _this3.addToMobileOnlineList(state, element.id); } if (element.birthday) { var today = im_lib_utils.Utils.date.format(new Date(), "d-m"); if (element.birthday === today) { state.collection[element.id].isBirthday = true; var timeToNextMidnight = _this3.getTimeToNextMidnight(); setTimeout(function () { state.collection[element.id].isBirthday = false; }, timeToNextMidnight); } } if (element.absent) { element.isAbsent = true; if (!state.absentList.includes(element.id)) { _this3.addToAbsentList(state, element.id); var _timeToNextMidnight = _this3.getTimeToNextMidnight(); var timeToNextDay = 1000 * 60 * 60 * 24; setTimeout(function () { setInterval(function () { return _this3.startAbsentCheckInterval(state); }, timeToNextDay); }, _timeToNextMidnight); } } _this3.saveState(state); }; for (var _iterator = payload[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { _loop(); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } }, update: function update(state, payload) { _this3.initCollection(state, payload); var lastActivityDate = state.collection[payload.id].lastActivityDate.getTime(); var newActivityDate = payload.fields.lastActivityDate.getTime(); if (newActivityDate > lastActivityDate) { var status = im_lib_utils.Utils.user.getOnlineStatus(payload.fields); if (status.isOnline) { state.collection[payload.id].isOnline = true; _this3.addToOnlineList(state, payload.fields.id); } } if (state.collection[payload.id].mobileLastDate !== payload.fields.mobileLastDate) { var mobileStatus = im_lib_utils.Utils.user.isMobileActive(payload.fields); if (mobileStatus) { state.collection[payload.id].isMobileOnline = true; _this3.addToMobileOnlineList(state, payload.fields.id); } } state.collection[payload.id] = Object.assign(state.collection[payload.id], payload.fields); _this3.saveState(state); }, delete: function _delete(state, payload) { delete state.collection[payload.id]; _this3.saveState(state); }, saveState: function saveState(state, payload) { _this3.saveState(state); } }; } }, { key: "initCollection", value: function initCollection(state, payload) { if (typeof state.collection[payload.id] !== 'undefined') { return true; } ui_vue.Vue.set(state.collection, payload.id, this.getElementState()); return true; } }, { key: "getSaveUserList", value: function getSaveUserList() { if (!this.db) { return []; } if (!this.store.getters['messages/getSaveUserList']) { return []; } var list = this.store.getters['messages/getSaveUserList'](); if (!list) { return []; } return list; } }, { key: "getSaveTimeout", value: function getSaveTimeout() { return 250; } }, { key: "saveState", value: function saveState(state) { var _this4 = this; if (!this.isSaveAvailable()) { return false; } babelHelpers.get(babelHelpers.getPrototypeOf(UsersModel.prototype), "saveState", this).call(this, function () { var list = _this4.getSaveUserList(); if (!list) { return false; } var storedState = { collection: {} }; var exceptionList = { absent: true, idle: true, mobileLastDate: true, lastActivityDate: true }; for (var chatId in list) { if (!list.hasOwnProperty(chatId)) { continue; } list[chatId].forEach(function (userId) { if (!state.collection[userId]) { return false; } storedState.collection[userId] = _this4.cloneState(state.collection[userId], exceptionList); }); } return storedState; }); } }, { key: "validate", value: function validate(fields) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var result = {}; options.host = options.host || this.getState().host; if (typeof fields.id === "number" || typeof fields.id === "string") { result.id = parseInt(fields.id); } if (typeof fields.first_name !== "undefined") { fields.firstName = fields.first_name; } if (typeof fields.last_name !== "undefined") { fields.lastName = fields.last_name; } if (typeof fields.name === "string" || typeof fields.name === "number") { result.name = fields.name.toString(); if (typeof fields.firstName !== "undefined" && !fields.firstName) { var elementsOfName = fields.name.split(' '); if (elementsOfName.length > 1) { delete elementsOfName[elementsOfName.length - 1]; fields.firstName = elementsOfName.join(' ').trim(); } else { fields.firstName = result.name; } } if (typeof fields.lastName !== "undefined" && !fields.lastName) { var _elementsOfName = fields.name.split(' '); if (_elementsOfName.length > 1) { fields.lastName = _elementsOfName[_elementsOfName.length - 1]; } else { fields.lastName = ''; } } } if (typeof fields.firstName === "string" || typeof fields.name === "number") { result.firstName = fields.firstName.toString(); } if (typeof fields.lastName === "string" || typeof fields.name === "number") { result.lastName = fields.lastName.toString(); } if (typeof fields.work_position !== "undefined") { fields.workPosition = fields.work_position; } if (typeof fields.workPosition === "string" || typeof fields.workPosition === "number") { result.workPosition = fields.workPosition.toString(); } if (typeof fields.color === "string") { result.color = fields.color; } if (typeof fields.avatar === 'string') { var avatar; if (!fields.avatar || fields.avatar.endsWith('/js/im/images/blank.gif')) { avatar = ''; } else if (fields.avatar.startsWith('http')) { avatar = fields.avatar; } else { avatar = options.host + fields.avatar; } if (avatar) { result.avatar = encodeURI(avatar); } } if (typeof fields.gender !== 'undefined') { result.gender = fields.gender === 'F' ? 'F' : 'M'; } if (typeof fields.birthday === "string") { result.birthday = fields.birthday; } if (typeof fields.extranet === "boolean") { result.extranet = fields.extranet; } if (typeof fields.network === "boolean") { result.network = fields.network; } if (typeof fields.bot === "boolean") { result.bot = fields.bot; } if (typeof fields.connector === "boolean") { result.connector = fields.connector; } if (typeof fields.external_auth_id !== "undefined") { fields.externalAuthId = fields.external_auth_id; } if (typeof fields.externalAuthId === "string" && fields.externalAuthId) { result.externalAuthId = fields.externalAuthId; } if (typeof fields.status === "string") { result.status = fields.status; } if (typeof fields.idle !== "undefined") { result.idle = im_lib_utils.Utils.date.cast(fields.idle, false); } if (typeof fields.last_activity_date !== "undefined") { fields.lastActivityDate = fields.last_activity_date; } if (typeof fields.lastActivityDate !== "undefined") { result.lastActivityDate = im_lib_utils.Utils.date.cast(fields.lastActivityDate, false); } if (typeof fields.mobile_last_date !== "undefined") { fields.mobileLastDate = fields.mobile_last_date; } if (typeof fields.mobileLastDate !== "undefined") { result.mobileLastDate = im_lib_utils.Utils.date.cast(fields.mobileLastDate, false); } if (typeof fields.absent !== "undefined") { result.absent = im_lib_utils.Utils.date.cast(fields.absent, false); } if (typeof fields.departments !== 'undefined') { result.departments = []; if (fields.departments instanceof Array) { fields.departments.forEach(function (departmentId) { departmentId = parseInt(departmentId); if (departmentId > 0) { result.departments.push(departmentId); } }); } } if (babelHelpers.typeof(fields.phones) === 'object' && fields.phones) { result.phones = {}; if (typeof fields.phones.work_phone !== "undefined") { fields.phones.workPhone = fields.phones.work_phone; } if (typeof fields.phones.workPhone === 'string' || typeof fields.phones.workPhone === 'number') { result.phones.workPhone = fields.phones.workPhone.toString(); } if (typeof fields.phones.personal_mobile !== "undefined") { fields.phones.personalMobile = fields.phones.personal_mobile; } if (typeof fields.phones.personalMobile === 'string' || typeof fields.phones.personalMobile === 'number') { result.phones.personalMobile = fields.phones.personalMobile.toString(); } if (typeof fields.phones.personal_phone !== "undefined") { fields.phones.personalPhone = fields.phones.personal_phone; } if (typeof fields.phones.personalPhone === 'string' || typeof fields.phones.personalPhone === 'number') { result.phones.personalPhone = fields.phones.personalPhone.toString(); } if (typeof fields.phones.inner_phone !== "undefined") { fields.phones.innerPhone = fields.phones.inner_phone; } if (typeof fields.phones.innerPhone === 'string' || typeof fields.phones.innerPhone === 'number') { result.phones.innerPhone = fields.phones.innerPhone.toString(); } } return result; } }, { key: "addToOnlineList", value: function addToOnlineList(state, id) { if (!state.onlineList.includes(id)) { state.onlineList.push(id); } } }, { key: "addToMobileOnlineList", value: function addToMobileOnlineList(state, id) { if (!state.mobileOnlineList.includes(id)) { state.mobileOnlineList.push(id); } } }, { key: "addToAbsentList", value: function addToAbsentList(state, id) { if (!state.absentList.includes(id)) { state.absentList.push(id); } } }, { key: "getTimeToNextMidnight", value: function getTimeToNextMidnight() { var nextMidnight = new Date(new Date().setHours(24, 0, 0)).getTime(); return nextMidnight - new Date(); } }, { key: "startAbsentCheckInterval", value: function startAbsentCheckInterval(state) { var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { var _loop2 = function _loop2() { var userId = _step2.value; var user = state.collection[userId]; if (!user) { return "continue"; } var currentTime = new Date().getTime(); var absentEnd = new Date(state.collection[userId].absent).getTime(); if (absentEnd <= currentTime) { state.absentList = state.absentList.filter(function (element) { return element !== userId; }); user.isAbsent = false; } }; for (var _iterator2 = state.absentList[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var _ret = _loop2(); if (_ret === "continue") continue; } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2.return != null) { _iterator2.return(); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } } }, { key: "startOnlineCheckInterval", value: function startOnlineCheckInterval() { var _this5 = this; var intervalTime = 60000; setInterval(function () { var _iteratorNormalCompletion3 = true; var _didIteratorError3 = false; var _iteratorError3 = undefined; try { var _loop3 = function _loop3() { var userId = _step3.value; var user = _this5.store.state.users.collection[userId]; if (!user) { return "continue"; } var status = im_lib_utils.Utils.user.getOnlineStatus(user); if (status.isOnline) { user.isOnline = true; } else { user.isOnline = false; _this5.store.state.users.onlineList = _this5.store.state.users.onlineList.filter(function (element) { return element !== userId; }); } }; for (var _iterator3 = _this5.store.state.users.onlineList[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { var _ret2 = _loop3(); if (_ret2 === "continue") continue; } } catch (err) { _didIteratorError3 = true; _iteratorError3 = err; } finally { try { if (!_iteratorNormalCompletion3 && _iterator3.return != null) { _iterator3.return(); } } finally { if (_didIteratorError3) { throw _iteratorError3; } } } var _iteratorNormalCompletion4 = true; var _didIteratorError4 = false; var _iteratorError4 = undefined; try { var _loop4 = function _loop4() { var userId = _step4.value; var user = _this5.store.state.users.collection[userId]; if (!user) { return "continue"; } var mobileStatus = im_lib_utils.Utils.user.isMobileActive(user); if (mobileStatus) { user.isMobileOnline = true; } else { user.isMobileOnline = false; _this5.store.state.users.mobileOnlineList = _this5.store.state.users.mobileOnlineList.filter(function (element) { return element !== userId; }); } }; for (var _iterator4 = _this5.store.state.users.mobileOnlineList[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { var _ret3 = _loop4(); if (_ret3 === "continue") continue; } } catch (err) { _didIteratorError4 = true; _iteratorError4 = err; } finally { try { if (!_iteratorNormalCompletion4 && _iterator4.return != null) { _iterator4.return(); } } finally { if (_didIteratorError4) { throw _iteratorError4; } } } }, intervalTime); } }]); return UsersModel; }(ui_vue_vuex.VuexBuilderModel); /** * Bitrix Messenger * File model (Vuex Builder model) * * @package bitrix * @subpackage im * @copyright 2001-2019 Bitrix */ var FilesModel = /*#__PURE__*/ function (_VuexBuilderModel) { babelHelpers.inherits(FilesModel, _VuexBuilderModel); function FilesModel() { babelHelpers.classCallCheck(this, FilesModel); return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(FilesModel).apply(this, arguments)); } babelHelpers.createClass(FilesModel, [{ key: "getName", value: function getName() { return 'files'; } }, { key: "getState", value: function getState() { return { created: 0, host: this.getVariable('host', location.protocol + '//' + location.host), collection: {}, index: {} }; } }, { key: "getElementState", value: function getElementState() { var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var _params$id = params.id, id = _params$id === void 0 ? 0 : _params$id, _params$chatId = params.chatId, chatId = _params$chatId === void 0 ? 0 : _params$chatId, _params$name = params.name, name = _params$name === void 0 ? this.getVariable('default.name', '') : _params$name; return { id: id, chatId: chatId, name: name, templateId: id, date: new Date(), type: 'file', extension: "", icon: "empty", size: 0, image: false, status: im_const.FileStatus.done, progress: 100, authorId: 0, authorName: "", urlPreview: "", urlShow: "", urlDownload: "", init: false }; } }, { key: "getGetters", value: function getGetters() { var _this = this; return { get: function get(state) { return function (chatId, fileId) { var getTemporary = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; if (!chatId || !fileId) { return null; } if (!state.index[chatId] || !state.index[chatId][fileId]) { return null; } if (!getTemporary && !state.index[chatId][fileId].init) { return null; } return state.index[chatId][fileId]; }; }, getList: function getList(state) { return function (chatId) { if (!state.index[chatId]) { return null; } return state.index[chatId]; }; }, getBlank: function getBlank(state) { return function (params) { return _this.getElementState(params); }; } }; } }, { key: "getActions", value: function getActions() { var _this2 = this; return { add: function add(store, payload) { var result = _this2.validate(Object.assign({}, payload), { host: store.state.host }); result.id = 'temporary' + new Date().getTime() + store.state.created; result.templateId = result.id; result.init = true; store.commit('add', Object.assign({}, _this2.getElementState(), result)); return result.id; }, set: function set(store, payload) { if (payload instanceof Array) { payload = payload.map(function (file) { var result = _this2.validate(Object.assign({}, file), { host: store.state.host }); result.templateId = result.id; return Object.assign({}, _this2.getElementState(), result, { init: true }); }); } else { var result = _this2.validate(Object.assign({}, payload), { host: store.state.host }); result.templateId = result.id; payload = []; payload.push(Object.assign({}, _this2.getElementState(), result, { init: true })); } store.commit('set', { insertType: im_const.MutationType.setAfter, data: payload }); }, setBefore: function setBefore(store, payload) { if (payload instanceof Array) { payload = payload.map(function (file) { var result = _this2.validate(Object.assign({}, file), { host: store.state.host }); result.templateId = result.id; return Object.assign({}, _this2.getElementState(), result, { init: true }); }); } else { var result = _this2.validate(Object.assign({}, payload), { host: store.state.host }); result.templateId = result.id; payload = []; payload.push(Object.assign({}, _this2.getElementState(), result, { init: true })); } store.commit('set', { actionName: 'setBefore', insertType: im_const.MutationType.setBefore, data: payload }); }, update: function update(store, payload) { var result = _this2.validate(Object.assign({}, payload.fields), { host: store.state.host }); store.commit('initCollection', { chatId: payload.chatId }); var index = store.state.collection[payload.chatId].findIndex(function (el) { return el.id === payload.id; }); if (index < 0) { return false; } store.commit('update', { id: payload.id, chatId: payload.chatId, index: index, fields: result }); if (payload.fields.blink) { setTimeout(function () { store.commit('update', { id: payload.id, chatId: payload.chatId, fields: { blink: false } }); }, 1000); } return true; }, delete: function _delete(store, payload) { store.commit('delete', { id: payload.id, chatId: payload.chatId }); return true; }, saveState: function saveState(store, payload) { store.commit('saveState', {}); return true; } }; } }, { key: "getMutations", value: function getMutations() { var _this3 = this; return { initCollection: function initCollection(state, payload) { _this3.initCollection(state, payload); }, add: function add(state, payload) { _this3.initCollection(state, payload); state.collection[payload.chatId].push(payload); state.index[payload.chatId][payload.id] = payload; state.created += 1; _this3.saveState(state); }, set: function set(state, payload) { var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { var _loop = function _loop() { var element = _step.value; _this3.initCollection(state, { chatId: element.chatId }); var index = state.collection[element.chatId].findIndex(function (el) { return el.id === element.id; }); if (index > -1) { delete element.templateId; state.collection[element.chatId][index] = Object.assign(state.collection[element.chatId][index], element); } else if (payload.insertType === im_const.MutationType.setBefore) { state.collection[element.chatId].unshift(element); } else { state.collection[element.chatId].push(element); } state.index[element.chatId][element.id] = element; _this3.saveState(state); }; for (var _iterator = payload.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { _loop(); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } }, update: function update(state, payload) { _this3.initCollection(state, payload); var index = -1; if (typeof payload.index !== 'undefined' && state.collection[payload.chatId][payload.index]) { index = payload.index; } else { index = state.collection[payload.chatId].findIndex(function (el) { return el.id === payload.id; }); } if (index >= 0) { delete payload.fields.templateId; var element = Object.assign(state.collection[payload.chatId][index], payload.fields); state.collection[payload.chatId][index] = element; state.index[payload.chatId][element.id] = element; _this3.saveState(state); } }, delete: function _delete(state, payload) { _this3.initCollection(state, payload); state.collection[payload.chatId] = state.collection[payload.chatId].filter(function (element) { return element.id !== payload.id; }); delete state.index[payload.chatId][payload.id]; _this3.saveState(state); }, saveState: function saveState(state, payload) { _this3.saveState(state); } }; } }, { key: "initCollection", value: function initCollection(state, payload) { if (typeof state.collection[payload.chatId] !== 'undefined') { return true; } ui_vue.Vue.set(state.collection, payload.chatId, []); ui_vue.Vue.set(state.index, payload.chatId, {}); return true; } }, { key: "getLoadedState", value: function getLoadedState(state) { if (!state || babelHelpers.typeof(state) !== 'object') { return state; } if (babelHelpers.typeof(state.collection) !== 'object') { return state; } state.index = {}; var _loop2 = function _loop2(chatId) { if (!state.collection.hasOwnProperty(chatId)) { return "continue"; } state.index[chatId] = {}; state.collection[chatId].filter(function (file) { return file != null; }).forEach(function (file) { state.index[chatId][file.id] = file; }); }; for (var chatId in state.collection) { var _ret = _loop2(chatId); if (_ret === "continue") continue; } return state; } }, { key: "getSaveFileList", value: function getSaveFileList() { if (!this.db) { return []; } if (!this.store.getters['messages/getSaveFileList']) { return []; } var list = this.store.getters['messages/getSaveFileList'](); if (!list) { return []; } return list; } }, { key: "getSaveTimeout", value: function getSaveTimeout() { return 250; } }, { key: "saveState", value: function saveState(state) { var _this4 = this; if (!this.isSaveAvailable()) { return false; } babelHelpers.get(babelHelpers.getPrototypeOf(FilesModel.prototype), "saveState", this).call(this, function () { var list = _this4.getSaveFileList(); if (!list) { return false; } var storedState = { collection: {} }; var _loop3 = function _loop3(chatId) { if (!list.hasOwnProperty(chatId)) { return "continue"; } list[chatId].forEach(function (fileId) { if (!state.index[chatId]) { return false; } if (!state.index[chatId][fileId]) { return false; } if (!storedState.collection[chatId]) { storedState.collection[chatId] = []; } storedState.collection[chatId].push(state.index[chatId][fileId]); }); }; for (var chatId in list) { var _ret2 = _loop3(chatId); if (_ret2 === "continue") continue; } return storedState; }); } }, { key: "validate", value: function validate(fields) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var result = {}; options.host = options.host || this.getState().host; if (typeof fields.id === "number") { result.id = fields.id; } else if (typeof fields.id === "string") { if (fields.id.startsWith('temporary')) { result.id = fields.id; } else { result.id = parseInt(fields.id); } } if (typeof fields.templateId === "number") { result.templateId = fields.templateId; } else if (typeof fields.templateId === "string") { if (fields.templateId.startsWith('temporary')) { result.templateId = fields.templateId; } else { result.templateId = parseInt(fields.templateId); } } if (typeof fields.chatId === "number" || typeof fields.chatId === "string") { result.chatId = parseInt(fields.chatId); } if (typeof fields.date !== "undefined") { result.date = im_lib_utils.Utils.date.cast(fields.date); } if (typeof fields.type === "string") { result.type = fields.type; } if (typeof fields.extension === "string") { result.extension = fields.extension.toString(); if (result.type === 'image') { result.icon = 'img'; } else if (result.type === 'video') { result.icon = 'mov'; } else { result.icon = FilesModel.getIconType(result.extension); } } if (typeof fields.name === "string" || typeof fields.name === "number") { result.name = fields.name.toString(); } if (typeof fields.size === "number" || typeof fields.size === "string") { result.size = parseInt(fields.size); } if (typeof fields.image === 'boolean') { result.image = false; } else if (babelHelpers.typeof(fields.image) === 'object' && fields.image) { result.image = { width: 0, height: 0 }; if (typeof fields.image.width === "string" || typeof fields.image.width === "number") { result.image.width = parseInt(fields.image.width); } if (typeof fields.image.height === "string" || typeof fields.image.height === "number") { result.image.height = parseInt(fields.image.height); } if (result.image.width <= 0 || result.image.height <= 0) { result.image = false; } } if (typeof fields.status === "string" && typeof im_const.FileStatus[fields.status] !== 'undefined') { result.status = fields.status; } if (typeof fields.progress === "number" || typeof fields.progress === "string") { result.progress = parseInt(fields.progress); } if (typeof fields.authorId === "number" || typeof fields.authorId === "string") { result.authorId = parseInt(fields.authorId); } if (typeof fields.authorName === "string" || typeof fields.authorName === "number") { result.authorName = fields.authorName.toString(); } if (typeof fields.urlPreview === 'string') { if (!fields.urlPreview || fields.urlPreview.startsWith('http') || fields.urlPreview.startsWith('bx') || fields.urlPreview.startsWith('file')) { result.urlPreview = fields.urlPreview; } else { result.urlPreview = options.host + fields.urlPreview; } } if (typeof fields.urlDownload === 'string') { if (!fields.urlDownload || fields.urlDownload.startsWith('http') || fields.urlDownload.startsWith('bx') || fields.urlPreview.startsWith('file')) { result.urlDownload = fields.urlDownload; } else { result.urlDownload = options.host + fields.urlDownload; } } if (typeof fields.urlShow === 'string') { if (!fields.urlShow || fields.urlShow.startsWith('http') || fields.urlShow.startsWith('bx') || fields.urlShow.startsWith('file')) { result.urlShow = fields.urlShow; } else { result.urlShow = options.host + fields.urlShow; } } return result; } }], [{ key: "getType", value: function getType(type) { type = type.toString().toLowerCase().split('.').splice(-1)[0]; switch (type) { case 'png': case 'jpe': case 'jpg': case 'jpeg': case 'gif': case 'heic': case 'bmp': return im_const.FileType.image; case 'mp4': case 'mkv': case 'webm': case 'mpeg': case 'hevc': case 'avi': case '3gp': case 'flv': case 'm4v': case 'ogg': case 'wmv': case 'mov': return im_const.FileType.video; case 'mp3': return im_const.FileType.audio; } return im_const.FileType.file; } }, { key: "getIconType", value: function getIconType(extension) { var icon = 'empty'; switch (extension.toString()) { case 'png': case 'jpe': case 'jpg': case 'jpeg': case 'gif': case 'heic': case 'bmp': icon = 'img'; break; case 'mp4': case 'mkv': case 'webm': case 'mpeg': case 'hevc': case 'avi': case '3gp': case 'flv': case 'm4v': case 'ogg': case 'wmv': case 'mov': icon = 'mov'; break; case 'txt': icon = 'txt'; break; case 'doc': case 'docx': icon = 'doc'; break; case 'xls': case 'xlsx': icon = 'xls'; break; case 'php': icon = 'php'; break; case 'pdf': icon = 'pdf'; break; case 'ppt': case 'pptx': icon = 'ppt'; break; case 'rar': icon = 'rar'; break; case 'zip': case '7z': case 'tar': case 'gz': case 'gzip': icon = 'zip'; break; case 'set': icon = 'set'; break; case 'conf': case 'ini': case 'plist': icon = 'set'; break; } return icon; } }]); return FilesModel; }(ui_vue_vuex.VuexBuilderModel); /** * Bitrix Messenger * User model (Vuex Builder model) * * @package bitrix * @subpackage im * @copyright 2001-2019 Bitrix */ var RecentModel = /*#__PURE__*/ function (_VuexBuilderModel) { babelHelpers.inherits(RecentModel, _VuexBuilderModel); function RecentModel() { babelHelpers.classCallCheck(this, RecentModel); return babelHelpers.possibleConstructorReturn(this, babelHelpers.getPrototypeOf(RecentModel).apply(this, arguments)); } babelHelpers.createClass(RecentModel, [{ key: "getName", value: function getName() { return 'recent'; } }, { key: "getState", value: function getState() { return { host: this.getVariable('host', location.protocol + '//' + location.host), collection: { pinned: [], general: [] } }; } }, { key: "getElementState", value: function getElementState() { return { id: 0, templateId: '', template: 'item', chatType: 'chat', sectionCode: 'general', avatar: '', color: '#048bd0', title: '', message: { id: 0, text: '', date: new Date() }, counter: 0, pinned: false, chatId: 0, userId: 0 }; } }, { key: "getGetters", value: function getGetters() { var _this = this; return { get: function get(state) { return function (dialogId) { return _this.findItem(state.collection, dialogId); }; } }; } }, { key: "getActions", value: function getActions() { var _this2 = this; return { set: function set(store, payload) { var result = {}; if (payload.pinned instanceof Array) { result.pinned = payload.pinned.map(function (recentItem) { return _this2.prepareItem(recentItem, { host: store.state.host, sectionCode: 'pinned' }); }); } else if (typeof payload.pinned !== 'undefined') { var pinned = []; pinned.push(_this2.prepareItem(payload.pinned, { host: store.state.host, sectionCode: 'pinned' })); result.pinned = pinned; } if (payload.general instanceof Array) { result.general = payload.general.map(function (recentItem) { return _this2.prepareItem(recentItem, { host: store.state.host }); }); } else if (typeof payload.general !== 'undefined') { var general = []; general.push(_this2.prepareItem(payload.general, { host: store.state.host })); result.general = general; } store.commit('set', result); }, updatePlaceholders: function updatePlaceholders(store, payload) { if (!(payload.items instanceof Array)) { return false; } payload.items = payload.items.map(function (element) { return _this2.prepareItem(element); }); payload.items.forEach(function (element, index) { var placeholderId = 'placeholder' + (payload.firstMessage + index); var existingPlaceholder = _this2.findItem(store.state.collection, placeholderId, 'templateId'); var existingItem = _this2.findItem(store.state.collection, element.id); if (existingItem.element) { store.commit('update', { index: existingItem.index, fields: Object.assign({}, element), section: 'general' }); store.commit('delete', { index: existingPlaceholder.index, section: 'general' }); } else { store.commit('update', { index: existingPlaceholder.index, fields: Object.assign({}, element), section: 'general' }); } }); }, update: function update(store, payload) { if (babelHelpers.typeof(payload) !== 'object' || payload instanceof Array || !payload.id || !payload.fields) { return false; } if (typeof payload.id === 'string' && !payload.id.startsWith('chat') && payload.id !== 'notify') { payload.id = parseInt(payload.id); } var existingItem = _this2.findItem(store.state.collection, payload.id); if (!existingItem.element) { return false; } store.commit('update', { index: existingItem.index, fields: Object.assign({}, _this2.validate(payload.fields)), section: existingItem.element.sectionCode }); }, pin: function pin(store, payload) { if (babelHelpers.typeof(payload) !== 'object' || payload instanceof Array || !payload.id || typeof payload.action !== 'boolean') { return false; } if (typeof payload.id === 'string' && !payload.id.startsWith('chat') && payload.id !== 'notify') { payload.id = parseInt(payload.id); } var existingItem = _this2.findItem(store.state.collection, payload.id, undefined, payload.action ? 'general' : 'pinned'); if (!existingItem.element) { return true; } if (payload.action) { store.state.collection.pinned.push(Object.assign({}, existingItem.element, { sectionCode: 'pinned', pinned: true })); store.state.collection.pinned.sort(_this2.sortListByMessageDate); store.commit('delete', { index: existingItem.index, section: 'general' }); } else { store.state.collection.general.push(Object.assign({}, existingItem.element, { sectionCode: 'general', pinned: false })); store.state.collection.general.sort(_this2.sortListByMessageDate); store.commit('delete', { index: existingItem.index, section: 'pinned' }); } }, clearPlaceholders: function clearPlaceholders(store, payload) { store.state.collection.general = store.state.collection.general.filter(function (element) { return !element.id.toString().startsWith('placeholder'); }); }, delete: function _delete(store, payload) { if (babelHelpers.typeof(payload) !== 'object' || payload instanceof Array || !payload.id) { return false; } if (typeof payload.id === 'string' && !payload.id.startsWith('chat') && payload.id !== 'notify') { payload.id = parseInt(payload.id); } var existingItem = _this2.findItem(store.state.collection, payload.id); if (!existingItem.element) { return false; } store.commit('delete', { index: existingItem.index, section: existingItem.element.sectionCode }); } }; } }, { key: "getMutations", value: function getMutations() { var _this3 = this; return { set: function set(state, payload) { if (payload.general instanceof Array) { payload.general.forEach(function (element) { var _this3$initCollection = _this3.initCollection(state, element, 'general'), index = _this3$initCollection.index, alreadyExists = _this3$initCollection.alreadyExists; if (alreadyExists) { state.collection.general[index] = Object.assign({}, state.collection.general[index], element); } }); } if (payload.pinned instanceof Array) { payload.pinned.forEach(function (element) { var _this3$initCollection2 = _this3.initCollection(state, element, 'pinned'), index = _this3$initCollection2.index, alreadyExists = _this3$initCollection2.alreadyExists; if (alreadyExists) { state.collection.pinned[index] = Object.assign({}, state.collection.pinned[index], element); } }); } }, update: function update(state, payload) { if (!payload || payload instanceof Array || babelHelpers.typeof(payload.fields) !== 'object' || typeof payload.index !== 'number' || typeof payload.section !== 'string') { return false; } state.collection[payload.section][payload.index] = Object.assign({}, state.collection[payload.section][payload.index], payload.fields); state.collection[payload.section].sort(_this3.sortListByMessageDate); }, delete: function _delete(state, payload) { if (!payload || payload instanceof Array || typeof payload.index !== 'number' || typeof payload.section !== 'string') { return false; } state.collection[payload.section].splice(payload.index, 1); } }; } }, { key: "initCollection", value: function initCollection(state, payload, section) { var existingItem = this.findItem(state.collection, payload.id, undefined, section); if (existingItem.element) { return { index: existingItem.index, alreadyExists: true }; } var newLength = state.collection[section].push(Object.assign({}, this.getElementState(), payload)); return { index: newLength - 1, alreadyExists: false }; } }, { key: "validate", value: function validate(fields) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var result = {}; if (typeof fields.id === "number" || typeof fields.id === "string") { result.id = fields.id; } if (typeof fields.templateId === 'string') { result.templateId = fields.templateId; } if (typeof fields.template === 'string') { result.template = fields.template; } if (typeof fields.type === "string") { if (fields.type === 'chat') { if (fields.chat.type === 'open') { result.chatType = 'open'; } else if (fields.chat.type === 'chat') { result.chatType = 'chat'; } } else if (fields.type === 'user') { result.chatType = 'user'; } else if (fields.type === 'notification') { result.chatType = 'notification'; fields.title = 'Notifications'; } } if (typeof fields.avatar === 'string') { var avatar; if (!fields.avatar || fields.avatar.endsWith('/js/im/images/blank.gif')) { avatar = ''; } else if (fields.avatar.startsWith('http')) { avatar = fields.avatar; } else { avatar = options.host + fields.avatar; } if (avatar) { result.avatar = encodeURI(avatar); } } if (typeof fields.color === 'string') { result.color = fields.color; } if (typeof fields.title === "string") { result.title = fields.title; } if (babelHelpers.typeof(fields.message) === "object" && !(fields.message instanceof Array) && fields.message !== null) { result.message = fields.message; } if (typeof fields.counter === 'number') { result.counter = fields.counter; } if (typeof fields.pinned === 'boolean') { result.pinned = fields.pinned; } if (typeof fields.chatId === 'number') { result.chatId = fields.chatId; } if (typeof fields.userId === 'number') { result.userId = fields.userId; } return result; } }, { key: "sortListByMessageDate", value: function sortListByMessageDate(a, b) { if (a.message && b.message) { var timestampA = new Date(a.message.date).getTime(); var timestampB = new Date(b.message.date).getTime(); return timestampB - timestampA; } } }, { key: "prepareItem", value: function prepareItem(item) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var result = this.validate(Object.assign({}, item)); return Object.assign({}, this.getElementState(), result, options); } }, { key: "findItem", value: function findItem(store, value) { var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'id'; var section = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'general'; var result = {}; if (babelHelpers.typeof(store[section]) === undefined) { return result; } var elementIndex = store[section].findIndex(function (element, index) { return element[key] === value; }); if (elementIndex !== -1) { result.index = elementIndex; result.element = store[section][elementIndex]; return result; } return result; } }]); return RecentModel; }(ui_vue_vuex.VuexBuilderModel); exports.ApplicationModel = ApplicationModel; exports.MessagesModel = MessagesModel; exports.DialoguesModel = DialoguesModel; exports.UsersModel = UsersModel; exports.FilesModel = FilesModel; exports.RecentModel = RecentModel; }((this.BX.Messenger.Model = this.BX.Messenger.Model || {}),BX.Messenger.Const,BX,BX,BX.Messenger.Lib)); //# sourceMappingURL=registry.bundle.js.map dist/registry.bundle.min.js 0000664 00000205470 14773234674 0012002 0 ustar 00 this.BX=this.BX||{};this.BX.Messenger=this.BX.Messenger||{};(function(e,t,i,n,a){"use strict";var r=function(e){babelHelpers.inherits(i,e);function i(){babelHelpers.classCallCheck(this,i);return babelHelpers.possibleConstructorReturn(this,babelHelpers.getPrototypeOf(i).apply(this,arguments))}babelHelpers.createClass(i,[{key:"getName",value:function e(){return"application"}},{key:"getState",value:function e(){return{common:{host:this.getVariable("common.host",location.protocol+"//"+location.host),siteId:this.getVariable("common.siteId","default"),userId:this.getVariable("common.userId",0),languageId:this.getVariable("common.languageId","en")},dialog:{dialogId:this.getVariable("dialog.dialogId","0"),chatId:this.getVariable("dialog.chatId",0),diskFolderId:this.getVariable("dialog.diskFolderId",0),messageLimit:this.getVariable("dialog.messageLimit",20),enableReadMessages:this.getVariable("dialog.enableReadMessages",true),messageExtraCount:0},disk:{enabled:false,maxFileSize:5242880},mobile:{keyboardShow:false},device:{type:this.getVariable("device.type",t.DeviceType.desktop),orientation:this.getVariable("device.orientation",t.DeviceOrientation.portrait)},options:{quoteEnable:this.getVariable("options.quoteEnable",true),quoteFromRight:this.getVariable("options.quoteFromRight",true),autoplayVideo:this.getVariable("options.autoplayVideo",true),darkBackground:this.getVariable("options.darkBackground",false),showSmiles:false},error:{active:false,code:"",description:""}}}},{key:"getStateSaveException",value:function e(){return Object.assign({common:this.getVariable("saveException.common",null),dialog:this.getVariable("saveException.dialog",null),mobile:this.getVariable("saveException.mobile",null),device:this.getVariable("saveException.device",null),error:this.getVariable("saveException.error",null)})}},{key:"getActions",value:function e(){var t=this;return{set:function e(i,n){i.commit("set",t.validate(n))},showSmiles:function e(t,i){t.commit("showSmiles")},hideSmiles:function e(t,i){t.commit("hideSmiles")}}}},{key:"getMutations",value:function e(){var t=this;return{set:function e(i,n){var a=false;for(var r in n){if(!n.hasOwnProperty(r)){continue}for(var o in n[r]){if(!n[r].hasOwnProperty(o)){continue}i[r][o]=n[r][o];a=true}}if(a&&t.isSaveNeeded(n)){t.saveState(i)}},increaseDialogExtraCount:function e(t){var i=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var n=i.count,a=n===void 0?1:n;t.dialog.messageExtraCount+=a},decreaseDialogExtraCount:function e(t){var i=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var n=i.count,a=n===void 0?1:n;var r=t.dialog.messageExtraCount-a;if(r<=0){r=0}t.dialog.messageExtraCount=r},clearDialogExtraCount:function e(t){t.dialog.messageExtraCount=0},showSmiles:function e(t){t.options.showSmiles=true},hideSmiles:function e(t){t.options.showSmiles=false}}}},{key:"validate",value:function e(i){var n={};if(babelHelpers.typeof(i.common)==="object"&&i.common){n.common={};if(typeof i.common.userId==="number"){n.common.userId=i.common.userId}if(typeof i.common.languageId==="string"){n.common.languageId=i.common.languageId}}if(babelHelpers.typeof(i.dialog)==="object"&&i.dialog){n.dialog={};if(typeof i.dialog.dialogId==="number"){n.dialog.dialogId=i.dialog.dialogId.toString();n.dialog.chatId=0}else if(typeof i.dialog.dialogId==="string"){n.dialog.dialogId=i.dialog.dialogId;if(typeof i.dialog.chatId!=="number"){var a=i.dialog.dialogId;if(a.startsWith("chat")){a=i.dialog.dialogId.substr(4)}a=parseInt(a);n.dialog.chatId=!isNaN(a)?a:0;i.dialog.chatId=n.dialog.chatId}}if(typeof i.dialog.chatId==="number"){n.dialog.chatId=i.dialog.chatId}if(typeof i.dialog.diskFolderId==="number"){n.dialog.diskFolderId=i.dialog.diskFolderId}if(typeof i.dialog.messageLimit==="number"){n.dialog.messageLimit=i.dialog.messageLimit}if(typeof i.dialog.messageExtraCount==="number"){n.dialog.messageExtraCount=i.dialog.messageExtraCount}if(typeof i.dialog.enableReadMessages==="boolean"){n.dialog.enableReadMessages=i.dialog.enableReadMessages}}if(babelHelpers.typeof(i.disk)==="object"&&i.disk){n.disk={};if(typeof i.disk.enabled==="boolean"){n.disk.enabled=i.disk.enabled}if(typeof i.disk.maxFileSize==="number"){n.disk.maxFileSize=i.disk.maxFileSize}}if(babelHelpers.typeof(i.mobile)==="object"&&i.mobile){n.mobile={};if(typeof i.mobile.keyboardShow==="boolean"){n.mobile.keyboardShow=i.mobile.keyboardShow}}if(babelHelpers.typeof(i.device)==="object"&&i.device){n.device={};if(typeof i.device.type==="string"&&typeof t.DeviceType[i.device.type]!=="undefined"){n.device.type=i.device.type}if(typeof i.device.orientation==="string"&&typeof t.DeviceOrientation[i.device.orientation]!=="undefined"){n.device.orientation=i.device.orientation}}if(babelHelpers.typeof(i.error)==="object"&&i.error){if(typeof i.error.active==="boolean"){n.error={active:i.error.active,code:i.error.code.toString()||"",description:i.error.description.toString()||""}}}return n}}]);return i}(n.VuexBuilderModel);var o={empty:"empty",equal:"equal",none:"none",found:"found",foundReverse:"foundReverse"};var s=function(e){babelHelpers.inherits(n,e);function n(){babelHelpers.classCallCheck(this,n);return babelHelpers.possibleConstructorReturn(this,babelHelpers.getPrototypeOf(n).apply(this,arguments))}babelHelpers.createClass(n,[{key:"getName",value:function e(){return"messages"}},{key:"getState",value:function e(){return{created:0,collection:{},mutationType:{},saveMessageList:{},saveFileList:{},saveUserList:{},host:this.getVariable("host",location.protocol+"//"+location.host)}}},{key:"getElementState",value:function e(){return{templateId:0,templateType:"message",id:0,chatId:0,authorId:0,date:new Date,text:"",textConverted:"",params:{TYPE:"default",COMPONENT_ID:"bx-im-view-message"},push:false,unread:false,sending:false,error:false,retry:false,blink:false}}},{key:"getGetters",value:function e(){var i=this;return{getMutationType:function e(i){return function(e){if(!i.mutationType[e]){return{initialType:t.MutationType.none,appliedType:t.MutationType.none}}return i.mutationType[e]}},getLastId:function e(t){return function(e){if(!t.collection[e]||t.collection[e].length<=0){return null}var i=0;for(var n=0;n<t.collection[e].length;n++){var a=t.collection[e][n];if(a.push||a.sending||a.id.toString().startsWith("temporary")){continue}if(i<a.id){i=a.id}}return i?i:null}},getMessage:function e(t){return function(e,i){if(!t.collection[e]||t.collection[e].length<=0){return null}for(var n=t.collection[e].length-1;n>=0;n--){if(t.collection[e][n].id===i){return t.collection[e][n]}}return null}},get:function e(t){return function(e){if(!t.collection[e]||t.collection[e].length<=0){return[]}return t.collection[e]}},getBlank:function e(t){return function(e){return i.getElementState()}},getSaveFileList:function e(t){return function(e){return t.saveFileList}},getSaveUserList:function e(t){return function(e){return t.saveUserList}}}}},{key:"getActions",value:function e(){var n=this;return{add:function e(t,i){var a=n.validate(Object.assign({},i));a.params=Object.assign({},n.getElementState().params,a.params);a.id="temporary"+(new Date).getTime()+t.state.created;a.templateId=a.id;a.unread=false;t.commit("add",Object.assign({},n.getElementState(),a));if(i.sending!==false){t.dispatch("actionStart",{id:a.id,chatId:a.chatId})}return a.id},actionStart:function e(t,n){if(/^\d+$/.test(n.id)){n.id=parseInt(n.id)}n.chatId=parseInt(n.chatId);i.Vue.nextTick(function(){t.commit("update",{id:n.id,chatId:n.chatId,fields:{sending:true}})})},actionError:function e(t,n){if(/^\d+$/.test(n.id)){n.id=parseInt(n.id)}n.chatId=parseInt(n.chatId);i.Vue.nextTick(function(){t.commit("update",{id:n.id,chatId:n.chatId,fields:{sending:false,error:true,retry:n.retry!==false}})})},actionFinish:function e(t,n){if(/^\d+$/.test(n.id)){n.id=parseInt(n.id)}n.chatId=parseInt(n.chatId);i.Vue.nextTick(function(){t.commit("update",{id:n.id,chatId:n.chatId,fields:{sending:false,error:false,retry:false}})})},set:function e(i,a){if(a instanceof Array){a=a.map(function(e){return n.prepareMessage(e,{host:i.state.host})})}else{var r=n.prepareMessage(a,{host:i.state.host});(a=[]).push(r)}i.commit("set",{insertType:t.MutationType.set,data:a})},setAfter:function e(i,a){if(a instanceof Array){a=a.map(function(e){return n.prepareMessage(e)})}else{var r=n.prepareMessage(a);(a=[]).push(r)}i.commit("set",{insertType:t.MutationType.setAfter,data:a})},setBefore:function e(i,a){if(a instanceof Array){a=a.map(function(e){return n.prepareMessage(e)})}else{var r=n.prepareMessage(a);(a=[]).push(r)}i.commit("set",{insertType:t.MutationType.setBefore,data:a})},update:function e(t,i){if(/^\d+$/.test(i.id)){i.id=parseInt(i.id)}if(/^\d+$/.test(i.chatId)){i.chatId=parseInt(i.chatId)}t.commit("initCollection",{chatId:i.chatId});var a=t.state.collection[i.chatId].findIndex(function(e){return e.id===i.id});if(a<0){return false}var r=n.validate(Object.assign({},i.fields));if(r.params){r.params=Object.assign({},n.getElementState().params,t.state.collection[i.chatId][a].params,r.params)}t.commit("update",{id:i.id,chatId:i.chatId,index:a,fields:r});if(i.fields.blink){setTimeout(function(){t.commit("update",{id:i.id,chatId:i.chatId,fields:{blink:false}})},1e3)}return true},delete:function e(t,i){if(!(i.id instanceof Array)){i.id=[i.id]}i.id=i.id.map(function(e){if(/^\d+$/.test(e)){e=parseInt(e)}return e});t.commit("delete",{chatId:i.chatId,elements:i.id});return true},clear:function e(t,i){i.chatId=parseInt(i.chatId);t.commit("clear",{chatId:i.chatId});return true},applyMutationType:function e(t,i){i.chatId=parseInt(i.chatId);t.commit("applyMutationType",{chatId:i.chatId});return true},readMessages:function e(t,i){i.readId=parseInt(i.readId)||0;i.chatId=parseInt(i.chatId);if(typeof t.state.collection[i.chatId]==="undefined"){return{count:0}}var n=0;for(var a=t.state.collection[i.chatId].length-1;a>=0;a--){var r=t.state.collection[i.chatId][a];if(!r.unread)continue;if(i.readId===0||r.id<=i.readId){n++}}t.commit("readMessages",{chatId:i.chatId,readId:i.readId});return{count:n}},unreadMessages:function e(t,i){i.unreadId=parseInt(i.unreadId)||0;i.chatId=parseInt(i.chatId);if(typeof t.state.collection[i.chatId]==="undefined"||!i.unreadId){return{count:0}}var n=0;for(var a=t.state.collection[i.chatId].length-1;a>=0;a--){var r=t.state.collection[i.chatId][a];if(r.unread)continue;if(r.id>=i.unreadId){n++}}t.commit("unreadMessages",{chatId:i.chatId,unreadId:i.unreadId});return{count:n}}}}},{key:"getMutations",value:function e(){var n=this;return{initCollection:function e(t,i){return n.initCollection(t,i)},add:function e(i,a){n.initCollection(i,{chatId:a.chatId});n.setMutationType(i,{chatId:a.chatId,initialType:t.MutationType.add});i.collection[a.chatId].push(a);i.saveMessageList[a.chatId].push(a.id);i.created+=1;n.saveState(i,a.chatId)},set:function e(i,a){var r=[];var s=[];var l={};l.initialType=a.insertType;if(a.insertType===t.MutationType.set){(function(){a.insertType=t.MutationType.setAfter;var e={};a.data.forEach(function(t){if(!e[t.chatId]){e[t.chatId]=[]}e[t.chatId].push(t.id)});var r=function r(s){if(!e.hasOwnProperty(s))return"continue";n.initCollection(i,{chatId:s});if(i.saveMessageList[s].length>e[s].length||e[s].length<t.StorageLimit.messages){i.collection[s]=i.collection[s].filter(function(t){return e[s].includes(t.id)});i.saveMessageList[s]=i.saveMessageList[s].filter(function(t){return e[s].includes(t)})}var d=n.manageCacheBeforeSet(babelHelpers.toConsumableArray(i.saveMessageList[s].reverse()),e[s]);if(d.type===o.none){if(d.foundElements.length>0){i.collection[s]=i.collection[s].filter(function(e){return!d.foundElements.includes(e.id)});i.saveMessageList[s]=i.saveMessageList[s].filter(function(e){return!d.foundElements.includes(e)})}n.removeIntersectionCacheElements=i.collection[s].map(function(e){return e.id});clearTimeout(n.removeIntersectionCacheTimeout);n.removeIntersectionCacheTimeout=setTimeout(function(){i.collection[s]=i.collection[s].filter(function(e){return!n.removeIntersectionCacheElements.includes(e.id)});i.saveMessageList[s]=i.saveMessageList[s].filter(function(e){return!n.removeIntersectionCacheElements.includes(e)});n.removeIntersectionCacheElements=[]},1e3)}else{if(d.type===o.foundReverse){a.insertType=t.MutationType.setBefore;a.data=a.data.reverse()}}if(d.foundElements.length>0){if(d.type===o.found&&d.noneElements[0]){l.scrollStickToTop=false;l.scrollMessageId=d.foundElements[d.foundElements.length-1]}else{l.scrollStickToTop=false;l.scrollMessageId=0}}else if(d.type===o.none){l.scrollStickToTop=false;l.scrollMessageId=a.data[0].id}};for(var s in e){var d=r(s);if(d==="continue")continue}})()}l.appliedType=a.insertType;var d=true;var c=false;var u=undefined;try{var f=function e(){var o=h.value;n.initCollection(i,{chatId:o.chatId});var l=i.collection[o.chatId].findIndex(function(e){return e.id===o.id});if(l>-1){delete o.templateId;i.collection[o.chatId][l]=Object.assign(i.collection[o.chatId][l],o)}else if(a.insertType===t.MutationType.setBefore){i.collection[o.chatId].unshift(o)}else if(a.insertType===t.MutationType.setAfter){i.collection[o.chatId].push(o)}r.push(o.chatId);if(n.store.getters["dialogues/canSaveChat"]&&n.store.getters["dialogues/canSaveChat"](o.chatId)){s.push(o.chatId)}};for(var p=a.data[Symbol.iterator](),h;!(d=(h=p.next()).done);d=true){f()}}catch(e){c=true;u=e}finally{try{if(!d&&p.return!=null){p.return()}}finally{if(c){throw u}}}r=babelHelpers.toConsumableArray(new Set(r));s=babelHelpers.toConsumableArray(new Set(s));if(l.initialType===t.MutationType.set){r.forEach(function(e){var t=0;var n=false;for(var a=0;a<i.collection[e].length;a++){var r=i.collection[e][a];if(r.id<t){n=true;break}t=r.id}if(n){i.collection[e].sort(function(e,t){return e.id-t.id})}})}r.forEach(function(e){n.setMutationType(i,babelHelpers.objectSpread({chatId:e},l))});if(l.initialType!==t.MutationType.setBefore){s.forEach(function(e){n.saveState(i,e)})}},update:function e(t,i){n.initCollection(t,{chatId:i.chatId});var a=-1;if(typeof i.index!=="undefined"&&t.collection[i.chatId][i.index]){a=i.index}else{a=t.collection[i.chatId].findIndex(function(e){return e.id===i.id})}if(a>=0){var r=t.saveMessageList[i.chatId].includes(t.collection[i.chatId][a].id)||i.fields.id&&!i.fields.id.toString().startsWith("temporary")&&t.collection[i.chatId][a].id.toString().startsWith("temporary");delete i.fields.templateId;t.collection[i.chatId][a]=Object.assign(t.collection[i.chatId][a],i.fields);if(r){n.saveState(t,i.chatId)}}},delete:function e(i,a){n.initCollection(i,{chatId:a.chatId});n.setMutationType(i,{chatId:a.chatId,initialType:t.MutationType.delete});i.collection[a.chatId]=i.collection[a.chatId].filter(function(e){return!a.elements.includes(e.id)});if(i.saveMessageList[a.chatId].length>0){var r=true;var o=false;var s=undefined;try{for(var l=a.elements[Symbol.iterator](),d;!(r=(d=l.next()).done);r=true){var c=d.value;if(i.saveMessageList[a.chatId].includes(c)){n.saveState(i,a.chatId);break}}}catch(e){o=true;s=e}finally{try{if(!r&&l.return!=null){l.return()}}finally{if(o){throw s}}}}},clear:function e(t,i){n.initCollection(t,{chatId:i.chatId});n.setMutationType(t,{chatId:i.chatId,initialType:"clear"});t.collection[i.chatId]=[];t.saveMessageList[i.chatId]=[]},applyMutationType:function e(n,a){if(typeof n.mutationType[a.chatId]==="undefined"){i.Vue.set(n.mutationType,a.chatId,{applied:false,initialType:t.MutationType.none,appliedType:t.MutationType.none,scrollStickToTop:0,scrollMessageId:0})}n.mutationType[a.chatId].applied=true},readMessages:function e(t,i){n.initCollection(t,{chatId:i.chatId});var a=false;for(var r=t.collection[i.chatId].length-1;r>=0;r--){var o=t.collection[i.chatId][r];if(!o.unread)continue;if(i.readId===0||o.id<=i.readId){t.collection[i.chatId][r]=Object.assign(t.collection[i.chatId][r],{unread:false});a=true}}if(a){n.saveState(t,i.chatId)}},unreadMessages:function e(t,i){n.initCollection(t,{chatId:i.chatId});var a=false;for(var r=t.collection[i.chatId].length-1;r>=0;r--){var o=t.collection[i.chatId][r];if(o.unread)continue;if(o.id>=i.unreadId){t.collection[i.chatId][r]=Object.assign(t.collection[i.chatId][r],{unread:true});a=true}}if(a){n.saveState(t,i.chatId);n.updateSubordinateStates()}}}}},{key:"initCollection",value:function e(n,a){if(typeof a.chatId==="undefined"){return false}if(typeof a.chatId==="undefined"||typeof n.collection[a.chatId]!=="undefined"){return true}i.Vue.set(n.collection,a.chatId,a.messages?[].concat(a.messages):[]);i.Vue.set(n.mutationType,a.chatId,{applied:false,initialType:t.MutationType.none,appliedType:t.MutationType.none,scrollStickToTop:0,scrollMessageId:0});i.Vue.set(n.saveMessageList,a.chatId,[]);i.Vue.set(n.saveFileList,a.chatId,[]);i.Vue.set(n.saveUserList,a.chatId,[]);return true}},{key:"setMutationType",value:function e(n,a){var r={applied:false,initialType:t.MutationType.none,appliedType:t.MutationType.none,scrollStickToTop:false,scrollMessageId:0};if(a.initialType&&!a.appliedType){a.appliedType=a.initialType}if(typeof n.mutationType[a.chatId]==="undefined"){i.Vue.set(n.mutationType,a.chatId,r)}n.mutationType[a.chatId]=babelHelpers.objectSpread({},r,a);return true}},{key:"prepareMessage",value:function e(t){var i=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var n=this.validate(Object.assign({},t),i);n.params=Object.assign({},this.getElementState().params,n.params);n.templateId=n.id;return Object.assign({},this.getElementState(),n)}},{key:"manageCacheBeforeSet",value:function e(t,i){var n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;var a={type:o.empty,foundElements:[],noneElements:[]};if(!t||t.length<=0){return a}var r=true;var s=false;var l=undefined;try{for(var d=i[Symbol.iterator](),c;!(r=(c=d.next()).done);r=true){var u=c.value;if(t.includes(u)){if(a.type===o.empty){a.type=o.found}a.foundElements.push(u)}else{if(a.type===o.empty){a.type=o.none}a.noneElements.push(u)}}}catch(e){s=true;l=e}finally{try{if(!r&&d.return!=null){d.return()}}finally{if(s){throw l}}}if(a.type===o.found&&t.length===i.length&&a.foundElements.length===i.length){a.type=o.equal}else if(a.type===o.none&&!n&&a.foundElements.length>0){var f=this.manageCacheBeforeSet(t.reverse(),i.reverse(),true);if(f.type===o.found){f.type=o.foundReverse;return f}}return a}},{key:"updateSaveLists",value:function e(i,n){if(!this.isSaveAvailable()){return true}if(!n||!this.store.getters["dialogues/canSaveChat"]||!this.store.getters["dialogues/canSaveChat"](n)){return false}this.initCollection(i,{chatId:n});var a=0;var r=[];var o=[];var s=[];var l=this.store.getters["dialogues/getByChatId"](n);if(l&&l.type==="private"){s.push(parseInt(l.dialogId))}for(var d=i.collection[n].length-1;d>=0;d--){if(i.collection[n][d].id.toString().startsWith("temporary")){continue}if(a>=t.StorageLimit.messages&&!i.collection[n][d].unread){break}r.unshift(i.collection[n][d].id);a++}r=r.slice(0,t.StorageLimit.messages);i.collection[n].filter(function(e){return r.includes(e.id)}).forEach(function(e){if(e.authorId>0){s.push(e.authorId)}if(e.params.FILE_ID instanceof Array){o=e.params.FILE_ID.concat(o)}});i.saveMessageList[n]=r;i.saveFileList[n]=babelHelpers.toConsumableArray(new Set(o));i.saveUserList[n]=babelHelpers.toConsumableArray(new Set(s));return true}},{key:"getSaveTimeout",value:function e(){return 150}},{key:"saveState",value:function e(t,i){if(!this.updateSaveLists(t,i)){return false}babelHelpers.get(babelHelpers.getPrototypeOf(n.prototype),"saveState",this).call(this,function(){var e={collection:{},saveMessageList:{},saveUserList:{},saveFileList:{}};var i=function i(n){if(!t.saveMessageList.hasOwnProperty(n)){return"continue"}if(!t.collection[n]){return"continue"}if(!e.collection[n]){e.collection[n]=[]}t.collection[n].filter(function(e){return t.saveMessageList[n].includes(e.id)}).forEach(function(t){return e.collection[n].push(t)});e.saveMessageList[n]=t.saveMessageList[n];e.saveFileList[n]=t.saveFileList[n];e.saveUserList[n]=t.saveUserList[n]};for(var n in t.saveMessageList){var a=i(n);if(a==="continue")continue}return e})}},{key:"updateSubordinateStates",value:function e(){this.store.dispatch("users/saveState");this.store.dispatch("files/saveState")}},{key:"validate",value:function e(t,i){var n={};if(typeof t.id==="number"){n.id=t.id}else if(typeof t.id==="string"){if(t.id.startsWith("temporary")){n.id=t.id}else{n.id=parseInt(t.id)}}if(typeof t.templateId==="number"){n.templateId=t.templateId}else if(typeof t.templateId==="string"){if(t.templateId.startsWith("temporary")){n.templateId=t.templateId}else{n.templateId=parseInt(t.templateId)}}if(typeof t.chat_id!=="undefined"){t.chatId=t.chat_id}if(typeof t.chatId==="number"||typeof t.chatId==="string"){n.chatId=parseInt(t.chatId)}if(typeof t.date!=="undefined"){n.date=a.Utils.date.cast(t.date)}if(typeof t.textOriginal==="string"||typeof t.textOriginal==="number"){n.text=t.textOriginal.toString();if(typeof t.text==="string"||typeof t.text==="number"){n.textConverted=this.convertToHtml({text:t.text.toString(),isConverted:true})}}else{if(typeof t.text_converted!=="undefined"){t.textConverted=t.text_converted}if(typeof t.textConverted==="string"||typeof t.textConverted==="number"){n.textConverted=t.textConverted.toString()}if(typeof t.text==="string"||typeof t.text==="number"){n.text=t.text.toString();var r=typeof n.textConverted!=="undefined";n.textConverted=this.convertToHtml({text:r?n.textConverted:n.text,isConverted:r})}}if(typeof t.senderId!=="undefined"){t.authorId=t.senderId}else if(typeof t.author_id!=="undefined"){t.authorId=t.author_id}if(typeof t.authorId==="number"||typeof t.authorId==="string"){if(t.system===true||t.system==="Y"){n.authorId=0}else{n.authorId=parseInt(t.authorId)}}if(babelHelpers.typeof(t.params)==="object"&&t.params!==null){var o=this.validateParams(t.params,i);if(o){n.params=o}}if(typeof t.push==="boolean"){n.push=t.push}if(typeof t.sending==="boolean"){n.sending=t.sending}if(typeof t.unread==="boolean"){n.unread=t.unread}if(typeof t.blink==="boolean"){n.blink=t.blink}if(typeof t.error==="boolean"||typeof t.error==="string"){n.error=t.error}if(typeof t.retry==="boolean"){n.retry=t.retry}return n}},{key:"validateParams",value:function e(t,i){var n={};try{for(var r in t){if(!t.hasOwnProperty(r)){continue}if(r==="COMPONENT_ID"){if(typeof t[r]==="string"&&BX.Vue.isComponent(t[r])){n[r]=t[r]}}else if(r==="LIKE"){if(t[r]instanceof Array){n["REACTION"]={like:t[r].map(function(e){return parseInt(e)})}}}else if(r==="CHAT_LAST_DATE"){n[r]=a.Utils.date.cast(t[r])}else if(r==="AVATAR"){if(t[r]){n[r]=t[r].startsWith("http")?t[r]:i.host+t[r]}}else if(r==="NAME"){if(t[r]){n[r]=t[r]}}else{n[r]=t[r]}}}catch(e){}var o=false;for(var s in n){if(!n.hasOwnProperty(s)){continue}o=true;break}return o?n:null}},{key:"convertToHtml",value:function e(){var t=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var i=t.quote,n=i===void 0?true:i,a=t.image,r=a===void 0?true:a,o=t.text,s=o===void 0?"":o,l=t.highlightText,d=l===void 0?"":l,c=t.isConverted,u=c===void 0?false:c,f=t.enableBigSmile,p=f===void 0?true:f;s=s.trim();if(!u){s=s.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}if(s.startsWith("/me")){s="<i>".concat(s.substr(4),"</i>")}else if(s.startsWith("/loud")){s="<b>".concat(s.substr(6),"</b>")}var h=">>";if(n&&s.indexOf(h)>=0){var g=s.split(u?"<br />":"\n");for(var m=0;m<g.length;m++){if(g[m].startsWith(h)){g[m]=g[m].replace(h,'<div class="bx-im-message-content-quote"><div class="bx-im-message-content-quote-wrap">');while(++m<g.length&&g[m].startsWith(h)){g[m]=g[m].replace(h,"")}g[m-1]+="</div></div><br>"}}s=g.join("<br />")}s=s.replace(/\n/gi,"<br />");s=s.replace(/\t/gi," ");s=this.decodeBbCode(s,false,p);if(n){s=s.replace(/------------------------------------------------------<br \/>(.*?)\[(.*?)\]<br \/>(.*?)------------------------------------------------------(<br \/>)?/g,function(e,t,i,n,a,r){return(r>0?"<br>":"")+'<div class="bx-im-message-content-quote"><div class="bx-im-message-content-quote-wrap"><div class="bx-im-message-content-quote-name"><span class="bx-im-message-content-quote-name-text">'+t+'</span><span class="bx-im-message-content-quote-name-time">'+i+"</span></div>"+n+"</div></div><br />"});s=s.replace(/------------------------------------------------------<br \/>(.*?)------------------------------------------------------(<br \/>)?/g,function(e,t,i,n,a){return(a>0?"<br>":"")+'<div class="bx-im-message-content-quote"><div class="bx-im-message-content-quote-wrap">'+t+"</div></div><br />"})}if(r){var v=false;s=s.replace(/<a(.*?)>(http[s]{0,1}:\/\/.*?)<\/a>/gi,function(e,t,i,n){if(!i.match(/(\.(jpg|jpeg|png|gif)\?|\.(jpg|jpeg|png|gif)$)/i)||i.indexOf("/docs/pub/")>0||i.indexOf("logout=yes")>0){return e}else{v=true;return(n>0?"<br />":"")+"<a"+t+' target="_blank" class="bx-im-element-file-image"><img src="'+i+'" class="bx-im-element-file-image-source-text" onerror="BX.Messenger.Model.MessagesModel.hideErrorImage(this)"></a></span>'}});if(v){s=s.replace(/<\/span>(\n?)<br(\s\/?)>/gi,"</span>").replace(/<br(\s\/?)>(\n?)<br(\s\/?)>(\n?)<span/gi,"<br /><span")}}if(d){s=s.replace(new RegExp("("+d.replace(/[\-\[\]\/{}()*+?.\\^$|]/g,"\\$&")+")","ig"),'<span class="bx-messenger-highlight">$1</span>')}if(p){s=s.replace(/^(\s*<img\s+src=[^>]+?data-code=[^>]+?data-definition="UHD"[^>]+?style="width:)(\d+)(px[^>]+?height:)(\d+)(px[^>]+?class="bx-smile"\s*\/?>\s*)$/,function e(t,i,n,a,r,o){return i+parseInt(n,10)*1.7+a+parseInt(r,10)*1.7+o})}if(s.substr(-6)=="<br />"){s=s.substr(0,s.length-6)}s=s.replace(/<br><br \/>/gi,"<br />");s=s.replace(/<br \/><br>/gi,"<br />");return s}},{key:"decodeBbCode",value:function e(t){var i=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var a=arguments.length>2&&arguments[2]!==undefined?arguments[2]:true;return n.decodeBbCode({text:t,textOnly:i,enableBigSmile:a})}}],[{key:"decodeBbCode",value:function e(){var t=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var i=t.text,n=t.textOnly,r=n===void 0?false:n,o=t.enableBigSmile,s=o===void 0?true:o;var l=[];i=i.replace(/\[CODE\]\n?([\s\S]*?)\[\/CODE\]/gi,function(e,t){var i=l.length;l.push(t);return"####REPLACEMENT_MARK_"+i+"####"});i=i.replace(/\[LIKE\]/gi,'<span class="bx-smile bx-im-smile-like"></span>');i=i.replace(/\[DISLIKE\]/gi,'<span class="bx-smile bx-im-smile-dislike"></span>');i=i.replace(/\[USER=([0-9]{1,})\](.*?)\[\/USER\]/gi,function(e,t,i){return'<span class="bx-im-mention" data-type="USER" data-value="'+t+'">'+i+"</span>"});i=i.replace(/\[CHAT=(imol\|)?([0-9]{1,})\](.*?)\[\/CHAT\]/gi,function(e,t,i,n){return t?n:'<span class="bx-im-mention" data-type="CHAT" data-value="chat'+i+'">'+n+"</span>"});i=i.replace(/\[CALL(?:=(.+?))?\](.+?)?\[\/CALL\]/gi,function(e,t,i){return'<span class="bx-im-mention" data-type="CALL" data-value="'+a.Utils.text.htmlspecialchars(t)+'">'+i+"</span>"});i=i.replace(/\[PCH=([0-9]{1,})\](.*?)\[\/PCH\]/gi,function(e,t,i){return i});i=i.replace(/\[SEND(?:=(.+?))?\](.+?)?\[\/SEND\]/gi,function(e,t,i){var n="";i=i?i:t;t=(t?t:i).replace("<br />","\n");if(!r&&i){i=i.replace(/<([\w]+)[^>]*>(.*?)<\\1>/i,"$2",i);i=i.replace(/\[([\w]+)[^\]]*\](.*?)\[\/\1\]/i,"$2",i);n='<span class="bx-im-message-command-wrap">'+'<span class="bx-im-message-command" data-entity="send">'+i+"</span>"+'<span class="bx-im-message-command-data">'+t+"</span>"+"</span>"}else{n=i}return n});i=i.replace(/\[PUT(?:=(.+?))?\](.+?)?\[\/PUT\]/gi,function(e,t,i){var n="";i=i?i:t;t=(t?t:i).replace("<br />","\n");if(!r&&i){i=i.replace(/<([\w]+)[^>]*>(.*?)<\/\1>/i,"$2",i);i=i.replace(/\[([\w]+)[^\]]*\](.*?)\[\/\1\]/i,"$2",i);n='<span class="bx-im-message-command" data-entity="put">'+i+"</span>";n+='<span class="bx-im-message-command-data">'+t+"</span>"}else{n=i}return n});var d=0;if(s){d=i.replace(/\[icon\=([^\]]*)\]/gi,"").trim().length}i=i.replace(/\[icon\=([^\]]*)\]/gi,function(e){var t=e.match(/icon\=(\S+[^\s.,> )\];\'\"!?])/i);if(t&&t[1]){t=t[1]}else{return""}var i={src:t,border:0};var n=e.match(/size\=(\d+)/i);if(n&&n[1]){i["width"]=n[1];i["height"]=n[1]}else{var r=e.match(/width\=(\d+)/i);if(r&&r[1]){i["width"]=r[1]}var o=e.match(/height\=(\d+)/i);if(o&&o[1]){i["height"]=o[1]}if(i["width"]&&!i["height"]){i["height"]=i["width"]}else if(i["height"]&&!i["width"]){i["width"]=i["height"]}else if(i["height"]&&i["width"]);else{i["width"]=20;i["height"]=20}}i["width"]=i["width"]>100?100:i["width"];i["height"]=i["height"]>100?100:i["height"];if(s&&d===0&&i["width"]===i["height"]&&i["width"]===20){i["width"]=40;i["height"]=40}var l=e.match(/title\=(.*[^\s\]])/i);if(l&&l[1]){l=l[1];if(l.indexOf("width=")>-1){l=l.substr(0,l.indexOf("width="))}if(l.indexOf("height=")>-1){l=l.substr(0,l.indexOf("height="))}if(l.indexOf("size=")>-1){l=l.substr(0,l.indexOf("size="))}if(l){i["title"]=a.Utils.text.htmlspecialchars(l).trim();i["alt"]=i["title"]}}var c="";for(var u in i){if(i.hasOwnProperty(u)){c+=u+'="'+i[u]+'" '}}return'<img class="bx-smile bx-icon" '+c+">"});l.forEach(function(e,t){i=i.replace("####REPLACEMENT_MARK_"+t+"####",!r?'<div class="bx-im-message-content-code">'+e+"</div>":e)});return i}},{key:"hideErrorImage",value:function e(t){if(t.parentNode&&t.parentNode){t.parentNode.innerHTML='<a href="'+t.src+'" target="_blank">'+t.src+"</a>"}return true}}]);return n}(n.VuexBuilderModel);var l=function(e){babelHelpers.inherits(n,e);function n(){babelHelpers.classCallCheck(this,n);return babelHelpers.possibleConstructorReturn(this,babelHelpers.getPrototypeOf(n).apply(this,arguments))}babelHelpers.createClass(n,[{key:"getName",value:function e(){return"dialogues"}},{key:"getState",value:function e(){return{host:this.getVariable("host",location.protocol+"//"+location.host),collection:{},saveDialogList:[],saveChatList:[]}}},{key:"getStateSaveException",value:function e(){return{host:null}}},{key:"getElementStateSaveException",value:function e(){return{writingList:null,quoteId:null}}},{key:"getElementState",value:function e(){return{dialogId:"0",chatId:0,counter:0,unreadId:0,unreadLastId:0,managerList:[],readedList:[],writingList:[],textareaMessage:"",quoteId:0,editId:0,init:false,name:"",owner:0,extranet:false,avatar:"",color:"#17A3EA",type:"chat",entityType:"",entityId:"",entityData1:"",entityData2:"",entityData3:"",dateCreate:new Date,restrictions:{avatar:true,extend:true,leave:true,leaveOwner:true,rename:true}}}},{key:"getGetters",value:function e(){var t=this;return{get:function e(t){return function(e){if(!t.collection[e]){return null}return t.collection[e]}},getByChatId:function e(t){return function(e){e=parseInt(e);for(var i in t.collection){if(!t.collection.hasOwnProperty(i)){continue}if(t.collection[i].chatId===e){return t.collection[i]}}return null}},getBlank:function e(i){return function(e){return t.getElementState()}},getQuoteId:function e(t){return function(e){if(!t.collection[e]){return 0}return t.collection[e].quoteId}},getEditId:function e(t){return function(e){if(!t.collection[e]){return 0}return t.collection[e].editId}},canSaveChat:function e(t){return function(e){if(/^\d+$/.test(e)){e=parseInt(e)}return t.saveChatList.includes(parseInt(e))}},canSaveDialog:function e(t){return function(e){return t.saveDialogList.includes(e.toString())}},isPrivateDialog:function e(t){return function(e){e=e.toString();return t.collection[e.toString()]&&t.collection[e].type==="private"}}}}},{key:"getActions",value:function e(){var t=this;return{set:function e(i,n){if(n instanceof Array){n=n.map(function(e){return Object.assign({},t.validate(Object.assign({},e),{host:i.state.host}),{init:true})})}else{var a=[];a.push(Object.assign({},t.validate(Object.assign({},n),{host:i.state.host}),{init:true}));n=a}i.commit("set",n)},update:function e(i,n){if(typeof i.state.collection[n.dialogId]==="undefined"||i.state.collection[n.dialogId].init===false){return true}i.commit("update",{dialogId:n.dialogId,fields:t.validate(Object.assign({},n.fields),{host:i.state.host})});return true},delete:function e(t,i){t.commit("delete",i.dialogId);return true},updateWriting:function e(i,n){if(typeof i.state.collection[n.dialogId]==="undefined"||i.state.collection[n.dialogId].init===false){return true}var a=i.state.collection[n.dialogId].writingList.findIndex(function(e){return e.userId===n.userId});if(n.action){if(a>=0){return true}else{var r=[].concat(i.state.collection[n.dialogId].writingList);r.unshift({userId:n.userId,userName:n.userName});i.commit("update",{actionName:"updateWriting/1",dialogId:n.dialogId,fields:t.validate({writingList:r},{host:i.state.host})})}}else{if(a>=0){var o=i.state.collection[n.dialogId].writingList.filter(function(e){return e.userId!==n.userId});i.commit("update",{actionName:"updateWriting/2",dialogId:n.dialogId,fields:t.validate({writingList:o},{host:i.state.host})});return true}else{return true}}return false},updateReaded:function e(i,n){if(typeof i.state.collection[n.dialogId]==="undefined"||i.state.collection[n.dialogId].init===false){return true}var a=i.state.collection[n.dialogId].readedList.filter(function(e){return e.userId!==n.userId});if(n.action){a.push({userId:n.userId,userName:n.userName||"",messageId:n.messageId,date:n.date||new Date})}i.commit("update",{actionName:"updateReaded",dialogId:n.dialogId,fields:t.validate({readedList:a},{host:i.state.host})});return false},increaseCounter:function e(t,i){if(typeof t.state.collection[i.dialogId]==="undefined"||t.state.collection[i.dialogId].init===false){return true}var n=t.state.collection[i.dialogId].counter;if(n===100){return true}var a=n+i.count;if(a>100){a=100}var r={counter:a};if(typeof i.unreadLastId!=="undefined"){r.unreadLastId=i.unreadLastId}t.commit("update",{actionName:"increaseCounter",dialogId:i.dialogId,fields:r});return false},decreaseCounter:function e(t,i){if(typeof t.state.collection[i.dialogId]==="undefined"||t.state.collection[i.dialogId].init===false){return true}var n=t.state.collection[i.dialogId].counter;if(n===100){return true}var a=n-i.count;if(a<0){a=0}var r=i.unreadId>t.state.collection[i.dialogId].unreadId?i.unreadId:t.state.collection[i.dialogId].unreadId;if(t.state.collection[i.dialogId].unreadId!==r||t.state.collection[i.dialogId].counter!==a){if(a===0){r=0}t.commit("update",{actionName:"decreaseCounter",dialogId:i.dialogId,fields:{counter:a,unreadId:r}})}return false},saveDialog:function e(t,i){if(typeof t.state.collection[i.dialogId]==="undefined"||t.state.collection[i.dialogId].init===false){return true}t.commit("saveDialog",{dialogId:i.dialogId,chatId:i.chatId});return false}}}},{key:"getMutations",value:function e(){var i=this;return{initCollection:function e(t,n){i.initCollection(t,n)},saveDialog:function e(n,a){if(!(a.chatId>0&&a.dialogId.length>0)){return false}var r=n.saveDialogList.filter(function(e){return e!==a.dialogId});r.unshift(a.dialogId);r=r.slice(0,t.StorageLimit.dialogues);if(n.saveDialogList.join(",")===r.join(",")){return true}n.saveDialogList=r;var o=n.saveChatList.filter(function(e){return e!==a.chatId});o.unshift(a.chatId);n.saveChatList=o.slice(0,t.StorageLimit.dialogues);i.saveState(n)},set:function e(t,n){var a=true;var r=false;var o=undefined;try{for(var s=n[Symbol.iterator](),l;!(a=(l=s.next()).done);a=true){var d=l.value;i.initCollection(t,{dialogId:d.dialogId});t.collection[d.dialogId]=Object.assign(i.getElementState(),t.collection[d.dialogId],d)}}catch(e){r=true;o=e}finally{try{if(!a&&s.return!=null){s.return()}}finally{if(r){throw o}}}i.saveState(t)},update:function e(t,n){i.initCollection(t,n);t.collection[n.dialogId]=Object.assign(t.collection[n.dialogId],n.fields);i.saveState(t)},delete:function e(t,n){delete t.collection[n.dialogId];i.saveState(t)}}}},{key:"initCollection",value:function e(t,n){if(typeof t.collection[n.dialogId]!=="undefined"){return true}i.Vue.set(t.collection,n.dialogId,this.getElementState());if(n.fields){t.collection[n.dialogId]=Object.assign(t.collection[n.dialogId],this.validate(Object.assign({},n.fields),{host:t.host}))}return true}},{key:"getSaveTimeout",value:function e(){return 100}},{key:"saveState",value:function e(){var t=this;var i=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};if(!this.isSaveAvailable()){return true}babelHelpers.get(babelHelpers.getPrototypeOf(n.prototype),"saveState",this).call(this,function(){var e={collection:{},saveDialogList:[].concat(i.saveDialogList),saveChatList:[].concat(i.saveChatList)};i.saveDialogList.forEach(function(n){if(!i.collection[n])return false;e.collection[n]=Object.assign(t.getElementState(),t.cloneState(i.collection[n],t.getElementStateSaveException()))});return e})}},{key:"validate",value:function e(t){var i=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var n={};i.host=i.host||this.getState().host;if(typeof t.dialog_id!=="undefined"){t.dialogId=t.dialog_id}if(typeof t.dialogId==="number"||typeof t.dialogId==="string"){n.dialogId=t.dialogId.toString()}if(typeof t.chat_id!=="undefined"){t.chatId=t.chat_id}else if(typeof t.id!=="undefined"){t.chatId=t.id}if(typeof t.chatId==="number"||typeof t.chatId==="string"){n.chatId=parseInt(t.chatId)}if(typeof t.quoteId==="number"){n.quoteId=parseInt(t.quoteId)}if(typeof t.editId==="number"){n.editId=parseInt(t.editId)}if(typeof t.counter==="number"||typeof t.counter==="string"){n.counter=parseInt(t.counter)}if(typeof t.unread_id!=="undefined"){t.unreadId=t.unread_id}if(typeof t.unreadId==="number"||typeof t.unreadId==="string"){n.unreadId=parseInt(t.unreadId)}if(typeof t.unread_last_id!=="undefined"){t.unreadLastId=t.unread_last_id}if(typeof t.unreadLastId==="number"||typeof t.unreadLastId==="string"){n.unreadLastId=parseInt(t.unreadLastId)}if(typeof t.readed_list!=="undefined"){t.readedList=t.readed_list}if(typeof t.readedList!=="undefined"){n.readedList=[];if(t.readedList instanceof Array){t.readedList.forEach(function(e){var t={};if(typeof e.user_id!=="undefined"){e.userId=e.user_id}if(typeof e.user_name!=="undefined"){e.userName=e.user_name}if(typeof e.message_id!=="undefined"){e.messageId=e.message_id}if(!e.userId||!e.userName||!e.messageId){return false}t.userId=parseInt(e.userId);t.userName=e.userName.toString();t.messageId=parseInt(e.messageId);t.date=a.Utils.date.cast(e.date);n.readedList.push(t)})}}if(typeof t.writing_list!=="undefined"){t.writingList=t.writing_list}if(typeof t.writingList!=="undefined"){n.writingList=[];if(t.writingList instanceof Array){t.writingList.forEach(function(e){var t={};if(!e.userId){return false}t.userId=parseInt(e.userId);t.userName=e.userName;n.writingList.push(t)})}}if(typeof t.manager_list!=="undefined"){t.managerList=t.manager_list}if(typeof t.managerList!=="undefined"){n.managerList=[];if(t.managerList instanceof Array){t.managerList.forEach(function(e){e=parseInt(e);if(e>0){n.managerList.push(e)}})}}if(typeof t.mute_list!=="undefined"){t.muteList=t.mute_list}if(typeof t.muteList!=="undefined"){n.muteList=[];if(t.muteList instanceof Array){t.muteList.forEach(function(e){e=parseInt(e);if(e>0){n.muteList.push(e)}})}}if(typeof t.textareaMessage!=="undefined"){n.textareaMessage=t.textareaMessage.toString()}if(typeof t.title!=="undefined"){t.name=t.title}if(typeof t.name==="string"||typeof t.name==="number"){n.name=t.name.toString()}if(typeof t.owner!=="undefined"){t.ownerId=t.owner}if(typeof t.ownerId==="number"||typeof t.ownerId==="string"){n.ownerId=parseInt(t.ownerId)}if(typeof t.extranet==="boolean"){n.extranet=t.extranet}if(typeof t.avatar==="string"){var r;if(!t.avatar||t.avatar.endsWith("/js/im/images/blank.gif")){r=""}else if(t.avatar.startsWith("http")){r=t.avatar}else{r=i.host+t.avatar}if(r){n.avatar=encodeURI(r)}}if(typeof t.color==="string"){n.color=t.color.toString()}if(typeof t.type==="string"){n.type=t.type.toString()}if(typeof t.entity_type!=="undefined"){t.entityType=t.entity_type}if(typeof t.entityType==="string"){n.entityType=t.entityType.toString()}if(typeof t.entity_id!=="undefined"){t.entityId=t.entity_id}if(typeof t.entityId==="string"||typeof t.entityId==="number"){n.entityId=t.entityId.toString()}if(typeof t.entity_data_1!=="undefined"){t.entityData1=t.entity_data_1}if(typeof t.entityData1==="string"){n.entityData1=t.entityData1.toString()}if(typeof t.entity_data_2!=="undefined"){t.entityData2=t.entity_data_2}if(typeof t.entityData2==="string"){n.entityData2=t.entityData2.toString()}if(typeof t.entity_data_3!=="undefined"){t.entityData3=t.entity_data_3}if(typeof t.entityData3==="string"){n.entityData3=t.entityData3.toString()}if(typeof t.date_create!=="undefined"){t.dateCreate=t.date_create}if(typeof t.dateCreate!=="undefined"){n.dateCreate=a.Utils.date.cast(t.dateCreate)}if(typeof t.dateLastOpen!=="undefined"){n.dateLastOpen=a.Utils.date.cast(t.dateLastOpen)}if(babelHelpers.typeof(t.restrictions)==="object"&&t.restrictions){n.restrictions={};if(typeof t.restrictions.AVATAR==="boolean"){n.restrictions.avatar=t.restrictions.AVATAR}if(typeof t.restrictions.EXTEND==="boolean"){n.restrictions.extend=t.restrictions.EXTEND}if(typeof t.restrictions.LEAVE==="boolean"){n.restrictions.leave=t.restrictions.LEAVE}if(typeof t.restrictions.LEAVE_OWNER==="boolean"){n.restrictions.leaveOwner=t.restrictions.LEAVE_OWNER}if(typeof t.restrictions.RENAME==="boolean"){n.restrictions.rename=t.restrictions.RENAME}}return n}}]);return n}(n.VuexBuilderModel);var d=function(e){babelHelpers.inherits(t,e);function t(){babelHelpers.classCallCheck(this,t);return babelHelpers.possibleConstructorReturn(this,babelHelpers.getPrototypeOf(t).apply(this,arguments))}babelHelpers.createClass(t,[{key:"getName",value:function e(){return"users"}},{key:"getState",value:function e(){this.startOnlineCheckInterval();return{host:this.getVariable("host",location.protocol+"//"+location.host),collection:{},onlineList:[],mobileOnlineList:[],absentList:[]}}},{key:"getElementState",value:function e(){var t=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var i=t.id,n=i===void 0?0:i,a=t.name,r=a===void 0?this.getVariable("default.name",""):a,o=t.firstName,s=o===void 0?this.getVariable("default.name",""):o,l=t.lastName,d=l===void 0?"":l;return{id:n,name:r,firstName:s,lastName:d,workPosition:"",color:"#048bd0",avatar:"",gender:"M",birthday:false,isBirthday:false,extranet:false,network:false,bot:false,connector:false,externalAuthId:"default",status:"online",idle:false,lastActivityDate:false,mobileLastDate:false,isOnline:false,isMobileOnline:false,absent:false,isAbsent:false,departments:[],phones:{workPhone:"",personalMobile:"",personalPhone:"",innerPhone:""},init:false}}},{key:"getGetters",value:function e(){var t=this;return{get:function e(i){return function(e){var n=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;e=parseInt(e);if(e<=0){if(n){e=0}else{return null}}if(!n&&(!i.collection[e]||!i.collection[e].init)){return null}if(!i.collection[e]){return t.getElementState({id:e})}return i.collection[e]}},getBlank:function e(i){return function(e){return t.getElementState(e)}}}}},{key:"getActions",value:function e(){var t=this;return{set:function e(i,n){if(n instanceof Array){n=n.map(function(e){return Object.assign({},t.getElementState(),t.validate(Object.assign({},e),{host:i.state.host}),{init:true})})}else{var a=[];a.push(Object.assign({},t.getElementState(),t.validate(Object.assign({},n),{host:i.state.host}),{init:true}));n=a}i.commit("set",n)},update:function e(i,n){n.id=parseInt(n.id);if(typeof i.state.collection[n.id]==="undefined"||i.state.collection[n.id].init===false){return true}i.commit("update",{id:n.id,fields:t.validate(Object.assign({},n.fields),{host:i.state.host})});return true},delete:function e(t,i){t.commit("delete",i.id);return true},saveState:function e(t,i){t.commit("saveState",{});return true}}}},{key:"getMutations",value:function e(){var t=this;return{set:function e(i,n){var r=true;var o=false;var s=undefined;try{var l=function e(){var n=c.value;t.initCollection(i,{id:n.id});i.collection[n.id]=n;var r=a.Utils.user.getOnlineStatus(n);if(r.isOnline){i.collection[n.id].isOnline=true;t.addToOnlineList(i,n.id)}var o=a.Utils.user.isMobileActive(n);if(o){i.collection[n.id].isMobileOnline=true;t.addToMobileOnlineList(i,n.id)}if(n.birthday){var s=a.Utils.date.format(new Date,"d-m");if(n.birthday===s){i.collection[n.id].isBirthday=true;var l=t.getTimeToNextMidnight();setTimeout(function(){i.collection[n.id].isBirthday=false},l)}}if(n.absent){n.isAbsent=true;if(!i.absentList.includes(n.id)){t.addToAbsentList(i,n.id);var d=t.getTimeToNextMidnight();var u=1e3*60*60*24;setTimeout(function(){setInterval(function(){return t.startAbsentCheckInterval(i)},u)},d)}}t.saveState(i)};for(var d=n[Symbol.iterator](),c;!(r=(c=d.next()).done);r=true){l()}}catch(e){o=true;s=e}finally{try{if(!r&&d.return!=null){d.return()}}finally{if(o){throw s}}}},update:function e(i,n){t.initCollection(i,n);var r=i.collection[n.id].lastActivityDate.getTime();var o=n.fields.lastActivityDate.getTime();if(o>r){var s=a.Utils.user.getOnlineStatus(n.fields);if(s.isOnline){i.collection[n.id].isOnline=true;t.addToOnlineList(i,n.fields.id)}}if(i.collection[n.id].mobileLastDate!==n.fields.mobileLastDate){var l=a.Utils.user.isMobileActive(n.fields);if(l){i.collection[n.id].isMobileOnline=true;t.addToMobileOnlineList(i,n.fields.id)}}i.collection[n.id]=Object.assign(i.collection[n.id],n.fields);t.saveState(i)},delete:function e(i,n){delete i.collection[n.id];t.saveState(i)},saveState:function e(i,n){t.saveState(i)}}}},{key:"initCollection",value:function e(t,n){if(typeof t.collection[n.id]!=="undefined"){return true}i.Vue.set(t.collection,n.id,this.getElementState());return true}},{key:"getSaveUserList",value:function e(){if(!this.db){return[]}if(!this.store.getters["messages/getSaveUserList"]){return[]}var t=this.store.getters["messages/getSaveUserList"]();if(!t){return[]}return t}},{key:"getSaveTimeout",value:function e(){return 250}},{key:"saveState",value:function e(i){var n=this;if(!this.isSaveAvailable()){return false}babelHelpers.get(babelHelpers.getPrototypeOf(t.prototype),"saveState",this).call(this,function(){var e=n.getSaveUserList();if(!e){return false}var t={collection:{}};var a={absent:true,idle:true,mobileLastDate:true,lastActivityDate:true};for(var r in e){if(!e.hasOwnProperty(r)){continue}e[r].forEach(function(e){if(!i.collection[e]){return false}t.collection[e]=n.cloneState(i.collection[e],a)})}return t})}},{key:"validate",value:function e(t){var i=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var n={};i.host=i.host||this.getState().host;if(typeof t.id==="number"||typeof t.id==="string"){n.id=parseInt(t.id)}if(typeof t.first_name!=="undefined"){t.firstName=t.first_name}if(typeof t.last_name!=="undefined"){t.lastName=t.last_name}if(typeof t.name==="string"||typeof t.name==="number"){n.name=t.name.toString();if(typeof t.firstName!=="undefined"&&!t.firstName){var r=t.name.split(" ");if(r.length>1){delete r[r.length-1];t.firstName=r.join(" ").trim()}else{t.firstName=n.name}}if(typeof t.lastName!=="undefined"&&!t.lastName){var o=t.name.split(" ");if(o.length>1){t.lastName=o[o.length-1]}else{t.lastName=""}}}if(typeof t.firstName==="string"||typeof t.name==="number"){n.firstName=t.firstName.toString()}if(typeof t.lastName==="string"||typeof t.name==="number"){n.lastName=t.lastName.toString()}if(typeof t.work_position!=="undefined"){t.workPosition=t.work_position}if(typeof t.workPosition==="string"||typeof t.workPosition==="number"){n.workPosition=t.workPosition.toString()}if(typeof t.color==="string"){n.color=t.color}if(typeof t.avatar==="string"){var s;if(!t.avatar||t.avatar.endsWith("/js/im/images/blank.gif")){s=""}else if(t.avatar.startsWith("http")){s=t.avatar}else{s=i.host+t.avatar}if(s){n.avatar=encodeURI(s)}}if(typeof t.gender!=="undefined"){n.gender=t.gender==="F"?"F":"M"}if(typeof t.birthday==="string"){n.birthday=t.birthday}if(typeof t.extranet==="boolean"){n.extranet=t.extranet}if(typeof t.network==="boolean"){n.network=t.network}if(typeof t.bot==="boolean"){n.bot=t.bot}if(typeof t.connector==="boolean"){n.connector=t.connector}if(typeof t.external_auth_id!=="undefined"){t.externalAuthId=t.external_auth_id}if(typeof t.externalAuthId==="string"&&t.externalAuthId){n.externalAuthId=t.externalAuthId}if(typeof t.status==="string"){n.status=t.status}if(typeof t.idle!=="undefined"){n.idle=a.Utils.date.cast(t.idle,false)}if(typeof t.last_activity_date!=="undefined"){t.lastActivityDate=t.last_activity_date}if(typeof t.lastActivityDate!=="undefined"){n.lastActivityDate=a.Utils.date.cast(t.lastActivityDate,false)}if(typeof t.mobile_last_date!=="undefined"){t.mobileLastDate=t.mobile_last_date}if(typeof t.mobileLastDate!=="undefined"){n.mobileLastDate=a.Utils.date.cast(t.mobileLastDate,false)}if(typeof t.absent!=="undefined"){n.absent=a.Utils.date.cast(t.absent,false)}if(typeof t.departments!=="undefined"){n.departments=[];if(t.departments instanceof Array){t.departments.forEach(function(e){e=parseInt(e);if(e>0){n.departments.push(e)}})}}if(babelHelpers.typeof(t.phones)==="object"&&t.phones){n.phones={};if(typeof t.phones.work_phone!=="undefined"){t.phones.workPhone=t.phones.work_phone}if(typeof t.phones.workPhone==="string"||typeof t.phones.workPhone==="number"){n.phones.workPhone=t.phones.workPhone.toString()}if(typeof t.phones.personal_mobile!=="undefined"){t.phones.personalMobile=t.phones.personal_mobile}if(typeof t.phones.personalMobile==="string"||typeof t.phones.personalMobile==="number"){n.phones.personalMobile=t.phones.personalMobile.toString()}if(typeof t.phones.personal_phone!=="undefined"){t.phones.personalPhone=t.phones.personal_phone}if(typeof t.phones.personalPhone==="string"||typeof t.phones.personalPhone==="number"){n.phones.personalPhone=t.phones.personalPhone.toString()}if(typeof t.phones.inner_phone!=="undefined"){t.phones.innerPhone=t.phones.inner_phone}if(typeof t.phones.innerPhone==="string"||typeof t.phones.innerPhone==="number"){n.phones.innerPhone=t.phones.innerPhone.toString()}}return n}},{key:"addToOnlineList",value:function e(t,i){if(!t.onlineList.includes(i)){t.onlineList.push(i)}}},{key:"addToMobileOnlineList",value:function e(t,i){if(!t.mobileOnlineList.includes(i)){t.mobileOnlineList.push(i)}}},{key:"addToAbsentList",value:function e(t,i){if(!t.absentList.includes(i)){t.absentList.push(i)}}},{key:"getTimeToNextMidnight",value:function e(){var t=new Date((new Date).setHours(24,0,0)).getTime();return t-new Date}},{key:"startAbsentCheckInterval",value:function e(t){var i=true;var n=false;var a=undefined;try{var r=function e(){var i=s.value;var n=t.collection[i];if(!n){return"continue"}var a=(new Date).getTime();var r=new Date(t.collection[i].absent).getTime();if(r<=a){t.absentList=t.absentList.filter(function(e){return e!==i});n.isAbsent=false}};for(var o=t.absentList[Symbol.iterator](),s;!(i=(s=o.next()).done);i=true){var l=r();if(l==="continue")continue}}catch(e){n=true;a=e}finally{try{if(!i&&o.return!=null){o.return()}}finally{if(n){throw a}}}}},{key:"startOnlineCheckInterval",value:function e(){var t=this;var i=6e4;setInterval(function(){var e=true;var i=false;var n=undefined;try{var r=function e(){var i=s.value;var n=t.store.state.users.collection[i];if(!n){return"continue"}var r=a.Utils.user.getOnlineStatus(n);if(r.isOnline){n.isOnline=true}else{n.isOnline=false;t.store.state.users.onlineList=t.store.state.users.onlineList.filter(function(e){return e!==i})}};for(var o=t.store.state.users.onlineList[Symbol.iterator](),s;!(e=(s=o.next()).done);e=true){var l=r();if(l==="continue")continue}}catch(e){i=true;n=e}finally{try{if(!e&&o.return!=null){o.return()}}finally{if(i){throw n}}}var d=true;var c=false;var u=undefined;try{var f=function e(){var i=h.value;var n=t.store.state.users.collection[i];if(!n){return"continue"}var r=a.Utils.user.isMobileActive(n);if(r){n.isMobileOnline=true}else{n.isMobileOnline=false;t.store.state.users.mobileOnlineList=t.store.state.users.mobileOnlineList.filter(function(e){return e!==i})}};for(var p=t.store.state.users.mobileOnlineList[Symbol.iterator](),h;!(d=(h=p.next()).done);d=true){var g=f();if(g==="continue")continue}}catch(e){c=true;u=e}finally{try{if(!d&&p.return!=null){p.return()}}finally{if(c){throw u}}}},i)}}]);return t}(n.VuexBuilderModel);var c=function(e){babelHelpers.inherits(n,e);function n(){babelHelpers.classCallCheck(this,n);return babelHelpers.possibleConstructorReturn(this,babelHelpers.getPrototypeOf(n).apply(this,arguments))}babelHelpers.createClass(n,[{key:"getName",value:function e(){return"files"}},{key:"getState",value:function e(){return{created:0,host:this.getVariable("host",location.protocol+"//"+location.host),collection:{},index:{}}}},{key:"getElementState",value:function e(){var i=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var n=i.id,a=n===void 0?0:n,r=i.chatId,o=r===void 0?0:r,s=i.name,l=s===void 0?this.getVariable("default.name",""):s;return{id:a,chatId:o,name:l,templateId:a,date:new Date,type:"file",extension:"",icon:"empty",size:0,image:false,status:t.FileStatus.done,progress:100,authorId:0,authorName:"",urlPreview:"",urlShow:"",urlDownload:"",init:false}}},{key:"getGetters",value:function e(){var t=this;return{get:function e(t){return function(e,i){var n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;if(!e||!i){return null}if(!t.index[e]||!t.index[e][i]){return null}if(!n&&!t.index[e][i].init){return null}return t.index[e][i]}},getList:function e(t){return function(e){if(!t.index[e]){return null}return t.index[e]}},getBlank:function e(i){return function(e){return t.getElementState(e)}}}}},{key:"getActions",value:function e(){var i=this;return{add:function e(t,n){var a=i.validate(Object.assign({},n),{host:t.state.host});a.id="temporary"+(new Date).getTime()+t.state.created;a.templateId=a.id;a.init=true;t.commit("add",Object.assign({},i.getElementState(),a));return a.id},set:function e(n,a){if(a instanceof Array){a=a.map(function(e){var t=i.validate(Object.assign({},e),{host:n.state.host});t.templateId=t.id;return Object.assign({},i.getElementState(),t,{init:true})})}else{var r=i.validate(Object.assign({},a),{host:n.state.host});r.templateId=r.id;a=[];a.push(Object.assign({},i.getElementState(),r,{init:true}))}n.commit("set",{insertType:t.MutationType.setAfter,data:a})},setBefore:function e(n,a){if(a instanceof Array){a=a.map(function(e){var t=i.validate(Object.assign({},e),{host:n.state.host});t.templateId=t.id;return Object.assign({},i.getElementState(),t,{init:true})})}else{var r=i.validate(Object.assign({},a),{host:n.state.host});r.templateId=r.id;a=[];a.push(Object.assign({},i.getElementState(),r,{init:true}))}n.commit("set",{actionName:"setBefore",insertType:t.MutationType.setBefore,data:a})},update:function e(t,n){var a=i.validate(Object.assign({},n.fields),{host:t.state.host});t.commit("initCollection",{chatId:n.chatId});var r=t.state.collection[n.chatId].findIndex(function(e){return e.id===n.id});if(r<0){return false}t.commit("update",{id:n.id,chatId:n.chatId,index:r,fields:a});if(n.fields.blink){setTimeout(function(){t.commit("update",{id:n.id,chatId:n.chatId,fields:{blink:false}})},1e3)}return true},delete:function e(t,i){t.commit("delete",{id:i.id,chatId:i.chatId});return true},saveState:function e(t,i){t.commit("saveState",{});return true}}}},{key:"getMutations",value:function e(){var i=this;return{initCollection:function e(t,n){i.initCollection(t,n)},add:function e(t,n){i.initCollection(t,n);t.collection[n.chatId].push(n);t.index[n.chatId][n.id]=n;t.created+=1;i.saveState(t)},set:function e(n,a){var r=true;var o=false;var s=undefined;try{var l=function e(){var r=c.value;i.initCollection(n,{chatId:r.chatId});var o=n.collection[r.chatId].findIndex(function(e){return e.id===r.id});if(o>-1){delete r.templateId;n.collection[r.chatId][o]=Object.assign(n.collection[r.chatId][o],r)}else if(a.insertType===t.MutationType.setBefore){n.collection[r.chatId].unshift(r)}else{n.collection[r.chatId].push(r)}n.index[r.chatId][r.id]=r;i.saveState(n)};for(var d=a.data[Symbol.iterator](),c;!(r=(c=d.next()).done);r=true){l()}}catch(e){o=true;s=e}finally{try{if(!r&&d.return!=null){d.return()}}finally{if(o){throw s}}}},update:function e(t,n){i.initCollection(t,n);var a=-1;if(typeof n.index!=="undefined"&&t.collection[n.chatId][n.index]){a=n.index}else{a=t.collection[n.chatId].findIndex(function(e){return e.id===n.id})}if(a>=0){delete n.fields.templateId;var r=Object.assign(t.collection[n.chatId][a],n.fields);t.collection[n.chatId][a]=r;t.index[n.chatId][r.id]=r;i.saveState(t)}},delete:function e(t,n){i.initCollection(t,n);t.collection[n.chatId]=t.collection[n.chatId].filter(function(e){return e.id!==n.id});delete t.index[n.chatId][n.id];i.saveState(t)},saveState:function e(t,n){i.saveState(t)}}}},{key:"initCollection",value:function e(t,n){if(typeof t.collection[n.chatId]!=="undefined"){return true}i.Vue.set(t.collection,n.chatId,[]);i.Vue.set(t.index,n.chatId,{});return true}},{key:"getLoadedState",value:function e(t){if(!t||babelHelpers.typeof(t)!=="object"){return t}if(babelHelpers.typeof(t.collection)!=="object"){return t}t.index={};var i=function e(i){if(!t.collection.hasOwnProperty(i)){return"continue"}t.index[i]={};t.collection[i].filter(function(e){return e!=null}).forEach(function(e){t.index[i][e.id]=e})};for(var n in t.collection){var a=i(n);if(a==="continue")continue}return t}},{key:"getSaveFileList",value:function e(){if(!this.db){return[]}if(!this.store.getters["messages/getSaveFileList"]){return[]}var t=this.store.getters["messages/getSaveFileList"]();if(!t){return[]}return t}},{key:"getSaveTimeout",value:function e(){return 250}},{key:"saveState",value:function e(t){var i=this;if(!this.isSaveAvailable()){return false}babelHelpers.get(babelHelpers.getPrototypeOf(n.prototype),"saveState",this).call(this,function(){var e=i.getSaveFileList();if(!e){return false}var n={collection:{}};var a=function i(a){if(!e.hasOwnProperty(a)){return"continue"}e[a].forEach(function(e){if(!t.index[a]){return false}if(!t.index[a][e]){return false}if(!n.collection[a]){n.collection[a]=[]}n.collection[a].push(t.index[a][e])})};for(var r in e){var o=a(r);if(o==="continue")continue}return n})}},{key:"validate",value:function e(i){var r=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var o={};r.host=r.host||this.getState().host;if(typeof i.id==="number"){o.id=i.id}else if(typeof i.id==="string"){if(i.id.startsWith("temporary")){o.id=i.id}else{o.id=parseInt(i.id)}}if(typeof i.templateId==="number"){o.templateId=i.templateId}else if(typeof i.templateId==="string"){if(i.templateId.startsWith("temporary")){o.templateId=i.templateId}else{o.templateId=parseInt(i.templateId)}}if(typeof i.chatId==="number"||typeof i.chatId==="string"){o.chatId=parseInt(i.chatId)}if(typeof i.date!=="undefined"){o.date=a.Utils.date.cast(i.date)}if(typeof i.type==="string"){o.type=i.type}if(typeof i.extension==="string"){o.extension=i.extension.toString();if(o.type==="image"){o.icon="img"}else if(o.type==="video"){o.icon="mov"}else{o.icon=n.getIconType(o.extension)}}if(typeof i.name==="string"||typeof i.name==="number"){o.name=i.name.toString()}if(typeof i.size==="number"||typeof i.size==="string"){o.size=parseInt(i.size)}if(typeof i.image==="boolean"){o.image=false}else if(babelHelpers.typeof(i.image)==="object"&&i.image){o.image={width:0,height:0};if(typeof i.image.width==="string"||typeof i.image.width==="number"){o.image.width=parseInt(i.image.width)}if(typeof i.image.height==="string"||typeof i.image.height==="number"){o.image.height=parseInt(i.image.height)}if(o.image.width<=0||o.image.height<=0){o.image=false}}if(typeof i.status==="string"&&typeof t.FileStatus[i.status]!=="undefined"){o.status=i.status}if(typeof i.progress==="number"||typeof i.progress==="string"){o.progress=parseInt(i.progress)}if(typeof i.authorId==="number"||typeof i.authorId==="string"){o.authorId=parseInt(i.authorId)}if(typeof i.authorName==="string"||typeof i.authorName==="number"){o.authorName=i.authorName.toString()}if(typeof i.urlPreview==="string"){if(!i.urlPreview||i.urlPreview.startsWith("http")||i.urlPreview.startsWith("bx")||i.urlPreview.startsWith("file")){o.urlPreview=i.urlPreview}else{o.urlPreview=r.host+i.urlPreview}}if(typeof i.urlDownload==="string"){if(!i.urlDownload||i.urlDownload.startsWith("http")||i.urlDownload.startsWith("bx")||i.urlPreview.startsWith("file")){o.urlDownload=i.urlDownload}else{o.urlDownload=r.host+i.urlDownload}}if(typeof i.urlShow==="string"){if(!i.urlShow||i.urlShow.startsWith("http")||i.urlShow.startsWith("bx")||i.urlShow.startsWith("file")){o.urlShow=i.urlShow}else{o.urlShow=r.host+i.urlShow}}return o}}],[{key:"getType",value:function e(i){i=i.toString().toLowerCase().split(".").splice(-1)[0];switch(i){case"png":case"jpe":case"jpg":case"jpeg":case"gif":case"heic":case"bmp":return t.FileType.image;case"mp4":case"mkv":case"webm":case"mpeg":case"hevc":case"avi":case"3gp":case"flv":case"m4v":case"ogg":case"wmv":case"mov":return t.FileType.video;case"mp3":return t.FileType.audio}return t.FileType.file}},{key:"getIconType",value:function e(t){var i="empty";switch(t.toString()){case"png":case"jpe":case"jpg":case"jpeg":case"gif":case"heic":case"bmp":i="img";break;case"mp4":case"mkv":case"webm":case"mpeg":case"hevc":case"avi":case"3gp":case"flv":case"m4v":case"ogg":case"wmv":case"mov":i="mov";break;case"txt":i="txt";break;case"doc":case"docx":i="doc";break;case"xls":case"xlsx":i="xls";break;case"php":i="php";break;case"pdf":i="pdf";break;case"ppt":case"pptx":i="ppt";break;case"rar":i="rar";break;case"zip":case"7z":case"tar":case"gz":case"gzip":i="zip";break;case"set":i="set";break;case"conf":case"ini":case"plist":i="set";break}return i}}]);return n}(n.VuexBuilderModel);var u=function(e){babelHelpers.inherits(t,e);function t(){babelHelpers.classCallCheck(this,t);return babelHelpers.possibleConstructorReturn(this,babelHelpers.getPrototypeOf(t).apply(this,arguments))}babelHelpers.createClass(t,[{key:"getName",value:function e(){return"recent"}},{key:"getState",value:function e(){return{host:this.getVariable("host",location.protocol+"//"+location.host),collection:{pinned:[],general:[]}}}},{key:"getElementState",value:function e(){return{id:0,templateId:"",template:"item",chatType:"chat",sectionCode:"general",avatar:"",color:"#048bd0",title:"",message:{id:0,text:"",date:new Date},counter:0,pinned:false,chatId:0,userId:0}}},{key:"getGetters",value:function e(){var t=this;return{get:function e(i){return function(e){return t.findItem(i.collection,e)}}}}},{key:"getActions",value:function e(){var t=this;return{set:function e(i,n){var a={};if(n.pinned instanceof Array){a.pinned=n.pinned.map(function(e){return t.prepareItem(e,{host:i.state.host,sectionCode:"pinned"})})}else if(typeof n.pinned!=="undefined"){var r=[];r.push(t.prepareItem(n.pinned,{host:i.state.host,sectionCode:"pinned"}));a.pinned=r}if(n.general instanceof Array){a.general=n.general.map(function(e){return t.prepareItem(e,{host:i.state.host})})}else if(typeof n.general!=="undefined"){var o=[];o.push(t.prepareItem(n.general,{host:i.state.host}));a.general=o}i.commit("set",a)},updatePlaceholders:function e(i,n){if(!(n.items instanceof Array)){return false}n.items=n.items.map(function(e){return t.prepareItem(e)});n.items.forEach(function(e,a){var r="placeholder"+(n.firstMessage+a);var o=t.findItem(i.state.collection,r,"templateId");var s=t.findItem(i.state.collection,e.id);if(s.element){i.commit("update",{index:s.index,fields:Object.assign({},e),section:"general"});i.commit("delete",{index:o.index,section:"general"})}else{i.commit("update",{index:o.index,fields:Object.assign({},e),section:"general"})}})},update:function e(i,n){if(babelHelpers.typeof(n)!=="object"||n instanceof Array||!n.id||!n.fields){return false}if(typeof n.id==="string"&&!n.id.startsWith("chat")&&n.id!=="notify"){n.id=parseInt(n.id)}var a=t.findItem(i.state.collection,n.id);if(!a.element){return false}i.commit("update",{index:a.index,fields:Object.assign({},t.validate(n.fields)),section:a.element.sectionCode})},pin:function e(i,n){if(babelHelpers.typeof(n)!=="object"||n instanceof Array||!n.id||typeof n.action!=="boolean"){return false}if(typeof n.id==="string"&&!n.id.startsWith("chat")&&n.id!=="notify"){n.id=parseInt(n.id)}var a=t.findItem(i.state.collection,n.id,undefined,n.action?"general":"pinned");if(!a.element){return true}if(n.action){i.state.collection.pinned.push(Object.assign({},a.element,{sectionCode:"pinned",pinned:true}));i.state.collection.pinned.sort(t.sortListByMessageDate);i.commit("delete",{index:a.index,section:"general"})}else{i.state.collection.general.push(Object.assign({},a.element,{sectionCode:"general",pinned:false}));i.state.collection.general.sort(t.sortListByMessageDate);i.commit("delete",{index:a.index,section:"pinned"})}},clearPlaceholders:function e(t,i){t.state.collection.general=t.state.collection.general.filter(function(e){return!e.id.toString().startsWith("placeholder")})},delete:function e(i,n){if(babelHelpers.typeof(n)!=="object"||n instanceof Array||!n.id){return false}if(typeof n.id==="string"&&!n.id.startsWith("chat")&&n.id!=="notify"){n.id=parseInt(n.id)}var a=t.findItem(i.state.collection,n.id);if(!a.element){return false}i.commit("delete",{index:a.index,section:a.element.sectionCode})}}}},{key:"getMutations",value:function e(){var t=this;return{set:function e(i,n){if(n.general instanceof Array){n.general.forEach(function(e){var n=t.initCollection(i,e,"general"),a=n.index,r=n.alreadyExists;if(r){i.collection.general[a]=Object.assign({},i.collection.general[a],e)}})}if(n.pinned instanceof Array){n.pinned.forEach(function(e){var n=t.initCollection(i,e,"pinned"),a=n.index,r=n.alreadyExists;if(r){i.collection.pinned[a]=Object.assign({},i.collection.pinned[a],e)}})}},update:function e(i,n){if(!n||n instanceof Array||babelHelpers.typeof(n.fields)!=="object"||typeof n.index!=="number"||typeof n.section!=="string"){return false}i.collection[n.section][n.index]=Object.assign({},i.collection[n.section][n.index],n.fields);i.collection[n.section].sort(t.sortListByMessageDate)},delete:function e(t,i){if(!i||i instanceof Array||typeof i.index!=="number"||typeof i.section!=="string"){return false}t.collection[i.section].splice(i.index,1)}}}},{key:"initCollection",value:function e(t,i,n){var a=this.findItem(t.collection,i.id,undefined,n);if(a.element){return{index:a.index,alreadyExists:true}}var r=t.collection[n].push(Object.assign({},this.getElementState(),i));return{index:r-1,alreadyExists:false}}},{key:"validate",value:function e(t){var i=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var n={};if(typeof t.id==="number"||typeof t.id==="string"){n.id=t.id}if(typeof t.templateId==="string"){n.templateId=t.templateId}if(typeof t.template==="string"){n.template=t.template}if(typeof t.type==="string"){if(t.type==="chat"){if(t.chat.type==="open"){n.chatType="open"}else if(t.chat.type==="chat"){n.chatType="chat"}}else if(t.type==="user"){n.chatType="user"}else if(t.type==="notification"){n.chatType="notification";t.title="Notifications"}}if(typeof t.avatar==="string"){var a;if(!t.avatar||t.avatar.endsWith("/js/im/images/blank.gif")){a=""}else if(t.avatar.startsWith("http")){a=t.avatar}else{a=i.host+t.avatar}if(a){n.avatar=encodeURI(a)}}if(typeof t.color==="string"){n.color=t.color}if(typeof t.title==="string"){n.title=t.title}if(babelHelpers.typeof(t.message)==="object"&&!(t.message instanceof Array)&&t.message!==null){n.message=t.message}if(typeof t.counter==="number"){n.counter=t.counter}if(typeof t.pinned==="boolean"){n.pinned=t.pinned}if(typeof t.chatId==="number"){n.chatId=t.chatId}if(typeof t.userId==="number"){n.userId=t.userId}return n}},{key:"sortListByMessageDate",value:function e(t,i){if(t.message&&i.message){var n=new Date(t.message.date).getTime();var a=new Date(i.message.date).getTime();return a-n}}},{key:"prepareItem",value:function e(t){var i=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var n=this.validate(Object.assign({},t));return Object.assign({},this.getElementState(),n,i)}},{key:"findItem",value:function e(t,i){var n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:"id";var a=arguments.length>3&&arguments[3]!==undefined?arguments[3]:"general";var r={};if(babelHelpers.typeof(t[a])===undefined){return r}var o=t[a].findIndex(function(e,t){return e[n]===i});if(o!==-1){r.index=o;r.element=t[a][o];return r}return r}}]);return t}(n.VuexBuilderModel);e.ApplicationModel=r;e.MessagesModel=s;e.DialoguesModel=l;e.UsersModel=d;e.FilesModel=c;e.RecentModel=u})(this.BX.Messenger.Model=this.BX.Messenger.Model||{},BX.Messenger.Const,BX,BX,BX.Messenger.Lib); //# sourceMappingURL=registry.bundle.map.js test/users.test.js 0000664 00000001110 14773234674 0010214 0 ustar 00 import {VuexBuilder} from "ui.vue.vuex"; import {UsersModel} from '../src/users'; describe('Im model: Users', () => { let vuex = null; before(async () => { vuex = await new VuexBuilder() .addModel( UsersModel.create() .useDatabase(false) .setVariables({ host: 'http://bitrix24.com', default: {name: 'Anonymous'} }) ) .build() ; }); it('Model is loaded', () => { assert(typeof UsersModel !== 'undefined'); }); it('Model is initialize', async () => { assert.equal(vuex.store.state.users.host, 'http://bitrix24.com'); }); }); test/recent.test.js 0000664 00000071610 14773234674 0010347 0 ustar 00 import {VuexBuilder} from "ui.vue.vuex"; import {RecentModel} from '../src/recent'; let vuex = null; let store = null; before(async () => { vuex = await new VuexBuilder() .addModel( RecentModel.create() .useDatabase(false) .setVariables({ host: 'http://test.com', }) ) .build(); store = vuex.store.state.recent; }); afterEach(() => { clearStore(); }); describe('Im model: Recent', () => { describe('Initialization', () => { it('model is loaded', () => { assert(typeof RecentModel !== 'undefined'); }); it('model is initialized', async () => { assert.equal(store.host, 'http://test.com'); assert.equal(Array.isArray(store.collection.general), true); assert.equal(Array.isArray(store.collection.pinned), true); }); }); describe('getElementState', () => { it('returns a object', () => { assert.equal(typeof RecentModel.prototype.getElementState(), 'object'); }); it('returns default item', () => { let newItem = RecentModel.prototype.getElementState(); assert.equal(newItem.id, 0); assert.equal(newItem.templateId, ''); assert.equal(newItem.template, 'item'); assert.equal(newItem.chatType, 'chat'); assert.equal(newItem.sectionCode, 'general'); assert.equal(newItem.avatar, ''); assert.equal(newItem.color, '#048bd0'); assert.equal(newItem.title, ''); assert.equal(typeof newItem.message, 'object'); assert.equal(newItem.message.id, 0); assert.equal(newItem.message.text, ''); assert.equal(newItem.message.date instanceof Date, true); assert.equal(newItem.counter, 0); assert.equal(newItem.pinned, false); assert.equal(newItem.chatId, 0); assert.equal(newItem.userId, 0); }); }); describe('Mutations', () => { describe('set', () => { it('exists', () => { assert.equal(typeof RecentModel.prototype.getMutations().set, 'function'); }); it('expects array and does nothing if separate item is passed', () => { vuex.store.commit('recent/set', createItem()); assert.equal(store.collection.general.length, 0); assert.equal(store.collection.pinned.length, 0); }); it('adds new item in general collection for each item in payload.general', () => { let payload = {}; payload.general = [ {title: 'First item'}, {title: 'Second item'} ]; vuex.store.commit('recent/set', payload); assert.equal(store.collection.general.length, 2); assert.equal(store.collection.pinned.length, 0); assert.equal(store.collection.general[0].title, payload.general[0].title); assert.equal(store.collection.general[1].title, payload.general[1].title); }); it('adds new item in pinned collection for each item in payload.pinned', () => { let payload = {}; payload.pinned = [ {title: 'First item'}, {title: 'Second item'} ]; vuex.store.commit('recent/set', payload); assert.equal(store.collection.general.length, 0); assert.equal(store.collection.pinned.length, 2); assert.equal(store.collection.pinned[0].title, payload.pinned[0].title); assert.equal(store.collection.pinned[1].title, payload.pinned[1].title); }); it('adds items in both collections if there are items in both payload.general and payload.pinned', () => { let payload = {}; payload.general = [ {title: 'First general item'}, {title: 'Second general item'}, {title: 'Third general item'} ]; payload.pinned = [ {title: 'First pinned item'}, {title: 'Second pinned item'} ]; vuex.store.commit('recent/set', payload); assert.equal(store.collection.general.length, 3); assert.equal(store.collection.general[0].title, payload.general[0].title); assert.equal(store.collection.general[1].title, payload.general[1].title); assert.equal(store.collection.general[2].title, payload.general[2].title); assert.equal(store.collection.pinned.length, 2); assert.equal(store.collection.pinned[0].title, payload.pinned[0].title); assert.equal(store.collection.pinned[1].title, payload.pinned[1].title); }); }); describe('update', () => { it('exists', () => { assert.equal(typeof RecentModel.prototype.getActions().update, 'function'); }); it('expects single object (fields, section, index) and does nothing if something else is passed', () => { let newItem = createItem({ id: 'chat1', title: 'Original title' }); store.collection.general.push(newItem); let payload = [ {id: 'chat1', fields: {title: 'Changed title'}}, {id: 'chat2', fields: {}} ]; vuex.store.commit('recent/update', payload); let existingItem = RecentModel.prototype.findItem(store.collection, newItem.id); assert.equal(existingItem.element.title, newItem.title); }); it('updates existing item with passed data', () => { let newItem = createItem({ id: 'chat1', title: 'Original title' }); store.collection.general.push(newItem); let existingItem = RecentModel.prototype.findItem(store.collection, newItem.id); let payload = { index: existingItem.index, fields: {title: 'Changed title'}, section: existingItem.element.sectionCode }; vuex.store.commit('recent/update', payload); existingItem = RecentModel.prototype.findItem(store.collection, newItem.id); assert.equal(existingItem.element.title, payload.fields.title); }); }); describe('delete', () => { it('exists', () => { assert.equal(typeof RecentModel.prototype.getActions().delete, 'function'); }); it('expects single object (section, index) and does nothing if something else is passed', () => { let newItem = createItem({ id: 'chat1', title: 'Original title' }); store.collection.general.push(newItem); let payload = { index: 0 }; vuex.store.commit('recent/delete', payload); let existingItem = RecentModel.prototype.findItem(store.collection, newItem.id); assert.equal(store.collection.general.length, 1); assert.equal(existingItem.element.title, newItem.title); }); it('deletes item with passed index in passed section of collection', () => { let newItem = createItem({ id: 'chat1', title: 'Original title' }); store.collection.general.push(newItem); let existingItem = RecentModel.prototype.findItem(store.collection, newItem.id); let payload = { index: existingItem.index, section: existingItem.element.sectionCode }; vuex.store.commit('recent/delete', payload); assert.equal(store.collection.general.length, 0); }); }); }); describe('Actions', () => { describe('set', () => { it('exists', () => { assert.equal(typeof RecentModel.prototype.getActions().set, 'function'); }); it('expects object with pinned and general properties and does nothing if something else was provided', () => { let payload = { id: 'chat13', title: 'My new title', color: 'red' }; return vuex.store.dispatch('recent/set', payload).then(() => { assert.equal(store.collection.general.length, 0); }); }); it('can set single item', () => { let payload = {}; payload.general = { id: 'chat13', title: 'My new title', color: 'red' }; return vuex.store.dispatch('recent/set', payload).then(() => { assert.equal(store.collection.general.length, 1); assert.equal(store.collection.general[0].id, payload.general.id); assert.equal(store.collection.general[0].title, payload.general.title); assert.equal(store.collection.general[0].color, payload.general.color); }); }); it('can set array of items', () => { let payload = {}; payload.general = [ { id: 'chat13', title: 'My new title', color: 'red' }, { id: 'chat14', title: 'My second title', color: 'blue' }, ]; payload.pinned = [ { id: 'chat15', title: 'My pinned title', color: 'green' } ]; return vuex.store.dispatch('recent/set', payload).then(() => { assert.equal(store.collection.general.length, 2); assert.equal(store.collection.general[0].id, payload.general[0].id); assert.equal(store.collection.general[0].title, payload.general[0].title); assert.equal(store.collection.general[0].color, payload.general[0].color); assert.equal(store.collection.general[1].id, payload.general[1].id); assert.equal(store.collection.general[1].title, payload.general[1].title); assert.equal(store.collection.general[1].color, payload.general[1].color); assert.equal(store.collection.pinned.length, 1); assert.equal(store.collection.pinned[0].id, payload.pinned[0].id); assert.equal(store.collection.pinned[0].title, payload.pinned[0].title); assert.equal(store.collection.pinned[0].color, payload.pinned[0].color); }); }); }); describe('update', () => { it('exists', () => { assert.equal(typeof RecentModel.prototype.getActions().update, 'function'); }); it('expects object with id and fields properties and does nothing if something else was passed', () => { let newItem = createItem({ title: 'Original title' }); store.collection.general.push(newItem); let payload = { id: newItem.id, item: {title: 'Changed title'} }; return vuex.store.dispatch('recent/set', payload).then(() => { assert.equal(store.collection.general[0].title, newItem.title); }); }); it('updates chat elements', () => { let newItem = createItem({ id: 'chat15', title: 'Original title' }); store.collection.general.push(newItem); let payload = { id: newItem.id, fields: { title: 'Changed title' } }; return vuex.store.dispatch('recent/update', payload) .then(() => { assert.equal(store.collection.general[0].title, payload.fields.title); }); }); it('updates user elements', () => { let newItem = createItem({ id: 18, title: 'Original user title' }); store.collection.general.push(newItem); let payload = { id: '18', fields: { title: 'Changed user title' } }; return vuex.store.dispatch('recent/update', payload) .then(() => { assert.equal(store.collection.general[0].title, payload.fields.title); }); }); }); describe('delete', () => { it('exists', () => { assert.equal(typeof RecentModel.prototype.getActions().delete, 'function'); }); it('deletes an element', () => { let newItem = createItem({ id: 'chat13' }); store.collection.general.push(newItem); let payload = { id: newItem.id }; return vuex.store.dispatch('recent/delete', payload) .then(() => { assert.equal(store.collection.general.length, 0); }); }); }); describe('pin', () => { it('exists', () => { assert.equal(typeof RecentModel.prototype.getActions().pin, 'function'); }); it('can pin item - adds item to pinned section and removes it from general section', () => { let newItem = createItem({ id: 'chat99', title: 'Pin me!' }); store.collection.general.push(newItem); let payload = { id: newItem.id, action: true }; return vuex.store.dispatch('recent/pin', payload) .then(() => { assert.equal(store.collection.general.length, 0); assert.equal(store.collection.pinned.length, 1); assert.equal(store.collection.pinned[0].title, newItem.title); assert.equal(store.collection.pinned[0].sectionCode, 'pinned'); assert.equal(store.collection.pinned[0].pinned, true); }); }); it('can unpin item - adds item to general section and removes it from pinned section', () => { let newItem = createItem({ id: 'chat99', title: 'Unpin me!' }); store.collection.pinned.push(newItem); let payload = { id: newItem.id, action: false }; return vuex.store.dispatch('recent/pin', payload) .then(() => { assert.equal(store.collection.pinned.length, 0); assert.equal(store.collection.general.length, 1); assert.equal(store.collection.general[0].title, newItem.title); assert.equal(store.collection.general[0].sectionCode, 'general'); assert.equal(store.collection.general[0].pinned, false); }); }); }); describe('clearPlaceholders', () => { it('exists', () => { assert.equal(typeof RecentModel.prototype.getActions().clearPlaceholders, 'function'); }); it('removes all items from "general" collection with id starting with "placeholder"', () => { let newItem = createItem({ id: 'placeholder1' }); let newItem2 = createItem({ id: 'placeholder2' }); let newItem3 = createItem({ id: 'chat3' }); store.collection.general.push(newItem, newItem2, newItem3); return vuex.store.dispatch('recent/clearPlaceholders') .then(() => { assert.equal(store.collection.general.length, 1); }); }); }); describe('updatePlaceholders', () => { it('exists', () => { assert.equal(typeof RecentModel.prototype.getActions().updatePlaceholders, 'function'); }); it('updates item and deletes appropriate placeholder if there is item with passed id', () => { let newItem = createItem({ id: 'chat3', title: 'I was here already!' }); let newItem2 = createItem({ id: 'chat4', title: 'I was here already too!' }); store.collection.general.push(newItem, newItem2); let placeholders = []; placeholders.push( { id: 'placeholder0', templateId: 'placeholder0', template: 'placeholder', sectionCode: 'general' }, { id: 'placeholder1', templateId: 'placeholder1', template: 'placeholder', sectionCode: 'general' } ); store.collection.general.push(...placeholders); let payload = {}; payload.items = [ { id: newItem.id, title: 'I am new data!', }, { id: newItem2.id, title: 'I am new data too!', } ]; payload.firstMessage = 0; return vuex.store.dispatch('recent/updatePlaceholders', payload) .then(() => { assert.equal(store.collection.general.length, 2); assert.equal(store.collection.general[0].title, payload.items[0].title); assert.equal(store.collection.general[1].title, payload.items[1].title); }); }); it('updates appropriate placeholder with passed data if there is no item with passed id', () => { let placeholders = []; placeholders.push( { id: 'placeholder0', templateId: 'placeholder0', template: 'placeholder', sectionCode: 'general' }, { id: 'placeholder1', templateId: 'placeholder1', template: 'placeholder', sectionCode: 'general' } ); store.collection.general.push(...placeholders); let payload = {}; payload.items = [ { id: 'chat11', title: 'I am totally new data!' }, { id: 'chat12', title: 'I am totally new data too!' } ]; payload.firstMessage = 0; return vuex.store.dispatch('recent/updatePlaceholders', payload) .then(() => { assert.equal(store.collection.general.length, 2); assert.equal(store.collection.general[0].title, payload.items[0].title); assert.equal(store.collection.general[1].title, payload.items[1].title); }); }); }); }); describe('Helpers', () => { describe('findItem()', () => { it('exists', () => { assert.equal(typeof RecentModel.prototype.findItem, 'function'); }); it('returns empty object if there is no such item', () => { let existingItem = RecentModel.prototype.findItem(store.collection, 'id', 999); assert.equal(typeof existingItem, 'object'); assert.equal(typeof existingItem.element, 'undefined'); assert.equal(typeof existingItem.index, 'undefined'); }); describe('successful search', () => { it('finds items based on ID by default', () => { let newItem = createItem(); store.collection.general.push(newItem); let existingItem = RecentModel.prototype.findItem(store.collection, newItem.id); assert.notEqual(typeof existingItem.index, 'undefined'); assert.notEqual(typeof existingItem.element, 'undefined'); }); it('can find item based on any key', () => { let newItem = createItem(); store.collection.general.push(newItem); let existingItem = RecentModel.prototype.findItem(store.collection, newItem.title, 'title'); assert.notEqual(typeof existingItem.index, 'undefined'); assert.notEqual(typeof existingItem.element, 'undefined'); }); it('returns index of found item', () => { let newItem = createItem(); store.collection.general.push(newItem); let existingItem = RecentModel.prototype.findItem(store.collection, newItem.id); assert.equal(existingItem.index, 0); }); it('returns found item itself', () => { let newItem = createItem(); store.collection.general.push(newItem); let existingItem = RecentModel.prototype.findItem(store.collection, newItem.id); assert.equal(existingItem.element, newItem); assert.equal(existingItem.element.id, newItem.id); assert.equal(existingItem.element.title, newItem.title); assert.equal(existingItem.element.message.text, newItem.message.text); }); it('can find items both in general and pinned sections', () => { let newItem = createItem(); let newPinnedItem = Object.assign({}, RecentModel.prototype.getElementState(), { id: 'chat6', title: 'Second user', message: { id: 6, text: 'Message of second user' } }); store.collection.general.push(newItem); store.collection.pinned.push(newPinnedItem); let existingItem = RecentModel.prototype.findItem(store.collection, newPinnedItem.id, undefined, 'pinned'); assert.equal(existingItem.element, newPinnedItem); assert.equal(existingItem.element.id, newPinnedItem.id); assert.equal(existingItem.element.title, newPinnedItem.title); assert.equal(existingItem.element.message.text, newPinnedItem.message.text); }); }); }); describe('initCollection()', () => { it('exists', () => { assert.equal(typeof RecentModel.prototype.initCollection, 'function'); }); it('returns index and flag if element is already exists', () => { let newItem = createItem(); store.collection.general.push(newItem); let {index, alreadyExists} = RecentModel.prototype.initCollection(store, newItem, 'general'); assert.equal(alreadyExists, true); assert.equal(typeof index, 'number'); assert.equal(index, 0); }); it('if not found - creates new element with given data and returns its index and flag', () => { store.collection.general.push(createItem()); let payload = {id: 999}; let {index, alreadyExists} = RecentModel.prototype.initCollection(store, payload, 'general'); let existingItem = RecentModel.prototype.findItem(store.collection, payload.id); assert.equal(alreadyExists, false); assert.equal(store.collection.general.length, 2); assert.equal(index, 1); assert.equal(existingItem.element.id, payload.id); }); }); describe('prepareItem()', () => { it('exists', () => { assert.equal(typeof RecentModel.prototype.prepareItem, 'function'); }); it('creates new object from getElementState and validated payload', () => { let payload = { id: 13, title: 'My super title' }; let result = RecentModel.prototype.prepareItem(payload); let defaultState = RecentModel.prototype.getElementState(); assert.equal(result.id, payload.id); assert.equal(result.title, payload.title); assert.equal(result.color, defaultState.color); assert.equal(result.message.text, defaultState.message.text); }); it('can add provided options to item', () => { let payload = { id: 13, title: 'My super title' }; let options = {host: 'www.bitri24.ru'}; let result = RecentModel.prototype.prepareItem(payload, options); assert.equal(result.host, options.host); }); }); describe('validate()', () => { it('exists', () => { assert.equal(typeof RecentModel.prototype.validate, 'function'); }); it('checks if id is number or string', () => { let payload = { id: true }; let result = RecentModel.prototype.validate(payload); assert.equal(result.id, undefined); payload = { id: {} }; result = RecentModel.prototype.validate(payload); assert.equal(result.id, undefined); payload = { id: 'chat1' }; result = RecentModel.prototype.validate(payload); assert.equal(result.id, payload.id); payload = { id: 18 }; result = RecentModel.prototype.validate(payload); assert.equal(result.id, payload.id); }); it('checks if templateId is string', () => { let payload = { templateId: true }; let result = RecentModel.prototype.validate(payload); assert.equal(result.templateId, undefined); payload = { templateId: {} }; result = RecentModel.prototype.validate(payload); assert.equal(result.templateId, undefined); payload = { templateId: 18 }; result = RecentModel.prototype.validate(payload); assert.equal(result.templateId, undefined); payload = { templateId: 'chat1' }; result = RecentModel.prototype.validate(payload); assert.equal(result.templateId, payload.templateId); }); it('checks if template is string', () => { let payload = { template: true }; let result = RecentModel.prototype.validate(payload); assert.equal(result.template, undefined); payload = { template: {} }; result = RecentModel.prototype.validate(payload); assert.equal(result.template, undefined); payload = { template: 18 }; result = RecentModel.prototype.validate(payload); assert.equal(result.template, undefined); payload = { template: 'chat1' }; result = RecentModel.prototype.validate(payload); assert.equal(result.template, payload.template); }); it('checks if type is string', () => { let payload = { type: true }; let result = RecentModel.prototype.validate(payload); assert.equal(result.type, undefined); payload = { type: {} }; result = RecentModel.prototype.validate(payload); assert.equal(result.type, undefined); payload = { type: 18 }; result = RecentModel.prototype.validate(payload); assert.equal(result.type, undefined); }); it('sets chatType for chats, users and notifications', () => { let payload = { type: 'chat', chat: { type: 'open' } }; let result = RecentModel.prototype.validate(payload); assert.equal(result.chatType, payload.chat.type); payload = { type: 'chat', chat: { type: 'chat' } }; result = RecentModel.prototype.validate(payload); assert.equal(result.chatType, payload.chat.type); payload = { type: 'user', }; result = RecentModel.prototype.validate(payload); assert.equal(result.chatType, payload.type); payload = { type: 'notification', }; result = RecentModel.prototype.validate(payload); assert.equal(result.chatType, payload.type); assert.equal(payload.title, 'Notifications'); }); it('checks if avatar is string', () => { let payload = { avatar: true }; let result = RecentModel.prototype.validate(payload); assert.equal(result.avatar, undefined); payload = { avatar: {} }; result = RecentModel.prototype.validate(payload); assert.equal(result.avatar, undefined); payload = { avatar: 18 }; result = RecentModel.prototype.validate(payload); assert.equal(result.avatar, undefined); }); it('formats avatar string', () => { let payload = { avatar: '' }; let result = RecentModel.prototype.validate(payload); assert.equal(result.avatar, undefined); payload = { avatar: 'http://www.google.com' }; result = RecentModel.prototype.validate(payload); assert.equal(result.avatar, encodeURI(payload.avatar)); payload = { avatar: '/images/my-photo.png' }; let host = 'www.bitrix24.com'; result = RecentModel.prototype.validate(payload, {host: host}); assert.equal(result.avatar, encodeURI(host + payload.avatar)); }); it('checks if color is string', () => { let payload = { color: true }; let result = RecentModel.prototype.validate(payload); assert.equal(result.color, undefined); payload = { color: {} }; result = RecentModel.prototype.validate(payload); assert.equal(result.color, undefined); payload = { color: 18 }; result = RecentModel.prototype.validate(payload); assert.equal(result.color, undefined); payload = { color: '#ccc' }; result = RecentModel.prototype.validate(payload); assert.equal(result.color, payload.color); }); it('checks if title is string', () => { let payload = { title: true }; let result = RecentModel.prototype.validate(payload); assert.equal(result.title, undefined); payload = { title: {} }; result = RecentModel.prototype.validate(payload); assert.equal(result.title, undefined); payload = { title: 18 }; result = RecentModel.prototype.validate(payload); assert.equal(result.title, undefined); payload = { title: 'My title' }; result = RecentModel.prototype.validate(payload); assert.equal(result.color, payload.color); }); it('checks if message is object', () => { let payload = { message: [] }; let result = RecentModel.prototype.validate(payload); assert.equal(result.message, undefined); payload = { message: null }; result = RecentModel.prototype.validate(payload); assert.equal(result.message, undefined); payload = { message: 'My message' }; result = RecentModel.prototype.validate(payload); assert.equal(result.message, undefined); payload = { message: 18 }; result = RecentModel.prototype.validate(payload); assert.equal(result.message, undefined); payload = { message: {} }; result = RecentModel.prototype.validate(payload); assert.equal(typeof result.message, 'object'); }); it('checks if counter is number', () => { let payload = { counter: true }; let result = RecentModel.prototype.validate(payload); assert.equal(result.counter, undefined); payload = { counter: {} }; result = RecentModel.prototype.validate(payload); assert.equal(result.counter, undefined); payload = { counter: 'My title' }; result = RecentModel.prototype.validate(payload); assert.equal(result.counter, undefined); payload = { counter: 18 }; result = RecentModel.prototype.validate(payload); assert.equal(result.counter, payload.counter); }); it('checks if pinned is boolean', () => { let payload = { pinned: {} }; let result = RecentModel.prototype.validate(payload); assert.equal(result.pinned, undefined); payload = { pinned: 'My title' }; result = RecentModel.prototype.validate(payload); assert.equal(result.pinned, undefined); payload = { pinned: 18 }; result = RecentModel.prototype.validate(payload); assert.equal(result.pinned, undefined); payload = { pinned: true }; result = RecentModel.prototype.validate(payload); assert.equal(result.pinned, payload.pinned); }); it('checks if chatId is number', () => { let payload = { chatId: true }; let result = RecentModel.prototype.validate(payload); assert.equal(result.chatId, undefined); payload = { chatId: {} }; result = RecentModel.prototype.validate(payload); assert.equal(result.chatId, undefined); payload = { chatId: 'My title' }; result = RecentModel.prototype.validate(payload); assert.equal(result.chatId, undefined); payload = { chatId: 18 }; result = RecentModel.prototype.validate(payload); assert.equal(result.chatId, payload.chatId); }); it('checks if userId is number', () => { let payload = { userId: true }; let result = RecentModel.prototype.validate(payload); assert.equal(result.userId, undefined); payload = { userId: {} }; result = RecentModel.prototype.validate(payload); assert.equal(result.userId, undefined); payload = { userId: 'My title' }; result = RecentModel.prototype.validate(payload); assert.equal(result.userId, undefined); payload = { userId: 18 }; result = RecentModel.prototype.validate(payload); assert.equal(result.userId, payload.userId); }); }); }); }); function createItem(data = {}) { return Object.assign( RecentModel.prototype.getElementState(), { id: 'chatTest', title: 'Test user', message: { id: 5, text: 'Message of test user' } }, data ); } function clearStore() { store.collection.general = []; store.collection.pinned = []; }