%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
}
}
]
});
}