diff --git a/demo/multipleReloadTest/multipleReload.html b/demo/multipleReloadTest/multipleReload.html
index 39175992..964df9ac 100644
--- a/demo/multipleReloadTest/multipleReload.html
+++ b/demo/multipleReloadTest/multipleReload.html
@@ -4,7 +4,7 @@
+
diff --git a/dist/ui-scroll.js b/dist/ui-scroll.js
index e8773d6b..1c69f753 100644
--- a/dist/ui-scroll.js
+++ b/dist/ui-scroll.js
@@ -1,7 +1,7 @@
/*!
* angular-ui-scroll
* https://github.com/angular-ui/ui-scroll
- * Version: 1.7.0 -- 2017-12-05T17:50:06.228Z
+ * Version: 1.7.0 -- 2018-04-13T11:46:50.511Z
* License: MIT
*/
/******/ (function(modules) { // webpackBootstrap
@@ -99,7 +99,8 @@ var _adapter2 = _interopRequireDefault(_adapter);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
angular.module('ui.scroll', []).constant('JQLiteExtras', _jqLiteExtras2.default).run(['JQLiteExtras', function (JQLiteExtras) {
- return !window.jQuery ? new JQLiteExtras().registerFor(angular.element) : null;
+ !window.jQuery ? new JQLiteExtras().registerFor(angular.element) : null;
+ _elementRoutines2.default.addCSSRules();
}]).directive('uiScrollViewport', function () {
return {
restrict: 'A',
@@ -274,12 +275,12 @@ angular.module('ui.scroll', []).constant('JQLiteExtras', _jqLiteExtras2.default)
}
};
- /**
- * Build padding elements
- *
- * Calling linker is the only way I found to get access to the tag name of the template
- * to prevent the directive scope from pollution a new scope is created and destroyed
- * right after the builder creation is completed
+ /**
+ * Build padding elements
+ *
+ * Calling linker is the only way I found to get access to the tag name of the template
+ * to prevent the directive scope from pollution a new scope is created and destroyed
+ * right after the builder creation is completed
*/
linker(function (clone, scope) {
viewport.createPaddingElements(clone[0]);
@@ -932,22 +933,33 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
var hideClassToken = 'ng-ui-scroll-hide';
-function addCSSRule(sheet, selector, rules, index) {
- if ('insertRule' in sheet) {
- sheet.insertRule(selector + '{' + rules + '}', index);
- } else if ('addRule' in sheet) {
- sheet.addRule(selector, rules, index);
- }
-}
-
var ElementRoutines = function () {
+ _createClass(ElementRoutines, null, [{
+ key: 'addCSSRules',
+ value: function addCSSRules() {
+ var selector = '.' + hideClassToken;
+ var rules = 'display: none';
+ var sheet = document.styleSheets[0];
+ var index = void 0;
+ try {
+ index = sheet.cssRules.length;
+ } catch (err) {
+ index = 0;
+ }
+ if ('insertRule' in sheet) {
+ sheet.insertRule(selector + '{' + rules + '}', index);
+ } else if ('addRule' in sheet) {
+ sheet.addRule(selector, rules, index);
+ }
+ }
+ }]);
+
function ElementRoutines($injector, $q) {
_classCallCheck(this, ElementRoutines);
this.$animate = $injector.has && $injector.has('$animate') ? $injector.get('$animate') : null;
this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3;
this.$q = $q;
- addCSSRule(document.styleSheets[0], '.' + hideClassToken, 'display: none');
}
_createClass(ElementRoutines, [{
diff --git a/dist/ui-scroll.js.map b/dist/ui-scroll.js.map
index 138078da..43f30f47 100644
--- a/dist/ui-scroll.js.map
+++ b/dist/ui-scroll.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap 7b7663c4ef0bd85aea15","webpack:///./src/ui-scroll.js","webpack:///./src/modules/jqLiteExtras.js","webpack:///./src/modules/elementRoutines.js","webpack:///./src/modules/buffer.js","webpack:///./src/modules/viewport.js","webpack:///./src/modules/padding.js","webpack:///./src/modules/adapter.js"],"names":["angular","module","constant","run","JQLiteExtras","window","jQuery","registerFor","element","directive","restrict","controller","scope","container","viewport","forEach","children","child","tagName","toLowerCase","console","$injector","$rootScope","$timeout","$interval","$q","$parse","require","transclude","priority","terminal","link","$scope","$attr","controllers","linker","match","uiScroll","Error","parseNumericAttr","value","defaultValue","result","isNaN","BUFFER_MIN","BUFFER_DEFAULT","PADDING_MIN","PADDING_DEFAULT","MAX_VIEWPORT_DELAY","VIEWPORT_POLLING_INTERVAL","datasource","itemName","datasourceName","viewportController","bufferSize","Math","max","padding","startIndex","ridActual","pending","elementRoutines","buffer","adapter","doAdjust","reload","isDatasourceValid","Object","prototype","toString","call","get","onRenderHandlers","onRenderHandlersRunner","handler","persistDatasourceIndex","propName","getter","Number","isInteger","filter","id","push","defineDatasourceIndex","propUserName","descriptor","getOwnPropertyDescriptor","set","defineProperty","length","topPaddingHeightOld","topDataPos","adjustPaddings","onAfterMinIndexSet","fetchNext","success","next","index","append","item","count","fetchPrevious","first","prepend","initialize","tryCount","applyContainerStyle","timer","cancel","clone","createPaddingElements","$destroy","remove","$on","unbindEvents","unbind","wheelHandler","bind","isInvalid","rid","$$destroyed","bindEvents","resizeAndScrollHandler","resetTopPadding","resetBottomPadding","arguments","reset","isElementVisible","wrapper","height","offsetParent","visibilityWatcher","unregisterVisibilityWatcher","insertWrapperContent","insertAfter","createElement","insertElement","$watch","hideElement","promises","sibling","undefined","transform","tdInitializer","uiScrollTdInitializer","linking","onLink","updateDOM","toBePrepended","toBeRemoved","inserted","i","op","unshift","concat","insertElementAnimated","removeItem","$index","prepended","removed","animated","updatePaddings","updates","all","then","enqueueFetch","shouldLoadBottom","effectiveHeight","loading","fetch","shouldLoadTop","processUpdates","$$phase","$digest","showElement","w","calculateProperties","doAdjustAfterFetch","onAfterPrepend","shift","eof","clipTop","bof","clipBottom","isLoading","disabled","event","scrollTop","yMax","scrollHeight","clientHeight","preventDefault","convertToPx","css","getStyle","isWindow","name","self","elem","nodeType","style","obj","document","location","alert","setInterval","scrollTo","direction","top","left","method","prop","preserve","isValueDefined","documentElement","getComputedStyle","parseFloat","currentStyle","rs","rsLeft","core_pnum","source","rnumnonpx","RegExp","test","runtimeStyle","pixelLeft","getMeasurements","measure","base","borderA","borderB","computedMarginA","computedMarginB","computedStyle","dirA","dirB","marginA","marginB","paddingA","paddingB","width","border","margin","offsetWidth","offsetHeight","getWidthHeight","measurements","outer","outerfull","before","newElem","j","parent","ref","contents","after","outerHTML","outerHeight","option","outerWidth","offset","docElem","win","box","doc","ownerDocument","getBoundingClientRect","defaultView","parentWindow","pageYOffset","clientTop","pageXOffset","scrollLeft","clientLeft","key","hideClassToken","addCSSRule","sheet","selector","rules","insertRule","addRule","ElementRoutines","$animate","has","isAngularVersionLessThen1_3","version","major","minor","styleSheets","addClass","removeClass","newElement","previousElement","deferred","defer","enter","resolve","promise","removeElement","leave","ScrollBuffer","create","Array","assign","size","minIndex","maxIndex","minIndexUser","maxIndexUser","items","insert","reverse","min","operation","isTop","splice","arg1","arg2","indexOf","_op","getAbsMinIndex","incrementMinIndex","decrementMaxIndex","removeElementAnimated","getAbsMaxIndex","elements","MAX_VALUE","bottom","NEGATIVE_INFINITY","Viewport","topPadding","bottomPadding","bufferPadding","getScope","template","bottomDataPos","bottomVisiblePos","topVisiblePos","e","overage","overageHeight","itemHeight","emptySpaceHeight","cache","add","visibleItemsHeight","reduce","summ","topPaddingHeight","topCount","bottomPaddingHeight","bottomCount","totalHeight","averageItemHeight","adjustTopPadding","adjustBottomPadding","topPaddingHeightAdd","bottomPaddingHeightAdd","diff","paddingHeight","clear","removeCacheItem","CacheProto","sort","a","b","argument","_isTop","Cache","instance","apply","setPrototypeOf","getOwnPropertyNames","methodName","generateElement","Node","ELEMENT_NODE","table","find","Padding","Adapter","viewportScope","startScope","$parent","publicContext","assignAdapter","generatePublicContext","adapterAttr","replace","adapterOnScope","error","message","publicMethods","publicProps","property","attr","newItems","applyUpdatesFunc","applyUpdatesIndex","cb","slice","applyUpdate","_index","isArray","position","some","newItem","rowTop","topHeight","topDone","bottomDone","itemTop","isEOF"],"mappings":"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","file":"ui-scroll.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 7b7663c4ef0bd85aea15","import JQLiteExtras from './modules/jqLiteExtras';\r\nimport ElementRoutines from './modules/elementRoutines.js';\r\nimport ScrollBuffer from './modules/buffer.js';\r\nimport Viewport from './modules/viewport.js';\r\nimport Adapter from './modules/adapter.js';\r\n\r\nangular.module('ui.scroll', [])\r\n\r\n .constant('JQLiteExtras', JQLiteExtras)\r\n .run(['JQLiteExtras', (JQLiteExtras) =>\r\n !window.jQuery ? (new JQLiteExtras()).registerFor(angular.element) : null\r\n ])\r\n\r\n .directive('uiScrollViewport', function () {\r\n return {\r\n restrict: 'A',\r\n controller: [\r\n '$scope',\r\n '$element',\r\n function (scope, element) {\r\n this.container = element;\r\n this.viewport = element;\r\n this.scope = scope;\r\n\r\n angular.forEach(element.children(), child => {\r\n if (child.tagName.toLowerCase() === 'tbody') {\r\n this.viewport = angular.element(child);\r\n }\r\n });\r\n\r\n return this;\r\n }\r\n ]\r\n };\r\n })\r\n\r\n .directive('uiScroll', [\r\n '$log',\r\n '$injector',\r\n '$rootScope',\r\n '$timeout',\r\n '$interval',\r\n '$q',\r\n '$parse',\r\n function (console, $injector, $rootScope, $timeout, $interval, $q, $parse) {\r\n\r\n return {\r\n require: ['?^uiScrollViewport'],\r\n restrict: 'A',\r\n transclude: 'element',\r\n priority: 1000,\r\n terminal: true,\r\n link: link\r\n };\r\n\r\n function link($scope, element, $attr, controllers, linker) {\r\n const match = $attr.uiScroll.match(/^\\s*(\\w+)\\s+in\\s+([(\\w|\\$)\\.]+)\\s*$/);\r\n if (!match) {\r\n throw new Error('Expected uiScroll in form of \\'_item_ in _datasource_\\' but got \\'' + $attr.uiScroll + '\\'');\r\n }\r\n\r\n function parseNumericAttr(value, defaultValue) {\r\n const result = $parse(value)($scope);\r\n return isNaN(result) ? defaultValue : result;\r\n }\r\n\r\n const BUFFER_MIN = 3;\r\n const BUFFER_DEFAULT = 10;\r\n const PADDING_MIN = 0.3;\r\n const PADDING_DEFAULT = 0.5;\r\n const MAX_VIEWPORT_DELAY = 500;\r\n const VIEWPORT_POLLING_INTERVAL = 50;\r\n\r\n let datasource = null;\r\n const itemName = match[1];\r\n const datasourceName = match[2];\r\n const viewportController = controllers[0];\r\n const bufferSize = Math.max(BUFFER_MIN, parseNumericAttr($attr.bufferSize, BUFFER_DEFAULT));\r\n const padding = Math.max(PADDING_MIN, parseNumericAttr($attr.padding, PADDING_DEFAULT));\r\n let startIndex = parseNumericAttr($attr.startIndex, 1);\r\n let ridActual = 0; // current data revision id\r\n let pending = [];\r\n\r\n const elementRoutines = new ElementRoutines($injector, $q);\r\n const buffer = new ScrollBuffer(elementRoutines, bufferSize, startIndex);\r\n const viewport = new Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding);\r\n const adapter = new Adapter($scope, $parse, $attr, viewport, buffer, doAdjust, reload);\r\n\r\n if (viewportController) {\r\n viewportController.adapter = adapter;\r\n }\r\n\r\n const isDatasourceValid = () =>\r\n Object.prototype.toString.call(datasource) === '[object Object]' && typeof datasource.get === 'function';\r\n\r\n datasource = $parse(datasourceName)($scope); // try to get datasource on scope\r\n if (!isDatasourceValid()) {\r\n datasource = $injector.get(datasourceName); // try to inject datasource as service\r\n if (!isDatasourceValid()) {\r\n throw new Error(datasourceName + ' is not a valid datasource');\r\n }\r\n }\r\n\r\n let onRenderHandlers = [];\r\n function onRenderHandlersRunner() {\r\n onRenderHandlers.forEach(handler => handler.run());\r\n onRenderHandlers = [];\r\n }\r\n function persistDatasourceIndex(datasource, propName) {\r\n let getter;\r\n // need to postpone min/maxIndexUser processing if the view is empty\r\n if(Number.isInteger(datasource[propName])) {\r\n getter = datasource[propName];\r\n if(Number.isInteger(getter)) {\r\n onRenderHandlers = onRenderHandlers.filter(handler => handler.id !== propName);\r\n onRenderHandlers.push({\r\n id: propName,\r\n run: () => datasource[propName] = getter\r\n });\r\n }\r\n }\r\n }\r\n\r\n function defineDatasourceIndex(datasource, propName, propUserName) {\r\n const descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\r\n if (descriptor && (descriptor.set || descriptor.get)) {\r\n return;\r\n }\r\n let getter;\r\n persistDatasourceIndex(datasource, propName);\r\n Object.defineProperty(datasource, propName, {\r\n set: (value) => {\r\n getter = value;\r\n if(pending.length && !buffer.length) {\r\n persistDatasourceIndex(datasource, propName);\r\n return;\r\n }\r\n buffer[propUserName] = value;\r\n const topPaddingHeightOld = viewport.topDataPos();\r\n viewport.adjustPaddings();\r\n if (propName === 'minIndex') {\r\n viewport.onAfterMinIndexSet(topPaddingHeightOld);\r\n }\r\n },\r\n get: () => getter\r\n });\r\n }\r\n\r\n defineDatasourceIndex(datasource, 'minIndex', 'minIndexUser');\r\n defineDatasourceIndex(datasource, 'maxIndex', 'maxIndexUser');\r\n\r\n const fetchNext = (datasource.get.length !== 2) ?\r\n (success) => datasource.get(buffer.next, bufferSize, success) :\r\n (success) => {\r\n datasource.get({\r\n index: buffer.next,\r\n append: buffer.length ? buffer[buffer.length - 1].item : void 0,\r\n count: bufferSize\r\n }, success);\r\n };\r\n\r\n const fetchPrevious = (datasource.get.length !== 2) ?\r\n (success) => datasource.get(buffer.first - bufferSize, bufferSize, success) :\r\n (success) => {\r\n datasource.get({\r\n index: buffer.first - bufferSize,\r\n prepend: buffer.length ? buffer[0].item : void 0,\r\n count: bufferSize\r\n }, success);\r\n };\r\n\r\n const initialize = () => {\r\n let tryCount = 0;\r\n if(!viewport.applyContainerStyle()) {\r\n const timer = $interval(() => {\r\n tryCount++;\r\n if(viewport.applyContainerStyle()) {\r\n $interval.cancel(timer);\r\n doAdjust();\r\n }\r\n if(tryCount * VIEWPORT_POLLING_INTERVAL >= MAX_VIEWPORT_DELAY) {\r\n $interval.cancel(timer);\r\n throw Error(`ui-scroll directive requires a viewport with non-zero height in ${MAX_VIEWPORT_DELAY}ms`);\r\n }\r\n }, VIEWPORT_POLLING_INTERVAL);\r\n }\r\n else {\r\n doAdjust();\r\n }\r\n };\r\n\r\n /**\r\n * Build padding elements\r\n *\r\n * Calling linker is the only way I found to get access to the tag name of the template\r\n * to prevent the directive scope from pollution a new scope is created and destroyed\r\n * right after the builder creation is completed\r\n */\r\n linker((clone, scope) => {\r\n viewport.createPaddingElements(clone[0]);\r\n // we do not include the clone in the DOM. It means that the nested directives will not\r\n // be able to reach the parent directives, but in this case it is intentional because we\r\n // created the clone to access the template tag name\r\n scope.$destroy();\r\n clone.remove();\r\n });\r\n\r\n $scope.$on('$destroy', () => {\r\n unbindEvents();\r\n viewport.unbind('mousewheel', wheelHandler);\r\n });\r\n\r\n viewport.bind('mousewheel', wheelHandler);\r\n\r\n initialize();\r\n\r\n /* Private function definitions */\r\n\r\n function isInvalid(rid) {\r\n return (rid && rid !== ridActual) || $scope.$$destroyed;\r\n }\r\n\r\n function bindEvents() {\r\n viewport.bind('resize', resizeAndScrollHandler);\r\n viewport.bind('scroll', resizeAndScrollHandler);\r\n }\r\n\r\n function unbindEvents() {\r\n viewport.unbind('resize', resizeAndScrollHandler);\r\n viewport.unbind('scroll', resizeAndScrollHandler);\r\n }\r\n\r\n function reload() {\r\n viewport.resetTopPadding();\r\n viewport.resetBottomPadding();\r\n if (arguments.length) {\r\n startIndex = arguments[0];\r\n }\r\n buffer.reset(startIndex);\r\n persistDatasourceIndex(datasource, 'minIndex');\r\n persistDatasourceIndex(datasource, 'maxIndex');\r\n doAdjust();\r\n }\r\n\r\n function isElementVisible(wrapper) {\r\n return wrapper.element.height() && wrapper.element[0].offsetParent;\r\n }\r\n\r\n function visibilityWatcher(wrapper) {\r\n if (isElementVisible(wrapper)) {\r\n buffer.forEach((item) => {\r\n if (typeof item.unregisterVisibilityWatcher === 'function') {\r\n item.unregisterVisibilityWatcher();\r\n delete item.unregisterVisibilityWatcher;\r\n }\r\n });\r\n if (!pending.length) {\r\n $timeout(() => doAdjust());\r\n }\r\n }\r\n }\r\n\r\n function insertWrapperContent(wrapper, insertAfter) {\r\n createElement(wrapper, insertAfter, viewport.insertElement);\r\n if (!isElementVisible(wrapper)) {\r\n wrapper.unregisterVisibilityWatcher = wrapper.scope.$watch(() => visibilityWatcher(wrapper));\r\n }\r\n elementRoutines.hideElement(wrapper); // hide inserted elements before data binding\r\n }\r\n\r\n function createElement(wrapper, insertAfter, insertElement) {\r\n let promises = null;\r\n const sibling = (insertAfter > 0) ? buffer[insertAfter - 1].element : undefined;\r\n linker((clone, scope) => {\r\n promises = insertElement(clone, sibling);\r\n wrapper.element = clone;\r\n wrapper.scope = scope;\r\n scope[itemName] = wrapper.item;\r\n });\r\n // ui-scroll-grid apply\r\n if (adapter.transform) {\r\n const tdInitializer = wrapper.scope.uiScrollTdInitializer;\r\n if (tdInitializer && tdInitializer.linking) {\r\n adapter.transform(wrapper.scope, wrapper.element);\r\n } else {\r\n wrapper.scope.uiScrollTdInitializer = {\r\n onLink: () => adapter.transform(wrapper.scope, wrapper.element),\r\n scope: wrapper.scope\r\n };\r\n }\r\n }\r\n return promises;\r\n }\r\n\r\n function updateDOM() {\r\n let promises = [];\r\n const toBePrepended = [];\r\n const toBeRemoved = [];\r\n const inserted = [];\r\n\r\n buffer.forEach((wrapper, i) => {\r\n switch (wrapper.op) {\r\n case 'prepend':\r\n toBePrepended.unshift(wrapper);\r\n break;\r\n case 'append':\r\n insertWrapperContent(wrapper, i);\r\n wrapper.op = 'none';\r\n inserted.push(wrapper);\r\n break;\r\n case 'insert':\r\n promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated));\r\n wrapper.op = 'none';\r\n inserted.push(wrapper);\r\n break;\r\n case 'remove':\r\n toBeRemoved.push(wrapper);\r\n }\r\n });\r\n\r\n toBeRemoved.forEach((wrapper) => promises = promises.concat(viewport.removeItem(wrapper)));\r\n\r\n if (toBePrepended.length)\r\n toBePrepended.forEach((wrapper) => {\r\n insertWrapperContent(wrapper);\r\n wrapper.op = 'none';\r\n });\r\n\r\n buffer.forEach((item, i) => item.scope.$index = buffer.first + i);\r\n\r\n return {\r\n prepended: toBePrepended,\r\n removed: toBeRemoved,\r\n inserted: inserted,\r\n animated: promises\r\n };\r\n\r\n }\r\n\r\n function updatePaddings(rid, updates) {\r\n // schedule another doAdjust after animation completion\r\n if (updates.animated.length) {\r\n $q.all(updates.animated).then(() => {\r\n viewport.adjustPaddings();\r\n doAdjust(rid);\r\n });\r\n } else {\r\n viewport.adjustPaddings();\r\n }\r\n }\r\n\r\n function enqueueFetch(rid, updates) {\r\n if (viewport.shouldLoadBottom()) {\r\n if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\r\n // this means that at least one item appended in the last batch has height > 0\r\n if (pending.push(true) === 1) {\r\n adapter.loading(true);\r\n fetch(rid);\r\n }\r\n }\r\n } else if (viewport.shouldLoadTop()) {\r\n if ((!updates || buffer.effectiveHeight(updates.prepended) > 0) || pending[0]) {\r\n // this means that at least one item appended in the last batch has height > 0\r\n // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\r\n // BTW there will always be at least 1 element in the pending array because bottom is fetched first\r\n if (pending.push(false) === 1) {\r\n adapter.loading(true);\r\n fetch(rid);\r\n }\r\n }\r\n }\r\n }\r\n\r\n function processUpdates() {\r\n const updates = updateDOM();\r\n\r\n // We need the item bindings to be processed before we can do adjustments\r\n !$scope.$$phase && !$rootScope.$$phase && $scope.$digest();\r\n\r\n updates.inserted.forEach(w => elementRoutines.showElement(w));\r\n updates.prepended.forEach(w => elementRoutines.showElement(w));\r\n return updates;\r\n }\r\n\r\n function doAdjust(rid) {\r\n if (!rid) { // dismiss pending requests\r\n pending = [];\r\n rid = ++ridActual;\r\n }\r\n\r\n const updates = processUpdates();\r\n\r\n if (isInvalid(rid)) {\r\n return;\r\n }\r\n\r\n updatePaddings(rid, updates);\r\n enqueueFetch(rid);\r\n\r\n if (!pending.length) {\r\n adapter.calculateProperties();\r\n }\r\n }\r\n\r\n function doAdjustAfterFetch(rid) {\r\n const updates = processUpdates();\r\n\r\n viewport.onAfterPrepend(updates);\r\n\r\n if (isInvalid(rid)) {\r\n return;\r\n }\r\n\r\n updatePaddings(rid, updates);\r\n onRenderHandlersRunner();\r\n enqueueFetch(rid, updates);\r\n pending.shift();\r\n\r\n if (pending.length)\r\n fetch(rid);\r\n else {\r\n adapter.loading(false);\r\n bindEvents();\r\n adapter.calculateProperties();\r\n }\r\n }\r\n\r\n function fetch(rid) {\r\n if (pending[0]) {// scrolling down\r\n if (buffer.length && !viewport.shouldLoadBottom()) {\r\n doAdjustAfterFetch(rid);\r\n } else {\r\n fetchNext((result) => {\r\n if (isInvalid(rid)) {\r\n return;\r\n }\r\n\r\n if (result.length < bufferSize) {\r\n buffer.eof = true;\r\n }\r\n\r\n if (result.length > 0) {\r\n viewport.clipTop();\r\n buffer.append(result);\r\n }\r\n\r\n doAdjustAfterFetch(rid);\r\n });\r\n }\r\n } else { // scrolling up\r\n if (buffer.length && !viewport.shouldLoadTop()) {\r\n doAdjustAfterFetch(rid);\r\n } else {\r\n fetchPrevious((result) => {\r\n if (isInvalid(rid)) {\r\n return;\r\n }\r\n\r\n if (result.length < bufferSize) {\r\n buffer.bof = true;\r\n // log 'bof is reached'\r\n }\r\n\r\n if (result.length > 0) {\r\n if (buffer.length) {\r\n viewport.clipBottom();\r\n }\r\n buffer.prepend(result);\r\n }\r\n\r\n doAdjustAfterFetch(rid);\r\n });\r\n }\r\n }\r\n }\r\n\r\n function resizeAndScrollHandler() {\r\n if (!$rootScope.$$phase && !adapter.isLoading && !adapter.disabled) {\r\n\r\n enqueueFetch(ridActual);\r\n\r\n if (pending.length) {\r\n unbindEvents();\r\n } else {\r\n adapter.calculateProperties();\r\n !$scope.$$phase && $scope.$digest();\r\n }\r\n }\r\n }\r\n\r\n function wheelHandler(event) {\r\n if (!adapter.disabled) {\r\n const scrollTop = viewport[0].scrollTop;\r\n const yMax = viewport[0].scrollHeight - viewport[0].clientHeight;\r\n\r\n if ((scrollTop === 0 && !buffer.bof) || (scrollTop === yMax && !buffer.eof)) {\r\n event.preventDefault();\r\n }\r\n }\r\n }\r\n }\r\n\r\n }\r\n ]);\n\n\n// WEBPACK FOOTER //\n// ./src/ui-scroll.js","/*!\r\n globals: angular, window\r\n List of used element methods available in JQuery but not in JQuery Lite\r\n element.before(elem)\r\n element.height()\r\n element.outerHeight(true)\r\n element.height(value) = only for Top/Bottom padding elements\r\n element.scrollTop()\r\n element.scrollTop(value)\r\n */\r\n\r\nexport default class JQLiteExtras {\r\n\r\n registerFor(element) {\r\n let convertToPx, css, getStyle, isWindow;\r\n // angular implementation blows up if elem is the window\r\n css = angular.element.prototype.css;\r\n\r\n element.prototype.css = function (name, value) {\r\n let self = this;\r\n let elem = self[0];\r\n if (!(!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style)) {\r\n return css.call(self, name, value);\r\n }\r\n };\r\n\r\n // as defined in angularjs v1.0.5\r\n isWindow = (obj) => obj && obj.document && obj.location && obj.alert && obj.setInterval;\r\n\r\n function scrollTo(self, direction, value) {\r\n let elem = self[0];\r\n let [method, prop, preserve] = {\r\n top: [\r\n 'scrollTop',\r\n 'pageYOffset',\r\n 'scrollLeft'\r\n ],\r\n left: [\r\n 'scrollLeft',\r\n 'pageXOffset',\r\n 'scrollTop'\r\n ]\r\n }[direction];\r\n\r\n const isValueDefined = typeof value !== 'undefined';\r\n if (isWindow(elem)) {\r\n if (isValueDefined) {\r\n return elem.scrollTo(self[preserve].call(self), value);\r\n }\r\n return (prop in elem) ? elem[prop] : elem.document.documentElement[method];\r\n } else {\r\n if (isValueDefined) {\r\n elem[method] = value;\r\n }\r\n return elem[method];\r\n }\r\n }\r\n\r\n if (window.getComputedStyle) {\r\n getStyle = (elem) => window.getComputedStyle(elem, null);\r\n convertToPx = (elem, value) => parseFloat(value);\r\n } else {\r\n getStyle = (elem) => elem.currentStyle;\r\n convertToPx = (elem, value) => {\r\n let left, result, rs, rsLeft, style;\r\n let core_pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\r\n let rnumnonpx = new RegExp('^(' + core_pnum + ')(?!px)[a-z%]+$', 'i');\r\n\r\n if (!rnumnonpx.test(value)) {\r\n return parseFloat(value);\r\n }\r\n\r\n // ported from JQuery\r\n style = elem.style;\r\n left = style.left;\r\n rs = elem.runtimeStyle;\r\n rsLeft = rs && rs.left;\r\n if (rs) {\r\n rs.left = style.left;\r\n }\r\n // put in the new values to get a computed style out\r\n style.left = value;\r\n result = style.pixelLeft;\r\n style.left = left;\r\n if (rsLeft) {\r\n rs.left = rsLeft;\r\n }\r\n return result;\r\n };\r\n }\r\n\r\n function getMeasurements(elem, measure) {\r\n let base, borderA, borderB, computedMarginA, computedMarginB, computedStyle, dirA, dirB, marginA, marginB, paddingA, paddingB;\r\n\r\n if (isWindow(elem)) {\r\n base = document.documentElement[{height: 'clientHeight', width: 'clientWidth'}[measure]];\r\n\r\n return {\r\n base: base,\r\n padding: 0,\r\n border: 0,\r\n margin: 0\r\n };\r\n }\r\n\r\n // Start with offset property\r\n [\r\n base,\r\n dirA,\r\n dirB\r\n ] = {\r\n width: [\r\n elem.offsetWidth,\r\n 'Left',\r\n 'Right'\r\n ],\r\n height: [\r\n elem.offsetHeight,\r\n 'Top',\r\n 'Bottom'\r\n ]\r\n }[measure];\r\n\r\n computedStyle = getStyle(elem);\r\n paddingA = convertToPx(elem, computedStyle['padding' + dirA]) || 0;\r\n paddingB = convertToPx(elem, computedStyle['padding' + dirB]) || 0;\r\n borderA = convertToPx(elem, computedStyle['border' + dirA + 'Width']) || 0;\r\n borderB = convertToPx(elem, computedStyle['border' + dirB + 'Width']) || 0;\r\n computedMarginA = computedStyle['margin' + dirA];\r\n computedMarginB = computedStyle['margin' + dirB];\r\n\r\n // I do not care for width for now, so this hack is irrelevant\r\n // if ( !supportsPercentMargin )\r\n // computedMarginA = hackPercentMargin( elem, computedStyle, computedMarginA )\r\n // computedMarginB = hackPercentMargin( elem, computedStyle, computedMarginB )\r\n marginA = convertToPx(elem, computedMarginA) || 0;\r\n marginB = convertToPx(elem, computedMarginB) || 0;\r\n\r\n return {\r\n base: base,\r\n padding: paddingA + paddingB,\r\n border: borderA + borderB,\r\n margin: marginA + marginB\r\n };\r\n }\r\n\r\n function getWidthHeight(elem, direction, measure) {\r\n let computedStyle, result;\r\n\r\n let measurements = getMeasurements(elem, direction);\r\n\r\n if (measurements.base > 0) {\r\n return {\r\n base: measurements.base - measurements.padding - measurements.border,\r\n outer: measurements.base,\r\n outerfull: measurements.base + measurements.margin\r\n }[measure];\r\n }\r\n\r\n // Fall back to computed then uncomputed css if necessary\r\n computedStyle = getStyle(elem);\r\n result = computedStyle[direction];\r\n\r\n if (result < 0 || result === null) {\r\n result = elem.style[direction] || 0;\r\n }\r\n\r\n // Normalize \"\", auto, and prepare for extra\r\n result = parseFloat(result) || 0;\r\n\r\n return {\r\n base: result - measurements.padding - measurements.border,\r\n outer: result,\r\n outerfull: result + measurements.padding + measurements.border + measurements.margin\r\n }[measure];\r\n }\r\n\r\n // define missing methods\r\n return angular.forEach({\r\n before(newElem) {\r\n var children, elem, i, j, parent, ref, self;\r\n self = this;\r\n elem = self[0];\r\n parent = self.parent();\r\n children = parent.contents();\r\n if (children[0] === elem) {\r\n return parent.prepend(newElem);\r\n } else {\r\n for (i = j = 1, ref = children.length - 1; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {\r\n if (children[i] === elem) {\r\n angular.element(children[i - 1]).after(newElem);\r\n return;\r\n }\r\n }\r\n throw new Error('invalid DOM structure ' + elem.outerHTML);\r\n }\r\n },\r\n height (value){\r\n var self;\r\n self = this;\r\n if (typeof value !== 'undefined') {\r\n if (Number.isInteger(value)) {\r\n value = value + 'px';\r\n }\r\n return css.call(self, 'height', value);\r\n } else {\r\n return getWidthHeight(this[0], 'height', 'base');\r\n }\r\n },\r\n outerHeight(option) {\r\n return getWidthHeight(this[0], 'height', option ? 'outerfull' : 'outer');\r\n },\r\n outerWidth(option) {\r\n return getWidthHeight(this[0], 'width', option ? 'outerfull' : 'outer');\r\n },\r\n\r\n /*\r\n The offset setter method is not implemented\r\n */\r\n offset(value) {\r\n let docElem, win;\r\n let self = this;\r\n let box = {\r\n top: 0,\r\n left: 0\r\n };\r\n let elem = self[0];\r\n let doc = elem && elem.ownerDocument;\r\n\r\n if (arguments.length) {\r\n if (value === undefined) {\r\n return self;\r\n }\r\n // TODO: implement setter\r\n throw new Error('offset setter method is not implemented');\r\n }\r\n\r\n if (!doc) {\r\n return;\r\n }\r\n\r\n docElem = doc.documentElement;\r\n\r\n // TODO: Make sure it's not a disconnected DOM node\r\n\r\n if (elem.getBoundingClientRect != null) {\r\n box = elem.getBoundingClientRect();\r\n }\r\n\r\n win = doc.defaultView || doc.parentWindow;\r\n\r\n return {\r\n top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),\r\n left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0)\r\n };\r\n },\r\n scrollTop(value) {\r\n return scrollTo(this, 'top', value);\r\n },\r\n scrollLeft(value) {\r\n return scrollTo(this, 'left', value);\r\n }\r\n }, (value, key) => {\r\n if (!element.prototype[key]) {\r\n return element.prototype[key] = value;\r\n }\r\n });\r\n }\r\n\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/jqLiteExtras.js","const hideClassToken = 'ng-ui-scroll-hide';\r\n\r\nfunction addCSSRule(sheet, selector, rules, index) {\r\n if('insertRule' in sheet) {\r\n sheet.insertRule(selector + '{' + rules + '}', index);\r\n }\r\n else if('addRule' in sheet) {\r\n sheet.addRule(selector, rules, index);\r\n }\r\n}\r\n\r\nexport default class ElementRoutines {\r\n\r\n constructor($injector, $q) {\r\n this.$animate = ($injector.has && $injector.has('$animate')) ? $injector.get('$animate') : null;\r\n this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3;\r\n this.$q = $q;\r\n addCSSRule(document.styleSheets[0], '.' + hideClassToken, 'display: none');\r\n }\r\n\r\n hideElement(wrapper) {\r\n wrapper.element.addClass(hideClassToken);\r\n }\r\n\r\n showElement(wrapper) {\r\n wrapper.element.removeClass(hideClassToken);\r\n }\r\n\r\n insertElement(newElement, previousElement) {\r\n previousElement.after(newElement);\r\n return [];\r\n }\r\n\r\n removeElement(wrapper) {\r\n wrapper.element.remove();\r\n wrapper.scope.$destroy();\r\n return [];\r\n }\r\n\r\n insertElementAnimated(newElement, previousElement) {\r\n if (!this.$animate) {\r\n return this.insertElement(newElement, previousElement);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n // no need for parent - previous element is never null\r\n this.$animate.enter(newElement, null, previousElement, () => deferred.resolve());\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n // no need for parent - previous element is never null\r\n return [this.$animate.enter(newElement, null, previousElement)];\r\n }\r\n\r\n removeElementAnimated(wrapper) {\r\n if (!this.$animate) {\r\n return this.removeElement(wrapper);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n this.$animate.leave(wrapper.element, () => {\r\n wrapper.scope.$destroy();\r\n return deferred.resolve();\r\n });\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n return [(this.$animate.leave(wrapper.element)).then(() => wrapper.scope.$destroy())];\r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/elementRoutines.js","export default function ScrollBuffer(elementRoutines, bufferSize, startIndex) {\r\n const buffer = Object.create(Array.prototype);\r\n\r\n Object.assign(buffer, {\r\n size: bufferSize,\r\n\r\n reset(startIndex) {\r\n buffer.remove(0, buffer.length);\r\n buffer.eof = false;\r\n buffer.bof = false;\r\n buffer.first = startIndex;\r\n buffer.next = startIndex;\r\n buffer.minIndex = startIndex;\r\n buffer.maxIndex = startIndex;\r\n buffer.minIndexUser = null;\r\n buffer.maxIndexUser = null;\r\n },\r\n\r\n append(items) {\r\n items.forEach((item) => {\r\n ++buffer.next;\r\n buffer.insert('append', item);\r\n });\r\n buffer.maxIndex = buffer.eof ? buffer.next - 1 : Math.max(buffer.next - 1, buffer.maxIndex);\r\n },\r\n\r\n prepend(items) {\r\n items.reverse().forEach((item) => {\r\n --buffer.first;\r\n buffer.insert('prepend', item);\r\n });\r\n buffer.minIndex = buffer.bof ? buffer.minIndex = buffer.first : Math.min(buffer.first, buffer.minIndex);\r\n },\r\n\r\n /**\r\n * inserts wrapped element in the buffer\r\n * the first argument is either operation keyword (see below) or a number for operation 'insert'\r\n * for insert the number is the index for the buffer element the new one have to be inserted after\r\n * operations: 'append', 'prepend', 'insert', 'remove', 'update', 'none'\r\n */\r\n insert(operation, item, isTop) {\r\n const wrapper = {\r\n item: item\r\n };\r\n\r\n if (operation % 1 === 0) {// it is an insert\r\n wrapper.op = 'insert';\r\n buffer.splice(operation, 0, wrapper);\r\n if(isTop) {\r\n buffer.first--;\r\n }\r\n else {\r\n buffer.next++;\r\n }\r\n } else {\r\n wrapper.op = operation;\r\n switch (operation) {\r\n case 'append':\r\n buffer.push(wrapper);\r\n break;\r\n case 'prepend':\r\n buffer.unshift(wrapper);\r\n break;\r\n }\r\n }\r\n },\r\n\r\n // removes elements from buffer\r\n remove(arg1, arg2) {\r\n if (Number.isInteger(arg1)) {\r\n // removes items from arg1 (including) through arg2 (excluding)\r\n for (let i = arg1; i < arg2; i++) {\r\n elementRoutines.removeElement(buffer[i]);\r\n }\r\n return buffer.splice(arg1, arg2 - arg1);\r\n }\r\n // removes single item(wrapper) from the buffer\r\n buffer.splice(buffer.indexOf(arg1), 1);\r\n if(arg1._op === 'isTop' && buffer.first === this.getAbsMinIndex()) {\r\n this.incrementMinIndex();\r\n }\r\n else {\r\n this.decrementMaxIndex();\r\n }\r\n if(arg1._op === 'isTop') {\r\n buffer.first++;\r\n }\r\n else {\r\n buffer.next--;\r\n }\r\n if(!buffer.length) {\r\n buffer.first = 1;\r\n buffer.next = 1;\r\n }\r\n\r\n return elementRoutines.removeElementAnimated(arg1);\r\n },\r\n\r\n incrementMinIndex() {\r\n if(buffer.minIndexUser !== null) {\r\n if(buffer.minIndex > buffer.minIndexUser) {\r\n buffer.minIndexUser++;\r\n return;\r\n }\r\n if(buffer.minIndex === buffer.minIndexUser) {\r\n buffer.minIndexUser++;\r\n }\r\n }\r\n buffer.minIndex++;\r\n },\r\n\r\n decrementMaxIndex() {\r\n if(buffer.maxIndexUser !== null && buffer.maxIndex <= buffer.maxIndexUser) {\r\n buffer.maxIndexUser--;\r\n }\r\n buffer.maxIndex--;\r\n },\r\n\r\n getAbsMinIndex() {\r\n if(buffer.minIndexUser !== null) {\r\n return Math.min(buffer.minIndexUser, buffer.minIndex);\r\n }\r\n return buffer.minIndex;\r\n },\r\n\r\n getAbsMaxIndex() {\r\n if(buffer.maxIndexUser !== null) {\r\n return Math.max(buffer.maxIndexUser, buffer.maxIndex);\r\n }\r\n return buffer.maxIndex;\r\n },\r\n\r\n effectiveHeight(elements) {\r\n if (!elements.length) {\r\n return 0;\r\n }\r\n let top = Number.MAX_VALUE;\r\n let bottom = Number.NEGATIVE_INFINITY;\r\n elements.forEach((wrapper) => {\r\n if (wrapper.element[0].offsetParent) {\r\n // element style is not display:none\r\n top = Math.min(top, wrapper.element.offset().top);\r\n bottom = Math.max(bottom, wrapper.element.offset().top + wrapper.element.outerHeight(true));\r\n }\r\n });\r\n return Math.max(0, bottom - top);\r\n }\r\n\r\n });\r\n\r\n buffer.reset(startIndex);\r\n\r\n return buffer;\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/buffer.js","import Padding from './padding';\r\n\r\nexport default function Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding) {\r\n let topPadding = null;\r\n let bottomPadding = null;\r\n const viewport = viewportController && viewportController.viewport ? viewportController.viewport : angular.element(window);\r\n const container = viewportController && viewportController.container ? viewportController.container : undefined;\r\n const scope = viewportController && viewportController.scope ? viewportController.scope : $rootScope;\r\n\r\n viewport.css({\r\n 'overflow-anchor': 'none',\r\n 'overflow-y': 'auto',\r\n 'display': 'block'\r\n });\r\n\r\n function bufferPadding() {\r\n return viewport.outerHeight() * padding; // some extra space to initiate preload\r\n }\r\n\r\n Object.assign(viewport, {\r\n getScope() {\r\n return scope;\r\n },\r\n\r\n createPaddingElements(template) {\r\n topPadding = new Padding(template);\r\n bottomPadding = new Padding(template);\r\n element.before(topPadding.element);\r\n element.after(bottomPadding.element);\r\n topPadding.height(0);\r\n bottomPadding.height(0);\r\n },\r\n\r\n applyContainerStyle() {\r\n if (!container) {\r\n return true;\r\n }\r\n if(container !== viewport) {\r\n viewport.css('height', window.getComputedStyle(container[0]).height);\r\n }\r\n return viewport.height() > 0;\r\n },\r\n\r\n bottomDataPos() {\r\n let scrollHeight = viewport[0].scrollHeight;\r\n scrollHeight = scrollHeight != null ? scrollHeight : viewport[0].document.documentElement.scrollHeight;\r\n return scrollHeight - bottomPadding.height();\r\n },\r\n\r\n topDataPos() {\r\n return topPadding.height();\r\n },\r\n\r\n bottomVisiblePos() {\r\n return viewport.scrollTop() + viewport.outerHeight();\r\n },\r\n\r\n topVisiblePos() {\r\n return viewport.scrollTop();\r\n },\r\n\r\n insertElement(e, sibling) {\r\n return elementRoutines.insertElement(e, sibling || topPadding.element);\r\n },\r\n\r\n insertElementAnimated(e, sibling) {\r\n return elementRoutines.insertElementAnimated(e, sibling || topPadding.element);\r\n },\r\n\r\n shouldLoadBottom() {\r\n return !buffer.eof && viewport.bottomDataPos() < viewport.bottomVisiblePos() + bufferPadding();\r\n },\r\n\r\n clipBottom() {\r\n // clip the invisible items off the bottom\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.bottomDataPos() - viewport.bottomVisiblePos() - bufferPadding();\r\n\r\n for (let i = buffer.length - 1; i >= 0; i--) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n bottomPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n buffer.eof = false;\r\n buffer.remove(buffer.length - overage, buffer.length);\r\n buffer.next -= overage;\r\n viewport.adjustPaddings();\r\n }\r\n },\r\n\r\n shouldLoadTop() {\r\n return !buffer.bof && (viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding());\r\n },\r\n\r\n clipTop() {\r\n // clip the invisible items off the top\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\r\n\r\n for (let i = 0; i < buffer.length; i++) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n topPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n // we need to adjust top padding element before items are removed from top\r\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\r\n topPadding.height(topPadding.height() + overageHeight);\r\n buffer.bof = false;\r\n buffer.remove(0, overage);\r\n buffer.first += overage;\r\n }\r\n },\r\n\r\n adjustPaddings() {\r\n if (!buffer.length) {\r\n return;\r\n }\r\n\r\n // precise heights calculation based on items that are in buffer or that were in buffer once\r\n const visibleItemsHeight = buffer.reduce((summ, item) => summ + item.element.outerHeight(true), 0);\r\n\r\n let topPaddingHeight = 0, topCount = 0;\r\n topPadding.cache.forEach(item => {\r\n if(item.index < buffer.first) {\r\n topPaddingHeight += item.height;\r\n topCount++;\r\n }\r\n });\r\n\r\n let bottomPaddingHeight = 0, bottomCount = 0;\r\n bottomPadding.cache.forEach(item => {\r\n if(item.index >= buffer.next) {\r\n bottomPaddingHeight += item.height;\r\n bottomCount++;\r\n }\r\n });\r\n\r\n const totalHeight = visibleItemsHeight + topPaddingHeight + bottomPaddingHeight;\r\n const averageItemHeight = totalHeight / (topCount + bottomCount + buffer.length);\r\n\r\n // average heights calculation, items that have never been reached\r\n let adjustTopPadding = buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser;\r\n let adjustBottomPadding = buffer.maxIndexUser !== null && buffer.maxIndex < buffer.maxIndexUser;\r\n let topPaddingHeightAdd = adjustTopPadding ? (buffer.minIndex - buffer.minIndexUser) * averageItemHeight : 0;\r\n let bottomPaddingHeightAdd = adjustBottomPadding ? (buffer.maxIndexUser - buffer.maxIndex) * averageItemHeight : 0;\r\n\r\n // paddings combine adjustment\r\n topPadding.height(topPaddingHeight + topPaddingHeightAdd);\r\n bottomPadding.height(bottomPaddingHeight + bottomPaddingHeightAdd);\r\n },\r\n\r\n onAfterMinIndexSet(topPaddingHeightOld) {\r\n // additional scrollTop adjustment in case of datasource.minIndex external set\r\n if (buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser) {\r\n let diff = topPadding.height() - topPaddingHeightOld;\r\n viewport.scrollTop(viewport.scrollTop() + diff);\r\n while((diff -= viewport.scrollTop()) > 0) {\r\n bottomPadding.height(bottomPadding.height() + diff);\r\n viewport.scrollTop(viewport.scrollTop() + diff);\r\n }\r\n }\r\n },\r\n\r\n onAfterPrepend(updates) {\r\n if (!updates.prepended.length)\r\n return;\r\n const height = buffer.effectiveHeight(updates.prepended);\r\n const paddingHeight = topPadding.height() - height;\r\n if (paddingHeight >= 0) {\r\n topPadding.height(paddingHeight);\r\n }\r\n else {\r\n topPadding.height(0);\r\n viewport.scrollTop(viewport.scrollTop() - paddingHeight);\r\n }\r\n },\r\n\r\n resetTopPadding() {\r\n topPadding.height(0);\r\n topPadding.cache.clear();\r\n },\r\n\r\n resetBottomPadding() {\r\n bottomPadding.height(0);\r\n bottomPadding.cache.clear();\r\n },\r\n\r\n removeCacheItem(item, isTop) {\r\n topPadding.cache.remove(item, isTop);\r\n bottomPadding.cache.remove(item, isTop);\r\n },\r\n\r\n removeItem(item) {\r\n this.removeCacheItem(item);\r\n return buffer.remove(item);\r\n }\r\n });\r\n\r\n return viewport;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/viewport.js","// Can't just extend the Array, due to Babel does not support built-in classes extending\r\n// This solution was taken from https://stackoverflow.com/questions/46897414/es6-class-extends-array-workaround-for-es5-babel-transpile\r\nclass CacheProto {\r\n add(item) {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index === item.scope.$index) {\r\n this[i].height = item.element.outerHeight();\r\n return;\r\n }\r\n }\r\n this.push({\r\n index: item.scope.$index,\r\n height: item.element.outerHeight()\r\n });\r\n this.sort((a, b) => ((a.index < b.index) ? -1 : ((a.index > b.index) ? 1 : 0)));\r\n }\r\n\r\n remove(argument, _isTop) {\r\n const index = argument % 1 === 0 ? argument : argument.scope.$index;\r\n const isTop = argument % 1 === 0 ? _isTop : argument._op === 'isTop';\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index === index) {\r\n this.splice(i, 1);\r\n break;\r\n }\r\n }\r\n if(!isTop) {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index > index) {\r\n this[i].index--;\r\n }\r\n }\r\n }\r\n }\r\n\r\n clear() {\r\n this.length = 0;\r\n }\r\n}\r\n\r\nfunction Cache() {\r\n const instance = [];\r\n instance.push.apply(instance, arguments);\r\n Object.setPrototypeOf(instance, Cache.prototype);\r\n return instance;\r\n}\r\nCache.prototype = Object.create(Array.prototype);\r\nObject.getOwnPropertyNames(CacheProto.prototype).forEach(methodName =>\r\n Cache.prototype[methodName] = CacheProto.prototype[methodName]\r\n);\r\n\r\nfunction generateElement(template) {\r\n if(template.nodeType !== Node.ELEMENT_NODE) {\r\n throw new Error('ui-scroll directive requires an Element node for templating the view');\r\n }\r\n let element;\r\n switch (template.tagName.toLowerCase()) {\r\n case 'dl':\r\n throw new Error(`ui-scroll directive does not support <${template.tagName}> as a repeating tag: ${template.outerHTML}`);\r\n case 'tr':\r\n let table = angular.element('
');\r\n element = table.find('tr');\r\n break;\r\n case 'li':\r\n element = angular.element('
');\r\n break;\r\n default:\r\n element = angular.element('
');\r\n }\r\n return element;\r\n}\r\n\r\nclass Padding {\r\n constructor(template) {\r\n this.element = generateElement(template);\r\n this.cache = new Cache();\r\n }\r\n\r\n height() {\r\n return this.element.height.apply(this.element, arguments);\r\n }\r\n}\r\n\r\nexport default Padding;\n\n\n// WEBPACK FOOTER //\n// ./src/modules/padding.js","class Adapter {\r\n\r\n constructor($scope, $parse, $attr, viewport, buffer, doAdjust, reload) {\r\n this.$parse = $parse;\r\n this.$attr = $attr;\r\n this.viewport = viewport;\r\n this.buffer = buffer;\r\n\r\n this.doAdjust = doAdjust;\r\n this.reload = reload;\r\n\r\n this.isLoading = false;\r\n this.disabled = false;\r\n\r\n const viewportScope = viewport.getScope();\r\n this.startScope = viewportScope.$parent ? viewportScope : $scope;\r\n\r\n this.publicContext = {};\r\n this.assignAdapter($attr.adapter);\r\n this.generatePublicContext();\r\n }\r\n\r\n assignAdapter(adapterAttr) {\r\n if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\\s+|\\s+$/gm, ''))) {\r\n return;\r\n }\r\n let adapterOnScope;\r\n\r\n try {\r\n this.$parse(adapterAttr).assign(this.startScope, {});\r\n adapterOnScope = this.$parse(adapterAttr)(this.startScope);\r\n }\r\n catch (error) {\r\n error.message = `Angular ui-scroll Adapter assignment exception.\\n` +\r\n `Can't parse \"${adapterAttr}\" expression.\\n` +\r\n error.message;\r\n throw error;\r\n }\r\n\r\n Object.assign(adapterOnScope, this.publicContext);\r\n this.publicContext = adapterOnScope;\r\n }\r\n\r\n generatePublicContext() {\r\n // these methods will be accessible out of ui-scroll via user defined adapter\r\n const publicMethods = ['reload', 'applyUpdates', 'append', 'prepend', 'isBOF', 'isEOF', 'isEmpty'];\r\n for (let i = publicMethods.length - 1; i >= 0; i--) {\r\n this.publicContext[publicMethods[i]] = this[publicMethods[i]].bind(this);\r\n }\r\n\r\n // these read-only props will be accessible out of ui-scroll via user defined adapter\r\n const publicProps = ['isLoading', 'topVisible', 'topVisibleElement', 'topVisibleScope', 'bottomVisible', 'bottomVisibleElement', 'bottomVisibleScope'];\r\n for (let i = publicProps.length - 1; i >= 0; i--) {\r\n let property, attr = this.$attr[publicProps[i]];\r\n Object.defineProperty(this, publicProps[i], {\r\n get: () => property,\r\n set: (value) => {\r\n property = value;\r\n this.publicContext[publicProps[i]] = value;\r\n if (attr) {\r\n this.$parse(attr).assign(this.startScope, value);\r\n }\r\n }\r\n });\r\n }\r\n\r\n // non-read-only public property\r\n Object.defineProperty(this.publicContext, 'disabled', {\r\n get: () => this.disabled,\r\n set: (value) => (!(this.disabled = value)) ? this.doAdjust() : null\r\n });\r\n }\r\n\r\n loading(value) {\r\n this.isLoading = value;\r\n }\r\n\r\n isBOF() {\r\n return this.buffer.bof;\r\n }\r\n\r\n isEOF() {\r\n return this.buffer.eof;\r\n }\r\n\r\n isEmpty() {\r\n return !this.buffer.length;\r\n }\r\n\r\n append(newItems) {\r\n this.buffer.append(newItems);\r\n this.doAdjust();\r\n this.viewport.clipTop();\r\n this.viewport.clipBottom();\r\n }\r\n\r\n prepend(newItems) {\r\n this.buffer.prepend(newItems);\r\n this.doAdjust();\r\n this.viewport.clipTop();\r\n this.viewport.clipBottom();\r\n }\r\n\r\n applyUpdates(arg1, arg2) {\r\n if (typeof arg1 === 'function') {\r\n this.applyUpdatesFunc(arg1);\r\n } else {\r\n this.applyUpdatesIndex(arg1, arg2);\r\n }\r\n this.doAdjust();\r\n }\r\n\r\n applyUpdatesFunc(cb) {\r\n this.buffer.slice(0).forEach((wrapper) => {\r\n // we need to do it on the buffer clone, because buffer content\r\n // may change as we iterate through\r\n this.applyUpdate(wrapper, cb(wrapper.item, wrapper.scope, wrapper.element));\r\n });\r\n }\r\n\r\n applyUpdatesIndex(index, newItems) {\r\n if (index % 1 !== 0) {\r\n throw new Error('applyUpdates - ' + index + ' is not a valid index (should be an integer)');\r\n }\r\n const _index = index - this.buffer.first;\r\n\r\n // apply updates only within buffer\r\n if (_index >= 0 && _index < this.buffer.length) {\r\n this.applyUpdate(this.buffer[_index], newItems);\r\n }\r\n // out-of-buffer case: deletion may affect Paddings\r\n else if(index >= this.buffer.getAbsMinIndex() && index <= this.buffer.getAbsMaxIndex()) {\r\n if(Array.isArray(newItems) && !newItems.length) {\r\n this.viewport.removeCacheItem(index, index === this.buffer.minIndex);\r\n if(index === this.buffer.getAbsMinIndex()) {\r\n this.buffer.incrementMinIndex();\r\n }\r\n else {\r\n this.buffer.decrementMaxIndex();\r\n }\r\n }\r\n }\r\n }\r\n\r\n applyUpdate(wrapper, newItems) {\r\n if (!Array.isArray(newItems)) {\r\n return;\r\n }\r\n let position = this.buffer.indexOf(wrapper);\r\n if (!newItems.reverse().some(newItem => newItem === wrapper.item)) {\r\n wrapper.op = 'remove';\r\n if(position === 0 && !newItems.length) {\r\n wrapper._op = 'isTop'; // to catch \"first\" edge case on remove\r\n }\r\n }\r\n newItems.forEach((newItem) => {\r\n if (newItem === wrapper.item) {\r\n position--;\r\n } else {\r\n // 3 parameter (isTop) is to catch \"first\" edge case on insert\r\n this.buffer.insert(position + 1, newItem, position === -1);\r\n }\r\n });\r\n }\r\n\r\n calculateProperties() {\r\n let rowTop = null, topHeight = 0;\r\n let topDone = false, bottomDone = false;\r\n const length = this.buffer.length;\r\n\r\n for (let i = 0; i < length; i++) {\r\n const item = this.buffer[i];\r\n const itemTop = item.element.offset().top;\r\n\r\n if (rowTop !== itemTop) { // a new row condition\r\n const itemHeight = item.element.outerHeight(true);\r\n const top = this.viewport.topDataPos() + topHeight + itemHeight;\r\n\r\n if (!topDone && top > this.viewport.topVisiblePos()) {\r\n topDone = true;\r\n this['topVisible'] = item.item;\r\n this['topVisibleElement'] = item.element;\r\n this['topVisibleScope'] = item.scope;\r\n }\r\n if (!bottomDone && (top >= this.viewport.bottomVisiblePos() || (i === length - 1 && this.isEOF()))) {\r\n bottomDone = true;\r\n this['bottomVisible'] = item.item;\r\n this['bottomVisibleElement'] = item.element;\r\n this['bottomVisibleScope'] = item.scope;\r\n }\r\n topHeight += itemHeight;\r\n }\r\n rowTop = itemTop;\r\n\r\n if (topDone && bottomDone) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n}\r\n\r\nexport default Adapter;\n\n\n// WEBPACK FOOTER //\n// ./src/modules/adapter.js"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/bootstrap f32df6d97ca6583cfb5d","webpack:///./src/ui-scroll.js","webpack:///./src/modules/jqLiteExtras.js","webpack:///./src/modules/elementRoutines.js","webpack:///./src/modules/buffer.js","webpack:///./src/modules/viewport.js","webpack:///./src/modules/padding.js","webpack:///./src/modules/adapter.js"],"names":["angular","module","constant","run","JQLiteExtras","window","jQuery","registerFor","element","addCSSRules","directive","restrict","controller","scope","container","viewport","forEach","children","child","tagName","toLowerCase","console","$injector","$rootScope","$timeout","$interval","$q","$parse","require","transclude","priority","terminal","link","$scope","$attr","controllers","linker","match","uiScroll","Error","parseNumericAttr","value","defaultValue","result","isNaN","BUFFER_MIN","BUFFER_DEFAULT","PADDING_MIN","PADDING_DEFAULT","MAX_VIEWPORT_DELAY","VIEWPORT_POLLING_INTERVAL","datasource","itemName","datasourceName","viewportController","bufferSize","Math","max","padding","startIndex","ridActual","pending","elementRoutines","buffer","adapter","doAdjust","reload","isDatasourceValid","Object","prototype","toString","call","get","onRenderHandlers","onRenderHandlersRunner","handler","persistDatasourceIndex","propName","getter","Number","isInteger","filter","id","push","defineDatasourceIndex","propUserName","descriptor","getOwnPropertyDescriptor","set","defineProperty","length","topPaddingHeightOld","topDataPos","adjustPaddings","onAfterMinIndexSet","fetchNext","success","next","index","append","item","count","fetchPrevious","first","prepend","initialize","tryCount","applyContainerStyle","timer","cancel","clone","createPaddingElements","$destroy","remove","$on","unbindEvents","unbind","wheelHandler","bind","isInvalid","rid","$$destroyed","bindEvents","resizeAndScrollHandler","resetTopPadding","resetBottomPadding","arguments","reset","isElementVisible","wrapper","height","offsetParent","visibilityWatcher","unregisterVisibilityWatcher","insertWrapperContent","insertAfter","createElement","insertElement","$watch","hideElement","promises","sibling","undefined","transform","tdInitializer","uiScrollTdInitializer","linking","onLink","updateDOM","toBePrepended","toBeRemoved","inserted","i","op","unshift","concat","insertElementAnimated","removeItem","$index","prepended","removed","animated","updatePaddings","updates","all","then","enqueueFetch","shouldLoadBottom","effectiveHeight","loading","fetch","shouldLoadTop","processUpdates","$$phase","$digest","showElement","w","calculateProperties","doAdjustAfterFetch","onAfterPrepend","shift","eof","clipTop","bof","clipBottom","isLoading","disabled","event","scrollTop","yMax","scrollHeight","clientHeight","preventDefault","convertToPx","css","getStyle","isWindow","name","self","elem","nodeType","style","obj","document","location","alert","setInterval","scrollTo","direction","top","left","method","prop","preserve","isValueDefined","documentElement","getComputedStyle","parseFloat","currentStyle","rs","rsLeft","core_pnum","source","rnumnonpx","RegExp","test","runtimeStyle","pixelLeft","getMeasurements","measure","base","borderA","borderB","computedMarginA","computedMarginB","computedStyle","dirA","dirB","marginA","marginB","paddingA","paddingB","width","border","margin","offsetWidth","offsetHeight","getWidthHeight","measurements","outer","outerfull","before","newElem","j","parent","ref","contents","after","outerHTML","outerHeight","option","outerWidth","offset","docElem","win","box","doc","ownerDocument","getBoundingClientRect","defaultView","parentWindow","pageYOffset","clientTop","pageXOffset","scrollLeft","clientLeft","key","hideClassToken","ElementRoutines","selector","rules","sheet","styleSheets","cssRules","err","insertRule","addRule","$animate","has","isAngularVersionLessThen1_3","version","major","minor","addClass","removeClass","newElement","previousElement","deferred","defer","enter","resolve","promise","removeElement","leave","ScrollBuffer","create","Array","assign","size","minIndex","maxIndex","minIndexUser","maxIndexUser","items","insert","reverse","min","operation","isTop","splice","arg1","arg2","indexOf","_op","getAbsMinIndex","incrementMinIndex","decrementMaxIndex","removeElementAnimated","getAbsMaxIndex","elements","MAX_VALUE","bottom","NEGATIVE_INFINITY","Viewport","topPadding","bottomPadding","bufferPadding","getScope","template","bottomDataPos","bottomVisiblePos","topVisiblePos","e","overage","overageHeight","itemHeight","emptySpaceHeight","cache","add","visibleItemsHeight","reduce","summ","topPaddingHeight","topCount","bottomPaddingHeight","bottomCount","totalHeight","averageItemHeight","adjustTopPadding","adjustBottomPadding","topPaddingHeightAdd","bottomPaddingHeightAdd","diff","paddingHeight","clear","removeCacheItem","CacheProto","sort","a","b","argument","_isTop","Cache","instance","apply","setPrototypeOf","getOwnPropertyNames","methodName","generateElement","Node","ELEMENT_NODE","table","find","Padding","Adapter","viewportScope","startScope","$parent","publicContext","assignAdapter","generatePublicContext","adapterAttr","replace","adapterOnScope","error","message","publicMethods","publicProps","property","attr","newItems","applyUpdatesFunc","applyUpdatesIndex","cb","slice","applyUpdate","_index","isArray","position","some","newItem","rowTop","topHeight","topDone","bottomDone","itemTop","isEOF"],"mappings":"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","file":"ui-scroll.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap f32df6d97ca6583cfb5d","import JQLiteExtras from './modules/jqLiteExtras';\nimport ElementRoutines from './modules/elementRoutines.js';\nimport ScrollBuffer from './modules/buffer.js';\nimport Viewport from './modules/viewport.js';\nimport Adapter from './modules/adapter.js';\n\nangular.module('ui.scroll', [])\n\n .constant('JQLiteExtras', JQLiteExtras)\n .run(['JQLiteExtras', (JQLiteExtras) => {\n !window.jQuery ? (new JQLiteExtras()).registerFor(angular.element) : null;\n ElementRoutines.addCSSRules();\n }])\n\n .directive('uiScrollViewport', function () {\n return {\n restrict: 'A',\n controller: [\n '$scope',\n '$element',\n function (scope, element) {\n this.container = element;\n this.viewport = element;\n this.scope = scope;\n\n angular.forEach(element.children(), child => {\n if (child.tagName.toLowerCase() === 'tbody') {\n this.viewport = angular.element(child);\n }\n });\n\n return this;\n }\n ]\n };\n })\n\n .directive('uiScroll', [\n '$log',\n '$injector',\n '$rootScope',\n '$timeout',\n '$interval',\n '$q',\n '$parse',\n function (console, $injector, $rootScope, $timeout, $interval, $q, $parse) {\n\n return {\n require: ['?^uiScrollViewport'],\n restrict: 'A',\n transclude: 'element',\n priority: 1000,\n terminal: true,\n link: link\n };\n\n function link($scope, element, $attr, controllers, linker) {\n const match = $attr.uiScroll.match(/^\\s*(\\w+)\\s+in\\s+([(\\w|\\$)\\.]+)\\s*$/);\n if (!match) {\n throw new Error('Expected uiScroll in form of \\'_item_ in _datasource_\\' but got \\'' + $attr.uiScroll + '\\'');\n }\n\n function parseNumericAttr(value, defaultValue) {\n const result = $parse(value)($scope);\n return isNaN(result) ? defaultValue : result;\n }\n\n const BUFFER_MIN = 3;\n const BUFFER_DEFAULT = 10;\n const PADDING_MIN = 0.3;\n const PADDING_DEFAULT = 0.5;\n const MAX_VIEWPORT_DELAY = 500;\n const VIEWPORT_POLLING_INTERVAL = 50;\n\n let datasource = null;\n const itemName = match[1];\n const datasourceName = match[2];\n const viewportController = controllers[0];\n const bufferSize = Math.max(BUFFER_MIN, parseNumericAttr($attr.bufferSize, BUFFER_DEFAULT));\n const padding = Math.max(PADDING_MIN, parseNumericAttr($attr.padding, PADDING_DEFAULT));\n let startIndex = parseNumericAttr($attr.startIndex, 1);\n let ridActual = 0; // current data revision id\n let pending = [];\n\n const elementRoutines = new ElementRoutines($injector, $q);\n const buffer = new ScrollBuffer(elementRoutines, bufferSize, startIndex);\n const viewport = new Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding);\n const adapter = new Adapter($scope, $parse, $attr, viewport, buffer, doAdjust, reload);\n\n if (viewportController) {\n viewportController.adapter = adapter;\n }\n\n const isDatasourceValid = () =>\n Object.prototype.toString.call(datasource) === '[object Object]' && typeof datasource.get === 'function';\n\n datasource = $parse(datasourceName)($scope); // try to get datasource on scope\n if (!isDatasourceValid()) {\n datasource = $injector.get(datasourceName); // try to inject datasource as service\n if (!isDatasourceValid()) {\n throw new Error(datasourceName + ' is not a valid datasource');\n }\n }\n\n let onRenderHandlers = [];\n function onRenderHandlersRunner() {\n onRenderHandlers.forEach(handler => handler.run());\n onRenderHandlers = [];\n }\n function persistDatasourceIndex(datasource, propName) {\n let getter;\n // need to postpone min/maxIndexUser processing if the view is empty\n if(Number.isInteger(datasource[propName])) {\n getter = datasource[propName];\n if(Number.isInteger(getter)) {\n onRenderHandlers = onRenderHandlers.filter(handler => handler.id !== propName);\n onRenderHandlers.push({\n id: propName,\n run: () => datasource[propName] = getter\n });\n }\n }\n }\n\n function defineDatasourceIndex(datasource, propName, propUserName) {\n const descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n if (descriptor && (descriptor.set || descriptor.get)) {\n return;\n }\n let getter;\n persistDatasourceIndex(datasource, propName);\n Object.defineProperty(datasource, propName, {\n set: (value) => {\n getter = value;\n if(pending.length && !buffer.length) {\n persistDatasourceIndex(datasource, propName);\n return;\n }\n buffer[propUserName] = value;\n const topPaddingHeightOld = viewport.topDataPos();\n viewport.adjustPaddings();\n if (propName === 'minIndex') {\n viewport.onAfterMinIndexSet(topPaddingHeightOld);\n }\n },\n get: () => getter\n });\n }\n\n defineDatasourceIndex(datasource, 'minIndex', 'minIndexUser');\n defineDatasourceIndex(datasource, 'maxIndex', 'maxIndexUser');\n\n const fetchNext = (datasource.get.length !== 2) ?\n (success) => datasource.get(buffer.next, bufferSize, success) :\n (success) => {\n datasource.get({\n index: buffer.next,\n append: buffer.length ? buffer[buffer.length - 1].item : void 0,\n count: bufferSize\n }, success);\n };\n\n const fetchPrevious = (datasource.get.length !== 2) ?\n (success) => datasource.get(buffer.first - bufferSize, bufferSize, success) :\n (success) => {\n datasource.get({\n index: buffer.first - bufferSize,\n prepend: buffer.length ? buffer[0].item : void 0,\n count: bufferSize\n }, success);\n };\n\n const initialize = () => {\n let tryCount = 0;\n if(!viewport.applyContainerStyle()) {\n const timer = $interval(() => {\n tryCount++;\n if(viewport.applyContainerStyle()) {\n $interval.cancel(timer);\n doAdjust();\n }\n if(tryCount * VIEWPORT_POLLING_INTERVAL >= MAX_VIEWPORT_DELAY) {\n $interval.cancel(timer);\n throw Error(`ui-scroll directive requires a viewport with non-zero height in ${MAX_VIEWPORT_DELAY}ms`);\n }\n }, VIEWPORT_POLLING_INTERVAL);\n }\n else {\n doAdjust();\n }\n };\n\n /**\n * Build padding elements\n *\n * Calling linker is the only way I found to get access to the tag name of the template\n * to prevent the directive scope from pollution a new scope is created and destroyed\n * right after the builder creation is completed\n */\n linker((clone, scope) => {\n viewport.createPaddingElements(clone[0]);\n // we do not include the clone in the DOM. It means that the nested directives will not\n // be able to reach the parent directives, but in this case it is intentional because we\n // created the clone to access the template tag name\n scope.$destroy();\n clone.remove();\n });\n\n $scope.$on('$destroy', () => {\n unbindEvents();\n viewport.unbind('mousewheel', wheelHandler);\n });\n\n viewport.bind('mousewheel', wheelHandler);\n\n initialize();\n\n /* Private function definitions */\n\n function isInvalid(rid) {\n return (rid && rid !== ridActual) || $scope.$$destroyed;\n }\n\n function bindEvents() {\n viewport.bind('resize', resizeAndScrollHandler);\n viewport.bind('scroll', resizeAndScrollHandler);\n }\n\n function unbindEvents() {\n viewport.unbind('resize', resizeAndScrollHandler);\n viewport.unbind('scroll', resizeAndScrollHandler);\n }\n\n function reload() {\n viewport.resetTopPadding();\n viewport.resetBottomPadding();\n if (arguments.length) {\n startIndex = arguments[0];\n }\n buffer.reset(startIndex);\n persistDatasourceIndex(datasource, 'minIndex');\n persistDatasourceIndex(datasource, 'maxIndex');\n doAdjust();\n }\n\n function isElementVisible(wrapper) {\n return wrapper.element.height() && wrapper.element[0].offsetParent;\n }\n\n function visibilityWatcher(wrapper) {\n if (isElementVisible(wrapper)) {\n buffer.forEach((item) => {\n if (typeof item.unregisterVisibilityWatcher === 'function') {\n item.unregisterVisibilityWatcher();\n delete item.unregisterVisibilityWatcher;\n }\n });\n if (!pending.length) {\n $timeout(() => doAdjust());\n }\n }\n }\n\n function insertWrapperContent(wrapper, insertAfter) {\n createElement(wrapper, insertAfter, viewport.insertElement);\n if (!isElementVisible(wrapper)) {\n wrapper.unregisterVisibilityWatcher = wrapper.scope.$watch(() => visibilityWatcher(wrapper));\n }\n elementRoutines.hideElement(wrapper); // hide inserted elements before data binding\n }\n\n function createElement(wrapper, insertAfter, insertElement) {\n let promises = null;\n const sibling = (insertAfter > 0) ? buffer[insertAfter - 1].element : undefined;\n linker((clone, scope) => {\n promises = insertElement(clone, sibling);\n wrapper.element = clone;\n wrapper.scope = scope;\n scope[itemName] = wrapper.item;\n });\n // ui-scroll-grid apply\n if (adapter.transform) {\n const tdInitializer = wrapper.scope.uiScrollTdInitializer;\n if (tdInitializer && tdInitializer.linking) {\n adapter.transform(wrapper.scope, wrapper.element);\n } else {\n wrapper.scope.uiScrollTdInitializer = {\n onLink: () => adapter.transform(wrapper.scope, wrapper.element),\n scope: wrapper.scope\n };\n }\n }\n return promises;\n }\n\n function updateDOM() {\n let promises = [];\n const toBePrepended = [];\n const toBeRemoved = [];\n const inserted = [];\n\n buffer.forEach((wrapper, i) => {\n switch (wrapper.op) {\n case 'prepend':\n toBePrepended.unshift(wrapper);\n break;\n case 'append':\n insertWrapperContent(wrapper, i);\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'insert':\n promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated));\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'remove':\n toBeRemoved.push(wrapper);\n }\n });\n\n toBeRemoved.forEach((wrapper) => promises = promises.concat(viewport.removeItem(wrapper)));\n\n if (toBePrepended.length)\n toBePrepended.forEach((wrapper) => {\n insertWrapperContent(wrapper);\n wrapper.op = 'none';\n });\n\n buffer.forEach((item, i) => item.scope.$index = buffer.first + i);\n\n return {\n prepended: toBePrepended,\n removed: toBeRemoved,\n inserted: inserted,\n animated: promises\n };\n\n }\n\n function updatePaddings(rid, updates) {\n // schedule another doAdjust after animation completion\n if (updates.animated.length) {\n $q.all(updates.animated).then(() => {\n viewport.adjustPaddings();\n doAdjust(rid);\n });\n } else {\n viewport.adjustPaddings();\n }\n }\n\n function enqueueFetch(rid, updates) {\n if (viewport.shouldLoadBottom()) {\n if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\n // this means that at least one item appended in the last batch has height > 0\n if (pending.push(true) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n } else if (viewport.shouldLoadTop()) {\n if ((!updates || buffer.effectiveHeight(updates.prepended) > 0) || pending[0]) {\n // this means that at least one item appended in the last batch has height > 0\n // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\n // BTW there will always be at least 1 element in the pending array because bottom is fetched first\n if (pending.push(false) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n }\n }\n\n function processUpdates() {\n const updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustments\n !$scope.$$phase && !$rootScope.$$phase && $scope.$digest();\n\n updates.inserted.forEach(w => elementRoutines.showElement(w));\n updates.prepended.forEach(w => elementRoutines.showElement(w));\n return updates;\n }\n\n function doAdjust(rid) {\n if (!rid) { // dismiss pending requests\n pending = [];\n rid = ++ridActual;\n }\n\n const updates = processUpdates();\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n enqueueFetch(rid);\n\n if (!pending.length) {\n adapter.calculateProperties();\n }\n }\n\n function doAdjustAfterFetch(rid) {\n const updates = processUpdates();\n\n viewport.onAfterPrepend(updates);\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n onRenderHandlersRunner();\n enqueueFetch(rid, updates);\n pending.shift();\n\n if (pending.length)\n fetch(rid);\n else {\n adapter.loading(false);\n bindEvents();\n adapter.calculateProperties();\n }\n }\n\n function fetch(rid) {\n if (pending[0]) {// scrolling down\n if (buffer.length && !viewport.shouldLoadBottom()) {\n doAdjustAfterFetch(rid);\n } else {\n fetchNext((result) => {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.eof = true;\n }\n\n if (result.length > 0) {\n viewport.clipTop();\n buffer.append(result);\n }\n\n doAdjustAfterFetch(rid);\n });\n }\n } else { // scrolling up\n if (buffer.length && !viewport.shouldLoadTop()) {\n doAdjustAfterFetch(rid);\n } else {\n fetchPrevious((result) => {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.bof = true;\n // log 'bof is reached'\n }\n\n if (result.length > 0) {\n if (buffer.length) {\n viewport.clipBottom();\n }\n buffer.prepend(result);\n }\n\n doAdjustAfterFetch(rid);\n });\n }\n }\n }\n\n function resizeAndScrollHandler() {\n if (!$rootScope.$$phase && !adapter.isLoading && !adapter.disabled) {\n\n enqueueFetch(ridActual);\n\n if (pending.length) {\n unbindEvents();\n } else {\n adapter.calculateProperties();\n !$scope.$$phase && $scope.$digest();\n }\n }\n }\n\n function wheelHandler(event) {\n if (!adapter.disabled) {\n const scrollTop = viewport[0].scrollTop;\n const yMax = viewport[0].scrollHeight - viewport[0].clientHeight;\n\n if ((scrollTop === 0 && !buffer.bof) || (scrollTop === yMax && !buffer.eof)) {\n event.preventDefault();\n }\n }\n }\n }\n\n }\n ]);\n\n\n// WEBPACK FOOTER //\n// ./src/ui-scroll.js","/*!\r\n globals: angular, window\r\n List of used element methods available in JQuery but not in JQuery Lite\r\n element.before(elem)\r\n element.height()\r\n element.outerHeight(true)\r\n element.height(value) = only for Top/Bottom padding elements\r\n element.scrollTop()\r\n element.scrollTop(value)\r\n */\r\n\r\nexport default class JQLiteExtras {\r\n\r\n registerFor(element) {\r\n let convertToPx, css, getStyle, isWindow;\r\n // angular implementation blows up if elem is the window\r\n css = angular.element.prototype.css;\r\n\r\n element.prototype.css = function (name, value) {\r\n let self = this;\r\n let elem = self[0];\r\n if (!(!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style)) {\r\n return css.call(self, name, value);\r\n }\r\n };\r\n\r\n // as defined in angularjs v1.0.5\r\n isWindow = (obj) => obj && obj.document && obj.location && obj.alert && obj.setInterval;\r\n\r\n function scrollTo(self, direction, value) {\r\n let elem = self[0];\r\n let [method, prop, preserve] = {\r\n top: [\r\n 'scrollTop',\r\n 'pageYOffset',\r\n 'scrollLeft'\r\n ],\r\n left: [\r\n 'scrollLeft',\r\n 'pageXOffset',\r\n 'scrollTop'\r\n ]\r\n }[direction];\r\n\r\n const isValueDefined = typeof value !== 'undefined';\r\n if (isWindow(elem)) {\r\n if (isValueDefined) {\r\n return elem.scrollTo(self[preserve].call(self), value);\r\n }\r\n return (prop in elem) ? elem[prop] : elem.document.documentElement[method];\r\n } else {\r\n if (isValueDefined) {\r\n elem[method] = value;\r\n }\r\n return elem[method];\r\n }\r\n }\r\n\r\n if (window.getComputedStyle) {\r\n getStyle = (elem) => window.getComputedStyle(elem, null);\r\n convertToPx = (elem, value) => parseFloat(value);\r\n } else {\r\n getStyle = (elem) => elem.currentStyle;\r\n convertToPx = (elem, value) => {\r\n let left, result, rs, rsLeft, style;\r\n let core_pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\r\n let rnumnonpx = new RegExp('^(' + core_pnum + ')(?!px)[a-z%]+$', 'i');\r\n\r\n if (!rnumnonpx.test(value)) {\r\n return parseFloat(value);\r\n }\r\n\r\n // ported from JQuery\r\n style = elem.style;\r\n left = style.left;\r\n rs = elem.runtimeStyle;\r\n rsLeft = rs && rs.left;\r\n if (rs) {\r\n rs.left = style.left;\r\n }\r\n // put in the new values to get a computed style out\r\n style.left = value;\r\n result = style.pixelLeft;\r\n style.left = left;\r\n if (rsLeft) {\r\n rs.left = rsLeft;\r\n }\r\n return result;\r\n };\r\n }\r\n\r\n function getMeasurements(elem, measure) {\r\n let base, borderA, borderB, computedMarginA, computedMarginB, computedStyle, dirA, dirB, marginA, marginB, paddingA, paddingB;\r\n\r\n if (isWindow(elem)) {\r\n base = document.documentElement[{height: 'clientHeight', width: 'clientWidth'}[measure]];\r\n\r\n return {\r\n base: base,\r\n padding: 0,\r\n border: 0,\r\n margin: 0\r\n };\r\n }\r\n\r\n // Start with offset property\r\n [\r\n base,\r\n dirA,\r\n dirB\r\n ] = {\r\n width: [\r\n elem.offsetWidth,\r\n 'Left',\r\n 'Right'\r\n ],\r\n height: [\r\n elem.offsetHeight,\r\n 'Top',\r\n 'Bottom'\r\n ]\r\n }[measure];\r\n\r\n computedStyle = getStyle(elem);\r\n paddingA = convertToPx(elem, computedStyle['padding' + dirA]) || 0;\r\n paddingB = convertToPx(elem, computedStyle['padding' + dirB]) || 0;\r\n borderA = convertToPx(elem, computedStyle['border' + dirA + 'Width']) || 0;\r\n borderB = convertToPx(elem, computedStyle['border' + dirB + 'Width']) || 0;\r\n computedMarginA = computedStyle['margin' + dirA];\r\n computedMarginB = computedStyle['margin' + dirB];\r\n\r\n // I do not care for width for now, so this hack is irrelevant\r\n // if ( !supportsPercentMargin )\r\n // computedMarginA = hackPercentMargin( elem, computedStyle, computedMarginA )\r\n // computedMarginB = hackPercentMargin( elem, computedStyle, computedMarginB )\r\n marginA = convertToPx(elem, computedMarginA) || 0;\r\n marginB = convertToPx(elem, computedMarginB) || 0;\r\n\r\n return {\r\n base: base,\r\n padding: paddingA + paddingB,\r\n border: borderA + borderB,\r\n margin: marginA + marginB\r\n };\r\n }\r\n\r\n function getWidthHeight(elem, direction, measure) {\r\n let computedStyle, result;\r\n\r\n let measurements = getMeasurements(elem, direction);\r\n\r\n if (measurements.base > 0) {\r\n return {\r\n base: measurements.base - measurements.padding - measurements.border,\r\n outer: measurements.base,\r\n outerfull: measurements.base + measurements.margin\r\n }[measure];\r\n }\r\n\r\n // Fall back to computed then uncomputed css if necessary\r\n computedStyle = getStyle(elem);\r\n result = computedStyle[direction];\r\n\r\n if (result < 0 || result === null) {\r\n result = elem.style[direction] || 0;\r\n }\r\n\r\n // Normalize \"\", auto, and prepare for extra\r\n result = parseFloat(result) || 0;\r\n\r\n return {\r\n base: result - measurements.padding - measurements.border,\r\n outer: result,\r\n outerfull: result + measurements.padding + measurements.border + measurements.margin\r\n }[measure];\r\n }\r\n\r\n // define missing methods\r\n return angular.forEach({\r\n before(newElem) {\r\n var children, elem, i, j, parent, ref, self;\r\n self = this;\r\n elem = self[0];\r\n parent = self.parent();\r\n children = parent.contents();\r\n if (children[0] === elem) {\r\n return parent.prepend(newElem);\r\n } else {\r\n for (i = j = 1, ref = children.length - 1; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {\r\n if (children[i] === elem) {\r\n angular.element(children[i - 1]).after(newElem);\r\n return;\r\n }\r\n }\r\n throw new Error('invalid DOM structure ' + elem.outerHTML);\r\n }\r\n },\r\n height (value){\r\n var self;\r\n self = this;\r\n if (typeof value !== 'undefined') {\r\n if (Number.isInteger(value)) {\r\n value = value + 'px';\r\n }\r\n return css.call(self, 'height', value);\r\n } else {\r\n return getWidthHeight(this[0], 'height', 'base');\r\n }\r\n },\r\n outerHeight(option) {\r\n return getWidthHeight(this[0], 'height', option ? 'outerfull' : 'outer');\r\n },\r\n outerWidth(option) {\r\n return getWidthHeight(this[0], 'width', option ? 'outerfull' : 'outer');\r\n },\r\n\r\n /*\r\n The offset setter method is not implemented\r\n */\r\n offset(value) {\r\n let docElem, win;\r\n let self = this;\r\n let box = {\r\n top: 0,\r\n left: 0\r\n };\r\n let elem = self[0];\r\n let doc = elem && elem.ownerDocument;\r\n\r\n if (arguments.length) {\r\n if (value === undefined) {\r\n return self;\r\n }\r\n // TODO: implement setter\r\n throw new Error('offset setter method is not implemented');\r\n }\r\n\r\n if (!doc) {\r\n return;\r\n }\r\n\r\n docElem = doc.documentElement;\r\n\r\n // TODO: Make sure it's not a disconnected DOM node\r\n\r\n if (elem.getBoundingClientRect != null) {\r\n box = elem.getBoundingClientRect();\r\n }\r\n\r\n win = doc.defaultView || doc.parentWindow;\r\n\r\n return {\r\n top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),\r\n left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0)\r\n };\r\n },\r\n scrollTop(value) {\r\n return scrollTo(this, 'top', value);\r\n },\r\n scrollLeft(value) {\r\n return scrollTo(this, 'left', value);\r\n }\r\n }, (value, key) => {\r\n if (!element.prototype[key]) {\r\n return element.prototype[key] = value;\r\n }\r\n });\r\n }\r\n\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/jqLiteExtras.js","const hideClassToken = 'ng-ui-scroll-hide';\r\n\r\nexport default class ElementRoutines {\r\n\r\n static addCSSRules() {\r\n const selector = '.' + hideClassToken;\r\n const rules = 'display: none';\r\n const sheet = document.styleSheets[0];\r\n let index;\r\n try {\r\n index = sheet.cssRules.length;\r\n } catch (err) {\r\n index = 0;\r\n }\r\n if('insertRule' in sheet) {\r\n sheet.insertRule(selector + '{' + rules + '}', index);\r\n }\r\n else if('addRule' in sheet) {\r\n sheet.addRule(selector, rules, index);\r\n }\r\n }\r\n\r\n constructor($injector, $q) {\r\n this.$animate = ($injector.has && $injector.has('$animate')) ? $injector.get('$animate') : null;\r\n this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3;\r\n this.$q = $q;\r\n }\r\n\r\n hideElement(wrapper) {\r\n wrapper.element.addClass(hideClassToken);\r\n }\r\n\r\n showElement(wrapper) {\r\n wrapper.element.removeClass(hideClassToken);\r\n }\r\n\r\n insertElement(newElement, previousElement) {\r\n previousElement.after(newElement);\r\n return [];\r\n }\r\n\r\n removeElement(wrapper) {\r\n wrapper.element.remove();\r\n wrapper.scope.$destroy();\r\n return [];\r\n }\r\n\r\n insertElementAnimated(newElement, previousElement) {\r\n if (!this.$animate) {\r\n return this.insertElement(newElement, previousElement);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n // no need for parent - previous element is never null\r\n this.$animate.enter(newElement, null, previousElement, () => deferred.resolve());\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n // no need for parent - previous element is never null\r\n return [this.$animate.enter(newElement, null, previousElement)];\r\n }\r\n\r\n removeElementAnimated(wrapper) {\r\n if (!this.$animate) {\r\n return this.removeElement(wrapper);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n this.$animate.leave(wrapper.element, () => {\r\n wrapper.scope.$destroy();\r\n return deferred.resolve();\r\n });\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n return [(this.$animate.leave(wrapper.element)).then(() => wrapper.scope.$destroy())];\r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/elementRoutines.js","export default function ScrollBuffer(elementRoutines, bufferSize, startIndex) {\r\n const buffer = Object.create(Array.prototype);\r\n\r\n Object.assign(buffer, {\r\n size: bufferSize,\r\n\r\n reset(startIndex) {\r\n buffer.remove(0, buffer.length);\r\n buffer.eof = false;\r\n buffer.bof = false;\r\n buffer.first = startIndex;\r\n buffer.next = startIndex;\r\n buffer.minIndex = startIndex;\r\n buffer.maxIndex = startIndex;\r\n buffer.minIndexUser = null;\r\n buffer.maxIndexUser = null;\r\n },\r\n\r\n append(items) {\r\n items.forEach((item) => {\r\n ++buffer.next;\r\n buffer.insert('append', item);\r\n });\r\n buffer.maxIndex = buffer.eof ? buffer.next - 1 : Math.max(buffer.next - 1, buffer.maxIndex);\r\n },\r\n\r\n prepend(items) {\r\n items.reverse().forEach((item) => {\r\n --buffer.first;\r\n buffer.insert('prepend', item);\r\n });\r\n buffer.minIndex = buffer.bof ? buffer.minIndex = buffer.first : Math.min(buffer.first, buffer.minIndex);\r\n },\r\n\r\n /**\r\n * inserts wrapped element in the buffer\r\n * the first argument is either operation keyword (see below) or a number for operation 'insert'\r\n * for insert the number is the index for the buffer element the new one have to be inserted after\r\n * operations: 'append', 'prepend', 'insert', 'remove', 'update', 'none'\r\n */\r\n insert(operation, item, isTop) {\r\n const wrapper = {\r\n item: item\r\n };\r\n\r\n if (operation % 1 === 0) {// it is an insert\r\n wrapper.op = 'insert';\r\n buffer.splice(operation, 0, wrapper);\r\n if(isTop) {\r\n buffer.first--;\r\n }\r\n else {\r\n buffer.next++;\r\n }\r\n } else {\r\n wrapper.op = operation;\r\n switch (operation) {\r\n case 'append':\r\n buffer.push(wrapper);\r\n break;\r\n case 'prepend':\r\n buffer.unshift(wrapper);\r\n break;\r\n }\r\n }\r\n },\r\n\r\n // removes elements from buffer\r\n remove(arg1, arg2) {\r\n if (Number.isInteger(arg1)) {\r\n // removes items from arg1 (including) through arg2 (excluding)\r\n for (let i = arg1; i < arg2; i++) {\r\n elementRoutines.removeElement(buffer[i]);\r\n }\r\n return buffer.splice(arg1, arg2 - arg1);\r\n }\r\n // removes single item(wrapper) from the buffer\r\n buffer.splice(buffer.indexOf(arg1), 1);\r\n if(arg1._op === 'isTop' && buffer.first === this.getAbsMinIndex()) {\r\n this.incrementMinIndex();\r\n }\r\n else {\r\n this.decrementMaxIndex();\r\n }\r\n if(arg1._op === 'isTop') {\r\n buffer.first++;\r\n }\r\n else {\r\n buffer.next--;\r\n }\r\n if(!buffer.length) {\r\n buffer.first = 1;\r\n buffer.next = 1;\r\n }\r\n\r\n return elementRoutines.removeElementAnimated(arg1);\r\n },\r\n\r\n incrementMinIndex() {\r\n if(buffer.minIndexUser !== null) {\r\n if(buffer.minIndex > buffer.minIndexUser) {\r\n buffer.minIndexUser++;\r\n return;\r\n }\r\n if(buffer.minIndex === buffer.minIndexUser) {\r\n buffer.minIndexUser++;\r\n }\r\n }\r\n buffer.minIndex++;\r\n },\r\n\r\n decrementMaxIndex() {\r\n if(buffer.maxIndexUser !== null && buffer.maxIndex <= buffer.maxIndexUser) {\r\n buffer.maxIndexUser--;\r\n }\r\n buffer.maxIndex--;\r\n },\r\n\r\n getAbsMinIndex() {\r\n if(buffer.minIndexUser !== null) {\r\n return Math.min(buffer.minIndexUser, buffer.minIndex);\r\n }\r\n return buffer.minIndex;\r\n },\r\n\r\n getAbsMaxIndex() {\r\n if(buffer.maxIndexUser !== null) {\r\n return Math.max(buffer.maxIndexUser, buffer.maxIndex);\r\n }\r\n return buffer.maxIndex;\r\n },\r\n\r\n effectiveHeight(elements) {\r\n if (!elements.length) {\r\n return 0;\r\n }\r\n let top = Number.MAX_VALUE;\r\n let bottom = Number.NEGATIVE_INFINITY;\r\n elements.forEach((wrapper) => {\r\n if (wrapper.element[0].offsetParent) {\r\n // element style is not display:none\r\n top = Math.min(top, wrapper.element.offset().top);\r\n bottom = Math.max(bottom, wrapper.element.offset().top + wrapper.element.outerHeight(true));\r\n }\r\n });\r\n return Math.max(0, bottom - top);\r\n }\r\n\r\n });\r\n\r\n buffer.reset(startIndex);\r\n\r\n return buffer;\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/buffer.js","import Padding from './padding';\r\n\r\nexport default function Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding) {\r\n let topPadding = null;\r\n let bottomPadding = null;\r\n const viewport = viewportController && viewportController.viewport ? viewportController.viewport : angular.element(window);\r\n const container = viewportController && viewportController.container ? viewportController.container : undefined;\r\n const scope = viewportController && viewportController.scope ? viewportController.scope : $rootScope;\r\n\r\n viewport.css({\r\n 'overflow-anchor': 'none',\r\n 'overflow-y': 'auto',\r\n 'display': 'block'\r\n });\r\n\r\n function bufferPadding() {\r\n return viewport.outerHeight() * padding; // some extra space to initiate preload\r\n }\r\n\r\n Object.assign(viewport, {\r\n getScope() {\r\n return scope;\r\n },\r\n\r\n createPaddingElements(template) {\r\n topPadding = new Padding(template);\r\n bottomPadding = new Padding(template);\r\n element.before(topPadding.element);\r\n element.after(bottomPadding.element);\r\n topPadding.height(0);\r\n bottomPadding.height(0);\r\n },\r\n\r\n applyContainerStyle() {\r\n if (!container) {\r\n return true;\r\n }\r\n if(container !== viewport) {\r\n viewport.css('height', window.getComputedStyle(container[0]).height);\r\n }\r\n return viewport.height() > 0;\r\n },\r\n\r\n bottomDataPos() {\r\n let scrollHeight = viewport[0].scrollHeight;\r\n scrollHeight = scrollHeight != null ? scrollHeight : viewport[0].document.documentElement.scrollHeight;\r\n return scrollHeight - bottomPadding.height();\r\n },\r\n\r\n topDataPos() {\r\n return topPadding.height();\r\n },\r\n\r\n bottomVisiblePos() {\r\n return viewport.scrollTop() + viewport.outerHeight();\r\n },\r\n\r\n topVisiblePos() {\r\n return viewport.scrollTop();\r\n },\r\n\r\n insertElement(e, sibling) {\r\n return elementRoutines.insertElement(e, sibling || topPadding.element);\r\n },\r\n\r\n insertElementAnimated(e, sibling) {\r\n return elementRoutines.insertElementAnimated(e, sibling || topPadding.element);\r\n },\r\n\r\n shouldLoadBottom() {\r\n return !buffer.eof && viewport.bottomDataPos() < viewport.bottomVisiblePos() + bufferPadding();\r\n },\r\n\r\n clipBottom() {\r\n // clip the invisible items off the bottom\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.bottomDataPos() - viewport.bottomVisiblePos() - bufferPadding();\r\n\r\n for (let i = buffer.length - 1; i >= 0; i--) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n bottomPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n buffer.eof = false;\r\n buffer.remove(buffer.length - overage, buffer.length);\r\n buffer.next -= overage;\r\n viewport.adjustPaddings();\r\n }\r\n },\r\n\r\n shouldLoadTop() {\r\n return !buffer.bof && (viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding());\r\n },\r\n\r\n clipTop() {\r\n // clip the invisible items off the top\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\r\n\r\n for (let i = 0; i < buffer.length; i++) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n topPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n // we need to adjust top padding element before items are removed from top\r\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\r\n topPadding.height(topPadding.height() + overageHeight);\r\n buffer.bof = false;\r\n buffer.remove(0, overage);\r\n buffer.first += overage;\r\n }\r\n },\r\n\r\n adjustPaddings() {\r\n if (!buffer.length) {\r\n return;\r\n }\r\n\r\n // precise heights calculation based on items that are in buffer or that were in buffer once\r\n const visibleItemsHeight = buffer.reduce((summ, item) => summ + item.element.outerHeight(true), 0);\r\n\r\n let topPaddingHeight = 0, topCount = 0;\r\n topPadding.cache.forEach(item => {\r\n if(item.index < buffer.first) {\r\n topPaddingHeight += item.height;\r\n topCount++;\r\n }\r\n });\r\n\r\n let bottomPaddingHeight = 0, bottomCount = 0;\r\n bottomPadding.cache.forEach(item => {\r\n if(item.index >= buffer.next) {\r\n bottomPaddingHeight += item.height;\r\n bottomCount++;\r\n }\r\n });\r\n\r\n const totalHeight = visibleItemsHeight + topPaddingHeight + bottomPaddingHeight;\r\n const averageItemHeight = totalHeight / (topCount + bottomCount + buffer.length);\r\n\r\n // average heights calculation, items that have never been reached\r\n let adjustTopPadding = buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser;\r\n let adjustBottomPadding = buffer.maxIndexUser !== null && buffer.maxIndex < buffer.maxIndexUser;\r\n let topPaddingHeightAdd = adjustTopPadding ? (buffer.minIndex - buffer.minIndexUser) * averageItemHeight : 0;\r\n let bottomPaddingHeightAdd = adjustBottomPadding ? (buffer.maxIndexUser - buffer.maxIndex) * averageItemHeight : 0;\r\n\r\n // paddings combine adjustment\r\n topPadding.height(topPaddingHeight + topPaddingHeightAdd);\r\n bottomPadding.height(bottomPaddingHeight + bottomPaddingHeightAdd);\r\n },\r\n\r\n onAfterMinIndexSet(topPaddingHeightOld) {\r\n // additional scrollTop adjustment in case of datasource.minIndex external set\r\n if (buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser) {\r\n let diff = topPadding.height() - topPaddingHeightOld;\r\n viewport.scrollTop(viewport.scrollTop() + diff);\r\n while((diff -= viewport.scrollTop()) > 0) {\r\n bottomPadding.height(bottomPadding.height() + diff);\r\n viewport.scrollTop(viewport.scrollTop() + diff);\r\n }\r\n }\r\n },\r\n\r\n onAfterPrepend(updates) {\r\n if (!updates.prepended.length)\r\n return;\r\n const height = buffer.effectiveHeight(updates.prepended);\r\n const paddingHeight = topPadding.height() - height;\r\n if (paddingHeight >= 0) {\r\n topPadding.height(paddingHeight);\r\n }\r\n else {\r\n topPadding.height(0);\r\n viewport.scrollTop(viewport.scrollTop() - paddingHeight);\r\n }\r\n },\r\n\r\n resetTopPadding() {\r\n topPadding.height(0);\r\n topPadding.cache.clear();\r\n },\r\n\r\n resetBottomPadding() {\r\n bottomPadding.height(0);\r\n bottomPadding.cache.clear();\r\n },\r\n\r\n removeCacheItem(item, isTop) {\r\n topPadding.cache.remove(item, isTop);\r\n bottomPadding.cache.remove(item, isTop);\r\n },\r\n\r\n removeItem(item) {\r\n this.removeCacheItem(item);\r\n return buffer.remove(item);\r\n }\r\n });\r\n\r\n return viewport;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/viewport.js","// Can't just extend the Array, due to Babel does not support built-in classes extending\r\n// This solution was taken from https://stackoverflow.com/questions/46897414/es6-class-extends-array-workaround-for-es5-babel-transpile\r\nclass CacheProto {\r\n add(item) {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index === item.scope.$index) {\r\n this[i].height = item.element.outerHeight();\r\n return;\r\n }\r\n }\r\n this.push({\r\n index: item.scope.$index,\r\n height: item.element.outerHeight()\r\n });\r\n this.sort((a, b) => ((a.index < b.index) ? -1 : ((a.index > b.index) ? 1 : 0)));\r\n }\r\n\r\n remove(argument, _isTop) {\r\n const index = argument % 1 === 0 ? argument : argument.scope.$index;\r\n const isTop = argument % 1 === 0 ? _isTop : argument._op === 'isTop';\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index === index) {\r\n this.splice(i, 1);\r\n break;\r\n }\r\n }\r\n if(!isTop) {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index > index) {\r\n this[i].index--;\r\n }\r\n }\r\n }\r\n }\r\n\r\n clear() {\r\n this.length = 0;\r\n }\r\n}\r\n\r\nfunction Cache() {\r\n const instance = [];\r\n instance.push.apply(instance, arguments);\r\n Object.setPrototypeOf(instance, Cache.prototype);\r\n return instance;\r\n}\r\nCache.prototype = Object.create(Array.prototype);\r\nObject.getOwnPropertyNames(CacheProto.prototype).forEach(methodName =>\r\n Cache.prototype[methodName] = CacheProto.prototype[methodName]\r\n);\r\n\r\nfunction generateElement(template) {\r\n if(template.nodeType !== Node.ELEMENT_NODE) {\r\n throw new Error('ui-scroll directive requires an Element node for templating the view');\r\n }\r\n let element;\r\n switch (template.tagName.toLowerCase()) {\r\n case 'dl':\r\n throw new Error(`ui-scroll directive does not support <${template.tagName}> as a repeating tag: ${template.outerHTML}`);\r\n case 'tr':\r\n let table = angular.element('
');\r\n element = table.find('tr');\r\n break;\r\n case 'li':\r\n element = angular.element('
');\r\n break;\r\n default:\r\n element = angular.element('
');\r\n }\r\n return element;\r\n}\r\n\r\nclass Padding {\r\n constructor(template) {\r\n this.element = generateElement(template);\r\n this.cache = new Cache();\r\n }\r\n\r\n height() {\r\n return this.element.height.apply(this.element, arguments);\r\n }\r\n}\r\n\r\nexport default Padding;\n\n\n// WEBPACK FOOTER //\n// ./src/modules/padding.js","class Adapter {\r\n\r\n constructor($scope, $parse, $attr, viewport, buffer, doAdjust, reload) {\r\n this.$parse = $parse;\r\n this.$attr = $attr;\r\n this.viewport = viewport;\r\n this.buffer = buffer;\r\n\r\n this.doAdjust = doAdjust;\r\n this.reload = reload;\r\n\r\n this.isLoading = false;\r\n this.disabled = false;\r\n\r\n const viewportScope = viewport.getScope();\r\n this.startScope = viewportScope.$parent ? viewportScope : $scope;\r\n\r\n this.publicContext = {};\r\n this.assignAdapter($attr.adapter);\r\n this.generatePublicContext();\r\n }\r\n\r\n assignAdapter(adapterAttr) {\r\n if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\\s+|\\s+$/gm, ''))) {\r\n return;\r\n }\r\n let adapterOnScope;\r\n\r\n try {\r\n this.$parse(adapterAttr).assign(this.startScope, {});\r\n adapterOnScope = this.$parse(adapterAttr)(this.startScope);\r\n }\r\n catch (error) {\r\n error.message = `Angular ui-scroll Adapter assignment exception.\\n` +\r\n `Can't parse \"${adapterAttr}\" expression.\\n` +\r\n error.message;\r\n throw error;\r\n }\r\n\r\n Object.assign(adapterOnScope, this.publicContext);\r\n this.publicContext = adapterOnScope;\r\n }\r\n\r\n generatePublicContext() {\r\n // these methods will be accessible out of ui-scroll via user defined adapter\r\n const publicMethods = ['reload', 'applyUpdates', 'append', 'prepend', 'isBOF', 'isEOF', 'isEmpty'];\r\n for (let i = publicMethods.length - 1; i >= 0; i--) {\r\n this.publicContext[publicMethods[i]] = this[publicMethods[i]].bind(this);\r\n }\r\n\r\n // these read-only props will be accessible out of ui-scroll via user defined adapter\r\n const publicProps = ['isLoading', 'topVisible', 'topVisibleElement', 'topVisibleScope', 'bottomVisible', 'bottomVisibleElement', 'bottomVisibleScope'];\r\n for (let i = publicProps.length - 1; i >= 0; i--) {\r\n let property, attr = this.$attr[publicProps[i]];\r\n Object.defineProperty(this, publicProps[i], {\r\n get: () => property,\r\n set: (value) => {\r\n property = value;\r\n this.publicContext[publicProps[i]] = value;\r\n if (attr) {\r\n this.$parse(attr).assign(this.startScope, value);\r\n }\r\n }\r\n });\r\n }\r\n\r\n // non-read-only public property\r\n Object.defineProperty(this.publicContext, 'disabled', {\r\n get: () => this.disabled,\r\n set: (value) => (!(this.disabled = value)) ? this.doAdjust() : null\r\n });\r\n }\r\n\r\n loading(value) {\r\n this.isLoading = value;\r\n }\r\n\r\n isBOF() {\r\n return this.buffer.bof;\r\n }\r\n\r\n isEOF() {\r\n return this.buffer.eof;\r\n }\r\n\r\n isEmpty() {\r\n return !this.buffer.length;\r\n }\r\n\r\n append(newItems) {\r\n this.buffer.append(newItems);\r\n this.doAdjust();\r\n this.viewport.clipTop();\r\n this.viewport.clipBottom();\r\n }\r\n\r\n prepend(newItems) {\r\n this.buffer.prepend(newItems);\r\n this.doAdjust();\r\n this.viewport.clipTop();\r\n this.viewport.clipBottom();\r\n }\r\n\r\n applyUpdates(arg1, arg2) {\r\n if (typeof arg1 === 'function') {\r\n this.applyUpdatesFunc(arg1);\r\n } else {\r\n this.applyUpdatesIndex(arg1, arg2);\r\n }\r\n this.doAdjust();\r\n }\r\n\r\n applyUpdatesFunc(cb) {\r\n this.buffer.slice(0).forEach((wrapper) => {\r\n // we need to do it on the buffer clone, because buffer content\r\n // may change as we iterate through\r\n this.applyUpdate(wrapper, cb(wrapper.item, wrapper.scope, wrapper.element));\r\n });\r\n }\r\n\r\n applyUpdatesIndex(index, newItems) {\r\n if (index % 1 !== 0) {\r\n throw new Error('applyUpdates - ' + index + ' is not a valid index (should be an integer)');\r\n }\r\n const _index = index - this.buffer.first;\r\n\r\n // apply updates only within buffer\r\n if (_index >= 0 && _index < this.buffer.length) {\r\n this.applyUpdate(this.buffer[_index], newItems);\r\n }\r\n // out-of-buffer case: deletion may affect Paddings\r\n else if(index >= this.buffer.getAbsMinIndex() && index <= this.buffer.getAbsMaxIndex()) {\r\n if(Array.isArray(newItems) && !newItems.length) {\r\n this.viewport.removeCacheItem(index, index === this.buffer.minIndex);\r\n if(index === this.buffer.getAbsMinIndex()) {\r\n this.buffer.incrementMinIndex();\r\n }\r\n else {\r\n this.buffer.decrementMaxIndex();\r\n }\r\n }\r\n }\r\n }\r\n\r\n applyUpdate(wrapper, newItems) {\r\n if (!Array.isArray(newItems)) {\r\n return;\r\n }\r\n let position = this.buffer.indexOf(wrapper);\r\n if (!newItems.reverse().some(newItem => newItem === wrapper.item)) {\r\n wrapper.op = 'remove';\r\n if(position === 0 && !newItems.length) {\r\n wrapper._op = 'isTop'; // to catch \"first\" edge case on remove\r\n }\r\n }\r\n newItems.forEach((newItem) => {\r\n if (newItem === wrapper.item) {\r\n position--;\r\n } else {\r\n // 3 parameter (isTop) is to catch \"first\" edge case on insert\r\n this.buffer.insert(position + 1, newItem, position === -1);\r\n }\r\n });\r\n }\r\n\r\n calculateProperties() {\r\n let rowTop = null, topHeight = 0;\r\n let topDone = false, bottomDone = false;\r\n const length = this.buffer.length;\r\n\r\n for (let i = 0; i < length; i++) {\r\n const item = this.buffer[i];\r\n const itemTop = item.element.offset().top;\r\n\r\n if (rowTop !== itemTop) { // a new row condition\r\n const itemHeight = item.element.outerHeight(true);\r\n const top = this.viewport.topDataPos() + topHeight + itemHeight;\r\n\r\n if (!topDone && top > this.viewport.topVisiblePos()) {\r\n topDone = true;\r\n this['topVisible'] = item.item;\r\n this['topVisibleElement'] = item.element;\r\n this['topVisibleScope'] = item.scope;\r\n }\r\n if (!bottomDone && (top >= this.viewport.bottomVisiblePos() || (i === length - 1 && this.isEOF()))) {\r\n bottomDone = true;\r\n this['bottomVisible'] = item.item;\r\n this['bottomVisibleElement'] = item.element;\r\n this['bottomVisibleScope'] = item.scope;\r\n }\r\n topHeight += itemHeight;\r\n }\r\n rowTop = itemTop;\r\n\r\n if (topDone && bottomDone) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n}\r\n\r\nexport default Adapter;\n\n\n// WEBPACK FOOTER //\n// ./src/modules/adapter.js"],"sourceRoot":""}
\ No newline at end of file
diff --git a/dist/ui-scroll.min.js b/dist/ui-scroll.min.js
index 6a4cb4e4..b2a0e629 100644
--- a/dist/ui-scroll.min.js
+++ b/dist/ui-scroll.min.js
@@ -1,8 +1,8 @@
/*!
* angular-ui-scroll
* https://github.com/angular-ui/ui-scroll
- * Version: 1.7.0 -- 2017-12-05T17:50:06.228Z
+ * Version: 1.7.0 -- 2018-04-13T11:46:50.511Z
* License: MIT
*/
-!function(e){function t(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};t.m=e,t.c=n,t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=0)}([function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}var r=n(1),o=i(r),a=n(2),u=i(a),s=n(3),l=i(s),c=n(4),f=i(c),d=n(6),h=i(d);angular.module("ui.scroll",[]).constant("JQLiteExtras",o.default).run(["JQLiteExtras",function(e){return window.jQuery?null:(new e).registerFor(angular.element)}]).directive("uiScrollViewport",function(){return{restrict:"A",controller:["$scope","$element",function(e,t){var n=this;return this.container=t,this.viewport=t,this.scope=e,angular.forEach(t.children(),function(e){"tbody"===e.tagName.toLowerCase()&&(n.viewport=angular.element(e))}),this}]}}).directive("uiScroll",["$log","$injector","$rootScope","$timeout","$interval","$q","$parse",function(e,t,n,i,r,o,a){function s(e,s,c,d,p){function m(t,n){var i=a(t)(e);return isNaN(i)?n:i}function g(){G.forEach(function(e){return e.run()}),G=[]}function v(e,t){var n=void 0;Number.isInteger(e[t])&&(n=e[t],Number.isInteger(n)&&(G=G.filter(function(e){return e.id!==t}),G.push({id:t,run:function(){return e[t]=n}})))}function b(e,t,n){var i=Object.getOwnPropertyDescriptor(e,t);if(!i||!i.set&&!i.get){var r=void 0;v(e,t),Object.defineProperty(e,t,{set:function(i){if(r=i,R.length&&!Q.length)return void v(e,t);Q[n]=i;var o=X.topDataPos();X.adjustPaddings(),"minIndex"===t&&X.onAfterMinIndexSet(o)},get:function(){return r}})}}function x(t){return t&&t!==z||e.$$destroyed}function y(){X.bind("resize",V),X.bind("scroll",V)}function w(){X.unbind("resize",V),X.unbind("scroll",V)}function I(){X.resetTopPadding(),X.resetBottomPadding(),arguments.length&&(W=arguments[0]),Q.reset(W),v(C,"minIndex"),v(C,"maxIndex"),M()}function E(e){return e.element.height()&&e.element[0].offsetParent}function P(e){E(e)&&(Q.forEach(function(e){"function"==typeof e.unregisterVisibilityWatcher&&(e.unregisterVisibilityWatcher(),delete e.unregisterVisibilityWatcher)}),R.length||i(function(){return M()}))}function $(e,t){T(e,t,X.insertElement),E(e)||(e.unregisterVisibilityWatcher=e.scope.$watch(function(){return P(e)})),q.hideElement(e)}function T(e,t,n){var i=null,r=t>0?Q[t-1].element:void 0;if(p(function(t,o){i=n(t,r),e.element=t,e.scope=o,o[H]=e.item}),Y.transform){var o=e.scope.uiScrollTdInitializer;o&&o.linking?Y.transform(e.scope,e.element):e.scope.uiScrollTdInitializer={onLink:function(){return Y.transform(e.scope,e.element)},scope:e.scope}}return i}function O(){var e=[],t=[],n=[],i=[];return Q.forEach(function(r,o){switch(r.op){case"prepend":t.unshift(r);break;case"append":$(r,o),r.op="none",i.push(r);break;case"insert":e=e.concat(T(r,o,X.insertElementAnimated)),r.op="none",i.push(r);break;case"remove":n.push(r)}}),n.forEach(function(t){return e=e.concat(X.removeItem(t))}),t.length&&t.forEach(function(e){$(e),e.op="none"}),Q.forEach(function(e,t){return e.scope.$index=Q.first+t}),{prepended:t,removed:n,inserted:i,animated:e}}function A(e,t){t.animated.length?o.all(t.animated).then(function(){X.adjustPaddings(),M(e)}):X.adjustPaddings()}function j(e,t){X.shouldLoadBottom()?(!t||Q.effectiveHeight(t.inserted)>0)&&1===R.push(!0)&&(Y.loading(!0),S(e)):X.shouldLoadTop()&&(!t||Q.effectiveHeight(t.prepended)>0||R[0])&&1===R.push(!1)&&(Y.loading(!0),S(e))}function k(){var t=O();return!e.$$phase&&!n.$$phase&&e.$digest(),t.inserted.forEach(function(e){return q.showElement(e)}),t.prepended.forEach(function(e){return q.showElement(e)}),t}function M(e){e||(R=[],e=++z);var t=k();x(e)||(A(e,t),j(e),R.length||Y.calculateProperties())}function U(e){var t=k();X.onAfterPrepend(t),x(e)||(A(e,t),g(),j(e,t),R.shift(),R.length?S(e):(Y.loading(!1),y(),Y.calculateProperties()))}function S(e){R[0]?Q.length&&!X.shouldLoadBottom()?U(e):K(function(t){x(e)||(t.length
0&&(X.clipTop(),Q.append(t)),U(e))}):Q.length&&!X.shouldLoadTop()?U(e):Z(function(t){x(e)||(t.length0&&(Q.length&&X.clipBottom(),Q.prepend(t)),U(e))})}function V(){n.$$phase||Y.isLoading||Y.disabled||(j(z),R.length?w():(Y.calculateProperties(),!e.$$phase&&e.$digest()))}function _(e){if(!Y.disabled){var t=X[0].scrollTop,n=X[0].scrollHeight-X[0].clientHeight;(0===t&&!Q.bof||t===n&&!Q.eof)&&e.preventDefault()}}var L=c.uiScroll.match(/^\s*(\w+)\s+in\s+([(\w|\$)\.]+)\s*$/);if(!L)throw new Error("Expected uiScroll in form of '_item_ in _datasource_' but got '"+c.uiScroll+"'");var C=null,H=L[1],N=L[2],B=d[0],D=Math.max(3,m(c.bufferSize,10)),F=Math.max(.3,m(c.padding,.5)),W=m(c.startIndex,1),z=0,R=[],q=new u.default(t,o),Q=new l.default(q,D,W),X=new f.default(q,Q,s,B,n,F),Y=new h.default(e,a,c,X,Q,M,I);B&&(B.adapter=Y);var J=function(){return"[object Object]"===Object.prototype.toString.call(C)&&"function"==typeof C.get};if(C=a(N)(e),!J()&&(C=t.get(N),!J()))throw new Error(N+" is not a valid datasource");var G=[];b(C,"minIndex","minIndexUser"),b(C,"maxIndex","maxIndexUser");var K=2!==C.get.length?function(e){return C.get(Q.next,D,e)}:function(e){C.get({index:Q.next,append:Q.length?Q[Q.length-1].item:void 0,count:D},e)},Z=2!==C.get.length?function(e){return C.get(Q.first-D,D,e)}:function(e){C.get({index:Q.first-D,prepend:Q.length?Q[0].item:void 0,count:D},e)};p(function(e,t){X.createPaddingElements(e[0]),t.$destroy(),e.remove()}),e.$on("$destroy",function(){w(),X.unbind("mousewheel",_)}),X.bind("mousewheel",_),function(){var e=0;if(X.applyContainerStyle())M();else var t=r(function(){if(e++,X.applyContainerStyle()&&(r.cancel(t),M()),50*e>=500)throw r.cancel(t),Error("ui-scroll directive requires a viewport with non-zero height in 500ms")},50)}()}return{require:["?^uiScrollViewport"],restrict:"A",transclude:"element",priority:1e3,terminal:!0,link:s}}])},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){var n=[],i=!0,r=!1,o=void 0;try{for(var a,u=e[Symbol.iterator]();!(i=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);i=!0);}catch(e){r=!0,o=e}finally{try{!i&&u.return&&u.return()}finally{if(r)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),o=function(){function e(e,t){for(var n=0;n0?{base:a.base-a.padding-a.border,outer:a.base,outerfull:a.base+a.margin}[i]:(r=u(e),o=r[t],(o<0||null===o)&&(o=e.style[t]||0),o=parseFloat(o)||0,{base:o-a.padding-a.border,outer:o,outerfull:o+a.padding+a.border+a.margin}[i])}var o=void 0,a=void 0,u=void 0,s=void 0;return a=angular.element.prototype.css,e.prototype.css=function(e,t){var n=this,i=n[0];if(i&&3!==i.nodeType&&8!==i.nodeType&&i.style)return a.call(n,e,t)},s=function(e){return e&&e.document&&e.location&&e.alert&&e.setInterval},window.getComputedStyle?(u=function(e){return window.getComputedStyle(e,null)},o=function(e,t){return parseFloat(t)}):(u=function(e){return e.currentStyle},o=function(e,t){var n=void 0,i=void 0,r=void 0,o=void 0,a=void 0,u=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source;return new RegExp("^("+u+")(?!px)[a-z%]+$","i").test(t)?(a=e.style,n=a.left,r=e.runtimeStyle,o=r&&r.left,r&&(r.left=a.left),a.left=t,i=a.pixelLeft,a.left=n,o&&(r.left=o),i):parseFloat(t)}),angular.forEach({before:function(e){var t,n,i,r,o,a,u;if(u=this,n=u[0],o=u.parent(),t=o.contents(),t[0]===n)return o.prepend(e);for(i=r=1,a=t.length-1;1<=a?r<=a:r>=a;i=1<=a?++r:--r)if(t[i]===n)return void angular.element(t[i-1]).after(e);throw new Error("invalid DOM structure "+n.outerHTML)},height:function(e){var t;return t=this,void 0!==e?(Number.isInteger(e)&&(e+="px"),a.call(t,"height",e)):i(this[0],"height","base")},outerHeight:function(e){return i(this[0],"height",e?"outerfull":"outer")},outerWidth:function(e){return i(this[0],"width",e?"outerfull":"outer")},offset:function(e){var t=void 0,n=void 0,i=this,r={top:0,left:0},o=i[0],a=o&&o.ownerDocument;if(arguments.length){if(void 0===e)return i;throw new Error("offset setter method is not implemented")}if(a)return t=a.documentElement,null!=o.getBoundingClientRect&&(r=o.getBoundingClientRect()),n=a.defaultView||a.parentWindow,{top:r.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0),left:r.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)}},scrollTop:function(e){return t(this,"top",e)},scrollLeft:function(e){return t(this,"left",e)}},function(t,n){if(!e.prototype[n])return e.prototype[n]=t})}}]),e}();t.default=a},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t,n,i){"insertRule"in e?e.insertRule(t+"{"+n+"}",i):"addRule"in e&&e.addRule(t,n,i)}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;ni.minIndexUser)return void i.minIndexUser++;i.minIndex===i.minIndexUser&&i.minIndexUser++}i.minIndex++},decrementMaxIndex:function(){null!==i.maxIndexUser&&i.maxIndex<=i.maxIndexUser&&i.maxIndexUser--,i.maxIndex--},getAbsMinIndex:function(){return null!==i.minIndexUser?Math.min(i.minIndexUser,i.minIndex):i.minIndex},getAbsMaxIndex:function(){return null!==i.maxIndexUser?Math.max(i.maxIndexUser,i.maxIndex):i.maxIndex},effectiveHeight:function(e){if(!e.length)return 0;var t=Number.MAX_VALUE,n=Number.NEGATIVE_INFINITY;return e.forEach(function(e){e.element[0].offsetParent&&(t=Math.min(t,e.element.offset().top),n=Math.max(n,e.element.offset().top+e.element.outerHeight(!0)))}),Math.max(0,n-t)}}),i.reset(n),i}Object.defineProperty(t,"__esModule",{value:!0}),t.default=i},function(e,t,n){"use strict";function i(e,t,n,i,r,a){function u(){return c.outerHeight()*a}var s=null,l=null,c=i&&i.viewport?i.viewport:angular.element(window),f=i&&i.container?i.container:void 0,d=i&&i.scope?i.scope:r;return c.css({"overflow-anchor":"none","overflow-y":"auto",display:"block"}),Object.assign(c,{getScope:function(){return d},createPaddingElements:function(e){s=new o.default(e),l=new o.default(e),n.before(s.element),n.after(l.element),s.height(0),l.height(0)},applyContainerStyle:function(){return!f||(f!==c&&c.css("height",window.getComputedStyle(f[0]).height),c.height()>0)},bottomDataPos:function(){var e=c[0].scrollHeight;return(e=null!=e?e:c[0].document.documentElement.scrollHeight)-l.height()},topDataPos:function(){return s.height()},bottomVisiblePos:function(){return c.scrollTop()+c.outerHeight()},topVisiblePos:function(){return c.scrollTop()},insertElement:function(t,n){return e.insertElement(t,n||s.element)},insertElementAnimated:function(t,n){return e.insertElementAnimated(t,n||s.element)},shouldLoadBottom:function(){return!t.eof&&c.bottomDataPos()=0&&(i=t[o].element.outerHeight(!0),!(n+i>r));o--)l.cache.add(t[o]),n+=i,e++;e>0&&(t.eof=!1,t.remove(t.length-e,t.length),t.next-=e,c.adjustPaddings())},shouldLoadTop:function(){return!t.bof&&c.topDataPos()>c.topVisiblePos()-u()},clipTop:function(){for(var e=0,n=0,i=0,r=c.topVisiblePos()-c.topDataPos()-u(),o=0;or));o++)s.cache.add(t[o]),n+=i,e++;e>0&&(s.height(s.height()+n),t.bof=!1,t.remove(0,e),t.first+=e)},adjustPaddings:function(){if(t.length){var e=t.reduce(function(e,t){return e+t.element.outerHeight(!0)},0),n=0,i=0;s.cache.forEach(function(e){e.index=t.next&&(r+=e.height,o++)});var a=e+n+r,u=a/(i+o+t.length),c=null!==t.minIndexUser&&t.minIndex>t.minIndexUser,f=null!==t.maxIndexUser&&t.maxIndext.minIndexUser){var n=s.height()-e;for(c.scrollTop(c.scrollTop()+n);(n-=c.scrollTop())>0;)l.height(l.height()+n),c.scrollTop(c.scrollTop()+n)}},onAfterPrepend:function(e){if(e.prepended.length){var n=t.effectiveHeight(e.prepended),i=s.height()-n;i>=0?s.height(i):(s.height(0),c.scrollTop(c.scrollTop()-i))}},resetTopPadding:function(){s.height(0),s.cache.clear()},resetBottomPadding:function(){l.height(0),l.cache.clear()},removeCacheItem:function(e,t){s.cache.remove(e,t),l.cache.remove(e,t)},removeItem:function(e){return this.removeCacheItem(e),t.remove(e)}}),c}Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(5),o=function(e){return e&&e.__esModule?e:{default:e}}(r)},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(){var e=[];return e.push.apply(e,arguments),Object.setPrototypeOf(e,r.prototype),e}function o(e){if(e.nodeType!==Node.ELEMENT_NODE)throw new Error("ui-scroll directive requires an Element node for templating the view");var t=void 0;switch(e.tagName.toLowerCase()){case"dl":throw new Error("ui-scroll directive does not support <"+e.tagName+"> as a repeating tag: "+e.outerHTML);case"tr":t=angular.element("").find("tr");break;case"li":t=angular.element("");break;default:t=angular.element("")}return t}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n=0;t--)if(this[t].index===e.scope.$index)return void(this[t].height=e.element.outerHeight());this.push({index:e.scope.$index,height:e.element.outerHeight()}),this.sort(function(e,t){return e.indext.index?1:0})}},{key:"remove",value:function(e,t){for(var n=e%1==0?e:e.scope.$index,i=e%1==0?t:"isTop"===e._op,r=this.length-1;r>=0;r--)if(this[r].index===n){this.splice(r,1);break}if(!i)for(var o=this.length-1;o>=0;o--)this[o].index>n&&this[o].index--}},{key:"clear",value:function(){this.length=0}}]),e}();r.prototype=Object.create(Array.prototype),Object.getOwnPropertyNames(u.prototype).forEach(function(e){return r.prototype[e]=u.prototype[e]});var s=function(){function e(t){i(this,e),this.element=o(t),this.cache=new r}return a(e,[{key:"height",value:function(){return this.element.height.apply(this.element,arguments)}}]),e}();t.default=s},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n=0;n--)this.publicContext[t[n]]=this[t[n]].bind(this);for(var i=["isLoading","topVisible","topVisibleElement","topVisibleScope","bottomVisible","bottomVisibleElement","bottomVisibleScope"],r=i.length-1;r>=0;r--)!function(t){var n=void 0,r=e.$attr[i[t]];Object.defineProperty(e,i[t],{get:function(){return n},set:function(o){n=o,e.publicContext[i[t]]=o,r&&e.$parse(r).assign(e.startScope,o)}})}(r);Object.defineProperty(this.publicContext,"disabled",{get:function(){return e.disabled},set:function(t){return(e.disabled=t)?null:e.doAdjust()}})}},{key:"loading",value:function(e){this.isLoading=e}},{key:"isBOF",value:function(){return this.buffer.bof}},{key:"isEOF",value:function(){return this.buffer.eof}},{key:"isEmpty",value:function(){return!this.buffer.length}},{key:"append",value:function(e){this.buffer.append(e),this.doAdjust(),this.viewport.clipTop(),this.viewport.clipBottom()}},{key:"prepend",value:function(e){this.buffer.prepend(e),this.doAdjust(),this.viewport.clipTop(),this.viewport.clipBottom()}},{key:"applyUpdates",value:function(e,t){"function"==typeof e?this.applyUpdatesFunc(e):this.applyUpdatesIndex(e,t),this.doAdjust()}},{key:"applyUpdatesFunc",value:function(e){var t=this;this.buffer.slice(0).forEach(function(n){t.applyUpdate(n,e(n.item,n.scope,n.element))})}},{key:"applyUpdatesIndex",value:function(e,t){if(e%1!=0)throw new Error("applyUpdates - "+e+" is not a valid index (should be an integer)");var n=e-this.buffer.first;n>=0&&n=this.buffer.getAbsMinIndex()&&e<=this.buffer.getAbsMaxIndex()&&Array.isArray(t)&&!t.length&&(this.viewport.removeCacheItem(e,e===this.buffer.minIndex),e===this.buffer.getAbsMinIndex()?this.buffer.incrementMinIndex():this.buffer.decrementMaxIndex())}},{key:"applyUpdate",value:function(e,t){var n=this;if(Array.isArray(t)){var i=this.buffer.indexOf(e);t.reverse().some(function(t){return t===e.item})||(e.op="remove",0!==i||t.length||(e._op="isTop")),t.forEach(function(t){t===e.item?i--:n.buffer.insert(i+1,t,-1===i)})}}},{key:"calculateProperties",value:function(){for(var e=null,t=0,n=!1,i=!1,r=this.buffer.length,o=0;othis.viewport.topVisiblePos()&&(n=!0,this.topVisible=a.item,this.topVisibleElement=a.element,this.topVisibleScope=a.scope),!i&&(l>=this.viewport.bottomVisiblePos()||o===r-1&&this.isEOF())&&(i=!0,this.bottomVisible=a.item,this.bottomVisibleElement=a.element,this.bottomVisibleScope=a.scope),t+=s}if(e=u,n&&i)break}}}]),e}();t.default=o}]);
+!function(e){function t(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};t.m=e,t.c=n,t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=0)}([function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}var r=n(1),o=i(r),a=n(2),u=i(a),s=n(3),l=i(s),c=n(4),f=i(c),d=n(6),h=i(d);angular.module("ui.scroll",[]).constant("JQLiteExtras",o.default).run(["JQLiteExtras",function(e){window.jQuery||(new e).registerFor(angular.element),u.default.addCSSRules()}]).directive("uiScrollViewport",function(){return{restrict:"A",controller:["$scope","$element",function(e,t){var n=this;return this.container=t,this.viewport=t,this.scope=e,angular.forEach(t.children(),function(e){"tbody"===e.tagName.toLowerCase()&&(n.viewport=angular.element(e))}),this}]}}).directive("uiScroll",["$log","$injector","$rootScope","$timeout","$interval","$q","$parse",function(e,t,n,i,r,o,a){function s(e,s,c,d,p){function m(t,n){var i=a(t)(e);return isNaN(i)?n:i}function g(){G.forEach(function(e){return e.run()}),G=[]}function v(e,t){var n=void 0;Number.isInteger(e[t])&&(n=e[t],Number.isInteger(n)&&(G=G.filter(function(e){return e.id!==t}),G.push({id:t,run:function(){return e[t]=n}})))}function b(e,t,n){var i=Object.getOwnPropertyDescriptor(e,t);if(!i||!i.set&&!i.get){var r=void 0;v(e,t),Object.defineProperty(e,t,{set:function(i){if(r=i,z.length&&!Q.length)return void v(e,t);Q[n]=i;var o=X.topDataPos();X.adjustPaddings(),"minIndex"===t&&X.onAfterMinIndexSet(o)},get:function(){return r}})}}function x(t){return t&&t!==W||e.$$destroyed}function y(){X.bind("resize",V),X.bind("scroll",V)}function w(){X.unbind("resize",V),X.unbind("scroll",V)}function I(){X.resetTopPadding(),X.resetBottomPadding(),arguments.length&&(R=arguments[0]),Q.reset(R),v(L,"minIndex"),v(L,"maxIndex"),S()}function E(e){return e.element.height()&&e.element[0].offsetParent}function P(e){E(e)&&(Q.forEach(function(e){"function"==typeof e.unregisterVisibilityWatcher&&(e.unregisterVisibilityWatcher(),delete e.unregisterVisibilityWatcher)}),z.length||i(function(){return S()}))}function $(e,t){T(e,t,X.insertElement),E(e)||(e.unregisterVisibilityWatcher=e.scope.$watch(function(){return P(e)})),q.hideElement(e)}function T(e,t,n){var i=null,r=t>0?Q[t-1].element:void 0;if(p(function(t,o){i=n(t,r),e.element=t,e.scope=o,o[H]=e.item}),Y.transform){var o=e.scope.uiScrollTdInitializer;o&&o.linking?Y.transform(e.scope,e.element):e.scope.uiScrollTdInitializer={onLink:function(){return Y.transform(e.scope,e.element)},scope:e.scope}}return i}function O(){var e=[],t=[],n=[],i=[];return Q.forEach(function(r,o){switch(r.op){case"prepend":t.unshift(r);break;case"append":$(r,o),r.op="none",i.push(r);break;case"insert":e=e.concat(T(r,o,X.insertElementAnimated)),r.op="none",i.push(r);break;case"remove":n.push(r)}}),n.forEach(function(t){return e=e.concat(X.removeItem(t))}),t.length&&t.forEach(function(e){$(e),e.op="none"}),Q.forEach(function(e,t){return e.scope.$index=Q.first+t}),{prepended:t,removed:n,inserted:i,animated:e}}function k(e,t){t.animated.length?o.all(t.animated).then(function(){X.adjustPaddings(),S(e)}):X.adjustPaddings()}function A(e,t){X.shouldLoadBottom()?(!t||Q.effectiveHeight(t.inserted)>0)&&1===z.push(!0)&&(Y.loading(!0),U(e)):X.shouldLoadTop()&&(!t||Q.effectiveHeight(t.prepended)>0||z[0])&&1===z.push(!1)&&(Y.loading(!0),U(e))}function j(){var t=O();return!e.$$phase&&!n.$$phase&&e.$digest(),t.inserted.forEach(function(e){return q.showElement(e)}),t.prepended.forEach(function(e){return q.showElement(e)}),t}function S(e){e||(z=[],e=++W);var t=j();x(e)||(k(e,t),A(e),z.length||Y.calculateProperties())}function M(e){var t=j();X.onAfterPrepend(t),x(e)||(k(e,t),g(),A(e,t),z.shift(),z.length?U(e):(Y.loading(!1),y(),Y.calculateProperties()))}function U(e){z[0]?Q.length&&!X.shouldLoadBottom()?M(e):K(function(t){x(e)||(t.length0&&(X.clipTop(),Q.append(t)),M(e))}):Q.length&&!X.shouldLoadTop()?M(e):Z(function(t){x(e)||(t.length0&&(Q.length&&X.clipBottom(),Q.prepend(t)),M(e))})}function V(){n.$$phase||Y.isLoading||Y.disabled||(A(W),z.length?w():(Y.calculateProperties(),!e.$$phase&&e.$digest()))}function _(e){if(!Y.disabled){var t=X[0].scrollTop,n=X[0].scrollHeight-X[0].clientHeight;(0===t&&!Q.bof||t===n&&!Q.eof)&&e.preventDefault()}}var C=c.uiScroll.match(/^\s*(\w+)\s+in\s+([(\w|\$)\.]+)\s*$/);if(!C)throw new Error("Expected uiScroll in form of '_item_ in _datasource_' but got '"+c.uiScroll+"'");var L=null,H=C[1],N=C[2],B=d[0],D=Math.max(3,m(c.bufferSize,10)),F=Math.max(.3,m(c.padding,.5)),R=m(c.startIndex,1),W=0,z=[],q=new u.default(t,o),Q=new l.default(q,D,R),X=new f.default(q,Q,s,B,n,F),Y=new h.default(e,a,c,X,Q,S,I);B&&(B.adapter=Y);var J=function(){return"[object Object]"===Object.prototype.toString.call(L)&&"function"==typeof L.get};if(L=a(N)(e),!J()&&(L=t.get(N),!J()))throw new Error(N+" is not a valid datasource");var G=[];b(L,"minIndex","minIndexUser"),b(L,"maxIndex","maxIndexUser");var K=2!==L.get.length?function(e){return L.get(Q.next,D,e)}:function(e){L.get({index:Q.next,append:Q.length?Q[Q.length-1].item:void 0,count:D},e)},Z=2!==L.get.length?function(e){return L.get(Q.first-D,D,e)}:function(e){L.get({index:Q.first-D,prepend:Q.length?Q[0].item:void 0,count:D},e)};p(function(e,t){X.createPaddingElements(e[0]),t.$destroy(),e.remove()}),e.$on("$destroy",function(){w(),X.unbind("mousewheel",_)}),X.bind("mousewheel",_),function(){var e=0;if(X.applyContainerStyle())S();else var t=r(function(){if(e++,X.applyContainerStyle()&&(r.cancel(t),S()),50*e>=500)throw r.cancel(t),Error("ui-scroll directive requires a viewport with non-zero height in 500ms")},50)}()}return{require:["?^uiScrollViewport"],restrict:"A",transclude:"element",priority:1e3,terminal:!0,link:s}}])},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){var n=[],i=!0,r=!1,o=void 0;try{for(var a,u=e[Symbol.iterator]();!(i=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);i=!0);}catch(e){r=!0,o=e}finally{try{!i&&u.return&&u.return()}finally{if(r)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),o=function(){function e(e,t){for(var n=0;n0?{base:a.base-a.padding-a.border,outer:a.base,outerfull:a.base+a.margin}[i]:(r=u(e),o=r[t],(o<0||null===o)&&(o=e.style[t]||0),o=parseFloat(o)||0,{base:o-a.padding-a.border,outer:o,outerfull:o+a.padding+a.border+a.margin}[i])}var o=void 0,a=void 0,u=void 0,s=void 0;return a=angular.element.prototype.css,e.prototype.css=function(e,t){var n=this,i=n[0];if(i&&3!==i.nodeType&&8!==i.nodeType&&i.style)return a.call(n,e,t)},s=function(e){return e&&e.document&&e.location&&e.alert&&e.setInterval},window.getComputedStyle?(u=function(e){return window.getComputedStyle(e,null)},o=function(e,t){return parseFloat(t)}):(u=function(e){return e.currentStyle},o=function(e,t){var n=void 0,i=void 0,r=void 0,o=void 0,a=void 0,u=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source;return new RegExp("^("+u+")(?!px)[a-z%]+$","i").test(t)?(a=e.style,n=a.left,r=e.runtimeStyle,o=r&&r.left,r&&(r.left=a.left),a.left=t,i=a.pixelLeft,a.left=n,o&&(r.left=o),i):parseFloat(t)}),angular.forEach({before:function(e){var t,n,i,r,o,a,u;if(u=this,n=u[0],o=u.parent(),t=o.contents(),t[0]===n)return o.prepend(e);for(i=r=1,a=t.length-1;1<=a?r<=a:r>=a;i=1<=a?++r:--r)if(t[i]===n)return void angular.element(t[i-1]).after(e);throw new Error("invalid DOM structure "+n.outerHTML)},height:function(e){var t;return t=this,void 0!==e?(Number.isInteger(e)&&(e+="px"),a.call(t,"height",e)):i(this[0],"height","base")},outerHeight:function(e){return i(this[0],"height",e?"outerfull":"outer")},outerWidth:function(e){return i(this[0],"width",e?"outerfull":"outer")},offset:function(e){var t=void 0,n=void 0,i=this,r={top:0,left:0},o=i[0],a=o&&o.ownerDocument;if(arguments.length){if(void 0===e)return i;throw new Error("offset setter method is not implemented")}if(a)return t=a.documentElement,null!=o.getBoundingClientRect&&(r=o.getBoundingClientRect()),n=a.defaultView||a.parentWindow,{top:r.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0),left:r.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)}},scrollTop:function(e){return t(this,"top",e)},scrollLeft:function(e){return t(this,"left",e)}},function(t,n){if(!e.prototype[n])return e.prototype[n]=t})}}]),e}();t.default=a},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;ni.minIndexUser)return void i.minIndexUser++;i.minIndex===i.minIndexUser&&i.minIndexUser++}i.minIndex++},decrementMaxIndex:function(){null!==i.maxIndexUser&&i.maxIndex<=i.maxIndexUser&&i.maxIndexUser--,i.maxIndex--},getAbsMinIndex:function(){return null!==i.minIndexUser?Math.min(i.minIndexUser,i.minIndex):i.minIndex},getAbsMaxIndex:function(){return null!==i.maxIndexUser?Math.max(i.maxIndexUser,i.maxIndex):i.maxIndex},effectiveHeight:function(e){if(!e.length)return 0;var t=Number.MAX_VALUE,n=Number.NEGATIVE_INFINITY;return e.forEach(function(e){e.element[0].offsetParent&&(t=Math.min(t,e.element.offset().top),n=Math.max(n,e.element.offset().top+e.element.outerHeight(!0)))}),Math.max(0,n-t)}}),i.reset(n),i}Object.defineProperty(t,"__esModule",{value:!0}),t.default=i},function(e,t,n){"use strict";function i(e,t,n,i,r,a){function u(){return c.outerHeight()*a}var s=null,l=null,c=i&&i.viewport?i.viewport:angular.element(window),f=i&&i.container?i.container:void 0,d=i&&i.scope?i.scope:r;return c.css({"overflow-anchor":"none","overflow-y":"auto",display:"block"}),Object.assign(c,{getScope:function(){return d},createPaddingElements:function(e){s=new o.default(e),l=new o.default(e),n.before(s.element),n.after(l.element),s.height(0),l.height(0)},applyContainerStyle:function(){return!f||(f!==c&&c.css("height",window.getComputedStyle(f[0]).height),c.height()>0)},bottomDataPos:function(){var e=c[0].scrollHeight;return(e=null!=e?e:c[0].document.documentElement.scrollHeight)-l.height()},topDataPos:function(){return s.height()},bottomVisiblePos:function(){return c.scrollTop()+c.outerHeight()},topVisiblePos:function(){return c.scrollTop()},insertElement:function(t,n){return e.insertElement(t,n||s.element)},insertElementAnimated:function(t,n){return e.insertElementAnimated(t,n||s.element)},shouldLoadBottom:function(){return!t.eof&&c.bottomDataPos()=0&&(i=t[o].element.outerHeight(!0),!(n+i>r));o--)l.cache.add(t[o]),n+=i,e++;e>0&&(t.eof=!1,t.remove(t.length-e,t.length),t.next-=e,c.adjustPaddings())},shouldLoadTop:function(){return!t.bof&&c.topDataPos()>c.topVisiblePos()-u()},clipTop:function(){for(var e=0,n=0,i=0,r=c.topVisiblePos()-c.topDataPos()-u(),o=0;or));o++)s.cache.add(t[o]),n+=i,e++;e>0&&(s.height(s.height()+n),t.bof=!1,t.remove(0,e),t.first+=e)},adjustPaddings:function(){if(t.length){var e=t.reduce(function(e,t){return e+t.element.outerHeight(!0)},0),n=0,i=0;s.cache.forEach(function(e){e.index=t.next&&(r+=e.height,o++)});var a=e+n+r,u=a/(i+o+t.length),c=null!==t.minIndexUser&&t.minIndex>t.minIndexUser,f=null!==t.maxIndexUser&&t.maxIndext.minIndexUser){var n=s.height()-e;for(c.scrollTop(c.scrollTop()+n);(n-=c.scrollTop())>0;)l.height(l.height()+n),c.scrollTop(c.scrollTop()+n)}},onAfterPrepend:function(e){if(e.prepended.length){var n=t.effectiveHeight(e.prepended),i=s.height()-n;i>=0?s.height(i):(s.height(0),c.scrollTop(c.scrollTop()-i))}},resetTopPadding:function(){s.height(0),s.cache.clear()},resetBottomPadding:function(){l.height(0),l.cache.clear()},removeCacheItem:function(e,t){s.cache.remove(e,t),l.cache.remove(e,t)},removeItem:function(e){return this.removeCacheItem(e),t.remove(e)}}),c}Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(5),o=function(e){return e&&e.__esModule?e:{default:e}}(r)},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(){var e=[];return e.push.apply(e,arguments),Object.setPrototypeOf(e,r.prototype),e}function o(e){if(e.nodeType!==Node.ELEMENT_NODE)throw new Error("ui-scroll directive requires an Element node for templating the view");var t=void 0;switch(e.tagName.toLowerCase()){case"dl":throw new Error("ui-scroll directive does not support <"+e.tagName+"> as a repeating tag: "+e.outerHTML);case"tr":t=angular.element("").find("tr");break;case"li":t=angular.element("");break;default:t=angular.element("")}return t}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n=0;t--)if(this[t].index===e.scope.$index)return void(this[t].height=e.element.outerHeight());this.push({index:e.scope.$index,height:e.element.outerHeight()}),this.sort(function(e,t){return e.indext.index?1:0})}},{key:"remove",value:function(e,t){for(var n=e%1==0?e:e.scope.$index,i=e%1==0?t:"isTop"===e._op,r=this.length-1;r>=0;r--)if(this[r].index===n){this.splice(r,1);break}if(!i)for(var o=this.length-1;o>=0;o--)this[o].index>n&&this[o].index--}},{key:"clear",value:function(){this.length=0}}]),e}();r.prototype=Object.create(Array.prototype),Object.getOwnPropertyNames(u.prototype).forEach(function(e){return r.prototype[e]=u.prototype[e]});var s=function(){function e(t){i(this,e),this.element=o(t),this.cache=new r}return a(e,[{key:"height",value:function(){return this.element.height.apply(this.element,arguments)}}]),e}();t.default=s},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n=0;n--)this.publicContext[t[n]]=this[t[n]].bind(this);for(var i=["isLoading","topVisible","topVisibleElement","topVisibleScope","bottomVisible","bottomVisibleElement","bottomVisibleScope"],r=i.length-1;r>=0;r--)!function(t){var n=void 0,r=e.$attr[i[t]];Object.defineProperty(e,i[t],{get:function(){return n},set:function(o){n=o,e.publicContext[i[t]]=o,r&&e.$parse(r).assign(e.startScope,o)}})}(r);Object.defineProperty(this.publicContext,"disabled",{get:function(){return e.disabled},set:function(t){return(e.disabled=t)?null:e.doAdjust()}})}},{key:"loading",value:function(e){this.isLoading=e}},{key:"isBOF",value:function(){return this.buffer.bof}},{key:"isEOF",value:function(){return this.buffer.eof}},{key:"isEmpty",value:function(){return!this.buffer.length}},{key:"append",value:function(e){this.buffer.append(e),this.doAdjust(),this.viewport.clipTop(),this.viewport.clipBottom()}},{key:"prepend",value:function(e){this.buffer.prepend(e),this.doAdjust(),this.viewport.clipTop(),this.viewport.clipBottom()}},{key:"applyUpdates",value:function(e,t){"function"==typeof e?this.applyUpdatesFunc(e):this.applyUpdatesIndex(e,t),this.doAdjust()}},{key:"applyUpdatesFunc",value:function(e){var t=this;this.buffer.slice(0).forEach(function(n){t.applyUpdate(n,e(n.item,n.scope,n.element))})}},{key:"applyUpdatesIndex",value:function(e,t){if(e%1!=0)throw new Error("applyUpdates - "+e+" is not a valid index (should be an integer)");var n=e-this.buffer.first;n>=0&&n=this.buffer.getAbsMinIndex()&&e<=this.buffer.getAbsMaxIndex()&&Array.isArray(t)&&!t.length&&(this.viewport.removeCacheItem(e,e===this.buffer.minIndex),e===this.buffer.getAbsMinIndex()?this.buffer.incrementMinIndex():this.buffer.decrementMaxIndex())}},{key:"applyUpdate",value:function(e,t){var n=this;if(Array.isArray(t)){var i=this.buffer.indexOf(e);t.reverse().some(function(t){return t===e.item})||(e.op="remove",0!==i||t.length||(e._op="isTop")),t.forEach(function(t){t===e.item?i--:n.buffer.insert(i+1,t,-1===i)})}}},{key:"calculateProperties",value:function(){for(var e=null,t=0,n=!1,i=!1,r=this.buffer.length,o=0;othis.viewport.topVisiblePos()&&(n=!0,this.topVisible=a.item,this.topVisibleElement=a.element,this.topVisibleScope=a.scope),!i&&(l>=this.viewport.bottomVisiblePos()||o===r-1&&this.isEOF())&&(i=!0,this.bottomVisible=a.item,this.bottomVisibleElement=a.element,this.bottomVisibleScope=a.scope),t+=s}if(e=u,n&&i)break}}}]),e}();t.default=o}]);
//# sourceMappingURL=ui-scroll.min.js.map
\ No newline at end of file
diff --git a/dist/ui-scroll.min.js.map b/dist/ui-scroll.min.js.map
index f9788147..c22df05d 100644
--- a/dist/ui-scroll.min.js.map
+++ b/dist/ui-scroll.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///ui-scroll.min.js","webpack:///webpack/bootstrap 7b7663c4ef0bd85aea15","webpack:///./src/ui-scroll.js","webpack:///./src/modules/jqLiteExtras.js","webpack:///./src/modules/elementRoutines.js","webpack:///./src/modules/buffer.js","webpack:///./src/modules/viewport.js","webpack:///./src/modules/padding.js","webpack:///./src/modules/adapter.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","_interopRequireDefault","obj","default","_jqLiteExtras","_jqLiteExtras2","_elementRoutines","_elementRoutines2","_buffer","_buffer2","_viewport","_viewport2","_adapter","_adapter2","angular","constant","run","JQLiteExtras","window","jQuery","registerFor","element","directive","restrict","controller","scope","_this","this","container","viewport","forEach","children","child","tagName","toLowerCase","console","$injector","$rootScope","$timeout","$interval","$q","$parse","link","$scope","$attr","controllers","linker","parseNumericAttr","value","defaultValue","result","isNaN","onRenderHandlersRunner","onRenderHandlers","handler","persistDatasourceIndex","datasource","propName","Number","isInteger","filter","id","push","defineDatasourceIndex","propUserName","descriptor","getOwnPropertyDescriptor","set","pending","length","buffer","topPaddingHeightOld","topDataPos","adjustPaddings","onAfterMinIndexSet","isInvalid","rid","ridActual","$$destroyed","bindEvents","bind","resizeAndScrollHandler","unbindEvents","unbind","reload","resetTopPadding","resetBottomPadding","arguments","startIndex","reset","doAdjust","isElementVisible","wrapper","height","offsetParent","visibilityWatcher","item","unregisterVisibilityWatcher","insertWrapperContent","insertAfter","createElement","insertElement","$watch","elementRoutines","hideElement","promises","sibling","undefined","clone","itemName","adapter","transform","tdInitializer","uiScrollTdInitializer","linking","onLink","updateDOM","toBePrepended","toBeRemoved","inserted","op","unshift","concat","insertElementAnimated","removeItem","$index","first","prepended","removed","animated","updatePaddings","updates","all","then","enqueueFetch","shouldLoadBottom","effectiveHeight","loading","fetch","shouldLoadTop","processUpdates","$$phase","$digest","w","showElement","calculateProperties","doAdjustAfterFetch","onAfterPrepend","shift","fetchNext","bufferSize","eof","clipTop","append","fetchPrevious","bof","clipBottom","prepend","isLoading","disabled","wheelHandler","event","scrollTop","yMax","scrollHeight","clientHeight","preventDefault","match","uiScroll","Error","datasourceName","viewportController","Math","max","padding","isDatasourceValid","toString","success","next","index","count","createPaddingElements","$destroy","remove","$on","tryCount","applyContainerStyle","timer","cancel","require","transclude","priority","terminal","_classCallCheck","instance","Constructor","TypeError","_slicedToArray","sliceIterator","arr","_arr","_n","_d","_e","_s","_i","Symbol","iterator","done","err","Array","isArray","_createClass","defineProperties","target","props","writable","key","protoProps","staticProps","scrollTo","self","direction","elem","_top$left$direction","top","left","method","prop","preserve","isValueDefined","isWindow","document","documentElement","getMeasurements","measure","base","borderA","borderB","computedMarginA","computedMarginB","computedStyle","dirA","dirB","marginA","marginB","paddingA","paddingB","width","border","margin","_width$height$measure","offsetWidth","offsetHeight","getStyle","convertToPx","getWidthHeight","measurements","outer","outerfull","style","parseFloat","css","nodeType","location","alert","setInterval","getComputedStyle","currentStyle","rs","rsLeft","core_pnum","source","RegExp","test","runtimeStyle","pixelLeft","before","newElem","j","parent","ref","contents","after","outerHTML","outerHeight","option","outerWidth","offset","docElem","win","box","doc","ownerDocument","getBoundingClientRect","defaultView","parentWindow","pageYOffset","clientTop","pageXOffset","scrollLeft","clientLeft","addCSSRule","sheet","selector","rules","insertRule","addRule","hideClassToken","ElementRoutines","$animate","has","isAngularVersionLessThen1_3","version","major","minor","styleSheets","addClass","removeClass","newElement","previousElement","deferred","defer","enter","resolve","promise","removeElement","leave","ScrollBuffer","create","assign","size","minIndex","maxIndex","minIndexUser","maxIndexUser","items","insert","reverse","min","operation","isTop","splice","arg1","arg2","indexOf","_op","getAbsMinIndex","incrementMinIndex","decrementMaxIndex","removeElementAnimated","getAbsMaxIndex","elements","MAX_VALUE","bottom","NEGATIVE_INFINITY","Viewport","bufferPadding","topPadding","bottomPadding","overflow-anchor","overflow-y","display","getScope","template","_padding2","bottomDataPos","bottomVisiblePos","topVisiblePos","e","overage","overageHeight","itemHeight","emptySpaceHeight","cache","add","visibleItemsHeight","reduce","summ","topPaddingHeight","topCount","bottomPaddingHeight","bottomCount","totalHeight","averageItemHeight","adjustTopPadding","adjustBottomPadding","topPaddingHeightAdd","bottomPaddingHeightAdd","diff","paddingHeight","clear","removeCacheItem","_padding","Cache","apply","setPrototypeOf","generateElement","Node","ELEMENT_NODE","find","CacheProto","sort","a","b","argument","_isTop","getOwnPropertyNames","methodName","Padding","Adapter","viewportScope","startScope","$parent","publicContext","assignAdapter","generatePublicContext","adapterAttr","replace","adapterOnScope","error","message","publicMethods","publicProps","attr","newItems","applyUpdatesFunc","applyUpdatesIndex","cb","_this2","slice","applyUpdate","_index","_this3","position","some","newItem","rowTop","topHeight","topDone","bottomDone","itemTop","isEOF"],"mappings":"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","file":"ui-scroll.min.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _jqLiteExtras = __webpack_require__(1);\n\nvar _jqLiteExtras2 = _interopRequireDefault(_jqLiteExtras);\n\nvar _elementRoutines = __webpack_require__(2);\n\nvar _elementRoutines2 = _interopRequireDefault(_elementRoutines);\n\nvar _buffer = __webpack_require__(3);\n\nvar _buffer2 = _interopRequireDefault(_buffer);\n\nvar _viewport = __webpack_require__(4);\n\nvar _viewport2 = _interopRequireDefault(_viewport);\n\nvar _adapter = __webpack_require__(6);\n\nvar _adapter2 = _interopRequireDefault(_adapter);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nangular.module('ui.scroll', []).constant('JQLiteExtras', _jqLiteExtras2.default).run(['JQLiteExtras', function (JQLiteExtras) {\n return !window.jQuery ? new JQLiteExtras().registerFor(angular.element) : null;\n}]).directive('uiScrollViewport', function () {\n return {\n restrict: 'A',\n controller: ['$scope', '$element', function (scope, element) {\n var _this = this;\n\n this.container = element;\n this.viewport = element;\n this.scope = scope;\n\n angular.forEach(element.children(), function (child) {\n if (child.tagName.toLowerCase() === 'tbody') {\n _this.viewport = angular.element(child);\n }\n });\n\n return this;\n }]\n };\n}).directive('uiScroll', ['$log', '$injector', '$rootScope', '$timeout', '$interval', '$q', '$parse', function (console, $injector, $rootScope, $timeout, $interval, $q, $parse) {\n\n return {\n require: ['?^uiScrollViewport'],\n restrict: 'A',\n transclude: 'element',\n priority: 1000,\n terminal: true,\n link: link\n };\n\n function link($scope, element, $attr, controllers, linker) {\n var match = $attr.uiScroll.match(/^\\s*(\\w+)\\s+in\\s+([(\\w|\\$)\\.]+)\\s*$/);\n if (!match) {\n throw new Error('Expected uiScroll in form of \\'_item_ in _datasource_\\' but got \\'' + $attr.uiScroll + '\\'');\n }\n\n function parseNumericAttr(value, defaultValue) {\n var result = $parse(value)($scope);\n return isNaN(result) ? defaultValue : result;\n }\n\n var BUFFER_MIN = 3;\n var BUFFER_DEFAULT = 10;\n var PADDING_MIN = 0.3;\n var PADDING_DEFAULT = 0.5;\n var MAX_VIEWPORT_DELAY = 500;\n var VIEWPORT_POLLING_INTERVAL = 50;\n\n var datasource = null;\n var itemName = match[1];\n var datasourceName = match[2];\n var viewportController = controllers[0];\n var bufferSize = Math.max(BUFFER_MIN, parseNumericAttr($attr.bufferSize, BUFFER_DEFAULT));\n var padding = Math.max(PADDING_MIN, parseNumericAttr($attr.padding, PADDING_DEFAULT));\n var startIndex = parseNumericAttr($attr.startIndex, 1);\n var ridActual = 0; // current data revision id\n var pending = [];\n\n var elementRoutines = new _elementRoutines2.default($injector, $q);\n var buffer = new _buffer2.default(elementRoutines, bufferSize, startIndex);\n var viewport = new _viewport2.default(elementRoutines, buffer, element, viewportController, $rootScope, padding);\n var adapter = new _adapter2.default($scope, $parse, $attr, viewport, buffer, doAdjust, reload);\n\n if (viewportController) {\n viewportController.adapter = adapter;\n }\n\n var isDatasourceValid = function isDatasourceValid() {\n return Object.prototype.toString.call(datasource) === '[object Object]' && typeof datasource.get === 'function';\n };\n\n datasource = $parse(datasourceName)($scope); // try to get datasource on scope\n if (!isDatasourceValid()) {\n datasource = $injector.get(datasourceName); // try to inject datasource as service\n if (!isDatasourceValid()) {\n throw new Error(datasourceName + ' is not a valid datasource');\n }\n }\n\n var onRenderHandlers = [];\n function onRenderHandlersRunner() {\n onRenderHandlers.forEach(function (handler) {\n return handler.run();\n });\n onRenderHandlers = [];\n }\n function persistDatasourceIndex(datasource, propName) {\n var getter = void 0;\n // need to postpone min/maxIndexUser processing if the view is empty\n if (Number.isInteger(datasource[propName])) {\n getter = datasource[propName];\n if (Number.isInteger(getter)) {\n onRenderHandlers = onRenderHandlers.filter(function (handler) {\n return handler.id !== propName;\n });\n onRenderHandlers.push({\n id: propName,\n run: function run() {\n return datasource[propName] = getter;\n }\n });\n }\n }\n }\n\n function defineDatasourceIndex(datasource, propName, propUserName) {\n var descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n if (descriptor && (descriptor.set || descriptor.get)) {\n return;\n }\n var getter = void 0;\n persistDatasourceIndex(datasource, propName);\n Object.defineProperty(datasource, propName, {\n set: function set(value) {\n getter = value;\n if (pending.length && !buffer.length) {\n persistDatasourceIndex(datasource, propName);\n return;\n }\n buffer[propUserName] = value;\n var topPaddingHeightOld = viewport.topDataPos();\n viewport.adjustPaddings();\n if (propName === 'minIndex') {\n viewport.onAfterMinIndexSet(topPaddingHeightOld);\n }\n },\n get: function get() {\n return getter;\n }\n });\n }\n\n defineDatasourceIndex(datasource, 'minIndex', 'minIndexUser');\n defineDatasourceIndex(datasource, 'maxIndex', 'maxIndexUser');\n\n var fetchNext = datasource.get.length !== 2 ? function (success) {\n return datasource.get(buffer.next, bufferSize, success);\n } : function (success) {\n datasource.get({\n index: buffer.next,\n append: buffer.length ? buffer[buffer.length - 1].item : void 0,\n count: bufferSize\n }, success);\n };\n\n var fetchPrevious = datasource.get.length !== 2 ? function (success) {\n return datasource.get(buffer.first - bufferSize, bufferSize, success);\n } : function (success) {\n datasource.get({\n index: buffer.first - bufferSize,\n prepend: buffer.length ? buffer[0].item : void 0,\n count: bufferSize\n }, success);\n };\n\n var initialize = function initialize() {\n var tryCount = 0;\n if (!viewport.applyContainerStyle()) {\n var timer = $interval(function () {\n tryCount++;\n if (viewport.applyContainerStyle()) {\n $interval.cancel(timer);\n doAdjust();\n }\n if (tryCount * VIEWPORT_POLLING_INTERVAL >= MAX_VIEWPORT_DELAY) {\n $interval.cancel(timer);\n throw Error('ui-scroll directive requires a viewport with non-zero height in ' + MAX_VIEWPORT_DELAY + 'ms');\n }\n }, VIEWPORT_POLLING_INTERVAL);\n } else {\n doAdjust();\n }\n };\n\n /**\r\n * Build padding elements\r\n *\r\n * Calling linker is the only way I found to get access to the tag name of the template\r\n * to prevent the directive scope from pollution a new scope is created and destroyed\r\n * right after the builder creation is completed\r\n */\n linker(function (clone, scope) {\n viewport.createPaddingElements(clone[0]);\n // we do not include the clone in the DOM. It means that the nested directives will not\n // be able to reach the parent directives, but in this case it is intentional because we\n // created the clone to access the template tag name\n scope.$destroy();\n clone.remove();\n });\n\n $scope.$on('$destroy', function () {\n unbindEvents();\n viewport.unbind('mousewheel', wheelHandler);\n });\n\n viewport.bind('mousewheel', wheelHandler);\n\n initialize();\n\n /* Private function definitions */\n\n function isInvalid(rid) {\n return rid && rid !== ridActual || $scope.$$destroyed;\n }\n\n function bindEvents() {\n viewport.bind('resize', resizeAndScrollHandler);\n viewport.bind('scroll', resizeAndScrollHandler);\n }\n\n function unbindEvents() {\n viewport.unbind('resize', resizeAndScrollHandler);\n viewport.unbind('scroll', resizeAndScrollHandler);\n }\n\n function reload() {\n viewport.resetTopPadding();\n viewport.resetBottomPadding();\n if (arguments.length) {\n startIndex = arguments[0];\n }\n buffer.reset(startIndex);\n persistDatasourceIndex(datasource, 'minIndex');\n persistDatasourceIndex(datasource, 'maxIndex');\n doAdjust();\n }\n\n function isElementVisible(wrapper) {\n return wrapper.element.height() && wrapper.element[0].offsetParent;\n }\n\n function visibilityWatcher(wrapper) {\n if (isElementVisible(wrapper)) {\n buffer.forEach(function (item) {\n if (typeof item.unregisterVisibilityWatcher === 'function') {\n item.unregisterVisibilityWatcher();\n delete item.unregisterVisibilityWatcher;\n }\n });\n if (!pending.length) {\n $timeout(function () {\n return doAdjust();\n });\n }\n }\n }\n\n function insertWrapperContent(wrapper, insertAfter) {\n createElement(wrapper, insertAfter, viewport.insertElement);\n if (!isElementVisible(wrapper)) {\n wrapper.unregisterVisibilityWatcher = wrapper.scope.$watch(function () {\n return visibilityWatcher(wrapper);\n });\n }\n elementRoutines.hideElement(wrapper); // hide inserted elements before data binding\n }\n\n function createElement(wrapper, insertAfter, insertElement) {\n var promises = null;\n var sibling = insertAfter > 0 ? buffer[insertAfter - 1].element : undefined;\n linker(function (clone, scope) {\n promises = insertElement(clone, sibling);\n wrapper.element = clone;\n wrapper.scope = scope;\n scope[itemName] = wrapper.item;\n });\n // ui-scroll-grid apply\n if (adapter.transform) {\n var tdInitializer = wrapper.scope.uiScrollTdInitializer;\n if (tdInitializer && tdInitializer.linking) {\n adapter.transform(wrapper.scope, wrapper.element);\n } else {\n wrapper.scope.uiScrollTdInitializer = {\n onLink: function onLink() {\n return adapter.transform(wrapper.scope, wrapper.element);\n },\n scope: wrapper.scope\n };\n }\n }\n return promises;\n }\n\n function updateDOM() {\n var promises = [];\n var toBePrepended = [];\n var toBeRemoved = [];\n var inserted = [];\n\n buffer.forEach(function (wrapper, i) {\n switch (wrapper.op) {\n case 'prepend':\n toBePrepended.unshift(wrapper);\n break;\n case 'append':\n insertWrapperContent(wrapper, i);\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'insert':\n promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated));\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'remove':\n toBeRemoved.push(wrapper);\n }\n });\n\n toBeRemoved.forEach(function (wrapper) {\n return promises = promises.concat(viewport.removeItem(wrapper));\n });\n\n if (toBePrepended.length) toBePrepended.forEach(function (wrapper) {\n insertWrapperContent(wrapper);\n wrapper.op = 'none';\n });\n\n buffer.forEach(function (item, i) {\n return item.scope.$index = buffer.first + i;\n });\n\n return {\n prepended: toBePrepended,\n removed: toBeRemoved,\n inserted: inserted,\n animated: promises\n };\n }\n\n function updatePaddings(rid, updates) {\n // schedule another doAdjust after animation completion\n if (updates.animated.length) {\n $q.all(updates.animated).then(function () {\n viewport.adjustPaddings();\n doAdjust(rid);\n });\n } else {\n viewport.adjustPaddings();\n }\n }\n\n function enqueueFetch(rid, updates) {\n if (viewport.shouldLoadBottom()) {\n if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\n // this means that at least one item appended in the last batch has height > 0\n if (pending.push(true) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n } else if (viewport.shouldLoadTop()) {\n if (!updates || buffer.effectiveHeight(updates.prepended) > 0 || pending[0]) {\n // this means that at least one item appended in the last batch has height > 0\n // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\n // BTW there will always be at least 1 element in the pending array because bottom is fetched first\n if (pending.push(false) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n }\n }\n\n function processUpdates() {\n var updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustments\n !$scope.$$phase && !$rootScope.$$phase && $scope.$digest();\n\n updates.inserted.forEach(function (w) {\n return elementRoutines.showElement(w);\n });\n updates.prepended.forEach(function (w) {\n return elementRoutines.showElement(w);\n });\n return updates;\n }\n\n function doAdjust(rid) {\n if (!rid) {\n // dismiss pending requests\n pending = [];\n rid = ++ridActual;\n }\n\n var updates = processUpdates();\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n enqueueFetch(rid);\n\n if (!pending.length) {\n adapter.calculateProperties();\n }\n }\n\n function doAdjustAfterFetch(rid) {\n var updates = processUpdates();\n\n viewport.onAfterPrepend(updates);\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n onRenderHandlersRunner();\n enqueueFetch(rid, updates);\n pending.shift();\n\n if (pending.length) fetch(rid);else {\n adapter.loading(false);\n bindEvents();\n adapter.calculateProperties();\n }\n }\n\n function fetch(rid) {\n if (pending[0]) {\n // scrolling down\n if (buffer.length && !viewport.shouldLoadBottom()) {\n doAdjustAfterFetch(rid);\n } else {\n fetchNext(function (result) {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.eof = true;\n }\n\n if (result.length > 0) {\n viewport.clipTop();\n buffer.append(result);\n }\n\n doAdjustAfterFetch(rid);\n });\n }\n } else {\n // scrolling up\n if (buffer.length && !viewport.shouldLoadTop()) {\n doAdjustAfterFetch(rid);\n } else {\n fetchPrevious(function (result) {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.bof = true;\n // log 'bof is reached'\n }\n\n if (result.length > 0) {\n if (buffer.length) {\n viewport.clipBottom();\n }\n buffer.prepend(result);\n }\n\n doAdjustAfterFetch(rid);\n });\n }\n }\n }\n\n function resizeAndScrollHandler() {\n if (!$rootScope.$$phase && !adapter.isLoading && !adapter.disabled) {\n\n enqueueFetch(ridActual);\n\n if (pending.length) {\n unbindEvents();\n } else {\n adapter.calculateProperties();\n !$scope.$$phase && $scope.$digest();\n }\n }\n }\n\n function wheelHandler(event) {\n if (!adapter.disabled) {\n var scrollTop = viewport[0].scrollTop;\n var yMax = viewport[0].scrollHeight - viewport[0].clientHeight;\n\n if (scrollTop === 0 && !buffer.bof || scrollTop === yMax && !buffer.eof) {\n event.preventDefault();\n }\n }\n }\n }\n}]);\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*!\r\n globals: angular, window\r\n List of used element methods available in JQuery but not in JQuery Lite\r\n element.before(elem)\r\n element.height()\r\n element.outerHeight(true)\r\n element.height(value) = only for Top/Bottom padding elements\r\n element.scrollTop()\r\n element.scrollTop(value)\r\n */\n\nvar JQLiteExtras = function () {\n function JQLiteExtras() {\n _classCallCheck(this, JQLiteExtras);\n }\n\n _createClass(JQLiteExtras, [{\n key: 'registerFor',\n value: function registerFor(element) {\n var convertToPx = void 0,\n css = void 0,\n getStyle = void 0,\n isWindow = void 0;\n // angular implementation blows up if elem is the window\n css = angular.element.prototype.css;\n\n element.prototype.css = function (name, value) {\n var self = this;\n var elem = self[0];\n if (!(!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style)) {\n return css.call(self, name, value);\n }\n };\n\n // as defined in angularjs v1.0.5\n isWindow = function isWindow(obj) {\n return obj && obj.document && obj.location && obj.alert && obj.setInterval;\n };\n\n function scrollTo(self, direction, value) {\n var elem = self[0];\n\n var _top$left$direction = _slicedToArray({\n top: ['scrollTop', 'pageYOffset', 'scrollLeft'],\n left: ['scrollLeft', 'pageXOffset', 'scrollTop']\n }[direction], 3),\n method = _top$left$direction[0],\n prop = _top$left$direction[1],\n preserve = _top$left$direction[2];\n\n var isValueDefined = typeof value !== 'undefined';\n if (isWindow(elem)) {\n if (isValueDefined) {\n return elem.scrollTo(self[preserve].call(self), value);\n }\n return prop in elem ? elem[prop] : elem.document.documentElement[method];\n } else {\n if (isValueDefined) {\n elem[method] = value;\n }\n return elem[method];\n }\n }\n\n if (window.getComputedStyle) {\n getStyle = function getStyle(elem) {\n return window.getComputedStyle(elem, null);\n };\n convertToPx = function convertToPx(elem, value) {\n return parseFloat(value);\n };\n } else {\n getStyle = function getStyle(elem) {\n return elem.currentStyle;\n };\n convertToPx = function convertToPx(elem, value) {\n var left = void 0,\n result = void 0,\n rs = void 0,\n rsLeft = void 0,\n style = void 0;\n var core_pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n var rnumnonpx = new RegExp('^(' + core_pnum + ')(?!px)[a-z%]+$', 'i');\n\n if (!rnumnonpx.test(value)) {\n return parseFloat(value);\n }\n\n // ported from JQuery\n style = elem.style;\n left = style.left;\n rs = elem.runtimeStyle;\n rsLeft = rs && rs.left;\n if (rs) {\n rs.left = style.left;\n }\n // put in the new values to get a computed style out\n style.left = value;\n result = style.pixelLeft;\n style.left = left;\n if (rsLeft) {\n rs.left = rsLeft;\n }\n return result;\n };\n }\n\n function getMeasurements(elem, measure) {\n var base = void 0,\n borderA = void 0,\n borderB = void 0,\n computedMarginA = void 0,\n computedMarginB = void 0,\n computedStyle = void 0,\n dirA = void 0,\n dirB = void 0,\n marginA = void 0,\n marginB = void 0,\n paddingA = void 0,\n paddingB = void 0;\n\n if (isWindow(elem)) {\n base = document.documentElement[{ height: 'clientHeight', width: 'clientWidth' }[measure]];\n\n return {\n base: base,\n padding: 0,\n border: 0,\n margin: 0\n };\n }\n\n // Start with offset property\n\n var _width$height$measure = _slicedToArray({\n width: [elem.offsetWidth, 'Left', 'Right'],\n height: [elem.offsetHeight, 'Top', 'Bottom']\n }[measure], 3);\n\n base = _width$height$measure[0];\n dirA = _width$height$measure[1];\n dirB = _width$height$measure[2];\n\n\n computedStyle = getStyle(elem);\n paddingA = convertToPx(elem, computedStyle['padding' + dirA]) || 0;\n paddingB = convertToPx(elem, computedStyle['padding' + dirB]) || 0;\n borderA = convertToPx(elem, computedStyle['border' + dirA + 'Width']) || 0;\n borderB = convertToPx(elem, computedStyle['border' + dirB + 'Width']) || 0;\n computedMarginA = computedStyle['margin' + dirA];\n computedMarginB = computedStyle['margin' + dirB];\n\n // I do not care for width for now, so this hack is irrelevant\n // if ( !supportsPercentMargin )\n // computedMarginA = hackPercentMargin( elem, computedStyle, computedMarginA )\n // computedMarginB = hackPercentMargin( elem, computedStyle, computedMarginB )\n marginA = convertToPx(elem, computedMarginA) || 0;\n marginB = convertToPx(elem, computedMarginB) || 0;\n\n return {\n base: base,\n padding: paddingA + paddingB,\n border: borderA + borderB,\n margin: marginA + marginB\n };\n }\n\n function getWidthHeight(elem, direction, measure) {\n var computedStyle = void 0,\n result = void 0;\n\n var measurements = getMeasurements(elem, direction);\n\n if (measurements.base > 0) {\n return {\n base: measurements.base - measurements.padding - measurements.border,\n outer: measurements.base,\n outerfull: measurements.base + measurements.margin\n }[measure];\n }\n\n // Fall back to computed then uncomputed css if necessary\n computedStyle = getStyle(elem);\n result = computedStyle[direction];\n\n if (result < 0 || result === null) {\n result = elem.style[direction] || 0;\n }\n\n // Normalize \"\", auto, and prepare for extra\n result = parseFloat(result) || 0;\n\n return {\n base: result - measurements.padding - measurements.border,\n outer: result,\n outerfull: result + measurements.padding + measurements.border + measurements.margin\n }[measure];\n }\n\n // define missing methods\n return angular.forEach({\n before: function before(newElem) {\n var children, elem, i, j, parent, ref, self;\n self = this;\n elem = self[0];\n parent = self.parent();\n children = parent.contents();\n if (children[0] === elem) {\n return parent.prepend(newElem);\n } else {\n for (i = j = 1, ref = children.length - 1; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {\n if (children[i] === elem) {\n angular.element(children[i - 1]).after(newElem);\n return;\n }\n }\n throw new Error('invalid DOM structure ' + elem.outerHTML);\n }\n },\n height: function height(value) {\n var self;\n self = this;\n if (typeof value !== 'undefined') {\n if (Number.isInteger(value)) {\n value = value + 'px';\n }\n return css.call(self, 'height', value);\n } else {\n return getWidthHeight(this[0], 'height', 'base');\n }\n },\n outerHeight: function outerHeight(option) {\n return getWidthHeight(this[0], 'height', option ? 'outerfull' : 'outer');\n },\n outerWidth: function outerWidth(option) {\n return getWidthHeight(this[0], 'width', option ? 'outerfull' : 'outer');\n },\n\n\n /*\r\n The offset setter method is not implemented\r\n */\n offset: function offset(value) {\n var docElem = void 0,\n win = void 0;\n var self = this;\n var box = {\n top: 0,\n left: 0\n };\n var elem = self[0];\n var doc = elem && elem.ownerDocument;\n\n if (arguments.length) {\n if (value === undefined) {\n return self;\n }\n // TODO: implement setter\n throw new Error('offset setter method is not implemented');\n }\n\n if (!doc) {\n return;\n }\n\n docElem = doc.documentElement;\n\n // TODO: Make sure it's not a disconnected DOM node\n\n if (elem.getBoundingClientRect != null) {\n box = elem.getBoundingClientRect();\n }\n\n win = doc.defaultView || doc.parentWindow;\n\n return {\n top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),\n left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0)\n };\n },\n scrollTop: function scrollTop(value) {\n return scrollTo(this, 'top', value);\n },\n scrollLeft: function scrollLeft(value) {\n return scrollTo(this, 'left', value);\n }\n }, function (value, key) {\n if (!element.prototype[key]) {\n return element.prototype[key] = value;\n }\n });\n }\n }]);\n\n return JQLiteExtras;\n}();\n\nexports.default = JQLiteExtras;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar hideClassToken = 'ng-ui-scroll-hide';\n\nfunction addCSSRule(sheet, selector, rules, index) {\n if ('insertRule' in sheet) {\n sheet.insertRule(selector + '{' + rules + '}', index);\n } else if ('addRule' in sheet) {\n sheet.addRule(selector, rules, index);\n }\n}\n\nvar ElementRoutines = function () {\n function ElementRoutines($injector, $q) {\n _classCallCheck(this, ElementRoutines);\n\n this.$animate = $injector.has && $injector.has('$animate') ? $injector.get('$animate') : null;\n this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3;\n this.$q = $q;\n addCSSRule(document.styleSheets[0], '.' + hideClassToken, 'display: none');\n }\n\n _createClass(ElementRoutines, [{\n key: 'hideElement',\n value: function hideElement(wrapper) {\n wrapper.element.addClass(hideClassToken);\n }\n }, {\n key: 'showElement',\n value: function showElement(wrapper) {\n wrapper.element.removeClass(hideClassToken);\n }\n }, {\n key: 'insertElement',\n value: function insertElement(newElement, previousElement) {\n previousElement.after(newElement);\n return [];\n }\n }, {\n key: 'removeElement',\n value: function removeElement(wrapper) {\n wrapper.element.remove();\n wrapper.scope.$destroy();\n return [];\n }\n }, {\n key: 'insertElementAnimated',\n value: function insertElementAnimated(newElement, previousElement) {\n if (!this.$animate) {\n return this.insertElement(newElement, previousElement);\n }\n\n if (this.isAngularVersionLessThen1_3) {\n var deferred = this.$q.defer();\n // no need for parent - previous element is never null\n this.$animate.enter(newElement, null, previousElement, function () {\n return deferred.resolve();\n });\n\n return [deferred.promise];\n }\n\n // no need for parent - previous element is never null\n return [this.$animate.enter(newElement, null, previousElement)];\n }\n }, {\n key: 'removeElementAnimated',\n value: function removeElementAnimated(wrapper) {\n if (!this.$animate) {\n return this.removeElement(wrapper);\n }\n\n if (this.isAngularVersionLessThen1_3) {\n var deferred = this.$q.defer();\n this.$animate.leave(wrapper.element, function () {\n wrapper.scope.$destroy();\n return deferred.resolve();\n });\n\n return [deferred.promise];\n }\n\n return [this.$animate.leave(wrapper.element).then(function () {\n return wrapper.scope.$destroy();\n })];\n }\n }]);\n\n return ElementRoutines;\n}();\n\nexports.default = ElementRoutines;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = ScrollBuffer;\nfunction ScrollBuffer(elementRoutines, bufferSize, startIndex) {\n var buffer = Object.create(Array.prototype);\n\n Object.assign(buffer, {\n size: bufferSize,\n\n reset: function reset(startIndex) {\n buffer.remove(0, buffer.length);\n buffer.eof = false;\n buffer.bof = false;\n buffer.first = startIndex;\n buffer.next = startIndex;\n buffer.minIndex = startIndex;\n buffer.maxIndex = startIndex;\n buffer.minIndexUser = null;\n buffer.maxIndexUser = null;\n },\n append: function append(items) {\n items.forEach(function (item) {\n ++buffer.next;\n buffer.insert('append', item);\n });\n buffer.maxIndex = buffer.eof ? buffer.next - 1 : Math.max(buffer.next - 1, buffer.maxIndex);\n },\n prepend: function prepend(items) {\n items.reverse().forEach(function (item) {\n --buffer.first;\n buffer.insert('prepend', item);\n });\n buffer.minIndex = buffer.bof ? buffer.minIndex = buffer.first : Math.min(buffer.first, buffer.minIndex);\n },\n\n\n /**\r\n * inserts wrapped element in the buffer\r\n * the first argument is either operation keyword (see below) or a number for operation 'insert'\r\n * for insert the number is the index for the buffer element the new one have to be inserted after\r\n * operations: 'append', 'prepend', 'insert', 'remove', 'update', 'none'\r\n */\n insert: function insert(operation, item, isTop) {\n var wrapper = {\n item: item\n };\n\n if (operation % 1 === 0) {\n // it is an insert\n wrapper.op = 'insert';\n buffer.splice(operation, 0, wrapper);\n if (isTop) {\n buffer.first--;\n } else {\n buffer.next++;\n }\n } else {\n wrapper.op = operation;\n switch (operation) {\n case 'append':\n buffer.push(wrapper);\n break;\n case 'prepend':\n buffer.unshift(wrapper);\n break;\n }\n }\n },\n\n\n // removes elements from buffer\n remove: function remove(arg1, arg2) {\n if (Number.isInteger(arg1)) {\n // removes items from arg1 (including) through arg2 (excluding)\n for (var i = arg1; i < arg2; i++) {\n elementRoutines.removeElement(buffer[i]);\n }\n return buffer.splice(arg1, arg2 - arg1);\n }\n // removes single item(wrapper) from the buffer\n buffer.splice(buffer.indexOf(arg1), 1);\n if (arg1._op === 'isTop' && buffer.first === this.getAbsMinIndex()) {\n this.incrementMinIndex();\n } else {\n this.decrementMaxIndex();\n }\n if (arg1._op === 'isTop') {\n buffer.first++;\n } else {\n buffer.next--;\n }\n if (!buffer.length) {\n buffer.first = 1;\n buffer.next = 1;\n }\n\n return elementRoutines.removeElementAnimated(arg1);\n },\n incrementMinIndex: function incrementMinIndex() {\n if (buffer.minIndexUser !== null) {\n if (buffer.minIndex > buffer.minIndexUser) {\n buffer.minIndexUser++;\n return;\n }\n if (buffer.minIndex === buffer.minIndexUser) {\n buffer.minIndexUser++;\n }\n }\n buffer.minIndex++;\n },\n decrementMaxIndex: function decrementMaxIndex() {\n if (buffer.maxIndexUser !== null && buffer.maxIndex <= buffer.maxIndexUser) {\n buffer.maxIndexUser--;\n }\n buffer.maxIndex--;\n },\n getAbsMinIndex: function getAbsMinIndex() {\n if (buffer.minIndexUser !== null) {\n return Math.min(buffer.minIndexUser, buffer.minIndex);\n }\n return buffer.minIndex;\n },\n getAbsMaxIndex: function getAbsMaxIndex() {\n if (buffer.maxIndexUser !== null) {\n return Math.max(buffer.maxIndexUser, buffer.maxIndex);\n }\n return buffer.maxIndex;\n },\n effectiveHeight: function effectiveHeight(elements) {\n if (!elements.length) {\n return 0;\n }\n var top = Number.MAX_VALUE;\n var bottom = Number.NEGATIVE_INFINITY;\n elements.forEach(function (wrapper) {\n if (wrapper.element[0].offsetParent) {\n // element style is not display:none\n top = Math.min(top, wrapper.element.offset().top);\n bottom = Math.max(bottom, wrapper.element.offset().top + wrapper.element.outerHeight(true));\n }\n });\n return Math.max(0, bottom - top);\n }\n });\n\n buffer.reset(startIndex);\n\n return buffer;\n}\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = Viewport;\n\nvar _padding = __webpack_require__(5);\n\nvar _padding2 = _interopRequireDefault(_padding);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding) {\n var topPadding = null;\n var bottomPadding = null;\n var viewport = viewportController && viewportController.viewport ? viewportController.viewport : angular.element(window);\n var container = viewportController && viewportController.container ? viewportController.container : undefined;\n var scope = viewportController && viewportController.scope ? viewportController.scope : $rootScope;\n\n viewport.css({\n 'overflow-anchor': 'none',\n 'overflow-y': 'auto',\n 'display': 'block'\n });\n\n function bufferPadding() {\n return viewport.outerHeight() * padding; // some extra space to initiate preload\n }\n\n Object.assign(viewport, {\n getScope: function getScope() {\n return scope;\n },\n createPaddingElements: function createPaddingElements(template) {\n topPadding = new _padding2.default(template);\n bottomPadding = new _padding2.default(template);\n element.before(topPadding.element);\n element.after(bottomPadding.element);\n topPadding.height(0);\n bottomPadding.height(0);\n },\n applyContainerStyle: function applyContainerStyle() {\n if (!container) {\n return true;\n }\n if (container !== viewport) {\n viewport.css('height', window.getComputedStyle(container[0]).height);\n }\n return viewport.height() > 0;\n },\n bottomDataPos: function bottomDataPos() {\n var scrollHeight = viewport[0].scrollHeight;\n scrollHeight = scrollHeight != null ? scrollHeight : viewport[0].document.documentElement.scrollHeight;\n return scrollHeight - bottomPadding.height();\n },\n topDataPos: function topDataPos() {\n return topPadding.height();\n },\n bottomVisiblePos: function bottomVisiblePos() {\n return viewport.scrollTop() + viewport.outerHeight();\n },\n topVisiblePos: function topVisiblePos() {\n return viewport.scrollTop();\n },\n insertElement: function insertElement(e, sibling) {\n return elementRoutines.insertElement(e, sibling || topPadding.element);\n },\n insertElementAnimated: function insertElementAnimated(e, sibling) {\n return elementRoutines.insertElementAnimated(e, sibling || topPadding.element);\n },\n shouldLoadBottom: function shouldLoadBottom() {\n return !buffer.eof && viewport.bottomDataPos() < viewport.bottomVisiblePos() + bufferPadding();\n },\n clipBottom: function clipBottom() {\n // clip the invisible items off the bottom\n var overage = 0;\n var overageHeight = 0;\n var itemHeight = 0;\n var emptySpaceHeight = viewport.bottomDataPos() - viewport.bottomVisiblePos() - bufferPadding();\n\n for (var i = buffer.length - 1; i >= 0; i--) {\n itemHeight = buffer[i].element.outerHeight(true);\n if (overageHeight + itemHeight > emptySpaceHeight) {\n break;\n }\n bottomPadding.cache.add(buffer[i]);\n overageHeight += itemHeight;\n overage++;\n }\n\n if (overage > 0) {\n buffer.eof = false;\n buffer.remove(buffer.length - overage, buffer.length);\n buffer.next -= overage;\n viewport.adjustPaddings();\n }\n },\n shouldLoadTop: function shouldLoadTop() {\n return !buffer.bof && viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding();\n },\n clipTop: function clipTop() {\n // clip the invisible items off the top\n var overage = 0;\n var overageHeight = 0;\n var itemHeight = 0;\n var emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\n\n for (var i = 0; i < buffer.length; i++) {\n itemHeight = buffer[i].element.outerHeight(true);\n if (overageHeight + itemHeight > emptySpaceHeight) {\n break;\n }\n topPadding.cache.add(buffer[i]);\n overageHeight += itemHeight;\n overage++;\n }\n\n if (overage > 0) {\n // we need to adjust top padding element before items are removed from top\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\n topPadding.height(topPadding.height() + overageHeight);\n buffer.bof = false;\n buffer.remove(0, overage);\n buffer.first += overage;\n }\n },\n adjustPaddings: function adjustPaddings() {\n if (!buffer.length) {\n return;\n }\n\n // precise heights calculation based on items that are in buffer or that were in buffer once\n var visibleItemsHeight = buffer.reduce(function (summ, item) {\n return summ + item.element.outerHeight(true);\n }, 0);\n\n var topPaddingHeight = 0,\n topCount = 0;\n topPadding.cache.forEach(function (item) {\n if (item.index < buffer.first) {\n topPaddingHeight += item.height;\n topCount++;\n }\n });\n\n var bottomPaddingHeight = 0,\n bottomCount = 0;\n bottomPadding.cache.forEach(function (item) {\n if (item.index >= buffer.next) {\n bottomPaddingHeight += item.height;\n bottomCount++;\n }\n });\n\n var totalHeight = visibleItemsHeight + topPaddingHeight + bottomPaddingHeight;\n var averageItemHeight = totalHeight / (topCount + bottomCount + buffer.length);\n\n // average heights calculation, items that have never been reached\n var adjustTopPadding = buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser;\n var adjustBottomPadding = buffer.maxIndexUser !== null && buffer.maxIndex < buffer.maxIndexUser;\n var topPaddingHeightAdd = adjustTopPadding ? (buffer.minIndex - buffer.minIndexUser) * averageItemHeight : 0;\n var bottomPaddingHeightAdd = adjustBottomPadding ? (buffer.maxIndexUser - buffer.maxIndex) * averageItemHeight : 0;\n\n // paddings combine adjustment\n topPadding.height(topPaddingHeight + topPaddingHeightAdd);\n bottomPadding.height(bottomPaddingHeight + bottomPaddingHeightAdd);\n },\n onAfterMinIndexSet: function onAfterMinIndexSet(topPaddingHeightOld) {\n // additional scrollTop adjustment in case of datasource.minIndex external set\n if (buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser) {\n var diff = topPadding.height() - topPaddingHeightOld;\n viewport.scrollTop(viewport.scrollTop() + diff);\n while ((diff -= viewport.scrollTop()) > 0) {\n bottomPadding.height(bottomPadding.height() + diff);\n viewport.scrollTop(viewport.scrollTop() + diff);\n }\n }\n },\n onAfterPrepend: function onAfterPrepend(updates) {\n if (!updates.prepended.length) return;\n var height = buffer.effectiveHeight(updates.prepended);\n var paddingHeight = topPadding.height() - height;\n if (paddingHeight >= 0) {\n topPadding.height(paddingHeight);\n } else {\n topPadding.height(0);\n viewport.scrollTop(viewport.scrollTop() - paddingHeight);\n }\n },\n resetTopPadding: function resetTopPadding() {\n topPadding.height(0);\n topPadding.cache.clear();\n },\n resetBottomPadding: function resetBottomPadding() {\n bottomPadding.height(0);\n bottomPadding.cache.clear();\n },\n removeCacheItem: function removeCacheItem(item, isTop) {\n topPadding.cache.remove(item, isTop);\n bottomPadding.cache.remove(item, isTop);\n },\n removeItem: function removeItem(item) {\n this.removeCacheItem(item);\n return buffer.remove(item);\n }\n });\n\n return viewport;\n}\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// Can't just extend the Array, due to Babel does not support built-in classes extending\n// This solution was taken from https://stackoverflow.com/questions/46897414/es6-class-extends-array-workaround-for-es5-babel-transpile\nvar CacheProto = function () {\n function CacheProto() {\n _classCallCheck(this, CacheProto);\n }\n\n _createClass(CacheProto, [{\n key: 'add',\n value: function add(item) {\n for (var i = this.length - 1; i >= 0; i--) {\n if (this[i].index === item.scope.$index) {\n this[i].height = item.element.outerHeight();\n return;\n }\n }\n this.push({\n index: item.scope.$index,\n height: item.element.outerHeight()\n });\n this.sort(function (a, b) {\n return a.index < b.index ? -1 : a.index > b.index ? 1 : 0;\n });\n }\n }, {\n key: 'remove',\n value: function remove(argument, _isTop) {\n var index = argument % 1 === 0 ? argument : argument.scope.$index;\n var isTop = argument % 1 === 0 ? _isTop : argument._op === 'isTop';\n for (var i = this.length - 1; i >= 0; i--) {\n if (this[i].index === index) {\n this.splice(i, 1);\n break;\n }\n }\n if (!isTop) {\n for (var _i = this.length - 1; _i >= 0; _i--) {\n if (this[_i].index > index) {\n this[_i].index--;\n }\n }\n }\n }\n }, {\n key: 'clear',\n value: function clear() {\n this.length = 0;\n }\n }]);\n\n return CacheProto;\n}();\n\nfunction Cache() {\n var instance = [];\n instance.push.apply(instance, arguments);\n Object.setPrototypeOf(instance, Cache.prototype);\n return instance;\n}\nCache.prototype = Object.create(Array.prototype);\nObject.getOwnPropertyNames(CacheProto.prototype).forEach(function (methodName) {\n return Cache.prototype[methodName] = CacheProto.prototype[methodName];\n});\n\nfunction generateElement(template) {\n if (template.nodeType !== Node.ELEMENT_NODE) {\n throw new Error('ui-scroll directive requires an Element node for templating the view');\n }\n var element = void 0;\n switch (template.tagName.toLowerCase()) {\n case 'dl':\n throw new Error('ui-scroll directive does not support <' + template.tagName + '> as a repeating tag: ' + template.outerHTML);\n case 'tr':\n var table = angular.element('');\n element = table.find('tr');\n break;\n case 'li':\n element = angular.element('');\n break;\n default:\n element = angular.element('');\n }\n return element;\n}\n\nvar Padding = function () {\n function Padding(template) {\n _classCallCheck(this, Padding);\n\n this.element = generateElement(template);\n this.cache = new Cache();\n }\n\n _createClass(Padding, [{\n key: 'height',\n value: function height() {\n return this.element.height.apply(this.element, arguments);\n }\n }]);\n\n return Padding;\n}();\n\nexports.default = Padding;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Adapter = function () {\n function Adapter($scope, $parse, $attr, viewport, buffer, doAdjust, reload) {\n _classCallCheck(this, Adapter);\n\n this.$parse = $parse;\n this.$attr = $attr;\n this.viewport = viewport;\n this.buffer = buffer;\n\n this.doAdjust = doAdjust;\n this.reload = reload;\n\n this.isLoading = false;\n this.disabled = false;\n\n var viewportScope = viewport.getScope();\n this.startScope = viewportScope.$parent ? viewportScope : $scope;\n\n this.publicContext = {};\n this.assignAdapter($attr.adapter);\n this.generatePublicContext();\n }\n\n _createClass(Adapter, [{\n key: 'assignAdapter',\n value: function assignAdapter(adapterAttr) {\n if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\\s+|\\s+$/gm, ''))) {\n return;\n }\n var adapterOnScope = void 0;\n\n try {\n this.$parse(adapterAttr).assign(this.startScope, {});\n adapterOnScope = this.$parse(adapterAttr)(this.startScope);\n } catch (error) {\n error.message = 'Angular ui-scroll Adapter assignment exception.\\n' + ('Can\\'t parse \"' + adapterAttr + '\" expression.\\n') + error.message;\n throw error;\n }\n\n Object.assign(adapterOnScope, this.publicContext);\n this.publicContext = adapterOnScope;\n }\n }, {\n key: 'generatePublicContext',\n value: function generatePublicContext() {\n var _this = this;\n\n // these methods will be accessible out of ui-scroll via user defined adapter\n var publicMethods = ['reload', 'applyUpdates', 'append', 'prepend', 'isBOF', 'isEOF', 'isEmpty'];\n for (var i = publicMethods.length - 1; i >= 0; i--) {\n this.publicContext[publicMethods[i]] = this[publicMethods[i]].bind(this);\n }\n\n // these read-only props will be accessible out of ui-scroll via user defined adapter\n var publicProps = ['isLoading', 'topVisible', 'topVisibleElement', 'topVisibleScope', 'bottomVisible', 'bottomVisibleElement', 'bottomVisibleScope'];\n\n var _loop = function _loop(_i) {\n var property = void 0,\n attr = _this.$attr[publicProps[_i]];\n Object.defineProperty(_this, publicProps[_i], {\n get: function get() {\n return property;\n },\n set: function set(value) {\n property = value;\n _this.publicContext[publicProps[_i]] = value;\n if (attr) {\n _this.$parse(attr).assign(_this.startScope, value);\n }\n }\n });\n };\n\n for (var _i = publicProps.length - 1; _i >= 0; _i--) {\n _loop(_i);\n }\n\n // non-read-only public property\n Object.defineProperty(this.publicContext, 'disabled', {\n get: function get() {\n return _this.disabled;\n },\n set: function set(value) {\n return !(_this.disabled = value) ? _this.doAdjust() : null;\n }\n });\n }\n }, {\n key: 'loading',\n value: function loading(value) {\n this.isLoading = value;\n }\n }, {\n key: 'isBOF',\n value: function isBOF() {\n return this.buffer.bof;\n }\n }, {\n key: 'isEOF',\n value: function isEOF() {\n return this.buffer.eof;\n }\n }, {\n key: 'isEmpty',\n value: function isEmpty() {\n return !this.buffer.length;\n }\n }, {\n key: 'append',\n value: function append(newItems) {\n this.buffer.append(newItems);\n this.doAdjust();\n this.viewport.clipTop();\n this.viewport.clipBottom();\n }\n }, {\n key: 'prepend',\n value: function prepend(newItems) {\n this.buffer.prepend(newItems);\n this.doAdjust();\n this.viewport.clipTop();\n this.viewport.clipBottom();\n }\n }, {\n key: 'applyUpdates',\n value: function applyUpdates(arg1, arg2) {\n if (typeof arg1 === 'function') {\n this.applyUpdatesFunc(arg1);\n } else {\n this.applyUpdatesIndex(arg1, arg2);\n }\n this.doAdjust();\n }\n }, {\n key: 'applyUpdatesFunc',\n value: function applyUpdatesFunc(cb) {\n var _this2 = this;\n\n this.buffer.slice(0).forEach(function (wrapper) {\n // we need to do it on the buffer clone, because buffer content\n // may change as we iterate through\n _this2.applyUpdate(wrapper, cb(wrapper.item, wrapper.scope, wrapper.element));\n });\n }\n }, {\n key: 'applyUpdatesIndex',\n value: function applyUpdatesIndex(index, newItems) {\n if (index % 1 !== 0) {\n throw new Error('applyUpdates - ' + index + ' is not a valid index (should be an integer)');\n }\n var _index = index - this.buffer.first;\n\n // apply updates only within buffer\n if (_index >= 0 && _index < this.buffer.length) {\n this.applyUpdate(this.buffer[_index], newItems);\n }\n // out-of-buffer case: deletion may affect Paddings\n else if (index >= this.buffer.getAbsMinIndex() && index <= this.buffer.getAbsMaxIndex()) {\n if (Array.isArray(newItems) && !newItems.length) {\n this.viewport.removeCacheItem(index, index === this.buffer.minIndex);\n if (index === this.buffer.getAbsMinIndex()) {\n this.buffer.incrementMinIndex();\n } else {\n this.buffer.decrementMaxIndex();\n }\n }\n }\n }\n }, {\n key: 'applyUpdate',\n value: function applyUpdate(wrapper, newItems) {\n var _this3 = this;\n\n if (!Array.isArray(newItems)) {\n return;\n }\n var position = this.buffer.indexOf(wrapper);\n if (!newItems.reverse().some(function (newItem) {\n return newItem === wrapper.item;\n })) {\n wrapper.op = 'remove';\n if (position === 0 && !newItems.length) {\n wrapper._op = 'isTop'; // to catch \"first\" edge case on remove\n }\n }\n newItems.forEach(function (newItem) {\n if (newItem === wrapper.item) {\n position--;\n } else {\n // 3 parameter (isTop) is to catch \"first\" edge case on insert\n _this3.buffer.insert(position + 1, newItem, position === -1);\n }\n });\n }\n }, {\n key: 'calculateProperties',\n value: function calculateProperties() {\n var rowTop = null,\n topHeight = 0;\n var topDone = false,\n bottomDone = false;\n var length = this.buffer.length;\n\n for (var i = 0; i < length; i++) {\n var item = this.buffer[i];\n var itemTop = item.element.offset().top;\n\n if (rowTop !== itemTop) {\n // a new row condition\n var itemHeight = item.element.outerHeight(true);\n var top = this.viewport.topDataPos() + topHeight + itemHeight;\n\n if (!topDone && top > this.viewport.topVisiblePos()) {\n topDone = true;\n this['topVisible'] = item.item;\n this['topVisibleElement'] = item.element;\n this['topVisibleScope'] = item.scope;\n }\n if (!bottomDone && (top >= this.viewport.bottomVisiblePos() || i === length - 1 && this.isEOF())) {\n bottomDone = true;\n this['bottomVisible'] = item.item;\n this['bottomVisibleElement'] = item.element;\n this['bottomVisibleScope'] = item.scope;\n }\n topHeight += itemHeight;\n }\n rowTop = itemTop;\n\n if (topDone && bottomDone) {\n break;\n }\n }\n }\n }]);\n\n return Adapter;\n}();\n\nexports.default = Adapter;\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// ui-scroll.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 7b7663c4ef0bd85aea15","import JQLiteExtras from './modules/jqLiteExtras';\r\nimport ElementRoutines from './modules/elementRoutines.js';\r\nimport ScrollBuffer from './modules/buffer.js';\r\nimport Viewport from './modules/viewport.js';\r\nimport Adapter from './modules/adapter.js';\r\n\r\nangular.module('ui.scroll', [])\r\n\r\n .constant('JQLiteExtras', JQLiteExtras)\r\n .run(['JQLiteExtras', (JQLiteExtras) =>\r\n !window.jQuery ? (new JQLiteExtras()).registerFor(angular.element) : null\r\n ])\r\n\r\n .directive('uiScrollViewport', function () {\r\n return {\r\n restrict: 'A',\r\n controller: [\r\n '$scope',\r\n '$element',\r\n function (scope, element) {\r\n this.container = element;\r\n this.viewport = element;\r\n this.scope = scope;\r\n\r\n angular.forEach(element.children(), child => {\r\n if (child.tagName.toLowerCase() === 'tbody') {\r\n this.viewport = angular.element(child);\r\n }\r\n });\r\n\r\n return this;\r\n }\r\n ]\r\n };\r\n })\r\n\r\n .directive('uiScroll', [\r\n '$log',\r\n '$injector',\r\n '$rootScope',\r\n '$timeout',\r\n '$interval',\r\n '$q',\r\n '$parse',\r\n function (console, $injector, $rootScope, $timeout, $interval, $q, $parse) {\r\n\r\n return {\r\n require: ['?^uiScrollViewport'],\r\n restrict: 'A',\r\n transclude: 'element',\r\n priority: 1000,\r\n terminal: true,\r\n link: link\r\n };\r\n\r\n function link($scope, element, $attr, controllers, linker) {\r\n const match = $attr.uiScroll.match(/^\\s*(\\w+)\\s+in\\s+([(\\w|\\$)\\.]+)\\s*$/);\r\n if (!match) {\r\n throw new Error('Expected uiScroll in form of \\'_item_ in _datasource_\\' but got \\'' + $attr.uiScroll + '\\'');\r\n }\r\n\r\n function parseNumericAttr(value, defaultValue) {\r\n const result = $parse(value)($scope);\r\n return isNaN(result) ? defaultValue : result;\r\n }\r\n\r\n const BUFFER_MIN = 3;\r\n const BUFFER_DEFAULT = 10;\r\n const PADDING_MIN = 0.3;\r\n const PADDING_DEFAULT = 0.5;\r\n const MAX_VIEWPORT_DELAY = 500;\r\n const VIEWPORT_POLLING_INTERVAL = 50;\r\n\r\n let datasource = null;\r\n const itemName = match[1];\r\n const datasourceName = match[2];\r\n const viewportController = controllers[0];\r\n const bufferSize = Math.max(BUFFER_MIN, parseNumericAttr($attr.bufferSize, BUFFER_DEFAULT));\r\n const padding = Math.max(PADDING_MIN, parseNumericAttr($attr.padding, PADDING_DEFAULT));\r\n let startIndex = parseNumericAttr($attr.startIndex, 1);\r\n let ridActual = 0; // current data revision id\r\n let pending = [];\r\n\r\n const elementRoutines = new ElementRoutines($injector, $q);\r\n const buffer = new ScrollBuffer(elementRoutines, bufferSize, startIndex);\r\n const viewport = new Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding);\r\n const adapter = new Adapter($scope, $parse, $attr, viewport, buffer, doAdjust, reload);\r\n\r\n if (viewportController) {\r\n viewportController.adapter = adapter;\r\n }\r\n\r\n const isDatasourceValid = () =>\r\n Object.prototype.toString.call(datasource) === '[object Object]' && typeof datasource.get === 'function';\r\n\r\n datasource = $parse(datasourceName)($scope); // try to get datasource on scope\r\n if (!isDatasourceValid()) {\r\n datasource = $injector.get(datasourceName); // try to inject datasource as service\r\n if (!isDatasourceValid()) {\r\n throw new Error(datasourceName + ' is not a valid datasource');\r\n }\r\n }\r\n\r\n let onRenderHandlers = [];\r\n function onRenderHandlersRunner() {\r\n onRenderHandlers.forEach(handler => handler.run());\r\n onRenderHandlers = [];\r\n }\r\n function persistDatasourceIndex(datasource, propName) {\r\n let getter;\r\n // need to postpone min/maxIndexUser processing if the view is empty\r\n if(Number.isInteger(datasource[propName])) {\r\n getter = datasource[propName];\r\n if(Number.isInteger(getter)) {\r\n onRenderHandlers = onRenderHandlers.filter(handler => handler.id !== propName);\r\n onRenderHandlers.push({\r\n id: propName,\r\n run: () => datasource[propName] = getter\r\n });\r\n }\r\n }\r\n }\r\n\r\n function defineDatasourceIndex(datasource, propName, propUserName) {\r\n const descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\r\n if (descriptor && (descriptor.set || descriptor.get)) {\r\n return;\r\n }\r\n let getter;\r\n persistDatasourceIndex(datasource, propName);\r\n Object.defineProperty(datasource, propName, {\r\n set: (value) => {\r\n getter = value;\r\n if(pending.length && !buffer.length) {\r\n persistDatasourceIndex(datasource, propName);\r\n return;\r\n }\r\n buffer[propUserName] = value;\r\n const topPaddingHeightOld = viewport.topDataPos();\r\n viewport.adjustPaddings();\r\n if (propName === 'minIndex') {\r\n viewport.onAfterMinIndexSet(topPaddingHeightOld);\r\n }\r\n },\r\n get: () => getter\r\n });\r\n }\r\n\r\n defineDatasourceIndex(datasource, 'minIndex', 'minIndexUser');\r\n defineDatasourceIndex(datasource, 'maxIndex', 'maxIndexUser');\r\n\r\n const fetchNext = (datasource.get.length !== 2) ?\r\n (success) => datasource.get(buffer.next, bufferSize, success) :\r\n (success) => {\r\n datasource.get({\r\n index: buffer.next,\r\n append: buffer.length ? buffer[buffer.length - 1].item : void 0,\r\n count: bufferSize\r\n }, success);\r\n };\r\n\r\n const fetchPrevious = (datasource.get.length !== 2) ?\r\n (success) => datasource.get(buffer.first - bufferSize, bufferSize, success) :\r\n (success) => {\r\n datasource.get({\r\n index: buffer.first - bufferSize,\r\n prepend: buffer.length ? buffer[0].item : void 0,\r\n count: bufferSize\r\n }, success);\r\n };\r\n\r\n const initialize = () => {\r\n let tryCount = 0;\r\n if(!viewport.applyContainerStyle()) {\r\n const timer = $interval(() => {\r\n tryCount++;\r\n if(viewport.applyContainerStyle()) {\r\n $interval.cancel(timer);\r\n doAdjust();\r\n }\r\n if(tryCount * VIEWPORT_POLLING_INTERVAL >= MAX_VIEWPORT_DELAY) {\r\n $interval.cancel(timer);\r\n throw Error(`ui-scroll directive requires a viewport with non-zero height in ${MAX_VIEWPORT_DELAY}ms`);\r\n }\r\n }, VIEWPORT_POLLING_INTERVAL);\r\n }\r\n else {\r\n doAdjust();\r\n }\r\n };\r\n\r\n /**\r\n * Build padding elements\r\n *\r\n * Calling linker is the only way I found to get access to the tag name of the template\r\n * to prevent the directive scope from pollution a new scope is created and destroyed\r\n * right after the builder creation is completed\r\n */\r\n linker((clone, scope) => {\r\n viewport.createPaddingElements(clone[0]);\r\n // we do not include the clone in the DOM. It means that the nested directives will not\r\n // be able to reach the parent directives, but in this case it is intentional because we\r\n // created the clone to access the template tag name\r\n scope.$destroy();\r\n clone.remove();\r\n });\r\n\r\n $scope.$on('$destroy', () => {\r\n unbindEvents();\r\n viewport.unbind('mousewheel', wheelHandler);\r\n });\r\n\r\n viewport.bind('mousewheel', wheelHandler);\r\n\r\n initialize();\r\n\r\n /* Private function definitions */\r\n\r\n function isInvalid(rid) {\r\n return (rid && rid !== ridActual) || $scope.$$destroyed;\r\n }\r\n\r\n function bindEvents() {\r\n viewport.bind('resize', resizeAndScrollHandler);\r\n viewport.bind('scroll', resizeAndScrollHandler);\r\n }\r\n\r\n function unbindEvents() {\r\n viewport.unbind('resize', resizeAndScrollHandler);\r\n viewport.unbind('scroll', resizeAndScrollHandler);\r\n }\r\n\r\n function reload() {\r\n viewport.resetTopPadding();\r\n viewport.resetBottomPadding();\r\n if (arguments.length) {\r\n startIndex = arguments[0];\r\n }\r\n buffer.reset(startIndex);\r\n persistDatasourceIndex(datasource, 'minIndex');\r\n persistDatasourceIndex(datasource, 'maxIndex');\r\n doAdjust();\r\n }\r\n\r\n function isElementVisible(wrapper) {\r\n return wrapper.element.height() && wrapper.element[0].offsetParent;\r\n }\r\n\r\n function visibilityWatcher(wrapper) {\r\n if (isElementVisible(wrapper)) {\r\n buffer.forEach((item) => {\r\n if (typeof item.unregisterVisibilityWatcher === 'function') {\r\n item.unregisterVisibilityWatcher();\r\n delete item.unregisterVisibilityWatcher;\r\n }\r\n });\r\n if (!pending.length) {\r\n $timeout(() => doAdjust());\r\n }\r\n }\r\n }\r\n\r\n function insertWrapperContent(wrapper, insertAfter) {\r\n createElement(wrapper, insertAfter, viewport.insertElement);\r\n if (!isElementVisible(wrapper)) {\r\n wrapper.unregisterVisibilityWatcher = wrapper.scope.$watch(() => visibilityWatcher(wrapper));\r\n }\r\n elementRoutines.hideElement(wrapper); // hide inserted elements before data binding\r\n }\r\n\r\n function createElement(wrapper, insertAfter, insertElement) {\r\n let promises = null;\r\n const sibling = (insertAfter > 0) ? buffer[insertAfter - 1].element : undefined;\r\n linker((clone, scope) => {\r\n promises = insertElement(clone, sibling);\r\n wrapper.element = clone;\r\n wrapper.scope = scope;\r\n scope[itemName] = wrapper.item;\r\n });\r\n // ui-scroll-grid apply\r\n if (adapter.transform) {\r\n const tdInitializer = wrapper.scope.uiScrollTdInitializer;\r\n if (tdInitializer && tdInitializer.linking) {\r\n adapter.transform(wrapper.scope, wrapper.element);\r\n } else {\r\n wrapper.scope.uiScrollTdInitializer = {\r\n onLink: () => adapter.transform(wrapper.scope, wrapper.element),\r\n scope: wrapper.scope\r\n };\r\n }\r\n }\r\n return promises;\r\n }\r\n\r\n function updateDOM() {\r\n let promises = [];\r\n const toBePrepended = [];\r\n const toBeRemoved = [];\r\n const inserted = [];\r\n\r\n buffer.forEach((wrapper, i) => {\r\n switch (wrapper.op) {\r\n case 'prepend':\r\n toBePrepended.unshift(wrapper);\r\n break;\r\n case 'append':\r\n insertWrapperContent(wrapper, i);\r\n wrapper.op = 'none';\r\n inserted.push(wrapper);\r\n break;\r\n case 'insert':\r\n promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated));\r\n wrapper.op = 'none';\r\n inserted.push(wrapper);\r\n break;\r\n case 'remove':\r\n toBeRemoved.push(wrapper);\r\n }\r\n });\r\n\r\n toBeRemoved.forEach((wrapper) => promises = promises.concat(viewport.removeItem(wrapper)));\r\n\r\n if (toBePrepended.length)\r\n toBePrepended.forEach((wrapper) => {\r\n insertWrapperContent(wrapper);\r\n wrapper.op = 'none';\r\n });\r\n\r\n buffer.forEach((item, i) => item.scope.$index = buffer.first + i);\r\n\r\n return {\r\n prepended: toBePrepended,\r\n removed: toBeRemoved,\r\n inserted: inserted,\r\n animated: promises\r\n };\r\n\r\n }\r\n\r\n function updatePaddings(rid, updates) {\r\n // schedule another doAdjust after animation completion\r\n if (updates.animated.length) {\r\n $q.all(updates.animated).then(() => {\r\n viewport.adjustPaddings();\r\n doAdjust(rid);\r\n });\r\n } else {\r\n viewport.adjustPaddings();\r\n }\r\n }\r\n\r\n function enqueueFetch(rid, updates) {\r\n if (viewport.shouldLoadBottom()) {\r\n if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\r\n // this means that at least one item appended in the last batch has height > 0\r\n if (pending.push(true) === 1) {\r\n adapter.loading(true);\r\n fetch(rid);\r\n }\r\n }\r\n } else if (viewport.shouldLoadTop()) {\r\n if ((!updates || buffer.effectiveHeight(updates.prepended) > 0) || pending[0]) {\r\n // this means that at least one item appended in the last batch has height > 0\r\n // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\r\n // BTW there will always be at least 1 element in the pending array because bottom is fetched first\r\n if (pending.push(false) === 1) {\r\n adapter.loading(true);\r\n fetch(rid);\r\n }\r\n }\r\n }\r\n }\r\n\r\n function processUpdates() {\r\n const updates = updateDOM();\r\n\r\n // We need the item bindings to be processed before we can do adjustments\r\n !$scope.$$phase && !$rootScope.$$phase && $scope.$digest();\r\n\r\n updates.inserted.forEach(w => elementRoutines.showElement(w));\r\n updates.prepended.forEach(w => elementRoutines.showElement(w));\r\n return updates;\r\n }\r\n\r\n function doAdjust(rid) {\r\n if (!rid) { // dismiss pending requests\r\n pending = [];\r\n rid = ++ridActual;\r\n }\r\n\r\n const updates = processUpdates();\r\n\r\n if (isInvalid(rid)) {\r\n return;\r\n }\r\n\r\n updatePaddings(rid, updates);\r\n enqueueFetch(rid);\r\n\r\n if (!pending.length) {\r\n adapter.calculateProperties();\r\n }\r\n }\r\n\r\n function doAdjustAfterFetch(rid) {\r\n const updates = processUpdates();\r\n\r\n viewport.onAfterPrepend(updates);\r\n\r\n if (isInvalid(rid)) {\r\n return;\r\n }\r\n\r\n updatePaddings(rid, updates);\r\n onRenderHandlersRunner();\r\n enqueueFetch(rid, updates);\r\n pending.shift();\r\n\r\n if (pending.length)\r\n fetch(rid);\r\n else {\r\n adapter.loading(false);\r\n bindEvents();\r\n adapter.calculateProperties();\r\n }\r\n }\r\n\r\n function fetch(rid) {\r\n if (pending[0]) {// scrolling down\r\n if (buffer.length && !viewport.shouldLoadBottom()) {\r\n doAdjustAfterFetch(rid);\r\n } else {\r\n fetchNext((result) => {\r\n if (isInvalid(rid)) {\r\n return;\r\n }\r\n\r\n if (result.length < bufferSize) {\r\n buffer.eof = true;\r\n }\r\n\r\n if (result.length > 0) {\r\n viewport.clipTop();\r\n buffer.append(result);\r\n }\r\n\r\n doAdjustAfterFetch(rid);\r\n });\r\n }\r\n } else { // scrolling up\r\n if (buffer.length && !viewport.shouldLoadTop()) {\r\n doAdjustAfterFetch(rid);\r\n } else {\r\n fetchPrevious((result) => {\r\n if (isInvalid(rid)) {\r\n return;\r\n }\r\n\r\n if (result.length < bufferSize) {\r\n buffer.bof = true;\r\n // log 'bof is reached'\r\n }\r\n\r\n if (result.length > 0) {\r\n if (buffer.length) {\r\n viewport.clipBottom();\r\n }\r\n buffer.prepend(result);\r\n }\r\n\r\n doAdjustAfterFetch(rid);\r\n });\r\n }\r\n }\r\n }\r\n\r\n function resizeAndScrollHandler() {\r\n if (!$rootScope.$$phase && !adapter.isLoading && !adapter.disabled) {\r\n\r\n enqueueFetch(ridActual);\r\n\r\n if (pending.length) {\r\n unbindEvents();\r\n } else {\r\n adapter.calculateProperties();\r\n !$scope.$$phase && $scope.$digest();\r\n }\r\n }\r\n }\r\n\r\n function wheelHandler(event) {\r\n if (!adapter.disabled) {\r\n const scrollTop = viewport[0].scrollTop;\r\n const yMax = viewport[0].scrollHeight - viewport[0].clientHeight;\r\n\r\n if ((scrollTop === 0 && !buffer.bof) || (scrollTop === yMax && !buffer.eof)) {\r\n event.preventDefault();\r\n }\r\n }\r\n }\r\n }\r\n\r\n }\r\n ]);\n\n\n// WEBPACK FOOTER //\n// ./src/ui-scroll.js","/*!\r\n globals: angular, window\r\n List of used element methods available in JQuery but not in JQuery Lite\r\n element.before(elem)\r\n element.height()\r\n element.outerHeight(true)\r\n element.height(value) = only for Top/Bottom padding elements\r\n element.scrollTop()\r\n element.scrollTop(value)\r\n */\r\n\r\nexport default class JQLiteExtras {\r\n\r\n registerFor(element) {\r\n let convertToPx, css, getStyle, isWindow;\r\n // angular implementation blows up if elem is the window\r\n css = angular.element.prototype.css;\r\n\r\n element.prototype.css = function (name, value) {\r\n let self = this;\r\n let elem = self[0];\r\n if (!(!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style)) {\r\n return css.call(self, name, value);\r\n }\r\n };\r\n\r\n // as defined in angularjs v1.0.5\r\n isWindow = (obj) => obj && obj.document && obj.location && obj.alert && obj.setInterval;\r\n\r\n function scrollTo(self, direction, value) {\r\n let elem = self[0];\r\n let [method, prop, preserve] = {\r\n top: [\r\n 'scrollTop',\r\n 'pageYOffset',\r\n 'scrollLeft'\r\n ],\r\n left: [\r\n 'scrollLeft',\r\n 'pageXOffset',\r\n 'scrollTop'\r\n ]\r\n }[direction];\r\n\r\n const isValueDefined = typeof value !== 'undefined';\r\n if (isWindow(elem)) {\r\n if (isValueDefined) {\r\n return elem.scrollTo(self[preserve].call(self), value);\r\n }\r\n return (prop in elem) ? elem[prop] : elem.document.documentElement[method];\r\n } else {\r\n if (isValueDefined) {\r\n elem[method] = value;\r\n }\r\n return elem[method];\r\n }\r\n }\r\n\r\n if (window.getComputedStyle) {\r\n getStyle = (elem) => window.getComputedStyle(elem, null);\r\n convertToPx = (elem, value) => parseFloat(value);\r\n } else {\r\n getStyle = (elem) => elem.currentStyle;\r\n convertToPx = (elem, value) => {\r\n let left, result, rs, rsLeft, style;\r\n let core_pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\r\n let rnumnonpx = new RegExp('^(' + core_pnum + ')(?!px)[a-z%]+$', 'i');\r\n\r\n if (!rnumnonpx.test(value)) {\r\n return parseFloat(value);\r\n }\r\n\r\n // ported from JQuery\r\n style = elem.style;\r\n left = style.left;\r\n rs = elem.runtimeStyle;\r\n rsLeft = rs && rs.left;\r\n if (rs) {\r\n rs.left = style.left;\r\n }\r\n // put in the new values to get a computed style out\r\n style.left = value;\r\n result = style.pixelLeft;\r\n style.left = left;\r\n if (rsLeft) {\r\n rs.left = rsLeft;\r\n }\r\n return result;\r\n };\r\n }\r\n\r\n function getMeasurements(elem, measure) {\r\n let base, borderA, borderB, computedMarginA, computedMarginB, computedStyle, dirA, dirB, marginA, marginB, paddingA, paddingB;\r\n\r\n if (isWindow(elem)) {\r\n base = document.documentElement[{height: 'clientHeight', width: 'clientWidth'}[measure]];\r\n\r\n return {\r\n base: base,\r\n padding: 0,\r\n border: 0,\r\n margin: 0\r\n };\r\n }\r\n\r\n // Start with offset property\r\n [\r\n base,\r\n dirA,\r\n dirB\r\n ] = {\r\n width: [\r\n elem.offsetWidth,\r\n 'Left',\r\n 'Right'\r\n ],\r\n height: [\r\n elem.offsetHeight,\r\n 'Top',\r\n 'Bottom'\r\n ]\r\n }[measure];\r\n\r\n computedStyle = getStyle(elem);\r\n paddingA = convertToPx(elem, computedStyle['padding' + dirA]) || 0;\r\n paddingB = convertToPx(elem, computedStyle['padding' + dirB]) || 0;\r\n borderA = convertToPx(elem, computedStyle['border' + dirA + 'Width']) || 0;\r\n borderB = convertToPx(elem, computedStyle['border' + dirB + 'Width']) || 0;\r\n computedMarginA = computedStyle['margin' + dirA];\r\n computedMarginB = computedStyle['margin' + dirB];\r\n\r\n // I do not care for width for now, so this hack is irrelevant\r\n // if ( !supportsPercentMargin )\r\n // computedMarginA = hackPercentMargin( elem, computedStyle, computedMarginA )\r\n // computedMarginB = hackPercentMargin( elem, computedStyle, computedMarginB )\r\n marginA = convertToPx(elem, computedMarginA) || 0;\r\n marginB = convertToPx(elem, computedMarginB) || 0;\r\n\r\n return {\r\n base: base,\r\n padding: paddingA + paddingB,\r\n border: borderA + borderB,\r\n margin: marginA + marginB\r\n };\r\n }\r\n\r\n function getWidthHeight(elem, direction, measure) {\r\n let computedStyle, result;\r\n\r\n let measurements = getMeasurements(elem, direction);\r\n\r\n if (measurements.base > 0) {\r\n return {\r\n base: measurements.base - measurements.padding - measurements.border,\r\n outer: measurements.base,\r\n outerfull: measurements.base + measurements.margin\r\n }[measure];\r\n }\r\n\r\n // Fall back to computed then uncomputed css if necessary\r\n computedStyle = getStyle(elem);\r\n result = computedStyle[direction];\r\n\r\n if (result < 0 || result === null) {\r\n result = elem.style[direction] || 0;\r\n }\r\n\r\n // Normalize \"\", auto, and prepare for extra\r\n result = parseFloat(result) || 0;\r\n\r\n return {\r\n base: result - measurements.padding - measurements.border,\r\n outer: result,\r\n outerfull: result + measurements.padding + measurements.border + measurements.margin\r\n }[measure];\r\n }\r\n\r\n // define missing methods\r\n return angular.forEach({\r\n before(newElem) {\r\n var children, elem, i, j, parent, ref, self;\r\n self = this;\r\n elem = self[0];\r\n parent = self.parent();\r\n children = parent.contents();\r\n if (children[0] === elem) {\r\n return parent.prepend(newElem);\r\n } else {\r\n for (i = j = 1, ref = children.length - 1; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {\r\n if (children[i] === elem) {\r\n angular.element(children[i - 1]).after(newElem);\r\n return;\r\n }\r\n }\r\n throw new Error('invalid DOM structure ' + elem.outerHTML);\r\n }\r\n },\r\n height (value){\r\n var self;\r\n self = this;\r\n if (typeof value !== 'undefined') {\r\n if (Number.isInteger(value)) {\r\n value = value + 'px';\r\n }\r\n return css.call(self, 'height', value);\r\n } else {\r\n return getWidthHeight(this[0], 'height', 'base');\r\n }\r\n },\r\n outerHeight(option) {\r\n return getWidthHeight(this[0], 'height', option ? 'outerfull' : 'outer');\r\n },\r\n outerWidth(option) {\r\n return getWidthHeight(this[0], 'width', option ? 'outerfull' : 'outer');\r\n },\r\n\r\n /*\r\n The offset setter method is not implemented\r\n */\r\n offset(value) {\r\n let docElem, win;\r\n let self = this;\r\n let box = {\r\n top: 0,\r\n left: 0\r\n };\r\n let elem = self[0];\r\n let doc = elem && elem.ownerDocument;\r\n\r\n if (arguments.length) {\r\n if (value === undefined) {\r\n return self;\r\n }\r\n // TODO: implement setter\r\n throw new Error('offset setter method is not implemented');\r\n }\r\n\r\n if (!doc) {\r\n return;\r\n }\r\n\r\n docElem = doc.documentElement;\r\n\r\n // TODO: Make sure it's not a disconnected DOM node\r\n\r\n if (elem.getBoundingClientRect != null) {\r\n box = elem.getBoundingClientRect();\r\n }\r\n\r\n win = doc.defaultView || doc.parentWindow;\r\n\r\n return {\r\n top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),\r\n left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0)\r\n };\r\n },\r\n scrollTop(value) {\r\n return scrollTo(this, 'top', value);\r\n },\r\n scrollLeft(value) {\r\n return scrollTo(this, 'left', value);\r\n }\r\n }, (value, key) => {\r\n if (!element.prototype[key]) {\r\n return element.prototype[key] = value;\r\n }\r\n });\r\n }\r\n\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/jqLiteExtras.js","const hideClassToken = 'ng-ui-scroll-hide';\r\n\r\nfunction addCSSRule(sheet, selector, rules, index) {\r\n if('insertRule' in sheet) {\r\n sheet.insertRule(selector + '{' + rules + '}', index);\r\n }\r\n else if('addRule' in sheet) {\r\n sheet.addRule(selector, rules, index);\r\n }\r\n}\r\n\r\nexport default class ElementRoutines {\r\n\r\n constructor($injector, $q) {\r\n this.$animate = ($injector.has && $injector.has('$animate')) ? $injector.get('$animate') : null;\r\n this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3;\r\n this.$q = $q;\r\n addCSSRule(document.styleSheets[0], '.' + hideClassToken, 'display: none');\r\n }\r\n\r\n hideElement(wrapper) {\r\n wrapper.element.addClass(hideClassToken);\r\n }\r\n\r\n showElement(wrapper) {\r\n wrapper.element.removeClass(hideClassToken);\r\n }\r\n\r\n insertElement(newElement, previousElement) {\r\n previousElement.after(newElement);\r\n return [];\r\n }\r\n\r\n removeElement(wrapper) {\r\n wrapper.element.remove();\r\n wrapper.scope.$destroy();\r\n return [];\r\n }\r\n\r\n insertElementAnimated(newElement, previousElement) {\r\n if (!this.$animate) {\r\n return this.insertElement(newElement, previousElement);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n // no need for parent - previous element is never null\r\n this.$animate.enter(newElement, null, previousElement, () => deferred.resolve());\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n // no need for parent - previous element is never null\r\n return [this.$animate.enter(newElement, null, previousElement)];\r\n }\r\n\r\n removeElementAnimated(wrapper) {\r\n if (!this.$animate) {\r\n return this.removeElement(wrapper);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n this.$animate.leave(wrapper.element, () => {\r\n wrapper.scope.$destroy();\r\n return deferred.resolve();\r\n });\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n return [(this.$animate.leave(wrapper.element)).then(() => wrapper.scope.$destroy())];\r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/elementRoutines.js","export default function ScrollBuffer(elementRoutines, bufferSize, startIndex) {\r\n const buffer = Object.create(Array.prototype);\r\n\r\n Object.assign(buffer, {\r\n size: bufferSize,\r\n\r\n reset(startIndex) {\r\n buffer.remove(0, buffer.length);\r\n buffer.eof = false;\r\n buffer.bof = false;\r\n buffer.first = startIndex;\r\n buffer.next = startIndex;\r\n buffer.minIndex = startIndex;\r\n buffer.maxIndex = startIndex;\r\n buffer.minIndexUser = null;\r\n buffer.maxIndexUser = null;\r\n },\r\n\r\n append(items) {\r\n items.forEach((item) => {\r\n ++buffer.next;\r\n buffer.insert('append', item);\r\n });\r\n buffer.maxIndex = buffer.eof ? buffer.next - 1 : Math.max(buffer.next - 1, buffer.maxIndex);\r\n },\r\n\r\n prepend(items) {\r\n items.reverse().forEach((item) => {\r\n --buffer.first;\r\n buffer.insert('prepend', item);\r\n });\r\n buffer.minIndex = buffer.bof ? buffer.minIndex = buffer.first : Math.min(buffer.first, buffer.minIndex);\r\n },\r\n\r\n /**\r\n * inserts wrapped element in the buffer\r\n * the first argument is either operation keyword (see below) or a number for operation 'insert'\r\n * for insert the number is the index for the buffer element the new one have to be inserted after\r\n * operations: 'append', 'prepend', 'insert', 'remove', 'update', 'none'\r\n */\r\n insert(operation, item, isTop) {\r\n const wrapper = {\r\n item: item\r\n };\r\n\r\n if (operation % 1 === 0) {// it is an insert\r\n wrapper.op = 'insert';\r\n buffer.splice(operation, 0, wrapper);\r\n if(isTop) {\r\n buffer.first--;\r\n }\r\n else {\r\n buffer.next++;\r\n }\r\n } else {\r\n wrapper.op = operation;\r\n switch (operation) {\r\n case 'append':\r\n buffer.push(wrapper);\r\n break;\r\n case 'prepend':\r\n buffer.unshift(wrapper);\r\n break;\r\n }\r\n }\r\n },\r\n\r\n // removes elements from buffer\r\n remove(arg1, arg2) {\r\n if (Number.isInteger(arg1)) {\r\n // removes items from arg1 (including) through arg2 (excluding)\r\n for (let i = arg1; i < arg2; i++) {\r\n elementRoutines.removeElement(buffer[i]);\r\n }\r\n return buffer.splice(arg1, arg2 - arg1);\r\n }\r\n // removes single item(wrapper) from the buffer\r\n buffer.splice(buffer.indexOf(arg1), 1);\r\n if(arg1._op === 'isTop' && buffer.first === this.getAbsMinIndex()) {\r\n this.incrementMinIndex();\r\n }\r\n else {\r\n this.decrementMaxIndex();\r\n }\r\n if(arg1._op === 'isTop') {\r\n buffer.first++;\r\n }\r\n else {\r\n buffer.next--;\r\n }\r\n if(!buffer.length) {\r\n buffer.first = 1;\r\n buffer.next = 1;\r\n }\r\n\r\n return elementRoutines.removeElementAnimated(arg1);\r\n },\r\n\r\n incrementMinIndex() {\r\n if(buffer.minIndexUser !== null) {\r\n if(buffer.minIndex > buffer.minIndexUser) {\r\n buffer.minIndexUser++;\r\n return;\r\n }\r\n if(buffer.minIndex === buffer.minIndexUser) {\r\n buffer.minIndexUser++;\r\n }\r\n }\r\n buffer.minIndex++;\r\n },\r\n\r\n decrementMaxIndex() {\r\n if(buffer.maxIndexUser !== null && buffer.maxIndex <= buffer.maxIndexUser) {\r\n buffer.maxIndexUser--;\r\n }\r\n buffer.maxIndex--;\r\n },\r\n\r\n getAbsMinIndex() {\r\n if(buffer.minIndexUser !== null) {\r\n return Math.min(buffer.minIndexUser, buffer.minIndex);\r\n }\r\n return buffer.minIndex;\r\n },\r\n\r\n getAbsMaxIndex() {\r\n if(buffer.maxIndexUser !== null) {\r\n return Math.max(buffer.maxIndexUser, buffer.maxIndex);\r\n }\r\n return buffer.maxIndex;\r\n },\r\n\r\n effectiveHeight(elements) {\r\n if (!elements.length) {\r\n return 0;\r\n }\r\n let top = Number.MAX_VALUE;\r\n let bottom = Number.NEGATIVE_INFINITY;\r\n elements.forEach((wrapper) => {\r\n if (wrapper.element[0].offsetParent) {\r\n // element style is not display:none\r\n top = Math.min(top, wrapper.element.offset().top);\r\n bottom = Math.max(bottom, wrapper.element.offset().top + wrapper.element.outerHeight(true));\r\n }\r\n });\r\n return Math.max(0, bottom - top);\r\n }\r\n\r\n });\r\n\r\n buffer.reset(startIndex);\r\n\r\n return buffer;\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/buffer.js","import Padding from './padding';\r\n\r\nexport default function Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding) {\r\n let topPadding = null;\r\n let bottomPadding = null;\r\n const viewport = viewportController && viewportController.viewport ? viewportController.viewport : angular.element(window);\r\n const container = viewportController && viewportController.container ? viewportController.container : undefined;\r\n const scope = viewportController && viewportController.scope ? viewportController.scope : $rootScope;\r\n\r\n viewport.css({\r\n 'overflow-anchor': 'none',\r\n 'overflow-y': 'auto',\r\n 'display': 'block'\r\n });\r\n\r\n function bufferPadding() {\r\n return viewport.outerHeight() * padding; // some extra space to initiate preload\r\n }\r\n\r\n Object.assign(viewport, {\r\n getScope() {\r\n return scope;\r\n },\r\n\r\n createPaddingElements(template) {\r\n topPadding = new Padding(template);\r\n bottomPadding = new Padding(template);\r\n element.before(topPadding.element);\r\n element.after(bottomPadding.element);\r\n topPadding.height(0);\r\n bottomPadding.height(0);\r\n },\r\n\r\n applyContainerStyle() {\r\n if (!container) {\r\n return true;\r\n }\r\n if(container !== viewport) {\r\n viewport.css('height', window.getComputedStyle(container[0]).height);\r\n }\r\n return viewport.height() > 0;\r\n },\r\n\r\n bottomDataPos() {\r\n let scrollHeight = viewport[0].scrollHeight;\r\n scrollHeight = scrollHeight != null ? scrollHeight : viewport[0].document.documentElement.scrollHeight;\r\n return scrollHeight - bottomPadding.height();\r\n },\r\n\r\n topDataPos() {\r\n return topPadding.height();\r\n },\r\n\r\n bottomVisiblePos() {\r\n return viewport.scrollTop() + viewport.outerHeight();\r\n },\r\n\r\n topVisiblePos() {\r\n return viewport.scrollTop();\r\n },\r\n\r\n insertElement(e, sibling) {\r\n return elementRoutines.insertElement(e, sibling || topPadding.element);\r\n },\r\n\r\n insertElementAnimated(e, sibling) {\r\n return elementRoutines.insertElementAnimated(e, sibling || topPadding.element);\r\n },\r\n\r\n shouldLoadBottom() {\r\n return !buffer.eof && viewport.bottomDataPos() < viewport.bottomVisiblePos() + bufferPadding();\r\n },\r\n\r\n clipBottom() {\r\n // clip the invisible items off the bottom\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.bottomDataPos() - viewport.bottomVisiblePos() - bufferPadding();\r\n\r\n for (let i = buffer.length - 1; i >= 0; i--) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n bottomPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n buffer.eof = false;\r\n buffer.remove(buffer.length - overage, buffer.length);\r\n buffer.next -= overage;\r\n viewport.adjustPaddings();\r\n }\r\n },\r\n\r\n shouldLoadTop() {\r\n return !buffer.bof && (viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding());\r\n },\r\n\r\n clipTop() {\r\n // clip the invisible items off the top\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\r\n\r\n for (let i = 0; i < buffer.length; i++) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n topPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n // we need to adjust top padding element before items are removed from top\r\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\r\n topPadding.height(topPadding.height() + overageHeight);\r\n buffer.bof = false;\r\n buffer.remove(0, overage);\r\n buffer.first += overage;\r\n }\r\n },\r\n\r\n adjustPaddings() {\r\n if (!buffer.length) {\r\n return;\r\n }\r\n\r\n // precise heights calculation based on items that are in buffer or that were in buffer once\r\n const visibleItemsHeight = buffer.reduce((summ, item) => summ + item.element.outerHeight(true), 0);\r\n\r\n let topPaddingHeight = 0, topCount = 0;\r\n topPadding.cache.forEach(item => {\r\n if(item.index < buffer.first) {\r\n topPaddingHeight += item.height;\r\n topCount++;\r\n }\r\n });\r\n\r\n let bottomPaddingHeight = 0, bottomCount = 0;\r\n bottomPadding.cache.forEach(item => {\r\n if(item.index >= buffer.next) {\r\n bottomPaddingHeight += item.height;\r\n bottomCount++;\r\n }\r\n });\r\n\r\n const totalHeight = visibleItemsHeight + topPaddingHeight + bottomPaddingHeight;\r\n const averageItemHeight = totalHeight / (topCount + bottomCount + buffer.length);\r\n\r\n // average heights calculation, items that have never been reached\r\n let adjustTopPadding = buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser;\r\n let adjustBottomPadding = buffer.maxIndexUser !== null && buffer.maxIndex < buffer.maxIndexUser;\r\n let topPaddingHeightAdd = adjustTopPadding ? (buffer.minIndex - buffer.minIndexUser) * averageItemHeight : 0;\r\n let bottomPaddingHeightAdd = adjustBottomPadding ? (buffer.maxIndexUser - buffer.maxIndex) * averageItemHeight : 0;\r\n\r\n // paddings combine adjustment\r\n topPadding.height(topPaddingHeight + topPaddingHeightAdd);\r\n bottomPadding.height(bottomPaddingHeight + bottomPaddingHeightAdd);\r\n },\r\n\r\n onAfterMinIndexSet(topPaddingHeightOld) {\r\n // additional scrollTop adjustment in case of datasource.minIndex external set\r\n if (buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser) {\r\n let diff = topPadding.height() - topPaddingHeightOld;\r\n viewport.scrollTop(viewport.scrollTop() + diff);\r\n while((diff -= viewport.scrollTop()) > 0) {\r\n bottomPadding.height(bottomPadding.height() + diff);\r\n viewport.scrollTop(viewport.scrollTop() + diff);\r\n }\r\n }\r\n },\r\n\r\n onAfterPrepend(updates) {\r\n if (!updates.prepended.length)\r\n return;\r\n const height = buffer.effectiveHeight(updates.prepended);\r\n const paddingHeight = topPadding.height() - height;\r\n if (paddingHeight >= 0) {\r\n topPadding.height(paddingHeight);\r\n }\r\n else {\r\n topPadding.height(0);\r\n viewport.scrollTop(viewport.scrollTop() - paddingHeight);\r\n }\r\n },\r\n\r\n resetTopPadding() {\r\n topPadding.height(0);\r\n topPadding.cache.clear();\r\n },\r\n\r\n resetBottomPadding() {\r\n bottomPadding.height(0);\r\n bottomPadding.cache.clear();\r\n },\r\n\r\n removeCacheItem(item, isTop) {\r\n topPadding.cache.remove(item, isTop);\r\n bottomPadding.cache.remove(item, isTop);\r\n },\r\n\r\n removeItem(item) {\r\n this.removeCacheItem(item);\r\n return buffer.remove(item);\r\n }\r\n });\r\n\r\n return viewport;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/viewport.js","// Can't just extend the Array, due to Babel does not support built-in classes extending\r\n// This solution was taken from https://stackoverflow.com/questions/46897414/es6-class-extends-array-workaround-for-es5-babel-transpile\r\nclass CacheProto {\r\n add(item) {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index === item.scope.$index) {\r\n this[i].height = item.element.outerHeight();\r\n return;\r\n }\r\n }\r\n this.push({\r\n index: item.scope.$index,\r\n height: item.element.outerHeight()\r\n });\r\n this.sort((a, b) => ((a.index < b.index) ? -1 : ((a.index > b.index) ? 1 : 0)));\r\n }\r\n\r\n remove(argument, _isTop) {\r\n const index = argument % 1 === 0 ? argument : argument.scope.$index;\r\n const isTop = argument % 1 === 0 ? _isTop : argument._op === 'isTop';\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index === index) {\r\n this.splice(i, 1);\r\n break;\r\n }\r\n }\r\n if(!isTop) {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index > index) {\r\n this[i].index--;\r\n }\r\n }\r\n }\r\n }\r\n\r\n clear() {\r\n this.length = 0;\r\n }\r\n}\r\n\r\nfunction Cache() {\r\n const instance = [];\r\n instance.push.apply(instance, arguments);\r\n Object.setPrototypeOf(instance, Cache.prototype);\r\n return instance;\r\n}\r\nCache.prototype = Object.create(Array.prototype);\r\nObject.getOwnPropertyNames(CacheProto.prototype).forEach(methodName =>\r\n Cache.prototype[methodName] = CacheProto.prototype[methodName]\r\n);\r\n\r\nfunction generateElement(template) {\r\n if(template.nodeType !== Node.ELEMENT_NODE) {\r\n throw new Error('ui-scroll directive requires an Element node for templating the view');\r\n }\r\n let element;\r\n switch (template.tagName.toLowerCase()) {\r\n case 'dl':\r\n throw new Error(`ui-scroll directive does not support <${template.tagName}> as a repeating tag: ${template.outerHTML}`);\r\n case 'tr':\r\n let table = angular.element('');\r\n element = table.find('tr');\r\n break;\r\n case 'li':\r\n element = angular.element('');\r\n break;\r\n default:\r\n element = angular.element('');\r\n }\r\n return element;\r\n}\r\n\r\nclass Padding {\r\n constructor(template) {\r\n this.element = generateElement(template);\r\n this.cache = new Cache();\r\n }\r\n\r\n height() {\r\n return this.element.height.apply(this.element, arguments);\r\n }\r\n}\r\n\r\nexport default Padding;\n\n\n// WEBPACK FOOTER //\n// ./src/modules/padding.js","class Adapter {\r\n\r\n constructor($scope, $parse, $attr, viewport, buffer, doAdjust, reload) {\r\n this.$parse = $parse;\r\n this.$attr = $attr;\r\n this.viewport = viewport;\r\n this.buffer = buffer;\r\n\r\n this.doAdjust = doAdjust;\r\n this.reload = reload;\r\n\r\n this.isLoading = false;\r\n this.disabled = false;\r\n\r\n const viewportScope = viewport.getScope();\r\n this.startScope = viewportScope.$parent ? viewportScope : $scope;\r\n\r\n this.publicContext = {};\r\n this.assignAdapter($attr.adapter);\r\n this.generatePublicContext();\r\n }\r\n\r\n assignAdapter(adapterAttr) {\r\n if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\\s+|\\s+$/gm, ''))) {\r\n return;\r\n }\r\n let adapterOnScope;\r\n\r\n try {\r\n this.$parse(adapterAttr).assign(this.startScope, {});\r\n adapterOnScope = this.$parse(adapterAttr)(this.startScope);\r\n }\r\n catch (error) {\r\n error.message = `Angular ui-scroll Adapter assignment exception.\\n` +\r\n `Can't parse \"${adapterAttr}\" expression.\\n` +\r\n error.message;\r\n throw error;\r\n }\r\n\r\n Object.assign(adapterOnScope, this.publicContext);\r\n this.publicContext = adapterOnScope;\r\n }\r\n\r\n generatePublicContext() {\r\n // these methods will be accessible out of ui-scroll via user defined adapter\r\n const publicMethods = ['reload', 'applyUpdates', 'append', 'prepend', 'isBOF', 'isEOF', 'isEmpty'];\r\n for (let i = publicMethods.length - 1; i >= 0; i--) {\r\n this.publicContext[publicMethods[i]] = this[publicMethods[i]].bind(this);\r\n }\r\n\r\n // these read-only props will be accessible out of ui-scroll via user defined adapter\r\n const publicProps = ['isLoading', 'topVisible', 'topVisibleElement', 'topVisibleScope', 'bottomVisible', 'bottomVisibleElement', 'bottomVisibleScope'];\r\n for (let i = publicProps.length - 1; i >= 0; i--) {\r\n let property, attr = this.$attr[publicProps[i]];\r\n Object.defineProperty(this, publicProps[i], {\r\n get: () => property,\r\n set: (value) => {\r\n property = value;\r\n this.publicContext[publicProps[i]] = value;\r\n if (attr) {\r\n this.$parse(attr).assign(this.startScope, value);\r\n }\r\n }\r\n });\r\n }\r\n\r\n // non-read-only public property\r\n Object.defineProperty(this.publicContext, 'disabled', {\r\n get: () => this.disabled,\r\n set: (value) => (!(this.disabled = value)) ? this.doAdjust() : null\r\n });\r\n }\r\n\r\n loading(value) {\r\n this.isLoading = value;\r\n }\r\n\r\n isBOF() {\r\n return this.buffer.bof;\r\n }\r\n\r\n isEOF() {\r\n return this.buffer.eof;\r\n }\r\n\r\n isEmpty() {\r\n return !this.buffer.length;\r\n }\r\n\r\n append(newItems) {\r\n this.buffer.append(newItems);\r\n this.doAdjust();\r\n this.viewport.clipTop();\r\n this.viewport.clipBottom();\r\n }\r\n\r\n prepend(newItems) {\r\n this.buffer.prepend(newItems);\r\n this.doAdjust();\r\n this.viewport.clipTop();\r\n this.viewport.clipBottom();\r\n }\r\n\r\n applyUpdates(arg1, arg2) {\r\n if (typeof arg1 === 'function') {\r\n this.applyUpdatesFunc(arg1);\r\n } else {\r\n this.applyUpdatesIndex(arg1, arg2);\r\n }\r\n this.doAdjust();\r\n }\r\n\r\n applyUpdatesFunc(cb) {\r\n this.buffer.slice(0).forEach((wrapper) => {\r\n // we need to do it on the buffer clone, because buffer content\r\n // may change as we iterate through\r\n this.applyUpdate(wrapper, cb(wrapper.item, wrapper.scope, wrapper.element));\r\n });\r\n }\r\n\r\n applyUpdatesIndex(index, newItems) {\r\n if (index % 1 !== 0) {\r\n throw new Error('applyUpdates - ' + index + ' is not a valid index (should be an integer)');\r\n }\r\n const _index = index - this.buffer.first;\r\n\r\n // apply updates only within buffer\r\n if (_index >= 0 && _index < this.buffer.length) {\r\n this.applyUpdate(this.buffer[_index], newItems);\r\n }\r\n // out-of-buffer case: deletion may affect Paddings\r\n else if(index >= this.buffer.getAbsMinIndex() && index <= this.buffer.getAbsMaxIndex()) {\r\n if(Array.isArray(newItems) && !newItems.length) {\r\n this.viewport.removeCacheItem(index, index === this.buffer.minIndex);\r\n if(index === this.buffer.getAbsMinIndex()) {\r\n this.buffer.incrementMinIndex();\r\n }\r\n else {\r\n this.buffer.decrementMaxIndex();\r\n }\r\n }\r\n }\r\n }\r\n\r\n applyUpdate(wrapper, newItems) {\r\n if (!Array.isArray(newItems)) {\r\n return;\r\n }\r\n let position = this.buffer.indexOf(wrapper);\r\n if (!newItems.reverse().some(newItem => newItem === wrapper.item)) {\r\n wrapper.op = 'remove';\r\n if(position === 0 && !newItems.length) {\r\n wrapper._op = 'isTop'; // to catch \"first\" edge case on remove\r\n }\r\n }\r\n newItems.forEach((newItem) => {\r\n if (newItem === wrapper.item) {\r\n position--;\r\n } else {\r\n // 3 parameter (isTop) is to catch \"first\" edge case on insert\r\n this.buffer.insert(position + 1, newItem, position === -1);\r\n }\r\n });\r\n }\r\n\r\n calculateProperties() {\r\n let rowTop = null, topHeight = 0;\r\n let topDone = false, bottomDone = false;\r\n const length = this.buffer.length;\r\n\r\n for (let i = 0; i < length; i++) {\r\n const item = this.buffer[i];\r\n const itemTop = item.element.offset().top;\r\n\r\n if (rowTop !== itemTop) { // a new row condition\r\n const itemHeight = item.element.outerHeight(true);\r\n const top = this.viewport.topDataPos() + topHeight + itemHeight;\r\n\r\n if (!topDone && top > this.viewport.topVisiblePos()) {\r\n topDone = true;\r\n this['topVisible'] = item.item;\r\n this['topVisibleElement'] = item.element;\r\n this['topVisibleScope'] = item.scope;\r\n }\r\n if (!bottomDone && (top >= this.viewport.bottomVisiblePos() || (i === length - 1 && this.isEOF()))) {\r\n bottomDone = true;\r\n this['bottomVisible'] = item.item;\r\n this['bottomVisibleElement'] = item.element;\r\n this['bottomVisibleScope'] = item.scope;\r\n }\r\n topHeight += itemHeight;\r\n }\r\n rowTop = itemTop;\r\n\r\n if (topDone && bottomDone) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n}\r\n\r\nexport default Adapter;\n\n\n// WEBPACK FOOTER //\n// ./src/modules/adapter.js"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///ui-scroll.min.js","webpack:///webpack/bootstrap f32df6d97ca6583cfb5d","webpack:///./src/ui-scroll.js","webpack:///./src/modules/jqLiteExtras.js","webpack:///./src/modules/elementRoutines.js","webpack:///./src/modules/buffer.js","webpack:///./src/modules/viewport.js","webpack:///./src/modules/padding.js","webpack:///./src/modules/adapter.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","_interopRequireDefault","obj","default","_jqLiteExtras","_jqLiteExtras2","_elementRoutines","_elementRoutines2","_buffer","_buffer2","_viewport","_viewport2","_adapter","_adapter2","angular","constant","run","JQLiteExtras","window","jQuery","registerFor","element","addCSSRules","directive","restrict","controller","scope","_this","this","container","viewport","forEach","children","child","tagName","toLowerCase","console","$injector","$rootScope","$timeout","$interval","$q","$parse","link","$scope","$attr","controllers","linker","parseNumericAttr","value","defaultValue","result","isNaN","onRenderHandlersRunner","onRenderHandlers","handler","persistDatasourceIndex","datasource","propName","Number","isInteger","filter","id","push","defineDatasourceIndex","propUserName","descriptor","getOwnPropertyDescriptor","set","pending","length","buffer","topPaddingHeightOld","topDataPos","adjustPaddings","onAfterMinIndexSet","isInvalid","rid","ridActual","$$destroyed","bindEvents","bind","resizeAndScrollHandler","unbindEvents","unbind","reload","resetTopPadding","resetBottomPadding","arguments","startIndex","reset","doAdjust","isElementVisible","wrapper","height","offsetParent","visibilityWatcher","item","unregisterVisibilityWatcher","insertWrapperContent","insertAfter","createElement","insertElement","$watch","elementRoutines","hideElement","promises","sibling","undefined","clone","itemName","adapter","transform","tdInitializer","uiScrollTdInitializer","linking","onLink","updateDOM","toBePrepended","toBeRemoved","inserted","op","unshift","concat","insertElementAnimated","removeItem","$index","first","prepended","removed","animated","updatePaddings","updates","all","then","enqueueFetch","shouldLoadBottom","effectiveHeight","loading","fetch","shouldLoadTop","processUpdates","$$phase","$digest","w","showElement","calculateProperties","doAdjustAfterFetch","onAfterPrepend","shift","fetchNext","bufferSize","eof","clipTop","append","fetchPrevious","bof","clipBottom","prepend","isLoading","disabled","wheelHandler","event","scrollTop","yMax","scrollHeight","clientHeight","preventDefault","match","uiScroll","Error","datasourceName","viewportController","Math","max","padding","isDatasourceValid","toString","success","next","index","count","createPaddingElements","$destroy","remove","$on","tryCount","applyContainerStyle","timer","cancel","require","transclude","priority","terminal","_classCallCheck","instance","Constructor","TypeError","_slicedToArray","sliceIterator","arr","_arr","_n","_d","_e","_s","_i","Symbol","iterator","done","err","Array","isArray","_createClass","defineProperties","target","props","writable","key","protoProps","staticProps","scrollTo","self","direction","elem","_top$left$direction","top","left","method","prop","preserve","isValueDefined","isWindow","document","documentElement","getMeasurements","measure","base","borderA","borderB","computedMarginA","computedMarginB","computedStyle","dirA","dirB","marginA","marginB","paddingA","paddingB","width","border","margin","_width$height$measure","offsetWidth","offsetHeight","getStyle","convertToPx","getWidthHeight","measurements","outer","outerfull","style","parseFloat","css","nodeType","location","alert","setInterval","getComputedStyle","currentStyle","rs","rsLeft","core_pnum","source","RegExp","test","runtimeStyle","pixelLeft","before","newElem","j","parent","ref","contents","after","outerHTML","outerHeight","option","outerWidth","offset","docElem","win","box","doc","ownerDocument","getBoundingClientRect","defaultView","parentWindow","pageYOffset","clientTop","pageXOffset","scrollLeft","clientLeft","ElementRoutines","$animate","has","isAngularVersionLessThen1_3","version","major","minor","sheet","styleSheets","cssRules","insertRule","selector","addRule","addClass","removeClass","newElement","previousElement","deferred","defer","enter","resolve","promise","removeElement","leave","ScrollBuffer","create","assign","size","minIndex","maxIndex","minIndexUser","maxIndexUser","items","insert","reverse","min","operation","isTop","splice","arg1","arg2","indexOf","_op","getAbsMinIndex","incrementMinIndex","decrementMaxIndex","removeElementAnimated","getAbsMaxIndex","elements","MAX_VALUE","bottom","NEGATIVE_INFINITY","Viewport","bufferPadding","topPadding","bottomPadding","overflow-anchor","overflow-y","display","getScope","template","_padding2","bottomDataPos","bottomVisiblePos","topVisiblePos","e","overage","overageHeight","itemHeight","emptySpaceHeight","cache","add","visibleItemsHeight","reduce","summ","topPaddingHeight","topCount","bottomPaddingHeight","bottomCount","totalHeight","averageItemHeight","adjustTopPadding","adjustBottomPadding","topPaddingHeightAdd","bottomPaddingHeightAdd","diff","paddingHeight","clear","removeCacheItem","_padding","Cache","apply","setPrototypeOf","generateElement","Node","ELEMENT_NODE","find","CacheProto","sort","a","b","argument","_isTop","getOwnPropertyNames","methodName","Padding","Adapter","viewportScope","startScope","$parent","publicContext","assignAdapter","generatePublicContext","adapterAttr","replace","adapterOnScope","error","message","publicMethods","publicProps","attr","newItems","applyUpdatesFunc","applyUpdatesIndex","cb","_this2","slice","applyUpdate","_index","_this3","position","some","newItem","rowTop","topHeight","topDone","bottomDone","itemTop","isEOF"],"mappings":";;;;;;CAAS,SAAUA,GCInB,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAE,OAGA,IAAAC,GAAAF,EAAAD,IACAI,EAAAJ,EACAK,GAAA,EACAH,WAUA,OANAJ,GAAAE,GAAAM,KAAAH,EAAAD,QAAAC,IAAAD,QAAAH,GAGAI,EAAAE,GAAA,EAGAF,EAAAD,QAvBA,GAAAD,KA4BAF,GAAAQ,EAAAT,EAGAC,EAAAS,EAAAP,EAGAF,EAAAU,EAAA,SAAAP,EAAAQ,EAAAC,GACAZ,EAAAa,EAAAV,EAAAQ,IACAG,OAAAC,eAAAZ,EAAAQ,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAZ,EAAAmB,EAAA,SAAAf,GACA,GAAAQ,GAAAR,KAAAgB,WACA,WAA2B,MAAAhB,GAAA,SAC3B,WAAiC,MAAAA,GAEjC,OADAJ,GAAAU,EAAAE,EAAA,IAAAA,GACAA,GAIAZ,EAAAa,EAAA,SAAAQ,EAAAC,GAAsD,MAAAR,QAAAS,UAAAC,eAAAjB,KAAAc,EAAAC,IAGtDtB,EAAAyB,EAAA,GAGAzB,IAAA0B,EAAA,KDMM,SAAUtB,EAAQD,EAASH,GAEjC,YAuBA,SAAS2B,GAAuBC,GAAO,MAAOA,IAAOA,EAAIR,WAAaQ,GAAQC,QAASD,GE5FvF,GAAAE,GAAA9B,EAAA,GF0EI+B,EAAiBJ,EAAuBG,GEzE5CE,EAAAhC,EAAA,GF6EIiC,EAAoBN,EAAuBK,GE5E/CE,EAAAlC,EAAA,GFgFImC,EAAWR,EAAuBO,GE/EtCE,EAAApC,EAAA,GFmFIqC,EAAaV,EAAuBS,GElFxCE,EAAAtC,EAAA,GFsFIuC,EAAYZ,EAAuBW,EEpFvCE,SAAQpC,OAAO,gBAEZqC,SAAS,eAFZV,EAAAF,SAGGa,KAAK,eAAgB,SAACC,GACpBC,OAAOC,SAAU,GAAIF,IAAgBG,YAAYN,QAAQO,SAC1Dd,EAAAJ,QAAgBmB,iBAGjBC,UAAU,mBAAoB,WAC7B,OACEC,SAAU,IACVC,YACE,SACA,WACA,SAAUC,EAAOL,GAAS,GAAAM,GAAAC,IAWxB,OAVAA,MAAKC,UAAYR,EACjBO,KAAKE,SAAWT,EAChBO,KAAKF,MAAQA,EAEbZ,QAAQiB,QAAQV,EAAQW,WAAY,SAAAC,GACE,UAAhCA,EAAMC,QAAQC,gBAChBR,EAAKG,SAAWhB,QAAQO,QAAQY,MAI7BL,UAMdL,UAAU,YACT,OACA,YACA,aACA,WACA,YACA,KACA,SACA,SAAUa,EAASC,EAAWC,EAAYC,EAAUC,EAAWC,EAAIC,GAWjE,QAASC,GAAKC,EAAQvB,EAASwB,EAAOC,EAAaC,GAMjD,QAASC,GAAiBC,EAAOC,GAC/B,GAAMC,GAAST,EAAOO,GAAOL,EAC7B,OAAOQ,OAAMD,GAAUD,EAAeC,EAyCxC,QAASE,KACPC,EAAiBvB,QAAQ,SAAAwB,GAAA,MAAWA,GAAQvC,QAC5CsC,KAEF,QAASE,GAAuBC,EAAYC,GAC1C,GAAIxE,SAEDyE,QAAOC,UAAUH,EAAWC,MAC7BxE,EAASuE,EAAWC,GACjBC,OAAOC,UAAU1E,KAClBoE,EAAmBA,EAAiBO,OAAO,SAAAN,GAAA,MAAWA,GAAQO,KAAOJ,IACrEJ,EAAiBS,MACfD,GAAIJ,EACJ1C,IAAK,iBAAMyC,GAAWC,GAAYxE,OAM1C,QAAS8E,GAAsBP,EAAYC,EAAUO,GACnD,GAAMC,GAAa9E,OAAO+E,yBAAyBV,EAAYC,EAC/D,KAAIQ,IAAeA,EAAWE,MAAOF,EAAW1E,IAAhD,CAGA,GAAIN,SACJsE,GAAuBC,EAAYC,GACnCtE,OAAOC,eAAeoE,EAAYC,GAChCU,IAAK,SAACnB,GAEJ,GADA/D,EAAS+D,EACNoB,EAAQC,SAAWC,EAAOD,OAE3B,WADAd,GAAuBC,EAAYC,EAGrCa,GAAON,GAAgBhB,CACvB,IAAMuB,GAAsB1C,EAAS2C,YACrC3C,GAAS4C,iBACQ,aAAbhB,GACF5B,EAAS6C,mBAAmBH,IAGhChF,IAAK,iBAAMN,OA0Ef,QAAS0F,GAAUC,GACjB,MAAQA,IAAOA,IAAQC,GAAclC,EAAOmC,YAG9C,QAASC,KACPlD,EAASmD,KAAK,SAAUC,GACxBpD,EAASmD,KAAK,SAAUC,GAG1B,QAASC,KACPrD,EAASsD,OAAO,SAAUF,GAC1BpD,EAASsD,OAAO,SAAUF,GAG5B,QAASG,KACPvD,EAASwD,kBACTxD,EAASyD,qBACLC,UAAUlB,SACZmB,EAAaD,UAAU,IAEzBjB,EAAOmB,MAAMD,GACbjC,EAAuBC,EAAY,YACnCD,EAAuBC,EAAY,YACnCkC,IAGF,QAASC,GAAiBC,GACxB,MAAOA,GAAQxE,QAAQyE,UAAYD,EAAQxE,QAAQ,GAAG0E,aAGxD,QAASC,GAAkBH,GACrBD,EAAiBC,KACnBtB,EAAOxC,QAAQ,SAACkE,GACkC,kBAArCA,GAAKC,8BACdD,EAAKC,oCACED,GAAKC,+BAGX7B,EAAQC,QACX/B,EAAS,iBAAMoD,QAKrB,QAASQ,GAAqBN,EAASO,GACrCC,EAAcR,EAASO,EAAatE,EAASwE,eACxCV,EAAiBC,KACpBA,EAAQK,4BAA8BL,EAAQnE,MAAM6E,OAAO,iBAAMP,GAAkBH,MAErFW,EAAgBC,YAAYZ,GAG9B,QAASQ,GAAcR,EAASO,EAAaE,GAC3C,GAAII,GAAW,KACTC,EAAWP,EAAc,EAAK7B,EAAO6B,EAAc,GAAG/E,YAAUuF,EAQtE,IAPA7D,EAAO,SAAC8D,EAAOnF,GACbgF,EAAWJ,EAAcO,EAAOF,GAChCd,EAAQxE,QAAUwF,EAClBhB,EAAQnE,MAAQA,EAChBA,EAAMoF,GAAYjB,EAAQI,OAGxBc,EAAQC,UAAW,CACrB,GAAMC,GAAgBpB,EAAQnE,MAAMwF,qBAChCD,IAAiBA,EAAcE,QACjCJ,EAAQC,UAAUnB,EAAQnE,MAAOmE,EAAQxE,SAEzCwE,EAAQnE,MAAMwF,uBACZE,OAAQ,iBAAML,GAAQC,UAAUnB,EAAQnE,MAAOmE,EAAQxE,UACvDK,MAAOmE,EAAQnE,OAIrB,MAAOgF,GAGT,QAASW,KACP,GAAIX,MACEY,KACAC,KACAC,IAgCN,OA9BAjD,GAAOxC,QAAQ,SAAC8D,EAASlH,GACvB,OAAQkH,EAAQ4B,IACd,IAAK,UACHH,EAAcI,QAAQ7B,EACtB,MACF,KAAK,SACHM,EAAqBN,EAASlH,GAC9BkH,EAAQ4B,GAAK,OACbD,EAASzD,KAAK8B,EACd,MACF,KAAK,SACHa,EAAWA,EAASiB,OAAOtB,EAAcR,EAASlH,EAAGmD,EAAS8F,wBAC9D/B,EAAQ4B,GAAK,OACbD,EAASzD,KAAK8B,EACd,MACF,KAAK,SACH0B,EAAYxD,KAAK8B,MAIvB0B,EAAYxF,QAAQ,SAAC8D,GAAD,MAAaa,GAAWA,EAASiB,OAAO7F,EAAS+F,WAAWhC,MAE5EyB,EAAchD,QAChBgD,EAAcvF,QAAQ,SAAC8D,GACrBM,EAAqBN,GACrBA,EAAQ4B,GAAK,SAGjBlD,EAAOxC,QAAQ,SAACkE,EAAMtH,GAAP,MAAasH,GAAKvE,MAAMoG,OAASvD,EAAOwD,MAAQpJ,KAG7DqJ,UAAWV,EACXW,QAASV,EACTC,SAAUA,EACVU,SAAUxB,GAKd,QAASyB,GAAetD,EAAKuD,GAEvBA,EAAQF,SAAS5D,OACnB7B,EAAG4F,IAAID,EAAQF,UAAUI,KAAK,WAC5BxG,EAAS4C,iBACTiB,EAASd,KAGX/C,EAAS4C,iBAIb,QAAS6D,GAAa1D,EAAKuD,GACrBtG,EAAS0G,qBACNJ,GAAW7D,EAAOkE,gBAAgBL,EAAQZ,UAAY,IAE9B,IAAvBnD,EAAQN,MAAK,KACfgD,EAAQ2B,SAAQ,GAChBC,EAAM9D,IAGD/C,EAAS8G,mBACZR,GAAW7D,EAAOkE,gBAAgBL,EAAQJ,WAAa,GAAM3D,EAAQ,KAI7C,IAAxBA,EAAQN,MAAK,KACfgD,EAAQ2B,SAAQ,GAChBC,EAAM9D,IAMd,QAASgE,KACP,GAAMT,GAAUf,GAOhB,QAJCzE,EAAOkG,UAAYxG,EAAWwG,SAAWlG,EAAOmG,UAEjDX,EAAQZ,SAASzF,QAAQ,SAAAiH,GAAA,MAAKxC,GAAgByC,YAAYD,KAC1DZ,EAAQJ,UAAUjG,QAAQ,SAAAiH,GAAA,MAAKxC,GAAgByC,YAAYD,KACpDZ,EAGT,QAASzC,GAASd,GACXA,IACHR,KACAQ,IAAQC,EAGV,IAAMsD,GAAUS,GAEZjE,GAAUC,KAIdsD,EAAetD,EAAKuD,GACpBG,EAAa1D,GAERR,EAAQC,QACXyC,EAAQmC,uBAIZ,QAASC,GAAmBtE,GAC1B,GAAMuD,GAAUS,GAEhB/G,GAASsH,eAAehB,GAEpBxD,EAAUC,KAIdsD,EAAetD,EAAKuD,GACpB/E,IACAkF,EAAa1D,EAAKuD,GAClB/D,EAAQgF,QAEJhF,EAAQC,OACVqE,EAAM9D,IAENkC,EAAQ2B,SAAQ,GAChB1D,IACA+B,EAAQmC,wBAIZ,QAASP,GAAM9D,GACTR,EAAQ,GACNE,EAAOD,SAAWxC,EAAS0G,mBAC7BW,EAAmBtE,GAEnByE,EAAU,SAACnG,GACLyB,EAAUC,KAIV1B,EAAOmB,OAASiF,IAClBhF,EAAOiF,KAAM,GAGXrG,EAAOmB,OAAS,IAClBxC,EAAS2H,UACTlF,EAAOmF,OAAOvG,IAGhBgG,EAAmBtE,MAInBN,EAAOD,SAAWxC,EAAS8G,gBAC7BO,EAAmBtE,GAEnB8E,EAAc,SAACxG,GACTyB,EAAUC,KAIV1B,EAAOmB,OAASiF,IAClBhF,EAAOqF,KAAM,GAIXzG,EAAOmB,OAAS,IACdC,EAAOD,QACTxC,EAAS+H,aAEXtF,EAAOuF,QAAQ3G,IAGjBgG,EAAmBtE,MAM3B,QAASK,KACF5C,EAAWwG,SAAY/B,EAAQgD,WAAchD,EAAQiD,WAExDzB,EAAazD,GAETT,EAAQC,OACVa,KAEA4B,EAAQmC,uBACPtG,EAAOkG,SAAWlG,EAAOmG,YAKhC,QAASkB,GAAaC,GACpB,IAAKnD,EAAQiD,SAAU,CACrB,GAAMG,GAAYrI,EAAS,GAAGqI,UACxBC,EAAOtI,EAAS,GAAGuI,aAAevI,EAAS,GAAGwI,cAEjC,IAAdH,IAAoB5F,EAAOqF,KAASO,IAAcC,IAAS7F,EAAOiF,MACrEU,EAAMK,kBAxbZ,GAAMC,GAAQ3H,EAAM4H,SAASD,MAAM,sCACnC,KAAKA,EACH,KAAM,IAAIE,OAAM,kEAAuE7H,EAAM4H,SAAW,IAQ1G,IAOIhH,GAAa,KACXqD,EAAW0D,EAAM,GACjBG,EAAiBH,EAAM,GACvBI,EAAqB9H,EAAY,GACjCyG,EAAasB,KAAKC,IAXL,EAWqB9H,EAAiBH,EAAM0G,WAVxC,KAWjBwB,EAAUF,KAAKC,IAVD,GAUkB9H,EAAiBH,EAAMkI,QATrC,KAUpBtF,EAAazC,EAAiBH,EAAM4C,WAAY,GAChDX,EAAY,EACZT,KAEEmC,EAAkB,GAAAjG,GAAAJ,QAAoBkC,EAAWI,GACjD8B,EAAS,GAAA9D,GAAAN,QAAiBqG,EAAiB+C,EAAY9D,GACvD3D,EAAW,GAAAnB,GAAAR,QAAaqG,EAAiBjC,EAAQlD,EAASuJ,EAAoBtI,EAAYyI,GAC1FhE,EAAU,GAAAlG,GAAAV,QAAYyC,EAAQF,EAAQG,EAAOf,EAAUyC,EAAQoB,EAAUN,EAE3EuF,KACFA,EAAmB7D,QAAUA,EAG/B,IAAMiE,GAAoB,iBACuB,oBAA/C5L,OAAOS,UAAUoL,SAASpM,KAAK4E,IAA+D,kBAAnBA,GAAWjE,IAGxF,IADAiE,EAAaf,EAAOiI,GAAgB/H,IAC/BoI,MACHvH,EAAapB,EAAU7C,IAAImL,IACtBK,KACH,KAAM,IAAIN,OAAMC,EAAiB,6BAIrC,IAAIrH,KA6CJU,GAAsBP,EAAY,WAAY,gBAC9CO,EAAsBP,EAAY,WAAY,eAE9C,IAAM6F,GAAuC,IAA1B7F,EAAWjE,IAAI8E,OAChC,SAAC4G,GAAD,MAAazH,GAAWjE,IAAI+E,EAAO4G,KAAM5B,EAAY2B,IACrD,SAACA,GACCzH,EAAWjE,KACT4L,MAAO7G,EAAO4G,KACdzB,OAAQnF,EAAOD,OAASC,EAAOA,EAAOD,OAAS,GAAG2B,SAAO,GACzDoF,MAAO9B,GACN2B,IAGDvB,EAA2C,IAA1BlG,EAAWjE,IAAI8E,OACpC,SAAC4G,GAAD,MAAazH,GAAWjE,IAAI+E,EAAOwD,MAAQwB,EAAYA,EAAY2B,IACnE,SAACA,GACCzH,EAAWjE,KACT4L,MAAO7G,EAAOwD,MAAQwB,EACtBO,QAASvF,EAAOD,OAASC,EAAO,GAAG0B,SAAO,GAC1CoF,MAAO9B,GACN2B,GA8BPnI,GAAO,SAAC8D,EAAOnF,GACbI,EAASwJ,sBAAsBzE,EAAM,IAIrCnF,EAAM6J,WACN1E,EAAM2E,WAGR5I,EAAO6I,IAAI,WAAY,WACrBtG,IACArD,EAASsD,OAAO,aAAc6E,KAGhCnI,EAASmD,KAAK,aAAcgF,GAzCT,WACjB,GAAIyB,GAAW,CACf,IAAI5J,EAAS6J,sBAcXhG,QAbA,IAAMiG,GAAQpJ,EAAU,WAMtB,GALAkJ,IACG5J,EAAS6J,wBACVnJ,EAAUqJ,OAAOD,GACjBjG,KA3G0B,GA6GzB+F,GA9GkB,IAgHnB,KADAlJ,GAAUqJ,OAAOD,GACXlB,gFA/GoB,OAzBpC,OACEoB,SAAU,sBACVtK,SAAU,IACVuK,WAAY,UACZC,SAAU,IACVC,UAAU,EACVtJ,KAAMA,OFiiBR,SAAUjE,EAAQD,EAASH,GAEjC,YAWA,SAAS4N,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCARhHjN,OAAOC,eAAeZ,EAAS,cAC7BwE,OAAO,GAGT,IAAIqJ,GAAiB,WAAc,QAASC,GAAcC,EAAK7N,GAAK,GAAI8N,MAAeC,GAAK,EAAUC,GAAK,EAAWC,MAAKhG,EAAW,KAAM,IAAK,GAAiCiG,GAA7BC,EAAKN,EAAIO,OAAOC,cAAmBN,GAAMG,EAAKC,EAAG3B,QAAQ8B,QAAoBR,EAAK1I,KAAK8I,EAAG5J,QAAYtE,GAAK8N,EAAKnI,SAAW3F,GAA3D+N,GAAK,IAAoE,MAAOQ,GAAOP,GAAK,EAAMC,EAAKM,EAAO,QAAU,KAAWR,GAAMI,EAAW,QAAGA,EAAW,SAAO,QAAU,GAAIH,EAAI,KAAMC,IAAQ,MAAOH,GAAQ,MAAO,UAAUD,EAAK7N,GAAK,GAAIwO,MAAMC,QAAQZ,GAAQ,MAAOA,EAAY,IAAIO,OAAOC,WAAY5N,QAAOoN,GAAQ,MAAOD,GAAcC,EAAK7N,EAAa,MAAM,IAAI0N,WAAU,4DAEllBgB,EAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAI7O,GAAI,EAAGA,EAAI6O,EAAMlJ,OAAQ3F,IAAK,CAAE,GAAIuF,GAAasJ,EAAM7O,EAAIuF,GAAW3E,WAAa2E,EAAW3E,aAAc,EAAO2E,EAAW5E,cAAe,EAAU,SAAW4E,KAAYA,EAAWuJ,UAAW,GAAMrO,OAAOC,eAAekO,EAAQrJ,EAAWwJ,IAAKxJ,IAAiB,MAAO,UAAUkI,EAAauB,EAAYC,GAAiJ,MAA9HD,IAAYL,EAAiBlB,EAAYvM,UAAW8N,GAAiBC,GAAaN,EAAiBlB,EAAawB,GAAqBxB,MGtlB3gBnL,EHqmBF,WACjB,QAASA,KACPiL,EAAgBtK,KAAMX,GAyRxB,MAtRAoM,GAAapM,IACXyM,IAAK,cACLzK,MAAO,SG1mBG5B,GAgBV,QAASwM,GAASC,EAAMC,EAAW9K,GACjC,GAAI+K,GAAOF,EAAK,GADwBG,EAAA3B,GAGtC4B,KACE,YACA,cACA,cAEFC,MACE,aACA,cACA,cAEFJ,GAbsC,GAEnCK,EAFmCH,EAAA,GAE3BI,EAF2BJ,EAAA,GAErBK,EAFqBL,EAAA,GAelCM,MAAkC,KAAVtL,CAC9B,OAAIuL,GAASR,GACPO,EACKP,EAAKH,SAASC,EAAKQ,GAAUzP,KAAKiP,GAAO7K,GAE1CoL,IAAQL,GAAQA,EAAKK,GAAQL,EAAKS,SAASC,gBAAgBN,IAE/DG,IACFP,EAAKI,GAAUnL,GAEV+K,EAAKI,IAqChB,QAASO,GAAgBX,EAAMY,GAC7B,GAAIC,UAAMC,SAASC,SAASC,SAAiBC,SAAiBC,SAAeC,SAAMC,SAAMC,SAASC,SAASC,SAAUC,QAErH,IAAIhB,EAASR,GAGX,MAFAa,GAAOJ,SAASC,iBAAiB5I,OAAQ,eAAgB2J,MAAO,eAAeb,KAG7EC,KAAMA,EACN9D,QAAS,EACT2E,OAAQ,EACRC,OAAQ,EAV0B,IAAAC,GAAAtD,GAoBpCmD,OACEzB,EAAK6B,YACL,OACA,SAEF/J,QACEkI,EAAK8B,aACL,MACA,WAEFlB,GA9BoC,EA+CtC,OA/BEC,GAhBoCe,EAAA,GAiBpCT,EAjBoCS,EAAA,GAkBpCR,EAlBoCQ,EAAA,GAgCtCV,EAAgBa,EAAS/B,GACzBuB,EAAWS,EAAYhC,EAAMkB,EAAc,UAAYC,KAAU,EACjEK,EAAWQ,EAAYhC,EAAMkB,EAAc,UAAYE,KAAU,EACjEN,EAAUkB,EAAYhC,EAAMkB,EAAc,SAAWC,EAAO,WAAa,EACzEJ,EAAUiB,EAAYhC,EAAMkB,EAAc,SAAWE,EAAO,WAAa,EACzEJ,EAAkBE,EAAc,SAAWC,GAC3CF,EAAkBC,EAAc,SAAWE,GAM3CC,EAAUW,EAAYhC,EAAMgB,IAAoB,EAChDM,EAAUU,EAAYhC,EAAMiB,IAAoB,GAG9CJ,KAAMA,EACN9D,QAASwE,EAAWC,EACpBE,OAAQZ,EAAUC,EAClBY,OAAQN,EAAUC,GAItB,QAASW,GAAejC,EAAMD,EAAWa,GACvC,GAAIM,UAAe/L,SAEf+M,EAAevB,EAAgBX,EAAMD,EAEzC,OAAImC,GAAarB,KAAO,GAEpBA,KAAMqB,EAAarB,KAAOqB,EAAanF,QAAUmF,EAAaR,OAC9DS,MAAOD,EAAarB,KACpBuB,UAAWF,EAAarB,KAAOqB,EAAaP,QAC5Cf,IAIJM,EAAgBa,EAAS/B,GACzB7K,EAAS+L,EAAcnB,IAEnB5K,EAAS,GAAgB,OAAXA,KAChBA,EAAS6K,EAAKqC,MAAMtC,IAAc,GAIpC5K,EAASmN,WAAWnN,IAAW,GAG7B0L,KAAM1L,EAAS+M,EAAanF,QAAUmF,EAAaR,OACnDS,MAAOhN,EACPiN,UAAWjN,EAAS+M,EAAanF,QAAUmF,EAAaR,OAASQ,EAAaP,QAC9Ef,IAhKJ,GAAIoB,UAAaO,SAAKR,SAAUvB,QAoKhC,OAlKA+B,GAAMzP,QAAQO,QAAQxB,UAAU0Q,IAEhClP,EAAQxB,UAAU0Q,IAAM,SAAUtR,EAAMgE,GACtC,GAAI6K,GAAOlM,KACPoM,EAAOF,EAAK,EAChB,IAAOE,GAA0B,IAAlBA,EAAKwC,UAAoC,IAAlBxC,EAAKwC,UAAmBxC,EAAKqC,MACjE,MAAOE,GAAI1R,KAAKiP,EAAM7O,EAAMgE,IAKhCuL,EAAW,SAACtO,GAAD,MAASA,IAAOA,EAAIuO,UAAYvO,EAAIuQ,UAAYvQ,EAAIwQ,OAASxQ,EAAIyQ,aA+BxEzP,OAAO0P,kBACTb,EAAW,SAAC/B,GAAD,MAAU9M,QAAO0P,iBAAiB5C,EAAM,OACnDgC,EAAc,SAAChC,EAAM/K,GAAP,MAAiBqN,YAAWrN,MAE1C8M,EAAW,SAAC/B,GAAD,MAAUA,GAAK6C,cAC1Bb,EAAc,SAAChC,EAAM/K,GACnB,GAAIkL,UAAMhL,SAAQ2N,SAAIC,SAAQV,SAC1BW,EAAY,sCAAsCC,MAGtD,OAFgB,IAAIC,QAAO,KAAOF,EAAY,kBAAmB,KAElDG,KAAKlO,IAKpBoN,EAAQrC,EAAKqC,MACblC,EAAOkC,EAAMlC,KACb2C,EAAK9C,EAAKoD,aACVL,EAASD,GAAMA,EAAG3C,KACd2C,IACFA,EAAG3C,KAAOkC,EAAMlC,MAGlBkC,EAAMlC,KAAOlL,EACbE,EAASkN,EAAMgB,UACfhB,EAAMlC,KAAOA,EACT4C,IACFD,EAAG3C,KAAO4C,GAEL5N,GAlBEmN,WAAWrN,KA6GjBnC,QAAQiB,SACbuP,OADqB,SACdC,GACL,GAAIvP,GAAUgM,EAAMrP,EAAG6S,EAAGC,EAAQC,EAAK5D,CAKvC,IAJAA,EAAOlM,KACPoM,EAAOF,EAAK,GACZ2D,EAAS3D,EAAK2D,SACdzP,EAAWyP,EAAOE,WACd3P,EAAS,KAAOgM,EAClB,MAAOyD,GAAO3H,QAAQyH,EAEtB,KAAK5S,EAAI6S,EAAI,EAAGE,EAAM1P,EAASsC,OAAS,EAAG,GAAKoN,EAAMF,GAAKE,EAAMF,GAAKE,EAAK/S,EAAI,GAAK+S,IAAQF,IAAMA,EAChG,GAAIxP,EAASrD,KAAOqP,EAElB,WADAlN,SAAQO,QAAQW,EAASrD,EAAI,IAAIiT,MAAML,EAI3C,MAAM,IAAI7G,OAAM,yBAA2BsD,EAAK6D,YAGpD/L,OAnBqB,SAmBb7C,GACN,GAAI6K,EAEJ,OADAA,GAAOlM,SACc,KAAVqB,GACLU,OAAOC,UAAUX,KACnBA,GAAgB,MAEXsN,EAAI1R,KAAKiP,EAAM,SAAU7K,IAEzBgN,EAAerO,KAAK,GAAI,SAAU,SAG7CkQ,YA/BqB,SA+BTC,GACV,MAAO9B,GAAerO,KAAK,GAAI,SAAUmQ,EAAS,YAAc,UAElEC,WAlCqB,SAkCVD,GACT,MAAO9B,GAAerO,KAAK,GAAI,QAASmQ,EAAS,YAAc,UAMjEE,OAzCqB,SAyCdhP,GACL,GAAIiP,UAASC,SACTrE,EAAOlM,KACPwQ,GACFlE,IAAK,EACLC,KAAM,GAEJH,EAAOF,EAAK,GACZuE,EAAMrE,GAAQA,EAAKsE,aAEvB,IAAI9M,UAAUlB,OAAQ,CACpB,OAAcsC,KAAV3D,EACF,MAAO6K,EAGT,MAAM,IAAIpD,OAAM,2CAGlB,GAAK2H,EAcL,MAVAH,GAAUG,EAAI3D,gBAIoB,MAA9BV,EAAKuE,wBACPH,EAAMpE,EAAKuE,yBAGbJ,EAAME,EAAIG,aAAeH,EAAII,cAG3BvE,IAAKkE,EAAIlE,KAAOiE,EAAIO,aAAeR,EAAQ/H,YAAc+H,EAAQS,WAAa,GAC9ExE,KAAMiE,EAAIjE,MAAQgE,EAAIS,aAAeV,EAAQW,aAAeX,EAAQY,YAAc,KAGtF3I,UA9EqB,SA8EXlH,GACR,MAAO4K,GAASjM,KAAM,MAAOqB,IAE/B4P,WAjFqB,SAiFV5P,GACT,MAAO4K,GAASjM,KAAM,OAAQqB,KAE/B,SAACA,EAAOyK,GACT,IAAKrM,EAAQxB,UAAU6N,GACrB,MAAOrM,GAAQxB,UAAU6N,GAAOzK,QHmoB/BhC,IAGTxC,GAAQ0B,QGn4Bac,GHu4Bf,SAAUvC,EAAQD,EAASH,GAEjC,YASA,SAAS4N,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCANhHjN,OAAOC,eAAeZ,EAAS,cAC7BwE,OAAO,GAGT,IAAIoK,GAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAI7O,GAAI,EAAGA,EAAI6O,EAAMlJ,OAAQ3F,IAAK,CAAE,GAAIuF,GAAasJ,EAAM7O,EAAIuF,GAAW3E,WAAa2E,EAAW3E,aAAc,EAAO2E,EAAW5E,cAAe,EAAU,SAAW4E,KAAYA,EAAWuJ,UAAW,GAAMrO,OAAOC,eAAekO,EAAQrJ,EAAWwJ,IAAKxJ,IAAiB,MAAO,UAAUkI,EAAauB,EAAYC,GAAiJ,MAA9HD,IAAYL,EAAiBlB,EAAYvM,UAAW8N,GAAiBC,GAAaN,EAAiBlB,EAAawB,GAAqBxB,MIz5B3gB2G,EJ+5BC,WI34BpB,QAAAA,GAAY1Q,EAAWI,GAAIyJ,EAAAtK,KAAAmR,GACzBnR,KAAKoR,SAAY3Q,EAAU4Q,KAAO5Q,EAAU4Q,IAAI,YAAe5Q,EAAU7C,IAAI,YAAc,KAC3FoC,KAAKsR,4BAAwD,IAA1BpS,QAAQqS,QAAQC,OAAetS,QAAQqS,QAAQE,MAAQ,EAC1FzR,KAAKa,GAAKA,EJu+BZ,MA9FA4K,GAAa0F,EAAiB,OAC5BrF,IAAK,cACLzK,MAAO,WI/5BP,GAEMqQ,GAAQ7E,SAAS8E,YAAY,GAC/BnI,QACJ,KACEA,EAAQkI,EAAME,SAASlP,OACvB,MAAO4I,GACP9B,EAAQ,EAEP,cAAgBkI,GACjBA,EAAMG,WAAWC,oCAA8BtI,GAEzC,WAAakI,IACnBA,EAAMK,QAbS,qBACH,gBAYmBvI,OJ46BnCiC,EAAa0F,IACXrF,IAAK,cACLzK,MAAO,SIp6BG4C,GACVA,EAAQxE,QAAQuS,SA7BG,wBJo8BnBlG,IAAK,cACLzK,MAAO,SIr6BG4C,GACVA,EAAQxE,QAAQwS,YAjCG,wBJy8BnBnG,IAAK,gBACLzK,MAAO,SIt6BK6Q,EAAYC,GAExB,MADAA,GAAgBnC,MAAMkC,SJ06BtBpG,IAAK,gBACLzK,MAAO,SIv6BK4C,GAGZ,MAFAA,GAAQxE,QAAQmK,SAChB3F,EAAQnE,MAAM6J,iBJ26BdmC,IAAK,wBACLzK,MAAO,SIx6Ba6Q,EAAYC,GAChC,IAAKnS,KAAKoR,SACR,MAAOpR,MAAK0E,cAAcwN,EAAYC,EAGxC,IAAInS,KAAKsR,4BAA6B,CACpC,GAAMc,GAAWpS,KAAKa,GAAGwR,OAIzB,OAFArS,MAAKoR,SAASkB,MAAMJ,EAAY,KAAMC,EAAiB,iBAAMC,GAASG,aAE9DH,EAASI,SAInB,OAAQxS,KAAKoR,SAASkB,MAAMJ,EAAY,KAAMC,OJ66B9CrG,IAAK,wBACLzK,MAAO,SI36Ba4C,GACpB,IAAKjE,KAAKoR,SACR,MAAOpR,MAAKyS,cAAcxO,EAG5B,IAAIjE,KAAKsR,4BAA6B,CACpC,GAAMc,GAAWpS,KAAKa,GAAGwR,OAMzB,OALArS,MAAKoR,SAASsB,MAAMzO,EAAQxE,QAAS,WAEnC,MADAwE,GAAQnE,MAAM6J,WACPyI,EAASG,aAGVH,EAASI,SAGnB,OAASxS,KAAKoR,SAASsB,MAAMzO,EAAQxE,SAAUiH,KAAK,iBAAMzC,GAAQnE,MAAM6J,kBJi7BnEwH,IAGTtU,GAAQ0B,QIjgCa4S,GJqgCf,SAAUrU,EAAQD,EAASH,GAEjC,YKzgCe,SAASiW,GAAa/N,EAAiB+C,EAAY9D,GAChE,GAAMlB,GAASnF,OAAOoV,OAAOrH,MAAMtN,UAuJnC,OArJAT,QAAOqV,OAAOlQ,GACZmQ,KAAMnL,EAEN7D,MAHoB,SAGdD,GACJlB,EAAOiH,OAAO,EAAGjH,EAAOD,QACxBC,EAAOiF,KAAM,EACbjF,EAAOqF,KAAM,EACbrF,EAAOwD,MAAQtC,EACflB,EAAO4G,KAAO1F,EACdlB,EAAOoQ,SAAWlP,EAClBlB,EAAOqQ,SAAWnP,EAClBlB,EAAOsQ,aAAe,KACtBtQ,EAAOuQ,aAAe,MAGxBpL,OAfoB,SAebqL,GACLA,EAAMhT,QAAQ,SAACkE,KACX1B,EAAO4G,KACT5G,EAAOyQ,OAAO,SAAU/O,KAE1B1B,EAAOqQ,SAAWrQ,EAAOiF,IAAMjF,EAAO4G,KAAO,EAAIN,KAAKC,IAAIvG,EAAO4G,KAAO,EAAG5G,EAAOqQ,WAGpF9K,QAvBoB,SAuBZiL,GACNA,EAAME,UAAUlT,QAAQ,SAACkE,KACrB1B,EAAOwD,MACTxD,EAAOyQ,OAAO,UAAW/O,KAE3B1B,EAAOoQ,SAAWpQ,EAAOqF,IAAMrF,EAAOoQ,SAAWpQ,EAAOwD,MAAQ8C,KAAKqK,IAAI3Q,EAAOwD,MAAOxD,EAAOoQ,WAShGK,OArCoB,SAqCbG,EAAWlP,EAAMmP,GACtB,GAAMvP,IACJI,KAAMA,EAGR,IAAIkP,EAAY,GAAM,EACpBtP,EAAQ4B,GAAK,SACblD,EAAO8Q,OAAOF,EAAW,EAAGtP,GACzBuP,EACD7Q,EAAOwD,QAGPxD,EAAO4G,WAIT,QADAtF,EAAQ4B,GAAK0N,EACLA,GACN,IAAK,SACH5Q,EAAOR,KAAK8B,EACZ,MACF,KAAK,UACHtB,EAAOmD,QAAQ7B,KAOvB2F,OAjEoB,SAiEb8J,EAAMC,GACX,GAAI5R,OAAOC,UAAU0R,GAAO,CAE1B,IAAK,GAAI3W,GAAI2W,EAAM3W,EAAI4W,EAAM5W,IAC3B6H,EAAgB6N,cAAc9P,EAAO5F,GAEvC,OAAO4F,GAAO8Q,OAAOC,EAAMC,EAAOD,GAqBpC,MAlBA/Q,GAAO8Q,OAAO9Q,EAAOiR,QAAQF,GAAO,GACpB,UAAbA,EAAKG,KAAmBlR,EAAOwD,QAAUnG,KAAK8T,iBAC/C9T,KAAK+T,oBAGL/T,KAAKgU,oBAES,UAAbN,EAAKG,IACNlR,EAAOwD,QAGPxD,EAAO4G,OAEL5G,EAAOD,SACTC,EAAOwD,MAAQ,EACfxD,EAAO4G,KAAO,GAGT3E,EAAgBqP,sBAAsBP,IAG/CK,kBA/FoB,WAgGlB,GAA2B,OAAxBpR,EAAOsQ,aAAuB,CAC/B,GAAGtQ,EAAOoQ,SAAWpQ,EAAOsQ,aAE1B,WADAtQ,GAAOsQ,cAGNtQ,GAAOoQ,WAAapQ,EAAOsQ,cAC5BtQ,EAAOsQ,eAGXtQ,EAAOoQ,YAGTiB,kBA5GoB,WA6GS,OAAxBrR,EAAOuQ,cAAyBvQ,EAAOqQ,UAAYrQ,EAAOuQ,cAC3DvQ,EAAOuQ,eAETvQ,EAAOqQ,YAGTc,eAnHoB,WAoHlB,MAA2B,QAAxBnR,EAAOsQ,aACDhK,KAAKqK,IAAI3Q,EAAOsQ,aAActQ,EAAOoQ,UAEvCpQ,EAAOoQ,UAGhBmB,eA1HoB,WA2HlB,MAA2B,QAAxBvR,EAAOuQ,aACDjK,KAAKC,IAAIvG,EAAOuQ,aAAcvQ,EAAOqQ,UAEvCrQ,EAAOqQ,UAGhBnM,gBAjIoB,SAiIJsN,GACd,IAAKA,EAASzR,OACZ,MAAO,EAET,IAAI4J,GAAMvK,OAAOqS,UACbC,EAAStS,OAAOuS,iBAQpB,OAPAH,GAAShU,QAAQ,SAAC8D,GACZA,EAAQxE,QAAQ,GAAG0E,eAErBmI,EAAMrD,KAAKqK,IAAIhH,EAAKrI,EAAQxE,QAAQ4Q,SAAS/D,KAC7C+H,EAASpL,KAAKC,IAAImL,EAAQpQ,EAAQxE,QAAQ4Q,SAAS/D,IAAMrI,EAAQxE,QAAQyQ,aAAY,OAGlFjH,KAAKC,IAAI,EAAGmL,EAAS/H,MAKhC3J,EAAOmB,MAAMD,GAENlB,ELo3BTnF,OAAOC,eAAeZ,EAAS,cAC7BwE,OAAO,IAETxE,EAAQ0B,QK/gCgBoU,GLqqClB,SAAU7V,EAAQD,EAASH,GAEjC,YMrqCe,SAAS6X,GAAS3P,EAAiBjC,EAAQlD,EAASuJ,EAAoBtI,EAAYyI,GAajG,QAASqL,KACP,MAAOtU,GAASgQ,cAAgB/G,EAblC,GAAIsL,GAAa,KACbC,EAAgB,KACdxU,EAAW8I,GAAsBA,EAAmB9I,SAAW8I,EAAmB9I,SAAWhB,QAAQO,QAAQH,QAC7GW,EAAY+I,GAAsBA,EAAmB/I,UAAY+I,EAAmB/I,cAAY+E,GAChGlF,EAAQkJ,GAAsBA,EAAmBlJ,MAAQkJ,EAAmBlJ,MAAQY,CA+M1F,OA7MAR,GAASyO,KACPgG,kBAAmB,OACnBC,aAAc,OACdC,QAAW,UAObrX,OAAOqV,OAAO3S,GACZ4U,SADsB,WAEpB,MAAOhV,IAGT4J,sBALsB,SAKAqL,GACpBN,EAAa,GAAAO,GAAAzW,QAAYwW,GACzBL,EAAgB,GAAAM,GAAAzW,QAAYwW,GAC5BtV,EAAQiQ,OAAO+E,EAAWhV,SAC1BA,EAAQuQ,MAAM0E,EAAcjV,SAC5BgV,EAAWvQ,OAAO,GAClBwQ,EAAcxQ,OAAO,IAGvB6F,oBAdsB,WAepB,OAAK9J,IAGFA,IAAcC,GACfA,EAASyO,IAAI,SAAUrP,OAAO0P,iBAAiB/O,EAAU,IAAIiE,QAExDhE,EAASgE,SAAW,IAG7B+Q,cAxBsB,WAyBpB,GAAIxM,GAAevI,EAAS,GAAGuI,YAE/B,QADAA,EAA+B,MAAhBA,EAAuBA,EAAevI,EAAS,GAAG2M,SAASC,gBAAgBrE,cACpEiM,EAAcxQ,UAGtCrB,WA9BsB,WA+BpB,MAAO4R,GAAWvQ,UAGpBgR,iBAlCsB,WAmCpB,MAAOhV,GAASqI,YAAcrI,EAASgQ,eAGzCiF,cAtCsB,WAuCpB,MAAOjV,GAASqI,aAGlB7D,cA1CsB,SA0CR0Q,EAAGrQ,GACf,MAAOH,GAAgBF,cAAc0Q,EAAGrQ,GAAW0P,EAAWhV,UAGhEuG,sBA9CsB,SA8CAoP,EAAGrQ,GACvB,MAAOH,GAAgBoB,sBAAsBoP,EAAGrQ,GAAW0P,EAAWhV,UAGxEmH,iBAlDsB,WAmDpB,OAAQjE,EAAOiF,KAAO1H,EAAS+U,gBAAkB/U,EAASgV,mBAAqBV,KAGjFvM,WAtDsB,WA6DpB,IAAK,GALDoN,GAAU,EACVC,EAAgB,EAChBC,EAAa,EACbC,EAAmBtV,EAAS+U,gBAAkB/U,EAASgV,mBAAqBV,IAEvEzX,EAAI4F,EAAOD,OAAS,EAAG3F,GAAK,IACnCwY,EAAa5S,EAAO5F,GAAG0C,QAAQyQ,aAAY,KACvCoF,EAAgBC,EAAaC,IAFKzY,IAKtC2X,EAAce,MAAMC,IAAI/S,EAAO5F,IAC/BuY,GAAiBC,EACjBF,GAGEA,GAAU,IACZ1S,EAAOiF,KAAM,EACbjF,EAAOiH,OAAOjH,EAAOD,OAAS2S,EAAS1S,EAAOD,QAC9CC,EAAO4G,MAAQ8L,EACfnV,EAAS4C,mBAIbkE,cA/EsB,WAgFpB,OAAQrE,EAAOqF,KAAQ9H,EAAS2C,aAAe3C,EAASiV,gBAAkBX,KAG5E3M,QAnFsB,WA0FpB,IAAK,GALDwN,GAAU,EACVC,EAAgB,EAChBC,EAAa,EACbC,EAAmBtV,EAASiV,gBAAkBjV,EAAS2C,aAAe2R,IAEjEzX,EAAI,EAAGA,EAAI4F,EAAOD,SACzB6S,EAAa5S,EAAO5F,GAAG0C,QAAQyQ,aAAY,KACvCoF,EAAgBC,EAAaC,IAFAzY,IAKjC0X,EAAWgB,MAAMC,IAAI/S,EAAO5F,IAC5BuY,GAAiBC,EACjBF,GAGEA,GAAU,IAGZZ,EAAWvQ,OAAOuQ,EAAWvQ,SAAWoR,GACxC3S,EAAOqF,KAAM,EACbrF,EAAOiH,OAAO,EAAGyL,GACjB1S,EAAOwD,OAASkP,IAIpBvS,eA9GsB,WA+GpB,GAAKH,EAAOD,OAAZ,CAKA,GAAMiT,GAAqBhT,EAAOiT,OAAO,SAACC,EAAMxR,GAAP,MAAgBwR,GAAOxR,EAAK5E,QAAQyQ,aAAY,IAAO,GAE5F4F,EAAmB,EAAGC,EAAW,CACrCtB,GAAWgB,MAAMtV,QAAQ,SAAAkE,GACpBA,EAAKmF,MAAQ7G,EAAOwD,QACrB2P,GAAoBzR,EAAKH,OACzB6R,MAIJ,IAAIC,GAAsB,EAAGC,EAAc,CAC3CvB,GAAce,MAAMtV,QAAQ,SAAAkE,GACvBA,EAAKmF,OAAS7G,EAAO4G,OACtByM,GAAuB3R,EAAKH,OAC5B+R,MAIJ,IAAMC,GAAcP,EAAqBG,EAAmBE,EACtDG,EAAoBD,GAAeH,EAAWE,EAActT,EAAOD,QAGrE0T,EAA2C,OAAxBzT,EAAOsQ,cAAyBtQ,EAAOoQ,SAAWpQ,EAAOsQ,aAC5EoD,EAA8C,OAAxB1T,EAAOuQ,cAAyBvQ,EAAOqQ,SAAWrQ,EAAOuQ,aAC/EoD,EAAsBF,GAAoBzT,EAAOoQ,SAAWpQ,EAAOsQ,cAAgBkD,EAAoB,EACvGI,EAAyBF,GAAuB1T,EAAOuQ,aAAevQ,EAAOqQ,UAAYmD,EAAoB,CAGjH1B,GAAWvQ,OAAO4R,EAAmBQ,GACrC5B,EAAcxQ,OAAO8R,EAAsBO,KAG7CxT,mBApJsB,SAoJHH,GAEjB,GAA4B,OAAxBD,EAAOsQ,cAAyBtQ,EAAOoQ,SAAWpQ,EAAOsQ,aAAc,CACzE,GAAIuD,GAAO/B,EAAWvQ,SAAWtB,CAEjC,KADA1C,EAASqI,UAAUrI,EAASqI,YAAciO,IACnCA,GAAQtW,EAASqI,aAAe,GACrCmM,EAAcxQ,OAAOwQ,EAAcxQ,SAAWsS,GAC9CtW,EAASqI,UAAUrI,EAASqI,YAAciO,KAKhDhP,eAhKsB,SAgKPhB,GACb,GAAKA,EAAQJ,UAAU1D,OAAvB,CAEA,GAAMwB,GAASvB,EAAOkE,gBAAgBL,EAAQJ,WACxCqQ,EAAgBhC,EAAWvQ,SAAWA,CACxCuS,IAAiB,EACnBhC,EAAWvQ,OAAOuS,IAGlBhC,EAAWvQ,OAAO,GAClBhE,EAASqI,UAAUrI,EAASqI,YAAckO,MAI9C/S,gBA9KsB,WA+KpB+Q,EAAWvQ,OAAO,GAClBuQ,EAAWgB,MAAMiB,SAGnB/S,mBAnLsB,WAoLpB+Q,EAAcxQ,OAAO,GACrBwQ,EAAce,MAAMiB,SAGtBC,gBAxLsB,SAwLNtS,EAAMmP,GACpBiB,EAAWgB,MAAM7L,OAAOvF,EAAMmP,GAC9BkB,EAAce,MAAM7L,OAAOvF,EAAMmP,IAGnCvN,WA7LsB,SA6LX5B,GAET,MADArE,MAAK2W,gBAAgBtS,GACd1B,EAAOiH,OAAOvF,MAIlBnE,ENo9BT1C,OAAOC,eAAeZ,EAAS,cAC7BwE,OAAO,IAETxE,EAAQ0B,QM3qCgBgW,CAFxB,IAAAqC,GAAAla,EAAA,GNirCIsY,EAEJ,SAAgC1W,GAAO,MAAOA,IAAOA,EAAIR,WAAaQ,GAAQC,QAASD,IAFhDsY,IA4MjC,SAAU9Z,EAAQD,EAASH,GAEjC,YASA,SAAS4N,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCOh2ChH,QAASoM,KACP,GAAMtM,KAGN,OAFAA,GAASpI,KAAK2U,MAAMvM,EAAU3G,WAC9BpG,OAAOuZ,eAAexM,EAAUsM,EAAM5Y,WAC/BsM,EAOT,QAASyM,GAAgBjC,GACvB,GAAGA,EAASnG,WAAaqI,KAAKC,aAC5B,KAAM,IAAIpO,OAAM,uEAElB,IAAIrJ,SACJ,QAAQsV,EAASzU,QAAQC,eACvB,IAAK,KACH,KAAM,IAAIuI,OAAJ,yCAAmDiM,EAASzU,QAA5D,yBAA4FyU,EAAS9E,UAC7G,KAAK,KAEHxQ,EADYP,QAAQO,QAAQ,gDACZ0X,KAAK,KACrB,MACF,KAAK,KACH1X,EAAUP,QAAQO,QAAQ,YAC1B,MACF,SACEA,EAAUP,QAAQO,QAAQ,eAE9B,MAAOA,GP6zCTjC,OAAOC,eAAeZ,EAAS,cAC7BwE,OAAO,GAGT,IAAIoK,GAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAI7O,GAAI,EAAGA,EAAI6O,EAAMlJ,OAAQ3F,IAAK,CAAE,GAAIuF,GAAasJ,EAAM7O,EAAIuF,GAAW3E,WAAa2E,EAAW3E,aAAc,EAAO2E,EAAW5E,cAAe,EAAU,SAAW4E,KAAYA,EAAWuJ,UAAW,GAAMrO,OAAOC,eAAekO,EAAQrJ,EAAWwJ,IAAKxJ,IAAiB,MAAO,UAAUkI,EAAauB,EAAYC,GAAiJ,MAA9HD,IAAYL,EAAiBlB,EAAYvM,UAAW8N,GAAiBC,GAAaN,EAAiBlB,EAAawB,GAAqBxB,MOp4C1hB4M,EP04CW,WACf,QAASA,KACP9M,EAAgBtK,KAAMoX,GA8CxB,MA3CA3L,GAAa2L,IACXtL,IAAK,MACLzK,MAAO,SOh5CLgD,GACF,IAAK,GAAItH,GAAIiD,KAAK0C,OAAS,EAAG3F,GAAK,EAAGA,IACpC,GAAIiD,KAAKjD,GAAGyM,QAAUnF,EAAKvE,MAAMoG,OAE/B,YADAlG,KAAKjD,GAAGmH,OAASG,EAAK5E,QAAQyQ,cAIlClQ,MAAKmC,MACHqH,MAAOnF,EAAKvE,MAAMoG,OAClBhC,OAAQG,EAAK5E,QAAQyQ,gBAEvBlQ,KAAKqX,KAAK,SAACC,EAAGC,GAAJ,MAAYD,GAAE9N,MAAQ+N,EAAE/N,OAAU,EAAM8N,EAAE9N,MAAQ+N,EAAE/N,MAAS,EAAI,OPq5C3EsC,IAAK,SACLzK,MAAO,SOn5CFmW,EAAUC,GAGf,IAAK,GAFCjO,GAAQgO,EAAW,GAAM,EAAIA,EAAWA,EAAS1X,MAAMoG,OACvDsN,EAAQgE,EAAW,GAAM,EAAIC,EAA0B,UAAjBD,EAAS3D,IAC5C9W,EAAIiD,KAAK0C,OAAS,EAAG3F,GAAK,EAAGA,IACpC,GAAIiD,KAAKjD,GAAGyM,QAAUA,EAAO,CAC3BxJ,KAAKyT,OAAO1W,EAAG,EACf,OAGJ,IAAIyW,EACF,IAAK,GAAIzW,GAAIiD,KAAK0C,OAAS,EAAG3F,GAAK,EAAGA,IAChCiD,KAAKjD,GAAGyM,MAAQA,GAClBxJ,KAAKjD,GAAGyM,WPy5CdsC,IAAK,QACLzK,MAAO,WOn5CPrB,KAAK0C,OAAS,MPw5CT0U,IO94CTP,GAAM5Y,UAAYT,OAAOoV,OAAOrH,MAAMtN,WACtCT,OAAOka,oBAAoBN,EAAWnZ,WAAWkC,QAAQ,SAAAwX,GAAA,MACvDd,GAAM5Y,UAAU0Z,GAAcP,EAAWnZ,UAAU0Z,IP+6CrD,IOv5CMC,GPu5CQ,WOt5CZ,QAAAA,GAAY7C,GAAUzK,EAAAtK,KAAA4X,GACpB5X,KAAKP,QAAUuX,EAAgBjC,GAC/B/U,KAAKyV,MAAQ,GAAIoB,GPm6CnB,MAPApL,GAAamM,IACX9L,IAAK,SACLzK,MAAO,WO15CP,MAAOrB,MAAKP,QAAQyE,OAAO4S,MAAM9W,KAAKP,QAASmE,eP+5C1CgU,IAGT/a,GAAQ0B,QO95COqZ,GPk6CT,SAAU9a,EAAQD,EAASH,GAEjC,YASA,SAAS4N,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCANhHjN,OAAOC,eAAeZ,EAAS,cAC7BwE,OAAO,GAGT,IAAIoK,GAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAI7O,GAAI,EAAGA,EAAI6O,EAAMlJ,OAAQ3F,IAAK,CAAE,GAAIuF,GAAasJ,EAAM7O,EAAIuF,GAAW3E,WAAa2E,EAAW3E,aAAc,EAAO2E,EAAW5E,cAAe,EAAU,SAAW4E,KAAYA,EAAWuJ,UAAW,GAAMrO,OAAOC,eAAekO,EAAQrJ,EAAWwJ,IAAKxJ,IAAiB,MAAO,UAAUkI,EAAauB,EAAYC,GAAiJ,MAA9HD,IAAYL,EAAiBlB,EAAYvM,UAAW8N,GAAiBC,GAAaN,EAAiBlB,EAAawB,GAAqBxB,MQ9/C1hBqN,ERkgDQ,WQhgDZ,QAAAA,GAAY7W,EAAQF,EAAQG,EAAOf,EAAUyC,EAAQoB,EAAUN,GAAQ6G,EAAAtK,KAAA6X,GACrE7X,KAAKc,OAASA,EACdd,KAAKiB,MAAQA,EACbjB,KAAKE,SAAWA,EAChBF,KAAK2C,OAASA,EAEd3C,KAAK+D,SAAWA,EAChB/D,KAAKyD,OAASA,EAEdzD,KAAKmI,WAAY,EACjBnI,KAAKoI,UAAW,CAEhB,IAAM0P,GAAgB5X,EAAS4U,UAC/B9U,MAAK+X,WAAaD,EAAcE,QAAUF,EAAgB9W,EAE1DhB,KAAKiY,iBACLjY,KAAKkY,cAAcjX,EAAMkE,SACzBnF,KAAKmY,wBR0tDP,MApNA1M,GAAaoM,IACX/L,IAAK,gBACLzK,MAAO,SQrgDK+W,GACZ,GAAKA,IAAiBA,EAAcA,EAAYC,QAAQ,cAAe,KAAvE,CAGA,GAAIC,SAEJ,KACEtY,KAAKc,OAAOsX,GAAavF,OAAO7S,KAAK+X,eACrCO,EAAiBtY,KAAKc,OAAOsX,GAAapY,KAAK+X,YAEjD,MAAOQ,GAIL,KAHAA,GAAMC,QAAU,kEACEJ,EADF,kBAEdG,EAAMC,QACFD,EAGR/a,OAAOqV,OAAOyF,EAAgBtY,KAAKiY,eACnCjY,KAAKiY,cAAgBK,MRqgDrBxM,IAAK,wBACLzK,MAAO,WQhgDP,IAAK,GAHiBtB,GAAAC,KAEhByY,GAAiB,SAAU,eAAgB,SAAU,UAAW,QAAS,QAAS,WAC/E1b,EAAI0b,EAAc/V,OAAS,EAAG3F,GAAK,EAAGA,IAC7CiD,KAAKiY,cAAcQ,EAAc1b,IAAMiD,KAAKyY,EAAc1b,IAAIsG,KAAKrD,KAKrE,KAAK,GADC0Y,IAAe,YAAa,aAAc,oBAAqB,kBAAmB,gBAAiB,uBAAwB,sBACxH3b,EAAI2b,EAAYhW,OAAS,EAAG3F,GAAK,EAAGA,KATvB,SASbA,GACP,GAAIiB,UAAU2a,EAAO5Y,EAAKkB,MAAMyX,EAAY3b,GAC5CS,QAAOC,eAAPsC,EAA4B2Y,EAAY3b,IACtCa,IAAK,iBAAMI,IACXwE,IAAK,SAACnB,GACJrD,EAAWqD,EACXtB,EAAKkY,cAAcS,EAAY3b,IAAMsE,EACjCsX,GACF5Y,EAAKe,OAAO6X,GAAM9F,OAAO9S,EAAKgY,WAAY1W,OARzCtE,EAeTS,QAAOC,eAAeuC,KAAKiY,cAAe,YACxCra,IAAK,iBAAMmC,GAAKqI,UAChB5F,IAAK,SAACnB,GAAD,OAActB,EAAKqI,SAAW/G,GAA4B,KAAlBtB,EAAKgE,iBRqhDpD+H,IAAK,UACLzK,MAAO,SQlhDDA,GACNrB,KAAKmI,UAAY9G,KRqhDjByK,IAAK,QACLzK,MAAO,WQlhDP,MAAOrB,MAAK2C,OAAOqF,ORshDnB8D,IAAK,QACLzK,MAAO,WQnhDP,MAAOrB,MAAK2C,OAAOiF,ORuhDnBkE,IAAK,UACLzK,MAAO,WQphDP,OAAQrB,KAAK2C,OAAOD,URwhDpBoJ,IAAK,SACLzK,MAAO,SQthDFuX,GACL5Y,KAAK2C,OAAOmF,OAAO8Q,GACnB5Y,KAAK+D,WACL/D,KAAKE,SAAS2H,UACd7H,KAAKE,SAAS+H,gBRyhDd6D,IAAK,UACLzK,MAAO,SQvhDDuX,GACN5Y,KAAK2C,OAAOuF,QAAQ0Q,GACpB5Y,KAAK+D,WACL/D,KAAKE,SAAS2H,UACd7H,KAAKE,SAAS+H,gBR0hDd6D,IAAK,eACLzK,MAAO,SQxhDIqS,EAAMC,GACG,kBAATD,GACT1T,KAAK6Y,iBAAiBnF,GAEtB1T,KAAK8Y,kBAAkBpF,EAAMC,GAE/B3T,KAAK+D,cR2hDL+H,IAAK,mBACLzK,MAAO,SQzhDQ0X,GAAI,GAAAC,GAAAhZ,IACnBA,MAAK2C,OAAOsW,MAAM,GAAG9Y,QAAQ,SAAC8D,GAG5B+U,EAAKE,YAAYjV,EAAS8U,EAAG9U,EAAQI,KAAMJ,EAAQnE,MAAOmE,EAAQxE,eR+hDpEqM,IAAK,oBACLzK,MAAO,SQ5hDSmI,EAAOoP,GACvB,GAAIpP,EAAQ,GAAM,EAChB,KAAM,IAAIV,OAAM,kBAAoBU,EAAQ,+CAE9C,IAAM2P,GAAS3P,EAAQxJ,KAAK2C,OAAOwD,KAG/BgT,IAAU,GAAKA,EAASnZ,KAAK2C,OAAOD,OACtC1C,KAAKkZ,YAAYlZ,KAAK2C,OAAOwW,GAASP,GAGhCpP,GAASxJ,KAAK2C,OAAOmR,kBAAoBtK,GAASxJ,KAAK2C,OAAOuR,kBACjE3I,MAAMC,QAAQoN,KAAcA,EAASlW,SACtC1C,KAAKE,SAASyW,gBAAgBnN,EAAOA,IAAUxJ,KAAK2C,OAAOoQ,UACxDvJ,IAAUxJ,KAAK2C,OAAOmR,iBACvB9T,KAAK2C,OAAOoR,oBAGZ/T,KAAK2C,OAAOqR,wBRiiDlBlI,IAAK,cACLzK,MAAO,SQ5hDG4C,EAAS2U,GAAU,GAAAQ,GAAApZ,IAC7B,IAAKuL,MAAMC,QAAQoN,GAAnB,CAGA,GAAIS,GAAWrZ,KAAK2C,OAAOiR,QAAQ3P,EAC9B2U,GAASvF,UAAUiG,KAAK,SAAAC,GAAA,MAAWA,KAAYtV,EAAQI,SAC1DJ,EAAQ4B,GAAK,SACG,IAAbwT,GAAmBT,EAASlW,SAC7BuB,EAAQ4P,IAAM,UAGlB+E,EAASzY,QAAQ,SAACoZ,GACZA,IAAYtV,EAAQI,KACtBgV,IAGAD,EAAKzW,OAAOyQ,OAAOiG,EAAW,EAAGE,GAAuB,IAAdF,SRqiD9CvN,IAAK,sBACLzK,MAAO,WQ5hDP,IAAK,GAJDmY,GAAS,KAAMC,EAAY,EAC3BC,GAAU,EAAOC,GAAa,EAC5BjX,EAAS1C,KAAK2C,OAAOD,OAElB3F,EAAI,EAAGA,EAAI2F,EAAQ3F,IAAK,CAC/B,GAAMsH,GAAOrE,KAAK2C,OAAO5F,GACnB6c,EAAUvV,EAAK5E,QAAQ4Q,SAAS/D,GAEtC,IAAIkN,IAAWI,EAAS,CACtB,GAAMrE,GAAalR,EAAK5E,QAAQyQ,aAAY,GACtC5D,EAAMtM,KAAKE,SAAS2C,aAAe4W,EAAYlE,GAEhDmE,GAAWpN,EAAMtM,KAAKE,SAASiV,kBAClCuE,GAAU,EACV1Z,KAAA,WAAqBqE,EAAKA,KAC1BrE,KAAA,kBAA4BqE,EAAK5E,QACjCO,KAAA,gBAA0BqE,EAAKvE,QAE5B6Z,IAAerN,GAAOtM,KAAKE,SAASgV,oBAAuBnY,IAAM2F,EAAS,GAAK1C,KAAK6Z,WACvFF,GAAa,EACb3Z,KAAA,cAAwBqE,EAAKA,KAC7BrE,KAAA,qBAA+BqE,EAAK5E,QACpCO,KAAA,mBAA6BqE,EAAKvE,OAEpC2Z,GAAalE,EAIf,GAFAiE,EAASI,EAELF,GAAWC,EACb,WR0iDC9B,IAGThb,GAAQ0B,QQtiDOsZ","file":"ui-scroll.min.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _jqLiteExtras = __webpack_require__(1);\n\nvar _jqLiteExtras2 = _interopRequireDefault(_jqLiteExtras);\n\nvar _elementRoutines = __webpack_require__(2);\n\nvar _elementRoutines2 = _interopRequireDefault(_elementRoutines);\n\nvar _buffer = __webpack_require__(3);\n\nvar _buffer2 = _interopRequireDefault(_buffer);\n\nvar _viewport = __webpack_require__(4);\n\nvar _viewport2 = _interopRequireDefault(_viewport);\n\nvar _adapter = __webpack_require__(6);\n\nvar _adapter2 = _interopRequireDefault(_adapter);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nangular.module('ui.scroll', []).constant('JQLiteExtras', _jqLiteExtras2.default).run(['JQLiteExtras', function (JQLiteExtras) {\n !window.jQuery ? new JQLiteExtras().registerFor(angular.element) : null;\n _elementRoutines2.default.addCSSRules();\n}]).directive('uiScrollViewport', function () {\n return {\n restrict: 'A',\n controller: ['$scope', '$element', function (scope, element) {\n var _this = this;\n\n this.container = element;\n this.viewport = element;\n this.scope = scope;\n\n angular.forEach(element.children(), function (child) {\n if (child.tagName.toLowerCase() === 'tbody') {\n _this.viewport = angular.element(child);\n }\n });\n\n return this;\n }]\n };\n}).directive('uiScroll', ['$log', '$injector', '$rootScope', '$timeout', '$interval', '$q', '$parse', function (console, $injector, $rootScope, $timeout, $interval, $q, $parse) {\n\n return {\n require: ['?^uiScrollViewport'],\n restrict: 'A',\n transclude: 'element',\n priority: 1000,\n terminal: true,\n link: link\n };\n\n function link($scope, element, $attr, controllers, linker) {\n var match = $attr.uiScroll.match(/^\\s*(\\w+)\\s+in\\s+([(\\w|\\$)\\.]+)\\s*$/);\n if (!match) {\n throw new Error('Expected uiScroll in form of \\'_item_ in _datasource_\\' but got \\'' + $attr.uiScroll + '\\'');\n }\n\n function parseNumericAttr(value, defaultValue) {\n var result = $parse(value)($scope);\n return isNaN(result) ? defaultValue : result;\n }\n\n var BUFFER_MIN = 3;\n var BUFFER_DEFAULT = 10;\n var PADDING_MIN = 0.3;\n var PADDING_DEFAULT = 0.5;\n var MAX_VIEWPORT_DELAY = 500;\n var VIEWPORT_POLLING_INTERVAL = 50;\n\n var datasource = null;\n var itemName = match[1];\n var datasourceName = match[2];\n var viewportController = controllers[0];\n var bufferSize = Math.max(BUFFER_MIN, parseNumericAttr($attr.bufferSize, BUFFER_DEFAULT));\n var padding = Math.max(PADDING_MIN, parseNumericAttr($attr.padding, PADDING_DEFAULT));\n var startIndex = parseNumericAttr($attr.startIndex, 1);\n var ridActual = 0; // current data revision id\n var pending = [];\n\n var elementRoutines = new _elementRoutines2.default($injector, $q);\n var buffer = new _buffer2.default(elementRoutines, bufferSize, startIndex);\n var viewport = new _viewport2.default(elementRoutines, buffer, element, viewportController, $rootScope, padding);\n var adapter = new _adapter2.default($scope, $parse, $attr, viewport, buffer, doAdjust, reload);\n\n if (viewportController) {\n viewportController.adapter = adapter;\n }\n\n var isDatasourceValid = function isDatasourceValid() {\n return Object.prototype.toString.call(datasource) === '[object Object]' && typeof datasource.get === 'function';\n };\n\n datasource = $parse(datasourceName)($scope); // try to get datasource on scope\n if (!isDatasourceValid()) {\n datasource = $injector.get(datasourceName); // try to inject datasource as service\n if (!isDatasourceValid()) {\n throw new Error(datasourceName + ' is not a valid datasource');\n }\n }\n\n var onRenderHandlers = [];\n function onRenderHandlersRunner() {\n onRenderHandlers.forEach(function (handler) {\n return handler.run();\n });\n onRenderHandlers = [];\n }\n function persistDatasourceIndex(datasource, propName) {\n var getter = void 0;\n // need to postpone min/maxIndexUser processing if the view is empty\n if (Number.isInteger(datasource[propName])) {\n getter = datasource[propName];\n if (Number.isInteger(getter)) {\n onRenderHandlers = onRenderHandlers.filter(function (handler) {\n return handler.id !== propName;\n });\n onRenderHandlers.push({\n id: propName,\n run: function run() {\n return datasource[propName] = getter;\n }\n });\n }\n }\n }\n\n function defineDatasourceIndex(datasource, propName, propUserName) {\n var descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n if (descriptor && (descriptor.set || descriptor.get)) {\n return;\n }\n var getter = void 0;\n persistDatasourceIndex(datasource, propName);\n Object.defineProperty(datasource, propName, {\n set: function set(value) {\n getter = value;\n if (pending.length && !buffer.length) {\n persistDatasourceIndex(datasource, propName);\n return;\n }\n buffer[propUserName] = value;\n var topPaddingHeightOld = viewport.topDataPos();\n viewport.adjustPaddings();\n if (propName === 'minIndex') {\n viewport.onAfterMinIndexSet(topPaddingHeightOld);\n }\n },\n get: function get() {\n return getter;\n }\n });\n }\n\n defineDatasourceIndex(datasource, 'minIndex', 'minIndexUser');\n defineDatasourceIndex(datasource, 'maxIndex', 'maxIndexUser');\n\n var fetchNext = datasource.get.length !== 2 ? function (success) {\n return datasource.get(buffer.next, bufferSize, success);\n } : function (success) {\n datasource.get({\n index: buffer.next,\n append: buffer.length ? buffer[buffer.length - 1].item : void 0,\n count: bufferSize\n }, success);\n };\n\n var fetchPrevious = datasource.get.length !== 2 ? function (success) {\n return datasource.get(buffer.first - bufferSize, bufferSize, success);\n } : function (success) {\n datasource.get({\n index: buffer.first - bufferSize,\n prepend: buffer.length ? buffer[0].item : void 0,\n count: bufferSize\n }, success);\n };\n\n var initialize = function initialize() {\n var tryCount = 0;\n if (!viewport.applyContainerStyle()) {\n var timer = $interval(function () {\n tryCount++;\n if (viewport.applyContainerStyle()) {\n $interval.cancel(timer);\n doAdjust();\n }\n if (tryCount * VIEWPORT_POLLING_INTERVAL >= MAX_VIEWPORT_DELAY) {\n $interval.cancel(timer);\n throw Error('ui-scroll directive requires a viewport with non-zero height in ' + MAX_VIEWPORT_DELAY + 'ms');\n }\n }, VIEWPORT_POLLING_INTERVAL);\n } else {\n doAdjust();\n }\n };\n\n /**\n * Build padding elements\n *\n * Calling linker is the only way I found to get access to the tag name of the template\n * to prevent the directive scope from pollution a new scope is created and destroyed\n * right after the builder creation is completed\n */\n linker(function (clone, scope) {\n viewport.createPaddingElements(clone[0]);\n // we do not include the clone in the DOM. It means that the nested directives will not\n // be able to reach the parent directives, but in this case it is intentional because we\n // created the clone to access the template tag name\n scope.$destroy();\n clone.remove();\n });\n\n $scope.$on('$destroy', function () {\n unbindEvents();\n viewport.unbind('mousewheel', wheelHandler);\n });\n\n viewport.bind('mousewheel', wheelHandler);\n\n initialize();\n\n /* Private function definitions */\n\n function isInvalid(rid) {\n return rid && rid !== ridActual || $scope.$$destroyed;\n }\n\n function bindEvents() {\n viewport.bind('resize', resizeAndScrollHandler);\n viewport.bind('scroll', resizeAndScrollHandler);\n }\n\n function unbindEvents() {\n viewport.unbind('resize', resizeAndScrollHandler);\n viewport.unbind('scroll', resizeAndScrollHandler);\n }\n\n function reload() {\n viewport.resetTopPadding();\n viewport.resetBottomPadding();\n if (arguments.length) {\n startIndex = arguments[0];\n }\n buffer.reset(startIndex);\n persistDatasourceIndex(datasource, 'minIndex');\n persistDatasourceIndex(datasource, 'maxIndex');\n doAdjust();\n }\n\n function isElementVisible(wrapper) {\n return wrapper.element.height() && wrapper.element[0].offsetParent;\n }\n\n function visibilityWatcher(wrapper) {\n if (isElementVisible(wrapper)) {\n buffer.forEach(function (item) {\n if (typeof item.unregisterVisibilityWatcher === 'function') {\n item.unregisterVisibilityWatcher();\n delete item.unregisterVisibilityWatcher;\n }\n });\n if (!pending.length) {\n $timeout(function () {\n return doAdjust();\n });\n }\n }\n }\n\n function insertWrapperContent(wrapper, insertAfter) {\n createElement(wrapper, insertAfter, viewport.insertElement);\n if (!isElementVisible(wrapper)) {\n wrapper.unregisterVisibilityWatcher = wrapper.scope.$watch(function () {\n return visibilityWatcher(wrapper);\n });\n }\n elementRoutines.hideElement(wrapper); // hide inserted elements before data binding\n }\n\n function createElement(wrapper, insertAfter, insertElement) {\n var promises = null;\n var sibling = insertAfter > 0 ? buffer[insertAfter - 1].element : undefined;\n linker(function (clone, scope) {\n promises = insertElement(clone, sibling);\n wrapper.element = clone;\n wrapper.scope = scope;\n scope[itemName] = wrapper.item;\n });\n // ui-scroll-grid apply\n if (adapter.transform) {\n var tdInitializer = wrapper.scope.uiScrollTdInitializer;\n if (tdInitializer && tdInitializer.linking) {\n adapter.transform(wrapper.scope, wrapper.element);\n } else {\n wrapper.scope.uiScrollTdInitializer = {\n onLink: function onLink() {\n return adapter.transform(wrapper.scope, wrapper.element);\n },\n scope: wrapper.scope\n };\n }\n }\n return promises;\n }\n\n function updateDOM() {\n var promises = [];\n var toBePrepended = [];\n var toBeRemoved = [];\n var inserted = [];\n\n buffer.forEach(function (wrapper, i) {\n switch (wrapper.op) {\n case 'prepend':\n toBePrepended.unshift(wrapper);\n break;\n case 'append':\n insertWrapperContent(wrapper, i);\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'insert':\n promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated));\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'remove':\n toBeRemoved.push(wrapper);\n }\n });\n\n toBeRemoved.forEach(function (wrapper) {\n return promises = promises.concat(viewport.removeItem(wrapper));\n });\n\n if (toBePrepended.length) toBePrepended.forEach(function (wrapper) {\n insertWrapperContent(wrapper);\n wrapper.op = 'none';\n });\n\n buffer.forEach(function (item, i) {\n return item.scope.$index = buffer.first + i;\n });\n\n return {\n prepended: toBePrepended,\n removed: toBeRemoved,\n inserted: inserted,\n animated: promises\n };\n }\n\n function updatePaddings(rid, updates) {\n // schedule another doAdjust after animation completion\n if (updates.animated.length) {\n $q.all(updates.animated).then(function () {\n viewport.adjustPaddings();\n doAdjust(rid);\n });\n } else {\n viewport.adjustPaddings();\n }\n }\n\n function enqueueFetch(rid, updates) {\n if (viewport.shouldLoadBottom()) {\n if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\n // this means that at least one item appended in the last batch has height > 0\n if (pending.push(true) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n } else if (viewport.shouldLoadTop()) {\n if (!updates || buffer.effectiveHeight(updates.prepended) > 0 || pending[0]) {\n // this means that at least one item appended in the last batch has height > 0\n // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\n // BTW there will always be at least 1 element in the pending array because bottom is fetched first\n if (pending.push(false) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n }\n }\n\n function processUpdates() {\n var updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustments\n !$scope.$$phase && !$rootScope.$$phase && $scope.$digest();\n\n updates.inserted.forEach(function (w) {\n return elementRoutines.showElement(w);\n });\n updates.prepended.forEach(function (w) {\n return elementRoutines.showElement(w);\n });\n return updates;\n }\n\n function doAdjust(rid) {\n if (!rid) {\n // dismiss pending requests\n pending = [];\n rid = ++ridActual;\n }\n\n var updates = processUpdates();\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n enqueueFetch(rid);\n\n if (!pending.length) {\n adapter.calculateProperties();\n }\n }\n\n function doAdjustAfterFetch(rid) {\n var updates = processUpdates();\n\n viewport.onAfterPrepend(updates);\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n onRenderHandlersRunner();\n enqueueFetch(rid, updates);\n pending.shift();\n\n if (pending.length) fetch(rid);else {\n adapter.loading(false);\n bindEvents();\n adapter.calculateProperties();\n }\n }\n\n function fetch(rid) {\n if (pending[0]) {\n // scrolling down\n if (buffer.length && !viewport.shouldLoadBottom()) {\n doAdjustAfterFetch(rid);\n } else {\n fetchNext(function (result) {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.eof = true;\n }\n\n if (result.length > 0) {\n viewport.clipTop();\n buffer.append(result);\n }\n\n doAdjustAfterFetch(rid);\n });\n }\n } else {\n // scrolling up\n if (buffer.length && !viewport.shouldLoadTop()) {\n doAdjustAfterFetch(rid);\n } else {\n fetchPrevious(function (result) {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.bof = true;\n // log 'bof is reached'\n }\n\n if (result.length > 0) {\n if (buffer.length) {\n viewport.clipBottom();\n }\n buffer.prepend(result);\n }\n\n doAdjustAfterFetch(rid);\n });\n }\n }\n }\n\n function resizeAndScrollHandler() {\n if (!$rootScope.$$phase && !adapter.isLoading && !adapter.disabled) {\n\n enqueueFetch(ridActual);\n\n if (pending.length) {\n unbindEvents();\n } else {\n adapter.calculateProperties();\n !$scope.$$phase && $scope.$digest();\n }\n }\n }\n\n function wheelHandler(event) {\n if (!adapter.disabled) {\n var scrollTop = viewport[0].scrollTop;\n var yMax = viewport[0].scrollHeight - viewport[0].clientHeight;\n\n if (scrollTop === 0 && !buffer.bof || scrollTop === yMax && !buffer.eof) {\n event.preventDefault();\n }\n }\n }\n }\n}]);\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*!\r\n globals: angular, window\r\n List of used element methods available in JQuery but not in JQuery Lite\r\n element.before(elem)\r\n element.height()\r\n element.outerHeight(true)\r\n element.height(value) = only for Top/Bottom padding elements\r\n element.scrollTop()\r\n element.scrollTop(value)\r\n */\n\nvar JQLiteExtras = function () {\n function JQLiteExtras() {\n _classCallCheck(this, JQLiteExtras);\n }\n\n _createClass(JQLiteExtras, [{\n key: 'registerFor',\n value: function registerFor(element) {\n var convertToPx = void 0,\n css = void 0,\n getStyle = void 0,\n isWindow = void 0;\n // angular implementation blows up if elem is the window\n css = angular.element.prototype.css;\n\n element.prototype.css = function (name, value) {\n var self = this;\n var elem = self[0];\n if (!(!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style)) {\n return css.call(self, name, value);\n }\n };\n\n // as defined in angularjs v1.0.5\n isWindow = function isWindow(obj) {\n return obj && obj.document && obj.location && obj.alert && obj.setInterval;\n };\n\n function scrollTo(self, direction, value) {\n var elem = self[0];\n\n var _top$left$direction = _slicedToArray({\n top: ['scrollTop', 'pageYOffset', 'scrollLeft'],\n left: ['scrollLeft', 'pageXOffset', 'scrollTop']\n }[direction], 3),\n method = _top$left$direction[0],\n prop = _top$left$direction[1],\n preserve = _top$left$direction[2];\n\n var isValueDefined = typeof value !== 'undefined';\n if (isWindow(elem)) {\n if (isValueDefined) {\n return elem.scrollTo(self[preserve].call(self), value);\n }\n return prop in elem ? elem[prop] : elem.document.documentElement[method];\n } else {\n if (isValueDefined) {\n elem[method] = value;\n }\n return elem[method];\n }\n }\n\n if (window.getComputedStyle) {\n getStyle = function getStyle(elem) {\n return window.getComputedStyle(elem, null);\n };\n convertToPx = function convertToPx(elem, value) {\n return parseFloat(value);\n };\n } else {\n getStyle = function getStyle(elem) {\n return elem.currentStyle;\n };\n convertToPx = function convertToPx(elem, value) {\n var left = void 0,\n result = void 0,\n rs = void 0,\n rsLeft = void 0,\n style = void 0;\n var core_pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n var rnumnonpx = new RegExp('^(' + core_pnum + ')(?!px)[a-z%]+$', 'i');\n\n if (!rnumnonpx.test(value)) {\n return parseFloat(value);\n }\n\n // ported from JQuery\n style = elem.style;\n left = style.left;\n rs = elem.runtimeStyle;\n rsLeft = rs && rs.left;\n if (rs) {\n rs.left = style.left;\n }\n // put in the new values to get a computed style out\n style.left = value;\n result = style.pixelLeft;\n style.left = left;\n if (rsLeft) {\n rs.left = rsLeft;\n }\n return result;\n };\n }\n\n function getMeasurements(elem, measure) {\n var base = void 0,\n borderA = void 0,\n borderB = void 0,\n computedMarginA = void 0,\n computedMarginB = void 0,\n computedStyle = void 0,\n dirA = void 0,\n dirB = void 0,\n marginA = void 0,\n marginB = void 0,\n paddingA = void 0,\n paddingB = void 0;\n\n if (isWindow(elem)) {\n base = document.documentElement[{ height: 'clientHeight', width: 'clientWidth' }[measure]];\n\n return {\n base: base,\n padding: 0,\n border: 0,\n margin: 0\n };\n }\n\n // Start with offset property\n\n var _width$height$measure = _slicedToArray({\n width: [elem.offsetWidth, 'Left', 'Right'],\n height: [elem.offsetHeight, 'Top', 'Bottom']\n }[measure], 3);\n\n base = _width$height$measure[0];\n dirA = _width$height$measure[1];\n dirB = _width$height$measure[2];\n\n\n computedStyle = getStyle(elem);\n paddingA = convertToPx(elem, computedStyle['padding' + dirA]) || 0;\n paddingB = convertToPx(elem, computedStyle['padding' + dirB]) || 0;\n borderA = convertToPx(elem, computedStyle['border' + dirA + 'Width']) || 0;\n borderB = convertToPx(elem, computedStyle['border' + dirB + 'Width']) || 0;\n computedMarginA = computedStyle['margin' + dirA];\n computedMarginB = computedStyle['margin' + dirB];\n\n // I do not care for width for now, so this hack is irrelevant\n // if ( !supportsPercentMargin )\n // computedMarginA = hackPercentMargin( elem, computedStyle, computedMarginA )\n // computedMarginB = hackPercentMargin( elem, computedStyle, computedMarginB )\n marginA = convertToPx(elem, computedMarginA) || 0;\n marginB = convertToPx(elem, computedMarginB) || 0;\n\n return {\n base: base,\n padding: paddingA + paddingB,\n border: borderA + borderB,\n margin: marginA + marginB\n };\n }\n\n function getWidthHeight(elem, direction, measure) {\n var computedStyle = void 0,\n result = void 0;\n\n var measurements = getMeasurements(elem, direction);\n\n if (measurements.base > 0) {\n return {\n base: measurements.base - measurements.padding - measurements.border,\n outer: measurements.base,\n outerfull: measurements.base + measurements.margin\n }[measure];\n }\n\n // Fall back to computed then uncomputed css if necessary\n computedStyle = getStyle(elem);\n result = computedStyle[direction];\n\n if (result < 0 || result === null) {\n result = elem.style[direction] || 0;\n }\n\n // Normalize \"\", auto, and prepare for extra\n result = parseFloat(result) || 0;\n\n return {\n base: result - measurements.padding - measurements.border,\n outer: result,\n outerfull: result + measurements.padding + measurements.border + measurements.margin\n }[measure];\n }\n\n // define missing methods\n return angular.forEach({\n before: function before(newElem) {\n var children, elem, i, j, parent, ref, self;\n self = this;\n elem = self[0];\n parent = self.parent();\n children = parent.contents();\n if (children[0] === elem) {\n return parent.prepend(newElem);\n } else {\n for (i = j = 1, ref = children.length - 1; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {\n if (children[i] === elem) {\n angular.element(children[i - 1]).after(newElem);\n return;\n }\n }\n throw new Error('invalid DOM structure ' + elem.outerHTML);\n }\n },\n height: function height(value) {\n var self;\n self = this;\n if (typeof value !== 'undefined') {\n if (Number.isInteger(value)) {\n value = value + 'px';\n }\n return css.call(self, 'height', value);\n } else {\n return getWidthHeight(this[0], 'height', 'base');\n }\n },\n outerHeight: function outerHeight(option) {\n return getWidthHeight(this[0], 'height', option ? 'outerfull' : 'outer');\n },\n outerWidth: function outerWidth(option) {\n return getWidthHeight(this[0], 'width', option ? 'outerfull' : 'outer');\n },\n\n\n /*\r\n The offset setter method is not implemented\r\n */\n offset: function offset(value) {\n var docElem = void 0,\n win = void 0;\n var self = this;\n var box = {\n top: 0,\n left: 0\n };\n var elem = self[0];\n var doc = elem && elem.ownerDocument;\n\n if (arguments.length) {\n if (value === undefined) {\n return self;\n }\n // TODO: implement setter\n throw new Error('offset setter method is not implemented');\n }\n\n if (!doc) {\n return;\n }\n\n docElem = doc.documentElement;\n\n // TODO: Make sure it's not a disconnected DOM node\n\n if (elem.getBoundingClientRect != null) {\n box = elem.getBoundingClientRect();\n }\n\n win = doc.defaultView || doc.parentWindow;\n\n return {\n top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),\n left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0)\n };\n },\n scrollTop: function scrollTop(value) {\n return scrollTo(this, 'top', value);\n },\n scrollLeft: function scrollLeft(value) {\n return scrollTo(this, 'left', value);\n }\n }, function (value, key) {\n if (!element.prototype[key]) {\n return element.prototype[key] = value;\n }\n });\n }\n }]);\n\n return JQLiteExtras;\n}();\n\nexports.default = JQLiteExtras;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar hideClassToken = 'ng-ui-scroll-hide';\n\nvar ElementRoutines = function () {\n _createClass(ElementRoutines, null, [{\n key: 'addCSSRules',\n value: function addCSSRules() {\n var selector = '.' + hideClassToken;\n var rules = 'display: none';\n var sheet = document.styleSheets[0];\n var index = void 0;\n try {\n index = sheet.cssRules.length;\n } catch (err) {\n index = 0;\n }\n if ('insertRule' in sheet) {\n sheet.insertRule(selector + '{' + rules + '}', index);\n } else if ('addRule' in sheet) {\n sheet.addRule(selector, rules, index);\n }\n }\n }]);\n\n function ElementRoutines($injector, $q) {\n _classCallCheck(this, ElementRoutines);\n\n this.$animate = $injector.has && $injector.has('$animate') ? $injector.get('$animate') : null;\n this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3;\n this.$q = $q;\n }\n\n _createClass(ElementRoutines, [{\n key: 'hideElement',\n value: function hideElement(wrapper) {\n wrapper.element.addClass(hideClassToken);\n }\n }, {\n key: 'showElement',\n value: function showElement(wrapper) {\n wrapper.element.removeClass(hideClassToken);\n }\n }, {\n key: 'insertElement',\n value: function insertElement(newElement, previousElement) {\n previousElement.after(newElement);\n return [];\n }\n }, {\n key: 'removeElement',\n value: function removeElement(wrapper) {\n wrapper.element.remove();\n wrapper.scope.$destroy();\n return [];\n }\n }, {\n key: 'insertElementAnimated',\n value: function insertElementAnimated(newElement, previousElement) {\n if (!this.$animate) {\n return this.insertElement(newElement, previousElement);\n }\n\n if (this.isAngularVersionLessThen1_3) {\n var deferred = this.$q.defer();\n // no need for parent - previous element is never null\n this.$animate.enter(newElement, null, previousElement, function () {\n return deferred.resolve();\n });\n\n return [deferred.promise];\n }\n\n // no need for parent - previous element is never null\n return [this.$animate.enter(newElement, null, previousElement)];\n }\n }, {\n key: 'removeElementAnimated',\n value: function removeElementAnimated(wrapper) {\n if (!this.$animate) {\n return this.removeElement(wrapper);\n }\n\n if (this.isAngularVersionLessThen1_3) {\n var deferred = this.$q.defer();\n this.$animate.leave(wrapper.element, function () {\n wrapper.scope.$destroy();\n return deferred.resolve();\n });\n\n return [deferred.promise];\n }\n\n return [this.$animate.leave(wrapper.element).then(function () {\n return wrapper.scope.$destroy();\n })];\n }\n }]);\n\n return ElementRoutines;\n}();\n\nexports.default = ElementRoutines;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = ScrollBuffer;\nfunction ScrollBuffer(elementRoutines, bufferSize, startIndex) {\n var buffer = Object.create(Array.prototype);\n\n Object.assign(buffer, {\n size: bufferSize,\n\n reset: function reset(startIndex) {\n buffer.remove(0, buffer.length);\n buffer.eof = false;\n buffer.bof = false;\n buffer.first = startIndex;\n buffer.next = startIndex;\n buffer.minIndex = startIndex;\n buffer.maxIndex = startIndex;\n buffer.minIndexUser = null;\n buffer.maxIndexUser = null;\n },\n append: function append(items) {\n items.forEach(function (item) {\n ++buffer.next;\n buffer.insert('append', item);\n });\n buffer.maxIndex = buffer.eof ? buffer.next - 1 : Math.max(buffer.next - 1, buffer.maxIndex);\n },\n prepend: function prepend(items) {\n items.reverse().forEach(function (item) {\n --buffer.first;\n buffer.insert('prepend', item);\n });\n buffer.minIndex = buffer.bof ? buffer.minIndex = buffer.first : Math.min(buffer.first, buffer.minIndex);\n },\n\n\n /**\r\n * inserts wrapped element in the buffer\r\n * the first argument is either operation keyword (see below) or a number for operation 'insert'\r\n * for insert the number is the index for the buffer element the new one have to be inserted after\r\n * operations: 'append', 'prepend', 'insert', 'remove', 'update', 'none'\r\n */\n insert: function insert(operation, item, isTop) {\n var wrapper = {\n item: item\n };\n\n if (operation % 1 === 0) {\n // it is an insert\n wrapper.op = 'insert';\n buffer.splice(operation, 0, wrapper);\n if (isTop) {\n buffer.first--;\n } else {\n buffer.next++;\n }\n } else {\n wrapper.op = operation;\n switch (operation) {\n case 'append':\n buffer.push(wrapper);\n break;\n case 'prepend':\n buffer.unshift(wrapper);\n break;\n }\n }\n },\n\n\n // removes elements from buffer\n remove: function remove(arg1, arg2) {\n if (Number.isInteger(arg1)) {\n // removes items from arg1 (including) through arg2 (excluding)\n for (var i = arg1; i < arg2; i++) {\n elementRoutines.removeElement(buffer[i]);\n }\n return buffer.splice(arg1, arg2 - arg1);\n }\n // removes single item(wrapper) from the buffer\n buffer.splice(buffer.indexOf(arg1), 1);\n if (arg1._op === 'isTop' && buffer.first === this.getAbsMinIndex()) {\n this.incrementMinIndex();\n } else {\n this.decrementMaxIndex();\n }\n if (arg1._op === 'isTop') {\n buffer.first++;\n } else {\n buffer.next--;\n }\n if (!buffer.length) {\n buffer.first = 1;\n buffer.next = 1;\n }\n\n return elementRoutines.removeElementAnimated(arg1);\n },\n incrementMinIndex: function incrementMinIndex() {\n if (buffer.minIndexUser !== null) {\n if (buffer.minIndex > buffer.minIndexUser) {\n buffer.minIndexUser++;\n return;\n }\n if (buffer.minIndex === buffer.minIndexUser) {\n buffer.minIndexUser++;\n }\n }\n buffer.minIndex++;\n },\n decrementMaxIndex: function decrementMaxIndex() {\n if (buffer.maxIndexUser !== null && buffer.maxIndex <= buffer.maxIndexUser) {\n buffer.maxIndexUser--;\n }\n buffer.maxIndex--;\n },\n getAbsMinIndex: function getAbsMinIndex() {\n if (buffer.minIndexUser !== null) {\n return Math.min(buffer.minIndexUser, buffer.minIndex);\n }\n return buffer.minIndex;\n },\n getAbsMaxIndex: function getAbsMaxIndex() {\n if (buffer.maxIndexUser !== null) {\n return Math.max(buffer.maxIndexUser, buffer.maxIndex);\n }\n return buffer.maxIndex;\n },\n effectiveHeight: function effectiveHeight(elements) {\n if (!elements.length) {\n return 0;\n }\n var top = Number.MAX_VALUE;\n var bottom = Number.NEGATIVE_INFINITY;\n elements.forEach(function (wrapper) {\n if (wrapper.element[0].offsetParent) {\n // element style is not display:none\n top = Math.min(top, wrapper.element.offset().top);\n bottom = Math.max(bottom, wrapper.element.offset().top + wrapper.element.outerHeight(true));\n }\n });\n return Math.max(0, bottom - top);\n }\n });\n\n buffer.reset(startIndex);\n\n return buffer;\n}\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = Viewport;\n\nvar _padding = __webpack_require__(5);\n\nvar _padding2 = _interopRequireDefault(_padding);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding) {\n var topPadding = null;\n var bottomPadding = null;\n var viewport = viewportController && viewportController.viewport ? viewportController.viewport : angular.element(window);\n var container = viewportController && viewportController.container ? viewportController.container : undefined;\n var scope = viewportController && viewportController.scope ? viewportController.scope : $rootScope;\n\n viewport.css({\n 'overflow-anchor': 'none',\n 'overflow-y': 'auto',\n 'display': 'block'\n });\n\n function bufferPadding() {\n return viewport.outerHeight() * padding; // some extra space to initiate preload\n }\n\n Object.assign(viewport, {\n getScope: function getScope() {\n return scope;\n },\n createPaddingElements: function createPaddingElements(template) {\n topPadding = new _padding2.default(template);\n bottomPadding = new _padding2.default(template);\n element.before(topPadding.element);\n element.after(bottomPadding.element);\n topPadding.height(0);\n bottomPadding.height(0);\n },\n applyContainerStyle: function applyContainerStyle() {\n if (!container) {\n return true;\n }\n if (container !== viewport) {\n viewport.css('height', window.getComputedStyle(container[0]).height);\n }\n return viewport.height() > 0;\n },\n bottomDataPos: function bottomDataPos() {\n var scrollHeight = viewport[0].scrollHeight;\n scrollHeight = scrollHeight != null ? scrollHeight : viewport[0].document.documentElement.scrollHeight;\n return scrollHeight - bottomPadding.height();\n },\n topDataPos: function topDataPos() {\n return topPadding.height();\n },\n bottomVisiblePos: function bottomVisiblePos() {\n return viewport.scrollTop() + viewport.outerHeight();\n },\n topVisiblePos: function topVisiblePos() {\n return viewport.scrollTop();\n },\n insertElement: function insertElement(e, sibling) {\n return elementRoutines.insertElement(e, sibling || topPadding.element);\n },\n insertElementAnimated: function insertElementAnimated(e, sibling) {\n return elementRoutines.insertElementAnimated(e, sibling || topPadding.element);\n },\n shouldLoadBottom: function shouldLoadBottom() {\n return !buffer.eof && viewport.bottomDataPos() < viewport.bottomVisiblePos() + bufferPadding();\n },\n clipBottom: function clipBottom() {\n // clip the invisible items off the bottom\n var overage = 0;\n var overageHeight = 0;\n var itemHeight = 0;\n var emptySpaceHeight = viewport.bottomDataPos() - viewport.bottomVisiblePos() - bufferPadding();\n\n for (var i = buffer.length - 1; i >= 0; i--) {\n itemHeight = buffer[i].element.outerHeight(true);\n if (overageHeight + itemHeight > emptySpaceHeight) {\n break;\n }\n bottomPadding.cache.add(buffer[i]);\n overageHeight += itemHeight;\n overage++;\n }\n\n if (overage > 0) {\n buffer.eof = false;\n buffer.remove(buffer.length - overage, buffer.length);\n buffer.next -= overage;\n viewport.adjustPaddings();\n }\n },\n shouldLoadTop: function shouldLoadTop() {\n return !buffer.bof && viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding();\n },\n clipTop: function clipTop() {\n // clip the invisible items off the top\n var overage = 0;\n var overageHeight = 0;\n var itemHeight = 0;\n var emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\n\n for (var i = 0; i < buffer.length; i++) {\n itemHeight = buffer[i].element.outerHeight(true);\n if (overageHeight + itemHeight > emptySpaceHeight) {\n break;\n }\n topPadding.cache.add(buffer[i]);\n overageHeight += itemHeight;\n overage++;\n }\n\n if (overage > 0) {\n // we need to adjust top padding element before items are removed from top\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\n topPadding.height(topPadding.height() + overageHeight);\n buffer.bof = false;\n buffer.remove(0, overage);\n buffer.first += overage;\n }\n },\n adjustPaddings: function adjustPaddings() {\n if (!buffer.length) {\n return;\n }\n\n // precise heights calculation based on items that are in buffer or that were in buffer once\n var visibleItemsHeight = buffer.reduce(function (summ, item) {\n return summ + item.element.outerHeight(true);\n }, 0);\n\n var topPaddingHeight = 0,\n topCount = 0;\n topPadding.cache.forEach(function (item) {\n if (item.index < buffer.first) {\n topPaddingHeight += item.height;\n topCount++;\n }\n });\n\n var bottomPaddingHeight = 0,\n bottomCount = 0;\n bottomPadding.cache.forEach(function (item) {\n if (item.index >= buffer.next) {\n bottomPaddingHeight += item.height;\n bottomCount++;\n }\n });\n\n var totalHeight = visibleItemsHeight + topPaddingHeight + bottomPaddingHeight;\n var averageItemHeight = totalHeight / (topCount + bottomCount + buffer.length);\n\n // average heights calculation, items that have never been reached\n var adjustTopPadding = buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser;\n var adjustBottomPadding = buffer.maxIndexUser !== null && buffer.maxIndex < buffer.maxIndexUser;\n var topPaddingHeightAdd = adjustTopPadding ? (buffer.minIndex - buffer.minIndexUser) * averageItemHeight : 0;\n var bottomPaddingHeightAdd = adjustBottomPadding ? (buffer.maxIndexUser - buffer.maxIndex) * averageItemHeight : 0;\n\n // paddings combine adjustment\n topPadding.height(topPaddingHeight + topPaddingHeightAdd);\n bottomPadding.height(bottomPaddingHeight + bottomPaddingHeightAdd);\n },\n onAfterMinIndexSet: function onAfterMinIndexSet(topPaddingHeightOld) {\n // additional scrollTop adjustment in case of datasource.minIndex external set\n if (buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser) {\n var diff = topPadding.height() - topPaddingHeightOld;\n viewport.scrollTop(viewport.scrollTop() + diff);\n while ((diff -= viewport.scrollTop()) > 0) {\n bottomPadding.height(bottomPadding.height() + diff);\n viewport.scrollTop(viewport.scrollTop() + diff);\n }\n }\n },\n onAfterPrepend: function onAfterPrepend(updates) {\n if (!updates.prepended.length) return;\n var height = buffer.effectiveHeight(updates.prepended);\n var paddingHeight = topPadding.height() - height;\n if (paddingHeight >= 0) {\n topPadding.height(paddingHeight);\n } else {\n topPadding.height(0);\n viewport.scrollTop(viewport.scrollTop() - paddingHeight);\n }\n },\n resetTopPadding: function resetTopPadding() {\n topPadding.height(0);\n topPadding.cache.clear();\n },\n resetBottomPadding: function resetBottomPadding() {\n bottomPadding.height(0);\n bottomPadding.cache.clear();\n },\n removeCacheItem: function removeCacheItem(item, isTop) {\n topPadding.cache.remove(item, isTop);\n bottomPadding.cache.remove(item, isTop);\n },\n removeItem: function removeItem(item) {\n this.removeCacheItem(item);\n return buffer.remove(item);\n }\n });\n\n return viewport;\n}\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// Can't just extend the Array, due to Babel does not support built-in classes extending\n// This solution was taken from https://stackoverflow.com/questions/46897414/es6-class-extends-array-workaround-for-es5-babel-transpile\nvar CacheProto = function () {\n function CacheProto() {\n _classCallCheck(this, CacheProto);\n }\n\n _createClass(CacheProto, [{\n key: 'add',\n value: function add(item) {\n for (var i = this.length - 1; i >= 0; i--) {\n if (this[i].index === item.scope.$index) {\n this[i].height = item.element.outerHeight();\n return;\n }\n }\n this.push({\n index: item.scope.$index,\n height: item.element.outerHeight()\n });\n this.sort(function (a, b) {\n return a.index < b.index ? -1 : a.index > b.index ? 1 : 0;\n });\n }\n }, {\n key: 'remove',\n value: function remove(argument, _isTop) {\n var index = argument % 1 === 0 ? argument : argument.scope.$index;\n var isTop = argument % 1 === 0 ? _isTop : argument._op === 'isTop';\n for (var i = this.length - 1; i >= 0; i--) {\n if (this[i].index === index) {\n this.splice(i, 1);\n break;\n }\n }\n if (!isTop) {\n for (var _i = this.length - 1; _i >= 0; _i--) {\n if (this[_i].index > index) {\n this[_i].index--;\n }\n }\n }\n }\n }, {\n key: 'clear',\n value: function clear() {\n this.length = 0;\n }\n }]);\n\n return CacheProto;\n}();\n\nfunction Cache() {\n var instance = [];\n instance.push.apply(instance, arguments);\n Object.setPrototypeOf(instance, Cache.prototype);\n return instance;\n}\nCache.prototype = Object.create(Array.prototype);\nObject.getOwnPropertyNames(CacheProto.prototype).forEach(function (methodName) {\n return Cache.prototype[methodName] = CacheProto.prototype[methodName];\n});\n\nfunction generateElement(template) {\n if (template.nodeType !== Node.ELEMENT_NODE) {\n throw new Error('ui-scroll directive requires an Element node for templating the view');\n }\n var element = void 0;\n switch (template.tagName.toLowerCase()) {\n case 'dl':\n throw new Error('ui-scroll directive does not support <' + template.tagName + '> as a repeating tag: ' + template.outerHTML);\n case 'tr':\n var table = angular.element('');\n element = table.find('tr');\n break;\n case 'li':\n element = angular.element('');\n break;\n default:\n element = angular.element('');\n }\n return element;\n}\n\nvar Padding = function () {\n function Padding(template) {\n _classCallCheck(this, Padding);\n\n this.element = generateElement(template);\n this.cache = new Cache();\n }\n\n _createClass(Padding, [{\n key: 'height',\n value: function height() {\n return this.element.height.apply(this.element, arguments);\n }\n }]);\n\n return Padding;\n}();\n\nexports.default = Padding;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Adapter = function () {\n function Adapter($scope, $parse, $attr, viewport, buffer, doAdjust, reload) {\n _classCallCheck(this, Adapter);\n\n this.$parse = $parse;\n this.$attr = $attr;\n this.viewport = viewport;\n this.buffer = buffer;\n\n this.doAdjust = doAdjust;\n this.reload = reload;\n\n this.isLoading = false;\n this.disabled = false;\n\n var viewportScope = viewport.getScope();\n this.startScope = viewportScope.$parent ? viewportScope : $scope;\n\n this.publicContext = {};\n this.assignAdapter($attr.adapter);\n this.generatePublicContext();\n }\n\n _createClass(Adapter, [{\n key: 'assignAdapter',\n value: function assignAdapter(adapterAttr) {\n if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\\s+|\\s+$/gm, ''))) {\n return;\n }\n var adapterOnScope = void 0;\n\n try {\n this.$parse(adapterAttr).assign(this.startScope, {});\n adapterOnScope = this.$parse(adapterAttr)(this.startScope);\n } catch (error) {\n error.message = 'Angular ui-scroll Adapter assignment exception.\\n' + ('Can\\'t parse \"' + adapterAttr + '\" expression.\\n') + error.message;\n throw error;\n }\n\n Object.assign(adapterOnScope, this.publicContext);\n this.publicContext = adapterOnScope;\n }\n }, {\n key: 'generatePublicContext',\n value: function generatePublicContext() {\n var _this = this;\n\n // these methods will be accessible out of ui-scroll via user defined adapter\n var publicMethods = ['reload', 'applyUpdates', 'append', 'prepend', 'isBOF', 'isEOF', 'isEmpty'];\n for (var i = publicMethods.length - 1; i >= 0; i--) {\n this.publicContext[publicMethods[i]] = this[publicMethods[i]].bind(this);\n }\n\n // these read-only props will be accessible out of ui-scroll via user defined adapter\n var publicProps = ['isLoading', 'topVisible', 'topVisibleElement', 'topVisibleScope', 'bottomVisible', 'bottomVisibleElement', 'bottomVisibleScope'];\n\n var _loop = function _loop(_i) {\n var property = void 0,\n attr = _this.$attr[publicProps[_i]];\n Object.defineProperty(_this, publicProps[_i], {\n get: function get() {\n return property;\n },\n set: function set(value) {\n property = value;\n _this.publicContext[publicProps[_i]] = value;\n if (attr) {\n _this.$parse(attr).assign(_this.startScope, value);\n }\n }\n });\n };\n\n for (var _i = publicProps.length - 1; _i >= 0; _i--) {\n _loop(_i);\n }\n\n // non-read-only public property\n Object.defineProperty(this.publicContext, 'disabled', {\n get: function get() {\n return _this.disabled;\n },\n set: function set(value) {\n return !(_this.disabled = value) ? _this.doAdjust() : null;\n }\n });\n }\n }, {\n key: 'loading',\n value: function loading(value) {\n this.isLoading = value;\n }\n }, {\n key: 'isBOF',\n value: function isBOF() {\n return this.buffer.bof;\n }\n }, {\n key: 'isEOF',\n value: function isEOF() {\n return this.buffer.eof;\n }\n }, {\n key: 'isEmpty',\n value: function isEmpty() {\n return !this.buffer.length;\n }\n }, {\n key: 'append',\n value: function append(newItems) {\n this.buffer.append(newItems);\n this.doAdjust();\n this.viewport.clipTop();\n this.viewport.clipBottom();\n }\n }, {\n key: 'prepend',\n value: function prepend(newItems) {\n this.buffer.prepend(newItems);\n this.doAdjust();\n this.viewport.clipTop();\n this.viewport.clipBottom();\n }\n }, {\n key: 'applyUpdates',\n value: function applyUpdates(arg1, arg2) {\n if (typeof arg1 === 'function') {\n this.applyUpdatesFunc(arg1);\n } else {\n this.applyUpdatesIndex(arg1, arg2);\n }\n this.doAdjust();\n }\n }, {\n key: 'applyUpdatesFunc',\n value: function applyUpdatesFunc(cb) {\n var _this2 = this;\n\n this.buffer.slice(0).forEach(function (wrapper) {\n // we need to do it on the buffer clone, because buffer content\n // may change as we iterate through\n _this2.applyUpdate(wrapper, cb(wrapper.item, wrapper.scope, wrapper.element));\n });\n }\n }, {\n key: 'applyUpdatesIndex',\n value: function applyUpdatesIndex(index, newItems) {\n if (index % 1 !== 0) {\n throw new Error('applyUpdates - ' + index + ' is not a valid index (should be an integer)');\n }\n var _index = index - this.buffer.first;\n\n // apply updates only within buffer\n if (_index >= 0 && _index < this.buffer.length) {\n this.applyUpdate(this.buffer[_index], newItems);\n }\n // out-of-buffer case: deletion may affect Paddings\n else if (index >= this.buffer.getAbsMinIndex() && index <= this.buffer.getAbsMaxIndex()) {\n if (Array.isArray(newItems) && !newItems.length) {\n this.viewport.removeCacheItem(index, index === this.buffer.minIndex);\n if (index === this.buffer.getAbsMinIndex()) {\n this.buffer.incrementMinIndex();\n } else {\n this.buffer.decrementMaxIndex();\n }\n }\n }\n }\n }, {\n key: 'applyUpdate',\n value: function applyUpdate(wrapper, newItems) {\n var _this3 = this;\n\n if (!Array.isArray(newItems)) {\n return;\n }\n var position = this.buffer.indexOf(wrapper);\n if (!newItems.reverse().some(function (newItem) {\n return newItem === wrapper.item;\n })) {\n wrapper.op = 'remove';\n if (position === 0 && !newItems.length) {\n wrapper._op = 'isTop'; // to catch \"first\" edge case on remove\n }\n }\n newItems.forEach(function (newItem) {\n if (newItem === wrapper.item) {\n position--;\n } else {\n // 3 parameter (isTop) is to catch \"first\" edge case on insert\n _this3.buffer.insert(position + 1, newItem, position === -1);\n }\n });\n }\n }, {\n key: 'calculateProperties',\n value: function calculateProperties() {\n var rowTop = null,\n topHeight = 0;\n var topDone = false,\n bottomDone = false;\n var length = this.buffer.length;\n\n for (var i = 0; i < length; i++) {\n var item = this.buffer[i];\n var itemTop = item.element.offset().top;\n\n if (rowTop !== itemTop) {\n // a new row condition\n var itemHeight = item.element.outerHeight(true);\n var top = this.viewport.topDataPos() + topHeight + itemHeight;\n\n if (!topDone && top > this.viewport.topVisiblePos()) {\n topDone = true;\n this['topVisible'] = item.item;\n this['topVisibleElement'] = item.element;\n this['topVisibleScope'] = item.scope;\n }\n if (!bottomDone && (top >= this.viewport.bottomVisiblePos() || i === length - 1 && this.isEOF())) {\n bottomDone = true;\n this['bottomVisible'] = item.item;\n this['bottomVisibleElement'] = item.element;\n this['bottomVisibleScope'] = item.scope;\n }\n topHeight += itemHeight;\n }\n rowTop = itemTop;\n\n if (topDone && bottomDone) {\n break;\n }\n }\n }\n }]);\n\n return Adapter;\n}();\n\nexports.default = Adapter;\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// ui-scroll.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap f32df6d97ca6583cfb5d","import JQLiteExtras from './modules/jqLiteExtras';\nimport ElementRoutines from './modules/elementRoutines.js';\nimport ScrollBuffer from './modules/buffer.js';\nimport Viewport from './modules/viewport.js';\nimport Adapter from './modules/adapter.js';\n\nangular.module('ui.scroll', [])\n\n .constant('JQLiteExtras', JQLiteExtras)\n .run(['JQLiteExtras', (JQLiteExtras) => {\n !window.jQuery ? (new JQLiteExtras()).registerFor(angular.element) : null;\n ElementRoutines.addCSSRules();\n }])\n\n .directive('uiScrollViewport', function () {\n return {\n restrict: 'A',\n controller: [\n '$scope',\n '$element',\n function (scope, element) {\n this.container = element;\n this.viewport = element;\n this.scope = scope;\n\n angular.forEach(element.children(), child => {\n if (child.tagName.toLowerCase() === 'tbody') {\n this.viewport = angular.element(child);\n }\n });\n\n return this;\n }\n ]\n };\n })\n\n .directive('uiScroll', [\n '$log',\n '$injector',\n '$rootScope',\n '$timeout',\n '$interval',\n '$q',\n '$parse',\n function (console, $injector, $rootScope, $timeout, $interval, $q, $parse) {\n\n return {\n require: ['?^uiScrollViewport'],\n restrict: 'A',\n transclude: 'element',\n priority: 1000,\n terminal: true,\n link: link\n };\n\n function link($scope, element, $attr, controllers, linker) {\n const match = $attr.uiScroll.match(/^\\s*(\\w+)\\s+in\\s+([(\\w|\\$)\\.]+)\\s*$/);\n if (!match) {\n throw new Error('Expected uiScroll in form of \\'_item_ in _datasource_\\' but got \\'' + $attr.uiScroll + '\\'');\n }\n\n function parseNumericAttr(value, defaultValue) {\n const result = $parse(value)($scope);\n return isNaN(result) ? defaultValue : result;\n }\n\n const BUFFER_MIN = 3;\n const BUFFER_DEFAULT = 10;\n const PADDING_MIN = 0.3;\n const PADDING_DEFAULT = 0.5;\n const MAX_VIEWPORT_DELAY = 500;\n const VIEWPORT_POLLING_INTERVAL = 50;\n\n let datasource = null;\n const itemName = match[1];\n const datasourceName = match[2];\n const viewportController = controllers[0];\n const bufferSize = Math.max(BUFFER_MIN, parseNumericAttr($attr.bufferSize, BUFFER_DEFAULT));\n const padding = Math.max(PADDING_MIN, parseNumericAttr($attr.padding, PADDING_DEFAULT));\n let startIndex = parseNumericAttr($attr.startIndex, 1);\n let ridActual = 0; // current data revision id\n let pending = [];\n\n const elementRoutines = new ElementRoutines($injector, $q);\n const buffer = new ScrollBuffer(elementRoutines, bufferSize, startIndex);\n const viewport = new Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding);\n const adapter = new Adapter($scope, $parse, $attr, viewport, buffer, doAdjust, reload);\n\n if (viewportController) {\n viewportController.adapter = adapter;\n }\n\n const isDatasourceValid = () =>\n Object.prototype.toString.call(datasource) === '[object Object]' && typeof datasource.get === 'function';\n\n datasource = $parse(datasourceName)($scope); // try to get datasource on scope\n if (!isDatasourceValid()) {\n datasource = $injector.get(datasourceName); // try to inject datasource as service\n if (!isDatasourceValid()) {\n throw new Error(datasourceName + ' is not a valid datasource');\n }\n }\n\n let onRenderHandlers = [];\n function onRenderHandlersRunner() {\n onRenderHandlers.forEach(handler => handler.run());\n onRenderHandlers = [];\n }\n function persistDatasourceIndex(datasource, propName) {\n let getter;\n // need to postpone min/maxIndexUser processing if the view is empty\n if(Number.isInteger(datasource[propName])) {\n getter = datasource[propName];\n if(Number.isInteger(getter)) {\n onRenderHandlers = onRenderHandlers.filter(handler => handler.id !== propName);\n onRenderHandlers.push({\n id: propName,\n run: () => datasource[propName] = getter\n });\n }\n }\n }\n\n function defineDatasourceIndex(datasource, propName, propUserName) {\n const descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n if (descriptor && (descriptor.set || descriptor.get)) {\n return;\n }\n let getter;\n persistDatasourceIndex(datasource, propName);\n Object.defineProperty(datasource, propName, {\n set: (value) => {\n getter = value;\n if(pending.length && !buffer.length) {\n persistDatasourceIndex(datasource, propName);\n return;\n }\n buffer[propUserName] = value;\n const topPaddingHeightOld = viewport.topDataPos();\n viewport.adjustPaddings();\n if (propName === 'minIndex') {\n viewport.onAfterMinIndexSet(topPaddingHeightOld);\n }\n },\n get: () => getter\n });\n }\n\n defineDatasourceIndex(datasource, 'minIndex', 'minIndexUser');\n defineDatasourceIndex(datasource, 'maxIndex', 'maxIndexUser');\n\n const fetchNext = (datasource.get.length !== 2) ?\n (success) => datasource.get(buffer.next, bufferSize, success) :\n (success) => {\n datasource.get({\n index: buffer.next,\n append: buffer.length ? buffer[buffer.length - 1].item : void 0,\n count: bufferSize\n }, success);\n };\n\n const fetchPrevious = (datasource.get.length !== 2) ?\n (success) => datasource.get(buffer.first - bufferSize, bufferSize, success) :\n (success) => {\n datasource.get({\n index: buffer.first - bufferSize,\n prepend: buffer.length ? buffer[0].item : void 0,\n count: bufferSize\n }, success);\n };\n\n const initialize = () => {\n let tryCount = 0;\n if(!viewport.applyContainerStyle()) {\n const timer = $interval(() => {\n tryCount++;\n if(viewport.applyContainerStyle()) {\n $interval.cancel(timer);\n doAdjust();\n }\n if(tryCount * VIEWPORT_POLLING_INTERVAL >= MAX_VIEWPORT_DELAY) {\n $interval.cancel(timer);\n throw Error(`ui-scroll directive requires a viewport with non-zero height in ${MAX_VIEWPORT_DELAY}ms`);\n }\n }, VIEWPORT_POLLING_INTERVAL);\n }\n else {\n doAdjust();\n }\n };\n\n /**\n * Build padding elements\n *\n * Calling linker is the only way I found to get access to the tag name of the template\n * to prevent the directive scope from pollution a new scope is created and destroyed\n * right after the builder creation is completed\n */\n linker((clone, scope) => {\n viewport.createPaddingElements(clone[0]);\n // we do not include the clone in the DOM. It means that the nested directives will not\n // be able to reach the parent directives, but in this case it is intentional because we\n // created the clone to access the template tag name\n scope.$destroy();\n clone.remove();\n });\n\n $scope.$on('$destroy', () => {\n unbindEvents();\n viewport.unbind('mousewheel', wheelHandler);\n });\n\n viewport.bind('mousewheel', wheelHandler);\n\n initialize();\n\n /* Private function definitions */\n\n function isInvalid(rid) {\n return (rid && rid !== ridActual) || $scope.$$destroyed;\n }\n\n function bindEvents() {\n viewport.bind('resize', resizeAndScrollHandler);\n viewport.bind('scroll', resizeAndScrollHandler);\n }\n\n function unbindEvents() {\n viewport.unbind('resize', resizeAndScrollHandler);\n viewport.unbind('scroll', resizeAndScrollHandler);\n }\n\n function reload() {\n viewport.resetTopPadding();\n viewport.resetBottomPadding();\n if (arguments.length) {\n startIndex = arguments[0];\n }\n buffer.reset(startIndex);\n persistDatasourceIndex(datasource, 'minIndex');\n persistDatasourceIndex(datasource, 'maxIndex');\n doAdjust();\n }\n\n function isElementVisible(wrapper) {\n return wrapper.element.height() && wrapper.element[0].offsetParent;\n }\n\n function visibilityWatcher(wrapper) {\n if (isElementVisible(wrapper)) {\n buffer.forEach((item) => {\n if (typeof item.unregisterVisibilityWatcher === 'function') {\n item.unregisterVisibilityWatcher();\n delete item.unregisterVisibilityWatcher;\n }\n });\n if (!pending.length) {\n $timeout(() => doAdjust());\n }\n }\n }\n\n function insertWrapperContent(wrapper, insertAfter) {\n createElement(wrapper, insertAfter, viewport.insertElement);\n if (!isElementVisible(wrapper)) {\n wrapper.unregisterVisibilityWatcher = wrapper.scope.$watch(() => visibilityWatcher(wrapper));\n }\n elementRoutines.hideElement(wrapper); // hide inserted elements before data binding\n }\n\n function createElement(wrapper, insertAfter, insertElement) {\n let promises = null;\n const sibling = (insertAfter > 0) ? buffer[insertAfter - 1].element : undefined;\n linker((clone, scope) => {\n promises = insertElement(clone, sibling);\n wrapper.element = clone;\n wrapper.scope = scope;\n scope[itemName] = wrapper.item;\n });\n // ui-scroll-grid apply\n if (adapter.transform) {\n const tdInitializer = wrapper.scope.uiScrollTdInitializer;\n if (tdInitializer && tdInitializer.linking) {\n adapter.transform(wrapper.scope, wrapper.element);\n } else {\n wrapper.scope.uiScrollTdInitializer = {\n onLink: () => adapter.transform(wrapper.scope, wrapper.element),\n scope: wrapper.scope\n };\n }\n }\n return promises;\n }\n\n function updateDOM() {\n let promises = [];\n const toBePrepended = [];\n const toBeRemoved = [];\n const inserted = [];\n\n buffer.forEach((wrapper, i) => {\n switch (wrapper.op) {\n case 'prepend':\n toBePrepended.unshift(wrapper);\n break;\n case 'append':\n insertWrapperContent(wrapper, i);\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'insert':\n promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated));\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'remove':\n toBeRemoved.push(wrapper);\n }\n });\n\n toBeRemoved.forEach((wrapper) => promises = promises.concat(viewport.removeItem(wrapper)));\n\n if (toBePrepended.length)\n toBePrepended.forEach((wrapper) => {\n insertWrapperContent(wrapper);\n wrapper.op = 'none';\n });\n\n buffer.forEach((item, i) => item.scope.$index = buffer.first + i);\n\n return {\n prepended: toBePrepended,\n removed: toBeRemoved,\n inserted: inserted,\n animated: promises\n };\n\n }\n\n function updatePaddings(rid, updates) {\n // schedule another doAdjust after animation completion\n if (updates.animated.length) {\n $q.all(updates.animated).then(() => {\n viewport.adjustPaddings();\n doAdjust(rid);\n });\n } else {\n viewport.adjustPaddings();\n }\n }\n\n function enqueueFetch(rid, updates) {\n if (viewport.shouldLoadBottom()) {\n if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\n // this means that at least one item appended in the last batch has height > 0\n if (pending.push(true) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n } else if (viewport.shouldLoadTop()) {\n if ((!updates || buffer.effectiveHeight(updates.prepended) > 0) || pending[0]) {\n // this means that at least one item appended in the last batch has height > 0\n // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\n // BTW there will always be at least 1 element in the pending array because bottom is fetched first\n if (pending.push(false) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n }\n }\n\n function processUpdates() {\n const updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustments\n !$scope.$$phase && !$rootScope.$$phase && $scope.$digest();\n\n updates.inserted.forEach(w => elementRoutines.showElement(w));\n updates.prepended.forEach(w => elementRoutines.showElement(w));\n return updates;\n }\n\n function doAdjust(rid) {\n if (!rid) { // dismiss pending requests\n pending = [];\n rid = ++ridActual;\n }\n\n const updates = processUpdates();\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n enqueueFetch(rid);\n\n if (!pending.length) {\n adapter.calculateProperties();\n }\n }\n\n function doAdjustAfterFetch(rid) {\n const updates = processUpdates();\n\n viewport.onAfterPrepend(updates);\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n onRenderHandlersRunner();\n enqueueFetch(rid, updates);\n pending.shift();\n\n if (pending.length)\n fetch(rid);\n else {\n adapter.loading(false);\n bindEvents();\n adapter.calculateProperties();\n }\n }\n\n function fetch(rid) {\n if (pending[0]) {// scrolling down\n if (buffer.length && !viewport.shouldLoadBottom()) {\n doAdjustAfterFetch(rid);\n } else {\n fetchNext((result) => {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.eof = true;\n }\n\n if (result.length > 0) {\n viewport.clipTop();\n buffer.append(result);\n }\n\n doAdjustAfterFetch(rid);\n });\n }\n } else { // scrolling up\n if (buffer.length && !viewport.shouldLoadTop()) {\n doAdjustAfterFetch(rid);\n } else {\n fetchPrevious((result) => {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.bof = true;\n // log 'bof is reached'\n }\n\n if (result.length > 0) {\n if (buffer.length) {\n viewport.clipBottom();\n }\n buffer.prepend(result);\n }\n\n doAdjustAfterFetch(rid);\n });\n }\n }\n }\n\n function resizeAndScrollHandler() {\n if (!$rootScope.$$phase && !adapter.isLoading && !adapter.disabled) {\n\n enqueueFetch(ridActual);\n\n if (pending.length) {\n unbindEvents();\n } else {\n adapter.calculateProperties();\n !$scope.$$phase && $scope.$digest();\n }\n }\n }\n\n function wheelHandler(event) {\n if (!adapter.disabled) {\n const scrollTop = viewport[0].scrollTop;\n const yMax = viewport[0].scrollHeight - viewport[0].clientHeight;\n\n if ((scrollTop === 0 && !buffer.bof) || (scrollTop === yMax && !buffer.eof)) {\n event.preventDefault();\n }\n }\n }\n }\n\n }\n ]);\n\n\n// WEBPACK FOOTER //\n// ./src/ui-scroll.js","/*!\r\n globals: angular, window\r\n List of used element methods available in JQuery but not in JQuery Lite\r\n element.before(elem)\r\n element.height()\r\n element.outerHeight(true)\r\n element.height(value) = only for Top/Bottom padding elements\r\n element.scrollTop()\r\n element.scrollTop(value)\r\n */\r\n\r\nexport default class JQLiteExtras {\r\n\r\n registerFor(element) {\r\n let convertToPx, css, getStyle, isWindow;\r\n // angular implementation blows up if elem is the window\r\n css = angular.element.prototype.css;\r\n\r\n element.prototype.css = function (name, value) {\r\n let self = this;\r\n let elem = self[0];\r\n if (!(!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style)) {\r\n return css.call(self, name, value);\r\n }\r\n };\r\n\r\n // as defined in angularjs v1.0.5\r\n isWindow = (obj) => obj && obj.document && obj.location && obj.alert && obj.setInterval;\r\n\r\n function scrollTo(self, direction, value) {\r\n let elem = self[0];\r\n let [method, prop, preserve] = {\r\n top: [\r\n 'scrollTop',\r\n 'pageYOffset',\r\n 'scrollLeft'\r\n ],\r\n left: [\r\n 'scrollLeft',\r\n 'pageXOffset',\r\n 'scrollTop'\r\n ]\r\n }[direction];\r\n\r\n const isValueDefined = typeof value !== 'undefined';\r\n if (isWindow(elem)) {\r\n if (isValueDefined) {\r\n return elem.scrollTo(self[preserve].call(self), value);\r\n }\r\n return (prop in elem) ? elem[prop] : elem.document.documentElement[method];\r\n } else {\r\n if (isValueDefined) {\r\n elem[method] = value;\r\n }\r\n return elem[method];\r\n }\r\n }\r\n\r\n if (window.getComputedStyle) {\r\n getStyle = (elem) => window.getComputedStyle(elem, null);\r\n convertToPx = (elem, value) => parseFloat(value);\r\n } else {\r\n getStyle = (elem) => elem.currentStyle;\r\n convertToPx = (elem, value) => {\r\n let left, result, rs, rsLeft, style;\r\n let core_pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\r\n let rnumnonpx = new RegExp('^(' + core_pnum + ')(?!px)[a-z%]+$', 'i');\r\n\r\n if (!rnumnonpx.test(value)) {\r\n return parseFloat(value);\r\n }\r\n\r\n // ported from JQuery\r\n style = elem.style;\r\n left = style.left;\r\n rs = elem.runtimeStyle;\r\n rsLeft = rs && rs.left;\r\n if (rs) {\r\n rs.left = style.left;\r\n }\r\n // put in the new values to get a computed style out\r\n style.left = value;\r\n result = style.pixelLeft;\r\n style.left = left;\r\n if (rsLeft) {\r\n rs.left = rsLeft;\r\n }\r\n return result;\r\n };\r\n }\r\n\r\n function getMeasurements(elem, measure) {\r\n let base, borderA, borderB, computedMarginA, computedMarginB, computedStyle, dirA, dirB, marginA, marginB, paddingA, paddingB;\r\n\r\n if (isWindow(elem)) {\r\n base = document.documentElement[{height: 'clientHeight', width: 'clientWidth'}[measure]];\r\n\r\n return {\r\n base: base,\r\n padding: 0,\r\n border: 0,\r\n margin: 0\r\n };\r\n }\r\n\r\n // Start with offset property\r\n [\r\n base,\r\n dirA,\r\n dirB\r\n ] = {\r\n width: [\r\n elem.offsetWidth,\r\n 'Left',\r\n 'Right'\r\n ],\r\n height: [\r\n elem.offsetHeight,\r\n 'Top',\r\n 'Bottom'\r\n ]\r\n }[measure];\r\n\r\n computedStyle = getStyle(elem);\r\n paddingA = convertToPx(elem, computedStyle['padding' + dirA]) || 0;\r\n paddingB = convertToPx(elem, computedStyle['padding' + dirB]) || 0;\r\n borderA = convertToPx(elem, computedStyle['border' + dirA + 'Width']) || 0;\r\n borderB = convertToPx(elem, computedStyle['border' + dirB + 'Width']) || 0;\r\n computedMarginA = computedStyle['margin' + dirA];\r\n computedMarginB = computedStyle['margin' + dirB];\r\n\r\n // I do not care for width for now, so this hack is irrelevant\r\n // if ( !supportsPercentMargin )\r\n // computedMarginA = hackPercentMargin( elem, computedStyle, computedMarginA )\r\n // computedMarginB = hackPercentMargin( elem, computedStyle, computedMarginB )\r\n marginA = convertToPx(elem, computedMarginA) || 0;\r\n marginB = convertToPx(elem, computedMarginB) || 0;\r\n\r\n return {\r\n base: base,\r\n padding: paddingA + paddingB,\r\n border: borderA + borderB,\r\n margin: marginA + marginB\r\n };\r\n }\r\n\r\n function getWidthHeight(elem, direction, measure) {\r\n let computedStyle, result;\r\n\r\n let measurements = getMeasurements(elem, direction);\r\n\r\n if (measurements.base > 0) {\r\n return {\r\n base: measurements.base - measurements.padding - measurements.border,\r\n outer: measurements.base,\r\n outerfull: measurements.base + measurements.margin\r\n }[measure];\r\n }\r\n\r\n // Fall back to computed then uncomputed css if necessary\r\n computedStyle = getStyle(elem);\r\n result = computedStyle[direction];\r\n\r\n if (result < 0 || result === null) {\r\n result = elem.style[direction] || 0;\r\n }\r\n\r\n // Normalize \"\", auto, and prepare for extra\r\n result = parseFloat(result) || 0;\r\n\r\n return {\r\n base: result - measurements.padding - measurements.border,\r\n outer: result,\r\n outerfull: result + measurements.padding + measurements.border + measurements.margin\r\n }[measure];\r\n }\r\n\r\n // define missing methods\r\n return angular.forEach({\r\n before(newElem) {\r\n var children, elem, i, j, parent, ref, self;\r\n self = this;\r\n elem = self[0];\r\n parent = self.parent();\r\n children = parent.contents();\r\n if (children[0] === elem) {\r\n return parent.prepend(newElem);\r\n } else {\r\n for (i = j = 1, ref = children.length - 1; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {\r\n if (children[i] === elem) {\r\n angular.element(children[i - 1]).after(newElem);\r\n return;\r\n }\r\n }\r\n throw new Error('invalid DOM structure ' + elem.outerHTML);\r\n }\r\n },\r\n height (value){\r\n var self;\r\n self = this;\r\n if (typeof value !== 'undefined') {\r\n if (Number.isInteger(value)) {\r\n value = value + 'px';\r\n }\r\n return css.call(self, 'height', value);\r\n } else {\r\n return getWidthHeight(this[0], 'height', 'base');\r\n }\r\n },\r\n outerHeight(option) {\r\n return getWidthHeight(this[0], 'height', option ? 'outerfull' : 'outer');\r\n },\r\n outerWidth(option) {\r\n return getWidthHeight(this[0], 'width', option ? 'outerfull' : 'outer');\r\n },\r\n\r\n /*\r\n The offset setter method is not implemented\r\n */\r\n offset(value) {\r\n let docElem, win;\r\n let self = this;\r\n let box = {\r\n top: 0,\r\n left: 0\r\n };\r\n let elem = self[0];\r\n let doc = elem && elem.ownerDocument;\r\n\r\n if (arguments.length) {\r\n if (value === undefined) {\r\n return self;\r\n }\r\n // TODO: implement setter\r\n throw new Error('offset setter method is not implemented');\r\n }\r\n\r\n if (!doc) {\r\n return;\r\n }\r\n\r\n docElem = doc.documentElement;\r\n\r\n // TODO: Make sure it's not a disconnected DOM node\r\n\r\n if (elem.getBoundingClientRect != null) {\r\n box = elem.getBoundingClientRect();\r\n }\r\n\r\n win = doc.defaultView || doc.parentWindow;\r\n\r\n return {\r\n top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),\r\n left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0)\r\n };\r\n },\r\n scrollTop(value) {\r\n return scrollTo(this, 'top', value);\r\n },\r\n scrollLeft(value) {\r\n return scrollTo(this, 'left', value);\r\n }\r\n }, (value, key) => {\r\n if (!element.prototype[key]) {\r\n return element.prototype[key] = value;\r\n }\r\n });\r\n }\r\n\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/jqLiteExtras.js","const hideClassToken = 'ng-ui-scroll-hide';\r\n\r\nexport default class ElementRoutines {\r\n\r\n static addCSSRules() {\r\n const selector = '.' + hideClassToken;\r\n const rules = 'display: none';\r\n const sheet = document.styleSheets[0];\r\n let index;\r\n try {\r\n index = sheet.cssRules.length;\r\n } catch (err) {\r\n index = 0;\r\n }\r\n if('insertRule' in sheet) {\r\n sheet.insertRule(selector + '{' + rules + '}', index);\r\n }\r\n else if('addRule' in sheet) {\r\n sheet.addRule(selector, rules, index);\r\n }\r\n }\r\n\r\n constructor($injector, $q) {\r\n this.$animate = ($injector.has && $injector.has('$animate')) ? $injector.get('$animate') : null;\r\n this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3;\r\n this.$q = $q;\r\n }\r\n\r\n hideElement(wrapper) {\r\n wrapper.element.addClass(hideClassToken);\r\n }\r\n\r\n showElement(wrapper) {\r\n wrapper.element.removeClass(hideClassToken);\r\n }\r\n\r\n insertElement(newElement, previousElement) {\r\n previousElement.after(newElement);\r\n return [];\r\n }\r\n\r\n removeElement(wrapper) {\r\n wrapper.element.remove();\r\n wrapper.scope.$destroy();\r\n return [];\r\n }\r\n\r\n insertElementAnimated(newElement, previousElement) {\r\n if (!this.$animate) {\r\n return this.insertElement(newElement, previousElement);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n // no need for parent - previous element is never null\r\n this.$animate.enter(newElement, null, previousElement, () => deferred.resolve());\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n // no need for parent - previous element is never null\r\n return [this.$animate.enter(newElement, null, previousElement)];\r\n }\r\n\r\n removeElementAnimated(wrapper) {\r\n if (!this.$animate) {\r\n return this.removeElement(wrapper);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n this.$animate.leave(wrapper.element, () => {\r\n wrapper.scope.$destroy();\r\n return deferred.resolve();\r\n });\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n return [(this.$animate.leave(wrapper.element)).then(() => wrapper.scope.$destroy())];\r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/elementRoutines.js","export default function ScrollBuffer(elementRoutines, bufferSize, startIndex) {\r\n const buffer = Object.create(Array.prototype);\r\n\r\n Object.assign(buffer, {\r\n size: bufferSize,\r\n\r\n reset(startIndex) {\r\n buffer.remove(0, buffer.length);\r\n buffer.eof = false;\r\n buffer.bof = false;\r\n buffer.first = startIndex;\r\n buffer.next = startIndex;\r\n buffer.minIndex = startIndex;\r\n buffer.maxIndex = startIndex;\r\n buffer.minIndexUser = null;\r\n buffer.maxIndexUser = null;\r\n },\r\n\r\n append(items) {\r\n items.forEach((item) => {\r\n ++buffer.next;\r\n buffer.insert('append', item);\r\n });\r\n buffer.maxIndex = buffer.eof ? buffer.next - 1 : Math.max(buffer.next - 1, buffer.maxIndex);\r\n },\r\n\r\n prepend(items) {\r\n items.reverse().forEach((item) => {\r\n --buffer.first;\r\n buffer.insert('prepend', item);\r\n });\r\n buffer.minIndex = buffer.bof ? buffer.minIndex = buffer.first : Math.min(buffer.first, buffer.minIndex);\r\n },\r\n\r\n /**\r\n * inserts wrapped element in the buffer\r\n * the first argument is either operation keyword (see below) or a number for operation 'insert'\r\n * for insert the number is the index for the buffer element the new one have to be inserted after\r\n * operations: 'append', 'prepend', 'insert', 'remove', 'update', 'none'\r\n */\r\n insert(operation, item, isTop) {\r\n const wrapper = {\r\n item: item\r\n };\r\n\r\n if (operation % 1 === 0) {// it is an insert\r\n wrapper.op = 'insert';\r\n buffer.splice(operation, 0, wrapper);\r\n if(isTop) {\r\n buffer.first--;\r\n }\r\n else {\r\n buffer.next++;\r\n }\r\n } else {\r\n wrapper.op = operation;\r\n switch (operation) {\r\n case 'append':\r\n buffer.push(wrapper);\r\n break;\r\n case 'prepend':\r\n buffer.unshift(wrapper);\r\n break;\r\n }\r\n }\r\n },\r\n\r\n // removes elements from buffer\r\n remove(arg1, arg2) {\r\n if (Number.isInteger(arg1)) {\r\n // removes items from arg1 (including) through arg2 (excluding)\r\n for (let i = arg1; i < arg2; i++) {\r\n elementRoutines.removeElement(buffer[i]);\r\n }\r\n return buffer.splice(arg1, arg2 - arg1);\r\n }\r\n // removes single item(wrapper) from the buffer\r\n buffer.splice(buffer.indexOf(arg1), 1);\r\n if(arg1._op === 'isTop' && buffer.first === this.getAbsMinIndex()) {\r\n this.incrementMinIndex();\r\n }\r\n else {\r\n this.decrementMaxIndex();\r\n }\r\n if(arg1._op === 'isTop') {\r\n buffer.first++;\r\n }\r\n else {\r\n buffer.next--;\r\n }\r\n if(!buffer.length) {\r\n buffer.first = 1;\r\n buffer.next = 1;\r\n }\r\n\r\n return elementRoutines.removeElementAnimated(arg1);\r\n },\r\n\r\n incrementMinIndex() {\r\n if(buffer.minIndexUser !== null) {\r\n if(buffer.minIndex > buffer.minIndexUser) {\r\n buffer.minIndexUser++;\r\n return;\r\n }\r\n if(buffer.minIndex === buffer.minIndexUser) {\r\n buffer.minIndexUser++;\r\n }\r\n }\r\n buffer.minIndex++;\r\n },\r\n\r\n decrementMaxIndex() {\r\n if(buffer.maxIndexUser !== null && buffer.maxIndex <= buffer.maxIndexUser) {\r\n buffer.maxIndexUser--;\r\n }\r\n buffer.maxIndex--;\r\n },\r\n\r\n getAbsMinIndex() {\r\n if(buffer.minIndexUser !== null) {\r\n return Math.min(buffer.minIndexUser, buffer.minIndex);\r\n }\r\n return buffer.minIndex;\r\n },\r\n\r\n getAbsMaxIndex() {\r\n if(buffer.maxIndexUser !== null) {\r\n return Math.max(buffer.maxIndexUser, buffer.maxIndex);\r\n }\r\n return buffer.maxIndex;\r\n },\r\n\r\n effectiveHeight(elements) {\r\n if (!elements.length) {\r\n return 0;\r\n }\r\n let top = Number.MAX_VALUE;\r\n let bottom = Number.NEGATIVE_INFINITY;\r\n elements.forEach((wrapper) => {\r\n if (wrapper.element[0].offsetParent) {\r\n // element style is not display:none\r\n top = Math.min(top, wrapper.element.offset().top);\r\n bottom = Math.max(bottom, wrapper.element.offset().top + wrapper.element.outerHeight(true));\r\n }\r\n });\r\n return Math.max(0, bottom - top);\r\n }\r\n\r\n });\r\n\r\n buffer.reset(startIndex);\r\n\r\n return buffer;\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/buffer.js","import Padding from './padding';\r\n\r\nexport default function Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding) {\r\n let topPadding = null;\r\n let bottomPadding = null;\r\n const viewport = viewportController && viewportController.viewport ? viewportController.viewport : angular.element(window);\r\n const container = viewportController && viewportController.container ? viewportController.container : undefined;\r\n const scope = viewportController && viewportController.scope ? viewportController.scope : $rootScope;\r\n\r\n viewport.css({\r\n 'overflow-anchor': 'none',\r\n 'overflow-y': 'auto',\r\n 'display': 'block'\r\n });\r\n\r\n function bufferPadding() {\r\n return viewport.outerHeight() * padding; // some extra space to initiate preload\r\n }\r\n\r\n Object.assign(viewport, {\r\n getScope() {\r\n return scope;\r\n },\r\n\r\n createPaddingElements(template) {\r\n topPadding = new Padding(template);\r\n bottomPadding = new Padding(template);\r\n element.before(topPadding.element);\r\n element.after(bottomPadding.element);\r\n topPadding.height(0);\r\n bottomPadding.height(0);\r\n },\r\n\r\n applyContainerStyle() {\r\n if (!container) {\r\n return true;\r\n }\r\n if(container !== viewport) {\r\n viewport.css('height', window.getComputedStyle(container[0]).height);\r\n }\r\n return viewport.height() > 0;\r\n },\r\n\r\n bottomDataPos() {\r\n let scrollHeight = viewport[0].scrollHeight;\r\n scrollHeight = scrollHeight != null ? scrollHeight : viewport[0].document.documentElement.scrollHeight;\r\n return scrollHeight - bottomPadding.height();\r\n },\r\n\r\n topDataPos() {\r\n return topPadding.height();\r\n },\r\n\r\n bottomVisiblePos() {\r\n return viewport.scrollTop() + viewport.outerHeight();\r\n },\r\n\r\n topVisiblePos() {\r\n return viewport.scrollTop();\r\n },\r\n\r\n insertElement(e, sibling) {\r\n return elementRoutines.insertElement(e, sibling || topPadding.element);\r\n },\r\n\r\n insertElementAnimated(e, sibling) {\r\n return elementRoutines.insertElementAnimated(e, sibling || topPadding.element);\r\n },\r\n\r\n shouldLoadBottom() {\r\n return !buffer.eof && viewport.bottomDataPos() < viewport.bottomVisiblePos() + bufferPadding();\r\n },\r\n\r\n clipBottom() {\r\n // clip the invisible items off the bottom\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.bottomDataPos() - viewport.bottomVisiblePos() - bufferPadding();\r\n\r\n for (let i = buffer.length - 1; i >= 0; i--) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n bottomPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n buffer.eof = false;\r\n buffer.remove(buffer.length - overage, buffer.length);\r\n buffer.next -= overage;\r\n viewport.adjustPaddings();\r\n }\r\n },\r\n\r\n shouldLoadTop() {\r\n return !buffer.bof && (viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding());\r\n },\r\n\r\n clipTop() {\r\n // clip the invisible items off the top\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\r\n\r\n for (let i = 0; i < buffer.length; i++) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n topPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n // we need to adjust top padding element before items are removed from top\r\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\r\n topPadding.height(topPadding.height() + overageHeight);\r\n buffer.bof = false;\r\n buffer.remove(0, overage);\r\n buffer.first += overage;\r\n }\r\n },\r\n\r\n adjustPaddings() {\r\n if (!buffer.length) {\r\n return;\r\n }\r\n\r\n // precise heights calculation based on items that are in buffer or that were in buffer once\r\n const visibleItemsHeight = buffer.reduce((summ, item) => summ + item.element.outerHeight(true), 0);\r\n\r\n let topPaddingHeight = 0, topCount = 0;\r\n topPadding.cache.forEach(item => {\r\n if(item.index < buffer.first) {\r\n topPaddingHeight += item.height;\r\n topCount++;\r\n }\r\n });\r\n\r\n let bottomPaddingHeight = 0, bottomCount = 0;\r\n bottomPadding.cache.forEach(item => {\r\n if(item.index >= buffer.next) {\r\n bottomPaddingHeight += item.height;\r\n bottomCount++;\r\n }\r\n });\r\n\r\n const totalHeight = visibleItemsHeight + topPaddingHeight + bottomPaddingHeight;\r\n const averageItemHeight = totalHeight / (topCount + bottomCount + buffer.length);\r\n\r\n // average heights calculation, items that have never been reached\r\n let adjustTopPadding = buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser;\r\n let adjustBottomPadding = buffer.maxIndexUser !== null && buffer.maxIndex < buffer.maxIndexUser;\r\n let topPaddingHeightAdd = adjustTopPadding ? (buffer.minIndex - buffer.minIndexUser) * averageItemHeight : 0;\r\n let bottomPaddingHeightAdd = adjustBottomPadding ? (buffer.maxIndexUser - buffer.maxIndex) * averageItemHeight : 0;\r\n\r\n // paddings combine adjustment\r\n topPadding.height(topPaddingHeight + topPaddingHeightAdd);\r\n bottomPadding.height(bottomPaddingHeight + bottomPaddingHeightAdd);\r\n },\r\n\r\n onAfterMinIndexSet(topPaddingHeightOld) {\r\n // additional scrollTop adjustment in case of datasource.minIndex external set\r\n if (buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser) {\r\n let diff = topPadding.height() - topPaddingHeightOld;\r\n viewport.scrollTop(viewport.scrollTop() + diff);\r\n while((diff -= viewport.scrollTop()) > 0) {\r\n bottomPadding.height(bottomPadding.height() + diff);\r\n viewport.scrollTop(viewport.scrollTop() + diff);\r\n }\r\n }\r\n },\r\n\r\n onAfterPrepend(updates) {\r\n if (!updates.prepended.length)\r\n return;\r\n const height = buffer.effectiveHeight(updates.prepended);\r\n const paddingHeight = topPadding.height() - height;\r\n if (paddingHeight >= 0) {\r\n topPadding.height(paddingHeight);\r\n }\r\n else {\r\n topPadding.height(0);\r\n viewport.scrollTop(viewport.scrollTop() - paddingHeight);\r\n }\r\n },\r\n\r\n resetTopPadding() {\r\n topPadding.height(0);\r\n topPadding.cache.clear();\r\n },\r\n\r\n resetBottomPadding() {\r\n bottomPadding.height(0);\r\n bottomPadding.cache.clear();\r\n },\r\n\r\n removeCacheItem(item, isTop) {\r\n topPadding.cache.remove(item, isTop);\r\n bottomPadding.cache.remove(item, isTop);\r\n },\r\n\r\n removeItem(item) {\r\n this.removeCacheItem(item);\r\n return buffer.remove(item);\r\n }\r\n });\r\n\r\n return viewport;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/viewport.js","// Can't just extend the Array, due to Babel does not support built-in classes extending\r\n// This solution was taken from https://stackoverflow.com/questions/46897414/es6-class-extends-array-workaround-for-es5-babel-transpile\r\nclass CacheProto {\r\n add(item) {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index === item.scope.$index) {\r\n this[i].height = item.element.outerHeight();\r\n return;\r\n }\r\n }\r\n this.push({\r\n index: item.scope.$index,\r\n height: item.element.outerHeight()\r\n });\r\n this.sort((a, b) => ((a.index < b.index) ? -1 : ((a.index > b.index) ? 1 : 0)));\r\n }\r\n\r\n remove(argument, _isTop) {\r\n const index = argument % 1 === 0 ? argument : argument.scope.$index;\r\n const isTop = argument % 1 === 0 ? _isTop : argument._op === 'isTop';\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index === index) {\r\n this.splice(i, 1);\r\n break;\r\n }\r\n }\r\n if(!isTop) {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index > index) {\r\n this[i].index--;\r\n }\r\n }\r\n }\r\n }\r\n\r\n clear() {\r\n this.length = 0;\r\n }\r\n}\r\n\r\nfunction Cache() {\r\n const instance = [];\r\n instance.push.apply(instance, arguments);\r\n Object.setPrototypeOf(instance, Cache.prototype);\r\n return instance;\r\n}\r\nCache.prototype = Object.create(Array.prototype);\r\nObject.getOwnPropertyNames(CacheProto.prototype).forEach(methodName =>\r\n Cache.prototype[methodName] = CacheProto.prototype[methodName]\r\n);\r\n\r\nfunction generateElement(template) {\r\n if(template.nodeType !== Node.ELEMENT_NODE) {\r\n throw new Error('ui-scroll directive requires an Element node for templating the view');\r\n }\r\n let element;\r\n switch (template.tagName.toLowerCase()) {\r\n case 'dl':\r\n throw new Error(`ui-scroll directive does not support <${template.tagName}> as a repeating tag: ${template.outerHTML}`);\r\n case 'tr':\r\n let table = angular.element('');\r\n element = table.find('tr');\r\n break;\r\n case 'li':\r\n element = angular.element('');\r\n break;\r\n default:\r\n element = angular.element('');\r\n }\r\n return element;\r\n}\r\n\r\nclass Padding {\r\n constructor(template) {\r\n this.element = generateElement(template);\r\n this.cache = new Cache();\r\n }\r\n\r\n height() {\r\n return this.element.height.apply(this.element, arguments);\r\n }\r\n}\r\n\r\nexport default Padding;\n\n\n// WEBPACK FOOTER //\n// ./src/modules/padding.js","class Adapter {\r\n\r\n constructor($scope, $parse, $attr, viewport, buffer, doAdjust, reload) {\r\n this.$parse = $parse;\r\n this.$attr = $attr;\r\n this.viewport = viewport;\r\n this.buffer = buffer;\r\n\r\n this.doAdjust = doAdjust;\r\n this.reload = reload;\r\n\r\n this.isLoading = false;\r\n this.disabled = false;\r\n\r\n const viewportScope = viewport.getScope();\r\n this.startScope = viewportScope.$parent ? viewportScope : $scope;\r\n\r\n this.publicContext = {};\r\n this.assignAdapter($attr.adapter);\r\n this.generatePublicContext();\r\n }\r\n\r\n assignAdapter(adapterAttr) {\r\n if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\\s+|\\s+$/gm, ''))) {\r\n return;\r\n }\r\n let adapterOnScope;\r\n\r\n try {\r\n this.$parse(adapterAttr).assign(this.startScope, {});\r\n adapterOnScope = this.$parse(adapterAttr)(this.startScope);\r\n }\r\n catch (error) {\r\n error.message = `Angular ui-scroll Adapter assignment exception.\\n` +\r\n `Can't parse \"${adapterAttr}\" expression.\\n` +\r\n error.message;\r\n throw error;\r\n }\r\n\r\n Object.assign(adapterOnScope, this.publicContext);\r\n this.publicContext = adapterOnScope;\r\n }\r\n\r\n generatePublicContext() {\r\n // these methods will be accessible out of ui-scroll via user defined adapter\r\n const publicMethods = ['reload', 'applyUpdates', 'append', 'prepend', 'isBOF', 'isEOF', 'isEmpty'];\r\n for (let i = publicMethods.length - 1; i >= 0; i--) {\r\n this.publicContext[publicMethods[i]] = this[publicMethods[i]].bind(this);\r\n }\r\n\r\n // these read-only props will be accessible out of ui-scroll via user defined adapter\r\n const publicProps = ['isLoading', 'topVisible', 'topVisibleElement', 'topVisibleScope', 'bottomVisible', 'bottomVisibleElement', 'bottomVisibleScope'];\r\n for (let i = publicProps.length - 1; i >= 0; i--) {\r\n let property, attr = this.$attr[publicProps[i]];\r\n Object.defineProperty(this, publicProps[i], {\r\n get: () => property,\r\n set: (value) => {\r\n property = value;\r\n this.publicContext[publicProps[i]] = value;\r\n if (attr) {\r\n this.$parse(attr).assign(this.startScope, value);\r\n }\r\n }\r\n });\r\n }\r\n\r\n // non-read-only public property\r\n Object.defineProperty(this.publicContext, 'disabled', {\r\n get: () => this.disabled,\r\n set: (value) => (!(this.disabled = value)) ? this.doAdjust() : null\r\n });\r\n }\r\n\r\n loading(value) {\r\n this.isLoading = value;\r\n }\r\n\r\n isBOF() {\r\n return this.buffer.bof;\r\n }\r\n\r\n isEOF() {\r\n return this.buffer.eof;\r\n }\r\n\r\n isEmpty() {\r\n return !this.buffer.length;\r\n }\r\n\r\n append(newItems) {\r\n this.buffer.append(newItems);\r\n this.doAdjust();\r\n this.viewport.clipTop();\r\n this.viewport.clipBottom();\r\n }\r\n\r\n prepend(newItems) {\r\n this.buffer.prepend(newItems);\r\n this.doAdjust();\r\n this.viewport.clipTop();\r\n this.viewport.clipBottom();\r\n }\r\n\r\n applyUpdates(arg1, arg2) {\r\n if (typeof arg1 === 'function') {\r\n this.applyUpdatesFunc(arg1);\r\n } else {\r\n this.applyUpdatesIndex(arg1, arg2);\r\n }\r\n this.doAdjust();\r\n }\r\n\r\n applyUpdatesFunc(cb) {\r\n this.buffer.slice(0).forEach((wrapper) => {\r\n // we need to do it on the buffer clone, because buffer content\r\n // may change as we iterate through\r\n this.applyUpdate(wrapper, cb(wrapper.item, wrapper.scope, wrapper.element));\r\n });\r\n }\r\n\r\n applyUpdatesIndex(index, newItems) {\r\n if (index % 1 !== 0) {\r\n throw new Error('applyUpdates - ' + index + ' is not a valid index (should be an integer)');\r\n }\r\n const _index = index - this.buffer.first;\r\n\r\n // apply updates only within buffer\r\n if (_index >= 0 && _index < this.buffer.length) {\r\n this.applyUpdate(this.buffer[_index], newItems);\r\n }\r\n // out-of-buffer case: deletion may affect Paddings\r\n else if(index >= this.buffer.getAbsMinIndex() && index <= this.buffer.getAbsMaxIndex()) {\r\n if(Array.isArray(newItems) && !newItems.length) {\r\n this.viewport.removeCacheItem(index, index === this.buffer.minIndex);\r\n if(index === this.buffer.getAbsMinIndex()) {\r\n this.buffer.incrementMinIndex();\r\n }\r\n else {\r\n this.buffer.decrementMaxIndex();\r\n }\r\n }\r\n }\r\n }\r\n\r\n applyUpdate(wrapper, newItems) {\r\n if (!Array.isArray(newItems)) {\r\n return;\r\n }\r\n let position = this.buffer.indexOf(wrapper);\r\n if (!newItems.reverse().some(newItem => newItem === wrapper.item)) {\r\n wrapper.op = 'remove';\r\n if(position === 0 && !newItems.length) {\r\n wrapper._op = 'isTop'; // to catch \"first\" edge case on remove\r\n }\r\n }\r\n newItems.forEach((newItem) => {\r\n if (newItem === wrapper.item) {\r\n position--;\r\n } else {\r\n // 3 parameter (isTop) is to catch \"first\" edge case on insert\r\n this.buffer.insert(position + 1, newItem, position === -1);\r\n }\r\n });\r\n }\r\n\r\n calculateProperties() {\r\n let rowTop = null, topHeight = 0;\r\n let topDone = false, bottomDone = false;\r\n const length = this.buffer.length;\r\n\r\n for (let i = 0; i < length; i++) {\r\n const item = this.buffer[i];\r\n const itemTop = item.element.offset().top;\r\n\r\n if (rowTop !== itemTop) { // a new row condition\r\n const itemHeight = item.element.outerHeight(true);\r\n const top = this.viewport.topDataPos() + topHeight + itemHeight;\r\n\r\n if (!topDone && top > this.viewport.topVisiblePos()) {\r\n topDone = true;\r\n this['topVisible'] = item.item;\r\n this['topVisibleElement'] = item.element;\r\n this['topVisibleScope'] = item.scope;\r\n }\r\n if (!bottomDone && (top >= this.viewport.bottomVisiblePos() || (i === length - 1 && this.isEOF()))) {\r\n bottomDone = true;\r\n this['bottomVisible'] = item.item;\r\n this['bottomVisibleElement'] = item.element;\r\n this['bottomVisibleScope'] = item.scope;\r\n }\r\n topHeight += itemHeight;\r\n }\r\n rowTop = itemTop;\r\n\r\n if (topDone && bottomDone) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n}\r\n\r\nexport default Adapter;\n\n\n// WEBPACK FOOTER //\n// ./src/modules/adapter.js"],"sourceRoot":""}
\ No newline at end of file
diff --git a/src/modules/elementRoutines.js b/src/modules/elementRoutines.js
index 39a14032..b4c7dda5 100644
--- a/src/modules/elementRoutines.js
+++ b/src/modules/elementRoutines.js
@@ -1,21 +1,29 @@
const hideClassToken = 'ng-ui-scroll-hide';
-function addCSSRule(sheet, selector, rules, index) {
- if('insertRule' in sheet) {
- sheet.insertRule(selector + '{' + rules + '}', index);
- }
- else if('addRule' in sheet) {
- sheet.addRule(selector, rules, index);
- }
-}
-
export default class ElementRoutines {
+ static addCSSRules() {
+ const selector = '.' + hideClassToken;
+ const rules = 'display: none';
+ const sheet = document.styleSheets[0];
+ let index;
+ try {
+ index = sheet.cssRules.length;
+ } catch (err) {
+ index = 0;
+ }
+ if('insertRule' in sheet) {
+ sheet.insertRule(selector + '{' + rules + '}', index);
+ }
+ else if('addRule' in sheet) {
+ sheet.addRule(selector, rules, index);
+ }
+ }
+
constructor($injector, $q) {
this.$animate = ($injector.has && $injector.has('$animate')) ? $injector.get('$animate') : null;
this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3;
this.$q = $q;
- addCSSRule(document.styleSheets[0], '.' + hideClassToken, 'display: none');
}
hideElement(wrapper) {
diff --git a/src/ui-scroll.js b/src/ui-scroll.js
index 3f70a02e..77a2e16b 100644
--- a/src/ui-scroll.js
+++ b/src/ui-scroll.js
@@ -7,9 +7,10 @@ import Adapter from './modules/adapter.js';
angular.module('ui.scroll', [])
.constant('JQLiteExtras', JQLiteExtras)
- .run(['JQLiteExtras', (JQLiteExtras) =>
- !window.jQuery ? (new JQLiteExtras()).registerFor(angular.element) : null
- ])
+ .run(['JQLiteExtras', (JQLiteExtras) => {
+ !window.jQuery ? (new JQLiteExtras()).registerFor(angular.element) : null;
+ ElementRoutines.addCSSRules();
+ }])
.directive('uiScrollViewport', function () {
return {