2023-05-16 10:47:08 +08:00

217 lines
6.2 KiB
JavaScript

$("#" + browseType + "Tab").addClass('btn-active-text');
/**
* Set batch edit checkbox.
*
* @access public
* @return void
*/
function setCheckbox()
{
$('#productListForm .c-checkbox, #productListForm .check-all').hide();
$('.c-name').css('border-left', 'none');
$(":checkbox[name^='productIDList']").prop('checked', false);
$('.check-all, .program-checkbox, .row-product').removeClass('checked');
if($.cookie('showProductBatchEdit') == 1)
{
$('#productListForm .c-checkbox, #productListForm .check-all').show();
$('.c-name').css('border-left', '1px solid #ddd');
}
else
{
$('.table-actions').hide();
$('#productsCount').show();
}
}
/**
* Update prarent checkbox.
*
* @param object $parent
* @access public
* @return void
*/
function updatePrarentCheckbox($parent)
{
var $row = $parent.closest('tr');
var $checkbox = $row.find('.program-checkbox');
var rowID = $row.data('id');
var $subRows = $('#productTableList').children('.row-product[data-nest-path^="' + rowID + ',"],.row-product[data-nest-path*=",' + rowID + ',"]');
var allCount = $subRows.length;
var selectedCount = $subRows.find('input:checkbox:checked').length;
var isAllChecked = allCount > 0 && allCount === selectedCount;
$checkbox.toggleClass('checked', isAllChecked)
.toggleClass('indeterminate', selectedCount > 0 && selectedCount < allCount);
$row.toggleClass('checked', isAllChecked);
}
/**
* Update all checkbox.
*
* @access public
* @return void
*/
function updateCheckboxes()
{
$('#productTableList').children('.row-program,.row-line').each(function()
{
updatePrarentCheckbox($(this))
});
}
/**
* Add a statistics prompt statement after the Edit button.
*
* @access public
* @return void
*/
function addStatistic()
{
var checkedLength = $(":checkbox[name^='productIDList']:checked").length;
if(checkedLength > 0)
{
var summary = checkedProducts.replace('%s', checkedLength);
if(cilentLang == "en" && checkedLength < 2) summary = summary.replace('products', 'product');
var statistic = "<div id='productsSummary' class='statistic'>" + summary + "</div>";
$('#productsCount').hide();
$('#productsSummary').remove();
$('#editBtn').after(statistic);
$('.table-actions').show();
}
else
{
$('.table-actions').hide();
$('#productsCount').show();
$('#productsSummary').addClass('hidden');
}
}
/**
* Anti shake operation for jquery.
*
* @param fn $fn
* @param delay $delay
* @access public
* @return void
*/
function debounce(fn, delay)
{
var timer = null;
return function()
{
if(timer) clearTimeout(timer);
timer = setTimeout(fn, delay)
}
}
/**
* Update statistics.
*
* @access public
* @return void
*/
function updateStatistic()
{
debounce(addStatistic(), 200)
}
$(function()
{
$('input[name^="showEdit"]').click(function()
{
$.cookie('showProductBatchEdit', $(this).is(':checked') ? 1 : 0, {expires: config.cookieLife, path: config.webRoot});
setCheckbox();
});
setCheckbox();
/* Init table sort. */
$('#productTableList').addClass('sortable').sortable(
{
/* Init vars. */
reverse: orderBy === 'order_desc',
selector: 'tr',
dragCssClass: 'drag-row',
trigger: '.sort-handler',
/* Set movable conditions. */
canMoveHere: function($ele, $target)
{
var canMove = true;
if($ele.hasClass('no-nest')) canMove = $target.hasClass('no-nest') ? true : false;
return $ele.data('parent') === $target.data('parent') && canMove;
},
start: function(e)
{
e.targets.filter('[data-parent!="' + e.element.attr('data-parent') + '"]').addClass('drop-not-allowed');
},
/* Update order sort. */
finish: function(e)
{
var products = '';
e.list.each(function()
{
products += $(this.item).data('id') + ',' ;
});
$.post(createLink('product', 'updateOrder'), {'products' : products, 'orderBy' : orderBy});
$('#productListForm').table('initNestedList');
}
});
$('.main-table').on('click', 'tr', function(e)
{
if($.cookie('showProductBatchEdit') == 1) updateStatistic();
});
$('#productTableList').on('click', 'tr', function(e)
{
if($.cookie('showProductBatchEdit') != 1) e.stopPropagation();
});
$('#productTableList').on('click', '.row-program,.row-line', function(e)
{
if($.cookie('showProductBatchEdit') != 1) return;
if($(e.target).closest('.table-nest-toggle,a').length) return;
var $row = $(this);
var $checkbox = $row.find('.program-checkbox').toggleClass('checked').removeClass('indeterminate');
var isChecked = $checkbox.hasClass('checked');
var rowID = $row.data('id');
var $subRows = $('#productTableList').children('tr[data-nest-path^="' + rowID + ',"],tr[data-nest-path*=",' + rowID + ',"]');
$row.toggleClass('checked', isChecked);
$subRows.toggleClass('checked', isChecked);
$subRows.find('input:checkbox').prop('checked', isChecked);
$subRows.find('.program-checkbox').toggleClass('checked', isChecked).removeClass('indeterminate');
var parentID = $row.attr('data-parent');
if(parentID && parentID !== '0')
{
updatePrarentCheckbox($('#productTableList>tr[data-id="' + parentID + '"]'));
}
updateStatistic()
});
$('#productListForm').on('checkChange', updateCheckboxes);
updateCheckboxes();
$(":checkbox[name^='productIDList']").on('click', function()
{
updateStatistic()
});
$(".check-all").on('click', function()
{
if($(":checkbox[name^='productIDList']:not(:checked)").length == 0)
{
$(":checkbox[name^='productIDList']").prop('checked', false);
}
else
{
$(":checkbox[name^='productIDList']").prop('checked', true);
}
updateStatistic()
});
});