FruitBank/Presentation/Nop.Web/wwwroot/js/admin.common.js

368 lines
11 KiB
JavaScript

//this method is used to show an element by removing the appropriate hiding class
//we don't use the jquery show/hide methods since they don't work with "display: flex" properly
$.fn.showElement = function () {
this.removeClass('d-none');
}
//this method is used to hide an element by adding the appropriate hiding class
//we don't use the jquery show/hide methods since they don't work with "display: flex" properly
$.fn.hideElement = function () {
this.addClass('d-none');
}
function setLocation(url) {
window.location.href = url;
}
function OpenWindow(query, w, h, scroll) {
var l = (screen.width - w) / 2;
var t = (screen.height - h) / 2;
winprops = 'resizable=1, height=' + h + ',width=' + w + ',top=' + t + ',left=' + l + 'w';
if (scroll) winprops += ',scrollbars=1';
var f = window.open(query, "_blank", winprops);
}
function showThrobber(message) {
$('.throbber-header').html(message);
window.setTimeout(function () {
$(".throbber").show();
}, 1000);
}
$(function() {
$('.multi-store-override-option').each(function (k, v) {
checkOverriddenStoreValue(v, $(v).attr('data-for-input-selector'));
});
//we must intercept all events of pressing the Enter button in the search bar to be sure that the input focus remains in the context of the search
$("div.card-search").keypress(function (event) {
if (event.which == 13 || event.keyCode == 13) {
$("button.btn-search").trigger("click");
return false;
}
});
//pressing Enter in the tablex should not lead to any action
$("div[id$='-grid']").keypress(function (event) {
if (event.which == 13 || event.keyCode == 13) {
return false;
}
});
});
function checkAllOverriddenStoreValue(item) {
$('.multi-store-override-option').each(function (k, v) {
$(v).attr('checked', item.checked);
checkOverriddenStoreValue(v, $(v).attr('data-for-input-selector'));
});
}
function checkOverriddenStoreValue(obj, selector) {
var elementsArray = selector.split(",");
// first toggle appropriate hidden inputs for checkboxes
if ($(selector).is(':checkbox')) {
var name = $(selector).attr('name');
$('input:hidden[name="' + name + '"]').attr('disabled', !$(obj).is(':checked'));
}
if (!$(obj).is(':checked')) {
$(selector).attr('disabled', true);
}
else {
$(selector).removeAttr('disabled');
}
}
function bindBootstrapTabSelectEvent(tabsId, inputId) {
$('#' + tabsId + ' > div ul li a[data-toggle="pill"]').on('shown.bs.tab', function (e) {
var tabName = $(e.target).attr("data-tab-name");
$("#" + inputId).val(tabName);
});
}
function display_nop_error(e) {
if (e.error) {
if ((typeof e.error) == 'string') {
//single error
//display the message
alert(e.error);
} else {
//array of errors
var message = "The following errors have occurred:";
//create a message containing all errors.
$.each(e.error, function (key, value) {
if (value.errors) {
message += "\n";
message += value.errors.join("\n");
}
});
//display the message
alert(message);
}
//ignore empty error
} else if (e.errorThrown) {
alert('Error happened');
}
}
// CSRF (XSRF) security
function addAntiForgeryToken(data) {
//if the object is undefined, create a new one.
if (!data) {
data = {};
}
//add token
var tokenInput = $('input[name=__RequestVerificationToken]');
if (tokenInput.length) {
data.__RequestVerificationToken = tokenInput.val();
}
return data;
};
function saveUserPreferences(url, name, value) {
var postData = {
name: name,
value: value
};
addAntiForgeryToken(postData);
$.ajax({
cache: false,
url: url,
type: "POST",
data: postData,
dataType: "json",
error: function (jqXHR, textStatus, errorThrown) {
alert('Failed to save preferences.');
},
complete: function (jqXHR, textStatus) {
$("#ajaxBusy span").removeClass("no-ajax-loader");
}
});
};
function warningValidation(validationUrl, warningElementName, passedParameters) {
addAntiForgeryToken(passedParameters);
var element = $('[data-valmsg-for="' + warningElementName + '"]');
var messageElement = element.siblings('.field-validation-custom');
if (messageElement.length == 0) {
messageElement = $(document.createElement("span"));
messageElement.addClass('field-validation-custom');
element.after(messageElement);
}
$.ajax({
cache: false,
url: validationUrl,
type: "POST",
dataType: "json",
data: passedParameters,
success: function (data, textStatus, jqXHR) {
if (data.Result) {
messageElement.addClass("warning");
messageElement.html(data.Result);
} else {
messageElement.removeClass("warning");
messageElement.html('');
}
},
error: function (jqXHR, textStatus, errorThrown) {
messageElement.removeClass("warning");
messageElement.html('');
}
});
};
function toggleNestedSetting(parentSettingName, parentFormGroupId) {
if ($('input[name="' + parentSettingName + '"]').is(':checked')) {
$('#' + parentFormGroupId).addClass('opened');
} else {
$('#' + parentFormGroupId).removeClass('opened');
}
}
function parentSettingClick(e) {
toggleNestedSetting(e.data.parentSettingName, e.data.parentFormGroupId);
}
function initNestedSetting(parentSettingName, parentSettingId, nestedSettingId) {
var parentFormGroup = $('input[name="' + parentSettingName +'"]').closest('.form-group');
var parentFormGroupId = $(parentFormGroup).attr('id');
if (!parentFormGroupId) {
parentFormGroupId = parentSettingId;
}
$(parentFormGroup).addClass('parent-setting').attr('id', parentFormGroupId);
if ($('#' + nestedSettingId + ' .form-group').length == $('#' + nestedSettingId + ' .form-group.advanced-setting').length) {
$('#' + parentFormGroupId).addClass('parent-setting-advanced');
}
//$(document).on('click', 'input[name="' + parentSettingName + '"]', toggleNestedSetting(parentSettingName, parentFormGroupId));
$('input[name="' + parentSettingName + '"]').click(
{ parentSettingName: parentSettingName, parentFormGroupId: parentFormGroupId }, parentSettingClick);
toggleNestedSetting(parentSettingName, parentFormGroupId);
}
//scroll to top
(function ($) {
$.fn.backTop = function () {
var backBtn = this;
var position = 1000;
var speed = 900;
$(document).scroll(function () {
var pos = $(window).scrollTop();
if (pos >= position) {
backBtn.fadeIn(speed);
} else {
backBtn.fadeOut(speed);
}
});
backBtn.click(function () {
$("html, body").animate({ scrollTop: 0 }, 900);
});
}
}(jQuery));
// Ajax activity indicator bound to ajax start/stop document events
$(document).ajaxStart(function () {
$('#ajaxBusy').show();
}).ajaxStop(function () {
$('#ajaxBusy').hide();
});
//no-tabs solution
$(function() {
$(".card.card-secondary >.card-header").click(CardToggle);
//expanded
$('.card.card-secondary').on('expanded.lte.cardwidget', function () {
WrapAndSaveBlockData($(this), false)
if ($(this).find('table.dataTable').length > 0) {
setTimeout(function () {
ensureDataTablesRendered();
}, 420);
}
});
//collapsed
$('.card.card-secondary').on('collapsed.lte.cardwidget', function () {
WrapAndSaveBlockData($(this), true)
});
});
function CardToggle() {
var card = $(this).parent(".card.card-secondary");
card.CardWidget('toggle');
}
function WrapAndSaveBlockData(card, collapsed) {
var hideAttribute = card.attr("data-hideAttribute");
saveUserPreferences(rootAppPath + 'admin/preferences/savepreference', hideAttribute, collapsed);
}
//collapse search block
$(function() {
$(".row.search-row").click(ToggleSearchBlockAndSavePreferences);
});
function ToggleSearchBlockAndSavePreferences() {
$(this).parents(".card-search").find(".search-body").slideToggle();
var icon = $(this).find(".icon-collapse i");
if ($(this).hasClass("opened")) {
icon.removeClass("fa-angle-up");
icon.addClass("fa-angle-down");
saveUserPreferences(rootAppPath + 'admin/preferences/savepreference', $(this).attr("data-hideAttribute"), true);
} else {
icon.addClass("fa-angle-up");
icon.removeClass("fa-angle-down");
saveUserPreferences(rootAppPath + 'admin/preferences/savepreference', $(this).attr("data-hideAttribute"), false);
}
$(this).toggleClass("opened");
}
function ensureDataTablesRendered() {
$.fn.dataTable.tables({ visible: true, api: true }).columns.adjust();
}
function reloadAllDataTables(itemCount) {
//depending on the number of elements, the time for animation of opening the menu should increase
var timePause = 300;
if (itemCount) {
timePause = itemCount * 100;
}
$('table[class^="table"]').each(function () {
setTimeout(function () {
ensureDataTablesRendered();
}, timePause);
});
}
/**
* @param {string} alertId Unique identifier of alert
* @param {any} text Message text
*/
function showAlert(alertId, text)
{
$('#' + alertId + '-info').text(text);
$('#' + alertId).trigger("click");
}
//scrolling and hidden DataTables issue workaround
//More info - https://datatables.net/examples/api/tabs_and_scrolling.html
$(function() {
$('button[data-card-widget="collapse"]').on('click', function (e) {
//hack with waiting animation.
//when page is loaded, a box that should be collapsed have style 'display: none;'.that's why a table is not updated
setTimeout(function () {
ensureDataTablesRendered();
}, 1);
});
// when tab item click
$('.nav-tabs .nav-item').on('click', function (e) {
setTimeout(function () {
ensureDataTablesRendered();
}, 1);
});
$('ul li a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
ensureDataTablesRendered();
});
$('#advanced-settings-mode').on('click', function (e) {
ensureDataTablesRendered();
});
//when sidebar-toggle click
$('#nopSideBarPusher').on('click', function (e) {
reloadAllDataTables();
});
});
/**
* @param {string} masterCheckbox Master checkbox selector
* @param {string} childCheckbox Child checkbox selector
*/
function prepareTableCheckboxes(masterCheckbox, childCheckbox) {
//Handling the event of clicking on the master checkbox
$(masterCheckbox).click(function () {
$(childCheckbox).prop('checked', $(this).prop('checked'));
});
//Handling the event of clicking on a child checkbox
$(childCheckbox).change(function () {
$(masterCheckbox).prop('checked', $(childCheckbox + ':not(:checked)').length === 0 ? true : false);
});
//Determining the state of the master checkbox by the state of its children
$(masterCheckbox).prop('checked', $(childCheckbox).length == $(childCheckbox + ':checked').length && $(childCheckbox).length > 0);
}