{"version":3,"sources":["jsdelivr-header.js","/npm/clusterize.js-paging@1.0.3/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,IAAI,SAAW,QAAQ,YACnB,WAAa,QAAQ,iBACrB,SAAW,QAAQ,YAEvB,SAAS,iBAAkB,IACzB,EAAU,GAAW,CAAC,GACd,UAAY,EAAQ,WAAa,CAAC,EAE1C,WAAW,KAAK,KAAM,GAGtB,KAAK,QAAQ,SAAW,EAAQ,SAChC,KAAK,QAAQ,QAAU,EAAQ,QAC/B,KAAK,QAAQ,SAAW,EAAQ,QAClC,CAEA,SAAS,iBAAkB,YAE3B,iBAAiB,UAAU,KAAO,SAAU,GAEtC,KAAK,UACP,KAAK,QAAQ,UAAW,GAI1B,KAAK,QAAU,CAAC,EAGhB,KAAK,QAAQ,UAAU,kBAAoB,KAAK,qBAAqB,KAAK,SAAS,KAAK,MAExF,KAAK,KAAO,GAEZ,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,IAC1B,KAAK,KAAK,KAAK,KAAK,QAAQ,UAW9B,OARA,KAAK,QAAU,IAAI,MAAM,KAAK,KAAK,KAAK,KAAK,OAAS,KAAK,QAAQ,WAG9D,IACH,KAAK,OAAO,CAAC,KAAK,QAAQ,WAC1B,KAAK,OAAO,KAAK,OAGZ,KAAK,SAAS,KAAK,QAC5B,EAEA,iBAAiB,UAAU,qBAAuB,SAAU,GAC1D,OAAO,UAAS,SAAU,GACxB,IAAI,EAAS,KAAK,MAAM,EAAa,KAAK,KAAK,OAAS,KAExD,KAAK,SAAS,EAAS,GACvB,KAAK,SAAS,EAAS,GAAS,EAClC,GAAG,IACL,EAEA,iBAAiB,UAAU,SAAW,SAAU,EAAS,EAAQ,EAAW,GAE1E,GAAI,EAAQ,SACV,OAAO,QAAQ,UAGjB,IAAI,EAAO,KAEX,EAAS,GAAU,EACnB,EAAY,GAAa,EACzB,EAAM,KAAK,IAAI,EAAG,GAAQ,EAAS,KAAK,QAAQ,QAAU,GAI1D,IAFA,IAAI,GAAc,EAET,EAAQ,GAAS,EAAQ,GAAO,GAAa,GAChD,KAAK,KAAK,KAAW,EAAK,QAAQ,SADiB,GAAS,EAE9D,EAAa,GAMG,IAAhB,IACF,EAAS,GAGX,IAAI,EAAO,KAAK,MAAM,EAAS,KAAK,QAAQ,UAI5C,OAFA,EAAS,EAAO,KAAK,QAAQ,SAEtB,EAAK,SAAS,EAAS,EAAQ,GAAM,MAAK,SAAU,GAIzD,KAHA,GAAU,EAAS,GAGL,GAAO,GAAa,EAChC,OAAO,EAAK,SAAS,EAAS,EAAQ,EAAW,EAErD,GACF,EAEA,iBAAiB,UAAU,SAAW,SAAU,EAAS,EAAQ,GAC/D,IAAI,EAAO,KAGX,OAAI,KAAK,QAAQ,GACR,QAAQ,QAAQ,KAAK,QAAQ,UAG/B,QAAQ,UAAU,MAAK,WAG5B,OAFA,EAAK,QAAQ,IAAQ,EAEd,EAAK,QAAQ,UAAU,SAAS,EACzC,IAAG,MAAK,SAAU,GAWhB,OATK,EAAQ,WACX,EAAK,KAAK,OAAO,MAAM,EAAK,KAAM,CAAC,EAAQ,EAAK,QAAQ,OAAO,IAC/D,EAAK,OAAO,EAAK,MAEb,EAAK,QAAQ,UAAU,YACzB,EAAK,QAAQ,UAAU,cAIpB,EAAK,MACd,GACF,EAEA,OAAO,QAAU","file":"/npm/clusterize.js-paging@1.0.3/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/clusterize.js-paging@1.0.3/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","var inherits = require('inherits')\nvar Clusterize = require('clusterize.js')\nvar debounce = require('debounce')\n\nfunction ClusterizePaging (options) {\n  options = options || {}\n  options.callbacks = options.callbacks || {}\n\n  Clusterize.call(this, options)\n\n  // merge additional options\n  this.options.dummyRow = options.dummyRow\n  this.options.preload = options.preload\n  this.options.pageSize = options.pageSize\n}\n\ninherits(ClusterizePaging, Clusterize)\n\nClusterizePaging.prototype.init = function (length) {\n  // cancel existing session...\n  if (this.session) {\n    this.session.canceled = true\n  }\n\n  // ...and create a new one\n  this.session = {}\n\n  // forward session to scrolling progress\n  this.options.callbacks.scrollingProgress = this.handleScrollProgress(this.session).bind(this)\n\n  this.rows = []\n\n  for (var i = 0; i < length; i++) {\n    this.rows.push(this.options.dummyRow)\n  }\n\n  this.loading = new Array(Math.ceil(this.rows.length / this.options.pageSize))\n\n  // force no results text\n  if (!length) {\n    this.update([this.options.dummyRow])\n    this.update(this.rows)\n  }\n\n  return this.loadRows(this.session)\n}\n\nClusterizePaging.prototype.handleScrollProgress = function (session) {\n  return debounce(function (percentage) {\n    var offset = Math.floor(percentage * this.rows.length / 100)\n\n    this.loadRows(session, offset)\n    this.loadRows(session, offset, -1)\n  }, 100)\n}\n\nClusterizePaging.prototype.loadRows = function (session, offset, direction, end) {\n  // stop processing if session was canceled\n  if (session.canceled) {\n    return Promise.resolve()\n  }\n\n  var self = this\n\n  offset = offset || 0\n  direction = direction || 1\n  end = Math.max(0, end || (offset + this.options.preload * direction))\n\n  var lastLoaded = -1\n\n  for (var index = offset; (index - end) * direction <= 0; index += direction) {\n    if (this.rows[index] !== self.options.dummyRow) {\n      lastLoaded = index\n    } else {\n      break\n    }\n  }\n\n  if (lastLoaded !== -1) {\n    offset = lastLoaded\n  }\n\n  var page = Math.floor(offset / this.options.pageSize)\n\n  offset = page * this.options.pageSize\n\n  return self.loadPage(session, offset, page).then(function (length) {\n    offset += length * direction\n\n    // load more results?\n    if ((offset - end) * direction <= 0) {\n      return self.loadRows(session, offset, direction, end)\n    }\n  })\n}\n\nClusterizePaging.prototype.loadPage = function (session, offset, page) {\n  var self = this\n\n  // check if the current page is already loading\n  if (this.loading[page]) {\n    return Promise.resolve(this.options.pageSize)\n  }\n\n  return Promise.resolve().then(function () {\n    self.loading[page] = true\n\n    return self.options.callbacks.loadRows(offset)\n  }).then(function (rows) {\n    // only update rows if session wasn't canceld\n    if (!session.canceled) {\n      self.rows.splice.apply(self.rows, [offset, rows.length].concat(rows))\n      self.update(self.rows)\n\n      if (self.options.callbacks.rowsLoaded) {\n        self.options.callbacks.rowsLoaded()\n      }\n    }\n\n    return rows.length\n  })\n}\n\nmodule.exports = ClusterizePaging\n"]}