From 18efde219884410a30b018eab735f1e2bd101f57 Mon Sep 17 00:00:00 2001 From: "d.alexanov" Date: Wed, 5 Aug 2015 15:07:05 +0300 Subject: [PATCH 1/4] build artefacts --- dist/ui-scroll.js | 97 ++++++++++++++++++++++--------------------- dist/ui-scroll.min.js | 2 +- 2 files changed, 51 insertions(+), 48 deletions(-) diff --git a/dist/ui-scroll.js b/dist/ui-scroll.js index 1af953c9..571246db 100644 --- a/dist/ui-scroll.js +++ b/dist/ui-scroll.js @@ -150,17 +150,17 @@ angular.module('ui.scroll', []).directive('uiScrollViewport', function() { bottomPadding: function() { return bottomPadding.paddingHeight.apply(bottomPadding, arguments); }, - insertElement: function(e, sibling) { - return insertElement(e, sibling || topPadding); - }, - insertElementAnimated: function(e, sibling) { - return insertElementAnimated(e, sibling || topPadding); - }, bottomDataPos: function() { return scrollHeight(viewport) - bottomPadding.paddingHeight(); }, topDataPos: function() { return topPadding.paddingHeight(); + }, + insertElement: function(e, sibling) { + return insertElement(e, sibling || topPadding); + }, + insertElementAnimated: function(e, sibling) { + return insertElementAnimated(e, sibling || topPadding); } }; }); @@ -321,55 +321,58 @@ angular.module('ui.scroll', []).directive('uiScrollViewport', function() { } }; adjustBuffer = function(rid, finalize) { - var i, j, len, promises, toBePrepended, toBeRemoved, wrapper; + var promises, toBePrepended, toBeRemoved; promises = []; toBePrepended = []; toBeRemoved = []; - for (i = j = 0, len = buffer.length; j < len; i = ++j) { - wrapper = buffer[i]; - switch (wrapper.op) { - case 'prepend': - toBePrepended.unshift(wrapper); - break; - case 'append': - if (i === 0) { - builder.insertElement(wrapper.element); - } else { - builder.insertElement(wrapper.element, buffer[i - 1].element); - } - builder.bottomPadding(Math.max(0, builder.bottomPadding() - wrapper.element.outerHeight(true))); - wrapper.op = 'none'; - break; - case 'insert': - if (i === 0) { - promises = promises.concat(builder.insertElementAnimated(wrapper.element)); - } else { - promises = promises.concat(builder.insertElementAnimated(wrapper.element, buffer[i - 1].element)); - } - builder.bottomPadding(Math.max(0, builder.bottomPadding() - wrapper.element.outerHeight(true))); - wrapper.op = 'none'; - break; - case 'remove': - toBeRemoved.push(wrapper); - } - } return $timeout(function() { - var item, itemHeight, itemTop, k, l, len1, len2, len3, len4, m, n, newHeight, newRow, rowTop, topHeight; - for (k = 0, len1 = toBePrepended.length; k < len1; k++) { - wrapper = toBePrepended[k]; - builder.insertElement(wrapper.element); - newHeight = builder.topPadding() - wrapper.element.outerHeight(true); - if (newHeight >= 0) { - builder.topPadding(newHeight); - } else { - viewport.scrollTop(viewport.scrollTop() + wrapper.element.outerHeight(true)); + var bottomPos, heightIncrement, i, item, itemHeight, itemTop, j, k, l, len, len1, len2, len3, len4, m, n, newRow, rowTop, topHeight, wrapper; + bottomPos = builder.bottomDataPos(); + for (i = j = 0, len = buffer.length; j < len; i = ++j) { + wrapper = buffer[i]; + switch (wrapper.op) { + case 'prepend': + toBePrepended.unshift(wrapper); + break; + case 'append': + if (i === 0) { + builder.insertElement(wrapper.element); + } else { + builder.insertElement(wrapper.element, buffer[i - 1].element); + } + wrapper.op = 'none'; + break; + case 'insert': + if (i === 0) { + promises = promises.concat(builder.insertElementAnimated(wrapper.element)); + } else { + promises = promises.concat(builder.insertElementAnimated(wrapper.element, buffer[i - 1].element)); + } + wrapper.op = 'none'; + break; + case 'remove': + toBeRemoved.push(wrapper); } - wrapper.op = 'none'; } - for (l = 0, len2 = toBeRemoved.length; l < len2; l++) { - wrapper = toBeRemoved[l]; + for (k = 0, len1 = toBeRemoved.length; k < len1; k++) { + wrapper = toBeRemoved[k]; promises = promises.concat(removeItem(wrapper)); } + builder.bottomPadding(Math.max(0, builder.bottomPadding() - (builder.bottomDataPos() - bottomPos))); + if (toBePrepended.length) { + bottomPos = builder.bottomDataPos(); + for (l = 0, len2 = toBePrepended.length; l < len2; l++) { + wrapper = toBePrepended[l]; + builder.insertElement(wrapper.element); + wrapper.op = 'none'; + } + heightIncrement = builder.bottomDataPos() - bottomPos; + if (builder.topPadding() >= heightIncrement) { + builder.topPadding(builder.topPadding() - heightIncrement); + } else { + viewport.scrollTop(viewport.scrollTop() + heightIncrement); + } + } for (i = m = 0, len3 = buffer.length; m < len3; i = ++m) { item = buffer[i]; item.scope.$index = first + i; diff --git a/dist/ui-scroll.min.js b/dist/ui-scroll.min.js index f2c835d3..00c92653 100644 --- a/dist/ui-scroll.min.js +++ b/dist/ui-scroll.min.js @@ -1 +1 @@ -!function(){"use strict";angular.module("ui.scroll",[]).directive("uiScrollViewport",function(){return{controller:["$scope","$element",function(a,b){return this.viewport=b,this}]}}).directive("uiScroll",["$log","$injector","$rootScope","$timeout","$q","$parse",function(a,b,c,d,e,f){var g;return b.has&&b.has("$animate")&&(g=b.get("$animate")),{require:["?^uiScrollViewport"],transclude:"element",priority:1e3,terminal:!0,compile:function(h,i,j){return function(h,i,k,l){var m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,_,aa,ba,ca;if(N=a.debug||a.log,!(O=k.uiScroll.match(/^\s*(\w+)\s+in\s+([\w\.]+)\s*$/)))throw new Error("Expected uiScroll in form of '_item_ in _datasource_' but got ' + $attr.uiScroll + '");if(L=O[1],z=O[2],y=f(z)(h),K=function(){return angular.isObject(y)&&angular.isFunction(y.get)},!K()&&(y=b.get(z),!K()))throw new Error(z+" is not a valid datasource");return u=Math.max(3,+k.bufferSize||10),t=function(){return aa.outerHeight()*Math.max(.1,+k.padding||.1)},W=function(a){var b;return null!=(b=a[0].scrollHeight)?b:a[0].document.documentElement.scrollHeight},v=null,V=0,G=1,P=1,s=[],Q=[],C=!1,q=!1,T=g?2===angular.version.minor?function(a){var b;return s.splice(s.indexOf(a),1),b=e.defer(),g.leave(a.element,function(){return a.scope.$destroy(),b.resolve()}),[b.promise]}:function(a){return s.splice(s.indexOf(a),1),[g.leave(a.element).then(function(){return a.scope.$destroy()})]}:function(a){return s.splice(s.indexOf(a),1),a.element.remove(),a.scope.$destroy(),[]},H=function(a,b){return i.after.apply(b,a),[]},I=g?2===angular.version.minor?function(a,b){var c;return c=e.defer(),g.enter(a,i,b,function(){return c.resolve()}),[c.promise]}:function(a,b){return[g.enter(a,i,b)]}:H,j(h.$new(),function(a){var b,c,d,e,f;if(d=a[0].localName,"dl"===d)throw new Error("ui-scroll directive does not support <"+a[0].localName+"> as a repeating tag: "+a[0].outerHTML);return"li"!==d&&"tr"!==d&&(d="div"),f=l[0]&&l[0].viewport?l[0].viewport:angular.element(window),f.css({"overflow-y":"auto",display:"block"}),c=function(a){var b,c,d;switch(a){case"tr":d=angular.element("
"),b=d.find("div"),c=d.find("tr"),c.paddingHeight=function(){return b.height.apply(b,arguments)};break;default:c=angular.element("<"+a+">"),c.paddingHeight=c.height}return c},e=c(d),i.before(e),b=c(d),i.after(b),h.$on("$destroy",function(){return a.remove()}),v={viewport:f,topPadding:function(){return e.paddingHeight.apply(e,arguments)},bottomPadding:function(){return b.paddingHeight.apply(b,arguments)},insertElement:function(a,b){return H(a,b||e)},insertElementAnimated:function(a,b){return I(a,b||e)},bottomDataPos:function(){return W(f)-b.paddingHeight()},topDataPos:function(){return e.paddingHeight()}}}),aa=v.viewport,ba=aa.scope()||c,Z=function(a){return m.topVisible=a.scope[L],m.topVisibleElement=a.element,m.topVisibleScope=a.scope,k.topVisible&&f(k.topVisible).assign(ba,m.topVisible),k.topVisibleElement&&f(k.topVisibleElement).assign(ba,m.topVisibleElement),k.topVisibleScope&&f(k.topVisibleScope).assign(ba,m.topVisibleScope),angular.isFunction(y.topVisible)?y.topVisible(a):void 0},M=function(a){return m.isLoading=a,k.isLoading&&f(k.isLoading).assign(h,a),angular.isFunction(y.loading)?y.loading(a):void 0},S=function(a,b){var c,d,e,f;for(c=d=e=a,f=b;f>=e?f>d:d>f;c=f>=e?++d:--d)s[c].scope.$destroy(),s[c].element.remove();return s.splice(a,b-a)},A=function(){return V++,Q=[]},R=function(){return A(),G=1,P=1,S(0,s.length),v.topPadding(0),v.bottomPadding(0),C=!1,q=!1,o(V)},r=function(){return aa.scrollTop()+aa.outerHeight()},$=function(){return aa.scrollTop()},X=function(){return!C&&v.bottomDataPos()=i?0>=f:f>=0;b=0>=i?++f:--f)if(c=s[b],e=c.element.offset().top,g=j!==e,j=e,g&&(d=c.element.outerHeight(!0)),v.bottomDataPos()-a-d>r()+t())g&&(a+=d),h++,C=!1;else{if(g)break;h++}return h>0?(v.bottomPadding(v.bottomPadding()+a),S(s.length-h,s.length),P-=h):void 0},Y=function(){return!q&&v.topDataPos()>$()-t()},x=function(){var a,b,c,d,e,f,g,h,i;for(i=0,g=0,d=0,e=s.length;e>d;d++)if(a=s[d],c=a.element.offset().top,f=h!==c,h=c,f&&(b=a.element.outerHeight(!0)),v.topDataPos()+i+b<$()-t())f&&(i+=b),g++,q=!1;else{if(f)break;g++}return g>0?(v.topPadding(v.topPadding()+i),S(0,g),G+=g):void 0},B=function(a,b){return m.isLoading||M(!0),1===Q.push(b)?E(a):void 0},J=function(a,b){var c,d;if(c=h.$new(),c[L]=b,d={scope:c},j(c,function(a){return d.element=a}),a%1===0)return d.op="insert",s.splice(a,0,d);switch(d.op=a,a){case"append":return s.push(d);case"prepend":return s.unshift(d)}},o=function(a,b){var c,f,g,h,i,j,k;for(h=[],i=[],j=[],c=f=0,g=s.length;g>f;c=++f)switch(k=s[c],k.op){case"prepend":i.unshift(k);break;case"append":0===c?v.insertElement(k.element):v.insertElement(k.element,s[c-1].element),v.bottomPadding(Math.max(0,v.bottomPadding()-k.element.outerHeight(!0))),k.op="none";break;case"insert":h=0===c?h.concat(v.insertElementAnimated(k.element)):h.concat(v.insertElementAnimated(k.element,s[c-1].element)),v.bottomPadding(Math.max(0,v.bottomPadding()-k.element.outerHeight(!0))),k.op="none";break;case"remove":j.push(k)}return d(function(){var d,f,g,l,m,n,p,q,r,t,u,w,x,y,z;for(l=0,n=i.length;n>l;l++)k=i[l],v.insertElement(k.element),w=v.topPadding()-k.element.outerHeight(!0),w>=0?v.topPadding(w):aa.scrollTop(aa.scrollTop()+k.element.outerHeight(!0)),k.op="none";for(m=0,p=j.length;p>m;m++)k=j[m],h=h.concat(T(k));for(c=t=0,q=s.length;q>t;c=++t)d=s[c],d.scope.$index=G+c;if(X()?B(a,!0):Y()&&B(a,!1),b&&b(a),0===Q.length)for(z=0,u=0,r=s.length;r>u;u++){if(d=s[u],g=d.element.offset().top,x=y!==g,y=g,x&&(f=d.element.outerHeight(!0)),!(x&&v.topDataPos()+z+f<$())){x&&Z(d);break}z+=f}return h.length?e.all(h).then(function(){return o(a)}):void 0})},F=function(a){return o(a,function(){return Q.shift(),0===Q.length?M(!1):E(a)})},E=function(a){return Q[0]?s.length&&!X()?F(a):y.get(P,u,function(b){var c,d,e;if(!(a&&a!==V||h.$$destroyed)){if(b.length0)for(x(),d=0,e=b.length;e>d;d++)c=b[d],++P,J("append",c);return F(a)}}):s.length&&!Y()?F(a):y.get(G-u,u,function(b){var c,d,e;if(!(a&&a!==V||h.$$destroyed)){if(b.length0)for(s.length&&w(),c=d=e=b.length-1;0>=e?0>=d:d>=0;c=0>=e?++d:--d)--G,J("prepend",b[c]);return F(a)}})},U=function(){return c.$$phase||m.isLoading?void 0:(o(),h.$apply())},ca=function(a){var b,c;return b=aa[0].scrollTop,c=aa[0].scrollHeight-aa[0].clientHeight,0===b&&!q||b===c&&!C?a.preventDefault():void 0},aa.bind("resize",U),aa.bind("scroll",U),aa.bind("mousewheel",ca),h.$watch(y.revision,R),h.$on("$destroy",function(){var a,b,c;for(b=0,c=s.length;c>b;b++)a=s[b],a.scope.$destroy(),a.element.remove();return aa.unbind("resize",U),aa.unbind("scroll",U),aa.unbind("mousewheel",ca)}),m={},m.isLoading=!1,m.reload=R,p=function(a,b){var c,d,e,f,g,h,i;if(angular.isArray(b)){for(h=s.indexOf(a)+1,i=b.reverse(),c=d=0,f=i.length;f>d;c=++d)g=i[c],g===a.scope[L]?(e=!0,h--):J(h,g);if(!e)return a.op="remove"}},m.applyUpdates=function(a,b){var c,d,e,f,g,h;if(A(),angular.isFunction(a))for(c=s.slice(0),d=e=0,f=c.length;f>e;d=++e)h=c[d],p(h,a(h.scope[L],h.scope,h.element));else{if(a%1!==0)throw new Error("applyUpdates - "+a+" is not a valid index");0<=(g=a-G)&&gc;c++)b=a[c],++P,J("append",b);return o(V)},m.prepend=function(a){var b,c,d,e;for(A(),e=a.reverse(),c=0,d=e.length;d>c;c++)b=e[c],--G,J("prepend",b);return o(V)},k.adapter&&(n=f(k.adapter)(h),n||(f(k.adapter).assign(h,{}),n=f(k.adapter)(h)),angular.extend(n,m),m=n),_=function(a){throw new Error(a+" event is no longer supported - use applyUpdates instead")},D=y.scope?y.scope.$new():h.$new(),D.$on("insert.item",function(){return _("insert")}),D.$on("update.items",function(){return _("update")}),D.$on("delete.items",function(){return _("delete")})}}}}])}(); \ No newline at end of file +!function(){"use strict";angular.module("ui.scroll",[]).directive("uiScrollViewport",function(){return{controller:["$scope","$element",function(a,b){return this.viewport=b,this}]}}).directive("uiScroll",["$log","$injector","$rootScope","$timeout","$q","$parse",function(a,b,c,d,e,f){var g;return b.has&&b.has("$animate")&&(g=b.get("$animate")),{require:["?^uiScrollViewport"],transclude:"element",priority:1e3,terminal:!0,compile:function(h,i,j){return function(h,i,k,l){var m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,_,aa,ba,ca;if(N=a.debug||a.log,!(O=k.uiScroll.match(/^\s*(\w+)\s+in\s+([\w\.]+)\s*$/)))throw new Error("Expected uiScroll in form of '_item_ in _datasource_' but got ' + $attr.uiScroll + '");if(L=O[1],z=O[2],y=f(z)(h),K=function(){return angular.isObject(y)&&angular.isFunction(y.get)},!K()&&(y=b.get(z),!K()))throw new Error(z+" is not a valid datasource");return u=Math.max(3,+k.bufferSize||10),t=function(){return aa.outerHeight()*Math.max(.1,+k.padding||.1)},W=function(a){var b;return null!=(b=a[0].scrollHeight)?b:a[0].document.documentElement.scrollHeight},v=null,V=0,G=1,P=1,s=[],Q=[],C=!1,q=!1,T=g?2===angular.version.minor?function(a){var b;return s.splice(s.indexOf(a),1),b=e.defer(),g.leave(a.element,function(){return a.scope.$destroy(),b.resolve()}),[b.promise]}:function(a){return s.splice(s.indexOf(a),1),[g.leave(a.element).then(function(){return a.scope.$destroy()})]}:function(a){return s.splice(s.indexOf(a),1),a.element.remove(),a.scope.$destroy(),[]},H=function(a,b){return i.after.apply(b,a),[]},I=g?2===angular.version.minor?function(a,b){var c;return c=e.defer(),g.enter(a,i,b,function(){return c.resolve()}),[c.promise]}:function(a,b){return[g.enter(a,i,b)]}:H,j(h.$new(),function(a){var b,c,d,e,f;if(d=a[0].localName,"dl"===d)throw new Error("ui-scroll directive does not support <"+a[0].localName+"> as a repeating tag: "+a[0].outerHTML);return"li"!==d&&"tr"!==d&&(d="div"),f=l[0]&&l[0].viewport?l[0].viewport:angular.element(window),f.css({"overflow-y":"auto",display:"block"}),c=function(a){var b,c,d;switch(a){case"tr":d=angular.element("
"),b=d.find("div"),c=d.find("tr"),c.paddingHeight=function(){return b.height.apply(b,arguments)};break;default:c=angular.element("<"+a+">"),c.paddingHeight=c.height}return c},e=c(d),i.before(e),b=c(d),i.after(b),h.$on("$destroy",function(){return a.remove()}),v={viewport:f,topPadding:function(){return e.paddingHeight.apply(e,arguments)},bottomPadding:function(){return b.paddingHeight.apply(b,arguments)},bottomDataPos:function(){return W(f)-b.paddingHeight()},topDataPos:function(){return e.paddingHeight()},insertElement:function(a,b){return H(a,b||e)},insertElementAnimated:function(a,b){return I(a,b||e)}}}),aa=v.viewport,ba=aa.scope()||c,Z=function(a){return m.topVisible=a.scope[L],m.topVisibleElement=a.element,m.topVisibleScope=a.scope,k.topVisible&&f(k.topVisible).assign(ba,m.topVisible),k.topVisibleElement&&f(k.topVisibleElement).assign(ba,m.topVisibleElement),k.topVisibleScope&&f(k.topVisibleScope).assign(ba,m.topVisibleScope),angular.isFunction(y.topVisible)?y.topVisible(a):void 0},M=function(a){return m.isLoading=a,k.isLoading&&f(k.isLoading).assign(h,a),angular.isFunction(y.loading)?y.loading(a):void 0},S=function(a,b){var c,d,e,f;for(c=d=e=a,f=b;f>=e?f>d:d>f;c=f>=e?++d:--d)s[c].scope.$destroy(),s[c].element.remove();return s.splice(a,b-a)},A=function(){return V++,Q=[]},R=function(){return A(),G=1,P=1,S(0,s.length),v.topPadding(0),v.bottomPadding(0),C=!1,q=!1,o(V)},r=function(){return aa.scrollTop()+aa.outerHeight()},$=function(){return aa.scrollTop()},X=function(){return!C&&v.bottomDataPos()=i?0>=f:f>=0;b=0>=i?++f:--f)if(c=s[b],e=c.element.offset().top,g=j!==e,j=e,g&&(d=c.element.outerHeight(!0)),v.bottomDataPos()-a-d>r()+t())g&&(a+=d),h++,C=!1;else{if(g)break;h++}return h>0?(v.bottomPadding(v.bottomPadding()+a),S(s.length-h,s.length),P-=h):void 0},Y=function(){return!q&&v.topDataPos()>$()-t()},x=function(){var a,b,c,d,e,f,g,h,i;for(i=0,g=0,d=0,e=s.length;e>d;d++)if(a=s[d],c=a.element.offset().top,f=h!==c,h=c,f&&(b=a.element.outerHeight(!0)),v.topDataPos()+i+b<$()-t())f&&(i+=b),g++,q=!1;else{if(f)break;g++}return g>0?(v.topPadding(v.topPadding()+i),S(0,g),G+=g):void 0},B=function(a,b){return m.isLoading||M(!0),1===Q.push(b)?E(a):void 0},J=function(a,b){var c,d;if(c=h.$new(),c[L]=b,d={scope:c},j(c,function(a){return d.element=a}),a%1===0)return d.op="insert",s.splice(a,0,d);switch(d.op=a,a){case"append":return s.push(d);case"prepend":return s.unshift(d)}},o=function(a,b){var c,f,g;return c=[],f=[],g=[],d(function(){var d,h,i,j,k,l,m,n,p,q,r,t,u,w,x,y,z,A,C,D;for(d=v.bottomDataPos(),i=m=0,q=s.length;q>m;i=++m)switch(D=s[i],D.op){case"prepend":f.unshift(D);break;case"append":0===i?v.insertElement(D.element):v.insertElement(D.element,s[i-1].element),D.op="none";break;case"insert":c=0===i?c.concat(v.insertElementAnimated(D.element)):c.concat(v.insertElementAnimated(D.element,s[i-1].element)),D.op="none";break;case"remove":g.push(D)}for(n=0,r=g.length;r>n;n++)D=g[n],c=c.concat(T(D));if(v.bottomPadding(Math.max(0,v.bottomPadding()-(v.bottomDataPos()-d))),f.length){for(d=v.bottomDataPos(),p=0,t=f.length;t>p;p++)D=f[p],v.insertElement(D.element),D.op="none";h=v.bottomDataPos()-d,v.topPadding()>=h?v.topPadding(v.topPadding()-h):aa.scrollTop(aa.scrollTop()+h)}for(i=x=0,u=s.length;u>x;i=++x)j=s[i],j.scope.$index=G+i;if(X()?B(a,!0):Y()&&B(a,!1),b&&b(a),0===Q.length)for(C=0,y=0,w=s.length;w>y;y++){if(j=s[y],l=j.element.offset().top,z=A!==l,A=l,z&&(k=j.element.outerHeight(!0)),!(z&&v.topDataPos()+C+k<$())){z&&Z(j);break}C+=k}return c.length?e.all(c).then(function(){return o(a)}):void 0})},F=function(a){return o(a,function(){return Q.shift(),0===Q.length?M(!1):E(a)})},E=function(a){return Q[0]?s.length&&!X()?F(a):y.get(P,u,function(b){var c,d,e;if(!(a&&a!==V||h.$$destroyed)){if(b.length0)for(x(),d=0,e=b.length;e>d;d++)c=b[d],++P,J("append",c);return F(a)}}):s.length&&!Y()?F(a):y.get(G-u,u,function(b){var c,d,e;if(!(a&&a!==V||h.$$destroyed)){if(b.length0)for(s.length&&w(),c=d=e=b.length-1;0>=e?0>=d:d>=0;c=0>=e?++d:--d)--G,J("prepend",b[c]);return F(a)}})},U=function(){return c.$$phase||m.isLoading?void 0:(o(),h.$apply())},ca=function(a){var b,c;return b=aa[0].scrollTop,c=aa[0].scrollHeight-aa[0].clientHeight,0===b&&!q||b===c&&!C?a.preventDefault():void 0},aa.bind("resize",U),aa.bind("scroll",U),aa.bind("mousewheel",ca),h.$watch(y.revision,R),h.$on("$destroy",function(){var a,b,c;for(b=0,c=s.length;c>b;b++)a=s[b],a.scope.$destroy(),a.element.remove();return aa.unbind("resize",U),aa.unbind("scroll",U),aa.unbind("mousewheel",ca)}),m={},m.isLoading=!1,m.reload=R,p=function(a,b){var c,d,e,f,g,h,i;if(angular.isArray(b)){for(h=s.indexOf(a)+1,i=b.reverse(),c=d=0,f=i.length;f>d;c=++d)g=i[c],g===a.scope[L]?(e=!0,h--):J(h,g);if(!e)return a.op="remove"}},m.applyUpdates=function(a,b){var c,d,e,f,g,h;if(A(),angular.isFunction(a))for(c=s.slice(0),d=e=0,f=c.length;f>e;d=++e)h=c[d],p(h,a(h.scope[L],h.scope,h.element));else{if(a%1!==0)throw new Error("applyUpdates - "+a+" is not a valid index");0<=(g=a-G)&&gc;c++)b=a[c],++P,J("append",b);return o(V)},m.prepend=function(a){var b,c,d,e;for(A(),e=a.reverse(),c=0,d=e.length;d>c;c++)b=e[c],--G,J("prepend",b);return o(V)},k.adapter&&(n=f(k.adapter)(h),n||(f(k.adapter).assign(h,{}),n=f(k.adapter)(h)),angular.extend(n,m),m=n),_=function(a){throw new Error(a+" event is no longer supported - use applyUpdates instead")},D=y.scope?y.scope.$new():h.$new(),D.$on("insert.item",function(){return _("insert")}),D.$on("update.items",function(){return _("update")}),D.$on("delete.items",function(){return _("delete")})}}}}])}(); \ No newline at end of file From 9348fab5807a11d026dca2480aff9b6f9703455b Mon Sep 17 00:00:00 2001 From: "d.alexanov" Date: Wed, 5 Aug 2015 15:08:11 +0300 Subject: [PATCH 2/4] tests for paddings recalculation --- test/BasicTestsSpec.js | 158 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 157 insertions(+), 1 deletion(-) diff --git a/test/BasicTestsSpec.js b/test/BasicTestsSpec.js index 4df239bc..18a61e68 100644 --- a/test/BasicTestsSpec.js +++ b/test/BasicTestsSpec.js @@ -101,7 +101,21 @@ describe('uiScroll', function () { } }; } - ]); + ]) + + .factory('myInfiniteDatasource', [ + '$log', '$timeout', '$rootScope', function () { + return { + get: function (index, count, success) { + var result = []; + for (var i = index; i < index + count; i++) { + result.push('item' + i); + } + success(result); + } + }; + } + ]); beforeEach(module('ui.scroll')); beforeEach(module('ui.scroll.test')); @@ -736,5 +750,147 @@ describe('uiScroll', function () { }); + describe('paddings recalculation', function () { + + var viewportHeight = 60; + var itemHeight = 10; + var bufferSize = 3; + + var scrollSettings = { + datasource: 'myInfiniteDatasource', + viewportHeight: viewportHeight, + itemHeight: itemHeight, + bufferSize: bufferSize + }; + + it('should calculate top padding element\'s height', function () { + runTest(scrollSettings, + function (viewport, scope, $timeout) { + var topPaddingElement = angular.element(viewport.children()[0]); + + var scrollDelta = itemHeight * bufferSize; + var limit = 6; // must be > 2 ! + var i; + + // scroll down (double speed) + expectation + for(i = 0; i < limit; i++) { + viewport.scrollTop(viewport.scrollTop() + 2 * scrollDelta); + viewport.trigger('scroll'); + $timeout.flush(); + + expect(topPaddingElement.height()).toBe(itemHeight * bufferSize * (i + 1)); + } + + // scroll up (normal speed) + expectation + for(i = limit - 1; i >= 0; i--) { + expect(topPaddingElement.height()).toBe(itemHeight * bufferSize * (i + 1)); + + viewport.scrollTop(viewport.scrollTop() - scrollDelta); + viewport.trigger('scroll'); + $timeout.flush(); + } + + } + ); + }); + + it('should calculate top padding element\'s height with new rows pre-built', function () { + runTest(scrollSettings, + function (viewport, scope, $timeout) { + var topPaddingElement = angular.element(viewport.children()[0]); + + var scrollDelta = itemHeight * bufferSize; + var limit = 6; // must be > 2 ! + var i; + + // scroll down, new rows building + for(i = 0; i < limit; i++) { + viewport.scrollTop(viewport.scrollTop() + scrollDelta); + viewport.trigger('scroll'); + $timeout.flush(); + } + + // scroll up, return to the top + for(i = 0; i < limit; i++) { + viewport.scrollTop(viewport.scrollTop() - scrollDelta); + viewport.trigger('scroll'); + $timeout.flush(); + } + + // scroll down + expectation + for(i = 0; i < limit; i++) { + viewport.scrollTop(viewport.scrollTop() + scrollDelta); + viewport.trigger('scroll'); + $timeout.flush(); + + expect(topPaddingElement.height()).toBe(itemHeight * bufferSize * (i + 1)); + //console.log(topPaddingElement.height() + ' =?= ' + itemHeight * bufferSize * (i + 1)); + } + + // scroll up + expectation + for(i = limit - 1; i >= 0; i--) { + expect(topPaddingElement.height()).toBe(itemHeight * bufferSize * (i + 1)); + //console.log(topPaddingElement.height() + ' =?= ' + itemHeight * bufferSize * (i + 1)); + + viewport.scrollTop(viewport.scrollTop() - scrollDelta); + viewport.trigger('scroll'); + $timeout.flush(); + } + + } + ); + }); + + it('should calculate bottom padding element\'s height with new rows pre-built', function () { + runTest(scrollSettings, + function (viewport, scope, $timeout) { + var bottomPaddingElement = angular.element(viewport.children()[viewport.children().length - 1]); + + var scrollDelta = itemHeight * bufferSize; + var limit = 6; // must be > 2 ! + var i; + + // scroll up, new rows building + for(i = 0; i < limit; i++) { + viewport.scrollTop(viewport.scrollTop() - scrollDelta); + viewport.trigger('scroll'); + $timeout.flush(); + } + + // scroll down, return to the bottom + for(i = 0; i < limit; i++) { + viewport.scrollTop(viewport.scrollTop() + scrollDelta); + viewport.trigger('scroll'); + $timeout.flush(); + } + + // unstable delta passing + viewport.scrollTop(viewport.scrollTop() - 5); + + // scroll up + expectation + for(i = 0; i < limit; i++) { + viewport.scrollTop(viewport.scrollTop() - scrollDelta); + viewport.trigger('scroll'); + $timeout.flush(); + + expect(bottomPaddingElement.height()).toBe(itemHeight * bufferSize * (i + 1)); + //console.log(bottomPaddingElement.height() + ' =?= ' + itemHeight * bufferSize * (i + 1)); + } + + // scroll down + expectation + for(i = limit - 1; i >= 0; i--) { + expect(bottomPaddingElement.height()).toBe(itemHeight * bufferSize * (i + 1)); + //console.log(bottomPaddingElement.height() + ' =?= ' + itemHeight * bufferSize * (i + 1)); + + viewport.scrollTop(viewport.scrollTop() + scrollDelta); + viewport.trigger('scroll'); + $timeout.flush(); + } + + } + ); + }); + + }); }); \ No newline at end of file From e71c4feb8762aef4a6183e6480dd9b6d02f23bf7 Mon Sep 17 00:00:00 2001 From: "d.alexanov" Date: Wed, 5 Aug 2015 15:08:35 +0300 Subject: [PATCH 3/4] v1.3.1 release --- .gitignore | 3 ++- README.md | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 6ba1e417..de8655f9 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ public node_modules temp -/nbproject/private/ \ No newline at end of file +/nbproject/private/ +local_development \ No newline at end of file diff --git a/README.md b/README.md index fb34f717..ca53b940 100644 --- a/README.md +++ b/README.md @@ -215,6 +215,12 @@ See [index.html](http://rawgithub.com/angular-ui/ui-scroll/master/demo/index.htm ###History +###v1.3.1 +* Changed the logic of viewport scroll/padding recalculation (to solve the problem [#8](https://github.com/angular-ui/ui-scroll/issues/8)). +* Splitted test specifications. +* Updated dev-dependencies (package.json). +* Implemented append/prepend methods on the adapter. + ###v1.3.0 * Reorganized the repository structure. From da6a3523f013ad03a001bbb0f81a96e9acc1905d Mon Sep 17 00:00:00 2001 From: "d.alexanov" Date: Wed, 5 Aug 2015 16:42:35 +0300 Subject: [PATCH 4/4] release information within artefacts (auto) --- Gruntfile.coffee | 19 +++++++++++++++---- bower.json | 2 +- dist/ui-scroll-jqlite.js | 10 +++++++++- dist/ui-scroll-jqlite.min.js | 6 ++++++ dist/ui-scroll.js | 10 +++++++++- dist/ui-scroll.min.js | 6 ++++++ package.json | 2 +- 7 files changed, 47 insertions(+), 8 deletions(-) diff --git a/Gruntfile.coffee b/Gruntfile.coffee index 801bd911..1b150d51 100644 --- a/Gruntfile.coffee +++ b/Gruntfile.coffee @@ -10,6 +10,15 @@ module.exports = (grunt) -> grunt.loadNpmTasks 'grunt-contrib-uglify' grunt.initConfig + packageBower: grunt.file.readJSON('./bower.json') + timestamp: (new Date()).toISOString() + releaseData: + '/*!\n' + + ' * <%= packageBower.name %>\n' + + ' * <%= packageBower.homepage %>\n' + + ' * Version: <%= packageBower.version %> -- <%= timestamp %>\n' + + ' * License: <%= packageBower.license %>\n' + + ' */\n' connect: app: options: @@ -49,11 +58,11 @@ module.exports = (grunt) -> bare: true #sourceMap: true - #prepend 'use strict' to the files concat: - #usestrict: options: - banner: '(function () {\n\'use strict\';\n' + #prepend 'use strict' and release data to the files + banner: + '<%= releaseData %> \n\n (function () {\n\'use strict\';\n' footer: '}());' stripBanners: true process: (src, filepath) -> @@ -71,11 +80,13 @@ module.exports = (grunt) -> ) dynamic_mappings: - files: + files: 'dist/ui-scroll.js': ['./temp/**/ui-scroll.js'] 'dist/ui-scroll-jqlite.js': ['./temp/**/ui-scroll-jqlite.js'] uglify: + options: + banner: '<%= releaseData %>' common: files: './dist/ui-scroll.min.js': [ diff --git a/bower.json b/bower.json index 723bdf5c..3f16ec82 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "angular-ui-scroll", - "version": "1.3.0", + "version": "1.3.1", "homepage": "https://github.com/angular-ui/ui-scroll.git", "description": "AngularJS infinite scrolling module", "main": "./dist/ui-scroll.js", diff --git a/dist/ui-scroll-jqlite.js b/dist/ui-scroll-jqlite.js index 78f30b77..37d06d57 100644 --- a/dist/ui-scroll-jqlite.js +++ b/dist/ui-scroll-jqlite.js @@ -1,4 +1,12 @@ -(function () { +/*! + * angular-ui-scroll + * https://github.com/angular-ui/ui-scroll.git + * Version: 1.3.1 -- 2015-08-05T13:39:04.079Z + * License: MIT + */ + + + (function () { 'use strict'; angular.module('ui.scroll.jqlite', ['ui.scroll']).service('jqLiteExtras', [ '$log', '$window', function(console, window) { diff --git a/dist/ui-scroll-jqlite.min.js b/dist/ui-scroll-jqlite.min.js index 36edda50..8a00dae6 100644 --- a/dist/ui-scroll-jqlite.min.js +++ b/dist/ui-scroll-jqlite.min.js @@ -1 +1,7 @@ +/*! + * angular-ui-scroll + * https://github.com/angular-ui/ui-scroll.git + * Version: 1.3.1 -- 2015-08-05T13:39:04.079Z + * License: MIT + */ !function(){"use strict";angular.module("ui.scroll.jqlite",["ui.scroll"]).service("jqLiteExtras",["$log","$window",function(a,b){return{registerFor:function(a){var c,d,e,f,g,h,i;return d=angular.element.prototype.css,a.prototype.css=function(a,b){var c,e;return e=this,c=e[0],c&&3!==c.nodeType&&8!==c.nodeType&&c.style?d.call(e,a,b):void 0},h=function(a){return a&&a.document&&a.location&&a.alert&&a.setInterval},i=function(a,b,c){var d,e,f,g,i;return d=a[0],i={top:["scrollTop","pageYOffset","scrollLeft"],left:["scrollLeft","pageXOffset","scrollTop"]}[b],e=i[0],g=i[1],f=i[2],h(d)?angular.isDefined(c)?d.scrollTo(a[f].call(a),c):g in d?d[g]:d.document.documentElement[e]:angular.isDefined(c)?d[e]=c:d[e]},b.getComputedStyle?(f=function(a){return b.getComputedStyle(a,null)},c=function(a,b){return parseFloat(b)}):(f=function(a){return a.currentStyle},c=function(a,b){var c,d,e,f,g,h,i;return c=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,f=new RegExp("^("+c+")(?!px)[a-z%]+$","i"),f.test(b)?(i=a.style,d=i.left,g=a.runtimeStyle,h=g&&g.left,g&&(g.left=i.left),i.left=b,e=i.pixelLeft,i.left=d,h&&(g.left=h),e):parseFloat(b)}),e=function(a,b){var d,e,g,i,j,k,l,m,n,o,p,q,r;return h(a)?(d=document.documentElement[{height:"clientHeight",width:"clientWidth"}[b]],{base:d,padding:0,border:0,margin:0}):(r={width:[a.offsetWidth,"Left","Right"],height:[a.offsetHeight,"Top","Bottom"]}[b],d=r[0],l=r[1],m=r[2],k=f(a),p=c(a,k["padding"+l])||0,q=c(a,k["padding"+m])||0,e=c(a,k["border"+l+"Width"])||0,g=c(a,k["border"+m+"Width"])||0,i=k["margin"+l],j=k["margin"+m],n=c(a,i)||0,o=c(a,j)||0,{base:d,padding:p+q,border:e+g,margin:n+o})},g=function(a,b,c){var d,g,h;return g=e(a,b),g.base>0?{base:g.base-g.padding-g.border,outer:g.base,outerfull:g.base+g.margin}[c]:(d=f(a),h=d[b],(0>h||null===h)&&(h=a.style[b]||0),h=parseFloat(h)||0,{base:h-g.padding-g.border,outer:h,outerfull:h+g.padding+g.border+g.margin}[c])},angular.forEach({before:function(a){var b,c,d,e,f,g,h;if(h=this,c=h[0],f=h.parent(),b=f.contents(),b[0]===c)return f.prepend(a);for(d=e=1,g=b.length-1;g>=1?g>=e:e>=g;d=g>=1?++e:--e)if(b[d]===c)return void angular.element(b[d-1]).after(a);throw new Error("invalid DOM structure "+c.outerHTML)},height:function(a){var b;return b=this,angular.isDefined(a)?(angular.isNumber(a)&&(a+="px"),d.call(b,"height",a)):g(this[0],"height","base")},outerHeight:function(a){return g(this[0],"height",a?"outerfull":"outer")},offset:function(a){var b,c,d,e,f,g;if(f=this,arguments.length){if(void 0===a)return f;throw new Error("offset setter method is not implemented")}return b={top:0,left:0},e=f[0],(c=e&&e.ownerDocument)?(d=c.documentElement,null!=e.getBoundingClientRect&&(b=e.getBoundingClientRect()),g=c.defaultView||c.parentWindow,{top:b.top+(g.pageYOffset||d.scrollTop)-(d.clientTop||0),left:b.left+(g.pageXOffset||d.scrollLeft)-(d.clientLeft||0)}):void 0},scrollTop:function(a){return i(this,"top",a)},scrollLeft:function(a){return i(this,"left",a)}},function(b,c){return a.prototype[c]?void 0:a.prototype[c]=b})}}}]).run(["$log","$window","jqLiteExtras",function(a,b,c){return b.jQuery?void 0:c.registerFor(angular.element)}])}(); \ No newline at end of file diff --git a/dist/ui-scroll.js b/dist/ui-scroll.js index 571246db..f3a3e62a 100644 --- a/dist/ui-scroll.js +++ b/dist/ui-scroll.js @@ -1,4 +1,12 @@ -(function () { +/*! + * angular-ui-scroll + * https://github.com/angular-ui/ui-scroll.git + * Version: 1.3.1 -- 2015-08-05T13:39:04.079Z + * License: MIT + */ + + + (function () { 'use strict'; /*! diff --git a/dist/ui-scroll.min.js b/dist/ui-scroll.min.js index 00c92653..9add6578 100644 --- a/dist/ui-scroll.min.js +++ b/dist/ui-scroll.min.js @@ -1 +1,7 @@ +/*! + * angular-ui-scroll + * https://github.com/angular-ui/ui-scroll.git + * Version: 1.3.1 -- 2015-08-05T13:39:04.079Z + * License: MIT + */ !function(){"use strict";angular.module("ui.scroll",[]).directive("uiScrollViewport",function(){return{controller:["$scope","$element",function(a,b){return this.viewport=b,this}]}}).directive("uiScroll",["$log","$injector","$rootScope","$timeout","$q","$parse",function(a,b,c,d,e,f){var g;return b.has&&b.has("$animate")&&(g=b.get("$animate")),{require:["?^uiScrollViewport"],transclude:"element",priority:1e3,terminal:!0,compile:function(h,i,j){return function(h,i,k,l){var m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,_,aa,ba,ca;if(N=a.debug||a.log,!(O=k.uiScroll.match(/^\s*(\w+)\s+in\s+([\w\.]+)\s*$/)))throw new Error("Expected uiScroll in form of '_item_ in _datasource_' but got ' + $attr.uiScroll + '");if(L=O[1],z=O[2],y=f(z)(h),K=function(){return angular.isObject(y)&&angular.isFunction(y.get)},!K()&&(y=b.get(z),!K()))throw new Error(z+" is not a valid datasource");return u=Math.max(3,+k.bufferSize||10),t=function(){return aa.outerHeight()*Math.max(.1,+k.padding||.1)},W=function(a){var b;return null!=(b=a[0].scrollHeight)?b:a[0].document.documentElement.scrollHeight},v=null,V=0,G=1,P=1,s=[],Q=[],C=!1,q=!1,T=g?2===angular.version.minor?function(a){var b;return s.splice(s.indexOf(a),1),b=e.defer(),g.leave(a.element,function(){return a.scope.$destroy(),b.resolve()}),[b.promise]}:function(a){return s.splice(s.indexOf(a),1),[g.leave(a.element).then(function(){return a.scope.$destroy()})]}:function(a){return s.splice(s.indexOf(a),1),a.element.remove(),a.scope.$destroy(),[]},H=function(a,b){return i.after.apply(b,a),[]},I=g?2===angular.version.minor?function(a,b){var c;return c=e.defer(),g.enter(a,i,b,function(){return c.resolve()}),[c.promise]}:function(a,b){return[g.enter(a,i,b)]}:H,j(h.$new(),function(a){var b,c,d,e,f;if(d=a[0].localName,"dl"===d)throw new Error("ui-scroll directive does not support <"+a[0].localName+"> as a repeating tag: "+a[0].outerHTML);return"li"!==d&&"tr"!==d&&(d="div"),f=l[0]&&l[0].viewport?l[0].viewport:angular.element(window),f.css({"overflow-y":"auto",display:"block"}),c=function(a){var b,c,d;switch(a){case"tr":d=angular.element("
"),b=d.find("div"),c=d.find("tr"),c.paddingHeight=function(){return b.height.apply(b,arguments)};break;default:c=angular.element("<"+a+">"),c.paddingHeight=c.height}return c},e=c(d),i.before(e),b=c(d),i.after(b),h.$on("$destroy",function(){return a.remove()}),v={viewport:f,topPadding:function(){return e.paddingHeight.apply(e,arguments)},bottomPadding:function(){return b.paddingHeight.apply(b,arguments)},bottomDataPos:function(){return W(f)-b.paddingHeight()},topDataPos:function(){return e.paddingHeight()},insertElement:function(a,b){return H(a,b||e)},insertElementAnimated:function(a,b){return I(a,b||e)}}}),aa=v.viewport,ba=aa.scope()||c,Z=function(a){return m.topVisible=a.scope[L],m.topVisibleElement=a.element,m.topVisibleScope=a.scope,k.topVisible&&f(k.topVisible).assign(ba,m.topVisible),k.topVisibleElement&&f(k.topVisibleElement).assign(ba,m.topVisibleElement),k.topVisibleScope&&f(k.topVisibleScope).assign(ba,m.topVisibleScope),angular.isFunction(y.topVisible)?y.topVisible(a):void 0},M=function(a){return m.isLoading=a,k.isLoading&&f(k.isLoading).assign(h,a),angular.isFunction(y.loading)?y.loading(a):void 0},S=function(a,b){var c,d,e,f;for(c=d=e=a,f=b;f>=e?f>d:d>f;c=f>=e?++d:--d)s[c].scope.$destroy(),s[c].element.remove();return s.splice(a,b-a)},A=function(){return V++,Q=[]},R=function(){return A(),G=1,P=1,S(0,s.length),v.topPadding(0),v.bottomPadding(0),C=!1,q=!1,o(V)},r=function(){return aa.scrollTop()+aa.outerHeight()},$=function(){return aa.scrollTop()},X=function(){return!C&&v.bottomDataPos()=i?0>=f:f>=0;b=0>=i?++f:--f)if(c=s[b],e=c.element.offset().top,g=j!==e,j=e,g&&(d=c.element.outerHeight(!0)),v.bottomDataPos()-a-d>r()+t())g&&(a+=d),h++,C=!1;else{if(g)break;h++}return h>0?(v.bottomPadding(v.bottomPadding()+a),S(s.length-h,s.length),P-=h):void 0},Y=function(){return!q&&v.topDataPos()>$()-t()},x=function(){var a,b,c,d,e,f,g,h,i;for(i=0,g=0,d=0,e=s.length;e>d;d++)if(a=s[d],c=a.element.offset().top,f=h!==c,h=c,f&&(b=a.element.outerHeight(!0)),v.topDataPos()+i+b<$()-t())f&&(i+=b),g++,q=!1;else{if(f)break;g++}return g>0?(v.topPadding(v.topPadding()+i),S(0,g),G+=g):void 0},B=function(a,b){return m.isLoading||M(!0),1===Q.push(b)?E(a):void 0},J=function(a,b){var c,d;if(c=h.$new(),c[L]=b,d={scope:c},j(c,function(a){return d.element=a}),a%1===0)return d.op="insert",s.splice(a,0,d);switch(d.op=a,a){case"append":return s.push(d);case"prepend":return s.unshift(d)}},o=function(a,b){var c,f,g;return c=[],f=[],g=[],d(function(){var d,h,i,j,k,l,m,n,p,q,r,t,u,w,x,y,z,A,C,D;for(d=v.bottomDataPos(),i=m=0,q=s.length;q>m;i=++m)switch(D=s[i],D.op){case"prepend":f.unshift(D);break;case"append":0===i?v.insertElement(D.element):v.insertElement(D.element,s[i-1].element),D.op="none";break;case"insert":c=0===i?c.concat(v.insertElementAnimated(D.element)):c.concat(v.insertElementAnimated(D.element,s[i-1].element)),D.op="none";break;case"remove":g.push(D)}for(n=0,r=g.length;r>n;n++)D=g[n],c=c.concat(T(D));if(v.bottomPadding(Math.max(0,v.bottomPadding()-(v.bottomDataPos()-d))),f.length){for(d=v.bottomDataPos(),p=0,t=f.length;t>p;p++)D=f[p],v.insertElement(D.element),D.op="none";h=v.bottomDataPos()-d,v.topPadding()>=h?v.topPadding(v.topPadding()-h):aa.scrollTop(aa.scrollTop()+h)}for(i=x=0,u=s.length;u>x;i=++x)j=s[i],j.scope.$index=G+i;if(X()?B(a,!0):Y()&&B(a,!1),b&&b(a),0===Q.length)for(C=0,y=0,w=s.length;w>y;y++){if(j=s[y],l=j.element.offset().top,z=A!==l,A=l,z&&(k=j.element.outerHeight(!0)),!(z&&v.topDataPos()+C+k<$())){z&&Z(j);break}C+=k}return c.length?e.all(c).then(function(){return o(a)}):void 0})},F=function(a){return o(a,function(){return Q.shift(),0===Q.length?M(!1):E(a)})},E=function(a){return Q[0]?s.length&&!X()?F(a):y.get(P,u,function(b){var c,d,e;if(!(a&&a!==V||h.$$destroyed)){if(b.length0)for(x(),d=0,e=b.length;e>d;d++)c=b[d],++P,J("append",c);return F(a)}}):s.length&&!Y()?F(a):y.get(G-u,u,function(b){var c,d,e;if(!(a&&a!==V||h.$$destroyed)){if(b.length0)for(s.length&&w(),c=d=e=b.length-1;0>=e?0>=d:d>=0;c=0>=e?++d:--d)--G,J("prepend",b[c]);return F(a)}})},U=function(){return c.$$phase||m.isLoading?void 0:(o(),h.$apply())},ca=function(a){var b,c;return b=aa[0].scrollTop,c=aa[0].scrollHeight-aa[0].clientHeight,0===b&&!q||b===c&&!C?a.preventDefault():void 0},aa.bind("resize",U),aa.bind("scroll",U),aa.bind("mousewheel",ca),h.$watch(y.revision,R),h.$on("$destroy",function(){var a,b,c;for(b=0,c=s.length;c>b;b++)a=s[b],a.scope.$destroy(),a.element.remove();return aa.unbind("resize",U),aa.unbind("scroll",U),aa.unbind("mousewheel",ca)}),m={},m.isLoading=!1,m.reload=R,p=function(a,b){var c,d,e,f,g,h,i;if(angular.isArray(b)){for(h=s.indexOf(a)+1,i=b.reverse(),c=d=0,f=i.length;f>d;c=++d)g=i[c],g===a.scope[L]?(e=!0,h--):J(h,g);if(!e)return a.op="remove"}},m.applyUpdates=function(a,b){var c,d,e,f,g,h;if(A(),angular.isFunction(a))for(c=s.slice(0),d=e=0,f=c.length;f>e;d=++e)h=c[d],p(h,a(h.scope[L],h.scope,h.element));else{if(a%1!==0)throw new Error("applyUpdates - "+a+" is not a valid index");0<=(g=a-G)&&gc;c++)b=a[c],++P,J("append",b);return o(V)},m.prepend=function(a){var b,c,d,e;for(A(),e=a.reverse(),c=0,d=e.length;d>c;c++)b=e[c],--G,J("prepend",b);return o(V)},k.adapter&&(n=f(k.adapter)(h),n||(f(k.adapter).assign(h,{}),n=f(k.adapter)(h)),angular.extend(n,m),m=n),_=function(a){throw new Error(a+" event is no longer supported - use applyUpdates instead")},D=y.scope?y.scope.$new():h.$new(),D.$on("insert.item",function(){return _("insert")}),D.$on("update.items",function(){return _("update")}),D.$on("delete.items",function(){return _("delete")})}}}}])}(); \ No newline at end of file diff --git a/package.json b/package.json index 1111b77e..0576ae5c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "angular-ui-scroll", "description": "two way infinite scroll", - "version": "1.3.0", + "version": "1.3.1", "src": "./src/", "public": "./public/", "main": "./dist/ui-scroll.js",