toolshed-8.x-1.x-dev/js/widgets/Pager.js
js/widgets/Pager.js
"use strict";
/* eslint no-bitwise: ["error", { "allow": ["^", ">>"] }] */
Drupal.Toolshed = Drupal.Toolshed || {};
($ => {
/**
* A pager that is meant to flip through a list of items without refreshing
* the page. This can be something like slider navigation or a gallery.
*
* Loading and unloading content is beyond the scope of this pager.
*
* TODO: Add events for when a page change is triggered. This could allow
* for more enhanced interactions and dynamic loading of content.
*/
Drupal.Toolshed.InplacePager = class {
/**
* Creates a new instance of a pager
*
* @param {JQuery} container - a JQuery wrapped element to contain the pager.
* @param {Mixed} items - Items to page through. Either an array or a callback
* for generating the navigational items.
* @param {Object} settings - Setting that determine callbacks and how pager
* items are supposed to display on the page.
*/
constructor(container, items, settings) {
this.container = container;
this.settings = {
show: 8,
...settings
};
this.element = $('<ul class="pager pager--inplace inline"></ul>').appendTo(this.container);
this.element.wrap('<div class="pager-wrapper">');
// Keeps track of the items currently being displayed by the pager.
this.displayed = {
startAt: 1,
// Starting index of items being displayed.
endAt: 0,
// Ending index of items being displayed.
items: [] // Current set of items that are being displayed.
};
// Keeps track of all the current pager items, creating / loaded.
this.items = [];
if (settings.onNavClick) {
this.onNavClick = settings.onNavClick;
}
if (items.theme) {
for (let i = 0; i < items.count; ++i) {
this.items.push($(Drupal.theme[items.theme](i, i + 1)));
}
} else {
this.items = items;
}
items.forEach((item, i) => {
item.on('click', this, this.onNavClick).data('index', i);
item.wrap('<li class="pager__item">');
item = item.parent();
});
// Set this pager to display the first item.
if (this.settings.show < this.items.length) {
this.ellipsisFront = $('<span class="pager-ellipsis pager-ellipsis--front">...</span>').hide().insertBefore(this.element);
this.ellipsisEnd = $('<span class="pager-ellipsis pager-ellipsis--end">...</span>').hide().insertAfter(this.element);
} else {
this._displayItems(0, this.items.length - 1);
}
this.setActive(0);
}
get(index) {
return index < this.items.length ? this.items[index] : this.items[this.items.length - 1];
}
setActive(setTo) {
let index;
let item;
$('.pager__item--active', this.elem).removeClass('pager__item--active');
if ($.isNumeric(setTo)) {
index = setTo;
item = this.get(setTo);
} else {
item = setTo;
index = setTo.data('index');
}
// If able to find the item, update the display and its state.
if (item) {
const numVisible = this.settings.show;
if (numVisible < this.items.length) {
let start = Math.max(index - (numVisible >> 1), 0);
let end = start + numVisible - 1;
// If at the end of the list, then offset the display from the back.
if (end >= this.items.length) {
end = this.items.length - 1;
start = Math.max(end - numVisible + 1, 0);
}
this._displayItems(start, end);
}
item.addClass('pager__item--active');
}
}
_displayItems(start, end) {
let cur;
const display = this.displayed;
const {
items
} = display;
// If there were previous items, remove the first and last classes.
if (items.length) {
items[0].removeClass('pager__item--first');
items[items.length - 1].removeClass('pager__item--last');
}
// Remove items from the front of the list.
while (display.startAt < start) {
items.shift().detach();
display.startAt += 1;
}
// Add items to the front of the list.
while (display.startAt > start) {
display.startAt -= 1;
cur = this.items[display.startAt];
if (cur) {
items.unshift(cur);
this.element.prepend(cur);
}
}
while (display.endAt > end) {
items.pop().detach();
display.endAt -= 1;
}
while (display.endAt < end) {
display.endAt += 1;
cur = this.items[display.endAt];
if (cur) {
items.push(cur);
this.element.append(cur);
}
}
// Determine which ellipsis are visible.
if (this.ellipsisFront && display.startAt !== 0 ^ this.ellipsisFront.is(':visible')) {
this.ellipsisFront.toggle();
}
if (this.ellipsisEnd && display.endAt !== this.items.length - 1 ^ this.ellipsisEnd.is(':visible')) {
this.ellipsisEnd.toggle();
}
items[0].addClass('pager__item--first');
items[items.length - 1].addClass('pager__item--last');
}
/**
* Remove the items added to the DOM.
*/
destroy() {
this.items.forEach(item => item.remove());
this.element.remove();
}
};
})(jQuery);
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0cy9QYWdlci5qcyIsIm5hbWVzIjpbIkRydXBhbCIsIlRvb2xzaGVkIiwiJCIsIklucGxhY2VQYWdlciIsImNvbnN0cnVjdG9yIiwiY29udGFpbmVyIiwiaXRlbXMiLCJzZXR0aW5ncyIsInNob3ciLCJlbGVtZW50IiwiYXBwZW5kVG8iLCJ3cmFwIiwiZGlzcGxheWVkIiwic3RhcnRBdCIsImVuZEF0Iiwib25OYXZDbGljayIsInRoZW1lIiwiaSIsImNvdW50IiwicHVzaCIsImZvckVhY2giLCJpdGVtIiwib24iLCJkYXRhIiwicGFyZW50IiwibGVuZ3RoIiwiZWxsaXBzaXNGcm9udCIsImhpZGUiLCJpbnNlcnRCZWZvcmUiLCJlbGxpcHNpc0VuZCIsImluc2VydEFmdGVyIiwiX2Rpc3BsYXlJdGVtcyIsInNldEFjdGl2ZSIsImdldCIsImluZGV4Iiwic2V0VG8iLCJlbGVtIiwicmVtb3ZlQ2xhc3MiLCJpc051bWVyaWMiLCJudW1WaXNpYmxlIiwic3RhcnQiLCJNYXRoIiwibWF4IiwiZW5kIiwiYWRkQ2xhc3MiLCJjdXIiLCJkaXNwbGF5Iiwic2hpZnQiLCJkZXRhY2giLCJ1bnNoaWZ0IiwicHJlcGVuZCIsInBvcCIsImFwcGVuZCIsImlzIiwidG9nZ2xlIiwiZGVzdHJveSIsInJlbW92ZSIsImpRdWVyeSJdLCJzb3VyY2VzIjpbIndpZGdldHMvUGFnZXIuZXM2LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBuby1iaXR3aXNlOiBbXCJlcnJvclwiLCB7IFwiYWxsb3dcIjogW1wiXlwiLCBcIj4+XCJdIH1dICovXG5EcnVwYWwuVG9vbHNoZWQgPSBEcnVwYWwuVG9vbHNoZWQgfHwge307XG5cbigoJCkgPT4ge1xuICAvKipcbiAgICogQSBwYWdlciB0aGF0IGlzIG1lYW50IHRvIGZsaXAgdGhyb3VnaCBhIGxpc3Qgb2YgaXRlbXMgd2l0aG91dCByZWZyZXNoaW5nXG4gICAqIHRoZSBwYWdlLiBUaGlzIGNhbiBiZSBzb21ldGhpbmcgbGlrZSBzbGlkZXIgbmF2aWdhdGlvbiBvciBhIGdhbGxlcnkuXG4gICAqXG4gICAqIExvYWRpbmcgYW5kIHVubG9hZGluZyBjb250ZW50IGlzIGJleW9uZCB0aGUgc2NvcGUgb2YgdGhpcyBwYWdlci5cbiAgICpcbiAgICogVE9ETzogQWRkIGV2ZW50cyBmb3Igd2hlbiBhIHBhZ2UgY2hhbmdlIGlzIHRyaWdnZXJlZC4gVGhpcyBjb3VsZCBhbGxvd1xuICAgKiBmb3IgbW9yZSBlbmhhbmNlZCBpbnRlcmFjdGlvbnMgYW5kIGR5bmFtaWMgbG9hZGluZyBvZiBjb250ZW50LlxuICAgKi9cbiAgRHJ1cGFsLlRvb2xzaGVkLklucGxhY2VQYWdlciA9IGNsYXNzIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIGEgcGFnZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7SlF1ZXJ5fSBjb250YWluZXIgLSBhIEpRdWVyeSB3cmFwcGVkIGVsZW1lbnQgdG8gY29udGFpbiB0aGUgcGFnZXIuXG4gICAgICogQHBhcmFtIHtNaXhlZH0gaXRlbXMgLSBJdGVtcyB0byBwYWdlIHRocm91Z2guIEVpdGhlciBhbiBhcnJheSBvciBhIGNhbGxiYWNrXG4gICAgICogICBmb3IgZ2VuZXJhdGluZyB0aGUgbmF2aWdhdGlvbmFsIGl0ZW1zLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzZXR0aW5ncyAtIFNldHRpbmcgdGhhdCBkZXRlcm1pbmUgY2FsbGJhY2tzIGFuZCBob3cgcGFnZXJcbiAgICAgKiAgIGl0ZW1zIGFyZSBzdXBwb3NlZCB0byBkaXNwbGF5IG9uIHRoZSBwYWdlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNvbnRhaW5lciwgaXRlbXMsIHNldHRpbmdzKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjtcbiAgICAgIHRoaXMuc2V0dGluZ3MgPSB7IHNob3c6IDgsIC4uLnNldHRpbmdzIH07XG4gICAgICB0aGlzLmVsZW1lbnQgPSAkKCc8dWwgY2xhc3M9XCJwYWdlciBwYWdlci0taW5wbGFjZSBpbmxpbmVcIj48L3VsPicpLmFwcGVuZFRvKHRoaXMuY29udGFpbmVyKTtcbiAgICAgIHRoaXMuZWxlbWVudC53cmFwKCc8ZGl2IGNsYXNzPVwicGFnZXItd3JhcHBlclwiPicpO1xuXG4gICAgICAvLyBLZWVwcyB0cmFjayBvZiB0aGUgaXRlbXMgY3VycmVudGx5IGJlaW5nIGRpc3BsYXllZCBieSB0aGUgcGFnZXIuXG4gICAgICB0aGlzLmRpc3BsYXllZCA9IHtcbiAgICAgICAgc3RhcnRBdDogMSwgLy8gU3RhcnRpbmcgaW5kZXggb2YgaXRlbXMgYmVpbmcgZGlzcGxheWVkLlxuICAgICAgICBlbmRBdDogMCwgLy8gRW5kaW5nIGluZGV4IG9mIGl0ZW1zIGJlaW5nIGRpc3BsYXllZC5cbiAgICAgICAgaXRlbXM6IFtdLCAvLyBDdXJyZW50IHNldCBvZiBpdGVtcyB0aGF0IGFyZSBiZWluZyBkaXNwbGF5ZWQuXG4gICAgICB9O1xuXG4gICAgICAvLyBLZWVwcyB0cmFjayBvZiBhbGwgdGhlIGN1cnJlbnQgcGFnZXIgaXRlbXMsIGNyZWF0aW5nIC8gbG9hZGVkLlxuICAgICAgdGhpcy5pdGVtcyA9IFtdO1xuXG4gICAgICBpZiAoc2V0dGluZ3Mub25OYXZDbGljaykge1xuICAgICAgICB0aGlzLm9uTmF2Q2xpY2sgPSBzZXR0aW5ncy5vbk5hdkNsaWNrO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbXMudGhlbWUpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5jb3VudDsgKytpKSB7XG4gICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKCQoRHJ1cGFsLnRoZW1lW2l0ZW1zLnRoZW1lXShpLCBpICsgMSkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBpdGVtcztcbiAgICAgIH1cblxuICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICBpdGVtLm9uKCdjbGljaycsIHRoaXMsIHRoaXMub25OYXZDbGljaykuZGF0YSgnaW5kZXgnLCBpKTtcbiAgICAgICAgaXRlbS53cmFwKCc8bGkgY2xhc3M9XCJwYWdlcl9faXRlbVwiPicpO1xuICAgICAgICBpdGVtID0gaXRlbS5wYXJlbnQoKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTZXQgdGhpcyBwYWdlciB0byBkaXNwbGF5IHRoZSBmaXJzdCBpdGVtLlxuICAgICAgaWYgKHRoaXMuc2V0dGluZ3Muc2hvdyA8IHRoaXMuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuZWxsaXBzaXNGcm9udCA9ICQoJzxzcGFuIGNsYXNzPVwicGFnZXItZWxsaXBzaXMgcGFnZXItZWxsaXBzaXMtLWZyb250XCI+Li4uPC9zcGFuPicpLmhpZGUoKS5pbnNlcnRCZWZvcmUodGhpcy5lbGVtZW50KTtcbiAgICAgICAgdGhpcy5lbGxpcHNpc0VuZCA9ICQoJzxzcGFuIGNsYXNzPVwicGFnZXItZWxsaXBzaXMgcGFnZXItZWxsaXBzaXMtLWVuZFwiPi4uLjwvc3Bhbj4nKS5oaWRlKCkuaW5zZXJ0QWZ0ZXIodGhpcy5lbGVtZW50KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLl9kaXNwbGF5SXRlbXMoMCwgdGhpcy5pdGVtcy5sZW5ndGggLSAxKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRBY3RpdmUoMCk7XG4gICAgfVxuXG4gICAgZ2V0KGluZGV4KSB7XG4gICAgICByZXR1cm4gaW5kZXggPCB0aGlzLml0ZW1zLmxlbmd0aCA/IHRoaXMuaXRlbXNbaW5kZXhdIDogdGhpcy5pdGVtc1t0aGlzLml0ZW1zLmxlbmd0aCAtIDFdO1xuICAgIH1cblxuICAgIHNldEFjdGl2ZShzZXRUbykge1xuICAgICAgbGV0IGluZGV4O1xuICAgICAgbGV0IGl0ZW07XG5cbiAgICAgICQoJy5wYWdlcl9faXRlbS0tYWN0aXZlJywgdGhpcy5lbGVtKS5yZW1vdmVDbGFzcygncGFnZXJfX2l0ZW0tLWFjdGl2ZScpO1xuXG4gICAgICBpZiAoJC5pc051bWVyaWMoc2V0VG8pKSB7XG4gICAgICAgIGluZGV4ID0gc2V0VG87XG4gICAgICAgIGl0ZW0gPSB0aGlzLmdldChzZXRUbyk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgaXRlbSA9IHNldFRvO1xuICAgICAgICBpbmRleCA9IHNldFRvLmRhdGEoJ2luZGV4Jyk7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIGFibGUgdG8gZmluZCB0aGUgaXRlbSwgdXBkYXRlIHRoZSBkaXNwbGF5IGFuZCBpdHMgc3RhdGUuXG4gICAgICBpZiAoaXRlbSkge1xuICAgICAgICBjb25zdCBudW1WaXNpYmxlID0gdGhpcy5zZXR0aW5ncy5zaG93O1xuXG4gICAgICAgIGlmIChudW1WaXNpYmxlIDwgdGhpcy5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICBsZXQgc3RhcnQgPSBNYXRoLm1heChpbmRleCAtIChudW1WaXNpYmxlID4+IDEpLCAwKTtcbiAgICAgICAgICBsZXQgZW5kID0gKHN0YXJ0ICsgbnVtVmlzaWJsZSkgLSAxO1xuXG4gICAgICAgICAgLy8gSWYgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCwgdGhlbiBvZmZzZXQgdGhlIGRpc3BsYXkgZnJvbSB0aGUgYmFjay5cbiAgICAgICAgICBpZiAoZW5kID49IHRoaXMuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBlbmQgPSB0aGlzLml0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICBzdGFydCA9IE1hdGgubWF4KChlbmQgLSBudW1WaXNpYmxlKSArIDEsIDApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9kaXNwbGF5SXRlbXMoc3RhcnQsIGVuZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpdGVtLmFkZENsYXNzKCdwYWdlcl9faXRlbS0tYWN0aXZlJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX2Rpc3BsYXlJdGVtcyhzdGFydCwgZW5kKSB7XG4gICAgICBsZXQgY3VyO1xuICAgICAgY29uc3QgZGlzcGxheSA9IHRoaXMuZGlzcGxheWVkO1xuICAgICAgY29uc3QgeyBpdGVtcyB9ID0gZGlzcGxheTtcblxuICAgICAgLy8gSWYgdGhlcmUgd2VyZSBwcmV2aW91cyBpdGVtcywgcmVtb3ZlIHRoZSBmaXJzdCBhbmQgbGFzdCBjbGFzc2VzLlxuICAgICAgaWYgKGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICBpdGVtc1swXS5yZW1vdmVDbGFzcygncGFnZXJfX2l0ZW0tLWZpcnN0Jyk7XG4gICAgICAgIGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdLnJlbW92ZUNsYXNzKCdwYWdlcl9faXRlbS0tbGFzdCcpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZW1vdmUgaXRlbXMgZnJvbSB0aGUgZnJvbnQgb2YgdGhlIGxpc3QuXG4gICAgICB3aGlsZSAoZGlzcGxheS5zdGFydEF0IDwgc3RhcnQpIHtcbiAgICAgICAgaXRlbXMuc2hpZnQoKS5kZXRhY2goKTtcbiAgICAgICAgZGlzcGxheS5zdGFydEF0ICs9IDE7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBpdGVtcyB0byB0aGUgZnJvbnQgb2YgdGhlIGxpc3QuXG4gICAgICB3aGlsZSAoZGlzcGxheS5zdGFydEF0ID4gc3RhcnQpIHtcbiAgICAgICAgZGlzcGxheS5zdGFydEF0IC09IDE7XG4gICAgICAgIGN1ciA9IHRoaXMuaXRlbXNbZGlzcGxheS5zdGFydEF0XTtcbiAgICAgICAgaWYgKGN1cikge1xuICAgICAgICAgIGl0ZW1zLnVuc2hpZnQoY3VyKTtcbiAgICAgICAgICB0aGlzLmVsZW1lbnQucHJlcGVuZChjdXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChkaXNwbGF5LmVuZEF0ID4gZW5kKSB7XG4gICAgICAgIGl0ZW1zLnBvcCgpLmRldGFjaCgpO1xuICAgICAgICBkaXNwbGF5LmVuZEF0IC09IDE7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChkaXNwbGF5LmVuZEF0IDwgZW5kKSB7XG4gICAgICAgIGRpc3BsYXkuZW5kQXQgKz0gMTtcbiAgICAgICAgY3VyID0gdGhpcy5pdGVtc1tkaXNwbGF5LmVuZEF0XTtcbiAgICAgICAgaWYgKGN1cikge1xuICAgICAgICAgIGl0ZW1zLnB1c2goY3VyKTtcbiAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kKGN1cik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIGVsbGlwc2lzIGFyZSB2aXNpYmxlLlxuICAgICAgaWYgKHRoaXMuZWxsaXBzaXNGcm9udCAmJiAoKGRpc3BsYXkuc3RhcnRBdCAhPT0gMCkgXiB0aGlzLmVsbGlwc2lzRnJvbnQuaXMoJzp2aXNpYmxlJykpKSB7XG4gICAgICAgIHRoaXMuZWxsaXBzaXNGcm9udC50b2dnbGUoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmVsbGlwc2lzRW5kICYmICgoZGlzcGxheS5lbmRBdCAhPT0gdGhpcy5pdGVtcy5sZW5ndGggLSAxKSBeIHRoaXMuZWxsaXBzaXNFbmQuaXMoJzp2aXNpYmxlJykpKSB7XG4gICAgICAgIHRoaXMuZWxsaXBzaXNFbmQudG9nZ2xlKCk7XG4gICAgICB9XG5cbiAgICAgIGl0ZW1zWzBdLmFkZENsYXNzKCdwYWdlcl9faXRlbS0tZmlyc3QnKTtcbiAgICAgIGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdLmFkZENsYXNzKCdwYWdlcl9faXRlbS0tbGFzdCcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSB0aGUgaXRlbXMgYWRkZWQgdG8gdGhlIERPTS5cbiAgICAgKi9cbiAgICBkZXN0cm95KCkge1xuICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKChpdGVtKSA9PiBpdGVtLnJlbW92ZSgpKTtcbiAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmUoKTtcbiAgICB9XG4gIH07XG59KShqUXVlcnkpO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0FBLE1BQU0sQ0FBQ0MsUUFBUSxHQUFHRCxNQUFNLENBQUNDLFFBQVEsSUFBSSxDQUFDLENBQUM7QUFF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
