-
Notifications
You must be signed in to change notification settings - Fork 107
/
Copy pathui-scroll.min.js.map
1 lines (1 loc) · 82.5 KB
/
ui-scroll.min.js.map
1
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/modules/jqLiteExtras.js","webpack:///./src/modules/elementRoutines.js","webpack:///./src/modules/buffer.js","webpack:///./src/modules/padding.js","webpack:///./src/modules/viewport.js","webpack:///./src/modules/adapter.js","webpack:///./src/ui-scroll.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","JQLiteExtras","element","convertToPx","css","getStyle","isWindow","scrollTo","self","direction","elem","_top$left$direction","_slicedToArray","top","left","method","prop","preserve","isValueDefined","document","documentElement","getWidthHeight","measure","result","measurements","base","borderA","borderB","computedMarginA","computedMarginB","computedStyle","dirA","dirB","paddingA","paddingB","height","width","padding","border","margin","_width$height$measure","offsetWidth","offsetHeight","getMeasurements","outer","outerfull","style","parseFloat","angular","this","nodeType","obj","location","alert","setInterval","window","getComputedStyle","currentStyle","rs","rsLeft","RegExp","source","test","runtimeStyle","pixelLeft","forEach","before","newElem","children","j","parent","ref","contents","prepend","length","after","Error","outerHTML","isNumber","outerHeight","option","outerWidth","offset","docElem","win","box","doc","ownerDocument","arguments","undefined","getBoundingClientRect","defaultView","parentWindow","pageYOffset","scrollTop","clientTop","pageXOffset","scrollLeft","clientLeft","hideClassToken","ElementRoutines","$injector","$q","elementRoutines_classCallCheck","$animate","has","isAngularVersionLessThen1_3","version","major","minor","index","selector","rules","sheet","styleSheets","cssRules","err","insertRule","addRule","wrapper","addClass","removeClass","newElement","previousElement","remove","scope","$destroy","insertElement","deferred","defer","enter","resolve","promise","removeElement","leave","then","ScrollBuffer","elementRoutines","bufferSize","startIndex","buffer","Array","extend","size","reset","eof","bof","first","next","minIndex","maxIndex","minIndexUser","maxIndexUser","append","items","item","insert","Math","max","reverse","min","operation","isTop","op","splice","push","unshift","arg1","arg2","indexOf","_op","getAbsMinIndex","incrementMinIndex","decrementMaxIndex","removeElementAnimated","getAbsMaxIndex","effectiveHeight","elements","Number","MAX_VALUE","bottom","NEGATIVE_INFINITY","offsetParent","CacheProto","$index","rowHeight","sort","a","b","argument","_isTop","Cache","instance","apply","setPrototypeOf","getOwnPropertyNames","methodName","Padding","template","padding_classCallCheck","Node","ELEMENT_NODE","tagName","toLowerCase","concat","find","generateElement","cache","Viewport","viewportController","$rootScope","topPadding","bottomPadding","viewport","container","bufferPadding","overflow-anchor","overflow-y","display","getScope","createPaddingElements","applyContainerStyle","bottomDataPos","scrollHeight","topDataPos","bottomVisiblePos","topVisiblePos","e","sibling","insertElementAnimated","shouldLoadBottom","clipBottom","overage","overageHeight","itemHeight","emptySpaceHeight","add","adjustPaddings","shouldLoadTop","clipTop","visibleItemsHeight","reduce","summ","topPaddingHeight","topCount","bottomPaddingHeight","bottomCount","averageItemHeight","adjustTopPadding","adjustBottomPadding","topPaddingHeightAdd","bottomPaddingHeightAdd","onAfterMinIndexSet","topPaddingHeightOld","diff","onAfterPrepend","updates","prepended","paddingHeight","resetTopPadding","clear","resetBottomPadding","removeCacheItem","removeItem","Adapter","$scope","$parse","$attr","doAdjust","reload","adapter_classCallCheck","isLoading","disabled","viewportScope","startScope","$parent","publicContext","assignAdapter","adapter","generatePublicContext","adapterAttr","replace","adapterOnScope","assign","error","message","_this","publicMethods","publicProps","_loop","attr","set","newItems","applyUpdatesFunc","applyUpdatesIndex","cb","_this2","slice","applyUpdate","_index","isArray","_this3","position","some","newItem","rowTop","topHeight","topDone","bottomDone","itemTop","isEOF","constant","run","jQuery","registerFor","addCSSRules","directive","restrict","controller","child","console","$timeout","$interval","require","transclude","priority","terminal","link","controllers","linker","match","uiScroll","parseNumber","defaultValue","isFloat","floor","isNaN","parseNumericAttr","datasource","itemName","datasourceName","rowheight","ridActual","pending","persistDatasourceIndex","isDatasourceValid","toString","onRenderHandlers","propName","filter","handler","id","defineDatasourceIndex","propUserName","descriptor","getOwnPropertyDescriptor","fetchNext","success","count","fetchPrevious","isInvalid","rid","$$destroyed","unbindEvents","unbind","resizeAndScrollHandler","isElementVisible","insertWrapperContent","insertAfter","createElement","unregisterVisibilityWatcher","$watch","hideElement","promises","clone","transform","tdInitializer","uiScrollTdInitializer","linking","onLink","updatePaddings","animated","all","enqueueFetch","inserted","loading","fetch","processUpdates","toBePrepended","toBeRemoved","removed","updateDOM","$$phase","$digest","w","showElement","calculateProperties","doAdjustAfterFetch","shift","wheelHandler","event","yMax","clientHeight","preventDefault","$on","tryCount","timer","cancel","initialize"],"mappings":"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","file":"ui-scroll.min.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, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\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\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\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 */\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 (angular.isNumber(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","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}","export default function ScrollBuffer(elementRoutines, bufferSize, startIndex) {\r\n const buffer = Object.create(Array.prototype);\r\n\r\n angular.extend(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 (angular.isNumber(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}\r\n","// 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 = this.rowHeight || item.element.outerHeight();\r\n return;\r\n }\r\n }\r\n this.push({\r\n index: item.scope.$index,\r\n height: this.rowHeight || 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('<table><tr><td><div></div></td></tr></table>');\r\n element = table.find('tr');\r\n break;\r\n case 'li':\r\n element = angular.element('<li></li>');\r\n break;\r\n default:\r\n element = angular.element('<div></div>');\r\n }\r\n return element;\r\n}\r\n\r\nclass Padding {\r\n constructor(template,rowHeight) {\r\n this.element = generateElement(template);\r\n this.cache = new Cache();\r\n this.cache.rowHeight = rowHeight;\r\n }\r\n\r\n height() {\r\n // When called wit a parameter, this sets the height of the padding\r\n return this.element.height.apply(this.element, arguments);\r\n }\r\n}\r\n\r\nexport default Padding;","import Padding from './padding';\r\n\r\nexport default function Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding, rowHeight) {\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 angular.extend(viewport, {\r\n getScope() {\r\n return scope;\r\n },\r\n\r\n createPaddingElements(template) {\r\n topPadding = new Padding(template,rowHeight);\r\n bottomPadding = new Padding(template,rowHeight);\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 // Simple calculation now using the fixed rowHeight if available.\r\n // Might be optimized if needed\r\n for (let i = buffer.length - 1; i >= 0; i--) {\r\n itemHeight = rowHeight ? rowHeight : 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 // Simple calculation now using the fixed rowHeight if available.\r\n // Might be optimized if needed\r\n for (let i = 0; i < buffer.length; i++) {\r\n itemHeight = rowHeight ? rowHeight : 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 // outerHeight(true) == [height+ padding + border + margin]\r\n // The calculation bellow can certainly be replaced by:\r\n // const visibleItemsHeight = rowHeight ? rowHeight * buffer.length\r\n // : buffer.reduce((summ, item) => summ + item.element.outerHeight(true), 0);\r\n const visibleItemsHeight = buffer.reduce((summ, item) => summ + (rowHeight ? rowHeight : item.element.outerHeight(true)), 0);\r\n\r\n // Sinlarly, the calculation of the paddings (top & bottom) can certanly be optimizez\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; // outerHeight(true) is actually stored in this data member\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; // outerHeight(true) is actually stored in this data member\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","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 angular.extend(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(angular.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 (!angular.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;\r\n","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 parseNumber(value, defaultValue, isFloat) {\n if (!isFloat) {\n value = value === null ? defaultValue : Math.floor(value);\n }\n return isNaN(value) ? defaultValue : value;\n }\n\n function parseNumericAttr(value, defaultValue, isFloat) {\n const result = $parse(value)($scope);\n return parseNumber(result, defaultValue, isFloat);\n }\n\n const BUFFER_MIN = 3; // Minimum size of the data source request\n const BUFFER_DEFAULT = 10; // Default datasource request size\n const PADDING_MIN = 0.3; // Mininum # of rows in the padding area\n const PADDING_DEFAULT = 0.5; // Default # of rows in the padding area\n const START_INDEX_DEFAULT = 1; // Default start index when requestng the first data block\n const MAX_VIEWPORT_DELAY = 500; // Max time wait (ms) to get the viewport with an height>0\n const VIEWPORT_POLLING_INTERVAL = 50; // Interval used to check the initial viewport height\n\n let datasource = null;\n const itemName = match[1]; // Name of the index variable to publish\n const datasourceName = match[2]; // Name of the datasource to request the rows from\n const viewportController = controllers[0]; // ViewportController, as specified in the require option (http://websystique.com/angularjs/angularjs-custom-directives-controllers-require-option-guide/)\n const bufferSize = Math.max(BUFFER_MIN, parseNumericAttr($attr.bufferSize, BUFFER_DEFAULT)); \n const padding = Math.max(PADDING_MIN, parseNumericAttr($attr.padding, PADDING_DEFAULT, true));\n let startIndex = parseNumericAttr($attr.startIndex, START_INDEX_DEFAULT);\n\n // PHIL: Provide a fixed row height\n // \n const rowHeight = parseNumericAttr($attr.rowheight,null,false);\n\n // Revision IDs\n // \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, rowHeight);\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(angular.isNumber(datasource[propName])) {\n getter = datasource[propName];\n if(angular.isNumber(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 = parseNumber(arguments[0], START_INDEX_DEFAULT, false);\n }\n buffer.reset(startIndex);\n persistDatasourceIndex(datasource, 'minIndex');\n persistDatasourceIndex(datasource, 'maxIndex');\n doAdjust();\n }\n\n function isElementVisible(wrapper) {\n if(rowHeight) {\n return true;\n }\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 // Adjust the viewport paddings\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 if(!rowHeight) {\n !$scope.$$phase && !$rootScope.$$phase && $scope.$digest();\n }\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 if(!rowHeight) {\n // The digest is forced to calculate the height, which is not necessary when the height is knowm\n !$scope.$$phase && $scope.$digest();\n }\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"],"sourceRoot":""}