From e4e62178cdcbb48343716cdb3b870667c41862a3 Mon Sep 17 00:00:00 2001 From: dhilt Date: Sun, 22 Oct 2017 13:29:44 +0300 Subject: [PATCH 01/14] applyUpdate and buffer first/next refactoring --- src/modules/adapter.js | 21 +++++++++++---------- src/modules/buffer.js | 22 ++++++++++++++++++++-- 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/src/modules/adapter.js b/src/modules/adapter.js index ed565d23..a3c39655 100644 --- a/src/modules/adapter.js +++ b/src/modules/adapter.js @@ -192,21 +192,22 @@ class Adapter { return; } - let keepIt; - let pos = (this.buffer.indexOf(wrapper)) + 1; + if (!newItems.reverse().some((newItem) => newItem === wrapper.item)) { + wrapper.op = 'remove'; + if(newItems.length) { + wrapper._op = 'replace'; // to catch "first" edge case on remove + } + } - newItems.reverse().forEach((newItem) => { + let position = (this.buffer.indexOf(wrapper)) + 1; + newItems.forEach((newItem) => { if (newItem === wrapper.item) { - keepIt = true; - pos--; + position--; } else { - this.buffer.insert(pos, newItem); + // 3 parametr is to catch "first" edge case on insert + this.buffer.insert(position, newItem, position === 0); } }); - - if (!keepIt) { - wrapper.op = 'remove'; - } } } diff --git a/src/modules/buffer.js b/src/modules/buffer.js index 3a60eacc..1fb6d5c5 100644 --- a/src/modules/buffer.js +++ b/src/modules/buffer.js @@ -38,7 +38,7 @@ export default function ScrollBuffer(elementRoutines, bufferSize) { * for insert the number is the index for the buffer element the new one have to be inserted after * operations: 'append', 'prepend', 'insert', 'remove', 'update', 'none' */ - insert(operation, item) { + insert(operation, item, isTop) { const wrapper = { item: item }; @@ -46,6 +46,12 @@ export default function ScrollBuffer(elementRoutines, bufferSize) { if (operation % 1 === 0) {// it is an insert wrapper.op = 'insert'; buffer.splice(operation, 0, wrapper); + if(isTop) { + buffer.first--; + } + else { + buffer.next++; + } } else { wrapper.op = operation; switch (operation) { @@ -70,7 +76,19 @@ export default function ScrollBuffer(elementRoutines, bufferSize) { return buffer.splice(arg1, arg2 - arg1); } // removes single item(wrapper) from the buffer - buffer.splice(buffer.indexOf(arg1), 1); + let removedIndex = buffer.indexOf(arg1); + buffer.splice(removedIndex, 1); + if(removedIndex === 0 && arg1._op !== 'replace') { + // move buffer.first only when deleting first item without replacing it + buffer.first++; + } + else { + buffer.next--; + } + if(!buffer.length) { + buffer.first = 1; + buffer.next = 1; + } return elementRoutines.removeElementAnimated(arg1); }, From 4965a4b3448141c1fdf69dc3b276917ca67386d1 Mon Sep 17 00:00:00 2001 From: dhilt Date: Sun, 22 Oct 2017 13:30:20 +0300 Subject: [PATCH 02/14] adapter spec refactoring --- test/AdapterTestsSpec.js | 63 ++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/test/AdapterTestsSpec.js b/test/AdapterTestsSpec.js index cf3c7734..ec3e1392 100644 --- a/test/AdapterTestsSpec.js +++ b/test/AdapterTestsSpec.js @@ -173,15 +173,15 @@ describe('uiScroll', function () { var row2 = viewport.children()[1]; expect(row2.tagName.toLowerCase()).toBe('div'); - expect(row2.innerHTML).toBe('1: two'); + expect(row2.innerHTML).toBe('2: two'); var row3 = viewport.children()[2]; expect(row3.tagName.toLowerCase()).toBe('div'); - expect(row3.innerHTML).toBe('2: three'); + expect(row3.innerHTML).toBe('3: three'); expect(scope.adapter).toBeTruthy(); - expect(scope.adapter.topVisibleElement[0].innerHTML).toBe('1: two'); - expect(scope.adapter.bottomVisibleElement[0].innerHTML).toBe('2: three'); + expect(scope.adapter.topVisibleElement[0].innerHTML).toBe('2: two'); + expect(scope.adapter.bottomVisibleElement[0].innerHTML).toBe('3: three'); } ); }); @@ -257,35 +257,36 @@ describe('uiScroll', function () { var row0 = viewport.children()[1]; expect(row0.tagName.toLowerCase()).toBe('div'); - expect(row0.innerHTML).toBe('1: before one'); + expect(row0.innerHTML).toBe('0: before one'); var row1 = viewport.children()[2]; expect(row1.tagName.toLowerCase()).toBe('div'); - expect(row1.innerHTML).toBe('2: one'); + expect(row1.innerHTML).toBe('1: one'); var row2 = viewport.children()[3]; expect(row2.tagName.toLowerCase()).toBe('div'); - expect(row2.innerHTML).toBe('3: two'); + expect(row2.innerHTML).toBe('2: two'); var row3 = viewport.children()[4]; expect(row3.tagName.toLowerCase()).toBe('div'); - expect(row3.innerHTML).toBe('4: three'); + expect(row3.innerHTML).toBe('3: three'); expect(scope.adapter).toBeTruthy(); - expect(scope.adapter.topVisibleElement[0].innerHTML).toBe('1: before one'); - expect(scope.adapter.bottomVisibleElement[0].innerHTML).toBe('4: three'); + expect(scope.adapter.topVisibleElement[0].innerHTML).toBe('0: before one'); + expect(scope.adapter.bottomVisibleElement[0].innerHTML).toBe('3: three'); } ); }); it('should insert a new element after selected (first) row', function () { + var scrollSettings = {datasource: 'myObjectDatasource', adapter: 'adapter', template: '{{$index}}: {{item.text}}'}; runTest(scrollSettings, function (viewport, scope) { scope.adapter.applyUpdates( function (item) { - if (item === 'one') - return [item, 'after one']; + if (item.text === 'one') + return [item, {text: 'after one'}]; } ); @@ -535,15 +536,15 @@ describe('uiScroll', function () { var row2 = viewport.children()[1]; expect(row2.tagName.toLowerCase()).toBe('div'); - expect(row2.innerHTML).toBe('1: two'); + expect(row2.innerHTML).toBe('2: two'); var row3 = viewport.children()[2]; expect(row3.tagName.toLowerCase()).toBe('div'); - expect(row3.innerHTML).toBe('2: three'); + expect(row3.innerHTML).toBe('3: three'); expect(scope.adapter).toBeTruthy(); - expect(scope.adapter.topVisibleElement[0].innerHTML).toBe('1: two'); - expect(scope.adapter.bottomVisibleElement[0].innerHTML).toBe('2: three'); + expect(scope.adapter.topVisibleElement[0].innerHTML).toBe('2: two'); + expect(scope.adapter.bottomVisibleElement[0].innerHTML).toBe('3: three'); } ); }); @@ -604,23 +605,23 @@ describe('uiScroll', function () { var row0 = viewport.children()[1]; expect(row0.tagName.toLowerCase()).toBe('div'); - expect(row0.innerHTML).toBe('1: before one'); + expect(row0.innerHTML).toBe('0: before one'); var row1 = viewport.children()[2]; expect(row1.tagName.toLowerCase()).toBe('div'); - expect(row1.innerHTML).toBe('2: one'); + expect(row1.innerHTML).toBe('1: one'); var row2 = viewport.children()[3]; expect(row2.tagName.toLowerCase()).toBe('div'); - expect(row2.innerHTML).toBe('3: two'); + expect(row2.innerHTML).toBe('2: two'); var row3 = viewport.children()[4]; expect(row3.tagName.toLowerCase()).toBe('div'); - expect(row3.innerHTML).toBe('4: three'); + expect(row3.innerHTML).toBe('3: three'); expect(scope.adapter).toBeTruthy(); - expect(scope.adapter.topVisibleElement[0].innerHTML).toBe('1: before one'); - expect(scope.adapter.bottomVisibleElement[0].innerHTML).toBe('4: three'); + expect(scope.adapter.topVisibleElement[0].innerHTML).toBe('0: before one'); + expect(scope.adapter.bottomVisibleElement[0].innerHTML).toBe('3: three'); } ); }); @@ -816,35 +817,35 @@ describe('uiScroll', function () { row1 = viewport.children()[1]; expect(row1.tagName.toLowerCase()).toBe('div'); - expect(row1.innerHTML).toBe('1: one *1 before 1'); + expect(row1.innerHTML).toBe('-1: one *1 before 1'); row1 = viewport.children()[2]; expect(row1.tagName.toLowerCase()).toBe('div'); - expect(row1.innerHTML).toBe('2: one *1 before 2'); + expect(row1.innerHTML).toBe('0: one *1 before 2'); row1 = viewport.children()[3]; expect(row1.tagName.toLowerCase()).toBe('div'); - expect(row1.innerHTML).toBe('3: one *1'); + expect(row1.innerHTML).toBe('1: one *1'); row1 = viewport.children()[4]; expect(row1.tagName.toLowerCase()).toBe('div'); - expect(row1.innerHTML).toBe('4: one *1 after 1'); + expect(row1.innerHTML).toBe('2: one *1 after 1'); row1 = viewport.children()[5]; expect(row1.tagName.toLowerCase()).toBe('div'); - expect(row1.innerHTML).toBe('5: one *1 after 2'); + expect(row1.innerHTML).toBe('3: one *1 after 2'); row2 = viewport.children()[6]; expect(row2.tagName.toLowerCase()).toBe('div'); - expect(row2.innerHTML).toBe('6: two'); + expect(row2.innerHTML).toBe('4: two'); row3 = viewport.children()[7]; expect(row3.tagName.toLowerCase()).toBe('div'); - expect(row3.innerHTML).toBe('7: three'); + expect(row3.innerHTML).toBe('5: three'); expect(scope.adapter).toBeTruthy(); - expect(scope.adapter.topVisibleElement[0].innerHTML).toBe('1: one *1 before 1'); - expect(scope.adapter.bottomVisibleElement[0].innerHTML).toBe('7: three'); + expect(scope.adapter.topVisibleElement[0].innerHTML).toBe('-1: one *1 before 1'); + expect(scope.adapter.bottomVisibleElement[0].innerHTML).toBe('5: three'); } ); }); From 151fb92e6b89b86cd49f327fb2cb05548c1c60fd Mon Sep 17 00:00:00 2001 From: dhilt Date: Sun, 22 Oct 2017 13:35:38 +0300 Subject: [PATCH 03/14] adapter sync demo refactoring --- demo/adapterSync/adapterSync.html | 35 ++++++++++--------- demo/adapterSync/adapterSync.js | 58 +++++++++++++++++++++++-------- 2 files changed, 62 insertions(+), 31 deletions(-) diff --git a/demo/adapterSync/adapterSync.html b/demo/adapterSync/adapterSync.html index f844fe1b..4457922b 100644 --- a/demo/adapterSync/adapterSync.html +++ b/demo/adapterSync/adapterSync.html @@ -3,7 +3,7 @@ Adapter sync - + @@ -16,9 +16,12 @@ .remove:hover { color: #a00; } + .viewport2 .uid { + font-size: x-small; + } - +
@@ -58,22 +61,22 @@

Adapter: append, prepend and remove

-
- - - -
+
+ + + +
-
+
-
    -
  • -
    - {{item.content}} ({{item.id}}) - [x] -
    -
  • -
+
    +
  • +
    + {{$index}}: {{item.content}} ({{item.id}}) + [x] +
    +
  • +
diff --git a/demo/adapterSync/adapterSync.js b/demo/adapterSync/adapterSync.js index a7c363a5..f991272e 100644 --- a/demo/adapterSync/adapterSync.js +++ b/demo/adapterSync/adapterSync.js @@ -13,6 +13,8 @@ app.factory('Server', [ data: [], + absIndex: 1, + generateId: function () { var d = '-'; function S4() { @@ -21,11 +23,11 @@ app.factory('Server', [ return (S4() + S4() + d + S4() + d + S4() + d + S4() + d + S4() + S4() + S4()); }, - generateItem: function (number) { + generateItem: function (index) { return { - index: number, + index: index, id: this.generateId(), - content: 'Item #' + number + content: 'Item #' + this.absIndex++ } }, @@ -91,10 +93,29 @@ app.factory('Server', [ for (var j = i; j < length - 1; j++) { this.data[j].index--; } + this.setIndicies(); return this.returnDeferredResult(true); } } return this.returnDeferredResult(false); + }, + + setIndicies: function() { + if(!this.data.length) { + this.firstIndex = 1; + this.lastIndex = 1; + return; + } + this.firstIndex = this.data[0].index; + this.lastIndex = this.data[0].index; + for (var i = this.data.length - 1; i >= 0; i--) { + if(this.data[i].index > this.lastIndex) { + this.lastIndex = this.data[i].index; + } + if(this.data[i].index < this.firstIndex) { + this.firstIndex = this.data[i].index; + } + } } }; @@ -109,7 +130,9 @@ app.factory('Server', [ app.controller('mainController', [ '$scope', 'Server', function ($scope, Server) { - $scope.datasource = { + var ctrl = this; + + ctrl.datasource = { get: function (index, count, success) { console.log('request by index = ' + index + ', count = ' + count); Server.request(index, count).then(function (result) { @@ -121,34 +144,39 @@ app.controller('mainController', [ } }; - $scope.prepend = function () { + $scope.$watch('adapter', (prev, next) => { + console.log('The adapter has been initialized'); + }); + + ctrl.prepend = function () { Server.prependItem(' ***').then(function (newItem) { - if ($scope.adapter.isBOF()) { - $scope.adapter.prepend([newItem]); + if (ctrl.adapter.isBOF()) { + ctrl.adapter.prepend([newItem]); } }); }; - $scope.append = function () { + ctrl.append = function () { Server.appendItem(' ***').then(function (newItem) { - if ($scope.adapter.isEOF()) { - $scope.adapter.append([newItem]); + if (ctrl.adapter.isEOF()) { + ctrl.adapter.append([newItem]); } }); }; - /*$scope.removeAll = function () { - $scope.adapter.applyUpdates(function (item) { + ctrl.removeAll = function () { + ctrl.adapter.applyUpdates(function (item) { if (item.id) { + Server.removeItemById(item.id); return []; } }); - };*/ + }; - $scope.remove = function (itemRemove) { + ctrl.remove = function (itemRemove) { Server.removeItemById(itemRemove.id).then(function (result) { if (result) { - $scope.adapter.applyUpdates(function (item) { + ctrl.adapter.applyUpdates(function (item) { if (item.id === itemRemove.id) { return []; } From 806624175149ea736408df5aed7a21ae1a60c0dd Mon Sep 17 00:00:00 2001 From: dhilt Date: Mon, 23 Oct 2017 16:49:23 +0300 Subject: [PATCH 04/14] buffer.first adjustment refactoring --- src/modules/adapter.js | 10 +++++----- src/modules/buffer.js | 6 ++---- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/modules/adapter.js b/src/modules/adapter.js index a3c39655..68a83c3e 100644 --- a/src/modules/adapter.js +++ b/src/modules/adapter.js @@ -192,20 +192,20 @@ class Adapter { return; } + let position = (this.buffer.indexOf(wrapper)); if (!newItems.reverse().some((newItem) => newItem === wrapper.item)) { wrapper.op = 'remove'; - if(newItems.length) { - wrapper._op = 'replace'; // to catch "first" edge case on remove + if(position === 0 && !newItems.length) { + wrapper._op = 'isTop'; // to catch "first" edge case on remove } } - let position = (this.buffer.indexOf(wrapper)) + 1; newItems.forEach((newItem) => { if (newItem === wrapper.item) { position--; } else { - // 3 parametr is to catch "first" edge case on insert - this.buffer.insert(position, newItem, position === 0); + // 3 parameter (isTop) is to catch "first" edge case on insert + this.buffer.insert(position + 1, newItem, position === -1); } }); } diff --git a/src/modules/buffer.js b/src/modules/buffer.js index 1fb6d5c5..83ca10ec 100644 --- a/src/modules/buffer.js +++ b/src/modules/buffer.js @@ -76,10 +76,8 @@ export default function ScrollBuffer(elementRoutines, bufferSize) { return buffer.splice(arg1, arg2 - arg1); } // removes single item(wrapper) from the buffer - let removedIndex = buffer.indexOf(arg1); - buffer.splice(removedIndex, 1); - if(removedIndex === 0 && arg1._op !== 'replace') { - // move buffer.first only when deleting first item without replacing it + buffer.splice(buffer.indexOf(arg1), 1); + if(arg1._op === 'isTop') { buffer.first++; } else { From 385cd57819780f52e33e22d8af182084154d7e97 Mon Sep 17 00:00:00 2001 From: dhilt Date: Mon, 23 Oct 2017 20:13:10 +0300 Subject: [PATCH 05/14] padding cache "first" edge case fix --- src/modules/padding.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/modules/padding.js b/src/modules/padding.js index 761e4ee6..2d9166b6 100644 --- a/src/modules/padding.js +++ b/src/modules/padding.js @@ -16,16 +16,18 @@ function Cache() { cache.sort((a, b) => ((a.index < b.index) ? -1 : ((a.index > b.index) ? 1 : 0))); }, - remove(item) { + remove(itemToRemove) { for (let i = cache.length - 1; i >= 0; i--) { - if (cache[i].index === item.scope.$index) { + if (cache[i].index === itemToRemove.scope.$index) { cache.splice(i, 1); break; } } - for (let i = cache.length - 1; i >= 0; i--) { - if (cache[i].index > item.scope.$index) { - cache[i].index--; + if(itemToRemove._op !== 'isTop') { + for (let i = cache.length - 1; i >= 0; i--) { + if (cache[i].index > itemToRemove.scope.$index) { + cache[i].index--; + } } } }, From a1efdfb926a494f0d521f9d6945da76290462135 Mon Sep 17 00:00:00 2001 From: dhilt Date: Tue, 24 Oct 2017 01:56:08 +0300 Subject: [PATCH 06/14] Padding cache Array prototype refactoring --- src/modules/padding.js | 65 +++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/src/modules/padding.js b/src/modules/padding.js index 2d9166b6..5993f8fe 100644 --- a/src/modules/padding.js +++ b/src/modules/padding.js @@ -1,45 +1,44 @@ -function Cache() { - const cache = Object.create(Array.prototype); - - angular.extend(cache, { - add(item) { - for (let i = cache.length - 1; i >= 0; i--) { - if (cache[i].index === item.scope.$index) { - cache[i].height = item.element.outerHeight(); - return; - } +const CacheFactory = { + add(item) { + for (let i = this.length - 1; i >= 0; i--) { + if (this[i].index === item.scope.$index) { + this[i].height = item.element.outerHeight(); + return; } - cache.push({ - index: item.scope.$index, - height: item.element.outerHeight() - }); - cache.sort((a, b) => ((a.index < b.index) ? -1 : ((a.index > b.index) ? 1 : 0))); - }, + } + this.push({ + index: item.scope.$index, + height: item.element.outerHeight() + }); + this.sort((a, b) => ((a.index < b.index) ? -1 : ((a.index > b.index) ? 1 : 0))); + }, - remove(itemToRemove) { - for (let i = cache.length - 1; i >= 0; i--) { - if (cache[i].index === itemToRemove.scope.$index) { - cache.splice(i, 1); - break; - } + remove(itemToRemove) { + for (let i = this.length - 1; i >= 0; i--) { + if (this[i].index === itemToRemove.scope.$index) { + this.splice(i, 1); + break; } - if(itemToRemove._op !== 'isTop') { - for (let i = cache.length - 1; i >= 0; i--) { - if (cache[i].index > itemToRemove.scope.$index) { - cache[i].index--; - } + } + if(itemToRemove._op !== 'isTop') { + for (let i = this.length - 1; i >= 0; i--) { + if (this[i].index > itemToRemove.scope.$index) { + this[i].index--; } } - }, - - clear() { - cache.length = 0; } - }); + }, + + clear() { + this.length = 0; + } +}; - return cache; +function Cache() { + return Object.assign(Object.create(Array.prototype), CacheFactory); } + export default function Padding(template) { let result; From 1381debe2166d02079b67e673039488fc6cf5be7 Mon Sep 17 00:00:00 2001 From: NA Date: Tue, 24 Oct 2017 05:29:31 +0300 Subject: [PATCH 07/14] Padding Cache ES6 class refactoring --- src/modules/padding.js | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/modules/padding.js b/src/modules/padding.js index 5993f8fe..30584b0d 100644 --- a/src/modules/padding.js +++ b/src/modules/padding.js @@ -1,4 +1,6 @@ -const CacheFactory = { +// Can't just extend the Array, due to Babel does not support built-in classes extending +// This solution was taken from https://stackoverflow.com/questions/46897414/es6-class-extends-array-workaround-for-es5-babel-transpile +class CacheProto { add(item) { for (let i = this.length - 1; i >= 0; i--) { if (this[i].index === item.scope.$index) { @@ -11,7 +13,7 @@ const CacheFactory = { height: item.element.outerHeight() }); this.sort((a, b) => ((a.index < b.index) ? -1 : ((a.index > b.index) ? 1 : 0))); - }, + } remove(itemToRemove) { for (let i = this.length - 1; i >= 0; i--) { @@ -27,7 +29,7 @@ const CacheFactory = { } } } - }, + } clear() { this.length = 0; @@ -35,9 +37,15 @@ const CacheFactory = { }; function Cache() { - return Object.assign(Object.create(Array.prototype), CacheFactory); + const instance = []; + instance.push.apply(instance, arguments); + Object.setPrototypeOf(instance, Cache.prototype); + return instance; } - +Cache.prototype = Object.create(Array.prototype); +Object.getOwnPropertyNames(CacheProto.prototype).forEach(methodName => + Cache.prototype[methodName] = CacheProto.prototype[methodName] +); export default function Padding(template) { let result; From bf8dbd92f7e44079761be57981cc470aca7a0961 Mon Sep 17 00:00:00 2001 From: NA Date: Tue, 24 Oct 2017 06:00:56 +0300 Subject: [PATCH 08/14] Adapter sync demo updates --- demo/adapterSync/adapterSync.html | 98 +++++++++++++++---------------- demo/adapterSync/adapterSync.js | 10 +--- 2 files changed, 52 insertions(+), 56 deletions(-) diff --git a/demo/adapterSync/adapterSync.html b/demo/adapterSync/adapterSync.html index 4457922b..11cfdaae 100644 --- a/demo/adapterSync/adapterSync.html +++ b/demo/adapterSync/adapterSync.html @@ -1,65 +1,65 @@ - - Adapter sync - - - - - +
- browse other examples + browse other examples -

Adapter: append, prepend and remove sync

+

Adapter: append, prepend and remove sync

-
-

- In this demo we are playing with adding/removing items via adapter append, prepend and applyUpdates methods. - All changes have to be synced and stored on the back end. - For this purpose a special Server factory was introduced to emulate the remote. - Some public methods are implemented by this Server factory:
-

    -
  • - appendItem(params) to add one new item (based on params) to the end of the remote data set, -
  • -
  • - prependItem(params) to add one new item (based on params) in the beginning of the remote data - set, -
  • -
  • - removeItemById(id) remove one item (based on id) form the remote data set, - set, -
  • -
  • - request(index, count) just to fetch a bunch of items for the viewport. -
  • -
- The initial data set consists of 90 items and can be extended unlimitedly. -

-

Follow the sources of the demo! The implementation of the Server factory is not so trivial, it is based on - indexes variations. Also you may see that new items would not be appended (adapter.append()) to the - viewport immediately if the EOF (end of file) is not reached. The same is true for prepend operation - (adapter.prepend()): BOF (begin of file) must be reached, otherwise your new item will be rendered - only after scrolling to the very top... This is important to build proper UI. -

-
+
+

+ In this demo we are playing with adding/removing items via adapter append, prepend and applyUpdates methods. + All changes made on the front end have to be synced and stored on the back end. + For this purpose a special Server factory was introduced to emulate the remote. + The following public methods are implemented by this Server factory:
+

    +
  • + appendItem(params) to add one new item (based on params) to the end of the remote data set, +
  • +
  • + prependItem(params) to add one new item (based on params) to the beginning of the remote data + set, +
  • +
  • + removeItemById(id) remove one item (based on id) form the remote data set, + set, +
  • +
  • + request(index, count) just to fetch a bunch of items for the viewport. +
  • +
+ The initial data set consists of 40 items and can be extended unlimitedly. +

+

Follow the sources of the demo! The implementation of the Server factory is not trivial, it is based on + indexes variations. Also you may see that new items would not be appended (adapter.append()) to the + viewport immediately if the EOF (end of file) is not reached. The same is true for prepend operation + (adapter.prepend()): BOF (begin of file) must be reached, otherwise your new item will be rendered + only after scrolling to the very top... This is important to build proper UI. +

+
diff --git a/demo/adapterSync/adapterSync.js b/demo/adapterSync/adapterSync.js index f991272e..fde529da 100644 --- a/demo/adapterSync/adapterSync.js +++ b/demo/adapterSync/adapterSync.js @@ -70,16 +70,14 @@ app.factory('Server', [ }, prependItem: function (params) { - var prependedDataIndex = this.firstIndex-- - 1; - var newItem = this.generateItem(prependedDataIndex); + var newItem = this.generateItem(--this.firstIndex); newItem.content += params; this.data.unshift(newItem); return this.returnDeferredResult(newItem); }, appendItem: function (params) { - var appendedDataIndex = this.lastIndex++ + 1; - var newItem = this.generateItem(appendedDataIndex); + var newItem = this.generateItem(++this.lastIndex); newItem.content += params; this.data.push(newItem); return this.returnDeferredResult(newItem); @@ -90,9 +88,6 @@ app.factory('Server', [ for (var i = 0; i < length; i++) { if (this.data[i].id === itemId) { this.data.splice(i, 1); - for (var j = i; j < length - 1; j++) { - this.data[j].index--; - } this.setIndicies(); return this.returnDeferredResult(true); } @@ -164,6 +159,7 @@ app.controller('mainController', [ }); }; + // todo dhilt : need to implement it properly ctrl.removeAll = function () { ctrl.adapter.applyUpdates(function (item) { if (item.id) { From 6f870aa3783f862eabb52c33cc19e64387cb7bd0 Mon Sep 17 00:00:00 2001 From: NA Date: Tue, 24 Oct 2017 06:04:42 +0300 Subject: [PATCH 09/14] an interim build --- dist/ui-scroll-grid.js | 2 +- dist/ui-scroll-grid.js.map | 2 +- dist/ui-scroll-grid.min.js | 2 +- dist/ui-scroll-grid.min.js.map | 2 +- src/modules/padding.js | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dist/ui-scroll-grid.js b/dist/ui-scroll-grid.js index fb0fc148..02a50abe 100644 --- a/dist/ui-scroll-grid.js +++ b/dist/ui-scroll-grid.js @@ -1,7 +1,7 @@ /*! * angular-ui-scroll (uncompressed) * https://github.com/angular-ui/ui-scroll - * Version: 1.7.0-rc.2 -- 2017-09-29T16:03:15.269Z + * Version: 1.7.0-rc.2 -- 2017-10-24T03:02:10.248Z * License: MIT */ /******/ (function(modules) { // webpackBootstrap diff --git a/dist/ui-scroll-grid.js.map b/dist/ui-scroll-grid.js.map index a0622358..eb2c5205 100644 --- a/dist/ui-scroll-grid.js.map +++ b/dist/ui-scroll-grid.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap 35161bb75722543f4b5e?76fc","webpack:///./src/ui-scroll-grid.js"],"names":["angular","module","directive","console","$timeout","GridAdapter","controller","getLayout","applyLayout","layout","columnFromPoint","x","y","Object","defineProperty","get","getColumns","ColumnAdapter","column","css","attr","arguments","value","length","header","forEachRow","row","id","moveBefore","index","exchangeWith","ColumnController","columns","mapTo","extend","applyCss","target","moveLast","insidePoint","result","element","offset","left","outerWidth","top","outerHeight","detach","before","parent","append","removeAttr","hasOwnProperty","GridController","scrollViewport","rowMap","Map","adapter","publicContext","gridAdapter","transform","scope","item","registerColumn","push","registerCell","cell","set","unregisterCell","i","indexOf","splice","delete","callback","forEach","slice","sort","a","b","layouts","Error","map","selected","columnId","next","c","find","col","undefined","visible","require","restrict","link","$scope","$attr","controllers","gridController","tdInitializer","uiScrollTdInitializer","linking","$on","onLink"],"mappings":"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","file":"ui-scroll-grid.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// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 6);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 35161bb75722543f4b5e","angular.module('ui.scroll.grid', [])\n .directive('uiScrollTh', ['$log', '$timeout', function(console, $timeout) {\n\n function GridAdapter(controller) {\n\n this.getLayout = () => controller.getLayout();\n\n this.applyLayout = (layout) => controller.applyLayout(layout);\n\n this.columnFromPoint = (x, y) => controller.columnFromPoint(x, y);\n\n Object.defineProperty(this, 'columns', { get: () => controller.getColumns() });\n }\n\n function ColumnAdapter(controller, column) {\n\n this.css = function( /* attr, value */ ) {\n var attr = arguments[0];\n var value = arguments[1];\n if (arguments.length == 1) {\n return column.header.css(attr);\n }\n if (arguments.length == 2) {\n column.header.css(attr, value);\n controller.forEachRow((row) => row[column.id].css(attr, value));\n column.css[attr] = value;\n }\n };\n\n this.moveBefore = (index) => controller.moveBefore(column, index);\n\n this.exchangeWith = (index) => controller.exchangeWith(column, index);\n\n Object.defineProperty(this, 'columnId', { get: () => column.id });\n }\n\n function ColumnController(controller, columns, header) {\n\n this.header = header;\n this.css = {};\n this.mapTo = columns.length;\n this.id = columns.length;\n\n // controller api methods\n\n this.applyLayout = function(layout) {\n this.css = angular.extend({}, layout.css);\n this.mapTo = layout.mapTo;\n applyCss(this.header, this.css);\n };\n\n this.moveBefore = function(target) {\n if (target) {\n moveBefore(header, target.header);\n controller.forEachRow((row) => moveBefore(row[this.id], row[target.id]));\n } else {\n moveLast(header);\n controller.forEachRow((row) => moveLast(row[this.id]));\n }\n };\n\n this.columnFromPoint = function(x, y) {\n if (insidePoint(header, x, y)) {\n return this;\n }\n let result = null;\n controller.forEachRow((row) =>\n result = insidePoint(row[this.id], x, y) ? this : result\n );\n return result;\n };\n\n this.applyCss = function(target) {\n applyCss(target, this.css);\n };\n\n // function definitions\n\n function insidePoint(element, x, y) {\n let offset = element.offset();\n if (x < offset.left || offset.left + element.outerWidth(true) < x)\n return false;\n if (y < offset.top || offset.top + element.outerHeight(true) < y)\n return false;\n return true;\n }\n\n function moveBefore(element, target) {\n element.detach();\n target.before(element);\n }\n\n function moveLast(element) {\n let parent = element.parent();\n element.detach();\n parent.append(element);\n }\n\n function applyCss(target, css) {\n target.removeAttr('style');\n for (let attr in css) {\n if (css.hasOwnProperty(attr)) {\n target.css(attr, css[attr]);\n }\n }\n }\n\n }\n\n function GridController(scrollViewport) {\n let columns = [];\n let rowMap = new Map();\n\n $timeout(() => {\n scrollViewport.adapter.publicContext.gridAdapter = new GridAdapter(this);\n scrollViewport.adapter.transform = (scope, item) => transform(rowMap.get(scope), item);\n });\n\n this.registerColumn = function(header) {\n columns.push(new ColumnController(this, columns, header));\n };\n\n this.registerCell = function(scope, cell) {\n let row = rowMap.get(scope);\n if (!row) {\n row = [];\n rowMap.set(scope, row);\n }\n if (row.length >= columns.length) {\n return false;\n }\n row.push(cell);\n return true;\n };\n\n this.unregisterCell = function(scope, cell) {\n let row = rowMap.get(scope);\n let i = row.indexOf(cell);\n row.splice(i, 1);\n if (!row.length) {\n rowMap.delete(scope);\n }\n };\n\n this.forEachRow = function(callback) {\n rowMap.forEach(callback);\n };\n\n this.getColumns = function() {\n let result = [];\n columns.slice()\n .sort((a, b) => a.mapTo - b.mapTo)\n .forEach((column) => result.push(new ColumnAdapter(this, column)));\n return result;\n };\n\n this.getLayout = function() {\n let result = [];\n columns.forEach((column, index) => result.push({\n index: index,\n css: angular.extend({}, column.css),\n mapTo: column.mapTo\n }));\n return result;\n };\n\n this.applyLayout = function(layouts) {\n if (!layouts || layouts.length != columns.length) {\n throw new Error('Failed to apply layout - number of layouts should match number of columns');\n }\n layouts.forEach((layout, index) => columns[index].applyLayout(layout));\n transform(columns.map((column) => column.header));\n rowMap.forEach((row) => transform(row));\n };\n\n this.moveBefore = function(selected, target) {\n let index = target;\n\n if (target % 1 !== 0) {\n index = target ? columns[target.columnId].mapTo : columns.length;\n }\n if (index < 0 || index > columns.length) {\n return; // throw an error?\n }\n\n let mapTo = selected.mapTo,\n next = null;\n index -= mapTo < index ? 1 : 0;\n\n columns.forEach(c => {\n c.mapTo -= c.mapTo > mapTo ? 1 : 0;\n c.mapTo += c.mapTo >= index ? 1 : 0;\n next = c.mapTo === index + 1 ? c : next;\n });\n\n selected.mapTo = index;\n selected.moveBefore(next);\n };\n\n this.exchangeWith = function(selected, index) {\n if (index < 0 || index >= columns.length) {\n return;\n }\n columns.find(c => c.mapTo === index).mapTo = selected.mapTo;\n selected.mapTo = index;\n };\n\n this.columnFromPoint = function(x, y) {\n let column = columns.find(col => col.columnFromPoint(x, y));\n return column ? new ColumnAdapter(this, column) : undefined;\n };\n\n // function definitions\n\n function transform(row) {\n let parent = row[0].parent();\n let visible = [];\n\n row.forEach((cell, index) => {\n columns[index].applyCss(cell);\n visible[columns[index].mapTo] = row[index];\n row[index].detach();\n });\n\n visible.forEach(cell => parent.append(cell));\n }\n\n }\n\n return {\n require: ['^^uiScrollViewport'],\n restrict: 'A',\n link: ($scope, element, $attr, controllers) => {\n controllers[0].gridController = controllers[0].gridController || new GridController(controllers[0]);\n controllers[0].gridController.registerColumn(element);\n }\n };\n }])\n\n.directive('uiScrollTd', function() {\n return {\n require: ['?^^uiScrollViewport'],\n restrict: 'A',\n link: ($scope, element, $attr, controllers) => {\n if (!controllers[0]) {\n return;\n }\n let scope = $scope;\n let tdInitializer = $scope.uiScrollTdInitializer;\n if (!tdInitializer) {\n tdInitializer = $scope.uiScrollTdInitializer = {\n linking: true\n };\n }\n if (!tdInitializer.linking) {\n scope = tdInitializer.scope;\n }\n let gridController = controllers[0].gridController;\n if (gridController.registerCell(scope, element)) {\n $scope.$on('$destroy', () => gridController.unregisterCell(scope, element));\n }\n if (!tdInitializer.linking) {\n tdInitializer.onLink();\n }\n }\n };\n});\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui-scroll-grid.js"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap 1216a0b888ba30877f8b?933d","webpack:///./src/ui-scroll-grid.js"],"names":["angular","module","directive","console","$timeout","GridAdapter","controller","getLayout","applyLayout","layout","columnFromPoint","x","y","Object","defineProperty","get","getColumns","ColumnAdapter","column","css","attr","arguments","value","length","header","forEachRow","row","id","moveBefore","index","exchangeWith","ColumnController","columns","mapTo","extend","applyCss","target","moveLast","insidePoint","result","element","offset","left","outerWidth","top","outerHeight","detach","before","parent","append","removeAttr","hasOwnProperty","GridController","scrollViewport","rowMap","Map","adapter","publicContext","gridAdapter","transform","scope","item","registerColumn","push","registerCell","cell","set","unregisterCell","i","indexOf","splice","delete","callback","forEach","slice","sort","a","b","layouts","Error","map","selected","columnId","next","c","find","col","undefined","visible","require","restrict","link","$scope","$attr","controllers","gridController","tdInitializer","uiScrollTdInitializer","linking","$on","onLink"],"mappings":"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","file":"ui-scroll-grid.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// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 6);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 1216a0b888ba30877f8b","angular.module('ui.scroll.grid', [])\r\n .directive('uiScrollTh', ['$log', '$timeout', function(console, $timeout) {\r\n\r\n function GridAdapter(controller) {\r\n\r\n this.getLayout = () => controller.getLayout();\r\n\r\n this.applyLayout = (layout) => controller.applyLayout(layout);\r\n\r\n this.columnFromPoint = (x, y) => controller.columnFromPoint(x, y);\r\n\r\n Object.defineProperty(this, 'columns', { get: () => controller.getColumns() });\r\n }\r\n\r\n function ColumnAdapter(controller, column) {\r\n\r\n this.css = function( /* attr, value */ ) {\r\n var attr = arguments[0];\r\n var value = arguments[1];\r\n if (arguments.length == 1) {\r\n return column.header.css(attr);\r\n }\r\n if (arguments.length == 2) {\r\n column.header.css(attr, value);\r\n controller.forEachRow((row) => row[column.id].css(attr, value));\r\n column.css[attr] = value;\r\n }\r\n };\r\n\r\n this.moveBefore = (index) => controller.moveBefore(column, index);\r\n\r\n this.exchangeWith = (index) => controller.exchangeWith(column, index);\r\n\r\n Object.defineProperty(this, 'columnId', { get: () => column.id });\r\n }\r\n\r\n function ColumnController(controller, columns, header) {\r\n\r\n this.header = header;\r\n this.css = {};\r\n this.mapTo = columns.length;\r\n this.id = columns.length;\r\n\r\n // controller api methods\r\n\r\n this.applyLayout = function(layout) {\r\n this.css = angular.extend({}, layout.css);\r\n this.mapTo = layout.mapTo;\r\n applyCss(this.header, this.css);\r\n };\r\n\r\n this.moveBefore = function(target) {\r\n if (target) {\r\n moveBefore(header, target.header);\r\n controller.forEachRow((row) => moveBefore(row[this.id], row[target.id]));\r\n } else {\r\n moveLast(header);\r\n controller.forEachRow((row) => moveLast(row[this.id]));\r\n }\r\n };\r\n\r\n this.columnFromPoint = function(x, y) {\r\n if (insidePoint(header, x, y)) {\r\n return this;\r\n }\r\n let result = null;\r\n controller.forEachRow((row) =>\r\n result = insidePoint(row[this.id], x, y) ? this : result\r\n );\r\n return result;\r\n };\r\n\r\n this.applyCss = function(target) {\r\n applyCss(target, this.css);\r\n };\r\n\r\n // function definitions\r\n\r\n function insidePoint(element, x, y) {\r\n let offset = element.offset();\r\n if (x < offset.left || offset.left + element.outerWidth(true) < x)\r\n return false;\r\n if (y < offset.top || offset.top + element.outerHeight(true) < y)\r\n return false;\r\n return true;\r\n }\r\n\r\n function moveBefore(element, target) {\r\n element.detach();\r\n target.before(element);\r\n }\r\n\r\n function moveLast(element) {\r\n let parent = element.parent();\r\n element.detach();\r\n parent.append(element);\r\n }\r\n\r\n function applyCss(target, css) {\r\n target.removeAttr('style');\r\n for (let attr in css) {\r\n if (css.hasOwnProperty(attr)) {\r\n target.css(attr, css[attr]);\r\n }\r\n }\r\n }\r\n\r\n }\r\n\r\n function GridController(scrollViewport) {\r\n let columns = [];\r\n let rowMap = new Map();\r\n\r\n $timeout(() => {\r\n scrollViewport.adapter.publicContext.gridAdapter = new GridAdapter(this);\r\n scrollViewport.adapter.transform = (scope, item) => transform(rowMap.get(scope), item);\r\n });\r\n\r\n this.registerColumn = function(header) {\r\n columns.push(new ColumnController(this, columns, header));\r\n };\r\n\r\n this.registerCell = function(scope, cell) {\r\n let row = rowMap.get(scope);\r\n if (!row) {\r\n row = [];\r\n rowMap.set(scope, row);\r\n }\r\n if (row.length >= columns.length) {\r\n return false;\r\n }\r\n row.push(cell);\r\n return true;\r\n };\r\n\r\n this.unregisterCell = function(scope, cell) {\r\n let row = rowMap.get(scope);\r\n let i = row.indexOf(cell);\r\n row.splice(i, 1);\r\n if (!row.length) {\r\n rowMap.delete(scope);\r\n }\r\n };\r\n\r\n this.forEachRow = function(callback) {\r\n rowMap.forEach(callback);\r\n };\r\n\r\n this.getColumns = function() {\r\n let result = [];\r\n columns.slice()\r\n .sort((a, b) => a.mapTo - b.mapTo)\r\n .forEach((column) => result.push(new ColumnAdapter(this, column)));\r\n return result;\r\n };\r\n\r\n this.getLayout = function() {\r\n let result = [];\r\n columns.forEach((column, index) => result.push({\r\n index: index,\r\n css: angular.extend({}, column.css),\r\n mapTo: column.mapTo\r\n }));\r\n return result;\r\n };\r\n\r\n this.applyLayout = function(layouts) {\r\n if (!layouts || layouts.length != columns.length) {\r\n throw new Error('Failed to apply layout - number of layouts should match number of columns');\r\n }\r\n layouts.forEach((layout, index) => columns[index].applyLayout(layout));\r\n transform(columns.map((column) => column.header));\r\n rowMap.forEach((row) => transform(row));\r\n };\r\n\r\n this.moveBefore = function(selected, target) {\r\n let index = target;\r\n\r\n if (target % 1 !== 0) {\r\n index = target ? columns[target.columnId].mapTo : columns.length;\r\n }\r\n if (index < 0 || index > columns.length) {\r\n return; // throw an error?\r\n }\r\n\r\n let mapTo = selected.mapTo,\r\n next = null;\r\n index -= mapTo < index ? 1 : 0;\r\n\r\n columns.forEach(c => {\r\n c.mapTo -= c.mapTo > mapTo ? 1 : 0;\r\n c.mapTo += c.mapTo >= index ? 1 : 0;\r\n next = c.mapTo === index + 1 ? c : next;\r\n });\r\n\r\n selected.mapTo = index;\r\n selected.moveBefore(next);\r\n };\r\n\r\n this.exchangeWith = function(selected, index) {\r\n if (index < 0 || index >= columns.length) {\r\n return;\r\n }\r\n columns.find(c => c.mapTo === index).mapTo = selected.mapTo;\r\n selected.mapTo = index;\r\n };\r\n\r\n this.columnFromPoint = function(x, y) {\r\n let column = columns.find(col => col.columnFromPoint(x, y));\r\n return column ? new ColumnAdapter(this, column) : undefined;\r\n };\r\n\r\n // function definitions\r\n\r\n function transform(row) {\r\n let parent = row[0].parent();\r\n let visible = [];\r\n\r\n row.forEach((cell, index) => {\r\n columns[index].applyCss(cell);\r\n visible[columns[index].mapTo] = row[index];\r\n row[index].detach();\r\n });\r\n\r\n visible.forEach(cell => parent.append(cell));\r\n }\r\n\r\n }\r\n\r\n return {\r\n require: ['^^uiScrollViewport'],\r\n restrict: 'A',\r\n link: ($scope, element, $attr, controllers) => {\r\n controllers[0].gridController = controllers[0].gridController || new GridController(controllers[0]);\r\n controllers[0].gridController.registerColumn(element);\r\n }\r\n };\r\n }])\r\n\r\n.directive('uiScrollTd', function() {\r\n return {\r\n require: ['?^^uiScrollViewport'],\r\n restrict: 'A',\r\n link: ($scope, element, $attr, controllers) => {\r\n if (!controllers[0]) {\r\n return;\r\n }\r\n let scope = $scope;\r\n let tdInitializer = $scope.uiScrollTdInitializer;\r\n if (!tdInitializer) {\r\n tdInitializer = $scope.uiScrollTdInitializer = {\r\n linking: true\r\n };\r\n }\r\n if (!tdInitializer.linking) {\r\n scope = tdInitializer.scope;\r\n }\r\n let gridController = controllers[0].gridController;\r\n if (gridController.registerCell(scope, element)) {\r\n $scope.$on('$destroy', () => gridController.unregisterCell(scope, element));\r\n }\r\n if (!tdInitializer.linking) {\r\n tdInitializer.onLink();\r\n }\r\n }\r\n };\r\n});\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui-scroll-grid.js"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/ui-scroll-grid.min.js b/dist/ui-scroll-grid.min.js index 425e99ec..3d3c3e9b 100644 --- a/dist/ui-scroll-grid.min.js +++ b/dist/ui-scroll-grid.min.js @@ -1,7 +1,7 @@ /*! * angular-ui-scroll (compressed) * https://github.com/angular-ui/ui-scroll - * Version: 1.7.0-rc.2 -- 2017-09-29T16:03:15.814Z + * Version: 1.7.0-rc.2 -- 2017-10-24T03:02:10.297Z * License: MIT */ !function(t){function n(e){if(r[e])return r[e].exports;var o=r[e]={i:e,l:!1,exports:{}};return t[e].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var r={};n.m=t,n.c=r,n.i=function(t){return t},n.d=function(t,r,e){n.o(t,r)||Object.defineProperty(t,r,{configurable:!1,enumerable:!0,get:e})},n.n=function(t){var r=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(r,"a",r),r},n.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},n.p="",n(n.s=6)}({6:function(t,n,r){"use strict";angular.module("ui.scroll.grid",[]).directive("uiScrollTh",["$log","$timeout",function(t,n){function r(t){this.getLayout=function(){return t.getLayout()},this.applyLayout=function(n){return t.applyLayout(n)},this.columnFromPoint=function(n,r){return t.columnFromPoint(n,r)},Object.defineProperty(this,"columns",{get:function(){return t.getColumns()}})}function e(t,n){this.css=function(){var r=arguments[0],e=arguments[1];if(1==arguments.length)return n.header.css(r);2==arguments.length&&(n.header.css(r,e),t.forEachRow(function(t){return t[n.id].css(r,e)}),n.css[r]=e)},this.moveBefore=function(r){return t.moveBefore(n,r)},this.exchangeWith=function(r){return t.exchangeWith(n,r)},Object.defineProperty(this,"columnId",{get:function(){return n.id}})}function o(t,n,r){function e(t,n,r){var e=t.offset();return!(n=c.length)&&(r.push(n),!0)},this.unregisterCell=function(t,n){var r=a.get(t),e=r.indexOf(n);r.splice(e,1),r.length||a.delete(t)},this.forEachRow=function(t){a.forEach(t)},this.getColumns=function(){var t=this,n=[];return c.slice().sort(function(t,n){return t.mapTo-n.mapTo}).forEach(function(r){return n.push(new e(t,r))}),n},this.getLayout=function(){var t=[];return c.forEach(function(n,r){return t.push({index:r,css:angular.extend({},n.css),mapTo:n.mapTo})}),t},this.applyLayout=function(t){if(!t||t.length!=c.length)throw new Error("Failed to apply layout - number of layouts should match number of columns");t.forEach(function(t,n){return c[n].applyLayout(t)}),i(c.map(function(t){return t.header})),a.forEach(function(t){return i(t)})},this.moveBefore=function(t,n){var r=n;if(n%1!=0&&(r=n?c[n.columnId].mapTo:c.length),!(r<0||r>c.length)){var e=t.mapTo,o=null;r-=ee?1:0,t.mapTo+=t.mapTo>=r?1:0,o=t.mapTo===r+1?t:o}),t.mapTo=r,t.moveBefore(o)}},this.exchangeWith=function(t,n){n<0||n>=c.length||(c.find(function(t){return t.mapTo===n}).mapTo=t.mapTo,t.mapTo=n)},this.columnFromPoint=function(t,n){var r=c.find(function(r){return r.columnFromPoint(t,n)});return r?new e(this,r):void 0}}return{require:["^^uiScrollViewport"],restrict:"A",link:function(t,n,r,e){e[0].gridController=e[0].gridController||new i(e[0]),e[0].gridController.registerColumn(n)}}}]).directive("uiScrollTd",function(){return{require:["?^^uiScrollViewport"],restrict:"A",link:function(t,n,r,e){if(e[0]){var o=t,i=t.uiScrollTdInitializer;i||(i=t.uiScrollTdInitializer={linking:!0}),i.linking||(o=i.scope);var u=e[0].gridController;u.registerCell(o,n)&&t.$on("$destroy",function(){return u.unregisterCell(o,n)}),i.linking||i.onLink()}}}})}}); diff --git a/dist/ui-scroll-grid.min.js.map b/dist/ui-scroll-grid.min.js.map index 399eb774..0ed71515 100644 --- a/dist/ui-scroll-grid.min.js.map +++ b/dist/ui-scroll-grid.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///ui-scroll-grid.min.js","webpack:///webpack/bootstrap 8d2ecf8a1ec6b1ef0e81?b66a","webpack:///./src/ui-scroll-grid.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","6","angular","directive","console","$timeout","GridAdapter","controller","this","getLayout","applyLayout","layout","columnFromPoint","x","y","getColumns","ColumnAdapter","column","css","attr","arguments","length","header","forEachRow","row","id","moveBefore","index","exchangeWith","ColumnController","columns","insidePoint","element","offset","left","outerWidth","top","outerHeight","target","detach","before","moveLast","parent","append","applyCss","removeAttr","mapTo","extend","_this","_this2","result","GridController","scrollViewport","transform","visible","forEach","cell","_this3","rowMap","Map","adapter","publicContext","gridAdapter","scope","item","registerColumn","push","registerCell","set","unregisterCell","indexOf","splice","delete","callback","_this4","slice","sort","a","b","layouts","Error","map","selected","columnId","next","find","col","undefined","require","restrict","link","$scope","$attr","controllers","gridController","tdInitializer","uiScrollTdInitializer","linking","$on","onLink"],"mappings":"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","file":"ui-scroll-grid.min.js","sourcesContent":["/*!\r\n * angular-ui-scroll (uncompressed)\r\n * https://github.com/angular-ui/ui-scroll\r\n * Version: 1.7.0-rc.2 -- 2017-09-29T16:03:15.269Z\r\n * License: MIT\r\n */\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 6);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 6:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nangular.module('ui.scroll.grid', []).directive('uiScrollTh', ['$log', '$timeout', function (console, $timeout) {\n\n function GridAdapter(controller) {\n\n this.getLayout = function () {\n return controller.getLayout();\n };\n\n this.applyLayout = function (layout) {\n return controller.applyLayout(layout);\n };\n\n this.columnFromPoint = function (x, y) {\n return controller.columnFromPoint(x, y);\n };\n\n Object.defineProperty(this, 'columns', { get: function get() {\n return controller.getColumns();\n } });\n }\n\n function ColumnAdapter(controller, column) {\n\n this.css = function () /* attr, value */{\n var attr = arguments[0];\n var value = arguments[1];\n if (arguments.length == 1) {\n return column.header.css(attr);\n }\n if (arguments.length == 2) {\n column.header.css(attr, value);\n controller.forEachRow(function (row) {\n return row[column.id].css(attr, value);\n });\n column.css[attr] = value;\n }\n };\n\n this.moveBefore = function (index) {\n return controller.moveBefore(column, index);\n };\n\n this.exchangeWith = function (index) {\n return controller.exchangeWith(column, index);\n };\n\n Object.defineProperty(this, 'columnId', { get: function get() {\n return column.id;\n } });\n }\n\n function ColumnController(controller, columns, header) {\n\n this.header = header;\n this.css = {};\n this.mapTo = columns.length;\n this.id = columns.length;\n\n // controller api methods\n\n this.applyLayout = function (layout) {\n this.css = angular.extend({}, layout.css);\n this.mapTo = layout.mapTo;\n applyCss(this.header, this.css);\n };\n\n this.moveBefore = function (target) {\n var _this = this;\n\n if (target) {\n moveBefore(header, target.header);\n controller.forEachRow(function (row) {\n return moveBefore(row[_this.id], row[target.id]);\n });\n } else {\n moveLast(header);\n controller.forEachRow(function (row) {\n return moveLast(row[_this.id]);\n });\n }\n };\n\n this.columnFromPoint = function (x, y) {\n var _this2 = this;\n\n if (insidePoint(header, x, y)) {\n return this;\n }\n var result = null;\n controller.forEachRow(function (row) {\n return result = insidePoint(row[_this2.id], x, y) ? _this2 : result;\n });\n return result;\n };\n\n this.applyCss = function (target) {\n applyCss(target, this.css);\n };\n\n // function definitions\n\n function insidePoint(element, x, y) {\n var offset = element.offset();\n if (x < offset.left || offset.left + element.outerWidth(true) < x) return false;\n if (y < offset.top || offset.top + element.outerHeight(true) < y) return false;\n return true;\n }\n\n function moveBefore(element, target) {\n element.detach();\n target.before(element);\n }\n\n function moveLast(element) {\n var parent = element.parent();\n element.detach();\n parent.append(element);\n }\n\n function applyCss(target, css) {\n target.removeAttr('style');\n for (var attr in css) {\n if (css.hasOwnProperty(attr)) {\n target.css(attr, css[attr]);\n }\n }\n }\n }\n\n function GridController(scrollViewport) {\n var _this3 = this;\n\n var columns = [];\n var rowMap = new Map();\n\n $timeout(function () {\n scrollViewport.adapter.publicContext.gridAdapter = new GridAdapter(_this3);\n scrollViewport.adapter.transform = function (scope, item) {\n return transform(rowMap.get(scope), item);\n };\n });\n\n this.registerColumn = function (header) {\n columns.push(new ColumnController(this, columns, header));\n };\n\n this.registerCell = function (scope, cell) {\n var row = rowMap.get(scope);\n if (!row) {\n row = [];\n rowMap.set(scope, row);\n }\n if (row.length >= columns.length) {\n return false;\n }\n row.push(cell);\n return true;\n };\n\n this.unregisterCell = function (scope, cell) {\n var row = rowMap.get(scope);\n var i = row.indexOf(cell);\n row.splice(i, 1);\n if (!row.length) {\n rowMap.delete(scope);\n }\n };\n\n this.forEachRow = function (callback) {\n rowMap.forEach(callback);\n };\n\n this.getColumns = function () {\n var _this4 = this;\n\n var result = [];\n columns.slice().sort(function (a, b) {\n return a.mapTo - b.mapTo;\n }).forEach(function (column) {\n return result.push(new ColumnAdapter(_this4, column));\n });\n return result;\n };\n\n this.getLayout = function () {\n var result = [];\n columns.forEach(function (column, index) {\n return result.push({\n index: index,\n css: angular.extend({}, column.css),\n mapTo: column.mapTo\n });\n });\n return result;\n };\n\n this.applyLayout = function (layouts) {\n if (!layouts || layouts.length != columns.length) {\n throw new Error('Failed to apply layout - number of layouts should match number of columns');\n }\n layouts.forEach(function (layout, index) {\n return columns[index].applyLayout(layout);\n });\n transform(columns.map(function (column) {\n return column.header;\n }));\n rowMap.forEach(function (row) {\n return transform(row);\n });\n };\n\n this.moveBefore = function (selected, target) {\n var index = target;\n\n if (target % 1 !== 0) {\n index = target ? columns[target.columnId].mapTo : columns.length;\n }\n if (index < 0 || index > columns.length) {\n return; // throw an error?\n }\n\n var mapTo = selected.mapTo,\n next = null;\n index -= mapTo < index ? 1 : 0;\n\n columns.forEach(function (c) {\n c.mapTo -= c.mapTo > mapTo ? 1 : 0;\n c.mapTo += c.mapTo >= index ? 1 : 0;\n next = c.mapTo === index + 1 ? c : next;\n });\n\n selected.mapTo = index;\n selected.moveBefore(next);\n };\n\n this.exchangeWith = function (selected, index) {\n if (index < 0 || index >= columns.length) {\n return;\n }\n columns.find(function (c) {\n return c.mapTo === index;\n }).mapTo = selected.mapTo;\n selected.mapTo = index;\n };\n\n this.columnFromPoint = function (x, y) {\n var column = columns.find(function (col) {\n return col.columnFromPoint(x, y);\n });\n return column ? new ColumnAdapter(this, column) : undefined;\n };\n\n // function definitions\n\n function transform(row) {\n var parent = row[0].parent();\n var visible = [];\n\n row.forEach(function (cell, index) {\n columns[index].applyCss(cell);\n visible[columns[index].mapTo] = row[index];\n row[index].detach();\n });\n\n visible.forEach(function (cell) {\n return parent.append(cell);\n });\n }\n }\n\n return {\n require: ['^^uiScrollViewport'],\n restrict: 'A',\n link: function link($scope, element, $attr, controllers) {\n controllers[0].gridController = controllers[0].gridController || new GridController(controllers[0]);\n controllers[0].gridController.registerColumn(element);\n }\n };\n}]).directive('uiScrollTd', function () {\n return {\n require: ['?^^uiScrollViewport'],\n restrict: 'A',\n link: function link($scope, element, $attr, controllers) {\n if (!controllers[0]) {\n return;\n }\n var scope = $scope;\n var tdInitializer = $scope.uiScrollTdInitializer;\n if (!tdInitializer) {\n tdInitializer = $scope.uiScrollTdInitializer = {\n linking: true\n };\n }\n if (!tdInitializer.linking) {\n scope = tdInitializer.scope;\n }\n var gridController = controllers[0].gridController;\n if (gridController.registerCell(scope, element)) {\n $scope.$on('$destroy', function () {\n return gridController.unregisterCell(scope, element);\n });\n }\n if (!tdInitializer.linking) {\n tdInitializer.onLink();\n }\n }\n };\n});\n\n/***/ })\n\n/******/ });\n\n\n// WEBPACK FOOTER //\n// ui-scroll-grid.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 6);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 8d2ecf8a1ec6b1ef0e81","angular.module('ui.scroll.grid', [])\n .directive('uiScrollTh', ['$log', '$timeout', function(console, $timeout) {\n\n function GridAdapter(controller) {\n\n this.getLayout = () => controller.getLayout();\n\n this.applyLayout = (layout) => controller.applyLayout(layout);\n\n this.columnFromPoint = (x, y) => controller.columnFromPoint(x, y);\n\n Object.defineProperty(this, 'columns', { get: () => controller.getColumns() });\n }\n\n function ColumnAdapter(controller, column) {\n\n this.css = function( /* attr, value */ ) {\n var attr = arguments[0];\n var value = arguments[1];\n if (arguments.length == 1) {\n return column.header.css(attr);\n }\n if (arguments.length == 2) {\n column.header.css(attr, value);\n controller.forEachRow((row) => row[column.id].css(attr, value));\n column.css[attr] = value;\n }\n };\n\n this.moveBefore = (index) => controller.moveBefore(column, index);\n\n this.exchangeWith = (index) => controller.exchangeWith(column, index);\n\n Object.defineProperty(this, 'columnId', { get: () => column.id });\n }\n\n function ColumnController(controller, columns, header) {\n\n this.header = header;\n this.css = {};\n this.mapTo = columns.length;\n this.id = columns.length;\n\n // controller api methods\n\n this.applyLayout = function(layout) {\n this.css = angular.extend({}, layout.css);\n this.mapTo = layout.mapTo;\n applyCss(this.header, this.css);\n };\n\n this.moveBefore = function(target) {\n if (target) {\n moveBefore(header, target.header);\n controller.forEachRow((row) => moveBefore(row[this.id], row[target.id]));\n } else {\n moveLast(header);\n controller.forEachRow((row) => moveLast(row[this.id]));\n }\n };\n\n this.columnFromPoint = function(x, y) {\n if (insidePoint(header, x, y)) {\n return this;\n }\n let result = null;\n controller.forEachRow((row) =>\n result = insidePoint(row[this.id], x, y) ? this : result\n );\n return result;\n };\n\n this.applyCss = function(target) {\n applyCss(target, this.css);\n };\n\n // function definitions\n\n function insidePoint(element, x, y) {\n let offset = element.offset();\n if (x < offset.left || offset.left + element.outerWidth(true) < x)\n return false;\n if (y < offset.top || offset.top + element.outerHeight(true) < y)\n return false;\n return true;\n }\n\n function moveBefore(element, target) {\n element.detach();\n target.before(element);\n }\n\n function moveLast(element) {\n let parent = element.parent();\n element.detach();\n parent.append(element);\n }\n\n function applyCss(target, css) {\n target.removeAttr('style');\n for (let attr in css) {\n if (css.hasOwnProperty(attr)) {\n target.css(attr, css[attr]);\n }\n }\n }\n\n }\n\n function GridController(scrollViewport) {\n let columns = [];\n let rowMap = new Map();\n\n $timeout(() => {\n scrollViewport.adapter.publicContext.gridAdapter = new GridAdapter(this);\n scrollViewport.adapter.transform = (scope, item) => transform(rowMap.get(scope), item);\n });\n\n this.registerColumn = function(header) {\n columns.push(new ColumnController(this, columns, header));\n };\n\n this.registerCell = function(scope, cell) {\n let row = rowMap.get(scope);\n if (!row) {\n row = [];\n rowMap.set(scope, row);\n }\n if (row.length >= columns.length) {\n return false;\n }\n row.push(cell);\n return true;\n };\n\n this.unregisterCell = function(scope, cell) {\n let row = rowMap.get(scope);\n let i = row.indexOf(cell);\n row.splice(i, 1);\n if (!row.length) {\n rowMap.delete(scope);\n }\n };\n\n this.forEachRow = function(callback) {\n rowMap.forEach(callback);\n };\n\n this.getColumns = function() {\n let result = [];\n columns.slice()\n .sort((a, b) => a.mapTo - b.mapTo)\n .forEach((column) => result.push(new ColumnAdapter(this, column)));\n return result;\n };\n\n this.getLayout = function() {\n let result = [];\n columns.forEach((column, index) => result.push({\n index: index,\n css: angular.extend({}, column.css),\n mapTo: column.mapTo\n }));\n return result;\n };\n\n this.applyLayout = function(layouts) {\n if (!layouts || layouts.length != columns.length) {\n throw new Error('Failed to apply layout - number of layouts should match number of columns');\n }\n layouts.forEach((layout, index) => columns[index].applyLayout(layout));\n transform(columns.map((column) => column.header));\n rowMap.forEach((row) => transform(row));\n };\n\n this.moveBefore = function(selected, target) {\n let index = target;\n\n if (target % 1 !== 0) {\n index = target ? columns[target.columnId].mapTo : columns.length;\n }\n if (index < 0 || index > columns.length) {\n return; // throw an error?\n }\n\n let mapTo = selected.mapTo,\n next = null;\n index -= mapTo < index ? 1 : 0;\n\n columns.forEach(c => {\n c.mapTo -= c.mapTo > mapTo ? 1 : 0;\n c.mapTo += c.mapTo >= index ? 1 : 0;\n next = c.mapTo === index + 1 ? c : next;\n });\n\n selected.mapTo = index;\n selected.moveBefore(next);\n };\n\n this.exchangeWith = function(selected, index) {\n if (index < 0 || index >= columns.length) {\n return;\n }\n columns.find(c => c.mapTo === index).mapTo = selected.mapTo;\n selected.mapTo = index;\n };\n\n this.columnFromPoint = function(x, y) {\n let column = columns.find(col => col.columnFromPoint(x, y));\n return column ? new ColumnAdapter(this, column) : undefined;\n };\n\n // function definitions\n\n function transform(row) {\n let parent = row[0].parent();\n let visible = [];\n\n row.forEach((cell, index) => {\n columns[index].applyCss(cell);\n visible[columns[index].mapTo] = row[index];\n row[index].detach();\n });\n\n visible.forEach(cell => parent.append(cell));\n }\n\n }\n\n return {\n require: ['^^uiScrollViewport'],\n restrict: 'A',\n link: ($scope, element, $attr, controllers) => {\n controllers[0].gridController = controllers[0].gridController || new GridController(controllers[0]);\n controllers[0].gridController.registerColumn(element);\n }\n };\n }])\n\n.directive('uiScrollTd', function() {\n return {\n require: ['?^^uiScrollViewport'],\n restrict: 'A',\n link: ($scope, element, $attr, controllers) => {\n if (!controllers[0]) {\n return;\n }\n let scope = $scope;\n let tdInitializer = $scope.uiScrollTdInitializer;\n if (!tdInitializer) {\n tdInitializer = $scope.uiScrollTdInitializer = {\n linking: true\n };\n }\n if (!tdInitializer.linking) {\n scope = tdInitializer.scope;\n }\n let gridController = controllers[0].gridController;\n if (gridController.registerCell(scope, element)) {\n $scope.$on('$destroy', () => gridController.unregisterCell(scope, element));\n }\n if (!tdInitializer.linking) {\n tdInitializer.onLink();\n }\n }\n };\n});\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui-scroll-grid.js"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///ui-scroll-grid.min.js","webpack:///webpack/bootstrap b0424d7cd22095912625?52fc","webpack:///./src/ui-scroll-grid.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","6","angular","directive","console","$timeout","GridAdapter","controller","this","getLayout","applyLayout","layout","columnFromPoint","x","y","getColumns","ColumnAdapter","column","css","attr","arguments","length","header","forEachRow","row","id","moveBefore","index","exchangeWith","ColumnController","columns","insidePoint","element","offset","left","outerWidth","top","outerHeight","target","detach","before","moveLast","parent","append","applyCss","removeAttr","mapTo","extend","_this","_this2","result","GridController","scrollViewport","transform","visible","forEach","cell","_this3","rowMap","Map","adapter","publicContext","gridAdapter","scope","item","registerColumn","push","registerCell","set","unregisterCell","indexOf","splice","delete","callback","_this4","slice","sort","a","b","layouts","Error","map","selected","columnId","next","find","col","undefined","require","restrict","link","$scope","$attr","controllers","gridController","tdInitializer","uiScrollTdInitializer","linking","$on","onLink"],"mappings":"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","file":"ui-scroll-grid.min.js","sourcesContent":["/*!\r\n * angular-ui-scroll (uncompressed)\r\n * https://github.com/angular-ui/ui-scroll\r\n * Version: 1.7.0-rc.2 -- 2017-10-24T03:02:10.248Z\r\n * License: MIT\r\n */\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 6);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 6:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nangular.module('ui.scroll.grid', []).directive('uiScrollTh', ['$log', '$timeout', function (console, $timeout) {\n\n function GridAdapter(controller) {\n\n this.getLayout = function () {\n return controller.getLayout();\n };\n\n this.applyLayout = function (layout) {\n return controller.applyLayout(layout);\n };\n\n this.columnFromPoint = function (x, y) {\n return controller.columnFromPoint(x, y);\n };\n\n Object.defineProperty(this, 'columns', { get: function get() {\n return controller.getColumns();\n } });\n }\n\n function ColumnAdapter(controller, column) {\n\n this.css = function () /* attr, value */{\n var attr = arguments[0];\n var value = arguments[1];\n if (arguments.length == 1) {\n return column.header.css(attr);\n }\n if (arguments.length == 2) {\n column.header.css(attr, value);\n controller.forEachRow(function (row) {\n return row[column.id].css(attr, value);\n });\n column.css[attr] = value;\n }\n };\n\n this.moveBefore = function (index) {\n return controller.moveBefore(column, index);\n };\n\n this.exchangeWith = function (index) {\n return controller.exchangeWith(column, index);\n };\n\n Object.defineProperty(this, 'columnId', { get: function get() {\n return column.id;\n } });\n }\n\n function ColumnController(controller, columns, header) {\n\n this.header = header;\n this.css = {};\n this.mapTo = columns.length;\n this.id = columns.length;\n\n // controller api methods\n\n this.applyLayout = function (layout) {\n this.css = angular.extend({}, layout.css);\n this.mapTo = layout.mapTo;\n applyCss(this.header, this.css);\n };\n\n this.moveBefore = function (target) {\n var _this = this;\n\n if (target) {\n moveBefore(header, target.header);\n controller.forEachRow(function (row) {\n return moveBefore(row[_this.id], row[target.id]);\n });\n } else {\n moveLast(header);\n controller.forEachRow(function (row) {\n return moveLast(row[_this.id]);\n });\n }\n };\n\n this.columnFromPoint = function (x, y) {\n var _this2 = this;\n\n if (insidePoint(header, x, y)) {\n return this;\n }\n var result = null;\n controller.forEachRow(function (row) {\n return result = insidePoint(row[_this2.id], x, y) ? _this2 : result;\n });\n return result;\n };\n\n this.applyCss = function (target) {\n applyCss(target, this.css);\n };\n\n // function definitions\n\n function insidePoint(element, x, y) {\n var offset = element.offset();\n if (x < offset.left || offset.left + element.outerWidth(true) < x) return false;\n if (y < offset.top || offset.top + element.outerHeight(true) < y) return false;\n return true;\n }\n\n function moveBefore(element, target) {\n element.detach();\n target.before(element);\n }\n\n function moveLast(element) {\n var parent = element.parent();\n element.detach();\n parent.append(element);\n }\n\n function applyCss(target, css) {\n target.removeAttr('style');\n for (var attr in css) {\n if (css.hasOwnProperty(attr)) {\n target.css(attr, css[attr]);\n }\n }\n }\n }\n\n function GridController(scrollViewport) {\n var _this3 = this;\n\n var columns = [];\n var rowMap = new Map();\n\n $timeout(function () {\n scrollViewport.adapter.publicContext.gridAdapter = new GridAdapter(_this3);\n scrollViewport.adapter.transform = function (scope, item) {\n return transform(rowMap.get(scope), item);\n };\n });\n\n this.registerColumn = function (header) {\n columns.push(new ColumnController(this, columns, header));\n };\n\n this.registerCell = function (scope, cell) {\n var row = rowMap.get(scope);\n if (!row) {\n row = [];\n rowMap.set(scope, row);\n }\n if (row.length >= columns.length) {\n return false;\n }\n row.push(cell);\n return true;\n };\n\n this.unregisterCell = function (scope, cell) {\n var row = rowMap.get(scope);\n var i = row.indexOf(cell);\n row.splice(i, 1);\n if (!row.length) {\n rowMap.delete(scope);\n }\n };\n\n this.forEachRow = function (callback) {\n rowMap.forEach(callback);\n };\n\n this.getColumns = function () {\n var _this4 = this;\n\n var result = [];\n columns.slice().sort(function (a, b) {\n return a.mapTo - b.mapTo;\n }).forEach(function (column) {\n return result.push(new ColumnAdapter(_this4, column));\n });\n return result;\n };\n\n this.getLayout = function () {\n var result = [];\n columns.forEach(function (column, index) {\n return result.push({\n index: index,\n css: angular.extend({}, column.css),\n mapTo: column.mapTo\n });\n });\n return result;\n };\n\n this.applyLayout = function (layouts) {\n if (!layouts || layouts.length != columns.length) {\n throw new Error('Failed to apply layout - number of layouts should match number of columns');\n }\n layouts.forEach(function (layout, index) {\n return columns[index].applyLayout(layout);\n });\n transform(columns.map(function (column) {\n return column.header;\n }));\n rowMap.forEach(function (row) {\n return transform(row);\n });\n };\n\n this.moveBefore = function (selected, target) {\n var index = target;\n\n if (target % 1 !== 0) {\n index = target ? columns[target.columnId].mapTo : columns.length;\n }\n if (index < 0 || index > columns.length) {\n return; // throw an error?\n }\n\n var mapTo = selected.mapTo,\n next = null;\n index -= mapTo < index ? 1 : 0;\n\n columns.forEach(function (c) {\n c.mapTo -= c.mapTo > mapTo ? 1 : 0;\n c.mapTo += c.mapTo >= index ? 1 : 0;\n next = c.mapTo === index + 1 ? c : next;\n });\n\n selected.mapTo = index;\n selected.moveBefore(next);\n };\n\n this.exchangeWith = function (selected, index) {\n if (index < 0 || index >= columns.length) {\n return;\n }\n columns.find(function (c) {\n return c.mapTo === index;\n }).mapTo = selected.mapTo;\n selected.mapTo = index;\n };\n\n this.columnFromPoint = function (x, y) {\n var column = columns.find(function (col) {\n return col.columnFromPoint(x, y);\n });\n return column ? new ColumnAdapter(this, column) : undefined;\n };\n\n // function definitions\n\n function transform(row) {\n var parent = row[0].parent();\n var visible = [];\n\n row.forEach(function (cell, index) {\n columns[index].applyCss(cell);\n visible[columns[index].mapTo] = row[index];\n row[index].detach();\n });\n\n visible.forEach(function (cell) {\n return parent.append(cell);\n });\n }\n }\n\n return {\n require: ['^^uiScrollViewport'],\n restrict: 'A',\n link: function link($scope, element, $attr, controllers) {\n controllers[0].gridController = controllers[0].gridController || new GridController(controllers[0]);\n controllers[0].gridController.registerColumn(element);\n }\n };\n}]).directive('uiScrollTd', function () {\n return {\n require: ['?^^uiScrollViewport'],\n restrict: 'A',\n link: function link($scope, element, $attr, controllers) {\n if (!controllers[0]) {\n return;\n }\n var scope = $scope;\n var tdInitializer = $scope.uiScrollTdInitializer;\n if (!tdInitializer) {\n tdInitializer = $scope.uiScrollTdInitializer = {\n linking: true\n };\n }\n if (!tdInitializer.linking) {\n scope = tdInitializer.scope;\n }\n var gridController = controllers[0].gridController;\n if (gridController.registerCell(scope, element)) {\n $scope.$on('$destroy', function () {\n return gridController.unregisterCell(scope, element);\n });\n }\n if (!tdInitializer.linking) {\n tdInitializer.onLink();\n }\n }\n };\n});\n\n/***/ })\n\n/******/ });\n\n\n// WEBPACK FOOTER //\n// ui-scroll-grid.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 6);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap b0424d7cd22095912625","angular.module('ui.scroll.grid', [])\r\n .directive('uiScrollTh', ['$log', '$timeout', function(console, $timeout) {\r\n\r\n function GridAdapter(controller) {\r\n\r\n this.getLayout = () => controller.getLayout();\r\n\r\n this.applyLayout = (layout) => controller.applyLayout(layout);\r\n\r\n this.columnFromPoint = (x, y) => controller.columnFromPoint(x, y);\r\n\r\n Object.defineProperty(this, 'columns', { get: () => controller.getColumns() });\r\n }\r\n\r\n function ColumnAdapter(controller, column) {\r\n\r\n this.css = function( /* attr, value */ ) {\r\n var attr = arguments[0];\r\n var value = arguments[1];\r\n if (arguments.length == 1) {\r\n return column.header.css(attr);\r\n }\r\n if (arguments.length == 2) {\r\n column.header.css(attr, value);\r\n controller.forEachRow((row) => row[column.id].css(attr, value));\r\n column.css[attr] = value;\r\n }\r\n };\r\n\r\n this.moveBefore = (index) => controller.moveBefore(column, index);\r\n\r\n this.exchangeWith = (index) => controller.exchangeWith(column, index);\r\n\r\n Object.defineProperty(this, 'columnId', { get: () => column.id });\r\n }\r\n\r\n function ColumnController(controller, columns, header) {\r\n\r\n this.header = header;\r\n this.css = {};\r\n this.mapTo = columns.length;\r\n this.id = columns.length;\r\n\r\n // controller api methods\r\n\r\n this.applyLayout = function(layout) {\r\n this.css = angular.extend({}, layout.css);\r\n this.mapTo = layout.mapTo;\r\n applyCss(this.header, this.css);\r\n };\r\n\r\n this.moveBefore = function(target) {\r\n if (target) {\r\n moveBefore(header, target.header);\r\n controller.forEachRow((row) => moveBefore(row[this.id], row[target.id]));\r\n } else {\r\n moveLast(header);\r\n controller.forEachRow((row) => moveLast(row[this.id]));\r\n }\r\n };\r\n\r\n this.columnFromPoint = function(x, y) {\r\n if (insidePoint(header, x, y)) {\r\n return this;\r\n }\r\n let result = null;\r\n controller.forEachRow((row) =>\r\n result = insidePoint(row[this.id], x, y) ? this : result\r\n );\r\n return result;\r\n };\r\n\r\n this.applyCss = function(target) {\r\n applyCss(target, this.css);\r\n };\r\n\r\n // function definitions\r\n\r\n function insidePoint(element, x, y) {\r\n let offset = element.offset();\r\n if (x < offset.left || offset.left + element.outerWidth(true) < x)\r\n return false;\r\n if (y < offset.top || offset.top + element.outerHeight(true) < y)\r\n return false;\r\n return true;\r\n }\r\n\r\n function moveBefore(element, target) {\r\n element.detach();\r\n target.before(element);\r\n }\r\n\r\n function moveLast(element) {\r\n let parent = element.parent();\r\n element.detach();\r\n parent.append(element);\r\n }\r\n\r\n function applyCss(target, css) {\r\n target.removeAttr('style');\r\n for (let attr in css) {\r\n if (css.hasOwnProperty(attr)) {\r\n target.css(attr, css[attr]);\r\n }\r\n }\r\n }\r\n\r\n }\r\n\r\n function GridController(scrollViewport) {\r\n let columns = [];\r\n let rowMap = new Map();\r\n\r\n $timeout(() => {\r\n scrollViewport.adapter.publicContext.gridAdapter = new GridAdapter(this);\r\n scrollViewport.adapter.transform = (scope, item) => transform(rowMap.get(scope), item);\r\n });\r\n\r\n this.registerColumn = function(header) {\r\n columns.push(new ColumnController(this, columns, header));\r\n };\r\n\r\n this.registerCell = function(scope, cell) {\r\n let row = rowMap.get(scope);\r\n if (!row) {\r\n row = [];\r\n rowMap.set(scope, row);\r\n }\r\n if (row.length >= columns.length) {\r\n return false;\r\n }\r\n row.push(cell);\r\n return true;\r\n };\r\n\r\n this.unregisterCell = function(scope, cell) {\r\n let row = rowMap.get(scope);\r\n let i = row.indexOf(cell);\r\n row.splice(i, 1);\r\n if (!row.length) {\r\n rowMap.delete(scope);\r\n }\r\n };\r\n\r\n this.forEachRow = function(callback) {\r\n rowMap.forEach(callback);\r\n };\r\n\r\n this.getColumns = function() {\r\n let result = [];\r\n columns.slice()\r\n .sort((a, b) => a.mapTo - b.mapTo)\r\n .forEach((column) => result.push(new ColumnAdapter(this, column)));\r\n return result;\r\n };\r\n\r\n this.getLayout = function() {\r\n let result = [];\r\n columns.forEach((column, index) => result.push({\r\n index: index,\r\n css: angular.extend({}, column.css),\r\n mapTo: column.mapTo\r\n }));\r\n return result;\r\n };\r\n\r\n this.applyLayout = function(layouts) {\r\n if (!layouts || layouts.length != columns.length) {\r\n throw new Error('Failed to apply layout - number of layouts should match number of columns');\r\n }\r\n layouts.forEach((layout, index) => columns[index].applyLayout(layout));\r\n transform(columns.map((column) => column.header));\r\n rowMap.forEach((row) => transform(row));\r\n };\r\n\r\n this.moveBefore = function(selected, target) {\r\n let index = target;\r\n\r\n if (target % 1 !== 0) {\r\n index = target ? columns[target.columnId].mapTo : columns.length;\r\n }\r\n if (index < 0 || index > columns.length) {\r\n return; // throw an error?\r\n }\r\n\r\n let mapTo = selected.mapTo,\r\n next = null;\r\n index -= mapTo < index ? 1 : 0;\r\n\r\n columns.forEach(c => {\r\n c.mapTo -= c.mapTo > mapTo ? 1 : 0;\r\n c.mapTo += c.mapTo >= index ? 1 : 0;\r\n next = c.mapTo === index + 1 ? c : next;\r\n });\r\n\r\n selected.mapTo = index;\r\n selected.moveBefore(next);\r\n };\r\n\r\n this.exchangeWith = function(selected, index) {\r\n if (index < 0 || index >= columns.length) {\r\n return;\r\n }\r\n columns.find(c => c.mapTo === index).mapTo = selected.mapTo;\r\n selected.mapTo = index;\r\n };\r\n\r\n this.columnFromPoint = function(x, y) {\r\n let column = columns.find(col => col.columnFromPoint(x, y));\r\n return column ? new ColumnAdapter(this, column) : undefined;\r\n };\r\n\r\n // function definitions\r\n\r\n function transform(row) {\r\n let parent = row[0].parent();\r\n let visible = [];\r\n\r\n row.forEach((cell, index) => {\r\n columns[index].applyCss(cell);\r\n visible[columns[index].mapTo] = row[index];\r\n row[index].detach();\r\n });\r\n\r\n visible.forEach(cell => parent.append(cell));\r\n }\r\n\r\n }\r\n\r\n return {\r\n require: ['^^uiScrollViewport'],\r\n restrict: 'A',\r\n link: ($scope, element, $attr, controllers) => {\r\n controllers[0].gridController = controllers[0].gridController || new GridController(controllers[0]);\r\n controllers[0].gridController.registerColumn(element);\r\n }\r\n };\r\n }])\r\n\r\n.directive('uiScrollTd', function() {\r\n return {\r\n require: ['?^^uiScrollViewport'],\r\n restrict: 'A',\r\n link: ($scope, element, $attr, controllers) => {\r\n if (!controllers[0]) {\r\n return;\r\n }\r\n let scope = $scope;\r\n let tdInitializer = $scope.uiScrollTdInitializer;\r\n if (!tdInitializer) {\r\n tdInitializer = $scope.uiScrollTdInitializer = {\r\n linking: true\r\n };\r\n }\r\n if (!tdInitializer.linking) {\r\n scope = tdInitializer.scope;\r\n }\r\n let gridController = controllers[0].gridController;\r\n if (gridController.registerCell(scope, element)) {\r\n $scope.$on('$destroy', () => gridController.unregisterCell(scope, element));\r\n }\r\n if (!tdInitializer.linking) {\r\n tdInitializer.onLink();\r\n }\r\n }\r\n };\r\n});\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui-scroll-grid.js"],"sourceRoot":""} \ No newline at end of file diff --git a/src/modules/padding.js b/src/modules/padding.js index 30584b0d..eed921fb 100644 --- a/src/modules/padding.js +++ b/src/modules/padding.js @@ -34,7 +34,7 @@ class CacheProto { clear() { this.length = 0; } -}; +} function Cache() { const instance = []; From 3c29747ddb3d7cfac0e0c8f9e261e2b7a9e24b4e Mon Sep 17 00:00:00 2001 From: NA Date: Wed, 25 Oct 2017 03:04:02 +0300 Subject: [PATCH 10/14] introduce ng-ui-scroll-hide class instead of built-in ng-hide --- src/modules/elementRoutines.js | 20 ++++++++++++++++++++ src/ui-scroll.js | 10 +++++----- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/modules/elementRoutines.js b/src/modules/elementRoutines.js index d7cee9ba..c89585f8 100644 --- a/src/modules/elementRoutines.js +++ b/src/modules/elementRoutines.js @@ -1,9 +1,29 @@ +const hideClassToken = 'ng-ui-scroll-hide'; + +function addCSSRule(sheet, selector, rules, index) { + if("insertRule" in sheet) { + sheet.insertRule(selector + '{' + rules + '}', index); + } + else if("addRule" in sheet) { + sheet.addRule(selector, rules, index); + } +} + export default class ElementRoutines { constructor($injector, $q) { this.$animate = ($injector.has && $injector.has('$animate')) ? $injector.get('$animate') : null; this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3; this.$q = $q; + addCSSRule(document.styleSheets[0], '.' + hideClassToken, 'display: none'); + } + + hideElement(wrapper) { + wrapper.element.addClass(hideClassToken); + } + + showElement(wrapper) { + wrapper.element.removeClass(hideClassToken); } insertElement(newElement, previousElement) { diff --git a/src/ui-scroll.js b/src/ui-scroll.js index f13d8b8d..f61af2fb 100644 --- a/src/ui-scroll.js +++ b/src/ui-scroll.js @@ -234,7 +234,7 @@ angular.module('ui.scroll', []) if (!isElementVisible(wrapper)) { wrapper.unregisterVisibilityWatcher = wrapper.scope.$watch(() => visibilityWatcher(wrapper)); } - wrapper.element.addClass('ng-hide'); // hide inserted elements before data binding + elementRoutines.hideElement(wrapper); // hide inserted elements before data binding } function createElement(wrapper, insertAfter, insertElement) { @@ -351,8 +351,8 @@ angular.module('ui.scroll', []) // We need the item bindings to be processed before we can do adjustment !$scope.$$phase && $scope.$digest(); - updates.inserted.forEach(w => w.element.removeClass('ng-hide')); - updates.prepended.forEach(w => w.element.removeClass('ng-hide')); + updates.inserted.forEach(w => elementRoutines.showElement(w)); + updates.prepended.forEach(w => elementRoutines.showElement(w)); if (isInvalid(rid)) { return; @@ -372,8 +372,8 @@ angular.module('ui.scroll', []) // We need the item bindings to be processed before we can do adjustment !$scope.$$phase && $scope.$digest(); - updates.inserted.forEach(w => w.element.removeClass('ng-hide')); - updates.prepended.forEach(w => w.element.removeClass('ng-hide')); + updates.inserted.forEach(w => elementRoutines.showElement(w)); + updates.prepended.forEach(w => elementRoutines.showElement(w)); viewport.onAfterPrepend(updates); From a4b745ce8a5b002e9130b810dcfc82e62d012475 Mon Sep 17 00:00:00 2001 From: NA Date: Wed, 25 Oct 2017 03:11:17 +0300 Subject: [PATCH 11/14] extract processUpdates method --- src/ui-scroll.js | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/ui-scroll.js b/src/ui-scroll.js index f61af2fb..96b617b0 100644 --- a/src/ui-scroll.js +++ b/src/ui-scroll.js @@ -340,19 +340,24 @@ angular.module('ui.scroll', []) } } + function processUpdates() { + const updates = updateDOM(); + + // We need the item bindings to be processed before we can do adjustments + !$scope.$$phase && $scope.$digest(); + + updates.inserted.forEach(w => elementRoutines.showElement(w)); + updates.prepended.forEach(w => elementRoutines.showElement(w)); + return updates; + } + function adjustBuffer(rid) { if (!rid) { // dismiss pending requests pending = []; rid = ++ridActual; } - let updates = updateDOM(); - - // We need the item bindings to be processed before we can do adjustment - !$scope.$$phase && $scope.$digest(); - - updates.inserted.forEach(w => elementRoutines.showElement(w)); - updates.prepended.forEach(w => elementRoutines.showElement(w)); + const updates = processUpdates(); if (isInvalid(rid)) { return; @@ -367,13 +372,7 @@ angular.module('ui.scroll', []) } function adjustBufferAfterFetch(rid) { - let updates = updateDOM(); - - // We need the item bindings to be processed before we can do adjustment - !$scope.$$phase && $scope.$digest(); - - updates.inserted.forEach(w => elementRoutines.showElement(w)); - updates.prepended.forEach(w => elementRoutines.showElement(w)); + const updates = processUpdates(); viewport.onAfterPrepend(updates); From 7c8659fcbc63b5b997c62ce8d92f0dfccef66fb1 Mon Sep 17 00:00:00 2001 From: NA Date: Wed, 25 Oct 2017 03:13:54 +0300 Subject: [PATCH 12/14] interim build --- dist/ui-scroll.js | 185 ++++++++++++++++++++++----------- dist/ui-scroll.js.map | 2 +- dist/ui-scroll.min.js | 4 +- dist/ui-scroll.min.js.map | 2 +- src/modules/elementRoutines.js | 4 +- 5 files changed, 129 insertions(+), 68 deletions(-) diff --git a/dist/ui-scroll.js b/dist/ui-scroll.js index dc67ac1d..68412449 100644 --- a/dist/ui-scroll.js +++ b/dist/ui-scroll.js @@ -1,7 +1,7 @@ /*! * angular-ui-scroll (uncompressed) * https://github.com/angular-ui/ui-scroll - * Version: 1.7.0-rc.2 -- 2017-10-20T00:12:44.031Z + * Version: 1.7.0-rc.2 -- 2017-10-25T00:12:31.816Z * License: MIT */ /******/ (function(modules) { // webpackBootstrap @@ -313,21 +313,24 @@ var Adapter = function () { return; } - var keepIt = void 0; - var pos = this.buffer.indexOf(wrapper) + 1; + var position = this.buffer.indexOf(wrapper); + if (!newItems.reverse().some(function (newItem) { + return newItem === wrapper.item; + })) { + wrapper.op = 'remove'; + if (position === 0 && !newItems.length) { + wrapper._op = 'isTop'; // to catch "first" edge case on remove + } + } - newItems.reverse().forEach(function (newItem) { + newItems.forEach(function (newItem) { if (newItem === wrapper.item) { - keepIt = true; - pos--; + position--; } else { - _this3.buffer.insert(pos, newItem); + // 3 parameter (isTop) is to catch "first" edge case on insert + _this3.buffer.insert(position + 1, newItem, position === -1); } }); - - if (!keepIt) { - wrapper.op = 'remove'; - } } }]); @@ -386,7 +389,7 @@ function ScrollBuffer(elementRoutines, bufferSize) { * for insert the number is the index for the buffer element the new one have to be inserted after * operations: 'append', 'prepend', 'insert', 'remove', 'update', 'none' */ - insert: function insert(operation, item) { + insert: function insert(operation, item, isTop) { var wrapper = { item: item }; @@ -395,6 +398,11 @@ function ScrollBuffer(elementRoutines, bufferSize) { // it is an insert wrapper.op = 'insert'; buffer.splice(operation, 0, wrapper); + if (isTop) { + buffer.first--; + } else { + buffer.next++; + } } else { wrapper.op = operation; switch (operation) { @@ -421,6 +429,15 @@ function ScrollBuffer(elementRoutines, bufferSize) { } // removes single item(wrapper) from the buffer buffer.splice(buffer.indexOf(arg1), 1); + if (arg1._op === 'isTop') { + buffer.first++; + } else { + buffer.next--; + } + if (!buffer.length) { + buffer.first = 1; + buffer.next = 1; + } return elementRoutines.removeElementAnimated(arg1); }, @@ -459,6 +476,16 @@ var _createClass = function () { function defineProperties(target, props) { for function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var hideClassToken = 'ng-ui-scroll-hide'; + +function addCSSRule(sheet, selector, rules, index) { + if ('insertRule' in sheet) { + sheet.insertRule(selector + '{' + rules + '}', index); + } else if ('addRule' in sheet) { + sheet.addRule(selector, rules, index); + } +} + var ElementRoutines = function () { function ElementRoutines($injector, $q) { _classCallCheck(this, ElementRoutines); @@ -466,9 +493,20 @@ var ElementRoutines = function () { this.$animate = $injector.has && $injector.has('$animate') ? $injector.get('$animate') : null; this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3; this.$q = $q; + addCSSRule(document.styleSheets[0], '.' + hideClassToken, 'display: none'); } _createClass(ElementRoutines, [{ + key: 'hideElement', + value: function hideElement(wrapper) { + wrapper.element.addClass(hideClassToken); + } + }, { + key: 'showElement', + value: function showElement(wrapper) { + wrapper.element.removeClass(hideClassToken); + } + }, { key: 'insertElement', value: function insertElement(newElement, previousElement) { previousElement.after(newElement); @@ -1050,46 +1088,74 @@ function Viewport(elementRoutines, buffer, element, viewportController, $rootSco Object.defineProperty(exports, "__esModule", { value: true }); + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + exports.default = Padding; -function Cache() { - var cache = Object.create(Array.prototype); - angular.extend(cache, { - add: function add(item) { - for (var i = cache.length - 1; i >= 0; i--) { - if (cache[i].index === item.scope.$index) { - cache[i].height = item.element.outerHeight(); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +// Can't just extend the Array, due to Babel does not support built-in classes extending +// This solution was taken from https://stackoverflow.com/questions/46897414/es6-class-extends-array-workaround-for-es5-babel-transpile +var CacheProto = function () { + function CacheProto() { + _classCallCheck(this, CacheProto); + } + + _createClass(CacheProto, [{ + key: 'add', + value: function add(item) { + for (var i = this.length - 1; i >= 0; i--) { + if (this[i].index === item.scope.$index) { + this[i].height = item.element.outerHeight(); return; } } - cache.push({ + this.push({ index: item.scope.$index, height: item.element.outerHeight() }); - cache.sort(function (a, b) { + this.sort(function (a, b) { return a.index < b.index ? -1 : a.index > b.index ? 1 : 0; }); - }, - remove: function remove(item) { - for (var i = cache.length - 1; i >= 0; i--) { - if (cache[i].index === item.scope.$index) { - cache.splice(i, 1); + } + }, { + key: 'remove', + value: function remove(itemToRemove) { + for (var i = this.length - 1; i >= 0; i--) { + if (this[i].index === itemToRemove.scope.$index) { + this.splice(i, 1); break; } } - for (var _i = cache.length - 1; _i >= 0; _i--) { - if (cache[_i].index > item.scope.$index) { - cache[_i].index--; + if (itemToRemove._op !== 'isTop') { + for (var _i = this.length - 1; _i >= 0; _i--) { + if (this[_i].index > itemToRemove.scope.$index) { + this[_i].index--; + } } } - }, - clear: function clear() { - cache.length = 0; } - }); + }, { + key: 'clear', + value: function clear() { + this.length = 0; + } + }]); - return cache; + return CacheProto; +}(); + +function Cache() { + var instance = []; + instance.push.apply(instance, arguments); + Object.setPrototypeOf(instance, Cache.prototype); + return instance; } +Cache.prototype = Object.create(Array.prototype); +Object.getOwnPropertyNames(CacheProto.prototype).forEach(function (methodName) { + return Cache.prototype[methodName] = CacheProto.prototype[methodName]; +}); function Padding(template) { var result = void 0; @@ -1294,12 +1360,12 @@ angular.module('ui.scroll', []).service('jqLiteExtras', function () { }, success); }; - /** - * Build padding elements - * - * Calling linker is the only way I found to get access to the tag name of the template - * to prevent the directive scope from pollution a new scope is created and destroyed - * right after the builder creation is completed + /** + * Build padding elements + * + * Calling linker is the only way I found to get access to the tag name of the template + * to prevent the directive scope from pollution a new scope is created and destroyed + * right after the builder creation is completed */ linker(function (clone, scope) { viewport.createPaddingElements(clone[0]); @@ -1375,7 +1441,7 @@ angular.module('ui.scroll', []).service('jqLiteExtras', function () { return visibilityWatcher(wrapper); }); } - wrapper.element.addClass('ng-hide'); // hide inserted elements before data binding + elementRoutines.hideElement(wrapper); // hide inserted elements before data binding } function createElement(wrapper, insertAfter, insertElement) { @@ -1485,24 +1551,29 @@ angular.module('ui.scroll', []).service('jqLiteExtras', function () { } } - function adjustBuffer(rid) { - if (!rid) { - // dismiss pending requests - pending = []; - rid = ++ridActual; - } - + function processUpdates() { var updates = updateDOM(); - // We need the item bindings to be processed before we can do adjustment + // We need the item bindings to be processed before we can do adjustments !$scope.$$phase && $scope.$digest(); updates.inserted.forEach(function (w) { - return w.element.removeClass('ng-hide'); + return elementRoutines.showElement(w); }); updates.prepended.forEach(function (w) { - return w.element.removeClass('ng-hide'); + return elementRoutines.showElement(w); }); + return updates; + } + + function adjustBuffer(rid) { + if (!rid) { + // dismiss pending requests + pending = []; + rid = ++ridActual; + } + + var updates = processUpdates(); if (isInvalid(rid)) { return; @@ -1517,17 +1588,7 @@ angular.module('ui.scroll', []).service('jqLiteExtras', function () { } function adjustBufferAfterFetch(rid) { - var updates = updateDOM(); - - // We need the item bindings to be processed before we can do adjustment - !$scope.$$phase && $scope.$digest(); - - updates.inserted.forEach(function (w) { - return w.element.removeClass('ng-hide'); - }); - updates.prepended.forEach(function (w) { - return w.element.removeClass('ng-hide'); - }); + var updates = processUpdates(); viewport.onAfterPrepend(updates); diff --git a/dist/ui-scroll.js.map b/dist/ui-scroll.js.map index bcf6d597..08d98ca7 100644 --- a/dist/ui-scroll.js.map +++ b/dist/ui-scroll.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap 19918b905def3093ea75","webpack:///./src/modules/adapter.js","webpack:///./src/modules/buffer.js","webpack:///./src/modules/elementRoutines.js","webpack:///./src/modules/jqLiteExtras.js","webpack:///./src/modules/viewport.js","webpack:///./src/modules/padding.js","webpack:///./src/ui-scroll.js"],"names":["getCtrlOnData","attr","element","onSyntax","match","length","window","console","log","ctrl","tail","candidate","candidateScope","scope","candidateName","target","source","parent","Error","Adapter","viewport","buffer","adjustBuffer","reload","$attr","$parse","$scope","isLoading","disabled","viewportScope","getScope","startScope","$parent","publicContext","assignAdapter","adapter","generatePublicContext","adapterAttr","replace","ctrlOnData","adapterOnScope","assign","error","message","angular","extend","publicMethods","i","bind","publicProps","property","Object","defineProperty","get","set","value","bof","eof","arg1","arg2","isFunction","slice","forEach","wrapper","applyUpdate","item","index","first","newItems","append","clipTop","clipBottom","prepend","rowTop","topHeight","topDone","bottomDone","itemTop","offset","top","itemHeight","outerHeight","topDataPos","topVisiblePos","bottomVisiblePos","isEOF","isArray","keepIt","pos","indexOf","reverse","newItem","insert","op","ScrollBuffer","elementRoutines","bufferSize","create","Array","prototype","size","reset","startIndex","remove","next","minIndex","maxIndex","minIndexUser","maxIndexUser","items","Math","max","min","operation","splice","push","unshift","isNumber","removeElement","removeElementAnimated","effectiveHeight","elements","Number","MAX_VALUE","bottom","NEGATIVE_INFINITY","offsetParent","ElementRoutines","$injector","$q","$animate","has","isAngularVersionLessThen1_3","version","major","minor","newElement","previousElement","after","$destroy","insertElement","deferred","defer","enter","resolve","promise","leave","then","JQLiteExtras","convertToPx","css","getStyle","isWindow","name","self","elem","nodeType","style","call","obj","document","location","alert","setInterval","scrollTo","direction","left","method","prop","preserve","isDefined","documentElement","getComputedStyle","parseFloat","currentStyle","result","rs","rsLeft","core_pnum","rnumnonpx","RegExp","test","runtimeStyle","pixelLeft","getMeasurements","measure","base","borderA","borderB","computedMarginA","computedMarginB","computedStyle","dirA","dirB","marginA","marginB","paddingA","paddingB","height","width","padding","border","margin","offsetWidth","offsetHeight","getWidthHeight","measurements","outer","outerfull","before","newElem","children","j","ref","contents","outerHTML","option","outerWidth","docElem","win","box","doc","ownerDocument","arguments","undefined","getBoundingClientRect","defaultView","parentWindow","pageYOffset","scrollTop","clientTop","pageXOffset","scrollLeft","clientLeft","key","Viewport","viewportController","$rootScope","topPadding","bottomPadding","container","bufferPadding","createPaddingElements","template","applyContainerStyle","bottomDataPos","scrollHeight","e","sibling","insertElementAnimated","shouldLoadBottom","overage","overageHeight","emptySpaceHeight","cache","add","adjustPaddings","shouldLoadTop","topPaddingHeight","reduce","summ","bottomPaddingHeight","visibleItemsHeight","averageItemHeight","adjustTopPadding","adjustBottomPadding","topPaddingHeightAdd","bottomPaddingHeightAdd","onAfterMinIndexSet","topPaddingHeightOld","diff","onAfterPrepend","updates","prepended","paddingHeight","resetTopPadding","clear","resetBottomPadding","removeItem","Padding","Cache","$index","sort","a","b","Node","ELEMENT_NODE","tagName","toLowerCase","table","find","module","service","run","jqLiteExtras","jQuery","registerFor","directive","restrict","controller","child","$timeout","require","transclude","priority","terminal","link","controllers","linker","uiScroll","parseNumericAttr","defaultValue","isNaN","BUFFER_MIN","BUFFER_DEFAULT","PADDING_MIN","PADDING_DEFAULT","datasource","itemName","datasourceName","ridActual","pending","isDatasourceValid","isObject","onRenderHandlers","onRenderHandlersRunner","handler","preDefineIndexProperty","propName","getter","hasOwnProperty","defineIndexProperty","propUserName","descriptor","getOwnPropertyDescriptor","fetchNext","success","count","fetchPrevious","clone","$on","unbindEvents","unbind","wheelHandler","isInvalid","rid","$$destroyed","bindEvents","resizeAndScrollHandler","isElementVisible","visibilityWatcher","unregisterVisibilityWatcher","insertWrapperContent","insertAfter","createElement","$watch","addClass","promises","transform","tdInitializer","uiScrollTdInitializer","linking","onLink","updateDOM","toBePrepended","toBeRemoved","inserted","concat","removed","animated","updatePaddings","all","enqueueFetch","loading","fetch","$$phase","$digest","w","removeClass","calculateProperties","adjustBufferAfterFetch","shift","event","yMax","clientHeight","preventDefault"],"mappings":"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","file":"ui-scroll.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 19918b905def3093ea75","function getCtrlOnData(attr, element) {\r\n let onSyntax = attr.match(/^(.+)(\\s+on\\s+)(.+)?/);\r\n if (onSyntax && onSyntax.length === 4) {\r\n window.console.log('Angular ui-scroll adapter assignment warning. \"Controller On\" syntax has been deprecated since ui-scroll v1.6.1.');\r\n let ctrl = onSyntax[3];\r\n let tail = onSyntax[1];\r\n let candidate = element;\r\n while (candidate.length) {\r\n let candidateScope = candidate.scope(); // doesn't work when debugInfoEnabled flag = true\r\n let candidateName = (candidate.attr('ng-controller') || '').match(/(\\w(?:\\w|\\d)*)(?:\\s+as\\s+(\\w(?:\\w|\\d)*))?/);\r\n if (candidateName && candidateName[1] === ctrl) {\r\n return {\r\n target: candidateScope,\r\n source: tail\r\n };\r\n }\r\n candidate = candidate.parent();\r\n }\r\n throw new Error('Angular ui-scroll adapter assignment error. Failed to locate target controller \"' + ctrl + '\" to inject \"' + tail + '\"');\r\n }\r\n}\r\n\r\nclass Adapter {\r\n\r\n constructor(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope) {\r\n this.viewport = viewport;\r\n this.buffer = buffer;\r\n this.adjustBuffer = adjustBuffer;\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, $parse, element);\r\n this.generatePublicContext($attr, $parse);\r\n }\r\n\r\n assignAdapter(adapterAttr, $parse, element) {\r\n if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\\s+|\\s+$/gm, ''))) {\r\n return;\r\n }\r\n let ctrlOnData = getCtrlOnData(adapterAttr, element);\r\n let adapterOnScope;\r\n\r\n try {\r\n if (ctrlOnData) { // \"Controller On\", deprecated since v1.6.1\r\n $parse(ctrlOnData.source).assign(ctrlOnData.target, {});\r\n adapterOnScope = $parse(ctrlOnData.source)(ctrlOnData.target);\r\n }\r\n else {\r\n $parse(adapterAttr).assign(this.startScope, {});\r\n adapterOnScope = $parse(adapterAttr)(this.startScope);\r\n }\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($attr, $parse) {\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 = $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 $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.adjustBuffer() : 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 applyUpdates(arg1, arg2) {\r\n if (angular.isFunction(arg1)) {\r\n // arg1 is the updater function, arg2 is ignored\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, 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 - this.buffer.first;\r\n if ((index >= 0 && index < this.buffer.length)) {\r\n this.applyUpdate(this.buffer[index], arg2);\r\n }\r\n }\r\n\r\n this.adjustBuffer();\r\n }\r\n\r\n append(newItems) {\r\n this.buffer.append(newItems);\r\n this.adjustBuffer();\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.adjustBuffer();\r\n this.viewport.clipTop();\r\n this.viewport.clipBottom();\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\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\r\n rowTop = itemTop;\r\n\r\n if (topDone && bottomDone) {\r\n break;\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\r\n let keepIt;\r\n let pos = (this.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 this.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}\r\n\r\nexport default Adapter;\n\n\n// WEBPACK FOOTER //\n// ./src/modules/adapter.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.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 return buffer;\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/buffer.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","/*!\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","import Padding from './padding';\r\n\r\nexport default function Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding) {\r\n let topPadding = null;\r\n let bottomPadding = null;\r\n const viewport = viewportController && viewportController.viewport ? viewportController.viewport : angular.element(window);\r\n const container = viewportController && viewportController.container ? viewportController.container : undefined;\r\n const scope = viewportController && viewportController.scope ? viewportController.scope : $rootScope;\r\n\r\n viewport.css({\r\n 'overflow-anchor': 'none',\r\n 'overflow-y': 'auto',\r\n 'display': 'block'\r\n });\r\n\r\n function bufferPadding() {\r\n return viewport.outerHeight() * padding; // some extra space to initiate preload\r\n }\r\n\r\n angular.extend(viewport, {\r\n getScope() {\r\n return scope;\r\n },\r\n\r\n createPaddingElements(template) {\r\n topPadding = new Padding(template);\r\n bottomPadding = new Padding(template);\r\n element.before(topPadding);\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.adjustPaddings();\r\n }\r\n },\r\n\r\n shouldLoadTop() {\r\n return !buffer.bof && (viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding());\r\n },\r\n\r\n clipTop() {\r\n // clip the invisible items off the top\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\r\n\r\n for (let i = 0; i < buffer.length; i++) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n topPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n // we need to adjust top padding element before items are removed from top\r\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\r\n topPadding.height(topPadding.height() + overageHeight);\r\n buffer.bof = false;\r\n buffer.remove(0, overage);\r\n buffer.first += overage;\r\n }\r\n },\r\n\r\n adjustPaddings() {\r\n if (!buffer.length) {\r\n return;\r\n }\r\n\r\n // precise heights calculation, 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 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 diff -= viewport.scrollTop();\r\n if(diff > 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 removeItem(item) {\r\n topPadding.cache.remove(item);\r\n bottomPadding.cache.remove(item);\r\n return buffer.remove(item);\r\n }\r\n });\r\n\r\n return viewport;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/viewport.js","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 cache.sort((a, b) => ((a.index < b.index) ? -1 : ((a.index > b.index) ? 1 : 0)));\r\n },\r\n\r\n remove(item) {\r\n for (let i = cache.length - 1; i >= 0; i--) {\r\n if (cache[i].index === item.scope.$index) {\r\n cache.splice(i, 1);\r\n break;\r\n }\r\n }\r\n for (let i = cache.length - 1; i >= 0; i--) {\r\n if (cache[i].index > item.scope.$index) {\r\n cache[i].index--;\r\n }\r\n }\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 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\r\n switch (template.tagName.toLowerCase()) {\r\n case 'dl':\r\n throw new Error(`ui-scroll directive does not support <${template.tagName}> as a repeating tag: ${template.outerHTML}`);\r\n case 'tr':\r\n let table = angular.element('
');\r\n result = table.find('tr');\r\n break;\r\n case 'li':\r\n result = angular.element('
  • ');\r\n break;\r\n default:\r\n result = angular.element('
    ');\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","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 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 '$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, $rootScope, padding);\n let adapter = new Adapter(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope);\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 onRenderHandlers = [];\n function onRenderHandlersRunner() {\n if(onRenderHandlers.length) {\n angular.forEach(onRenderHandlers, (handler) => handler());\n onRenderHandlers = [];\n }\n }\n function preDefineIndexProperty(datasource, propName) {\n let getter;\n // need to postpone min/maxIndexUser processing if the view is empty\n if(datasource.hasOwnProperty(propName) && !buffer.length) {\n getter = datasource[propName];\n delete datasource[propName];\n onRenderHandlers.push(() => datasource[propName] = getter);\n }\n }\n\n function defineIndexProperty(datasource, propName, propUserName) {\n let descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n if (descriptor && (descriptor.set || descriptor.get)) {\n return;\n }\n let getter;\n preDefineIndexProperty(datasource, propName);\n Object.defineProperty(datasource, propName, {\n set: (value) => {\n getter = value;\n buffer[propUserName] = value;\n let topPaddingHeightOld = viewport.topDataPos();\n viewport.adjustPaddings();\n if (propName === 'minIndex') {\n viewport.onAfterMinIndexSet(topPaddingHeightOld);\n }\n },\n get: () => getter\n });\n }\n\n defineIndexProperty(datasource, 'minIndex', 'minIndexUser');\n defineIndexProperty(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 /**\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 if (!pending.length) {\n $timeout(() => adjustBuffer());\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 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 // ui-scroll-grid apply\n if (adapter.transform) {\n let tdInitializer = wrapper.scope.uiScrollTdInitializer;\n if (tdInitializer && tdInitializer.linking) {\n adapter.transform(wrapper.scope, wrapper.element);\n } else {\n wrapper.scope.uiScrollTdInitializer = {\n onLink: () => adapter.transform(wrapper.scope, wrapper.element),\n scope: wrapper.scope\n };\n }\n }\n return promises;\n }\n\n function updateDOM() {\n let promises = [];\n const toBePrepended = [];\n const toBeRemoved = [];\n const inserted = [];\n\n buffer.forEach((wrapper, i) => {\n switch (wrapper.op) {\n case 'prepend':\n toBePrepended.unshift(wrapper);\n break;\n case 'append':\n insertWrapperContent(wrapper, i);\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'insert':\n promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated));\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'remove':\n toBeRemoved.push(wrapper);\n }\n });\n\n toBeRemoved.forEach((wrapper) => promises = promises.concat(viewport.removeItem(wrapper)));\n\n if (toBePrepended.length)\n toBePrepended.forEach((wrapper) => {\n insertWrapperContent(wrapper);\n wrapper.op = 'none';\n });\n\n buffer.forEach((item, i) => item.scope.$index = buffer.first + i);\n\n return {\n prepended: toBePrepended,\n removed: toBeRemoved,\n inserted: inserted,\n animated: promises\n };\n\n }\n\n function updatePaddings(rid, updates) {\n // schedule another adjustBuffer after animation completion\n if (updates.animated.length) {\n $q.all(updates.animated).then(() => {\n viewport.adjustPaddings();\n adjustBuffer(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 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 !$scope.$$phase && $scope.$digest();\n\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 function adjustBufferAfterFetch(rid) {\n let updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustment\n !$scope.$$phase && $scope.$digest();\n\n updates.inserted.forEach(w => w.element.removeClass('ng-hide'));\n updates.prepended.forEach(w => w.element.removeClass('ng-hide'));\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 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.$$phase && $scope.$digest();\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"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap a80a038c57c3ae0e92df","webpack:///./src/modules/adapter.js","webpack:///./src/modules/buffer.js","webpack:///./src/modules/elementRoutines.js","webpack:///./src/modules/jqLiteExtras.js","webpack:///./src/modules/viewport.js","webpack:///./src/modules/padding.js","webpack:///./src/ui-scroll.js"],"names":["getCtrlOnData","attr","element","onSyntax","match","length","window","console","log","ctrl","tail","candidate","candidateScope","scope","candidateName","target","source","parent","Error","Adapter","viewport","buffer","adjustBuffer","reload","$attr","$parse","$scope","isLoading","disabled","viewportScope","getScope","startScope","$parent","publicContext","assignAdapter","adapter","generatePublicContext","adapterAttr","replace","ctrlOnData","adapterOnScope","assign","error","message","angular","extend","publicMethods","i","bind","publicProps","property","Object","defineProperty","get","set","value","bof","eof","arg1","arg2","isFunction","slice","forEach","wrapper","applyUpdate","item","index","first","newItems","append","clipTop","clipBottom","prepend","rowTop","topHeight","topDone","bottomDone","itemTop","offset","top","itemHeight","outerHeight","topDataPos","topVisiblePos","bottomVisiblePos","isEOF","isArray","position","indexOf","reverse","some","newItem","op","_op","insert","ScrollBuffer","elementRoutines","bufferSize","create","Array","prototype","size","reset","startIndex","remove","next","minIndex","maxIndex","minIndexUser","maxIndexUser","items","Math","max","min","operation","isTop","splice","push","unshift","isNumber","removeElement","removeElementAnimated","effectiveHeight","elements","Number","MAX_VALUE","bottom","NEGATIVE_INFINITY","offsetParent","hideClassToken","addCSSRule","sheet","selector","rules","insertRule","addRule","ElementRoutines","$injector","$q","$animate","has","isAngularVersionLessThen1_3","version","major","minor","document","styleSheets","addClass","removeClass","newElement","previousElement","after","$destroy","insertElement","deferred","defer","enter","resolve","promise","leave","then","JQLiteExtras","convertToPx","css","getStyle","isWindow","name","self","elem","nodeType","style","call","obj","location","alert","setInterval","scrollTo","direction","left","method","prop","preserve","isDefined","documentElement","getComputedStyle","parseFloat","currentStyle","result","rs","rsLeft","core_pnum","rnumnonpx","RegExp","test","runtimeStyle","pixelLeft","getMeasurements","measure","base","borderA","borderB","computedMarginA","computedMarginB","computedStyle","dirA","dirB","marginA","marginB","paddingA","paddingB","height","width","padding","border","margin","offsetWidth","offsetHeight","getWidthHeight","measurements","outer","outerfull","before","newElem","children","j","ref","contents","outerHTML","option","outerWidth","docElem","win","box","doc","ownerDocument","arguments","undefined","getBoundingClientRect","defaultView","parentWindow","pageYOffset","scrollTop","clientTop","pageXOffset","scrollLeft","clientLeft","key","Viewport","viewportController","$rootScope","topPadding","bottomPadding","container","bufferPadding","createPaddingElements","template","applyContainerStyle","bottomDataPos","scrollHeight","e","sibling","insertElementAnimated","shouldLoadBottom","overage","overageHeight","emptySpaceHeight","cache","add","adjustPaddings","shouldLoadTop","topPaddingHeight","reduce","summ","bottomPaddingHeight","visibleItemsHeight","averageItemHeight","adjustTopPadding","adjustBottomPadding","topPaddingHeightAdd","bottomPaddingHeightAdd","onAfterMinIndexSet","topPaddingHeightOld","diff","onAfterPrepend","updates","prepended","paddingHeight","resetTopPadding","clear","resetBottomPadding","removeItem","Padding","CacheProto","$index","sort","a","b","itemToRemove","Cache","instance","apply","setPrototypeOf","getOwnPropertyNames","methodName","Node","ELEMENT_NODE","tagName","toLowerCase","table","find","module","service","run","jqLiteExtras","jQuery","registerFor","directive","restrict","controller","child","$timeout","require","transclude","priority","terminal","link","controllers","linker","uiScroll","parseNumericAttr","defaultValue","isNaN","BUFFER_MIN","BUFFER_DEFAULT","PADDING_MIN","PADDING_DEFAULT","datasource","itemName","datasourceName","ridActual","pending","isDatasourceValid","isObject","onRenderHandlers","onRenderHandlersRunner","handler","preDefineIndexProperty","propName","getter","hasOwnProperty","defineIndexProperty","propUserName","descriptor","getOwnPropertyDescriptor","fetchNext","success","count","fetchPrevious","clone","$on","unbindEvents","unbind","wheelHandler","isInvalid","rid","$$destroyed","bindEvents","resizeAndScrollHandler","isElementVisible","visibilityWatcher","unregisterVisibilityWatcher","insertWrapperContent","insertAfter","createElement","$watch","hideElement","promises","transform","tdInitializer","uiScrollTdInitializer","linking","onLink","updateDOM","toBePrepended","toBeRemoved","inserted","concat","removed","animated","updatePaddings","all","enqueueFetch","loading","fetch","processUpdates","$$phase","$digest","showElement","w","calculateProperties","adjustBufferAfterFetch","shift","event","yMax","clientHeight","preventDefault"],"mappings":"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","file":"ui-scroll.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap a80a038c57c3ae0e92df","function getCtrlOnData(attr, element) {\r\n let onSyntax = attr.match(/^(.+)(\\s+on\\s+)(.+)?/);\r\n if (onSyntax && onSyntax.length === 4) {\r\n window.console.log('Angular ui-scroll adapter assignment warning. \"Controller On\" syntax has been deprecated since ui-scroll v1.6.1.');\r\n let ctrl = onSyntax[3];\r\n let tail = onSyntax[1];\r\n let candidate = element;\r\n while (candidate.length) {\r\n let candidateScope = candidate.scope(); // doesn't work when debugInfoEnabled flag = true\r\n let candidateName = (candidate.attr('ng-controller') || '').match(/(\\w(?:\\w|\\d)*)(?:\\s+as\\s+(\\w(?:\\w|\\d)*))?/);\r\n if (candidateName && candidateName[1] === ctrl) {\r\n return {\r\n target: candidateScope,\r\n source: tail\r\n };\r\n }\r\n candidate = candidate.parent();\r\n }\r\n throw new Error('Angular ui-scroll adapter assignment error. Failed to locate target controller \"' + ctrl + '\" to inject \"' + tail + '\"');\r\n }\r\n}\r\n\r\nclass Adapter {\r\n\r\n constructor(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope) {\r\n this.viewport = viewport;\r\n this.buffer = buffer;\r\n this.adjustBuffer = adjustBuffer;\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, $parse, element);\r\n this.generatePublicContext($attr, $parse);\r\n }\r\n\r\n assignAdapter(adapterAttr, $parse, element) {\r\n if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\\s+|\\s+$/gm, ''))) {\r\n return;\r\n }\r\n let ctrlOnData = getCtrlOnData(adapterAttr, element);\r\n let adapterOnScope;\r\n\r\n try {\r\n if (ctrlOnData) { // \"Controller On\", deprecated since v1.6.1\r\n $parse(ctrlOnData.source).assign(ctrlOnData.target, {});\r\n adapterOnScope = $parse(ctrlOnData.source)(ctrlOnData.target);\r\n }\r\n else {\r\n $parse(adapterAttr).assign(this.startScope, {});\r\n adapterOnScope = $parse(adapterAttr)(this.startScope);\r\n }\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($attr, $parse) {\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 = $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 $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.adjustBuffer() : 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 applyUpdates(arg1, arg2) {\r\n if (angular.isFunction(arg1)) {\r\n // arg1 is the updater function, arg2 is ignored\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, 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 - this.buffer.first;\r\n if ((index >= 0 && index < this.buffer.length)) {\r\n this.applyUpdate(this.buffer[index], arg2);\r\n }\r\n }\r\n\r\n this.adjustBuffer();\r\n }\r\n\r\n append(newItems) {\r\n this.buffer.append(newItems);\r\n this.adjustBuffer();\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.adjustBuffer();\r\n this.viewport.clipTop();\r\n this.viewport.clipBottom();\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\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\r\n rowTop = itemTop;\r\n\r\n if (topDone && bottomDone) {\r\n break;\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\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\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}\r\n\r\nexport default Adapter;\n\n\n// WEBPACK FOOTER //\n// ./src/modules/adapter.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, 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\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') {\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 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 return buffer;\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/buffer.js","const hideClassToken = 'ng-ui-scroll-hide';\r\n\r\nfunction addCSSRule(sheet, selector, rules, index) {\r\n if('insertRule' in sheet) {\r\n sheet.insertRule(selector + '{' + rules + '}', index);\r\n }\r\n else if('addRule' in sheet) {\r\n sheet.addRule(selector, rules, index);\r\n }\r\n}\r\n\r\nexport default class ElementRoutines {\r\n\r\n constructor($injector, $q) {\r\n this.$animate = ($injector.has && $injector.has('$animate')) ? $injector.get('$animate') : null;\r\n this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3;\r\n this.$q = $q;\r\n addCSSRule(document.styleSheets[0], '.' + hideClassToken, 'display: none');\r\n }\r\n\r\n hideElement(wrapper) {\r\n wrapper.element.addClass(hideClassToken);\r\n }\r\n\r\n showElement(wrapper) {\r\n wrapper.element.removeClass(hideClassToken);\r\n }\r\n\r\n insertElement(newElement, previousElement) {\r\n previousElement.after(newElement);\r\n return [];\r\n }\r\n\r\n removeElement(wrapper) {\r\n wrapper.element.remove();\r\n wrapper.scope.$destroy();\r\n return [];\r\n }\r\n\r\n insertElementAnimated(newElement, previousElement) {\r\n if (!this.$animate) {\r\n return this.insertElement(newElement, previousElement);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n // no need for parent - previous element is never null\r\n this.$animate.enter(newElement, null, previousElement, () => deferred.resolve());\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n // no need for parent - previous element is never null\r\n return [this.$animate.enter(newElement, null, previousElement)];\r\n }\r\n\r\n removeElementAnimated(wrapper) {\r\n if (!this.$animate) {\r\n return this.removeElement(wrapper);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n this.$animate.leave(wrapper.element, () => {\r\n wrapper.scope.$destroy();\r\n return deferred.resolve();\r\n });\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n return [(this.$animate.leave(wrapper.element)).then(() => wrapper.scope.$destroy())];\r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/elementRoutines.js","/*!\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","import Padding from './padding';\r\n\r\nexport default function Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding) {\r\n let topPadding = null;\r\n let bottomPadding = null;\r\n const viewport = viewportController && viewportController.viewport ? viewportController.viewport : angular.element(window);\r\n const container = viewportController && viewportController.container ? viewportController.container : undefined;\r\n const scope = viewportController && viewportController.scope ? viewportController.scope : $rootScope;\r\n\r\n viewport.css({\r\n 'overflow-anchor': 'none',\r\n 'overflow-y': 'auto',\r\n 'display': 'block'\r\n });\r\n\r\n function bufferPadding() {\r\n return viewport.outerHeight() * padding; // some extra space to initiate preload\r\n }\r\n\r\n angular.extend(viewport, {\r\n getScope() {\r\n return scope;\r\n },\r\n\r\n createPaddingElements(template) {\r\n topPadding = new Padding(template);\r\n bottomPadding = new Padding(template);\r\n element.before(topPadding);\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.adjustPaddings();\r\n }\r\n },\r\n\r\n shouldLoadTop() {\r\n return !buffer.bof && (viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding());\r\n },\r\n\r\n clipTop() {\r\n // clip the invisible items off the top\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\r\n\r\n for (let i = 0; i < buffer.length; i++) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n topPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n // we need to adjust top padding element before items are removed from top\r\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\r\n topPadding.height(topPadding.height() + overageHeight);\r\n buffer.bof = false;\r\n buffer.remove(0, overage);\r\n buffer.first += overage;\r\n }\r\n },\r\n\r\n adjustPaddings() {\r\n if (!buffer.length) {\r\n return;\r\n }\r\n\r\n // precise heights calculation, 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 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 diff -= viewport.scrollTop();\r\n if(diff > 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 removeItem(item) {\r\n topPadding.cache.remove(item);\r\n bottomPadding.cache.remove(item);\r\n return buffer.remove(item);\r\n }\r\n });\r\n\r\n return viewport;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/viewport.js","// Can't just extend the Array, due to Babel does not support built-in classes extending\r\n// This solution was taken from https://stackoverflow.com/questions/46897414/es6-class-extends-array-workaround-for-es5-babel-transpile\r\nclass CacheProto {\r\n add(item) {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index === item.scope.$index) {\r\n this[i].height = item.element.outerHeight();\r\n return;\r\n }\r\n }\r\n this.push({\r\n index: item.scope.$index,\r\n height: item.element.outerHeight()\r\n });\r\n this.sort((a, b) => ((a.index < b.index) ? -1 : ((a.index > b.index) ? 1 : 0)));\r\n }\r\n\r\n remove(itemToRemove) {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index === itemToRemove.scope.$index) {\r\n this.splice(i, 1);\r\n break;\r\n }\r\n }\r\n if(itemToRemove._op !== 'isTop') {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index > itemToRemove.scope.$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\nexport default function Padding(template) {\r\n let result;\r\n\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\r\n switch (template.tagName.toLowerCase()) {\r\n case 'dl':\r\n throw new Error(`ui-scroll directive does not support <${template.tagName}> as a repeating tag: ${template.outerHTML}`);\r\n case 'tr':\r\n let table = angular.element('
    ');\r\n result = table.find('tr');\r\n break;\r\n case 'li':\r\n result = angular.element('
  • ');\r\n break;\r\n default:\r\n result = angular.element('
    ');\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","import JQLiteExtras from './modules/jqLiteExtras';\r\nimport ElementRoutines from './modules/elementRoutines.js';\r\nimport ScrollBuffer from './modules/buffer.js';\r\nimport Viewport from './modules/viewport.js';\r\nimport Adapter from './modules/adapter.js';\r\n\r\nangular.module('ui.scroll', [])\r\n\r\n .service('jqLiteExtras', () => new JQLiteExtras())\r\n .run(['jqLiteExtras', (jqLiteExtras) =>\r\n !window.jQuery ? jqLiteExtras.registerFor(angular.element) : null\r\n ])\r\n\r\n .directive('uiScrollViewport', function () {\r\n return {\r\n restrict: 'A',\r\n controller: [\r\n '$scope',\r\n '$element',\r\n function (scope, element) {\r\n this.container = element;\r\n this.viewport = element;\r\n this.scope = scope;\r\n\r\n angular.forEach(element.children(), (child => {\r\n if (child.tagName.toLowerCase() === 'tbody') {\r\n this.viewport = angular.element(child);\r\n }\r\n }));\r\n\r\n return this;\r\n }\r\n ]\r\n };\r\n })\r\n\r\n .directive('uiScroll', [\r\n '$log',\r\n '$injector',\r\n '$rootScope',\r\n '$timeout',\r\n '$q',\r\n '$parse',\r\n function (console, $injector, $rootScope, $timeout, $q, $parse) {\r\n\r\n return {\r\n require: ['?^uiScrollViewport'],\r\n restrict: 'A',\r\n transclude: 'element',\r\n priority: 1000,\r\n terminal: true,\r\n link: link\r\n };\r\n\r\n function link($scope, element, $attr, controllers, linker) {\r\n const match = $attr.uiScroll.match(/^\\s*(\\w+)\\s+in\\s+([(\\w|\\$)\\.]+)\\s*$/);\r\n if (!match) {\r\n throw new Error('Expected uiScroll in form of \\'_item_ in _datasource_\\' but got \\'' + $attr.uiScroll + '\\'');\r\n }\r\n\r\n function parseNumericAttr(value, defaultValue) {\r\n let result = $parse(value)($scope);\r\n return isNaN(result) ? defaultValue : result;\r\n }\r\n\r\n const BUFFER_MIN = 3;\r\n const BUFFER_DEFAULT = 10;\r\n const PADDING_MIN = 0.3;\r\n const PADDING_DEFAULT = 0.5;\r\n\r\n let datasource = null;\r\n const itemName = match[1];\r\n const datasourceName = match[2];\r\n const viewportController = controllers[0];\r\n const bufferSize = Math.max(BUFFER_MIN, parseNumericAttr($attr.bufferSize, BUFFER_DEFAULT));\r\n const padding = Math.max(PADDING_MIN, parseNumericAttr($attr.padding, PADDING_DEFAULT));\r\n let startIndex = parseNumericAttr($attr.startIndex, 1);\r\n let ridActual = 0;// current data revision id\r\n let pending = [];\r\n\r\n let elementRoutines = new ElementRoutines($injector, $q);\r\n let buffer = new ScrollBuffer(elementRoutines, bufferSize);\r\n let viewport = new Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding);\r\n let adapter = new Adapter(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope);\r\n\r\n if (viewportController) {\r\n viewportController.adapter = adapter;\r\n }\r\n\r\n let isDatasourceValid = () => angular.isObject(datasource) && angular.isFunction(datasource.get);\r\n datasource = $parse(datasourceName)($scope); // try to get datasource on scope\r\n if (!isDatasourceValid()) {\r\n datasource = $injector.get(datasourceName); // try to inject datasource as service\r\n if (!isDatasourceValid()) {\r\n throw new Error(datasourceName + ' is not a valid datasource');\r\n }\r\n }\r\n\r\n let onRenderHandlers = [];\r\n function onRenderHandlersRunner() {\r\n if(onRenderHandlers.length) {\r\n angular.forEach(onRenderHandlers, (handler) => handler());\r\n onRenderHandlers = [];\r\n }\r\n }\r\n function preDefineIndexProperty(datasource, propName) {\r\n let getter;\r\n // need to postpone min/maxIndexUser processing if the view is empty\r\n if(datasource.hasOwnProperty(propName) && !buffer.length) {\r\n getter = datasource[propName];\r\n delete datasource[propName];\r\n onRenderHandlers.push(() => datasource[propName] = getter);\r\n }\r\n }\r\n\r\n function defineIndexProperty(datasource, propName, propUserName) {\r\n let descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\r\n if (descriptor && (descriptor.set || descriptor.get)) {\r\n return;\r\n }\r\n let getter;\r\n preDefineIndexProperty(datasource, propName);\r\n Object.defineProperty(datasource, propName, {\r\n set: (value) => {\r\n getter = value;\r\n buffer[propUserName] = value;\r\n let topPaddingHeightOld = viewport.topDataPos();\r\n viewport.adjustPaddings();\r\n if (propName === 'minIndex') {\r\n viewport.onAfterMinIndexSet(topPaddingHeightOld);\r\n }\r\n },\r\n get: () => getter\r\n });\r\n }\r\n\r\n defineIndexProperty(datasource, 'minIndex', 'minIndexUser');\r\n defineIndexProperty(datasource, 'maxIndex', 'maxIndexUser');\r\n\r\n const fetchNext = (datasource.get.length !== 2) ?\r\n (success) => datasource.get(buffer.next, bufferSize, success) :\r\n (success) => {\r\n datasource.get({\r\n index: buffer.next,\r\n append: buffer.length ? buffer[buffer.length - 1].item : void 0,\r\n count: bufferSize\r\n }, success);\r\n };\r\n\r\n const fetchPrevious = (datasource.get.length !== 2) ?\r\n (success) => datasource.get(buffer.first - bufferSize, bufferSize, success) :\r\n (success) => {\r\n datasource.get({\r\n index: buffer.first - bufferSize,\r\n prepend: buffer.length ? buffer[0].item : void 0,\r\n count: bufferSize\r\n }, success);\r\n };\r\n\r\n /**\r\n * Build padding elements\r\n *\r\n * Calling linker is the only way I found to get access to the tag name of the template\r\n * to prevent the directive scope from pollution a new scope is created and destroyed\r\n * right after the builder creation is completed\r\n */\r\n linker((clone, scope) => {\r\n viewport.createPaddingElements(clone[0]);\r\n // we do not include the clone in the DOM. It means that the nested directives will not\r\n // be able to reach the parent directives, but in this case it is intentional because we\r\n // created the clone to access the template tag name\r\n scope.$destroy();\r\n clone.remove();\r\n });\r\n\r\n $scope.$on('$destroy', () => {\r\n unbindEvents();\r\n viewport.unbind('mousewheel', wheelHandler);\r\n });\r\n\r\n viewport.bind('mousewheel', wheelHandler);\r\n\r\n $timeout(() => {\r\n viewport.applyContainerStyle();\r\n reload();\r\n });\r\n\r\n /* Private function definitions */\r\n\r\n function isInvalid(rid) {\r\n return (rid && rid !== ridActual) || $scope.$$destroyed;\r\n }\r\n\r\n function bindEvents() {\r\n viewport.bind('resize', resizeAndScrollHandler);\r\n viewport.bind('scroll', resizeAndScrollHandler);\r\n }\r\n\r\n function unbindEvents() {\r\n viewport.unbind('resize', resizeAndScrollHandler);\r\n viewport.unbind('scroll', resizeAndScrollHandler);\r\n }\r\n\r\n function reload() {\r\n viewport.resetTopPadding();\r\n viewport.resetBottomPadding();\r\n if (arguments.length) {\r\n startIndex = arguments[0];\r\n }\r\n buffer.reset(startIndex);\r\n adjustBuffer();\r\n }\r\n\r\n function isElementVisible(wrapper) {\r\n return wrapper.element.height() && wrapper.element[0].offsetParent;\r\n }\r\n\r\n function visibilityWatcher(wrapper) {\r\n if (isElementVisible(wrapper)) {\r\n buffer.forEach((item) => {\r\n if (angular.isFunction(item.unregisterVisibilityWatcher)) {\r\n item.unregisterVisibilityWatcher();\r\n delete item.unregisterVisibilityWatcher;\r\n }\r\n });\r\n if (!pending.length) {\r\n $timeout(() => adjustBuffer());\r\n }\r\n }\r\n }\r\n\r\n function insertWrapperContent(wrapper, insertAfter) {\r\n createElement(wrapper, insertAfter, viewport.insertElement);\r\n if (!isElementVisible(wrapper)) {\r\n wrapper.unregisterVisibilityWatcher = wrapper.scope.$watch(() => visibilityWatcher(wrapper));\r\n }\r\n elementRoutines.hideElement(wrapper); // hide inserted elements before data binding\r\n }\r\n\r\n function createElement(wrapper, insertAfter, insertElement) {\r\n let promises = null;\r\n let sibling = (insertAfter > 0) ? buffer[insertAfter - 1].element : undefined;\r\n linker((clone, scope) => {\r\n promises = insertElement(clone, sibling);\r\n wrapper.element = clone;\r\n wrapper.scope = scope;\r\n scope[itemName] = wrapper.item;\r\n });\r\n // ui-scroll-grid apply\r\n if (adapter.transform) {\r\n let tdInitializer = wrapper.scope.uiScrollTdInitializer;\r\n if (tdInitializer && tdInitializer.linking) {\r\n adapter.transform(wrapper.scope, wrapper.element);\r\n } else {\r\n wrapper.scope.uiScrollTdInitializer = {\r\n onLink: () => adapter.transform(wrapper.scope, wrapper.element),\r\n scope: wrapper.scope\r\n };\r\n }\r\n }\r\n return promises;\r\n }\r\n\r\n function updateDOM() {\r\n let promises = [];\r\n const toBePrepended = [];\r\n const toBeRemoved = [];\r\n const inserted = [];\r\n\r\n buffer.forEach((wrapper, i) => {\r\n switch (wrapper.op) {\r\n case 'prepend':\r\n toBePrepended.unshift(wrapper);\r\n break;\r\n case 'append':\r\n insertWrapperContent(wrapper, i);\r\n wrapper.op = 'none';\r\n inserted.push(wrapper);\r\n break;\r\n case 'insert':\r\n promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated));\r\n wrapper.op = 'none';\r\n inserted.push(wrapper);\r\n break;\r\n case 'remove':\r\n toBeRemoved.push(wrapper);\r\n }\r\n });\r\n\r\n toBeRemoved.forEach((wrapper) => promises = promises.concat(viewport.removeItem(wrapper)));\r\n\r\n if (toBePrepended.length)\r\n toBePrepended.forEach((wrapper) => {\r\n insertWrapperContent(wrapper);\r\n wrapper.op = 'none';\r\n });\r\n\r\n buffer.forEach((item, i) => item.scope.$index = buffer.first + i);\r\n\r\n return {\r\n prepended: toBePrepended,\r\n removed: toBeRemoved,\r\n inserted: inserted,\r\n animated: promises\r\n };\r\n\r\n }\r\n\r\n function updatePaddings(rid, updates) {\r\n // schedule another adjustBuffer after animation completion\r\n if (updates.animated.length) {\r\n $q.all(updates.animated).then(() => {\r\n viewport.adjustPaddings();\r\n adjustBuffer(rid);\r\n });\r\n } else {\r\n viewport.adjustPaddings();\r\n }\r\n }\r\n\r\n function enqueueFetch(rid, updates) {\r\n if (viewport.shouldLoadBottom()) {\r\n if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\r\n // this means that at least one item appended in the last batch has height > 0\r\n if (pending.push(true) === 1) {\r\n adapter.loading(true);\r\n fetch(rid);\r\n }\r\n }\r\n } else if (viewport.shouldLoadTop()) {\r\n if ((!updates || buffer.effectiveHeight(updates.prepended) > 0) || pending[0]) {\r\n // this means that at least one item appended in the last batch has height > 0\r\n // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\r\n // BTW there will always be at least 1 element in the pending array because bottom is fetched first\r\n if (pending.push(false) === 1) {\r\n adapter.loading(true);\r\n fetch(rid);\r\n }\r\n }\r\n }\r\n }\r\n\r\n function processUpdates() {\r\n const updates = updateDOM();\r\n\r\n // We need the item bindings to be processed before we can do adjustments\r\n !$scope.$$phase && $scope.$digest();\r\n\r\n updates.inserted.forEach(w => elementRoutines.showElement(w));\r\n updates.prepended.forEach(w => elementRoutines.showElement(w));\r\n return updates;\r\n }\r\n\r\n function adjustBuffer(rid) {\r\n if (!rid) { // dismiss pending requests\r\n pending = [];\r\n rid = ++ridActual;\r\n }\r\n\r\n const updates = processUpdates();\r\n\r\n if (isInvalid(rid)) {\r\n return;\r\n }\r\n\r\n updatePaddings(rid, updates);\r\n enqueueFetch(rid);\r\n\r\n if (!pending.length) {\r\n adapter.calculateProperties();\r\n }\r\n }\r\n\r\n function adjustBufferAfterFetch(rid) {\r\n const updates = processUpdates();\r\n\r\n viewport.onAfterPrepend(updates);\r\n\r\n if (isInvalid(rid)) {\r\n return;\r\n }\r\n\r\n updatePaddings(rid, updates);\r\n onRenderHandlersRunner();\r\n enqueueFetch(rid, updates);\r\n pending.shift();\r\n\r\n if (pending.length)\r\n fetch(rid);\r\n else {\r\n adapter.loading(false);\r\n bindEvents();\r\n adapter.calculateProperties();\r\n }\r\n }\r\n\r\n function fetch(rid) {\r\n if (pending[0]) {// scrolling down\r\n if (buffer.length && !viewport.shouldLoadBottom()) {\r\n adjustBufferAfterFetch(rid);\r\n } else {\r\n fetchNext((result) => {\r\n if (isInvalid(rid)) {\r\n return;\r\n }\r\n\r\n if (result.length < bufferSize) {\r\n buffer.eof = true;\r\n }\r\n\r\n if (result.length > 0) {\r\n viewport.clipTop();\r\n buffer.append(result);\r\n }\r\n\r\n adjustBufferAfterFetch(rid);\r\n });\r\n }\r\n } else { // scrolling up\r\n if (buffer.length && !viewport.shouldLoadTop()) {\r\n adjustBufferAfterFetch(rid);\r\n } else {\r\n fetchPrevious((result) => {\r\n if (isInvalid(rid)) {\r\n return;\r\n }\r\n\r\n if (result.length < bufferSize) {\r\n buffer.bof = true;\r\n // log 'bof is reached'\r\n }\r\n\r\n if (result.length > 0) {\r\n if (buffer.length) {\r\n viewport.clipBottom();\r\n }\r\n buffer.prepend(result);\r\n }\r\n\r\n adjustBufferAfterFetch(rid);\r\n });\r\n }\r\n }\r\n }\r\n\r\n function resizeAndScrollHandler() {\r\n if (!$rootScope.$$phase && !adapter.isLoading && !adapter.disabled) {\r\n\r\n enqueueFetch(ridActual);\r\n\r\n if (pending.length) {\r\n unbindEvents();\r\n } else {\r\n adapter.calculateProperties();\r\n !$scope.$$phase && $scope.$digest();\r\n }\r\n }\r\n }\r\n\r\n function wheelHandler(event) {\r\n if (!adapter.disabled) {\r\n let scrollTop = viewport[0].scrollTop;\r\n let yMax = viewport[0].scrollHeight - viewport[0].clientHeight;\r\n\r\n if ((scrollTop === 0 && !buffer.bof) || (scrollTop === yMax && !buffer.eof)) {\r\n event.preventDefault();\r\n }\r\n }\r\n }\r\n }\r\n\r\n }\r\n ]);\n\n\n// WEBPACK FOOTER //\n// ./src/ui-scroll.js"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/ui-scroll.min.js b/dist/ui-scroll.min.js index e6aba975..0c3a8d55 100644 --- a/dist/ui-scroll.min.js +++ b/dist/ui-scroll.min.js @@ -1,8 +1,8 @@ /*! * angular-ui-scroll (compressed) * https://github.com/angular-ui/ui-scroll - * Version: 1.7.0-rc.2 -- 2017-10-20T00:12:44.072Z + * Version: 1.7.0-rc.2 -- 2017-10-25T00:12:31.854Z * License: MIT */ -!function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=7)}([function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){var n=e.match(/^(.+)(\s+on\s+)(.+)?/);if(n&&4===n.length){window.console.log('Angular ui-scroll adapter assignment warning. "Controller On" syntax has been deprecated since ui-scroll v1.6.1.');for(var r=n[3],i=n[1],o=t;o.length;){var a=o.scope(),u=(o.attr("ng-controller")||"").match(/(\w(?:\w|\d)*)(?:\s+as\s+(\w(?:\w|\d)*))?/);if(u&&u[1]===r)return{target:a,source:i};o=o.parent()}throw new Error('Angular ui-scroll adapter assignment error. Failed to locate target controller "'+r+'" to inject "'+i+'"')}}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n=0;i--)this.publicContext[r[i]]=this[r[i]].bind(this);for(var o=["isLoading","topVisible","topVisibleElement","topVisibleScope","bottomVisible","bottomVisibleElement","bottomVisibleScope"],a=o.length-1;a>=0;a--)!function(r){var i=void 0,a=e[o[r]];Object.defineProperty(n,o[r],{get:function(){return i},set:function(e){i=e,n.publicContext[o[r]]=e,a&&t(a).assign(n.startScope,e)}})}(a);Object.defineProperty(this.publicContext,"disabled",{get:function(){return n.disabled},set:function(e){return(n.disabled=e)?null:n.adjustBuffer()}})}},{key:"loading",value:function(e){this.isLoading=e}},{key:"isBOF",value:function(){return this.buffer.bof}},{key:"isEOF",value:function(){return this.buffer.eof}},{key:"isEmpty",value:function(){return!this.buffer.length}},{key:"applyUpdates",value:function(e,t){var n=this;if(angular.isFunction(e))this.buffer.slice(0).forEach(function(t){n.applyUpdate(t,e(t.item,t.scope,t.element))});else{if(e%1!=0)throw new Error("applyUpdates - "+e+" is not a valid index");var r=e-this.buffer.first;r>=0&&rthis.viewport.topVisiblePos()&&(n=!0,this.topVisible=a.item,this.topVisibleElement=a.element,this.topVisibleScope=a.scope),!r&&(s>=this.viewport.bottomVisiblePos()||o===i-1&&this.isEOF())&&(r=!0,this.bottomVisible=a.item,this.bottomVisibleElement=a.element,this.bottomVisibleScope=a.scope),t+=l}if(e=u,n&&r)break}}},{key:"applyUpdate",value:function(e,t){var n=this;if(angular.isArray(t)){var r=void 0,i=this.buffer.indexOf(e)+1;t.reverse().forEach(function(t){t===e.item?(r=!0,i--):n.buffer.insert(i,t)}),r||(e.op="remove")}}}]),e}();t.default=a},function(e,t,n){"use strict";function r(e,t){var n=Object.create(Array.prototype);return angular.extend(n,{size:t,reset:function(e){n.remove(0,n.length),n.eof=!1,n.bof=!1,n.first=e,n.next=e,n.minIndex=e,n.maxIndex=e,n.minIndexUser=null,n.maxIndexUser=null},append:function(e){e.forEach(function(e){++n.next,n.insert("append",e)}),n.maxIndex=n.eof?n.next-1:Math.max(n.next-1,n.maxIndex)},prepend:function(e){e.reverse().forEach(function(e){--n.first,n.insert("prepend",e)}),n.minIndex=n.bof?n.minIndex=n.first:Math.min(n.first,n.minIndex)},insert:function(e,t){var r={item:t};if(e%1==0)r.op="insert",n.splice(e,0,r);else switch(r.op=e,e){case"append":n.push(r);break;case"prepend":n.unshift(r)}},remove:function(t,r){if(angular.isNumber(t)){for(var i=t;i0?{base:a.base-a.padding-a.border,outer:a.base,outerfull:a.base+a.margin}[r]:(i=u(e),o=i[t],(o<0||null===o)&&(o=e.style[t]||0),o=parseFloat(o)||0,{base:o-a.padding-a.border,outer:o,outerfull:o+a.padding+a.border+a.margin}[r])}var o=void 0,a=void 0,u=void 0,l=void 0;return a=angular.element.prototype.css,e.prototype.css=function(e,t){var n=this,r=n[0];if(r&&3!==r.nodeType&&8!==r.nodeType&&r.style)return a.call(n,e,t)},l=function(e){return e&&e.document&&e.location&&e.alert&&e.setInterval},window.getComputedStyle?(u=function(e){return window.getComputedStyle(e,null)},o=function(e,t){return parseFloat(t)}):(u=function(e){return e.currentStyle},o=function(e,t){var n=void 0,r=void 0,i=void 0,o=void 0,a=void 0,u=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source;return new RegExp("^("+u+")(?!px)[a-z%]+$","i").test(t)?(a=e.style,n=a.left,i=e.runtimeStyle,o=i&&i.left,i&&(i.left=a.left),a.left=t,r=a.pixelLeft,a.left=n,o&&(i.left=o),r):parseFloat(t)}),angular.forEach({before:function(e){var t,n,r,i,o,a,u;if(u=this,n=u[0],o=u.parent(),t=o.contents(),t[0]===n)return o.prepend(e);for(r=i=1,a=t.length-1;1<=a?i<=a:i>=a;r=1<=a?++i:--i)if(t[r]===n)return void angular.element(t[r-1]).after(e);throw new Error("invalid DOM structure "+n.outerHTML)},height:function(e){var t;return t=this,angular.isDefined(e)?(angular.isNumber(e)&&(e+="px"),a.call(t,"height",e)):r(this[0],"height","base")},outerHeight:function(e){return r(this[0],"height",e?"outerfull":"outer")},outerWidth:function(e){return r(this[0],"width",e?"outerfull":"outer")},offset:function(e){var t=void 0,n=void 0,r=this,i={top:0,left:0},o=r[0],a=o&&o.ownerDocument;if(arguments.length){if(void 0===e)return r;throw new Error("offset setter method is not implemented")}if(a)return t=a.documentElement,null!=o.getBoundingClientRect&&(i=o.getBoundingClientRect()),n=a.defaultView||a.parentWindow,{top:i.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0),left:i.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)}},scrollTop:function(e){return t(this,"top",e)},scrollLeft:function(e){return t(this,"left",e)}},function(t,n){if(!e.prototype[n])return e.prototype[n]=t})}}]),e}();t.default=a},function(e,t,n){"use strict";function r(e,t,n,r,i,a){function u(){return c.outerHeight()*a}var l=null,s=null,c=r&&r.viewport?r.viewport:angular.element(window),f=r&&r.container?r.container:void 0,d=r&&r.scope?r.scope:i;return c.css({"overflow-anchor":"none","overflow-y":"auto",display:"block"}),angular.extend(c,{getScope:function(){return d},createPaddingElements:function(e){l=new o.default(e),s=new o.default(e),n.before(l),n.after(s)},applyContainerStyle:function(){f&&f!==c&&c.css("height",window.getComputedStyle(f[0]).height)},bottomDataPos:function(){var e=c[0].scrollHeight;return(e=null!=e?e:c[0].document.documentElement.scrollHeight)-s.height()},topDataPos:function(){return l.height()},bottomVisiblePos:function(){return c.scrollTop()+c.outerHeight()},topVisiblePos:function(){return c.scrollTop()},insertElement:function(t,n){return e.insertElement(t,n||l)},insertElementAnimated:function(t,n){return e.insertElementAnimated(t,n||l)},shouldLoadBottom:function(){return!t.eof&&c.bottomDataPos()=0&&(r=t[o].element.outerHeight(!0),!(n+r>i));o--)s.cache.add(t[o]),n+=r,e++;e>0&&(t.eof=!1,t.remove(t.length-e,t.length),t.next-=e,c.adjustPaddings())},shouldLoadTop:function(){return!t.bof&&c.topDataPos()>c.topVisiblePos()-u()},clipTop:function(){for(var e=0,n=0,r=0,i=c.topVisiblePos()-c.topDataPos()-u(),o=0;oi));o++)l.cache.add(t[o]),n+=r,e++;e>0&&(l.height(l.height()+n),t.bof=!1,t.remove(0,e),t.first+=e)},adjustPaddings:function(){if(t.length){var e=l.cache.reduce(function(e,n){return e+(n.index=t.next?n.height:0)},0),r=t.reduce(function(e,t){return e+t.element.outerHeight(!0)},0),i=(r+e+n)/(t.maxIndex-t.minIndex+1),o=null!==t.minIndexUser&&t.minIndex>t.minIndexUser,a=null!==t.maxIndexUser&&t.maxIndext.minIndexUser){var n=l.height()-e;c.scrollTop(c.scrollTop()+n),n-=c.scrollTop(),n>0&&(s.height(s.height()+n),c.scrollTop(c.scrollTop()+n))}},onAfterPrepend:function(e){if(e.prepended.length){var n=t.effectiveHeight(e.prepended),r=l.height()-n;r>=0?l.height(r):(l.height(0),c.scrollTop(c.scrollTop()-r))}},resetTopPadding:function(){l.height(0),l.cache.clear()},resetBottomPadding:function(){s.height(0),s.cache.clear()},removeItem:function(e){return l.cache.remove(e),s.cache.remove(e),t.remove(e)}}),c}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r;var i=n(5),o=function(e){return e&&e.__esModule?e:{default:e}}(i)},function(e,t,n){"use strict";function r(){var e=Object.create(Array.prototype);return angular.extend(e,{add:function(t){for(var n=e.length-1;n>=0;n--)if(e[n].index===t.scope.$index)return void(e[n].height=t.element.outerHeight());e.push({index:t.scope.$index,height:t.element.outerHeight()}),e.sort(function(e,t){return e.indext.index?1:0})},remove:function(t){for(var n=e.length-1;n>=0;n--)if(e[n].index===t.scope.$index){e.splice(n,1);break}for(var r=e.length-1;r>=0;r--)e[r].index>t.scope.$index&&e[r].index--},clear:function(){e.length=0}}),e}function i(e){var t=void 0;if(e.nodeType!==Node.ELEMENT_NODE)throw new Error("ui-scroll directive requires an Element node for templating the view");switch(e.tagName.toLowerCase()){case"dl":throw new Error("ui-scroll directive does not support <"+e.tagName+"> as a repeating tag: "+e.outerHTML);case"tr":t=angular.element("
    ").find("tr");break;case"li":t=angular.element("
  • ");break;default:t=angular.element("
    ")}return t.cache=new r,t}Object.defineProperty(t,"__esModule",{value:!0}),t.default=i},,function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(3),o=r(i),a=n(2),u=r(a),l=n(1),s=r(l),c=n(4),f=r(c),d=n(0),h=r(d);angular.module("ui.scroll",[]).service("jqLiteExtras",function(){return new o.default}).run(["jqLiteExtras",function(e){return window.jQuery?null:e.registerFor(angular.element)}]).directive("uiScrollViewport",function(){return{restrict:"A",controller:["$scope","$element",function(e,t){var n=this;return this.container=t,this.viewport=t,this.scope=e,angular.forEach(t.children(),function(e){"tbody"===e.tagName.toLowerCase()&&(n.viewport=angular.element(e))}),this}]}}).directive("uiScroll",["$log","$injector","$rootScope","$timeout","$q","$parse",function(e,t,n,r,i,o){function a(e,a,l,c,d){function p(t,n){var r=o(t)(e);return isNaN(r)?n:r}function m(){G.length&&(angular.forEach(G,function(e){return e()}),G=[])}function g(e,t){var n=void 0;e.hasOwnProperty(t)&&!z.length&&(n=e[t],delete e[t],G.push(function(){return e[t]=n}))}function v(e,t,n){var r=Object.getOwnPropertyDescriptor(e,t);if(!r||!r.set&&!r.get){var i=void 0;g(e,t),Object.defineProperty(e,t,{set:function(e){i=e,z[n]=e;var r=R.topDataPos();R.adjustPaddings(),"minIndex"===t&&R.onAfterMinIndexSet(r)},get:function(){return i}})}}function b(t){return t&&t!==N||e.$$destroyed}function x(){R.bind("resize",A),R.bind("scroll",A)}function y(){R.unbind("resize",A),R.unbind("scroll",A)}function w(){R.resetTopPadding(),R.resetBottomPadding(),arguments.length&&(F=arguments[0]),z.reset(F),V()}function E(e){return e.element.height()&&e.element[0].offsetParent}function P(e){E(e)&&(z.forEach(function(e){angular.isFunction(e.unregisterVisibilityWatcher)&&(e.unregisterVisibilityWatcher(),delete e.unregisterVisibilityWatcher)}),W.length||r(function(){return V()}))}function $(e,t){T(e,t,R.insertElement),E(e)||(e.unregisterVisibilityWatcher=e.scope.$watch(function(){return P(e)})),e.element.addClass("ng-hide")}function T(e,t,n){var r=null,i=t>0?z[t-1].element:void 0;if(d(function(t,o){r=n(t,i),e.element=t,e.scope=o,o[M]=e.item}),X.transform){var o=e.scope.uiScrollTdInitializer;o&&o.linking?X.transform(e.scope,e.element):e.scope.uiScrollTdInitializer={onLink:function(){return X.transform(e.scope,e.element)},scope:e.scope}}return r}function I(){var e=[],t=[],n=[],r=[];return z.forEach(function(i,o){switch(i.op){case"prepend":t.unshift(i);break;case"append":$(i,o),i.op="none",r.push(i);break;case"insert":e=e.concat(T(i,o,R.insertElementAnimated)),i.op="none",r.push(i);break;case"remove":n.push(i)}}),n.forEach(function(t){return e=e.concat(R.removeItem(t))}),t.length&&t.forEach(function(e){$(e),e.op="none"}),z.forEach(function(e,t){return e.scope.$index=z.first+t}),{prepended:t,removed:n,inserted:r,animated:e}}function O(e,t){t.animated.length?i.all(t.animated).then(function(){R.adjustPaddings(),V(e)}):R.adjustPaddings()}function j(e,t){R.shouldLoadBottom()?(!t||z.effectiveHeight(t.inserted)>0)&&1===W.push(!0)&&(X.loading(!0),S(e)):R.shouldLoadTop()&&(!t||z.effectiveHeight(t.prepended)>0||W[0])&&1===W.push(!1)&&(X.loading(!0),S(e))}function V(t){t||(W=[],t=++N);var n=I();!e.$$phase&&e.$digest(),n.inserted.forEach(function(e){return e.element.removeClass("ng-hide")}),n.prepended.forEach(function(e){return e.element.removeClass("ng-hide")}),b(t)||(O(t,n),j(t),W.length||X.calculateProperties())}function k(t){var n=I();!e.$$phase&&e.$digest(),n.inserted.forEach(function(e){return e.element.removeClass("ng-hide")}),n.prepended.forEach(function(e){return e.element.removeClass("ng-hide")}),R.onAfterPrepend(n),b(t)||(O(t,n),m(),j(t,n),W.shift(),W.length?S(t):(X.loading(!1),x(),X.calculateProperties()))}function S(e){W[0]?z.length&&!R.shouldLoadBottom()?k(e):Q(function(t){b(e)||(t.length0&&(R.clipTop(),z.append(t)),k(e))}):z.length&&!R.shouldLoadTop()?k(e):J(function(t){b(e)||(t.length0&&(z.length&&R.clipBottom(),z.prepend(t)),k(e))})}function A(){n.$$phase||X.isLoading||X.disabled||(j(N),W.length?y():(X.calculateProperties(),!e.$$phase&&e.$digest()))}function L(e){if(!X.disabled){var t=R[0].scrollTop,n=R[0].scrollHeight-R[0].clientHeight;(0===t&&!z.bof||t===n&&!z.eof)&&e.preventDefault()}}var _=l.uiScroll.match(/^\s*(\w+)\s+in\s+([(\w|\$)\.]+)\s*$/);if(!_)throw new Error("Expected uiScroll in form of '_item_ in _datasource_' but got '"+l.uiScroll+"'");var C=null,M=_[1],H=_[2],B=c[0],U=Math.max(3,p(l.bufferSize,10)),D=Math.max(.3,p(l.padding,.5)),F=p(l.startIndex,1),N=0,W=[],q=new u.default(t,i),z=new s.default(q,U),R=new f.default(q,z,a,B,n,D),X=new h.default(R,z,V,w,l,o,a,e);B&&(B.adapter=X);var Y=function(){return angular.isObject(C)&&angular.isFunction(C.get)};if(C=o(H)(e),!Y()&&(C=t.get(H),!Y()))throw new Error(H+" is not a valid datasource");var G=[];v(C,"minIndex","minIndexUser"),v(C,"maxIndex","maxIndexUser");var Q=2!==C.get.length?function(e){return C.get(z.next,U,e)}:function(e){C.get({index:z.next,append:z.length?z[z.length-1].item:void 0,count:U},e)},J=2!==C.get.length?function(e){return C.get(z.first-U,U,e)}:function(e){C.get({index:z.first-U,prepend:z.length?z[0].item:void 0,count:U},e)};d(function(e,t){R.createPaddingElements(e[0]),t.$destroy(),e.remove()}),e.$on("$destroy",function(){y(),R.unbind("mousewheel",L)}),R.bind("mousewheel",L),r(function(){R.applyContainerStyle(),w()})}return{require:["?^uiScrollViewport"],restrict:"A",transclude:"element",priority:1e3,terminal:!0,link:a}}])}]); +!function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=7)}([function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){var n=e.match(/^(.+)(\s+on\s+)(.+)?/);if(n&&4===n.length){window.console.log('Angular ui-scroll adapter assignment warning. "Controller On" syntax has been deprecated since ui-scroll v1.6.1.');for(var r=n[3],i=n[1],o=t;o.length;){var a=o.scope(),u=(o.attr("ng-controller")||"").match(/(\w(?:\w|\d)*)(?:\s+as\s+(\w(?:\w|\d)*))?/);if(u&&u[1]===r)return{target:a,source:i};o=o.parent()}throw new Error('Angular ui-scroll adapter assignment error. Failed to locate target controller "'+r+'" to inject "'+i+'"')}}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n=0;i--)this.publicContext[r[i]]=this[r[i]].bind(this);for(var o=["isLoading","topVisible","topVisibleElement","topVisibleScope","bottomVisible","bottomVisibleElement","bottomVisibleScope"],a=o.length-1;a>=0;a--)!function(r){var i=void 0,a=e[o[r]];Object.defineProperty(n,o[r],{get:function(){return i},set:function(e){i=e,n.publicContext[o[r]]=e,a&&t(a).assign(n.startScope,e)}})}(a);Object.defineProperty(this.publicContext,"disabled",{get:function(){return n.disabled},set:function(e){return(n.disabled=e)?null:n.adjustBuffer()}})}},{key:"loading",value:function(e){this.isLoading=e}},{key:"isBOF",value:function(){return this.buffer.bof}},{key:"isEOF",value:function(){return this.buffer.eof}},{key:"isEmpty",value:function(){return!this.buffer.length}},{key:"applyUpdates",value:function(e,t){var n=this;if(angular.isFunction(e))this.buffer.slice(0).forEach(function(t){n.applyUpdate(t,e(t.item,t.scope,t.element))});else{if(e%1!=0)throw new Error("applyUpdates - "+e+" is not a valid index");var r=e-this.buffer.first;r>=0&&rthis.viewport.topVisiblePos()&&(n=!0,this.topVisible=a.item,this.topVisibleElement=a.element,this.topVisibleScope=a.scope),!r&&(l>=this.viewport.bottomVisiblePos()||o===i-1&&this.isEOF())&&(r=!0,this.bottomVisible=a.item,this.bottomVisibleElement=a.element,this.bottomVisibleScope=a.scope),t+=s}if(e=u,n&&r)break}}},{key:"applyUpdate",value:function(e,t){var n=this;if(angular.isArray(t)){var r=this.buffer.indexOf(e);t.reverse().some(function(t){return t===e.item})||(e.op="remove",0!==r||t.length||(e._op="isTop")),t.forEach(function(t){t===e.item?r--:n.buffer.insert(r+1,t,-1===r)})}}}]),e}();t.default=a},function(e,t,n){"use strict";function r(e,t){var n=Object.create(Array.prototype);return angular.extend(n,{size:t,reset:function(e){n.remove(0,n.length),n.eof=!1,n.bof=!1,n.first=e,n.next=e,n.minIndex=e,n.maxIndex=e,n.minIndexUser=null,n.maxIndexUser=null},append:function(e){e.forEach(function(e){++n.next,n.insert("append",e)}),n.maxIndex=n.eof?n.next-1:Math.max(n.next-1,n.maxIndex)},prepend:function(e){e.reverse().forEach(function(e){--n.first,n.insert("prepend",e)}),n.minIndex=n.bof?n.minIndex=n.first:Math.min(n.first,n.minIndex)},insert:function(e,t,r){var i={item:t};if(e%1==0)i.op="insert",n.splice(e,0,i),r?n.first--:n.next++;else switch(i.op=e,e){case"append":n.push(i);break;case"prepend":n.unshift(i)}},remove:function(t,r){if(angular.isNumber(t)){for(var i=t;i0?{base:a.base-a.padding-a.border,outer:a.base,outerfull:a.base+a.margin}[r]:(i=u(e),o=i[t],(o<0||null===o)&&(o=e.style[t]||0),o=parseFloat(o)||0,{base:o-a.padding-a.border,outer:o,outerfull:o+a.padding+a.border+a.margin}[r])}var o=void 0,a=void 0,u=void 0,s=void 0;return a=angular.element.prototype.css,e.prototype.css=function(e,t){var n=this,r=n[0];if(r&&3!==r.nodeType&&8!==r.nodeType&&r.style)return a.call(n,e,t)},s=function(e){return e&&e.document&&e.location&&e.alert&&e.setInterval},window.getComputedStyle?(u=function(e){return window.getComputedStyle(e,null)},o=function(e,t){return parseFloat(t)}):(u=function(e){return e.currentStyle},o=function(e,t){var n=void 0,r=void 0,i=void 0,o=void 0,a=void 0,u=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source;return new RegExp("^("+u+")(?!px)[a-z%]+$","i").test(t)?(a=e.style,n=a.left,i=e.runtimeStyle,o=i&&i.left,i&&(i.left=a.left),a.left=t,r=a.pixelLeft,a.left=n,o&&(i.left=o),r):parseFloat(t)}),angular.forEach({before:function(e){var t,n,r,i,o,a,u;if(u=this,n=u[0],o=u.parent(),t=o.contents(),t[0]===n)return o.prepend(e);for(r=i=1,a=t.length-1;1<=a?i<=a:i>=a;r=1<=a?++i:--i)if(t[r]===n)return void angular.element(t[r-1]).after(e);throw new Error("invalid DOM structure "+n.outerHTML)},height:function(e){var t;return t=this,angular.isDefined(e)?(angular.isNumber(e)&&(e+="px"),a.call(t,"height",e)):r(this[0],"height","base")},outerHeight:function(e){return r(this[0],"height",e?"outerfull":"outer")},outerWidth:function(e){return r(this[0],"width",e?"outerfull":"outer")},offset:function(e){var t=void 0,n=void 0,r=this,i={top:0,left:0},o=r[0],a=o&&o.ownerDocument;if(arguments.length){if(void 0===e)return r;throw new Error("offset setter method is not implemented")}if(a)return t=a.documentElement,null!=o.getBoundingClientRect&&(i=o.getBoundingClientRect()),n=a.defaultView||a.parentWindow,{top:i.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0),left:i.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)}},scrollTop:function(e){return t(this,"top",e)},scrollLeft:function(e){return t(this,"left",e)}},function(t,n){if(!e.prototype[n])return e.prototype[n]=t})}}]),e}();t.default=a},function(e,t,n){"use strict";function r(e,t,n,r,i,a){function u(){return c.outerHeight()*a}var s=null,l=null,c=r&&r.viewport?r.viewport:angular.element(window),f=r&&r.container?r.container:void 0,d=r&&r.scope?r.scope:i;return c.css({"overflow-anchor":"none","overflow-y":"auto",display:"block"}),angular.extend(c,{getScope:function(){return d},createPaddingElements:function(e){s=new o.default(e),l=new o.default(e),n.before(s),n.after(l)},applyContainerStyle:function(){f&&f!==c&&c.css("height",window.getComputedStyle(f[0]).height)},bottomDataPos:function(){var e=c[0].scrollHeight;return(e=null!=e?e:c[0].document.documentElement.scrollHeight)-l.height()},topDataPos:function(){return s.height()},bottomVisiblePos:function(){return c.scrollTop()+c.outerHeight()},topVisiblePos:function(){return c.scrollTop()},insertElement:function(t,n){return e.insertElement(t,n||s)},insertElementAnimated:function(t,n){return e.insertElementAnimated(t,n||s)},shouldLoadBottom:function(){return!t.eof&&c.bottomDataPos()=0&&(r=t[o].element.outerHeight(!0),!(n+r>i));o--)l.cache.add(t[o]),n+=r,e++;e>0&&(t.eof=!1,t.remove(t.length-e,t.length),t.next-=e,c.adjustPaddings())},shouldLoadTop:function(){return!t.bof&&c.topDataPos()>c.topVisiblePos()-u()},clipTop:function(){for(var e=0,n=0,r=0,i=c.topVisiblePos()-c.topDataPos()-u(),o=0;oi));o++)s.cache.add(t[o]),n+=r,e++;e>0&&(s.height(s.height()+n),t.bof=!1,t.remove(0,e),t.first+=e)},adjustPaddings:function(){if(t.length){var e=s.cache.reduce(function(e,n){return e+(n.index=t.next?n.height:0)},0),r=t.reduce(function(e,t){return e+t.element.outerHeight(!0)},0),i=(r+e+n)/(t.maxIndex-t.minIndex+1),o=null!==t.minIndexUser&&t.minIndex>t.minIndexUser,a=null!==t.maxIndexUser&&t.maxIndext.minIndexUser){var n=s.height()-e;c.scrollTop(c.scrollTop()+n),n-=c.scrollTop(),n>0&&(l.height(l.height()+n),c.scrollTop(c.scrollTop()+n))}},onAfterPrepend:function(e){if(e.prepended.length){var n=t.effectiveHeight(e.prepended),r=s.height()-n;r>=0?s.height(r):(s.height(0),c.scrollTop(c.scrollTop()-r))}},resetTopPadding:function(){s.height(0),s.cache.clear()},resetBottomPadding:function(){l.height(0),l.cache.clear()},removeItem:function(e){return s.cache.remove(e),l.cache.remove(e),t.remove(e)}}),c}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r;var i=n(5),o=function(e){return e&&e.__esModule?e:{default:e}}(i)},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(){var e=[];return e.push.apply(e,arguments),Object.setPrototypeOf(e,i.prototype),e}function o(e){var t=void 0;if(e.nodeType!==Node.ELEMENT_NODE)throw new Error("ui-scroll directive requires an Element node for templating the view");switch(e.tagName.toLowerCase()){case"dl":throw new Error("ui-scroll directive does not support <"+e.tagName+"> as a repeating tag: "+e.outerHTML);case"tr":t=angular.element("
    ").find("tr");break;case"li":t=angular.element("
  • ");break;default:t=angular.element("
    ")}return t.cache=new i,t}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n=0;t--)if(this[t].index===e.scope.$index)return void(this[t].height=e.element.outerHeight());this.push({index:e.scope.$index,height:e.element.outerHeight()}),this.sort(function(e,t){return e.indext.index?1:0})}},{key:"remove",value:function(e){for(var t=this.length-1;t>=0;t--)if(this[t].index===e.scope.$index){this.splice(t,1);break}if("isTop"!==e._op)for(var n=this.length-1;n>=0;n--)this[n].index>e.scope.$index&&this[n].index--}},{key:"clear",value:function(){this.length=0}}]),e}();i.prototype=Object.create(Array.prototype),Object.getOwnPropertyNames(u.prototype).forEach(function(e){return i.prototype[e]=u.prototype[e]})},,function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(3),o=r(i),a=n(2),u=r(a),s=n(1),l=r(s),c=n(4),f=r(c),d=n(0),p=r(d);angular.module("ui.scroll",[]).service("jqLiteExtras",function(){return new o.default}).run(["jqLiteExtras",function(e){return window.jQuery?null:e.registerFor(angular.element)}]).directive("uiScrollViewport",function(){return{restrict:"A",controller:["$scope","$element",function(e,t){var n=this;return this.container=t,this.viewport=t,this.scope=e,angular.forEach(t.children(),function(e){"tbody"===e.tagName.toLowerCase()&&(n.viewport=angular.element(e))}),this}]}}).directive("uiScroll",["$log","$injector","$rootScope","$timeout","$q","$parse",function(e,t,n,r,i,o){function a(e,a,s,c,d){function h(t,n){var r=o(t)(e);return isNaN(r)?n:r}function m(){Q.length&&(angular.forEach(Q,function(e){return e()}),Q=[])}function g(e,t){var n=void 0;e.hasOwnProperty(t)&&!z.length&&(n=e[t],delete e[t],Q.push(function(){return e[t]=n}))}function v(e,t,n){var r=Object.getOwnPropertyDescriptor(e,t);if(!r||!r.set&&!r.get){var i=void 0;g(e,t),Object.defineProperty(e,t,{set:function(e){i=e,z[n]=e;var r=X.topDataPos();X.adjustPaddings(),"minIndex"===t&&X.onAfterMinIndexSet(r)},get:function(){return i}})}}function b(t){return t&&t!==W||e.$$destroyed}function y(){X.bind("resize",A),X.bind("scroll",A)}function x(){X.unbind("resize",A),X.unbind("scroll",A)}function w(){X.resetTopPadding(),X.resetBottomPadding(),arguments.length&&(F=arguments[0]),z.reset(F),S()}function E(e){return e.element.height()&&e.element[0].offsetParent}function P(e){E(e)&&(z.forEach(function(e){angular.isFunction(e.unregisterVisibilityWatcher)&&(e.unregisterVisibilityWatcher(),delete e.unregisterVisibilityWatcher)}),q.length||r(function(){return S()}))}function T(e,t){$(e,t,X.insertElement),E(e)||(e.unregisterVisibilityWatcher=e.scope.$watch(function(){return P(e)})),R.hideElement(e)}function $(e,t,n){var r=null,i=t>0?z[t-1].element:void 0;if(d(function(t,o){r=n(t,i),e.element=t,e.scope=o,o[H]=e.item}),Y.transform){var o=e.scope.uiScrollTdInitializer;o&&o.linking?Y.transform(e.scope,e.element):e.scope.uiScrollTdInitializer={onLink:function(){return Y.transform(e.scope,e.element)},scope:e.scope}}return r}function I(){var e=[],t=[],n=[],r=[];return z.forEach(function(i,o){switch(i.op){case"prepend":t.unshift(i);break;case"append":T(i,o),i.op="none",r.push(i);break;case"insert":e=e.concat($(i,o,X.insertElementAnimated)),i.op="none",r.push(i);break;case"remove":n.push(i)}}),n.forEach(function(t){return e=e.concat(X.removeItem(t))}),t.length&&t.forEach(function(e){T(e),e.op="none"}),z.forEach(function(e,t){return e.scope.$index=z.first+t}),{prepended:t,removed:n,inserted:r,animated:e}}function O(e,t){t.animated.length?i.all(t.animated).then(function(){X.adjustPaddings(),S(e)}):X.adjustPaddings()}function j(e,t){X.shouldLoadBottom()?(!t||z.effectiveHeight(t.inserted)>0)&&1===q.push(!0)&&(Y.loading(!0),_(e)):X.shouldLoadTop()&&(!t||z.effectiveHeight(t.prepended)>0||q[0])&&1===q.push(!1)&&(Y.loading(!0),_(e))}function k(){var t=I();return!e.$$phase&&e.$digest(),t.inserted.forEach(function(e){return R.showElement(e)}),t.prepended.forEach(function(e){return R.showElement(e)}),t}function S(e){e||(q=[],e=++W);var t=k();b(e)||(O(e,t),j(e),q.length||Y.calculateProperties())}function V(e){var t=k();X.onAfterPrepend(t),b(e)||(O(e,t),m(),j(e,t),q.shift(),q.length?_(e):(Y.loading(!1),y(),Y.calculateProperties()))}function _(e){q[0]?z.length&&!X.shouldLoadBottom()?V(e):J(function(t){b(e)||(t.length0&&(X.clipTop(),z.append(t)),V(e))}):z.length&&!X.shouldLoadTop()?V(e):K(function(t){b(e)||(t.length0&&(z.length&&X.clipBottom(),z.prepend(t)),V(e))})}function A(){n.$$phase||Y.isLoading||Y.disabled||(j(W),q.length?x():(Y.calculateProperties(),!e.$$phase&&e.$digest()))}function L(e){if(!Y.disabled){var t=X[0].scrollTop,n=X[0].scrollHeight-X[0].clientHeight;(0===t&&!z.bof||t===n&&!z.eof)&&e.preventDefault()}}var C=s.uiScroll.match(/^\s*(\w+)\s+in\s+([(\w|\$)\.]+)\s*$/);if(!C)throw new Error("Expected uiScroll in form of '_item_ in _datasource_' but got '"+s.uiScroll+"'");var M=null,H=C[1],B=C[2],U=c[0],D=Math.max(3,h(s.bufferSize,10)),N=Math.max(.3,h(s.padding,.5)),F=h(s.startIndex,1),W=0,q=[],R=new u.default(t,i),z=new l.default(R,D),X=new f.default(R,z,a,U,n,N),Y=new p.default(X,z,S,w,s,o,a,e);U&&(U.adapter=Y);var G=function(){return angular.isObject(M)&&angular.isFunction(M.get)};if(M=o(B)(e),!G()&&(M=t.get(B),!G()))throw new Error(B+" is not a valid datasource");var Q=[];v(M,"minIndex","minIndexUser"),v(M,"maxIndex","maxIndexUser");var J=2!==M.get.length?function(e){return M.get(z.next,D,e)}:function(e){M.get({index:z.next,append:z.length?z[z.length-1].item:void 0,count:D},e)},K=2!==M.get.length?function(e){return M.get(z.first-D,D,e)}:function(e){M.get({index:z.first-D,prepend:z.length?z[0].item:void 0,count:D},e)};d(function(e,t){X.createPaddingElements(e[0]),t.$destroy(),e.remove()}),e.$on("$destroy",function(){x(),X.unbind("mousewheel",L)}),X.bind("mousewheel",L),r(function(){X.applyContainerStyle(),w()})}return{require:["?^uiScrollViewport"],restrict:"A",transclude:"element",priority:1e3,terminal:!0,link:a}}])}]); //# sourceMappingURL=ui-scroll.min.js.map \ No newline at end of file diff --git a/dist/ui-scroll.min.js.map b/dist/ui-scroll.min.js.map index cc097702..4a0348be 100644 --- a/dist/ui-scroll.min.js.map +++ b/dist/ui-scroll.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///ui-scroll.min.js","webpack:///webpack/bootstrap 46a2f93695cd00fd813e","webpack:///./src/modules/adapter.js","webpack:///./src/modules/buffer.js","webpack:///./src/modules/elementRoutines.js","webpack:///./src/modules/jqLiteExtras.js","webpack:///./src/modules/viewport.js","webpack:///./src/modules/padding.js","webpack:///./src/ui-scroll.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","_classCallCheck","instance","Constructor","TypeError","getCtrlOnData","attr","element","onSyntax","match","length","window","console","log","ctrl","tail","candidate","candidateScope","scope","candidateName","target","source","parent","Error","_createClass","defineProperties","props","descriptor","writable","key","protoProps","staticProps","Adapter","viewport","buffer","adjustBuffer","reload","$attr","$parse","$scope","this","isLoading","disabled","viewportScope","getScope","startScope","$parent","publicContext","assignAdapter","adapter","generatePublicContext","adapterAttr","replace","ctrlOnData","adapterOnScope","assign","error","message","angular","extend","_this","publicMethods","bind","publicProps","set","bof","eof","arg1","arg2","_this2","isFunction","slice","forEach","wrapper","applyUpdate","item","index","first","newItems","append","clipTop","clipBottom","prepend","rowTop","topHeight","topDone","bottomDone","itemTop","offset","top","itemHeight","outerHeight","topDataPos","topVisiblePos","bottomVisiblePos","isEOF","_this3","isArray","keepIt","pos","indexOf","reverse","newItem","insert","op","default","ScrollBuffer","elementRoutines","bufferSize","create","Array","size","reset","startIndex","remove","next","minIndex","maxIndex","minIndexUser","maxIndexUser","items","Math","max","min","operation","splice","push","unshift","isNumber","removeElement","removeElementAnimated","effectiveHeight","elements","Number","MAX_VALUE","bottom","NEGATIVE_INFINITY","offsetParent","ElementRoutines","$injector","$q","$animate","has","isAngularVersionLessThen1_3","version","major","minor","newElement","previousElement","after","$destroy","insertElement","deferred","defer","enter","resolve","promise","leave","then","_slicedToArray","sliceIterator","arr","_arr","_n","_d","_e","undefined","_s","_i","Symbol","iterator","done","err","JQLiteExtras","scrollTo","self","direction","elem","_top$left$direction","left","method","prop","preserve","isWindow","isDefined","document","documentElement","getMeasurements","measure","base","borderA","borderB","computedMarginA","computedMarginB","computedStyle","dirA","dirB","marginA","marginB","paddingA","paddingB","height","width","padding","border","margin","_width$height$measure","offsetWidth","offsetHeight","getStyle","convertToPx","getWidthHeight","result","measurements","outer","outerfull","style","parseFloat","css","nodeType","obj","location","alert","setInterval","getComputedStyle","currentStyle","rs","rsLeft","core_pnum","RegExp","test","runtimeStyle","pixelLeft","before","newElem","children","j","ref","contents","outerHTML","option","outerWidth","docElem","win","box","doc","ownerDocument","arguments","getBoundingClientRect","defaultView","parentWindow","pageYOffset","scrollTop","clientTop","pageXOffset","scrollLeft","clientLeft","Viewport","viewportController","$rootScope","bufferPadding","topPadding","bottomPadding","container","overflow-anchor","overflow-y","display","createPaddingElements","template","_padding2","applyContainerStyle","bottomDataPos","scrollHeight","e","sibling","insertElementAnimated","shouldLoadBottom","overage","overageHeight","emptySpaceHeight","cache","add","adjustPaddings","shouldLoadTop","topPaddingHeight","reduce","summ","bottomPaddingHeight","visibleItemsHeight","averageItemHeight","adjustTopPadding","adjustBottomPadding","topPaddingHeightAdd","bottomPaddingHeightAdd","onAfterMinIndexSet","topPaddingHeightOld","diff","onAfterPrepend","updates","prepended","paddingHeight","resetTopPadding","clear","resetBottomPadding","removeItem","_padding","Cache","$index","sort","a","b","Padding","Node","ELEMENT_NODE","tagName","toLowerCase","find","_interopRequireDefault","_jqLiteExtras","_jqLiteExtras2","_elementRoutines","_elementRoutines2","_buffer","_buffer2","_viewport","_viewport2","_adapter","_adapter2","service","run","jqLiteExtras","jQuery","registerFor","directive","restrict","controller","child","$timeout","link","controllers","linker","parseNumericAttr","defaultValue","isNaN","onRenderHandlersRunner","onRenderHandlers","handler","preDefineIndexProperty","datasource","propName","defineIndexProperty","propUserName","getOwnPropertyDescriptor","isInvalid","rid","ridActual","$$destroyed","bindEvents","resizeAndScrollHandler","unbindEvents","unbind","isElementVisible","visibilityWatcher","unregisterVisibilityWatcher","pending","insertWrapperContent","insertAfter","createElement","$watch","addClass","promises","clone","itemName","transform","tdInitializer","uiScrollTdInitializer","linking","onLink","updateDOM","toBePrepended","toBeRemoved","inserted","concat","removed","animated","updatePaddings","all","enqueueFetch","loading","fetch","$$phase","$digest","w","removeClass","calculateProperties","adjustBufferAfterFetch","shift","fetchNext","fetchPrevious","wheelHandler","event","yMax","clientHeight","preventDefault","uiScroll","datasourceName","isDatasourceValid","isObject","success","count","$on","require","transclude","priority","terminal"],"mappings":"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","file":"ui-scroll.min.js","sourcesContent":["/*!\r\n * angular-ui-scroll (uncompressed)\r\n * https://github.com/angular-ui/ui-scroll\r\n * Version: 1.7.0-rc.2 -- 2017-10-20T00:12:44.031Z\r\n * License: MIT\r\n */\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 7);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getCtrlOnData(attr, element) {\n var onSyntax = attr.match(/^(.+)(\\s+on\\s+)(.+)?/);\n if (onSyntax && onSyntax.length === 4) {\n window.console.log('Angular ui-scroll adapter assignment warning. \"Controller On\" syntax has been deprecated since ui-scroll v1.6.1.');\n var ctrl = onSyntax[3];\n var tail = onSyntax[1];\n var candidate = element;\n while (candidate.length) {\n var candidateScope = candidate.scope(); // doesn't work when debugInfoEnabled flag = true\n var candidateName = (candidate.attr('ng-controller') || '').match(/(\\w(?:\\w|\\d)*)(?:\\s+as\\s+(\\w(?:\\w|\\d)*))?/);\n if (candidateName && candidateName[1] === ctrl) {\n return {\n target: candidateScope,\n source: tail\n };\n }\n candidate = candidate.parent();\n }\n throw new Error('Angular ui-scroll adapter assignment error. Failed to locate target controller \"' + ctrl + '\" to inject \"' + tail + '\"');\n }\n}\n\nvar Adapter = function () {\n function Adapter(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope) {\n _classCallCheck(this, Adapter);\n\n this.viewport = viewport;\n this.buffer = buffer;\n this.adjustBuffer = adjustBuffer;\n this.reload = reload;\n\n this.isLoading = false;\n this.disabled = false;\n\n var viewportScope = viewport.getScope();\n this.startScope = viewportScope.$parent ? viewportScope : $scope;\n\n this.publicContext = {};\n this.assignAdapter($attr.adapter, $parse, element);\n this.generatePublicContext($attr, $parse);\n }\n\n _createClass(Adapter, [{\n key: 'assignAdapter',\n value: function assignAdapter(adapterAttr, $parse, element) {\n if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\\s+|\\s+$/gm, ''))) {\n return;\n }\n var ctrlOnData = getCtrlOnData(adapterAttr, element);\n var adapterOnScope = void 0;\n\n try {\n if (ctrlOnData) {\n // \"Controller On\", deprecated since v1.6.1\n $parse(ctrlOnData.source).assign(ctrlOnData.target, {});\n adapterOnScope = $parse(ctrlOnData.source)(ctrlOnData.target);\n } else {\n $parse(adapterAttr).assign(this.startScope, {});\n adapterOnScope = $parse(adapterAttr)(this.startScope);\n }\n } catch (error) {\n error.message = 'Angular ui-scroll Adapter assignment exception.\\n' + ('Can\\'t parse \"' + adapterAttr + '\" expression.\\n') + error.message;\n throw error;\n }\n\n angular.extend(adapterOnScope, this.publicContext);\n this.publicContext = adapterOnScope;\n }\n }, {\n key: 'generatePublicContext',\n value: function generatePublicContext($attr, $parse) {\n var _this = this;\n\n // these methods will be accessible out of ui-scroll via user defined adapter\n var publicMethods = ['reload', 'applyUpdates', 'append', 'prepend', 'isBOF', 'isEOF', 'isEmpty'];\n for (var i = publicMethods.length - 1; i >= 0; i--) {\n this.publicContext[publicMethods[i]] = this[publicMethods[i]].bind(this);\n }\n\n // these read-only props will be accessible out of ui-scroll via user defined adapter\n var publicProps = ['isLoading', 'topVisible', 'topVisibleElement', 'topVisibleScope', 'bottomVisible', 'bottomVisibleElement', 'bottomVisibleScope'];\n\n var _loop = function _loop(_i) {\n var property = void 0,\n attr = $attr[publicProps[_i]];\n Object.defineProperty(_this, publicProps[_i], {\n get: function get() {\n return property;\n },\n set: function set(value) {\n property = value;\n _this.publicContext[publicProps[_i]] = value;\n if (attr) {\n $parse(attr).assign(_this.startScope, value);\n }\n }\n });\n };\n\n for (var _i = publicProps.length - 1; _i >= 0; _i--) {\n _loop(_i);\n }\n\n // non-read-only public property\n Object.defineProperty(this.publicContext, 'disabled', {\n get: function get() {\n return _this.disabled;\n },\n set: function set(value) {\n return !(_this.disabled = value) ? _this.adjustBuffer() : null;\n }\n });\n }\n }, {\n key: 'loading',\n value: function loading(value) {\n this['isLoading'] = value;\n }\n }, {\n key: 'isBOF',\n value: function isBOF() {\n return this.buffer.bof;\n }\n }, {\n key: 'isEOF',\n value: function isEOF() {\n return this.buffer.eof;\n }\n }, {\n key: 'isEmpty',\n value: function isEmpty() {\n return !this.buffer.length;\n }\n }, {\n key: 'applyUpdates',\n value: function applyUpdates(arg1, arg2) {\n var _this2 = this;\n\n if (angular.isFunction(arg1)) {\n // arg1 is the updater function, arg2 is ignored\n this.buffer.slice(0).forEach(function (wrapper) {\n // we need to do it on the buffer clone, because buffer content\n // may change as we iterate through\n _this2.applyUpdate(wrapper, arg1(wrapper.item, wrapper.scope, wrapper.element));\n });\n } else {\n // arg1 is item index, arg2 is the newItems array\n if (arg1 % 1 !== 0) {\n // checking if it is an integer\n throw new Error('applyUpdates - ' + arg1 + ' is not a valid index');\n }\n\n var index = arg1 - this.buffer.first;\n if (index >= 0 && index < this.buffer.length) {\n this.applyUpdate(this.buffer[index], arg2);\n }\n }\n\n this.adjustBuffer();\n }\n }, {\n key: 'append',\n value: function append(newItems) {\n this.buffer.append(newItems);\n this.adjustBuffer();\n this.viewport.clipTop();\n this.viewport.clipBottom();\n }\n }, {\n key: 'prepend',\n value: function prepend(newItems) {\n this.buffer.prepend(newItems);\n this.adjustBuffer();\n this.viewport.clipTop();\n this.viewport.clipBottom();\n }\n }, {\n key: 'calculateProperties',\n value: function calculateProperties() {\n var rowTop = null,\n topHeight = 0;\n var topDone = false,\n bottomDone = false;\n var length = this.buffer.length;\n\n for (var i = 0; i < length; i++) {\n var item = this.buffer[i];\n var itemTop = item.element.offset().top;\n\n if (rowTop !== itemTop) {\n // a new row condition\n var itemHeight = item.element.outerHeight(true);\n var top = this.viewport.topDataPos() + topHeight + itemHeight;\n\n if (!topDone && top > this.viewport.topVisiblePos()) {\n topDone = true;\n this['topVisible'] = item.item;\n this['topVisibleElement'] = item.element;\n this['topVisibleScope'] = item.scope;\n }\n\n if (!bottomDone && (top >= this.viewport.bottomVisiblePos() || i === length - 1 && this.isEOF())) {\n bottomDone = true;\n this['bottomVisible'] = item.item;\n this['bottomVisibleElement'] = item.element;\n this['bottomVisibleScope'] = item.scope;\n }\n topHeight += itemHeight;\n }\n\n rowTop = itemTop;\n\n if (topDone && bottomDone) {\n break;\n }\n }\n }\n }, {\n key: 'applyUpdate',\n value: function applyUpdate(wrapper, newItems) {\n var _this3 = this;\n\n if (!angular.isArray(newItems)) {\n return;\n }\n\n var keepIt = void 0;\n var pos = this.buffer.indexOf(wrapper) + 1;\n\n newItems.reverse().forEach(function (newItem) {\n if (newItem === wrapper.item) {\n keepIt = true;\n pos--;\n } else {\n _this3.buffer.insert(pos, newItem);\n }\n });\n\n if (!keepIt) {\n wrapper.op = 'remove';\n }\n }\n }]);\n\n return Adapter;\n}();\n\nexports.default = Adapter;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = ScrollBuffer;\nfunction ScrollBuffer(elementRoutines, bufferSize) {\n var buffer = Object.create(Array.prototype);\n\n angular.extend(buffer, {\n size: bufferSize,\n\n reset: function reset(startIndex) {\n buffer.remove(0, buffer.length);\n buffer.eof = false;\n buffer.bof = false;\n buffer.first = startIndex;\n buffer.next = startIndex;\n buffer.minIndex = startIndex;\n buffer.maxIndex = startIndex;\n buffer.minIndexUser = null;\n buffer.maxIndexUser = null;\n },\n append: function append(items) {\n items.forEach(function (item) {\n ++buffer.next;\n buffer.insert('append', item);\n });\n buffer.maxIndex = buffer.eof ? buffer.next - 1 : Math.max(buffer.next - 1, buffer.maxIndex);\n },\n prepend: function prepend(items) {\n items.reverse().forEach(function (item) {\n --buffer.first;\n buffer.insert('prepend', item);\n });\n buffer.minIndex = buffer.bof ? buffer.minIndex = buffer.first : Math.min(buffer.first, buffer.minIndex);\n },\n\n\n /**\r\n * inserts wrapped element in the buffer\r\n * the first argument is either operation keyword (see below) or a number for operation 'insert'\r\n * for insert the number is the index for the buffer element the new one have to be inserted after\r\n * operations: 'append', 'prepend', 'insert', 'remove', 'update', 'none'\r\n */\n insert: function insert(operation, item) {\n var wrapper = {\n item: item\n };\n\n if (operation % 1 === 0) {\n // it is an insert\n wrapper.op = 'insert';\n buffer.splice(operation, 0, wrapper);\n } else {\n wrapper.op = operation;\n switch (operation) {\n case 'append':\n buffer.push(wrapper);\n break;\n case 'prepend':\n buffer.unshift(wrapper);\n break;\n }\n }\n },\n\n\n // removes elements from buffer\n remove: function remove(arg1, arg2) {\n if (angular.isNumber(arg1)) {\n // removes items from arg1 (including) through arg2 (excluding)\n for (var i = arg1; i < arg2; i++) {\n elementRoutines.removeElement(buffer[i]);\n }\n\n return buffer.splice(arg1, arg2 - arg1);\n }\n // removes single item(wrapper) from the buffer\n buffer.splice(buffer.indexOf(arg1), 1);\n\n return elementRoutines.removeElementAnimated(arg1);\n },\n effectiveHeight: function effectiveHeight(elements) {\n if (!elements.length) {\n return 0;\n }\n var top = Number.MAX_VALUE;\n var bottom = Number.NEGATIVE_INFINITY;\n elements.forEach(function (wrapper) {\n if (wrapper.element[0].offsetParent) {\n // element style is not display:none\n top = Math.min(top, wrapper.element.offset().top);\n bottom = Math.max(bottom, wrapper.element.offset().top + wrapper.element.outerHeight(true));\n }\n });\n return Math.max(0, bottom - top);\n }\n });\n\n return buffer;\n}\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ElementRoutines = function () {\n function ElementRoutines($injector, $q) {\n _classCallCheck(this, ElementRoutines);\n\n this.$animate = $injector.has && $injector.has('$animate') ? $injector.get('$animate') : null;\n this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3;\n this.$q = $q;\n }\n\n _createClass(ElementRoutines, [{\n key: 'insertElement',\n value: function insertElement(newElement, previousElement) {\n previousElement.after(newElement);\n return [];\n }\n }, {\n key: 'removeElement',\n value: function removeElement(wrapper) {\n wrapper.element.remove();\n wrapper.scope.$destroy();\n return [];\n }\n }, {\n key: 'insertElementAnimated',\n value: function insertElementAnimated(newElement, previousElement) {\n if (!this.$animate) {\n return this.insertElement(newElement, previousElement);\n }\n\n if (this.isAngularVersionLessThen1_3) {\n var deferred = this.$q.defer();\n // no need for parent - previous element is never null\n this.$animate.enter(newElement, null, previousElement, function () {\n return deferred.resolve();\n });\n\n return [deferred.promise];\n }\n\n // no need for parent - previous element is never null\n return [this.$animate.enter(newElement, null, previousElement)];\n }\n }, {\n key: 'removeElementAnimated',\n value: function removeElementAnimated(wrapper) {\n if (!this.$animate) {\n return this.removeElement(wrapper);\n }\n\n if (this.isAngularVersionLessThen1_3) {\n var deferred = this.$q.defer();\n this.$animate.leave(wrapper.element, function () {\n wrapper.scope.$destroy();\n return deferred.resolve();\n });\n\n return [deferred.promise];\n }\n\n return [this.$animate.leave(wrapper.element).then(function () {\n return wrapper.scope.$destroy();\n })];\n }\n }]);\n\n return ElementRoutines;\n}();\n\nexports.default = ElementRoutines;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*!\r\n globals: angular, window\r\n List of used element methods available in JQuery but not in JQuery Lite\r\n element.before(elem)\r\n element.height()\r\n element.outerHeight(true)\r\n element.height(value) = only for Top/Bottom padding elements\r\n element.scrollTop()\r\n element.scrollTop(value)\r\n */\n\nvar JQLiteExtras = function () {\n function JQLiteExtras() {\n _classCallCheck(this, JQLiteExtras);\n }\n\n _createClass(JQLiteExtras, [{\n key: 'registerFor',\n value: function registerFor(element) {\n var convertToPx = void 0,\n css = void 0,\n getStyle = void 0,\n isWindow = void 0;\n // angular implementation blows up if elem is the window\n css = angular.element.prototype.css;\n\n element.prototype.css = function (name, value) {\n var self = this;\n var elem = self[0];\n if (!(!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style)) {\n return css.call(self, name, value);\n }\n };\n\n // as defined in angularjs v1.0.5\n isWindow = function isWindow(obj) {\n return obj && obj.document && obj.location && obj.alert && obj.setInterval;\n };\n\n function scrollTo(self, direction, value) {\n var elem = self[0];\n\n var _top$left$direction = _slicedToArray({\n top: ['scrollTop', 'pageYOffset', 'scrollLeft'],\n left: ['scrollLeft', 'pageXOffset', 'scrollTop']\n }[direction], 3),\n method = _top$left$direction[0],\n prop = _top$left$direction[1],\n preserve = _top$left$direction[2];\n\n if (isWindow(elem)) {\n if (angular.isDefined(value)) {\n return elem.scrollTo(self[preserve].call(self), value);\n }\n return prop in elem ? elem[prop] : elem.document.documentElement[method];\n } else {\n if (angular.isDefined(value)) {\n elem[method] = value;\n }\n return elem[method];\n }\n }\n\n if (window.getComputedStyle) {\n getStyle = function getStyle(elem) {\n return window.getComputedStyle(elem, null);\n };\n convertToPx = function convertToPx(elem, value) {\n return parseFloat(value);\n };\n } else {\n getStyle = function getStyle(elem) {\n return elem.currentStyle;\n };\n convertToPx = function convertToPx(elem, value) {\n var left = void 0,\n result = void 0,\n rs = void 0,\n rsLeft = void 0,\n style = void 0;\n var core_pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n var rnumnonpx = new RegExp('^(' + core_pnum + ')(?!px)[a-z%]+$', 'i');\n\n if (!rnumnonpx.test(value)) {\n return parseFloat(value);\n }\n\n // ported from JQuery\n style = elem.style;\n left = style.left;\n rs = elem.runtimeStyle;\n rsLeft = rs && rs.left;\n if (rs) {\n rs.left = style.left;\n }\n // put in the new values to get a computed style out\n style.left = value;\n result = style.pixelLeft;\n style.left = left;\n if (rsLeft) {\n rs.left = rsLeft;\n }\n return result;\n };\n }\n\n function getMeasurements(elem, measure) {\n var base = void 0,\n borderA = void 0,\n borderB = void 0,\n computedMarginA = void 0,\n computedMarginB = void 0,\n computedStyle = void 0,\n dirA = void 0,\n dirB = void 0,\n marginA = void 0,\n marginB = void 0,\n paddingA = void 0,\n paddingB = void 0;\n\n if (isWindow(elem)) {\n base = document.documentElement[{ height: 'clientHeight', width: 'clientWidth' }[measure]];\n\n return {\n base: base,\n padding: 0,\n border: 0,\n margin: 0\n };\n }\n\n // Start with offset property\n\n var _width$height$measure = _slicedToArray({\n width: [elem.offsetWidth, 'Left', 'Right'],\n height: [elem.offsetHeight, 'Top', 'Bottom']\n }[measure], 3);\n\n base = _width$height$measure[0];\n dirA = _width$height$measure[1];\n dirB = _width$height$measure[2];\n\n\n computedStyle = getStyle(elem);\n paddingA = convertToPx(elem, computedStyle['padding' + dirA]) || 0;\n paddingB = convertToPx(elem, computedStyle['padding' + dirB]) || 0;\n borderA = convertToPx(elem, computedStyle['border' + dirA + 'Width']) || 0;\n borderB = convertToPx(elem, computedStyle['border' + dirB + 'Width']) || 0;\n computedMarginA = computedStyle['margin' + dirA];\n computedMarginB = computedStyle['margin' + dirB];\n\n // I do not care for width for now, so this hack is irrelevant\n // if ( !supportsPercentMargin )\n // computedMarginA = hackPercentMargin( elem, computedStyle, computedMarginA )\n // computedMarginB = hackPercentMargin( elem, computedStyle, computedMarginB )\n marginA = convertToPx(elem, computedMarginA) || 0;\n marginB = convertToPx(elem, computedMarginB) || 0;\n\n return {\n base: base,\n padding: paddingA + paddingB,\n border: borderA + borderB,\n margin: marginA + marginB\n };\n }\n\n function getWidthHeight(elem, direction, measure) {\n var computedStyle = void 0,\n result = void 0;\n\n var measurements = getMeasurements(elem, direction);\n\n if (measurements.base > 0) {\n return {\n base: measurements.base - measurements.padding - measurements.border,\n outer: measurements.base,\n outerfull: measurements.base + measurements.margin\n }[measure];\n }\n\n // Fall back to computed then uncomputed css if necessary\n computedStyle = getStyle(elem);\n result = computedStyle[direction];\n\n if (result < 0 || result === null) {\n result = elem.style[direction] || 0;\n }\n\n // Normalize \"\", auto, and prepare for extra\n result = parseFloat(result) || 0;\n\n return {\n base: result - measurements.padding - measurements.border,\n outer: result,\n outerfull: result + measurements.padding + measurements.border + measurements.margin\n }[measure];\n }\n\n // define missing methods\n return angular.forEach({\n before: function before(newElem) {\n var children, elem, i, j, parent, ref, self;\n self = this;\n elem = self[0];\n parent = self.parent();\n children = parent.contents();\n if (children[0] === elem) {\n return parent.prepend(newElem);\n } else {\n for (i = j = 1, ref = children.length - 1; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {\n if (children[i] === elem) {\n angular.element(children[i - 1]).after(newElem);\n return;\n }\n }\n throw new Error('invalid DOM structure ' + elem.outerHTML);\n }\n },\n height: function height(value) {\n var self;\n self = this;\n if (angular.isDefined(value)) {\n if (angular.isNumber(value)) {\n value = value + 'px';\n }\n return css.call(self, 'height', value);\n } else {\n return getWidthHeight(this[0], 'height', 'base');\n }\n },\n outerHeight: function outerHeight(option) {\n return getWidthHeight(this[0], 'height', option ? 'outerfull' : 'outer');\n },\n outerWidth: function outerWidth(option) {\n return getWidthHeight(this[0], 'width', option ? 'outerfull' : 'outer');\n },\n\n\n /*\r\n The offset setter method is not implemented\r\n */\n offset: function offset(value) {\n var docElem = void 0,\n win = void 0;\n var self = this;\n var box = {\n top: 0,\n left: 0\n };\n var elem = self[0];\n var doc = elem && elem.ownerDocument;\n\n if (arguments.length) {\n if (value === undefined) {\n return self;\n }\n // TODO: implement setter\n throw new Error('offset setter method is not implemented');\n }\n\n if (!doc) {\n return;\n }\n\n docElem = doc.documentElement;\n\n // TODO: Make sure it's not a disconnected DOM node\n\n if (elem.getBoundingClientRect != null) {\n box = elem.getBoundingClientRect();\n }\n\n win = doc.defaultView || doc.parentWindow;\n\n return {\n top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),\n left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0)\n };\n },\n scrollTop: function scrollTop(value) {\n return scrollTo(this, 'top', value);\n },\n scrollLeft: function scrollLeft(value) {\n return scrollTo(this, 'left', value);\n }\n }, function (value, key) {\n if (!element.prototype[key]) {\n return element.prototype[key] = value;\n }\n });\n }\n }]);\n\n return JQLiteExtras;\n}();\n\nexports.default = JQLiteExtras;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = Viewport;\n\nvar _padding = __webpack_require__(5);\n\nvar _padding2 = _interopRequireDefault(_padding);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding) {\n var topPadding = null;\n var bottomPadding = null;\n var viewport = viewportController && viewportController.viewport ? viewportController.viewport : angular.element(window);\n var container = viewportController && viewportController.container ? viewportController.container : undefined;\n var scope = viewportController && viewportController.scope ? viewportController.scope : $rootScope;\n\n viewport.css({\n 'overflow-anchor': 'none',\n 'overflow-y': 'auto',\n 'display': 'block'\n });\n\n function bufferPadding() {\n return viewport.outerHeight() * padding; // some extra space to initiate preload\n }\n\n angular.extend(viewport, {\n getScope: function getScope() {\n return scope;\n },\n createPaddingElements: function createPaddingElements(template) {\n topPadding = new _padding2.default(template);\n bottomPadding = new _padding2.default(template);\n element.before(topPadding);\n element.after(bottomPadding);\n },\n applyContainerStyle: function applyContainerStyle() {\n if (container && container !== viewport) {\n viewport.css('height', window.getComputedStyle(container[0]).height);\n }\n },\n bottomDataPos: function bottomDataPos() {\n var scrollHeight = viewport[0].scrollHeight;\n scrollHeight = scrollHeight != null ? scrollHeight : viewport[0].document.documentElement.scrollHeight;\n return scrollHeight - bottomPadding.height();\n },\n topDataPos: function topDataPos() {\n return topPadding.height();\n },\n bottomVisiblePos: function bottomVisiblePos() {\n return viewport.scrollTop() + viewport.outerHeight();\n },\n topVisiblePos: function topVisiblePos() {\n return viewport.scrollTop();\n },\n insertElement: function insertElement(e, sibling) {\n return elementRoutines.insertElement(e, sibling || topPadding);\n },\n insertElementAnimated: function insertElementAnimated(e, sibling) {\n return elementRoutines.insertElementAnimated(e, sibling || topPadding);\n },\n shouldLoadBottom: function shouldLoadBottom() {\n return !buffer.eof && viewport.bottomDataPos() < viewport.bottomVisiblePos() + bufferPadding();\n },\n clipBottom: function clipBottom() {\n // clip the invisible items off the bottom\n var overage = 0;\n var overageHeight = 0;\n var itemHeight = 0;\n var emptySpaceHeight = viewport.bottomDataPos() - viewport.bottomVisiblePos() - bufferPadding();\n\n for (var i = buffer.length - 1; i >= 0; i--) {\n itemHeight = buffer[i].element.outerHeight(true);\n if (overageHeight + itemHeight > emptySpaceHeight) {\n break;\n }\n bottomPadding.cache.add(buffer[i]);\n overageHeight += itemHeight;\n overage++;\n }\n\n if (overage > 0) {\n buffer.eof = false;\n buffer.remove(buffer.length - overage, buffer.length);\n buffer.next -= overage;\n viewport.adjustPaddings();\n }\n },\n shouldLoadTop: function shouldLoadTop() {\n return !buffer.bof && viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding();\n },\n clipTop: function clipTop() {\n // clip the invisible items off the top\n var overage = 0;\n var overageHeight = 0;\n var itemHeight = 0;\n var emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\n\n for (var i = 0; i < buffer.length; i++) {\n itemHeight = buffer[i].element.outerHeight(true);\n if (overageHeight + itemHeight > emptySpaceHeight) {\n break;\n }\n topPadding.cache.add(buffer[i]);\n overageHeight += itemHeight;\n overage++;\n }\n\n if (overage > 0) {\n // we need to adjust top padding element before items are removed from top\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\n topPadding.height(topPadding.height() + overageHeight);\n buffer.bof = false;\n buffer.remove(0, overage);\n buffer.first += overage;\n }\n },\n adjustPaddings: function adjustPaddings() {\n if (!buffer.length) {\n return;\n }\n\n // precise heights calculation, items that were in buffer once\n var topPaddingHeight = topPadding.cache.reduce(function (summ, item) {\n return summ + (item.index < buffer.first ? item.height : 0);\n }, 0);\n var bottomPaddingHeight = bottomPadding.cache.reduce(function (summ, item) {\n return summ + (item.index >= buffer.next ? item.height : 0);\n }, 0);\n\n // average item height based on buffer data\n var visibleItemsHeight = buffer.reduce(function (summ, item) {\n return summ + item.element.outerHeight(true);\n }, 0);\n var averageItemHeight = (visibleItemsHeight + topPaddingHeight + bottomPaddingHeight) / (buffer.maxIndex - buffer.minIndex + 1);\n\n // average heights calculation, items that have never been reached\n var adjustTopPadding = buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser;\n var adjustBottomPadding = buffer.maxIndexUser !== null && buffer.maxIndex < buffer.maxIndexUser;\n var topPaddingHeightAdd = adjustTopPadding ? (buffer.minIndex - buffer.minIndexUser) * averageItemHeight : 0;\n var bottomPaddingHeightAdd = adjustBottomPadding ? (buffer.maxIndexUser - buffer.maxIndex) * averageItemHeight : 0;\n\n // paddings combine adjustment\n topPadding.height(topPaddingHeight + topPaddingHeightAdd);\n bottomPadding.height(bottomPaddingHeight + bottomPaddingHeightAdd);\n },\n onAfterMinIndexSet: function onAfterMinIndexSet(topPaddingHeightOld) {\n // additional scrollTop adjustment in case of datasource.minIndex external set\n if (buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser) {\n var diff = topPadding.height() - topPaddingHeightOld;\n viewport.scrollTop(viewport.scrollTop() + diff);\n diff -= viewport.scrollTop();\n if (diff > 0) {\n bottomPadding.height(bottomPadding.height() + diff);\n viewport.scrollTop(viewport.scrollTop() + diff);\n }\n }\n },\n onAfterPrepend: function onAfterPrepend(updates) {\n if (!updates.prepended.length) return;\n var height = buffer.effectiveHeight(updates.prepended);\n var paddingHeight = topPadding.height() - height;\n if (paddingHeight >= 0) {\n topPadding.height(paddingHeight);\n } else {\n topPadding.height(0);\n viewport.scrollTop(viewport.scrollTop() - paddingHeight);\n }\n },\n resetTopPadding: function resetTopPadding() {\n topPadding.height(0);\n topPadding.cache.clear();\n },\n resetBottomPadding: function resetBottomPadding() {\n bottomPadding.height(0);\n bottomPadding.cache.clear();\n },\n removeItem: function removeItem(item) {\n topPadding.cache.remove(item);\n bottomPadding.cache.remove(item);\n return buffer.remove(item);\n }\n });\n\n return viewport;\n}\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = Padding;\nfunction Cache() {\n var cache = Object.create(Array.prototype);\n\n angular.extend(cache, {\n add: function add(item) {\n for (var i = cache.length - 1; i >= 0; i--) {\n if (cache[i].index === item.scope.$index) {\n cache[i].height = item.element.outerHeight();\n return;\n }\n }\n cache.push({\n index: item.scope.$index,\n height: item.element.outerHeight()\n });\n cache.sort(function (a, b) {\n return a.index < b.index ? -1 : a.index > b.index ? 1 : 0;\n });\n },\n remove: function remove(item) {\n for (var i = cache.length - 1; i >= 0; i--) {\n if (cache[i].index === item.scope.$index) {\n cache.splice(i, 1);\n break;\n }\n }\n for (var _i = cache.length - 1; _i >= 0; _i--) {\n if (cache[_i].index > item.scope.$index) {\n cache[_i].index--;\n }\n }\n },\n clear: function clear() {\n cache.length = 0;\n }\n });\n\n return cache;\n}\n\nfunction Padding(template) {\n var result = void 0;\n\n if (template.nodeType !== Node.ELEMENT_NODE) {\n throw new Error('ui-scroll directive requires an Element node for templating the view');\n }\n\n switch (template.tagName.toLowerCase()) {\n case 'dl':\n throw new Error('ui-scroll directive does not support <' + template.tagName + '> as a repeating tag: ' + template.outerHTML);\n case 'tr':\n var table = angular.element('
    ');\n result = table.find('tr');\n break;\n case 'li':\n result = angular.element('
  • ');\n break;\n default:\n result = angular.element('
    ');\n }\n\n result.cache = new Cache();\n\n return result;\n}\n\n/***/ }),\n/* 6 */,\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _jqLiteExtras = __webpack_require__(3);\n\nvar _jqLiteExtras2 = _interopRequireDefault(_jqLiteExtras);\n\nvar _elementRoutines = __webpack_require__(2);\n\nvar _elementRoutines2 = _interopRequireDefault(_elementRoutines);\n\nvar _buffer = __webpack_require__(1);\n\nvar _buffer2 = _interopRequireDefault(_buffer);\n\nvar _viewport = __webpack_require__(4);\n\nvar _viewport2 = _interopRequireDefault(_viewport);\n\nvar _adapter = __webpack_require__(0);\n\nvar _adapter2 = _interopRequireDefault(_adapter);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nangular.module('ui.scroll', []).service('jqLiteExtras', function () {\n return new _jqLiteExtras2.default();\n}).run(['jqLiteExtras', function (jqLiteExtras) {\n return !window.jQuery ? jqLiteExtras.registerFor(angular.element) : null;\n}]).directive('uiScrollViewport', function () {\n return {\n restrict: 'A',\n controller: ['$scope', '$element', function (scope, element) {\n var _this = this;\n\n this.container = element;\n this.viewport = element;\n this.scope = scope;\n\n angular.forEach(element.children(), function (child) {\n if (child.tagName.toLowerCase() === 'tbody') {\n _this.viewport = angular.element(child);\n }\n });\n\n return this;\n }]\n };\n}).directive('uiScroll', ['$log', '$injector', '$rootScope', '$timeout', '$q', '$parse', 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 var match = $attr.uiScroll.match(/^\\s*(\\w+)\\s+in\\s+([(\\w|\\$)\\.]+)\\s*$/);\n if (!match) {\n throw new Error('Expected uiScroll in form of \\'_item_ in _datasource_\\' but got \\'' + $attr.uiScroll + '\\'');\n }\n\n function parseNumericAttr(value, defaultValue) {\n var result = $parse(value)($scope);\n return isNaN(result) ? defaultValue : result;\n }\n\n var BUFFER_MIN = 3;\n var BUFFER_DEFAULT = 10;\n var PADDING_MIN = 0.3;\n var PADDING_DEFAULT = 0.5;\n\n var datasource = null;\n var itemName = match[1];\n var datasourceName = match[2];\n var viewportController = controllers[0];\n var bufferSize = Math.max(BUFFER_MIN, parseNumericAttr($attr.bufferSize, BUFFER_DEFAULT));\n var padding = Math.max(PADDING_MIN, parseNumericAttr($attr.padding, PADDING_DEFAULT));\n var startIndex = parseNumericAttr($attr.startIndex, 1);\n var ridActual = 0; // current data revision id\n var pending = [];\n\n var elementRoutines = new _elementRoutines2.default($injector, $q);\n var buffer = new _buffer2.default(elementRoutines, bufferSize);\n var viewport = new _viewport2.default(elementRoutines, buffer, element, viewportController, $rootScope, padding);\n var adapter = new _adapter2.default(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope);\n\n if (viewportController) {\n viewportController.adapter = adapter;\n }\n\n var isDatasourceValid = function isDatasourceValid() {\n return angular.isObject(datasource) && angular.isFunction(datasource.get);\n };\n datasource = $parse(datasourceName)($scope); // try to get datasource on scope\n if (!isDatasourceValid()) {\n datasource = $injector.get(datasourceName); // try to inject datasource as service\n if (!isDatasourceValid()) {\n throw new Error(datasourceName + ' is not a valid datasource');\n }\n }\n\n var onRenderHandlers = [];\n function onRenderHandlersRunner() {\n if (onRenderHandlers.length) {\n angular.forEach(onRenderHandlers, function (handler) {\n return handler();\n });\n onRenderHandlers = [];\n }\n }\n function preDefineIndexProperty(datasource, propName) {\n var getter = void 0;\n // need to postpone min/maxIndexUser processing if the view is empty\n if (datasource.hasOwnProperty(propName) && !buffer.length) {\n getter = datasource[propName];\n delete datasource[propName];\n onRenderHandlers.push(function () {\n return datasource[propName] = getter;\n });\n }\n }\n\n function defineIndexProperty(datasource, propName, propUserName) {\n var descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n if (descriptor && (descriptor.set || descriptor.get)) {\n return;\n }\n var getter = void 0;\n preDefineIndexProperty(datasource, propName);\n Object.defineProperty(datasource, propName, {\n set: function set(value) {\n getter = value;\n buffer[propUserName] = value;\n var topPaddingHeightOld = viewport.topDataPos();\n viewport.adjustPaddings();\n if (propName === 'minIndex') {\n viewport.onAfterMinIndexSet(topPaddingHeightOld);\n }\n },\n get: function get() {\n return getter;\n }\n });\n }\n\n defineIndexProperty(datasource, 'minIndex', 'minIndexUser');\n defineIndexProperty(datasource, 'maxIndex', 'maxIndexUser');\n\n var fetchNext = datasource.get.length !== 2 ? function (success) {\n return datasource.get(buffer.next, bufferSize, success);\n } : function (success) {\n datasource.get({\n index: buffer.next,\n append: buffer.length ? buffer[buffer.length - 1].item : void 0,\n count: bufferSize\n }, success);\n };\n\n var fetchPrevious = datasource.get.length !== 2 ? function (success) {\n return datasource.get(buffer.first - bufferSize, bufferSize, success);\n } : function (success) {\n datasource.get({\n index: buffer.first - bufferSize,\n prepend: buffer.length ? buffer[0].item : void 0,\n count: bufferSize\n }, success);\n };\n\n /**\n * Build padding elements\n *\n * Calling linker is the only way I found to get access to the tag name of the template\n * to prevent the directive scope from pollution a new scope is created and destroyed\n * right after the builder creation is completed\n */\n linker(function (clone, scope) {\n viewport.createPaddingElements(clone[0]);\n // we do not include the clone in the DOM. It means that the nested directives will not\n // be able to reach the parent directives, but in this case it is intentional because we\n // created the clone to access the template tag name\n scope.$destroy();\n clone.remove();\n });\n\n $scope.$on('$destroy', function () {\n unbindEvents();\n viewport.unbind('mousewheel', wheelHandler);\n });\n\n viewport.bind('mousewheel', wheelHandler);\n\n $timeout(function () {\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(function (item) {\n if (angular.isFunction(item.unregisterVisibilityWatcher)) {\n item.unregisterVisibilityWatcher();\n delete item.unregisterVisibilityWatcher;\n }\n });\n if (!pending.length) {\n $timeout(function () {\n return adjustBuffer();\n });\n }\n }\n }\n\n function insertWrapperContent(wrapper, insertAfter) {\n createElement(wrapper, insertAfter, viewport.insertElement);\n if (!isElementVisible(wrapper)) {\n wrapper.unregisterVisibilityWatcher = wrapper.scope.$watch(function () {\n return visibilityWatcher(wrapper);\n });\n }\n wrapper.element.addClass('ng-hide'); // hide inserted elements before data binding\n }\n\n function createElement(wrapper, insertAfter, insertElement) {\n var promises = null;\n var sibling = insertAfter > 0 ? buffer[insertAfter - 1].element : undefined;\n linker(function (clone, scope) {\n promises = insertElement(clone, sibling);\n wrapper.element = clone;\n wrapper.scope = scope;\n scope[itemName] = wrapper.item;\n });\n // ui-scroll-grid apply\n if (adapter.transform) {\n var tdInitializer = wrapper.scope.uiScrollTdInitializer;\n if (tdInitializer && tdInitializer.linking) {\n adapter.transform(wrapper.scope, wrapper.element);\n } else {\n wrapper.scope.uiScrollTdInitializer = {\n onLink: function onLink() {\n return adapter.transform(wrapper.scope, wrapper.element);\n },\n scope: wrapper.scope\n };\n }\n }\n return promises;\n }\n\n function updateDOM() {\n var promises = [];\n var toBePrepended = [];\n var toBeRemoved = [];\n var inserted = [];\n\n buffer.forEach(function (wrapper, i) {\n switch (wrapper.op) {\n case 'prepend':\n toBePrepended.unshift(wrapper);\n break;\n case 'append':\n insertWrapperContent(wrapper, i);\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'insert':\n promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated));\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'remove':\n toBeRemoved.push(wrapper);\n }\n });\n\n toBeRemoved.forEach(function (wrapper) {\n return promises = promises.concat(viewport.removeItem(wrapper));\n });\n\n if (toBePrepended.length) toBePrepended.forEach(function (wrapper) {\n insertWrapperContent(wrapper);\n wrapper.op = 'none';\n });\n\n buffer.forEach(function (item, i) {\n return item.scope.$index = buffer.first + i;\n });\n\n return {\n prepended: toBePrepended,\n removed: toBeRemoved,\n inserted: inserted,\n animated: promises\n };\n }\n\n function updatePaddings(rid, updates) {\n // schedule another adjustBuffer after animation completion\n if (updates.animated.length) {\n $q.all(updates.animated).then(function () {\n viewport.adjustPaddings();\n adjustBuffer(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 adjustBuffer(rid) {\n if (!rid) {\n // dismiss pending requests\n pending = [];\n rid = ++ridActual;\n }\n\n var updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustment\n !$scope.$$phase && $scope.$digest();\n\n updates.inserted.forEach(function (w) {\n return w.element.removeClass('ng-hide');\n });\n updates.prepended.forEach(function (w) {\n return w.element.removeClass('ng-hide');\n });\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 adjustBufferAfterFetch(rid) {\n var updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustment\n !$scope.$$phase && $scope.$digest();\n\n updates.inserted.forEach(function (w) {\n return w.element.removeClass('ng-hide');\n });\n updates.prepended.forEach(function (w) {\n return w.element.removeClass('ng-hide');\n });\n\n viewport.onAfterPrepend(updates);\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n onRenderHandlersRunner();\n enqueueFetch(rid, updates);\n pending.shift();\n\n if (pending.length) fetch(rid);else {\n adapter.loading(false);\n bindEvents();\n adapter.calculateProperties();\n }\n }\n\n function fetch(rid) {\n if (pending[0]) {\n // scrolling down\n if (buffer.length && !viewport.shouldLoadBottom()) {\n adjustBufferAfterFetch(rid);\n } else {\n fetchNext(function (result) {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.eof = true;\n }\n\n if (result.length > 0) {\n viewport.clipTop();\n buffer.append(result);\n }\n\n adjustBufferAfterFetch(rid);\n });\n }\n } else {\n // scrolling up\n if (buffer.length && !viewport.shouldLoadTop()) {\n adjustBufferAfterFetch(rid);\n } else {\n fetchPrevious(function (result) {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.bof = true;\n // log 'bof is reached'\n }\n\n if (result.length > 0) {\n if (buffer.length) {\n viewport.clipBottom();\n }\n buffer.prepend(result);\n }\n\n 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.$$phase && $scope.$digest();\n }\n }\n }\n\n function wheelHandler(event) {\n if (!adapter.disabled) {\n var scrollTop = viewport[0].scrollTop;\n var yMax = viewport[0].scrollHeight - viewport[0].clientHeight;\n\n if (scrollTop === 0 && !buffer.bof || scrollTop === yMax && !buffer.eof) {\n event.preventDefault();\n }\n }\n }\n }\n}]);\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// ui-scroll.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 46a2f93695cd00fd813e","function getCtrlOnData(attr, element) {\r\n let onSyntax = attr.match(/^(.+)(\\s+on\\s+)(.+)?/);\r\n if (onSyntax && onSyntax.length === 4) {\r\n window.console.log('Angular ui-scroll adapter assignment warning. \"Controller On\" syntax has been deprecated since ui-scroll v1.6.1.');\r\n let ctrl = onSyntax[3];\r\n let tail = onSyntax[1];\r\n let candidate = element;\r\n while (candidate.length) {\r\n let candidateScope = candidate.scope(); // doesn't work when debugInfoEnabled flag = true\r\n let candidateName = (candidate.attr('ng-controller') || '').match(/(\\w(?:\\w|\\d)*)(?:\\s+as\\s+(\\w(?:\\w|\\d)*))?/);\r\n if (candidateName && candidateName[1] === ctrl) {\r\n return {\r\n target: candidateScope,\r\n source: tail\r\n };\r\n }\r\n candidate = candidate.parent();\r\n }\r\n throw new Error('Angular ui-scroll adapter assignment error. Failed to locate target controller \"' + ctrl + '\" to inject \"' + tail + '\"');\r\n }\r\n}\r\n\r\nclass Adapter {\r\n\r\n constructor(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope) {\r\n this.viewport = viewport;\r\n this.buffer = buffer;\r\n this.adjustBuffer = adjustBuffer;\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, $parse, element);\r\n this.generatePublicContext($attr, $parse);\r\n }\r\n\r\n assignAdapter(adapterAttr, $parse, element) {\r\n if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\\s+|\\s+$/gm, ''))) {\r\n return;\r\n }\r\n let ctrlOnData = getCtrlOnData(adapterAttr, element);\r\n let adapterOnScope;\r\n\r\n try {\r\n if (ctrlOnData) { // \"Controller On\", deprecated since v1.6.1\r\n $parse(ctrlOnData.source).assign(ctrlOnData.target, {});\r\n adapterOnScope = $parse(ctrlOnData.source)(ctrlOnData.target);\r\n }\r\n else {\r\n $parse(adapterAttr).assign(this.startScope, {});\r\n adapterOnScope = $parse(adapterAttr)(this.startScope);\r\n }\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($attr, $parse) {\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 = $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 $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.adjustBuffer() : 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 applyUpdates(arg1, arg2) {\r\n if (angular.isFunction(arg1)) {\r\n // arg1 is the updater function, arg2 is ignored\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, 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 - this.buffer.first;\r\n if ((index >= 0 && index < this.buffer.length)) {\r\n this.applyUpdate(this.buffer[index], arg2);\r\n }\r\n }\r\n\r\n this.adjustBuffer();\r\n }\r\n\r\n append(newItems) {\r\n this.buffer.append(newItems);\r\n this.adjustBuffer();\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.adjustBuffer();\r\n this.viewport.clipTop();\r\n this.viewport.clipBottom();\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\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\r\n rowTop = itemTop;\r\n\r\n if (topDone && bottomDone) {\r\n break;\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\r\n let keepIt;\r\n let pos = (this.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 this.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}\r\n\r\nexport default Adapter;\n\n\n// WEBPACK FOOTER //\n// ./src/modules/adapter.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.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 return buffer;\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/buffer.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","/*!\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","import Padding from './padding';\r\n\r\nexport default function Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding) {\r\n let topPadding = null;\r\n let bottomPadding = null;\r\n const viewport = viewportController && viewportController.viewport ? viewportController.viewport : angular.element(window);\r\n const container = viewportController && viewportController.container ? viewportController.container : undefined;\r\n const scope = viewportController && viewportController.scope ? viewportController.scope : $rootScope;\r\n\r\n viewport.css({\r\n 'overflow-anchor': 'none',\r\n 'overflow-y': 'auto',\r\n 'display': 'block'\r\n });\r\n\r\n function bufferPadding() {\r\n return viewport.outerHeight() * padding; // some extra space to initiate preload\r\n }\r\n\r\n angular.extend(viewport, {\r\n getScope() {\r\n return scope;\r\n },\r\n\r\n createPaddingElements(template) {\r\n topPadding = new Padding(template);\r\n bottomPadding = new Padding(template);\r\n element.before(topPadding);\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.adjustPaddings();\r\n }\r\n },\r\n\r\n shouldLoadTop() {\r\n return !buffer.bof && (viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding());\r\n },\r\n\r\n clipTop() {\r\n // clip the invisible items off the top\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\r\n\r\n for (let i = 0; i < buffer.length; i++) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n topPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n // we need to adjust top padding element before items are removed from top\r\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\r\n topPadding.height(topPadding.height() + overageHeight);\r\n buffer.bof = false;\r\n buffer.remove(0, overage);\r\n buffer.first += overage;\r\n }\r\n },\r\n\r\n adjustPaddings() {\r\n if (!buffer.length) {\r\n return;\r\n }\r\n\r\n // precise heights calculation, 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 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 diff -= viewport.scrollTop();\r\n if(diff > 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 removeItem(item) {\r\n topPadding.cache.remove(item);\r\n bottomPadding.cache.remove(item);\r\n return buffer.remove(item);\r\n }\r\n });\r\n\r\n return viewport;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/viewport.js","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 cache.sort((a, b) => ((a.index < b.index) ? -1 : ((a.index > b.index) ? 1 : 0)));\r\n },\r\n\r\n remove(item) {\r\n for (let i = cache.length - 1; i >= 0; i--) {\r\n if (cache[i].index === item.scope.$index) {\r\n cache.splice(i, 1);\r\n break;\r\n }\r\n }\r\n for (let i = cache.length - 1; i >= 0; i--) {\r\n if (cache[i].index > item.scope.$index) {\r\n cache[i].index--;\r\n }\r\n }\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 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\r\n switch (template.tagName.toLowerCase()) {\r\n case 'dl':\r\n throw new Error(`ui-scroll directive does not support <${template.tagName}> as a repeating tag: ${template.outerHTML}`);\r\n case 'tr':\r\n let table = angular.element('
    ');\r\n result = table.find('tr');\r\n break;\r\n case 'li':\r\n result = angular.element('
  • ');\r\n break;\r\n default:\r\n result = angular.element('
    ');\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","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 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 '$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, $rootScope, padding);\n let adapter = new Adapter(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope);\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 onRenderHandlers = [];\n function onRenderHandlersRunner() {\n if(onRenderHandlers.length) {\n angular.forEach(onRenderHandlers, (handler) => handler());\n onRenderHandlers = [];\n }\n }\n function preDefineIndexProperty(datasource, propName) {\n let getter;\n // need to postpone min/maxIndexUser processing if the view is empty\n if(datasource.hasOwnProperty(propName) && !buffer.length) {\n getter = datasource[propName];\n delete datasource[propName];\n onRenderHandlers.push(() => datasource[propName] = getter);\n }\n }\n\n function defineIndexProperty(datasource, propName, propUserName) {\n let descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n if (descriptor && (descriptor.set || descriptor.get)) {\n return;\n }\n let getter;\n preDefineIndexProperty(datasource, propName);\n Object.defineProperty(datasource, propName, {\n set: (value) => {\n getter = value;\n buffer[propUserName] = value;\n let topPaddingHeightOld = viewport.topDataPos();\n viewport.adjustPaddings();\n if (propName === 'minIndex') {\n viewport.onAfterMinIndexSet(topPaddingHeightOld);\n }\n },\n get: () => getter\n });\n }\n\n defineIndexProperty(datasource, 'minIndex', 'minIndexUser');\n defineIndexProperty(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 /**\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 if (!pending.length) {\n $timeout(() => adjustBuffer());\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 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 // ui-scroll-grid apply\n if (adapter.transform) {\n let tdInitializer = wrapper.scope.uiScrollTdInitializer;\n if (tdInitializer && tdInitializer.linking) {\n adapter.transform(wrapper.scope, wrapper.element);\n } else {\n wrapper.scope.uiScrollTdInitializer = {\n onLink: () => adapter.transform(wrapper.scope, wrapper.element),\n scope: wrapper.scope\n };\n }\n }\n return promises;\n }\n\n function updateDOM() {\n let promises = [];\n const toBePrepended = [];\n const toBeRemoved = [];\n const inserted = [];\n\n buffer.forEach((wrapper, i) => {\n switch (wrapper.op) {\n case 'prepend':\n toBePrepended.unshift(wrapper);\n break;\n case 'append':\n insertWrapperContent(wrapper, i);\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'insert':\n promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated));\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'remove':\n toBeRemoved.push(wrapper);\n }\n });\n\n toBeRemoved.forEach((wrapper) => promises = promises.concat(viewport.removeItem(wrapper)));\n\n if (toBePrepended.length)\n toBePrepended.forEach((wrapper) => {\n insertWrapperContent(wrapper);\n wrapper.op = 'none';\n });\n\n buffer.forEach((item, i) => item.scope.$index = buffer.first + i);\n\n return {\n prepended: toBePrepended,\n removed: toBeRemoved,\n inserted: inserted,\n animated: promises\n };\n\n }\n\n function updatePaddings(rid, updates) {\n // schedule another adjustBuffer after animation completion\n if (updates.animated.length) {\n $q.all(updates.animated).then(() => {\n viewport.adjustPaddings();\n adjustBuffer(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 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 !$scope.$$phase && $scope.$digest();\n\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 function adjustBufferAfterFetch(rid) {\n let updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustment\n !$scope.$$phase && $scope.$digest();\n\n updates.inserted.forEach(w => w.element.removeClass('ng-hide'));\n updates.prepended.forEach(w => w.element.removeClass('ng-hide'));\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 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.$$phase && $scope.$digest();\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"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///ui-scroll.min.js","webpack:///webpack/bootstrap cc2ee8bfebb152b1baab","webpack:///./src/modules/adapter.js","webpack:///./src/modules/buffer.js","webpack:///./src/modules/elementRoutines.js","webpack:///./src/modules/jqLiteExtras.js","webpack:///./src/modules/viewport.js","webpack:///./src/modules/padding.js","webpack:///./src/ui-scroll.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","_classCallCheck","instance","Constructor","TypeError","getCtrlOnData","attr","element","onSyntax","match","length","window","console","log","ctrl","tail","candidate","candidateScope","scope","candidateName","target","source","parent","Error","_createClass","defineProperties","props","descriptor","writable","key","protoProps","staticProps","Adapter","viewport","buffer","adjustBuffer","reload","$attr","$parse","$scope","this","isLoading","disabled","viewportScope","getScope","startScope","$parent","publicContext","assignAdapter","adapter","generatePublicContext","adapterAttr","replace","ctrlOnData","adapterOnScope","assign","error","message","angular","extend","_this","publicMethods","bind","publicProps","set","bof","eof","arg1","arg2","_this2","isFunction","slice","forEach","wrapper","applyUpdate","item","index","first","newItems","append","clipTop","clipBottom","prepend","rowTop","topHeight","topDone","bottomDone","itemTop","offset","top","itemHeight","outerHeight","topDataPos","topVisiblePos","bottomVisiblePos","isEOF","_this3","isArray","position","indexOf","reverse","some","newItem","op","_op","insert","default","ScrollBuffer","elementRoutines","bufferSize","create","Array","size","reset","startIndex","remove","next","minIndex","maxIndex","minIndexUser","maxIndexUser","items","Math","max","min","operation","isTop","splice","push","unshift","isNumber","removeElement","removeElementAnimated","effectiveHeight","elements","Number","MAX_VALUE","bottom","NEGATIVE_INFINITY","offsetParent","addCSSRule","sheet","selector","rules","insertRule","addRule","hideClassToken","ElementRoutines","$injector","$q","$animate","has","isAngularVersionLessThen1_3","version","major","minor","document","styleSheets","addClass","removeClass","newElement","previousElement","after","$destroy","insertElement","deferred","defer","enter","resolve","promise","leave","then","_slicedToArray","sliceIterator","arr","_arr","_n","_d","_e","undefined","_s","_i","Symbol","iterator","done","err","JQLiteExtras","scrollTo","self","direction","elem","_top$left$direction","left","method","prop","preserve","isWindow","isDefined","documentElement","getMeasurements","measure","base","borderA","borderB","computedMarginA","computedMarginB","computedStyle","dirA","dirB","marginA","marginB","paddingA","paddingB","height","width","padding","border","margin","_width$height$measure","offsetWidth","offsetHeight","getStyle","convertToPx","getWidthHeight","result","measurements","outer","outerfull","style","parseFloat","css","nodeType","obj","location","alert","setInterval","getComputedStyle","currentStyle","rs","rsLeft","core_pnum","RegExp","test","runtimeStyle","pixelLeft","before","newElem","children","j","ref","contents","outerHTML","option","outerWidth","docElem","win","box","doc","ownerDocument","arguments","getBoundingClientRect","defaultView","parentWindow","pageYOffset","scrollTop","clientTop","pageXOffset","scrollLeft","clientLeft","Viewport","viewportController","$rootScope","bufferPadding","topPadding","bottomPadding","container","overflow-anchor","overflow-y","display","createPaddingElements","template","_padding2","applyContainerStyle","bottomDataPos","scrollHeight","e","sibling","insertElementAnimated","shouldLoadBottom","overage","overageHeight","emptySpaceHeight","cache","add","adjustPaddings","shouldLoadTop","topPaddingHeight","reduce","summ","bottomPaddingHeight","visibleItemsHeight","averageItemHeight","adjustTopPadding","adjustBottomPadding","topPaddingHeightAdd","bottomPaddingHeightAdd","onAfterMinIndexSet","topPaddingHeightOld","diff","onAfterPrepend","updates","prepended","paddingHeight","resetTopPadding","clear","resetBottomPadding","removeItem","_padding","Cache","apply","setPrototypeOf","Padding","Node","ELEMENT_NODE","tagName","toLowerCase","find","CacheProto","$index","sort","a","b","itemToRemove","getOwnPropertyNames","methodName","_interopRequireDefault","_jqLiteExtras","_jqLiteExtras2","_elementRoutines","_elementRoutines2","_buffer","_buffer2","_viewport","_viewport2","_adapter","_adapter2","service","run","jqLiteExtras","jQuery","registerFor","directive","restrict","controller","child","$timeout","link","controllers","linker","parseNumericAttr","defaultValue","isNaN","onRenderHandlersRunner","onRenderHandlers","handler","preDefineIndexProperty","datasource","propName","defineIndexProperty","propUserName","getOwnPropertyDescriptor","isInvalid","rid","ridActual","$$destroyed","bindEvents","resizeAndScrollHandler","unbindEvents","unbind","isElementVisible","visibilityWatcher","unregisterVisibilityWatcher","pending","insertWrapperContent","insertAfter","createElement","$watch","hideElement","promises","clone","itemName","transform","tdInitializer","uiScrollTdInitializer","linking","onLink","updateDOM","toBePrepended","toBeRemoved","inserted","concat","removed","animated","updatePaddings","all","enqueueFetch","loading","fetch","processUpdates","$$phase","$digest","w","showElement","calculateProperties","adjustBufferAfterFetch","shift","fetchNext","fetchPrevious","wheelHandler","event","yMax","clientHeight","preventDefault","uiScroll","datasourceName","isDatasourceValid","isObject","success","count","$on","require","transclude","priority","terminal"],"mappings":";;;;;;CAMS,SAAUA,GCFnB,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAE,OAGA,IAAAC,GAAAF,EAAAD,IACAI,EAAAJ,EACAK,GAAA,EACAH,WAUA,OANAJ,GAAAE,GAAAM,KAAAH,EAAAD,QAAAC,IAAAD,QAAAH,GAGAI,EAAAE,GAAA,EAGAF,EAAAD,QAvBA,GAAAD,KA4BAF,GAAAQ,EAAAT,EAGAC,EAAAS,EAAAP,EAGAF,EAAAK,EAAA,SAAAK,GAA2C,MAAAA,IAG3CV,EAAAW,EAAA,SAAAR,EAAAS,EAAAC,GACAb,EAAAc,EAAAX,EAAAS,IACAG,OAAAC,eAAAb,EAAAS,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAb,EAAAoB,EAAA,SAAAhB,GACA,GAAAS,GAAAT,KAAAiB,WACA,WAA2B,MAAAjB,GAAA,SAC3B,WAAiC,MAAAA,GAEjC,OADAJ,GAAAW,EAAAE,EAAA,IAAAA,GACAA,GAIAb,EAAAc,EAAA,SAAAQ,EAAAC,GAAsD,MAAAR,QAAAS,UAAAC,eAAAlB,KAAAe,EAAAC,IAGtDvB,EAAA0B,EAAA,GAGA1B,IAAA2B,EAAA,KDYM,SAAUvB,EAAQD,EAASH,GAEjC,YASA,SAAS4B,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCEvFhH,QAASC,GAAcC,EAAMC,GAC3B,GAAIC,GAAWF,EAAKG,MAAM,uBAC1B,IAAID,GAAgC,IAApBA,EAASE,OAAc,CACrCC,OAAOC,QAAQC,IAAI,mHAInB,KAHA,GAAIC,GAAON,EAAS,GAChBO,EAAOP,EAAS,GAChBQ,EAAYT,EACTS,EAAUN,QAAQ,CACvB,GAAIO,GAAiBD,EAAUE,QAC3BC,GAAiBH,EAAUV,KAAK,kBAAoB,IAAIG,MAAM,4CAClE,IAAIU,GAAiBA,EAAc,KAAOL,EACxC,OACEM,OAAQH,EACRI,OAAQN,EAGZC,GAAYA,EAAUM,SAExB,KAAM,IAAIC,OAAM,mFAAqFT,EAAO,gBAAkBC,EAAO,MF+DzI3B,OAAOC,eAAeb,EAAS,cAC7BO,OAAO,GAGT,IAAIyC,GAAe,WAAc,QAASC,GAAiBL,EAAQM,GAAS,IAAK,GAAIhD,GAAI,EAAGA,EAAIgD,EAAMhB,OAAQhC,IAAK,CAAE,GAAIiD,GAAaD,EAAMhD,EAAIiD,GAAWpC,WAAaoC,EAAWpC,aAAc,EAAOoC,EAAWrC,cAAe,EAAU,SAAWqC,KAAYA,EAAWC,UAAW,GAAMxC,OAAOC,eAAe+B,EAAQO,EAAWE,IAAKF,IAAiB,MAAO,UAAUxB,EAAa2B,EAAYC,GAAiJ,MAA9HD,IAAYL,EAAiBtB,EAAYN,UAAWiC,GAAiBC,GAAaN,EAAiBtB,EAAa4B,GAAqB5B,ME/D1hB6B,EFyFQ,WEvFZ,QAAAA,GAAYC,EAAUC,EAAQC,EAAcC,EAAQC,EAAOC,EAAQ/B,EAASgC,GAAQtC,EAAAuC,KAAAR,GAClFQ,KAAKP,SAAWA,EAChBO,KAAKN,OAASA,EACdM,KAAKL,aAAeA,EACpBK,KAAKJ,OAASA,EAEdI,KAAKC,WAAY,EACjBD,KAAKE,UAAW,CAEhB,IAAMC,GAAgBV,EAASW,UAC/BJ,MAAKK,WAAaF,EAAcG,QAAUH,EAAgBJ,EAE1DC,KAAKO,iBACLP,KAAKQ,cAAcX,EAAMY,QAASX,EAAQ/B,GAC1CiC,KAAKU,sBAAsBb,EAAOC,GF0SpC,MA7MAd,GAAaQ,IACXH,IAAK,gBACL9C,MAAO,SE5FKoE,EAAab,EAAQ/B,GACjC,GAAK4C,IAAiBA,EAAcA,EAAYC,QAAQ,cAAe,KAAvE,CAGA,GAAIC,GAAahD,EAAc8C,EAAa5C,GACxC+C,QAEJ,KACMD,GACFf,EAAOe,EAAWhC,QAAQkC,OAAOF,EAAWjC,WAC5CkC,EAAiBhB,EAAOe,EAAWhC,QAAQgC,EAAWjC,UAGtDkB,EAAOa,GAAaI,OAAOf,KAAKK,eAChCS,EAAiBhB,EAAOa,GAAaX,KAAKK,aAG9C,MAAOW,GAIL,KAHAA,GAAMC,QAAU,kEACEN,EADF,kBAEdK,EAAMC,QACFD,EAGRE,QAAQC,OAAOL,EAAgBd,KAAKO,eACpCP,KAAKO,cAAgBO,MF4FrBzB,IAAK,wBACL9C,MAAO,SE1FasD,EAAOC,GAG3B,IAAK,GAH8BsB,GAAApB,KAE7BqB,GAAiB,SAAU,eAAgB,SAAU,UAAW,QAAS,QAAS,WAC/EnF,EAAImF,EAAcnD,OAAS,EAAGhC,GAAK,EAAGA,IAC7C8D,KAAKO,cAAcc,EAAcnF,IAAM8D,KAAKqB,EAAcnF,IAAIoF,KAAKtB,KAKrE,KAAK,GADCuB,IAAe,YAAa,aAAc,oBAAqB,kBAAmB,gBAAiB,uBAAwB,sBACxHrF,EAAIqF,EAAYrD,OAAS,EAAGhC,GAAK,EAAGA,KATV,SAS1BA,GACP,GAAIkB,UAAUU,EAAO+B,EAAM0B,EAAYrF,GACvCU,QAAOC,eAAPuE,EAA4BG,EAAYrF,IACtCc,IAAK,iBAAMI,IACXoE,IAAK,SAACjF,GACJa,EAAWb,EACX6E,EAAKb,cAAcgB,EAAYrF,IAAMK,EACjCuB,GACFgC,EAAOhC,GAAMiD,OAAOK,EAAKf,WAAY9D,OARpCL,EAeTU,QAAOC,eAAemD,KAAKO,cAAe,YACxCvD,IAAK,iBAAMoE,GAAKlB,UAChBsB,IAAK,SAACjF,GAAD,OAAc6E,EAAKlB,SAAW3D,GAAgC,KAAtB6E,EAAKzB,qBF4GpDN,IAAK,UACL9C,MAAO,SEzGDA,GACNyD,KAAA,UAAoBzD,KF4GpB8C,IAAK,QACL9C,MAAO,WEzGP,MAAOyD,MAAKN,OAAO+B,OF6GnBpC,IAAK,QACL9C,MAAO,WE1GP,MAAOyD,MAAKN,OAAOgC,OF8GnBrC,IAAK,UACL9C,MAAO,WE3GP,OAAQyD,KAAKN,OAAOxB,UF+GpBmB,IAAK,eACL9C,MAAO,SE7GIoF,EAAMC,GAAM,GAAAC,GAAA7B,IACvB,IAAIkB,QAAQY,WAAWH,GAErB3B,KAAKN,OAAOqC,MAAM,GAAGC,QAAQ,SAACC,GAG5BJ,EAAKK,YAAYD,EAASN,EAAKM,EAAQE,KAAMF,EAAQvD,MAAOuD,EAAQlE,gBAEjE,CAEL,GAAI4D,EAAO,GAAM,EACf,KAAM,IAAI5C,OAAM,kBAAoB4C,EAAO,wBAG7C,IAAMS,GAAQT,EAAO3B,KAAKN,OAAO2C,KAC5BD,IAAS,GAAKA,EAAQpC,KAAKN,OAAOxB,QACrC8B,KAAKkC,YAAYlC,KAAKN,OAAO0C,GAAQR,GAIzC5B,KAAKL,kBFmHLN,IAAK,SACL9C,MAAO,SEjHF+F,GACLtC,KAAKN,OAAO6C,OAAOD,GACnBtC,KAAKL,eACLK,KAAKP,SAAS+C,UACdxC,KAAKP,SAASgD,gBFoHdpD,IAAK,UACL9C,MAAO,SElHD+F,GACNtC,KAAKN,OAAOgD,QAAQJ,GACpBtC,KAAKL,eACLK,KAAKP,SAAS+C,UACdxC,KAAKP,SAASgD,gBFqHdpD,IAAK,sBACL9C,MAAO,WE9GP,IAAK,GAJDoG,GAAS,KAAMC,EAAY,EAC3BC,GAAU,EAAOC,GAAa,EAC5B5E,EAAS8B,KAAKN,OAAOxB,OAElBhC,EAAI,EAAGA,EAAIgC,EAAQhC,IAAK,CAC/B,GAAMiG,GAAOnC,KAAKN,OAAOxD,GACnB6G,EAAUZ,EAAKpE,QAAQiF,SAASC,GAEtC,IAAIN,IAAWI,EAAS,CACtB,GAAMG,GAAaf,EAAKpE,QAAQoF,aAAY,GACtCF,EAAMjD,KAAKP,SAAS2D,aAAeR,EAAYM,GAEhDL,GAAWI,EAAMjD,KAAKP,SAAS4D,kBAClCR,GAAU,EACV7C,KAAA,WAAqBmC,EAAKA,KAC1BnC,KAAA,kBAA4BmC,EAAKpE,QACjCiC,KAAA,gBAA0BmC,EAAKzD,QAG5BoE,IAAeG,GAAOjD,KAAKP,SAAS6D,oBAAuBpH,IAAMgC,EAAS,GAAK8B,KAAKuD,WACvFT,GAAa,EACb9C,KAAA,cAAwBmC,EAAKA,KAC7BnC,KAAA,qBAA+BmC,EAAKpE,QACpCiC,KAAA,mBAA6BmC,EAAKzD,OAEpCkE,GAAaM,EAKf,GAFAP,EAASI,EAELF,GAAWC,EACb,UF2HJzD,IAAK,cACL9C,MAAO,SEvHG0F,EAASK,GAAU,GAAAkB,GAAAxD,IAC7B,IAAKkB,QAAQuC,QAAQnB,GAArB,CAIA,GAAIoB,GAAY1D,KAAKN,OAAOiE,QAAQ1B,EAC/BK,GAASsB,UAAUC,KAAK,SAACC,GAAD,MAAaA,KAAY7B,EAAQE,SAC5DF,EAAQ8B,GAAK,SACG,IAAbL,GAAmBpB,EAASpE,SAC7B+D,EAAQ+B,IAAM,UAIlB1B,EAASN,QAAQ,SAAC8B,GACZA,IAAY7B,EAAQE,KACtBuB,IAGAF,EAAK9D,OAAOuE,OAAOP,EAAW,EAAGI,GAAuB,IAAdJ,UFiIzClE,IAGTxD,GAAQkI,QE7HO1E,GFiIT,SAAUvD,EAAQD,EAASH,GAEjC,YGzVe,SAASsI,GAAaC,EAAiBC,GACpD,GAAM3E,GAAS9C,OAAO0H,OAAOC,MAAMlH,UA8GnC,OA5GA6D,SAAQC,OAAOzB,GACb8E,KAAMH,EAENI,MAHqB,SAGfC,GACJhF,EAAOiF,OAAO,EAAGjF,EAAOxB,QACxBwB,EAAOgC,KAAM,EACbhC,EAAO+B,KAAM,EACb/B,EAAO2C,MAAQqC,EACfhF,EAAOkF,KAAOF,EACdhF,EAAOmF,SAAWH,EAClBhF,EAAOoF,SAAWJ,EAClBhF,EAAOqF,aAAe,KACtBrF,EAAOsF,aAAe,MAGxBzC,OAfqB,SAed0C,GACLA,EAAMjD,QAAQ,SAACG,KACXzC,EAAOkF,KACTlF,EAAOuE,OAAO,SAAU9B,KAE1BzC,EAAOoF,SAAWpF,EAAOgC,IAAMhC,EAAOkF,KAAO,EAAIM,KAAKC,IAAIzF,EAAOkF,KAAO,EAAGlF,EAAOoF,WAGpFpC,QAvBqB,SAuBbuC,GACNA,EAAMrB,UAAU5B,QAAQ,SAACG,KACrBzC,EAAO2C,MACT3C,EAAOuE,OAAO,UAAW9B,KAE3BzC,EAAOmF,SAAWnF,EAAO+B,IAAM/B,EAAOmF,SAAWnF,EAAO2C,MAAQ6C,KAAKE,IAAI1F,EAAO2C,MAAO3C,EAAOmF,WAShGZ,OArCqB,SAqCdoB,EAAWlD,EAAMmD,GACtB,GAAMrD,IACJE,KAAMA,EAGR,IAAIkD,EAAY,GAAM,EACpBpD,EAAQ8B,GAAK,SACbrE,EAAO6F,OAAOF,EAAW,EAAGpD,GACzBqD,EACD5F,EAAO2C,QAGP3C,EAAOkF,WAIT,QADA3C,EAAQ8B,GAAKsB,EACLA,GACN,IAAK,SACH3F,EAAO8F,KAAKvD,EACZ,MACF,KAAK,UACHvC,EAAO+F,QAAQxD,KAOvB0C,OAjEqB,SAiEdhD,EAAMC,GACX,GAAIV,QAAQwE,SAAS/D,GAAO,CAE1B,IAAK,GAAIzF,GAAIyF,EAAMzF,EAAI0F,EAAM1F,IAC3BkI,EAAgBuB,cAAcjG,EAAOxD,GAGvC,OAAOwD,GAAO6F,OAAO5D,EAAMC,EAAOD,GAepC,MAZAjC,GAAO6F,OAAO7F,EAAOiE,QAAQhC,GAAO,GACpB,UAAbA,EAAKqC,IACNtE,EAAO2C,QAGP3C,EAAOkF,OAELlF,EAAOxB,SACTwB,EAAO2C,MAAQ,EACf3C,EAAOkF,KAAO,GAGTR,EAAgBwB,sBAAsBjE,IAG/CkE,gBA1FqB,SA0FLC,GACd,IAAKA,EAAS5H,OACZ,MAAO,EAET,IAAI+E,GAAM8C,OAAOC,UACbC,EAASF,OAAOG,iBAQpB,OAPAJ,GAAS9D,QAAQ,SAACC,GACZA,EAAQlE,QAAQ,GAAGoI,eAErBlD,EAAMiC,KAAKE,IAAInC,EAAKhB,EAAQlE,QAAQiF,SAASC,KAC7CgD,EAASf,KAAKC,IAAIc,EAAQhE,EAAQlE,QAAQiF,SAASC,IAAMhB,EAAQlE,QAAQoF,aAAY,OAGlF+B,KAAKC,IAAI,EAAGc,EAAShD,MAKzBvD,EH6OT9C,OAAOC,eAAeb,EAAS,cAC7BO,OAAO,IAETP,EAAQkI,QG/VgBC,GHidlB,SAAUlI,EAAQD,EAASH,GAEjC,YASA,SAAS4B,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCI1dhH,QAASwI,GAAWC,EAAOC,EAAUC,EAAOnE,GACvC,cAAgBiE,GACjBA,EAAMG,WAAWF,EAAW,IAAMC,EAAQ,IAAKnE,GAEzC,WAAaiE,IACnBA,EAAMI,QAAQH,EAAUC,EAAOnE,GJ+cnCxF,OAAOC,eAAeb,EAAS,cAC7BO,OAAO,GAGT,IAAIyC,GAAe,WAAc,QAASC,GAAiBL,EAAQM,GAAS,IAAK,GAAIhD,GAAI,EAAGA,EAAIgD,EAAMhB,OAAQhC,IAAK,CAAE,GAAIiD,GAAaD,EAAMhD,EAAIiD,GAAWpC,WAAaoC,EAAWpC,aAAc,EAAOoC,EAAWrC,cAAe,EAAU,SAAWqC,KAAYA,EAAWC,UAAW,GAAMxC,OAAOC,eAAe+B,EAAQO,EAAWE,IAAKF,IAAiB,MAAO,UAAUxB,EAAa2B,EAAYC,GAAiJ,MAA9HD,IAAYL,EAAiBtB,EAAYN,UAAWiC,GAAiBC,GAAaN,EAAiBtB,EAAa4B,GAAqB5B,MI1d1hB+I,EAAiB,oBAWFC,EJ6dC,WI3dpB,QAAAA,GAAYC,EAAWC,GAAIpJ,EAAAuC,KAAA2G,GACzB3G,KAAK8G,SAAYF,EAAUG,KAAOH,EAAUG,IAAI,YAAeH,EAAU5J,IAAI,YAAc,KAC3FgD,KAAKgH,4BAAwD,IAA1B9F,QAAQ+F,QAAQC,OAAehG,QAAQ+F,QAAQE,MAAQ,EAC1FnH,KAAK6G,GAAKA,EACVT,EAAWgB,SAASC,YAAY,GAAI,IAAMX,EAAgB,iBJmiB5D,MAlEA1H,GAAa2H,IACXtH,IAAK,cACL9C,MAAO,SIheG0F,GACVA,EAAQlE,QAAQuJ,SAASZ,MJmezBrH,IAAK,cACL9C,MAAO,SIjeG0F,GACVA,EAAQlE,QAAQwJ,YAAYb,MJoe5BrH,IAAK,gBACL9C,MAAO,SIleKiL,EAAYC,GAExB,MADAA,GAAgBC,MAAMF,SJsetBnI,IAAK,gBACL9C,MAAO,SIneK0F,GAGZ,MAFAA,GAAQlE,QAAQ4G,SAChB1C,EAAQvD,MAAMiJ,iBJuedtI,IAAK,wBACL9C,MAAO,SIpeaiL,EAAYC,GAChC,IAAKzH,KAAK8G,SACR,MAAO9G,MAAK4H,cAAcJ,EAAYC,EAGxC,IAAIzH,KAAKgH,4BAA6B,CACpC,GAAMa,GAAW7H,KAAK6G,GAAGiB,OAIzB,OAFA9H,MAAK8G,SAASiB,MAAMP,EAAY,KAAMC,EAAiB,iBAAMI,GAASG,aAE9DH,EAASI,SAInB,OAAQjI,KAAK8G,SAASiB,MAAMP,EAAY,KAAMC,OJye9CpI,IAAK,wBACL9C,MAAO,SIvea0F,GACpB,IAAKjC,KAAK8G,SACR,MAAO9G,MAAK2F,cAAc1D,EAG5B,IAAIjC,KAAKgH,4BAA6B,CACpC,GAAMa,GAAW7H,KAAK6G,GAAGiB,OAMzB,OALA9H,MAAK8G,SAASoB,MAAMjG,EAAQlE,QAAS,WAEnC,MADAkE,GAAQvD,MAAMiJ,WACPE,EAASG,aAGVH,EAASI,SAGnB,OAASjI,KAAK8G,SAASoB,MAAMjG,EAAQlE,SAAUoK,KAAK,iBAAMlG,GAAQvD,MAAMiJ,kBJ6enEhB,IAGT3K,GAAQkI,QI5iBayC,GJgjBf,SAAU1K,EAAQD,EAASH,GAEjC,YAWA,SAAS4B,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCARhHhB,OAAOC,eAAeb,EAAS,cAC7BO,OAAO,GAGT,IAAI6L,GAAiB,WAAc,QAASC,GAAcC,EAAKpM,GAAK,GAAIqM,MAAeC,GAAK,EAAUC,GAAK,EAAWC,MAAKC,EAAW,KAAM,IAAK,GAAiCC,GAA7BC,EAAKP,EAAIQ,OAAOC,cAAmBP,GAAMI,EAAKC,EAAGjE,QAAQoE,QAAoBT,EAAK/C,KAAKoD,EAAGrM,QAAYL,GAAKqM,EAAKrK,SAAWhC,GAA3DsM,GAAK,IAAoE,MAAOS,GAAOR,GAAK,EAAMC,EAAKO,EAAO,QAAU,KAAWT,GAAMK,EAAW,QAAGA,EAAW,SAAO,QAAU,GAAIJ,EAAI,KAAMC,IAAQ,MAAOH,GAAQ,MAAO,UAAUD,EAAKpM,GAAK,GAAIqI,MAAMd,QAAQ6E,GAAQ,MAAOA,EAAY,IAAIQ,OAAOC,WAAYnM,QAAO0L,GAAQ,MAAOD,GAAcC,EAAKpM,EAAa,MAAM,IAAI0B,WAAU,4DAEllBoB,EAAe,WAAc,QAASC,GAAiBL,EAAQM,GAAS,IAAK,GAAIhD,GAAI,EAAGA,EAAIgD,EAAMhB,OAAQhC,IAAK,CAAE,GAAIiD,GAAaD,EAAMhD,EAAIiD,GAAWpC,WAAaoC,EAAWpC,aAAc,EAAOoC,EAAWrC,cAAe,EAAU,SAAWqC,KAAYA,EAAWC,UAAW,GAAMxC,OAAOC,eAAe+B,EAAQO,EAAWE,IAAKF,IAAiB,MAAO,UAAUxB,EAAa2B,EAAYC,GAAiJ,MAA9HD,IAAYL,EAAiBtB,EAAYN,UAAWiC,GAAiBC,GAAaN,EAAiBtB,EAAa4B,GAAqB5B,MK3jB3gBuL,EL0kBF,WACjB,QAASA,KACPzL,EAAgBuC,KAAMkJ,GAwRxB,MArRAlK,GAAakK,IACX7J,IAAK,cACL9C,MAAO,SK/kBGwB,GAgBV,QAASoL,GAASC,EAAMC,EAAW9M,GACjC,GAAI+M,GAAOF,EAAK,GADwBG,EAAAnB,GAGtCnF,KACE,YACA,cACA,cAEFuG,MACE,aACA,cACA,cAEFH,GAbsC,GAEnCI,EAFmCF,EAAA,GAE3BG,EAF2BH,EAAA,GAErBI,EAFqBJ,EAAA,EAexC,OAAIK,GAASN,GACPpI,QAAQ2I,UAAUtN,GACb+M,EAAKH,SAASC,EAAKO,GAAUvN,KAAKgN,GAAO7M,GAE1CmN,IAAQJ,GAAQA,EAAKI,GAAQJ,EAAKlC,SAAS0C,gBAAgBL,IAE/DvI,QAAQ2I,UAAUtN,KACpB+M,EAAKG,GAAUlN,GAEV+M,EAAKG,IAqChB,QAASM,GAAgBT,EAAMU,GAC7B,GAAIC,UAAMC,SAASC,SAASC,SAAiBC,SAAiBC,SAAeC,SAAMC,SAAMC,SAASC,SAASC,SAAUC,QAErH,IAAIhB,EAASN,GAGX,MAFAW,GAAO7C,SAAS0C,iBAAiBe,OAAQ,eAAgBC,MAAO,eAAed,KAG7EC,KAAMA,EACNc,QAAS,EACTC,OAAQ,EACRC,OAAQ,EAV0B,IAAAC,GAAA9C,GAoBpC0C,OACExB,EAAK6B,YACL,OACA,SAEFN,QACEvB,EAAK8B,aACL,MACA,WAEFpB,GA9BoC,EA+CtC,OA/BEC,GAhBoCiB,EAAA,GAiBpCX,EAjBoCW,EAAA,GAkBpCV,EAlBoCU,EAAA,GAgCtCZ,EAAgBe,EAAS/B,GACzBqB,EAAWW,EAAYhC,EAAMgB,EAAc,UAAYC,KAAU,EACjEK,EAAWU,EAAYhC,EAAMgB,EAAc,UAAYE,KAAU,EACjEN,EAAUoB,EAAYhC,EAAMgB,EAAc,SAAWC,EAAO,WAAa,EACzEJ,EAAUmB,EAAYhC,EAAMgB,EAAc,SAAWE,EAAO,WAAa,EACzEJ,EAAkBE,EAAc,SAAWC,GAC3CF,EAAkBC,EAAc,SAAWE,GAM3CC,EAAUa,EAAYhC,EAAMc,IAAoB,EAChDM,EAAUY,EAAYhC,EAAMe,IAAoB,GAG9CJ,KAAMA,EACNc,QAASJ,EAAWC,EACpBI,OAAQd,EAAUC,EAClBc,OAAQR,EAAUC,GAItB,QAASa,GAAejC,EAAMD,EAAWW,GACvC,GAAIM,UAAekB,SAEfC,EAAe1B,EAAgBT,EAAMD,EAEzC,OAAIoC,GAAaxB,KAAO,GAEpBA,KAAMwB,EAAaxB,KAAOwB,EAAaV,QAAUU,EAAaT,OAC9DU,MAAOD,EAAaxB,KACpB0B,UAAWF,EAAaxB,KAAOwB,EAAaR,QAC5CjB,IAIJM,EAAgBe,EAAS/B,GACzBkC,EAASlB,EAAcjB,IAEnBmC,EAAS,GAAgB,OAAXA,KAChBA,EAASlC,EAAKsC,MAAMvC,IAAc,GAIpCmC,EAASK,WAAWL,IAAW,GAG7BvB,KAAMuB,EAASC,EAAaV,QAAUU,EAAaT,OACnDU,MAAOF,EACPG,UAAWH,EAASC,EAAaV,QAAUU,EAAaT,OAASS,EAAaR,QAC9EjB,IA/JJ,GAAIsB,UAAaQ,SAAKT,SAAUzB,QAmKhC,OAjKAkC,GAAM5K,QAAQnD,QAAQV,UAAUyO,IAEhC/N,EAAQV,UAAUyO,IAAM,SAAUrP,EAAMF,GACtC,GAAI6M,GAAOpJ,KACPsJ,EAAOF,EAAK,EAChB,IAAOE,GAA0B,IAAlBA,EAAKyC,UAAoC,IAAlBzC,EAAKyC,UAAmBzC,EAAKsC,MACjE,MAAOE,GAAI1P,KAAKgN,EAAM3M,EAAMF,IAKhCqN,EAAW,SAACoC,GAAD,MAASA,IAAOA,EAAI5E,UAAY4E,EAAIC,UAAYD,EAAIE,OAASF,EAAIG,aA8BxEhO,OAAOiO,kBACTf,EAAW,SAAC/B,GAAD,MAAUnL,QAAOiO,iBAAiB9C,EAAM,OACnDgC,EAAc,SAAChC,EAAM/M,GAAP,MAAiBsP,YAAWtP,MAE1C8O,EAAW,SAAC/B,GAAD,MAAUA,GAAK+C,cAC1Bf,EAAc,SAAChC,EAAM/M,GACnB,GAAIiN,UAAMgC,SAAQc,SAAIC,SAAQX,SAC1BY,EAAY,sCAAsC3N,MAGtD,OAFgB,IAAI4N,QAAO,KAAOD,EAAY,kBAAmB,KAElDE,KAAKnQ,IAKpBqP,EAAQtC,EAAKsC,MACbpC,EAAOoC,EAAMpC,KACb8C,EAAKhD,EAAKqD,aACVJ,EAASD,GAAMA,EAAG9C,KACd8C,IACFA,EAAG9C,KAAOoC,EAAMpC,MAGlBoC,EAAMpC,KAAOjN,EACbiP,EAASI,EAAMgB,UACfhB,EAAMpC,KAAOA,EACT+C,IACFD,EAAG9C,KAAO+C,GAELf,GAlBEK,WAAWtP,KA6GjB2E,QAAQc,SACb6K,OADqB,SACdC,GACL,GAAIC,GAAUzD,EAAMpN,EAAG8Q,EAAGlO,EAAQmO,EAAK7D,CAKvC,IAJAA,EAAOpJ,KACPsJ,EAAOF,EAAK,GACZtK,EAASsK,EAAKtK,SACdiO,EAAWjO,EAAOoO,WACdH,EAAS,KAAOzD,EAClB,MAAOxK,GAAO4D,QAAQoK,EAEtB,KAAK5Q,EAAI8Q,EAAI,EAAGC,EAAMF,EAAS7O,OAAS,EAAG,GAAK+O,EAAMD,GAAKC,EAAMD,GAAKC,EAAK/Q,EAAI,GAAK+Q,IAAQD,IAAMA,EAChG,GAAID,EAAS7Q,KAAOoN,EAElB,WADApI,SAAQnD,QAAQgP,EAAS7Q,EAAI,IAAIwL,MAAMoF,EAI3C,MAAM,IAAI/N,OAAM,yBAA2BuK,EAAK6D,YAGpDtC,OAnBqB,SAmBbtO,GACN,GAAI6M,EAEJ,OADAA,GAAOpJ,KACHkB,QAAQ2I,UAAUtN,IAChB2E,QAAQwE,SAASnJ,KACnBA,GAAgB,MAEXuP,EAAI1P,KAAKgN,EAAM,SAAU7M,IAEzBgP,EAAevL,KAAK,GAAI,SAAU,SAG7CmD,YA/BqB,SA+BTiK,GACV,MAAO7B,GAAevL,KAAK,GAAI,SAAUoN,EAAS,YAAc,UAElEC,WAlCqB,SAkCVD,GACT,MAAO7B,GAAevL,KAAK,GAAI,QAASoN,EAAS,YAAc,UAMjEpK,OAzCqB,SAyCdzG,GACL,GAAI+Q,UAASC,SACTnE,EAAOpJ,KACPwN,GACFvK,IAAK,EACLuG,KAAM,GAEJF,EAAOF,EAAK,GACZqE,EAAMnE,GAAQA,EAAKoE,aAEvB,IAAIC,UAAUzP,OAAQ,CACpB,OAAcyK,KAAVpM,EACF,MAAO6M,EAGT,MAAM,IAAIrK,OAAM,2CAGlB,GAAK0O,EAcL,MAVAH,GAAUG,EAAI3D,gBAIoB,MAA9BR,EAAKsE,wBACPJ,EAAMlE,EAAKsE,yBAGbL,EAAME,EAAII,aAAeJ,EAAIK,cAG3B7K,IAAKuK,EAAIvK,KAAOsK,EAAIQ,aAAeT,EAAQU,YAAcV,EAAQW,WAAa,GAC9EzE,KAAMgE,EAAIhE,MAAQ+D,EAAIW,aAAeZ,EAAQa,aAAeb,EAAQc,YAAc,KAGtFJ,UA9EqB,SA8EXzR,GACR,MAAO4M,GAASnJ,KAAM,MAAOzD,IAE/B4R,WAjFqB,SAiFV5R,GACT,MAAO4M,GAASnJ,KAAM,OAAQzD,KAE/B,SAACA,EAAO8C,GACT,IAAKtB,EAAQV,UAAUgC,GACrB,MAAOtB,GAAQV,UAAUgC,GAAO9C,QLwmB/B2M,IAGTlN,GAAQkI,QKv2BagF,GL22Bf,SAAUjN,EAAQD,EAASH,GAEjC,YMt3Be,SAASwS,GAASjK,EAAiB1E,EAAQ3B,EAASuQ,EAAoBC,EAAYxD,GAajG,QAASyD,KACP,MAAO/O,GAAS0D,cAAgB4H,EAblC,GAAI0D,GAAa,KACbC,EAAgB,KACdjP,EAAW6O,GAAsBA,EAAmB7O,SAAW6O,EAAmB7O,SAAWyB,QAAQnD,QAAQI,QAC7GwQ,EAAYL,GAAsBA,EAAmBK,UAAYL,EAAmBK,cAAYhG,GAChGjK,EAAQ4P,GAAsBA,EAAmB5P,MAAQ4P,EAAmB5P,MAAQ6P,CAwL1F,OAtLA9O,GAASqM,KACP8C,kBAAmB,OACnBC,aAAc,OACdC,QAAW,UAOb5N,QAAQC,OAAO1B,GACbW,SADuB,WAErB,MAAO1B,IAGTqQ,sBALuB,SAKDC,GACpBP,EAAa,GAAAQ,GAAA/K,QAAY8K,GACzBN,EAAgB,GAAAO,GAAA/K,QAAY8K,GAC5BjR,EAAQ8O,OAAO4B,GACf1Q,EAAQ2J,MAAMgH,IAGhBQ,oBAZuB,WAajBP,GAAaA,IAAclP,GAC7BA,EAASqM,IAAI,SAAU3N,OAAOiO,iBAAiBuC,EAAU,IAAI9D,SAIjEsE,cAlBuB,WAmBrB,GAAIC,GAAe3P,EAAS,GAAG2P,YAE/B,QADAA,EAA+B,MAAhBA,EAAuBA,EAAe3P,EAAS,GAAG2H,SAAS0C,gBAAgBsF,cACpEV,EAAc7D,UAGtCzH,WAxBuB,WAyBrB,MAAOqL,GAAW5D,UAGpBvH,iBA5BuB,WA6BrB,MAAO7D,GAASuO,YAAcvO,EAAS0D,eAGzCE,cAhCuB,WAiCrB,MAAO5D,GAASuO,aAGlBpG,cApCuB,SAoCTyH,EAAGC,GACf,MAAOlL,GAAgBwD,cAAcyH,EAAGC,GAAWb,IAGrDc,sBAxCuB,SAwCDF,EAAGC,GACvB,MAAOlL,GAAgBmL,sBAAsBF,EAAGC,GAAWb,IAG7De,iBA5CuB,WA6CrB,OAAQ9P,EAAOgC,KAAOjC,EAAS0P,gBAAkB1P,EAAS6D,mBAAqBkL,KAGjF/L,WAhDuB,WAuDrB,IAAK,GALDgN,GAAU,EACVC,EAAgB,EAChBxM,EAAa,EACbyM,EAAmBlQ,EAAS0P,gBAAkB1P,EAAS6D,mBAAqBkL,IAEvEtS,EAAIwD,EAAOxB,OAAS,EAAGhC,GAAK,IACnCgH,EAAaxD,EAAOxD,GAAG6B,QAAQoF,aAAY,KACvCuM,EAAgBxM,EAAayM,IAFKzT,IAKtCwS,EAAckB,MAAMC,IAAInQ,EAAOxD,IAC/BwT,GAAiBxM,EACjBuM,GAGEA,GAAU,IACZ/P,EAAOgC,KAAM,EACbhC,EAAOiF,OAAOjF,EAAOxB,OAASuR,EAAS/P,EAAOxB,QAC9CwB,EAAOkF,MAAQ6K,EACfhQ,EAASqQ,mBAIbC,cAzEuB,WA0ErB,OAAQrQ,EAAO+B,KAAQhC,EAAS2D,aAAe3D,EAAS4D,gBAAkBmL,KAG5EhM,QA7EuB,WAoFrB,IAAK,GALDiN,GAAU,EACVC,EAAgB,EAChBxM,EAAa,EACbyM,EAAmBlQ,EAAS4D,gBAAkB5D,EAAS2D,aAAeoL,IAEjEtS,EAAI,EAAGA,EAAIwD,EAAOxB,SACzBgF,EAAaxD,EAAOxD,GAAG6B,QAAQoF,aAAY,KACvCuM,EAAgBxM,EAAayM,IAFAzT,IAKjCuS,EAAWmB,MAAMC,IAAInQ,EAAOxD,IAC5BwT,GAAiBxM,EACjBuM,GAGEA,GAAU,IAGZhB,EAAW5D,OAAO4D,EAAW5D,SAAW6E,GACxChQ,EAAO+B,KAAM,EACb/B,EAAOiF,OAAO,EAAG8K,GACjB/P,EAAO2C,OAASoN,IAIpBK,eAxGuB,WAyGrB,GAAKpQ,EAAOxB,OAAZ,CAKA,GAAI8R,GAAmBvB,EAAWmB,MAAMK,OAAO,SAACC,EAAM/N,GAAP,MAAgB+N,IAAQ/N,EAAKC,MAAQ1C,EAAO2C,MAAQF,EAAK0I,OAAS,IAAI,GACjHsF,EAAsBzB,EAAckB,MAAMK,OAAO,SAACC,EAAM/N,GAAP,MAAgB+N,IAAQ/N,EAAKC,OAAS1C,EAAOkF,KAAOzC,EAAK0I,OAAS,IAAI,GAGvHuF,EAAqB1Q,EAAOuQ,OAAO,SAACC,EAAM/N,GAAP,MAAgB+N,GAAO/N,EAAKpE,QAAQoF,aAAY,IAAO,GAC1FkN,GAAqBD,EAAqBJ,EAAmBG,IAAwBzQ,EAAOoF,SAAWpF,EAAOmF,SAAW,GAGzHyL,EAA2C,OAAxB5Q,EAAOqF,cAAyBrF,EAAOmF,SAAWnF,EAAOqF,aAC5EwL,EAA8C,OAAxB7Q,EAAOsF,cAAyBtF,EAAOoF,SAAWpF,EAAOsF,aAC/EwL,EAAsBF,GAAoB5Q,EAAOmF,SAAWnF,EAAOqF,cAAgBsL,EAAoB,EACvGI,EAAyBF,GAAuB7Q,EAAOsF,aAAetF,EAAOoF,UAAYuL,EAAoB,CAGjH5B,GAAW5D,OAAOmF,EAAmBQ,GACrC9B,EAAc7D,OAAOsF,EAAsBM,KAG7CC,mBAhIuB,SAgIJC,GAEjB,GAA4B,OAAxBjR,EAAOqF,cAAyBrF,EAAOmF,SAAWnF,EAAOqF,aAAc,CACzE,GAAI6L,GAAOnC,EAAW5D,SAAW8F,CACjClR,GAASuO,UAAUvO,EAASuO,YAAc4C,GAC1CA,GAAQnR,EAASuO,YACd4C,EAAO,IACRlC,EAAc7D,OAAO6D,EAAc7D,SAAW+F,GAC9CnR,EAASuO,UAAUvO,EAASuO,YAAc4C,MAKhDC,eA7IuB,SA6IRC,GACb,GAAKA,EAAQC,UAAU7S,OAAvB,CAEA,GAAM2M,GAASnL,EAAOmG,gBAAgBiL,EAAQC,WACxCC,EAAgBvC,EAAW5D,SAAWA,CACxCmG,IAAiB,EACnBvC,EAAW5D,OAAOmG,IAGlBvC,EAAW5D,OAAO,GAClBpL,EAASuO,UAAUvO,EAASuO,YAAcgD,MAI9CC,gBA3JuB,WA4JrBxC,EAAW5D,OAAO,GAClB4D,EAAWmB,MAAMsB,SAGnBC,mBAhKuB,WAiKrBzC,EAAc7D,OAAO,GACrB6D,EAAckB,MAAMsB,SAGtBE,WArKuB,SAqKZjP,GAGT,MAFAsM,GAAWmB,MAAMjL,OAAOxC,GACxBuM,EAAckB,MAAMjL,OAAOxC,GACpBzC,EAAOiF,OAAOxC,MAIlB1C,EN4rBT7C,OAAOC,eAAeb,EAAS,cAC7BO,OAAO,IAETP,EAAQkI,QM53BgBmK,CAFxB,IAAAgD,GAAAxV,EAAA,GNk4BIoT,EAEJ,SAAgCjD,GAAO,MAAOA,IAAOA,EAAI9O,WAAa8O,GAAQ9H,QAAS8H,IAFhDqF,IAwLjC,SAAUpV,EAAQD,EAASH,GAEjC,YAWA,SAAS4B,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCOjiChH,QAAS0T,KACP,GAAM5T,KAGN,OAFAA,GAAS8H,KAAK+L,MAAM7T,EAAUiQ,WAC9B/Q,OAAO4U,eAAe9T,EAAU4T,EAAMjU,WAC/BK,EAOM,QAAS+T,GAAQzC,GAC9B,GAAIxD,SAEJ,IAAGwD,EAASjD,WAAa2F,KAAKC,aAC5B,KAAM,IAAI5S,OAAM,uEAGlB,QAAQiQ,EAAS4C,QAAQC,eACvB,IAAK,KACH,KAAM,IAAI9S,OAAJ,yCAAmDiQ,EAAS4C,QAA5D,yBAA4F5C,EAAS7B,UAC7G,KAAK,KAEH3B,EADYtK,QAAQnD,QAAQ,gDACb+T,KAAK,KACpB,MACF,KAAK,KACHtG,EAAStK,QAAQnD,QAAQ,YACzB,MACF,SACEyN,EAAStK,QAAQnD,QAAQ,eAK7B,MAFAyN,GAAOoE,MAAQ,GAAI0B,GAEZ9F,EPu/BT5O,OAAOC,eAAeb,EAAS,cAC7BO,OAAO,GAGT,IAAIyC,GAAe,WAAc,QAASC,GAAiBL,EAAQM,GAAS,IAAK,GAAIhD,GAAI,EAAGA,EAAIgD,EAAMhB,OAAQhC,IAAK,CAAE,GAAIiD,GAAaD,EAAMhD,EAAIiD,GAAWpC,WAAaoC,EAAWpC,aAAc,EAAOoC,EAAWrC,cAAe,EAAU,SAAWqC,KAAYA,EAAWC,UAAW,GAAMxC,OAAOC,eAAe+B,EAAQO,EAAWE,IAAKF,IAAiB,MAAO,UAAUxB,EAAa2B,EAAYC,GAAiJ,MAA9HD,IAAYL,EAAiBtB,EAAYN,UAAWiC,GAAiBC,GAAaN,EAAiBtB,EAAa4B,GAAqB5B,KAEhiB3B,GAAQkI,QOphCgBuN,CP0hCxB,IOzkCMM,GPykCW,WACf,QAASA,KACPtU,EAAgBuC,KAAM+R,GA4CxB,MAzCA/S,GAAa+S,IACX1S,IAAK,MACL9C,MAAO,SO/kCL4F,GACF,IAAK,GAAIjG,GAAI8D,KAAK9B,OAAS,EAAGhC,GAAK,EAAGA,IACpC,GAAI8D,KAAK9D,GAAGkG,QAAUD,EAAKzD,MAAMsT,OAE/B,YADAhS,KAAK9D,GAAG2O,OAAS1I,EAAKpE,QAAQoF,cAIlCnD,MAAKwF,MACHpD,MAAOD,EAAKzD,MAAMsT,OAClBnH,OAAQ1I,EAAKpE,QAAQoF,gBAEvBnD,KAAKiS,KAAK,SAACC,EAAGC,GAAJ,MAAYD,GAAE9P,MAAQ+P,EAAE/P,OAAU,EAAM8P,EAAE9P,MAAQ+P,EAAE/P,MAAS,EAAI,OPolC3E/C,IAAK,SACL9C,MAAO,SOllCF6V,GACL,IAAK,GAAIlW,GAAI8D,KAAK9B,OAAS,EAAGhC,GAAK,EAAGA,IACpC,GAAI8D,KAAK9D,GAAGkG,QAAUgQ,EAAa1T,MAAMsT,OAAQ,CAC/ChS,KAAKuF,OAAOrJ,EAAG,EACf,OAGJ,GAAwB,UAArBkW,EAAapO,IACd,IAAK,GAAI9H,GAAI8D,KAAK9B,OAAS,EAAGhC,GAAK,EAAGA,IAChC8D,KAAK9D,GAAGkG,MAAQgQ,EAAa1T,MAAMsT,QACrChS,KAAK9D,GAAGkG,WPwlCd/C,IAAK,QACL9C,MAAO,WOllCPyD,KAAK9B,OAAS,MPulCT6T,IO7kCTT,GAAMjU,UAAYT,OAAO0H,OAAOC,MAAMlH,WACtCT,OAAOyV,oBAAoBN,EAAW1U,WAAW2E,QAAQ,SAAAsQ,GAAA,MACvDhB,GAAMjU,UAAUiV,GAAcP,EAAW1U,UAAUiV,MPonC9C,CAED,SAAUrW,EAAQD,EAASH,GAEjC,YAuBA,SAAS0W,GAAuBvG,GAAO,MAAOA,IAAOA,EAAI9O,WAAa8O,GAAQ9H,QAAS8H,GQ7rCvF,GAAAwG,GAAA3W,EAAA,GR2qCI4W,EAAiBF,EAAuBC,GQ1qC5CE,EAAA7W,EAAA,GR8qCI8W,EAAoBJ,EAAuBG,GQ7qC/CE,EAAA/W,EAAA,GRirCIgX,EAAWN,EAAuBK,GQhrCtCE,EAAAjX,EAAA,GRorCIkX,EAAaR,EAAuBO,GQnrCxCE,EAAAnX,EAAA,GRurCIoX,EAAYV,EAAuBS,EQrrCvC9R,SAAQjF,OAAO,gBAEZiX,QAAQ,eAAgB,iBAAM,IAAAT,GAAAvO,UAC9BiP,KAAK,eAAgB,SAACC,GAAD,MACnBjV,QAAOkV,OAAqD,KAA5CD,EAAaE,YAAYpS,QAAQnD,YAGnDwV,UAAU,mBAAoB,WAC7B,OACEC,SAAU,IACVC,YACE,SACA,WACA,SAAU/U,EAAOX,GAAS,GAAAqD,GAAApB,IAWxB,OAVAA,MAAK2O,UAAY5Q,EACjBiC,KAAKP,SAAW1B,EAChBiC,KAAKtB,MAAQA,EAEbwC,QAAQc,QAAQjE,EAAQgP,WAAa,SAAA2G,GACC,UAAhCA,EAAM9B,QAAQC,gBAChBzQ,EAAK3B,SAAWyB,QAAQnD,QAAQ2V,MAI7B1T,UAMduT,UAAU,YACT,OACA,YACA,aACA,WACA,KACA,SACA,SAAUnV,EAASwI,EAAW2H,EAAYoF,EAAU9M,EAAI/G,GAWtD,QAAS8T,GAAK7T,EAAQhC,EAAS8B,EAAOgU,EAAaC,GAMjD,QAASC,GAAiBxX,EAAOyX,GAC/B,GAAIxI,GAAS1L,EAAOvD,GAAOwD,EAC3B,OAAOkU,OAAMzI,GAAUwI,EAAexI,EAqCxC,QAAS0I,KACJC,EAAiBjW,SAClBgD,QAAQc,QAAQmS,EAAkB,SAACC,GAAD,MAAaA,OAC/CD,MAGJ,QAASE,GAAuBC,EAAYC,GAC1C,GAAI7X,SAED4X,GAAWhX,eAAeiX,KAAc7U,EAAOxB,SAChDxB,EAAS4X,EAAWC,SACbD,GAAWC,GAClBJ,EAAiB3O,KAAK,iBAAM8O,GAAWC,GAAY7X,KAIvD,QAAS8X,GAAoBF,EAAYC,EAAUE,GACjD,GAAItV,GAAavC,OAAO8X,yBAAyBJ,EAAYC,EAC7D,KAAIpV,IAAeA,EAAWqC,MAAOrC,EAAWnC,IAAhD,CAGA,GAAIN,SACJ2X,GAAuBC,EAAYC,GACnC3X,OAAOC,eAAeyX,EAAYC,GAChC/S,IAAK,SAACjF,GACJG,EAASH,EACTmD,EAAO+U,GAAgBlY,CACvB,IAAIoU,GAAsBlR,EAAS2D,YACnC3D,GAASqQ,iBACQ,aAAbyE,GACF9U,EAASiR,mBAAmBC,IAGhC3T,IAAK,iBAAMN,OAyDf,QAASiY,GAAUC,GACjB,MAAQA,IAAOA,IAAQC,GAAc9U,EAAO+U,YAG9C,QAASC,KACPtV,EAAS6B,KAAK,SAAU0T,GACxBvV,EAAS6B,KAAK,SAAU0T,GAG1B,QAASC,KACPxV,EAASyV,OAAO,SAAUF,GAC1BvV,EAASyV,OAAO,SAAUF,GAG5B,QAASpV,KACPH,EAASwR,kBACTxR,EAAS0R,qBACLxD,UAAUzP,SACZwG,EAAaiJ,UAAU,IAEzBjO,EAAO+E,MAAMC,GACb/E,IAGF,QAASwV,GAAiBlT,GACxB,MAAOA,GAAQlE,QAAQ8M,UAAY5I,EAAQlE,QAAQ,GAAGoI,aAGxD,QAASiP,GAAkBnT,GACrBkT,EAAiBlT,KACnBvC,EAAOsC,QAAQ,SAACG,GACVjB,QAAQY,WAAWK,EAAKkT,+BAC1BlT,EAAKkT,oCACElT,GAAKkT,+BAGXC,EAAQpX,QACXyV,EAAS,iBAAMhU,QAKrB,QAAS4V,GAAqBtT,EAASuT,GACrCC,EAAcxT,EAASuT,EAAa/V,EAASmI,eACxCuN,EAAiBlT,KACpBA,EAAQoT,4BAA8BpT,EAAQvD,MAAMgX,OAAO,iBAAMN,GAAkBnT,MAErFmC,EAAgBuR,YAAY1T,GAG9B,QAASwT,GAAcxT,EAASuT,EAAa5N,GAC3C,GAAIgO,GAAW,KACXtG,EAAWkG,EAAc,EAAK9V,EAAO8V,EAAc,GAAGzX,YAAU4K,EAQpE,IAPAmL,EAAO,SAAC+B,EAAOnX,GACbkX,EAAWhO,EAAciO,EAAOvG,GAChCrN,EAAQlE,QAAU8X,EAClB5T,EAAQvD,MAAQA,EAChBA,EAAMoX,GAAY7T,EAAQE,OAGxB1B,EAAQsV,UAAW,CACrB,GAAIC,GAAgB/T,EAAQvD,MAAMuX,qBAC9BD,IAAiBA,EAAcE,QACjCzV,EAAQsV,UAAU9T,EAAQvD,MAAOuD,EAAQlE,SAEzCkE,EAAQvD,MAAMuX,uBACZE,OAAQ,iBAAM1V,GAAQsV,UAAU9T,EAAQvD,MAAOuD,EAAQlE,UACvDW,MAAOuD,EAAQvD,OAIrB,MAAOkX,GAGT,QAASQ,KACP,GAAIR,MACES,KACAC,KACAC,IAgCN,OA9BA7W,GAAOsC,QAAQ,SAACC,EAAS/F,GACvB,OAAQ+F,EAAQ8B,IACd,IAAK,UACHsS,EAAc5Q,QAAQxD,EACtB,MACF,KAAK,SACHsT,EAAqBtT,EAAS/F,GAC9B+F,EAAQ8B,GAAK,OACbwS,EAAS/Q,KAAKvD,EACd,MACF,KAAK,SACH2T,EAAWA,EAASY,OAAOf,EAAcxT,EAAS/F,EAAGuD,EAAS8P,wBAC9DtN,EAAQ8B,GAAK,OACbwS,EAAS/Q,KAAKvD,EACd,MACF,KAAK,SACHqU,EAAY9Q,KAAKvD,MAIvBqU,EAAYtU,QAAQ,SAACC,GAAD,MAAa2T,GAAWA,EAASY,OAAO/W,EAAS2R,WAAWnP,MAE5EoU,EAAcnY,QAChBmY,EAAcrU,QAAQ,SAACC,GACrBsT,EAAqBtT,GACrBA,EAAQ8B,GAAK,SAGjBrE,EAAOsC,QAAQ,SAACG,EAAMjG,GAAP,MAAaiG,GAAKzD,MAAMsT,OAAStS,EAAO2C,MAAQnG,KAG7D6U,UAAWsF,EACXI,QAASH,EACTC,SAAUA,EACVG,SAAUd,GAKd,QAASe,GAAe/B,EAAK9D,GAEvBA,EAAQ4F,SAASxY,OACnB2I,EAAG+P,IAAI9F,EAAQ4F,UAAUvO,KAAK,WAC5B1I,EAASqQ,iBACTnQ,EAAaiV,KAGfnV,EAASqQ,iBAIb,QAAS+G,GAAajC,EAAK9D,GACrBrR,EAAS+P,qBACNsB,GAAWpR,EAAOmG,gBAAgBiL,EAAQyF,UAAY,IAE9B,IAAvBjB,EAAQ9P,MAAK,KACf/E,EAAQqW,SAAQ,GAChBC,EAAMnC,IAGDnV,EAASsQ,mBACZe,GAAWpR,EAAOmG,gBAAgBiL,EAAQC,WAAa,GAAMuE,EAAQ,KAI7C,IAAxBA,EAAQ9P,MAAK,KACf/E,EAAQqW,SAAQ,GAChBC,EAAMnC,IAMd,QAASoC,KACP,GAAMlG,GAAUsF,GAOhB,QAJCrW,EAAOkX,SAAWlX,EAAOmX,UAE1BpG,EAAQyF,SAASvU,QAAQ,SAAAmV,GAAA,MAAK/S,GAAgBgT,YAAYD,KAC1DrG,EAAQC,UAAU/O,QAAQ,SAAAmV,GAAA,MAAK/S,GAAgBgT,YAAYD,KACpDrG,EAGT,QAASnR,GAAaiV,GACfA,IACHU,KACAV,IAAQC,EAGV,IAAM/D,GAAUkG,GAEZrC,GAAUC,KAId+B,EAAe/B,EAAK9D,GACpB+F,EAAajC,GAERU,EAAQpX,QACXuC,EAAQ4W,uBAIZ,QAASC,GAAuB1C,GAC9B,GAAM9D,GAAUkG,GAEhBvX,GAASoR,eAAeC,GAEpB6D,EAAUC,KAId+B,EAAe/B,EAAK9D,GACpBoD,IACA2C,EAAajC,EAAK9D,GAClBwE,EAAQiC,QAEJjC,EAAQpX,OACV6Y,EAAMnC,IAENnU,EAAQqW,SAAQ,GAChB/B,IACAtU,EAAQ4W,wBAIZ,QAASN,GAAMnC,GACTU,EAAQ,GACN5V,EAAOxB,SAAWuB,EAAS+P,mBAC7B8H,EAAuB1C,GAEvB4C,EAAU,SAAChM,GACLmJ,EAAUC,KAIVpJ,EAAOtN,OAASmG,IAClB3E,EAAOgC,KAAM,GAGX8J,EAAOtN,OAAS,IAClBuB,EAAS+C,UACT9C,EAAO6C,OAAOiJ,IAGhB8L,EAAuB1C,MAIvBlV,EAAOxB,SAAWuB,EAASsQ,gBAC7BuH,EAAuB1C,GAEvB6C,EAAc,SAACjM,GACTmJ,EAAUC,KAIVpJ,EAAOtN,OAASmG,IAClB3E,EAAO+B,KAAM,GAIX+J,EAAOtN,OAAS,IACdwB,EAAOxB,QACTuB,EAASgD,aAEX/C,EAAOgD,QAAQ8I,IAGjB8L,EAAuB1C,MAM/B,QAASI,KACFzG,EAAW0I,SAAYxW,EAAQR,WAAcQ,EAAQP,WAExD2W,EAAahC,GAETS,EAAQpX,OACV+W,KAEAxU,EAAQ4W,uBACPtX,EAAOkX,SAAWlX,EAAOmX,YAKhC,QAASQ,GAAaC,GACpB,IAAKlX,EAAQP,SAAU,CACrB,GAAI8N,GAAYvO,EAAS,GAAGuO,UACxB4J,EAAOnY,EAAS,GAAG2P,aAAe3P,EAAS,GAAGoY,cAE/B,IAAd7J,IAAoBtO,EAAO+B,KAASuM,IAAc4J,IAASlY,EAAOgC,MACrEiW,EAAMG,kBA1ZZ,GAAM7Z,GAAQ4B,EAAMkY,SAAS9Z,MAAM,sCACnC,KAAKA,EACH,KAAM,IAAIc,OAAM,kEAAuEc,EAAMkY,SAAW,IAQ1G,IAKIzD,GAAa,KACXwB,EAAW7X,EAAM,GACjB+Z,EAAiB/Z,EAAM,GACvBqQ,EAAqBuF,EAAY,GACjCxP,EAAaa,KAAKC,IATL,EASqB4O,EAAiBlU,EAAMwE,WARxC,KASjB0G,EAAU7F,KAAKC,IARD,GAQkB4O,EAAiBlU,EAAMkL,QAPrC,KAQpBrG,EAAaqP,EAAiBlU,EAAM6E,WAAY,GAChDmQ,EAAY,EACZS,KAEAlR,EAAkB,GAAAuO,GAAAzO,QAAoB0C,EAAWC,GACjDnH,EAAS,GAAAmT,GAAA3O,QAAiBE,EAAiBC,GAC3C5E,EAAW,GAAAsT,GAAA7O,QAAaE,EAAiB1E,EAAQ3B,EAASuQ,EAAoBC,EAAYxD,GAC1FtK,EAAU,GAAAwS,GAAA/O,QAAYzE,EAAUC,EAAQC,EAAcC,EAAQC,EAAOC,EAAQ/B,EAASgC,EAEtFuO,KACFA,EAAmB7N,QAAUA,EAG/B,IAAIwX,GAAoB,iBAAM/W,SAAQgX,SAAS5D,IAAepT,QAAQY,WAAWwS,EAAWtX,KAE5F,IADAsX,EAAaxU,EAAOkY,GAAgBjY,IAC/BkY,MACH3D,EAAa1N,EAAU5J,IAAIgb,IACtBC,KACH,KAAM,IAAIlZ,OAAMiZ,EAAiB,6BAIrC,IAAI7D,KAsCJK,GAAoBF,EAAY,WAAY,gBAC5CE,EAAoBF,EAAY,WAAY,eAE5C,IAAMkD,GAAuC,IAA1BlD,EAAWtX,IAAIkB,OAChC,SAACia,GAAD,MAAa7D,GAAWtX,IAAI0C,EAAOkF,KAAMP,EAAY8T,IACrD,SAACA,GACC7D,EAAWtX,KACToF,MAAO1C,EAAOkF,KACdrC,OAAQ7C,EAAOxB,OAASwB,EAAOA,EAAOxB,OAAS,GAAGiE,SAAO,GACzDiW,MAAO/T,GACN8T,IAGDV,EAA2C,IAA1BnD,EAAWtX,IAAIkB,OACpC,SAACia,GAAD,MAAa7D,GAAWtX,IAAI0C,EAAO2C,MAAQgC,EAAYA,EAAY8T,IACnE,SAACA,GACC7D,EAAWtX,KACToF,MAAO1C,EAAO2C,MAAQgC,EACtB3B,QAAShD,EAAOxB,OAASwB,EAAO,GAAGyC,SAAO,GAC1CiW,MAAO/T,GACN8T,GAUPrE,GAAO,SAAC+B,EAAOnX,GACbe,EAASsP,sBAAsB8G,EAAM,IAIrCnX,EAAMiJ,WACNkO,EAAMlR,WAGR5E,EAAOsY,IAAI,WAAY,WACrBpD,IACAxV,EAASyV,OAAO,aAAcwC,KAGhCjY,EAAS6B,KAAK,aAAcoW,GAE5B/D,EAAS,WACPlU,EAASyP,sBACTtP,MA3IJ,OACE0Y,SAAU,sBACV9E,SAAU,IACV+E,WAAY,UACZC,SAAU,IACVC,UAAU,EACV7E,KAAMA","file":"ui-scroll.min.js","sourcesContent":["/*!\r\n * angular-ui-scroll (uncompressed)\r\n * https://github.com/angular-ui/ui-scroll\r\n * Version: 1.7.0-rc.2 -- 2017-10-25T00:12:31.816Z\r\n * License: MIT\r\n */\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 7);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getCtrlOnData(attr, element) {\n var onSyntax = attr.match(/^(.+)(\\s+on\\s+)(.+)?/);\n if (onSyntax && onSyntax.length === 4) {\n window.console.log('Angular ui-scroll adapter assignment warning. \"Controller On\" syntax has been deprecated since ui-scroll v1.6.1.');\n var ctrl = onSyntax[3];\n var tail = onSyntax[1];\n var candidate = element;\n while (candidate.length) {\n var candidateScope = candidate.scope(); // doesn't work when debugInfoEnabled flag = true\n var candidateName = (candidate.attr('ng-controller') || '').match(/(\\w(?:\\w|\\d)*)(?:\\s+as\\s+(\\w(?:\\w|\\d)*))?/);\n if (candidateName && candidateName[1] === ctrl) {\n return {\n target: candidateScope,\n source: tail\n };\n }\n candidate = candidate.parent();\n }\n throw new Error('Angular ui-scroll adapter assignment error. Failed to locate target controller \"' + ctrl + '\" to inject \"' + tail + '\"');\n }\n}\n\nvar Adapter = function () {\n function Adapter(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope) {\n _classCallCheck(this, Adapter);\n\n this.viewport = viewport;\n this.buffer = buffer;\n this.adjustBuffer = adjustBuffer;\n this.reload = reload;\n\n this.isLoading = false;\n this.disabled = false;\n\n var viewportScope = viewport.getScope();\n this.startScope = viewportScope.$parent ? viewportScope : $scope;\n\n this.publicContext = {};\n this.assignAdapter($attr.adapter, $parse, element);\n this.generatePublicContext($attr, $parse);\n }\n\n _createClass(Adapter, [{\n key: 'assignAdapter',\n value: function assignAdapter(adapterAttr, $parse, element) {\n if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\\s+|\\s+$/gm, ''))) {\n return;\n }\n var ctrlOnData = getCtrlOnData(adapterAttr, element);\n var adapterOnScope = void 0;\n\n try {\n if (ctrlOnData) {\n // \"Controller On\", deprecated since v1.6.1\n $parse(ctrlOnData.source).assign(ctrlOnData.target, {});\n adapterOnScope = $parse(ctrlOnData.source)(ctrlOnData.target);\n } else {\n $parse(adapterAttr).assign(this.startScope, {});\n adapterOnScope = $parse(adapterAttr)(this.startScope);\n }\n } catch (error) {\n error.message = 'Angular ui-scroll Adapter assignment exception.\\n' + ('Can\\'t parse \"' + adapterAttr + '\" expression.\\n') + error.message;\n throw error;\n }\n\n angular.extend(adapterOnScope, this.publicContext);\n this.publicContext = adapterOnScope;\n }\n }, {\n key: 'generatePublicContext',\n value: function generatePublicContext($attr, $parse) {\n var _this = this;\n\n // these methods will be accessible out of ui-scroll via user defined adapter\n var publicMethods = ['reload', 'applyUpdates', 'append', 'prepend', 'isBOF', 'isEOF', 'isEmpty'];\n for (var i = publicMethods.length - 1; i >= 0; i--) {\n this.publicContext[publicMethods[i]] = this[publicMethods[i]].bind(this);\n }\n\n // these read-only props will be accessible out of ui-scroll via user defined adapter\n var publicProps = ['isLoading', 'topVisible', 'topVisibleElement', 'topVisibleScope', 'bottomVisible', 'bottomVisibleElement', 'bottomVisibleScope'];\n\n var _loop = function _loop(_i) {\n var property = void 0,\n attr = $attr[publicProps[_i]];\n Object.defineProperty(_this, publicProps[_i], {\n get: function get() {\n return property;\n },\n set: function set(value) {\n property = value;\n _this.publicContext[publicProps[_i]] = value;\n if (attr) {\n $parse(attr).assign(_this.startScope, value);\n }\n }\n });\n };\n\n for (var _i = publicProps.length - 1; _i >= 0; _i--) {\n _loop(_i);\n }\n\n // non-read-only public property\n Object.defineProperty(this.publicContext, 'disabled', {\n get: function get() {\n return _this.disabled;\n },\n set: function set(value) {\n return !(_this.disabled = value) ? _this.adjustBuffer() : null;\n }\n });\n }\n }, {\n key: 'loading',\n value: function loading(value) {\n this['isLoading'] = value;\n }\n }, {\n key: 'isBOF',\n value: function isBOF() {\n return this.buffer.bof;\n }\n }, {\n key: 'isEOF',\n value: function isEOF() {\n return this.buffer.eof;\n }\n }, {\n key: 'isEmpty',\n value: function isEmpty() {\n return !this.buffer.length;\n }\n }, {\n key: 'applyUpdates',\n value: function applyUpdates(arg1, arg2) {\n var _this2 = this;\n\n if (angular.isFunction(arg1)) {\n // arg1 is the updater function, arg2 is ignored\n this.buffer.slice(0).forEach(function (wrapper) {\n // we need to do it on the buffer clone, because buffer content\n // may change as we iterate through\n _this2.applyUpdate(wrapper, arg1(wrapper.item, wrapper.scope, wrapper.element));\n });\n } else {\n // arg1 is item index, arg2 is the newItems array\n if (arg1 % 1 !== 0) {\n // checking if it is an integer\n throw new Error('applyUpdates - ' + arg1 + ' is not a valid index');\n }\n\n var index = arg1 - this.buffer.first;\n if (index >= 0 && index < this.buffer.length) {\n this.applyUpdate(this.buffer[index], arg2);\n }\n }\n\n this.adjustBuffer();\n }\n }, {\n key: 'append',\n value: function append(newItems) {\n this.buffer.append(newItems);\n this.adjustBuffer();\n this.viewport.clipTop();\n this.viewport.clipBottom();\n }\n }, {\n key: 'prepend',\n value: function prepend(newItems) {\n this.buffer.prepend(newItems);\n this.adjustBuffer();\n this.viewport.clipTop();\n this.viewport.clipBottom();\n }\n }, {\n key: 'calculateProperties',\n value: function calculateProperties() {\n var rowTop = null,\n topHeight = 0;\n var topDone = false,\n bottomDone = false;\n var length = this.buffer.length;\n\n for (var i = 0; i < length; i++) {\n var item = this.buffer[i];\n var itemTop = item.element.offset().top;\n\n if (rowTop !== itemTop) {\n // a new row condition\n var itemHeight = item.element.outerHeight(true);\n var top = this.viewport.topDataPos() + topHeight + itemHeight;\n\n if (!topDone && top > this.viewport.topVisiblePos()) {\n topDone = true;\n this['topVisible'] = item.item;\n this['topVisibleElement'] = item.element;\n this['topVisibleScope'] = item.scope;\n }\n\n if (!bottomDone && (top >= this.viewport.bottomVisiblePos() || i === length - 1 && this.isEOF())) {\n bottomDone = true;\n this['bottomVisible'] = item.item;\n this['bottomVisibleElement'] = item.element;\n this['bottomVisibleScope'] = item.scope;\n }\n topHeight += itemHeight;\n }\n\n rowTop = itemTop;\n\n if (topDone && bottomDone) {\n break;\n }\n }\n }\n }, {\n key: 'applyUpdate',\n value: function applyUpdate(wrapper, newItems) {\n var _this3 = this;\n\n if (!angular.isArray(newItems)) {\n return;\n }\n\n var position = this.buffer.indexOf(wrapper);\n if (!newItems.reverse().some(function (newItem) {\n return newItem === wrapper.item;\n })) {\n wrapper.op = 'remove';\n if (position === 0 && !newItems.length) {\n wrapper._op = 'isTop'; // to catch \"first\" edge case on remove\n }\n }\n\n newItems.forEach(function (newItem) {\n if (newItem === wrapper.item) {\n position--;\n } else {\n // 3 parameter (isTop) is to catch \"first\" edge case on insert\n _this3.buffer.insert(position + 1, newItem, position === -1);\n }\n });\n }\n }]);\n\n return Adapter;\n}();\n\nexports.default = Adapter;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = ScrollBuffer;\nfunction ScrollBuffer(elementRoutines, bufferSize) {\n var buffer = Object.create(Array.prototype);\n\n angular.extend(buffer, {\n size: bufferSize,\n\n reset: function reset(startIndex) {\n buffer.remove(0, buffer.length);\n buffer.eof = false;\n buffer.bof = false;\n buffer.first = startIndex;\n buffer.next = startIndex;\n buffer.minIndex = startIndex;\n buffer.maxIndex = startIndex;\n buffer.minIndexUser = null;\n buffer.maxIndexUser = null;\n },\n append: function append(items) {\n items.forEach(function (item) {\n ++buffer.next;\n buffer.insert('append', item);\n });\n buffer.maxIndex = buffer.eof ? buffer.next - 1 : Math.max(buffer.next - 1, buffer.maxIndex);\n },\n prepend: function prepend(items) {\n items.reverse().forEach(function (item) {\n --buffer.first;\n buffer.insert('prepend', item);\n });\n buffer.minIndex = buffer.bof ? buffer.minIndex = buffer.first : Math.min(buffer.first, buffer.minIndex);\n },\n\n\n /**\r\n * inserts wrapped element in the buffer\r\n * the first argument is either operation keyword (see below) or a number for operation 'insert'\r\n * for insert the number is the index for the buffer element the new one have to be inserted after\r\n * operations: 'append', 'prepend', 'insert', 'remove', 'update', 'none'\r\n */\n insert: function insert(operation, item, isTop) {\n var wrapper = {\n item: item\n };\n\n if (operation % 1 === 0) {\n // it is an insert\n wrapper.op = 'insert';\n buffer.splice(operation, 0, wrapper);\n if (isTop) {\n buffer.first--;\n } else {\n buffer.next++;\n }\n } else {\n wrapper.op = operation;\n switch (operation) {\n case 'append':\n buffer.push(wrapper);\n break;\n case 'prepend':\n buffer.unshift(wrapper);\n break;\n }\n }\n },\n\n\n // removes elements from buffer\n remove: function remove(arg1, arg2) {\n if (angular.isNumber(arg1)) {\n // removes items from arg1 (including) through arg2 (excluding)\n for (var i = arg1; i < arg2; i++) {\n elementRoutines.removeElement(buffer[i]);\n }\n\n return buffer.splice(arg1, arg2 - arg1);\n }\n // removes single item(wrapper) from the buffer\n buffer.splice(buffer.indexOf(arg1), 1);\n if (arg1._op === 'isTop') {\n buffer.first++;\n } else {\n buffer.next--;\n }\n if (!buffer.length) {\n buffer.first = 1;\n buffer.next = 1;\n }\n\n return elementRoutines.removeElementAnimated(arg1);\n },\n effectiveHeight: function effectiveHeight(elements) {\n if (!elements.length) {\n return 0;\n }\n var top = Number.MAX_VALUE;\n var bottom = Number.NEGATIVE_INFINITY;\n elements.forEach(function (wrapper) {\n if (wrapper.element[0].offsetParent) {\n // element style is not display:none\n top = Math.min(top, wrapper.element.offset().top);\n bottom = Math.max(bottom, wrapper.element.offset().top + wrapper.element.outerHeight(true));\n }\n });\n return Math.max(0, bottom - top);\n }\n });\n\n return buffer;\n}\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar hideClassToken = 'ng-ui-scroll-hide';\n\nfunction addCSSRule(sheet, selector, rules, index) {\n if ('insertRule' in sheet) {\n sheet.insertRule(selector + '{' + rules + '}', index);\n } else if ('addRule' in sheet) {\n sheet.addRule(selector, rules, index);\n }\n}\n\nvar ElementRoutines = function () {\n function ElementRoutines($injector, $q) {\n _classCallCheck(this, ElementRoutines);\n\n this.$animate = $injector.has && $injector.has('$animate') ? $injector.get('$animate') : null;\n this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3;\n this.$q = $q;\n addCSSRule(document.styleSheets[0], '.' + hideClassToken, 'display: none');\n }\n\n _createClass(ElementRoutines, [{\n key: 'hideElement',\n value: function hideElement(wrapper) {\n wrapper.element.addClass(hideClassToken);\n }\n }, {\n key: 'showElement',\n value: function showElement(wrapper) {\n wrapper.element.removeClass(hideClassToken);\n }\n }, {\n key: 'insertElement',\n value: function insertElement(newElement, previousElement) {\n previousElement.after(newElement);\n return [];\n }\n }, {\n key: 'removeElement',\n value: function removeElement(wrapper) {\n wrapper.element.remove();\n wrapper.scope.$destroy();\n return [];\n }\n }, {\n key: 'insertElementAnimated',\n value: function insertElementAnimated(newElement, previousElement) {\n if (!this.$animate) {\n return this.insertElement(newElement, previousElement);\n }\n\n if (this.isAngularVersionLessThen1_3) {\n var deferred = this.$q.defer();\n // no need for parent - previous element is never null\n this.$animate.enter(newElement, null, previousElement, function () {\n return deferred.resolve();\n });\n\n return [deferred.promise];\n }\n\n // no need for parent - previous element is never null\n return [this.$animate.enter(newElement, null, previousElement)];\n }\n }, {\n key: 'removeElementAnimated',\n value: function removeElementAnimated(wrapper) {\n if (!this.$animate) {\n return this.removeElement(wrapper);\n }\n\n if (this.isAngularVersionLessThen1_3) {\n var deferred = this.$q.defer();\n this.$animate.leave(wrapper.element, function () {\n wrapper.scope.$destroy();\n return deferred.resolve();\n });\n\n return [deferred.promise];\n }\n\n return [this.$animate.leave(wrapper.element).then(function () {\n return wrapper.scope.$destroy();\n })];\n }\n }]);\n\n return ElementRoutines;\n}();\n\nexports.default = ElementRoutines;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*!\r\n globals: angular, window\r\n List of used element methods available in JQuery but not in JQuery Lite\r\n element.before(elem)\r\n element.height()\r\n element.outerHeight(true)\r\n element.height(value) = only for Top/Bottom padding elements\r\n element.scrollTop()\r\n element.scrollTop(value)\r\n */\n\nvar JQLiteExtras = function () {\n function JQLiteExtras() {\n _classCallCheck(this, JQLiteExtras);\n }\n\n _createClass(JQLiteExtras, [{\n key: 'registerFor',\n value: function registerFor(element) {\n var convertToPx = void 0,\n css = void 0,\n getStyle = void 0,\n isWindow = void 0;\n // angular implementation blows up if elem is the window\n css = angular.element.prototype.css;\n\n element.prototype.css = function (name, value) {\n var self = this;\n var elem = self[0];\n if (!(!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style)) {\n return css.call(self, name, value);\n }\n };\n\n // as defined in angularjs v1.0.5\n isWindow = function isWindow(obj) {\n return obj && obj.document && obj.location && obj.alert && obj.setInterval;\n };\n\n function scrollTo(self, direction, value) {\n var elem = self[0];\n\n var _top$left$direction = _slicedToArray({\n top: ['scrollTop', 'pageYOffset', 'scrollLeft'],\n left: ['scrollLeft', 'pageXOffset', 'scrollTop']\n }[direction], 3),\n method = _top$left$direction[0],\n prop = _top$left$direction[1],\n preserve = _top$left$direction[2];\n\n if (isWindow(elem)) {\n if (angular.isDefined(value)) {\n return elem.scrollTo(self[preserve].call(self), value);\n }\n return prop in elem ? elem[prop] : elem.document.documentElement[method];\n } else {\n if (angular.isDefined(value)) {\n elem[method] = value;\n }\n return elem[method];\n }\n }\n\n if (window.getComputedStyle) {\n getStyle = function getStyle(elem) {\n return window.getComputedStyle(elem, null);\n };\n convertToPx = function convertToPx(elem, value) {\n return parseFloat(value);\n };\n } else {\n getStyle = function getStyle(elem) {\n return elem.currentStyle;\n };\n convertToPx = function convertToPx(elem, value) {\n var left = void 0,\n result = void 0,\n rs = void 0,\n rsLeft = void 0,\n style = void 0;\n var core_pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n var rnumnonpx = new RegExp('^(' + core_pnum + ')(?!px)[a-z%]+$', 'i');\n\n if (!rnumnonpx.test(value)) {\n return parseFloat(value);\n }\n\n // ported from JQuery\n style = elem.style;\n left = style.left;\n rs = elem.runtimeStyle;\n rsLeft = rs && rs.left;\n if (rs) {\n rs.left = style.left;\n }\n // put in the new values to get a computed style out\n style.left = value;\n result = style.pixelLeft;\n style.left = left;\n if (rsLeft) {\n rs.left = rsLeft;\n }\n return result;\n };\n }\n\n function getMeasurements(elem, measure) {\n var base = void 0,\n borderA = void 0,\n borderB = void 0,\n computedMarginA = void 0,\n computedMarginB = void 0,\n computedStyle = void 0,\n dirA = void 0,\n dirB = void 0,\n marginA = void 0,\n marginB = void 0,\n paddingA = void 0,\n paddingB = void 0;\n\n if (isWindow(elem)) {\n base = document.documentElement[{ height: 'clientHeight', width: 'clientWidth' }[measure]];\n\n return {\n base: base,\n padding: 0,\n border: 0,\n margin: 0\n };\n }\n\n // Start with offset property\n\n var _width$height$measure = _slicedToArray({\n width: [elem.offsetWidth, 'Left', 'Right'],\n height: [elem.offsetHeight, 'Top', 'Bottom']\n }[measure], 3);\n\n base = _width$height$measure[0];\n dirA = _width$height$measure[1];\n dirB = _width$height$measure[2];\n\n\n computedStyle = getStyle(elem);\n paddingA = convertToPx(elem, computedStyle['padding' + dirA]) || 0;\n paddingB = convertToPx(elem, computedStyle['padding' + dirB]) || 0;\n borderA = convertToPx(elem, computedStyle['border' + dirA + 'Width']) || 0;\n borderB = convertToPx(elem, computedStyle['border' + dirB + 'Width']) || 0;\n computedMarginA = computedStyle['margin' + dirA];\n computedMarginB = computedStyle['margin' + dirB];\n\n // I do not care for width for now, so this hack is irrelevant\n // if ( !supportsPercentMargin )\n // computedMarginA = hackPercentMargin( elem, computedStyle, computedMarginA )\n // computedMarginB = hackPercentMargin( elem, computedStyle, computedMarginB )\n marginA = convertToPx(elem, computedMarginA) || 0;\n marginB = convertToPx(elem, computedMarginB) || 0;\n\n return {\n base: base,\n padding: paddingA + paddingB,\n border: borderA + borderB,\n margin: marginA + marginB\n };\n }\n\n function getWidthHeight(elem, direction, measure) {\n var computedStyle = void 0,\n result = void 0;\n\n var measurements = getMeasurements(elem, direction);\n\n if (measurements.base > 0) {\n return {\n base: measurements.base - measurements.padding - measurements.border,\n outer: measurements.base,\n outerfull: measurements.base + measurements.margin\n }[measure];\n }\n\n // Fall back to computed then uncomputed css if necessary\n computedStyle = getStyle(elem);\n result = computedStyle[direction];\n\n if (result < 0 || result === null) {\n result = elem.style[direction] || 0;\n }\n\n // Normalize \"\", auto, and prepare for extra\n result = parseFloat(result) || 0;\n\n return {\n base: result - measurements.padding - measurements.border,\n outer: result,\n outerfull: result + measurements.padding + measurements.border + measurements.margin\n }[measure];\n }\n\n // define missing methods\n return angular.forEach({\n before: function before(newElem) {\n var children, elem, i, j, parent, ref, self;\n self = this;\n elem = self[0];\n parent = self.parent();\n children = parent.contents();\n if (children[0] === elem) {\n return parent.prepend(newElem);\n } else {\n for (i = j = 1, ref = children.length - 1; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {\n if (children[i] === elem) {\n angular.element(children[i - 1]).after(newElem);\n return;\n }\n }\n throw new Error('invalid DOM structure ' + elem.outerHTML);\n }\n },\n height: function height(value) {\n var self;\n self = this;\n if (angular.isDefined(value)) {\n if (angular.isNumber(value)) {\n value = value + 'px';\n }\n return css.call(self, 'height', value);\n } else {\n return getWidthHeight(this[0], 'height', 'base');\n }\n },\n outerHeight: function outerHeight(option) {\n return getWidthHeight(this[0], 'height', option ? 'outerfull' : 'outer');\n },\n outerWidth: function outerWidth(option) {\n return getWidthHeight(this[0], 'width', option ? 'outerfull' : 'outer');\n },\n\n\n /*\r\n The offset setter method is not implemented\r\n */\n offset: function offset(value) {\n var docElem = void 0,\n win = void 0;\n var self = this;\n var box = {\n top: 0,\n left: 0\n };\n var elem = self[0];\n var doc = elem && elem.ownerDocument;\n\n if (arguments.length) {\n if (value === undefined) {\n return self;\n }\n // TODO: implement setter\n throw new Error('offset setter method is not implemented');\n }\n\n if (!doc) {\n return;\n }\n\n docElem = doc.documentElement;\n\n // TODO: Make sure it's not a disconnected DOM node\n\n if (elem.getBoundingClientRect != null) {\n box = elem.getBoundingClientRect();\n }\n\n win = doc.defaultView || doc.parentWindow;\n\n return {\n top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),\n left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0)\n };\n },\n scrollTop: function scrollTop(value) {\n return scrollTo(this, 'top', value);\n },\n scrollLeft: function scrollLeft(value) {\n return scrollTo(this, 'left', value);\n }\n }, function (value, key) {\n if (!element.prototype[key]) {\n return element.prototype[key] = value;\n }\n });\n }\n }]);\n\n return JQLiteExtras;\n}();\n\nexports.default = JQLiteExtras;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = Viewport;\n\nvar _padding = __webpack_require__(5);\n\nvar _padding2 = _interopRequireDefault(_padding);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding) {\n var topPadding = null;\n var bottomPadding = null;\n var viewport = viewportController && viewportController.viewport ? viewportController.viewport : angular.element(window);\n var container = viewportController && viewportController.container ? viewportController.container : undefined;\n var scope = viewportController && viewportController.scope ? viewportController.scope : $rootScope;\n\n viewport.css({\n 'overflow-anchor': 'none',\n 'overflow-y': 'auto',\n 'display': 'block'\n });\n\n function bufferPadding() {\n return viewport.outerHeight() * padding; // some extra space to initiate preload\n }\n\n angular.extend(viewport, {\n getScope: function getScope() {\n return scope;\n },\n createPaddingElements: function createPaddingElements(template) {\n topPadding = new _padding2.default(template);\n bottomPadding = new _padding2.default(template);\n element.before(topPadding);\n element.after(bottomPadding);\n },\n applyContainerStyle: function applyContainerStyle() {\n if (container && container !== viewport) {\n viewport.css('height', window.getComputedStyle(container[0]).height);\n }\n },\n bottomDataPos: function bottomDataPos() {\n var scrollHeight = viewport[0].scrollHeight;\n scrollHeight = scrollHeight != null ? scrollHeight : viewport[0].document.documentElement.scrollHeight;\n return scrollHeight - bottomPadding.height();\n },\n topDataPos: function topDataPos() {\n return topPadding.height();\n },\n bottomVisiblePos: function bottomVisiblePos() {\n return viewport.scrollTop() + viewport.outerHeight();\n },\n topVisiblePos: function topVisiblePos() {\n return viewport.scrollTop();\n },\n insertElement: function insertElement(e, sibling) {\n return elementRoutines.insertElement(e, sibling || topPadding);\n },\n insertElementAnimated: function insertElementAnimated(e, sibling) {\n return elementRoutines.insertElementAnimated(e, sibling || topPadding);\n },\n shouldLoadBottom: function shouldLoadBottom() {\n return !buffer.eof && viewport.bottomDataPos() < viewport.bottomVisiblePos() + bufferPadding();\n },\n clipBottom: function clipBottom() {\n // clip the invisible items off the bottom\n var overage = 0;\n var overageHeight = 0;\n var itemHeight = 0;\n var emptySpaceHeight = viewport.bottomDataPos() - viewport.bottomVisiblePos() - bufferPadding();\n\n for (var i = buffer.length - 1; i >= 0; i--) {\n itemHeight = buffer[i].element.outerHeight(true);\n if (overageHeight + itemHeight > emptySpaceHeight) {\n break;\n }\n bottomPadding.cache.add(buffer[i]);\n overageHeight += itemHeight;\n overage++;\n }\n\n if (overage > 0) {\n buffer.eof = false;\n buffer.remove(buffer.length - overage, buffer.length);\n buffer.next -= overage;\n viewport.adjustPaddings();\n }\n },\n shouldLoadTop: function shouldLoadTop() {\n return !buffer.bof && viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding();\n },\n clipTop: function clipTop() {\n // clip the invisible items off the top\n var overage = 0;\n var overageHeight = 0;\n var itemHeight = 0;\n var emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\n\n for (var i = 0; i < buffer.length; i++) {\n itemHeight = buffer[i].element.outerHeight(true);\n if (overageHeight + itemHeight > emptySpaceHeight) {\n break;\n }\n topPadding.cache.add(buffer[i]);\n overageHeight += itemHeight;\n overage++;\n }\n\n if (overage > 0) {\n // we need to adjust top padding element before items are removed from top\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\n topPadding.height(topPadding.height() + overageHeight);\n buffer.bof = false;\n buffer.remove(0, overage);\n buffer.first += overage;\n }\n },\n adjustPaddings: function adjustPaddings() {\n if (!buffer.length) {\n return;\n }\n\n // precise heights calculation, items that were in buffer once\n var topPaddingHeight = topPadding.cache.reduce(function (summ, item) {\n return summ + (item.index < buffer.first ? item.height : 0);\n }, 0);\n var bottomPaddingHeight = bottomPadding.cache.reduce(function (summ, item) {\n return summ + (item.index >= buffer.next ? item.height : 0);\n }, 0);\n\n // average item height based on buffer data\n var visibleItemsHeight = buffer.reduce(function (summ, item) {\n return summ + item.element.outerHeight(true);\n }, 0);\n var averageItemHeight = (visibleItemsHeight + topPaddingHeight + bottomPaddingHeight) / (buffer.maxIndex - buffer.minIndex + 1);\n\n // average heights calculation, items that have never been reached\n var adjustTopPadding = buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser;\n var adjustBottomPadding = buffer.maxIndexUser !== null && buffer.maxIndex < buffer.maxIndexUser;\n var topPaddingHeightAdd = adjustTopPadding ? (buffer.minIndex - buffer.minIndexUser) * averageItemHeight : 0;\n var bottomPaddingHeightAdd = adjustBottomPadding ? (buffer.maxIndexUser - buffer.maxIndex) * averageItemHeight : 0;\n\n // paddings combine adjustment\n topPadding.height(topPaddingHeight + topPaddingHeightAdd);\n bottomPadding.height(bottomPaddingHeight + bottomPaddingHeightAdd);\n },\n onAfterMinIndexSet: function onAfterMinIndexSet(topPaddingHeightOld) {\n // additional scrollTop adjustment in case of datasource.minIndex external set\n if (buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser) {\n var diff = topPadding.height() - topPaddingHeightOld;\n viewport.scrollTop(viewport.scrollTop() + diff);\n diff -= viewport.scrollTop();\n if (diff > 0) {\n bottomPadding.height(bottomPadding.height() + diff);\n viewport.scrollTop(viewport.scrollTop() + diff);\n }\n }\n },\n onAfterPrepend: function onAfterPrepend(updates) {\n if (!updates.prepended.length) return;\n var height = buffer.effectiveHeight(updates.prepended);\n var paddingHeight = topPadding.height() - height;\n if (paddingHeight >= 0) {\n topPadding.height(paddingHeight);\n } else {\n topPadding.height(0);\n viewport.scrollTop(viewport.scrollTop() - paddingHeight);\n }\n },\n resetTopPadding: function resetTopPadding() {\n topPadding.height(0);\n topPadding.cache.clear();\n },\n resetBottomPadding: function resetBottomPadding() {\n bottomPadding.height(0);\n bottomPadding.cache.clear();\n },\n removeItem: function removeItem(item) {\n topPadding.cache.remove(item);\n bottomPadding.cache.remove(item);\n return buffer.remove(item);\n }\n });\n\n return viewport;\n}\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nexports.default = Padding;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// Can't just extend the Array, due to Babel does not support built-in classes extending\n// This solution was taken from https://stackoverflow.com/questions/46897414/es6-class-extends-array-workaround-for-es5-babel-transpile\nvar CacheProto = function () {\n function CacheProto() {\n _classCallCheck(this, CacheProto);\n }\n\n _createClass(CacheProto, [{\n key: 'add',\n value: function add(item) {\n for (var i = this.length - 1; i >= 0; i--) {\n if (this[i].index === item.scope.$index) {\n this[i].height = item.element.outerHeight();\n return;\n }\n }\n this.push({\n index: item.scope.$index,\n height: item.element.outerHeight()\n });\n this.sort(function (a, b) {\n return a.index < b.index ? -1 : a.index > b.index ? 1 : 0;\n });\n }\n }, {\n key: 'remove',\n value: function remove(itemToRemove) {\n for (var i = this.length - 1; i >= 0; i--) {\n if (this[i].index === itemToRemove.scope.$index) {\n this.splice(i, 1);\n break;\n }\n }\n if (itemToRemove._op !== 'isTop') {\n for (var _i = this.length - 1; _i >= 0; _i--) {\n if (this[_i].index > itemToRemove.scope.$index) {\n this[_i].index--;\n }\n }\n }\n }\n }, {\n key: 'clear',\n value: function clear() {\n this.length = 0;\n }\n }]);\n\n return CacheProto;\n}();\n\nfunction Cache() {\n var instance = [];\n instance.push.apply(instance, arguments);\n Object.setPrototypeOf(instance, Cache.prototype);\n return instance;\n}\nCache.prototype = Object.create(Array.prototype);\nObject.getOwnPropertyNames(CacheProto.prototype).forEach(function (methodName) {\n return Cache.prototype[methodName] = CacheProto.prototype[methodName];\n});\n\nfunction Padding(template) {\n var result = void 0;\n\n if (template.nodeType !== Node.ELEMENT_NODE) {\n throw new Error('ui-scroll directive requires an Element node for templating the view');\n }\n\n switch (template.tagName.toLowerCase()) {\n case 'dl':\n throw new Error('ui-scroll directive does not support <' + template.tagName + '> as a repeating tag: ' + template.outerHTML);\n case 'tr':\n var table = angular.element('
    ');\n result = table.find('tr');\n break;\n case 'li':\n result = angular.element('
  • ');\n break;\n default:\n result = angular.element('
    ');\n }\n\n result.cache = new Cache();\n\n return result;\n}\n\n/***/ }),\n/* 6 */,\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _jqLiteExtras = __webpack_require__(3);\n\nvar _jqLiteExtras2 = _interopRequireDefault(_jqLiteExtras);\n\nvar _elementRoutines = __webpack_require__(2);\n\nvar _elementRoutines2 = _interopRequireDefault(_elementRoutines);\n\nvar _buffer = __webpack_require__(1);\n\nvar _buffer2 = _interopRequireDefault(_buffer);\n\nvar _viewport = __webpack_require__(4);\n\nvar _viewport2 = _interopRequireDefault(_viewport);\n\nvar _adapter = __webpack_require__(0);\n\nvar _adapter2 = _interopRequireDefault(_adapter);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nangular.module('ui.scroll', []).service('jqLiteExtras', function () {\n return new _jqLiteExtras2.default();\n}).run(['jqLiteExtras', function (jqLiteExtras) {\n return !window.jQuery ? jqLiteExtras.registerFor(angular.element) : null;\n}]).directive('uiScrollViewport', function () {\n return {\n restrict: 'A',\n controller: ['$scope', '$element', function (scope, element) {\n var _this = this;\n\n this.container = element;\n this.viewport = element;\n this.scope = scope;\n\n angular.forEach(element.children(), function (child) {\n if (child.tagName.toLowerCase() === 'tbody') {\n _this.viewport = angular.element(child);\n }\n });\n\n return this;\n }]\n };\n}).directive('uiScroll', ['$log', '$injector', '$rootScope', '$timeout', '$q', '$parse', 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 var match = $attr.uiScroll.match(/^\\s*(\\w+)\\s+in\\s+([(\\w|\\$)\\.]+)\\s*$/);\n if (!match) {\n throw new Error('Expected uiScroll in form of \\'_item_ in _datasource_\\' but got \\'' + $attr.uiScroll + '\\'');\n }\n\n function parseNumericAttr(value, defaultValue) {\n var result = $parse(value)($scope);\n return isNaN(result) ? defaultValue : result;\n }\n\n var BUFFER_MIN = 3;\n var BUFFER_DEFAULT = 10;\n var PADDING_MIN = 0.3;\n var PADDING_DEFAULT = 0.5;\n\n var datasource = null;\n var itemName = match[1];\n var datasourceName = match[2];\n var viewportController = controllers[0];\n var bufferSize = Math.max(BUFFER_MIN, parseNumericAttr($attr.bufferSize, BUFFER_DEFAULT));\n var padding = Math.max(PADDING_MIN, parseNumericAttr($attr.padding, PADDING_DEFAULT));\n var startIndex = parseNumericAttr($attr.startIndex, 1);\n var ridActual = 0; // current data revision id\n var pending = [];\n\n var elementRoutines = new _elementRoutines2.default($injector, $q);\n var buffer = new _buffer2.default(elementRoutines, bufferSize);\n var viewport = new _viewport2.default(elementRoutines, buffer, element, viewportController, $rootScope, padding);\n var adapter = new _adapter2.default(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope);\n\n if (viewportController) {\n viewportController.adapter = adapter;\n }\n\n var isDatasourceValid = function isDatasourceValid() {\n return angular.isObject(datasource) && angular.isFunction(datasource.get);\n };\n datasource = $parse(datasourceName)($scope); // try to get datasource on scope\n if (!isDatasourceValid()) {\n datasource = $injector.get(datasourceName); // try to inject datasource as service\n if (!isDatasourceValid()) {\n throw new Error(datasourceName + ' is not a valid datasource');\n }\n }\n\n var onRenderHandlers = [];\n function onRenderHandlersRunner() {\n if (onRenderHandlers.length) {\n angular.forEach(onRenderHandlers, function (handler) {\n return handler();\n });\n onRenderHandlers = [];\n }\n }\n function preDefineIndexProperty(datasource, propName) {\n var getter = void 0;\n // need to postpone min/maxIndexUser processing if the view is empty\n if (datasource.hasOwnProperty(propName) && !buffer.length) {\n getter = datasource[propName];\n delete datasource[propName];\n onRenderHandlers.push(function () {\n return datasource[propName] = getter;\n });\n }\n }\n\n function defineIndexProperty(datasource, propName, propUserName) {\n var descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n if (descriptor && (descriptor.set || descriptor.get)) {\n return;\n }\n var getter = void 0;\n preDefineIndexProperty(datasource, propName);\n Object.defineProperty(datasource, propName, {\n set: function set(value) {\n getter = value;\n buffer[propUserName] = value;\n var topPaddingHeightOld = viewport.topDataPos();\n viewport.adjustPaddings();\n if (propName === 'minIndex') {\n viewport.onAfterMinIndexSet(topPaddingHeightOld);\n }\n },\n get: function get() {\n return getter;\n }\n });\n }\n\n defineIndexProperty(datasource, 'minIndex', 'minIndexUser');\n defineIndexProperty(datasource, 'maxIndex', 'maxIndexUser');\n\n var fetchNext = datasource.get.length !== 2 ? function (success) {\n return datasource.get(buffer.next, bufferSize, success);\n } : function (success) {\n datasource.get({\n index: buffer.next,\n append: buffer.length ? buffer[buffer.length - 1].item : void 0,\n count: bufferSize\n }, success);\n };\n\n var fetchPrevious = datasource.get.length !== 2 ? function (success) {\n return datasource.get(buffer.first - bufferSize, bufferSize, success);\n } : function (success) {\n datasource.get({\n index: buffer.first - bufferSize,\n prepend: buffer.length ? buffer[0].item : void 0,\n count: bufferSize\n }, success);\n };\n\n /**\r\n * Build padding elements\r\n *\r\n * Calling linker is the only way I found to get access to the tag name of the template\r\n * to prevent the directive scope from pollution a new scope is created and destroyed\r\n * right after the builder creation is completed\r\n */\n linker(function (clone, scope) {\n viewport.createPaddingElements(clone[0]);\n // we do not include the clone in the DOM. It means that the nested directives will not\n // be able to reach the parent directives, but in this case it is intentional because we\n // created the clone to access the template tag name\n scope.$destroy();\n clone.remove();\n });\n\n $scope.$on('$destroy', function () {\n unbindEvents();\n viewport.unbind('mousewheel', wheelHandler);\n });\n\n viewport.bind('mousewheel', wheelHandler);\n\n $timeout(function () {\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(function (item) {\n if (angular.isFunction(item.unregisterVisibilityWatcher)) {\n item.unregisterVisibilityWatcher();\n delete item.unregisterVisibilityWatcher;\n }\n });\n if (!pending.length) {\n $timeout(function () {\n return adjustBuffer();\n });\n }\n }\n }\n\n function insertWrapperContent(wrapper, insertAfter) {\n createElement(wrapper, insertAfter, viewport.insertElement);\n if (!isElementVisible(wrapper)) {\n wrapper.unregisterVisibilityWatcher = wrapper.scope.$watch(function () {\n return visibilityWatcher(wrapper);\n });\n }\n elementRoutines.hideElement(wrapper); // hide inserted elements before data binding\n }\n\n function createElement(wrapper, insertAfter, insertElement) {\n var promises = null;\n var sibling = insertAfter > 0 ? buffer[insertAfter - 1].element : undefined;\n linker(function (clone, scope) {\n promises = insertElement(clone, sibling);\n wrapper.element = clone;\n wrapper.scope = scope;\n scope[itemName] = wrapper.item;\n });\n // ui-scroll-grid apply\n if (adapter.transform) {\n var tdInitializer = wrapper.scope.uiScrollTdInitializer;\n if (tdInitializer && tdInitializer.linking) {\n adapter.transform(wrapper.scope, wrapper.element);\n } else {\n wrapper.scope.uiScrollTdInitializer = {\n onLink: function onLink() {\n return adapter.transform(wrapper.scope, wrapper.element);\n },\n scope: wrapper.scope\n };\n }\n }\n return promises;\n }\n\n function updateDOM() {\n var promises = [];\n var toBePrepended = [];\n var toBeRemoved = [];\n var inserted = [];\n\n buffer.forEach(function (wrapper, i) {\n switch (wrapper.op) {\n case 'prepend':\n toBePrepended.unshift(wrapper);\n break;\n case 'append':\n insertWrapperContent(wrapper, i);\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'insert':\n promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated));\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'remove':\n toBeRemoved.push(wrapper);\n }\n });\n\n toBeRemoved.forEach(function (wrapper) {\n return promises = promises.concat(viewport.removeItem(wrapper));\n });\n\n if (toBePrepended.length) toBePrepended.forEach(function (wrapper) {\n insertWrapperContent(wrapper);\n wrapper.op = 'none';\n });\n\n buffer.forEach(function (item, i) {\n return item.scope.$index = buffer.first + i;\n });\n\n return {\n prepended: toBePrepended,\n removed: toBeRemoved,\n inserted: inserted,\n animated: promises\n };\n }\n\n function updatePaddings(rid, updates) {\n // schedule another adjustBuffer after animation completion\n if (updates.animated.length) {\n $q.all(updates.animated).then(function () {\n viewport.adjustPaddings();\n adjustBuffer(rid);\n });\n } else {\n viewport.adjustPaddings();\n }\n }\n\n function enqueueFetch(rid, updates) {\n if (viewport.shouldLoadBottom()) {\n if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\n // this means that at least one item appended in the last batch has height > 0\n if (pending.push(true) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n } else if (viewport.shouldLoadTop()) {\n if (!updates || buffer.effectiveHeight(updates.prepended) > 0 || pending[0]) {\n // this means that at least one item appended in the last batch has height > 0\n // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\n // BTW there will always be at least 1 element in the pending array because bottom is fetched first\n if (pending.push(false) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n }\n }\n\n function processUpdates() {\n var updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustments\n !$scope.$$phase && $scope.$digest();\n\n updates.inserted.forEach(function (w) {\n return elementRoutines.showElement(w);\n });\n updates.prepended.forEach(function (w) {\n return elementRoutines.showElement(w);\n });\n return updates;\n }\n\n function adjustBuffer(rid) {\n if (!rid) {\n // dismiss pending requests\n pending = [];\n rid = ++ridActual;\n }\n\n var updates = processUpdates();\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n enqueueFetch(rid);\n\n if (!pending.length) {\n adapter.calculateProperties();\n }\n }\n\n function adjustBufferAfterFetch(rid) {\n var updates = processUpdates();\n\n viewport.onAfterPrepend(updates);\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n onRenderHandlersRunner();\n enqueueFetch(rid, updates);\n pending.shift();\n\n if (pending.length) fetch(rid);else {\n adapter.loading(false);\n bindEvents();\n adapter.calculateProperties();\n }\n }\n\n function fetch(rid) {\n if (pending[0]) {\n // scrolling down\n if (buffer.length && !viewport.shouldLoadBottom()) {\n adjustBufferAfterFetch(rid);\n } else {\n fetchNext(function (result) {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.eof = true;\n }\n\n if (result.length > 0) {\n viewport.clipTop();\n buffer.append(result);\n }\n\n adjustBufferAfterFetch(rid);\n });\n }\n } else {\n // scrolling up\n if (buffer.length && !viewport.shouldLoadTop()) {\n adjustBufferAfterFetch(rid);\n } else {\n fetchPrevious(function (result) {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.bof = true;\n // log 'bof is reached'\n }\n\n if (result.length > 0) {\n if (buffer.length) {\n viewport.clipBottom();\n }\n buffer.prepend(result);\n }\n\n 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.$$phase && $scope.$digest();\n }\n }\n }\n\n function wheelHandler(event) {\n if (!adapter.disabled) {\n var scrollTop = viewport[0].scrollTop;\n var yMax = viewport[0].scrollHeight - viewport[0].clientHeight;\n\n if (scrollTop === 0 && !buffer.bof || scrollTop === yMax && !buffer.eof) {\n event.preventDefault();\n }\n }\n }\n }\n}]);\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// ui-scroll.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap cc2ee8bfebb152b1baab","function getCtrlOnData(attr, element) {\r\n let onSyntax = attr.match(/^(.+)(\\s+on\\s+)(.+)?/);\r\n if (onSyntax && onSyntax.length === 4) {\r\n window.console.log('Angular ui-scroll adapter assignment warning. \"Controller On\" syntax has been deprecated since ui-scroll v1.6.1.');\r\n let ctrl = onSyntax[3];\r\n let tail = onSyntax[1];\r\n let candidate = element;\r\n while (candidate.length) {\r\n let candidateScope = candidate.scope(); // doesn't work when debugInfoEnabled flag = true\r\n let candidateName = (candidate.attr('ng-controller') || '').match(/(\\w(?:\\w|\\d)*)(?:\\s+as\\s+(\\w(?:\\w|\\d)*))?/);\r\n if (candidateName && candidateName[1] === ctrl) {\r\n return {\r\n target: candidateScope,\r\n source: tail\r\n };\r\n }\r\n candidate = candidate.parent();\r\n }\r\n throw new Error('Angular ui-scroll adapter assignment error. Failed to locate target controller \"' + ctrl + '\" to inject \"' + tail + '\"');\r\n }\r\n}\r\n\r\nclass Adapter {\r\n\r\n constructor(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope) {\r\n this.viewport = viewport;\r\n this.buffer = buffer;\r\n this.adjustBuffer = adjustBuffer;\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, $parse, element);\r\n this.generatePublicContext($attr, $parse);\r\n }\r\n\r\n assignAdapter(adapterAttr, $parse, element) {\r\n if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\\s+|\\s+$/gm, ''))) {\r\n return;\r\n }\r\n let ctrlOnData = getCtrlOnData(adapterAttr, element);\r\n let adapterOnScope;\r\n\r\n try {\r\n if (ctrlOnData) { // \"Controller On\", deprecated since v1.6.1\r\n $parse(ctrlOnData.source).assign(ctrlOnData.target, {});\r\n adapterOnScope = $parse(ctrlOnData.source)(ctrlOnData.target);\r\n }\r\n else {\r\n $parse(adapterAttr).assign(this.startScope, {});\r\n adapterOnScope = $parse(adapterAttr)(this.startScope);\r\n }\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($attr, $parse) {\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 = $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 $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.adjustBuffer() : 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 applyUpdates(arg1, arg2) {\r\n if (angular.isFunction(arg1)) {\r\n // arg1 is the updater function, arg2 is ignored\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, 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 - this.buffer.first;\r\n if ((index >= 0 && index < this.buffer.length)) {\r\n this.applyUpdate(this.buffer[index], arg2);\r\n }\r\n }\r\n\r\n this.adjustBuffer();\r\n }\r\n\r\n append(newItems) {\r\n this.buffer.append(newItems);\r\n this.adjustBuffer();\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.adjustBuffer();\r\n this.viewport.clipTop();\r\n this.viewport.clipBottom();\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\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\r\n rowTop = itemTop;\r\n\r\n if (topDone && bottomDone) {\r\n break;\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\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\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}\r\n\r\nexport default Adapter;\n\n\n// WEBPACK FOOTER //\n// ./src/modules/adapter.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, 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\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') {\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 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 return buffer;\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/buffer.js","const hideClassToken = 'ng-ui-scroll-hide';\r\n\r\nfunction addCSSRule(sheet, selector, rules, index) {\r\n if('insertRule' in sheet) {\r\n sheet.insertRule(selector + '{' + rules + '}', index);\r\n }\r\n else if('addRule' in sheet) {\r\n sheet.addRule(selector, rules, index);\r\n }\r\n}\r\n\r\nexport default class ElementRoutines {\r\n\r\n constructor($injector, $q) {\r\n this.$animate = ($injector.has && $injector.has('$animate')) ? $injector.get('$animate') : null;\r\n this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3;\r\n this.$q = $q;\r\n addCSSRule(document.styleSheets[0], '.' + hideClassToken, 'display: none');\r\n }\r\n\r\n hideElement(wrapper) {\r\n wrapper.element.addClass(hideClassToken);\r\n }\r\n\r\n showElement(wrapper) {\r\n wrapper.element.removeClass(hideClassToken);\r\n }\r\n\r\n insertElement(newElement, previousElement) {\r\n previousElement.after(newElement);\r\n return [];\r\n }\r\n\r\n removeElement(wrapper) {\r\n wrapper.element.remove();\r\n wrapper.scope.$destroy();\r\n return [];\r\n }\r\n\r\n insertElementAnimated(newElement, previousElement) {\r\n if (!this.$animate) {\r\n return this.insertElement(newElement, previousElement);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n // no need for parent - previous element is never null\r\n this.$animate.enter(newElement, null, previousElement, () => deferred.resolve());\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n // no need for parent - previous element is never null\r\n return [this.$animate.enter(newElement, null, previousElement)];\r\n }\r\n\r\n removeElementAnimated(wrapper) {\r\n if (!this.$animate) {\r\n return this.removeElement(wrapper);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n this.$animate.leave(wrapper.element, () => {\r\n wrapper.scope.$destroy();\r\n return deferred.resolve();\r\n });\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n return [(this.$animate.leave(wrapper.element)).then(() => wrapper.scope.$destroy())];\r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/elementRoutines.js","/*!\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","import Padding from './padding';\r\n\r\nexport default function Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding) {\r\n let topPadding = null;\r\n let bottomPadding = null;\r\n const viewport = viewportController && viewportController.viewport ? viewportController.viewport : angular.element(window);\r\n const container = viewportController && viewportController.container ? viewportController.container : undefined;\r\n const scope = viewportController && viewportController.scope ? viewportController.scope : $rootScope;\r\n\r\n viewport.css({\r\n 'overflow-anchor': 'none',\r\n 'overflow-y': 'auto',\r\n 'display': 'block'\r\n });\r\n\r\n function bufferPadding() {\r\n return viewport.outerHeight() * padding; // some extra space to initiate preload\r\n }\r\n\r\n angular.extend(viewport, {\r\n getScope() {\r\n return scope;\r\n },\r\n\r\n createPaddingElements(template) {\r\n topPadding = new Padding(template);\r\n bottomPadding = new Padding(template);\r\n element.before(topPadding);\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.adjustPaddings();\r\n }\r\n },\r\n\r\n shouldLoadTop() {\r\n return !buffer.bof && (viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding());\r\n },\r\n\r\n clipTop() {\r\n // clip the invisible items off the top\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\r\n\r\n for (let i = 0; i < buffer.length; i++) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n topPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n // we need to adjust top padding element before items are removed from top\r\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\r\n topPadding.height(topPadding.height() + overageHeight);\r\n buffer.bof = false;\r\n buffer.remove(0, overage);\r\n buffer.first += overage;\r\n }\r\n },\r\n\r\n adjustPaddings() {\r\n if (!buffer.length) {\r\n return;\r\n }\r\n\r\n // precise heights calculation, 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 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 diff -= viewport.scrollTop();\r\n if(diff > 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 removeItem(item) {\r\n topPadding.cache.remove(item);\r\n bottomPadding.cache.remove(item);\r\n return buffer.remove(item);\r\n }\r\n });\r\n\r\n return viewport;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/viewport.js","// Can't just extend the Array, due to Babel does not support built-in classes extending\r\n// This solution was taken from https://stackoverflow.com/questions/46897414/es6-class-extends-array-workaround-for-es5-babel-transpile\r\nclass CacheProto {\r\n add(item) {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index === item.scope.$index) {\r\n this[i].height = item.element.outerHeight();\r\n return;\r\n }\r\n }\r\n this.push({\r\n index: item.scope.$index,\r\n height: item.element.outerHeight()\r\n });\r\n this.sort((a, b) => ((a.index < b.index) ? -1 : ((a.index > b.index) ? 1 : 0)));\r\n }\r\n\r\n remove(itemToRemove) {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index === itemToRemove.scope.$index) {\r\n this.splice(i, 1);\r\n break;\r\n }\r\n }\r\n if(itemToRemove._op !== 'isTop') {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index > itemToRemove.scope.$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\nexport default function Padding(template) {\r\n let result;\r\n\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\r\n switch (template.tagName.toLowerCase()) {\r\n case 'dl':\r\n throw new Error(`ui-scroll directive does not support <${template.tagName}> as a repeating tag: ${template.outerHTML}`);\r\n case 'tr':\r\n let table = angular.element('
    ');\r\n result = table.find('tr');\r\n break;\r\n case 'li':\r\n result = angular.element('
  • ');\r\n break;\r\n default:\r\n result = angular.element('
    ');\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","import JQLiteExtras from './modules/jqLiteExtras';\r\nimport ElementRoutines from './modules/elementRoutines.js';\r\nimport ScrollBuffer from './modules/buffer.js';\r\nimport Viewport from './modules/viewport.js';\r\nimport Adapter from './modules/adapter.js';\r\n\r\nangular.module('ui.scroll', [])\r\n\r\n .service('jqLiteExtras', () => new JQLiteExtras())\r\n .run(['jqLiteExtras', (jqLiteExtras) =>\r\n !window.jQuery ? jqLiteExtras.registerFor(angular.element) : null\r\n ])\r\n\r\n .directive('uiScrollViewport', function () {\r\n return {\r\n restrict: 'A',\r\n controller: [\r\n '$scope',\r\n '$element',\r\n function (scope, element) {\r\n this.container = element;\r\n this.viewport = element;\r\n this.scope = scope;\r\n\r\n angular.forEach(element.children(), (child => {\r\n if (child.tagName.toLowerCase() === 'tbody') {\r\n this.viewport = angular.element(child);\r\n }\r\n }));\r\n\r\n return this;\r\n }\r\n ]\r\n };\r\n })\r\n\r\n .directive('uiScroll', [\r\n '$log',\r\n '$injector',\r\n '$rootScope',\r\n '$timeout',\r\n '$q',\r\n '$parse',\r\n function (console, $injector, $rootScope, $timeout, $q, $parse) {\r\n\r\n return {\r\n require: ['?^uiScrollViewport'],\r\n restrict: 'A',\r\n transclude: 'element',\r\n priority: 1000,\r\n terminal: true,\r\n link: link\r\n };\r\n\r\n function link($scope, element, $attr, controllers, linker) {\r\n const match = $attr.uiScroll.match(/^\\s*(\\w+)\\s+in\\s+([(\\w|\\$)\\.]+)\\s*$/);\r\n if (!match) {\r\n throw new Error('Expected uiScroll in form of \\'_item_ in _datasource_\\' but got \\'' + $attr.uiScroll + '\\'');\r\n }\r\n\r\n function parseNumericAttr(value, defaultValue) {\r\n let result = $parse(value)($scope);\r\n return isNaN(result) ? defaultValue : result;\r\n }\r\n\r\n const BUFFER_MIN = 3;\r\n const BUFFER_DEFAULT = 10;\r\n const PADDING_MIN = 0.3;\r\n const PADDING_DEFAULT = 0.5;\r\n\r\n let datasource = null;\r\n const itemName = match[1];\r\n const datasourceName = match[2];\r\n const viewportController = controllers[0];\r\n const bufferSize = Math.max(BUFFER_MIN, parseNumericAttr($attr.bufferSize, BUFFER_DEFAULT));\r\n const padding = Math.max(PADDING_MIN, parseNumericAttr($attr.padding, PADDING_DEFAULT));\r\n let startIndex = parseNumericAttr($attr.startIndex, 1);\r\n let ridActual = 0;// current data revision id\r\n let pending = [];\r\n\r\n let elementRoutines = new ElementRoutines($injector, $q);\r\n let buffer = new ScrollBuffer(elementRoutines, bufferSize);\r\n let viewport = new Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding);\r\n let adapter = new Adapter(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope);\r\n\r\n if (viewportController) {\r\n viewportController.adapter = adapter;\r\n }\r\n\r\n let isDatasourceValid = () => angular.isObject(datasource) && angular.isFunction(datasource.get);\r\n datasource = $parse(datasourceName)($scope); // try to get datasource on scope\r\n if (!isDatasourceValid()) {\r\n datasource = $injector.get(datasourceName); // try to inject datasource as service\r\n if (!isDatasourceValid()) {\r\n throw new Error(datasourceName + ' is not a valid datasource');\r\n }\r\n }\r\n\r\n let onRenderHandlers = [];\r\n function onRenderHandlersRunner() {\r\n if(onRenderHandlers.length) {\r\n angular.forEach(onRenderHandlers, (handler) => handler());\r\n onRenderHandlers = [];\r\n }\r\n }\r\n function preDefineIndexProperty(datasource, propName) {\r\n let getter;\r\n // need to postpone min/maxIndexUser processing if the view is empty\r\n if(datasource.hasOwnProperty(propName) && !buffer.length) {\r\n getter = datasource[propName];\r\n delete datasource[propName];\r\n onRenderHandlers.push(() => datasource[propName] = getter);\r\n }\r\n }\r\n\r\n function defineIndexProperty(datasource, propName, propUserName) {\r\n let descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\r\n if (descriptor && (descriptor.set || descriptor.get)) {\r\n return;\r\n }\r\n let getter;\r\n preDefineIndexProperty(datasource, propName);\r\n Object.defineProperty(datasource, propName, {\r\n set: (value) => {\r\n getter = value;\r\n buffer[propUserName] = value;\r\n let topPaddingHeightOld = viewport.topDataPos();\r\n viewport.adjustPaddings();\r\n if (propName === 'minIndex') {\r\n viewport.onAfterMinIndexSet(topPaddingHeightOld);\r\n }\r\n },\r\n get: () => getter\r\n });\r\n }\r\n\r\n defineIndexProperty(datasource, 'minIndex', 'minIndexUser');\r\n defineIndexProperty(datasource, 'maxIndex', 'maxIndexUser');\r\n\r\n const fetchNext = (datasource.get.length !== 2) ?\r\n (success) => datasource.get(buffer.next, bufferSize, success) :\r\n (success) => {\r\n datasource.get({\r\n index: buffer.next,\r\n append: buffer.length ? buffer[buffer.length - 1].item : void 0,\r\n count: bufferSize\r\n }, success);\r\n };\r\n\r\n const fetchPrevious = (datasource.get.length !== 2) ?\r\n (success) => datasource.get(buffer.first - bufferSize, bufferSize, success) :\r\n (success) => {\r\n datasource.get({\r\n index: buffer.first - bufferSize,\r\n prepend: buffer.length ? buffer[0].item : void 0,\r\n count: bufferSize\r\n }, success);\r\n };\r\n\r\n /**\r\n * Build padding elements\r\n *\r\n * Calling linker is the only way I found to get access to the tag name of the template\r\n * to prevent the directive scope from pollution a new scope is created and destroyed\r\n * right after the builder creation is completed\r\n */\r\n linker((clone, scope) => {\r\n viewport.createPaddingElements(clone[0]);\r\n // we do not include the clone in the DOM. It means that the nested directives will not\r\n // be able to reach the parent directives, but in this case it is intentional because we\r\n // created the clone to access the template tag name\r\n scope.$destroy();\r\n clone.remove();\r\n });\r\n\r\n $scope.$on('$destroy', () => {\r\n unbindEvents();\r\n viewport.unbind('mousewheel', wheelHandler);\r\n });\r\n\r\n viewport.bind('mousewheel', wheelHandler);\r\n\r\n $timeout(() => {\r\n viewport.applyContainerStyle();\r\n reload();\r\n });\r\n\r\n /* Private function definitions */\r\n\r\n function isInvalid(rid) {\r\n return (rid && rid !== ridActual) || $scope.$$destroyed;\r\n }\r\n\r\n function bindEvents() {\r\n viewport.bind('resize', resizeAndScrollHandler);\r\n viewport.bind('scroll', resizeAndScrollHandler);\r\n }\r\n\r\n function unbindEvents() {\r\n viewport.unbind('resize', resizeAndScrollHandler);\r\n viewport.unbind('scroll', resizeAndScrollHandler);\r\n }\r\n\r\n function reload() {\r\n viewport.resetTopPadding();\r\n viewport.resetBottomPadding();\r\n if (arguments.length) {\r\n startIndex = arguments[0];\r\n }\r\n buffer.reset(startIndex);\r\n adjustBuffer();\r\n }\r\n\r\n function isElementVisible(wrapper) {\r\n return wrapper.element.height() && wrapper.element[0].offsetParent;\r\n }\r\n\r\n function visibilityWatcher(wrapper) {\r\n if (isElementVisible(wrapper)) {\r\n buffer.forEach((item) => {\r\n if (angular.isFunction(item.unregisterVisibilityWatcher)) {\r\n item.unregisterVisibilityWatcher();\r\n delete item.unregisterVisibilityWatcher;\r\n }\r\n });\r\n if (!pending.length) {\r\n $timeout(() => adjustBuffer());\r\n }\r\n }\r\n }\r\n\r\n function insertWrapperContent(wrapper, insertAfter) {\r\n createElement(wrapper, insertAfter, viewport.insertElement);\r\n if (!isElementVisible(wrapper)) {\r\n wrapper.unregisterVisibilityWatcher = wrapper.scope.$watch(() => visibilityWatcher(wrapper));\r\n }\r\n elementRoutines.hideElement(wrapper); // hide inserted elements before data binding\r\n }\r\n\r\n function createElement(wrapper, insertAfter, insertElement) {\r\n let promises = null;\r\n let sibling = (insertAfter > 0) ? buffer[insertAfter - 1].element : undefined;\r\n linker((clone, scope) => {\r\n promises = insertElement(clone, sibling);\r\n wrapper.element = clone;\r\n wrapper.scope = scope;\r\n scope[itemName] = wrapper.item;\r\n });\r\n // ui-scroll-grid apply\r\n if (adapter.transform) {\r\n let tdInitializer = wrapper.scope.uiScrollTdInitializer;\r\n if (tdInitializer && tdInitializer.linking) {\r\n adapter.transform(wrapper.scope, wrapper.element);\r\n } else {\r\n wrapper.scope.uiScrollTdInitializer = {\r\n onLink: () => adapter.transform(wrapper.scope, wrapper.element),\r\n scope: wrapper.scope\r\n };\r\n }\r\n }\r\n return promises;\r\n }\r\n\r\n function updateDOM() {\r\n let promises = [];\r\n const toBePrepended = [];\r\n const toBeRemoved = [];\r\n const inserted = [];\r\n\r\n buffer.forEach((wrapper, i) => {\r\n switch (wrapper.op) {\r\n case 'prepend':\r\n toBePrepended.unshift(wrapper);\r\n break;\r\n case 'append':\r\n insertWrapperContent(wrapper, i);\r\n wrapper.op = 'none';\r\n inserted.push(wrapper);\r\n break;\r\n case 'insert':\r\n promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated));\r\n wrapper.op = 'none';\r\n inserted.push(wrapper);\r\n break;\r\n case 'remove':\r\n toBeRemoved.push(wrapper);\r\n }\r\n });\r\n\r\n toBeRemoved.forEach((wrapper) => promises = promises.concat(viewport.removeItem(wrapper)));\r\n\r\n if (toBePrepended.length)\r\n toBePrepended.forEach((wrapper) => {\r\n insertWrapperContent(wrapper);\r\n wrapper.op = 'none';\r\n });\r\n\r\n buffer.forEach((item, i) => item.scope.$index = buffer.first + i);\r\n\r\n return {\r\n prepended: toBePrepended,\r\n removed: toBeRemoved,\r\n inserted: inserted,\r\n animated: promises\r\n };\r\n\r\n }\r\n\r\n function updatePaddings(rid, updates) {\r\n // schedule another adjustBuffer after animation completion\r\n if (updates.animated.length) {\r\n $q.all(updates.animated).then(() => {\r\n viewport.adjustPaddings();\r\n adjustBuffer(rid);\r\n });\r\n } else {\r\n viewport.adjustPaddings();\r\n }\r\n }\r\n\r\n function enqueueFetch(rid, updates) {\r\n if (viewport.shouldLoadBottom()) {\r\n if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\r\n // this means that at least one item appended in the last batch has height > 0\r\n if (pending.push(true) === 1) {\r\n adapter.loading(true);\r\n fetch(rid);\r\n }\r\n }\r\n } else if (viewport.shouldLoadTop()) {\r\n if ((!updates || buffer.effectiveHeight(updates.prepended) > 0) || pending[0]) {\r\n // this means that at least one item appended in the last batch has height > 0\r\n // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\r\n // BTW there will always be at least 1 element in the pending array because bottom is fetched first\r\n if (pending.push(false) === 1) {\r\n adapter.loading(true);\r\n fetch(rid);\r\n }\r\n }\r\n }\r\n }\r\n\r\n function processUpdates() {\r\n const updates = updateDOM();\r\n\r\n // We need the item bindings to be processed before we can do adjustments\r\n !$scope.$$phase && $scope.$digest();\r\n\r\n updates.inserted.forEach(w => elementRoutines.showElement(w));\r\n updates.prepended.forEach(w => elementRoutines.showElement(w));\r\n return updates;\r\n }\r\n\r\n function adjustBuffer(rid) {\r\n if (!rid) { // dismiss pending requests\r\n pending = [];\r\n rid = ++ridActual;\r\n }\r\n\r\n const updates = processUpdates();\r\n\r\n if (isInvalid(rid)) {\r\n return;\r\n }\r\n\r\n updatePaddings(rid, updates);\r\n enqueueFetch(rid);\r\n\r\n if (!pending.length) {\r\n adapter.calculateProperties();\r\n }\r\n }\r\n\r\n function adjustBufferAfterFetch(rid) {\r\n const updates = processUpdates();\r\n\r\n viewport.onAfterPrepend(updates);\r\n\r\n if (isInvalid(rid)) {\r\n return;\r\n }\r\n\r\n updatePaddings(rid, updates);\r\n onRenderHandlersRunner();\r\n enqueueFetch(rid, updates);\r\n pending.shift();\r\n\r\n if (pending.length)\r\n fetch(rid);\r\n else {\r\n adapter.loading(false);\r\n bindEvents();\r\n adapter.calculateProperties();\r\n }\r\n }\r\n\r\n function fetch(rid) {\r\n if (pending[0]) {// scrolling down\r\n if (buffer.length && !viewport.shouldLoadBottom()) {\r\n adjustBufferAfterFetch(rid);\r\n } else {\r\n fetchNext((result) => {\r\n if (isInvalid(rid)) {\r\n return;\r\n }\r\n\r\n if (result.length < bufferSize) {\r\n buffer.eof = true;\r\n }\r\n\r\n if (result.length > 0) {\r\n viewport.clipTop();\r\n buffer.append(result);\r\n }\r\n\r\n adjustBufferAfterFetch(rid);\r\n });\r\n }\r\n } else { // scrolling up\r\n if (buffer.length && !viewport.shouldLoadTop()) {\r\n adjustBufferAfterFetch(rid);\r\n } else {\r\n fetchPrevious((result) => {\r\n if (isInvalid(rid)) {\r\n return;\r\n }\r\n\r\n if (result.length < bufferSize) {\r\n buffer.bof = true;\r\n // log 'bof is reached'\r\n }\r\n\r\n if (result.length > 0) {\r\n if (buffer.length) {\r\n viewport.clipBottom();\r\n }\r\n buffer.prepend(result);\r\n }\r\n\r\n adjustBufferAfterFetch(rid);\r\n });\r\n }\r\n }\r\n }\r\n\r\n function resizeAndScrollHandler() {\r\n if (!$rootScope.$$phase && !adapter.isLoading && !adapter.disabled) {\r\n\r\n enqueueFetch(ridActual);\r\n\r\n if (pending.length) {\r\n unbindEvents();\r\n } else {\r\n adapter.calculateProperties();\r\n !$scope.$$phase && $scope.$digest();\r\n }\r\n }\r\n }\r\n\r\n function wheelHandler(event) {\r\n if (!adapter.disabled) {\r\n let scrollTop = viewport[0].scrollTop;\r\n let yMax = viewport[0].scrollHeight - viewport[0].clientHeight;\r\n\r\n if ((scrollTop === 0 && !buffer.bof) || (scrollTop === yMax && !buffer.eof)) {\r\n event.preventDefault();\r\n }\r\n }\r\n }\r\n }\r\n\r\n }\r\n ]);\n\n\n// WEBPACK FOOTER //\n// ./src/ui-scroll.js"],"sourceRoot":""} \ No newline at end of file diff --git a/src/modules/elementRoutines.js b/src/modules/elementRoutines.js index c89585f8..39a14032 100644 --- a/src/modules/elementRoutines.js +++ b/src/modules/elementRoutines.js @@ -1,10 +1,10 @@ const hideClassToken = 'ng-ui-scroll-hide'; function addCSSRule(sheet, selector, rules, index) { - if("insertRule" in sheet) { + if('insertRule' in sheet) { sheet.insertRule(selector + '{' + rules + '}', index); } - else if("addRule" in sheet) { + else if('addRule' in sheet) { sheet.addRule(selector, rules, index); } } From a438a8e5f95f1d4d1ab4b1239672df6fa481d7e2 Mon Sep 17 00:00:00 2001 From: dhilt Date: Thu, 26 Oct 2017 17:11:54 +0300 Subject: [PATCH 13/14] split Adapter.applyUpdates method --- src/modules/adapter.js | 96 +++++++++++++++++++++--------------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/src/modules/adapter.js b/src/modules/adapter.js index 68a83c3e..e52490ce 100644 --- a/src/modules/adapter.js +++ b/src/modules/adapter.js @@ -113,29 +113,6 @@ class Adapter { return !this.buffer.length; } - applyUpdates(arg1, arg2) { - if (angular.isFunction(arg1)) { - // arg1 is the updater function, arg2 is ignored - this.buffer.slice(0).forEach((wrapper) => { - // we need to do it on the buffer clone, because buffer content - // may change as we iterate through - this.applyUpdate(wrapper, arg1(wrapper.item, wrapper.scope, wrapper.element)); - }); - } else { - // arg1 is item index, arg2 is the newItems array - if (arg1 % 1 !== 0) {// checking if it is an integer - throw new Error('applyUpdates - ' + arg1 + ' is not a valid index'); - } - - const index = arg1 - this.buffer.first; - if ((index >= 0 && index < this.buffer.length)) { - this.applyUpdate(this.buffer[index], arg2); - } - } - - this.adjustBuffer(); - } - append(newItems) { this.buffer.append(newItems); this.adjustBuffer(); @@ -150,6 +127,54 @@ class Adapter { this.viewport.clipBottom(); } + applyUpdates(arg1, arg2) { + if (angular.isFunction(arg1)) { + this.applyUpdatesFunc(arg1); + } else { + this.applyUpdatesIndex(arg1, arg2); + } + this.adjustBuffer(); + } + + applyUpdatesFunc(cb) { + this.buffer.slice(0).forEach((wrapper) => { + // we need to do it on the buffer clone, because buffer content + // may change as we iterate through + this.applyUpdate(wrapper, cb(wrapper.item, wrapper.scope, wrapper.element)); + }); + } + + applyUpdatesIndex(index, newItems) { + if (index % 1 !== 0) { // checking if it is an integer + throw new Error('applyUpdates - ' + index + ' is not a valid index'); + } + index -= this.buffer.first; + if ((index >= 0 && index < this.buffer.length)) { + this.applyUpdate(this.buffer[index], newItems); + } + } + + applyUpdate(wrapper, newItems) { + if (!angular.isArray(newItems)) { + return; + } + let position = (this.buffer.indexOf(wrapper)); + if (!newItems.reverse().some((newItem) => newItem === wrapper.item)) { + wrapper.op = 'remove'; + if(position === 0 && !newItems.length) { + wrapper._op = 'isTop'; // to catch "first" edge case on remove + } + } + newItems.forEach((newItem) => { + if (newItem === wrapper.item) { + position--; + } else { + // 3 parameter (isTop) is to catch "first" edge case on insert + this.buffer.insert(position + 1, newItem, position === -1); + } + }); + } + calculateProperties() { let rowTop = null, topHeight = 0; let topDone = false, bottomDone = false; @@ -169,7 +194,6 @@ class Adapter { this['topVisibleElement'] = item.element; this['topVisibleScope'] = item.scope; } - if (!bottomDone && (top >= this.viewport.bottomVisiblePos() || (i === length - 1 && this.isEOF()))) { bottomDone = true; this['bottomVisible'] = item.item; @@ -178,7 +202,6 @@ class Adapter { } topHeight += itemHeight; } - rowTop = itemTop; if (topDone && bottomDone) { @@ -187,29 +210,6 @@ class Adapter { } } - applyUpdate(wrapper, newItems) { - if (!angular.isArray(newItems)) { - return; - } - - let position = (this.buffer.indexOf(wrapper)); - if (!newItems.reverse().some((newItem) => newItem === wrapper.item)) { - wrapper.op = 'remove'; - if(position === 0 && !newItems.length) { - wrapper._op = 'isTop'; // to catch "first" edge case on remove - } - } - - newItems.forEach((newItem) => { - if (newItem === wrapper.item) { - position--; - } else { - // 3 parameter (isTop) is to catch "first" edge case on insert - this.buffer.insert(position + 1, newItem, position === -1); - } - }); - } - } export default Adapter; \ No newline at end of file From cd6a5cfd12f340873a888fc35548c5373747947f Mon Sep 17 00:00:00 2001 From: dhilt Date: Fri, 27 Oct 2017 17:40:17 +0300 Subject: [PATCH 14/14] merge fix --- dist/ui-scroll.js | 4 ++-- dist/ui-scroll.js.map | 2 +- dist/ui-scroll.min.js | 4 ++-- dist/ui-scroll.min.js.map | 2 +- src/ui-scroll.js | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/dist/ui-scroll.js b/dist/ui-scroll.js index a2b030b1..5d47f403 100644 --- a/dist/ui-scroll.js +++ b/dist/ui-scroll.js @@ -1,7 +1,7 @@ /*! * angular-ui-scroll (uncompressed) * https://github.com/angular-ui/ui-scroll - * Version: 1.7.0-rc.4 -- 2017-10-27T14:30:17.323Z + * Version: 1.7.0-rc.4 -- 2017-10-27T14:37:56.031Z * License: MIT */ /******/ (function(modules) { // webpackBootstrap @@ -1557,7 +1557,7 @@ angular.module('ui.scroll', []).service('jqLiteExtras', function () { var updates = updateDOM(); // We need the item bindings to be processed before we can do adjustments - !$scope.$$phase && !$scope.$root.$$phase && $scope.$digest(); + !$scope.$$phase && !$rootScope.$$phase && $scope.$digest(); updates.inserted.forEach(function (w) { return elementRoutines.showElement(w); diff --git a/dist/ui-scroll.js.map b/dist/ui-scroll.js.map index da17ff58..bc4f6322 100644 --- a/dist/ui-scroll.js.map +++ b/dist/ui-scroll.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap 4b130958d678aa2654a3","webpack:///./src/modules/adapter.js","webpack:///./src/modules/buffer.js","webpack:///./src/modules/elementRoutines.js","webpack:///./src/modules/jqLiteExtras.js","webpack:///./src/modules/viewport.js","webpack:///./src/modules/padding.js","webpack:///./src/ui-scroll.js"],"names":["getCtrlOnData","attr","element","onSyntax","match","length","window","console","log","ctrl","tail","candidate","candidateScope","scope","candidateName","target","source","parent","Error","Adapter","viewport","buffer","adjustBuffer","reload","$attr","$parse","$scope","isLoading","disabled","viewportScope","getScope","startScope","$parent","publicContext","assignAdapter","adapter","generatePublicContext","adapterAttr","replace","ctrlOnData","adapterOnScope","assign","error","message","angular","extend","publicMethods","i","bind","publicProps","property","Object","defineProperty","get","set","value","bof","eof","newItems","append","clipTop","clipBottom","prepend","arg1","arg2","isFunction","applyUpdatesFunc","applyUpdatesIndex","cb","slice","forEach","wrapper","applyUpdate","item","index","first","isArray","position","indexOf","reverse","some","newItem","op","_op","insert","rowTop","topHeight","topDone","bottomDone","itemTop","offset","top","itemHeight","outerHeight","topDataPos","topVisiblePos","bottomVisiblePos","isEOF","ScrollBuffer","elementRoutines","bufferSize","create","Array","prototype","size","reset","startIndex","remove","next","minIndex","maxIndex","minIndexUser","maxIndexUser","items","Math","max","min","operation","isTop","splice","push","unshift","isNumber","removeElement","removeElementAnimated","effectiveHeight","elements","Number","MAX_VALUE","bottom","NEGATIVE_INFINITY","offsetParent","hideClassToken","addCSSRule","sheet","selector","rules","insertRule","addRule","ElementRoutines","$injector","$q","$animate","has","isAngularVersionLessThen1_3","version","major","minor","document","styleSheets","addClass","removeClass","newElement","previousElement","after","$destroy","insertElement","deferred","defer","enter","resolve","promise","leave","then","JQLiteExtras","convertToPx","css","getStyle","isWindow","name","self","elem","nodeType","style","call","obj","location","alert","setInterval","scrollTo","direction","left","method","prop","preserve","isDefined","documentElement","getComputedStyle","parseFloat","currentStyle","result","rs","rsLeft","core_pnum","rnumnonpx","RegExp","test","runtimeStyle","pixelLeft","getMeasurements","measure","base","borderA","borderB","computedMarginA","computedMarginB","computedStyle","dirA","dirB","marginA","marginB","paddingA","paddingB","height","width","padding","border","margin","offsetWidth","offsetHeight","getWidthHeight","measurements","outer","outerfull","before","newElem","children","j","ref","contents","outerHTML","option","outerWidth","docElem","win","box","doc","ownerDocument","arguments","undefined","getBoundingClientRect","defaultView","parentWindow","pageYOffset","scrollTop","clientTop","pageXOffset","scrollLeft","clientLeft","key","Viewport","viewportController","$rootScope","topPadding","bottomPadding","container","bufferPadding","createPaddingElements","template","applyContainerStyle","bottomDataPos","scrollHeight","e","sibling","insertElementAnimated","shouldLoadBottom","overage","overageHeight","emptySpaceHeight","cache","add","adjustPaddings","shouldLoadTop","topPaddingHeight","reduce","summ","bottomPaddingHeight","visibleItemsHeight","averageItemHeight","adjustTopPadding","adjustBottomPadding","topPaddingHeightAdd","bottomPaddingHeightAdd","onAfterMinIndexSet","topPaddingHeightOld","diff","onAfterPrepend","updates","prepended","paddingHeight","resetTopPadding","clear","resetBottomPadding","removeItem","Padding","CacheProto","$index","sort","a","b","itemToRemove","Cache","instance","apply","setPrototypeOf","getOwnPropertyNames","methodName","Node","ELEMENT_NODE","tagName","toLowerCase","table","find","module","service","run","jqLiteExtras","jQuery","registerFor","directive","restrict","controller","child","$timeout","require","transclude","priority","terminal","link","controllers","linker","uiScroll","parseNumericAttr","defaultValue","isNaN","BUFFER_MIN","BUFFER_DEFAULT","PADDING_MIN","PADDING_DEFAULT","datasource","itemName","datasourceName","ridActual","pending","isDatasourceValid","isObject","onRenderHandlers","onRenderHandlersRunner","handler","preDefineIndexProperty","propName","getter","hasOwnProperty","defineIndexProperty","propUserName","descriptor","getOwnPropertyDescriptor","fetchNext","success","count","fetchPrevious","clone","$on","unbindEvents","unbind","wheelHandler","isInvalid","rid","$$destroyed","bindEvents","resizeAndScrollHandler","isElementVisible","visibilityWatcher","unregisterVisibilityWatcher","insertWrapperContent","insertAfter","createElement","$watch","hideElement","promises","transform","tdInitializer","uiScrollTdInitializer","linking","onLink","updateDOM","toBePrepended","toBeRemoved","inserted","concat","removed","animated","updatePaddings","all","enqueueFetch","loading","fetch","processUpdates","$$phase","$root","$digest","showElement","w","calculateProperties","adjustBufferAfterFetch","shift","event","yMax","clientHeight","preventDefault"],"mappings":"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","file":"ui-scroll.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 4b130958d678aa2654a3","function getCtrlOnData(attr, element) {\r\n let onSyntax = attr.match(/^(.+)(\\s+on\\s+)(.+)?/);\r\n if (onSyntax && onSyntax.length === 4) {\r\n window.console.log('Angular ui-scroll adapter assignment warning. \"Controller On\" syntax has been deprecated since ui-scroll v1.6.1.');\r\n let ctrl = onSyntax[3];\r\n let tail = onSyntax[1];\r\n let candidate = element;\r\n while (candidate.length) {\r\n let candidateScope = candidate.scope(); // doesn't work when debugInfoEnabled flag = true\r\n let candidateName = (candidate.attr('ng-controller') || '').match(/(\\w(?:\\w|\\d)*)(?:\\s+as\\s+(\\w(?:\\w|\\d)*))?/);\r\n if (candidateName && candidateName[1] === ctrl) {\r\n return {\r\n target: candidateScope,\r\n source: tail\r\n };\r\n }\r\n candidate = candidate.parent();\r\n }\r\n throw new Error('Angular ui-scroll adapter assignment error. Failed to locate target controller \"' + ctrl + '\" to inject \"' + tail + '\"');\r\n }\r\n}\r\n\r\nclass Adapter {\r\n\r\n constructor(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope) {\r\n this.viewport = viewport;\r\n this.buffer = buffer;\r\n this.adjustBuffer = adjustBuffer;\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, $parse, element);\r\n this.generatePublicContext($attr, $parse);\r\n }\r\n\r\n assignAdapter(adapterAttr, $parse, element) {\r\n if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\\s+|\\s+$/gm, ''))) {\r\n return;\r\n }\r\n let ctrlOnData = getCtrlOnData(adapterAttr, element);\r\n let adapterOnScope;\r\n\r\n try {\r\n if (ctrlOnData) { // \"Controller On\", deprecated since v1.6.1\r\n $parse(ctrlOnData.source).assign(ctrlOnData.target, {});\r\n adapterOnScope = $parse(ctrlOnData.source)(ctrlOnData.target);\r\n }\r\n else {\r\n $parse(adapterAttr).assign(this.startScope, {});\r\n adapterOnScope = $parse(adapterAttr)(this.startScope);\r\n }\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($attr, $parse) {\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 = $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 $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.adjustBuffer() : 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.adjustBuffer();\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.adjustBuffer();\r\n this.viewport.clipTop();\r\n this.viewport.clipBottom();\r\n }\r\n\r\n applyUpdates(arg1, arg2) {\r\n if (angular.isFunction(arg1)) {\r\n this.applyUpdatesFunc(arg1);\r\n } else {\r\n this.applyUpdatesIndex(arg1, arg2);\r\n }\r\n this.adjustBuffer();\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) { // checking if it is an integer\r\n throw new Error('applyUpdates - ' + index + ' is not a valid index');\r\n }\r\n index -= this.buffer.first;\r\n if ((index >= 0 && index < this.buffer.length)) {\r\n this.applyUpdate(this.buffer[index], newItems);\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;\n\n\n// WEBPACK FOOTER //\n// ./src/modules/adapter.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, 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\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') {\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 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 return buffer;\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/buffer.js","const hideClassToken = 'ng-ui-scroll-hide';\r\n\r\nfunction addCSSRule(sheet, selector, rules, index) {\r\n if('insertRule' in sheet) {\r\n sheet.insertRule(selector + '{' + rules + '}', index);\r\n }\r\n else if('addRule' in sheet) {\r\n sheet.addRule(selector, rules, index);\r\n }\r\n}\r\n\r\nexport default class ElementRoutines {\r\n\r\n constructor($injector, $q) {\r\n this.$animate = ($injector.has && $injector.has('$animate')) ? $injector.get('$animate') : null;\r\n this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3;\r\n this.$q = $q;\r\n addCSSRule(document.styleSheets[0], '.' + hideClassToken, 'display: none');\r\n }\r\n\r\n hideElement(wrapper) {\r\n wrapper.element.addClass(hideClassToken);\r\n }\r\n\r\n showElement(wrapper) {\r\n wrapper.element.removeClass(hideClassToken);\r\n }\r\n\r\n insertElement(newElement, previousElement) {\r\n previousElement.after(newElement);\r\n return [];\r\n }\r\n\r\n removeElement(wrapper) {\r\n wrapper.element.remove();\r\n wrapper.scope.$destroy();\r\n return [];\r\n }\r\n\r\n insertElementAnimated(newElement, previousElement) {\r\n if (!this.$animate) {\r\n return this.insertElement(newElement, previousElement);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n // no need for parent - previous element is never null\r\n this.$animate.enter(newElement, null, previousElement, () => deferred.resolve());\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n // no need for parent - previous element is never null\r\n return [this.$animate.enter(newElement, null, previousElement)];\r\n }\r\n\r\n removeElementAnimated(wrapper) {\r\n if (!this.$animate) {\r\n return this.removeElement(wrapper);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n this.$animate.leave(wrapper.element, () => {\r\n wrapper.scope.$destroy();\r\n return deferred.resolve();\r\n });\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n return [(this.$animate.leave(wrapper.element)).then(() => wrapper.scope.$destroy())];\r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/elementRoutines.js","/*!\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","import Padding from './padding';\r\n\r\nexport default function Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding) {\r\n let topPadding = null;\r\n let bottomPadding = null;\r\n const viewport = viewportController && viewportController.viewport ? viewportController.viewport : angular.element(window);\r\n const container = viewportController && viewportController.container ? viewportController.container : undefined;\r\n const scope = viewportController && viewportController.scope ? viewportController.scope : $rootScope;\r\n\r\n viewport.css({\r\n 'overflow-anchor': 'none',\r\n 'overflow-y': 'auto',\r\n 'display': 'block'\r\n });\r\n\r\n function bufferPadding() {\r\n return viewport.outerHeight() * padding; // some extra space to initiate preload\r\n }\r\n\r\n angular.extend(viewport, {\r\n getScope() {\r\n return scope;\r\n },\r\n\r\n createPaddingElements(template) {\r\n topPadding = new Padding(template);\r\n bottomPadding = new Padding(template);\r\n element.before(topPadding);\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.adjustPaddings();\r\n }\r\n },\r\n\r\n shouldLoadTop() {\r\n return !buffer.bof && (viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding());\r\n },\r\n\r\n clipTop() {\r\n // clip the invisible items off the top\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\r\n\r\n for (let i = 0; i < buffer.length; i++) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n topPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n // we need to adjust top padding element before items are removed from top\r\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\r\n topPadding.height(topPadding.height() + overageHeight);\r\n buffer.bof = false;\r\n buffer.remove(0, overage);\r\n buffer.first += overage;\r\n }\r\n },\r\n\r\n adjustPaddings() {\r\n if (!buffer.length) {\r\n return;\r\n }\r\n\r\n // precise heights calculation, 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 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 diff -= viewport.scrollTop();\r\n if(diff > 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 removeItem(item) {\r\n topPadding.cache.remove(item);\r\n bottomPadding.cache.remove(item);\r\n return buffer.remove(item);\r\n }\r\n });\r\n\r\n return viewport;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/viewport.js","// Can't just extend the Array, due to Babel does not support built-in classes extending\r\n// This solution was taken from https://stackoverflow.com/questions/46897414/es6-class-extends-array-workaround-for-es5-babel-transpile\r\nclass CacheProto {\r\n add(item) {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index === item.scope.$index) {\r\n this[i].height = item.element.outerHeight();\r\n return;\r\n }\r\n }\r\n this.push({\r\n index: item.scope.$index,\r\n height: item.element.outerHeight()\r\n });\r\n this.sort((a, b) => ((a.index < b.index) ? -1 : ((a.index > b.index) ? 1 : 0)));\r\n }\r\n\r\n remove(itemToRemove) {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index === itemToRemove.scope.$index) {\r\n this.splice(i, 1);\r\n break;\r\n }\r\n }\r\n if(itemToRemove._op !== 'isTop') {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index > itemToRemove.scope.$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\nexport default function Padding(template) {\r\n let result;\r\n\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\r\n switch (template.tagName.toLowerCase()) {\r\n case 'dl':\r\n throw new Error(`ui-scroll directive does not support <${template.tagName}> as a repeating tag: ${template.outerHTML}`);\r\n case 'tr':\r\n let table = angular.element('
    ');\r\n result = table.find('tr');\r\n break;\r\n case 'li':\r\n result = angular.element('
  • ');\r\n break;\r\n default:\r\n result = angular.element('
    ');\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","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 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 '$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, $rootScope, padding);\n let adapter = new Adapter(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope);\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 onRenderHandlers = [];\n function onRenderHandlersRunner() {\n if(onRenderHandlers.length) {\n angular.forEach(onRenderHandlers, (handler) => handler());\n onRenderHandlers = [];\n }\n }\n function preDefineIndexProperty(datasource, propName) {\n let getter;\n // need to postpone min/maxIndexUser processing if the view is empty\n if(datasource.hasOwnProperty(propName) && !buffer.length) {\n getter = datasource[propName];\n delete datasource[propName];\n onRenderHandlers.push(() => datasource[propName] = getter);\n }\n }\n\n function defineIndexProperty(datasource, propName, propUserName) {\n let descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n if (descriptor && (descriptor.set || descriptor.get)) {\n return;\n }\n let getter;\n preDefineIndexProperty(datasource, propName);\n Object.defineProperty(datasource, propName, {\n set: (value) => {\n getter = value;\n buffer[propUserName] = value;\n let topPaddingHeightOld = viewport.topDataPos();\n viewport.adjustPaddings();\n if (propName === 'minIndex') {\n viewport.onAfterMinIndexSet(topPaddingHeightOld);\n }\n },\n get: () => getter\n });\n }\n\n defineIndexProperty(datasource, 'minIndex', 'minIndexUser');\n defineIndexProperty(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 /**\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 if (!pending.length) {\n $timeout(() => adjustBuffer());\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 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 // ui-scroll-grid apply\n if (adapter.transform) {\n let tdInitializer = wrapper.scope.uiScrollTdInitializer;\n if (tdInitializer && tdInitializer.linking) {\n adapter.transform(wrapper.scope, wrapper.element);\n } else {\n wrapper.scope.uiScrollTdInitializer = {\n onLink: () => adapter.transform(wrapper.scope, wrapper.element),\n scope: wrapper.scope\n };\n }\n }\n return promises;\n }\n\n function updateDOM() {\n let promises = [];\n const toBePrepended = [];\n const toBeRemoved = [];\n const inserted = [];\n\n buffer.forEach((wrapper, i) => {\n switch (wrapper.op) {\n case 'prepend':\n toBePrepended.unshift(wrapper);\n break;\n case 'append':\n insertWrapperContent(wrapper, i);\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'insert':\n promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated));\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'remove':\n toBeRemoved.push(wrapper);\n }\n });\n\n toBeRemoved.forEach((wrapper) => promises = promises.concat(viewport.removeItem(wrapper)));\n\n if (toBePrepended.length)\n toBePrepended.forEach((wrapper) => {\n insertWrapperContent(wrapper);\n wrapper.op = 'none';\n });\n\n buffer.forEach((item, i) => item.scope.$index = buffer.first + i);\n\n return {\n prepended: toBePrepended,\n removed: toBeRemoved,\n inserted: inserted,\n animated: promises\n };\n\n }\n\n function updatePaddings(rid, updates) {\n // schedule another adjustBuffer after animation completion\n if (updates.animated.length) {\n $q.all(updates.animated).then(() => {\n viewport.adjustPaddings();\n adjustBuffer(rid);\n });\n } else {\n viewport.adjustPaddings();\n }\n }\n\n function enqueueFetch(rid, updates) {\n if (viewport.shouldLoadBottom()) {\n if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\n // this means that at least one item appended in the last batch has height > 0\n if (pending.push(true) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n } else if (viewport.shouldLoadTop()) {\n if ((!updates || buffer.effectiveHeight(updates.prepended) > 0) || pending[0]) {\n // this means that at least one item appended in the last batch has height > 0\n // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\n // BTW there will always be at least 1 element in the pending array because bottom is fetched first\n if (pending.push(false) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n }\n }\n\n function processUpdates() {\n const updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustments\n !$scope.$$phase && !$scope.$root.$$phase && $scope.$digest();\n\n updates.inserted.forEach(w => elementRoutines.showElement(w));\n updates.prepended.forEach(w => elementRoutines.showElement(w));\n return updates;\n }\n\n function adjustBuffer(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 adjustBufferAfterFetch(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 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.$$phase && $scope.$digest();\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"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap 3ddab4c41c0955d84bfb","webpack:///./src/modules/adapter.js","webpack:///./src/modules/buffer.js","webpack:///./src/modules/elementRoutines.js","webpack:///./src/modules/jqLiteExtras.js","webpack:///./src/modules/viewport.js","webpack:///./src/modules/padding.js","webpack:///./src/ui-scroll.js"],"names":["getCtrlOnData","attr","element","onSyntax","match","length","window","console","log","ctrl","tail","candidate","candidateScope","scope","candidateName","target","source","parent","Error","Adapter","viewport","buffer","adjustBuffer","reload","$attr","$parse","$scope","isLoading","disabled","viewportScope","getScope","startScope","$parent","publicContext","assignAdapter","adapter","generatePublicContext","adapterAttr","replace","ctrlOnData","adapterOnScope","assign","error","message","angular","extend","publicMethods","i","bind","publicProps","property","Object","defineProperty","get","set","value","bof","eof","newItems","append","clipTop","clipBottom","prepend","arg1","arg2","isFunction","applyUpdatesFunc","applyUpdatesIndex","cb","slice","forEach","wrapper","applyUpdate","item","index","first","isArray","position","indexOf","reverse","some","newItem","op","_op","insert","rowTop","topHeight","topDone","bottomDone","itemTop","offset","top","itemHeight","outerHeight","topDataPos","topVisiblePos","bottomVisiblePos","isEOF","ScrollBuffer","elementRoutines","bufferSize","create","Array","prototype","size","reset","startIndex","remove","next","minIndex","maxIndex","minIndexUser","maxIndexUser","items","Math","max","min","operation","isTop","splice","push","unshift","isNumber","removeElement","removeElementAnimated","effectiveHeight","elements","Number","MAX_VALUE","bottom","NEGATIVE_INFINITY","offsetParent","hideClassToken","addCSSRule","sheet","selector","rules","insertRule","addRule","ElementRoutines","$injector","$q","$animate","has","isAngularVersionLessThen1_3","version","major","minor","document","styleSheets","addClass","removeClass","newElement","previousElement","after","$destroy","insertElement","deferred","defer","enter","resolve","promise","leave","then","JQLiteExtras","convertToPx","css","getStyle","isWindow","name","self","elem","nodeType","style","call","obj","location","alert","setInterval","scrollTo","direction","left","method","prop","preserve","isDefined","documentElement","getComputedStyle","parseFloat","currentStyle","result","rs","rsLeft","core_pnum","rnumnonpx","RegExp","test","runtimeStyle","pixelLeft","getMeasurements","measure","base","borderA","borderB","computedMarginA","computedMarginB","computedStyle","dirA","dirB","marginA","marginB","paddingA","paddingB","height","width","padding","border","margin","offsetWidth","offsetHeight","getWidthHeight","measurements","outer","outerfull","before","newElem","children","j","ref","contents","outerHTML","option","outerWidth","docElem","win","box","doc","ownerDocument","arguments","undefined","getBoundingClientRect","defaultView","parentWindow","pageYOffset","scrollTop","clientTop","pageXOffset","scrollLeft","clientLeft","key","Viewport","viewportController","$rootScope","topPadding","bottomPadding","container","bufferPadding","createPaddingElements","template","applyContainerStyle","bottomDataPos","scrollHeight","e","sibling","insertElementAnimated","shouldLoadBottom","overage","overageHeight","emptySpaceHeight","cache","add","adjustPaddings","shouldLoadTop","topPaddingHeight","reduce","summ","bottomPaddingHeight","visibleItemsHeight","averageItemHeight","adjustTopPadding","adjustBottomPadding","topPaddingHeightAdd","bottomPaddingHeightAdd","onAfterMinIndexSet","topPaddingHeightOld","diff","onAfterPrepend","updates","prepended","paddingHeight","resetTopPadding","clear","resetBottomPadding","removeItem","Padding","CacheProto","$index","sort","a","b","itemToRemove","Cache","instance","apply","setPrototypeOf","getOwnPropertyNames","methodName","Node","ELEMENT_NODE","tagName","toLowerCase","table","find","module","service","run","jqLiteExtras","jQuery","registerFor","directive","restrict","controller","child","$timeout","require","transclude","priority","terminal","link","controllers","linker","uiScroll","parseNumericAttr","defaultValue","isNaN","BUFFER_MIN","BUFFER_DEFAULT","PADDING_MIN","PADDING_DEFAULT","datasource","itemName","datasourceName","ridActual","pending","isDatasourceValid","isObject","onRenderHandlers","onRenderHandlersRunner","handler","preDefineIndexProperty","propName","getter","hasOwnProperty","defineIndexProperty","propUserName","descriptor","getOwnPropertyDescriptor","fetchNext","success","count","fetchPrevious","clone","$on","unbindEvents","unbind","wheelHandler","isInvalid","rid","$$destroyed","bindEvents","resizeAndScrollHandler","isElementVisible","visibilityWatcher","unregisterVisibilityWatcher","insertWrapperContent","insertAfter","createElement","$watch","hideElement","promises","transform","tdInitializer","uiScrollTdInitializer","linking","onLink","updateDOM","toBePrepended","toBeRemoved","inserted","concat","removed","animated","updatePaddings","all","enqueueFetch","loading","fetch","processUpdates","$$phase","$digest","showElement","w","calculateProperties","adjustBufferAfterFetch","shift","event","yMax","clientHeight","preventDefault"],"mappings":"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","file":"ui-scroll.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 3ddab4c41c0955d84bfb","function getCtrlOnData(attr, element) {\r\n let onSyntax = attr.match(/^(.+)(\\s+on\\s+)(.+)?/);\r\n if (onSyntax && onSyntax.length === 4) {\r\n window.console.log('Angular ui-scroll adapter assignment warning. \"Controller On\" syntax has been deprecated since ui-scroll v1.6.1.');\r\n let ctrl = onSyntax[3];\r\n let tail = onSyntax[1];\r\n let candidate = element;\r\n while (candidate.length) {\r\n let candidateScope = candidate.scope(); // doesn't work when debugInfoEnabled flag = true\r\n let candidateName = (candidate.attr('ng-controller') || '').match(/(\\w(?:\\w|\\d)*)(?:\\s+as\\s+(\\w(?:\\w|\\d)*))?/);\r\n if (candidateName && candidateName[1] === ctrl) {\r\n return {\r\n target: candidateScope,\r\n source: tail\r\n };\r\n }\r\n candidate = candidate.parent();\r\n }\r\n throw new Error('Angular ui-scroll adapter assignment error. Failed to locate target controller \"' + ctrl + '\" to inject \"' + tail + '\"');\r\n }\r\n}\r\n\r\nclass Adapter {\r\n\r\n constructor(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope) {\r\n this.viewport = viewport;\r\n this.buffer = buffer;\r\n this.adjustBuffer = adjustBuffer;\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, $parse, element);\r\n this.generatePublicContext($attr, $parse);\r\n }\r\n\r\n assignAdapter(adapterAttr, $parse, element) {\r\n if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\\s+|\\s+$/gm, ''))) {\r\n return;\r\n }\r\n let ctrlOnData = getCtrlOnData(adapterAttr, element);\r\n let adapterOnScope;\r\n\r\n try {\r\n if (ctrlOnData) { // \"Controller On\", deprecated since v1.6.1\r\n $parse(ctrlOnData.source).assign(ctrlOnData.target, {});\r\n adapterOnScope = $parse(ctrlOnData.source)(ctrlOnData.target);\r\n }\r\n else {\r\n $parse(adapterAttr).assign(this.startScope, {});\r\n adapterOnScope = $parse(adapterAttr)(this.startScope);\r\n }\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($attr, $parse) {\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 = $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 $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.adjustBuffer() : 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.adjustBuffer();\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.adjustBuffer();\r\n this.viewport.clipTop();\r\n this.viewport.clipBottom();\r\n }\r\n\r\n applyUpdates(arg1, arg2) {\r\n if (angular.isFunction(arg1)) {\r\n this.applyUpdatesFunc(arg1);\r\n } else {\r\n this.applyUpdatesIndex(arg1, arg2);\r\n }\r\n this.adjustBuffer();\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) { // checking if it is an integer\r\n throw new Error('applyUpdates - ' + index + ' is not a valid index');\r\n }\r\n index -= this.buffer.first;\r\n if ((index >= 0 && index < this.buffer.length)) {\r\n this.applyUpdate(this.buffer[index], newItems);\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;\n\n\n// WEBPACK FOOTER //\n// ./src/modules/adapter.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, 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\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') {\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 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 return buffer;\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/buffer.js","const hideClassToken = 'ng-ui-scroll-hide';\r\n\r\nfunction addCSSRule(sheet, selector, rules, index) {\r\n if('insertRule' in sheet) {\r\n sheet.insertRule(selector + '{' + rules + '}', index);\r\n }\r\n else if('addRule' in sheet) {\r\n sheet.addRule(selector, rules, index);\r\n }\r\n}\r\n\r\nexport default class ElementRoutines {\r\n\r\n constructor($injector, $q) {\r\n this.$animate = ($injector.has && $injector.has('$animate')) ? $injector.get('$animate') : null;\r\n this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3;\r\n this.$q = $q;\r\n addCSSRule(document.styleSheets[0], '.' + hideClassToken, 'display: none');\r\n }\r\n\r\n hideElement(wrapper) {\r\n wrapper.element.addClass(hideClassToken);\r\n }\r\n\r\n showElement(wrapper) {\r\n wrapper.element.removeClass(hideClassToken);\r\n }\r\n\r\n insertElement(newElement, previousElement) {\r\n previousElement.after(newElement);\r\n return [];\r\n }\r\n\r\n removeElement(wrapper) {\r\n wrapper.element.remove();\r\n wrapper.scope.$destroy();\r\n return [];\r\n }\r\n\r\n insertElementAnimated(newElement, previousElement) {\r\n if (!this.$animate) {\r\n return this.insertElement(newElement, previousElement);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n // no need for parent - previous element is never null\r\n this.$animate.enter(newElement, null, previousElement, () => deferred.resolve());\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n // no need for parent - previous element is never null\r\n return [this.$animate.enter(newElement, null, previousElement)];\r\n }\r\n\r\n removeElementAnimated(wrapper) {\r\n if (!this.$animate) {\r\n return this.removeElement(wrapper);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n this.$animate.leave(wrapper.element, () => {\r\n wrapper.scope.$destroy();\r\n return deferred.resolve();\r\n });\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n return [(this.$animate.leave(wrapper.element)).then(() => wrapper.scope.$destroy())];\r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/elementRoutines.js","/*!\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","import Padding from './padding';\r\n\r\nexport default function Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding) {\r\n let topPadding = null;\r\n let bottomPadding = null;\r\n const viewport = viewportController && viewportController.viewport ? viewportController.viewport : angular.element(window);\r\n const container = viewportController && viewportController.container ? viewportController.container : undefined;\r\n const scope = viewportController && viewportController.scope ? viewportController.scope : $rootScope;\r\n\r\n viewport.css({\r\n 'overflow-anchor': 'none',\r\n 'overflow-y': 'auto',\r\n 'display': 'block'\r\n });\r\n\r\n function bufferPadding() {\r\n return viewport.outerHeight() * padding; // some extra space to initiate preload\r\n }\r\n\r\n angular.extend(viewport, {\r\n getScope() {\r\n return scope;\r\n },\r\n\r\n createPaddingElements(template) {\r\n topPadding = new Padding(template);\r\n bottomPadding = new Padding(template);\r\n element.before(topPadding);\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.adjustPaddings();\r\n }\r\n },\r\n\r\n shouldLoadTop() {\r\n return !buffer.bof && (viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding());\r\n },\r\n\r\n clipTop() {\r\n // clip the invisible items off the top\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\r\n\r\n for (let i = 0; i < buffer.length; i++) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n topPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n // we need to adjust top padding element before items are removed from top\r\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\r\n topPadding.height(topPadding.height() + overageHeight);\r\n buffer.bof = false;\r\n buffer.remove(0, overage);\r\n buffer.first += overage;\r\n }\r\n },\r\n\r\n adjustPaddings() {\r\n if (!buffer.length) {\r\n return;\r\n }\r\n\r\n // precise heights calculation, 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 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 diff -= viewport.scrollTop();\r\n if(diff > 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 removeItem(item) {\r\n topPadding.cache.remove(item);\r\n bottomPadding.cache.remove(item);\r\n return buffer.remove(item);\r\n }\r\n });\r\n\r\n return viewport;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/viewport.js","// Can't just extend the Array, due to Babel does not support built-in classes extending\r\n// This solution was taken from https://stackoverflow.com/questions/46897414/es6-class-extends-array-workaround-for-es5-babel-transpile\r\nclass CacheProto {\r\n add(item) {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index === item.scope.$index) {\r\n this[i].height = item.element.outerHeight();\r\n return;\r\n }\r\n }\r\n this.push({\r\n index: item.scope.$index,\r\n height: item.element.outerHeight()\r\n });\r\n this.sort((a, b) => ((a.index < b.index) ? -1 : ((a.index > b.index) ? 1 : 0)));\r\n }\r\n\r\n remove(itemToRemove) {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index === itemToRemove.scope.$index) {\r\n this.splice(i, 1);\r\n break;\r\n }\r\n }\r\n if(itemToRemove._op !== 'isTop') {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index > itemToRemove.scope.$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\nexport default function Padding(template) {\r\n let result;\r\n\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\r\n switch (template.tagName.toLowerCase()) {\r\n case 'dl':\r\n throw new Error(`ui-scroll directive does not support <${template.tagName}> as a repeating tag: ${template.outerHTML}`);\r\n case 'tr':\r\n let table = angular.element('
    ');\r\n result = table.find('tr');\r\n break;\r\n case 'li':\r\n result = angular.element('
  • ');\r\n break;\r\n default:\r\n result = angular.element('
    ');\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","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 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 '$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, $rootScope, padding);\n let adapter = new Adapter(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope);\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 onRenderHandlers = [];\n function onRenderHandlersRunner() {\n if(onRenderHandlers.length) {\n angular.forEach(onRenderHandlers, (handler) => handler());\n onRenderHandlers = [];\n }\n }\n function preDefineIndexProperty(datasource, propName) {\n let getter;\n // need to postpone min/maxIndexUser processing if the view is empty\n if(datasource.hasOwnProperty(propName) && !buffer.length) {\n getter = datasource[propName];\n delete datasource[propName];\n onRenderHandlers.push(() => datasource[propName] = getter);\n }\n }\n\n function defineIndexProperty(datasource, propName, propUserName) {\n let descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n if (descriptor && (descriptor.set || descriptor.get)) {\n return;\n }\n let getter;\n preDefineIndexProperty(datasource, propName);\n Object.defineProperty(datasource, propName, {\n set: (value) => {\n getter = value;\n buffer[propUserName] = value;\n let topPaddingHeightOld = viewport.topDataPos();\n viewport.adjustPaddings();\n if (propName === 'minIndex') {\n viewport.onAfterMinIndexSet(topPaddingHeightOld);\n }\n },\n get: () => getter\n });\n }\n\n defineIndexProperty(datasource, 'minIndex', 'minIndexUser');\n defineIndexProperty(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 /**\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 if (!pending.length) {\n $timeout(() => adjustBuffer());\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 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 // ui-scroll-grid apply\n if (adapter.transform) {\n let tdInitializer = wrapper.scope.uiScrollTdInitializer;\n if (tdInitializer && tdInitializer.linking) {\n adapter.transform(wrapper.scope, wrapper.element);\n } else {\n wrapper.scope.uiScrollTdInitializer = {\n onLink: () => adapter.transform(wrapper.scope, wrapper.element),\n scope: wrapper.scope\n };\n }\n }\n return promises;\n }\n\n function updateDOM() {\n let promises = [];\n const toBePrepended = [];\n const toBeRemoved = [];\n const inserted = [];\n\n buffer.forEach((wrapper, i) => {\n switch (wrapper.op) {\n case 'prepend':\n toBePrepended.unshift(wrapper);\n break;\n case 'append':\n insertWrapperContent(wrapper, i);\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'insert':\n promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated));\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'remove':\n toBeRemoved.push(wrapper);\n }\n });\n\n toBeRemoved.forEach((wrapper) => promises = promises.concat(viewport.removeItem(wrapper)));\n\n if (toBePrepended.length)\n toBePrepended.forEach((wrapper) => {\n insertWrapperContent(wrapper);\n wrapper.op = 'none';\n });\n\n buffer.forEach((item, i) => item.scope.$index = buffer.first + i);\n\n return {\n prepended: toBePrepended,\n removed: toBeRemoved,\n inserted: inserted,\n animated: promises\n };\n\n }\n\n function updatePaddings(rid, updates) {\n // schedule another adjustBuffer after animation completion\n if (updates.animated.length) {\n $q.all(updates.animated).then(() => {\n viewport.adjustPaddings();\n adjustBuffer(rid);\n });\n } else {\n viewport.adjustPaddings();\n }\n }\n\n function enqueueFetch(rid, updates) {\n if (viewport.shouldLoadBottom()) {\n if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\n // this means that at least one item appended in the last batch has height > 0\n if (pending.push(true) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n } else if (viewport.shouldLoadTop()) {\n if ((!updates || buffer.effectiveHeight(updates.prepended) > 0) || pending[0]) {\n // this means that at least one item appended in the last batch has height > 0\n // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\n // BTW there will always be at least 1 element in the pending array because bottom is fetched first\n if (pending.push(false) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n }\n }\n\n function processUpdates() {\n const updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustments\n !$scope.$$phase && !$rootScope.$$phase && $scope.$digest();\n\n updates.inserted.forEach(w => elementRoutines.showElement(w));\n updates.prepended.forEach(w => elementRoutines.showElement(w));\n return updates;\n }\n\n function adjustBuffer(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 adjustBufferAfterFetch(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 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.$$phase && $scope.$digest();\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"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/ui-scroll.min.js b/dist/ui-scroll.min.js index 5dc745eb..ffbea4c9 100644 --- a/dist/ui-scroll.min.js +++ b/dist/ui-scroll.min.js @@ -1,8 +1,8 @@ /*! * angular-ui-scroll (compressed) * https://github.com/angular-ui/ui-scroll - * Version: 1.7.0-rc.4 -- 2017-10-27T14:30:17.370Z + * Version: 1.7.0-rc.4 -- 2017-10-27T14:37:56.068Z * License: MIT */ -!function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=7)}([function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){var n=e.match(/^(.+)(\s+on\s+)(.+)?/);if(n&&4===n.length){window.console.log('Angular ui-scroll adapter assignment warning. "Controller On" syntax has been deprecated since ui-scroll v1.6.1.');for(var r=n[3],i=n[1],o=t;o.length;){var a=o.scope(),u=(o.attr("ng-controller")||"").match(/(\w(?:\w|\d)*)(?:\s+as\s+(\w(?:\w|\d)*))?/);if(u&&u[1]===r)return{target:a,source:i};o=o.parent()}throw new Error('Angular ui-scroll adapter assignment error. Failed to locate target controller "'+r+'" to inject "'+i+'"')}}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n=0;i--)this.publicContext[r[i]]=this[r[i]].bind(this);for(var o=["isLoading","topVisible","topVisibleElement","topVisibleScope","bottomVisible","bottomVisibleElement","bottomVisibleScope"],a=o.length-1;a>=0;a--)!function(r){var i=void 0,a=e[o[r]];Object.defineProperty(n,o[r],{get:function(){return i},set:function(e){i=e,n.publicContext[o[r]]=e,a&&t(a).assign(n.startScope,e)}})}(a);Object.defineProperty(this.publicContext,"disabled",{get:function(){return n.disabled},set:function(e){return(n.disabled=e)?null:n.adjustBuffer()}})}},{key:"loading",value:function(e){this.isLoading=e}},{key:"isBOF",value:function(){return this.buffer.bof}},{key:"isEOF",value:function(){return this.buffer.eof}},{key:"isEmpty",value:function(){return!this.buffer.length}},{key:"append",value:function(e){this.buffer.append(e),this.adjustBuffer(),this.viewport.clipTop(),this.viewport.clipBottom()}},{key:"prepend",value:function(e){this.buffer.prepend(e),this.adjustBuffer(),this.viewport.clipTop(),this.viewport.clipBottom()}},{key:"applyUpdates",value:function(e,t){angular.isFunction(e)?this.applyUpdatesFunc(e):this.applyUpdatesIndex(e,t),this.adjustBuffer()}},{key:"applyUpdatesFunc",value:function(e){var t=this;this.buffer.slice(0).forEach(function(n){t.applyUpdate(n,e(n.item,n.scope,n.element))})}},{key:"applyUpdatesIndex",value:function(e,t){if(e%1!=0)throw new Error("applyUpdates - "+e+" is not a valid index");(e-=this.buffer.first)>=0&&ethis.viewport.topVisiblePos()&&(n=!0,this.topVisible=a.item,this.topVisibleElement=a.element,this.topVisibleScope=a.scope),!r&&(l>=this.viewport.bottomVisiblePos()||o===i-1&&this.isEOF())&&(r=!0,this.bottomVisible=a.item,this.bottomVisibleElement=a.element,this.bottomVisibleScope=a.scope),t+=s}if(e=u,n&&r)break}}}]),e}();t.default=a},function(e,t,n){"use strict";function r(e,t){var n=Object.create(Array.prototype);return angular.extend(n,{size:t,reset:function(e){n.remove(0,n.length),n.eof=!1,n.bof=!1,n.first=e,n.next=e,n.minIndex=e,n.maxIndex=e,n.minIndexUser=null,n.maxIndexUser=null},append:function(e){e.forEach(function(e){++n.next,n.insert("append",e)}),n.maxIndex=n.eof?n.next-1:Math.max(n.next-1,n.maxIndex)},prepend:function(e){e.reverse().forEach(function(e){--n.first,n.insert("prepend",e)}),n.minIndex=n.bof?n.minIndex=n.first:Math.min(n.first,n.minIndex)},insert:function(e,t,r){var i={item:t};if(e%1==0)i.op="insert",n.splice(e,0,i),r?n.first--:n.next++;else switch(i.op=e,e){case"append":n.push(i);break;case"prepend":n.unshift(i)}},remove:function(t,r){if(angular.isNumber(t)){for(var i=t;i0?{base:a.base-a.padding-a.border,outer:a.base,outerfull:a.base+a.margin}[r]:(i=u(e),o=i[t],(o<0||null===o)&&(o=e.style[t]||0),o=parseFloat(o)||0,{base:o-a.padding-a.border,outer:o,outerfull:o+a.padding+a.border+a.margin}[r])}var o=void 0,a=void 0,u=void 0,s=void 0;return a=angular.element.prototype.css,e.prototype.css=function(e,t){var n=this,r=n[0];if(r&&3!==r.nodeType&&8!==r.nodeType&&r.style)return a.call(n,e,t)},s=function(e){return e&&e.document&&e.location&&e.alert&&e.setInterval},window.getComputedStyle?(u=function(e){return window.getComputedStyle(e,null)},o=function(e,t){return parseFloat(t)}):(u=function(e){return e.currentStyle},o=function(e,t){var n=void 0,r=void 0,i=void 0,o=void 0,a=void 0,u=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source;return new RegExp("^("+u+")(?!px)[a-z%]+$","i").test(t)?(a=e.style,n=a.left,i=e.runtimeStyle,o=i&&i.left,i&&(i.left=a.left),a.left=t,r=a.pixelLeft,a.left=n,o&&(i.left=o),r):parseFloat(t)}),angular.forEach({before:function(e){var t,n,r,i,o,a,u;if(u=this,n=u[0],o=u.parent(),t=o.contents(),t[0]===n)return o.prepend(e);for(r=i=1,a=t.length-1;1<=a?i<=a:i>=a;r=1<=a?++i:--i)if(t[r]===n)return void angular.element(t[r-1]).after(e);throw new Error("invalid DOM structure "+n.outerHTML)},height:function(e){var t;return t=this,angular.isDefined(e)?(angular.isNumber(e)&&(e+="px"),a.call(t,"height",e)):r(this[0],"height","base")},outerHeight:function(e){return r(this[0],"height",e?"outerfull":"outer")},outerWidth:function(e){return r(this[0],"width",e?"outerfull":"outer")},offset:function(e){var t=void 0,n=void 0,r=this,i={top:0,left:0},o=r[0],a=o&&o.ownerDocument;if(arguments.length){if(void 0===e)return r;throw new Error("offset setter method is not implemented")}if(a)return t=a.documentElement,null!=o.getBoundingClientRect&&(i=o.getBoundingClientRect()),n=a.defaultView||a.parentWindow,{top:i.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0),left:i.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)}},scrollTop:function(e){return t(this,"top",e)},scrollLeft:function(e){return t(this,"left",e)}},function(t,n){if(!e.prototype[n])return e.prototype[n]=t})}}]),e}();t.default=a},function(e,t,n){"use strict";function r(e,t,n,r,i,a){function u(){return c.outerHeight()*a}var s=null,l=null,c=r&&r.viewport?r.viewport:angular.element(window),f=r&&r.container?r.container:void 0,d=r&&r.scope?r.scope:i;return c.css({"overflow-anchor":"none","overflow-y":"auto",display:"block"}),angular.extend(c,{getScope:function(){return d},createPaddingElements:function(e){s=new o.default(e),l=new o.default(e),n.before(s),n.after(l)},applyContainerStyle:function(){f&&f!==c&&c.css("height",window.getComputedStyle(f[0]).height)},bottomDataPos:function(){var e=c[0].scrollHeight;return(e=null!=e?e:c[0].document.documentElement.scrollHeight)-l.height()},topDataPos:function(){return s.height()},bottomVisiblePos:function(){return c.scrollTop()+c.outerHeight()},topVisiblePos:function(){return c.scrollTop()},insertElement:function(t,n){return e.insertElement(t,n||s)},insertElementAnimated:function(t,n){return e.insertElementAnimated(t,n||s)},shouldLoadBottom:function(){return!t.eof&&c.bottomDataPos()=0&&(r=t[o].element.outerHeight(!0),!(n+r>i));o--)l.cache.add(t[o]),n+=r,e++;e>0&&(t.eof=!1,t.remove(t.length-e,t.length),t.next-=e,c.adjustPaddings())},shouldLoadTop:function(){return!t.bof&&c.topDataPos()>c.topVisiblePos()-u()},clipTop:function(){for(var e=0,n=0,r=0,i=c.topVisiblePos()-c.topDataPos()-u(),o=0;oi));o++)s.cache.add(t[o]),n+=r,e++;e>0&&(s.height(s.height()+n),t.bof=!1,t.remove(0,e),t.first+=e)},adjustPaddings:function(){if(t.length){var e=s.cache.reduce(function(e,n){return e+(n.index=t.next?n.height:0)},0),r=t.reduce(function(e,t){return e+t.element.outerHeight(!0)},0),i=(r+e+n)/(t.maxIndex-t.minIndex+1),o=null!==t.minIndexUser&&t.minIndex>t.minIndexUser,a=null!==t.maxIndexUser&&t.maxIndext.minIndexUser){var n=s.height()-e;c.scrollTop(c.scrollTop()+n),n-=c.scrollTop(),n>0&&(l.height(l.height()+n),c.scrollTop(c.scrollTop()+n))}},onAfterPrepend:function(e){if(e.prepended.length){var n=t.effectiveHeight(e.prepended),r=s.height()-n;r>=0?s.height(r):(s.height(0),c.scrollTop(c.scrollTop()-r))}},resetTopPadding:function(){s.height(0),s.cache.clear()},resetBottomPadding:function(){l.height(0),l.cache.clear()},removeItem:function(e){return s.cache.remove(e),l.cache.remove(e),t.remove(e)}}),c}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r;var i=n(5),o=function(e){return e&&e.__esModule?e:{default:e}}(i)},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(){var e=[];return e.push.apply(e,arguments),Object.setPrototypeOf(e,i.prototype),e}function o(e){var t=void 0;if(e.nodeType!==Node.ELEMENT_NODE)throw new Error("ui-scroll directive requires an Element node for templating the view");switch(e.tagName.toLowerCase()){case"dl":throw new Error("ui-scroll directive does not support <"+e.tagName+"> as a repeating tag: "+e.outerHTML);case"tr":t=angular.element("
    ").find("tr");break;case"li":t=angular.element("
  • ");break;default:t=angular.element("
    ")}return t.cache=new i,t}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n=0;t--)if(this[t].index===e.scope.$index)return void(this[t].height=e.element.outerHeight());this.push({index:e.scope.$index,height:e.element.outerHeight()}),this.sort(function(e,t){return e.indext.index?1:0})}},{key:"remove",value:function(e){for(var t=this.length-1;t>=0;t--)if(this[t].index===e.scope.$index){this.splice(t,1);break}if("isTop"!==e._op)for(var n=this.length-1;n>=0;n--)this[n].index>e.scope.$index&&this[n].index--}},{key:"clear",value:function(){this.length=0}}]),e}();i.prototype=Object.create(Array.prototype),Object.getOwnPropertyNames(u.prototype).forEach(function(e){return i.prototype[e]=u.prototype[e]})},,function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(3),o=r(i),a=n(2),u=r(a),s=n(1),l=r(s),c=n(4),f=r(c),d=n(0),p=r(d);angular.module("ui.scroll",[]).service("jqLiteExtras",function(){return new o.default}).run(["jqLiteExtras",function(e){return window.jQuery?null:e.registerFor(angular.element)}]).directive("uiScrollViewport",function(){return{restrict:"A",controller:["$scope","$element",function(e,t){var n=this;return this.container=t,this.viewport=t,this.scope=e,angular.forEach(t.children(),function(e){"tbody"===e.tagName.toLowerCase()&&(n.viewport=angular.element(e))}),this}]}}).directive("uiScroll",["$log","$injector","$rootScope","$timeout","$q","$parse",function(e,t,n,r,i,o){function a(e,a,s,c,d){function h(t,n){var r=o(t)(e);return isNaN(r)?n:r}function m(){Q.length&&(angular.forEach(Q,function(e){return e()}),Q=[])}function g(e,t){var n=void 0;e.hasOwnProperty(t)&&!z.length&&(n=e[t],delete e[t],Q.push(function(){return e[t]=n}))}function v(e,t,n){var r=Object.getOwnPropertyDescriptor(e,t);if(!r||!r.set&&!r.get){var i=void 0;g(e,t),Object.defineProperty(e,t,{set:function(e){i=e,z[n]=e;var r=X.topDataPos();X.adjustPaddings(),"minIndex"===t&&X.onAfterMinIndexSet(r)},get:function(){return i}})}}function b(t){return t&&t!==W||e.$$destroyed}function y(){X.bind("resize",A),X.bind("scroll",A)}function x(){X.unbind("resize",A),X.unbind("scroll",A)}function w(){X.resetTopPadding(),X.resetBottomPadding(),arguments.length&&(N=arguments[0]),z.reset(N),S()}function E(e){return e.element.height()&&e.element[0].offsetParent}function P(e){E(e)&&(z.forEach(function(e){angular.isFunction(e.unregisterVisibilityWatcher)&&(e.unregisterVisibilityWatcher(),delete e.unregisterVisibilityWatcher)}),q.length||r(function(){return S()}))}function $(e,t){T(e,t,X.insertElement),E(e)||(e.unregisterVisibilityWatcher=e.scope.$watch(function(){return P(e)})),R.hideElement(e)}function T(e,t,n){var r=null,i=t>0?z[t-1].element:void 0;if(d(function(t,o){r=n(t,i),e.element=t,e.scope=o,o[U]=e.item}),Y.transform){var o=e.scope.uiScrollTdInitializer;o&&o.linking?Y.transform(e.scope,e.element):e.scope.uiScrollTdInitializer={onLink:function(){return Y.transform(e.scope,e.element)},scope:e.scope}}return r}function I(){var e=[],t=[],n=[],r=[];return z.forEach(function(i,o){switch(i.op){case"prepend":t.unshift(i);break;case"append":$(i,o),i.op="none",r.push(i);break;case"insert":e=e.concat(T(i,o,X.insertElementAnimated)),i.op="none",r.push(i);break;case"remove":n.push(i)}}),n.forEach(function(t){return e=e.concat(X.removeItem(t))}),t.length&&t.forEach(function(e){$(e),e.op="none"}),z.forEach(function(e,t){return e.scope.$index=z.first+t}),{prepended:t,removed:n,inserted:r,animated:e}}function O(e,t){t.animated.length?i.all(t.animated).then(function(){X.adjustPaddings(),S(e)}):X.adjustPaddings()}function k(e,t){X.shouldLoadBottom()?(!t||z.effectiveHeight(t.inserted)>0)&&1===q.push(!0)&&(Y.loading(!0),_(e)):X.shouldLoadTop()&&(!t||z.effectiveHeight(t.prepended)>0||q[0])&&1===q.push(!1)&&(Y.loading(!0),_(e))}function j(){var t=I();return!e.$$phase&&!e.$root.$$phase&&e.$digest(),t.inserted.forEach(function(e){return R.showElement(e)}),t.prepended.forEach(function(e){return R.showElement(e)}),t}function S(e){e||(q=[],e=++W);var t=j();b(e)||(O(e,t),k(e),q.length||Y.calculateProperties())}function V(e){var t=j();X.onAfterPrepend(t),b(e)||(O(e,t),m(),k(e,t),q.shift(),q.length?_(e):(Y.loading(!1),y(),Y.calculateProperties()))}function _(e){q[0]?z.length&&!X.shouldLoadBottom()?V(e):J(function(t){b(e)||(t.length0&&(X.clipTop(),z.append(t)),V(e))}):z.length&&!X.shouldLoadTop()?V(e):K(function(t){b(e)||(t.length0&&(z.length&&X.clipBottom(),z.prepend(t)),V(e))})}function A(){n.$$phase||Y.isLoading||Y.disabled||(k(W),q.length?x():(Y.calculateProperties(),!e.$$phase&&e.$digest()))}function L(e){if(!Y.disabled){var t=X[0].scrollTop,n=X[0].scrollHeight-X[0].clientHeight;(0===t&&!z.bof||t===n&&!z.eof)&&e.preventDefault()}}var C=s.uiScroll.match(/^\s*(\w+)\s+in\s+([(\w|\$)\.]+)\s*$/);if(!C)throw new Error("Expected uiScroll in form of '_item_ in _datasource_' but got '"+s.uiScroll+"'");var M=null,U=C[1],H=C[2],B=c[0],F=Math.max(3,h(s.bufferSize,10)),D=Math.max(.3,h(s.padding,.5)),N=h(s.startIndex,1),W=0,q=[],R=new u.default(t,i),z=new l.default(R,F),X=new f.default(R,z,a,B,n,D),Y=new p.default(X,z,S,w,s,o,a,e);B&&(B.adapter=Y);var G=function(){return angular.isObject(M)&&angular.isFunction(M.get)};if(M=o(H)(e),!G()&&(M=t.get(H),!G()))throw new Error(H+" is not a valid datasource");var Q=[];v(M,"minIndex","minIndexUser"),v(M,"maxIndex","maxIndexUser");var J=2!==M.get.length?function(e){return M.get(z.next,F,e)}:function(e){M.get({index:z.next,append:z.length?z[z.length-1].item:void 0,count:F},e)},K=2!==M.get.length?function(e){return M.get(z.first-F,F,e)}:function(e){M.get({index:z.first-F,prepend:z.length?z[0].item:void 0,count:F},e)};d(function(e,t){X.createPaddingElements(e[0]),t.$destroy(),e.remove()}),e.$on("$destroy",function(){x(),X.unbind("mousewheel",L)}),X.bind("mousewheel",L),r(function(){X.applyContainerStyle(),w()})}return{require:["?^uiScrollViewport"],restrict:"A",transclude:"element",priority:1e3,terminal:!0,link:a}}])}]); +!function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=7)}([function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){var n=e.match(/^(.+)(\s+on\s+)(.+)?/);if(n&&4===n.length){window.console.log('Angular ui-scroll adapter assignment warning. "Controller On" syntax has been deprecated since ui-scroll v1.6.1.');for(var r=n[3],i=n[1],o=t;o.length;){var a=o.scope(),u=(o.attr("ng-controller")||"").match(/(\w(?:\w|\d)*)(?:\s+as\s+(\w(?:\w|\d)*))?/);if(u&&u[1]===r)return{target:a,source:i};o=o.parent()}throw new Error('Angular ui-scroll adapter assignment error. Failed to locate target controller "'+r+'" to inject "'+i+'"')}}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n=0;i--)this.publicContext[r[i]]=this[r[i]].bind(this);for(var o=["isLoading","topVisible","topVisibleElement","topVisibleScope","bottomVisible","bottomVisibleElement","bottomVisibleScope"],a=o.length-1;a>=0;a--)!function(r){var i=void 0,a=e[o[r]];Object.defineProperty(n,o[r],{get:function(){return i},set:function(e){i=e,n.publicContext[o[r]]=e,a&&t(a).assign(n.startScope,e)}})}(a);Object.defineProperty(this.publicContext,"disabled",{get:function(){return n.disabled},set:function(e){return(n.disabled=e)?null:n.adjustBuffer()}})}},{key:"loading",value:function(e){this.isLoading=e}},{key:"isBOF",value:function(){return this.buffer.bof}},{key:"isEOF",value:function(){return this.buffer.eof}},{key:"isEmpty",value:function(){return!this.buffer.length}},{key:"append",value:function(e){this.buffer.append(e),this.adjustBuffer(),this.viewport.clipTop(),this.viewport.clipBottom()}},{key:"prepend",value:function(e){this.buffer.prepend(e),this.adjustBuffer(),this.viewport.clipTop(),this.viewport.clipBottom()}},{key:"applyUpdates",value:function(e,t){angular.isFunction(e)?this.applyUpdatesFunc(e):this.applyUpdatesIndex(e,t),this.adjustBuffer()}},{key:"applyUpdatesFunc",value:function(e){var t=this;this.buffer.slice(0).forEach(function(n){t.applyUpdate(n,e(n.item,n.scope,n.element))})}},{key:"applyUpdatesIndex",value:function(e,t){if(e%1!=0)throw new Error("applyUpdates - "+e+" is not a valid index");(e-=this.buffer.first)>=0&&ethis.viewport.topVisiblePos()&&(n=!0,this.topVisible=a.item,this.topVisibleElement=a.element,this.topVisibleScope=a.scope),!r&&(l>=this.viewport.bottomVisiblePos()||o===i-1&&this.isEOF())&&(r=!0,this.bottomVisible=a.item,this.bottomVisibleElement=a.element,this.bottomVisibleScope=a.scope),t+=s}if(e=u,n&&r)break}}}]),e}();t.default=a},function(e,t,n){"use strict";function r(e,t){var n=Object.create(Array.prototype);return angular.extend(n,{size:t,reset:function(e){n.remove(0,n.length),n.eof=!1,n.bof=!1,n.first=e,n.next=e,n.minIndex=e,n.maxIndex=e,n.minIndexUser=null,n.maxIndexUser=null},append:function(e){e.forEach(function(e){++n.next,n.insert("append",e)}),n.maxIndex=n.eof?n.next-1:Math.max(n.next-1,n.maxIndex)},prepend:function(e){e.reverse().forEach(function(e){--n.first,n.insert("prepend",e)}),n.minIndex=n.bof?n.minIndex=n.first:Math.min(n.first,n.minIndex)},insert:function(e,t,r){var i={item:t};if(e%1==0)i.op="insert",n.splice(e,0,i),r?n.first--:n.next++;else switch(i.op=e,e){case"append":n.push(i);break;case"prepend":n.unshift(i)}},remove:function(t,r){if(angular.isNumber(t)){for(var i=t;i0?{base:a.base-a.padding-a.border,outer:a.base,outerfull:a.base+a.margin}[r]:(i=u(e),o=i[t],(o<0||null===o)&&(o=e.style[t]||0),o=parseFloat(o)||0,{base:o-a.padding-a.border,outer:o,outerfull:o+a.padding+a.border+a.margin}[r])}var o=void 0,a=void 0,u=void 0,s=void 0;return a=angular.element.prototype.css,e.prototype.css=function(e,t){var n=this,r=n[0];if(r&&3!==r.nodeType&&8!==r.nodeType&&r.style)return a.call(n,e,t)},s=function(e){return e&&e.document&&e.location&&e.alert&&e.setInterval},window.getComputedStyle?(u=function(e){return window.getComputedStyle(e,null)},o=function(e,t){return parseFloat(t)}):(u=function(e){return e.currentStyle},o=function(e,t){var n=void 0,r=void 0,i=void 0,o=void 0,a=void 0,u=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source;return new RegExp("^("+u+")(?!px)[a-z%]+$","i").test(t)?(a=e.style,n=a.left,i=e.runtimeStyle,o=i&&i.left,i&&(i.left=a.left),a.left=t,r=a.pixelLeft,a.left=n,o&&(i.left=o),r):parseFloat(t)}),angular.forEach({before:function(e){var t,n,r,i,o,a,u;if(u=this,n=u[0],o=u.parent(),t=o.contents(),t[0]===n)return o.prepend(e);for(r=i=1,a=t.length-1;1<=a?i<=a:i>=a;r=1<=a?++i:--i)if(t[r]===n)return void angular.element(t[r-1]).after(e);throw new Error("invalid DOM structure "+n.outerHTML)},height:function(e){var t;return t=this,angular.isDefined(e)?(angular.isNumber(e)&&(e+="px"),a.call(t,"height",e)):r(this[0],"height","base")},outerHeight:function(e){return r(this[0],"height",e?"outerfull":"outer")},outerWidth:function(e){return r(this[0],"width",e?"outerfull":"outer")},offset:function(e){var t=void 0,n=void 0,r=this,i={top:0,left:0},o=r[0],a=o&&o.ownerDocument;if(arguments.length){if(void 0===e)return r;throw new Error("offset setter method is not implemented")}if(a)return t=a.documentElement,null!=o.getBoundingClientRect&&(i=o.getBoundingClientRect()),n=a.defaultView||a.parentWindow,{top:i.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0),left:i.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)}},scrollTop:function(e){return t(this,"top",e)},scrollLeft:function(e){return t(this,"left",e)}},function(t,n){if(!e.prototype[n])return e.prototype[n]=t})}}]),e}();t.default=a},function(e,t,n){"use strict";function r(e,t,n,r,i,a){function u(){return c.outerHeight()*a}var s=null,l=null,c=r&&r.viewport?r.viewport:angular.element(window),f=r&&r.container?r.container:void 0,d=r&&r.scope?r.scope:i;return c.css({"overflow-anchor":"none","overflow-y":"auto",display:"block"}),angular.extend(c,{getScope:function(){return d},createPaddingElements:function(e){s=new o.default(e),l=new o.default(e),n.before(s),n.after(l)},applyContainerStyle:function(){f&&f!==c&&c.css("height",window.getComputedStyle(f[0]).height)},bottomDataPos:function(){var e=c[0].scrollHeight;return(e=null!=e?e:c[0].document.documentElement.scrollHeight)-l.height()},topDataPos:function(){return s.height()},bottomVisiblePos:function(){return c.scrollTop()+c.outerHeight()},topVisiblePos:function(){return c.scrollTop()},insertElement:function(t,n){return e.insertElement(t,n||s)},insertElementAnimated:function(t,n){return e.insertElementAnimated(t,n||s)},shouldLoadBottom:function(){return!t.eof&&c.bottomDataPos()=0&&(r=t[o].element.outerHeight(!0),!(n+r>i));o--)l.cache.add(t[o]),n+=r,e++;e>0&&(t.eof=!1,t.remove(t.length-e,t.length),t.next-=e,c.adjustPaddings())},shouldLoadTop:function(){return!t.bof&&c.topDataPos()>c.topVisiblePos()-u()},clipTop:function(){for(var e=0,n=0,r=0,i=c.topVisiblePos()-c.topDataPos()-u(),o=0;oi));o++)s.cache.add(t[o]),n+=r,e++;e>0&&(s.height(s.height()+n),t.bof=!1,t.remove(0,e),t.first+=e)},adjustPaddings:function(){if(t.length){var e=s.cache.reduce(function(e,n){return e+(n.index=t.next?n.height:0)},0),r=t.reduce(function(e,t){return e+t.element.outerHeight(!0)},0),i=(r+e+n)/(t.maxIndex-t.minIndex+1),o=null!==t.minIndexUser&&t.minIndex>t.minIndexUser,a=null!==t.maxIndexUser&&t.maxIndext.minIndexUser){var n=s.height()-e;c.scrollTop(c.scrollTop()+n),n-=c.scrollTop(),n>0&&(l.height(l.height()+n),c.scrollTop(c.scrollTop()+n))}},onAfterPrepend:function(e){if(e.prepended.length){var n=t.effectiveHeight(e.prepended),r=s.height()-n;r>=0?s.height(r):(s.height(0),c.scrollTop(c.scrollTop()-r))}},resetTopPadding:function(){s.height(0),s.cache.clear()},resetBottomPadding:function(){l.height(0),l.cache.clear()},removeItem:function(e){return s.cache.remove(e),l.cache.remove(e),t.remove(e)}}),c}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r;var i=n(5),o=function(e){return e&&e.__esModule?e:{default:e}}(i)},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(){var e=[];return e.push.apply(e,arguments),Object.setPrototypeOf(e,i.prototype),e}function o(e){var t=void 0;if(e.nodeType!==Node.ELEMENT_NODE)throw new Error("ui-scroll directive requires an Element node for templating the view");switch(e.tagName.toLowerCase()){case"dl":throw new Error("ui-scroll directive does not support <"+e.tagName+"> as a repeating tag: "+e.outerHTML);case"tr":t=angular.element("
    ").find("tr");break;case"li":t=angular.element("
  • ");break;default:t=angular.element("
    ")}return t.cache=new i,t}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n=0;t--)if(this[t].index===e.scope.$index)return void(this[t].height=e.element.outerHeight());this.push({index:e.scope.$index,height:e.element.outerHeight()}),this.sort(function(e,t){return e.indext.index?1:0})}},{key:"remove",value:function(e){for(var t=this.length-1;t>=0;t--)if(this[t].index===e.scope.$index){this.splice(t,1);break}if("isTop"!==e._op)for(var n=this.length-1;n>=0;n--)this[n].index>e.scope.$index&&this[n].index--}},{key:"clear",value:function(){this.length=0}}]),e}();i.prototype=Object.create(Array.prototype),Object.getOwnPropertyNames(u.prototype).forEach(function(e){return i.prototype[e]=u.prototype[e]})},,function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(3),o=r(i),a=n(2),u=r(a),s=n(1),l=r(s),c=n(4),f=r(c),d=n(0),p=r(d);angular.module("ui.scroll",[]).service("jqLiteExtras",function(){return new o.default}).run(["jqLiteExtras",function(e){return window.jQuery?null:e.registerFor(angular.element)}]).directive("uiScrollViewport",function(){return{restrict:"A",controller:["$scope","$element",function(e,t){var n=this;return this.container=t,this.viewport=t,this.scope=e,angular.forEach(t.children(),function(e){"tbody"===e.tagName.toLowerCase()&&(n.viewport=angular.element(e))}),this}]}}).directive("uiScroll",["$log","$injector","$rootScope","$timeout","$q","$parse",function(e,t,n,r,i,o){function a(e,a,s,c,d){function h(t,n){var r=o(t)(e);return isNaN(r)?n:r}function m(){Q.length&&(angular.forEach(Q,function(e){return e()}),Q=[])}function g(e,t){var n=void 0;e.hasOwnProperty(t)&&!z.length&&(n=e[t],delete e[t],Q.push(function(){return e[t]=n}))}function v(e,t,n){var r=Object.getOwnPropertyDescriptor(e,t);if(!r||!r.set&&!r.get){var i=void 0;g(e,t),Object.defineProperty(e,t,{set:function(e){i=e,z[n]=e;var r=X.topDataPos();X.adjustPaddings(),"minIndex"===t&&X.onAfterMinIndexSet(r)},get:function(){return i}})}}function b(t){return t&&t!==W||e.$$destroyed}function y(){X.bind("resize",A),X.bind("scroll",A)}function x(){X.unbind("resize",A),X.unbind("scroll",A)}function w(){X.resetTopPadding(),X.resetBottomPadding(),arguments.length&&(N=arguments[0]),z.reset(N),S()}function E(e){return e.element.height()&&e.element[0].offsetParent}function P(e){E(e)&&(z.forEach(function(e){angular.isFunction(e.unregisterVisibilityWatcher)&&(e.unregisterVisibilityWatcher(),delete e.unregisterVisibilityWatcher)}),q.length||r(function(){return S()}))}function $(e,t){T(e,t,X.insertElement),E(e)||(e.unregisterVisibilityWatcher=e.scope.$watch(function(){return P(e)})),R.hideElement(e)}function T(e,t,n){var r=null,i=t>0?z[t-1].element:void 0;if(d(function(t,o){r=n(t,i),e.element=t,e.scope=o,o[U]=e.item}),Y.transform){var o=e.scope.uiScrollTdInitializer;o&&o.linking?Y.transform(e.scope,e.element):e.scope.uiScrollTdInitializer={onLink:function(){return Y.transform(e.scope,e.element)},scope:e.scope}}return r}function I(){var e=[],t=[],n=[],r=[];return z.forEach(function(i,o){switch(i.op){case"prepend":t.unshift(i);break;case"append":$(i,o),i.op="none",r.push(i);break;case"insert":e=e.concat(T(i,o,X.insertElementAnimated)),i.op="none",r.push(i);break;case"remove":n.push(i)}}),n.forEach(function(t){return e=e.concat(X.removeItem(t))}),t.length&&t.forEach(function(e){$(e),e.op="none"}),z.forEach(function(e,t){return e.scope.$index=z.first+t}),{prepended:t,removed:n,inserted:r,animated:e}}function O(e,t){t.animated.length?i.all(t.animated).then(function(){X.adjustPaddings(),S(e)}):X.adjustPaddings()}function k(e,t){X.shouldLoadBottom()?(!t||z.effectiveHeight(t.inserted)>0)&&1===q.push(!0)&&(Y.loading(!0),_(e)):X.shouldLoadTop()&&(!t||z.effectiveHeight(t.prepended)>0||q[0])&&1===q.push(!1)&&(Y.loading(!0),_(e))}function j(){var t=I();return!e.$$phase&&!n.$$phase&&e.$digest(),t.inserted.forEach(function(e){return R.showElement(e)}),t.prepended.forEach(function(e){return R.showElement(e)}),t}function S(e){e||(q=[],e=++W);var t=j();b(e)||(O(e,t),k(e),q.length||Y.calculateProperties())}function V(e){var t=j();X.onAfterPrepend(t),b(e)||(O(e,t),m(),k(e,t),q.shift(),q.length?_(e):(Y.loading(!1),y(),Y.calculateProperties()))}function _(e){q[0]?z.length&&!X.shouldLoadBottom()?V(e):J(function(t){b(e)||(t.length0&&(X.clipTop(),z.append(t)),V(e))}):z.length&&!X.shouldLoadTop()?V(e):K(function(t){b(e)||(t.length0&&(z.length&&X.clipBottom(),z.prepend(t)),V(e))})}function A(){n.$$phase||Y.isLoading||Y.disabled||(k(W),q.length?x():(Y.calculateProperties(),!e.$$phase&&e.$digest()))}function L(e){if(!Y.disabled){var t=X[0].scrollTop,n=X[0].scrollHeight-X[0].clientHeight;(0===t&&!z.bof||t===n&&!z.eof)&&e.preventDefault()}}var C=s.uiScroll.match(/^\s*(\w+)\s+in\s+([(\w|\$)\.]+)\s*$/);if(!C)throw new Error("Expected uiScroll in form of '_item_ in _datasource_' but got '"+s.uiScroll+"'");var M=null,U=C[1],H=C[2],B=c[0],F=Math.max(3,h(s.bufferSize,10)),D=Math.max(.3,h(s.padding,.5)),N=h(s.startIndex,1),W=0,q=[],R=new u.default(t,i),z=new l.default(R,F),X=new f.default(R,z,a,B,n,D),Y=new p.default(X,z,S,w,s,o,a,e);B&&(B.adapter=Y);var G=function(){return angular.isObject(M)&&angular.isFunction(M.get)};if(M=o(H)(e),!G()&&(M=t.get(H),!G()))throw new Error(H+" is not a valid datasource");var Q=[];v(M,"minIndex","minIndexUser"),v(M,"maxIndex","maxIndexUser");var J=2!==M.get.length?function(e){return M.get(z.next,F,e)}:function(e){M.get({index:z.next,append:z.length?z[z.length-1].item:void 0,count:F},e)},K=2!==M.get.length?function(e){return M.get(z.first-F,F,e)}:function(e){M.get({index:z.first-F,prepend:z.length?z[0].item:void 0,count:F},e)};d(function(e,t){X.createPaddingElements(e[0]),t.$destroy(),e.remove()}),e.$on("$destroy",function(){x(),X.unbind("mousewheel",L)}),X.bind("mousewheel",L),r(function(){X.applyContainerStyle(),w()})}return{require:["?^uiScrollViewport"],restrict:"A",transclude:"element",priority:1e3,terminal:!0,link:a}}])}]); //# sourceMappingURL=ui-scroll.min.js.map \ No newline at end of file diff --git a/dist/ui-scroll.min.js.map b/dist/ui-scroll.min.js.map index f5413ed8..53250b5b 100644 --- a/dist/ui-scroll.min.js.map +++ b/dist/ui-scroll.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///ui-scroll.min.js","webpack:///webpack/bootstrap 89278db0f17c3b04f1d1","webpack:///./src/modules/adapter.js","webpack:///./src/modules/buffer.js","webpack:///./src/modules/elementRoutines.js","webpack:///./src/modules/jqLiteExtras.js","webpack:///./src/modules/viewport.js","webpack:///./src/modules/padding.js","webpack:///./src/ui-scroll.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","_classCallCheck","instance","Constructor","TypeError","getCtrlOnData","attr","element","onSyntax","match","length","window","console","log","ctrl","tail","candidate","candidateScope","scope","candidateName","target","source","parent","Error","_createClass","defineProperties","props","descriptor","writable","key","protoProps","staticProps","Adapter","viewport","buffer","adjustBuffer","reload","$attr","$parse","$scope","this","isLoading","disabled","viewportScope","getScope","startScope","$parent","publicContext","assignAdapter","adapter","generatePublicContext","adapterAttr","replace","ctrlOnData","adapterOnScope","assign","error","message","angular","extend","_this","publicMethods","bind","publicProps","set","bof","eof","newItems","append","clipTop","clipBottom","prepend","arg1","arg2","isFunction","applyUpdatesFunc","applyUpdatesIndex","cb","_this2","slice","forEach","wrapper","applyUpdate","item","index","first","_this3","isArray","position","indexOf","reverse","some","newItem","op","_op","insert","rowTop","topHeight","topDone","bottomDone","itemTop","offset","top","itemHeight","outerHeight","topDataPos","topVisiblePos","bottomVisiblePos","isEOF","default","ScrollBuffer","elementRoutines","bufferSize","create","Array","size","reset","startIndex","remove","next","minIndex","maxIndex","minIndexUser","maxIndexUser","items","Math","max","min","operation","isTop","splice","push","unshift","isNumber","removeElement","removeElementAnimated","effectiveHeight","elements","Number","MAX_VALUE","bottom","NEGATIVE_INFINITY","offsetParent","addCSSRule","sheet","selector","rules","insertRule","addRule","hideClassToken","ElementRoutines","$injector","$q","$animate","has","isAngularVersionLessThen1_3","version","major","minor","document","styleSheets","addClass","removeClass","newElement","previousElement","after","$destroy","insertElement","deferred","defer","enter","resolve","promise","leave","then","_slicedToArray","sliceIterator","arr","_arr","_n","_d","_e","undefined","_s","_i","Symbol","iterator","done","err","JQLiteExtras","scrollTo","self","direction","elem","_top$left$direction","left","method","prop","preserve","isWindow","isDefined","documentElement","getMeasurements","measure","base","borderA","borderB","computedMarginA","computedMarginB","computedStyle","dirA","dirB","marginA","marginB","paddingA","paddingB","height","width","padding","border","margin","_width$height$measure","offsetWidth","offsetHeight","getStyle","convertToPx","getWidthHeight","result","measurements","outer","outerfull","style","parseFloat","css","nodeType","obj","location","alert","setInterval","getComputedStyle","currentStyle","rs","rsLeft","core_pnum","RegExp","test","runtimeStyle","pixelLeft","before","newElem","children","j","ref","contents","outerHTML","option","outerWidth","docElem","win","box","doc","ownerDocument","arguments","getBoundingClientRect","defaultView","parentWindow","pageYOffset","scrollTop","clientTop","pageXOffset","scrollLeft","clientLeft","Viewport","viewportController","$rootScope","bufferPadding","topPadding","bottomPadding","container","overflow-anchor","overflow-y","display","createPaddingElements","template","_padding2","applyContainerStyle","bottomDataPos","scrollHeight","e","sibling","insertElementAnimated","shouldLoadBottom","overage","overageHeight","emptySpaceHeight","cache","add","adjustPaddings","shouldLoadTop","topPaddingHeight","reduce","summ","bottomPaddingHeight","visibleItemsHeight","averageItemHeight","adjustTopPadding","adjustBottomPadding","topPaddingHeightAdd","bottomPaddingHeightAdd","onAfterMinIndexSet","topPaddingHeightOld","diff","onAfterPrepend","updates","prepended","paddingHeight","resetTopPadding","clear","resetBottomPadding","removeItem","_padding","Cache","apply","setPrototypeOf","Padding","Node","ELEMENT_NODE","tagName","toLowerCase","find","CacheProto","$index","sort","a","b","itemToRemove","getOwnPropertyNames","methodName","_interopRequireDefault","_jqLiteExtras","_jqLiteExtras2","_elementRoutines","_elementRoutines2","_buffer","_buffer2","_viewport","_viewport2","_adapter","_adapter2","service","run","jqLiteExtras","jQuery","registerFor","directive","restrict","controller","child","$timeout","link","controllers","linker","parseNumericAttr","defaultValue","isNaN","onRenderHandlersRunner","onRenderHandlers","handler","preDefineIndexProperty","datasource","propName","defineIndexProperty","propUserName","getOwnPropertyDescriptor","isInvalid","rid","ridActual","$$destroyed","bindEvents","resizeAndScrollHandler","unbindEvents","unbind","isElementVisible","visibilityWatcher","unregisterVisibilityWatcher","pending","insertWrapperContent","insertAfter","createElement","$watch","hideElement","promises","clone","itemName","transform","tdInitializer","uiScrollTdInitializer","linking","onLink","updateDOM","toBePrepended","toBeRemoved","inserted","concat","removed","animated","updatePaddings","all","enqueueFetch","loading","fetch","processUpdates","$$phase","$root","$digest","w","showElement","calculateProperties","adjustBufferAfterFetch","shift","fetchNext","fetchPrevious","wheelHandler","event","yMax","clientHeight","preventDefault","uiScroll","datasourceName","isDatasourceValid","isObject","success","count","$on","require","transclude","priority","terminal"],"mappings":"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","file":"ui-scroll.min.js","sourcesContent":["/*!\r\n * angular-ui-scroll (uncompressed)\r\n * https://github.com/angular-ui/ui-scroll\r\n * Version: 1.7.0-rc.4 -- 2017-10-27T14:30:17.323Z\r\n * License: MIT\r\n */\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 7);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getCtrlOnData(attr, element) {\n var onSyntax = attr.match(/^(.+)(\\s+on\\s+)(.+)?/);\n if (onSyntax && onSyntax.length === 4) {\n window.console.log('Angular ui-scroll adapter assignment warning. \"Controller On\" syntax has been deprecated since ui-scroll v1.6.1.');\n var ctrl = onSyntax[3];\n var tail = onSyntax[1];\n var candidate = element;\n while (candidate.length) {\n var candidateScope = candidate.scope(); // doesn't work when debugInfoEnabled flag = true\n var candidateName = (candidate.attr('ng-controller') || '').match(/(\\w(?:\\w|\\d)*)(?:\\s+as\\s+(\\w(?:\\w|\\d)*))?/);\n if (candidateName && candidateName[1] === ctrl) {\n return {\n target: candidateScope,\n source: tail\n };\n }\n candidate = candidate.parent();\n }\n throw new Error('Angular ui-scroll adapter assignment error. Failed to locate target controller \"' + ctrl + '\" to inject \"' + tail + '\"');\n }\n}\n\nvar Adapter = function () {\n function Adapter(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope) {\n _classCallCheck(this, Adapter);\n\n this.viewport = viewport;\n this.buffer = buffer;\n this.adjustBuffer = adjustBuffer;\n this.reload = reload;\n\n this.isLoading = false;\n this.disabled = false;\n\n var viewportScope = viewport.getScope();\n this.startScope = viewportScope.$parent ? viewportScope : $scope;\n\n this.publicContext = {};\n this.assignAdapter($attr.adapter, $parse, element);\n this.generatePublicContext($attr, $parse);\n }\n\n _createClass(Adapter, [{\n key: 'assignAdapter',\n value: function assignAdapter(adapterAttr, $parse, element) {\n if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\\s+|\\s+$/gm, ''))) {\n return;\n }\n var ctrlOnData = getCtrlOnData(adapterAttr, element);\n var adapterOnScope = void 0;\n\n try {\n if (ctrlOnData) {\n // \"Controller On\", deprecated since v1.6.1\n $parse(ctrlOnData.source).assign(ctrlOnData.target, {});\n adapterOnScope = $parse(ctrlOnData.source)(ctrlOnData.target);\n } else {\n $parse(adapterAttr).assign(this.startScope, {});\n adapterOnScope = $parse(adapterAttr)(this.startScope);\n }\n } catch (error) {\n error.message = 'Angular ui-scroll Adapter assignment exception.\\n' + ('Can\\'t parse \"' + adapterAttr + '\" expression.\\n') + error.message;\n throw error;\n }\n\n angular.extend(adapterOnScope, this.publicContext);\n this.publicContext = adapterOnScope;\n }\n }, {\n key: 'generatePublicContext',\n value: function generatePublicContext($attr, $parse) {\n var _this = this;\n\n // these methods will be accessible out of ui-scroll via user defined adapter\n var publicMethods = ['reload', 'applyUpdates', 'append', 'prepend', 'isBOF', 'isEOF', 'isEmpty'];\n for (var i = publicMethods.length - 1; i >= 0; i--) {\n this.publicContext[publicMethods[i]] = this[publicMethods[i]].bind(this);\n }\n\n // these read-only props will be accessible out of ui-scroll via user defined adapter\n var publicProps = ['isLoading', 'topVisible', 'topVisibleElement', 'topVisibleScope', 'bottomVisible', 'bottomVisibleElement', 'bottomVisibleScope'];\n\n var _loop = function _loop(_i) {\n var property = void 0,\n attr = $attr[publicProps[_i]];\n Object.defineProperty(_this, publicProps[_i], {\n get: function get() {\n return property;\n },\n set: function set(value) {\n property = value;\n _this.publicContext[publicProps[_i]] = value;\n if (attr) {\n $parse(attr).assign(_this.startScope, value);\n }\n }\n });\n };\n\n for (var _i = publicProps.length - 1; _i >= 0; _i--) {\n _loop(_i);\n }\n\n // non-read-only public property\n Object.defineProperty(this.publicContext, 'disabled', {\n get: function get() {\n return _this.disabled;\n },\n set: function set(value) {\n return !(_this.disabled = value) ? _this.adjustBuffer() : null;\n }\n });\n }\n }, {\n key: 'loading',\n value: function loading(value) {\n this['isLoading'] = value;\n }\n }, {\n key: 'isBOF',\n value: function isBOF() {\n return this.buffer.bof;\n }\n }, {\n key: 'isEOF',\n value: function isEOF() {\n return this.buffer.eof;\n }\n }, {\n key: 'isEmpty',\n value: function isEmpty() {\n return !this.buffer.length;\n }\n }, {\n key: 'append',\n value: function append(newItems) {\n this.buffer.append(newItems);\n this.adjustBuffer();\n this.viewport.clipTop();\n this.viewport.clipBottom();\n }\n }, {\n key: 'prepend',\n value: function prepend(newItems) {\n this.buffer.prepend(newItems);\n this.adjustBuffer();\n this.viewport.clipTop();\n this.viewport.clipBottom();\n }\n }, {\n key: 'applyUpdates',\n value: function applyUpdates(arg1, arg2) {\n if (angular.isFunction(arg1)) {\n this.applyUpdatesFunc(arg1);\n } else {\n this.applyUpdatesIndex(arg1, arg2);\n }\n this.adjustBuffer();\n }\n }, {\n key: 'applyUpdatesFunc',\n value: function applyUpdatesFunc(cb) {\n var _this2 = this;\n\n this.buffer.slice(0).forEach(function (wrapper) {\n // we need to do it on the buffer clone, because buffer content\n // may change as we iterate through\n _this2.applyUpdate(wrapper, cb(wrapper.item, wrapper.scope, wrapper.element));\n });\n }\n }, {\n key: 'applyUpdatesIndex',\n value: function applyUpdatesIndex(index, newItems) {\n if (index % 1 !== 0) {\n // checking if it is an integer\n throw new Error('applyUpdates - ' + index + ' is not a valid index');\n }\n index -= this.buffer.first;\n if (index >= 0 && index < this.buffer.length) {\n this.applyUpdate(this.buffer[index], newItems);\n }\n }\n }, {\n key: 'applyUpdate',\n value: function applyUpdate(wrapper, newItems) {\n var _this3 = this;\n\n if (!angular.isArray(newItems)) {\n return;\n }\n var position = this.buffer.indexOf(wrapper);\n if (!newItems.reverse().some(function (newItem) {\n return newItem === wrapper.item;\n })) {\n wrapper.op = 'remove';\n if (position === 0 && !newItems.length) {\n wrapper._op = 'isTop'; // to catch \"first\" edge case on remove\n }\n }\n newItems.forEach(function (newItem) {\n if (newItem === wrapper.item) {\n position--;\n } else {\n // 3 parameter (isTop) is to catch \"first\" edge case on insert\n _this3.buffer.insert(position + 1, newItem, position === -1);\n }\n });\n }\n }, {\n key: 'calculateProperties',\n value: function calculateProperties() {\n var rowTop = null,\n topHeight = 0;\n var topDone = false,\n bottomDone = false;\n var length = this.buffer.length;\n\n for (var i = 0; i < length; i++) {\n var item = this.buffer[i];\n var itemTop = item.element.offset().top;\n\n if (rowTop !== itemTop) {\n // a new row condition\n var itemHeight = item.element.outerHeight(true);\n var top = this.viewport.topDataPos() + topHeight + itemHeight;\n\n if (!topDone && top > this.viewport.topVisiblePos()) {\n topDone = true;\n this['topVisible'] = item.item;\n this['topVisibleElement'] = item.element;\n this['topVisibleScope'] = item.scope;\n }\n if (!bottomDone && (top >= this.viewport.bottomVisiblePos() || i === length - 1 && this.isEOF())) {\n bottomDone = true;\n this['bottomVisible'] = item.item;\n this['bottomVisibleElement'] = item.element;\n this['bottomVisibleScope'] = item.scope;\n }\n topHeight += itemHeight;\n }\n rowTop = itemTop;\n\n if (topDone && bottomDone) {\n break;\n }\n }\n }\n }]);\n\n return Adapter;\n}();\n\nexports.default = Adapter;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = ScrollBuffer;\nfunction ScrollBuffer(elementRoutines, bufferSize) {\n var buffer = Object.create(Array.prototype);\n\n angular.extend(buffer, {\n size: bufferSize,\n\n reset: function reset(startIndex) {\n buffer.remove(0, buffer.length);\n buffer.eof = false;\n buffer.bof = false;\n buffer.first = startIndex;\n buffer.next = startIndex;\n buffer.minIndex = startIndex;\n buffer.maxIndex = startIndex;\n buffer.minIndexUser = null;\n buffer.maxIndexUser = null;\n },\n append: function append(items) {\n items.forEach(function (item) {\n ++buffer.next;\n buffer.insert('append', item);\n });\n buffer.maxIndex = buffer.eof ? buffer.next - 1 : Math.max(buffer.next - 1, buffer.maxIndex);\n },\n prepend: function prepend(items) {\n items.reverse().forEach(function (item) {\n --buffer.first;\n buffer.insert('prepend', item);\n });\n buffer.minIndex = buffer.bof ? buffer.minIndex = buffer.first : Math.min(buffer.first, buffer.minIndex);\n },\n\n\n /**\r\n * inserts wrapped element in the buffer\r\n * the first argument is either operation keyword (see below) or a number for operation 'insert'\r\n * for insert the number is the index for the buffer element the new one have to be inserted after\r\n * operations: 'append', 'prepend', 'insert', 'remove', 'update', 'none'\r\n */\n insert: function insert(operation, item, isTop) {\n var wrapper = {\n item: item\n };\n\n if (operation % 1 === 0) {\n // it is an insert\n wrapper.op = 'insert';\n buffer.splice(operation, 0, wrapper);\n if (isTop) {\n buffer.first--;\n } else {\n buffer.next++;\n }\n } else {\n wrapper.op = operation;\n switch (operation) {\n case 'append':\n buffer.push(wrapper);\n break;\n case 'prepend':\n buffer.unshift(wrapper);\n break;\n }\n }\n },\n\n\n // removes elements from buffer\n remove: function remove(arg1, arg2) {\n if (angular.isNumber(arg1)) {\n // removes items from arg1 (including) through arg2 (excluding)\n for (var i = arg1; i < arg2; i++) {\n elementRoutines.removeElement(buffer[i]);\n }\n\n return buffer.splice(arg1, arg2 - arg1);\n }\n // removes single item(wrapper) from the buffer\n buffer.splice(buffer.indexOf(arg1), 1);\n if (arg1._op === 'isTop') {\n buffer.first++;\n } else {\n buffer.next--;\n }\n if (!buffer.length) {\n buffer.first = 1;\n buffer.next = 1;\n }\n\n return elementRoutines.removeElementAnimated(arg1);\n },\n effectiveHeight: function effectiveHeight(elements) {\n if (!elements.length) {\n return 0;\n }\n var top = Number.MAX_VALUE;\n var bottom = Number.NEGATIVE_INFINITY;\n elements.forEach(function (wrapper) {\n if (wrapper.element[0].offsetParent) {\n // element style is not display:none\n top = Math.min(top, wrapper.element.offset().top);\n bottom = Math.max(bottom, wrapper.element.offset().top + wrapper.element.outerHeight(true));\n }\n });\n return Math.max(0, bottom - top);\n }\n });\n\n return buffer;\n}\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar hideClassToken = 'ng-ui-scroll-hide';\n\nfunction addCSSRule(sheet, selector, rules, index) {\n if ('insertRule' in sheet) {\n sheet.insertRule(selector + '{' + rules + '}', index);\n } else if ('addRule' in sheet) {\n sheet.addRule(selector, rules, index);\n }\n}\n\nvar ElementRoutines = function () {\n function ElementRoutines($injector, $q) {\n _classCallCheck(this, ElementRoutines);\n\n this.$animate = $injector.has && $injector.has('$animate') ? $injector.get('$animate') : null;\n this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3;\n this.$q = $q;\n addCSSRule(document.styleSheets[0], '.' + hideClassToken, 'display: none');\n }\n\n _createClass(ElementRoutines, [{\n key: 'hideElement',\n value: function hideElement(wrapper) {\n wrapper.element.addClass(hideClassToken);\n }\n }, {\n key: 'showElement',\n value: function showElement(wrapper) {\n wrapper.element.removeClass(hideClassToken);\n }\n }, {\n key: 'insertElement',\n value: function insertElement(newElement, previousElement) {\n previousElement.after(newElement);\n return [];\n }\n }, {\n key: 'removeElement',\n value: function removeElement(wrapper) {\n wrapper.element.remove();\n wrapper.scope.$destroy();\n return [];\n }\n }, {\n key: 'insertElementAnimated',\n value: function insertElementAnimated(newElement, previousElement) {\n if (!this.$animate) {\n return this.insertElement(newElement, previousElement);\n }\n\n if (this.isAngularVersionLessThen1_3) {\n var deferred = this.$q.defer();\n // no need for parent - previous element is never null\n this.$animate.enter(newElement, null, previousElement, function () {\n return deferred.resolve();\n });\n\n return [deferred.promise];\n }\n\n // no need for parent - previous element is never null\n return [this.$animate.enter(newElement, null, previousElement)];\n }\n }, {\n key: 'removeElementAnimated',\n value: function removeElementAnimated(wrapper) {\n if (!this.$animate) {\n return this.removeElement(wrapper);\n }\n\n if (this.isAngularVersionLessThen1_3) {\n var deferred = this.$q.defer();\n this.$animate.leave(wrapper.element, function () {\n wrapper.scope.$destroy();\n return deferred.resolve();\n });\n\n return [deferred.promise];\n }\n\n return [this.$animate.leave(wrapper.element).then(function () {\n return wrapper.scope.$destroy();\n })];\n }\n }]);\n\n return ElementRoutines;\n}();\n\nexports.default = ElementRoutines;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*!\r\n globals: angular, window\r\n List of used element methods available in JQuery but not in JQuery Lite\r\n element.before(elem)\r\n element.height()\r\n element.outerHeight(true)\r\n element.height(value) = only for Top/Bottom padding elements\r\n element.scrollTop()\r\n element.scrollTop(value)\r\n */\n\nvar JQLiteExtras = function () {\n function JQLiteExtras() {\n _classCallCheck(this, JQLiteExtras);\n }\n\n _createClass(JQLiteExtras, [{\n key: 'registerFor',\n value: function registerFor(element) {\n var convertToPx = void 0,\n css = void 0,\n getStyle = void 0,\n isWindow = void 0;\n // angular implementation blows up if elem is the window\n css = angular.element.prototype.css;\n\n element.prototype.css = function (name, value) {\n var self = this;\n var elem = self[0];\n if (!(!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style)) {\n return css.call(self, name, value);\n }\n };\n\n // as defined in angularjs v1.0.5\n isWindow = function isWindow(obj) {\n return obj && obj.document && obj.location && obj.alert && obj.setInterval;\n };\n\n function scrollTo(self, direction, value) {\n var elem = self[0];\n\n var _top$left$direction = _slicedToArray({\n top: ['scrollTop', 'pageYOffset', 'scrollLeft'],\n left: ['scrollLeft', 'pageXOffset', 'scrollTop']\n }[direction], 3),\n method = _top$left$direction[0],\n prop = _top$left$direction[1],\n preserve = _top$left$direction[2];\n\n if (isWindow(elem)) {\n if (angular.isDefined(value)) {\n return elem.scrollTo(self[preserve].call(self), value);\n }\n return prop in elem ? elem[prop] : elem.document.documentElement[method];\n } else {\n if (angular.isDefined(value)) {\n elem[method] = value;\n }\n return elem[method];\n }\n }\n\n if (window.getComputedStyle) {\n getStyle = function getStyle(elem) {\n return window.getComputedStyle(elem, null);\n };\n convertToPx = function convertToPx(elem, value) {\n return parseFloat(value);\n };\n } else {\n getStyle = function getStyle(elem) {\n return elem.currentStyle;\n };\n convertToPx = function convertToPx(elem, value) {\n var left = void 0,\n result = void 0,\n rs = void 0,\n rsLeft = void 0,\n style = void 0;\n var core_pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n var rnumnonpx = new RegExp('^(' + core_pnum + ')(?!px)[a-z%]+$', 'i');\n\n if (!rnumnonpx.test(value)) {\n return parseFloat(value);\n }\n\n // ported from JQuery\n style = elem.style;\n left = style.left;\n rs = elem.runtimeStyle;\n rsLeft = rs && rs.left;\n if (rs) {\n rs.left = style.left;\n }\n // put in the new values to get a computed style out\n style.left = value;\n result = style.pixelLeft;\n style.left = left;\n if (rsLeft) {\n rs.left = rsLeft;\n }\n return result;\n };\n }\n\n function getMeasurements(elem, measure) {\n var base = void 0,\n borderA = void 0,\n borderB = void 0,\n computedMarginA = void 0,\n computedMarginB = void 0,\n computedStyle = void 0,\n dirA = void 0,\n dirB = void 0,\n marginA = void 0,\n marginB = void 0,\n paddingA = void 0,\n paddingB = void 0;\n\n if (isWindow(elem)) {\n base = document.documentElement[{ height: 'clientHeight', width: 'clientWidth' }[measure]];\n\n return {\n base: base,\n padding: 0,\n border: 0,\n margin: 0\n };\n }\n\n // Start with offset property\n\n var _width$height$measure = _slicedToArray({\n width: [elem.offsetWidth, 'Left', 'Right'],\n height: [elem.offsetHeight, 'Top', 'Bottom']\n }[measure], 3);\n\n base = _width$height$measure[0];\n dirA = _width$height$measure[1];\n dirB = _width$height$measure[2];\n\n\n computedStyle = getStyle(elem);\n paddingA = convertToPx(elem, computedStyle['padding' + dirA]) || 0;\n paddingB = convertToPx(elem, computedStyle['padding' + dirB]) || 0;\n borderA = convertToPx(elem, computedStyle['border' + dirA + 'Width']) || 0;\n borderB = convertToPx(elem, computedStyle['border' + dirB + 'Width']) || 0;\n computedMarginA = computedStyle['margin' + dirA];\n computedMarginB = computedStyle['margin' + dirB];\n\n // I do not care for width for now, so this hack is irrelevant\n // if ( !supportsPercentMargin )\n // computedMarginA = hackPercentMargin( elem, computedStyle, computedMarginA )\n // computedMarginB = hackPercentMargin( elem, computedStyle, computedMarginB )\n marginA = convertToPx(elem, computedMarginA) || 0;\n marginB = convertToPx(elem, computedMarginB) || 0;\n\n return {\n base: base,\n padding: paddingA + paddingB,\n border: borderA + borderB,\n margin: marginA + marginB\n };\n }\n\n function getWidthHeight(elem, direction, measure) {\n var computedStyle = void 0,\n result = void 0;\n\n var measurements = getMeasurements(elem, direction);\n\n if (measurements.base > 0) {\n return {\n base: measurements.base - measurements.padding - measurements.border,\n outer: measurements.base,\n outerfull: measurements.base + measurements.margin\n }[measure];\n }\n\n // Fall back to computed then uncomputed css if necessary\n computedStyle = getStyle(elem);\n result = computedStyle[direction];\n\n if (result < 0 || result === null) {\n result = elem.style[direction] || 0;\n }\n\n // Normalize \"\", auto, and prepare for extra\n result = parseFloat(result) || 0;\n\n return {\n base: result - measurements.padding - measurements.border,\n outer: result,\n outerfull: result + measurements.padding + measurements.border + measurements.margin\n }[measure];\n }\n\n // define missing methods\n return angular.forEach({\n before: function before(newElem) {\n var children, elem, i, j, parent, ref, self;\n self = this;\n elem = self[0];\n parent = self.parent();\n children = parent.contents();\n if (children[0] === elem) {\n return parent.prepend(newElem);\n } else {\n for (i = j = 1, ref = children.length - 1; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {\n if (children[i] === elem) {\n angular.element(children[i - 1]).after(newElem);\n return;\n }\n }\n throw new Error('invalid DOM structure ' + elem.outerHTML);\n }\n },\n height: function height(value) {\n var self;\n self = this;\n if (angular.isDefined(value)) {\n if (angular.isNumber(value)) {\n value = value + 'px';\n }\n return css.call(self, 'height', value);\n } else {\n return getWidthHeight(this[0], 'height', 'base');\n }\n },\n outerHeight: function outerHeight(option) {\n return getWidthHeight(this[0], 'height', option ? 'outerfull' : 'outer');\n },\n outerWidth: function outerWidth(option) {\n return getWidthHeight(this[0], 'width', option ? 'outerfull' : 'outer');\n },\n\n\n /*\r\n The offset setter method is not implemented\r\n */\n offset: function offset(value) {\n var docElem = void 0,\n win = void 0;\n var self = this;\n var box = {\n top: 0,\n left: 0\n };\n var elem = self[0];\n var doc = elem && elem.ownerDocument;\n\n if (arguments.length) {\n if (value === undefined) {\n return self;\n }\n // TODO: implement setter\n throw new Error('offset setter method is not implemented');\n }\n\n if (!doc) {\n return;\n }\n\n docElem = doc.documentElement;\n\n // TODO: Make sure it's not a disconnected DOM node\n\n if (elem.getBoundingClientRect != null) {\n box = elem.getBoundingClientRect();\n }\n\n win = doc.defaultView || doc.parentWindow;\n\n return {\n top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),\n left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0)\n };\n },\n scrollTop: function scrollTop(value) {\n return scrollTo(this, 'top', value);\n },\n scrollLeft: function scrollLeft(value) {\n return scrollTo(this, 'left', value);\n }\n }, function (value, key) {\n if (!element.prototype[key]) {\n return element.prototype[key] = value;\n }\n });\n }\n }]);\n\n return JQLiteExtras;\n}();\n\nexports.default = JQLiteExtras;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = Viewport;\n\nvar _padding = __webpack_require__(5);\n\nvar _padding2 = _interopRequireDefault(_padding);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding) {\n var topPadding = null;\n var bottomPadding = null;\n var viewport = viewportController && viewportController.viewport ? viewportController.viewport : angular.element(window);\n var container = viewportController && viewportController.container ? viewportController.container : undefined;\n var scope = viewportController && viewportController.scope ? viewportController.scope : $rootScope;\n\n viewport.css({\n 'overflow-anchor': 'none',\n 'overflow-y': 'auto',\n 'display': 'block'\n });\n\n function bufferPadding() {\n return viewport.outerHeight() * padding; // some extra space to initiate preload\n }\n\n angular.extend(viewport, {\n getScope: function getScope() {\n return scope;\n },\n createPaddingElements: function createPaddingElements(template) {\n topPadding = new _padding2.default(template);\n bottomPadding = new _padding2.default(template);\n element.before(topPadding);\n element.after(bottomPadding);\n },\n applyContainerStyle: function applyContainerStyle() {\n if (container && container !== viewport) {\n viewport.css('height', window.getComputedStyle(container[0]).height);\n }\n },\n bottomDataPos: function bottomDataPos() {\n var scrollHeight = viewport[0].scrollHeight;\n scrollHeight = scrollHeight != null ? scrollHeight : viewport[0].document.documentElement.scrollHeight;\n return scrollHeight - bottomPadding.height();\n },\n topDataPos: function topDataPos() {\n return topPadding.height();\n },\n bottomVisiblePos: function bottomVisiblePos() {\n return viewport.scrollTop() + viewport.outerHeight();\n },\n topVisiblePos: function topVisiblePos() {\n return viewport.scrollTop();\n },\n insertElement: function insertElement(e, sibling) {\n return elementRoutines.insertElement(e, sibling || topPadding);\n },\n insertElementAnimated: function insertElementAnimated(e, sibling) {\n return elementRoutines.insertElementAnimated(e, sibling || topPadding);\n },\n shouldLoadBottom: function shouldLoadBottom() {\n return !buffer.eof && viewport.bottomDataPos() < viewport.bottomVisiblePos() + bufferPadding();\n },\n clipBottom: function clipBottom() {\n // clip the invisible items off the bottom\n var overage = 0;\n var overageHeight = 0;\n var itemHeight = 0;\n var emptySpaceHeight = viewport.bottomDataPos() - viewport.bottomVisiblePos() - bufferPadding();\n\n for (var i = buffer.length - 1; i >= 0; i--) {\n itemHeight = buffer[i].element.outerHeight(true);\n if (overageHeight + itemHeight > emptySpaceHeight) {\n break;\n }\n bottomPadding.cache.add(buffer[i]);\n overageHeight += itemHeight;\n overage++;\n }\n\n if (overage > 0) {\n buffer.eof = false;\n buffer.remove(buffer.length - overage, buffer.length);\n buffer.next -= overage;\n viewport.adjustPaddings();\n }\n },\n shouldLoadTop: function shouldLoadTop() {\n return !buffer.bof && viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding();\n },\n clipTop: function clipTop() {\n // clip the invisible items off the top\n var overage = 0;\n var overageHeight = 0;\n var itemHeight = 0;\n var emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\n\n for (var i = 0; i < buffer.length; i++) {\n itemHeight = buffer[i].element.outerHeight(true);\n if (overageHeight + itemHeight > emptySpaceHeight) {\n break;\n }\n topPadding.cache.add(buffer[i]);\n overageHeight += itemHeight;\n overage++;\n }\n\n if (overage > 0) {\n // we need to adjust top padding element before items are removed from top\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\n topPadding.height(topPadding.height() + overageHeight);\n buffer.bof = false;\n buffer.remove(0, overage);\n buffer.first += overage;\n }\n },\n adjustPaddings: function adjustPaddings() {\n if (!buffer.length) {\n return;\n }\n\n // precise heights calculation, items that were in buffer once\n var topPaddingHeight = topPadding.cache.reduce(function (summ, item) {\n return summ + (item.index < buffer.first ? item.height : 0);\n }, 0);\n var bottomPaddingHeight = bottomPadding.cache.reduce(function (summ, item) {\n return summ + (item.index >= buffer.next ? item.height : 0);\n }, 0);\n\n // average item height based on buffer data\n var visibleItemsHeight = buffer.reduce(function (summ, item) {\n return summ + item.element.outerHeight(true);\n }, 0);\n var averageItemHeight = (visibleItemsHeight + topPaddingHeight + bottomPaddingHeight) / (buffer.maxIndex - buffer.minIndex + 1);\n\n // average heights calculation, items that have never been reached\n var adjustTopPadding = buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser;\n var adjustBottomPadding = buffer.maxIndexUser !== null && buffer.maxIndex < buffer.maxIndexUser;\n var topPaddingHeightAdd = adjustTopPadding ? (buffer.minIndex - buffer.minIndexUser) * averageItemHeight : 0;\n var bottomPaddingHeightAdd = adjustBottomPadding ? (buffer.maxIndexUser - buffer.maxIndex) * averageItemHeight : 0;\n\n // paddings combine adjustment\n topPadding.height(topPaddingHeight + topPaddingHeightAdd);\n bottomPadding.height(bottomPaddingHeight + bottomPaddingHeightAdd);\n },\n onAfterMinIndexSet: function onAfterMinIndexSet(topPaddingHeightOld) {\n // additional scrollTop adjustment in case of datasource.minIndex external set\n if (buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser) {\n var diff = topPadding.height() - topPaddingHeightOld;\n viewport.scrollTop(viewport.scrollTop() + diff);\n diff -= viewport.scrollTop();\n if (diff > 0) {\n bottomPadding.height(bottomPadding.height() + diff);\n viewport.scrollTop(viewport.scrollTop() + diff);\n }\n }\n },\n onAfterPrepend: function onAfterPrepend(updates) {\n if (!updates.prepended.length) return;\n var height = buffer.effectiveHeight(updates.prepended);\n var paddingHeight = topPadding.height() - height;\n if (paddingHeight >= 0) {\n topPadding.height(paddingHeight);\n } else {\n topPadding.height(0);\n viewport.scrollTop(viewport.scrollTop() - paddingHeight);\n }\n },\n resetTopPadding: function resetTopPadding() {\n topPadding.height(0);\n topPadding.cache.clear();\n },\n resetBottomPadding: function resetBottomPadding() {\n bottomPadding.height(0);\n bottomPadding.cache.clear();\n },\n removeItem: function removeItem(item) {\n topPadding.cache.remove(item);\n bottomPadding.cache.remove(item);\n return buffer.remove(item);\n }\n });\n\n return viewport;\n}\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nexports.default = Padding;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// Can't just extend the Array, due to Babel does not support built-in classes extending\n// This solution was taken from https://stackoverflow.com/questions/46897414/es6-class-extends-array-workaround-for-es5-babel-transpile\nvar CacheProto = function () {\n function CacheProto() {\n _classCallCheck(this, CacheProto);\n }\n\n _createClass(CacheProto, [{\n key: 'add',\n value: function add(item) {\n for (var i = this.length - 1; i >= 0; i--) {\n if (this[i].index === item.scope.$index) {\n this[i].height = item.element.outerHeight();\n return;\n }\n }\n this.push({\n index: item.scope.$index,\n height: item.element.outerHeight()\n });\n this.sort(function (a, b) {\n return a.index < b.index ? -1 : a.index > b.index ? 1 : 0;\n });\n }\n }, {\n key: 'remove',\n value: function remove(itemToRemove) {\n for (var i = this.length - 1; i >= 0; i--) {\n if (this[i].index === itemToRemove.scope.$index) {\n this.splice(i, 1);\n break;\n }\n }\n if (itemToRemove._op !== 'isTop') {\n for (var _i = this.length - 1; _i >= 0; _i--) {\n if (this[_i].index > itemToRemove.scope.$index) {\n this[_i].index--;\n }\n }\n }\n }\n }, {\n key: 'clear',\n value: function clear() {\n this.length = 0;\n }\n }]);\n\n return CacheProto;\n}();\n\nfunction Cache() {\n var instance = [];\n instance.push.apply(instance, arguments);\n Object.setPrototypeOf(instance, Cache.prototype);\n return instance;\n}\nCache.prototype = Object.create(Array.prototype);\nObject.getOwnPropertyNames(CacheProto.prototype).forEach(function (methodName) {\n return Cache.prototype[methodName] = CacheProto.prototype[methodName];\n});\n\nfunction Padding(template) {\n var result = void 0;\n\n if (template.nodeType !== Node.ELEMENT_NODE) {\n throw new Error('ui-scroll directive requires an Element node for templating the view');\n }\n\n switch (template.tagName.toLowerCase()) {\n case 'dl':\n throw new Error('ui-scroll directive does not support <' + template.tagName + '> as a repeating tag: ' + template.outerHTML);\n case 'tr':\n var table = angular.element('
    ');\n result = table.find('tr');\n break;\n case 'li':\n result = angular.element('
  • ');\n break;\n default:\n result = angular.element('
    ');\n }\n\n result.cache = new Cache();\n\n return result;\n}\n\n/***/ }),\n/* 6 */,\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _jqLiteExtras = __webpack_require__(3);\n\nvar _jqLiteExtras2 = _interopRequireDefault(_jqLiteExtras);\n\nvar _elementRoutines = __webpack_require__(2);\n\nvar _elementRoutines2 = _interopRequireDefault(_elementRoutines);\n\nvar _buffer = __webpack_require__(1);\n\nvar _buffer2 = _interopRequireDefault(_buffer);\n\nvar _viewport = __webpack_require__(4);\n\nvar _viewport2 = _interopRequireDefault(_viewport);\n\nvar _adapter = __webpack_require__(0);\n\nvar _adapter2 = _interopRequireDefault(_adapter);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nangular.module('ui.scroll', []).service('jqLiteExtras', function () {\n return new _jqLiteExtras2.default();\n}).run(['jqLiteExtras', function (jqLiteExtras) {\n return !window.jQuery ? jqLiteExtras.registerFor(angular.element) : null;\n}]).directive('uiScrollViewport', function () {\n return {\n restrict: 'A',\n controller: ['$scope', '$element', function (scope, element) {\n var _this = this;\n\n this.container = element;\n this.viewport = element;\n this.scope = scope;\n\n angular.forEach(element.children(), function (child) {\n if (child.tagName.toLowerCase() === 'tbody') {\n _this.viewport = angular.element(child);\n }\n });\n\n return this;\n }]\n };\n}).directive('uiScroll', ['$log', '$injector', '$rootScope', '$timeout', '$q', '$parse', 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 var match = $attr.uiScroll.match(/^\\s*(\\w+)\\s+in\\s+([(\\w|\\$)\\.]+)\\s*$/);\n if (!match) {\n throw new Error('Expected uiScroll in form of \\'_item_ in _datasource_\\' but got \\'' + $attr.uiScroll + '\\'');\n }\n\n function parseNumericAttr(value, defaultValue) {\n var result = $parse(value)($scope);\n return isNaN(result) ? defaultValue : result;\n }\n\n var BUFFER_MIN = 3;\n var BUFFER_DEFAULT = 10;\n var PADDING_MIN = 0.3;\n var PADDING_DEFAULT = 0.5;\n\n var datasource = null;\n var itemName = match[1];\n var datasourceName = match[2];\n var viewportController = controllers[0];\n var bufferSize = Math.max(BUFFER_MIN, parseNumericAttr($attr.bufferSize, BUFFER_DEFAULT));\n var padding = Math.max(PADDING_MIN, parseNumericAttr($attr.padding, PADDING_DEFAULT));\n var startIndex = parseNumericAttr($attr.startIndex, 1);\n var ridActual = 0; // current data revision id\n var pending = [];\n\n var elementRoutines = new _elementRoutines2.default($injector, $q);\n var buffer = new _buffer2.default(elementRoutines, bufferSize);\n var viewport = new _viewport2.default(elementRoutines, buffer, element, viewportController, $rootScope, padding);\n var adapter = new _adapter2.default(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope);\n\n if (viewportController) {\n viewportController.adapter = adapter;\n }\n\n var isDatasourceValid = function isDatasourceValid() {\n return angular.isObject(datasource) && angular.isFunction(datasource.get);\n };\n datasource = $parse(datasourceName)($scope); // try to get datasource on scope\n if (!isDatasourceValid()) {\n datasource = $injector.get(datasourceName); // try to inject datasource as service\n if (!isDatasourceValid()) {\n throw new Error(datasourceName + ' is not a valid datasource');\n }\n }\n\n var onRenderHandlers = [];\n function onRenderHandlersRunner() {\n if (onRenderHandlers.length) {\n angular.forEach(onRenderHandlers, function (handler) {\n return handler();\n });\n onRenderHandlers = [];\n }\n }\n function preDefineIndexProperty(datasource, propName) {\n var getter = void 0;\n // need to postpone min/maxIndexUser processing if the view is empty\n if (datasource.hasOwnProperty(propName) && !buffer.length) {\n getter = datasource[propName];\n delete datasource[propName];\n onRenderHandlers.push(function () {\n return datasource[propName] = getter;\n });\n }\n }\n\n function defineIndexProperty(datasource, propName, propUserName) {\n var descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n if (descriptor && (descriptor.set || descriptor.get)) {\n return;\n }\n var getter = void 0;\n preDefineIndexProperty(datasource, propName);\n Object.defineProperty(datasource, propName, {\n set: function set(value) {\n getter = value;\n buffer[propUserName] = value;\n var topPaddingHeightOld = viewport.topDataPos();\n viewport.adjustPaddings();\n if (propName === 'minIndex') {\n viewport.onAfterMinIndexSet(topPaddingHeightOld);\n }\n },\n get: function get() {\n return getter;\n }\n });\n }\n\n defineIndexProperty(datasource, 'minIndex', 'minIndexUser');\n defineIndexProperty(datasource, 'maxIndex', 'maxIndexUser');\n\n var fetchNext = datasource.get.length !== 2 ? function (success) {\n return datasource.get(buffer.next, bufferSize, success);\n } : function (success) {\n datasource.get({\n index: buffer.next,\n append: buffer.length ? buffer[buffer.length - 1].item : void 0,\n count: bufferSize\n }, success);\n };\n\n var fetchPrevious = datasource.get.length !== 2 ? function (success) {\n return datasource.get(buffer.first - bufferSize, bufferSize, success);\n } : function (success) {\n datasource.get({\n index: buffer.first - bufferSize,\n prepend: buffer.length ? buffer[0].item : void 0,\n count: bufferSize\n }, success);\n };\n\n /**\n * Build padding elements\n *\n * Calling linker is the only way I found to get access to the tag name of the template\n * to prevent the directive scope from pollution a new scope is created and destroyed\n * right after the builder creation is completed\n */\n linker(function (clone, scope) {\n viewport.createPaddingElements(clone[0]);\n // we do not include the clone in the DOM. It means that the nested directives will not\n // be able to reach the parent directives, but in this case it is intentional because we\n // created the clone to access the template tag name\n scope.$destroy();\n clone.remove();\n });\n\n $scope.$on('$destroy', function () {\n unbindEvents();\n viewport.unbind('mousewheel', wheelHandler);\n });\n\n viewport.bind('mousewheel', wheelHandler);\n\n $timeout(function () {\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(function (item) {\n if (angular.isFunction(item.unregisterVisibilityWatcher)) {\n item.unregisterVisibilityWatcher();\n delete item.unregisterVisibilityWatcher;\n }\n });\n if (!pending.length) {\n $timeout(function () {\n return adjustBuffer();\n });\n }\n }\n }\n\n function insertWrapperContent(wrapper, insertAfter) {\n createElement(wrapper, insertAfter, viewport.insertElement);\n if (!isElementVisible(wrapper)) {\n wrapper.unregisterVisibilityWatcher = wrapper.scope.$watch(function () {\n return visibilityWatcher(wrapper);\n });\n }\n elementRoutines.hideElement(wrapper); // hide inserted elements before data binding\n }\n\n function createElement(wrapper, insertAfter, insertElement) {\n var promises = null;\n var sibling = insertAfter > 0 ? buffer[insertAfter - 1].element : undefined;\n linker(function (clone, scope) {\n promises = insertElement(clone, sibling);\n wrapper.element = clone;\n wrapper.scope = scope;\n scope[itemName] = wrapper.item;\n });\n // ui-scroll-grid apply\n if (adapter.transform) {\n var tdInitializer = wrapper.scope.uiScrollTdInitializer;\n if (tdInitializer && tdInitializer.linking) {\n adapter.transform(wrapper.scope, wrapper.element);\n } else {\n wrapper.scope.uiScrollTdInitializer = {\n onLink: function onLink() {\n return adapter.transform(wrapper.scope, wrapper.element);\n },\n scope: wrapper.scope\n };\n }\n }\n return promises;\n }\n\n function updateDOM() {\n var promises = [];\n var toBePrepended = [];\n var toBeRemoved = [];\n var inserted = [];\n\n buffer.forEach(function (wrapper, i) {\n switch (wrapper.op) {\n case 'prepend':\n toBePrepended.unshift(wrapper);\n break;\n case 'append':\n insertWrapperContent(wrapper, i);\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'insert':\n promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated));\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'remove':\n toBeRemoved.push(wrapper);\n }\n });\n\n toBeRemoved.forEach(function (wrapper) {\n return promises = promises.concat(viewport.removeItem(wrapper));\n });\n\n if (toBePrepended.length) toBePrepended.forEach(function (wrapper) {\n insertWrapperContent(wrapper);\n wrapper.op = 'none';\n });\n\n buffer.forEach(function (item, i) {\n return item.scope.$index = buffer.first + i;\n });\n\n return {\n prepended: toBePrepended,\n removed: toBeRemoved,\n inserted: inserted,\n animated: promises\n };\n }\n\n function updatePaddings(rid, updates) {\n // schedule another adjustBuffer after animation completion\n if (updates.animated.length) {\n $q.all(updates.animated).then(function () {\n viewport.adjustPaddings();\n adjustBuffer(rid);\n });\n } else {\n viewport.adjustPaddings();\n }\n }\n\n function enqueueFetch(rid, updates) {\n if (viewport.shouldLoadBottom()) {\n if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\n // this means that at least one item appended in the last batch has height > 0\n if (pending.push(true) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n } else if (viewport.shouldLoadTop()) {\n if (!updates || buffer.effectiveHeight(updates.prepended) > 0 || pending[0]) {\n // this means that at least one item appended in the last batch has height > 0\n // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\n // BTW there will always be at least 1 element in the pending array because bottom is fetched first\n if (pending.push(false) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n }\n }\n\n function processUpdates() {\n var updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustments\n !$scope.$$phase && !$scope.$root.$$phase && $scope.$digest();\n\n updates.inserted.forEach(function (w) {\n return elementRoutines.showElement(w);\n });\n updates.prepended.forEach(function (w) {\n return elementRoutines.showElement(w);\n });\n return updates;\n }\n\n function adjustBuffer(rid) {\n if (!rid) {\n // dismiss pending requests\n pending = [];\n rid = ++ridActual;\n }\n\n var updates = processUpdates();\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n enqueueFetch(rid);\n\n if (!pending.length) {\n adapter.calculateProperties();\n }\n }\n\n function adjustBufferAfterFetch(rid) {\n var updates = processUpdates();\n\n viewport.onAfterPrepend(updates);\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n onRenderHandlersRunner();\n enqueueFetch(rid, updates);\n pending.shift();\n\n if (pending.length) fetch(rid);else {\n adapter.loading(false);\n bindEvents();\n adapter.calculateProperties();\n }\n }\n\n function fetch(rid) {\n if (pending[0]) {\n // scrolling down\n if (buffer.length && !viewport.shouldLoadBottom()) {\n adjustBufferAfterFetch(rid);\n } else {\n fetchNext(function (result) {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.eof = true;\n }\n\n if (result.length > 0) {\n viewport.clipTop();\n buffer.append(result);\n }\n\n adjustBufferAfterFetch(rid);\n });\n }\n } else {\n // scrolling up\n if (buffer.length && !viewport.shouldLoadTop()) {\n adjustBufferAfterFetch(rid);\n } else {\n fetchPrevious(function (result) {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.bof = true;\n // log 'bof is reached'\n }\n\n if (result.length > 0) {\n if (buffer.length) {\n viewport.clipBottom();\n }\n buffer.prepend(result);\n }\n\n 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.$$phase && $scope.$digest();\n }\n }\n }\n\n function wheelHandler(event) {\n if (!adapter.disabled) {\n var scrollTop = viewport[0].scrollTop;\n var yMax = viewport[0].scrollHeight - viewport[0].clientHeight;\n\n if (scrollTop === 0 && !buffer.bof || scrollTop === yMax && !buffer.eof) {\n event.preventDefault();\n }\n }\n }\n }\n}]);\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// ui-scroll.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 89278db0f17c3b04f1d1","function getCtrlOnData(attr, element) {\r\n let onSyntax = attr.match(/^(.+)(\\s+on\\s+)(.+)?/);\r\n if (onSyntax && onSyntax.length === 4) {\r\n window.console.log('Angular ui-scroll adapter assignment warning. \"Controller On\" syntax has been deprecated since ui-scroll v1.6.1.');\r\n let ctrl = onSyntax[3];\r\n let tail = onSyntax[1];\r\n let candidate = element;\r\n while (candidate.length) {\r\n let candidateScope = candidate.scope(); // doesn't work when debugInfoEnabled flag = true\r\n let candidateName = (candidate.attr('ng-controller') || '').match(/(\\w(?:\\w|\\d)*)(?:\\s+as\\s+(\\w(?:\\w|\\d)*))?/);\r\n if (candidateName && candidateName[1] === ctrl) {\r\n return {\r\n target: candidateScope,\r\n source: tail\r\n };\r\n }\r\n candidate = candidate.parent();\r\n }\r\n throw new Error('Angular ui-scroll adapter assignment error. Failed to locate target controller \"' + ctrl + '\" to inject \"' + tail + '\"');\r\n }\r\n}\r\n\r\nclass Adapter {\r\n\r\n constructor(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope) {\r\n this.viewport = viewport;\r\n this.buffer = buffer;\r\n this.adjustBuffer = adjustBuffer;\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, $parse, element);\r\n this.generatePublicContext($attr, $parse);\r\n }\r\n\r\n assignAdapter(adapterAttr, $parse, element) {\r\n if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\\s+|\\s+$/gm, ''))) {\r\n return;\r\n }\r\n let ctrlOnData = getCtrlOnData(adapterAttr, element);\r\n let adapterOnScope;\r\n\r\n try {\r\n if (ctrlOnData) { // \"Controller On\", deprecated since v1.6.1\r\n $parse(ctrlOnData.source).assign(ctrlOnData.target, {});\r\n adapterOnScope = $parse(ctrlOnData.source)(ctrlOnData.target);\r\n }\r\n else {\r\n $parse(adapterAttr).assign(this.startScope, {});\r\n adapterOnScope = $parse(adapterAttr)(this.startScope);\r\n }\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($attr, $parse) {\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 = $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 $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.adjustBuffer() : 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.adjustBuffer();\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.adjustBuffer();\r\n this.viewport.clipTop();\r\n this.viewport.clipBottom();\r\n }\r\n\r\n applyUpdates(arg1, arg2) {\r\n if (angular.isFunction(arg1)) {\r\n this.applyUpdatesFunc(arg1);\r\n } else {\r\n this.applyUpdatesIndex(arg1, arg2);\r\n }\r\n this.adjustBuffer();\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) { // checking if it is an integer\r\n throw new Error('applyUpdates - ' + index + ' is not a valid index');\r\n }\r\n index -= this.buffer.first;\r\n if ((index >= 0 && index < this.buffer.length)) {\r\n this.applyUpdate(this.buffer[index], newItems);\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;\n\n\n// WEBPACK FOOTER //\n// ./src/modules/adapter.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, 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\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') {\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 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 return buffer;\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/buffer.js","const hideClassToken = 'ng-ui-scroll-hide';\r\n\r\nfunction addCSSRule(sheet, selector, rules, index) {\r\n if('insertRule' in sheet) {\r\n sheet.insertRule(selector + '{' + rules + '}', index);\r\n }\r\n else if('addRule' in sheet) {\r\n sheet.addRule(selector, rules, index);\r\n }\r\n}\r\n\r\nexport default class ElementRoutines {\r\n\r\n constructor($injector, $q) {\r\n this.$animate = ($injector.has && $injector.has('$animate')) ? $injector.get('$animate') : null;\r\n this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3;\r\n this.$q = $q;\r\n addCSSRule(document.styleSheets[0], '.' + hideClassToken, 'display: none');\r\n }\r\n\r\n hideElement(wrapper) {\r\n wrapper.element.addClass(hideClassToken);\r\n }\r\n\r\n showElement(wrapper) {\r\n wrapper.element.removeClass(hideClassToken);\r\n }\r\n\r\n insertElement(newElement, previousElement) {\r\n previousElement.after(newElement);\r\n return [];\r\n }\r\n\r\n removeElement(wrapper) {\r\n wrapper.element.remove();\r\n wrapper.scope.$destroy();\r\n return [];\r\n }\r\n\r\n insertElementAnimated(newElement, previousElement) {\r\n if (!this.$animate) {\r\n return this.insertElement(newElement, previousElement);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n // no need for parent - previous element is never null\r\n this.$animate.enter(newElement, null, previousElement, () => deferred.resolve());\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n // no need for parent - previous element is never null\r\n return [this.$animate.enter(newElement, null, previousElement)];\r\n }\r\n\r\n removeElementAnimated(wrapper) {\r\n if (!this.$animate) {\r\n return this.removeElement(wrapper);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n this.$animate.leave(wrapper.element, () => {\r\n wrapper.scope.$destroy();\r\n return deferred.resolve();\r\n });\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n return [(this.$animate.leave(wrapper.element)).then(() => wrapper.scope.$destroy())];\r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/elementRoutines.js","/*!\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","import Padding from './padding';\r\n\r\nexport default function Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding) {\r\n let topPadding = null;\r\n let bottomPadding = null;\r\n const viewport = viewportController && viewportController.viewport ? viewportController.viewport : angular.element(window);\r\n const container = viewportController && viewportController.container ? viewportController.container : undefined;\r\n const scope = viewportController && viewportController.scope ? viewportController.scope : $rootScope;\r\n\r\n viewport.css({\r\n 'overflow-anchor': 'none',\r\n 'overflow-y': 'auto',\r\n 'display': 'block'\r\n });\r\n\r\n function bufferPadding() {\r\n return viewport.outerHeight() * padding; // some extra space to initiate preload\r\n }\r\n\r\n angular.extend(viewport, {\r\n getScope() {\r\n return scope;\r\n },\r\n\r\n createPaddingElements(template) {\r\n topPadding = new Padding(template);\r\n bottomPadding = new Padding(template);\r\n element.before(topPadding);\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.adjustPaddings();\r\n }\r\n },\r\n\r\n shouldLoadTop() {\r\n return !buffer.bof && (viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding());\r\n },\r\n\r\n clipTop() {\r\n // clip the invisible items off the top\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\r\n\r\n for (let i = 0; i < buffer.length; i++) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n topPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n // we need to adjust top padding element before items are removed from top\r\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\r\n topPadding.height(topPadding.height() + overageHeight);\r\n buffer.bof = false;\r\n buffer.remove(0, overage);\r\n buffer.first += overage;\r\n }\r\n },\r\n\r\n adjustPaddings() {\r\n if (!buffer.length) {\r\n return;\r\n }\r\n\r\n // precise heights calculation, 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 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 diff -= viewport.scrollTop();\r\n if(diff > 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 removeItem(item) {\r\n topPadding.cache.remove(item);\r\n bottomPadding.cache.remove(item);\r\n return buffer.remove(item);\r\n }\r\n });\r\n\r\n return viewport;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/viewport.js","// Can't just extend the Array, due to Babel does not support built-in classes extending\r\n// This solution was taken from https://stackoverflow.com/questions/46897414/es6-class-extends-array-workaround-for-es5-babel-transpile\r\nclass CacheProto {\r\n add(item) {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index === item.scope.$index) {\r\n this[i].height = item.element.outerHeight();\r\n return;\r\n }\r\n }\r\n this.push({\r\n index: item.scope.$index,\r\n height: item.element.outerHeight()\r\n });\r\n this.sort((a, b) => ((a.index < b.index) ? -1 : ((a.index > b.index) ? 1 : 0)));\r\n }\r\n\r\n remove(itemToRemove) {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index === itemToRemove.scope.$index) {\r\n this.splice(i, 1);\r\n break;\r\n }\r\n }\r\n if(itemToRemove._op !== 'isTop') {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index > itemToRemove.scope.$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\nexport default function Padding(template) {\r\n let result;\r\n\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\r\n switch (template.tagName.toLowerCase()) {\r\n case 'dl':\r\n throw new Error(`ui-scroll directive does not support <${template.tagName}> as a repeating tag: ${template.outerHTML}`);\r\n case 'tr':\r\n let table = angular.element('
    ');\r\n result = table.find('tr');\r\n break;\r\n case 'li':\r\n result = angular.element('
  • ');\r\n break;\r\n default:\r\n result = angular.element('
    ');\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","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 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 '$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, $rootScope, padding);\n let adapter = new Adapter(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope);\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 onRenderHandlers = [];\n function onRenderHandlersRunner() {\n if(onRenderHandlers.length) {\n angular.forEach(onRenderHandlers, (handler) => handler());\n onRenderHandlers = [];\n }\n }\n function preDefineIndexProperty(datasource, propName) {\n let getter;\n // need to postpone min/maxIndexUser processing if the view is empty\n if(datasource.hasOwnProperty(propName) && !buffer.length) {\n getter = datasource[propName];\n delete datasource[propName];\n onRenderHandlers.push(() => datasource[propName] = getter);\n }\n }\n\n function defineIndexProperty(datasource, propName, propUserName) {\n let descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n if (descriptor && (descriptor.set || descriptor.get)) {\n return;\n }\n let getter;\n preDefineIndexProperty(datasource, propName);\n Object.defineProperty(datasource, propName, {\n set: (value) => {\n getter = value;\n buffer[propUserName] = value;\n let topPaddingHeightOld = viewport.topDataPos();\n viewport.adjustPaddings();\n if (propName === 'minIndex') {\n viewport.onAfterMinIndexSet(topPaddingHeightOld);\n }\n },\n get: () => getter\n });\n }\n\n defineIndexProperty(datasource, 'minIndex', 'minIndexUser');\n defineIndexProperty(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 /**\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 if (!pending.length) {\n $timeout(() => adjustBuffer());\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 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 // ui-scroll-grid apply\n if (adapter.transform) {\n let tdInitializer = wrapper.scope.uiScrollTdInitializer;\n if (tdInitializer && tdInitializer.linking) {\n adapter.transform(wrapper.scope, wrapper.element);\n } else {\n wrapper.scope.uiScrollTdInitializer = {\n onLink: () => adapter.transform(wrapper.scope, wrapper.element),\n scope: wrapper.scope\n };\n }\n }\n return promises;\n }\n\n function updateDOM() {\n let promises = [];\n const toBePrepended = [];\n const toBeRemoved = [];\n const inserted = [];\n\n buffer.forEach((wrapper, i) => {\n switch (wrapper.op) {\n case 'prepend':\n toBePrepended.unshift(wrapper);\n break;\n case 'append':\n insertWrapperContent(wrapper, i);\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'insert':\n promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated));\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'remove':\n toBeRemoved.push(wrapper);\n }\n });\n\n toBeRemoved.forEach((wrapper) => promises = promises.concat(viewport.removeItem(wrapper)));\n\n if (toBePrepended.length)\n toBePrepended.forEach((wrapper) => {\n insertWrapperContent(wrapper);\n wrapper.op = 'none';\n });\n\n buffer.forEach((item, i) => item.scope.$index = buffer.first + i);\n\n return {\n prepended: toBePrepended,\n removed: toBeRemoved,\n inserted: inserted,\n animated: promises\n };\n\n }\n\n function updatePaddings(rid, updates) {\n // schedule another adjustBuffer after animation completion\n if (updates.animated.length) {\n $q.all(updates.animated).then(() => {\n viewport.adjustPaddings();\n adjustBuffer(rid);\n });\n } else {\n viewport.adjustPaddings();\n }\n }\n\n function enqueueFetch(rid, updates) {\n if (viewport.shouldLoadBottom()) {\n if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\n // this means that at least one item appended in the last batch has height > 0\n if (pending.push(true) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n } else if (viewport.shouldLoadTop()) {\n if ((!updates || buffer.effectiveHeight(updates.prepended) > 0) || pending[0]) {\n // this means that at least one item appended in the last batch has height > 0\n // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\n // BTW there will always be at least 1 element in the pending array because bottom is fetched first\n if (pending.push(false) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n }\n }\n\n function processUpdates() {\n const updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustments\n !$scope.$$phase && !$scope.$root.$$phase && $scope.$digest();\n\n updates.inserted.forEach(w => elementRoutines.showElement(w));\n updates.prepended.forEach(w => elementRoutines.showElement(w));\n return updates;\n }\n\n function adjustBuffer(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 adjustBufferAfterFetch(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 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.$$phase && $scope.$digest();\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"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///ui-scroll.min.js","webpack:///webpack/bootstrap 86fa6c49a99646d439cd","webpack:///./src/modules/adapter.js","webpack:///./src/modules/buffer.js","webpack:///./src/modules/elementRoutines.js","webpack:///./src/modules/jqLiteExtras.js","webpack:///./src/modules/viewport.js","webpack:///./src/modules/padding.js","webpack:///./src/ui-scroll.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","_classCallCheck","instance","Constructor","TypeError","getCtrlOnData","attr","element","onSyntax","match","length","window","console","log","ctrl","tail","candidate","candidateScope","scope","candidateName","target","source","parent","Error","_createClass","defineProperties","props","descriptor","writable","key","protoProps","staticProps","Adapter","viewport","buffer","adjustBuffer","reload","$attr","$parse","$scope","this","isLoading","disabled","viewportScope","getScope","startScope","$parent","publicContext","assignAdapter","adapter","generatePublicContext","adapterAttr","replace","ctrlOnData","adapterOnScope","assign","error","message","angular","extend","_this","publicMethods","bind","publicProps","set","bof","eof","newItems","append","clipTop","clipBottom","prepend","arg1","arg2","isFunction","applyUpdatesFunc","applyUpdatesIndex","cb","_this2","slice","forEach","wrapper","applyUpdate","item","index","first","_this3","isArray","position","indexOf","reverse","some","newItem","op","_op","insert","rowTop","topHeight","topDone","bottomDone","itemTop","offset","top","itemHeight","outerHeight","topDataPos","topVisiblePos","bottomVisiblePos","isEOF","default","ScrollBuffer","elementRoutines","bufferSize","create","Array","size","reset","startIndex","remove","next","minIndex","maxIndex","minIndexUser","maxIndexUser","items","Math","max","min","operation","isTop","splice","push","unshift","isNumber","removeElement","removeElementAnimated","effectiveHeight","elements","Number","MAX_VALUE","bottom","NEGATIVE_INFINITY","offsetParent","addCSSRule","sheet","selector","rules","insertRule","addRule","hideClassToken","ElementRoutines","$injector","$q","$animate","has","isAngularVersionLessThen1_3","version","major","minor","document","styleSheets","addClass","removeClass","newElement","previousElement","after","$destroy","insertElement","deferred","defer","enter","resolve","promise","leave","then","_slicedToArray","sliceIterator","arr","_arr","_n","_d","_e","undefined","_s","_i","Symbol","iterator","done","err","JQLiteExtras","scrollTo","self","direction","elem","_top$left$direction","left","method","prop","preserve","isWindow","isDefined","documentElement","getMeasurements","measure","base","borderA","borderB","computedMarginA","computedMarginB","computedStyle","dirA","dirB","marginA","marginB","paddingA","paddingB","height","width","padding","border","margin","_width$height$measure","offsetWidth","offsetHeight","getStyle","convertToPx","getWidthHeight","result","measurements","outer","outerfull","style","parseFloat","css","nodeType","obj","location","alert","setInterval","getComputedStyle","currentStyle","rs","rsLeft","core_pnum","RegExp","test","runtimeStyle","pixelLeft","before","newElem","children","j","ref","contents","outerHTML","option","outerWidth","docElem","win","box","doc","ownerDocument","arguments","getBoundingClientRect","defaultView","parentWindow","pageYOffset","scrollTop","clientTop","pageXOffset","scrollLeft","clientLeft","Viewport","viewportController","$rootScope","bufferPadding","topPadding","bottomPadding","container","overflow-anchor","overflow-y","display","createPaddingElements","template","_padding2","applyContainerStyle","bottomDataPos","scrollHeight","e","sibling","insertElementAnimated","shouldLoadBottom","overage","overageHeight","emptySpaceHeight","cache","add","adjustPaddings","shouldLoadTop","topPaddingHeight","reduce","summ","bottomPaddingHeight","visibleItemsHeight","averageItemHeight","adjustTopPadding","adjustBottomPadding","topPaddingHeightAdd","bottomPaddingHeightAdd","onAfterMinIndexSet","topPaddingHeightOld","diff","onAfterPrepend","updates","prepended","paddingHeight","resetTopPadding","clear","resetBottomPadding","removeItem","_padding","Cache","apply","setPrototypeOf","Padding","Node","ELEMENT_NODE","tagName","toLowerCase","find","CacheProto","$index","sort","a","b","itemToRemove","getOwnPropertyNames","methodName","_interopRequireDefault","_jqLiteExtras","_jqLiteExtras2","_elementRoutines","_elementRoutines2","_buffer","_buffer2","_viewport","_viewport2","_adapter","_adapter2","service","run","jqLiteExtras","jQuery","registerFor","directive","restrict","controller","child","$timeout","link","controllers","linker","parseNumericAttr","defaultValue","isNaN","onRenderHandlersRunner","onRenderHandlers","handler","preDefineIndexProperty","datasource","propName","defineIndexProperty","propUserName","getOwnPropertyDescriptor","isInvalid","rid","ridActual","$$destroyed","bindEvents","resizeAndScrollHandler","unbindEvents","unbind","isElementVisible","visibilityWatcher","unregisterVisibilityWatcher","pending","insertWrapperContent","insertAfter","createElement","$watch","hideElement","promises","clone","itemName","transform","tdInitializer","uiScrollTdInitializer","linking","onLink","updateDOM","toBePrepended","toBeRemoved","inserted","concat","removed","animated","updatePaddings","all","enqueueFetch","loading","fetch","processUpdates","$$phase","$digest","w","showElement","calculateProperties","adjustBufferAfterFetch","shift","fetchNext","fetchPrevious","wheelHandler","event","yMax","clientHeight","preventDefault","uiScroll","datasourceName","isDatasourceValid","isObject","success","count","$on","require","transclude","priority","terminal"],"mappings":"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","file":"ui-scroll.min.js","sourcesContent":["/*!\r\n * angular-ui-scroll (uncompressed)\r\n * https://github.com/angular-ui/ui-scroll\r\n * Version: 1.7.0-rc.4 -- 2017-10-27T14:37:56.031Z\r\n * License: MIT\r\n */\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 7);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getCtrlOnData(attr, element) {\n var onSyntax = attr.match(/^(.+)(\\s+on\\s+)(.+)?/);\n if (onSyntax && onSyntax.length === 4) {\n window.console.log('Angular ui-scroll adapter assignment warning. \"Controller On\" syntax has been deprecated since ui-scroll v1.6.1.');\n var ctrl = onSyntax[3];\n var tail = onSyntax[1];\n var candidate = element;\n while (candidate.length) {\n var candidateScope = candidate.scope(); // doesn't work when debugInfoEnabled flag = true\n var candidateName = (candidate.attr('ng-controller') || '').match(/(\\w(?:\\w|\\d)*)(?:\\s+as\\s+(\\w(?:\\w|\\d)*))?/);\n if (candidateName && candidateName[1] === ctrl) {\n return {\n target: candidateScope,\n source: tail\n };\n }\n candidate = candidate.parent();\n }\n throw new Error('Angular ui-scroll adapter assignment error. Failed to locate target controller \"' + ctrl + '\" to inject \"' + tail + '\"');\n }\n}\n\nvar Adapter = function () {\n function Adapter(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope) {\n _classCallCheck(this, Adapter);\n\n this.viewport = viewport;\n this.buffer = buffer;\n this.adjustBuffer = adjustBuffer;\n this.reload = reload;\n\n this.isLoading = false;\n this.disabled = false;\n\n var viewportScope = viewport.getScope();\n this.startScope = viewportScope.$parent ? viewportScope : $scope;\n\n this.publicContext = {};\n this.assignAdapter($attr.adapter, $parse, element);\n this.generatePublicContext($attr, $parse);\n }\n\n _createClass(Adapter, [{\n key: 'assignAdapter',\n value: function assignAdapter(adapterAttr, $parse, element) {\n if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\\s+|\\s+$/gm, ''))) {\n return;\n }\n var ctrlOnData = getCtrlOnData(adapterAttr, element);\n var adapterOnScope = void 0;\n\n try {\n if (ctrlOnData) {\n // \"Controller On\", deprecated since v1.6.1\n $parse(ctrlOnData.source).assign(ctrlOnData.target, {});\n adapterOnScope = $parse(ctrlOnData.source)(ctrlOnData.target);\n } else {\n $parse(adapterAttr).assign(this.startScope, {});\n adapterOnScope = $parse(adapterAttr)(this.startScope);\n }\n } catch (error) {\n error.message = 'Angular ui-scroll Adapter assignment exception.\\n' + ('Can\\'t parse \"' + adapterAttr + '\" expression.\\n') + error.message;\n throw error;\n }\n\n angular.extend(adapterOnScope, this.publicContext);\n this.publicContext = adapterOnScope;\n }\n }, {\n key: 'generatePublicContext',\n value: function generatePublicContext($attr, $parse) {\n var _this = this;\n\n // these methods will be accessible out of ui-scroll via user defined adapter\n var publicMethods = ['reload', 'applyUpdates', 'append', 'prepend', 'isBOF', 'isEOF', 'isEmpty'];\n for (var i = publicMethods.length - 1; i >= 0; i--) {\n this.publicContext[publicMethods[i]] = this[publicMethods[i]].bind(this);\n }\n\n // these read-only props will be accessible out of ui-scroll via user defined adapter\n var publicProps = ['isLoading', 'topVisible', 'topVisibleElement', 'topVisibleScope', 'bottomVisible', 'bottomVisibleElement', 'bottomVisibleScope'];\n\n var _loop = function _loop(_i) {\n var property = void 0,\n attr = $attr[publicProps[_i]];\n Object.defineProperty(_this, publicProps[_i], {\n get: function get() {\n return property;\n },\n set: function set(value) {\n property = value;\n _this.publicContext[publicProps[_i]] = value;\n if (attr) {\n $parse(attr).assign(_this.startScope, value);\n }\n }\n });\n };\n\n for (var _i = publicProps.length - 1; _i >= 0; _i--) {\n _loop(_i);\n }\n\n // non-read-only public property\n Object.defineProperty(this.publicContext, 'disabled', {\n get: function get() {\n return _this.disabled;\n },\n set: function set(value) {\n return !(_this.disabled = value) ? _this.adjustBuffer() : null;\n }\n });\n }\n }, {\n key: 'loading',\n value: function loading(value) {\n this['isLoading'] = value;\n }\n }, {\n key: 'isBOF',\n value: function isBOF() {\n return this.buffer.bof;\n }\n }, {\n key: 'isEOF',\n value: function isEOF() {\n return this.buffer.eof;\n }\n }, {\n key: 'isEmpty',\n value: function isEmpty() {\n return !this.buffer.length;\n }\n }, {\n key: 'append',\n value: function append(newItems) {\n this.buffer.append(newItems);\n this.adjustBuffer();\n this.viewport.clipTop();\n this.viewport.clipBottom();\n }\n }, {\n key: 'prepend',\n value: function prepend(newItems) {\n this.buffer.prepend(newItems);\n this.adjustBuffer();\n this.viewport.clipTop();\n this.viewport.clipBottom();\n }\n }, {\n key: 'applyUpdates',\n value: function applyUpdates(arg1, arg2) {\n if (angular.isFunction(arg1)) {\n this.applyUpdatesFunc(arg1);\n } else {\n this.applyUpdatesIndex(arg1, arg2);\n }\n this.adjustBuffer();\n }\n }, {\n key: 'applyUpdatesFunc',\n value: function applyUpdatesFunc(cb) {\n var _this2 = this;\n\n this.buffer.slice(0).forEach(function (wrapper) {\n // we need to do it on the buffer clone, because buffer content\n // may change as we iterate through\n _this2.applyUpdate(wrapper, cb(wrapper.item, wrapper.scope, wrapper.element));\n });\n }\n }, {\n key: 'applyUpdatesIndex',\n value: function applyUpdatesIndex(index, newItems) {\n if (index % 1 !== 0) {\n // checking if it is an integer\n throw new Error('applyUpdates - ' + index + ' is not a valid index');\n }\n index -= this.buffer.first;\n if (index >= 0 && index < this.buffer.length) {\n this.applyUpdate(this.buffer[index], newItems);\n }\n }\n }, {\n key: 'applyUpdate',\n value: function applyUpdate(wrapper, newItems) {\n var _this3 = this;\n\n if (!angular.isArray(newItems)) {\n return;\n }\n var position = this.buffer.indexOf(wrapper);\n if (!newItems.reverse().some(function (newItem) {\n return newItem === wrapper.item;\n })) {\n wrapper.op = 'remove';\n if (position === 0 && !newItems.length) {\n wrapper._op = 'isTop'; // to catch \"first\" edge case on remove\n }\n }\n newItems.forEach(function (newItem) {\n if (newItem === wrapper.item) {\n position--;\n } else {\n // 3 parameter (isTop) is to catch \"first\" edge case on insert\n _this3.buffer.insert(position + 1, newItem, position === -1);\n }\n });\n }\n }, {\n key: 'calculateProperties',\n value: function calculateProperties() {\n var rowTop = null,\n topHeight = 0;\n var topDone = false,\n bottomDone = false;\n var length = this.buffer.length;\n\n for (var i = 0; i < length; i++) {\n var item = this.buffer[i];\n var itemTop = item.element.offset().top;\n\n if (rowTop !== itemTop) {\n // a new row condition\n var itemHeight = item.element.outerHeight(true);\n var top = this.viewport.topDataPos() + topHeight + itemHeight;\n\n if (!topDone && top > this.viewport.topVisiblePos()) {\n topDone = true;\n this['topVisible'] = item.item;\n this['topVisibleElement'] = item.element;\n this['topVisibleScope'] = item.scope;\n }\n if (!bottomDone && (top >= this.viewport.bottomVisiblePos() || i === length - 1 && this.isEOF())) {\n bottomDone = true;\n this['bottomVisible'] = item.item;\n this['bottomVisibleElement'] = item.element;\n this['bottomVisibleScope'] = item.scope;\n }\n topHeight += itemHeight;\n }\n rowTop = itemTop;\n\n if (topDone && bottomDone) {\n break;\n }\n }\n }\n }]);\n\n return Adapter;\n}();\n\nexports.default = Adapter;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = ScrollBuffer;\nfunction ScrollBuffer(elementRoutines, bufferSize) {\n var buffer = Object.create(Array.prototype);\n\n angular.extend(buffer, {\n size: bufferSize,\n\n reset: function reset(startIndex) {\n buffer.remove(0, buffer.length);\n buffer.eof = false;\n buffer.bof = false;\n buffer.first = startIndex;\n buffer.next = startIndex;\n buffer.minIndex = startIndex;\n buffer.maxIndex = startIndex;\n buffer.minIndexUser = null;\n buffer.maxIndexUser = null;\n },\n append: function append(items) {\n items.forEach(function (item) {\n ++buffer.next;\n buffer.insert('append', item);\n });\n buffer.maxIndex = buffer.eof ? buffer.next - 1 : Math.max(buffer.next - 1, buffer.maxIndex);\n },\n prepend: function prepend(items) {\n items.reverse().forEach(function (item) {\n --buffer.first;\n buffer.insert('prepend', item);\n });\n buffer.minIndex = buffer.bof ? buffer.minIndex = buffer.first : Math.min(buffer.first, buffer.minIndex);\n },\n\n\n /**\r\n * inserts wrapped element in the buffer\r\n * the first argument is either operation keyword (see below) or a number for operation 'insert'\r\n * for insert the number is the index for the buffer element the new one have to be inserted after\r\n * operations: 'append', 'prepend', 'insert', 'remove', 'update', 'none'\r\n */\n insert: function insert(operation, item, isTop) {\n var wrapper = {\n item: item\n };\n\n if (operation % 1 === 0) {\n // it is an insert\n wrapper.op = 'insert';\n buffer.splice(operation, 0, wrapper);\n if (isTop) {\n buffer.first--;\n } else {\n buffer.next++;\n }\n } else {\n wrapper.op = operation;\n switch (operation) {\n case 'append':\n buffer.push(wrapper);\n break;\n case 'prepend':\n buffer.unshift(wrapper);\n break;\n }\n }\n },\n\n\n // removes elements from buffer\n remove: function remove(arg1, arg2) {\n if (angular.isNumber(arg1)) {\n // removes items from arg1 (including) through arg2 (excluding)\n for (var i = arg1; i < arg2; i++) {\n elementRoutines.removeElement(buffer[i]);\n }\n\n return buffer.splice(arg1, arg2 - arg1);\n }\n // removes single item(wrapper) from the buffer\n buffer.splice(buffer.indexOf(arg1), 1);\n if (arg1._op === 'isTop') {\n buffer.first++;\n } else {\n buffer.next--;\n }\n if (!buffer.length) {\n buffer.first = 1;\n buffer.next = 1;\n }\n\n return elementRoutines.removeElementAnimated(arg1);\n },\n effectiveHeight: function effectiveHeight(elements) {\n if (!elements.length) {\n return 0;\n }\n var top = Number.MAX_VALUE;\n var bottom = Number.NEGATIVE_INFINITY;\n elements.forEach(function (wrapper) {\n if (wrapper.element[0].offsetParent) {\n // element style is not display:none\n top = Math.min(top, wrapper.element.offset().top);\n bottom = Math.max(bottom, wrapper.element.offset().top + wrapper.element.outerHeight(true));\n }\n });\n return Math.max(0, bottom - top);\n }\n });\n\n return buffer;\n}\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar hideClassToken = 'ng-ui-scroll-hide';\n\nfunction addCSSRule(sheet, selector, rules, index) {\n if ('insertRule' in sheet) {\n sheet.insertRule(selector + '{' + rules + '}', index);\n } else if ('addRule' in sheet) {\n sheet.addRule(selector, rules, index);\n }\n}\n\nvar ElementRoutines = function () {\n function ElementRoutines($injector, $q) {\n _classCallCheck(this, ElementRoutines);\n\n this.$animate = $injector.has && $injector.has('$animate') ? $injector.get('$animate') : null;\n this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3;\n this.$q = $q;\n addCSSRule(document.styleSheets[0], '.' + hideClassToken, 'display: none');\n }\n\n _createClass(ElementRoutines, [{\n key: 'hideElement',\n value: function hideElement(wrapper) {\n wrapper.element.addClass(hideClassToken);\n }\n }, {\n key: 'showElement',\n value: function showElement(wrapper) {\n wrapper.element.removeClass(hideClassToken);\n }\n }, {\n key: 'insertElement',\n value: function insertElement(newElement, previousElement) {\n previousElement.after(newElement);\n return [];\n }\n }, {\n key: 'removeElement',\n value: function removeElement(wrapper) {\n wrapper.element.remove();\n wrapper.scope.$destroy();\n return [];\n }\n }, {\n key: 'insertElementAnimated',\n value: function insertElementAnimated(newElement, previousElement) {\n if (!this.$animate) {\n return this.insertElement(newElement, previousElement);\n }\n\n if (this.isAngularVersionLessThen1_3) {\n var deferred = this.$q.defer();\n // no need for parent - previous element is never null\n this.$animate.enter(newElement, null, previousElement, function () {\n return deferred.resolve();\n });\n\n return [deferred.promise];\n }\n\n // no need for parent - previous element is never null\n return [this.$animate.enter(newElement, null, previousElement)];\n }\n }, {\n key: 'removeElementAnimated',\n value: function removeElementAnimated(wrapper) {\n if (!this.$animate) {\n return this.removeElement(wrapper);\n }\n\n if (this.isAngularVersionLessThen1_3) {\n var deferred = this.$q.defer();\n this.$animate.leave(wrapper.element, function () {\n wrapper.scope.$destroy();\n return deferred.resolve();\n });\n\n return [deferred.promise];\n }\n\n return [this.$animate.leave(wrapper.element).then(function () {\n return wrapper.scope.$destroy();\n })];\n }\n }]);\n\n return ElementRoutines;\n}();\n\nexports.default = ElementRoutines;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*!\r\n globals: angular, window\r\n List of used element methods available in JQuery but not in JQuery Lite\r\n element.before(elem)\r\n element.height()\r\n element.outerHeight(true)\r\n element.height(value) = only for Top/Bottom padding elements\r\n element.scrollTop()\r\n element.scrollTop(value)\r\n */\n\nvar JQLiteExtras = function () {\n function JQLiteExtras() {\n _classCallCheck(this, JQLiteExtras);\n }\n\n _createClass(JQLiteExtras, [{\n key: 'registerFor',\n value: function registerFor(element) {\n var convertToPx = void 0,\n css = void 0,\n getStyle = void 0,\n isWindow = void 0;\n // angular implementation blows up if elem is the window\n css = angular.element.prototype.css;\n\n element.prototype.css = function (name, value) {\n var self = this;\n var elem = self[0];\n if (!(!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style)) {\n return css.call(self, name, value);\n }\n };\n\n // as defined in angularjs v1.0.5\n isWindow = function isWindow(obj) {\n return obj && obj.document && obj.location && obj.alert && obj.setInterval;\n };\n\n function scrollTo(self, direction, value) {\n var elem = self[0];\n\n var _top$left$direction = _slicedToArray({\n top: ['scrollTop', 'pageYOffset', 'scrollLeft'],\n left: ['scrollLeft', 'pageXOffset', 'scrollTop']\n }[direction], 3),\n method = _top$left$direction[0],\n prop = _top$left$direction[1],\n preserve = _top$left$direction[2];\n\n if (isWindow(elem)) {\n if (angular.isDefined(value)) {\n return elem.scrollTo(self[preserve].call(self), value);\n }\n return prop in elem ? elem[prop] : elem.document.documentElement[method];\n } else {\n if (angular.isDefined(value)) {\n elem[method] = value;\n }\n return elem[method];\n }\n }\n\n if (window.getComputedStyle) {\n getStyle = function getStyle(elem) {\n return window.getComputedStyle(elem, null);\n };\n convertToPx = function convertToPx(elem, value) {\n return parseFloat(value);\n };\n } else {\n getStyle = function getStyle(elem) {\n return elem.currentStyle;\n };\n convertToPx = function convertToPx(elem, value) {\n var left = void 0,\n result = void 0,\n rs = void 0,\n rsLeft = void 0,\n style = void 0;\n var core_pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n var rnumnonpx = new RegExp('^(' + core_pnum + ')(?!px)[a-z%]+$', 'i');\n\n if (!rnumnonpx.test(value)) {\n return parseFloat(value);\n }\n\n // ported from JQuery\n style = elem.style;\n left = style.left;\n rs = elem.runtimeStyle;\n rsLeft = rs && rs.left;\n if (rs) {\n rs.left = style.left;\n }\n // put in the new values to get a computed style out\n style.left = value;\n result = style.pixelLeft;\n style.left = left;\n if (rsLeft) {\n rs.left = rsLeft;\n }\n return result;\n };\n }\n\n function getMeasurements(elem, measure) {\n var base = void 0,\n borderA = void 0,\n borderB = void 0,\n computedMarginA = void 0,\n computedMarginB = void 0,\n computedStyle = void 0,\n dirA = void 0,\n dirB = void 0,\n marginA = void 0,\n marginB = void 0,\n paddingA = void 0,\n paddingB = void 0;\n\n if (isWindow(elem)) {\n base = document.documentElement[{ height: 'clientHeight', width: 'clientWidth' }[measure]];\n\n return {\n base: base,\n padding: 0,\n border: 0,\n margin: 0\n };\n }\n\n // Start with offset property\n\n var _width$height$measure = _slicedToArray({\n width: [elem.offsetWidth, 'Left', 'Right'],\n height: [elem.offsetHeight, 'Top', 'Bottom']\n }[measure], 3);\n\n base = _width$height$measure[0];\n dirA = _width$height$measure[1];\n dirB = _width$height$measure[2];\n\n\n computedStyle = getStyle(elem);\n paddingA = convertToPx(elem, computedStyle['padding' + dirA]) || 0;\n paddingB = convertToPx(elem, computedStyle['padding' + dirB]) || 0;\n borderA = convertToPx(elem, computedStyle['border' + dirA + 'Width']) || 0;\n borderB = convertToPx(elem, computedStyle['border' + dirB + 'Width']) || 0;\n computedMarginA = computedStyle['margin' + dirA];\n computedMarginB = computedStyle['margin' + dirB];\n\n // I do not care for width for now, so this hack is irrelevant\n // if ( !supportsPercentMargin )\n // computedMarginA = hackPercentMargin( elem, computedStyle, computedMarginA )\n // computedMarginB = hackPercentMargin( elem, computedStyle, computedMarginB )\n marginA = convertToPx(elem, computedMarginA) || 0;\n marginB = convertToPx(elem, computedMarginB) || 0;\n\n return {\n base: base,\n padding: paddingA + paddingB,\n border: borderA + borderB,\n margin: marginA + marginB\n };\n }\n\n function getWidthHeight(elem, direction, measure) {\n var computedStyle = void 0,\n result = void 0;\n\n var measurements = getMeasurements(elem, direction);\n\n if (measurements.base > 0) {\n return {\n base: measurements.base - measurements.padding - measurements.border,\n outer: measurements.base,\n outerfull: measurements.base + measurements.margin\n }[measure];\n }\n\n // Fall back to computed then uncomputed css if necessary\n computedStyle = getStyle(elem);\n result = computedStyle[direction];\n\n if (result < 0 || result === null) {\n result = elem.style[direction] || 0;\n }\n\n // Normalize \"\", auto, and prepare for extra\n result = parseFloat(result) || 0;\n\n return {\n base: result - measurements.padding - measurements.border,\n outer: result,\n outerfull: result + measurements.padding + measurements.border + measurements.margin\n }[measure];\n }\n\n // define missing methods\n return angular.forEach({\n before: function before(newElem) {\n var children, elem, i, j, parent, ref, self;\n self = this;\n elem = self[0];\n parent = self.parent();\n children = parent.contents();\n if (children[0] === elem) {\n return parent.prepend(newElem);\n } else {\n for (i = j = 1, ref = children.length - 1; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {\n if (children[i] === elem) {\n angular.element(children[i - 1]).after(newElem);\n return;\n }\n }\n throw new Error('invalid DOM structure ' + elem.outerHTML);\n }\n },\n height: function height(value) {\n var self;\n self = this;\n if (angular.isDefined(value)) {\n if (angular.isNumber(value)) {\n value = value + 'px';\n }\n return css.call(self, 'height', value);\n } else {\n return getWidthHeight(this[0], 'height', 'base');\n }\n },\n outerHeight: function outerHeight(option) {\n return getWidthHeight(this[0], 'height', option ? 'outerfull' : 'outer');\n },\n outerWidth: function outerWidth(option) {\n return getWidthHeight(this[0], 'width', option ? 'outerfull' : 'outer');\n },\n\n\n /*\r\n The offset setter method is not implemented\r\n */\n offset: function offset(value) {\n var docElem = void 0,\n win = void 0;\n var self = this;\n var box = {\n top: 0,\n left: 0\n };\n var elem = self[0];\n var doc = elem && elem.ownerDocument;\n\n if (arguments.length) {\n if (value === undefined) {\n return self;\n }\n // TODO: implement setter\n throw new Error('offset setter method is not implemented');\n }\n\n if (!doc) {\n return;\n }\n\n docElem = doc.documentElement;\n\n // TODO: Make sure it's not a disconnected DOM node\n\n if (elem.getBoundingClientRect != null) {\n box = elem.getBoundingClientRect();\n }\n\n win = doc.defaultView || doc.parentWindow;\n\n return {\n top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),\n left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0)\n };\n },\n scrollTop: function scrollTop(value) {\n return scrollTo(this, 'top', value);\n },\n scrollLeft: function scrollLeft(value) {\n return scrollTo(this, 'left', value);\n }\n }, function (value, key) {\n if (!element.prototype[key]) {\n return element.prototype[key] = value;\n }\n });\n }\n }]);\n\n return JQLiteExtras;\n}();\n\nexports.default = JQLiteExtras;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = Viewport;\n\nvar _padding = __webpack_require__(5);\n\nvar _padding2 = _interopRequireDefault(_padding);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding) {\n var topPadding = null;\n var bottomPadding = null;\n var viewport = viewportController && viewportController.viewport ? viewportController.viewport : angular.element(window);\n var container = viewportController && viewportController.container ? viewportController.container : undefined;\n var scope = viewportController && viewportController.scope ? viewportController.scope : $rootScope;\n\n viewport.css({\n 'overflow-anchor': 'none',\n 'overflow-y': 'auto',\n 'display': 'block'\n });\n\n function bufferPadding() {\n return viewport.outerHeight() * padding; // some extra space to initiate preload\n }\n\n angular.extend(viewport, {\n getScope: function getScope() {\n return scope;\n },\n createPaddingElements: function createPaddingElements(template) {\n topPadding = new _padding2.default(template);\n bottomPadding = new _padding2.default(template);\n element.before(topPadding);\n element.after(bottomPadding);\n },\n applyContainerStyle: function applyContainerStyle() {\n if (container && container !== viewport) {\n viewport.css('height', window.getComputedStyle(container[0]).height);\n }\n },\n bottomDataPos: function bottomDataPos() {\n var scrollHeight = viewport[0].scrollHeight;\n scrollHeight = scrollHeight != null ? scrollHeight : viewport[0].document.documentElement.scrollHeight;\n return scrollHeight - bottomPadding.height();\n },\n topDataPos: function topDataPos() {\n return topPadding.height();\n },\n bottomVisiblePos: function bottomVisiblePos() {\n return viewport.scrollTop() + viewport.outerHeight();\n },\n topVisiblePos: function topVisiblePos() {\n return viewport.scrollTop();\n },\n insertElement: function insertElement(e, sibling) {\n return elementRoutines.insertElement(e, sibling || topPadding);\n },\n insertElementAnimated: function insertElementAnimated(e, sibling) {\n return elementRoutines.insertElementAnimated(e, sibling || topPadding);\n },\n shouldLoadBottom: function shouldLoadBottom() {\n return !buffer.eof && viewport.bottomDataPos() < viewport.bottomVisiblePos() + bufferPadding();\n },\n clipBottom: function clipBottom() {\n // clip the invisible items off the bottom\n var overage = 0;\n var overageHeight = 0;\n var itemHeight = 0;\n var emptySpaceHeight = viewport.bottomDataPos() - viewport.bottomVisiblePos() - bufferPadding();\n\n for (var i = buffer.length - 1; i >= 0; i--) {\n itemHeight = buffer[i].element.outerHeight(true);\n if (overageHeight + itemHeight > emptySpaceHeight) {\n break;\n }\n bottomPadding.cache.add(buffer[i]);\n overageHeight += itemHeight;\n overage++;\n }\n\n if (overage > 0) {\n buffer.eof = false;\n buffer.remove(buffer.length - overage, buffer.length);\n buffer.next -= overage;\n viewport.adjustPaddings();\n }\n },\n shouldLoadTop: function shouldLoadTop() {\n return !buffer.bof && viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding();\n },\n clipTop: function clipTop() {\n // clip the invisible items off the top\n var overage = 0;\n var overageHeight = 0;\n var itemHeight = 0;\n var emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\n\n for (var i = 0; i < buffer.length; i++) {\n itemHeight = buffer[i].element.outerHeight(true);\n if (overageHeight + itemHeight > emptySpaceHeight) {\n break;\n }\n topPadding.cache.add(buffer[i]);\n overageHeight += itemHeight;\n overage++;\n }\n\n if (overage > 0) {\n // we need to adjust top padding element before items are removed from top\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\n topPadding.height(topPadding.height() + overageHeight);\n buffer.bof = false;\n buffer.remove(0, overage);\n buffer.first += overage;\n }\n },\n adjustPaddings: function adjustPaddings() {\n if (!buffer.length) {\n return;\n }\n\n // precise heights calculation, items that were in buffer once\n var topPaddingHeight = topPadding.cache.reduce(function (summ, item) {\n return summ + (item.index < buffer.first ? item.height : 0);\n }, 0);\n var bottomPaddingHeight = bottomPadding.cache.reduce(function (summ, item) {\n return summ + (item.index >= buffer.next ? item.height : 0);\n }, 0);\n\n // average item height based on buffer data\n var visibleItemsHeight = buffer.reduce(function (summ, item) {\n return summ + item.element.outerHeight(true);\n }, 0);\n var averageItemHeight = (visibleItemsHeight + topPaddingHeight + bottomPaddingHeight) / (buffer.maxIndex - buffer.minIndex + 1);\n\n // average heights calculation, items that have never been reached\n var adjustTopPadding = buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser;\n var adjustBottomPadding = buffer.maxIndexUser !== null && buffer.maxIndex < buffer.maxIndexUser;\n var topPaddingHeightAdd = adjustTopPadding ? (buffer.minIndex - buffer.minIndexUser) * averageItemHeight : 0;\n var bottomPaddingHeightAdd = adjustBottomPadding ? (buffer.maxIndexUser - buffer.maxIndex) * averageItemHeight : 0;\n\n // paddings combine adjustment\n topPadding.height(topPaddingHeight + topPaddingHeightAdd);\n bottomPadding.height(bottomPaddingHeight + bottomPaddingHeightAdd);\n },\n onAfterMinIndexSet: function onAfterMinIndexSet(topPaddingHeightOld) {\n // additional scrollTop adjustment in case of datasource.minIndex external set\n if (buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser) {\n var diff = topPadding.height() - topPaddingHeightOld;\n viewport.scrollTop(viewport.scrollTop() + diff);\n diff -= viewport.scrollTop();\n if (diff > 0) {\n bottomPadding.height(bottomPadding.height() + diff);\n viewport.scrollTop(viewport.scrollTop() + diff);\n }\n }\n },\n onAfterPrepend: function onAfterPrepend(updates) {\n if (!updates.prepended.length) return;\n var height = buffer.effectiveHeight(updates.prepended);\n var paddingHeight = topPadding.height() - height;\n if (paddingHeight >= 0) {\n topPadding.height(paddingHeight);\n } else {\n topPadding.height(0);\n viewport.scrollTop(viewport.scrollTop() - paddingHeight);\n }\n },\n resetTopPadding: function resetTopPadding() {\n topPadding.height(0);\n topPadding.cache.clear();\n },\n resetBottomPadding: function resetBottomPadding() {\n bottomPadding.height(0);\n bottomPadding.cache.clear();\n },\n removeItem: function removeItem(item) {\n topPadding.cache.remove(item);\n bottomPadding.cache.remove(item);\n return buffer.remove(item);\n }\n });\n\n return viewport;\n}\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nexports.default = Padding;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// Can't just extend the Array, due to Babel does not support built-in classes extending\n// This solution was taken from https://stackoverflow.com/questions/46897414/es6-class-extends-array-workaround-for-es5-babel-transpile\nvar CacheProto = function () {\n function CacheProto() {\n _classCallCheck(this, CacheProto);\n }\n\n _createClass(CacheProto, [{\n key: 'add',\n value: function add(item) {\n for (var i = this.length - 1; i >= 0; i--) {\n if (this[i].index === item.scope.$index) {\n this[i].height = item.element.outerHeight();\n return;\n }\n }\n this.push({\n index: item.scope.$index,\n height: item.element.outerHeight()\n });\n this.sort(function (a, b) {\n return a.index < b.index ? -1 : a.index > b.index ? 1 : 0;\n });\n }\n }, {\n key: 'remove',\n value: function remove(itemToRemove) {\n for (var i = this.length - 1; i >= 0; i--) {\n if (this[i].index === itemToRemove.scope.$index) {\n this.splice(i, 1);\n break;\n }\n }\n if (itemToRemove._op !== 'isTop') {\n for (var _i = this.length - 1; _i >= 0; _i--) {\n if (this[_i].index > itemToRemove.scope.$index) {\n this[_i].index--;\n }\n }\n }\n }\n }, {\n key: 'clear',\n value: function clear() {\n this.length = 0;\n }\n }]);\n\n return CacheProto;\n}();\n\nfunction Cache() {\n var instance = [];\n instance.push.apply(instance, arguments);\n Object.setPrototypeOf(instance, Cache.prototype);\n return instance;\n}\nCache.prototype = Object.create(Array.prototype);\nObject.getOwnPropertyNames(CacheProto.prototype).forEach(function (methodName) {\n return Cache.prototype[methodName] = CacheProto.prototype[methodName];\n});\n\nfunction Padding(template) {\n var result = void 0;\n\n if (template.nodeType !== Node.ELEMENT_NODE) {\n throw new Error('ui-scroll directive requires an Element node for templating the view');\n }\n\n switch (template.tagName.toLowerCase()) {\n case 'dl':\n throw new Error('ui-scroll directive does not support <' + template.tagName + '> as a repeating tag: ' + template.outerHTML);\n case 'tr':\n var table = angular.element('
    ');\n result = table.find('tr');\n break;\n case 'li':\n result = angular.element('
  • ');\n break;\n default:\n result = angular.element('
    ');\n }\n\n result.cache = new Cache();\n\n return result;\n}\n\n/***/ }),\n/* 6 */,\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _jqLiteExtras = __webpack_require__(3);\n\nvar _jqLiteExtras2 = _interopRequireDefault(_jqLiteExtras);\n\nvar _elementRoutines = __webpack_require__(2);\n\nvar _elementRoutines2 = _interopRequireDefault(_elementRoutines);\n\nvar _buffer = __webpack_require__(1);\n\nvar _buffer2 = _interopRequireDefault(_buffer);\n\nvar _viewport = __webpack_require__(4);\n\nvar _viewport2 = _interopRequireDefault(_viewport);\n\nvar _adapter = __webpack_require__(0);\n\nvar _adapter2 = _interopRequireDefault(_adapter);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nangular.module('ui.scroll', []).service('jqLiteExtras', function () {\n return new _jqLiteExtras2.default();\n}).run(['jqLiteExtras', function (jqLiteExtras) {\n return !window.jQuery ? jqLiteExtras.registerFor(angular.element) : null;\n}]).directive('uiScrollViewport', function () {\n return {\n restrict: 'A',\n controller: ['$scope', '$element', function (scope, element) {\n var _this = this;\n\n this.container = element;\n this.viewport = element;\n this.scope = scope;\n\n angular.forEach(element.children(), function (child) {\n if (child.tagName.toLowerCase() === 'tbody') {\n _this.viewport = angular.element(child);\n }\n });\n\n return this;\n }]\n };\n}).directive('uiScroll', ['$log', '$injector', '$rootScope', '$timeout', '$q', '$parse', 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 var match = $attr.uiScroll.match(/^\\s*(\\w+)\\s+in\\s+([(\\w|\\$)\\.]+)\\s*$/);\n if (!match) {\n throw new Error('Expected uiScroll in form of \\'_item_ in _datasource_\\' but got \\'' + $attr.uiScroll + '\\'');\n }\n\n function parseNumericAttr(value, defaultValue) {\n var result = $parse(value)($scope);\n return isNaN(result) ? defaultValue : result;\n }\n\n var BUFFER_MIN = 3;\n var BUFFER_DEFAULT = 10;\n var PADDING_MIN = 0.3;\n var PADDING_DEFAULT = 0.5;\n\n var datasource = null;\n var itemName = match[1];\n var datasourceName = match[2];\n var viewportController = controllers[0];\n var bufferSize = Math.max(BUFFER_MIN, parseNumericAttr($attr.bufferSize, BUFFER_DEFAULT));\n var padding = Math.max(PADDING_MIN, parseNumericAttr($attr.padding, PADDING_DEFAULT));\n var startIndex = parseNumericAttr($attr.startIndex, 1);\n var ridActual = 0; // current data revision id\n var pending = [];\n\n var elementRoutines = new _elementRoutines2.default($injector, $q);\n var buffer = new _buffer2.default(elementRoutines, bufferSize);\n var viewport = new _viewport2.default(elementRoutines, buffer, element, viewportController, $rootScope, padding);\n var adapter = new _adapter2.default(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope);\n\n if (viewportController) {\n viewportController.adapter = adapter;\n }\n\n var isDatasourceValid = function isDatasourceValid() {\n return angular.isObject(datasource) && angular.isFunction(datasource.get);\n };\n datasource = $parse(datasourceName)($scope); // try to get datasource on scope\n if (!isDatasourceValid()) {\n datasource = $injector.get(datasourceName); // try to inject datasource as service\n if (!isDatasourceValid()) {\n throw new Error(datasourceName + ' is not a valid datasource');\n }\n }\n\n var onRenderHandlers = [];\n function onRenderHandlersRunner() {\n if (onRenderHandlers.length) {\n angular.forEach(onRenderHandlers, function (handler) {\n return handler();\n });\n onRenderHandlers = [];\n }\n }\n function preDefineIndexProperty(datasource, propName) {\n var getter = void 0;\n // need to postpone min/maxIndexUser processing if the view is empty\n if (datasource.hasOwnProperty(propName) && !buffer.length) {\n getter = datasource[propName];\n delete datasource[propName];\n onRenderHandlers.push(function () {\n return datasource[propName] = getter;\n });\n }\n }\n\n function defineIndexProperty(datasource, propName, propUserName) {\n var descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n if (descriptor && (descriptor.set || descriptor.get)) {\n return;\n }\n var getter = void 0;\n preDefineIndexProperty(datasource, propName);\n Object.defineProperty(datasource, propName, {\n set: function set(value) {\n getter = value;\n buffer[propUserName] = value;\n var topPaddingHeightOld = viewport.topDataPos();\n viewport.adjustPaddings();\n if (propName === 'minIndex') {\n viewport.onAfterMinIndexSet(topPaddingHeightOld);\n }\n },\n get: function get() {\n return getter;\n }\n });\n }\n\n defineIndexProperty(datasource, 'minIndex', 'minIndexUser');\n defineIndexProperty(datasource, 'maxIndex', 'maxIndexUser');\n\n var fetchNext = datasource.get.length !== 2 ? function (success) {\n return datasource.get(buffer.next, bufferSize, success);\n } : function (success) {\n datasource.get({\n index: buffer.next,\n append: buffer.length ? buffer[buffer.length - 1].item : void 0,\n count: bufferSize\n }, success);\n };\n\n var fetchPrevious = datasource.get.length !== 2 ? function (success) {\n return datasource.get(buffer.first - bufferSize, bufferSize, success);\n } : function (success) {\n datasource.get({\n index: buffer.first - bufferSize,\n prepend: buffer.length ? buffer[0].item : void 0,\n count: bufferSize\n }, success);\n };\n\n /**\n * Build padding elements\n *\n * Calling linker is the only way I found to get access to the tag name of the template\n * to prevent the directive scope from pollution a new scope is created and destroyed\n * right after the builder creation is completed\n */\n linker(function (clone, scope) {\n viewport.createPaddingElements(clone[0]);\n // we do not include the clone in the DOM. It means that the nested directives will not\n // be able to reach the parent directives, but in this case it is intentional because we\n // created the clone to access the template tag name\n scope.$destroy();\n clone.remove();\n });\n\n $scope.$on('$destroy', function () {\n unbindEvents();\n viewport.unbind('mousewheel', wheelHandler);\n });\n\n viewport.bind('mousewheel', wheelHandler);\n\n $timeout(function () {\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(function (item) {\n if (angular.isFunction(item.unregisterVisibilityWatcher)) {\n item.unregisterVisibilityWatcher();\n delete item.unregisterVisibilityWatcher;\n }\n });\n if (!pending.length) {\n $timeout(function () {\n return adjustBuffer();\n });\n }\n }\n }\n\n function insertWrapperContent(wrapper, insertAfter) {\n createElement(wrapper, insertAfter, viewport.insertElement);\n if (!isElementVisible(wrapper)) {\n wrapper.unregisterVisibilityWatcher = wrapper.scope.$watch(function () {\n return visibilityWatcher(wrapper);\n });\n }\n elementRoutines.hideElement(wrapper); // hide inserted elements before data binding\n }\n\n function createElement(wrapper, insertAfter, insertElement) {\n var promises = null;\n var sibling = insertAfter > 0 ? buffer[insertAfter - 1].element : undefined;\n linker(function (clone, scope) {\n promises = insertElement(clone, sibling);\n wrapper.element = clone;\n wrapper.scope = scope;\n scope[itemName] = wrapper.item;\n });\n // ui-scroll-grid apply\n if (adapter.transform) {\n var tdInitializer = wrapper.scope.uiScrollTdInitializer;\n if (tdInitializer && tdInitializer.linking) {\n adapter.transform(wrapper.scope, wrapper.element);\n } else {\n wrapper.scope.uiScrollTdInitializer = {\n onLink: function onLink() {\n return adapter.transform(wrapper.scope, wrapper.element);\n },\n scope: wrapper.scope\n };\n }\n }\n return promises;\n }\n\n function updateDOM() {\n var promises = [];\n var toBePrepended = [];\n var toBeRemoved = [];\n var inserted = [];\n\n buffer.forEach(function (wrapper, i) {\n switch (wrapper.op) {\n case 'prepend':\n toBePrepended.unshift(wrapper);\n break;\n case 'append':\n insertWrapperContent(wrapper, i);\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'insert':\n promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated));\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'remove':\n toBeRemoved.push(wrapper);\n }\n });\n\n toBeRemoved.forEach(function (wrapper) {\n return promises = promises.concat(viewport.removeItem(wrapper));\n });\n\n if (toBePrepended.length) toBePrepended.forEach(function (wrapper) {\n insertWrapperContent(wrapper);\n wrapper.op = 'none';\n });\n\n buffer.forEach(function (item, i) {\n return item.scope.$index = buffer.first + i;\n });\n\n return {\n prepended: toBePrepended,\n removed: toBeRemoved,\n inserted: inserted,\n animated: promises\n };\n }\n\n function updatePaddings(rid, updates) {\n // schedule another adjustBuffer after animation completion\n if (updates.animated.length) {\n $q.all(updates.animated).then(function () {\n viewport.adjustPaddings();\n adjustBuffer(rid);\n });\n } else {\n viewport.adjustPaddings();\n }\n }\n\n function enqueueFetch(rid, updates) {\n if (viewport.shouldLoadBottom()) {\n if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\n // this means that at least one item appended in the last batch has height > 0\n if (pending.push(true) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n } else if (viewport.shouldLoadTop()) {\n if (!updates || buffer.effectiveHeight(updates.prepended) > 0 || pending[0]) {\n // this means that at least one item appended in the last batch has height > 0\n // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\n // BTW there will always be at least 1 element in the pending array because bottom is fetched first\n if (pending.push(false) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n }\n }\n\n function processUpdates() {\n var updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustments\n !$scope.$$phase && !$rootScope.$$phase && $scope.$digest();\n\n updates.inserted.forEach(function (w) {\n return elementRoutines.showElement(w);\n });\n updates.prepended.forEach(function (w) {\n return elementRoutines.showElement(w);\n });\n return updates;\n }\n\n function adjustBuffer(rid) {\n if (!rid) {\n // dismiss pending requests\n pending = [];\n rid = ++ridActual;\n }\n\n var updates = processUpdates();\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n enqueueFetch(rid);\n\n if (!pending.length) {\n adapter.calculateProperties();\n }\n }\n\n function adjustBufferAfterFetch(rid) {\n var updates = processUpdates();\n\n viewport.onAfterPrepend(updates);\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n onRenderHandlersRunner();\n enqueueFetch(rid, updates);\n pending.shift();\n\n if (pending.length) fetch(rid);else {\n adapter.loading(false);\n bindEvents();\n adapter.calculateProperties();\n }\n }\n\n function fetch(rid) {\n if (pending[0]) {\n // scrolling down\n if (buffer.length && !viewport.shouldLoadBottom()) {\n adjustBufferAfterFetch(rid);\n } else {\n fetchNext(function (result) {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.eof = true;\n }\n\n if (result.length > 0) {\n viewport.clipTop();\n buffer.append(result);\n }\n\n adjustBufferAfterFetch(rid);\n });\n }\n } else {\n // scrolling up\n if (buffer.length && !viewport.shouldLoadTop()) {\n adjustBufferAfterFetch(rid);\n } else {\n fetchPrevious(function (result) {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.bof = true;\n // log 'bof is reached'\n }\n\n if (result.length > 0) {\n if (buffer.length) {\n viewport.clipBottom();\n }\n buffer.prepend(result);\n }\n\n 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.$$phase && $scope.$digest();\n }\n }\n }\n\n function wheelHandler(event) {\n if (!adapter.disabled) {\n var scrollTop = viewport[0].scrollTop;\n var yMax = viewport[0].scrollHeight - viewport[0].clientHeight;\n\n if (scrollTop === 0 && !buffer.bof || scrollTop === yMax && !buffer.eof) {\n event.preventDefault();\n }\n }\n }\n }\n}]);\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// ui-scroll.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 86fa6c49a99646d439cd","function getCtrlOnData(attr, element) {\r\n let onSyntax = attr.match(/^(.+)(\\s+on\\s+)(.+)?/);\r\n if (onSyntax && onSyntax.length === 4) {\r\n window.console.log('Angular ui-scroll adapter assignment warning. \"Controller On\" syntax has been deprecated since ui-scroll v1.6.1.');\r\n let ctrl = onSyntax[3];\r\n let tail = onSyntax[1];\r\n let candidate = element;\r\n while (candidate.length) {\r\n let candidateScope = candidate.scope(); // doesn't work when debugInfoEnabled flag = true\r\n let candidateName = (candidate.attr('ng-controller') || '').match(/(\\w(?:\\w|\\d)*)(?:\\s+as\\s+(\\w(?:\\w|\\d)*))?/);\r\n if (candidateName && candidateName[1] === ctrl) {\r\n return {\r\n target: candidateScope,\r\n source: tail\r\n };\r\n }\r\n candidate = candidate.parent();\r\n }\r\n throw new Error('Angular ui-scroll adapter assignment error. Failed to locate target controller \"' + ctrl + '\" to inject \"' + tail + '\"');\r\n }\r\n}\r\n\r\nclass Adapter {\r\n\r\n constructor(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope) {\r\n this.viewport = viewport;\r\n this.buffer = buffer;\r\n this.adjustBuffer = adjustBuffer;\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, $parse, element);\r\n this.generatePublicContext($attr, $parse);\r\n }\r\n\r\n assignAdapter(adapterAttr, $parse, element) {\r\n if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\\s+|\\s+$/gm, ''))) {\r\n return;\r\n }\r\n let ctrlOnData = getCtrlOnData(adapterAttr, element);\r\n let adapterOnScope;\r\n\r\n try {\r\n if (ctrlOnData) { // \"Controller On\", deprecated since v1.6.1\r\n $parse(ctrlOnData.source).assign(ctrlOnData.target, {});\r\n adapterOnScope = $parse(ctrlOnData.source)(ctrlOnData.target);\r\n }\r\n else {\r\n $parse(adapterAttr).assign(this.startScope, {});\r\n adapterOnScope = $parse(adapterAttr)(this.startScope);\r\n }\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($attr, $parse) {\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 = $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 $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.adjustBuffer() : 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.adjustBuffer();\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.adjustBuffer();\r\n this.viewport.clipTop();\r\n this.viewport.clipBottom();\r\n }\r\n\r\n applyUpdates(arg1, arg2) {\r\n if (angular.isFunction(arg1)) {\r\n this.applyUpdatesFunc(arg1);\r\n } else {\r\n this.applyUpdatesIndex(arg1, arg2);\r\n }\r\n this.adjustBuffer();\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) { // checking if it is an integer\r\n throw new Error('applyUpdates - ' + index + ' is not a valid index');\r\n }\r\n index -= this.buffer.first;\r\n if ((index >= 0 && index < this.buffer.length)) {\r\n this.applyUpdate(this.buffer[index], newItems);\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;\n\n\n// WEBPACK FOOTER //\n// ./src/modules/adapter.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, 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\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') {\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 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 return buffer;\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/buffer.js","const hideClassToken = 'ng-ui-scroll-hide';\r\n\r\nfunction addCSSRule(sheet, selector, rules, index) {\r\n if('insertRule' in sheet) {\r\n sheet.insertRule(selector + '{' + rules + '}', index);\r\n }\r\n else if('addRule' in sheet) {\r\n sheet.addRule(selector, rules, index);\r\n }\r\n}\r\n\r\nexport default class ElementRoutines {\r\n\r\n constructor($injector, $q) {\r\n this.$animate = ($injector.has && $injector.has('$animate')) ? $injector.get('$animate') : null;\r\n this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3;\r\n this.$q = $q;\r\n addCSSRule(document.styleSheets[0], '.' + hideClassToken, 'display: none');\r\n }\r\n\r\n hideElement(wrapper) {\r\n wrapper.element.addClass(hideClassToken);\r\n }\r\n\r\n showElement(wrapper) {\r\n wrapper.element.removeClass(hideClassToken);\r\n }\r\n\r\n insertElement(newElement, previousElement) {\r\n previousElement.after(newElement);\r\n return [];\r\n }\r\n\r\n removeElement(wrapper) {\r\n wrapper.element.remove();\r\n wrapper.scope.$destroy();\r\n return [];\r\n }\r\n\r\n insertElementAnimated(newElement, previousElement) {\r\n if (!this.$animate) {\r\n return this.insertElement(newElement, previousElement);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n // no need for parent - previous element is never null\r\n this.$animate.enter(newElement, null, previousElement, () => deferred.resolve());\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n // no need for parent - previous element is never null\r\n return [this.$animate.enter(newElement, null, previousElement)];\r\n }\r\n\r\n removeElementAnimated(wrapper) {\r\n if (!this.$animate) {\r\n return this.removeElement(wrapper);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n this.$animate.leave(wrapper.element, () => {\r\n wrapper.scope.$destroy();\r\n return deferred.resolve();\r\n });\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n return [(this.$animate.leave(wrapper.element)).then(() => wrapper.scope.$destroy())];\r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/elementRoutines.js","/*!\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","import Padding from './padding';\r\n\r\nexport default function Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding) {\r\n let topPadding = null;\r\n let bottomPadding = null;\r\n const viewport = viewportController && viewportController.viewport ? viewportController.viewport : angular.element(window);\r\n const container = viewportController && viewportController.container ? viewportController.container : undefined;\r\n const scope = viewportController && viewportController.scope ? viewportController.scope : $rootScope;\r\n\r\n viewport.css({\r\n 'overflow-anchor': 'none',\r\n 'overflow-y': 'auto',\r\n 'display': 'block'\r\n });\r\n\r\n function bufferPadding() {\r\n return viewport.outerHeight() * padding; // some extra space to initiate preload\r\n }\r\n\r\n angular.extend(viewport, {\r\n getScope() {\r\n return scope;\r\n },\r\n\r\n createPaddingElements(template) {\r\n topPadding = new Padding(template);\r\n bottomPadding = new Padding(template);\r\n element.before(topPadding);\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.adjustPaddings();\r\n }\r\n },\r\n\r\n shouldLoadTop() {\r\n return !buffer.bof && (viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding());\r\n },\r\n\r\n clipTop() {\r\n // clip the invisible items off the top\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\r\n\r\n for (let i = 0; i < buffer.length; i++) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n topPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n // we need to adjust top padding element before items are removed from top\r\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\r\n topPadding.height(topPadding.height() + overageHeight);\r\n buffer.bof = false;\r\n buffer.remove(0, overage);\r\n buffer.first += overage;\r\n }\r\n },\r\n\r\n adjustPaddings() {\r\n if (!buffer.length) {\r\n return;\r\n }\r\n\r\n // precise heights calculation, 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 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 diff -= viewport.scrollTop();\r\n if(diff > 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 removeItem(item) {\r\n topPadding.cache.remove(item);\r\n bottomPadding.cache.remove(item);\r\n return buffer.remove(item);\r\n }\r\n });\r\n\r\n return viewport;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/viewport.js","// Can't just extend the Array, due to Babel does not support built-in classes extending\r\n// This solution was taken from https://stackoverflow.com/questions/46897414/es6-class-extends-array-workaround-for-es5-babel-transpile\r\nclass CacheProto {\r\n add(item) {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index === item.scope.$index) {\r\n this[i].height = item.element.outerHeight();\r\n return;\r\n }\r\n }\r\n this.push({\r\n index: item.scope.$index,\r\n height: item.element.outerHeight()\r\n });\r\n this.sort((a, b) => ((a.index < b.index) ? -1 : ((a.index > b.index) ? 1 : 0)));\r\n }\r\n\r\n remove(itemToRemove) {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index === itemToRemove.scope.$index) {\r\n this.splice(i, 1);\r\n break;\r\n }\r\n }\r\n if(itemToRemove._op !== 'isTop') {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index > itemToRemove.scope.$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\nexport default function Padding(template) {\r\n let result;\r\n\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\r\n switch (template.tagName.toLowerCase()) {\r\n case 'dl':\r\n throw new Error(`ui-scroll directive does not support <${template.tagName}> as a repeating tag: ${template.outerHTML}`);\r\n case 'tr':\r\n let table = angular.element('
    ');\r\n result = table.find('tr');\r\n break;\r\n case 'li':\r\n result = angular.element('
  • ');\r\n break;\r\n default:\r\n result = angular.element('
    ');\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","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 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 '$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, $rootScope, padding);\n let adapter = new Adapter(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope);\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 onRenderHandlers = [];\n function onRenderHandlersRunner() {\n if(onRenderHandlers.length) {\n angular.forEach(onRenderHandlers, (handler) => handler());\n onRenderHandlers = [];\n }\n }\n function preDefineIndexProperty(datasource, propName) {\n let getter;\n // need to postpone min/maxIndexUser processing if the view is empty\n if(datasource.hasOwnProperty(propName) && !buffer.length) {\n getter = datasource[propName];\n delete datasource[propName];\n onRenderHandlers.push(() => datasource[propName] = getter);\n }\n }\n\n function defineIndexProperty(datasource, propName, propUserName) {\n let descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n if (descriptor && (descriptor.set || descriptor.get)) {\n return;\n }\n let getter;\n preDefineIndexProperty(datasource, propName);\n Object.defineProperty(datasource, propName, {\n set: (value) => {\n getter = value;\n buffer[propUserName] = value;\n let topPaddingHeightOld = viewport.topDataPos();\n viewport.adjustPaddings();\n if (propName === 'minIndex') {\n viewport.onAfterMinIndexSet(topPaddingHeightOld);\n }\n },\n get: () => getter\n });\n }\n\n defineIndexProperty(datasource, 'minIndex', 'minIndexUser');\n defineIndexProperty(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 /**\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 if (!pending.length) {\n $timeout(() => adjustBuffer());\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 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 // ui-scroll-grid apply\n if (adapter.transform) {\n let tdInitializer = wrapper.scope.uiScrollTdInitializer;\n if (tdInitializer && tdInitializer.linking) {\n adapter.transform(wrapper.scope, wrapper.element);\n } else {\n wrapper.scope.uiScrollTdInitializer = {\n onLink: () => adapter.transform(wrapper.scope, wrapper.element),\n scope: wrapper.scope\n };\n }\n }\n return promises;\n }\n\n function updateDOM() {\n let promises = [];\n const toBePrepended = [];\n const toBeRemoved = [];\n const inserted = [];\n\n buffer.forEach((wrapper, i) => {\n switch (wrapper.op) {\n case 'prepend':\n toBePrepended.unshift(wrapper);\n break;\n case 'append':\n insertWrapperContent(wrapper, i);\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'insert':\n promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated));\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'remove':\n toBeRemoved.push(wrapper);\n }\n });\n\n toBeRemoved.forEach((wrapper) => promises = promises.concat(viewport.removeItem(wrapper)));\n\n if (toBePrepended.length)\n toBePrepended.forEach((wrapper) => {\n insertWrapperContent(wrapper);\n wrapper.op = 'none';\n });\n\n buffer.forEach((item, i) => item.scope.$index = buffer.first + i);\n\n return {\n prepended: toBePrepended,\n removed: toBeRemoved,\n inserted: inserted,\n animated: promises\n };\n\n }\n\n function updatePaddings(rid, updates) {\n // schedule another adjustBuffer after animation completion\n if (updates.animated.length) {\n $q.all(updates.animated).then(() => {\n viewport.adjustPaddings();\n adjustBuffer(rid);\n });\n } else {\n viewport.adjustPaddings();\n }\n }\n\n function enqueueFetch(rid, updates) {\n if (viewport.shouldLoadBottom()) {\n if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\n // this means that at least one item appended in the last batch has height > 0\n if (pending.push(true) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n } else if (viewport.shouldLoadTop()) {\n if ((!updates || buffer.effectiveHeight(updates.prepended) > 0) || pending[0]) {\n // this means that at least one item appended in the last batch has height > 0\n // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\n // BTW there will always be at least 1 element in the pending array because bottom is fetched first\n if (pending.push(false) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n }\n }\n\n function processUpdates() {\n const updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustments\n !$scope.$$phase && !$rootScope.$$phase && $scope.$digest();\n\n updates.inserted.forEach(w => elementRoutines.showElement(w));\n updates.prepended.forEach(w => elementRoutines.showElement(w));\n return updates;\n }\n\n function adjustBuffer(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 adjustBufferAfterFetch(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 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.$$phase && $scope.$digest();\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"],"sourceRoot":""} \ No newline at end of file diff --git a/src/ui-scroll.js b/src/ui-scroll.js index 976d631e..1ef81428 100644 --- a/src/ui-scroll.js +++ b/src/ui-scroll.js @@ -344,7 +344,7 @@ angular.module('ui.scroll', []) const updates = updateDOM(); // We need the item bindings to be processed before we can do adjustments - !$scope.$$phase && !$scope.$root.$$phase && $scope.$digest(); + !$scope.$$phase && !$rootScope.$$phase && $scope.$digest(); updates.inserted.forEach(w => elementRoutines.showElement(w)); updates.prepended.forEach(w => elementRoutines.showElement(w));