{"version":3,"sources":["webpack:///C:/GitHub/Framework8_Web/Framework8/Framework8/Front/App/import/js/directives/infinitescroll/directive.infinitescroll.init.js"],"names":["angular","module","factory","$rootScope","$window","THROTTLE_MILLISECONDS","init","scope","element","attrs","windowElement","scrollDistance","scrollEnabled","checkWhenEnabled","container","height","_elem","isNaN","offsetHeight","document","documentElement","clientHeight","offsetTop","getBoundingClientRect","css","top","pageYOffset","window","scrollTop","ownerDocument","defaultView","handler","containerBottom","containerTopOffset","elementBottom","$$phase","infiniteScroll","$apply","throttledHandler","throttle","setContainer","newContainer","bind","$on","unbind","unwatch","$watch","infiniteScrollDisabled","value","parseFloat","handleInfiniteScrollDistance","infiniteScrollDistance","isDefined","infiniteScrollGrandParent","parent","infiniteScrollParent"],"mappings":"2FAAA,oBAEeA,kBACZC,OAAO,gCAAiC,IAGxCC,QAAQ,iBAAkB,CAAF,+CAAE,SAAUC,EAAYC,EAASC,GAIxD,MAHgB,CACdC,KAKF,SAAcC,EAAOC,EAASC,GAC5B,MAAMC,EAAgBV,QAAQQ,QAAQJ,GACtC,IAAIO,EAAiB,KACjBC,EAAgB,KAChBC,EAAmB,KACnBC,EAAY,KAEhB,SAASC,EAAOC,GAEd,OADAA,EAAQA,EAAM,IAAMA,EAChBC,MAAMD,EAAME,cACPF,EAAMG,SAASC,gBAAgBC,aAEjCL,EAAME,aAGf,SAASI,EAAUN,GACjB,GAAKA,EAAM,GAAGO,wBAAyBP,EAAMQ,IAAI,QAGjD,OAAOR,EAAM,GAAGO,wBAAwBE,IAAMC,EAAYV,GAG5D,SAASU,EAAYV,GAEnB,OADAA,EAAQA,EAAM,IAAMA,EAChBC,MAAMU,OAAOD,aACRV,EAAMG,SAASC,gBAAgBQ,UAEjCZ,EAAMa,cAAcC,YAAYJ,YAGzC,SAASK,IACP,IAAIC,EAAiBC,EAAoBC,EACrCpB,IAAcJ,GAChBsB,EAAkBjB,EAAOD,GAAaY,EAAYZ,EAAU,GAAGK,SAASC,iBACxEc,EAAgBZ,EAAUd,GAAWO,EAAOP,KAE5CwB,EAAkBjB,EAAOD,GACzBmB,EAAqB,OACQ,IAAzBX,EAAUR,KACZmB,EAAqBX,EAAUR,IAEjCoB,EAAgBZ,EAAUd,GAAWyB,EAAqBlB,EAAOP,IAKnE,OAFkB0B,EAAgBF,GACAjB,EAAOD,GAAaH,EAAiB,GAErEE,GAAmB,EACfD,EACEL,EAAM4B,SAAWhC,EAAWgC,QACvB5B,EAAM6B,iBAER7B,EAAM8B,OAAO9B,EAAM6B,qBAJ5B,IAOAvB,GAAmB,EACZA,GAIX,MAAMyB,EAAmBC,YAASR,EAAS1B,GAc3C,SAASmC,EAAaC,GACpB3B,EAAY2B,EACS,OAAjBA,GACF3B,EAAU4B,KAAK,SAAUJ,GAI7B/B,EAAMoC,IAAI,WAAY,KACpB7B,EAAU8B,OAAO,SAAUN,GAC3BO,IACAA,EAAU,OAGZjC,GAAgB,EAChB,IAAIiC,EAAUtC,EAAMuC,OAAO,IAAMvC,EAAMwC,wBAtBvC,SAAsCC,GACpCpC,GAAiBoC,EACbpC,GAAiBC,IACnBA,GAAmB,EACnBkB,QAoBJpB,EA5BA,SAAsCqC,GACpC,OAAOC,WAAWD,IAAU,EA2BbE,CAA6B3C,EAAM4C,wBAEhDnD,QAAQoD,UAAU3C,EAAM4C,4BAA8B9C,EAAM8C,0BAC9Db,EAAaxC,QAAQQ,QAAQA,EAAQ8C,SAASA,WACrCtD,QAAQoD,UAAU3C,EAAM8C,sBACjCf,EAAaxC,QAAQQ,QAAQA,EAAQ8C,WAErCd,EAAa9B","file":"infinitescroll.31e1cf079bb8d5255dbb.js","sourcesContent":["import { throttle } from 'lodash-es';\r\n\r\nexport default angular\r\n .module('directive.infinitescroll.init', [])\r\n\r\n /* @ngInject */\r\n .factory('InfiniteScroll', function ($rootScope, $window, THROTTLE_MILLISECONDS) {\r\n const service = {\r\n init\r\n };\r\n return service;\r\n\r\n ////////////\r\n function init(scope, element, attrs) {\r\n const windowElement = angular.element($window);\r\n let scrollDistance = null;\r\n let scrollEnabled = null;\r\n let checkWhenEnabled = null;\r\n let container = null;\r\n\r\n function height(_elem) {\r\n _elem = _elem[0] || _elem;\r\n if (isNaN(_elem.offsetHeight)) {\r\n return _elem.document.documentElement.clientHeight;\r\n }\r\n return _elem.offsetHeight;\r\n }\r\n\r\n function offsetTop(_elem) {\r\n if (!_elem[0].getBoundingClientRect || _elem.css('none')) {\r\n return;\r\n }\r\n return _elem[0].getBoundingClientRect().top + pageYOffset(_elem);\r\n }\r\n\r\n function pageYOffset(_elem) {\r\n _elem = _elem[0] || _elem;\r\n if (isNaN(window.pageYOffset)) {\r\n return _elem.document.documentElement.scrollTop;\r\n }\r\n return _elem.ownerDocument.defaultView.pageYOffset;\r\n }\r\n\r\n function handler() {\r\n let containerBottom, containerTopOffset, elementBottom;\r\n if (container === windowElement) {\r\n containerBottom = height(container) + pageYOffset(container[0].document.documentElement);\r\n elementBottom = offsetTop(element) + height(element);\r\n } else {\r\n containerBottom = height(container);\r\n containerTopOffset = 0;\r\n if (offsetTop(container) !== void 0) {\r\n containerTopOffset = offsetTop(container);\r\n }\r\n elementBottom = offsetTop(element) - containerTopOffset + height(element);\r\n }\r\n\r\n const remaining = elementBottom - containerBottom;\r\n const shouldScroll = remaining <= height(container) * scrollDistance + 1;\r\n if (shouldScroll) {\r\n checkWhenEnabled = true;\r\n if (scrollEnabled) {\r\n if (scope.$$phase || $rootScope.$$phase) {\r\n return scope.infiniteScroll();\r\n }\r\n return scope.$apply(scope.infiniteScroll);\r\n }\r\n } else {\r\n checkWhenEnabled = false;\r\n return checkWhenEnabled;\r\n }\r\n }\r\n\r\n const throttledHandler = throttle(handler, THROTTLE_MILLISECONDS);\r\n\r\n function handleInfiniteScrollDistance(value) {\r\n return parseFloat(value) || 0;\r\n }\r\n\r\n function handleInfiniteScrollDisabled(value) {\r\n scrollEnabled = !value;\r\n if (scrollEnabled && checkWhenEnabled) {\r\n checkWhenEnabled = false;\r\n handler();\r\n }\r\n }\r\n\r\n function setContainer(newContainer) {\r\n container = newContainer;\r\n if (newContainer !== null) {\r\n container.bind('scroll', throttledHandler);\r\n }\r\n }\r\n\r\n scope.$on('$destroy', () => {\r\n container.unbind('scroll', throttledHandler);\r\n unwatch();\r\n unwatch = null;\r\n });\r\n\r\n scrollEnabled = true;\r\n let unwatch = scope.$watch(() => scope.infiniteScrollDisabled, handleInfiniteScrollDisabled);\r\n\r\n scrollDistance = handleInfiniteScrollDistance(scope.infiniteScrollDistance);\r\n\r\n if (angular.isDefined(attrs.infiniteScrollGrandParent) && scope.infiniteScrollGrandParent) {\r\n setContainer(angular.element(element.parent().parent()));\r\n } else if (angular.isDefined(attrs.infiniteScrollParent)) {\r\n setContainer(angular.element(element.parent()));\r\n } else {\r\n setContainer(windowElement);\r\n }\r\n }\r\n });\r\n"],"sourceRoot":""}