{"version":3,"sources":["webpack:///webpack/bootstrap 193204225f0698037b75","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","service","run","jqLiteExtras","window","jQuery","registerFor","element","directive","restrict","controller","scope","container","viewport","forEach","children","child","tagName","toLowerCase","console","$injector","$rootScope","$timeout","$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","datasource","itemName","datasourceName","viewportController","bufferSize","Math","max","padding","startIndex","ridActual","pending","elementRoutines","buffer","adapter","adjustBuffer","isDatasourceValid","isObject","isFunction","get","indexStore","defineProperty","propName","propUserName","descriptor","Object","getOwnPropertyDescriptor","set","length","topPaddingHeightOld","topDataPos","adjustPadding","adjustScrollTopAfterMinIndexSet","fetchNext","success","next","index","append","item","count","fetchPrevious","first","prepend","reload","clone","createPaddingElements","$destroy","remove","$on","unbindEvents","unbind","wheelHandler","bind","applyContainerStyle","isInvalid","rid","$$destroyed","bindEvents","resizeAndScrollHandler","resetTopPadding","resetBottomPadding","arguments","reset","isElementVisible","wrapper","height","offsetParent","visibilityWatcher","unregisterVisibilityWatcher","insertWrapperContent","insertAfter","createElement","insertElement","$watch","addClass","promises","sibling","undefined","transform","updateDOM","toBePrepended","toBeRemoved","inserted","i","op","unshift","push","concat","insertElementAnimated","$index","prepended","removed","animated","updatePaddings","updates","all","then","enqueueFetch","shouldLoadBottom","effectiveHeight","fetch","loading","shouldLoadTop","w","removeClass","calculateProperties","adjustBufferAfterFetch","adjustScrollTopAfterPrepend","shift","eof","clipTop","bof","clipBottom","$$phase","isLoading","disabled","$apply","event","scrollTop","yMax","scrollHeight","clientHeight","preventDefault","JQLiteExtras","convertToPx","css","getStyle","isWindow","prototype","name","self","elem","nodeType","style","call","obj","document","location","alert","setInterval","scrollTo","direction","top","left","method","prop","preserve","isDefined","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","isNumber","outerHeight","option","outerWidth","offset","docElem","win","box","doc","ownerDocument","getBoundingClientRect","defaultView","parentWindow","pageYOffset","clientTop","pageXOffset","scrollLeft","clientLeft","key","ElementRoutines","$animate","has","isAngularVersionLessThen1_3","version","major","minor","newElement","previousElement","deferred","defer","enter","resolve","promise","removeElement","leave","ScrollBuffer","create","Array","extend","size","minIndex","maxIndex","minIndexUser","maxIndexUser","items","insert","reverse","min","operation","splice","arg1","arg2","indexOf","removeElementAnimated","elements","Number","MAX_VALUE","bottom","MIN_VALUE","Viewport","topPadding","bottomPadding","bufferPadding","template","bottomDataPos","bottomVisiblePos","topVisiblePos","e","overage","overageHeight","itemHeight","emptySpaceHeight","cache","add","topPaddingHeight","reduce","summ","bottomPaddingHeight","visibleItemsHeight","averageItemHeight","adjustTopPadding","adjustBottomPadding","topPaddingHeightAdd","bottomPaddingHeightAdd","diff","paddingHeight","clear","Padding","Cache","table","find","Adapter","viewportScope","createValueInjector","topVisibleInjector","topVisibleElementInjector","topVisibleScopeInjector","isLoadingInjector","isBOF","isEOF","isEmpty","applyUpdates","slice","applyUpdate","newItems","itemTop","isNewRow","rowTop","topHeight","attribute","expression","assign","target","onControllerName","parseController","controllerName","on","candidate","candidateScope","candidateName","attr","hasOwnProperty","getPrototypeOf","constructor","controllerAsName","dotIndex","substr","isArray","keepIt","pos","newItem"],"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\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 193204225f0698037b75","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  .service('jqLiteExtras', () => new JQLiteExtras())\n  .run(['jqLiteExtras', (jqLiteExtras) =>\n    !window.jQuery ? jqLiteExtras.registerFor(angular.element) : null\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\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    '$q',\n    '$parse',\n    function (console, $injector, $rootScope, $timeout, $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          let 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\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        let elementRoutines = new ElementRoutines($injector, $q);\n        let buffer = new ScrollBuffer(elementRoutines, bufferSize);\n        let viewport = new Viewport(elementRoutines, buffer, element, viewportController, padding);\n        let adapter = new Adapter($rootScope, $parse, $attr, viewport, buffer, adjustBuffer, element);\n\n        if (viewportController) {\n          viewportController.adapter = adapter;\n        }\n\n        let isDatasourceValid = () => angular.isObject(datasource) && angular.isFunction(datasource.get);\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 indexStore = {};\n\n        function defineProperty(datasource, propName, propUserName) {\n          let descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n          if (!descriptor || (!descriptor.set && !descriptor.get)) {\n            Object.defineProperty(datasource, propName, {\n              set: (value) => {\n                indexStore[propName] = value;\n                $timeout(() => {\n                  buffer[propUserName] = value;\n                  if (!pending.length) {\n                    let topPaddingHeightOld = viewport.topDataPos();\n                    viewport.adjustPadding();\n                    if (propName === 'minIndex') {\n                      viewport.adjustScrollTopAfterMinIndexSet(topPaddingHeightOld);\n                    }\n                  }\n                });\n              },\n              get: () => indexStore[propName]\n            });\n          }\n        }\n\n        defineProperty(datasource, 'minIndex', 'minIndexUser');\n        defineProperty(datasource, 'maxIndex', 'maxIndexUser');\n\n        const fetchNext = (datasource.get.length !== 2) ? (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) ? (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        adapter.reload = reload;\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        $timeout(() => {\n          viewport.applyContainerStyle();\n          reload();\n        });\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          adjustBuffer();\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 (angular.isFunction(item.unregisterVisibilityWatcher)) {\n                item.unregisterVisibilityWatcher();\n                delete item.unregisterVisibilityWatcher;\n              }\n            });\n            adjustBuffer();\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          wrapper.element.addClass('ng-hide'); // hide inserted elements before data binding\n        }\n\n        function createElement(wrapper, insertAfter, insertElement) {\n          let promises = null;\n          let 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          if (adapter.transform)\n            adapter.transform(wrapper.scope, wrapper.element);\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(buffer.remove(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 adjustBuffer after animation completion\n          if (updates.animated.length) {\n            $q.all(updates.animated).then(() => {\n              viewport.adjustPadding();\n              adjustBuffer(rid);\n            });\n          } else {\n            viewport.adjustPadding();\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                fetch(rid);\n                adapter.loading(true);\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                fetch(rid);\n                adapter.loading(true);\n              }\n            }\n          }\n        }\n\n        function adjustBuffer(rid) {\n          if (!rid) { // dismiss pending requests\n            pending = [];\n            rid = ++ridActual;\n          }\n\n          let updates = updateDOM();\n\n          // We need the item bindings to be processed before we can do adjustment\n          $timeout(() => {\n\n            // show elements after data binging has been done\n            updates.inserted.forEach(w => w.element.removeClass('ng-hide'));\n            updates.prepended.forEach(w => w.element.removeClass('ng-hide'));\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\n        function adjustBufferAfterFetch(rid) {\n          let updates = updateDOM();\n\n          // We need the item bindings to be processed before we can do adjustment\n          $timeout(() => {\n\n            // show elements after data binging has been done\n            updates.inserted.forEach(w => w.element.removeClass('ng-hide'));\n            updates.prepended.forEach(w => w.element.removeClass('ng-hide'));\n\n            viewport.adjustScrollTopAfterPrepend(updates);\n\n            if (isInvalid(rid)) {\n              return;\n            }\n\n            updatePaddings(rid, updates);\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\n        function fetch(rid) {\n          if (pending[0]) {// scrolling down\n            if (buffer.length && !viewport.shouldLoadBottom()) {\n              adjustBufferAfterFetch(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                adjustBufferAfterFetch(rid);\n              });\n            }\n          } else {  // scrolling up\n            if (buffer.length && !viewport.shouldLoadTop()) {\n              adjustBufferAfterFetch(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                adjustBufferAfterFetch(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.$apply();\n            }\n          }\n        }\n\n        function wheelHandler(event) {\n          if (!adapter.disabled) {\n            let scrollTop = viewport[0].scrollTop;\n            let 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      if (isWindow(elem)) {\r\n        if (angular.isDefined(value)) {\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 (angular.isDefined(value)) {\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 (angular.isDefined(value)) {\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\n\n\n// WEBPACK FOOTER //\n// ./src/modules/jqLiteExtras.js","export 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  }\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) {\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) {\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      } 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\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\r\n      return elementRoutines.removeElementAnimated(arg1);\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.MIN_VALUE;\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  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, 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\r\n  viewport.css({\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    createPaddingElements(template) {\r\n      topPadding = new Padding(template);\r\n      bottomPadding = new Padding(template);\r\n      element.before(topPadding);\r\n      element.after(bottomPadding);\r\n    },\r\n\r\n    applyContainerStyle() {\r\n      if (container && container !== viewport) {\r\n        viewport.css('height', window.getComputedStyle(container[0]).height);\r\n      }\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);\r\n    },\r\n\r\n    insertElementAnimated(e, sibling) {\r\n      return elementRoutines.insertElementAnimated(e, sibling || topPadding);\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.adjustPadding();\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    adjustPadding() {\r\n      if (!buffer.length) {\r\n        return;\r\n      }\r\n\r\n      // precise heights calculation, items that were in buffer once\r\n      let topPaddingHeight = topPadding.cache.reduce((summ, item) => summ + (item.index < buffer.first ? item.height : 0), 0);\r\n      let bottomPaddingHeight = bottomPadding.cache.reduce((summ, item) => summ + (item.index >= buffer.next ? item.height : 0), 0);\r\n\r\n      // average item height based on buffer data\r\n      let visibleItemsHeight = buffer.reduce((summ, item) => summ + item.element.outerHeight(true), 0);\r\n      let averageItemHeight = (visibleItemsHeight + topPaddingHeight + bottomPaddingHeight) / (buffer.maxIndex - buffer.minIndex + 1);\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    adjustScrollTopAfterMinIndexSet(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      }\r\n    },\r\n\r\n    adjustScrollTopAfterPrepend(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\r\n  return viewport;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/viewport.js","function Cache() {\r\n  const cache = Object.create(Array.prototype);\r\n\r\n  angular.extend(cache, {\r\n    add(item) {\r\n      for (let i = cache.length - 1; i >= 0; i--) {\r\n        if (cache[i].index === item.scope.$index) {\r\n          cache[i].height = item.element.outerHeight();\r\n          return;\r\n        }\r\n      }\r\n      cache.push({\r\n        index: item.scope.$index,\r\n        height: item.element.outerHeight()\r\n      });\r\n    },\r\n    clear() {\r\n      cache.length = 0;\r\n    }\r\n  });\r\n\r\n  return cache;\r\n}\r\n\r\nexport default function Padding(template) {\r\n  let result;\r\n\r\n  switch (template.tagName) {\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      result = table.find('tr');\r\n      break;\r\n    case 'li':\r\n      result = angular.element('<li></li>');\r\n      break;\r\n    default:\r\n      result = angular.element('<div></div>');\r\n  }\r\n\r\n  result.cache = new Cache();\r\n\r\n  return result;\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/padding.js","export default function Adapter($rootScope, $parse, $attr, viewport, buffer, adjustBuffer, element) {\r\n  const viewportScope = viewport.scope() || $rootScope;\r\n  let disabled = false;\r\n  let self = this;\r\n\r\n  createValueInjector('adapter')(self);\r\n  let topVisibleInjector = createValueInjector('topVisible');\r\n  let topVisibleElementInjector = createValueInjector('topVisibleElement');\r\n  let topVisibleScopeInjector = createValueInjector('topVisibleScope');\r\n  let isLoadingInjector = createValueInjector('isLoading');\r\n\r\n  // Adapter API definition\r\n\r\n  Object.defineProperty(this, 'disabled', {\r\n    get: () => disabled,\r\n    set: (value) => (!(disabled = value)) ? adjustBuffer() : null\r\n  });\r\n\r\n  this.isLoading = false;\r\n  this.isBOF = () => buffer.bof;\r\n  this.isEOF = () => buffer.eof;\r\n  this.isEmpty = () => !buffer.length;\r\n\r\n  this.applyUpdates = (arg1, arg2) => {\r\n    if (angular.isFunction(arg1)) {\r\n      // arg1 is the updater function, arg2 is ignored\r\n      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        applyUpdate(wrapper, arg1(wrapper.item, wrapper.scope, wrapper.element));\r\n      });\r\n    } else {\r\n      // arg1 is item index, arg2 is the newItems array\r\n      if (arg1 % 1 !== 0) {// checking if it is an integer\r\n        throw new Error('applyUpdates - ' + arg1 + ' is not a valid index');\r\n      }\r\n\r\n      const index = arg1 - buffer.first;\r\n      if ((index >= 0 && index < buffer.length)) {\r\n        applyUpdate(buffer[index], arg2);\r\n      }\r\n    }\r\n\r\n    adjustBuffer();\r\n  };\r\n\r\n  this.append = (newItems) => {\r\n    buffer.append(newItems);\r\n    adjustBuffer();\r\n  };\r\n\r\n  this.prepend = (newItems) => {\r\n    buffer.prepend(newItems);\r\n    adjustBuffer();\r\n  };\r\n\r\n  this.loading = (value) => {\r\n    isLoadingInjector(value);\r\n  };\r\n\r\n  this.calculateProperties = () => {\r\n    let item, itemHeight, itemTop, isNewRow, rowTop = null;\r\n    let topHeight = 0;\r\n    for (let i = 0; i < buffer.length; i++) {\r\n      item = buffer[i];\r\n      itemTop = item.element.offset().top;\r\n      isNewRow = rowTop !== itemTop;\r\n      rowTop = itemTop;\r\n      if (isNewRow) {\r\n        itemHeight = item.element.outerHeight(true);\r\n      }\r\n      if (isNewRow && (viewport.topDataPos() + topHeight + itemHeight <= viewport.topVisiblePos())) {\r\n        topHeight += itemHeight;\r\n      } else {\r\n        if (isNewRow) {\r\n          topVisibleInjector(item.item);\r\n          topVisibleElementInjector(item.element);\r\n          topVisibleScopeInjector(item.scope);\r\n        }\r\n        break;\r\n      }\r\n    }\r\n  };\r\n\r\n  // private function definitions\r\n\r\n  function createValueInjector(attribute) {\r\n    let expression = $attr[attribute];\r\n    let scope = viewportScope;\r\n    let assign;\r\n    if (expression) {\r\n      // it is ok to have relaxed validation for the first part of the 'on' expression.\r\n      // additional validation will be done by the $parse service below\r\n      let match = expression.match(/^(\\S+)(?:\\s+on\\s+(\\w(?:\\w|\\d)*))?/);\r\n      if (!match)\r\n        throw new Error('Expected injection expression in form of \\'target\\' or \\'target on controller\\' but got \\'' + expression + '\\'');\r\n      let target = match[1];\r\n      let onControllerName = match[2];\r\n\r\n      let parseController = (controllerName, on) => {\r\n        let candidate = element;\r\n        while (candidate.length) {\r\n          let candidateScope = candidate.scope();\r\n          // ng-controller's \"Controller As\" parsing\r\n          let candidateName = (candidate.attr('ng-controller') || '').match(/(\\w(?:\\w|\\d)*)(?:\\s+as\\s+(\\w(?:\\w|\\d)*))?/);\r\n          if (candidateName && candidateName[on ? 1 : 2] === controllerName) {\r\n            scope = candidateScope;\r\n            return true;\r\n          }\r\n          // directive's/component's \"Controller As\" parsing\r\n          if (!on && candidateScope && candidateScope.hasOwnProperty(controllerName) && Object.getPrototypeOf(candidateScope[controllerName]).constructor.hasOwnProperty('$inject')) {\r\n            scope = candidateScope;\r\n            return true;\r\n          }\r\n          candidate = candidate.parent();\r\n        }\r\n      };\r\n\r\n      if (onControllerName) { // 'on' syntax DOM parsing (adapter=\"adapter on ctrl\")\r\n        scope = null;\r\n        parseController(onControllerName, true);\r\n        if (!scope) {\r\n          throw new Error('Failed to locate target controller \\'' + onControllerName + '\\' to inject \\'' + target + '\\'');\r\n        }\r\n      }\r\n      else { // try to parse DOM with 'Controller As' syntax (adapter=\"ctrl.adapter\")\r\n        let controllerAsName;\r\n        let dotIndex = target.indexOf('.');\r\n        if (dotIndex > 0) {\r\n          controllerAsName = target.substr(0, dotIndex);\r\n          parseController(controllerAsName, false);\r\n        }\r\n      }\r\n\r\n      assign = $parse(target).assign;\r\n    }\r\n    return (value) => {\r\n      if (self !== value) // just to avoid injecting adapter reference in the adapter itself. Kludgy, I know.\r\n        self[attribute] = value;\r\n      if (assign)\r\n        assign(scope, value);\r\n    };\r\n  }\r\n\r\n  function applyUpdate(wrapper, newItems) {\r\n    if (!angular.isArray(newItems)) {\r\n      return;\r\n    }\r\n\r\n    let keepIt;\r\n    let pos = (buffer.indexOf(wrapper)) + 1;\r\n\r\n    newItems.reverse().forEach((newItem) => {\r\n      if (newItem === wrapper.item) {\r\n        keepIt = true;\r\n        pos--;\r\n      } else {\r\n        buffer.insert(pos, newItem);\r\n      }\r\n    });\r\n\r\n    if (!keepIt) {\r\n      wrapper.op = 'remove';\r\n    }\r\n  }\r\n\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/adapter.js"],"sourceRoot":""}