-
Notifications
You must be signed in to change notification settings - Fork 4
/
ionic.collect.repeat.min.js
1 lines (1 loc) · 3.28 KB
/
ionic.collect.repeat.min.js
1
angular.module("collectRepeat",[]).factory("$repeatFactory",["$animate","$ionicPosition",function(e,t){var n=function(e,t){return(e+1)*t},i=function(e,t,n){return Math.ceil(e/t+n)},o=function(e,t){return e*t},r=function(e,t){return(t>e?e:t)-1},l=function(e,t){this.map=t,this.collection=e,this.startIndex=0,this.endIndex=null,this.lowerThreshold=null,this.nodeHeight=null,this.inViewCount=null,this.scrollHeight=null,this.parentElement=null,this.parentHeight=null};return l.prototype={setDefaults:function(e,l){this.viewHeight=l,this.nodeHeight=Math.round(t.offset(e).height),this.parentHeight=n(this.collection.length,this.nodeHeight),this.inViewCount=i(this.viewHeight,this.nodeHeight,4),this.scrollHeight=o(this.inViewCount,this.nodeHeight),this.endIndex=r(this.collection.length,this.inViewCount),this.lowerThreshold=this.nodeHeight},registerNode:function(e){this.map[e.index]=e},isNodeRegistered:function(e){return!1},isBelowLowerThreshold:function(e){return e<=-(2*this.nodeHeight)},isAboveLowerThreshold:function(e){return e>=-(2*this.nodeHeight)},isAtEndOfArray:function(){return this.endIndex<this.collection.length}},{RepeatManager:l,createMap:function(){return Object.create(null)},updateScope:function(e){var t=e.scope;t[e.valueIdentifier]=e.value,t.$index=e.index,t.$first=0===e.index,t.$last=e.index===e.arrayLength-1,t.$middle=!(t.$first||t.$last),t.$odd=!(t.$even=0===(1&e.index))},renderNode:function(t,n,i){e.enter(t,n,i)},removeNode:function(t){e.leave(t)},styleClone:function(e,t){e.style.position="absolute",e.style.width="100%",e.style.transform=e.style.webkitTransform="translate3d(0,"+(t+"px")+",0)"},styleParent:function(e,t){e.style.position="relative",e.style.height=t+"px"},transcludeClone:function(e,t,n,i,o,r,l,s,a){this.styleClone(e[0],n.nodeHeight*i),this.renderNode(e,null,angular.element(a)),a=e,this.updateScope({scope:t,index:i,valueIdentifier:o,value:r,key:l,collectionLength:s.length}),n.registerNode({index:i,value:s[l],clone:e,scope:t,previousNode:i?a:null})}}}]).directive("collectRepeat",["$repeatFactory","$ionicPosition",function(e,t){return{restrict:"A",priority:1e3,transclude:"element",compile:function(n,i){var o=i.collectRepeat,r=o.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)?\s*$/),l=r[1],s=r[2];return function(n,i,o,r,a){var c=e.createMap(),u=new e.RepeatManager(n.collection,c);u.parentElement=i[0].parentElement,n.$watchCollection(s,function(o){var r,s,c,d=i[0],h=(o.length,document.getElementsByClassName("scroll-content")),f=h[0].clientHeight;for(a(function(t,n){r=s=0,c=o[s],e.transcludeClone(t,n,u,r,l,c,s,o,d),u.setDefaults(t,f)}),e.styleParent(u.parentElement,u.parentHeight),r=u.startIndex+1;r<u.inViewCount;r++)s=r,c=o[s],a(function(t,n){e.transcludeClone(t,n,u,r,l,c,s,o,d)});n.currentScroll=0,angular.element(h[0]).on("scroll",function(e){n.currentScroll=t.offset(u.map[u.startIndex].clone).top,n.$apply()}),n.$watch("currentScroll",function(t){if(u.isBelowLowerThreshold(t)&&u.isAtEndOfArray()){if(s=r=++u.endIndex,c=o[s],u.isNodeRegistered(s)?e.renderNode(u.map[u.endIndex].clone,u.parentElement,null):a(function(t,n){e.transcludeClone(t,n,u,r,l,c,s,o,d)}),0===u.startIndex)return;e.removeNode(u.map[u.startIndex].previousNode)}else if(u.isAboveLowerThreshold(t)){if(0===u.startIndex)return;e.renderNode(u.map[u.startIndex--].previousNode,null,i[0]),e.removeNode(u.map[u.endIndex--].clone)}})})}}}}]);