/*----------------------------- pager -----------------------------*/
(($) => {
const
defaults = {
offset:0,
limitPager:2,
limitRecords:0,
totalRecords:0,
textTrigger:[
'',
''
],
textTriggerDisplay:true,
textSkip:'..',
textBetween:'-',
funcCallbackExecuteStart:(
offset,
limitRecords,
totalRecords
) => {},
funcCallbackExecuteEnd:(
offset,
limitRecords,
totalRecords
) => {},
funcCallbackClick:(offset) => {}
};
$.fn.pager = function(options){
let
el = this,
lenEl = el.length;
if(lenEl === 0)
return this;
if(lenEl > 1){
el.each(function(){
$(this).pager(options);
});
return this;
}
let
configs = {},
funcDestructor = () => {
lenEl =
funcInit =
funcPutHtml =
funcCustomEvents =
funcDestructor = void 0;
},
funcInit = () => {
configs = $.extend(
{},
defaults,
options
);
funcPutHtml();
funcCustomEvents();
funcExecute(configs.offset);
funcDestructor();
},
funcPutHtml = () => {
el.html(`
`);
},
funcCustomEvents = () => {
el.on({
'pager.execute':(
event,
args
) => {
configs = $.extend(
{},
configs,
args
);
funcExecute(configs.offset);
}
});
},
funcNumberFormat = (number) => {
return number.toString().replace(/([0-9]+?)(?=(?:[0-9]{3})+$)/g , '$1,');
},
funcExecute = (offset) => {
configs.offset = parseInt(offset);
configs.limitPager = parseInt(configs.limitPager);
configs.limitRecords = parseInt(configs.limitRecords);
configs.totalRecords = parseInt(configs.totalRecords);
if(configs.funcCallbackExecuteStart(
configs.offset,
configs.limitRecords,
configs.totalRecords
) === false)
return false;
let
elePagerList = el.find('.pager_list'),
elePagerTriggerPrev = el.find('.pager_trigger_parent_prev'),
elePagerTriggerNext = el.find('.pager_trigger_parent_next'),
cntPager = Math.ceil(configs.totalRecords / configs.limitRecords),
cntFocusStart = configs.offset * configs.limitRecords + 1,
cntFocusEnd = (configs.offset + 1) * configs.limitRecords;
if(cntFocusEnd > configs.totalRecords)
cntFocusEnd = configs.totalRecords;
elePagerList.empty();
elePagerTriggerPrev.empty().hide();
elePagerTriggerNext.empty().hide();
for(var i = 0;i < cntPager;i++){
if(
i === 1 &&
configs.offset - configs.limitPager - 1 > 0
)
elePagerList.append(`
`);
if(
i === cntPager - 1 &&
configs.offset + configs.limitPager + 2 < cntPager
)
elePagerList.append(`
`);
if(
i !== 0 &&
i !== cntPager - 1 && (
configs.offset - configs.limitPager > i ||
configs.offset + configs.limitPager < i
)
)
continue;
elePagerList.append(configs.offset === i?`
`:`
`);
}
if(
configs.textTriggerDisplay &&
configs.offset > 0
)
elePagerTriggerPrev
.html(``)
.show();
if(
configs.textTriggerDisplay &&
configs.offset < cntPager - 1
)
elePagerTriggerNext
.html(``)
.show();
el.find('.pager_count_records_total').html(funcNumberFormat(configs.totalRecords));
if(0 < configs.totalRecords)
el.find('.pager_count_records_active').html(funcNumberFormat(cntFocusStart) + configs.textBetween + funcNumberFormat(cntFocusEnd));
el.find('.pager_trigger').on({
'click':function(){
const
dataOffset = $(this).data('offset');
if(configs.funcCallbackClick(dataOffset) === false)
return false;
funcExecute(dataOffset);
}
});
configs.funcCallbackExecuteEnd(
configs.offset,
configs.limitRecords,
configs.totalRecords
);
};
funcInit();
return this;
};
})(jQuery);
/*----------------------------- /pager -----------------------------*/