%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/components/bitrix/mail.client/templates/.default/ |
Current File : //home/bitrix/www/bitrix/components/bitrix/mail.client/templates/.default/script.js |
;(function() { if (window.BXMailMessageController) return; var BXMailMessageController = {}; BXMailMessageController.init = function (options) { if (this.__inited) return; this.options = options; this.__dummyNode = document.createElement('DIV'); if ('edit' != this.options.type) { if (this.options.pageSize < 1 || this.options.pageSize > 100) this.options.pageSize = 5; this.__log = {'a': 0, 'b': 0}; var details = BX('mail-msg-view-details-'+this.options.messageId); var moreA = BX.findChildByClassName(details.parentNode, 'mail-msg-view-log-more-a', true); BX.bind(moreA, 'click', this.handleLogClick.bind(this, 'a')); var moreB = BX.findChildByClassName(details.parentNode, 'mail-msg-view-log-more-b', true); BX.bind(moreB, 'click', this.handleLogClick.bind(this, 'b')); var items = BX.findChildrenByClassName(details.parentNode, 'mail-msg-view-log-item', true); for (var i in items) { var log = items[i].getAttribute('data-log').toLowerCase(); if (typeof this.__log[log] != 'undefined') this.__log[log]++; BX.bind(items[i], 'click', this.handleLogItemClick.bind(this, items[i].getAttribute('data-id'))); } this.initCreateMenu(); } this.__inited = true; }; BXMailMessageController.initScrollable = function() { if (!this.__scrollable) { if (document.scrollingElement) this.__scrollable = document.scrollingElement; } if (!this.__scrollable) { if (document.documentElement.scrollTop > 0 || document.documentElement.scrollLeft > 0) this.__scrollable = document.documentElement; else if (document.body.scrollTop > 0 || document.body.scrollLeft > 0) this.__scrollable = document.body; } if (!this.__scrollable) { window.scrollBy(1, 1); if (document.documentElement.scrollTop > 0 || document.documentElement.scrollLeft > 0) this.__scrollable = document.documentElement; else if (document.body.scrollTop > 0 || document.body.scrollLeft > 0) this.__scrollable = document.body; window.scrollBy(-1, -1); } return this.__scrollable; } BXMailMessageController.scrollWrapper = function (pos) { var ctrl = this; if (!this.initScrollable()) return; if (this.__scrollable.__animation) { clearInterval(this.__scrollable.__animation); this.__scrollable.__animation = null; } var start = this.__scrollable.scrollTop; var delta = pos - start; var step = 0; this.__scrollable.__animation = setInterval(function() { step++; ctrl.__scrollable.scrollTop = start + delta * step/8; if (step >= 8) { clearInterval(ctrl.__scrollable.__animation); ctrl.__scrollable.__animation = null; } }, 20); }; BXMailMessageController.scrollTo = function (node1, node2) { if (!this.initScrollable()) return; var pos0 = BX.pos(this.__scrollable); pos0.top += this.__scrollable.scrollTop; pos0.bottom += this.__scrollable.scrollTop; var pos1 = BX.pos(node1); var pos2 = typeof node2 == 'undefined' || node2 === node1 ? pos1 : BX.pos(node2); if (pos1.top < pos0.top) { this.scrollWrapper(this.__scrollable.scrollTop - (pos0.top - pos1.top)); } else if (pos2.bottom > pos0.bottom) { this.scrollWrapper(Math.min( this.__scrollable.scrollTop - (pos0.top - pos1.top), this.__scrollable.scrollTop + (pos2.bottom - pos0.bottom) )); } }; BXMailMessageController.handleLogClick = function (log, event) { BX.PreventDefault(event); var button = BX.findChildByClassName( BX('mail-msg-view-details-'+this.options.messageId).parentNode, 'mail-msg-view-log-more-'+log, true ); this.loadLog(log, button); }; BXMailMessageController.loadLog = function (log, button) { var ctrl = this; var separator = button.parentNode; if (this['__loadingLog'+log]) return; this['__loadingLog'+log] = true; var data = { sessid: BX.bitrix_sessid(), action: 'log', id: this.options.messageId, log: log + this.__log[log], size: this.options.pageSize }; if (this.options.mail_uf_message_token) { data.mail_uf_message_token = this.options.mail_uf_message_token; } BX.ajax({ method: 'POST', url: this.options.ajaxUrl, data: data, dataType: 'json', onsuccess: function(json) { ctrl['__loadingLog'+log] = false; if (json.status == 'success') { ctrl.__dummyNode.innerHTML = json.data.html; var marker = log == 'a' ? BX.findNextSibling(separator, {'tag': 'div'}) : separator; while (ctrl.__dummyNode.childNodes.length > 0) { var item = separator.parentNode.insertBefore(ctrl.__dummyNode.childNodes[0], marker); if (item.nodeType == 1 && BX.hasClass(item, 'mail-msg-view-log-item')) { ctrl.__log[log]++; BX.addClass(item, 'mail-msg-show-animation-rev'); BX.bind(item, 'click', ctrl.handleLogItemClick.bind(ctrl, item.getAttribute('data-id'))); } } if (json.data.count < ctrl.options.pageSize) separator.style.display = 'none'; if (log == 'b' && ctrl.initScrollable()) { ctrl.scrollWrapper(ctrl.__scrollable.scrollHeight); } ctrl.__dummyNode.innerHTML = ''; } }, onfailure: function() { ctrl['__loadingLog'+log] = false; } }); }; BXMailMessageController.handleLogItemClick = function (messageId, event) { event = event || window.event; if (event.target && event.target.tagName && event.target.tagName.toUpperCase() == 'A') return; if (window.getSelection) { if (window.getSelection().toString().trim() != '') return; } else if (document.selection) { if (document.selection.createRange().htmlText.trim() != '') return; } BX.PreventDefault(event); this.toggleLogItem(messageId); }; BXMailMessageController.toggleLogItem = function (messageId) { var ctrl = this; var wrapper = BX('mail-msg-view-details-'+this.options.messageId).parentNode; var logItem = BX.findChildByClassName(wrapper, 'mail-msg-view-logitem-'+messageId, false); var details = BX.findChildByClassName(wrapper, 'mail-msg-view-details-'+messageId, false); var opened = BX.hasClass(logItem, 'mail-msg-view-item-open'); BX.removeClass(logItem, 'mail-msg-show-animation-rev'); BX.toggleClass(logItem, 'mail-msg-view-item-open'); if (opened) { details.style.display = 'none'; BX.addClass(logItem, 'mail-msg-show-animation-rev'); logItem.style.display = ''; } else { BX.removeClass(details, 'mail-msg-show-animation-rev'); BX.addClass(details, 'mail-msg-show-animation'); details.style.display = ''; if (details.getAttribute('data-empty')) { var data = { sessid: BX.bitrix_sessid(), action: 'logitem', id: messageId }; if (this.options.mail_uf_message_token) { data.mail_uf_message_token = this.options.mail_uf_message_token; } BX.ajax({ method: 'POST', url: this.options.ajaxUrl, data: data, dataType: 'json', onsuccess: function (json) { if (json.status != 'success') { json.errors = json.errors.map( function (item) { return item.message; } ); details.innerHTML = '<div class="mail-msg-view-log-item-error mail-msg-view-border-bottom">' + json.errors.join('<br>') + '</div>'; return; } var response = BX.processHTML(json.data); BX.removeClass(details, 'mail-msg-show-animation'); BX.removeClass(details, 'mail-msg-show-animation-rev'); setTimeout(function () { details.style.textAlign = ''; details.innerHTML = response.HTML; if (details.offsetHeight > 0) logItem.style.display = 'none'; BX.ajax.processScripts(response.SCRIPT); BX.addClass(details, 'mail-msg-show-animation-rev'); var button = BX.findChildByClassName(details, 'mail-msg-view-header', true); BX.bind(button, 'click', ctrl.handleLogItemClick.bind(ctrl, messageId)); ctrl.scrollTo(details); }, 10); details.removeAttribute('data-empty'); } }); this.scrollTo(logItem, details); } else { logItem.style.display = 'none'; this.scrollTo(details); } } }; BXMailMessageController.removeLogItem = function (messageId) { var wrapper = BX('mail-msg-view-details-'+this.options.messageId).parentNode; var logItem = BX.findChildByClassName(wrapper, 'mail-msg-view-logitem-'+messageId, false); var details = BX.findChildByClassName(wrapper, 'mail-msg-view-details-'+messageId, false); var log = logItem.getAttribute('data-log').toLowerCase(); if (typeof this.__log[log] != 'undefined') this.__log[log]--; setTimeout(function() { wrapper.removeChild(details); wrapper.removeChild(logItem); }, 200); details.style.maxHeight = (details.offsetHeight*1.5)+'px'; details.style.transition = 'max-height .2s ease-in'; details.offsetHeight; details.style.maxHeight = '0px'; BX.removeClass(details, 'mail-msg-show-animation'); BX.removeClass(details, 'mail-msg-show-animation-rev'); BX.addClass(details, 'mail-msg-close-animation'); }; BXMailMessageController.initCreateMenu = function () { var ctrl = this; var handler = ctrl.createAction.bind(ctrl); var createBtn = BX('mail-msg-view-create-btn'); BX.bind( createBtn, 'click', function (event) { handler( event, { value: ctrl.options.createMenu.__default.id, disable: BX.addClass.bind(BX, createBtn.parentNode, 'ui-btn-main-disabled'), enable: BX.removeClass.bind(BX, createBtn.parentNode, 'ui-btn-main-disabled') } ); } ); var createMenuBtn = BX('mail-msg-view-create-menu-btn'); BX.bind( createMenuBtn, 'click', function () { var items = ['TASKS_TASK']; if (ctrl.options.isCrmEnabled) { items.push(ctrl.options.createMenu['CRM_ACTIVITY'].binded ? 'CRM_EXCLUDE' : 'CRM_ACTIVITY'); } items = items.concat([ 'BLOG_POST', 'IM_CHAT', 'CALENDAR_EVENT' ]); for (var i = 0, id; i < items.length; i++) { id = items[i]; if (id == ctrl.options.createMenu.__default.id) { items.splice(i, 1); i--; continue; } items[i] = { text: ctrl.options.createMenu[id].title, value: ctrl.options.createMenu[id].id, onclick: handler, disabled: ctrl.options.createMenu[id].disabled, }; } BX.PopupMenu.show( 'mail-msg-view-create-menu', createMenuBtn, items, { offsetLeft: 16, angle: true, closeByEsc: true } ); } ); } BXMailMessageController.createAction = function (event, item) { var ctrl = this; var failHandler = function (json) { item.enable(); if (json.errors && json.errors.length > 0) { var error = json.errors.map( function (item) { return item.message; } ).join('\n'); // @TODO: error } }; switch (item.value) { case 'TASKS_TASK': top.BX.SidePanel.Instance.open(this.options.createMenu['TASKS_TASK'].href); break; case 'CRM_ACTIVITY': // @TODO: loader item.disable(); var pr = BX.ajax.runComponentAction( 'bitrix:mail.client', 'createCrmActivity', { mode: 'ajax', data: { messageId: this.options.messageId } } ); pr.then( function (json) { item.enable(); if (json.data && json.data.length > 0) { top.BX.UI.Notification.Center.notify({ autoHideDelay: 2000, content: BX.message('MAIL_MESSAGE_LIST_NOTIFY_ADDED_TO_CRM') }); ctrl.options.createMenu['CRM_ACTIVITY'].binded = true; BX.PopupMenu.destroy('mail-msg-view-create-menu'); BX.show( BX.findChildByClassName( BX('mail-msg-view-details-'+ctrl.options.messageId), 'js-msg-view-control-skip', true ) ); } else { top.BX.UI.Notification.Center.notify({ autoHideDelay: 2000, content: BX.message('MAIL_MESSAGE_LIST_NOTIFY_NOT_ADDED_TO_CRM') }); // @TODO: error } }, failHandler ); break; case 'CRM_EXCLUDE': // @TODO: loader item.disable(); var pr = BX.ajax.runComponentAction( 'bitrix:mail.client', 'removeCrmActivity', { mode: 'ajax', data: { messageId: this.options.messageId } } ); pr.then( function (json) { top.BX.UI.Notification.Center.notify({ autoHideDelay: 2000, content: BX.message('MAIL_MESSAGE_LIST_NOTIFY_EXCLUDED_FROM_CRM') }); BX.hide( BX.findChildByClassName( BX('mail-msg-view-details-'+ctrl.options.messageId), 'js-msg-view-control-skip', true ) ); item.enable(); ctrl.options.createMenu['CRM_ACTIVITY'].binded = false; BX.PopupMenu.destroy('mail-msg-view-create-menu'); }, failHandler ); break; } if (item.menuWindow) { item.menuWindow.close(); } }; var BXMailMessage = function (options) { var self = this; this.ctrl = BXMailMessageController; this.options = options; this.__dummyNode = document.createElement('DIV'); this.htmlForm = BX(this.options.formId); this.htmlForm.__wrapper = this.htmlForm.parentNode; if (this.htmlForm.__inited) return; if ('edit' != this.ctrl.options.type) { this.__wrapper = BX('mail-msg-view-details-'+this.ctrl.options.messageId); if (this.options.messageId != this.ctrl.options.messageId) this.__wrapper = BX.findChildByClassName(this.__wrapper.parentNode, 'mail-msg-view-details-'+this.options.messageId, false); BX.addCustomEvent( 'MailMessage:replyButtonClick', function (source) { if (source !== self) self.hideReplyForm(); } ); var emailContainerId = 'mail_msg_'+this.options.messageId+'_body'; // target links var emailLinks = typeof document.querySelectorAll != 'undefined' ? document.querySelectorAll('#'+emailContainerId+' a') : BX.findChildren(BX(emailContainerId), {tag: 'a'}, true); for (var i in emailLinks) { if (!emailLinks.hasOwnProperty(i)) continue; if (emailLinks[i] && emailLinks[i].setAttribute) emailLinks[i].setAttribute('target', '_blank'); } // unfold quotes var quotesList = typeof document.querySelectorAll != 'undefined' ? document.querySelectorAll('#'+emailContainerId+' blockquote') : BX.findChildren(BX(emailContainerId), {tag: 'blockquote'}, true); for (var i in quotesList) { if (!quotesList.hasOwnProperty(i)) continue; BX.bind(quotesList[i], 'click', function () { BX.addClass(this, 'mail-msg-view-quote-unfolded'); }); } // init gallery (top.BX.viewElementBind || BX.viewElementBind)(BX('mail_msg_'+this.options.messageId+'_files_images_list'), {}); // show hidden rcpt items var rcptMore = BX.findChildrenByClassName(this.__wrapper, 'mail-msg-view-rcpt-more'); for (var i in rcptMore) { BX.bind(rcptMore[i], 'click', function (event) { BX.findChildByClassName(this.parentNode, 'mail-msg-view-rcpt-list-hidden', false).style.display = 'inline'; this.style.display = 'none'; BX.PreventDefault(event); }); } var replyButton = BX.findChildByClassName(this.__wrapper, 'js-msg-view-reply-panel', true); var replyLink = BX.findChildByClassName(this.__wrapper, 'js-msg-view-control-reply', true); var replyAllLink = BX.findChildByClassName(this.__wrapper, 'js-msg-view-control-replyall', true); var forwardLink = BX.findChildByClassName(this.__wrapper, 'js-msg-view-control-forward', true); var skipLink = BX.findChildByClassName(this.__wrapper, 'js-msg-view-control-skip', true); var spamLink = BX.findChildByClassName(this.__wrapper, 'js-msg-view-control-spam', true); var deleteLink = BX.findChildByClassName(this.__wrapper, 'js-msg-view-control-delete', true); BX.bind(replyButton, 'click', this.showReplyForm.bind(this)); BX.bind(replyAllLink, 'click', this.showReplyForm.bind(this)); BX.bind(replyLink, 'click', this.showReplyForm.bind(this, true)); BX.bind(forwardLink, 'click', function () { var params = { forward: self.options.messageId }; if (self.ctrl.options.mail_uf_message_token) { params.mail_uf_message_token = self.ctrl.options.mail_uf_message_token; } window.location.href = BX.util.add_url_param(self.ctrl.options.pathNew, params); }); BX.bind( skipLink, 'click', function (event) { self.ctrl.createAction( event, { value: 'CRM_EXCLUDE', disable: BX.addClass.bind(BX, skipLink, 'mail-msg-view-control-disabled'), enable: BX.removeClass.bind(BX, skipLink, 'mail-msg-view-control-disabled') } ); } ); var uidKeyData = document.querySelector('[data-uid-key]'); var uid = 0; if (uidKeyData) { uid = uidKeyData.dataset.uidKey; } BX.bind(spamLink, 'click', this.markAsSpam.bind(this, spamLink, uid)); BX.bind(deleteLink, 'click', this.delete.bind(this, deleteLink, uid)); } var mailForm = BXMainMailForm.getForm(this.options.formId); BX.addCustomEvent(mailForm, 'MailForm:field:rcptSelectorClose', BXMailMessage.handleRcptSelectorClose.bind(this)); BX.addCustomEvent(mailForm, 'MailForm:footer:buttonClick', BXMailMessage.handleFooterButtonClick.bind(this)); BX.addCustomEvent(mailForm, 'MailForm:submit', BXMailMessage.handleFormSubmit.bind(this)); BX.addCustomEvent(mailForm, 'MailForm:submit:ajaxSuccess', BXMailMessage.handleFormSubmitSuccess.bind(this)); BX.PULL.extendWatch('mail_mailbox_' + this.options.messageId); BX.addCustomEvent("onPullEvent-mail", BX.proxy(function(command, params) { //outgoing message read confirmed handler if (command !== 'onMessageRead') { return; } var wrapper = BX('mail-msg-view-details-' + params.messageId); if(!wrapper) { wrapper = BX.findChildByClassName(document, 'mail-msg-view-logitem-' + params.messageId, true); } if(!wrapper) { return; } var items = BX.findChildrenByClassName(wrapper, 'read-confirmed-datetime', true); if (items && items.length > 0) { for (var i in items) BX.adjust(items[i], {text: BX.message('MAIL_MESSAGE_READ_CONFIRMED_SHORT')}); } }, this)); this.htmlForm.__inited = true; }; BXMailMessage.handleRcptSelectorClose = function (form, field) { if (!field.params.name.match(/^data\[(to|cc|bcc)\]$/)) return; for (var i = 0, target; i < form.fields.length; i++) { target = form.fields[i]; if (target.selector == field.selector || !target.params.name.match(/^data\[(to|cc|bcc)\]$/)) continue; BX.SocNetLogDestination.obItems[target.selector] = BX.SocNetLogDestination.obItems[field.selector]; BX.SocNetLogDestination.obItemsLast[target.selector] = BX.SocNetLogDestination.obItemsLast[field.selector]; } }; BXMailMessage.handleFooterButtonClick = function (form, button) { if (BX.hasClass(button, 'main-mail-form-cancel-button')) { if ('edit' == this.ctrl.options.type) { top.BX.SidePanel.Instance.getSliderByWindow(window).close(); } else { this.hideReplyForm(); } } }; BXMailMessage.handleFormSubmit = function (form, event) { var fields = this.htmlForm.elements; var emptyRcpt = true; for (var i = 0; i < fields.length; i++) { if ('data[to][]' == fields[i].name && fields[i].value.length > 0) emptyRcpt = false; } if (emptyRcpt) { // @TODO: hide on select form.showError(BX.message('MAIL_MESSAGE_NEW_EMPTY_RCPT')); return BX.PreventDefault(event); } // @TODO: use events var uploads; for (var i in form.postForm.controllers) { if (!form.postForm.controllers.hasOwnProperty(i)) continue; if (form.postForm.controllers[i].storage != 'disk') continue; try { uploads = 0; uploads = form.postForm.controllers[i].handler.agent.upload.filesCount; } catch (err) {} if (uploads > 0) { // @TODO: hide on complete form.showError(BX.message('MAIL_MESSAGE_NEW_UPLOADING')); return BX.PreventDefault(event); } } /* if ('edit' == this.ctrl.options.type) { var hiddenWrapper = BX('crm_act_email_create_hidden'); hiddenWrapper.innerHTML = ''; var fields = BX.findChildren(document, {'tag': 'input'}, true); for (var i = 0, clone; i < fields.length; i++) { if (fields[i].name && fields[i].name.indexOf('__crm_activity_planner[') >= 0) { clone = fields[i].cloneNode(true); clone.removeAttribute('id'); clone.setAttribute('name', 'data'+fields[i].name.substr('__crm_activity_planner'.length)); hiddenWrapper.appendChild(clone); } } } */ }; BXMailMessage.handleFormSubmitSuccess = function (form, data) { if (data.status != 'success') { var errorNode = document.createElement('DIV'); if (!data.errors || !BX.type.isArray(data.errors)) { data.errors = [{ message: BX.message('MAIL_CLIENT_AJAX_ERROR'), code: 0 }]; } for (var i = 0; i < data.errors.length; i++) { errorNode.appendChild(document.createTextNode(data.errors[i].message)); errorNode.appendChild(document.createElement('BR')); } form.showError(errorNode.innerHTML); } else { if ('edit' != this.ctrl.options.type) { this.hideReplyForm(); } top.BX.SidePanel.Instance.postMessage(window, 'Mail.Client.MessageCreatedSuccess', data); top.BX.UI.Notification.Center.notify({ autoHideDelay: 2000, content: BX.message('MAIL_MESSAGE_SEND_SUCCESS') }); var slider = top.BX.SidePanel.Instance.getSliderByWindow(window); slider.setCacheable(false); slider.close(); } }; BXMailMessage.prototype.showReplyForm = function (min) { var mailForm = BXMainMailForm.getForm(this.options.formId); var replyButton = BX.findChildByClassName(this.__wrapper, 'js-msg-view-reply-panel', true); if (this.htmlForm.parentNode === this.__dummyNode) this.htmlForm.__wrapper.appendChild(this.htmlForm); mailForm.init(); if (min === true) { mailForm.getField('data[to]').setValue(this.options.rcptSelected); mailForm.getField('data[cc]').setValue(); } else { mailForm.getField('data[to]').setValue(this.options.rcptAllSelected); mailForm.getField('data[cc]').setValue(this.options.rcptCcSelected); } mailForm.getField('data[bcc]').setValue(); BX.onCustomEvent('MailMessage:replyButtonClick', [this]); BX.addClass(this.htmlForm, 'mail-msg-show-animation'); this.htmlForm.style.display = ''; replyButton.style.display = 'none'; BX.onCustomEvent(mailForm, 'MailForm:show', []); this.ctrl.scrollTo(this.htmlForm); }; BXMailMessage.prototype.hideReplyForm = function () { var mailForm = BXMainMailForm.getForm(this.options.formId); var replyButton = BX.findChildByClassName(this.__wrapper, 'js-msg-view-reply-panel', true); BX.addClass(replyButton, 'mail-msg-show-animation-rev'); replyButton.style.display = ''; this.htmlForm.style.display = 'none'; BX.onCustomEvent(mailForm, 'MailForm:hide', []); this.__dummyNode.appendChild(this.htmlForm); }; BXMailMessage.prototype.markAsSpam = function (btn, uid) { btn.classList.add('mail-msg-view-control-disabled'); BX.ajax.runComponentAction('bitrix:mail.client', 'markAsSpam', { mode: 'ajax', data: {ids: [uid]} }).then( this.onMessageActionSuccess.bind(this, btn), function (response) { this.onMessageActionError.bind(this, response)() }.bind(this) ); }; BXMailMessage.prototype.delete = function (btn, uid) { if (btn.dataset && btn.dataset.isTrash) { if (!this.popupDeleteConfirm) { var buttons = [ new BX.PopupWindowButton({ text: BX.message("MAIL_MESSAGE_LIST_CONFIRM_CANCEL_BTN"), className: "popup-window-button-cancel", events: { click: BX.delegate(function () { this.popupDeleteConfirm.close(); }, this) } }), new BX.PopupWindowButton({ text: BX.message("MAIL_MESSAGE_LIST_CONFIRM_DELETE_BTN"), className: "popup-window-button-decline", events: { click: BX.delegate(function () { this.processDelete(btn, uid); this.popupDeleteConfirm.close(); }, this) } })]; this.popupDeleteConfirm = new BX.PopupWindow('bx-mail-message-list-popup-delete-confirm', null, { zIndex: 1000, autoHide: true, buttons: buttons, closeByEsc: true, titleBar: { content: BX.create('div', { html: '<span class="popup-window-titlebar-text">' + BX.message("MAIL_MESSAGE_LIST_CONFIRM_TITLE") + '</span>' }) }, events: { onPopupClose: function () { this.destroy() }, onPopupDestroy: BX.delegate(function () { this.popupDeleteConfirm = null }, this) }, content: BX.create("div", { html: BX.message('MAIL_MESSAGE_LIST_CONFIRM_DELETE') }) }); } this.popupDeleteConfirm.show(); } else { this.processDelete(btn, uid); } }; BXMailMessage.prototype.processDelete = function (btn, uid) { btn.classList.add('mail-msg-view-control-disabled'); BX.ajax.runComponentAction('bitrix:mail.client', 'delete', { mode: 'ajax', data: {ids: [uid]} }).then( this.onMessageActionSuccess.bind(this, btn), function (response) { this.onMessageActionError.bind(this, response)() }.bind(this) ); }; BXMailMessage.prototype.onMessageActionError = function (response) { alert(response.errors[0].message); // todo show errors }; BXMailMessage.prototype.onMessageActionSuccess = function (btn) { btn.classList.remove('mail-msg-view-control-disabled'); var slider = top.BX.SidePanel.Instance; if (slider) { top.BX.SidePanel.Instance.postMessage( window, 'mail-message-reload-grid', {} ); slider.close(); } }; var BXMailMailbox = {}; BXMailMailbox.init = function (mailbox) { this.mailbox = mailbox || {}; return this; }; BXMailMailbox.sync = function (button, stepper, gridId) { var self = this; if (self.syncLock) { return; } self.syncLock = true; if (!BX.type.isDomNode(button)) { button = document.createElement('DIV'); } BX.addClass(button, 'ui-btn-wait'); var pr = BX.ajax.runComponentAction( 'bitrix:mail.client', 'syncMailbox', { mode: 'ajax', data: { id: self.mailbox.ID } } ); pr.then( function (json) { self.syncLock = false; BX.removeClass(button, 'ui-btn-wait'); BX.addClass(button, 'ui-btn-icon-buisness'); BX.removeClass(button, 'ui-btn-icon-business-warning'); button.setAttribute('title', ''); BXMailMailbox.updateStepper(stepper, json.data.complete, json.data.status); if (json.data.new > 0) { BX.Main.gridManager.getInstanceById(gridId).reload(); } }, function (json) { self.syncLock = false; BX.removeClass(button, 'ui-btn-wait'); BX.addClass(button, 'ui-btn-icon-business-warning'); BX.removeClass(button, 'ui-btn-icon-buisness'); var error = BX.message('MAIL_CLIENT_AJAX_ERROR'); if (json.errors && json.errors.length > 0) { error += '\n'; error += json.errors.map( function (item) { return item.message; } ).join('\n'); } button.setAttribute('title', error); } ); }; BXMailMailbox.updateStepper = function(stepper, completed, status) { if (completed) { stepper.style.display = 'none'; } else { var stepperLine = BX.findChildByClassName(stepper, 'main-stepper-bar-line'); var stepperSteps = BX.findChildByClassName(stepper, 'main-stepper-steps'); if (status >= 0) { var status = Math.min(Math.max(Math.round(parseFloat(status) * 100), 1), 99); if (stepperLine) { stepperLine.style.width = status+'%'; } if (stepperSteps) { stepperSteps.innerHTML = status+'%'; } } else { if (stepperLine) { stepperLine.style.width = '0%'; } if (stepperSteps) { stepperSteps.innerHTML = ''; } } stepper.style.display = ''; } var event = document.createEvent('Event'); event.initEvent('resize', true, true); window.dispatchEvent(event); }; BXMailMailbox.onFolderCheckboxClickHandler = function (event) { var selectedFolders = document.querySelectorAll('.mail-connect-form-input-check:checked'); if (selectedFolders.length === 0) { event.stopPropagation(); event.preventDefault(); } }; BXMailMailbox.setupDirs = function (callback) { var imapOptions = {} try { imapOptions = this.mailbox.OPTIONS.imap; } catch (err) {} var dirs = imapOptions.dirs; var dirsList = imapOptions.dirsList; var ignore = imapOptions.ignore || []; var disabled = imapOptions.disabled || []; var outcome = BX.type.isArray(imapOptions.outcome) && imapOptions.outcome[0] ? imapOptions.outcome[0] : 'INBOX'; var trash = BX.type.isArray(imapOptions.trash) && imapOptions.trash[0] ? imapOptions.trash[0] : ''; var spam = BX.type.isArray(imapOptions.spam) && imapOptions.spam[0] ? imapOptions.spam[0] : trash; if (dirs) { var dirsTree = []; var item, path, level; for (var i = 0; i < dirsList.length; i++) { path = dirsList[i]; if (dirs.hasOwnProperty(path)) { item = dirs[path]; level = item.length - 1; dirsTree.push({ item: item, path: path, name: item[level], level: level, ignore: BX.util.in_array(path, ignore), disabled: BX.util.in_array(path, disabled) }); } } top.BX.SidePanel.Instance.open( 'mail:mailbox-setup-dirs', { width: 640, cacheable: false, contentCallback: function(slider) { var promise = new top.BX.Promise(); var html = '', subhtml, placeholder, checkedSingle; var count = dirsTree.length, i, flag; html += '<div class="mail-connect-section-block">'; html += '<div class="mail-connect-title-block">'; html += '<div class="mail-connect-title">' + BX.message('MAIL_CLIENT_CONFIG_IMAP_DIRS_SYNC') + '</div>'; html += '</div>'; for (i = 0; i < count; i++) { flag = dirsTree[i].disabled ? 'disabled' : (!dirsTree[i].ignore ? 'checked' : ''); html += '<div class="mail-connect-option-email mail-connect-form-check-hidden" style="padding-left: '+(25*dirsTree[i].level)+'px">'; html += '<input onclick="BXMailMailbox.onFolderCheckboxClickHandler(event)" class="mail-connect-form-input mail-connect-form-input-check" id="imap-dir-sync-n'+i+'" type="checkbox" name="imap_dirs[sync]['+i+']" value="'+dirsTree[i].path+'" '+flag+'>'; html += '<label class="mail-connect-form-label mail-connect-form-label-check" for="imap-dir-sync-n'+i+'" '+(dirsTree[i].disabled ? 'style="color: #a0a0a0;"' : '')+'>'+dirsTree[i].name+'</label>'; html += '</div>'; } html += '</div>'; html += '<div class="mail-connect-section-block">'; html += '<div class="mail-connect-title-block">'; html += '<div class="mail-connect-title">'; html += BX.message('MAIL_CLIENT_CONFIG_IMAP_DIRS_FOR'); html += '</div></div>'; subhtml = ''; checkedSingle = ''; placeholder = '<input id="mail_connect_setup_dirs_outcome_placeholder" type="radio" name="imap_dirs[outcome]" value="" checked>'; placeholder += '<label for="mail_connect_setup_dirs_outcome_placeholder">' + BX.message('MAIL_CLIENT_CONFIG_IMAP_DIRS_EMPTY_DEFAULT') + '</label>'; for (i = 0; i < count; i++) { if (dirsTree[i].disabled) { continue; } flag = ''; if (dirsTree[i].path == outcome) { flag = 'checked'; placeholder = ''; checkedSingle = 'mail_connect_setup_dirs_outcome_' + (i + 1); } subhtml += '<input type="radio" name="imap_dirs[outcome]" value="' + BX.util.htmlspecialchars(dirsTree[i].path) + '" id="mail_connect_setup_dirs_outcome_' + (i + 1) + '" ' + flag + '>'; subhtml += '<label for="mail_connect_setup_dirs_outcome_' + (i + 1) + '">' + BX.util.htmlspecialchars(dirsTree[i].item.join(' / ')) + '</label>'; } html += '<div class="mail-connect-option-email mail-connect-form-check-hidden">' + BX.message('MAIL_CLIENT_CONFIG_IMAP_DIRS_OUTCOME') + '<label class="mail-set-singleselect mail-set-singleselect-line" data-checked="' + checkedSingle + '">\ <input id="mail_connect_setup_dirs_outcome_0" type="radio" name="imap_dirs[outcome]" value="0">\ <div class="mail-set-singleselect-wrapper">' + subhtml + '</div>' + placeholder + '</label>\ </div>'; subhtml = ''; checkedSingle = ''; placeholder = '<input id="mail_connect_setup_dirs_trash_placeholder" type="radio" name="imap_dirs[trash]" value="" checked>'; placeholder += '<label for="mail_connect_setup_dirs_trash_placeholder">' + BX.message('MAIL_CLIENT_CONFIG_IMAP_DIRS_EMPTY_DEFAULT') + '</label>'; for (i = 0; i < count; i++) { if (dirsTree[i].disabled) { continue; } flag = ''; if (dirsTree[i].path == trash) { flag = 'checked'; placeholder = ''; checkedSingle = 'mail_connect_setup_dirs_trash_' + (i + 1); } subhtml += '<input type="radio" name="imap_dirs[trash]" value="' + BX.util.htmlspecialchars(dirsTree[i].path) + '" id="mail_connect_setup_dirs_trash_' + (i + 1) + '" ' + flag + '>'; subhtml += '<label for="mail_connect_setup_dirs_trash_' + (i + 1) + '">' + BX.util.htmlspecialchars(dirsTree[i].item.join(' / ')) + '</label>'; } html += '<div class="mail-connect-option-email mail-connect-form-check-hidden">' + BX.message('MAIL_CLIENT_CONFIG_IMAP_DIRS_TRASH') + '<label class="mail-set-singleselect mail-set-singleselect-line" data-checked="' + checkedSingle + '">\ <input id="mail_connect_setup_dirs_trash_0" type="radio" name="imap_dirs[trash]" value="0">\ <div class="mail-set-singleselect-wrapper">' + subhtml + '</div>' + placeholder + '</label>\ </div>'; subhtml = ''; checkedSingle = ''; placeholder = '<input id="mail_connect_setup_dirs_spam_placeholder" type="radio" name="imap_dirs[spam]" value="" checked>'; placeholder += '<label for="mail_connect_setup_dirs_spam_placeholder">' + BX.message('MAIL_CLIENT_CONFIG_IMAP_DIRS_EMPTY_DEFAULT') + '</label>'; for (i = 0; i < count; i++) { if (dirsTree[i].disabled) { continue; } flag = ''; if (dirsTree[i].path == spam) { flag = 'checked'; placeholder = ''; checkedSingle = 'mail_connect_setup_dirs_spam_' + (i + 1); } subhtml += '<input type="radio" name="imap_dirs[spam]" value="' + BX.util.htmlspecialchars(dirsTree[i].path) + '" id="mail_connect_setup_dirs_spam_' + (i + 1) + '" ' + flag + '>'; subhtml += '<label for="mail_connect_setup_dirs_spam_' + (i + 1) + '">' + BX.util.htmlspecialchars(dirsTree[i].item.join(' / ')) + '</label>'; } html += '<div class="mail-connect-option-email mail-connect-form-check-hidden">' + BX.message('MAIL_CLIENT_CONFIG_IMAP_DIRS_SPAM') + '<label class="mail-set-singleselect mail-set-singleselect-line" data-checked="' + checkedSingle + '">\ <input id="mail_connect_setup_dirs_spam_0" type="radio" name="imap_dirs[spam]" value="0">\ <div class="mail-set-singleselect-wrapper">' + subhtml + '</div>' + placeholder + '</label>\ </div>'; html += '</div>'; promise.fulfill( '<form class="mail-connect-setup-dirs-form" style="display: flex; flex-direction: column; height: 100%; ">\ <div style="padding: 0 20px 20px 20px; flex: 1; overflow: auto; ">\ <div class="mail-msg-sidepanel-header">\ <div class="mail-msg-sidepanel-title">' + BX.message('MAIL_CLIENT_CONFIG_IMAP_DIRS_TITLE') + '</div>\ </div>\ <div class="mail-connect mail-connect-slider">' + html + '</div>\ </div>\ <div class="mail-connect-footer mail-connect-footer-fixed" style="position: static; ">\ <div class="mail-connect-footer-container">\ <button class="ui-btn ui-btn-md ui-btn-success ui-btn-success mail-connect-btn-connect" type="submit">' + BX.message('MAIL_CLIENT_CONFIG_IMAP_DIRS_BTN_SAVE') + '</button>\ <button class="ui-btn ui-btn-md ui-btn-link mail-connect-btn-cancel" type="reset">' + BX.message('MAIL_CLIENT_CONFIG_IMAP_DIRS_BTN_CANCEL') + '</button>\ </div>\ </div>\ </form>' ); return promise; }, events: { onLoad: function(event) { var form = BX.findChildByClassName( event.slider.layout.content, 'mail-connect-setup-dirs-form', true ); top.BX.bind( form, 'submit', function (e) { e.preventDefault(); var data = BX.ajax.prepareForm(form).data; if (data.imap_dirs) { imapOptions.outcome = data.imap_dirs.outcome ? [data.imap_dirs.outcome] : imapOptions.outcome; imapOptions.trash = data.imap_dirs.trash ? [data.imap_dirs.trash] : imapOptions.trash; imapOptions.spam = data.imap_dirs.spam ? [data.imap_dirs.spam] : imapOptions.spam; if (data.imap_dirs.sync) { imapOptions.ignore = []; for (path in dirs) { if (dirs.hasOwnProperty(path)) { imapOptions.ignore.push(path); } } var i, k; for (i in data.imap_dirs.sync) { if (data.imap_dirs.sync.hasOwnProperty(i)) { k = BX.util.array_search(data.imap_dirs.sync[i], imapOptions.ignore); if (!(k < 0)) { imapOptions.ignore.splice(k, 1); } } } } } callback(data); event.slider.close(); } ); top.BX.bind( form, 'reset', function (e) { event.slider.close(); } ); var singleselect = function(input) { var options = BX.findChildren(input, {tag: 'input', attr: {type: 'radio'}}, true); for (var i in options) { BX.bind(options[i], 'change', function() { if (this.checked) { if (this.value == 0) { var input1 = BX(input.getAttribute('data-checked')); if (input1) { var label0 = BX.findNextSibling(this, {tag: 'label', attr: {'for': this.id}}); var label1 = BX.findNextSibling(input1, {tag: 'label', attr: {'for': input1.id}}); if (label0 && label1) BX.adjust(label0, {text: label1.innerHTML}); } } else { input.setAttribute('data-checked', this.id); } } }); } BX.bind(input, 'click', function(event) { event = event || window.event; event.skip_singleselect = input; }); BX.bind(event.getSlider().getContentContainer(), 'click', function(event) { event = event || window.event; if (event.skip_singleselect !== input) { if(top.BX(input.getAttribute('data-checked'))) { top.BX(input.getAttribute('data-checked')).checked = true; } } }); }; var selectInputs = BX.findChildrenByClassName(event.getSlider().getContentContainer(), 'mail-set-singleselect', true); for (var i in selectInputs) singleselect(selectInputs[i]); } } } ); } }; window.BXMailMessageController = BXMailMessageController; window.BXMailMessage = BXMailMessage; window.BXMailMailbox = BXMailMailbox; })(); if (window === window.top) { top.BX.SidePanel.Instance.bindAnchors({ rules: [ { condition: [ '^/mail/message/', ], options: { width: 1080, cacheable: true } }, { condition: [ '^/mail/config/(new|edit)', ], options: { width: 760, cacheable: false, allowChangeHistory: false } }, { condition: [ '^/mail/config/', ], options: { width: 1080, cacheable: true, allowChangeHistory: false } }, { condition: [ '^/mail/blacklist' ], options: { width: 800, cacheable: true } }, { condition: [ '^/mail/signature' ], options: { width: 800, cacheable: true } } ] }); }