class Infienity
{
constructor(fie, funcName, params) { this._fetchNextEntriesFuncName = funcName; this._isFieQueried = false; this._params = params; this._fie = fie; this._loadNewEntries = this._loadNewEntries.bind(this); this.fieResponded = this.fieResponded.bind(this); this.bindEvents(); } bindEvents() { document.addEventListener('fieReady', _ => this._loadNewEntries(true)); window.addEventListener('scroll', this._loadNewEntries); } unbindEvents() { window.removeEventListener('scroll', this._loadNewEntries); } fieResponded(isFirstLoad = false) { this._isFieQueried = false; window.setTimeout(_ => { if (isFirstLoad) { this._loadNewEntries(true); } }, 300); } setFieAsQueried() { self = this; this._isFieQueried = true; window.setTimeout(_ => { self._isFieQueried = false; }, 300); } _loadNewEntries(isFirstLoad = false) { if (this.isUserBelowBottom() && this._isFieQueried == false) { let funcParams = { pagination_params: this._params, is_first_load: isFirstLoad == true }; this._fie.executeCommanderMethod(this._fetchNextEntriesFuncName, funcParams); this.setFieAsQueried(); } } isUserBelowBottom() { return window.scrollY + window.innerHeight > this.lastEntryOffset(); } lastEntryOffset(percentage_window_offset = 10) { const lastDiv = document.querySelector('.paginate') return lastDiv.offsetTop + lastDiv.offsetHeight - (window.innerHeight * percentage_window_offset / 100) }
}
document.addEventListener(“DOMContentLoaded”, _ => {
const paginateElement = document.querySelector('.paginate'); const modelName = paginateElement.getAttribute('infienity-model'); window.Infienity = new Infienity(Fie, `paginate_${modelName}`, {});
});