');
if(!bEnable)
oBlock.find(".bx-loading-ajax").remove();
else if(!oBlock.find('.bx-loading-ajax').length) {
if('undefined' != typeof(isReplace) && isReplace)
oBlock.html(oLoading.addClass('static'));
else
oBlock.append(oLoading);
if(!bUseSvgLoading)
bx_loading_animate(oBlock.find('.bx-loading-ajax'), aSpinnerOpts);
}
}
function bx_loading (elem, b) {
if (typeof elem == 'string')
elem = '#' + elem;
var block = $(elem);
if (block.hasClass('bx-btn')) {
bx_loading_btn (block, b);
return;
}
if (1 == b || true == b) {
bx_loading_content(block, b);
e = block.find(".bx-loading-ajax");
e.css('left', parseInt(block.width()/2.0 - e.width()/2.0));
var he = e.outerHeight();
var hc = block.outerHeight();
if (block.css('position') != 'relative' && block.css('position') != 'absolute') {
if (!block.data('css-save-position'))
block.data('css-save-position', block.css('position'));
block.css('position', 'relative');
}
if (hc > he) {
e.css('top', parseInt(hc/2.0 - he/2.0));
}
if (hc < he) {
if (!block.data('css-save-min-height'))
block.data('css-save-min-height', block.css('min-height'));
block.css('min-height', he);
e.css('top', 0);
}
} else {
if (block.data('css-save-position'))
block.css('position', block.data('css-save-position'));
if (block.data('css-save-min-height'))
block.css('min-height', block.data('css-save-min-height'));
bx_loading_content(block, b);
}
}
/**
* Center content with floating blocks.
* sSel - jQuery selector of content to be centered
* sBlockSel - jquery selector of blocks
*/
function bx_center_content (sSel, sBlockStyle, bListenOnResize) {
var sId;
if ($(sSel).parent().hasClass('bx-center-content-wrapper')) {
sId = $(sSel).parent().attr('id');
} else {
sId = 'id' + (new Date()).getTime();
$(sSel).wrap('');
}
var eCenter = $('#' + sId);
var iAll = $('#' + sId + ' ' + sBlockStyle).size();
var iWidthUnit = $('#' + sId + ' ' + sBlockStyle + ':first').outerWidth(true);
var iWidthContainer = eCenter.innerWidth();
var iPerRow = parseInt(iWidthContainer/iWidthUnit);
var iLeft = (iWidthContainer - (iAll > iPerRow ? iPerRow * iWidthUnit : iAll * iWidthUnit)) / 2;
if (iWidthUnit > iWidthContainer)
return;
if ('undefined' != typeof(bListenOnResize) && bListenOnResize) {
$(window).on('resize.bx-center-content', function () {
bx_center_content(sSel, sBlockStyle);
});
}
eCenter.css("padding-left", iLeft);
}
/**
* Show pointer popup with menu from URL.
* @param o - menu object name
* @param e - element to show popup at
* @param options - popup options
* @param vars - additional GET variables
*/
function bx_menu_popup (o, e, options, vars) {
var options = options || {};
var vars = vars || {};
if ('undefined' == typeof(e))
e = window;
//--- Only a trigger that names no target of its own is this popup's disclosure. A trigger carrying
//--- aria-controls belongs to whatever it names - a sidebar, the search box - and that owner keeps
//--- its state; writing to it from here would leave it describing the wrong thing.
var bExpanded = e !== window && $(e).length != 0 && $(e).is('[aria-expanded]') && !$(e).is('[aria-controls]');
var fOnShow = options.onShow, fOnHide = options.onHide;
// a string onShow is handed back to dolPopup, which evaluates it; a string onHide has never been
// supported on this path, since dolPopupAjax replaces onHide before dolPopup sees it
var aExpanded = {};
if(typeof fOnShow != 'string')
aExpanded.onShow = function(oPopup) {
if(bExpanded)
$(e).attr('aria-expanded', 'true');
// remembered on the popup: the hide handler dolPopup keeps is the one from the first show, whichever trigger opened it since
oPopup.data('bx-popup-trigger', bExpanded ? $(e) : null);
if(typeof fOnShow == 'function')
fOnShow(oPopup);
};
if(typeof fOnHide != 'string')
aExpanded.onHide = function(oPopup) {
var oTrigger = oPopup.data('bx-popup-trigger');
if(oTrigger)
oTrigger.attr('aria-expanded', 'false');
if(typeof fOnHide == 'function')
fOnHide(oPopup);
};
var o = $.extend({}, $.fn.dolPopupDefaultOptions, {
id: o,
url: bx_append_url_params('menu.php', $.extend({o:o}, vars)),
cssClass: 'bx-popup-menu'
}, options, aExpanded);
$(e).dolPopupAjax(o);
}
/**
* Show pointer popup with menu from existing HTML.
* @param jSel - jQuery selector for html to show in popup
* @param e - element to show popup at
* @param options - popup options
*/
function bx_menu_popup_inline (jSel, e, options) {
if ($(jSel + ':visible').length)
$(jSel).dolPopupHide();
else {
var options = options || {};
var bElement = e != undefined && $(e).length != 0;
var bExpanded = bElement && $(e).is('[aria-expanded]');
var fOnShow = options.onShow, fOnHide = options.onHide;
var o = $.extend({}, $.fn.dolPopupDefaultOptions, options, {
pointer: bElement ? {el:$(e)} : false,
cssClass: 'bx-popup-menu',
onShow: function(oPopup) {
if(bExpanded)
$(e).attr('aria-expanded', 'true');
// remembered on the popup: the hide handler dolPopup keeps is the one from the first show, whichever trigger opened it since
oPopup.data('bx-popup-trigger', bExpanded ? $(e) : null);
oPopup.find('a').each(function () {
$(this).off('click.bx-popup-menu');
$(this).on('click.bx-popup-menu', function() {
$(jSel).dolPopupHide();
});
});
// keyboard focus leaving the menu (Shift+Tab from its first item) closes it, as Escape and an outer click do
oPopup.off('focusout.bx-popup-menu').on('focusout.bx-popup-menu', function(oEvent) {
var oTarget = oEvent.relatedTarget;
if(!oTarget || oPopup.get(0).contains(oTarget) || (bElement && $(e).get(0).contains && $(e).get(0).contains(oTarget)))
return;
$(jSel).dolPopupHide();
});
if(typeof fOnShow == 'function')
fOnShow(oPopup);
},
onHide: function(oPopup) {
oPopup.off('focusout.bx-popup-menu');
var oTrigger = oPopup.data('bx-popup-trigger');
if(oTrigger && oTrigger.length)
oTrigger.attr('aria-expanded', 'false');
if(typeof fOnHide == 'function')
fOnHide(oPopup);
},
});
$(jSel).dolPopup(o);
}
}
/**
* Show pointer popup with menu from URL.
* @param sObject - menu object name
* @param oElement - element to show popup at
* @param oOptions - popup options
* @param oVars - additional GET variables
*/
function bx_menu_slide (sObject, oElement, sPosition, oOptions, oVars) {
var oVars = oVars || {};
var oOptions = oOptions || {};
oOptions = $.extend({}, {parent: 'body', container: '.bx-sliding-menu-content'}, oOptions);
var sId = '';
var sIdSel = '';
var sIdPfx = 'bx-sliding-menu-wrapper-';
if(typeof(oOptions.id) != 'undefined')
switch(typeof(oOptions.id)) {
case 'string':
sId = sIdPfx + oOptions.id;
break;
case 'object':
sId = typeof(oOptions.id.force) != 'undefined' && oOptions.id.force ? oOptions.id.value : sIdPfx + oOptions.id.value;
break;
}
else
sId = sIdPfx + parseInt(2147483647 * Math.random());
sIdSel = '#' + sId;
//--- If slider exists
if ($(sIdSel).length) {
bx_menu_slide_inline (sIdSel, oElement, sPosition);
return;
}
//--- If slider doesn't exists
else {
var oMenuLoading = $('#bx-sliding-menu-loading');
if(!oMenuLoading || !oMenuLoading.length)
return;
$('
' + oMenuLoading.html() + '
').addClass(oMenuLoading.attr('class')).appendTo(oOptions.parent);
var oLoading = $(sIdSel + ' .bx-sliding-menu-loading');
bx_loading_content(oLoading, true, true);
bx_menu_slide_inline (sIdSel, oElement, sPosition);
var fOnLoad = function() {
bx_loading_content(oLoading, false);
$(sIdSel).bxProcessHtml().show();
};
$(sIdSel).find(oOptions.container).load(bx_append_url_params('menu.php', $.extend({o:sObject}, oVars)), function () {
var f = function () {
if($(sIdSel).find('img').length > 0 && !$(sIdSel).find('img').get(0).complete)
$(sIdSel).find('img').load(fOnLoad);
else
fOnLoad();
};
setTimeout(f, 100); // TODO: better way is to check if item is animating before positioning it in the code where popup is positioning
});
}
}
/**
* Show sliding menu from existing HTML.
* @param sMenu - jQuery object or selector for html to show in popup
* @param e - element to click to open/close slider
* @param sPosition - 'block' for sliding menu in blocks, 'site' - for sliding main menu
*/
function bx_menu_slide_inline (sMenu, e, sPosition) {
var options = options || {};
var eSlider = $(sMenu);
if ('undefined' !== typeof (bx_menu_slide_inline_custom)) {
return bx_menu_slide_inline_custom(sMenu, e, sPosition);
}
if ('undefined' == typeof(e))
e = eSlider.data('data-control-btn');
var eIcon = $(e).find('.sys-icon-a');
var fPositionElement = function (oElement) {
eSlider.css({
position: 'absolute',
top: oElement.outerHeight(true),
left: 0
});
};
var fPositionBlock = function () {
var eBlock = eSlider.parents('.bx-page-block-container');
eSlider.css({
position: 'absolute',
top: eBlock.find('.bx-db-header').outerHeight(true),
left: 0
//width: eBlock.width() TODO: Commited to test. Remove if everything is OK.
});
};
var fPositionSite = function () {
var eToolbar = $('#bx-toolbar');
eSlider.css({
position: 'fixed',
top: eToolbar.outerHeight(true) + (typeof iToolbarSubmenuTopOffset != 'undefined' ? parseInt(iToolbarSubmenuTopOffset) : 0),
left: 0
});
};
var fClose = function () {
if (eIcon.length)
(new Marka(eIcon[0])).set(eIcon.attr('data-icon-orig'));
eSlider.slideUp()
};
var fOpen = function () {
if (eIcon.length) {
eIcon.attr('data-icon-orig', eIcon.attr('data-icon'));
(new Marka(eIcon[0])).set('times');
}
if(typeof sPosition == 'object')
fPositionElement(sPosition);
else if(typeof sPosition == 'string' && sPosition == 'block')
fPositionBlock();
else
fPositionSite();
eSlider.slideDown();
eSlider.data('data-control-btn', e);
};
if ('undefined' == typeof(sPosition))
sPosition = 'block';
if (eSlider.is(':visible')) {
if(typeof(bx_sound) == 'function')
bx_sound('close', {emphasis: 'subtle'});
fClose();
$(e).focus();
$(document).off('click.bx-sliding-menu touchend.bx-sliding-menu');
$(window).off('resize.bx-sliding-menu');
}
else {
bx_menu_slide_close_all_opened();
$(document).off('click.bx-sliding-menu touchend.bx-sliding-menu');
$(window).off('resize.bx-sliding-menu');
// Some templates (Artificer) draw a sidebar instead and keep this call on the trigger: no menu, no sound.
if(eSlider.length && typeof(bx_sound) == 'function')
bx_sound('open', {emphasis: 'subtle'});
fOpen();
eSlider.find('.bx-popup-content a:first').focus();
eSlider.find('a').each(function () {
$(this).off('click.bx-sliding-menu');
$(this).on('click.bx-sliding-menu', function () {
fClose();
});
});
setTimeout(function () {
var iWidthPrev = $(window).width();
$(window).on('resize.bx-sliding-menu', function () {
if ($(this).width() == iWidthPrev)
return;
iWidthPrev = $(this).width();
bx_menu_slide_close_all_opened();
});
$(document).on('click.bx-sliding-menu touchend.bx-sliding-menu', function (event) {
if ($(event.target).parents('.bx-sliding-menu, .bx-sliding-menu-main, .bx-popup-slide-wrapper, .bx-db-header').length || $(event.target).filter('.bx-sliding-menu-main, .bx-popup-slide-wrapper, .bx-db-header').length || e === event.target)
event.stopPropagation();
else
bx_menu_slide_close_all_opened();
});
}, 10);
}
}
/**
* Close all opened sliding menus
*/
function bx_menu_slide_close_all_opened () {
$('.bx-sliding-menu:visible, .bx-sliding-menu-main:visible, .bx-popup-slide-wrapper:visible').each(function () {
bx_menu_slide_inline('#' + this.id);
});
}
/*
* Note. oData.count_old and oData.count_new are also available and can be checked or used in notification popup.
*/
function bx_menu_show_live_update(oData) {
var sSelectorAddon = '.bx-menu-item-addon';
// Something arrived (a notification, a message, a request): one ready, however many counters went up.
if(parseInt(oData.count_new) > parseInt(oData.count_old))
bx_sound('ready');
//--- Update Child Menu Item
if(oData.mi_child) {
var oMenuItem = $('.bx-menu-object-' + oData.mi_child.menu_object + ' .bx-menu-item-' + oData.mi_child.menu_item);
var oMenuItemAddon = oMenuItem.find(sSelectorAddon);
if(oMenuItemAddon.length > 0)
oMenuItemAddon.html(oData.count_new);
else
oMenuItem.append(oData.code.replace('{count}', oData.count_new));
//+++ Check for 0 value
oMenuItemAddon = oMenuItem.find(sSelectorAddon);
if(parseInt(oData.count_new) > 0)
oMenuItemAddon.show();
else
oMenuItemAddon.hide();
}
//--- Update Parent Menu Item
if(oData.mi_parent) {
var oMenuItem = $('.bx-menu-object-' + oData.mi_parent.menu_object + ' .bx-menu-item-' + oData.mi_parent.menu_item);
var oMenuItemAddon = oMenuItem.find(sSelectorAddon);
var sMediaType = bx_check_mq();
if(sMediaType == 'mobile')
sMediaType = 'phone';
var iSum = 0;
$('.bx-media-' + sMediaType + ' .bx-menu-object-' + oData.mi_child.menu_object + ' .bx-menu-item:not(.bx-def-media-' + sMediaType + '-hide) .bx-menu-item-addon').each(function() {
iValue = parseInt($(this).html());
if(iValue && iValue > 0)
iSum += iValue;
});
if(oMenuItemAddon.length > 0)
oMenuItemAddon.html(iSum);
else
oMenuItem.append(oData.code.replace('{count}', iSum));
//+++ Check for 0 value
oMenuItemAddon = oMenuItem.find(sSelectorAddon);
if(iSum > 0)
oMenuItemAddon.show();
else
oMenuItemAddon.hide();
}
}
function bx_menu_show_more_less(oLink, sMenu, sSelectorParent) {
if(!sSelectorParent)
sSelectorParent = 'ul';
var sClass = 'bx-mi-hidden';
$(oLink).parents(sSelectorParent + ':first').find('.bx-mi-aux, .bx-psmi-show-more, .bx-psmi-show-less').toggleClass(sClass);
$.get(sUrlRoot + 'menu.php', {
o: sMenu,
a: 'set_collapsed',
v: $(oLink).parents(sSelectorParent + ':first').find('.bx-mi-aux').hasClass(sClass) ? 1 : 0
});
}
function bx_menu_toggle_contents(oLink, sSelectorParent) {
if(!sSelectorParent)
sSelectorParent = '.bx-menu-contents';
var sClass = 'bx-m-collapsed';
var oParent = $(oLink).parents(sSelectorParent + ':first');
oParent.toggleClass(sClass);
oParent.siblings('.bx-menu-content').toggle();
return false;
}
function bx_menu_toggle(oLink, sMenu, sMenuItem, sSelectorParent) {
if(!sSelectorParent)
sSelectorParent = 'li';
var sClass = 'bx-mi-collapsed';
var oParent = $(oLink).parents(sSelectorParent + ':first');
oParent.toggleClass(sClass);
$.get(sUrlRoot + 'menu.php', {
o: sMenu,
a: 'set_collapsed_submenu',
i: sMenuItem,
v: oParent.hasClass(sClass) ? 1 : 0
});
return false;
}
function bx_menu_followings_load_more(oLink, sMenu, sContextModule, iStart, iPerPage) {
var oLoadingParent = $(oLink).length ? $(oLink).parents('.bx-menu-item:first') : $('body');
bx_loading(oLoadingParent, true);
$.get(sUrlRoot + 'menu.php', {
o: sMenu,
a: 'load_more',
v: sContextModule,
start: iStart,
per_page: iPerPage
}, function(oData) {
bx_loading(oLoadingParent, false);
if(oData && oData.content != undefined)
$(oLink).parents('.bx-menu-subitem:first').replaceWith(oData.content);
}, 'json');
}
/**
* Set ACL level for specified profile
* @param iProfileId - profile id to set acl level for
* @param iAclLevel - acl level id to assign to a given rofile
*/
function bx_set_acl_level (iProfileId, iAclLevel, mixedLoadingElement) {
var bBulk = !$.isNumeric(iProfileId);
var iAclCard = !bBulk && $('#sys-acl-profile-' + iProfileId).length > 0 ? 1 : 0;
var bLoading = typeof(mixedLoadingElement) != 'undefined';
if(bLoading)
bx_loading($(mixedLoadingElement), true);
$.post(sUrlRoot + 'menu.php', {o:'sys_set_acl_level', profile_id: iProfileId, level_id: iAclLevel, card:iAclCard}, function(oData) {
bx_on_set_acl_level(oData, mixedLoadingElement);
}, 'json');
}
/**
* Reset ACL level for specified profile to Standard.
* @param iProfileId - profile id to reset acl level for
*/
function bx_reset_acl_level (iProfileId, mixedLoadingElement) {
var bBulk = !$.isNumeric(iProfileId);
var iAclCard = !bBulk && $('#sys-acl-profile-' + iProfileId).length > 0 ? 1 : 0;
var fPerform = function() {
var bLoading = typeof(mixedLoadingElement) != 'undefined';
if(bLoading)
bx_loading($(mixedLoadingElement), true);
$.post(sUrlRoot + 'menu.php', {o:'sys_set_acl_level', profile_id: iProfileId, level_id: 3, card: iAclCard}, function(oData) {
bx_on_set_acl_level(oData, mixedLoadingElement);
}, 'json');
};
bx_confirm(_t('_Are_you_sure'), fPerform);
}
function bx_on_set_acl_level(oData, oLoadingElement) {
if(typeof(oLoadingElement) != 'undefined')
bx_loading($(oLoadingElement), false);
if(oData.msg != undefined && oData.msg.length) {
bx_alert(oData.msg);
return;
}
if($(oLoadingElement).hasClass('bx-popup-applied'))
$(oLoadingElement).dolPopupHide().remove();
if(typeof(oData.card) == 'object')
for(var iField in oData.card) {
var oCard = $(oData.card[iField]);
$('#' + oCard.attr('id')).replaceWith(oCard.bxTime());
}
}
/**
* Set badge for specified content
* @param sModule - current module for content
* @param iContentId - content id to set badge for
* @param iBadgeId - badge id to assign to a given content
*/
function bx_set_badge (sModule, iContentId, iBadgeId, mixedLoadingElement) {
var bLoading = typeof(mixedLoadingElement) != 'undefined';
if(bLoading)
bx_loading($(mixedLoadingElement), true);
$.post(sUrlRoot + 'menu.php', {o:'sys_set_badges', module: sModule, content_id: iContentId, badge_id: iBadgeId}, function(oData) {
if(bLoading)
bx_loading($(mixedLoadingElement), false);
if(oData.msg != undefined && oData.msg.length) {
bx_alert(oData.msg);
return;
}
if($(mixedLoadingElement).hasClass('bx-popup-applied'))
$(mixedLoadingElement).dolPopupHide().remove();
if(typeof(oData.card) == 'object')
for(var iField in oData.card) {
var oCard = $(oData.card[iField]);
$('#' + oCard.attr('id')).replaceWith(oCard);
}
$('.bx-base-bages-container').html(oData.html);
}, 'json');
}
function bx_get_notes(oSource, sModule, iContentId, oOptions, oVars) {
var oOptions = oOptions || {};
var oVars = oVars || {};
$.post(
sUrlRoot + 'modules/?r=' + sModule + '/get_notes/',
$.extend({content_id: iContentId}, oVars),
function(oData) {
if(oData && oData.popup != undefined) {
if(typeof(oData.popup) == 'string')
oData.popup = {html: oData.popup, options: {}};
oData.popup.options = $.extend({}, $.fn.dolPopupDefaultOptions, oData.popup.options, {
id: sModule + '_notes_' + iContentId,
closeOnOuterClick: false,
removeOnClose: true,
onBeforeShow: function(oPopup) {
$(oPopup).find('.bx-popup-element-close').removeClass('bx-def-media-desktop-hide bx-def-media-tablet-hide');
}
}, oOptions);
}
processJsonData(oData);
},
'json'
);
}
function bx_approve(oSource, sModule, iContentId, oOptions, oVars) {
var oOptions = oOptions || {};
var oVars = oVars || {};
var fPopupInit = function(oData) {
if(oData && oData.popup != undefined) {
if(typeof(oData.popup) == 'string')
oData.popup = {html: oData.popup, options: {}};
oData.popup.options = $.extend({}, $.fn.dolPopupDefaultOptions, oData.popup.options, {
id: sModule + '_approve_' + iContentId,
closeOnOuterClick: false,
removeOnClose: true,
onBeforeShow: function(oPopup) {
$(oPopup).find('.bx-popup-element-close').removeClass('bx-def-media-desktop-hide bx-def-media-tablet-hide');
var oForm = $(oPopup).find('form');
if(oForm.length > 0) {
oForm.ajaxForm({
dataType: 'json',
beforeSubmit: function(aFormData, oForm, oOptions) {
bx_loading(oForm, true);
},
success: function(oData) {
$('.bx-popup-applied:visible').dolPopupHide();
fPopupInit(oData);
processJsonData(oData);
}
});
}
}
}, oOptions);
}
};
$.post(
sUrlRoot + 'modules/?r=' + sModule + '/approve/',
$.extend({content_id: iContentId}, oVars),
function(oData) {
fPopupInit(oData);
processJsonData(oData);
},
'json'
);
}
function bx_showcase_init(sSelWrapper, sSelItem) {
var oWrapper = $(sSelWrapper);
if(oWrapper.closest('.bx-popup-wrapper').length != 0)
return;
oWrapper.each(function() {
var sClassEnabled = 'bx-sc-enabled';
var oShowcase = $(this);
var oCells = oShowcase.find(sSelItem);
if(oCells.width() * oCells.length <= oShowcase.parent().width()) {
if(oShowcase.hasClass('flickity-enabled'))
oShowcase.flickity('destroy').removeClass(sClassEnabled);
return;
}
if(oShowcase.hasClass('flickity-enabled'))
return;
var oShowcaseOptions = {
cellSelector: sSelItem,
cellAlign: 'left',
imagesLoaded: true,
wrapAround: true,
pageDots: false
};
var iGroupCells = oShowcase.attr('bx-sc-group-cells');
if(iGroupCells != undefined)
oShowcaseOptions.groupCells = parseInt(iGroupCells);
oShowcase.on('ready.flickity', function() {
$(this).addClass(sClassEnabled);
}).flickity(oShowcaseOptions);
});
}
function validateLoginForm(eForm) {
return true;
}
/**
* convert