%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/components/bitrix/b24connector.button.list/templates/.default/ |
| Current File : /home/bitrix/www/bitrix/components/bitrix/b24connector.button.list/templates/.default/script.js |
var CrmWebFormList = function(params)
{
this.init = function(params)
{
this.context = BX(params.context);
this.canEdit = params.canEdit;
this.nodeHead = this.context.querySelector('.intranet-button-list-header');
this.headHideClass = 'crm-webform-title-close';
this.formAttribute = 'data-bx-crm-webform-item';
this.formAttributeIsSystem = 'data-bx-crm-webform-item-is-system';
this.forms = [];
this.mess = params.mess || {};
var formNodeList = this.context.querySelectorAll('[' + this.formAttribute + ']');
for(var i = 0; i < formNodeList.length; i++)
{
var formNode = formNodeList.item(i);
var formId = formNode.getAttribute(this.formAttribute);
var isSystem = formNode.getAttribute(this.formAttributeIsSystem) == 'Y';
this.initForm({
'caller': this,
'id': formId,
'node': formNode,
'isSystem': isSystem,
'detailPageUrlTemplate': params.detailPageUrlTemplate,
'actionRequestUrl': params.actionRequestUrl,
'remoteData': !!params.remoteData[formId] ? params.remoteData[formId] : {},
'localData': !!params.localData[formId] ? params.localData[formId] : {}
});
}
};
this.onBeforeDeleteForm = function(form)
{
var list = this.forms.filter(function(item){
return item.isSystem == false;
});
if(list.length > 1)
{
return;
}
BX.addClass(this.nodeHead, this.headHideClass)
};
this.onAfterDeleteForm = function(form)
{
var index = BX.util.array_search(form, this.forms);
if(index > -1)
{
delete this.forms[index];
}
};
this.onRevertDeleteForm = function(form)
{
BX.removeClass(this.nodeHead, this.headHideClass)
};
this.initForm = function(params)
{
var form = new CrmWebFormListItem(params);
this.forms.push(form);
};
this.init(params);
};
function CrmWebFormListItem(params)
{
this.caller = params.caller;
this.id = params.id;
this.node = params.node;
this.isSystem = params.isSystem;
this.actionRequestUrl = params.actionRequestUrl;
this.detailPageUrlTemplate = params.detailPageUrlTemplate;
this.remoteData = params.remoteData;
this.localData = params.localData;
this.nodeDelete = this.node.querySelector('.copy-to-buffer-button');
this.nodeCopyToClipboard = this.node.querySelector('.copy-to-clipboard-node');
this.nodeCopyToClipboardButton = this.node.querySelector('.copy-to-clipboard-button');
this.nodeDelete = this.node.querySelector('[data-bx-crm-webform-item-delete]');
this.nodeSettings = this.node.querySelector('[data-bx-crm-webform-item-settings]');
this.nodeViewSettings = this.node.querySelector('[data-bx-crm-webform-item-view-settings]');
this.nodeView = this.node.querySelector('[data-bx-crm-webform-item-view]');
this.isActiveControlLocked = false;
this.popupSettings = null;
this.popupViewSettings = null;
this.activeController = new CrmWebFormListItemActiveDateController({caller: this});
this.bindControls(params);
}
CrmWebFormListItem.prototype =
{
showErrorPopup: function (data)
{
data = data || {};
var text = data.text || this.caller.mess.errorAction;
var popup = BX.PopupWindowManager.create(
'crm_webform_list_error',
null,
{
autoHide: true,
lightShadow: true,
closeByEsc: true,
overlay: {backgroundColor: 'black', opacity: 500}
}
);
popup.setButtons([
new BX.PopupWindowButton({
text: this.caller.mess.dlgBtnClose,
events: {click: function(){this.popupWindow.close();}}
})
]);
popup.setContent('<span class="crm-webform-edit-warning-popup-alert">' + text + '</span>');
popup.show();
},
showConfirmPopup: function (data)
{
data = data || {};
var text = data.text || this.caller.mess.confirmAction;
var popup = BX.PopupWindowManager.create(
'crm_webform_list_confirm',
null,
{
autoHide: true,
lightShadow: true,
closeByEsc: true,
overlay: {backgroundColor: 'black', opacity: 500}
}
);
popup.setButtons([
new BX.PopupWindowButton({
text: this.caller.mess.dlgBtnApply,
className: "popup-window-button-accept",
events: {click: function(){this.popupWindow.close(); data.action.apply(this, [])}}
}),
new BX.PopupWindowButton({
text: this.caller.mess.dlgBtnCancel,
events: {click: function(){this.popupWindow.close();}}
})
]);
popup.setContent('<span class="crm-webform-edit-warning-popup-confirm">' + text + '</span>');
popup.show();
},
changeActive: function (event, doNotSend)
{
if(!this.caller.canEdit)
return;
doNotSend = doNotSend || false;
if(this.isActiveControlLocked)
return;
var needDeactivate = this.activeController.isActive(),
action = needDeactivate ? 'deactivate' : 'activate',
reqData = {};
if(action == 'activate')
{
reqData = {
'REMOTE_DATA': this.remoteData,
'LOCAL_DATA': this.localData
};
}
else
{
reqData = {
'BUTTON_ID': this.id
};
}
if(needDeactivate)
this.activeController.deactivate();
else
this.activeController.activate();
if(doNotSend)
return;
this.isActiveControlLocked = true;
this.sendActionRequest(
action,
reqData,
function(data)
{
this.isActiveControlLocked = false;
if(action == 'activate')
{
if(!!data.LOCAL_DATA)
this.localData = data.LOCAL_DATA;
}
else if(action == 'deactivate')
{
this.localData = {};
}
},
function(data)
{
data = data || {'error': true, 'text': ''};
this.isActiveControlLocked = false;
this.activeController.revert();
this.showErrorPopup(data);
}
);
},
redirectToDetailPage: function (formId)
{
window.location = this.detailPageUrlTemplate.replace('#id#', formId).replace('#form_id#', formId);
},
resetCounters: function ()
{
this.sendActionRequest('reset_counters', {}, function(){
window.location.reload();
});
},
copy: function ()
{
this.sendActionRequest('copy', {}, function(data){
this.redirectToDetailPage(data.copiedId);
});
},
delete: function ()
{
this.showConfirmPopup({
text: this.caller.mess.deleteConfirmation,
action: BX.proxy(function(){
var deleteClassName = 'crm-webform-row-close';
BX.addClass(this.node, deleteClassName);
this.caller.onBeforeDeleteForm(this);
this.sendActionRequest(
'delete',
{},
function(data){
this.caller.onAfterDeleteForm(this);
},
function(data){
BX.removeClass(this.node, deleteClassName);
this.caller.onRevertDeleteForm(this);
this.showErrorPopup(data);
}
);
}, this)
});
},
sendActionRequest: function (action, data, callbackSuccess, callbackFailure)
{
callbackSuccess = callbackSuccess || null;
callbackFailure = callbackFailure || BX.proxy(this.showErrorPopup, this);
BX.ajax({
url: this.actionRequestUrl,
method: 'POST',
data: {
'action': action,
'data': data,
'sessid': BX.bitrix_sessid()
},
timeout: 30,
dataType: 'json',
processData: true,
onsuccess: BX.proxy(function(data){
data = data || {};
if(data.error)
{
callbackFailure.apply(this, [data]);
}
else if(callbackSuccess)
{
callbackSuccess.apply(this, [data]);
}
}, this),
onfailure: BX.proxy(function(){
var data = {'error': true, 'text': ''};
callbackFailure.apply(this, [data]);
}, this)
});
},
bindControls: function ()
{
BX.clipboard.bindCopyClick(this.nodeCopyToClipboardButton, {text: this.nodeCopyToClipboard});
BX.bind(this.nodeDelete, 'click', BX.proxy(this.delete, this));
BX.bind(this.activeController.nodeActiveControl, 'click', BX.proxy(this.changeActive, this));
BX.bind(this.nodeSettings, 'click', BX.proxy(this.showSettings, this));
BX.bind(this.nodeViewSettings, 'click', BX.proxy(this.showViewSettings, this));
},
changeClass: function (node, className, isAdd)
{
isAdd = isAdd || false;
if(!node)
{
return;
}
if(isAdd)
{
BX.addClass(node, className);
}
else
{
BX.removeClass(node, className);
}
},
styleDisplay: function (node, isShow, displayValue)
{
isShow = isShow || false;
displayValue = displayValue || '';
if(!node)
{
return;
}
node.style.display = isShow ? displayValue : 'none';
},
createPopup: function(popupId, button, items, params)
{
params = params || {};
return BX.PopupMenu.create(
popupId,
button,
items,
{
autoHide: true,
offsetLeft: params.offsetLeft ? params.offsetLeft : -21,
offsetTop: params.offsetTop ? params.offsetTop : -3,
angle:
{
position: "top",
offset: 42
},
events:
{
onPopupClose : BX.delegate(this.onPopupClose, this)
}
}
);
},
closePopup: function(popup)
{
if(popup && popup.popupWindow)
{
popup.popupWindow.close();
}
},
onPopupClose: function()
{
}
};
function CrmWebFormListItemActiveDateController(params)
{
this.caller = params.caller;
this.nodeActiveControl = this.caller.node.querySelector('[data-bx-crm-webform-item-active]');
this.nodeDate = this.caller.node.querySelector('[data-bx-crm-webform-item-active-date]');
this.nodeDateNowActivated = this.caller.node.querySelector('[data-bx-crm-webform-item-active-date-now-a]');
this.nodeDateNowDeActivated = this.caller.node.querySelector('[data-bx-crm-webform-item-active-date-now-d]');
this.classDateNow = 'user-container-show-now';
this.classDateNowState = 'user-container-show-now-deact';
this.classOn = 'intranet-button-list-on';
this.classOff = 'intranet-button-list-off';
this.isNowShowedCounter = 0;
this.isRevert = false;
}
CrmWebFormListItemActiveDateController.prototype =
{
isActive: function ()
{
return BX.hasClass(this.nodeActiveControl, this.classOn);
},
revert: function ()
{
this.isRevert = true;
this.toggle();
if(this.isNowShowedCounter < 2)
{
this.isNowShowedCounter = 0;
}
this.isRevert = false;
},
toggle: function ()
{
if(this.isActive())
{
this.deactivate();
}
else
{
this.activate();
}
},
activate: function ()
{
BX.addClass(this.nodeActiveControl, this.classOn);
BX.removeClass(this.nodeActiveControl, this.classOff);
this.actualizeDate();
},
deactivate: function ()
{
BX.removeClass(this.nodeActiveControl, this.classOn);
BX.addClass(this.nodeActiveControl, this.classOff);
this.actualizeDate();
},
actualizeDate: function ()
{
this.caller.changeClass(this.nodeDate, this.classDateNowState, !this.isActive());
this.nodeDate.style.display = '';
var isNow = (!this.isRevert || this.isNowShowedCounter > 1);
this.caller.changeClass(this.nodeDate, this.classDateNow, isNow);
this.isNowShowedCounter++;
}
};