UNPKG

forerunnerdb

Version:

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

1 lines 4.18 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),e.___fromChangeFunc=function(){e.recalcHeight(),e.scroll(!0)},e.view.from().on("change",e.___fromChangeFunc),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._itemHeight=a,b.virtualHeight=b.total*b._itemHeight,b.resize()),this.$super.apply(this,arguments)}),f.prototype.recalcHeight=function(){var a=this;"dropped"!==a._state&&(a.total=a.view.from().count(a.options.countQuery),a.virtualHeight=a.total*a._itemHeight,a.resize())},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(a){var b,c,d=this,e=d.selector.scrollTop();b=e-d.previousScrollTop,d.previousScrollTop=e,(a||0!==b)&&(c=Math.floor(e/d._itemHeight),d.skip=c,d.view.queryOptions(d.currentRange()),d.itemTopMargin.height(c*d._itemHeight),d.itemBottomMargin.height(d.virtualHeight-c*d._itemHeight-d.maxItemCount*d._itemHeight)),d.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&&c(),!0)},f.prototype.drop=function(a){var b=this;b.view.unlink(b.itemContainer,b.template),b.view.from().off("change",b.___fromChangeFunc),b._state="dropped",b.selector.off("scroll"),$(window).off("resize"),delete b.ignoreScroll,delete b.previousScrollTop,delete b._itemHeight,delete b.selector,delete b.template,delete b.view,delete b.itemTopMargin,delete b.itemContainer,delete b.itemBottomMargin,delete b.___fromChangeFunc,this.emit("drop",this),a&&a(!1,!0),delete b._listeners},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)},d.moduleFinished("AutoBind",function(){d.finishModule("Infinilist")}),b.exports=f},{}]},{},[1]);