%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/components/bitrix/main.userconsent.selector/templates/.default/ |
| Current File : /home/bitrix/www/bitrix/components/bitrix/main.userconsent.selector/templates/.default/script.js |
var MainUserConsentSelectorManager = function(params)
{
this.selectors = [];
this.init = function (params)
{
this.actionRequestUrl = params.actionRequestUrl;
this.initSlider();
var contexts = document.querySelectorAll('[data-bx-user-consent-selector]');
contexts = BX.convert.nodeListToArray(contexts);
contexts.forEach(this.initByContext, this);
};
this.initByContext = function(context)
{
var selector = context.querySelector('select[data-bx-selector]');
var linkEdit = context.querySelector('a[data-bx-link-edit]');
var linkView = context.querySelector('a[data-bx-link-view]');
if (!selector || !linkEdit || !linkView)
{
return;
}
this.selectors.push(selector);
BX.bind(selector, 'change', this.onChange.bind(this, selector, linkEdit, linkView));
this.onChange(selector, linkEdit, linkView);
this.initSliderButtons(context);
};
this.onChange = function(selector, linkEdit, linkView)
{
linkEdit.style.display = selector.value ? '' : 'none';
linkView.style.display = selector.value ? '' : 'none';
this.fillHrefByTemplate(linkEdit, selector.value);
this.fillHrefByTemplate(linkView, selector.value);
};
this.fillHrefByTemplate = function(a, value)
{
var path = a.getAttribute('data-bx-link-tmpl');
if (!path)
{
return;
}
a.href = path.replace(new RegExp('#id#', 'g'), value);
};
this.fillDropDownControl = function(node, items, skipExistedFirstElement)
{
items = items || [];
var firstChildElement = node.children[0];
node.innerHTML = '';
if (skipExistedFirstElement && firstChildElement)
{
node.appendChild(firstChildElement);
}
items.forEach(function(item){
if(!item || !item.caption)
{
return;
}
var option = document.createElement('option');
option.value = item.value;
option.selected = !!item.selected;
option.innerText = item.caption;
node.appendChild(option);
});
};
this.initSliderButtons = function(context)
{
var list = context.querySelectorAll('[data-bx-slider-href]');
list = BX.convert.nodeListToArray(list);
list.forEach(this.slider.bindOpen, this.slider);
};
this.initSlider = function()
{
this.slider.caller = this;
top.BX.addCustomEvent(top, 'main-user-consent-to-list', function () {
top.BX.SidePanel.Instance.close();
});
};
this.onSliderClose = function()
{
this.sendActionRequest('getAgreements', {}, function (data) {
if (!data.list)
{
return;
}
this.selectors.forEach(function (selectorNode) {
var selectedValue = selectorNode.value;
if (!selectedValue)
{
selectedValue = data.list[0].ID;
}
var items = data.list.map(function (item) {
return {
caption: item.NAME,
value: item.ID,
selected: item.ID == selectedValue
};
});
this.fillDropDownControl(selectorNode, items, true);
BX.fireEvent(selectorNode, 'change');
}, this);
});
};
this.slider = {
caller: null,
init: function (params)
{
top.BX.SidePanel.Instance.bindAnchors({
rules: [
{
condition: params.condition,
loader: params.loader,
stopParameters: []
}
]
});
},
onSaved: function ()
{
this.onClose();
top.BX.SidePanel.Instance.close();
},
onClose: function ()
{
if (this.caller && this.caller.onSliderClose)
{
this.caller.onSliderClose.apply(this.caller);
}
},
bindOpen: function (element)
{
BX.bind(element, 'click', this.openHref.bind(this, element));
},
openHref: function (a, e)
{
e.preventDefault();
this.open(a.getAttribute('href'), a.getAttribute('data-bx-slider-reload'));
},
open: function (url, reloadAfterClosing)
{
top.BX.SidePanel.Instance.open(url, {
cacheable: false,
events: {
onClose: reloadAfterClosing ? this.onClose.bind(this) : null
}
});
if (reloadAfterClosing)
{
top.BX.addCustomEvent(top, 'main-user-consent-saved', this.onSaved.bind(this));
}
}
};
this.sendActionRequest = function (action, sendData, callbackSuccess, callbackFailure)
{
callbackSuccess = callbackSuccess || null;
callbackFailure = callbackFailure || null;
sendData.action = action;
sendData.sessid = BX.bitrix_sessid();
sendData.action = action;
BX.ajax({
url: this.actionRequestUrl,
method: 'POST',
data: sendData,
timeout: 10,
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': ''};
if (callbackFailure)
{
callbackFailure.apply(this, [data]);
}
}, this)
});
};
this.init(params);
};