UNPKG

forerunnerdb

Version:

A NoSQL document store database for browsers and Node.js.

1 lines 3.75 kB
!function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){var d=a("../lib/Infinilist");b.exports=d},{"../lib/Infinilist":2}],2:[function(a,b,c){"use strict";var d=window.ForerunnerDB.shared,e=d.modules.View,f=function(a,b,c,d){var e=this;a=$(a),c=c||{},e.options=c.infinilist||{},delete c.infinilist,e.skip=0,e.limit=0,e.ignoreScroll=!1,e.previousScrollTop=0,e.selector=a,e.template=b,e.view=d,e.itemTopMargin=$("<div class='il_topMargin'></div>"),e.itemContainer=$("<div class='il_items'></div>"),e.itemBottomMargin=$("<div class='il_bottomMargin'></div>"),e.total=e.view.from().count(e.options.countQuery),e.itemHeight(e.options.itemHeight),a.append(e.itemTopMargin),a.append(e.itemContainer),a.append(e.itemBottomMargin),e.resize(),d.link(e.itemContainer,b,c),a.on("scroll",function(){e.scrollDebouceTimeout||(e.scrollDebouceTimeout=setTimeout(function(){e.scroll(),e.scrollDebouceTimeout=0},16))}),$(window).on("resize",function(){e.resizeDebouceTimeout&&clearTimeout(e.resizeDebouceTimeout),e.resizeDebouceTimeout=setTimeout(function(){e.resize()},16)})};d.addModule("Infinilist",f),d.mixin(f.prototype,"Mixin.Events"),d.synthesize(f.prototype,"itemHeight",function(a){var b=this;return void 0!==a&&(b.virtualHeight=b.total*a,b._itemHeight=a,b.resize()),this.$super.apply(this,arguments)}),f.prototype.resize=function(){var a,b=this,c=b.selector.height(),d=b.selector.scrollTop();b.oldHeight!==c&&(b.oldHeight=c,b.maxItemCount=Math.ceil(c/b._itemHeight),a=Math.floor(d/b._itemHeight),b.skip=a,b.limit=b.maxItemCount+1,b.view.queryOptions(b.currentRange()),b.itemBottomMargin.height(b.virtualHeight-a*b._itemHeight-b.maxItemCount*b._itemHeight))},f.prototype.currentRange=function(){return{$skip:this.skip,$limit:this.limit}},f.prototype.scroll=function(){var a,b,c=this,d=c.selector.scrollTop();a=d-c.previousScrollTop,c.previousScrollTop=d,0!==a&&(b=Math.floor(d/c._itemHeight),c.skip=b,c.view.queryOptions(c.currentRange()),c.itemTopMargin.height(b*c._itemHeight),c.itemBottomMargin.height(c.virtualHeight-b*c._itemHeight-c.maxItemCount*c._itemHeight)),c.emit("scroll")},f.prototype.scrollToQuery=function(a,b,c){var d,e,f,g,h=this,i={$orderBy:h.view.queryOptions().$orderBy};return"function"==typeof b&&(c=b,b=void 0),b=b||{},b.$inc=void 0!==b.$inc?b.$inc:0,b.$incItem=void 0!==b.$incItem?b.$incItem:0,d=h.view.from().findOne(a,i),f=h.view.db().collection("tmpSortCollection"),f.setData(h.view.from().find(h.view.query())),e=f.indexOf(d,i),f.drop(),e>-1?(g=(e+b.$incItem)*h._itemHeight+b.$inc,g=g>0?g:0,h.selector.scrollTop()!==g?(c&&h.once("scroll",function(){c()}),h.selector.scrollTop(g)):c(),!0):!1},f.prototype.drop=function(){var a=this;a.view.unlink(a.itemContainer,a.template),a._state="dropped",a.selector.off("scroll"),$(window).off("resize"),delete a.ignoreScroll,delete a.previousScrollTop,delete a._itemHeight,delete a.selector,delete a.template,delete a.view,delete a.itemTopMargin,delete a.itemContainer,delete a.itemBottomMargin},e.prototype.infinilist=function(a,b,c){var d=window.jQuery(a);return void 0===b?d.data("infinilist"):void d.data("infinilist",new f(a,b,c,this))},e.prototype.unInfinilist=function(a){var b=window.jQuery(a);return b.data("infinilist")?(b.data("infinilist").drop(),b.removeData("infinilist"),!0):!1},d.moduleFinished("AutoBind",function(){d.finishModule("Infinilist")}),b.exports=f},{}]},{},[1]);