%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/components/bitrix/main.mail.form/templates/.default/ |
| Current File : //home/bitrix/www/bitrix/components/bitrix/main.mail.form/templates/.default/script.js |
;(function() {
if (window.BXMainMailForm)
return;
var BXMainMailForm = function(id, fields, options)
{
if (BXMainMailForm.__forms[id])
return BXMainMailForm.__forms[id];
this.id = id;
this.fields = fields;
this.options = options;
BXMainMailForm.__forms[this.id] = this;
};
// id names for smart nodes
BXMainMailForm.quoteNodeId = 'main-mail-quote-node-content';
BXMainMailForm.signatureNodeId = 'main-mail-form-signature';
BXMainMailForm.__forms = {};
BXMainMailForm.getForm = function (id)
{
return BXMainMailForm.__forms[id];
};
BXMainMailForm.prototype.getField = function (name)
{
for (var i = this.fields.length; i-- > 0;)
{
if (this.fields[i].params.name == name)
return this.fields[i];
}
return false;
};
BXMainMailForm.prototype.onSubmit = function (event)
{
var form = this;
var footer = BX.findChildByClassName(this.formWrapper, 'main-mail-form-footer', false);
var button = BX.findChildByClassName(footer, 'main-mail-form-submit-button', true);
if (button.disabled)
return BX.PreventDefault();
this.editor.OnSubmit();
event = event || window.event;
BX.onCustomEvent(this, 'MailForm:submit', [this, event]);
if (!event.defaultPrevented && event.returnValue !== false)
{
this.hideError();
BX.addClass(button, 'ui-btn-wait');
button.disabled = true;
button.offsetHeight; // hack to show loader
if (this.options.submitAjax)
{
BX.ajax.submitAjax(this.htmlForm, {
url: this.htmlForm.getAttribute('action'),
method: 'POST',
dataType: 'json',
onsuccess: function(data)
{
button.disabled = false;
BX.removeClass(button, 'ui-btn-wait');
BX.onCustomEvent(form, 'MailForm:submit:ajaxSuccess', [form, data]);
},
onfailure: function(data)
{
button.disabled = false;
BX.removeClass(button, 'ui-btn-wait');
BX.onCustomEvent(form, 'MailForm:submit:ajaxFailure', [form, data]);
}
});
return BX.PreventDefault(event);
}
}
};
BXMainMailForm.prototype.showError = function (html)
{
var errorNode = BX.findChildByClassName(this.formWrapper, 'main-mail-form-error', true);
BX.adjust(errorNode, {
html: html,
style: {
display: 'block'
}
});
this.initScrollable();
if (this.__scrollable)
{
var pos0 = BX.pos(this.__scrollable);
var pos1 = BX.pos(this.formWrapper);
var pos2 = BX.pos(errorNode);
if (pos0.top > pos2.top-10-this.__scrollable.scrollTop)
this.__scrollable.scrollTop = pos2.top-10;
else if (pos0.bottom < pos1.bottom-10-this.__scrollable.scrollTop)
this.__scrollable.scrollTop = pos1.bottom-10-pos0.bottom;
}
};
BXMainMailForm.prototype.hideError = function ()
{
var errorNode = BX.findChildByClassName(this.formWrapper, 'main-mail-form-error', true);
BX.adjust(errorNode, {
style: {
display: 'none'
}
});
};
BXMainMailForm.prototype.init = function()
{
var form = this;
if (this.__inited)
return;
this.formId = 'main_mail_form_'+this.id;
this.formWrapper = BX(this.formId);
this.htmlForm = BX.findParent(this.formWrapper, {tag: 'form'});
this.postForm = LHEPostForm.getHandler(this.formId+'_editor');
this.editor = BXHtmlEditor.Get(this.formId+'_editor');
this.editorInited = false;
// insert signature on change 'from' field
BX.addCustomEvent(this, 'MailForm::from::change', BX.proxy(function(field, signature)
{
if(!BX.type.isString(signature))
{
signature = '';
var currentSender;
var input = BX(field.fieldId+'_value');
if(input)
{
currentSender = input.value;
}
if(currentSender && field.params && BX.type.isArray(field.params.mailboxes) && BX.type.isNotEmptyObject(field.params.signatures))
{
for(var i in field.params.mailboxes)
{
if(field.params.mailboxes.hasOwnProperty(i))
{
if(field.params.mailboxes[i].formated === currentSender)
{
if(BX.type.isNotEmptyString(field.params.signatures[field.params.mailboxes[i].formated]))
{
signature = field.params.signatures[field.params.mailboxes[i].formated];
}
else if(BX.type.isNotEmptyString(field.params.signatures[field.params.mailboxes[i].email]))
{
signature = field.params.signatures[field.params.mailboxes[i].email];
}
else if(BX.type.isNotEmptyString(field.params.signatures['']))
{
signature = field.params.signatures[''];
}
break;
}
}
}
}
}
this.insertSignature(signature);
}, this));
this.initFields();
this.initFooter();
BX.bind(this.htmlForm, 'submit', this.onSubmit.bind(this));
this.__inited = true;
BX.onCustomEvent(BXMainMailForm, 'MailForm:init:'+this.id, [this]);
}
BXMainMailForm.prototype.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);
}
}
BXMainMailForm.prototype.initFields = function()
{
for (var i = 0, fieldId; i < this.fields.length; i++)
{
this.fields[i] = new BXMainMailFormField(this, this.fields[i]);
fieldId = this.fields[i].fieldId;
this.fields[fieldId] = this.fields[i];
}
// hidden fields switches
var fieldsFooter = BX(this.formId+'_fields_footer');
var fieldsExtFooter = BX(this.formId+'_fields_ext_footer');
var hiddenFields = []
.concat(BX.findChildrenByClassName(fieldsFooter, 'main-mail-form-field-button', true) || [])
.concat(BX.findChildrenByClassName(fieldsExtFooter, 'main-mail-form-field-button', true) || []);
for (var i = 0, fieldId; i < hiddenFields.length; i++)
{
fieldId = hiddenFields[i].getAttribute('data-target');
if (typeof this.fields[fieldId] != 'undefined')
{
this.fields[fieldId].__switch = hiddenFields[i];
BX.bind(hiddenFields[i], 'click', this.fields[fieldId].unfold.bind(this.fields[fieldId]));
}
}
}
BXMainMailForm.prototype.initFooter = function()
{
var form = this;
var footerWrapper = BX.findChildByClassName(this.formWrapper, 'main-mail-form-footer-wrapper', true);
var footer = BX.findChildByClassName(footerWrapper, 'main-mail-form-footer', false);
var footerButtons = BX.findChildrenByClassName(footer, 'main-mail-form-footer-button', true);
for (var i in footerButtons)
{
(function(button)
{
BX.bind(button, 'click', function ()
{
BX.onCustomEvent(form, 'MailForm:footer:buttonClick', [form, button]);
if (BX.hasClass(button, 'main-mail-form-submit-button'))
BX.submit(form.htmlForm);
});
})(footerButtons[i]);
}
var resetFooter = function ()
{
if (BX.hasClass(footer, 'main-mail-form-footer-fixed'))
{
BX.removeClass(footer, 'main-mail-form-footer-fixed-hidden');
BX.removeClass(footer, 'main-mail-form-footer-fixed');
footer.style.left = '';
footer.style.width = '';
footerWrapper.style.height = '';
}
};
var positionFooter = function()
{
form.initScrollable();
if (form.formWrapper.offsetHeight > 0 && form.__scrollable)
{
var pos0 = BX.pos(form.__scrollable);
var pos1 = BX.pos(form.formWrapper);
if (pos0.bottom < pos1.bottom-10-form.__scrollable.scrollTop)
{
footer.style.left = (pos1.left-pos0.left-form.__scrollable.scrollLeft)+'px';
footer.style.width = form.formWrapper.offsetWidth+'px';
if (!BX.hasClass(footer, 'main-mail-form-footer-fixed'))
{
if (pos0.bottom < BX.pos(footerWrapper).top-form.__scrollable.scrollTop)
BX.addClass(footer, 'main-mail-form-footer-fixed-hidden');
footerWrapper.style.height = footerWrapper.offsetHeight+'px';
BX.addClass(footer, 'main-mail-form-footer-fixed');
}
var editorWrapper = BX.findChildByClassName(form.formWrapper, 'main-mail-form-editor-wrapper', true);
if (pos0.bottom < BX.pos(editorWrapper).top+footer.offsetHeight-form.__scrollable.scrollTop)
BX.addClass(footer, 'main-mail-form-footer-fixed-hidden');
else
BX.removeClass(footer, 'main-mail-form-footer-fixed-hidden');
return;
}
}
resetFooter();
};
var startMonitoring = function ()
{
setTimeout(function ()
{
if (!form.__footerMonitoring)
{
form.__footerMonitoring = true;
BX.bind(window, 'resize', positionFooter);
BX.bind(window, 'scroll', positionFooter);
BX.addCustomEvent(window, 'AutoResizeFinished', positionFooter); // OnEditorResizedAfter
positionFooter();
}
}, 400);
};
var stopMonitoring = function ()
{
form.__footerMonitoring = false;
BX.unbind(window, 'resize', positionFooter);
BX.unbind(window, 'scroll', positionFooter);
BX.removeCustomEvent(window, 'AutoResizeFinished', positionFooter); // OnEditorResizedAfter
resetFooter();
};
BX.addCustomEvent(this, 'MailForm:show', startMonitoring);
BX.addCustomEvent(this, 'MailForm:hide', stopMonitoring);
if (this.formWrapper.offsetHeight > 0)
startMonitoring();
}
BXMainMailForm.prototype.insertSignature = function(signature)
{
if(this.editorInited)
{
this.editor.synchro.Sync();
var signatureNode = this.editor.GetIframeDoc().getElementById(BXMainMailForm.signatureNodeId);
if(!BX.type.isNotEmptyString(signature))
{
if(signatureNode)
{
BX.remove(signatureNode);
}
return;
}
var signatureHtml = '<br />--<br />' + signature;
if(signatureNode)
{
signatureNode.innerHTML = signatureHtml;
}
else
{
signatureNode = BX.create('div', {
attrs: {
id: BXMainMailForm.signatureNodeId
},
html: signatureHtml
});
var quoteNode = this.editor.GetIframeDoc().getElementById(BXMainMailForm.quoteNodeId);
if(quoteNode)
{
quoteNode.parentNode.insertBefore(signatureNode, quoteNode);
}
else
{
BX.append(signatureNode, this.editor.GetIframeDoc().body);
}
}
this.editor.synchro.FullSyncFromIframe();
}
else
{
// if editor is not inited yet - do it later
BX.addCustomEvent(this, 'MailForm::editor::init', BX.proxy(function()
{
this.insertSignature(signature);
}, this));
}
};
var BXMainMailFormField = function(form, params)
{
this.form = form;
this.params = params;
this.fieldId = this.form.formId+'_'+this.params.id;
this.init();
};
BXMainMailFormField.prototype.init = function()
{
this.params.__row = BX(this.fieldId);
if (BXMainMailFormField.__types[this.params.type] && BXMainMailFormField.__types[this.params.type].init)
BXMainMailFormField.__types[this.params.type].init(this);
if (this.params.menu)
{
var field = this;
var menuExtButton = BX.findChildByClassName(this.params.__row, 'main-mail-form-field-value-menu-ext-button', true);
BX.addCustomEvent(this.form, 'MailForm::editor:click', function ()
{
var menu = BX.PopupMenu.getMenuById(field.fieldId+'-menu-ext');
if (menu)
menu.close();
});
BX.addCustomEvent('onSubMenuShow', function ()
{
var menuWindow = this.menuWindow;
while (menuWindow.parentMenuWindow)
menuWindow = menuWindow.parentMenuWindow;
if (field.fieldId+'-menu-ext' == menuWindow.id)
BX.addClass(this.subMenuWindow.popupWindow.popupContainer, 'main-mail-form-field-value-menu-ext-content');
});
BX.bind(menuExtButton, 'click', function ()
{
BX.onCustomEvent(field.form, 'MailForm:field:setMenuExt', [field.form, field]);
BX.PopupMenu.destroy(field.fieldId+'-menu-ext');
BX.PopupMenu.show(
field.fieldId+'-menu-ext',
this, field.__menuExt,
{
className: 'main-mail-form-field-value-menu-ext-content',
offsetTop: -8,
offsetLeft: 13,
angle: true,
closeByEsc: true
}
);
});
}
}
BXMainMailFormField.prototype.setMenuExt = function(items)
{
this.__menuExt = items;
}
BXMainMailFormField.prototype.insert = function(text)
{
if (BXMainMailFormField.__types[this.params.type] && BXMainMailFormField.__types[this.params.type].insert)
BXMainMailFormField.__types[this.params.type].insert(this, text);
}
BXMainMailFormField.prototype.setValue = function(value, options)
{
if (BXMainMailFormField.__types[this.params.type] && BXMainMailFormField.__types[this.params.type].setValue)
BXMainMailFormField.__types[this.params.type].setValue(this, value, options);
}
BXMainMailFormField.prototype.show = function()
{
// @TODO: enable form fields
this.params.hidden = false;
BX.addClass(this.fieldId, 'main-mail-form-drop-animation');
BX(this.fieldId).style.display = this.params.folded ? 'none' : '';
this.__switch.style.display = this.params.folded ? '' : 'none';
}
BXMainMailFormField.prototype.hide = function()
{
// @TODO: disable form fields
this.params.hidden = true;
BX(this.fieldId).style.display = 'none';
this.__switch.style.display = 'none';
BX.removeClass(this.fieldId, 'main-mail-form-drop-animation');
}
BXMainMailFormField.prototype.fold = function()
{
this.params.folded = true;
if (!this.params.hidden)
this.__switch.style.display = '';
BX(this.fieldId).style.display = 'none';
BX.removeClass(this.fieldId, 'main-mail-form-drop-animation');
}
BXMainMailFormField.prototype.unfold = function()
{
this.params.folded = false;
if (!this.params.hidden)
{
BX.addClass(this.fieldId, 'main-mail-form-drop-animation');
BX(this.fieldId).style.display = '';
}
this.__switch.style.display = 'none';
}
BXMainMailFormField.__types = {
'list': {},
'text': {},
'from': {},
'rcpt': {},
'editor': {},
'files': {}
};
BXMainMailFormField.__types['list'].init = function(field)
{
BX.addCustomEvent(field.form, 'MailForm::editor:click', function ()
{
var menu = BX.PopupMenu.getMenuById(field.fieldId+'-menu');
if (menu)
menu.close();
});
var selector = BX.findChildByClassName(field.params.__row, 'main-mail-form-field-value-menu', true);
BX.bind(selector, 'click', function()
{
var input = BX(field.fieldId+'_value');
var apply = function(value, text)
{
input.value = value;
BX.adjust(selector, { html: text });
};
var handler = function(event, item)
{
apply(item.options.value, item.text);
item.menuWindow.close();
};
var items = [];
if (!field.params.required)
{
items.push({
text: BX.util.htmlspecialchars(field.params.placeholder),
title: field.params.placeholder,
value: '',
onclick: handler
});
items.push({ delimiter: true });
}
for (var i in field.params.list)
{
items.push({
text: BX.util.htmlspecialchars(field.params.list[i]),
title: field.params.list[i],
value: i,
onclick: handler
});
}
BX.PopupMenu.show(
field.fieldId+'-menu',
selector, items,
{
className: 'main-mail-form-field-value-menu-content',
offsetLeft: 40,
angle: true,
closeByEsc: true
}
);
});
};
BXMainMailFormField.__types['from'].init = function(field)
{
BX.addCustomEvent(field.form, 'MailForm::editor:click', function ()
{
var menu = BX.PopupMenu.getMenuById(field.fieldId+'-menu');
if (menu)
menu.close();
});
BX.onCustomEvent(field.form, 'MailForm::from::change', [field]);
var selector = BX.findChildByClassName(field.params.__row, 'main-mail-form-field-value-menu', true);
BX.bind(selector, 'click', function()
{
var items = [];
var input = BX(field.fieldId+'_value');
var apply = function(value, text)
{
input.value = value;
BX.adjust(selector, {html: BX.util.strip_tags(text)});
BX.onCustomEvent(field.form, 'MailForm::from::change', [field]);
};
var handler = function(event, item)
{
var action = 'apply';
if (event && event.target)
{
var deleteIconClass = 'main-mail-form-field-from-menu-delete-icon';
if (BX.hasClass(event.target, deleteIconClass) || BX.findParent(event.target, {class: deleteIconClass}, item.layout.item))
{
action = 'delete';
}
}
if ('delete' == action)
{
BXMainMailConfirm.deleteSender(
item.id,
function ()
{
item.menuWindow.removeMenuItem(item.id);
if (input.value == item.title)
{
apply(items[0].title, items[0].text);
}
}
);
}
else
{
apply(item.title, item.text);
item.menuWindow.close();
}
};
var itemText, itemClass;
if (!field.params.required)
{
items.push({
text: BX.util.htmlspecialchars(field.params.placeholder),
title: '',
onclick: handler
});
items.push({ delimiter: true });
}
if (field.params.mailboxes && field.params.mailboxes.length > 0)
{
for (var i in field.params.mailboxes)
{
itemClass = 'menu-popup-no-icon';
itemText = BX.util.htmlspecialchars(field.params.mailboxes[i].formated);
if (field.params.mailboxes[i]['can_delete'] && field.params.mailboxes[i].id > 0)
{
itemText += '<span class="main-mail-form-field-from-menu-delete-icon popup-window-close-icon popup-window-titlebar-close-icon"\
title="' + BX.util.htmlspecialchars(BX.message('MAIN_MAIL_CONFIRM_DELETE')) + '"></span>';
itemClass = 'menu-popup-no-icon menu-popup-right-icon';
}
items.push({
text: itemText,
title: field.params.mailboxes[i].formated,
onclick: handler,
className: itemClass,
id: field.params.mailboxes[i].id
});
}
items.push({ delimiter: true });
}
items.push({
text: BX.util.htmlspecialchars(BX.message('MAIN_MAIL_CONFIRM_MENU')),
onclick: function(event, item)
{
item.menuWindow.close();
BXMainMailConfirm.showForm(function(mailbox, formated)
{
field.params.mailboxes.push({
email: mailbox.email,
name: mailbox.name,
id: mailbox.id,
formated: formated
});
apply(formated, BX.util.htmlspecialchars(formated));
BX.PopupMenu.destroy(field.fieldId+'-menu');
});
}
});
BX.PopupMenu.show(
field.fieldId+'-menu',
selector, items,
{
className: 'main-mail-form-field-value-menu-content',
offsetLeft: 40,
angle: true,
closeByEsc: true
}
);
});
};
BXMainMailFormField.__types['rcpt'].init = function(field)
{
var more = BX.findChildByClassName(field.params.__row, 'main-mail-form-field-rcpt-item-more', true);
var wrapper = BX.findChildByClassName(field.params.__row, 'main-mail-form-field-value-wrapper', true);
var link = BX.findChildByClassName(field.params.__row, 'main-mail-form-field-rcpt-add-link', true);
var input = BX(field.fieldId+'_fvalue');
field.selector = field.fieldId+'-selector';
var select = function(item, type, search, undeleted, name, state)
{
// BX.hide(BX.findChildByClassName(createForm, 'crm-task-list-mail-reply-error', true));
if (!field.params.multiple)
{
var selected = BX.SocNetLogDestination.getSelected(field.selector);
for (var i in selected)
{
if (i != item.id || selected[i] != type)
BX.SocNetLogDestination.deleteItem(i, selected[i], field.selector);
}
}
var itemWrapper = document.createElement('SPAN');
itemWrapper.setAttribute('data-id', item.id);
BX.addClass(itemWrapper, 'main-mail-form-field-rcpt-item');
wrapper.insertBefore(itemWrapper, more.parentNode);
itemWrapper.appendChild(BX.create('INPUT', {
'props': {
'type': 'hidden',
'name': field.params.name+'[]',
'value': JSON.stringify(item)
}
}));
item.showEmail = 'N';
if (field.params.email && item.email && item.email.length > 0 && item.email != item.name)
{
item = BX.clone(item);
item.name = item.name+' <' + item.email + '>';
}
BX.SocNetLogDestination.BXfpSelectCallback({
item: item,
type: type,
varName: 'dummy_'+field.params.name,
bUndeleted: false,
containerInput: itemWrapper,
valueInput: input,
formName: name,
tagInputName: link,
tagLink1: field.params.placeholder,
tagLink2: field.params.placeholder
});
if ('init' == state)
{
var limit = 9;
var items = BX.findChildrenByClassName(wrapper, 'main-mail-form-field-rcpt-item', false);
if (items.length > limit+1)
{
for (var i = limit; i < items.length; i++)
items[i].style.display = 'none';
more.setAttribute('title', more.getAttribute('title').replace(/-?\d+/, items.length-limit));
more.parentNode.style.display = '';
}
}
};
var unselect = function(item, type, search, name)
{
var itemWrapper = BX.findChild(wrapper, {attribute: {'data-id': item.id}}, false);
BX.SocNetLogDestination.BXfpUnSelectCallback.apply({
formName: name,
inputContainerName: itemWrapper,
inputName: input,
tagInputName: link,
tagLink1: field.params.placeholder,
tagLink2: field.params.placeholder
}, [item]);
if (itemWrapper && itemWrapper.parentNode == wrapper)
{
if (!BX.findChildByClassName(itemWrapper, 'feed-add-post-destination'))
wrapper.removeChild(itemWrapper);
}
var limit = 9;
var visible = 0;
var items = BX.findChildrenByClassName(wrapper, 'main-mail-form-field-rcpt-item', false);
for (var i = 0; i < items.length; i++)
{
if (items[i].offsetHeight > 0)
visible++;
}
if (visible < items.length && (visible < limit || items.length <= limit+1))
{
for (var i = 0; i < items.length; i++)
{
if (items[i].offsetHeight > 0)
continue;
items[i].style.display = '';
visible++;
if (visible >= Math.min(limit, items.length) && items.length > limit+1)
break;
}
more.setAttribute('title', more.getAttribute('title').replace(/-?\d+/, items.length-limit));
if (visible >= items.length)
more.parentNode.style.display = 'none';
}
};
var selectorParams = {
name: field.selector,
searchInput: input,
bindMainPopup: {
node: wrapper,
offsetTop: '5px',
offsetLeft: '15px'
},
bindSearchPopup : {
node: wrapper,
offsetTop: '5px',
offsetLeft: '15px'
},
callback: {
select: select,
unSelect: unselect,
openDialog: BX.delegate(BX.SocNetLogDestination.BXfpOpenDialogCallback, {
inputBoxName: input.parentNode,
inputName: input,
tagInputName: link
}),
closeDialog: function()
{
BX.onCustomEvent(field.form, 'MailForm:field:rcptSelectorClose', [field.form, field]);
BX.SocNetLogDestination.BXfpCloseDialogCallback.apply({
inputBoxName: input.parentNode,
inputName: input,
tagInputName: link
});
},
openSearch: BX.delegate(BX.SocNetLogDestination.BXfpOpenDialogCallback, {
inputBoxName: input.parentNode,
inputName: input,
tagInputName: link
})
},
items: {},
itemsLast: {},
itemsSelected: {},
destSort: {}
};
if (field.params.selector)
{
for (var i in field.params.selector)
selectorParams[i] = field.params.selector[i];
}
BX.SocNetLogDestination.init(selectorParams);
BX.bind(input, 'keydown', BX.delegate(BX.SocNetLogDestination.BXfpSearchBefore, {
formName: field.selector,
inputName: input
}));
BX.bind(input, 'keyup', BX.delegate(BX.SocNetLogDestination.BXfpSearch, {
formName: field.selector,
inputName: input,
tagInputName: link
}));
BX.bind(input, 'paste', BX.defer(BX.SocNetLogDestination.BXfpSearch, {
formName: field.selector,
inputName: input,
tagInputName: link,
onPasteEvent: true
}));
BX.bind(input, 'blur', BX.delegate(BX.SocNetLogDestination.BXfpBlurInput, {
inputBoxName: input.parentNode,
tagInputName: link
}));
BX.bind(wrapper, 'click', function(e)
{
BX.SocNetLogDestination.openDialog(field.selector);
BX.PreventDefault(e);
});
BX.bind(more, 'click', function(e)
{
var items = BX.findChildrenByClassName(wrapper, 'main-mail-form-field-rcpt-item', false);
for (var i = 0; i < items.length; i++)
items[i].style.display = '';
this.parentNode.style.display = 'none';
BX.PreventDefault(e);
});
};
BXMainMailFormField.__types['editor'].init = function(field)
{
var postForm = field.form.postForm;
var editor = field.form.editor;
if (field.params.value === null || field.params.value === undefined)
field.params.value = '';
field.quoteNode = document.createElement('DIV');
var quoteContentNode = document.createElement('DIV');
quoteContentNode.setAttribute('id', BXMainMailForm.quoteNodeId);
quoteContentNode.innerHTML = field.params.value;
field.quoteNode.appendChild(quoteContentNode);
field.quoteNode.__folded = field.form.options.foldQuote;
//postForm.controllerInit('hide');
BX.onCustomEvent(postForm.eventNode, 'OnShowLHE', ['justShow']);
BX.addClass(editor.dom.cont, 'main-mail-form-editor');
editor.dom.toolbarCont.style.opacity = 'inherit';
// close rctp selectors on focus on html-editor
BX.addCustomEvent(
editor, 'OnIframeClick',
function()
{
BX.SocNetLogDestination.abortSearchRequest();
BX.SocNetLogDestination.closeSearch();
BX.SocNetLogDestination.closeDialog();
BX.onCustomEvent(field.form, 'MailForm::editor:click', []);
}
);
var toolbarButton = BX.findChildByClassName(field.params.__row, 'feed-add-post-form-editor-btn', true);
var toogleToolbar = function(show)
{
show = show ? true : false;
editor.toolbar[show?'Show':'Hide']();
BX[show?'addClass':'removeClass'](toolbarButton, 'feed-add-post-form-btn-active');
BX[show?'removeClass':'addClass'](field.params.__row, 'main-mail-form-editor-no-toolbar');
};
toogleToolbar(editor.toolbar.shown);
BX.bind(toolbarButton, 'click', function()
{
toogleToolbar(!editor.toolbar.shown);
});
// append original message quote
var quoteButton = BX.findChildByClassName(field.form.htmlForm, 'main-mail-form-quote-button', true);
var quoteHandler = function()
{
if (field.quoteNode.__folded)
{
field.quoteNode.__folded = false;
field.setValue(editor.GetContent(), {quote: true, signature: false});
editor.Focus(false);
var height0, height1;
height0 = quoteButton.parentNode.offsetHeight;
BX.hide(quoteButton, 'inline-block');
height1 = quoteButton.parentNode.offsetHeight;
editor.ResizeSceleton(0, editor.config.height+height0-height1);
}
};
BX.bind(quoteButton, 'click', quoteHandler);
// append original message quote on switch from wysiwyg mode
var modeHandler = function ()
{
if (editor.GetViewMode() != 'wysiwyg')
{
BX.removeCustomEvent(editor, 'OnSetViewAfter', modeHandler);
quoteHandler();
}
};
BX.addCustomEvent(editor, 'OnSetViewAfter', modeHandler);
// wysiwyg -> code inline-attachments parser
postForm.parser.disk_file.regexp = /(bxacid):(n?\d+)/ig;
editor.phpParser.AddBxNode('disk_file', {
Parse: function (params, bxid)
{
var node = editor.GetIframeDoc().getElementById(bxid) || BX.findChild(field.quoteNode, {attr: {id: bxid}}, true);
if (node)
{
var dummy = document.createElement('DIV');
node = node.cloneNode(true);
dummy.appendChild(node);
if (node.tagName.toUpperCase() == 'IMG')
{
var image = 'data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==';
node.setAttribute('data-bx-orig-src', node.getAttribute('src'));
node.setAttribute('src', image);
return dummy.innerHTML.replace(image, 'bxacid:'+params.value);
}
return dummy.innerHTML;
}
return '[ ' + params.value + ' ]';
}
});
// clear inline-attachments on attachment remove
BX.addCustomEvent(
postForm.eventNode, 'OnFileUploadRemove',
function (result)
{
editor.synchro.Sync();
for (i in editor.bxTags)
{
if (editor.bxTags[i].params && editor.bxTags[i].params.value == result)
{
var node = editor.GetIframeDoc().getElementById(editor.bxTags[i].id);
if (node && node.parentNode)
node.parentNode.removeChild(node);
var node = BX.findChild(field.quoteNode, {attr: {id: editor.bxTags[i].id}}, true);
if (node && node.parentNode)
node.parentNode.removeChild(node);
delete editor.bxTags[i];
}
}
editor.synchro.FullSyncFromIframe();
}
);
// initialize editor content
BX.addCustomEvent(
editor, 'OnCreateIframeAfter',
function ()
{
field.setValue('', {quote: true, signature: true});
field.form.editorInited = true;
BX.onCustomEvent(field.form, 'MailForm::editor::init', [field]);
}
);
BX.addCustomEvent(field.form, 'MailForm:show', function ()
{
field.form.editor.CheckAndReInit();
field.form.editor.ResizeSceleton();
});
BX.addCustomEvent(field.form, 'MailForm:hide', function ()
{
field.form.editor.SaveContent();
});
BX.addCustomEvent(
field.form, 'MailForm:submit',
function ()
{
var value = editor.GetContent();
if (field.quoteNode.__folded)
value += editor.Parse(field.quoteNode.innerHTML, true, false);
BX(field.fieldId+'_value').value = value;
}
);
};
BXMainMailFormField.__types['from'].setValue = function(field, value)
{
var input = BX(field.fieldId+'_value');
var selector = BX.findChildByClassName(field.params.__row, 'main-mail-form-field-value-menu', true);
if (!value.trim())
{
if (!field.params.required)
{
input.value = '';
BX.adjust(selector, {html: ''});
}
BX.onCustomEvent(field.form, 'MailForm::from::change', [field, '']);
return;
}
if (field.params.mailboxes && field.params.mailboxes.length > 0)
{
var escRegex = new RegExp('[-\/\\^$*+?.()|[\]{}]', 'g');
for (var i in field.params.mailboxes)
{
var pattern = new RegExp(
'(^|<)' + field.params.mailboxes[i].email.replace(escRegex, '\\$&') + '(>|$)', 'i'
);
if (value.trim().match(pattern))
{
input.value = value;
BX.adjust(selector, {html: BX.util.htmlspecialchars(value)});
BX.onCustomEvent(field.form, 'MailForm::from::change', [field]);
break;
}
}
}
};
BXMainMailFormField.__types['rcpt'].setValue = function(field, value)
{
var selected = BX.SocNetLogDestination.getSelected(field.selector);
for (var id in selected)
BX.SocNetLogDestination.deleteItem(id, selected[id], field.selector);
if (value && BX.type.isPlainObject(value))
{
for (var id in value)
{
if (value.hasOwnProperty(id))
{
BX.SocNetLogDestination.obItemsSelected[field.selector][id] = value[id];
BX.SocNetLogDestination.runSelectCallback(id, value[id], field.selector, false, 'init');
}
}
}
};
BXMainMailFormField.__types['text'].insert = function(field, text)
{
var input = BX(field.fieldId+'_value');
if (typeof input.selectionStart != 'undefined')
{
var selection = {
start: input.selectionStart,
end: input.selectionEnd
};
input.value = input.value.substr(0, selection.start) + text + input.value.substr(selection.end);
input.selectionStart = input.selectionEnd = selection.start + text.length;
}
else
{
input.value = input.value + text;
}
input.focus();
};
BXMainMailFormField.__types['text'].setValue = function(field, value)
{
var input = BX(field.fieldId+'_value');
input.value = value;
};
BXMainMailFormField.__types['editor'].insert = function(field, text)
{
var editor = field.form.editor;
if (editor.synchro.IsFocusedOnTextarea())
{
editor.textareaView.WrapWith('', '', text);
if (editor.textareaView.element && typeof editor.textareaView.element.selectionStart != 'undefined')
editor.textareaView.element.selectionStart = editor.textareaView.element.selectionEnd;
}
else
{
editor.selection.GetRange().deleteContents();
editor.InsertHtml(text);
}
editor.Focus();
};
BXMainMailFormField.__types['editor'].setValue = function(field, value, options)
{
var postForm = field.form.postForm;
var editor = field.form.editor;
if (value.length > 0)
{
for (var uid in postForm.controllers)
{
if (!postForm.controllers.hasOwnProperty(uid))
continue;
var ctrl = postForm.controllers[uid];
if (ctrl.storage != 'disk')
continue;
if (!ctrl.values)
break;
for (var id in ctrl.values)
{
if (ctrl.values.hasOwnProperty(id) && ctrl.values[id].src)
value = value.replace('bxacid:'+id, ctrl.values[id].src+'&__bxacid='+id);
}
break;
}
}
if (options && options.signature)
{
editor.synchro.Sync();
var signatureNode = editor.GetIframeDoc().getElementById(BXMainMailForm.signatureNodeId);
if (signatureNode)
{
var dummyNode = document.createElement('div');
dummyNode.appendChild(signatureNode.cloneNode(true));
value += dummyNode.innerHTML;
}
}
if (options && options.quote && !field.quoteNode.__folded)
value += field.quoteNode.innerHTML;
editor.SetContent(value, true);
var regex = /[&?]__bxacid=(n?\d+)/;
var types = {'IMG': 'src', 'A': 'href'};
for (var name in types)
{
var nodeList = editor.GetIframeDoc().getElementsByTagName(name);
for (var i = 0; i < nodeList.length; i++)
{
var matches = nodeList[i].getAttribute(types[name])
? nodeList[i].getAttribute(types[name]).match(regex)
: false;
if (matches && postForm.arFiles['disk_file'+matches[1]])
{
nodeList[i].removeAttribute('id');
nodeList[i].setAttribute(
types[name],
nodeList[i].getAttribute(types[name]).replace(regex, '')
);
editor.SetBxTag(nodeList[i], {'tag': 'disk_file', params: {'value': matches[1]}});
postForm.monitoringSetStatus('disk_file', matches[1], true);
postForm.monitoringStart();
}
}
}
editor.synchro.FullSyncFromIframe();
};
BXMainMailFormField.__types['files'].setValue = function(field, value)
{
var postForm = field.form.postForm;
postForm.controllerInit('show');
for (var uid in postForm.controllers)
{
if (!postForm.controllers.hasOwnProperty(uid))
continue;
var ctrl = postForm.controllers[uid];
if (ctrl.storage != 'disk')
continue;
if (!ctrl.handler)
break;
value = BX.clone(value);
if (ctrl.values)
{
for (var i = 0; i < value.length; i++)
{
if (ctrl.values[value[i].id])
value.splice(i--, 1);
}
}
ctrl.handler.selectFile({}, {}, value);
break;
}
};
window.BXMainMailForm = BXMainMailForm;
})();