From d510726d461ff8fc01e1a07efa2f35c1a481c1f0 Mon Sep 17 00:00:00 2001 From: dhilt Date: Sun, 2 Jul 2017 07:05:06 +0300 Subject: [PATCH 1/6] Merge branch 'grid-scopes-wrapping' into interpolation --- .../grid-scopes-wrapping.html | 39 + .../grid-scopes-wrapping.js | 45 + demo/grid-scopes-wrapping/grid.css | 31 + dist/ui-scroll-grid.js | 667 ++-- dist/ui-scroll-grid.js.map | 2 +- dist/ui-scroll-grid.min.js | 4 +- dist/ui-scroll-grid.min.js.map | 2 +- dist/ui-scroll.js | 3073 +++++++++-------- dist/ui-scroll.js.map | 2 +- dist/ui-scroll.min.js | 4 +- dist/ui-scroll.min.js.map | 2 +- src/ui-scroll-grid.js | 88 +- src/ui-scroll.js | 14 +- 13 files changed, 2091 insertions(+), 1882 deletions(-) create mode 100644 demo/grid-scopes-wrapping/grid-scopes-wrapping.html create mode 100644 demo/grid-scopes-wrapping/grid-scopes-wrapping.js create mode 100644 demo/grid-scopes-wrapping/grid.css diff --git a/demo/grid-scopes-wrapping/grid-scopes-wrapping.html b/demo/grid-scopes-wrapping/grid-scopes-wrapping.html new file mode 100644 index 00000000..6dc8a525 --- /dev/null +++ b/demo/grid-scopes-wrapping/grid-scopes-wrapping.html @@ -0,0 +1,39 @@ + + + + + Grid scopes wrapping + + + + + + + + +
+ + browse other examples + +

Grid scopes wrapping

+ +
+

Here we have ng-repeat wrapping ui-scroll-td directive!

+

+ + + + + + + + + + + + +
{{col}}
{{item[col]}}
+ +
+ + \ No newline at end of file diff --git a/demo/grid-scopes-wrapping/grid-scopes-wrapping.js b/demo/grid-scopes-wrapping/grid-scopes-wrapping.js new file mode 100644 index 00000000..d1480562 --- /dev/null +++ b/demo/grid-scopes-wrapping/grid-scopes-wrapping.js @@ -0,0 +1,45 @@ +angular.module('application', ['ui.scroll', 'ui.scroll.grid']) + .controller('gridController', [ + '$scope', '$log', '$timeout', function ($scope, console, $timeout) { + var datasource = {}; + + $scope.columns = ['col1','col2','col3']; + + datasource.get = function (index, count, success) { + $timeout(function () { + var result = []; + for (var i = index; i <= index + count - 1; i++) { + result.push({ + col1: i, + col2: 'item #' + i, + col3: (Math.random() < 0.5) + }); + } + success(result); + }, 100); + }; + + $scope.datasource = datasource; + + var clearLayout = [ + {index: 0, mapTo: 0, css: {backgroundColor: ''}}, + {index: 1, mapTo: 1, css: {backgroundColor: ''}}, + {index: 2, mapTo: 2, css: {backgroundColor: ''}} + ]; + + var someLayout = [ + {index: 0, mapTo: 2, css: {backgroundColor: '#ccc'}}, + {index: 1, mapTo: 1, css: {backgroundColor: '#ddd'}}, + {index: 2, mapTo: 0, css: {backgroundColor: '#eee'}} + ]; + + $scope.applyLayout = function () { + $scope.adapter.gridAdapter.applyLayout(someLayout); + }; + + $scope.clearLayout = function () { + $scope.adapter.gridAdapter.applyLayout(clearLayout); + }; + + } + ]); diff --git a/demo/grid-scopes-wrapping/grid.css b/demo/grid-scopes-wrapping/grid.css new file mode 100644 index 00000000..662fa528 --- /dev/null +++ b/demo/grid-scopes-wrapping/grid.css @@ -0,0 +1,31 @@ +.grid { + height: 300px; +} + +.grid tbody { + width: 380px; +} + +hr { + margin: 5px; +} + +.col1 { + width: 80px; +} + +td.col1 { + font-style: italic; +} + +.col2 { + width: 200px; +} + +.col3 { + width: 80px; +} + +input { + margin-bottom: 5px; +} diff --git a/dist/ui-scroll-grid.js b/dist/ui-scroll-grid.js index 62c7140f..ff9d3559 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.6.1 -- 2017-03-03T05:28:34.208Z + * Version: 1.6.1 -- 2017-06-20T03:26:22.415Z * License: MIT */ /******/ (function(modules) { // webpackBootstrap @@ -12,21 +12,21 @@ /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) +/******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; -/******/ +/******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { -/******/ exports: {}, -/******/ id: moduleId, -/******/ loaded: false +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded -/******/ module.loaded = true; +/******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; @@ -39,316 +39,357 @@ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __webpack_require__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(0); +/******/ return __webpack_require__(__webpack_require__.s = 6); /******/ }) /************************************************************************/ -/******/ ([ -/* 0 */ -/***/ function(module, exports) { - - 'use strict'; - - angular.module('ui.scroll.grid', []).directive('uiScrollTh', ['$log', '$timeout', function (console, $timeout) { - - function GridAdapter(controller) { - - this.getLayout = function () { - return controller.getLayout(); - }; - - this.applyLayout = function (layout) { - return controller.applyLayout(layout); - }; - - this.columnFromPoint = function (x, y) { - return controller.columnFromPoint(x, y); - }; - - Object.defineProperty(this, 'columns', { get: function get() { - return controller.getColumns(); - } }); - } - - function ColumnAdapter(controller, column) { - - this.css = function () /* attr, value */{ - var attr = arguments[0]; - var value = arguments[1]; - if (arguments.length == 1) { - return column.header.css(attr); - } - if (arguments.length == 2) { - column.header.css(attr, value); - controller.forEachRow(function (row) { - return row[column.id].css(attr, value); - }); - column.css[attr] = value; - } - }; - - this.moveBefore = function (index) { - return controller.moveBefore(column, index); - }; - - this.exchangeWith = function (index) { - return controller.exchangeWith(column, index); - }; - - Object.defineProperty(this, 'columnId', { get: function get() { - return column.id; - } }); - } - - function ColumnController(controller, columns, header) { - - this.header = header; - this.css = {}; - this.mapTo = columns.length; - this.id = columns.length; - - // controller api methods - - this.applyLayout = function (layout) { - this.css = angular.extend({}, layout.css); - this.mapTo = layout.mapTo; - applyCss(this.header, this.css); - }; - - this.moveBefore = function (target) { - var _this = this; - - if (target) { - moveBefore(header, target.header); - controller.forEachRow(function (row) { - return moveBefore(row[_this.id], row[target.id]); - }); - } else { - moveLast(header); - controller.forEachRow(function (row) { - return moveLast(row[_this.id]); - }); - } - }; - - this.columnFromPoint = function (x, y) { - var _this2 = this; - - if (insidePoint(header, x, y)) { - return this; - } - var result = null; - controller.forEachRow(function (row) { - return result = insidePoint(row[_this2.id], x, y) ? _this2 : result; - }); - return result; - }; - - this.applyCss = function (target) { - applyCss(target, this.css); - }; - - // function definitions - - function insidePoint(element, x, y) { - var offset = element.offset(); - if (x < offset.left || offset.left + element.outerWidth(true) < x) return false; - if (y < offset.top || offset.top + element.outerHeight(true) < y) return false; - return true; - } - - function moveBefore(element, target) { - element.detach(); - target.before(element); - } - - function moveLast(element) { - var parent = element.parent(); - element.detach(); - parent.append(element); - } - - function applyCss(target, css) { - target.removeAttr('style'); - for (var attr in css) { - if (css.hasOwnProperty(attr)) { - target.css(attr, css[attr]); - } - } - } - } - - function GridController(scrollViewport) { - var _this3 = this; - - var columns = []; - var rowMap = new Map(); - - $timeout(function () { - scrollViewport.adapter.publicContext.gridAdapter = new GridAdapter(_this3); - scrollViewport.adapter.transform = function (scope, item) { - return transform(rowMap.get(scope), item); - }; - }); - - this.registerColumn = function (header) { - columns.push(new ColumnController(this, columns, header)); - }; - - this.registerCell = function (scope, cell) { - var row = rowMap.get(scope); - if (!row) { - row = []; - rowMap.set(scope, row); - } - if (row.length >= columns.length) { - return false; - } - row.push(cell); - return true; - }; - - this.unregisterCell = function (scope, cell) { - var row = rowMap.get(scope); - var i = row.indexOf(cell); - row.splice(i, 1); - if (!row.length) { - rowMap.delete(scope); - } - }; - - this.forEachRow = function (callback) { - rowMap.forEach(callback); - }; - - this.getColumns = function () { - var _this4 = this; - - var result = []; - columns.slice().sort(function (a, b) { - return a.mapTo - b.mapTo; - }).forEach(function (column) { - return result.push(new ColumnAdapter(_this4, column)); - }); - return result; - }; - - this.getLayout = function () { - var result = []; - columns.forEach(function (column, index) { - return result.push({ - index: index, - css: angular.extend({}, column.css), - mapTo: column.mapTo - }); - }); - return result; - }; - - this.applyLayout = function (layouts) { - if (!layouts || layouts.length != columns.length) { - throw new Error('Failed to apply layout - number of layouts should match number of columns'); - } - layouts.forEach(function (layout, index) { - return columns[index].applyLayout(layout); - }); - transform(columns.map(function (column) { - return column.header; - })); - rowMap.forEach(function (row) { - return transform(row); - }); - }; - - this.moveBefore = function (selected, target) { - var index = target; - - if (target % 1 !== 0) { - index = target ? columns[target.columnId].mapTo : columns.length; - } - if (index < 0 || index > columns.length) { - return; // throw an error? - } - - var mapTo = selected.mapTo, - next = null; - index -= mapTo < index ? 1 : 0; - - columns.forEach(function (c) { - c.mapTo -= c.mapTo > mapTo ? 1 : 0; - c.mapTo += c.mapTo >= index ? 1 : 0; - next = c.mapTo === index + 1 ? c : next; - }); - - selected.mapTo = index; - selected.moveBefore(next); - }; - - this.exchangeWith = function (selected, index) { - if (index < 0 || index >= columns.length) { - return; - } - columns.find(function (c) { - return c.mapTo === index; - }).mapTo = selected.mapTo; - selected.mapTo = index; - }; - - this.columnFromPoint = function (x, y) { - var column = columns.find(function (col) { - return col.columnFromPoint(x, y); - }); - return column ? new ColumnAdapter(this, column) : undefined; - }; - - // function definitions - - function transform(row) { - var parent = row[0].parent(); - var visible = []; - - row.forEach(function (cell, index) { - columns[index].applyCss(cell); - visible[columns[index].mapTo] = row[index]; - row[index].detach(); - }); - - visible.forEach(function (cell) { - return parent.append(cell); - }); - } - } - - return { - require: ['^^uiScrollViewport'], - restrict: 'A', - link: function link($scope, element, $attr, controllers) { - controllers[0].gridController = controllers[0].gridController || new GridController(controllers[0]); - controllers[0].gridController.registerColumn(element); - } - }; - }]).directive('uiScrollTd', function () { - return { - require: ['?^^uiScrollViewport'], - restrict: 'A', - link: function link($scope, element, $attr, controllers) { - if (controllers[0]) { - (function () { - var gridController = controllers[0].gridController; - if (gridController.registerCell($scope, element)) { - $scope.$on('$destroy', function () { - return gridController.unregisterCell($scope, element); - }); - } - })(); - } - } - }; - }); - -/***/ } -/******/ ]); +/******/ ({ + +/***/ 6: +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +angular.module('ui.scroll.grid', []).directive('uiScrollTh', ['$log', '$timeout', function (console, $timeout) { + + function GridAdapter(controller) { + + this.getLayout = function () { + return controller.getLayout(); + }; + + this.applyLayout = function (layout) { + return controller.applyLayout(layout); + }; + + this.columnFromPoint = function (x, y) { + return controller.columnFromPoint(x, y); + }; + + Object.defineProperty(this, 'columns', { get: function get() { + return controller.getColumns(); + } }); + } + + function ColumnAdapter(controller, column) { + + this.css = function () /* attr, value */{ + var attr = arguments[0]; + var value = arguments[1]; + if (arguments.length == 1) { + return column.header.css(attr); + } + if (arguments.length == 2) { + column.header.css(attr, value); + controller.forEachRow(function (row) { + return row[column.id].css(attr, value); + }); + column.css[attr] = value; + } + }; + + this.moveBefore = function (index) { + return controller.moveBefore(column, index); + }; + + this.exchangeWith = function (index) { + return controller.exchangeWith(column, index); + }; + + Object.defineProperty(this, 'columnId', { get: function get() { + return column.id; + } }); + } + + function ColumnController(controller, columns, header) { + + this.header = header; + this.css = {}; + this.mapTo = columns.length; + this.id = columns.length; + + // controller api methods + + this.applyLayout = function (layout) { + this.css = angular.extend({}, layout.css); + this.mapTo = layout.mapTo; + applyCss(this.header, this.css); + }; + + this.moveBefore = function (target) { + var _this = this; + + if (target) { + moveBefore(header, target.header); + controller.forEachRow(function (row) { + return moveBefore(row[_this.id], row[target.id]); + }); + } else { + moveLast(header); + controller.forEachRow(function (row) { + return moveLast(row[_this.id]); + }); + } + }; + + this.columnFromPoint = function (x, y) { + var _this2 = this; + + if (insidePoint(header, x, y)) { + return this; + } + var result = null; + controller.forEachRow(function (row) { + return result = insidePoint(row[_this2.id], x, y) ? _this2 : result; + }); + return result; + }; + + this.applyCss = function (target) { + applyCss(target, this.css); + }; + + // function definitions + + function insidePoint(element, x, y) { + var offset = element.offset(); + if (x < offset.left || offset.left + element.outerWidth(true) < x) return false; + if (y < offset.top || offset.top + element.outerHeight(true) < y) return false; + return true; + } + + function moveBefore(element, target) { + element.detach(); + target.before(element); + } + + function moveLast(element) { + var parent = element.parent(); + element.detach(); + parent.append(element); + } + + function applyCss(target, css) { + target.removeAttr('style'); + for (var attr in css) { + if (css.hasOwnProperty(attr)) { + target.css(attr, css[attr]); + } + } + } + } + + function GridController(scrollViewport) { + var _this3 = this; + + var columns = []; + var rowMap = new Map(); + + $timeout(function () { + scrollViewport.adapter.publicContext.gridAdapter = new GridAdapter(_this3); + scrollViewport.adapter.transform = function (scope, item) { + return transform(rowMap.get(scope), item); + }; + }); + + this.registerColumn = function (header) { + columns.push(new ColumnController(this, columns, header)); + }; + + this.registerCell = function (scope, cell) { + var row = rowMap.get(scope); + if (!row) { + row = []; + rowMap.set(scope, row); + } + if (row.length >= columns.length) { + return false; + } + row.push(cell); + return true; + }; + + this.unregisterCell = function (scope, cell) { + var row = rowMap.get(scope); + var i = row.indexOf(cell); + row.splice(i, 1); + if (!row.length) { + rowMap.delete(scope); + } + }; + + this.forEachRow = function (callback) { + rowMap.forEach(callback); + }; + + this.getColumns = function () { + var _this4 = this; + + var result = []; + columns.slice().sort(function (a, b) { + return a.mapTo - b.mapTo; + }).forEach(function (column) { + return result.push(new ColumnAdapter(_this4, column)); + }); + return result; + }; + + this.getLayout = function () { + var result = []; + columns.forEach(function (column, index) { + return result.push({ + index: index, + css: angular.extend({}, column.css), + mapTo: column.mapTo + }); + }); + return result; + }; + + this.applyLayout = function (layouts) { + if (!layouts || layouts.length != columns.length) { + throw new Error('Failed to apply layout - number of layouts should match number of columns'); + } + layouts.forEach(function (layout, index) { + return columns[index].applyLayout(layout); + }); + transform(columns.map(function (column) { + return column.header; + })); + rowMap.forEach(function (row) { + return transform(row); + }); + }; + + this.moveBefore = function (selected, target) { + var index = target; + + if (target % 1 !== 0) { + index = target ? columns[target.columnId].mapTo : columns.length; + } + if (index < 0 || index > columns.length) { + return; // throw an error? + } + + var mapTo = selected.mapTo, + next = null; + index -= mapTo < index ? 1 : 0; + + columns.forEach(function (c) { + c.mapTo -= c.mapTo > mapTo ? 1 : 0; + c.mapTo += c.mapTo >= index ? 1 : 0; + next = c.mapTo === index + 1 ? c : next; + }); + + selected.mapTo = index; + selected.moveBefore(next); + }; + + this.exchangeWith = function (selected, index) { + if (index < 0 || index >= columns.length) { + return; + } + columns.find(function (c) { + return c.mapTo === index; + }).mapTo = selected.mapTo; + selected.mapTo = index; + }; + + this.columnFromPoint = function (x, y) { + var column = columns.find(function (col) { + return col.columnFromPoint(x, y); + }); + return column ? new ColumnAdapter(this, column) : undefined; + }; + + // function definitions + + function transform(row) { + var parent = row[0].parent(); + var visible = []; + + row.forEach(function (cell, index) { + columns[index].applyCss(cell); + visible[columns[index].mapTo] = row[index]; + row[index].detach(); + }); + + visible.forEach(function (cell) { + return parent.append(cell); + }); + } + } + + return { + require: ['^^uiScrollViewport'], + restrict: 'A', + link: function link($scope, element, $attr, controllers) { + controllers[0].gridController = controllers[0].gridController || new GridController(controllers[0]); + controllers[0].gridController.registerColumn(element); + } + }; +}]).directive('uiScrollTd', function () { + return { + require: ['?^^uiScrollViewport'], + restrict: 'A', + link: function link($scope, element, $attr, controllers) { + if (!controllers[0]) { + return; + } + var scope = $scope; + var tdInitializer = $scope.uiScrollTdInitializer; + if (!tdInitializer) { + tdInitializer = $scope.uiScrollTdInitializer = { + linking: true + }; + } + if (!tdInitializer.linking) { + scope = tdInitializer.scope; + } + var gridController = controllers[0].gridController; + if (gridController.registerCell(scope, element)) { + $scope.$on('$destroy', function () { + return gridController.unregisterCell(scope, element); + }); + } + if (!tdInitializer.linking) { + tdInitializer.onLink(); + } + } + }; +}); + +/***/ }) + +/******/ }); //# sourceMappingURL=ui-scroll-grid.js.map \ No newline at end of file diff --git a/dist/ui-scroll-grid.js.map b/dist/ui-scroll-grid.js.map index 9f455ade..827124f3 100644 --- a/dist/ui-scroll-grid.js.map +++ b/dist/ui-scroll-grid.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap 0a8b101f02aaa0804c9e?4797","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","$on"],"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\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 0a8b101f02aaa0804c9e","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 );\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, 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 let gridController = controllers[0].gridController;\n if (gridController.registerCell($scope, element)) {\n $scope.$on('$destroy', () => gridController.unregisterCell($scope, element));\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 0babc30b0e0c1649fab6?8064","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":";;;;;;;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA,mDAA2C,cAAc;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA;;;;;;;;;;;AChEAA,QAAQC,MAAR,CAAe,gBAAf,EAAiC,EAAjC,EACGC,SADH,CACa,YADb,EAC2B,CAAC,MAAD,EAAS,UAAT,EAAqB,UAASC,OAAT,EAAkBC,QAAlB,EAA4B;;AAExE,WAASC,WAAT,CAAqBC,UAArB,EAAiC;;AAE/B,SAAKC,SAAL,GAAiB;AAAA,aAAMD,WAAWC,SAAX,EAAN;AAAA,KAAjB;;AAEA,SAAKC,WAAL,GAAmB,UAACC,MAAD;AAAA,aAAYH,WAAWE,WAAX,CAAuBC,MAAvB,CAAZ;AAAA,KAAnB;;AAEA,SAAKC,eAAL,GAAuB,UAACC,CAAD,EAAIC,CAAJ;AAAA,aAAUN,WAAWI,eAAX,CAA2BC,CAA3B,EAA8BC,CAA9B,CAAV;AAAA,KAAvB;;AAEAC,WAAOC,cAAP,CAAsB,IAAtB,EAA4B,SAA5B,EAAuC,EAAEC,KAAK;AAAA,eAAMT,WAAWU,UAAX,EAAN;AAAA,OAAP,EAAvC;AACD;;AAED,WAASC,aAAT,CAAuBX,UAAvB,EAAmCY,MAAnC,EAA2C;;AAEzC,SAAKC,GAAL,GAAW,YAAU,iBAAoB;AACvC,UAAIC,OAAOC,UAAU,CAAV,CAAX;AACA,UAAIC,QAAQD,UAAU,CAAV,CAAZ;AACA,UAAIA,UAAUE,MAAV,IAAoB,CAAxB,EAA2B;AACzB,eAAOL,OAAOM,MAAP,CAAcL,GAAd,CAAkBC,IAAlB,CAAP;AACD;AACD,UAAIC,UAAUE,MAAV,IAAoB,CAAxB,EAA2B;AACzBL,eAAOM,MAAP,CAAcL,GAAd,CAAkBC,IAAlB,EAAwBE,KAAxB;AACAhB,mBAAWmB,UAAX,CAAsB,UAACC,GAAD;AAAA,iBAASA,IAAIR,OAAOS,EAAX,EAAeR,GAAf,CAAmBC,IAAnB,EAAyBE,KAAzB,CAAT;AAAA,SAAtB;AACAJ,eAAOC,GAAP,CAAWC,IAAX,IAAmBE,KAAnB;AACD;AACF,KAXD;;AAaA,SAAKM,UAAL,GAAkB,UAACC,KAAD;AAAA,aAAWvB,WAAWsB,UAAX,CAAsBV,MAAtB,EAA8BW,KAA9B,CAAX;AAAA,KAAlB;;AAEA,SAAKC,YAAL,GAAoB,UAACD,KAAD;AAAA,aAAWvB,WAAWwB,YAAX,CAAwBZ,MAAxB,EAAgCW,KAAhC,CAAX;AAAA,KAApB;;AAEAhB,WAAOC,cAAP,CAAsB,IAAtB,EAA4B,UAA5B,EAAwC,EAAEC,KAAK;AAAA,eAAMG,OAAOS,EAAb;AAAA,OAAP,EAAxC;AACD;;AAED,WAASI,gBAAT,CAA0BzB,UAA1B,EAAsC0B,OAAtC,EAA+CR,MAA/C,EAAuD;;AAErD,SAAKA,MAAL,GAAcA,MAAd;AACA,SAAKL,GAAL,GAAW,EAAX;AACA,SAAKc,KAAL,GAAaD,QAAQT,MAArB;AACA,SAAKI,EAAL,GAAUK,QAAQT,MAAlB;;AAEA;;AAEA,SAAKf,WAAL,GAAmB,UAASC,MAAT,EAAiB;AAClC,WAAKU,GAAL,GAAWnB,QAAQkC,MAAR,CAAe,EAAf,EAAmBzB,OAAOU,GAA1B,CAAX;AACA,WAAKc,KAAL,GAAaxB,OAAOwB,KAApB;AACAE,eAAS,KAAKX,MAAd,EAAsB,KAAKL,GAA3B;AACD,KAJD;;AAMA,SAAKS,UAAL,GAAkB,UAASQ,MAAT,EAAiB;AAAA;;AACjC,UAAIA,MAAJ,EAAY;AACVR,mBAAWJ,MAAX,EAAmBY,OAAOZ,MAA1B;AACAlB,mBAAWmB,UAAX,CAAsB,UAACC,GAAD;AAAA,iBAASE,WAAWF,IAAI,MAAKC,EAAT,CAAX,EAAyBD,IAAIU,OAAOT,EAAX,CAAzB,CAAT;AAAA,SAAtB;AACD,OAHD,MAGO;AACLU,iBAASb,MAAT;AACAlB,mBAAWmB,UAAX,CAAsB,UAACC,GAAD;AAAA,iBAASW,SAASX,IAAI,MAAKC,EAAT,CAAT,CAAT;AAAA,SAAtB;AACD;AACF,KARD;;AAUA,SAAKjB,eAAL,GAAuB,UAASC,CAAT,EAAYC,CAAZ,EAAe;AAAA;;AACpC,UAAI0B,YAAYd,MAAZ,EAAoBb,CAApB,EAAuBC,CAAvB,CAAJ,EAA+B;AAC7B,eAAO,IAAP;AACD;AACD,UAAI2B,SAAS,IAAb;AACAjC,iBAAWmB,UAAX,CAAsB,UAACC,GAAD;AAAA,eACpBa,SAASD,YAAYZ,IAAI,OAAKC,EAAT,CAAZ,EAA0BhB,CAA1B,EAA6BC,CAA7B,aAAyC2B,MAD9B;AAAA,OAAtB;AAGA,aAAOA,MAAP;AACD,KATD;;AAWA,SAAKJ,QAAL,GAAgB,UAASC,MAAT,EAAiB;AAC/BD,eAASC,MAAT,EAAiB,KAAKjB,GAAtB;AACD,KAFD;;AAIA;;AAEA,aAASmB,WAAT,CAAqBE,OAArB,EAA8B7B,CAA9B,EAAiCC,CAAjC,EAAoC;AAClC,UAAI6B,SAASD,QAAQC,MAAR,EAAb;AACA,UAAI9B,IAAI8B,OAAOC,IAAX,IAAmBD,OAAOC,IAAP,GAAcF,QAAQG,UAAR,CAAmB,IAAnB,CAAd,GAAyChC,CAAhE,EACE,OAAO,KAAP;AACF,UAAIC,IAAI6B,OAAOG,GAAX,IAAkBH,OAAOG,GAAP,GAAaJ,QAAQK,WAAR,CAAoB,IAApB,CAAb,GAAyCjC,CAA/D,EACE,OAAO,KAAP;AACF,aAAO,IAAP;AACD;;AAED,aAASgB,UAAT,CAAoBY,OAApB,EAA6BJ,MAA7B,EAAqC;AACnCI,cAAQM,MAAR;AACAV,aAAOW,MAAP,CAAcP,OAAd;AACD;;AAED,aAASH,QAAT,CAAkBG,OAAlB,EAA2B;AACzB,UAAIQ,SAASR,QAAQQ,MAAR,EAAb;AACAR,cAAQM,MAAR;AACAE,aAAOC,MAAP,CAAcT,OAAd;AACD;;AAED,aAASL,QAAT,CAAkBC,MAAlB,EAA0BjB,GAA1B,EAA+B;AAC7BiB,aAAOc,UAAP,CAAkB,OAAlB;AACA,WAAK,IAAI9B,IAAT,IAAiBD,GAAjB,EAAsB;AACpB,YAAIA,IAAIgC,cAAJ,CAAmB/B,IAAnB,CAAJ,EAA8B;AAC5BgB,iBAAOjB,GAAP,CAAWC,IAAX,EAAiBD,IAAIC,IAAJ,CAAjB;AACD;AACF;AACF;AAEF;;AAED,WAASgC,cAAT,CAAwBC,cAAxB,EAAwC;AAAA;;AACtC,QAAIrB,UAAU,EAAd;AACA,QAAIsB,SAAS,IAAIC,GAAJ,EAAb;;AAEAnD,aAAS,YAAM;AACbiD,qBAAeG,OAAf,CAAuBC,aAAvB,CAAqCC,WAArC,GAAmD,IAAIrD,WAAJ,QAAnD;AACAgD,qBAAeG,OAAf,CAAuBG,SAAvB,GAAmC,UAACC,KAAD,EAAQC,IAAR;AAAA,eAAiBF,UAAUL,OAAOvC,GAAP,CAAW6C,KAAX,CAAV,EAA6BC,IAA7B,CAAjB;AAAA,OAAnC;AACD,KAHD;;AAKA,SAAKC,cAAL,GAAsB,UAAStC,MAAT,EAAiB;AACrCQ,cAAQ+B,IAAR,CAAa,IAAIhC,gBAAJ,CAAqB,IAArB,EAA2BC,OAA3B,EAAoCR,MAApC,CAAb;AACD,KAFD;;AAIA,SAAKwC,YAAL,GAAoB,UAASJ,KAAT,EAAgBK,IAAhB,EAAsB;AACxC,UAAIvC,MAAM4B,OAAOvC,GAAP,CAAW6C,KAAX,CAAV;AACA,UAAI,CAAClC,GAAL,EAAU;AACRA,cAAM,EAAN;AACA4B,eAAOY,GAAP,CAAWN,KAAX,EAAkBlC,GAAlB;AACD;AACD,UAAIA,IAAIH,MAAJ,IAAcS,QAAQT,MAA1B,EAAkC;AAChC,eAAO,KAAP;AACD;AACDG,UAAIqC,IAAJ,CAASE,IAAT;AACA,aAAO,IAAP;AACD,KAXD;;AAaA,SAAKE,cAAL,GAAsB,UAASP,KAAT,EAAgBK,IAAhB,EAAsB;AAC1C,UAAIvC,MAAM4B,OAAOvC,GAAP,CAAW6C,KAAX,CAAV;AACA,UAAIQ,IAAI1C,IAAI2C,OAAJ,CAAYJ,IAAZ,CAAR;AACAvC,UAAI4C,MAAJ,CAAWF,CAAX,EAAc,CAAd;AACA,UAAI,CAAC1C,IAAIH,MAAT,EAAiB;AACf+B,eAAOiB,MAAP,CAAcX,KAAd;AACD;AACF,KAPD;;AASA,SAAKnC,UAAL,GAAkB,UAAS+C,QAAT,EAAmB;AACnClB,aAAOmB,OAAP,CAAeD,QAAf;AACD,KAFD;;AAIA,SAAKxD,UAAL,GAAkB,YAAW;AAAA;;AAC3B,UAAIuB,SAAS,EAAb;AACAP,cAAQ0C,KAAR,GACGC,IADH,CACQ,UAACC,CAAD,EAAIC,CAAJ;AAAA,eAAUD,EAAE3C,KAAF,GAAU4C,EAAE5C,KAAtB;AAAA,OADR,EAEGwC,OAFH,CAEW,UAACvD,MAAD;AAAA,eAAYqB,OAAOwB,IAAP,CAAY,IAAI9C,aAAJ,SAAwBC,MAAxB,CAAZ,CAAZ;AAAA,OAFX;AAGA,aAAOqB,MAAP;AACD,KAND;;AAQA,SAAKhC,SAAL,GAAiB,YAAW;AAC1B,UAAIgC,SAAS,EAAb;AACAP,cAAQyC,OAAR,CAAgB,UAACvD,MAAD,EAASW,KAAT;AAAA,eAAmBU,OAAOwB,IAAP,CAAY;AAC7ClC,iBAAOA,KADsC;AAE7CV,eAAKnB,QAAQkC,MAAR,CAAe,EAAf,EAAmBhB,OAAOC,GAA1B,CAFwC;AAG7Cc,iBAAOf,OAAOe;AAH+B,SAAZ,CAAnB;AAAA,OAAhB;AAKA,aAAOM,MAAP;AACD,KARD;;AAUA,SAAK/B,WAAL,GAAmB,UAASsE,OAAT,EAAkB;AACnC,UAAI,CAACA,OAAD,IAAYA,QAAQvD,MAAR,IAAkBS,QAAQT,MAA1C,EAAkD;AAChD,cAAM,IAAIwD,KAAJ,CAAU,2EAAV,CAAN;AACD;AACDD,cAAQL,OAAR,CAAgB,UAAChE,MAAD,EAASoB,KAAT;AAAA,eAAmBG,QAAQH,KAAR,EAAerB,WAAf,CAA2BC,MAA3B,CAAnB;AAAA,OAAhB;AACAkD,gBAAU3B,QAAQgD,GAAR,CAAY,UAAC9D,MAAD;AAAA,eAAYA,OAAOM,MAAnB;AAAA,OAAZ,CAAV;AACA8B,aAAOmB,OAAP,CAAe,UAAC/C,GAAD;AAAA,eAASiC,UAAUjC,GAAV,CAAT;AAAA,OAAf;AACD,KAPD;;AASA,SAAKE,UAAL,GAAkB,UAASqD,QAAT,EAAmB7C,MAAnB,EAA2B;AAC3C,UAAIP,QAAQO,MAAZ;;AAEA,UAAIA,SAAS,CAAT,KAAe,CAAnB,EAAsB;AACpBP,gBAAQO,SAASJ,QAAQI,OAAO8C,QAAf,EAAyBjD,KAAlC,GAA0CD,QAAQT,MAA1D;AACD;AACD,UAAIM,QAAQ,CAAR,IAAaA,QAAQG,QAAQT,MAAjC,EAAyC;AACvC,eADuC,CAC/B;AACT;;AAED,UAAIU,QAAQgD,SAAShD,KAArB;AAAA,UACEkD,OAAO,IADT;AAEAtD,eAASI,QAAQJ,KAAR,GAAgB,CAAhB,GAAoB,CAA7B;;AAEAG,cAAQyC,OAAR,CAAgB,aAAK;AACnBW,UAAEnD,KAAF,IAAWmD,EAAEnD,KAAF,GAAUA,KAAV,GAAkB,CAAlB,GAAsB,CAAjC;AACAmD,UAAEnD,KAAF,IAAWmD,EAAEnD,KAAF,IAAWJ,KAAX,GAAmB,CAAnB,GAAuB,CAAlC;AACAsD,eAAOC,EAAEnD,KAAF,KAAYJ,QAAQ,CAApB,GAAwBuD,CAAxB,GAA4BD,IAAnC;AACD,OAJD;;AAMAF,eAAShD,KAAT,GAAiBJ,KAAjB;AACAoD,eAASrD,UAAT,CAAoBuD,IAApB;AACD,KAtBD;;AAwBA,SAAKrD,YAAL,GAAoB,UAASmD,QAAT,EAAmBpD,KAAnB,EAA0B;AAC5C,UAAIA,QAAQ,CAAR,IAAaA,SAASG,QAAQT,MAAlC,EAA0C;AACxC;AACD;AACDS,cAAQqD,IAAR,CAAa;AAAA,eAAKD,EAAEnD,KAAF,KAAYJ,KAAjB;AAAA,OAAb,EAAqCI,KAArC,GAA6CgD,SAAShD,KAAtD;AACAgD,eAAShD,KAAT,GAAiBJ,KAAjB;AACD,KAND;;AAQA,SAAKnB,eAAL,GAAuB,UAASC,CAAT,EAAYC,CAAZ,EAAe;AACpC,UAAIM,SAASc,QAAQqD,IAAR,CAAa;AAAA,eAAOC,IAAI5E,eAAJ,CAAoBC,CAApB,EAAuBC,CAAvB,CAAP;AAAA,OAAb,CAAb;AACA,aAAOM,SAAS,IAAID,aAAJ,CAAkB,IAAlB,EAAwBC,MAAxB,CAAT,GAA2CqE,SAAlD;AACD,KAHD;;AAKA;;AAEA,aAAS5B,SAAT,CAAmBjC,GAAnB,EAAwB;AACtB,UAAIsB,SAAStB,IAAI,CAAJ,EAAOsB,MAAP,EAAb;AACA,UAAIwC,UAAU,EAAd;;AAEA9D,UAAI+C,OAAJ,CAAY,UAACR,IAAD,EAAOpC,KAAP,EAAiB;AAC3BG,gBAAQH,KAAR,EAAeM,QAAf,CAAwB8B,IAAxB;AACAuB,gBAAQxD,QAAQH,KAAR,EAAeI,KAAvB,IAAgCP,IAAIG,KAAJ,CAAhC;AACAH,YAAIG,KAAJ,EAAWiB,MAAX;AACD,OAJD;;AAMA0C,cAAQf,OAAR,CAAgB;AAAA,eAAQzB,OAAOC,MAAP,CAAcgB,IAAd,CAAR;AAAA,OAAhB;AACD;AAEF;;AAED,SAAO;AACLwB,aAAS,CAAC,oBAAD,CADJ;AAELC,cAAU,GAFL;AAGLC,UAAM,cAACC,MAAD,EAASpD,OAAT,EAAkBqD,KAAlB,EAAyBC,WAAzB,EAAyC;AAC7CA,kBAAY,CAAZ,EAAeC,cAAf,GAAgCD,YAAY,CAAZ,EAAeC,cAAf,IAAiC,IAAI3C,cAAJ,CAAmB0C,YAAY,CAAZ,CAAnB,CAAjE;AACAA,kBAAY,CAAZ,EAAeC,cAAf,CAA8BjC,cAA9B,CAA6CtB,OAA7C;AACD;AANI,GAAP;AAQD,CA5OwB,CAD3B,EA+OCtC,SA/OD,CA+OW,YA/OX,EA+OyB,YAAW;AAClC,SAAO;AACLuF,aAAS,CAAC,qBAAD,CADJ;AAELC,cAAU,GAFL;AAGLC,UAAM,cAACC,MAAD,EAASpD,OAAT,EAAkBqD,KAAlB,EAAyBC,WAAzB,EAAyC;AAC7C,UAAI,CAACA,YAAY,CAAZ,CAAL,EAAqB;AACnB;AACD;AACD,UAAIlC,QAAQgC,MAAZ;AACA,UAAII,gBAAgBJ,OAAOK,qBAA3B;AACA,UAAI,CAACD,aAAL,EAAoB;AAClBA,wBAAgBJ,OAAOK,qBAAP,GAA+B;AAC7CC,mBAAS;AADoC,SAA/C;AAGD;AACD,UAAI,CAACF,cAAcE,OAAnB,EAA4B;AAC1BtC,gBAAQoC,cAAcpC,KAAtB;AACD;AACD,UAAImC,iBAAiBD,YAAY,CAAZ,EAAeC,cAApC;AACA,UAAIA,eAAe/B,YAAf,CAA4BJ,KAA5B,EAAmCpB,OAAnC,CAAJ,EAAiD;AAC/CoD,eAAOO,GAAP,CAAW,UAAX,EAAuB;AAAA,iBAAMJ,eAAe5B,cAAf,CAA8BP,KAA9B,EAAqCpB,OAArC,CAAN;AAAA,SAAvB;AACD;AACD,UAAI,CAACwD,cAAcE,OAAnB,EAA4B;AAC1BF,sBAAcI,MAAd;AACD;AACF;AAxBI,GAAP;AA0BD,CA1QD,E","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 0babc30b0e0c1649fab6","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 diff --git a/dist/ui-scroll-grid.min.js b/dist/ui-scroll-grid.min.js index 96a0d3c4..010289a3 100644 --- a/dist/ui-scroll-grid.min.js +++ b/dist/ui-scroll-grid.min.js @@ -1,8 +1,8 @@ /*! * angular-ui-scroll (compressed) * https://github.com/angular-ui/ui-scroll - * Version: 1.6.1 -- 2017-03-03T05:28:34.249Z + * Version: 1.6.1 -- 2017-06-20T03:26:22.462Z * License: MIT */ -!function(t){function n(o){if(r[o])return r[o].exports;var e=r[o]={exports:{},id:o,loaded:!1};return t[o].call(e.exports,e,e.exports,n),e.loaded=!0,e.exports}var r={};return n.m=t,n.c=r,n.p="",n(0)}([function(t,n){"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 o(t,n){this.css=function(){var r=arguments[0],o=arguments[1];return 1==arguments.length?n.header.css(r):void(2==arguments.length&&(n.header.css(r,o),t.forEachRow(function(t){return t[n.id].css(r,o)}),n.css[r]=o))},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 e(t,n,r){function o(t,n,r){var o=t.offset();return!(n=c.length)&&(r.push(n),!0)},this.unregisterCell=function(t,n){var r=a.get(t),o=r.indexOf(n);r.splice(o,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 o(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 o=t.mapTo,e=null;r-=oo?1:0,t.mapTo+=t.mapTo>=r?1:0,e=t.mapTo===r+1?t:e}),t.mapTo=r,t.moveBefore(e)}},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 o(this,r):void 0}}return{require:["^^uiScrollViewport"],restrict:"A",link:function(t,n,r,o){o[0].gridController=o[0].gridController||new i(o[0]),o[0].gridController.registerColumn(n)}}}]).directive("uiScrollTd",function(){return{require:["?^^uiScrollViewport"],restrict:"A",link:function(t,n,r,o){o[0]&&!function(){var r=o[0].gridController;r.registerCell(t,n)&&t.$on("$destroy",function(){return r.unregisterCell(t,n)})}()}}})}]); +!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()}}}})}}); //# sourceMappingURL=ui-scroll-grid.min.js.map \ No newline at end of file diff --git a/dist/ui-scroll-grid.min.js.map b/dist/ui-scroll-grid.min.js.map index 2a8ed950..922c02e2 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 6fb5c0179465828c8111?4814","webpack:///./src/ui-scroll-grid.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","id","loaded","call","m","c","p","angular","directive","console","$timeout","GridAdapter","controller","this","getLayout","applyLayout","layout","columnFromPoint","x","y","Object","defineProperty","get","getColumns","ColumnAdapter","column","css","attr","arguments","value","length","header","forEachRow","row","moveBefore","index","exchangeWith","ColumnController","columns","insidePoint","element","offset","left","outerWidth","top","outerHeight","target","detach","before","moveLast","parent","append","applyCss","removeAttr","hasOwnProperty","mapTo","extend","_this","_this2","result","GridController","scrollViewport","transform","visible","forEach","cell","_this3","rowMap","Map","adapter","publicContext","gridAdapter","scope","item","registerColumn","push","registerCell","set","unregisterCell","i","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","$on"],"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.6.1 -- 2017-03-03T05:28:34.208Z\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/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tangular.module('ui.scroll.grid', []).directive('uiScrollTh', ['$log', '$timeout', function (console, $timeout) {\n\t\n\t function GridAdapter(controller) {\n\t\n\t this.getLayout = function () {\n\t return controller.getLayout();\n\t };\n\t\n\t this.applyLayout = function (layout) {\n\t return controller.applyLayout(layout);\n\t };\n\t\n\t this.columnFromPoint = function (x, y) {\n\t return controller.columnFromPoint(x, y);\n\t };\n\t\n\t Object.defineProperty(this, 'columns', { get: function get() {\n\t return controller.getColumns();\n\t } });\n\t }\n\t\n\t function ColumnAdapter(controller, column) {\n\t\n\t this.css = function () /* attr, value */{\n\t var attr = arguments[0];\n\t var value = arguments[1];\n\t if (arguments.length == 1) {\n\t return column.header.css(attr);\n\t }\n\t if (arguments.length == 2) {\n\t column.header.css(attr, value);\n\t controller.forEachRow(function (row) {\n\t return row[column.id].css(attr, value);\n\t });\n\t column.css[attr] = value;\n\t }\n\t };\n\t\n\t this.moveBefore = function (index) {\n\t return controller.moveBefore(column, index);\n\t };\n\t\n\t this.exchangeWith = function (index) {\n\t return controller.exchangeWith(column, index);\n\t };\n\t\n\t Object.defineProperty(this, 'columnId', { get: function get() {\n\t return column.id;\n\t } });\n\t }\n\t\n\t function ColumnController(controller, columns, header) {\n\t\n\t this.header = header;\n\t this.css = {};\n\t this.mapTo = columns.length;\n\t this.id = columns.length;\n\t\n\t // controller api methods\n\t\n\t this.applyLayout = function (layout) {\n\t this.css = angular.extend({}, layout.css);\n\t this.mapTo = layout.mapTo;\n\t applyCss(this.header, this.css);\n\t };\n\t\n\t this.moveBefore = function (target) {\n\t var _this = this;\n\t\n\t if (target) {\n\t moveBefore(header, target.header);\n\t controller.forEachRow(function (row) {\n\t return moveBefore(row[_this.id], row[target.id]);\n\t });\n\t } else {\n\t moveLast(header);\n\t controller.forEachRow(function (row) {\n\t return moveLast(row[_this.id]);\n\t });\n\t }\n\t };\n\t\n\t this.columnFromPoint = function (x, y) {\n\t var _this2 = this;\n\t\n\t if (insidePoint(header, x, y)) {\n\t return this;\n\t }\n\t var result = null;\n\t controller.forEachRow(function (row) {\n\t return result = insidePoint(row[_this2.id], x, y) ? _this2 : result;\n\t });\n\t return result;\n\t };\n\t\n\t this.applyCss = function (target) {\n\t applyCss(target, this.css);\n\t };\n\t\n\t // function definitions\n\t\n\t function insidePoint(element, x, y) {\n\t var offset = element.offset();\n\t if (x < offset.left || offset.left + element.outerWidth(true) < x) return false;\n\t if (y < offset.top || offset.top + element.outerHeight(true) < y) return false;\n\t return true;\n\t }\n\t\n\t function moveBefore(element, target) {\n\t element.detach();\n\t target.before(element);\n\t }\n\t\n\t function moveLast(element) {\n\t var parent = element.parent();\n\t element.detach();\n\t parent.append(element);\n\t }\n\t\n\t function applyCss(target, css) {\n\t target.removeAttr('style');\n\t for (var attr in css) {\n\t if (css.hasOwnProperty(attr)) {\n\t target.css(attr, css[attr]);\n\t }\n\t }\n\t }\n\t }\n\t\n\t function GridController(scrollViewport) {\n\t var _this3 = this;\n\t\n\t var columns = [];\n\t var rowMap = new Map();\n\t\n\t $timeout(function () {\n\t scrollViewport.adapter.publicContext.gridAdapter = new GridAdapter(_this3);\n\t scrollViewport.adapter.transform = function (scope, item) {\n\t return transform(rowMap.get(scope), item);\n\t };\n\t });\n\t\n\t this.registerColumn = function (header) {\n\t columns.push(new ColumnController(this, columns, header));\n\t };\n\t\n\t this.registerCell = function (scope, cell) {\n\t var row = rowMap.get(scope);\n\t if (!row) {\n\t row = [];\n\t rowMap.set(scope, row);\n\t }\n\t if (row.length >= columns.length) {\n\t return false;\n\t }\n\t row.push(cell);\n\t return true;\n\t };\n\t\n\t this.unregisterCell = function (scope, cell) {\n\t var row = rowMap.get(scope);\n\t var i = row.indexOf(cell);\n\t row.splice(i, 1);\n\t if (!row.length) {\n\t rowMap.delete(scope);\n\t }\n\t };\n\t\n\t this.forEachRow = function (callback) {\n\t rowMap.forEach(callback);\n\t };\n\t\n\t this.getColumns = function () {\n\t var _this4 = this;\n\t\n\t var result = [];\n\t columns.slice().sort(function (a, b) {\n\t return a.mapTo - b.mapTo;\n\t }).forEach(function (column) {\n\t return result.push(new ColumnAdapter(_this4, column));\n\t });\n\t return result;\n\t };\n\t\n\t this.getLayout = function () {\n\t var result = [];\n\t columns.forEach(function (column, index) {\n\t return result.push({\n\t index: index,\n\t css: angular.extend({}, column.css),\n\t mapTo: column.mapTo\n\t });\n\t });\n\t return result;\n\t };\n\t\n\t this.applyLayout = function (layouts) {\n\t if (!layouts || layouts.length != columns.length) {\n\t throw new Error('Failed to apply layout - number of layouts should match number of columns');\n\t }\n\t layouts.forEach(function (layout, index) {\n\t return columns[index].applyLayout(layout);\n\t });\n\t transform(columns.map(function (column) {\n\t return column.header;\n\t }));\n\t rowMap.forEach(function (row) {\n\t return transform(row);\n\t });\n\t };\n\t\n\t this.moveBefore = function (selected, target) {\n\t var index = target;\n\t\n\t if (target % 1 !== 0) {\n\t index = target ? columns[target.columnId].mapTo : columns.length;\n\t }\n\t if (index < 0 || index > columns.length) {\n\t return; // throw an error?\n\t }\n\t\n\t var mapTo = selected.mapTo,\n\t next = null;\n\t index -= mapTo < index ? 1 : 0;\n\t\n\t columns.forEach(function (c) {\n\t c.mapTo -= c.mapTo > mapTo ? 1 : 0;\n\t c.mapTo += c.mapTo >= index ? 1 : 0;\n\t next = c.mapTo === index + 1 ? c : next;\n\t });\n\t\n\t selected.mapTo = index;\n\t selected.moveBefore(next);\n\t };\n\t\n\t this.exchangeWith = function (selected, index) {\n\t if (index < 0 || index >= columns.length) {\n\t return;\n\t }\n\t columns.find(function (c) {\n\t return c.mapTo === index;\n\t }).mapTo = selected.mapTo;\n\t selected.mapTo = index;\n\t };\n\t\n\t this.columnFromPoint = function (x, y) {\n\t var column = columns.find(function (col) {\n\t return col.columnFromPoint(x, y);\n\t });\n\t return column ? new ColumnAdapter(this, column) : undefined;\n\t };\n\t\n\t // function definitions\n\t\n\t function transform(row) {\n\t var parent = row[0].parent();\n\t var visible = [];\n\t\n\t row.forEach(function (cell, index) {\n\t columns[index].applyCss(cell);\n\t visible[columns[index].mapTo] = row[index];\n\t row[index].detach();\n\t });\n\t\n\t visible.forEach(function (cell) {\n\t return parent.append(cell);\n\t });\n\t }\n\t }\n\t\n\t return {\n\t require: ['^^uiScrollViewport'],\n\t restrict: 'A',\n\t link: function link($scope, element, $attr, controllers) {\n\t controllers[0].gridController = controllers[0].gridController || new GridController(controllers[0]);\n\t controllers[0].gridController.registerColumn(element);\n\t }\n\t };\n\t}]).directive('uiScrollTd', function () {\n\t return {\n\t require: ['?^^uiScrollViewport'],\n\t restrict: 'A',\n\t link: function link($scope, element, $attr, controllers) {\n\t if (controllers[0]) {\n\t (function () {\n\t var gridController = controllers[0].gridController;\n\t if (gridController.registerCell($scope, element)) {\n\t $scope.$on('$destroy', function () {\n\t return gridController.unregisterCell($scope, element);\n\t });\n\t }\n\t })();\n\t }\n\t }\n\t };\n\t});\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\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 6fb5c0179465828c8111","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 );\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, 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 let gridController = controllers[0].gridController;\n if (gridController.registerCell($scope, element)) {\n $scope.$on('$destroy', () => gridController.unregisterCell($scope, element));\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":[],"names":[],"mappings":"","file":"ui-scroll-grid.min.js","sourceRoot":""} \ No newline at end of file diff --git a/dist/ui-scroll.js b/dist/ui-scroll.js index 8ccb8842..8721eb9f 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.6.1 -- 2017-04-09T18:25:50.697Z + * Version: 1.6.1 -- 2017-06-20T03:26:22.415Z * License: MIT */ /******/ (function(modules) { // webpackBootstrap @@ -12,21 +12,21 @@ /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) +/******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; -/******/ +/******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { -/******/ exports: {}, -/******/ id: moduleId, -/******/ loaded: false +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded -/******/ module.loaded = true; +/******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; @@ -39,1533 +39,1562 @@ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __webpack_require__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(0); +/******/ return __webpack_require__(__webpack_require__.s = 7); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var _jqLiteExtras = __webpack_require__(1); - - var _jqLiteExtras2 = _interopRequireDefault(_jqLiteExtras); - - var _elementRoutines = __webpack_require__(2); - - var _elementRoutines2 = _interopRequireDefault(_elementRoutines); - - var _buffer = __webpack_require__(3); - - var _buffer2 = _interopRequireDefault(_buffer); - - var _viewport = __webpack_require__(4); - - var _viewport2 = _interopRequireDefault(_viewport); - - var _adapter = __webpack_require__(6); - - var _adapter2 = _interopRequireDefault(_adapter); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - angular.module('ui.scroll', []).service('jqLiteExtras', function () { - return new _jqLiteExtras2.default(); - }).run(['jqLiteExtras', function (jqLiteExtras) { - return !window.jQuery ? jqLiteExtras.registerFor(angular.element) : null; - }]).directive('uiScrollViewport', function () { - return { - restrict: 'A', - controller: ['$scope', '$element', function (scope, element) { - var _this = this; - - this.container = element; - this.viewport = element; - this.scope = scope; - - angular.forEach(element.children(), function (child) { - if (child.tagName.toLowerCase() === 'tbody') { - _this.viewport = angular.element(child); - } - }); - - return this; - }] - }; - }).directive('uiScroll', ['$log', '$injector', '$rootScope', '$timeout', '$q', '$parse', function (console, $injector, $rootScope, $timeout, $q, $parse) { - - return { - require: ['?^uiScrollViewport'], - restrict: 'A', - transclude: 'element', - priority: 1000, - terminal: true, - link: link - }; - - function link($scope, element, $attr, controllers, linker) { - var match = $attr.uiScroll.match(/^\s*(\w+)\s+in\s+([(\w|\$)\.]+)\s*$/); - if (!match) { - throw new Error('Expected uiScroll in form of \'_item_ in _datasource_\' but got \'' + $attr.uiScroll + '\''); - } - - function parseNumericAttr(value, defaultValue) { - var result = $parse(value)($scope); - return isNaN(result) ? defaultValue : result; - } - - var BUFFER_MIN = 3; - var BUFFER_DEFAULT = 10; - var PADDING_MIN = 0.3; - var PADDING_DEFAULT = 0.5; - - var datasource = null; - var itemName = match[1]; - var datasourceName = match[2]; - var viewportController = controllers[0]; - var bufferSize = Math.max(BUFFER_MIN, parseNumericAttr($attr.bufferSize, BUFFER_DEFAULT)); - var padding = Math.max(PADDING_MIN, parseNumericAttr($attr.padding, PADDING_DEFAULT)); - var startIndex = parseNumericAttr($attr.startIndex, 1); - var ridActual = 0; // current data revision id - var pending = []; - - var elementRoutines = new _elementRoutines2.default($injector, $q); - var buffer = new _buffer2.default(elementRoutines, bufferSize); - var viewport = new _viewport2.default(elementRoutines, buffer, element, viewportController, $rootScope, padding); - var adapter = new _adapter2.default(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope); - - if (viewportController) { - viewportController.adapter = adapter; - } - - var isDatasourceValid = function isDatasourceValid() { - return angular.isObject(datasource) && angular.isFunction(datasource.get); - }; - datasource = $parse(datasourceName)($scope); // try to get datasource on scope - if (!isDatasourceValid()) { - datasource = $injector.get(datasourceName); // try to inject datasource as service - if (!isDatasourceValid()) { - throw new Error(datasourceName + ' is not a valid datasource'); - } - } - - var indexStore = {}; - - function defineProperty(datasource, propName, propUserName) { - var descriptor = Object.getOwnPropertyDescriptor(datasource, propName); - if (!descriptor || !descriptor.set && !descriptor.get) { - Object.defineProperty(datasource, propName, { - set: function set(value) { - indexStore[propName] = value; - $timeout(function () { - buffer[propUserName] = value; - if (!pending.length) { - var topPaddingHeightOld = viewport.topDataPos(); - viewport.adjustPadding(); - if (propName === 'minIndex') { - viewport.adjustScrollTopAfterMinIndexSet(topPaddingHeightOld); - } - } - }); - }, - get: function get() { - return indexStore[propName]; - } - }); - } - } - - defineProperty(datasource, 'minIndex', 'minIndexUser'); - defineProperty(datasource, 'maxIndex', 'maxIndexUser'); - - var fetchNext = datasource.get.length !== 2 ? function (success) { - return datasource.get(buffer.next, bufferSize, success); - } : function (success) { - datasource.get({ - index: buffer.next, - append: buffer.length ? buffer[buffer.length - 1].item : void 0, - count: bufferSize - }, success); - }; - - var fetchPrevious = datasource.get.length !== 2 ? function (success) { - return datasource.get(buffer.first - bufferSize, bufferSize, success); - } : function (success) { - datasource.get({ - index: buffer.first - bufferSize, - prepend: buffer.length ? buffer[0].item : void 0, - count: bufferSize - }, 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 - */ - linker(function (clone, scope) { - viewport.createPaddingElements(clone[0]); - // we do not include the clone in the DOM. It means that the nested directives will not - // be able to reach the parent directives, but in this case it is intentional because we - // created the clone to access the template tag name - scope.$destroy(); - clone.remove(); - }); - - $scope.$on('$destroy', function () { - unbindEvents(); - viewport.unbind('mousewheel', wheelHandler); - }); - - viewport.bind('mousewheel', wheelHandler); - - $timeout(function () { - viewport.applyContainerStyle(); - reload(); - }); - - /* Private function definitions */ - - function isInvalid(rid) { - return rid && rid !== ridActual || $scope.$$destroyed; - } - - function bindEvents() { - viewport.bind('resize', resizeAndScrollHandler); - viewport.bind('scroll', resizeAndScrollHandler); - } - - function unbindEvents() { - viewport.unbind('resize', resizeAndScrollHandler); - viewport.unbind('scroll', resizeAndScrollHandler); - } - - function reload() { - viewport.resetTopPadding(); - viewport.resetBottomPadding(); - if (arguments.length) { - startIndex = arguments[0]; - } - buffer.reset(startIndex); - adjustBuffer(); - } - - function isElementVisible(wrapper) { - return wrapper.element.height() && wrapper.element[0].offsetParent; - } - - function visibilityWatcher(wrapper) { - if (isElementVisible(wrapper)) { - buffer.forEach(function (item) { - if (angular.isFunction(item.unregisterVisibilityWatcher)) { - item.unregisterVisibilityWatcher(); - delete item.unregisterVisibilityWatcher; - } - }); - if (!pending.length) { - adjustBuffer(); - } - } - } - - function insertWrapperContent(wrapper, insertAfter) { - createElement(wrapper, insertAfter, viewport.insertElement); - if (!isElementVisible(wrapper)) { - wrapper.unregisterVisibilityWatcher = wrapper.scope.$watch(function () { - return visibilityWatcher(wrapper); - }); - } - wrapper.element.addClass('ng-hide'); // hide inserted elements before data binding - } - - function createElement(wrapper, insertAfter, insertElement) { - var promises = null; - var sibling = insertAfter > 0 ? buffer[insertAfter - 1].element : undefined; - linker(function (clone, scope) { - promises = insertElement(clone, sibling); - wrapper.element = clone; - wrapper.scope = scope; - scope[itemName] = wrapper.item; - }); - if (adapter.transform) adapter.transform(wrapper.scope, wrapper.element); - return promises; - } - - function updateDOM() { - var promises = []; - var toBePrepended = []; - var toBeRemoved = []; - var inserted = []; - - buffer.forEach(function (wrapper, i) { - switch (wrapper.op) { - case 'prepend': - toBePrepended.unshift(wrapper); - break; - case 'append': - insertWrapperContent(wrapper, i); - wrapper.op = 'none'; - inserted.push(wrapper); - break; - case 'insert': - promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated)); - wrapper.op = 'none'; - inserted.push(wrapper); - break; - case 'remove': - toBeRemoved.push(wrapper); - } - }); - - toBeRemoved.forEach(function (wrapper) { - return promises = promises.concat(viewport.removeItem(wrapper)); - }); - - if (toBePrepended.length) toBePrepended.forEach(function (wrapper) { - insertWrapperContent(wrapper); - wrapper.op = 'none'; - }); - - buffer.forEach(function (item, i) { - return item.scope.$index = buffer.first + i; - }); - - return { - prepended: toBePrepended, - removed: toBeRemoved, - inserted: inserted, - animated: promises - }; - } - - function updatePaddings(rid, updates) { - // schedule another adjustBuffer after animation completion - if (updates.animated.length) { - $q.all(updates.animated).then(function () { - viewport.adjustPadding(); - adjustBuffer(rid); - }); - } else { - viewport.adjustPadding(); - } - } - - function enqueueFetch(rid, updates) { - if (viewport.shouldLoadBottom()) { - if (!updates || buffer.effectiveHeight(updates.inserted) > 0) { - // this means that at least one item appended in the last batch has height > 0 - if (pending.push(true) === 1) { - fetch(rid); - adapter.loading(true); - } - } - } else if (viewport.shouldLoadTop()) { - if (!updates || buffer.effectiveHeight(updates.prepended) > 0 || pending[0]) { - // this means that at least one item appended in the last batch has height > 0 - // pending[0] = true means that previous fetch was appending. We need to force at least one prepend - // BTW there will always be at least 1 element in the pending array because bottom is fetched first - if (pending.push(false) === 1) { - fetch(rid); - adapter.loading(true); - } - } - } - } - - function adjustBuffer(rid) { - if (!rid) { - // dismiss pending requests - pending = []; - rid = ++ridActual; - } - - var updates = updateDOM(); - - // We need the item bindings to be processed before we can do adjustment - $timeout(function () { - - // show elements after data binging has been done - updates.inserted.forEach(function (w) { - return w.element.removeClass('ng-hide'); - }); - updates.prepended.forEach(function (w) { - return w.element.removeClass('ng-hide'); - }); - - if (isInvalid(rid)) { - return; - } - - updatePaddings(rid, updates); - enqueueFetch(rid); - - if (!pending.length) { - adapter.calculateProperties(); - } - }); - } - - function adjustBufferAfterFetch(rid) { - var updates = updateDOM(); - - // We need the item bindings to be processed before we can do adjustment - $timeout(function () { - - // show elements after data binging has been done - updates.inserted.forEach(function (w) { - return w.element.removeClass('ng-hide'); - }); - updates.prepended.forEach(function (w) { - return w.element.removeClass('ng-hide'); - }); - - viewport.adjustScrollTopAfterPrepend(updates); - - if (isInvalid(rid)) { - return; - } - - updatePaddings(rid, updates); - enqueueFetch(rid, updates); - pending.shift(); - - if (pending.length) fetch(rid);else { - adapter.loading(false); - bindEvents(); - adapter.calculateProperties(); - } - }); - } - - function fetch(rid) { - if (pending[0]) { - // scrolling down - if (buffer.length && !viewport.shouldLoadBottom()) { - adjustBufferAfterFetch(rid); - } else { - fetchNext(function (result) { - if (isInvalid(rid)) { - return; - } - - if (result.length < bufferSize) { - buffer.eof = true; - } - - if (result.length > 0) { - viewport.clipTop(); - buffer.append(result); - } - - adjustBufferAfterFetch(rid); - }); - } - } else { - // scrolling up - if (buffer.length && !viewport.shouldLoadTop()) { - adjustBufferAfterFetch(rid); - } else { - fetchPrevious(function (result) { - if (isInvalid(rid)) { - return; - } - - if (result.length < bufferSize) { - buffer.bof = true; - // log 'bof is reached' - } - - if (result.length > 0) { - if (buffer.length) { - viewport.clipBottom(); - } - buffer.prepend(result); - } - - adjustBufferAfterFetch(rid); - }); - } - } - } - - function resizeAndScrollHandler() { - if (!$rootScope.$$phase && !adapter.isLoading && !adapter.disabled) { - - enqueueFetch(ridActual); - - if (pending.length) { - unbindEvents(); - } else { - adapter.calculateProperties(); - $scope.$apply(); - } - } - } - - function wheelHandler(event) { - if (!adapter.disabled) { - var scrollTop = viewport[0].scrollTop; - var yMax = viewport[0].scrollHeight - viewport[0].clientHeight; - - if (scrollTop === 0 && !buffer.bof || scrollTop === yMax && !buffer.eof) { - event.preventDefault(); - } - } - } - } - }]); - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +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; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function getCtrlOnData(attr, element) { + var onSyntax = attr.match(/^(.+)(\s+on\s+)(.+)?/); + if (onSyntax && onSyntax.length === 4) { + window.console.log('Angular ui-scroll adapter assignment warning. "Controller On" syntax has been deprecated since ui-scroll v1.6.1.'); + var ctrl = onSyntax[3]; + var tail = onSyntax[1]; + var candidate = element; + while (candidate.length) { + var candidateScope = candidate.scope(); // doesn't work when debugInfoEnabled flag = true + var candidateName = (candidate.attr('ng-controller') || '').match(/(\w(?:\w|\d)*)(?:\s+as\s+(\w(?:\w|\d)*))?/); + if (candidateName && candidateName[1] === ctrl) { + return { + target: candidateScope, + source: tail + }; + } + candidate = candidate.parent(); + } + throw new Error('Angular ui-scroll adapter assignment error. Failed to locate target controller "' + ctrl + '" to inject "' + tail + '"'); + } +} + +var Adapter = function () { + function Adapter(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope) { + _classCallCheck(this, Adapter); + + this.viewport = viewport; + this.buffer = buffer; + this.adjustBuffer = adjustBuffer; + this.reload = reload; + + this.isLoading = false; + this.disabled = false; + + var viewportScope = viewport.getScope(); + this.startScope = viewportScope.$parent ? viewportScope : $scope; + + this.publicContext = {}; + this.assignAdapter($attr.adapter, $parse, element); + this.generatePublicContext($attr, $parse); + } + + _createClass(Adapter, [{ + key: 'assignAdapter', + value: function assignAdapter(adapterAttr, $parse, element) { + if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\s+|\s+$/gm, ''))) { + return; + } + var ctrlOnData = getCtrlOnData(adapterAttr, element); + var adapterOnScope = void 0; + + try { + if (ctrlOnData) { + // "Controller On", deprecated since v1.6.1 + $parse(ctrlOnData.source).assign(ctrlOnData.target, {}); + adapterOnScope = $parse(ctrlOnData.source)(ctrlOnData.target); + } else { + $parse(adapterAttr).assign(this.startScope, {}); + adapterOnScope = $parse(adapterAttr)(this.startScope); + } + } catch (error) { + error.message = 'Angular ui-scroll Adapter assignment exception.\n' + ('Can\'t parse "' + adapterAttr + '" expression.\n') + error.message; + throw error; + } + + angular.extend(adapterOnScope, this.publicContext); + this.publicContext = adapterOnScope; + } + }, { + key: 'generatePublicContext', + value: function generatePublicContext($attr, $parse) { + var _this = this; + + // these methods will be accessible out of ui-scroll via user defined adapter + var publicMethods = ['reload', 'applyUpdates', 'append', 'prepend', 'isBOF', 'isEOF', 'isEmpty']; + for (var i = publicMethods.length - 1; i >= 0; i--) { + this.publicContext[publicMethods[i]] = this[publicMethods[i]].bind(this); + } + + // these read-only props will be accessible out of ui-scroll via user defined adapter + var publicProps = ['isLoading', 'topVisible', 'topVisibleElement', 'topVisibleScope', 'bottomVisible', 'bottomVisibleElement', 'bottomVisibleScope']; + + var _loop = function _loop(_i) { + var property = void 0, + attr = $attr[publicProps[_i]]; + Object.defineProperty(_this, publicProps[_i], { + get: function get() { + return property; + }, + set: function set(value) { + property = value; + _this.publicContext[publicProps[_i]] = value; + if (attr) { + $parse(attr).assign(_this.startScope, value); + } + } + }); + }; + + for (var _i = publicProps.length - 1; _i >= 0; _i--) { + _loop(_i); + } + + // non-read-only public property + Object.defineProperty(this.publicContext, 'disabled', { + get: function get() { + return _this.disabled; + }, + set: function set(value) { + return !(_this.disabled = value) ? _this.adjustBuffer() : null; + } + }); + } + }, { + key: 'loading', + value: function loading(value) { + this['isLoading'] = value; + } + }, { + key: 'isBOF', + value: function isBOF() { + return this.buffer.bof; + } + }, { + key: 'isEOF', + value: function isEOF() { + return this.buffer.eof; + } + }, { + key: 'isEmpty', + value: function isEmpty() { + return !this.buffer.length; + } + }, { + key: 'applyUpdates', + value: function applyUpdates(arg1, arg2) { + var _this2 = this; + + if (angular.isFunction(arg1)) { + // arg1 is the updater function, arg2 is ignored + this.buffer.slice(0).forEach(function (wrapper) { + // we need to do it on the buffer clone, because buffer content + // may change as we iterate through + _this2.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'); + } + + var index = arg1 - this.buffer.first; + if (index >= 0 && index < this.buffer.length) { + this.applyUpdate(this.buffer[index], arg2); + } + } + + this.adjustBuffer(); + } + }, { + key: 'append', + value: function append(newItems) { + this.buffer.append(newItems); + this.adjustBuffer(); + } + }, { + key: 'prepend', + value: function prepend(newItems) { + this.buffer.prepend(newItems); + this.adjustBuffer(); + } + }, { + key: 'calculateProperties', + value: function calculateProperties() { + var rowTop = null, + topHeight = 0; + var topDone = false, + bottomDone = false; + var length = this.buffer.length; + + for (var i = 0; i < length; i++) { + var item = this.buffer[i]; + var itemTop = item.element.offset().top; + + if (rowTop !== itemTop) { + // a new row condition + var itemHeight = item.element.outerHeight(true); + var top = this.viewport.topDataPos() + topHeight + itemHeight; + + if (!topDone && top > this.viewport.topVisiblePos()) { + topDone = true; + this['topVisible'] = item.item; + 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; + this['bottomVisibleElement'] = item.element; + this['bottomVisibleScope'] = item.scope; + } + topHeight += itemHeight; + } + + rowTop = itemTop; + + if (topDone && bottomDone) { + break; + } + } + } + }, { + key: 'applyUpdate', + value: function applyUpdate(wrapper, newItems) { + var _this3 = this; + + if (!angular.isArray(newItems)) { + return; + } + + var keepIt = void 0; + var pos = this.buffer.indexOf(wrapper) + 1; + + newItems.reverse().forEach(function (newItem) { + if (newItem === wrapper.item) { + keepIt = true; + pos--; + } else { + _this3.buffer.insert(pos, newItem); + } + }); + + if (!keepIt) { + wrapper.op = 'remove'; + } + } + }]); + + return Adapter; +}(); + +exports.default = Adapter; + +/***/ }), /* 1 */ -/***/ function(module, exports) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - - var _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"); } }; }(); - - 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; }; }(); - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - /*! - globals: angular, window - List of used element methods available in JQuery but not in JQuery Lite - element.before(elem) - element.height() - element.outerHeight(true) - element.height(value) = only for Top/Bottom padding elements - element.scrollTop() - element.scrollTop(value) - */ - - var JQLiteExtras = function () { - function JQLiteExtras() { - _classCallCheck(this, JQLiteExtras); - } - - _createClass(JQLiteExtras, [{ - key: 'registerFor', - value: function registerFor(element) { - var convertToPx = void 0, - css = void 0, - getStyle = void 0, - isWindow = void 0; - // angular implementation blows up if elem is the window - css = angular.element.prototype.css; - - element.prototype.css = function (name, value) { - var self = this; - var elem = self[0]; - if (!(!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style)) { - return css.call(self, name, value); - } - }; - - // as defined in angularjs v1.0.5 - isWindow = function isWindow(obj) { - return obj && obj.document && obj.location && obj.alert && obj.setInterval; - }; - - function scrollTo(self, direction, value) { - var elem = self[0]; - - var _top$left$direction = _slicedToArray({ - top: ['scrollTop', 'pageYOffset', 'scrollLeft'], - left: ['scrollLeft', 'pageXOffset', 'scrollTop'] - }[direction], 3), - method = _top$left$direction[0], - prop = _top$left$direction[1], - preserve = _top$left$direction[2]; - - if (isWindow(elem)) { - if (angular.isDefined(value)) { - return elem.scrollTo(self[preserve].call(self), value); - } - return prop in elem ? elem[prop] : elem.document.documentElement[method]; - } else { - if (angular.isDefined(value)) { - elem[method] = value; - } - return elem[method]; - } - } - - if (window.getComputedStyle) { - getStyle = function getStyle(elem) { - return window.getComputedStyle(elem, null); - }; - convertToPx = function convertToPx(elem, value) { - return parseFloat(value); - }; - } else { - getStyle = function getStyle(elem) { - return elem.currentStyle; - }; - convertToPx = function convertToPx(elem, value) { - var left = void 0, - result = void 0, - rs = void 0, - rsLeft = void 0, - style = void 0; - var core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source; - var rnumnonpx = new RegExp('^(' + core_pnum + ')(?!px)[a-z%]+$', 'i'); - - if (!rnumnonpx.test(value)) { - return parseFloat(value); - } - - // ported from JQuery - style = elem.style; - left = style.left; - rs = elem.runtimeStyle; - rsLeft = rs && rs.left; - if (rs) { - rs.left = style.left; - } - // put in the new values to get a computed style out - style.left = value; - result = style.pixelLeft; - style.left = left; - if (rsLeft) { - rs.left = rsLeft; - } - return result; - }; - } - - function getMeasurements(elem, measure) { - var base = void 0, - borderA = void 0, - borderB = void 0, - computedMarginA = void 0, - computedMarginB = void 0, - computedStyle = void 0, - dirA = void 0, - dirB = void 0, - marginA = void 0, - marginB = void 0, - paddingA = void 0, - paddingB = void 0; - - if (isWindow(elem)) { - base = document.documentElement[{ height: 'clientHeight', width: 'clientWidth' }[measure]]; - - return { - base: base, - padding: 0, - border: 0, - margin: 0 - }; - } - - // Start with offset property - - var _width$height$measure = _slicedToArray({ - width: [elem.offsetWidth, 'Left', 'Right'], - height: [elem.offsetHeight, 'Top', 'Bottom'] - }[measure], 3); - - base = _width$height$measure[0]; - dirA = _width$height$measure[1]; - dirB = _width$height$measure[2]; - - - computedStyle = getStyle(elem); - paddingA = convertToPx(elem, computedStyle['padding' + dirA]) || 0; - paddingB = convertToPx(elem, computedStyle['padding' + dirB]) || 0; - borderA = convertToPx(elem, computedStyle['border' + dirA + 'Width']) || 0; - borderB = convertToPx(elem, computedStyle['border' + dirB + 'Width']) || 0; - computedMarginA = computedStyle['margin' + dirA]; - computedMarginB = computedStyle['margin' + dirB]; - - // I do not care for width for now, so this hack is irrelevant - // if ( !supportsPercentMargin ) - // computedMarginA = hackPercentMargin( elem, computedStyle, computedMarginA ) - // computedMarginB = hackPercentMargin( elem, computedStyle, computedMarginB ) - marginA = convertToPx(elem, computedMarginA) || 0; - marginB = convertToPx(elem, computedMarginB) || 0; - - return { - base: base, - padding: paddingA + paddingB, - border: borderA + borderB, - margin: marginA + marginB - }; - } - - function getWidthHeight(elem, direction, measure) { - var computedStyle = void 0, - result = void 0; - - var measurements = getMeasurements(elem, direction); - - if (measurements.base > 0) { - return { - base: measurements.base - measurements.padding - measurements.border, - outer: measurements.base, - outerfull: measurements.base + measurements.margin - }[measure]; - } - - // Fall back to computed then uncomputed css if necessary - computedStyle = getStyle(elem); - result = computedStyle[direction]; - - if (result < 0 || result === null) { - result = elem.style[direction] || 0; - } - - // Normalize "", auto, and prepare for extra - result = parseFloat(result) || 0; - - return { - base: result - measurements.padding - measurements.border, - outer: result, - outerfull: result + measurements.padding + measurements.border + measurements.margin - }[measure]; - } - - // define missing methods - return angular.forEach({ - before: function before(newElem) { - var children, elem, i, j, parent, ref, self; - self = this; - elem = self[0]; - parent = self.parent(); - children = parent.contents(); - if (children[0] === elem) { - return parent.prepend(newElem); - } else { - for (i = j = 1, ref = children.length - 1; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) { - if (children[i] === elem) { - angular.element(children[i - 1]).after(newElem); - return; - } - } - throw new Error('invalid DOM structure ' + elem.outerHTML); - } - }, - height: function height(value) { - var self; - self = this; - if (angular.isDefined(value)) { - if (angular.isNumber(value)) { - value = value + 'px'; - } - return css.call(self, 'height', value); - } else { - return getWidthHeight(this[0], 'height', 'base'); - } - }, - outerHeight: function outerHeight(option) { - return getWidthHeight(this[0], 'height', option ? 'outerfull' : 'outer'); - }, - outerWidth: function outerWidth(option) { - return getWidthHeight(this[0], 'width', option ? 'outerfull' : 'outer'); - }, - - - /* - The offset setter method is not implemented - */ - offset: function offset(value) { - var docElem = void 0, - win = void 0; - var self = this; - var box = { - top: 0, - left: 0 - }; - var elem = self[0]; - var doc = elem && elem.ownerDocument; - - if (arguments.length) { - if (value === undefined) { - return self; - } - // TODO: implement setter - throw new Error('offset setter method is not implemented'); - } - - if (!doc) { - return; - } - - docElem = doc.documentElement; - - // TODO: Make sure it's not a disconnected DOM node - - if (elem.getBoundingClientRect != null) { - box = elem.getBoundingClientRect(); - } - - win = doc.defaultView || doc.parentWindow; - - return { - top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0), - left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0) - }; - }, - scrollTop: function scrollTop(value) { - return scrollTo(this, 'top', value); - }, - scrollLeft: function scrollLeft(value) { - return scrollTo(this, 'left', value); - } - }, function (value, key) { - if (!element.prototype[key]) { - return element.prototype[key] = value; - } - }); - } - }]); - - return JQLiteExtras; - }(); - - exports.default = JQLiteExtras; - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = ScrollBuffer; +function ScrollBuffer(elementRoutines, bufferSize) { + var buffer = Object.create(Array.prototype); + + angular.extend(buffer, { + size: bufferSize, + + reset: function reset(startIndex) { + buffer.remove(0, buffer.length); + buffer.eof = false; + buffer.bof = false; + buffer.first = startIndex; + buffer.next = startIndex; + buffer.minIndex = startIndex; + buffer.maxIndex = startIndex; + buffer.minIndexUser = null; + buffer.maxIndexUser = null; + }, + append: function append(items) { + items.forEach(function (item) { + ++buffer.next; + buffer.insert('append', item); + }); + buffer.maxIndex = buffer.eof ? buffer.next - 1 : Math.max(buffer.next - 1, buffer.maxIndex); + }, + prepend: function prepend(items) { + items.reverse().forEach(function (item) { + --buffer.first; + buffer.insert('prepend', item); + }); + buffer.minIndex = buffer.bof ? buffer.minIndex = buffer.first : Math.min(buffer.first, buffer.minIndex); + }, + + + /** + * inserts wrapped element in the buffer + * the first argument is either operation keyword (see below) or a number for operation 'insert' + * 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) { + var wrapper = { + item: item + }; + + if (operation % 1 === 0) { + // it is an insert + wrapper.op = 'insert'; + buffer.splice(operation, 0, wrapper); + } else { + wrapper.op = operation; + switch (operation) { + case 'append': + buffer.push(wrapper); + break; + case 'prepend': + buffer.unshift(wrapper); + break; + } + } + }, + + + // removes elements from buffer + remove: function remove(arg1, arg2) { + if (angular.isNumber(arg1)) { + // removes items from arg1 (including) through arg2 (excluding) + for (var i = arg1; i < arg2; i++) { + elementRoutines.removeElement(buffer[i]); + } + + return buffer.splice(arg1, arg2 - arg1); + } + // removes single item(wrapper) from the buffer + buffer.splice(buffer.indexOf(arg1), 1); + + return elementRoutines.removeElementAnimated(arg1); + }, + effectiveHeight: function effectiveHeight(elements) { + if (!elements.length) { + return 0; + } + var top = Number.MAX_VALUE; + var bottom = Number.MIN_VALUE; + elements.forEach(function (wrapper) { + if (wrapper.element[0].offsetParent) { + // element style is not display:none + top = Math.min(top, wrapper.element.offset().top); + bottom = Math.max(bottom, wrapper.element.offset().top + wrapper.element.outerHeight(true)); + } + }); + return Math.max(0, bottom - top); + } + }); + + return buffer; +} + +/***/ }), /* 2 */ -/***/ function(module, exports) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - - 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; }; }(); - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - var ElementRoutines = function () { - function ElementRoutines($injector, $q) { - _classCallCheck(this, ElementRoutines); - - this.$animate = $injector.has && $injector.has('$animate') ? $injector.get('$animate') : null; - this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3; - this.$q = $q; - } - - _createClass(ElementRoutines, [{ - key: 'insertElement', - value: function insertElement(newElement, previousElement) { - previousElement.after(newElement); - return []; - } - }, { - key: 'removeElement', - value: function removeElement(wrapper) { - wrapper.element.remove(); - wrapper.scope.$destroy(); - return []; - } - }, { - key: 'insertElementAnimated', - value: function insertElementAnimated(newElement, previousElement) { - var _this = this; - - if (!this.$animate) { - return this.insertElement(newElement, previousElement); - } - - if (this.isAngularVersionLessThen1_3) { - var _ret = function () { - var deferred = _this.$q.defer(); - // no need for parent - previous element is never null - _this.$animate.enter(newElement, null, previousElement, function () { - return deferred.resolve(); - }); - - return { - v: [deferred.promise] - }; - }(); - - if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; - } - - // no need for parent - previous element is never null - return [this.$animate.enter(newElement, null, previousElement)]; - } - }, { - key: 'removeElementAnimated', - value: function removeElementAnimated(wrapper) { - var _this2 = this; - - if (!this.$animate) { - return this.removeElement(wrapper); - } - - if (this.isAngularVersionLessThen1_3) { - var _ret2 = function () { - var deferred = _this2.$q.defer(); - _this2.$animate.leave(wrapper.element, function () { - wrapper.scope.$destroy(); - return deferred.resolve(); - }); - - return { - v: [deferred.promise] - }; - }(); - - if ((typeof _ret2 === 'undefined' ? 'undefined' : _typeof(_ret2)) === "object") return _ret2.v; - } - - return [this.$animate.leave(wrapper.element).then(function () { - return wrapper.scope.$destroy(); - })]; - } - }]); - - return ElementRoutines; - }(); - - exports.default = ElementRoutines; - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +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; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var ElementRoutines = function () { + function ElementRoutines($injector, $q) { + _classCallCheck(this, ElementRoutines); + + this.$animate = $injector.has && $injector.has('$animate') ? $injector.get('$animate') : null; + this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3; + this.$q = $q; + } + + _createClass(ElementRoutines, [{ + key: 'insertElement', + value: function insertElement(newElement, previousElement) { + previousElement.after(newElement); + return []; + } + }, { + key: 'removeElement', + value: function removeElement(wrapper) { + wrapper.element.remove(); + wrapper.scope.$destroy(); + return []; + } + }, { + key: 'insertElementAnimated', + value: function insertElementAnimated(newElement, previousElement) { + if (!this.$animate) { + return this.insertElement(newElement, previousElement); + } + + if (this.isAngularVersionLessThen1_3) { + var deferred = this.$q.defer(); + // no need for parent - previous element is never null + this.$animate.enter(newElement, null, previousElement, function () { + return deferred.resolve(); + }); + + return [deferred.promise]; + } + + // no need for parent - previous element is never null + return [this.$animate.enter(newElement, null, previousElement)]; + } + }, { + key: 'removeElementAnimated', + value: function removeElementAnimated(wrapper) { + if (!this.$animate) { + return this.removeElement(wrapper); + } + + if (this.isAngularVersionLessThen1_3) { + var deferred = this.$q.defer(); + this.$animate.leave(wrapper.element, function () { + wrapper.scope.$destroy(); + return deferred.resolve(); + }); + + return [deferred.promise]; + } + + return [this.$animate.leave(wrapper.element).then(function () { + return wrapper.scope.$destroy(); + })]; + } + }]); + + return ElementRoutines; +}(); + +exports.default = ElementRoutines; + +/***/ }), /* 3 */ -/***/ function(module, exports) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = ScrollBuffer; - function ScrollBuffer(elementRoutines, bufferSize) { - var buffer = Object.create(Array.prototype); - - angular.extend(buffer, { - size: bufferSize, - - reset: function reset(startIndex) { - buffer.remove(0, buffer.length); - buffer.eof = false; - buffer.bof = false; - buffer.first = startIndex; - buffer.next = startIndex; - buffer.minIndex = startIndex; - buffer.maxIndex = startIndex; - buffer.minIndexUser = null; - buffer.maxIndexUser = null; - }, - append: function append(items) { - items.forEach(function (item) { - ++buffer.next; - buffer.insert('append', item); - }); - buffer.maxIndex = buffer.eof ? buffer.next - 1 : Math.max(buffer.next - 1, buffer.maxIndex); - }, - prepend: function prepend(items) { - items.reverse().forEach(function (item) { - --buffer.first; - buffer.insert('prepend', item); - }); - buffer.minIndex = buffer.bof ? buffer.minIndex = buffer.first : Math.min(buffer.first, buffer.minIndex); - }, - - - /** - * inserts wrapped element in the buffer - * the first argument is either operation keyword (see below) or a number for operation 'insert' - * 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) { - var wrapper = { - item: item - }; - - if (operation % 1 === 0) { - // it is an insert - wrapper.op = 'insert'; - buffer.splice(operation, 0, wrapper); - } else { - wrapper.op = operation; - switch (operation) { - case 'append': - buffer.push(wrapper); - break; - case 'prepend': - buffer.unshift(wrapper); - break; - } - } - }, - - - // removes elements from buffer - remove: function remove(arg1, arg2) { - if (angular.isNumber(arg1)) { - // removes items from arg1 (including) through arg2 (excluding) - for (var i = arg1; i < arg2; i++) { - elementRoutines.removeElement(buffer[i]); - } - - return buffer.splice(arg1, arg2 - arg1); - } - // removes single item(wrapper) from the buffer - buffer.splice(buffer.indexOf(arg1), 1); - - return elementRoutines.removeElementAnimated(arg1); - }, - effectiveHeight: function effectiveHeight(elements) { - if (!elements.length) { - return 0; - } - var top = Number.MAX_VALUE; - var bottom = Number.MIN_VALUE; - elements.forEach(function (wrapper) { - if (wrapper.element[0].offsetParent) { - // element style is not display:none - top = Math.min(top, wrapper.element.offset().top); - bottom = Math.max(bottom, wrapper.element.offset().top + wrapper.element.outerHeight(true)); - } - }); - return Math.max(0, bottom - top); - } - }); - - return buffer; - } - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _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"); } }; }(); + +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; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +/*! + globals: angular, window + List of used element methods available in JQuery but not in JQuery Lite + element.before(elem) + element.height() + element.outerHeight(true) + element.height(value) = only for Top/Bottom padding elements + element.scrollTop() + element.scrollTop(value) + */ + +var JQLiteExtras = function () { + function JQLiteExtras() { + _classCallCheck(this, JQLiteExtras); + } + + _createClass(JQLiteExtras, [{ + key: 'registerFor', + value: function registerFor(element) { + var convertToPx = void 0, + css = void 0, + getStyle = void 0, + isWindow = void 0; + // angular implementation blows up if elem is the window + css = angular.element.prototype.css; + + element.prototype.css = function (name, value) { + var self = this; + var elem = self[0]; + if (!(!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style)) { + return css.call(self, name, value); + } + }; + + // as defined in angularjs v1.0.5 + isWindow = function isWindow(obj) { + return obj && obj.document && obj.location && obj.alert && obj.setInterval; + }; + + function scrollTo(self, direction, value) { + var elem = self[0]; + + var _top$left$direction = _slicedToArray({ + top: ['scrollTop', 'pageYOffset', 'scrollLeft'], + left: ['scrollLeft', 'pageXOffset', 'scrollTop'] + }[direction], 3), + method = _top$left$direction[0], + prop = _top$left$direction[1], + preserve = _top$left$direction[2]; + + if (isWindow(elem)) { + if (angular.isDefined(value)) { + return elem.scrollTo(self[preserve].call(self), value); + } + return prop in elem ? elem[prop] : elem.document.documentElement[method]; + } else { + if (angular.isDefined(value)) { + elem[method] = value; + } + return elem[method]; + } + } + + if (window.getComputedStyle) { + getStyle = function getStyle(elem) { + return window.getComputedStyle(elem, null); + }; + convertToPx = function convertToPx(elem, value) { + return parseFloat(value); + }; + } else { + getStyle = function getStyle(elem) { + return elem.currentStyle; + }; + convertToPx = function convertToPx(elem, value) { + var left = void 0, + result = void 0, + rs = void 0, + rsLeft = void 0, + style = void 0; + var core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source; + var rnumnonpx = new RegExp('^(' + core_pnum + ')(?!px)[a-z%]+$', 'i'); + + if (!rnumnonpx.test(value)) { + return parseFloat(value); + } + + // ported from JQuery + style = elem.style; + left = style.left; + rs = elem.runtimeStyle; + rsLeft = rs && rs.left; + if (rs) { + rs.left = style.left; + } + // put in the new values to get a computed style out + style.left = value; + result = style.pixelLeft; + style.left = left; + if (rsLeft) { + rs.left = rsLeft; + } + return result; + }; + } + + function getMeasurements(elem, measure) { + var base = void 0, + borderA = void 0, + borderB = void 0, + computedMarginA = void 0, + computedMarginB = void 0, + computedStyle = void 0, + dirA = void 0, + dirB = void 0, + marginA = void 0, + marginB = void 0, + paddingA = void 0, + paddingB = void 0; + + if (isWindow(elem)) { + base = document.documentElement[{ height: 'clientHeight', width: 'clientWidth' }[measure]]; + + return { + base: base, + padding: 0, + border: 0, + margin: 0 + }; + } + + // Start with offset property + + var _width$height$measure = _slicedToArray({ + width: [elem.offsetWidth, 'Left', 'Right'], + height: [elem.offsetHeight, 'Top', 'Bottom'] + }[measure], 3); + + base = _width$height$measure[0]; + dirA = _width$height$measure[1]; + dirB = _width$height$measure[2]; + + + computedStyle = getStyle(elem); + paddingA = convertToPx(elem, computedStyle['padding' + dirA]) || 0; + paddingB = convertToPx(elem, computedStyle['padding' + dirB]) || 0; + borderA = convertToPx(elem, computedStyle['border' + dirA + 'Width']) || 0; + borderB = convertToPx(elem, computedStyle['border' + dirB + 'Width']) || 0; + computedMarginA = computedStyle['margin' + dirA]; + computedMarginB = computedStyle['margin' + dirB]; + + // I do not care for width for now, so this hack is irrelevant + // if ( !supportsPercentMargin ) + // computedMarginA = hackPercentMargin( elem, computedStyle, computedMarginA ) + // computedMarginB = hackPercentMargin( elem, computedStyle, computedMarginB ) + marginA = convertToPx(elem, computedMarginA) || 0; + marginB = convertToPx(elem, computedMarginB) || 0; + + return { + base: base, + padding: paddingA + paddingB, + border: borderA + borderB, + margin: marginA + marginB + }; + } + + function getWidthHeight(elem, direction, measure) { + var computedStyle = void 0, + result = void 0; + + var measurements = getMeasurements(elem, direction); + + if (measurements.base > 0) { + return { + base: measurements.base - measurements.padding - measurements.border, + outer: measurements.base, + outerfull: measurements.base + measurements.margin + }[measure]; + } + + // Fall back to computed then uncomputed css if necessary + computedStyle = getStyle(elem); + result = computedStyle[direction]; + + if (result < 0 || result === null) { + result = elem.style[direction] || 0; + } + + // Normalize "", auto, and prepare for extra + result = parseFloat(result) || 0; + + return { + base: result - measurements.padding - measurements.border, + outer: result, + outerfull: result + measurements.padding + measurements.border + measurements.margin + }[measure]; + } + + // define missing methods + return angular.forEach({ + before: function before(newElem) { + var children, elem, i, j, parent, ref, self; + self = this; + elem = self[0]; + parent = self.parent(); + children = parent.contents(); + if (children[0] === elem) { + return parent.prepend(newElem); + } else { + for (i = j = 1, ref = children.length - 1; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) { + if (children[i] === elem) { + angular.element(children[i - 1]).after(newElem); + return; + } + } + throw new Error('invalid DOM structure ' + elem.outerHTML); + } + }, + height: function height(value) { + var self; + self = this; + if (angular.isDefined(value)) { + if (angular.isNumber(value)) { + value = value + 'px'; + } + return css.call(self, 'height', value); + } else { + return getWidthHeight(this[0], 'height', 'base'); + } + }, + outerHeight: function outerHeight(option) { + return getWidthHeight(this[0], 'height', option ? 'outerfull' : 'outer'); + }, + outerWidth: function outerWidth(option) { + return getWidthHeight(this[0], 'width', option ? 'outerfull' : 'outer'); + }, + + + /* + The offset setter method is not implemented + */ + offset: function offset(value) { + var docElem = void 0, + win = void 0; + var self = this; + var box = { + top: 0, + left: 0 + }; + var elem = self[0]; + var doc = elem && elem.ownerDocument; + + if (arguments.length) { + if (value === undefined) { + return self; + } + // TODO: implement setter + throw new Error('offset setter method is not implemented'); + } + + if (!doc) { + return; + } + + docElem = doc.documentElement; + + // TODO: Make sure it's not a disconnected DOM node + + if (elem.getBoundingClientRect != null) { + box = elem.getBoundingClientRect(); + } + + win = doc.defaultView || doc.parentWindow; + + return { + top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0), + left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0) + }; + }, + scrollTop: function scrollTop(value) { + return scrollTo(this, 'top', value); + }, + scrollLeft: function scrollLeft(value) { + return scrollTo(this, 'left', value); + } + }, function (value, key) { + if (!element.prototype[key]) { + return element.prototype[key] = value; + } + }); + } + }]); + + return JQLiteExtras; +}(); + +exports.default = JQLiteExtras; + +/***/ }), /* 4 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = Viewport; - - var _padding = __webpack_require__(5); - - var _padding2 = _interopRequireDefault(_padding); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - function Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding) { - var topPadding = null; - var bottomPadding = null; - var viewport = viewportController && viewportController.viewport ? viewportController.viewport : angular.element(window); - var container = viewportController && viewportController.container ? viewportController.container : undefined; - var scope = viewportController && viewportController.scope ? viewportController.scope : $rootScope; - - viewport.css({ - 'overflow-anchor': 'none', - 'overflow-y': 'auto', - 'display': 'block' - }); - - function bufferPadding() { - return viewport.outerHeight() * padding; // some extra space to initiate preload - } - - angular.extend(viewport, { - getScope: function getScope() { - return scope; - }, - createPaddingElements: function createPaddingElements(template) { - topPadding = new _padding2.default(template); - bottomPadding = new _padding2.default(template); - element.before(topPadding); - element.after(bottomPadding); - }, - applyContainerStyle: function applyContainerStyle() { - if (container && container !== viewport) { - viewport.css('height', window.getComputedStyle(container[0]).height); - } - }, - bottomDataPos: function bottomDataPos() { - var scrollHeight = viewport[0].scrollHeight; - scrollHeight = scrollHeight != null ? scrollHeight : viewport[0].document.documentElement.scrollHeight; - return scrollHeight - bottomPadding.height(); - }, - topDataPos: function topDataPos() { - return topPadding.height(); - }, - bottomVisiblePos: function bottomVisiblePos() { - return viewport.scrollTop() + viewport.outerHeight(); - }, - topVisiblePos: function topVisiblePos() { - return viewport.scrollTop(); - }, - insertElement: function insertElement(e, sibling) { - return elementRoutines.insertElement(e, sibling || topPadding); - }, - insertElementAnimated: function insertElementAnimated(e, sibling) { - return elementRoutines.insertElementAnimated(e, sibling || topPadding); - }, - shouldLoadBottom: function shouldLoadBottom() { - return !buffer.eof && viewport.bottomDataPos() < viewport.bottomVisiblePos() + bufferPadding(); - }, - clipBottom: function clipBottom() { - // clip the invisible items off the bottom - var overage = 0; - var overageHeight = 0; - var itemHeight = 0; - var emptySpaceHeight = viewport.bottomDataPos() - viewport.bottomVisiblePos() - bufferPadding(); - - for (var i = buffer.length - 1; i >= 0; i--) { - itemHeight = buffer[i].element.outerHeight(true); - if (overageHeight + itemHeight > emptySpaceHeight) { - break; - } - bottomPadding.cache.add(buffer[i]); - overageHeight += itemHeight; - overage++; - } - - if (overage > 0) { - buffer.eof = false; - buffer.remove(buffer.length - overage, buffer.length); - buffer.next -= overage; - viewport.adjustPadding(); - } - }, - shouldLoadTop: function shouldLoadTop() { - return !buffer.bof && viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding(); - }, - clipTop: function clipTop() { - // clip the invisible items off the top - var overage = 0; - var overageHeight = 0; - var itemHeight = 0; - var emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding(); - - for (var i = 0; i < buffer.length; i++) { - itemHeight = buffer[i].element.outerHeight(true); - if (overageHeight + itemHeight > emptySpaceHeight) { - break; - } - topPadding.cache.add(buffer[i]); - overageHeight += itemHeight; - overage++; - } - - if (overage > 0) { - // we need to adjust top padding element before items are removed from top - // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom - topPadding.height(topPadding.height() + overageHeight); - buffer.bof = false; - buffer.remove(0, overage); - buffer.first += overage; - } - }, - adjustPadding: function adjustPadding() { - if (!buffer.length) { - return; - } - - // precise heights calculation, items that were in buffer once - var topPaddingHeight = topPadding.cache.reduce(function (summ, item) { - return summ + (item.index < buffer.first ? item.height : 0); - }, 0); - var bottomPaddingHeight = bottomPadding.cache.reduce(function (summ, item) { - return summ + (item.index >= buffer.next ? item.height : 0); - }, 0); - - // average item height based on buffer data - var visibleItemsHeight = buffer.reduce(function (summ, item) { - return summ + item.element.outerHeight(true); - }, 0); - var averageItemHeight = (visibleItemsHeight + topPaddingHeight + bottomPaddingHeight) / (buffer.maxIndex - buffer.minIndex + 1); - - // average heights calculation, items that have never been reached - var adjustTopPadding = buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser; - var adjustBottomPadding = buffer.maxIndexUser !== null && buffer.maxIndex < buffer.maxIndexUser; - var topPaddingHeightAdd = adjustTopPadding ? (buffer.minIndex - buffer.minIndexUser) * averageItemHeight : 0; - var bottomPaddingHeightAdd = adjustBottomPadding ? (buffer.maxIndexUser - buffer.maxIndex) * averageItemHeight : 0; - - // paddings combine adjustment - topPadding.height(topPaddingHeight + topPaddingHeightAdd); - bottomPadding.height(bottomPaddingHeight + bottomPaddingHeightAdd); - }, - adjustScrollTopAfterMinIndexSet: function adjustScrollTopAfterMinIndexSet(topPaddingHeightOld) { - // additional scrollTop adjustment in case of datasource.minIndex external set - if (buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser) { - var diff = topPadding.height() - topPaddingHeightOld; - viewport.scrollTop(viewport.scrollTop() + diff); - } - }, - adjustScrollTopAfterPrepend: function adjustScrollTopAfterPrepend(updates) { - if (!updates.prepended.length) return; - var height = buffer.effectiveHeight(updates.prepended); - var paddingHeight = topPadding.height() - height; - if (paddingHeight >= 0) { - topPadding.height(paddingHeight); - } else { - topPadding.height(0); - viewport.scrollTop(viewport.scrollTop() - paddingHeight); - } - }, - resetTopPadding: function resetTopPadding() { - topPadding.height(0); - topPadding.cache.clear(); - }, - resetBottomPadding: function resetBottomPadding() { - bottomPadding.height(0); - bottomPadding.cache.clear(); - }, - removeItem: function removeItem(item) { - topPadding.cache.remove(item); - bottomPadding.cache.remove(item); - return buffer.remove(item); - } - }); - - return viewport; - } - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = Viewport; + +var _padding = __webpack_require__(5); + +var _padding2 = _interopRequireDefault(_padding); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding) { + var topPadding = null; + var bottomPadding = null; + var viewport = viewportController && viewportController.viewport ? viewportController.viewport : angular.element(window); + var container = viewportController && viewportController.container ? viewportController.container : undefined; + var scope = viewportController && viewportController.scope ? viewportController.scope : $rootScope; + + viewport.css({ + 'overflow-anchor': 'none', + 'overflow-y': 'auto', + 'display': 'block' + }); + + function bufferPadding() { + return viewport.outerHeight() * padding; // some extra space to initiate preload + } + + angular.extend(viewport, { + getScope: function getScope() { + return scope; + }, + createPaddingElements: function createPaddingElements(template) { + topPadding = new _padding2.default(template); + bottomPadding = new _padding2.default(template); + element.before(topPadding); + element.after(bottomPadding); + }, + applyContainerStyle: function applyContainerStyle() { + if (container && container !== viewport) { + viewport.css('height', window.getComputedStyle(container[0]).height); + } + }, + bottomDataPos: function bottomDataPos() { + var scrollHeight = viewport[0].scrollHeight; + scrollHeight = scrollHeight != null ? scrollHeight : viewport[0].document.documentElement.scrollHeight; + return scrollHeight - bottomPadding.height(); + }, + topDataPos: function topDataPos() { + return topPadding.height(); + }, + bottomVisiblePos: function bottomVisiblePos() { + return viewport.scrollTop() + viewport.outerHeight(); + }, + topVisiblePos: function topVisiblePos() { + return viewport.scrollTop(); + }, + insertElement: function insertElement(e, sibling) { + return elementRoutines.insertElement(e, sibling || topPadding); + }, + insertElementAnimated: function insertElementAnimated(e, sibling) { + return elementRoutines.insertElementAnimated(e, sibling || topPadding); + }, + shouldLoadBottom: function shouldLoadBottom() { + return !buffer.eof && viewport.bottomDataPos() < viewport.bottomVisiblePos() + bufferPadding(); + }, + clipBottom: function clipBottom() { + // clip the invisible items off the bottom + var overage = 0; + var overageHeight = 0; + var itemHeight = 0; + var emptySpaceHeight = viewport.bottomDataPos() - viewport.bottomVisiblePos() - bufferPadding(); + + for (var i = buffer.length - 1; i >= 0; i--) { + itemHeight = buffer[i].element.outerHeight(true); + if (overageHeight + itemHeight > emptySpaceHeight) { + break; + } + bottomPadding.cache.add(buffer[i]); + overageHeight += itemHeight; + overage++; + } + + if (overage > 0) { + buffer.eof = false; + buffer.remove(buffer.length - overage, buffer.length); + buffer.next -= overage; + viewport.adjustPadding(); + } + }, + shouldLoadTop: function shouldLoadTop() { + return !buffer.bof && viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding(); + }, + clipTop: function clipTop() { + // clip the invisible items off the top + var overage = 0; + var overageHeight = 0; + var itemHeight = 0; + var emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding(); + + for (var i = 0; i < buffer.length; i++) { + itemHeight = buffer[i].element.outerHeight(true); + if (overageHeight + itemHeight > emptySpaceHeight) { + break; + } + topPadding.cache.add(buffer[i]); + overageHeight += itemHeight; + overage++; + } + + if (overage > 0) { + // we need to adjust top padding element before items are removed from top + // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom + topPadding.height(topPadding.height() + overageHeight); + buffer.bof = false; + buffer.remove(0, overage); + buffer.first += overage; + } + }, + adjustPadding: function adjustPadding() { + if (!buffer.length) { + return; + } + + // precise heights calculation, items that were in buffer once + var topPaddingHeight = topPadding.cache.reduce(function (summ, item) { + return summ + (item.index < buffer.first ? item.height : 0); + }, 0); + var bottomPaddingHeight = bottomPadding.cache.reduce(function (summ, item) { + return summ + (item.index >= buffer.next ? item.height : 0); + }, 0); + + // average item height based on buffer data + var visibleItemsHeight = buffer.reduce(function (summ, item) { + return summ + item.element.outerHeight(true); + }, 0); + var averageItemHeight = (visibleItemsHeight + topPaddingHeight + bottomPaddingHeight) / (buffer.maxIndex - buffer.minIndex + 1); + + // average heights calculation, items that have never been reached + var adjustTopPadding = buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser; + var adjustBottomPadding = buffer.maxIndexUser !== null && buffer.maxIndex < buffer.maxIndexUser; + var topPaddingHeightAdd = adjustTopPadding ? (buffer.minIndex - buffer.minIndexUser) * averageItemHeight : 0; + var bottomPaddingHeightAdd = adjustBottomPadding ? (buffer.maxIndexUser - buffer.maxIndex) * averageItemHeight : 0; + + // paddings combine adjustment + topPadding.height(topPaddingHeight + topPaddingHeightAdd); + bottomPadding.height(bottomPaddingHeight + bottomPaddingHeightAdd); + }, + adjustScrollTopAfterMinIndexSet: function adjustScrollTopAfterMinIndexSet(topPaddingHeightOld) { + // additional scrollTop adjustment in case of datasource.minIndex external set + if (buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser) { + var diff = topPadding.height() - topPaddingHeightOld; + viewport.scrollTop(viewport.scrollTop() + diff); + } + }, + adjustScrollTopAfterPrepend: function adjustScrollTopAfterPrepend(updates) { + if (!updates.prepended.length) return; + var height = buffer.effectiveHeight(updates.prepended); + var paddingHeight = topPadding.height() - height; + if (paddingHeight >= 0) { + topPadding.height(paddingHeight); + } else { + topPadding.height(0); + viewport.scrollTop(viewport.scrollTop() - paddingHeight); + } + }, + resetTopPadding: function resetTopPadding() { + topPadding.height(0); + topPadding.cache.clear(); + }, + resetBottomPadding: function resetBottomPadding() { + bottomPadding.height(0); + bottomPadding.cache.clear(); + }, + removeItem: function removeItem(item) { + topPadding.cache.remove(item); + bottomPadding.cache.remove(item); + return buffer.remove(item); + } + }); + + return viewport; +} + +/***/ }), /* 5 */ -/***/ function(module, exports) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - 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(); - return; - } - } - cache.push({ - index: item.scope.$index, - height: item.element.outerHeight() - }); - cache.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); - break; - } - } - for (var _i = cache.length - 1; _i >= 0; _i--) { - if (cache[_i].index > item.scope.$index) { - cache[_i].index--; - } - } - }, - clear: function clear() { - cache.length = 0; - } - }); - - return cache; - } - - function Padding(template) { - var result = void 0; - - switch (template.tagName.toLowerCase()) { - case 'dl': - throw new Error('ui-scroll directive does not support <' + template.tagName + '> as a repeating tag: ' + template.outerHTML); - case 'tr': - var table = angular.element('
'); - result = table.find('tr'); - break; - case 'li': - result = angular.element('
  • '); - break; - default: - result = angular.element('
    '); - } - - result.cache = new Cache(); - - return result; - } - -/***/ }, -/* 6 */ -/***/ function(module, exports) { - - 'use strict'; - - 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; }; }(); - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function getCtrlOnData(attr, element) { - var onSyntax = attr.match(/^(.+)(\s+on\s+)(.+)?/); - if (onSyntax && onSyntax.length === 4) { - window.console.log('Angular ui-scroll adapter assignment warning. "Controller On" syntax has been deprecated since ui-scroll v1.6.1.'); - var ctrl = onSyntax[3]; - var tail = onSyntax[1]; - var candidate = element; - while (candidate.length) { - var candidateScope = candidate.scope(); // doesn't work when debugInfoEnabled flag = true - var candidateName = (candidate.attr('ng-controller') || '').match(/(\w(?:\w|\d)*)(?:\s+as\s+(\w(?:\w|\d)*))?/); - if (candidateName && candidateName[1] === ctrl) { - return { - target: candidateScope, - source: tail - }; - } - candidate = candidate.parent(); - } - throw new Error('Angular ui-scroll adapter assignment error. Failed to locate target controller "' + ctrl + '" to inject "' + tail + '"'); - } - } - - var Adapter = function () { - function Adapter(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope) { - _classCallCheck(this, Adapter); - - this.viewport = viewport; - this.buffer = buffer; - this.adjustBuffer = adjustBuffer; - this.reload = reload; - - this.isLoading = false; - this.disabled = false; - - var viewportScope = viewport.getScope(); - this.startScope = viewportScope.$parent ? viewportScope : $scope; - - this.publicContext = {}; - this.assignAdapter($attr.adapter, $parse, element); - this.generatePublicContext($attr, $parse); - } - - _createClass(Adapter, [{ - key: 'assignAdapter', - value: function assignAdapter(adapterAttr, $parse, element) { - if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\s+|\s+$/gm, ''))) { - return; - } - var ctrlOnData = getCtrlOnData(adapterAttr, element); - var adapterOnScope = void 0; - - try { - if (ctrlOnData) { - // "Controller On", deprecated since v1.6.1 - $parse(ctrlOnData.source).assign(ctrlOnData.target, {}); - adapterOnScope = $parse(ctrlOnData.source)(ctrlOnData.target); - } else { - $parse(adapterAttr).assign(this.startScope, {}); - adapterOnScope = $parse(adapterAttr)(this.startScope); - } - } catch (error) { - error.message = 'Angular ui-scroll Adapter assignment exception.\n' + ('Can\'t parse "' + adapterAttr + '" expression.\n') + error.message; - throw error; - } - - angular.extend(adapterOnScope, this.publicContext); - this.publicContext = adapterOnScope; - } - }, { - key: 'generatePublicContext', - value: function generatePublicContext($attr, $parse) { - var _this = this; - - // these methods will be accessible out of ui-scroll via user defined adapter - var publicMethods = ['reload', 'applyUpdates', 'append', 'prepend', 'isBOF', 'isEOF', 'isEmpty']; - for (var i = publicMethods.length - 1; i >= 0; i--) { - this.publicContext[publicMethods[i]] = this[publicMethods[i]].bind(this); - } - - // these read-only props will be accessible out of ui-scroll via user defined adapter - var publicProps = ['isLoading', 'topVisible', 'topVisibleElement', 'topVisibleScope', 'bottomVisible', 'bottomVisibleElement', 'bottomVisibleScope']; - - var _loop = function _loop(_i) { - var property = void 0, - attr = $attr[publicProps[_i]]; - Object.defineProperty(_this, publicProps[_i], { - get: function get() { - return property; - }, - set: function set(value) { - property = value; - _this.publicContext[publicProps[_i]] = value; - if (attr) { - $parse(attr).assign(_this.startScope, value); - } - } - }); - }; - - for (var _i = publicProps.length - 1; _i >= 0; _i--) { - _loop(_i); - } - - // non-read-only public property - Object.defineProperty(this.publicContext, 'disabled', { - get: function get() { - return _this.disabled; - }, - set: function set(value) { - return !(_this.disabled = value) ? _this.adjustBuffer() : null; - } - }); - } - }, { - key: 'loading', - value: function loading(value) { - this['isLoading'] = value; - } - }, { - key: 'isBOF', - value: function isBOF() { - return this.buffer.bof; - } - }, { - key: 'isEOF', - value: function isEOF() { - return this.buffer.eof; - } - }, { - key: 'isEmpty', - value: function isEmpty() { - return !this.buffer.length; - } - }, { - key: 'applyUpdates', - value: function applyUpdates(arg1, arg2) { - var _this2 = this; - - if (angular.isFunction(arg1)) { - // arg1 is the updater function, arg2 is ignored - this.buffer.slice(0).forEach(function (wrapper) { - // we need to do it on the buffer clone, because buffer content - // may change as we iterate through - _this2.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'); - } - - var index = arg1 - this.buffer.first; - if (index >= 0 && index < this.buffer.length) { - this.applyUpdate(this.buffer[index], arg2); - } - } - - this.adjustBuffer(); - } - }, { - key: 'append', - value: function append(newItems) { - this.buffer.append(newItems); - this.adjustBuffer(); - } - }, { - key: 'prepend', - value: function prepend(newItems) { - this.buffer.prepend(newItems); - this.adjustBuffer(); - } - }, { - key: 'calculateProperties', - value: function calculateProperties() { - var rowTop = null, - topHeight = 0; - var topDone = false, - bottomDone = false; - var length = this.buffer.length; - - for (var i = 0; i < length; i++) { - var item = this.buffer[i]; - var itemTop = item.element.offset().top; - - if (rowTop !== itemTop) { - // a new row condition - var itemHeight = item.element.outerHeight(true); - var top = this.viewport.topDataPos() + topHeight + itemHeight; - - if (!topDone && top > this.viewport.topVisiblePos()) { - topDone = true; - this['topVisible'] = item.item; - 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; - this['bottomVisibleElement'] = item.element; - this['bottomVisibleScope'] = item.scope; - } - topHeight += itemHeight; - } - - rowTop = itemTop; - - if (topDone && bottomDone) { - break; - } - } - } - }, { - key: 'applyUpdate', - value: function applyUpdate(wrapper, newItems) { - var _this3 = this; - - if (!angular.isArray(newItems)) { - return; - } - - var keepIt = void 0; - var pos = this.buffer.indexOf(wrapper) + 1; - - newItems.reverse().forEach(function (newItem) { - if (newItem === wrapper.item) { - keepIt = true; - pos--; - } else { - _this3.buffer.insert(pos, newItem); - } - }); - - if (!keepIt) { - wrapper.op = 'remove'; - } - } - }]); - - return Adapter; - }(); - - exports.default = Adapter; - -/***/ } +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +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(); + return; + } + } + cache.push({ + index: item.scope.$index, + height: item.element.outerHeight() + }); + cache.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); + break; + } + } + for (var _i = cache.length - 1; _i >= 0; _i--) { + if (cache[_i].index > item.scope.$index) { + cache[_i].index--; + } + } + }, + clear: function clear() { + cache.length = 0; + } + }); + + return cache; +} + +function Padding(template) { + var result = void 0; + + switch (template.tagName.toLowerCase()) { + case 'dl': + throw new Error('ui-scroll directive does not support <' + template.tagName + '> as a repeating tag: ' + template.outerHTML); + case 'tr': + var table = angular.element('
    '); + result = table.find('tr'); + break; + case 'li': + result = angular.element('
  • '); + break; + default: + result = angular.element('
    '); + } + + result.cache = new Cache(); + + return result; +} + +/***/ }), +/* 6 */, +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _jqLiteExtras = __webpack_require__(3); + +var _jqLiteExtras2 = _interopRequireDefault(_jqLiteExtras); + +var _elementRoutines = __webpack_require__(2); + +var _elementRoutines2 = _interopRequireDefault(_elementRoutines); + +var _buffer = __webpack_require__(1); + +var _buffer2 = _interopRequireDefault(_buffer); + +var _viewport = __webpack_require__(4); + +var _viewport2 = _interopRequireDefault(_viewport); + +var _adapter = __webpack_require__(0); + +var _adapter2 = _interopRequireDefault(_adapter); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +angular.module('ui.scroll', []).service('jqLiteExtras', function () { + return new _jqLiteExtras2.default(); +}).run(['jqLiteExtras', function (jqLiteExtras) { + return !window.jQuery ? jqLiteExtras.registerFor(angular.element) : null; +}]).directive('uiScrollViewport', function () { + return { + restrict: 'A', + controller: ['$scope', '$element', function (scope, element) { + var _this = this; + + this.container = element; + this.viewport = element; + this.scope = scope; + + angular.forEach(element.children(), function (child) { + if (child.tagName.toLowerCase() === 'tbody') { + _this.viewport = angular.element(child); + } + }); + + return this; + }] + }; +}).directive('uiScroll', ['$log', '$injector', '$rootScope', '$timeout', '$q', '$parse', function (console, $injector, $rootScope, $timeout, $q, $parse) { + + return { + require: ['?^uiScrollViewport'], + restrict: 'A', + transclude: 'element', + priority: 1000, + terminal: true, + link: link + }; + + function link($scope, element, $attr, controllers, linker) { + var match = $attr.uiScroll.match(/^\s*(\w+)\s+in\s+([(\w|\$)\.]+)\s*$/); + if (!match) { + throw new Error('Expected uiScroll in form of \'_item_ in _datasource_\' but got \'' + $attr.uiScroll + '\''); + } + + function parseNumericAttr(value, defaultValue) { + var result = $parse(value)($scope); + return isNaN(result) ? defaultValue : result; + } + + var BUFFER_MIN = 3; + var BUFFER_DEFAULT = 10; + var PADDING_MIN = 0.3; + var PADDING_DEFAULT = 0.5; + + var datasource = null; + var itemName = match[1]; + var datasourceName = match[2]; + var viewportController = controllers[0]; + var bufferSize = Math.max(BUFFER_MIN, parseNumericAttr($attr.bufferSize, BUFFER_DEFAULT)); + var padding = Math.max(PADDING_MIN, parseNumericAttr($attr.padding, PADDING_DEFAULT)); + var startIndex = parseNumericAttr($attr.startIndex, 1); + var ridActual = 0; // current data revision id + var pending = []; + + var elementRoutines = new _elementRoutines2.default($injector, $q); + var buffer = new _buffer2.default(elementRoutines, bufferSize); + var viewport = new _viewport2.default(elementRoutines, buffer, element, viewportController, $rootScope, padding); + var adapter = new _adapter2.default(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope); + + if (viewportController) { + viewportController.adapter = adapter; + } + + var isDatasourceValid = function isDatasourceValid() { + return angular.isObject(datasource) && angular.isFunction(datasource.get); + }; + datasource = $parse(datasourceName)($scope); // try to get datasource on scope + if (!isDatasourceValid()) { + datasource = $injector.get(datasourceName); // try to inject datasource as service + if (!isDatasourceValid()) { + throw new Error(datasourceName + ' is not a valid datasource'); + } + } + + var indexStore = {}; + + function defineProperty(datasource, propName, propUserName) { + var descriptor = Object.getOwnPropertyDescriptor(datasource, propName); + if (!descriptor || !descriptor.set && !descriptor.get) { + Object.defineProperty(datasource, propName, { + set: function set(value) { + indexStore[propName] = value; + $timeout(function () { + buffer[propUserName] = value; + if (!pending.length) { + var topPaddingHeightOld = viewport.topDataPos(); + viewport.adjustPadding(); + if (propName === 'minIndex') { + viewport.adjustScrollTopAfterMinIndexSet(topPaddingHeightOld); + } + } + }); + }, + get: function get() { + return indexStore[propName]; + } + }); + } + } + + defineProperty(datasource, 'minIndex', 'minIndexUser'); + defineProperty(datasource, 'maxIndex', 'maxIndexUser'); + + var fetchNext = datasource.get.length !== 2 ? function (success) { + return datasource.get(buffer.next, bufferSize, success); + } : function (success) { + datasource.get({ + index: buffer.next, + append: buffer.length ? buffer[buffer.length - 1].item : void 0, + count: bufferSize + }, success); + }; + + var fetchPrevious = datasource.get.length !== 2 ? function (success) { + return datasource.get(buffer.first - bufferSize, bufferSize, success); + } : function (success) { + datasource.get({ + index: buffer.first - bufferSize, + prepend: buffer.length ? buffer[0].item : void 0, + count: bufferSize + }, 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 + */ + linker(function (clone, scope) { + viewport.createPaddingElements(clone[0]); + // we do not include the clone in the DOM. It means that the nested directives will not + // be able to reach the parent directives, but in this case it is intentional because we + // created the clone to access the template tag name + scope.$destroy(); + clone.remove(); + }); + + $scope.$on('$destroy', function () { + unbindEvents(); + viewport.unbind('mousewheel', wheelHandler); + }); + + viewport.bind('mousewheel', wheelHandler); + + $timeout(function () { + viewport.applyContainerStyle(); + reload(); + }); + + /* Private function definitions */ + + function isInvalid(rid) { + return rid && rid !== ridActual || $scope.$$destroyed; + } + + function bindEvents() { + viewport.bind('resize', resizeAndScrollHandler); + viewport.bind('scroll', resizeAndScrollHandler); + } + + function unbindEvents() { + viewport.unbind('resize', resizeAndScrollHandler); + viewport.unbind('scroll', resizeAndScrollHandler); + } + + function reload() { + viewport.resetTopPadding(); + viewport.resetBottomPadding(); + if (arguments.length) { + startIndex = arguments[0]; + } + buffer.reset(startIndex); + adjustBuffer(); + } + + function isElementVisible(wrapper) { + return wrapper.element.height() && wrapper.element[0].offsetParent; + } + + function visibilityWatcher(wrapper) { + if (isElementVisible(wrapper)) { + buffer.forEach(function (item) { + if (angular.isFunction(item.unregisterVisibilityWatcher)) { + item.unregisterVisibilityWatcher(); + delete item.unregisterVisibilityWatcher; + } + }); + if (!pending.length) { + adjustBuffer(); + } + } + } + + function insertWrapperContent(wrapper, insertAfter) { + createElement(wrapper, insertAfter, viewport.insertElement); + if (!isElementVisible(wrapper)) { + wrapper.unregisterVisibilityWatcher = wrapper.scope.$watch(function () { + return visibilityWatcher(wrapper); + }); + } + wrapper.element.addClass('ng-hide'); // hide inserted elements before data binding + } + + function createElement(wrapper, insertAfter, insertElement) { + var promises = null; + var sibling = insertAfter > 0 ? buffer[insertAfter - 1].element : undefined; + linker(function (clone, scope) { + promises = insertElement(clone, sibling); + wrapper.element = clone; + wrapper.scope = scope; + scope[itemName] = wrapper.item; + }); + // ui-scroll-grid apply + if (adapter.transform) { + var tdInitializer = wrapper.scope.uiScrollTdInitializer; + if (tdInitializer && tdInitializer.linking) { + adapter.transform(wrapper.scope, wrapper.element); + } else { + wrapper.scope.uiScrollTdInitializer = { + onLink: function onLink() { + return adapter.transform(wrapper.scope, wrapper.element); + }, + scope: wrapper.scope + }; + } + } + return promises; + } + + function updateDOM() { + var promises = []; + var toBePrepended = []; + var toBeRemoved = []; + var inserted = []; + + buffer.forEach(function (wrapper, i) { + switch (wrapper.op) { + case 'prepend': + toBePrepended.unshift(wrapper); + break; + case 'append': + insertWrapperContent(wrapper, i); + wrapper.op = 'none'; + inserted.push(wrapper); + break; + case 'insert': + promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated)); + wrapper.op = 'none'; + inserted.push(wrapper); + break; + case 'remove': + toBeRemoved.push(wrapper); + } + }); + + toBeRemoved.forEach(function (wrapper) { + return promises = promises.concat(viewport.removeItem(wrapper)); + }); + + if (toBePrepended.length) toBePrepended.forEach(function (wrapper) { + insertWrapperContent(wrapper); + wrapper.op = 'none'; + }); + + buffer.forEach(function (item, i) { + return item.scope.$index = buffer.first + i; + }); + + return { + prepended: toBePrepended, + removed: toBeRemoved, + inserted: inserted, + animated: promises + }; + } + + function updatePaddings(rid, updates) { + // schedule another adjustBuffer after animation completion + if (updates.animated.length) { + $q.all(updates.animated).then(function () { + viewport.adjustPadding(); + adjustBuffer(rid); + }); + } else { + viewport.adjustPadding(); + } + } + + function enqueueFetch(rid, updates) { + if (viewport.shouldLoadBottom()) { + if (!updates || buffer.effectiveHeight(updates.inserted) > 0) { + // this means that at least one item appended in the last batch has height > 0 + if (pending.push(true) === 1) { + fetch(rid); + adapter.loading(true); + } + } + } else if (viewport.shouldLoadTop()) { + if (!updates || buffer.effectiveHeight(updates.prepended) > 0 || pending[0]) { + // this means that at least one item appended in the last batch has height > 0 + // pending[0] = true means that previous fetch was appending. We need to force at least one prepend + // BTW there will always be at least 1 element in the pending array because bottom is fetched first + if (pending.push(false) === 1) { + fetch(rid); + adapter.loading(true); + } + } + } + } + + function adjustBuffer(rid) { + if (!rid) { + // dismiss pending requests + pending = []; + rid = ++ridActual; + } + + var updates = updateDOM(); + + // We need the item bindings to be processed before we can do adjustment + $timeout(function () { + + // show elements after data binging has been done + updates.inserted.forEach(function (w) { + return w.element.removeClass('ng-hide'); + }); + updates.prepended.forEach(function (w) { + return w.element.removeClass('ng-hide'); + }); + + if (isInvalid(rid)) { + return; + } + + updatePaddings(rid, updates); + enqueueFetch(rid); + + if (!pending.length) { + adapter.calculateProperties(); + } + }); + } + + function adjustBufferAfterFetch(rid) { + var updates = updateDOM(); + + // We need the item bindings to be processed before we can do adjustment + $timeout(function () { + + // show elements after data binging has been done + updates.inserted.forEach(function (w) { + return w.element.removeClass('ng-hide'); + }); + updates.prepended.forEach(function (w) { + return w.element.removeClass('ng-hide'); + }); + + viewport.adjustScrollTopAfterPrepend(updates); + + if (isInvalid(rid)) { + return; + } + + updatePaddings(rid, updates); + enqueueFetch(rid, updates); + pending.shift(); + + if (pending.length) fetch(rid);else { + adapter.loading(false); + bindEvents(); + adapter.calculateProperties(); + } + }); + } + + function fetch(rid) { + if (pending[0]) { + // scrolling down + if (buffer.length && !viewport.shouldLoadBottom()) { + adjustBufferAfterFetch(rid); + } else { + fetchNext(function (result) { + if (isInvalid(rid)) { + return; + } + + if (result.length < bufferSize) { + buffer.eof = true; + } + + if (result.length > 0) { + viewport.clipTop(); + buffer.append(result); + } + + adjustBufferAfterFetch(rid); + }); + } + } else { + // scrolling up + if (buffer.length && !viewport.shouldLoadTop()) { + adjustBufferAfterFetch(rid); + } else { + fetchPrevious(function (result) { + if (isInvalid(rid)) { + return; + } + + if (result.length < bufferSize) { + buffer.bof = true; + // log 'bof is reached' + } + + if (result.length > 0) { + if (buffer.length) { + viewport.clipBottom(); + } + buffer.prepend(result); + } + + adjustBufferAfterFetch(rid); + }); + } + } + } + + function resizeAndScrollHandler() { + if (!$rootScope.$$phase && !adapter.isLoading && !adapter.disabled) { + + enqueueFetch(ridActual); + + if (pending.length) { + unbindEvents(); + } else { + adapter.calculateProperties(); + $scope.$apply(); + } + } + } + + function wheelHandler(event) { + if (!adapter.disabled) { + var scrollTop = viewport[0].scrollTop; + var yMax = viewport[0].scrollHeight - viewport[0].clientHeight; + + if (scrollTop === 0 && !buffer.bof || scrollTop === yMax && !buffer.eof) { + event.preventDefault(); + } + } + } + } +}]); + +/***/ }) /******/ ]); //# sourceMappingURL=ui-scroll.js.map \ No newline at end of file diff --git a/dist/ui-scroll.js.map b/dist/ui-scroll.js.map index d5ba941f..c50a7f99 100644 --- a/dist/ui-scroll.js.map +++ b/dist/ui-scroll.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap 4e0bfa5d365e937227e2","webpack:///./src/ui-scroll.js","webpack:///./src/modules/jqLiteExtras.js","webpack:///./src/modules/elementRoutines.js","webpack:///./src/modules/buffer.js","webpack:///./src/modules/viewport.js","webpack:///./src/modules/padding.js","webpack:///./src/modules/adapter.js"],"names":["angular","module","service","run","jqLiteExtras","window","jQuery","registerFor","element","directive","restrict","controller","scope","container","viewport","forEach","children","child","tagName","toLowerCase","console","$injector","$rootScope","$timeout","$q","$parse","require","transclude","priority","terminal","link","$scope","$attr","controllers","linker","match","uiScroll","Error","parseNumericAttr","value","defaultValue","result","isNaN","BUFFER_MIN","BUFFER_DEFAULT","PADDING_MIN","PADDING_DEFAULT","datasource","itemName","datasourceName","viewportController","bufferSize","Math","max","padding","startIndex","ridActual","pending","elementRoutines","buffer","adapter","adjustBuffer","reload","isDatasourceValid","isObject","isFunction","get","indexStore","defineProperty","propName","propUserName","descriptor","Object","getOwnPropertyDescriptor","set","length","topPaddingHeightOld","topDataPos","adjustPadding","adjustScrollTopAfterMinIndexSet","fetchNext","success","next","index","append","item","count","fetchPrevious","first","prepend","clone","createPaddingElements","$destroy","remove","$on","unbindEvents","unbind","wheelHandler","bind","applyContainerStyle","isInvalid","rid","$$destroyed","bindEvents","resizeAndScrollHandler","resetTopPadding","resetBottomPadding","arguments","reset","isElementVisible","wrapper","height","offsetParent","visibilityWatcher","unregisterVisibilityWatcher","insertWrapperContent","insertAfter","createElement","insertElement","$watch","addClass","promises","sibling","undefined","transform","updateDOM","toBePrepended","toBeRemoved","inserted","i","op","unshift","push","concat","insertElementAnimated","removeItem","$index","prepended","removed","animated","updatePaddings","updates","all","then","enqueueFetch","shouldLoadBottom","effectiveHeight","fetch","loading","shouldLoadTop","w","removeClass","calculateProperties","adjustBufferAfterFetch","adjustScrollTopAfterPrepend","shift","eof","clipTop","bof","clipBottom","$$phase","isLoading","disabled","$apply","event","scrollTop","yMax","scrollHeight","clientHeight","preventDefault","JQLiteExtras","convertToPx","css","getStyle","isWindow","prototype","name","self","elem","nodeType","style","call","obj","document","location","alert","setInterval","scrollTo","direction","top","left","method","prop","preserve","isDefined","documentElement","getComputedStyle","parseFloat","currentStyle","rs","rsLeft","core_pnum","source","rnumnonpx","RegExp","test","runtimeStyle","pixelLeft","getMeasurements","measure","base","borderA","borderB","computedMarginA","computedMarginB","computedStyle","dirA","dirB","marginA","marginB","paddingA","paddingB","width","border","margin","offsetWidth","offsetHeight","getWidthHeight","measurements","outer","outerfull","before","newElem","j","parent","ref","contents","after","outerHTML","isNumber","outerHeight","option","outerWidth","offset","docElem","win","box","doc","ownerDocument","getBoundingClientRect","defaultView","parentWindow","pageYOffset","clientTop","pageXOffset","scrollLeft","clientLeft","key","ElementRoutines","$animate","has","isAngularVersionLessThen1_3","version","major","minor","newElement","previousElement","deferred","defer","enter","resolve","promise","removeElement","leave","ScrollBuffer","create","Array","extend","size","minIndex","maxIndex","minIndexUser","maxIndexUser","items","insert","reverse","min","operation","splice","arg1","arg2","indexOf","removeElementAnimated","elements","Number","MAX_VALUE","bottom","MIN_VALUE","Viewport","topPadding","bottomPadding","bufferPadding","getScope","template","bottomDataPos","bottomVisiblePos","topVisiblePos","e","overage","overageHeight","itemHeight","emptySpaceHeight","cache","add","topPaddingHeight","reduce","summ","bottomPaddingHeight","visibleItemsHeight","averageItemHeight","adjustTopPadding","adjustBottomPadding","topPaddingHeightAdd","bottomPaddingHeightAdd","diff","paddingHeight","clear","Padding","Cache","sort","a","b","table","find","getCtrlOnData","attr","onSyntax","log","ctrl","tail","candidate","candidateScope","candidateName","target","Adapter","viewportScope","startScope","$parent","publicContext","assignAdapter","generatePublicContext","adapterAttr","replace","ctrlOnData","adapterOnScope","assign","error","message","publicMethods","publicProps","property","slice","applyUpdate","newItems","rowTop","topHeight","topDone","bottomDone","itemTop","isEOF","isArray","keepIt","pos","newItem"],"mappings":"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","file":"ui-scroll.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 4e0bfa5d365e937227e2","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 indexStore = {};\n\n function defineProperty(datasource, propName, propUserName) {\n let descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n if (!descriptor || (!descriptor.set && !descriptor.get)) {\n Object.defineProperty(datasource, propName, {\n set: (value) => {\n indexStore[propName] = value;\n $timeout(() => {\n buffer[propUserName] = value;\n if (!pending.length) {\n let topPaddingHeightOld = viewport.topDataPos();\n viewport.adjustPadding();\n if (propName === 'minIndex') {\n viewport.adjustScrollTopAfterMinIndexSet(topPaddingHeightOld);\n }\n }\n });\n },\n get: () => indexStore[propName]\n });\n }\n }\n\n defineProperty(datasource, 'minIndex', 'minIndexUser');\n defineProperty(datasource, 'maxIndex', 'maxIndexUser');\n\n const fetchNext = (datasource.get.length !== 2) ? (success) => datasource.get(buffer.next, bufferSize, success)\n : (success) => {\n datasource.get({\n index: buffer.next,\n append: buffer.length ? buffer[buffer.length - 1].item : void 0,\n count: bufferSize\n }, success);\n };\n\n const fetchPrevious = (datasource.get.length !== 2) ? (success) => datasource.get(buffer.first - bufferSize, bufferSize, success)\n : (success) => {\n datasource.get({\n index: buffer.first - bufferSize,\n prepend: buffer.length ? buffer[0].item : void 0,\n count: bufferSize\n }, success);\n };\n\n /**\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 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 if (adapter.transform)\n adapter.transform(wrapper.scope, wrapper.element);\n return promises;\n }\n\n function updateDOM() {\n let promises = [];\n const toBePrepended = [];\n const toBeRemoved = [];\n const inserted = [];\n\n buffer.forEach((wrapper, i) => {\n switch (wrapper.op) {\n case 'prepend':\n toBePrepended.unshift(wrapper);\n break;\n case 'append':\n insertWrapperContent(wrapper, i);\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'insert':\n promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated));\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'remove':\n toBeRemoved.push(wrapper);\n }\n });\n\n toBeRemoved.forEach((wrapper) => promises = promises.concat(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.adjustPadding();\n adjustBuffer(rid);\n });\n } else {\n viewport.adjustPadding();\n }\n }\n\n function enqueueFetch(rid, updates) {\n if (viewport.shouldLoadBottom()) {\n if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\n // this means that at least one item appended in the last batch has height > 0\n if (pending.push(true) === 1) {\n fetch(rid);\n adapter.loading(true);\n }\n }\n } else if (viewport.shouldLoadTop()) {\n if ((!updates || buffer.effectiveHeight(updates.prepended) > 0) || pending[0]) {\n // this means that at least one item appended in the last batch has height > 0\n // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\n // BTW there will always be at least 1 element in the pending array because bottom is fetched first\n if (pending.push(false) === 1) {\n fetch(rid);\n adapter.loading(true);\n }\n }\n }\n }\n\n function adjustBuffer(rid) {\n if (!rid) { // dismiss pending requests\n pending = [];\n rid = ++ridActual;\n }\n\n let updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustment\n $timeout(() => {\n\n // show elements after data binging has been done\n updates.inserted.forEach(w => w.element.removeClass('ng-hide'));\n updates.prepended.forEach(w => w.element.removeClass('ng-hide'));\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n enqueueFetch(rid);\n\n if (!pending.length) {\n adapter.calculateProperties();\n }\n });\n }\n\n function adjustBufferAfterFetch(rid) {\n let updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustment\n $timeout(() => {\n\n // show elements after data binging has been done\n updates.inserted.forEach(w => w.element.removeClass('ng-hide'));\n updates.prepended.forEach(w => w.element.removeClass('ng-hide'));\n\n viewport.adjustScrollTopAfterPrepend(updates);\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n enqueueFetch(rid, updates);\n pending.shift();\n\n if (pending.length)\n fetch(rid);\n else {\n adapter.loading(false);\n bindEvents();\n adapter.calculateProperties();\n }\n });\n }\n\n function fetch(rid) {\n if (pending[0]) {// scrolling down\n if (buffer.length && !viewport.shouldLoadBottom()) {\n adjustBufferAfterFetch(rid);\n } else {\n fetchNext((result) => {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.eof = true;\n }\n\n if (result.length > 0) {\n viewport.clipTop();\n buffer.append(result);\n }\n\n adjustBufferAfterFetch(rid);\n });\n }\n } else { // scrolling up\n if (buffer.length && !viewport.shouldLoadTop()) {\n adjustBufferAfterFetch(rid);\n } else {\n fetchPrevious((result) => {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.bof = true;\n // log 'bof is reached'\n }\n\n if (result.length > 0) {\n if (buffer.length) {\n viewport.clipBottom();\n }\n buffer.prepend(result);\n }\n\n adjustBufferAfterFetch(rid);\n });\n }\n }\n }\n\n function resizeAndScrollHandler() {\n if (!$rootScope.$$phase && !adapter.isLoading && !adapter.disabled) {\n\n enqueueFetch(ridActual);\n\n if (pending.length) {\n unbindEvents();\n } else {\n adapter.calculateProperties();\n $scope.$apply();\n }\n }\n }\n\n function wheelHandler(event) {\n if (!adapter.disabled) {\n let scrollTop = viewport[0].scrollTop;\n let yMax = viewport[0].scrollHeight - viewport[0].clientHeight;\n\n if ((scrollTop === 0 && !buffer.bof) || (scrollTop === yMax && !buffer.eof)) {\n event.preventDefault();\n }\n }\n }\n }\n\n }\n ]);\n\n\n// WEBPACK FOOTER //\n// ./src/ui-scroll.js","/*!\r\n globals: angular, window\r\n List of used element methods available in JQuery but not in JQuery Lite\r\n element.before(elem)\r\n element.height()\r\n element.outerHeight(true)\r\n element.height(value) = only for Top/Bottom padding elements\r\n element.scrollTop()\r\n element.scrollTop(value)\r\n */\r\n\r\nexport default class JQLiteExtras {\r\n\r\n registerFor(element) {\r\n let convertToPx, css, getStyle, isWindow;\r\n // angular implementation blows up if elem is the window\r\n css = angular.element.prototype.css;\r\n\r\n element.prototype.css = function (name, value) {\r\n let self = this;\r\n let elem = self[0];\r\n if (!(!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style)) {\r\n return css.call(self, name, value);\r\n }\r\n };\r\n\r\n // as defined in angularjs v1.0.5\r\n isWindow = (obj) => obj && obj.document && obj.location && obj.alert && obj.setInterval;\r\n\r\n function scrollTo(self, direction, value) {\r\n let elem = self[0];\r\n let [method, prop, preserve] = {\r\n top: [\r\n 'scrollTop',\r\n 'pageYOffset',\r\n 'scrollLeft'\r\n ],\r\n left: [\r\n 'scrollLeft',\r\n 'pageXOffset',\r\n 'scrollTop'\r\n ]\r\n }[direction];\r\n\r\n if (isWindow(elem)) {\r\n if (angular.isDefined(value)) {\r\n return elem.scrollTo(self[preserve].call(self), value);\r\n }\r\n return (prop in elem) ? elem[prop] : elem.document.documentElement[method];\r\n } else {\r\n if (angular.isDefined(value)) {\r\n elem[method] = value;\r\n }\r\n return elem[method];\r\n }\r\n }\r\n\r\n if (window.getComputedStyle) {\r\n getStyle = (elem) => window.getComputedStyle(elem, null);\r\n convertToPx = (elem, value) => parseFloat(value);\r\n } else {\r\n getStyle = (elem) => elem.currentStyle;\r\n convertToPx = (elem, value) => {\r\n let left, result, rs, rsLeft, style;\r\n let core_pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\r\n let rnumnonpx = new RegExp('^(' + core_pnum + ')(?!px)[a-z%]+$', 'i');\r\n\r\n if (!rnumnonpx.test(value)) {\r\n return parseFloat(value);\r\n }\r\n\r\n // ported from JQuery\r\n style = elem.style;\r\n left = style.left;\r\n rs = elem.runtimeStyle;\r\n rsLeft = rs && rs.left;\r\n if (rs) {\r\n rs.left = style.left;\r\n }\r\n // put in the new values to get a computed style out\r\n style.left = value;\r\n result = style.pixelLeft;\r\n style.left = left;\r\n if (rsLeft) {\r\n rs.left = rsLeft;\r\n }\r\n return result;\r\n };\r\n }\r\n\r\n function getMeasurements(elem, measure) {\r\n let base, borderA, borderB, computedMarginA, computedMarginB, computedStyle, dirA, dirB, marginA, marginB, paddingA, paddingB;\r\n\r\n if (isWindow(elem)) {\r\n base = document.documentElement[{height: 'clientHeight', width: 'clientWidth'}[measure]];\r\n\r\n return {\r\n base: base,\r\n padding: 0,\r\n border: 0,\r\n margin: 0\r\n };\r\n }\r\n\r\n // Start with offset property\r\n [\r\n base,\r\n dirA,\r\n dirB\r\n ] = {\r\n width: [\r\n elem.offsetWidth,\r\n 'Left',\r\n 'Right'\r\n ],\r\n height: [\r\n elem.offsetHeight,\r\n 'Top',\r\n 'Bottom'\r\n ]\r\n }[measure];\r\n\r\n computedStyle = getStyle(elem);\r\n paddingA = convertToPx(elem, computedStyle['padding' + dirA]) || 0;\r\n paddingB = convertToPx(elem, computedStyle['padding' + dirB]) || 0;\r\n borderA = convertToPx(elem, computedStyle['border' + dirA + 'Width']) || 0;\r\n borderB = convertToPx(elem, computedStyle['border' + dirB + 'Width']) || 0;\r\n computedMarginA = computedStyle['margin' + dirA];\r\n computedMarginB = computedStyle['margin' + dirB];\r\n\r\n // I do not care for width for now, so this hack is irrelevant\r\n // if ( !supportsPercentMargin )\r\n // computedMarginA = hackPercentMargin( elem, computedStyle, computedMarginA )\r\n // computedMarginB = hackPercentMargin( elem, computedStyle, computedMarginB )\r\n marginA = convertToPx(elem, computedMarginA) || 0;\r\n marginB = convertToPx(elem, computedMarginB) || 0;\r\n\r\n return {\r\n base: base,\r\n padding: paddingA + paddingB,\r\n border: borderA + borderB,\r\n margin: marginA + marginB\r\n };\r\n }\r\n\r\n function getWidthHeight(elem, direction, measure) {\r\n let computedStyle, result;\r\n\r\n let measurements = getMeasurements(elem, direction);\r\n\r\n if (measurements.base > 0) {\r\n return {\r\n base: measurements.base - measurements.padding - measurements.border,\r\n outer: measurements.base,\r\n outerfull: measurements.base + measurements.margin\r\n }[measure];\r\n }\r\n\r\n // Fall back to computed then uncomputed css if necessary\r\n computedStyle = getStyle(elem);\r\n result = computedStyle[direction];\r\n\r\n if (result < 0 || result === null) {\r\n result = elem.style[direction] || 0;\r\n }\r\n\r\n // Normalize \"\", auto, and prepare for extra\r\n result = parseFloat(result) || 0;\r\n\r\n return {\r\n base: result - measurements.padding - measurements.border,\r\n outer: result,\r\n outerfull: result + measurements.padding + measurements.border + measurements.margin\r\n }[measure];\r\n }\r\n\r\n // define missing methods\r\n return angular.forEach({\r\n before(newElem) {\r\n var children, elem, i, j, parent, ref, self;\r\n self = this;\r\n elem = self[0];\r\n parent = self.parent();\r\n children = parent.contents();\r\n if (children[0] === elem) {\r\n return parent.prepend(newElem);\r\n } else {\r\n for (i = j = 1, ref = children.length - 1; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {\r\n if (children[i] === elem) {\r\n angular.element(children[i - 1]).after(newElem);\r\n return;\r\n }\r\n }\r\n throw new Error('invalid DOM structure ' + elem.outerHTML);\r\n }\r\n },\r\n height (value){\r\n var self;\r\n self = this;\r\n if (angular.isDefined(value)) {\r\n if (angular.isNumber(value)) {\r\n value = value + 'px';\r\n }\r\n return css.call(self, 'height', value);\r\n } else {\r\n return getWidthHeight(this[0], 'height', 'base');\r\n }\r\n },\r\n outerHeight(option) {\r\n return getWidthHeight(this[0], 'height', option ? 'outerfull' : 'outer');\r\n },\r\n outerWidth(option) {\r\n return getWidthHeight(this[0], 'width', option ? 'outerfull' : 'outer');\r\n },\r\n\r\n /*\r\n The offset setter method is not implemented\r\n */\r\n offset(value) {\r\n let docElem, win;\r\n let self = this;\r\n let box = {\r\n top: 0,\r\n left: 0\r\n };\r\n let elem = self[0];\r\n let doc = elem && elem.ownerDocument;\r\n\r\n if (arguments.length) {\r\n if (value === undefined) {\r\n return self;\r\n }\r\n // TODO: implement setter\r\n throw new Error('offset setter method is not implemented');\r\n }\r\n\r\n if (!doc) {\r\n return;\r\n }\r\n\r\n docElem = doc.documentElement;\r\n\r\n // TODO: Make sure it's not a disconnected DOM node\r\n\r\n if (elem.getBoundingClientRect != null) {\r\n box = elem.getBoundingClientRect();\r\n }\r\n\r\n win = doc.defaultView || doc.parentWindow;\r\n\r\n return {\r\n top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),\r\n left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0)\r\n };\r\n },\r\n scrollTop(value) {\r\n return scrollTo(this, 'top', value);\r\n },\r\n scrollLeft(value) {\r\n return scrollTo(this, 'left', value);\r\n }\r\n }, (value, key) => {\r\n if (!element.prototype[key]) {\r\n return element.prototype[key] = value;\r\n }\r\n });\r\n }\r\n\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/jqLiteExtras.js","export default class ElementRoutines {\r\n\r\n constructor($injector, $q) {\r\n this.$animate = ($injector.has && $injector.has('$animate')) ? $injector.get('$animate') : null;\r\n this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3;\r\n this.$q = $q;\r\n }\r\n\r\n insertElement(newElement, previousElement) {\r\n previousElement.after(newElement);\r\n return [];\r\n }\r\n\r\n removeElement(wrapper) {\r\n wrapper.element.remove();\r\n wrapper.scope.$destroy();\r\n return [];\r\n }\r\n\r\n insertElementAnimated(newElement, previousElement) {\r\n if (!this.$animate) {\r\n return this.insertElement(newElement, previousElement);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n // no need for parent - previous element is never null\r\n this.$animate.enter(newElement, null, previousElement, () => deferred.resolve());\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n // no need for parent - previous element is never null\r\n return [this.$animate.enter(newElement, null, previousElement)];\r\n }\r\n\r\n removeElementAnimated(wrapper) {\r\n if (!this.$animate) {\r\n return this.removeElement(wrapper);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n this.$animate.leave(wrapper.element, () => {\r\n wrapper.scope.$destroy();\r\n return deferred.resolve();\r\n });\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n return [(this.$animate.leave(wrapper.element)).then(() => wrapper.scope.$destroy())];\r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/elementRoutines.js","export default function ScrollBuffer(elementRoutines, bufferSize) {\r\n const buffer = Object.create(Array.prototype);\r\n\r\n angular.extend(buffer, {\r\n size: bufferSize,\r\n\r\n reset(startIndex) {\r\n buffer.remove(0, buffer.length);\r\n buffer.eof = false;\r\n buffer.bof = false;\r\n buffer.first = startIndex;\r\n buffer.next = startIndex;\r\n buffer.minIndex = startIndex;\r\n buffer.maxIndex = startIndex;\r\n buffer.minIndexUser = null;\r\n buffer.maxIndexUser = null;\r\n },\r\n\r\n append(items) {\r\n items.forEach((item) => {\r\n ++buffer.next;\r\n buffer.insert('append', item);\r\n });\r\n buffer.maxIndex = buffer.eof ? buffer.next - 1 : Math.max(buffer.next - 1, buffer.maxIndex);\r\n },\r\n\r\n prepend(items) {\r\n items.reverse().forEach((item) => {\r\n --buffer.first;\r\n buffer.insert('prepend', item);\r\n });\r\n buffer.minIndex = buffer.bof ? buffer.minIndex = buffer.first : Math.min(buffer.first, buffer.minIndex);\r\n },\r\n\r\n /**\r\n * inserts wrapped element in the buffer\r\n * the first argument is either operation keyword (see below) or a number for operation 'insert'\r\n * for insert the number is the index for the buffer element the new one have to be inserted after\r\n * operations: 'append', 'prepend', 'insert', 'remove', 'update', 'none'\r\n */\r\n insert(operation, item) {\r\n const wrapper = {\r\n item: item\r\n };\r\n\r\n if (operation % 1 === 0) {// it is an insert\r\n wrapper.op = 'insert';\r\n buffer.splice(operation, 0, wrapper);\r\n } else {\r\n wrapper.op = operation;\r\n switch (operation) {\r\n case 'append':\r\n buffer.push(wrapper);\r\n break;\r\n case 'prepend':\r\n buffer.unshift(wrapper);\r\n break;\r\n }\r\n }\r\n },\r\n\r\n // removes elements from buffer\r\n remove(arg1, arg2) {\r\n if (angular.isNumber(arg1)) {\r\n // removes items from arg1 (including) through arg2 (excluding)\r\n for (let i = arg1; i < arg2; i++) {\r\n elementRoutines.removeElement(buffer[i]);\r\n }\r\n\r\n return buffer.splice(arg1, arg2 - arg1);\r\n }\r\n // removes single item(wrapper) from the buffer\r\n buffer.splice(buffer.indexOf(arg1), 1);\r\n\r\n return elementRoutines.removeElementAnimated(arg1);\r\n },\r\n\r\n effectiveHeight(elements) {\r\n if (!elements.length) {\r\n return 0;\r\n }\r\n let top = Number.MAX_VALUE;\r\n let bottom = Number.MIN_VALUE;\r\n elements.forEach((wrapper) => {\r\n if (wrapper.element[0].offsetParent) {\r\n // element style is not display:none\r\n top = Math.min(top, wrapper.element.offset().top);\r\n bottom = Math.max(bottom, wrapper.element.offset().top + wrapper.element.outerHeight(true));\r\n }\r\n });\r\n return Math.max(0, bottom - top);\r\n }\r\n\r\n });\r\n\r\n return buffer;\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/buffer.js","import Padding from './padding';\r\n\r\nexport default function Viewport(elementRoutines, buffer, element, viewportController, $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.adjustPadding();\r\n }\r\n },\r\n\r\n shouldLoadTop() {\r\n return !buffer.bof && (viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding());\r\n },\r\n\r\n clipTop() {\r\n // clip the invisible items off the top\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\r\n\r\n for (let i = 0; i < buffer.length; i++) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n topPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n // we need to adjust top padding element before items are removed from top\r\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\r\n topPadding.height(topPadding.height() + overageHeight);\r\n buffer.bof = false;\r\n buffer.remove(0, overage);\r\n buffer.first += overage;\r\n }\r\n },\r\n\r\n adjustPadding() {\r\n if (!buffer.length) {\r\n return;\r\n }\r\n\r\n // precise heights calculation, items that were in buffer once\r\n let topPaddingHeight = topPadding.cache.reduce((summ, item) => summ + (item.index < buffer.first ? item.height : 0), 0);\r\n let bottomPaddingHeight = bottomPadding.cache.reduce((summ, item) => summ + (item.index >= buffer.next ? item.height : 0), 0);\r\n\r\n // average item height based on buffer data\r\n let visibleItemsHeight = buffer.reduce((summ, item) => summ + item.element.outerHeight(true), 0);\r\n let averageItemHeight = (visibleItemsHeight + topPaddingHeight + bottomPaddingHeight) / (buffer.maxIndex - buffer.minIndex + 1);\r\n\r\n // average heights calculation, items that have never been reached\r\n let adjustTopPadding = buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser;\r\n let adjustBottomPadding = buffer.maxIndexUser !== null && buffer.maxIndex < buffer.maxIndexUser;\r\n let topPaddingHeightAdd = adjustTopPadding ? (buffer.minIndex - buffer.minIndexUser) * averageItemHeight : 0;\r\n let bottomPaddingHeightAdd = adjustBottomPadding ? (buffer.maxIndexUser - buffer.maxIndex) * averageItemHeight : 0;\r\n\r\n // paddings combine adjustment\r\n topPadding.height(topPaddingHeight + topPaddingHeightAdd);\r\n bottomPadding.height(bottomPaddingHeight + bottomPaddingHeightAdd);\r\n },\r\n\r\n adjustScrollTopAfterMinIndexSet(topPaddingHeightOld) {\r\n // additional scrollTop adjustment in case of datasource.minIndex external set\r\n if (buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser) {\r\n let diff = topPadding.height() - topPaddingHeightOld;\r\n viewport.scrollTop(viewport.scrollTop() + diff);\r\n }\r\n },\r\n\r\n adjustScrollTopAfterPrepend(updates) {\r\n if (!updates.prepended.length)\r\n return;\r\n const height = buffer.effectiveHeight(updates.prepended);\r\n const paddingHeight = topPadding.height() - height;\r\n if (paddingHeight >= 0) {\r\n topPadding.height(paddingHeight);\r\n }\r\n else {\r\n topPadding.height(0);\r\n viewport.scrollTop(viewport.scrollTop() - paddingHeight);\r\n }\r\n },\r\n\r\n resetTopPadding() {\r\n topPadding.height(0);\r\n topPadding.cache.clear();\r\n },\r\n\r\n resetBottomPadding() {\r\n bottomPadding.height(0);\r\n bottomPadding.cache.clear();\r\n },\r\n\r\n 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 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","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 }\r\n\r\n prepend(newItems) {\r\n this.buffer.prepend(newItems);\r\n this.adjustBuffer();\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"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap 0babc30b0e0c1649fab6","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","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","MIN_VALUE","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","clipBottom","overage","overageHeight","emptySpaceHeight","cache","add","adjustPadding","shouldLoadTop","clipTop","topPaddingHeight","reduce","summ","bottomPaddingHeight","visibleItemsHeight","averageItemHeight","adjustTopPadding","adjustBottomPadding","topPaddingHeightAdd","bottomPaddingHeightAdd","adjustScrollTopAfterMinIndexSet","topPaddingHeightOld","diff","adjustScrollTopAfterPrepend","updates","prepended","paddingHeight","resetTopPadding","clear","resetBottomPadding","removeItem","Padding","Cache","$index","sort","a","b","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","indexStore","propName","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","fetch","loading","w","removeClass","calculateProperties","adjustBufferAfterFetch","shift","$$phase","$apply","event","yMax","clientHeight","preventDefault"],"mappings":";;;;;;;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA,mDAA2C,cAAc;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;AChEA,SAASA,aAAT,CAAuBC,IAAvB,EAA6BC,OAA7B,EAAsC;AACpC,MAAIC,WAAWF,KAAKG,KAAL,CAAW,sBAAX,CAAf;AACA,MAAID,YAAYA,SAASE,MAAT,KAAoB,CAApC,EAAuC;AACrCC,WAAOC,OAAP,CAAeC,GAAf,CAAmB,kHAAnB;AACA,QAAIC,OAAON,SAAS,CAAT,CAAX;AACA,QAAIO,OAAOP,SAAS,CAAT,CAAX;AACA,QAAIQ,YAAYT,OAAhB;AACA,WAAOS,UAAUN,MAAjB,EAAyB;AACvB,UAAIO,iBAAiBD,UAAUE,KAAV,EAArB,CADuB,CACiB;AACxC,UAAIC,gBAAgB,CAACH,UAAUV,IAAV,CAAe,eAAf,KAAmC,EAApC,EAAwCG,KAAxC,CAA8C,2CAA9C,CAApB;AACA,UAAIU,iBAAiBA,cAAc,CAAd,MAAqBL,IAA1C,EAAgD;AAC9C,eAAO;AACLM,kBAAQH,cADH;AAELI,kBAAQN;AAFH,SAAP;AAID;AACDC,kBAAYA,UAAUM,MAAV,EAAZ;AACD;AACD,UAAM,IAAIC,KAAJ,CAAU,qFAAqFT,IAArF,GAA4F,eAA5F,GAA8GC,IAA9G,GAAqH,GAA/H,CAAN;AACD;AACF;;IAEKS,O;AAEJ,mBAAYC,QAAZ,EAAsBC,MAAtB,EAA8BC,YAA9B,EAA4CC,MAA5C,EAAoDC,KAApD,EAA2DC,MAA3D,EAAmEvB,OAAnE,EAA4EwB,MAA5E,EAAoF;AAAA;;AAClF,SAAKN,QAAL,GAAgBA,QAAhB;AACA,SAAKC,MAAL,GAAcA,MAAd;AACA,SAAKC,YAAL,GAAoBA,YAApB;AACA,SAAKC,MAAL,GAAcA,MAAd;;AAEA,SAAKI,SAAL,GAAiB,KAAjB;AACA,SAAKC,QAAL,GAAgB,KAAhB;;AAEA,QAAMC,gBAAgBT,SAASU,QAAT,EAAtB;AACA,SAAKC,UAAL,GAAkBF,cAAcG,OAAd,GAAwBH,aAAxB,GAAwCH,MAA1D;;AAEA,SAAKO,aAAL,GAAqB,EAArB;AACA,SAAKC,aAAL,CAAmBV,MAAMW,OAAzB,EAAkCV,MAAlC,EAA0CvB,OAA1C;AACA,SAAKkC,qBAAL,CAA2BZ,KAA3B,EAAkCC,MAAlC;AACD;;;;kCAEaY,W,EAAaZ,M,EAAQvB,O,EAAS;AAC1C,UAAI,CAACmC,WAAD,IAAgB,EAAEA,cAAcA,YAAYC,OAAZ,CAAoB,aAApB,EAAmC,EAAnC,CAAhB,CAApB,EAA6E;AAC3E;AACD;AACD,UAAIC,aAAavC,cAAcqC,WAAd,EAA2BnC,OAA3B,CAAjB;AACA,UAAIsC,uBAAJ;;AAEA,UAAI;AACF,YAAID,UAAJ,EAAgB;AAAE;AAChBd,iBAAOc,WAAWvB,MAAlB,EAA0ByB,MAA1B,CAAiCF,WAAWxB,MAA5C,EAAoD,EAApD;AACAyB,2BAAiBf,OAAOc,WAAWvB,MAAlB,EAA0BuB,WAAWxB,MAArC,CAAjB;AACD,SAHD,MAIK;AACHU,iBAAOY,WAAP,EAAoBI,MAApB,CAA2B,KAAKV,UAAhC,EAA4C,EAA5C;AACAS,2BAAiBf,OAAOY,WAAP,EAAoB,KAAKN,UAAzB,CAAjB;AACD;AACF,OATD,CAUA,OAAOW,KAAP,EAAc;AACZA,cAAMC,OAAN,GAAgB,0EACEN,WADF,wBAEdK,MAAMC,OAFR;AAGA,cAAMD,KAAN;AACD;;AAEDE,cAAQC,MAAR,CAAeL,cAAf,EAA+B,KAAKP,aAApC;AACA,WAAKA,aAAL,GAAqBO,cAArB;AACD;;;0CAEqBhB,K,EAAOC,M,EAAQ;AAAA;;AACnC;AACA,UAAMqB,gBAAgB,CAAC,QAAD,EAAW,cAAX,EAA2B,QAA3B,EAAqC,SAArC,EAAgD,OAAhD,EAAyD,OAAzD,EAAkE,SAAlE,CAAtB;AACA,WAAK,IAAIC,IAAID,cAAczC,MAAd,GAAuB,CAApC,EAAuC0C,KAAK,CAA5C,EAA+CA,GAA/C,EAAoD;AAClD,aAAKd,aAAL,CAAmBa,cAAcC,CAAd,CAAnB,IAAuC,KAAKD,cAAcC,CAAd,CAAL,EAAuBC,IAAvB,CAA4B,IAA5B,CAAvC;AACD;;AAED;AACA,UAAMC,cAAc,CAAC,WAAD,EAAc,YAAd,EAA4B,mBAA5B,EAAiD,iBAAjD,EAAoE,eAApE,EAAqF,sBAArF,EAA6G,oBAA7G,CAApB;;AARmC,iCAS1BF,EAT0B;AAUjC,YAAIG,iBAAJ;AAAA,YAAcjD,OAAOuB,MAAMyB,YAAYF,EAAZ,CAAN,CAArB;AACAI,eAAOC,cAAP,QAA4BH,YAAYF,EAAZ,CAA5B,EAA4C;AAC1CM,eAAK;AAAA,mBAAMH,QAAN;AAAA,WADqC;AAE1CI,eAAK,aAACC,KAAD,EAAW;AACdL,uBAAWK,KAAX;AACA,kBAAKtB,aAAL,CAAmBgB,YAAYF,EAAZ,CAAnB,IAAqCQ,KAArC;AACA,gBAAItD,IAAJ,EAAU;AACRwB,qBAAOxB,IAAP,EAAawC,MAAb,CAAoB,MAAKV,UAAzB,EAAqCwB,KAArC;AACD;AACF;AARyC,SAA5C;AAXiC;;AASnC,WAAK,IAAIR,KAAIE,YAAY5C,MAAZ,GAAqB,CAAlC,EAAqC0C,MAAK,CAA1C,EAA6CA,IAA7C,EAAkD;AAAA,cAAzCA,EAAyC;AAYjD;;AAED;AACAI,aAAOC,cAAP,CAAsB,KAAKnB,aAA3B,EAA0C,UAA1C,EAAsD;AACpDoB,aAAK;AAAA,iBAAM,MAAKzB,QAAX;AAAA,SAD+C;AAEpD0B,aAAK,aAACC,KAAD;AAAA,iBAAY,EAAE,MAAK3B,QAAL,GAAgB2B,KAAlB,CAAD,GAA6B,MAAKjC,YAAL,EAA7B,GAAmD,IAA9D;AAAA;AAF+C,OAAtD;AAID;;;4BAEOiC,K,EAAO;AACb,WAAK,WAAL,IAAoBA,KAApB;AACD;;;4BAEO;AACN,aAAO,KAAKlC,MAAL,CAAYmC,GAAnB;AACD;;;4BAEO;AACN,aAAO,KAAKnC,MAAL,CAAYoC,GAAnB;AACD;;;8BAES;AACR,aAAO,CAAC,KAAKpC,MAAL,CAAYhB,MAApB;AACD;;;iCAEYqD,I,EAAMC,I,EAAM;AAAA;;AACvB,UAAIf,QAAQgB,UAAR,CAAmBF,IAAnB,CAAJ,EAA8B;AAC5B;AACA,aAAKrC,MAAL,CAAYwC,KAAZ,CAAkB,CAAlB,EAAqBC,OAArB,CAA6B,UAACC,OAAD,EAAa;AACxC;AACA;AACA,iBAAKC,WAAL,CAAiBD,OAAjB,EAA0BL,KAAKK,QAAQE,IAAb,EAAmBF,QAAQlD,KAA3B,EAAkCkD,QAAQ7D,OAA1C,CAA1B;AACD,SAJD;AAKD,OAPD,MAOO;AACL;AACA,YAAIwD,OAAO,CAAP,KAAa,CAAjB,EAAoB;AAAC;AACnB,gBAAM,IAAIxC,KAAJ,CAAU,oBAAoBwC,IAApB,GAA2B,uBAArC,CAAN;AACD;;AAED,YAAMQ,QAAQR,OAAO,KAAKrC,MAAL,CAAY8C,KAAjC;AACA,YAAKD,SAAS,CAAT,IAAcA,QAAQ,KAAK7C,MAAL,CAAYhB,MAAvC,EAAgD;AAC9C,eAAK2D,WAAL,CAAiB,KAAK3C,MAAL,CAAY6C,KAAZ,CAAjB,EAAqCP,IAArC;AACD;AACF;;AAED,WAAKrC,YAAL;AACD;;;2BAEM8C,Q,EAAU;AACf,WAAK/C,MAAL,CAAYgD,MAAZ,CAAmBD,QAAnB;AACA,WAAK9C,YAAL;AACD;;;4BAEO8C,Q,EAAU;AAChB,WAAK/C,MAAL,CAAYiD,OAAZ,CAAoBF,QAApB;AACA,WAAK9C,YAAL;AACD;;;0CAEqB;AACpB,UAAIiD,SAAS,IAAb;AAAA,UAAmBC,YAAY,CAA/B;AACA,UAAIC,UAAU,KAAd;AAAA,UAAqBC,aAAa,KAAlC;AACA,UAAMrE,SAAS,KAAKgB,MAAL,CAAYhB,MAA3B;;AAEA,WAAK,IAAI0C,IAAI,CAAb,EAAgBA,IAAI1C,MAApB,EAA4B0C,GAA5B,EAAiC;AAC/B,YAAMkB,OAAO,KAAK5C,MAAL,CAAY0B,CAAZ,CAAb;AACA,YAAM4B,UAAUV,KAAK/D,OAAL,CAAa0E,MAAb,GAAsBC,GAAtC;;AAEA,YAAIN,WAAWI,OAAf,EAAwB;AAAE;AACxB,cAAMG,aAAab,KAAK/D,OAAL,CAAa6E,WAAb,CAAyB,IAAzB,CAAnB;AACA,cAAMF,MAAM,KAAKzD,QAAL,CAAc4D,UAAd,KAA6BR,SAA7B,GAAyCM,UAArD;;AAEA,cAAI,CAACL,OAAD,IAAYI,MAAM,KAAKzD,QAAL,CAAc6D,aAAd,EAAtB,EAAqD;AACnDR,sBAAU,IAAV;AACA,iBAAK,YAAL,IAAqBR,KAAKA,IAA1B;AACA,iBAAK,mBAAL,IAA4BA,KAAK/D,OAAjC;AACA,iBAAK,iBAAL,IAA0B+D,KAAKpD,KAA/B;AACD;;AAED,cAAI,CAAC6D,UAAD,KAAgBG,OAAO,KAAKzD,QAAL,CAAc8D,gBAAd,EAAP,IAA4CnC,MAAM1C,SAAS,CAAf,IAAoB,KAAK8E,KAAL,EAAhF,CAAJ,EAAoG;AAClGT,yBAAa,IAAb;AACA,iBAAK,eAAL,IAAwBT,KAAKA,IAA7B;AACA,iBAAK,sBAAL,IAA+BA,KAAK/D,OAApC;AACA,iBAAK,oBAAL,IAA6B+D,KAAKpD,KAAlC;AACD;AACD2D,uBAAaM,UAAb;AACD;;AAEDP,iBAASI,OAAT;;AAEA,YAAIF,WAAWC,UAAf,EAA2B;AACzB;AACD;AACF;AACF;;;gCAEWX,O,EAASK,Q,EAAU;AAAA;;AAC7B,UAAI,CAACxB,QAAQwC,OAAR,CAAgBhB,QAAhB,CAAL,EAAgC;AAC9B;AACD;;AAED,UAAIiB,eAAJ;AACA,UAAIC,MAAO,KAAKjE,MAAL,CAAYkE,OAAZ,CAAoBxB,OAApB,CAAD,GAAiC,CAA3C;;AAEAK,eAASoB,OAAT,GAAmB1B,OAAnB,CAA2B,UAAC2B,OAAD,EAAa;AACtC,YAAIA,YAAY1B,QAAQE,IAAxB,EAA8B;AAC5BoB,mBAAS,IAAT;AACAC;AACD,SAHD,MAGO;AACL,iBAAKjE,MAAL,CAAYqE,MAAZ,CAAmBJ,GAAnB,EAAwBG,OAAxB;AACD;AACF,OAPD;;AASA,UAAI,CAACJ,MAAL,EAAa;AACXtB,gBAAQ4B,EAAR,GAAa,QAAb;AACD;AACF;;;;;;kBAIYxE,O;;;;;;;;;;;;kBCjNSyE,Y;AAAT,SAASA,YAAT,CAAsBC,eAAtB,EAAuCC,UAAvC,EAAmD;AAChE,MAAMzE,SAAS8B,OAAO4C,MAAP,CAAcC,MAAMC,SAApB,CAAf;;AAEArD,UAAQC,MAAR,CAAexB,MAAf,EAAuB;AACrB6E,UAAMJ,UADe;;AAGrBK,SAHqB,iBAGfC,UAHe,EAGH;AAChB/E,aAAOgF,MAAP,CAAc,CAAd,EAAiBhF,OAAOhB,MAAxB;AACAgB,aAAOoC,GAAP,GAAa,KAAb;AACApC,aAAOmC,GAAP,GAAa,KAAb;AACAnC,aAAO8C,KAAP,GAAeiC,UAAf;AACA/E,aAAOiF,IAAP,GAAcF,UAAd;AACA/E,aAAOkF,QAAP,GAAkBH,UAAlB;AACA/E,aAAOmF,QAAP,GAAkBJ,UAAlB;AACA/E,aAAOoF,YAAP,GAAsB,IAAtB;AACApF,aAAOqF,YAAP,GAAsB,IAAtB;AACD,KAboB;AAerBrC,UAfqB,kBAedsC,KAfc,EAeP;AACZA,YAAM7C,OAAN,CAAc,UAACG,IAAD,EAAU;AACtB,UAAE5C,OAAOiF,IAAT;AACAjF,eAAOqE,MAAP,CAAc,QAAd,EAAwBzB,IAAxB;AACD,OAHD;AAIA5C,aAAOmF,QAAP,GAAkBnF,OAAOoC,GAAP,GAAapC,OAAOiF,IAAP,GAAc,CAA3B,GAA+BM,KAAKC,GAAL,CAASxF,OAAOiF,IAAP,GAAc,CAAvB,EAA0BjF,OAAOmF,QAAjC,CAAjD;AACD,KArBoB;AAuBrBlC,WAvBqB,mBAuBbqC,KAvBa,EAuBN;AACbA,YAAMnB,OAAN,GAAgB1B,OAAhB,CAAwB,UAACG,IAAD,EAAU;AAChC,UAAE5C,OAAO8C,KAAT;AACA9C,eAAOqE,MAAP,CAAc,SAAd,EAAyBzB,IAAzB;AACD,OAHD;AAIA5C,aAAOkF,QAAP,GAAkBlF,OAAOmC,GAAP,GAAanC,OAAOkF,QAAP,GAAkBlF,OAAO8C,KAAtC,GAA8CyC,KAAKE,GAAL,CAASzF,OAAO8C,KAAhB,EAAuB9C,OAAOkF,QAA9B,CAAhE;AACD,KA7BoB;;;AA+BrB;;;;;;AAMAb,UArCqB,kBAqCdqB,SArCc,EAqCH9C,IArCG,EAqCG;AACtB,UAAMF,UAAU;AACdE,cAAMA;AADQ,OAAhB;;AAIA,UAAI8C,YAAY,CAAZ,KAAkB,CAAtB,EAAyB;AAAC;AACxBhD,gBAAQ4B,EAAR,GAAa,QAAb;AACAtE,eAAO2F,MAAP,CAAcD,SAAd,EAAyB,CAAzB,EAA4BhD,OAA5B;AACD,OAHD,MAGO;AACLA,gBAAQ4B,EAAR,GAAaoB,SAAb;AACA,gBAAQA,SAAR;AACE,eAAK,QAAL;AACE1F,mBAAO4F,IAAP,CAAYlD,OAAZ;AACA;AACF,eAAK,SAAL;AACE1C,mBAAO6F,OAAP,CAAenD,OAAf;AACA;AANJ;AAQD;AACF,KAxDoB;;;AA0DrB;AACAsC,UA3DqB,kBA2Dd3C,IA3Dc,EA2DRC,IA3DQ,EA2DF;AACjB,UAAIf,QAAQuE,QAAR,CAAiBzD,IAAjB,CAAJ,EAA4B;AAC1B;AACA,aAAK,IAAIX,IAAIW,IAAb,EAAmBX,IAAIY,IAAvB,EAA6BZ,GAA7B,EAAkC;AAChC8C,0BAAgBuB,aAAhB,CAA8B/F,OAAO0B,CAAP,CAA9B;AACD;;AAED,eAAO1B,OAAO2F,MAAP,CAActD,IAAd,EAAoBC,OAAOD,IAA3B,CAAP;AACD;AACD;AACArC,aAAO2F,MAAP,CAAc3F,OAAOkE,OAAP,CAAe7B,IAAf,CAAd,EAAoC,CAApC;;AAEA,aAAOmC,gBAAgBwB,qBAAhB,CAAsC3D,IAAtC,CAAP;AACD,KAxEoB;AA0ErB4D,mBA1EqB,2BA0ELC,QA1EK,EA0EK;AACxB,UAAI,CAACA,SAASlH,MAAd,EAAsB;AACpB,eAAO,CAAP;AACD;AACD,UAAIwE,MAAM2C,OAAOC,SAAjB;AACA,UAAIC,SAASF,OAAOG,SAApB;AACAJ,eAASzD,OAAT,CAAiB,UAACC,OAAD,EAAa;AAC5B,YAAIA,QAAQ7D,OAAR,CAAgB,CAAhB,EAAmB0H,YAAvB,EAAqC;AACnC;AACA/C,gBAAM+B,KAAKE,GAAL,CAASjC,GAAT,EAAcd,QAAQ7D,OAAR,CAAgB0E,MAAhB,GAAyBC,GAAvC,CAAN;AACA6C,mBAASd,KAAKC,GAAL,CAASa,MAAT,EAAiB3D,QAAQ7D,OAAR,CAAgB0E,MAAhB,GAAyBC,GAAzB,GAA+Bd,QAAQ7D,OAAR,CAAgB6E,WAAhB,CAA4B,IAA5B,CAAhD,CAAT;AACD;AACF,OAND;AAOA,aAAO6B,KAAKC,GAAL,CAAS,CAAT,EAAYa,SAAS7C,GAArB,CAAP;AACD;AAxFoB,GAAvB;;AA4FA,SAAOxD,MAAP;AACD,C;;;;;;;;;;;;;;;;;IChGoBwG,e;AAEnB,2BAAYC,SAAZ,EAAuBC,EAAvB,EAA2B;AAAA;;AACzB,SAAKC,QAAL,GAAiBF,UAAUG,GAAV,IAAiBH,UAAUG,GAAV,CAAc,UAAd,CAAlB,GAA+CH,UAAUzE,GAAV,CAAc,UAAd,CAA/C,GAA2E,IAA3F;AACA,SAAK6E,2BAAL,GAAmCtF,QAAQuF,OAAR,CAAgBC,KAAhB,KAA0B,CAA1B,IAA+BxF,QAAQuF,OAAR,CAAgBE,KAAhB,GAAwB,CAA1F;AACA,SAAKN,EAAL,GAAUA,EAAV;AACD;;;;kCAEaO,U,EAAYC,e,EAAiB;AACzCA,sBAAgBC,KAAhB,CAAsBF,UAAtB;AACA,aAAO,EAAP;AACD;;;kCAEavE,O,EAAS;AACrBA,cAAQ7D,OAAR,CAAgBmG,MAAhB;AACAtC,cAAQlD,KAAR,CAAc4H,QAAd;AACA,aAAO,EAAP;AACD;;;0CAEqBH,U,EAAYC,e,EAAiB;AACjD,UAAI,CAAC,KAAKP,QAAV,EAAoB;AAClB,eAAO,KAAKU,aAAL,CAAmBJ,UAAnB,EAA+BC,eAA/B,CAAP;AACD;;AAED,UAAI,KAAKL,2BAAT,EAAsC;AACpC,YAAMS,WAAW,KAAKZ,EAAL,CAAQa,KAAR,EAAjB;AACA;AACA,aAAKZ,QAAL,CAAca,KAAd,CAAoBP,UAApB,EAAgC,IAAhC,EAAsCC,eAAtC,EAAuD;AAAA,iBAAMI,SAASG,OAAT,EAAN;AAAA,SAAvD;;AAEA,eAAO,CAACH,SAASI,OAAV,CAAP;AACD;;AAED;AACA,aAAO,CAAC,KAAKf,QAAL,CAAca,KAAd,CAAoBP,UAApB,EAAgC,IAAhC,EAAsCC,eAAtC,CAAD,CAAP;AACD;;;0CAEqBxE,O,EAAS;AAC7B,UAAI,CAAC,KAAKiE,QAAV,EAAoB;AAClB,eAAO,KAAKZ,aAAL,CAAmBrD,OAAnB,CAAP;AACD;;AAED,UAAI,KAAKmE,2BAAT,EAAsC;AACpC,YAAMS,WAAW,KAAKZ,EAAL,CAAQa,KAAR,EAAjB;AACA,aAAKZ,QAAL,CAAcgB,KAAd,CAAoBjF,QAAQ7D,OAA5B,EAAqC,YAAM;AACzC6D,kBAAQlD,KAAR,CAAc4H,QAAd;AACA,iBAAOE,SAASG,OAAT,EAAP;AACD,SAHD;;AAKA,eAAO,CAACH,SAASI,OAAV,CAAP;AACD;;AAED,aAAO,CAAE,KAAKf,QAAL,CAAcgB,KAAd,CAAoBjF,QAAQ7D,OAA5B,CAAD,CAAuC+I,IAAvC,CAA4C;AAAA,eAAMlF,QAAQlD,KAAR,CAAc4H,QAAd,EAAN;AAAA,OAA5C,CAAD,CAAP;AACD;;;;;;kBApDkBZ,e;;;;;;;;;;;;;;;;;;;ACArB;;;;;;;;;;;IAWqBqB,Y;;;;;;;gCAEPhJ,O,EAAS;AACnB,UAAIiJ,oBAAJ;AAAA,UAAiBC,YAAjB;AAAA,UAAsBC,iBAAtB;AAAA,UAAgCC,iBAAhC;AACA;AACAF,YAAMxG,QAAQ1C,OAAR,CAAgB+F,SAAhB,CAA0BmD,GAAhC;;AAEAlJ,cAAQ+F,SAAR,CAAkBmD,GAAlB,GAAwB,UAAUG,IAAV,EAAgBhG,KAAhB,EAAuB;AAC7C,YAAIiG,OAAO,IAAX;AACA,YAAIC,OAAOD,KAAK,CAAL,CAAX;AACA,YAAI,EAAE,CAACC,IAAD,IAASA,KAAKC,QAAL,KAAkB,CAA3B,IAAgCD,KAAKC,QAAL,KAAkB,CAAlD,IAAuD,CAACD,KAAKE,KAA/D,CAAJ,EAA2E;AACzE,iBAAOP,IAAIQ,IAAJ,CAASJ,IAAT,EAAeD,IAAf,EAAqBhG,KAArB,CAAP;AACD;AACF,OAND;;AAQA;AACA+F,iBAAW,kBAACO,GAAD;AAAA,eAASA,OAAOA,IAAIC,QAAX,IAAuBD,IAAIE,QAA3B,IAAuCF,IAAIG,KAA3C,IAAoDH,IAAII,WAAjE;AAAA,OAAX;;AAEA,eAASC,QAAT,CAAkBV,IAAlB,EAAwBW,SAAxB,EAAmC5G,KAAnC,EAA0C;AACxC,YAAIkG,OAAOD,KAAK,CAAL,CAAX;;AADwC,iDAET;AAC7B3E,eAAK,CACH,WADG,EAEH,aAFG,EAGH,YAHG,CADwB;AAM7BuF,gBAAM,CACJ,YADI,EAEJ,aAFI,EAGJ,WAHI;AANuB,UAW7BD,SAX6B,CAFS;AAAA,YAEnCE,MAFmC;AAAA,YAE3BC,IAF2B;AAAA,YAErBC,QAFqB;;AAexC,YAAIjB,SAASG,IAAT,CAAJ,EAAoB;AAClB,cAAI7G,QAAQ4H,SAAR,CAAkBjH,KAAlB,CAAJ,EAA8B;AAC5B,mBAAOkG,KAAKS,QAAL,CAAcV,KAAKe,QAAL,EAAeX,IAAf,CAAoBJ,IAApB,CAAd,EAAyCjG,KAAzC,CAAP;AACD;AACD,iBAAQ+G,QAAQb,IAAT,GAAiBA,KAAKa,IAAL,CAAjB,GAA8Bb,KAAKK,QAAL,CAAcW,eAAd,CAA8BJ,MAA9B,CAArC;AACD,SALD,MAKO;AACL,cAAIzH,QAAQ4H,SAAR,CAAkBjH,KAAlB,CAAJ,EAA8B;AAC5BkG,iBAAKY,MAAL,IAAe9G,KAAf;AACD;AACD,iBAAOkG,KAAKY,MAAL,CAAP;AACD;AACF;;AAED,UAAI/J,OAAOoK,gBAAX,EAA6B;AAC3BrB,mBAAW,kBAACI,IAAD;AAAA,iBAAUnJ,OAAOoK,gBAAP,CAAwBjB,IAAxB,EAA8B,IAA9B,CAAV;AAAA,SAAX;AACAN,sBAAc,qBAACM,IAAD,EAAOlG,KAAP;AAAA,iBAAiBoH,WAAWpH,KAAX,CAAjB;AAAA,SAAd;AACD,OAHD,MAGO;AACL8F,mBAAW,kBAACI,IAAD;AAAA,iBAAUA,KAAKmB,YAAf;AAAA,SAAX;AACAzB,sBAAc,qBAACM,IAAD,EAAOlG,KAAP,EAAiB;AAC7B,cAAI6G,aAAJ;AAAA,cAAUS,eAAV;AAAA,cAAkBC,WAAlB;AAAA,cAAsBC,eAAtB;AAAA,cAA8BpB,cAA9B;AACA,cAAIqB,YAAY,sCAAsChK,MAAtD;AACA,cAAIiK,YAAY,IAAIC,MAAJ,CAAW,OAAOF,SAAP,GAAmB,iBAA9B,EAAiD,GAAjD,CAAhB;;AAEA,cAAI,CAACC,UAAUE,IAAV,CAAe5H,KAAf,CAAL,EAA4B;AAC1B,mBAAOoH,WAAWpH,KAAX,CAAP;AACD;;AAED;AACAoG,kBAAQF,KAAKE,KAAb;AACAS,iBAAOT,MAAMS,IAAb;AACAU,eAAKrB,KAAK2B,YAAV;AACAL,mBAASD,MAAMA,GAAGV,IAAlB;AACA,cAAIU,EAAJ,EAAQ;AACNA,eAAGV,IAAH,GAAUT,MAAMS,IAAhB;AACD;AACD;AACAT,gBAAMS,IAAN,GAAa7G,KAAb;AACAsH,mBAASlB,MAAM0B,SAAf;AACA1B,gBAAMS,IAAN,GAAaA,IAAb;AACA,cAAIW,MAAJ,EAAY;AACVD,eAAGV,IAAH,GAAUW,MAAV;AACD;AACD,iBAAOF,MAAP;AACD,SAzBD;AA0BD;;AAED,eAASS,eAAT,CAAyB7B,IAAzB,EAA+B8B,OAA/B,EAAwC;AACtC,YAAIC,aAAJ;AAAA,YAAUC,gBAAV;AAAA,YAAmBC,gBAAnB;AAAA,YAA4BC,wBAA5B;AAAA,YAA6CC,wBAA7C;AAAA,YAA8DC,sBAA9D;AAAA,YAA6EC,aAA7E;AAAA,YAAmFC,aAAnF;AAAA,YAAyFC,gBAAzF;AAAA,YAAkGC,gBAAlG;AAAA,YAA2GC,iBAA3G;AAAA,YAAqHC,iBAArH;;AAEA,YAAI7C,SAASG,IAAT,CAAJ,EAAoB;AAClB+B,iBAAO1B,SAASW,eAAT,CAAyB,EAAC2B,QAAQ,cAAT,EAAyBC,OAAO,aAAhC,GAA+Cd,OAA/C,CAAzB,CAAP;;AAEA,iBAAO;AACLC,kBAAMA,IADD;AAELc,qBAAS,CAFJ;AAGLC,oBAAQ,CAHH;AAILC,oBAAQ;AAJH,WAAP;AAMD;;AAED;;AAdsC,mDAmBlC;AACFH,iBAAO,CACL5C,KAAKgD,WADA,EAEL,MAFK,EAGL,OAHK,CADL;AAMFL,kBAAQ,CACN3C,KAAKiD,YADC,EAEN,KAFM,EAGN,QAHM;AANN,UAWFnB,OAXE,CAnBkC;;AAgBpCC,YAhBoC;AAiBpCM,YAjBoC;AAkBpCC,YAlBoC;;;AAgCtCF,wBAAgBxC,SAASI,IAAT,CAAhB;AACAyC,mBAAW/C,YAAYM,IAAZ,EAAkBoC,cAAc,YAAYC,IAA1B,CAAlB,KAAsD,CAAjE;AACAK,mBAAWhD,YAAYM,IAAZ,EAAkBoC,cAAc,YAAYE,IAA1B,CAAlB,KAAsD,CAAjE;AACAN,kBAAUtC,YAAYM,IAAZ,EAAkBoC,cAAc,WAAWC,IAAX,GAAkB,OAAhC,CAAlB,KAA+D,CAAzE;AACAJ,kBAAUvC,YAAYM,IAAZ,EAAkBoC,cAAc,WAAWE,IAAX,GAAkB,OAAhC,CAAlB,KAA+D,CAAzE;AACAJ,0BAAkBE,cAAc,WAAWC,IAAzB,CAAlB;AACAF,0BAAkBC,cAAc,WAAWE,IAAzB,CAAlB;;AAEA;AACA;AACA;AACA;AACAC,kBAAU7C,YAAYM,IAAZ,EAAkBkC,eAAlB,KAAsC,CAAhD;AACAM,kBAAU9C,YAAYM,IAAZ,EAAkBmC,eAAlB,KAAsC,CAAhD;;AAEA,eAAO;AACLJ,gBAAMA,IADD;AAELc,mBAASJ,WAAWC,QAFf;AAGLI,kBAAQd,UAAUC,OAHb;AAILc,kBAAQR,UAAUC;AAJb,SAAP;AAMD;;AAED,eAASU,cAAT,CAAwBlD,IAAxB,EAA8BU,SAA9B,EAAyCoB,OAAzC,EAAkD;AAChD,YAAIM,sBAAJ;AAAA,YAAmBhB,eAAnB;;AAEA,YAAI+B,eAAetB,gBAAgB7B,IAAhB,EAAsBU,SAAtB,CAAnB;;AAEA,YAAIyC,aAAapB,IAAb,GAAoB,CAAxB,EAA2B;AACzB,iBAAO;AACLA,kBAAMoB,aAAapB,IAAb,GAAoBoB,aAAaN,OAAjC,GAA2CM,aAAaL,MADzD;AAELM,mBAAOD,aAAapB,IAFf;AAGLsB,uBAAWF,aAAapB,IAAb,GAAoBoB,aAAaJ;AAHvC,YAILjB,OAJK,CAAP;AAKD;;AAED;AACAM,wBAAgBxC,SAASI,IAAT,CAAhB;AACAoB,iBAASgB,cAAc1B,SAAd,CAAT;;AAEA,YAAIU,SAAS,CAAT,IAAcA,WAAW,IAA7B,EAAmC;AACjCA,mBAASpB,KAAKE,KAAL,CAAWQ,SAAX,KAAyB,CAAlC;AACD;;AAED;AACAU,iBAASF,WAAWE,MAAX,KAAsB,CAA/B;;AAEA,eAAO;AACLW,gBAAMX,SAAS+B,aAAaN,OAAtB,GAAgCM,aAAaL,MAD9C;AAELM,iBAAOhC,MAFF;AAGLiC,qBAAWjC,SAAS+B,aAAaN,OAAtB,GAAgCM,aAAaL,MAA7C,GAAsDK,aAAaJ;AAHzE,UAILjB,OAJK,CAAP;AAKD;;AAED;AACA,aAAO3I,QAAQkB,OAAR,CAAgB;AACrBiJ,cADqB,kBACdC,OADc,EACL;AACd,cAAIC,QAAJ,EAAcxD,IAAd,EAAoB1G,CAApB,EAAuBmK,CAAvB,EAA0BjM,MAA1B,EAAkCkM,GAAlC,EAAuC3D,IAAvC;AACAA,iBAAO,IAAP;AACAC,iBAAOD,KAAK,CAAL,CAAP;AACAvI,mBAASuI,KAAKvI,MAAL,EAAT;AACAgM,qBAAWhM,OAAOmM,QAAP,EAAX;AACA,cAAIH,SAAS,CAAT,MAAgBxD,IAApB,EAA0B;AACxB,mBAAOxI,OAAOqD,OAAP,CAAe0I,OAAf,CAAP;AACD,WAFD,MAEO;AACL,iBAAKjK,IAAImK,IAAI,CAAR,EAAWC,MAAMF,SAAS5M,MAAT,GAAkB,CAAxC,EAA2C,KAAK8M,GAAL,GAAWD,KAAKC,GAAhB,GAAsBD,KAAKC,GAAtE,EAA2EpK,IAAI,KAAKoK,GAAL,GAAW,EAAED,CAAb,GAAiB,EAAEA,CAAlG,EAAqG;AACnG,kBAAID,SAASlK,CAAT,MAAgB0G,IAApB,EAA0B;AACxB7G,wBAAQ1C,OAAR,CAAgB+M,SAASlK,IAAI,CAAb,CAAhB,EAAiCyF,KAAjC,CAAuCwE,OAAvC;AACA;AACD;AACF;AACD,kBAAM,IAAI9L,KAAJ,CAAU,2BAA2BuI,KAAK4D,SAA1C,CAAN;AACD;AACF,SAlBoB;AAmBrBjB,cAnBqB,kBAmBb7I,KAnBa,EAmBP;AACZ,cAAIiG,IAAJ;AACAA,iBAAO,IAAP;AACA,cAAI5G,QAAQ4H,SAAR,CAAkBjH,KAAlB,CAAJ,EAA8B;AAC5B,gBAAIX,QAAQuE,QAAR,CAAiB5D,KAAjB,CAAJ,EAA6B;AAC3BA,sBAAQA,QAAQ,IAAhB;AACD;AACD,mBAAO6F,IAAIQ,IAAJ,CAASJ,IAAT,EAAe,QAAf,EAAyBjG,KAAzB,CAAP;AACD,WALD,MAKO;AACL,mBAAOoJ,eAAe,KAAK,CAAL,CAAf,EAAwB,QAAxB,EAAkC,MAAlC,CAAP;AACD;AACF,SA9BoB;AA+BrB5H,mBA/BqB,uBA+BTuI,MA/BS,EA+BD;AAClB,iBAAOX,eAAe,KAAK,CAAL,CAAf,EAAwB,QAAxB,EAAkCW,SAAS,WAAT,GAAuB,OAAzD,CAAP;AACD,SAjCoB;AAkCrBC,kBAlCqB,sBAkCVD,MAlCU,EAkCF;AACjB,iBAAOX,eAAe,KAAK,CAAL,CAAf,EAAwB,OAAxB,EAAiCW,SAAS,WAAT,GAAuB,OAAxD,CAAP;AACD,SApCoB;;;AAsCrB;;;AAGA1I,cAzCqB,kBAyCdrB,KAzCc,EAyCP;AACZ,cAAIiK,gBAAJ;AAAA,cAAaC,YAAb;AACA,cAAIjE,OAAO,IAAX;AACA,cAAIkE,MAAM;AACR7I,iBAAK,CADG;AAERuF,kBAAM;AAFE,WAAV;AAIA,cAAIX,OAAOD,KAAK,CAAL,CAAX;AACA,cAAImE,MAAMlE,QAAQA,KAAKmE,aAAvB;;AAEA,cAAIC,UAAUxN,MAAd,EAAsB;AACpB,gBAAIkD,UAAUuK,SAAd,EAAyB;AACvB,qBAAOtE,IAAP;AACD;AACD;AACA,kBAAM,IAAItI,KAAJ,CAAU,yCAAV,CAAN;AACD;;AAED,cAAI,CAACyM,GAAL,EAAU;AACR;AACD;;AAEDH,oBAAUG,IAAIlD,eAAd;;AAEA;;AAEA,cAAIhB,KAAKsE,qBAAL,IAA8B,IAAlC,EAAwC;AACtCL,kBAAMjE,KAAKsE,qBAAL,EAAN;AACD;;AAEDN,gBAAME,IAAIK,WAAJ,IAAmBL,IAAIM,YAA7B;;AAEA,iBAAO;AACLpJ,iBAAK6I,IAAI7I,GAAJ,IAAW4I,IAAIS,WAAJ,IAAmBV,QAAQW,SAAtC,KAAoDX,QAAQY,SAAR,IAAqB,CAAzE,CADA;AAELhE,kBAAMsD,IAAItD,IAAJ,IAAYqD,IAAIY,WAAJ,IAAmBb,QAAQc,UAAvC,KAAsDd,QAAQe,UAAR,IAAsB,CAA5E;AAFD,WAAP;AAID,SA7EoB;AA8ErBJ,iBA9EqB,qBA8EX5K,KA9EW,EA8EJ;AACf,iBAAO2G,SAAS,IAAT,EAAe,KAAf,EAAsB3G,KAAtB,CAAP;AACD,SAhFoB;AAiFrB+K,kBAjFqB,sBAiFV/K,KAjFU,EAiFH;AAChB,iBAAO2G,SAAS,IAAT,EAAe,MAAf,EAAuB3G,KAAvB,CAAP;AACD;AAnFoB,OAAhB,EAoFJ,UAACA,KAAD,EAAQiL,GAAR,EAAgB;AACjB,YAAI,CAACtO,QAAQ+F,SAAR,CAAkBuI,GAAlB,CAAL,EAA6B;AAC3B,iBAAOtO,QAAQ+F,SAAR,CAAkBuI,GAAlB,IAAyBjL,KAAhC;AACD;AACF,OAxFM,CAAP;AAyFD;;;;;;kBA/PkB2F,Y;;;;;;;;;;;;kBCTGuF,Q;;AAFxB;;;;;;AAEe,SAASA,QAAT,CAAkB5I,eAAlB,EAAmCxE,MAAnC,EAA2CnB,OAA3C,EAAoDwO,kBAApD,EAAwEC,UAAxE,EAAoFrC,OAApF,EAA6F;AAC1G,MAAIsC,aAAa,IAAjB;AACA,MAAIC,gBAAgB,IAApB;AACA,MAAMzN,WAAWsN,sBAAsBA,mBAAmBtN,QAAzC,GAAoDsN,mBAAmBtN,QAAvE,GAAkFwB,QAAQ1C,OAAR,CAAgBI,MAAhB,CAAnG;AACA,MAAMwO,YAAYJ,sBAAsBA,mBAAmBI,SAAzC,GAAqDJ,mBAAmBI,SAAxE,GAAoFhB,SAAtG;AACA,MAAMjN,QAAQ6N,sBAAsBA,mBAAmB7N,KAAzC,GAAiD6N,mBAAmB7N,KAApE,GAA4E8N,UAA1F;;AAEAvN,WAASgI,GAAT,CAAa;AACX,uBAAmB,MADR;AAEX,kBAAc,MAFH;AAGX,eAAW;AAHA,GAAb;;AAMA,WAAS2F,aAAT,GAAyB;AACvB,WAAO3N,SAAS2D,WAAT,KAAyBuH,OAAhC,CADuB,CACkB;AAC1C;;AAED1J,UAAQC,MAAR,CAAezB,QAAf,EAAyB;AACvBU,YADuB,sBACZ;AACT,aAAOjB,KAAP;AACD,KAHsB;AAKvBmO,yBALuB,iCAKDC,QALC,EAKS;AAC9BL,mBAAa,sBAAYK,QAAZ,CAAb;AACAJ,sBAAgB,sBAAYI,QAAZ,CAAhB;AACA/O,cAAQ6M,MAAR,CAAe6B,UAAf;AACA1O,cAAQsI,KAAR,CAAcqG,aAAd;AACD,KAVsB;AAYvBK,uBAZuB,iCAYD;AACpB,UAAIJ,aAAaA,cAAc1N,QAA/B,EAAyC;AACvCA,iBAASgI,GAAT,CAAa,QAAb,EAAuB9I,OAAOoK,gBAAP,CAAwBoE,UAAU,CAAV,CAAxB,EAAsC1C,MAA7D;AACD;AACF,KAhBsB;AAkBvB+C,iBAlBuB,2BAkBP;AACd,UAAIC,eAAehO,SAAS,CAAT,EAAYgO,YAA/B;AACAA,qBAAeA,gBAAgB,IAAhB,GAAuBA,YAAvB,GAAsChO,SAAS,CAAT,EAAY0I,QAAZ,CAAqBW,eAArB,CAAqC2E,YAA1F;AACA,aAAOA,eAAeP,cAAczC,MAAd,EAAtB;AACD,KAtBsB;AAwBvBpH,cAxBuB,wBAwBV;AACX,aAAO4J,WAAWxC,MAAX,EAAP;AACD,KA1BsB;AA4BvBlH,oBA5BuB,8BA4BJ;AACjB,aAAO9D,SAAS+M,SAAT,KAAuB/M,SAAS2D,WAAT,EAA9B;AACD,KA9BsB;AAgCvBE,iBAhCuB,2BAgCP;AACd,aAAO7D,SAAS+M,SAAT,EAAP;AACD,KAlCsB;AAoCvBzF,iBApCuB,yBAoCT2G,CApCS,EAoCNC,OApCM,EAoCG;AACxB,aAAOzJ,gBAAgB6C,aAAhB,CAA8B2G,CAA9B,EAAiCC,WAAWV,UAA5C,CAAP;AACD,KAtCsB;AAwCvBW,yBAxCuB,iCAwCDF,CAxCC,EAwCEC,OAxCF,EAwCW;AAChC,aAAOzJ,gBAAgB0J,qBAAhB,CAAsCF,CAAtC,EAAyCC,WAAWV,UAApD,CAAP;AACD,KA1CsB;AA4CvBY,oBA5CuB,8BA4CJ;AACjB,aAAO,CAACnO,OAAOoC,GAAR,IAAerC,SAAS+N,aAAT,KAA2B/N,SAAS8D,gBAAT,KAA8B6J,eAA/E;AACD,KA9CsB;AAgDvBU,cAhDuB,wBAgDV;AACX;AACA,UAAIC,UAAU,CAAd;AACA,UAAIC,gBAAgB,CAApB;AACA,UAAI7K,aAAa,CAAjB;AACA,UAAI8K,mBAAmBxO,SAAS+N,aAAT,KAA2B/N,SAAS8D,gBAAT,EAA3B,GAAyD6J,eAAhF;;AAEA,WAAK,IAAIhM,IAAI1B,OAAOhB,MAAP,GAAgB,CAA7B,EAAgC0C,KAAK,CAArC,EAAwCA,GAAxC,EAA6C;AAC3C+B,qBAAazD,OAAO0B,CAAP,EAAU7C,OAAV,CAAkB6E,WAAlB,CAA8B,IAA9B,CAAb;AACA,YAAI4K,gBAAgB7K,UAAhB,GAA6B8K,gBAAjC,EAAmD;AACjD;AACD;AACDf,sBAAcgB,KAAd,CAAoBC,GAApB,CAAwBzO,OAAO0B,CAAP,CAAxB;AACA4M,yBAAiB7K,UAAjB;AACA4K;AACD;;AAED,UAAIA,UAAU,CAAd,EAAiB;AACfrO,eAAOoC,GAAP,GAAa,KAAb;AACApC,eAAOgF,MAAP,CAAchF,OAAOhB,MAAP,GAAgBqP,OAA9B,EAAuCrO,OAAOhB,MAA9C;AACAgB,eAAOiF,IAAP,IAAeoJ,OAAf;AACAtO,iBAAS2O,aAAT;AACD;AACF,KAvEsB;AAyEvBC,iBAzEuB,2BAyEP;AACd,aAAO,CAAC3O,OAAOmC,GAAR,IAAgBpC,SAAS4D,UAAT,KAAwB5D,SAAS6D,aAAT,KAA2B8J,eAA1E;AACD,KA3EsB;AA6EvBkB,WA7EuB,qBA6Eb;AACR;AACA,UAAIP,UAAU,CAAd;AACA,UAAIC,gBAAgB,CAApB;AACA,UAAI7K,aAAa,CAAjB;AACA,UAAI8K,mBAAmBxO,SAAS6D,aAAT,KAA2B7D,SAAS4D,UAAT,EAA3B,GAAmD+J,eAA1E;;AAEA,WAAK,IAAIhM,IAAI,CAAb,EAAgBA,IAAI1B,OAAOhB,MAA3B,EAAmC0C,GAAnC,EAAwC;AACtC+B,qBAAazD,OAAO0B,CAAP,EAAU7C,OAAV,CAAkB6E,WAAlB,CAA8B,IAA9B,CAAb;AACA,YAAI4K,gBAAgB7K,UAAhB,GAA6B8K,gBAAjC,EAAmD;AACjD;AACD;AACDhB,mBAAWiB,KAAX,CAAiBC,GAAjB,CAAqBzO,OAAO0B,CAAP,CAArB;AACA4M,yBAAiB7K,UAAjB;AACA4K;AACD;;AAED,UAAIA,UAAU,CAAd,EAAiB;AACf;AACA;AACAd,mBAAWxC,MAAX,CAAkBwC,WAAWxC,MAAX,KAAsBuD,aAAxC;AACAtO,eAAOmC,GAAP,GAAa,KAAb;AACAnC,eAAOgF,MAAP,CAAc,CAAd,EAAiBqJ,OAAjB;AACArO,eAAO8C,KAAP,IAAgBuL,OAAhB;AACD;AACF,KAtGsB;AAwGvBK,iBAxGuB,2BAwGP;AACd,UAAI,CAAC1O,OAAOhB,MAAZ,EAAoB;AAClB;AACD;;AAED;AACA,UAAI6P,mBAAmBtB,WAAWiB,KAAX,CAAiBM,MAAjB,CAAwB,UAACC,IAAD,EAAOnM,IAAP;AAAA,eAAgBmM,QAAQnM,KAAKC,KAAL,GAAa7C,OAAO8C,KAApB,GAA4BF,KAAKmI,MAAjC,GAA0C,CAAlD,CAAhB;AAAA,OAAxB,EAA8F,CAA9F,CAAvB;AACA,UAAIiE,sBAAsBxB,cAAcgB,KAAd,CAAoBM,MAApB,CAA2B,UAACC,IAAD,EAAOnM,IAAP;AAAA,eAAgBmM,QAAQnM,KAAKC,KAAL,IAAc7C,OAAOiF,IAArB,GAA4BrC,KAAKmI,MAAjC,GAA0C,CAAlD,CAAhB;AAAA,OAA3B,EAAiG,CAAjG,CAA1B;;AAEA;AACA,UAAIkE,qBAAqBjP,OAAO8O,MAAP,CAAc,UAACC,IAAD,EAAOnM,IAAP;AAAA,eAAgBmM,OAAOnM,KAAK/D,OAAL,CAAa6E,WAAb,CAAyB,IAAzB,CAAvB;AAAA,OAAd,EAAqE,CAArE,CAAzB;AACA,UAAIwL,oBAAoB,CAACD,qBAAqBJ,gBAArB,GAAwCG,mBAAzC,KAAiEhP,OAAOmF,QAAP,GAAkBnF,OAAOkF,QAAzB,GAAoC,CAArG,CAAxB;;AAEA;AACA,UAAIiK,mBAAmBnP,OAAOoF,YAAP,KAAwB,IAAxB,IAAgCpF,OAAOkF,QAAP,GAAkBlF,OAAOoF,YAAhF;AACA,UAAIgK,sBAAsBpP,OAAOqF,YAAP,KAAwB,IAAxB,IAAgCrF,OAAOmF,QAAP,GAAkBnF,OAAOqF,YAAnF;AACA,UAAIgK,sBAAsBF,mBAAmB,CAACnP,OAAOkF,QAAP,GAAkBlF,OAAOoF,YAA1B,IAA0C8J,iBAA7D,GAAiF,CAA3G;AACA,UAAII,yBAAyBF,sBAAsB,CAACpP,OAAOqF,YAAP,GAAsBrF,OAAOmF,QAA9B,IAA0C+J,iBAAhE,GAAoF,CAAjH;;AAEA;AACA3B,iBAAWxC,MAAX,CAAkB8D,mBAAmBQ,mBAArC;AACA7B,oBAAczC,MAAd,CAAqBiE,sBAAsBM,sBAA3C;AACD,KA9HsB;AAgIvBC,mCAhIuB,2CAgISC,mBAhIT,EAgI8B;AACnD;AACA,UAAIxP,OAAOoF,YAAP,KAAwB,IAAxB,IAAgCpF,OAAOkF,QAAP,GAAkBlF,OAAOoF,YAA7D,EAA2E;AACzE,YAAIqK,OAAOlC,WAAWxC,MAAX,KAAsByE,mBAAjC;AACAzP,iBAAS+M,SAAT,CAAmB/M,SAAS+M,SAAT,KAAuB2C,IAA1C;AACD;AACF,KAtIsB;AAwIvBC,+BAxIuB,uCAwIKC,OAxIL,EAwIc;AACnC,UAAI,CAACA,QAAQC,SAAR,CAAkB5Q,MAAvB,EACE;AACF,UAAM+L,SAAS/K,OAAOiG,eAAP,CAAuB0J,QAAQC,SAA/B,CAAf;AACA,UAAMC,gBAAgBtC,WAAWxC,MAAX,KAAsBA,MAA5C;AACA,UAAI8E,iBAAiB,CAArB,EAAwB;AACtBtC,mBAAWxC,MAAX,CAAkB8E,aAAlB;AACD,OAFD,MAGK;AACHtC,mBAAWxC,MAAX,CAAkB,CAAlB;AACAhL,iBAAS+M,SAAT,CAAmB/M,SAAS+M,SAAT,KAAuB+C,aAA1C;AACD;AACF,KApJsB;AAsJvBC,mBAtJuB,6BAsJL;AAChBvC,iBAAWxC,MAAX,CAAkB,CAAlB;AACAwC,iBAAWiB,KAAX,CAAiBuB,KAAjB;AACD,KAzJsB;AA2JvBC,sBA3JuB,gCA2JF;AACnBxC,oBAAczC,MAAd,CAAqB,CAArB;AACAyC,oBAAcgB,KAAd,CAAoBuB,KAApB;AACD,KA9JsB;AAgKvBE,cAhKuB,sBAgKZrN,IAhKY,EAgKN;AACf2K,iBAAWiB,KAAX,CAAiBxJ,MAAjB,CAAwBpC,IAAxB;AACA4K,oBAAcgB,KAAd,CAAoBxJ,MAApB,CAA2BpC,IAA3B;AACA,aAAO5C,OAAOgF,MAAP,CAAcpC,IAAd,CAAP;AACD;AApKsB,GAAzB;;AAuKA,SAAO7C,QAAP;AACD,C;;;;;;;;;;;;kBCnJuBmQ,O;AAxCxB,SAASC,KAAT,GAAiB;AACf,MAAM3B,QAAQ1M,OAAO4C,MAAP,CAAcC,MAAMC,SAApB,CAAd;;AAEArD,UAAQC,MAAR,CAAegN,KAAf,EAAsB;AACpBC,OADoB,eAChB7L,IADgB,EACV;AACR,WAAK,IAAIlB,IAAI8M,MAAMxP,MAAN,GAAe,CAA5B,EAA+B0C,KAAK,CAApC,EAAuCA,GAAvC,EAA4C;AAC1C,YAAI8M,MAAM9M,CAAN,EAASmB,KAAT,KAAmBD,KAAKpD,KAAL,CAAW4Q,MAAlC,EAA0C;AACxC5B,gBAAM9M,CAAN,EAASqJ,MAAT,GAAkBnI,KAAK/D,OAAL,CAAa6E,WAAb,EAAlB;AACA;AACD;AACF;AACD8K,YAAM5I,IAAN,CAAW;AACT/C,eAAOD,KAAKpD,KAAL,CAAW4Q,MADT;AAETrF,gBAAQnI,KAAK/D,OAAL,CAAa6E,WAAb;AAFC,OAAX;AAIA8K,YAAM6B,IAAN,CAAW,UAACC,CAAD,EAAIC,CAAJ;AAAA,eAAYD,EAAEzN,KAAF,GAAU0N,EAAE1N,KAAb,GAAsB,CAAC,CAAvB,GAA6ByN,EAAEzN,KAAF,GAAU0N,EAAE1N,KAAb,GAAsB,CAAtB,GAA0B,CAAjE;AAAA,OAAX;AACD,KAbmB;AAepBmC,UAfoB,kBAebpC,IAfa,EAeP;AACX,WAAK,IAAIlB,IAAI8M,MAAMxP,MAAN,GAAe,CAA5B,EAA+B0C,KAAK,CAApC,EAAuCA,GAAvC,EAA4C;AAC1C,YAAI8M,MAAM9M,CAAN,EAASmB,KAAT,KAAmBD,KAAKpD,KAAL,CAAW4Q,MAAlC,EAA0C;AACxC5B,gBAAM7I,MAAN,CAAajE,CAAb,EAAgB,CAAhB;AACA;AACD;AACF;AACD,WAAK,IAAIA,KAAI8M,MAAMxP,MAAN,GAAe,CAA5B,EAA+B0C,MAAK,CAApC,EAAuCA,IAAvC,EAA4C;AAC1C,YAAI8M,MAAM9M,EAAN,EAASmB,KAAT,GAAiBD,KAAKpD,KAAL,CAAW4Q,MAAhC,EAAwC;AACtC5B,gBAAM9M,EAAN,EAASmB,KAAT;AACD;AACF;AACF,KA3BmB;AA6BpBkN,SA7BoB,mBA6BZ;AACNvB,YAAMxP,MAAN,GAAe,CAAf;AACD;AA/BmB,GAAtB;;AAkCA,SAAOwP,KAAP;AACD;;AAEc,SAAS0B,OAAT,CAAiBtC,QAAjB,EAA2B;AACxC,MAAIpE,eAAJ;;AAEA,UAAQoE,SAAS4C,OAAT,CAAiBC,WAAjB,EAAR;AACE,SAAK,IAAL;AACE,YAAM,IAAI5Q,KAAJ,4CAAmD+N,SAAS4C,OAA5D,8BAA4F5C,SAAS5B,SAArG,CAAN;AACF,SAAK,IAAL;AACE,UAAI0E,QAAQnP,QAAQ1C,OAAR,CAAgB,8CAAhB,CAAZ;AACA2K,eAASkH,MAAMC,IAAN,CAAW,IAAX,CAAT;AACA;AACF,SAAK,IAAL;AACEnH,eAASjI,QAAQ1C,OAAR,CAAgB,WAAhB,CAAT;AACA;AACF;AACE2K,eAASjI,QAAQ1C,OAAR,CAAgB,aAAhB,CAAT;AAXJ;;AAcA2K,SAAOgF,KAAP,GAAe,IAAI2B,KAAJ,EAAf;;AAEA,SAAO3G,MAAP;AACD,C;;;;;;;;;;AC5DD;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;;;AAEAjI,QAAQqP,MAAR,CAAe,WAAf,EAA4B,EAA5B,EAEGC,OAFH,CAEW,cAFX,EAE2B;AAAA,SAAM,4BAAN;AAAA,CAF3B,EAGGC,GAHH,CAGO,CAAC,cAAD,EAAiB,UAACC,YAAD;AAAA,SACpB,CAAC9R,OAAO+R,MAAR,GAAiBD,aAAaE,WAAb,CAAyB1P,QAAQ1C,OAAjC,CAAjB,GAA6D,IADzC;AAAA,CAAjB,CAHP,EAOGqS,SAPH,CAOa,kBAPb,EAOiC,YAAY;AACzC,SAAO;AACLC,cAAU,GADL;AAELC,gBAAY,CACV,QADU,EAEV,UAFU,EAGV,UAAU5R,KAAV,EAAiBX,OAAjB,EAA0B;AAAA;;AACxB,WAAK4O,SAAL,GAAiB5O,OAAjB;AACA,WAAKkB,QAAL,GAAgBlB,OAAhB;AACA,WAAKW,KAAL,GAAaA,KAAb;;AAEA+B,cAAQkB,OAAR,CAAgB5D,QAAQ+M,QAAR,EAAhB,EAAqC,iBAAS;AAC5C,YAAIyF,MAAMb,OAAN,CAAcC,WAAd,OAAgC,OAApC,EAA6C;AAC3C,gBAAK1Q,QAAL,GAAgBwB,QAAQ1C,OAAR,CAAgBwS,KAAhB,CAAhB;AACD;AACF,OAJD;;AAMA,aAAO,IAAP;AACD,KAfS;AAFP,GAAP;AAoBD,CA5BH,EA8BGH,SA9BH,CA8Ba,UA9Bb,EA8ByB,CACrB,MADqB,EAErB,WAFqB,EAGrB,YAHqB,EAIrB,UAJqB,EAKrB,IALqB,EAMrB,QANqB,EAOrB,UAAUhS,OAAV,EAAmBuH,SAAnB,EAA8B6G,UAA9B,EAA0CgE,QAA1C,EAAoD5K,EAApD,EAAwDtG,MAAxD,EAAgE;;AAE9D,SAAO;AACLmR,aAAS,CAAC,oBAAD,CADJ;AAELJ,cAAU,GAFL;AAGLK,gBAAY,SAHP;AAILC,cAAU,IAJL;AAKLC,cAAU,IALL;AAMLC,UAAMA;AAND,GAAP;;AASA,WAASA,IAAT,CAActR,MAAd,EAAsBxB,OAAtB,EAA+BsB,KAA/B,EAAsCyR,WAAtC,EAAmDC,MAAnD,EAA2D;AACzD,QAAM9S,QAAQoB,MAAM2R,QAAN,CAAe/S,KAAf,CAAqB,qCAArB,CAAd;AACA,QAAI,CAACA,KAAL,EAAY;AACV,YAAM,IAAIc,KAAJ,CAAU,uEAAuEM,MAAM2R,QAA7E,GAAwF,IAAlG,CAAN;AACD;;AAED,aAASC,gBAAT,CAA0B7P,KAA1B,EAAiC8P,YAAjC,EAA+C;AAC7C,UAAIxI,SAASpJ,OAAO8B,KAAP,EAAc7B,MAAd,CAAb;AACA,aAAO4R,MAAMzI,MAAN,IAAgBwI,YAAhB,GAA+BxI,MAAtC;AACD;;AAED,QAAM0I,aAAa,CAAnB;AACA,QAAMC,iBAAiB,EAAvB;AACA,QAAMC,cAAc,GAApB;AACA,QAAMC,kBAAkB,GAAxB;;AAEA,QAAIC,aAAa,IAAjB;AACA,QAAMC,WAAWxT,MAAM,CAAN,CAAjB;AACA,QAAMyT,iBAAiBzT,MAAM,CAAN,CAAvB;AACA,QAAMsO,qBAAqBuE,YAAY,CAAZ,CAA3B;AACA,QAAMnN,aAAac,KAAKC,GAAL,CAAS0M,UAAT,EAAqBH,iBAAiB5R,MAAMsE,UAAvB,EAAmC0N,cAAnC,CAArB,CAAnB;AACA,QAAMlH,UAAU1F,KAAKC,GAAL,CAAS4M,WAAT,EAAsBL,iBAAiB5R,MAAM8K,OAAvB,EAAgCoH,eAAhC,CAAtB,CAAhB;AACA,QAAItN,aAAagN,iBAAiB5R,MAAM4E,UAAvB,EAAmC,CAAnC,CAAjB;AACA,QAAI0N,YAAY,CAAhB,CAvByD,CAuBvC;AAClB,QAAIC,UAAU,EAAd;;AAEA,QAAIlO,kBAAkB,8BAAoBiC,SAApB,EAA+BC,EAA/B,CAAtB;AACA,QAAI1G,SAAS,qBAAiBwE,eAAjB,EAAkCC,UAAlC,CAAb;AACA,QAAI1E,WAAW,uBAAayE,eAAb,EAA8BxE,MAA9B,EAAsCnB,OAAtC,EAA+CwO,kBAA/C,EAAmEC,UAAnE,EAA+ErC,OAA/E,CAAf;AACA,QAAInK,UAAU,sBAAYf,QAAZ,EAAsBC,MAAtB,EAA8BC,YAA9B,EAA4CC,MAA5C,EAAoDC,KAApD,EAA2DC,MAA3D,EAAmEvB,OAAnE,EAA4EwB,MAA5E,CAAd;;AAEA,QAAIgN,kBAAJ,EAAwB;AACtBA,yBAAmBvM,OAAnB,GAA6BA,OAA7B;AACD;;AAED,QAAI6R,oBAAoB,SAApBA,iBAAoB;AAAA,aAAMpR,QAAQqR,QAAR,CAAiBN,UAAjB,KAAgC/Q,QAAQgB,UAAR,CAAmB+P,WAAWtQ,GAA9B,CAAtC;AAAA,KAAxB;AACAsQ,iBAAalS,OAAOoS,cAAP,EAAuBnS,MAAvB,CAAb,CApCyD,CAoCZ;AAC7C,QAAI,CAACsS,mBAAL,EAA0B;AACxBL,mBAAa7L,UAAUzE,GAAV,CAAcwQ,cAAd,CAAb,CADwB,CACoB;AAC5C,UAAI,CAACG,mBAAL,EAA0B;AACxB,cAAM,IAAI9S,KAAJ,CAAU2S,iBAAiB,4BAA3B,CAAN;AACD;AACF;;AAED,QAAIK,aAAa,EAAjB;;AAEA,aAAS9Q,cAAT,CAAwBuQ,UAAxB,EAAoCQ,QAApC,EAA8CC,YAA9C,EAA4D;AAC1D,UAAIC,aAAalR,OAAOmR,wBAAP,CAAgCX,UAAhC,EAA4CQ,QAA5C,CAAjB;AACA,UAAI,CAACE,UAAD,IAAgB,CAACA,WAAW/Q,GAAZ,IAAmB,CAAC+Q,WAAWhR,GAAnD,EAAyD;AACvDF,eAAOC,cAAP,CAAsBuQ,UAAtB,EAAkCQ,QAAlC,EAA4C;AAC1C7Q,eAAK,aAACC,KAAD,EAAW;AACd2Q,uBAAWC,QAAX,IAAuB5Q,KAAvB;AACAoP,qBAAS,YAAM;AACbtR,qBAAO+S,YAAP,IAAuB7Q,KAAvB;AACA,kBAAI,CAACwQ,QAAQ1T,MAAb,EAAqB;AACnB,oBAAIwQ,sBAAsBzP,SAAS4D,UAAT,EAA1B;AACA5D,yBAAS2O,aAAT;AACA,oBAAIoE,aAAa,UAAjB,EAA6B;AAC3B/S,2BAASwP,+BAAT,CAAyCC,mBAAzC;AACD;AACF;AACF,aATD;AAUD,WAbyC;AAc1CxN,eAAK;AAAA,mBAAM6Q,WAAWC,QAAX,CAAN;AAAA;AAdqC,SAA5C;AAgBD;AACF;;AAED/Q,mBAAeuQ,UAAf,EAA2B,UAA3B,EAAuC,cAAvC;AACAvQ,mBAAeuQ,UAAf,EAA2B,UAA3B,EAAuC,cAAvC;;AAEA,QAAMY,YAAaZ,WAAWtQ,GAAX,CAAehD,MAAf,KAA0B,CAA3B,GAAgC,UAACmU,OAAD;AAAA,aAAab,WAAWtQ,GAAX,CAAehC,OAAOiF,IAAtB,EAA4BR,UAA5B,EAAwC0O,OAAxC,CAAb;AAAA,KAAhC,GACd,UAACA,OAAD,EAAa;AACfb,iBAAWtQ,GAAX,CAAe;AACba,eAAO7C,OAAOiF,IADD;AAEbjC,gBAAQhD,OAAOhB,MAAP,GAAgBgB,OAAOA,OAAOhB,MAAP,GAAgB,CAAvB,EAA0B4D,IAA1C,GAAiD,KAAK,CAFjD;AAGbwQ,eAAO3O;AAHM,OAAf,EAIG0O,OAJH;AAKD,KAPD;;AASA,QAAME,gBAAiBf,WAAWtQ,GAAX,CAAehD,MAAf,KAA0B,CAA3B,GAAgC,UAACmU,OAAD;AAAA,aAAab,WAAWtQ,GAAX,CAAehC,OAAO8C,KAAP,GAAe2B,UAA9B,EAA0CA,UAA1C,EAAsD0O,OAAtD,CAAb;AAAA,KAAhC,GAClB,UAACA,OAAD,EAAa;AACfb,iBAAWtQ,GAAX,CAAe;AACba,eAAO7C,OAAO8C,KAAP,GAAe2B,UADT;AAEbxB,iBAASjD,OAAOhB,MAAP,GAAgBgB,OAAO,CAAP,EAAU4C,IAA1B,GAAiC,KAAK,CAFlC;AAGbwQ,eAAO3O;AAHM,OAAf,EAIG0O,OAJH;AAKD,KAPD;;AASA;;;;;;;AAOAtB,WAAO,UAACyB,KAAD,EAAQ9T,KAAR,EAAkB;AACvBO,eAAS4N,qBAAT,CAA+B2F,MAAM,CAAN,CAA/B;AACA;AACA;AACA;AACA9T,YAAM4H,QAAN;AACAkM,YAAMtO,MAAN;AACD,KAPD;;AASA3E,WAAOkT,GAAP,CAAW,UAAX,EAAuB,YAAM;AAC3BC;AACAzT,eAAS0T,MAAT,CAAgB,YAAhB,EAA8BC,YAA9B;AACD,KAHD;;AAKA3T,aAAS4B,IAAT,CAAc,YAAd,EAA4B+R,YAA5B;;AAEApC,aAAS,YAAM;AACbvR,eAAS8N,mBAAT;AACA3N;AACD,KAHD;;AAKA;;AAEA,aAASyT,SAAT,CAAmBC,GAAnB,EAAwB;AACtB,aAAQA,OAAOA,QAAQnB,SAAhB,IAA8BpS,OAAOwT,WAA5C;AACD;;AAED,aAASC,UAAT,GAAsB;AACpB/T,eAAS4B,IAAT,CAAc,QAAd,EAAwBoS,sBAAxB;AACAhU,eAAS4B,IAAT,CAAc,QAAd,EAAwBoS,sBAAxB;AACD;;AAED,aAASP,YAAT,GAAwB;AACtBzT,eAAS0T,MAAT,CAAgB,QAAhB,EAA0BM,sBAA1B;AACAhU,eAAS0T,MAAT,CAAgB,QAAhB,EAA0BM,sBAA1B;AACD;;AAED,aAAS7T,MAAT,GAAkB;AAChBH,eAAS+P,eAAT;AACA/P,eAASiQ,kBAAT;AACA,UAAIxD,UAAUxN,MAAd,EAAsB;AACpB+F,qBAAayH,UAAU,CAAV,CAAb;AACD;AACDxM,aAAO8E,KAAP,CAAaC,UAAb;AACA9E;AACD;;AAED,aAAS+T,gBAAT,CAA0BtR,OAA1B,EAAmC;AACjC,aAAOA,QAAQ7D,OAAR,CAAgBkM,MAAhB,MAA4BrI,QAAQ7D,OAAR,CAAgB,CAAhB,EAAmB0H,YAAtD;AACD;;AAED,aAAS0N,iBAAT,CAA2BvR,OAA3B,EAAoC;AAClC,UAAIsR,iBAAiBtR,OAAjB,CAAJ,EAA+B;AAC7B1C,eAAOyC,OAAP,CAAe,UAACG,IAAD,EAAU;AACvB,cAAIrB,QAAQgB,UAAR,CAAmBK,KAAKsR,2BAAxB,CAAJ,EAA0D;AACxDtR,iBAAKsR,2BAAL;AACA,mBAAOtR,KAAKsR,2BAAZ;AACD;AACF,SALD;AAMA,YAAI,CAACxB,QAAQ1T,MAAb,EAAqB;AACnBiB;AACD;AACF;AACF;;AAED,aAASkU,oBAAT,CAA8BzR,OAA9B,EAAuC0R,WAAvC,EAAoD;AAClDC,oBAAc3R,OAAd,EAAuB0R,WAAvB,EAAoCrU,SAASsH,aAA7C;AACA,UAAI,CAAC2M,iBAAiBtR,OAAjB,CAAL,EAAgC;AAC9BA,gBAAQwR,2BAAR,GAAsCxR,QAAQlD,KAAR,CAAc8U,MAAd,CAAqB;AAAA,iBAAML,kBAAkBvR,OAAlB,CAAN;AAAA,SAArB,CAAtC;AACD;AACDA,cAAQ7D,OAAR,CAAgB0V,QAAhB,CAAyB,SAAzB,EALkD,CAKb;AACtC;;AAED,aAASF,aAAT,CAAuB3R,OAAvB,EAAgC0R,WAAhC,EAA6C/M,aAA7C,EAA4D;AAC1D,UAAImN,WAAW,IAAf;AACA,UAAIvG,UAAWmG,cAAc,CAAf,GAAoBpU,OAAOoU,cAAc,CAArB,EAAwBvV,OAA5C,GAAsD4N,SAApE;AACAoF,aAAO,UAACyB,KAAD,EAAQ9T,KAAR,EAAkB;AACvBgV,mBAAWnN,cAAciM,KAAd,EAAqBrF,OAArB,CAAX;AACAvL,gBAAQ7D,OAAR,GAAkByU,KAAlB;AACA5Q,gBAAQlD,KAAR,GAAgBA,KAAhB;AACAA,cAAM+S,QAAN,IAAkB7P,QAAQE,IAA1B;AACD,OALD;AAMA;AACA,UAAI9B,QAAQ2T,SAAZ,EAAuB;AACrB,YAAIC,gBAAgBhS,QAAQlD,KAAR,CAAcmV,qBAAlC;AACA,YAAID,iBAAiBA,cAAcE,OAAnC,EAA4C;AAC1C9T,kBAAQ2T,SAAR,CAAkB/R,QAAQlD,KAA1B,EAAiCkD,QAAQ7D,OAAzC;AACD,SAFD,MAEO;AACL6D,kBAAQlD,KAAR,CAAcmV,qBAAd,GAAsC;AACpCE,oBAAQ;AAAA,qBAAM/T,QAAQ2T,SAAR,CAAkB/R,QAAQlD,KAA1B,EAAiCkD,QAAQ7D,OAAzC,CAAN;AAAA,aAD4B;AAEpCW,mBAAOkD,QAAQlD;AAFqB,WAAtC;AAID;AACF;AACD,aAAOgV,QAAP;AACD;;AAED,aAASM,SAAT,GAAqB;AACnB,UAAIN,WAAW,EAAf;AACA,UAAMO,gBAAgB,EAAtB;AACA,UAAMC,cAAc,EAApB;AACA,UAAMC,WAAW,EAAjB;;AAEAjV,aAAOyC,OAAP,CAAe,UAACC,OAAD,EAAUhB,CAAV,EAAgB;AAC7B,gBAAQgB,QAAQ4B,EAAhB;AACE,eAAK,SAAL;AACEyQ,0BAAclP,OAAd,CAAsBnD,OAAtB;AACA;AACF,eAAK,QAAL;AACEyR,iCAAqBzR,OAArB,EAA8BhB,CAA9B;AACAgB,oBAAQ4B,EAAR,GAAa,MAAb;AACA2Q,qBAASrP,IAAT,CAAclD,OAAd;AACA;AACF,eAAK,QAAL;AACE8R,uBAAWA,SAASU,MAAT,CAAgBb,cAAc3R,OAAd,EAAuBhB,CAAvB,EAA0B3B,SAASmO,qBAAnC,CAAhB,CAAX;AACAxL,oBAAQ4B,EAAR,GAAa,MAAb;AACA2Q,qBAASrP,IAAT,CAAclD,OAAd;AACA;AACF,eAAK,QAAL;AACEsS,wBAAYpP,IAAZ,CAAiBlD,OAAjB;AAfJ;AAiBD,OAlBD;;AAoBAsS,kBAAYvS,OAAZ,CAAoB,UAACC,OAAD;AAAA,eAAa8R,WAAWA,SAASU,MAAT,CAAgBnV,SAASkQ,UAAT,CAAoBvN,OAApB,CAAhB,CAAxB;AAAA,OAApB;;AAEA,UAAIqS,cAAc/V,MAAlB,EACE+V,cAActS,OAAd,CAAsB,UAACC,OAAD,EAAa;AACjCyR,6BAAqBzR,OAArB;AACAA,gBAAQ4B,EAAR,GAAa,MAAb;AACD,OAHD;;AAKFtE,aAAOyC,OAAP,CAAe,UAACG,IAAD,EAAOlB,CAAP;AAAA,eAAakB,KAAKpD,KAAL,CAAW4Q,MAAX,GAAoBpQ,OAAO8C,KAAP,GAAepB,CAAhD;AAAA,OAAf;;AAEA,aAAO;AACLkO,mBAAWmF,aADN;AAELI,iBAASH,WAFJ;AAGLC,kBAAUA,QAHL;AAILG,kBAAUZ;AAJL,OAAP;AAOD;;AAED,aAASa,cAAT,CAAwBzB,GAAxB,EAA6BjE,OAA7B,EAAsC;AACpC;AACA,UAAIA,QAAQyF,QAAR,CAAiBpW,MAArB,EAA6B;AAC3B0H,WAAG4O,GAAH,CAAO3F,QAAQyF,QAAf,EAAyBxN,IAAzB,CAA8B,YAAM;AAClC7H,mBAAS2O,aAAT;AACAzO,uBAAa2T,GAAb;AACD,SAHD;AAID,OALD,MAKO;AACL7T,iBAAS2O,aAAT;AACD;AACF;;AAED,aAAS6G,YAAT,CAAsB3B,GAAtB,EAA2BjE,OAA3B,EAAoC;AAClC,UAAI5P,SAASoO,gBAAT,EAAJ,EAAiC;AAC/B,YAAI,CAACwB,OAAD,IAAY3P,OAAOiG,eAAP,CAAuB0J,QAAQsF,QAA/B,IAA2C,CAA3D,EAA8D;AAC5D;AACA,cAAIvC,QAAQ9M,IAAR,CAAa,IAAb,MAAuB,CAA3B,EAA8B;AAC5B4P,kBAAM5B,GAAN;AACA9S,oBAAQ2U,OAAR,CAAgB,IAAhB;AACD;AACF;AACF,OARD,MAQO,IAAI1V,SAAS4O,aAAT,EAAJ,EAA8B;AACnC,YAAK,CAACgB,OAAD,IAAY3P,OAAOiG,eAAP,CAAuB0J,QAAQC,SAA/B,IAA4C,CAAzD,IAA+D8C,QAAQ,CAAR,CAAnE,EAA+E;AAC7E;AACA;AACA;AACA,cAAIA,QAAQ9M,IAAR,CAAa,KAAb,MAAwB,CAA5B,EAA+B;AAC7B4P,kBAAM5B,GAAN;AACA9S,oBAAQ2U,OAAR,CAAgB,IAAhB;AACD;AACF;AACF;AACF;;AAED,aAASxV,YAAT,CAAsB2T,GAAtB,EAA2B;AACzB,UAAI,CAACA,GAAL,EAAU;AAAE;AACVlB,kBAAU,EAAV;AACAkB,cAAM,EAAEnB,SAAR;AACD;;AAED,UAAI9C,UAAUmF,WAAd;;AAEA;AACAxD,eAAS,YAAM;;AAEb;AACA3B,gBAAQsF,QAAR,CAAiBxS,OAAjB,CAAyB;AAAA,iBAAKiT,EAAE7W,OAAF,CAAU8W,WAAV,CAAsB,SAAtB,CAAL;AAAA,SAAzB;AACAhG,gBAAQC,SAAR,CAAkBnN,OAAlB,CAA0B;AAAA,iBAAKiT,EAAE7W,OAAF,CAAU8W,WAAV,CAAsB,SAAtB,CAAL;AAAA,SAA1B;;AAEA,YAAIhC,UAAUC,GAAV,CAAJ,EAAoB;AAClB;AACD;;AAEDyB,uBAAezB,GAAf,EAAoBjE,OAApB;AACA4F,qBAAa3B,GAAb;;AAEA,YAAI,CAAClB,QAAQ1T,MAAb,EAAqB;AACnB8B,kBAAQ8U,mBAAR;AACD;AACF,OAhBD;AAiBD;;AAED,aAASC,sBAAT,CAAgCjC,GAAhC,EAAqC;AACnC,UAAIjE,UAAUmF,WAAd;;AAEA;AACAxD,eAAS,YAAM;;AAEb;AACA3B,gBAAQsF,QAAR,CAAiBxS,OAAjB,CAAyB;AAAA,iBAAKiT,EAAE7W,OAAF,CAAU8W,WAAV,CAAsB,SAAtB,CAAL;AAAA,SAAzB;AACAhG,gBAAQC,SAAR,CAAkBnN,OAAlB,CAA0B;AAAA,iBAAKiT,EAAE7W,OAAF,CAAU8W,WAAV,CAAsB,SAAtB,CAAL;AAAA,SAA1B;;AAEA5V,iBAAS2P,2BAAT,CAAqCC,OAArC;;AAEA,YAAIgE,UAAUC,GAAV,CAAJ,EAAoB;AAClB;AACD;;AAEDyB,uBAAezB,GAAf,EAAoBjE,OAApB;AACA4F,qBAAa3B,GAAb,EAAkBjE,OAAlB;AACA+C,gBAAQoD,KAAR;;AAEA,YAAIpD,QAAQ1T,MAAZ,EACEwW,MAAM5B,GAAN,EADF,KAEK;AACH9S,kBAAQ2U,OAAR,CAAgB,KAAhB;AACA3B;AACAhT,kBAAQ8U,mBAAR;AACD;AACF,OAvBD;AAwBD;;AAED,aAASJ,KAAT,CAAe5B,GAAf,EAAoB;AAClB,UAAIlB,QAAQ,CAAR,CAAJ,EAAgB;AAAC;AACf,YAAI1S,OAAOhB,MAAP,IAAiB,CAACe,SAASoO,gBAAT,EAAtB,EAAmD;AACjD0H,iCAAuBjC,GAAvB;AACD,SAFD,MAEO;AACLV,oBAAU,UAAC1J,MAAD,EAAY;AACpB,gBAAImK,UAAUC,GAAV,CAAJ,EAAoB;AAClB;AACD;;AAED,gBAAIpK,OAAOxK,MAAP,GAAgByF,UAApB,EAAgC;AAC9BzE,qBAAOoC,GAAP,GAAa,IAAb;AACD;;AAED,gBAAIoH,OAAOxK,MAAP,GAAgB,CAApB,EAAuB;AACrBe,uBAAS6O,OAAT;AACA5O,qBAAOgD,MAAP,CAAcwG,MAAd;AACD;;AAEDqM,mCAAuBjC,GAAvB;AACD,WAfD;AAgBD;AACF,OArBD,MAqBO;AAAG;AACR,YAAI5T,OAAOhB,MAAP,IAAiB,CAACe,SAAS4O,aAAT,EAAtB,EAAgD;AAC9CkH,iCAAuBjC,GAAvB;AACD,SAFD,MAEO;AACLP,wBAAc,UAAC7J,MAAD,EAAY;AACxB,gBAAImK,UAAUC,GAAV,CAAJ,EAAoB;AAClB;AACD;;AAED,gBAAIpK,OAAOxK,MAAP,GAAgByF,UAApB,EAAgC;AAC9BzE,qBAAOmC,GAAP,GAAa,IAAb;AACA;AACD;;AAED,gBAAIqH,OAAOxK,MAAP,GAAgB,CAApB,EAAuB;AACrB,kBAAIgB,OAAOhB,MAAX,EAAmB;AACjBe,yBAASqO,UAAT;AACD;AACDpO,qBAAOiD,OAAP,CAAeuG,MAAf;AACD;;AAEDqM,mCAAuBjC,GAAvB;AACD,WAlBD;AAmBD;AACF;AACF;;AAED,aAASG,sBAAT,GAAkC;AAChC,UAAI,CAACzG,WAAWyI,OAAZ,IAAuB,CAACjV,QAAQR,SAAhC,IAA6C,CAACQ,QAAQP,QAA1D,EAAoE;;AAElEgV,qBAAa9C,SAAb;;AAEA,YAAIC,QAAQ1T,MAAZ,EAAoB;AAClBwU;AACD,SAFD,MAEO;AACL1S,kBAAQ8U,mBAAR;AACAvV,iBAAO2V,MAAP;AACD;AACF;AACF;;AAED,aAAStC,YAAT,CAAsBuC,KAAtB,EAA6B;AAC3B,UAAI,CAACnV,QAAQP,QAAb,EAAuB;AACrB,YAAIuM,YAAY/M,SAAS,CAAT,EAAY+M,SAA5B;AACA,YAAIoJ,OAAOnW,SAAS,CAAT,EAAYgO,YAAZ,GAA2BhO,SAAS,CAAT,EAAYoW,YAAlD;;AAEA,YAAKrJ,cAAc,CAAd,IAAmB,CAAC9M,OAAOmC,GAA5B,IAAqC2K,cAAcoJ,IAAd,IAAsB,CAAClW,OAAOoC,GAAvE,EAA6E;AAC3E6T,gBAAMG,cAAN;AACD;AACF;AACF;AACF;AAEF,CAvaoB,CA9BzB,E","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 0babc30b0e0c1649fab6","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 }\r\n\r\n prepend(newItems) {\r\n this.buffer.prepend(newItems);\r\n this.adjustBuffer();\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.MIN_VALUE;\r\n elements.forEach((wrapper) => {\r\n if (wrapper.element[0].offsetParent) {\r\n // element style is not display:none\r\n top = Math.min(top, wrapper.element.offset().top);\r\n bottom = Math.max(bottom, wrapper.element.offset().top + wrapper.element.outerHeight(true));\r\n }\r\n });\r\n return Math.max(0, bottom - top);\r\n }\r\n\r\n });\r\n\r\n return buffer;\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/buffer.js","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.adjustPadding();\r\n }\r\n },\r\n\r\n shouldLoadTop() {\r\n return !buffer.bof && (viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding());\r\n },\r\n\r\n clipTop() {\r\n // clip the invisible items off the top\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\r\n\r\n for (let i = 0; i < buffer.length; i++) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n topPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n // we need to adjust top padding element before items are removed from top\r\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\r\n topPadding.height(topPadding.height() + overageHeight);\r\n buffer.bof = false;\r\n buffer.remove(0, overage);\r\n buffer.first += overage;\r\n }\r\n },\r\n\r\n adjustPadding() {\r\n if (!buffer.length) {\r\n return;\r\n }\r\n\r\n // precise heights calculation, items that were in buffer once\r\n let topPaddingHeight = topPadding.cache.reduce((summ, item) => summ + (item.index < buffer.first ? item.height : 0), 0);\r\n let bottomPaddingHeight = bottomPadding.cache.reduce((summ, item) => summ + (item.index >= buffer.next ? item.height : 0), 0);\r\n\r\n // average item height based on buffer data\r\n let visibleItemsHeight = buffer.reduce((summ, item) => summ + item.element.outerHeight(true), 0);\r\n let averageItemHeight = (visibleItemsHeight + topPaddingHeight + bottomPaddingHeight) / (buffer.maxIndex - buffer.minIndex + 1);\r\n\r\n // average heights calculation, items that have never been reached\r\n let adjustTopPadding = buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser;\r\n let adjustBottomPadding = buffer.maxIndexUser !== null && buffer.maxIndex < buffer.maxIndexUser;\r\n let topPaddingHeightAdd = adjustTopPadding ? (buffer.minIndex - buffer.minIndexUser) * averageItemHeight : 0;\r\n let bottomPaddingHeightAdd = adjustBottomPadding ? (buffer.maxIndexUser - buffer.maxIndex) * averageItemHeight : 0;\r\n\r\n // paddings combine adjustment\r\n topPadding.height(topPaddingHeight + topPaddingHeightAdd);\r\n bottomPadding.height(bottomPaddingHeight + bottomPaddingHeightAdd);\r\n },\r\n\r\n adjustScrollTopAfterMinIndexSet(topPaddingHeightOld) {\r\n // additional scrollTop adjustment in case of datasource.minIndex external set\r\n if (buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser) {\r\n let diff = topPadding.height() - topPaddingHeightOld;\r\n viewport.scrollTop(viewport.scrollTop() + diff);\r\n }\r\n },\r\n\r\n adjustScrollTopAfterPrepend(updates) {\r\n if (!updates.prepended.length)\r\n return;\r\n const height = buffer.effectiveHeight(updates.prepended);\r\n const paddingHeight = topPadding.height() - height;\r\n if (paddingHeight >= 0) {\r\n topPadding.height(paddingHeight);\r\n }\r\n else {\r\n topPadding.height(0);\r\n viewport.scrollTop(viewport.scrollTop() - paddingHeight);\r\n }\r\n },\r\n\r\n resetTopPadding() {\r\n topPadding.height(0);\r\n topPadding.cache.clear();\r\n },\r\n\r\n resetBottomPadding() {\r\n bottomPadding.height(0);\r\n bottomPadding.cache.clear();\r\n },\r\n\r\n 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 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 indexStore = {};\n\n function defineProperty(datasource, propName, propUserName) {\n let descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n if (!descriptor || (!descriptor.set && !descriptor.get)) {\n Object.defineProperty(datasource, propName, {\n set: (value) => {\n indexStore[propName] = value;\n $timeout(() => {\n buffer[propUserName] = value;\n if (!pending.length) {\n let topPaddingHeightOld = viewport.topDataPos();\n viewport.adjustPadding();\n if (propName === 'minIndex') {\n viewport.adjustScrollTopAfterMinIndexSet(topPaddingHeightOld);\n }\n }\n });\n },\n get: () => indexStore[propName]\n });\n }\n }\n\n defineProperty(datasource, 'minIndex', 'minIndexUser');\n defineProperty(datasource, 'maxIndex', 'maxIndexUser');\n\n const fetchNext = (datasource.get.length !== 2) ? (success) => datasource.get(buffer.next, bufferSize, success)\n : (success) => {\n datasource.get({\n index: buffer.next,\n append: buffer.length ? buffer[buffer.length - 1].item : void 0,\n count: bufferSize\n }, success);\n };\n\n const fetchPrevious = (datasource.get.length !== 2) ? (success) => datasource.get(buffer.first - bufferSize, bufferSize, success)\n : (success) => {\n datasource.get({\n index: buffer.first - bufferSize,\n prepend: buffer.length ? buffer[0].item : void 0,\n count: bufferSize\n }, success);\n };\n\n /**\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 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.adjustPadding();\n adjustBuffer(rid);\n });\n } else {\n viewport.adjustPadding();\n }\n }\n\n function enqueueFetch(rid, updates) {\n if (viewport.shouldLoadBottom()) {\n if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\n // this means that at least one item appended in the last batch has height > 0\n if (pending.push(true) === 1) {\n fetch(rid);\n adapter.loading(true);\n }\n }\n } else if (viewport.shouldLoadTop()) {\n if ((!updates || buffer.effectiveHeight(updates.prepended) > 0) || pending[0]) {\n // this means that at least one item appended in the last batch has height > 0\n // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\n // BTW there will always be at least 1 element in the pending array because bottom is fetched first\n if (pending.push(false) === 1) {\n fetch(rid);\n adapter.loading(true);\n }\n }\n }\n }\n\n function adjustBuffer(rid) {\n if (!rid) { // dismiss pending requests\n pending = [];\n rid = ++ridActual;\n }\n\n let updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustment\n $timeout(() => {\n\n // show elements after data binging has been done\n updates.inserted.forEach(w => w.element.removeClass('ng-hide'));\n updates.prepended.forEach(w => w.element.removeClass('ng-hide'));\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n enqueueFetch(rid);\n\n if (!pending.length) {\n adapter.calculateProperties();\n }\n });\n }\n\n function adjustBufferAfterFetch(rid) {\n let updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustment\n $timeout(() => {\n\n // show elements after data binging has been done\n updates.inserted.forEach(w => w.element.removeClass('ng-hide'));\n updates.prepended.forEach(w => w.element.removeClass('ng-hide'));\n\n viewport.adjustScrollTopAfterPrepend(updates);\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n enqueueFetch(rid, updates);\n pending.shift();\n\n if (pending.length)\n fetch(rid);\n else {\n adapter.loading(false);\n bindEvents();\n adapter.calculateProperties();\n }\n });\n }\n\n function fetch(rid) {\n if (pending[0]) {// scrolling down\n if (buffer.length && !viewport.shouldLoadBottom()) {\n adjustBufferAfterFetch(rid);\n } else {\n fetchNext((result) => {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.eof = true;\n }\n\n if (result.length > 0) {\n viewport.clipTop();\n buffer.append(result);\n }\n\n adjustBufferAfterFetch(rid);\n });\n }\n } else { // scrolling up\n if (buffer.length && !viewport.shouldLoadTop()) {\n adjustBufferAfterFetch(rid);\n } else {\n fetchPrevious((result) => {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.bof = true;\n // log 'bof is reached'\n }\n\n if (result.length > 0) {\n if (buffer.length) {\n viewport.clipBottom();\n }\n buffer.prepend(result);\n }\n\n adjustBufferAfterFetch(rid);\n });\n }\n }\n }\n\n function resizeAndScrollHandler() {\n if (!$rootScope.$$phase && !adapter.isLoading && !adapter.disabled) {\n\n enqueueFetch(ridActual);\n\n if (pending.length) {\n unbindEvents();\n } else {\n adapter.calculateProperties();\n $scope.$apply();\n }\n }\n }\n\n function wheelHandler(event) {\n if (!adapter.disabled) {\n let scrollTop = viewport[0].scrollTop;\n let yMax = viewport[0].scrollHeight - viewport[0].clientHeight;\n\n if ((scrollTop === 0 && !buffer.bof) || (scrollTop === yMax && !buffer.eof)) {\n event.preventDefault();\n }\n }\n }\n }\n\n }\n ]);\n\n\n// WEBPACK FOOTER //\n// ./src/ui-scroll.js"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/ui-scroll.min.js b/dist/ui-scroll.min.js index e67e11c8..f05dd52d 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.6.1 -- 2017-03-31T22:19:12.424Z + * Version: 1.6.1 -- 2017-06-20T03:26:22.462Z * License: MIT */ -!function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(1),o=r(i),a=n(2),u=r(a),l=n(3),s=r(l),c=n(4),f=r(c),d=n(6),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,l,c,d){function h(t,n){var r=o(t)(e);return isNaN(r)?n:r}function m(e,t,n){var i=Object.getOwnPropertyDescriptor(e,t);i&&(i.set||i.get)||Object.defineProperty(e,t,{set:function(e){J[t]=e,r(function(){if(X[n]=e,!z.length){var r=Y.topDataPos();Y.adjustPadding(),"minIndex"===t&&Y.adjustScrollTopAfterMinIndexSet(r)}})},get:function(){return J[t]}})}function g(t){return t&&t!==q||e.$$destroyed}function v(){Y.bind("resize",O),Y.bind("scroll",O)}function b(){Y.unbind("resize",O),Y.unbind("scroll",O)}function y(){Y.resetTopPadding(),Y.resetBottomPadding(),arguments.length&&(W=arguments[0]),X.reset(W),I()}function x(e){return e.element.height()&&e.element[0].offsetParent}function w(e){x(e)&&(X.forEach(function(e){angular.isFunction(e.unregisterVisibilityWatcher)&&(e.unregisterVisibilityWatcher(),delete e.unregisterVisibilityWatcher)}),z.length||I())}function E(e,t){P(e,t,Y.insertElement),x(e)||(e.unregisterVisibilityWatcher=e.scope.$watch(function(){return w(e)})),e.element.addClass("ng-hide")}function P(e,t,n){var r=null,i=t>0?X[t-1].element:void 0;return d(function(t,o){r=n(t,i),e.element=t,e.scope=o,o[U]=e.item}),Q.transform&&Q.transform(e.scope,e.element),r}function $(){var e=[],t=[],n=[],r=[];return X.forEach(function(i,o){switch(i.op){case"prepend":t.unshift(i);break;case"append":E(i,o),i.op="none",r.push(i);break;case"insert":e=e.concat(P(i,o,Y.insertElementAnimated)),i.op="none",r.push(i);break;case"remove":n.push(i)}}),n.forEach(function(t){return e=e.concat(Y.removeItem(t))}),t.length&&t.forEach(function(e){E(e),e.op="none"}),X.forEach(function(e,t){return e.scope.$index=X.first+t}),{prepended:t,removed:n,inserted:r,animated:e}}function j(e,t){t.animated.length?i.all(t.animated).then(function(){Y.adjustPadding(),I(e)}):Y.adjustPadding()}function S(e,t){Y.shouldLoadBottom()?(!t||X.effectiveHeight(t.inserted)>0)&&1===z.push(!0)&&(V(e),Q.loading(!0)):Y.shouldLoadTop()&&(!t||X.effectiveHeight(t.prepended)>0||z[0])&&1===z.push(!1)&&(V(e),Q.loading(!0))}function I(e){e||(z=[],e=++q);var t=$();r(function(){t.inserted.forEach(function(e){return e.element.removeClass("ng-hide")}),t.prepended.forEach(function(e){return e.element.removeClass("ng-hide")}),g(e)||(j(e,t),S(e),z.length||Q.calculateProperties())})}function T(e){var t=$();r(function(){t.inserted.forEach(function(e){return e.element.removeClass("ng-hide")}),t.prepended.forEach(function(e){return e.element.removeClass("ng-hide")}),Y.adjustScrollTopAfterPrepend(t),g(e)||(j(e,t),S(e,t),z.shift(),z.length?V(e):(Q.loading(!1),v(),Q.calculateProperties()))})}function V(e){z[0]?X.length&&!Y.shouldLoadBottom()?T(e):K(function(t){g(e)||(t.length0&&(Y.clipTop(),X.append(t)),T(e))}):X.length&&!Y.shouldLoadTop()?T(e):Z(function(t){g(e)||(t.length0&&(X.length&&Y.clipBottom(),X.prepend(t)),T(e))})}function O(){n.$$phase||Q.isLoading||Q.disabled||(S(q),z.length?b():(Q.calculateProperties(),e.$apply()))}function k(e){if(!Q.disabled){var t=Y[0].scrollTop,n=Y[0].scrollHeight-Y[0].clientHeight;(0===t&&!X.bof||t===n&&!X.eof)&&e.preventDefault()}}var A=l.uiScroll.match(/^\s*(\w+)\s+in\s+([(\w|\$)\.]+)\s*$/);if(!A)throw new Error("Expected uiScroll in form of '_item_ in _datasource_' but got '"+l.uiScroll+"'");var L=3,C=10,_=.3,H=.5,M=null,U=A[1],B=A[2],D=c[0],F=Math.max(L,h(l.bufferSize,C)),N=Math.max(_,h(l.padding,H)),W=h(l.startIndex,1),q=0,z=[],R=new u.default(t,i),X=new s.default(R,F),Y=new f.default(R,X,a,D,n,N),Q=new p.default(Y,X,I,y,l,o,a,e);D&&(D.adapter=Q);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 J={};m(M,"minIndex","minIndexUser"),m(M,"maxIndex","maxIndexUser");var K=2!==M.get.length?function(e){return M.get(X.next,F,e)}:function(e){M.get({index:X.next,append:X.length?X[X.length-1].item:void 0,count:F},e)},Z=2!==M.get.length?function(e){return M.get(X.first-F,F,e)}:function(e){M.get({index:X.first-F,prepend:X.length?X[0].item:void 0,count:F},e)};d(function(e,t){Y.createPaddingElements(e[0]),t.$destroy(),e.remove()}),e.$on("$destroy",function(){b(),Y.unbind("mousewheel",k)}),Y.bind("mousewheel",k),r(function(){Y.applyContainerStyle(),y()})}return{require:["?^uiScrollViewport"],restrict:"A",transclude:"element",priority:1e3,terminal:!0,link:a}}])},function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var a,u=e[Symbol.iterator]();!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),i=function(){function e(e,t){for(var n=0;n0?{base:a.base-a.padding-a.border,outer:a.base,outerfull:a.base+a.margin}[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,l=new RegExp("^("+u+")(?!px)[a-z%]+$","i");return l.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)):i(this[0],"height","base")},outerHeight:function(e){return i(this[0],"height",e?"outerfull":"outer")},outerWidth:function(e){return i(this[0],"width",e?"outerfull":"outer")},offset:function(e){var t=void 0,n=void 0,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=o},function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=function(){function e(e,t){for(var n=0;n=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.adjustPadding())},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)},adjustPadding: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)}},adjustScrollTopAfterPrepend: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=i;var o=n(5),a=r(o)},function(e,t){"use strict";function n(){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 r(e){var t=void 0;switch(e.tagName){case"dl":throw new Error("ui-scroll directive does not support <"+e.tagName+"> as a repeating tag: "+e.outerHTML);case"tr":var r=angular.element("
    ");t=r.find("tr");break;case"li":t=angular.element("
  • ");break;default:t=angular.element("
    ")}return t.cache=new n,t}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r},function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(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 i=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=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)}})},u=o.length-1;u>=0;u--)a(u);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=o}]); +!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.adjustPadding())},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)},adjustPadding: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)}},adjustScrollTopAfterPrepend: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;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),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,l,c,d){function h(t,n){var r=o(t)(e);return isNaN(r)?n:r}function m(e,t,n){var i=Object.getOwnPropertyDescriptor(e,t);i&&(i.set||i.get)||Object.defineProperty(e,t,{set:function(e){X[t]=e,r(function(){if(W[n]=e,!F.length){var r=q.topDataPos();q.adjustPadding(),"minIndex"===t&&q.adjustScrollTopAfterMinIndexSet(r)}})},get:function(){return X[t]}})}function g(t){return t&&t!==D||e.$$destroyed}function v(){q.bind("resize",V),q.bind("scroll",V)}function b(){q.unbind("resize",V),q.unbind("scroll",V)}function x(){q.resetTopPadding(),q.resetBottomPadding(),arguments.length&&(B=arguments[0]),W.reset(B),T()}function y(e){return e.element.height()&&e.element[0].offsetParent}function w(e){y(e)&&(W.forEach(function(e){angular.isFunction(e.unregisterVisibilityWatcher)&&(e.unregisterVisibilityWatcher(),delete e.unregisterVisibilityWatcher)}),F.length||T())}function E(e,t){P(e,t,q.insertElement),y(e)||(e.unregisterVisibilityWatcher=e.scope.$watch(function(){return w(e)})),e.element.addClass("ng-hide")}function P(e,t,n){var r=null,i=t>0?W[t-1].element:void 0;if(d(function(t,o){r=n(t,i),e.element=t,e.scope=o,o[C]=e.item}),z.transform){var o=e.scope.uiScrollTdInitializer;o&&o.linking?z.transform(e.scope,e.element):e.scope.uiScrollTdInitializer={onLink:function(){return z.transform(e.scope,e.element)},scope:e.scope}}return r}function $(){var e=[],t=[],n=[],r=[];return W.forEach(function(i,o){switch(i.op){case"prepend":t.unshift(i);break;case"append":E(i,o),i.op="none",r.push(i);break;case"insert":e=e.concat(P(i,o,q.insertElementAnimated)),i.op="none",r.push(i);break;case"remove":n.push(i)}}),n.forEach(function(t){return e=e.concat(q.removeItem(t))}),t.length&&t.forEach(function(e){E(e),e.op="none"}),W.forEach(function(e,t){return e.scope.$index=W.first+t}),{prepended:t,removed:n,inserted:r,animated:e}}function j(e,t){t.animated.length?i.all(t.animated).then(function(){q.adjustPadding(),T(e)}):q.adjustPadding()}function I(e,t){q.shouldLoadBottom()?(!t||W.effectiveHeight(t.inserted)>0)&&1===F.push(!0)&&(O(e),z.loading(!0)):q.shouldLoadTop()&&(!t||W.effectiveHeight(t.prepended)>0||F[0])&&1===F.push(!1)&&(O(e),z.loading(!0))}function T(e){e||(F=[],e=++D);var t=$();r(function(){t.inserted.forEach(function(e){return e.element.removeClass("ng-hide")}),t.prepended.forEach(function(e){return e.element.removeClass("ng-hide")}),g(e)||(j(e,t),I(e),F.length||z.calculateProperties())})}function S(e){var t=$();r(function(){t.inserted.forEach(function(e){return e.element.removeClass("ng-hide")}),t.prepended.forEach(function(e){return e.element.removeClass("ng-hide")}),q.adjustScrollTopAfterPrepend(t),g(e)||(j(e,t),I(e,t),F.shift(),F.length?O(e):(z.loading(!1),v(),z.calculateProperties()))})}function O(e){F[0]?W.length&&!q.shouldLoadBottom()?S(e):Y(function(t){g(e)||(t.length0&&(q.clipTop(),W.append(t)),S(e))}):W.length&&!q.shouldLoadTop()?S(e):Q(function(t){g(e)||(t.length0&&(W.length&&q.clipBottom(),W.prepend(t)),S(e))})}function V(){n.$$phase||z.isLoading||z.disabled||(I(D),F.length?b():(z.calculateProperties(),e.$apply()))}function k(e){if(!z.disabled){var t=q[0].scrollTop,n=q[0].scrollHeight-q[0].clientHeight;(0===t&&!W.bof||t===n&&!W.eof)&&e.preventDefault()}}var A=l.uiScroll.match(/^\s*(\w+)\s+in\s+([(\w|\$)\.]+)\s*$/);if(!A)throw new Error("Expected uiScroll in form of '_item_ in _datasource_' but got '"+l.uiScroll+"'");var L=null,C=A[1],_=A[2],M=c[0],H=Math.max(3,h(l.bufferSize,10)),U=Math.max(.3,h(l.padding,.5)),B=h(l.startIndex,1),D=0,F=[],N=new u.default(t,i),W=new s.default(N,H),q=new f.default(N,W,a,M,n,U),z=new p.default(q,W,T,x,l,o,a,e);M&&(M.adapter=z);var R=function(){return angular.isObject(L)&&angular.isFunction(L.get)};if(L=o(_)(e),!R()&&(L=t.get(_),!R()))throw new Error(_+" is not a valid datasource");var X={};m(L,"minIndex","minIndexUser"),m(L,"maxIndex","maxIndexUser");var Y=2!==L.get.length?function(e){return L.get(W.next,H,e)}:function(e){L.get({index:W.next,append:W.length?W[W.length-1].item:void 0,count:H},e)},Q=2!==L.get.length?function(e){return L.get(W.first-H,H,e)}:function(e){L.get({index:W.first-H,prepend:W.length?W[0].item:void 0,count:H},e)};d(function(e,t){q.createPaddingElements(e[0]),t.$destroy(),e.remove()}),e.$on("$destroy",function(){b(),q.unbind("mousewheel",k)}),q.bind("mousewheel",k),r(function(){q.applyContainerStyle(),x()})}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 55a9945b..cd98329d 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 ffc9be10331d38078fc3","webpack:///./src/ui-scroll.js","webpack:///./src/modules/jqLiteExtras.js","webpack:///./src/modules/elementRoutines.js","webpack:///./src/modules/buffer.js","webpack:///./src/modules/viewport.js","webpack:///./src/modules/padding.js","webpack:///./src/modules/adapter.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","id","loaded","call","m","c","p","_interopRequireDefault","obj","__esModule","default","_jqLiteExtras","_jqLiteExtras2","_elementRoutines","_elementRoutines2","_buffer","_buffer2","_viewport","_viewport2","_adapter","_adapter2","angular","service","run","jqLiteExtras","window","jQuery","registerFor","element","directive","restrict","controller","scope","_this","this","container","viewport","forEach","children","child","tagName","toLowerCase","console","$injector","$rootScope","$timeout","$q","$parse","link","$scope","$attr","controllers","linker","parseNumericAttr","value","defaultValue","result","isNaN","defineProperty","datasource","propName","propUserName","descriptor","Object","getOwnPropertyDescriptor","set","get","indexStore","buffer","pending","length","topPaddingHeightOld","topDataPos","adjustPadding","adjustScrollTopAfterMinIndexSet","isInvalid","rid","ridActual","$$destroyed","bindEvents","bind","resizeAndScrollHandler","unbindEvents","unbind","reload","resetTopPadding","resetBottomPadding","arguments","startIndex","reset","adjustBuffer","isElementVisible","wrapper","height","offsetParent","visibilityWatcher","item","isFunction","unregisterVisibilityWatcher","insertWrapperContent","insertAfter","createElement","insertElement","$watch","addClass","promises","sibling","undefined","clone","itemName","adapter","transform","updateDOM","toBePrepended","toBeRemoved","inserted","i","op","unshift","push","concat","insertElementAnimated","removeItem","$index","first","prepended","removed","animated","updatePaddings","updates","all","then","enqueueFetch","shouldLoadBottom","effectiveHeight","fetch","loading","shouldLoadTop","w","removeClass","calculateProperties","adjustBufferAfterFetch","adjustScrollTopAfterPrepend","shift","fetchNext","bufferSize","eof","clipTop","append","fetchPrevious","bof","clipBottom","prepend","$$phase","isLoading","disabled","$apply","wheelHandler","event","scrollTop","yMax","scrollHeight","clientHeight","preventDefault","match","uiScroll","Error","BUFFER_MIN","BUFFER_DEFAULT","PADDING_MIN","PADDING_DEFAULT","datasourceName","viewportController","Math","max","padding","elementRoutines","isDatasourceValid","isObject","success","next","index","count","createPaddingElements","$destroy","remove","$on","applyContainerStyle","require","transclude","priority","terminal","_classCallCheck","instance","Constructor","TypeError","_slicedToArray","sliceIterator","arr","_arr","_n","_d","_e","_s","_i","Symbol","iterator","done","err","Array","isArray","_createClass","defineProperties","target","props","enumerable","configurable","writable","key","protoProps","staticProps","prototype","JQLiteExtras","scrollTo","self","direction","elem","_top$left$direction","top","left","method","prop","preserve","isWindow","isDefined","document","documentElement","getMeasurements","measure","base","borderA","borderB","computedMarginA","computedMarginB","computedStyle","dirA","dirB","marginA","marginB","paddingA","paddingB","width","border","margin","_width$height$measure","offsetWidth","offsetHeight","getStyle","convertToPx","getWidthHeight","measurements","outer","outerfull","style","parseFloat","css","name","nodeType","location","alert","setInterval","getComputedStyle","currentStyle","rs","rsLeft","core_pnum","source","rnumnonpx","RegExp","test","runtimeStyle","pixelLeft","before","newElem","j","parent","ref","contents","after","outerHTML","isNumber","outerHeight","option","outerWidth","offset","docElem","win","box","doc","ownerDocument","getBoundingClientRect","defaultView","parentWindow","pageYOffset","clientTop","pageXOffset","scrollLeft","clientLeft","_typeof","constructor","ElementRoutines","$animate","has","isAngularVersionLessThen1_3","version","major","minor","newElement","previousElement","_ret","deferred","defer","enter","resolve","v","promise","_this2","removeElement","_ret2","leave","ScrollBuffer","create","extend","size","minIndex","maxIndex","minIndexUser","maxIndexUser","items","insert","reverse","min","operation","splice","arg1","arg2","indexOf","removeElementAnimated","elements","Number","MAX_VALUE","bottom","MIN_VALUE","Viewport","bufferPadding","topPadding","bottomPadding","overflow-anchor","overflow-y","display","getScope","template","_padding2","bottomDataPos","bottomVisiblePos","topVisiblePos","e","overage","overageHeight","itemHeight","emptySpaceHeight","cache","add","topPaddingHeight","reduce","summ","bottomPaddingHeight","visibleItemsHeight","averageItemHeight","adjustTopPadding","adjustBottomPadding","topPaddingHeightAdd","bottomPaddingHeightAdd","diff","paddingHeight","clear","_padding","Cache","sort","a","b","Padding","table","find","getCtrlOnData","attr","onSyntax","log","ctrl","tail","candidate","candidateScope","candidateName","Adapter","viewportScope","startScope","$parent","publicContext","assignAdapter","generatePublicContext","adapterAttr","replace","ctrlOnData","adapterOnScope","assign","error","message","publicMethods","publicProps","_loop","property","slice","applyUpdate","newItems","rowTop","topHeight","topDone","bottomDone","itemTop","isEOF","_this3","keepIt","pos","newItem"],"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.6.1 -- 2017-03-31T22:19:12.378Z\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/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _jqLiteExtras = __webpack_require__(1);\n\t\n\tvar _jqLiteExtras2 = _interopRequireDefault(_jqLiteExtras);\n\t\n\tvar _elementRoutines = __webpack_require__(2);\n\t\n\tvar _elementRoutines2 = _interopRequireDefault(_elementRoutines);\n\t\n\tvar _buffer = __webpack_require__(3);\n\t\n\tvar _buffer2 = _interopRequireDefault(_buffer);\n\t\n\tvar _viewport = __webpack_require__(4);\n\t\n\tvar _viewport2 = _interopRequireDefault(_viewport);\n\t\n\tvar _adapter = __webpack_require__(6);\n\t\n\tvar _adapter2 = _interopRequireDefault(_adapter);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tangular.module('ui.scroll', []).service('jqLiteExtras', function () {\n\t return new _jqLiteExtras2.default();\n\t}).run(['jqLiteExtras', function (jqLiteExtras) {\n\t return !window.jQuery ? jqLiteExtras.registerFor(angular.element) : null;\n\t}]).directive('uiScrollViewport', function () {\n\t return {\n\t restrict: 'A',\n\t controller: ['$scope', '$element', function (scope, element) {\n\t var _this = this;\n\t\n\t this.container = element;\n\t this.viewport = element;\n\t this.scope = scope;\n\t\n\t angular.forEach(element.children(), function (child) {\n\t if (child.tagName.toLowerCase() === 'tbody') {\n\t _this.viewport = angular.element(child);\n\t }\n\t });\n\t\n\t return this;\n\t }]\n\t };\n\t}).directive('uiScroll', ['$log', '$injector', '$rootScope', '$timeout', '$q', '$parse', function (console, $injector, $rootScope, $timeout, $q, $parse) {\n\t\n\t return {\n\t require: ['?^uiScrollViewport'],\n\t restrict: 'A',\n\t transclude: 'element',\n\t priority: 1000,\n\t terminal: true,\n\t link: link\n\t };\n\t\n\t function link($scope, element, $attr, controllers, linker) {\n\t var match = $attr.uiScroll.match(/^\\s*(\\w+)\\s+in\\s+([(\\w|\\$)\\.]+)\\s*$/);\n\t if (!match) {\n\t throw new Error('Expected uiScroll in form of \\'_item_ in _datasource_\\' but got \\'' + $attr.uiScroll + '\\'');\n\t }\n\t\n\t function parseNumericAttr(value, defaultValue) {\n\t var result = $parse(value)($scope);\n\t return isNaN(result) ? defaultValue : result;\n\t }\n\t\n\t var BUFFER_MIN = 3;\n\t var BUFFER_DEFAULT = 10;\n\t var PADDING_MIN = 0.3;\n\t var PADDING_DEFAULT = 0.5;\n\t\n\t var datasource = null;\n\t var itemName = match[1];\n\t var datasourceName = match[2];\n\t var viewportController = controllers[0];\n\t var bufferSize = Math.max(BUFFER_MIN, parseNumericAttr($attr.bufferSize, BUFFER_DEFAULT));\n\t var padding = Math.max(PADDING_MIN, parseNumericAttr($attr.padding, PADDING_DEFAULT));\n\t var startIndex = parseNumericAttr($attr.startIndex, 1);\n\t var ridActual = 0; // current data revision id\n\t var pending = [];\n\t\n\t var elementRoutines = new _elementRoutines2.default($injector, $q);\n\t var buffer = new _buffer2.default(elementRoutines, bufferSize);\n\t var viewport = new _viewport2.default(elementRoutines, buffer, element, viewportController, $rootScope, padding);\n\t var adapter = new _adapter2.default(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope);\n\t\n\t if (viewportController) {\n\t viewportController.adapter = adapter;\n\t }\n\t\n\t var isDatasourceValid = function isDatasourceValid() {\n\t return angular.isObject(datasource) && angular.isFunction(datasource.get);\n\t };\n\t datasource = $parse(datasourceName)($scope); // try to get datasource on scope\n\t if (!isDatasourceValid()) {\n\t datasource = $injector.get(datasourceName); // try to inject datasource as service\n\t if (!isDatasourceValid()) {\n\t throw new Error(datasourceName + ' is not a valid datasource');\n\t }\n\t }\n\t\n\t var indexStore = {};\n\t\n\t function defineProperty(datasource, propName, propUserName) {\n\t var descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n\t if (!descriptor || !descriptor.set && !descriptor.get) {\n\t Object.defineProperty(datasource, propName, {\n\t set: function set(value) {\n\t indexStore[propName] = value;\n\t $timeout(function () {\n\t buffer[propUserName] = value;\n\t if (!pending.length) {\n\t var topPaddingHeightOld = viewport.topDataPos();\n\t viewport.adjustPadding();\n\t if (propName === 'minIndex') {\n\t viewport.adjustScrollTopAfterMinIndexSet(topPaddingHeightOld);\n\t }\n\t }\n\t });\n\t },\n\t get: function get() {\n\t return indexStore[propName];\n\t }\n\t });\n\t }\n\t }\n\t\n\t defineProperty(datasource, 'minIndex', 'minIndexUser');\n\t defineProperty(datasource, 'maxIndex', 'maxIndexUser');\n\t\n\t var fetchNext = datasource.get.length !== 2 ? function (success) {\n\t return datasource.get(buffer.next, bufferSize, success);\n\t } : function (success) {\n\t datasource.get({\n\t index: buffer.next,\n\t append: buffer.length ? buffer[buffer.length - 1].item : void 0,\n\t count: bufferSize\n\t }, success);\n\t };\n\t\n\t var fetchPrevious = datasource.get.length !== 2 ? function (success) {\n\t return datasource.get(buffer.first - bufferSize, bufferSize, success);\n\t } : function (success) {\n\t datasource.get({\n\t index: buffer.first - bufferSize,\n\t prepend: buffer.length ? buffer[0].item : void 0,\n\t count: bufferSize\n\t }, success);\n\t };\n\t\n\t /**\n\t * Build padding elements\n\t *\n\t * Calling linker is the only way I found to get access to the tag name of the template\n\t * to prevent the directive scope from pollution a new scope is created and destroyed\n\t * right after the builder creation is completed\n\t */\n\t linker(function (clone, scope) {\n\t viewport.createPaddingElements(clone[0]);\n\t // we do not include the clone in the DOM. It means that the nested directives will not\n\t // be able to reach the parent directives, but in this case it is intentional because we\n\t // created the clone to access the template tag name\n\t scope.$destroy();\n\t clone.remove();\n\t });\n\t\n\t $scope.$on('$destroy', function () {\n\t unbindEvents();\n\t viewport.unbind('mousewheel', wheelHandler);\n\t });\n\t\n\t viewport.bind('mousewheel', wheelHandler);\n\t\n\t $timeout(function () {\n\t viewport.applyContainerStyle();\n\t reload();\n\t });\n\t\n\t /* Private function definitions */\n\t\n\t function isInvalid(rid) {\n\t return rid && rid !== ridActual || $scope.$$destroyed;\n\t }\n\t\n\t function bindEvents() {\n\t viewport.bind('resize', resizeAndScrollHandler);\n\t viewport.bind('scroll', resizeAndScrollHandler);\n\t }\n\t\n\t function unbindEvents() {\n\t viewport.unbind('resize', resizeAndScrollHandler);\n\t viewport.unbind('scroll', resizeAndScrollHandler);\n\t }\n\t\n\t function reload() {\n\t viewport.resetTopPadding();\n\t viewport.resetBottomPadding();\n\t if (arguments.length) {\n\t startIndex = arguments[0];\n\t }\n\t buffer.reset(startIndex);\n\t adjustBuffer();\n\t }\n\t\n\t function isElementVisible(wrapper) {\n\t return wrapper.element.height() && wrapper.element[0].offsetParent;\n\t }\n\t\n\t function visibilityWatcher(wrapper) {\n\t if (isElementVisible(wrapper)) {\n\t buffer.forEach(function (item) {\n\t if (angular.isFunction(item.unregisterVisibilityWatcher)) {\n\t item.unregisterVisibilityWatcher();\n\t delete item.unregisterVisibilityWatcher;\n\t }\n\t });\n\t if (!pending.length) {\n\t adjustBuffer();\n\t }\n\t }\n\t }\n\t\n\t function insertWrapperContent(wrapper, insertAfter) {\n\t createElement(wrapper, insertAfter, viewport.insertElement);\n\t if (!isElementVisible(wrapper)) {\n\t wrapper.unregisterVisibilityWatcher = wrapper.scope.$watch(function () {\n\t return visibilityWatcher(wrapper);\n\t });\n\t }\n\t wrapper.element.addClass('ng-hide'); // hide inserted elements before data binding\n\t }\n\t\n\t function createElement(wrapper, insertAfter, insertElement) {\n\t var promises = null;\n\t var sibling = insertAfter > 0 ? buffer[insertAfter - 1].element : undefined;\n\t linker(function (clone, scope) {\n\t promises = insertElement(clone, sibling);\n\t wrapper.element = clone;\n\t wrapper.scope = scope;\n\t scope[itemName] = wrapper.item;\n\t });\n\t if (adapter.transform) adapter.transform(wrapper.scope, wrapper.element);\n\t return promises;\n\t }\n\t\n\t function updateDOM() {\n\t var promises = [];\n\t var toBePrepended = [];\n\t var toBeRemoved = [];\n\t var inserted = [];\n\t\n\t buffer.forEach(function (wrapper, i) {\n\t switch (wrapper.op) {\n\t case 'prepend':\n\t toBePrepended.unshift(wrapper);\n\t break;\n\t case 'append':\n\t insertWrapperContent(wrapper, i);\n\t wrapper.op = 'none';\n\t inserted.push(wrapper);\n\t break;\n\t case 'insert':\n\t promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated));\n\t wrapper.op = 'none';\n\t inserted.push(wrapper);\n\t break;\n\t case 'remove':\n\t toBeRemoved.push(wrapper);\n\t }\n\t });\n\t\n\t toBeRemoved.forEach(function (wrapper) {\n\t return promises = promises.concat(viewport.removeItem(wrapper));\n\t });\n\t\n\t if (toBePrepended.length) toBePrepended.forEach(function (wrapper) {\n\t insertWrapperContent(wrapper);\n\t wrapper.op = 'none';\n\t });\n\t\n\t buffer.forEach(function (item, i) {\n\t return item.scope.$index = buffer.first + i;\n\t });\n\t\n\t return {\n\t prepended: toBePrepended,\n\t removed: toBeRemoved,\n\t inserted: inserted,\n\t animated: promises\n\t };\n\t }\n\t\n\t function updatePaddings(rid, updates) {\n\t // schedule another adjustBuffer after animation completion\n\t if (updates.animated.length) {\n\t $q.all(updates.animated).then(function () {\n\t viewport.adjustPadding();\n\t adjustBuffer(rid);\n\t });\n\t } else {\n\t viewport.adjustPadding();\n\t }\n\t }\n\t\n\t function enqueueFetch(rid, updates) {\n\t if (viewport.shouldLoadBottom()) {\n\t if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\n\t // this means that at least one item appended in the last batch has height > 0\n\t if (pending.push(true) === 1) {\n\t fetch(rid);\n\t adapter.loading(true);\n\t }\n\t }\n\t } else if (viewport.shouldLoadTop()) {\n\t if (!updates || buffer.effectiveHeight(updates.prepended) > 0 || pending[0]) {\n\t // this means that at least one item appended in the last batch has height > 0\n\t // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\n\t // BTW there will always be at least 1 element in the pending array because bottom is fetched first\n\t if (pending.push(false) === 1) {\n\t fetch(rid);\n\t adapter.loading(true);\n\t }\n\t }\n\t }\n\t }\n\t\n\t function adjustBuffer(rid) {\n\t if (!rid) {\n\t // dismiss pending requests\n\t pending = [];\n\t rid = ++ridActual;\n\t }\n\t\n\t var updates = updateDOM();\n\t\n\t // We need the item bindings to be processed before we can do adjustment\n\t $timeout(function () {\n\t\n\t // show elements after data binging has been done\n\t updates.inserted.forEach(function (w) {\n\t return w.element.removeClass('ng-hide');\n\t });\n\t updates.prepended.forEach(function (w) {\n\t return w.element.removeClass('ng-hide');\n\t });\n\t\n\t if (isInvalid(rid)) {\n\t return;\n\t }\n\t\n\t updatePaddings(rid, updates);\n\t enqueueFetch(rid);\n\t\n\t if (!pending.length) {\n\t adapter.calculateProperties();\n\t }\n\t });\n\t }\n\t\n\t function adjustBufferAfterFetch(rid) {\n\t var updates = updateDOM();\n\t\n\t // We need the item bindings to be processed before we can do adjustment\n\t $timeout(function () {\n\t\n\t // show elements after data binging has been done\n\t updates.inserted.forEach(function (w) {\n\t return w.element.removeClass('ng-hide');\n\t });\n\t updates.prepended.forEach(function (w) {\n\t return w.element.removeClass('ng-hide');\n\t });\n\t\n\t viewport.adjustScrollTopAfterPrepend(updates);\n\t\n\t if (isInvalid(rid)) {\n\t return;\n\t }\n\t\n\t updatePaddings(rid, updates);\n\t enqueueFetch(rid, updates);\n\t pending.shift();\n\t\n\t if (pending.length) fetch(rid);else {\n\t adapter.loading(false);\n\t bindEvents();\n\t adapter.calculateProperties();\n\t }\n\t });\n\t }\n\t\n\t function fetch(rid) {\n\t if (pending[0]) {\n\t // scrolling down\n\t if (buffer.length && !viewport.shouldLoadBottom()) {\n\t adjustBufferAfterFetch(rid);\n\t } else {\n\t fetchNext(function (result) {\n\t if (isInvalid(rid)) {\n\t return;\n\t }\n\t\n\t if (result.length < bufferSize) {\n\t buffer.eof = true;\n\t }\n\t\n\t if (result.length > 0) {\n\t viewport.clipTop();\n\t buffer.append(result);\n\t }\n\t\n\t adjustBufferAfterFetch(rid);\n\t });\n\t }\n\t } else {\n\t // scrolling up\n\t if (buffer.length && !viewport.shouldLoadTop()) {\n\t adjustBufferAfterFetch(rid);\n\t } else {\n\t fetchPrevious(function (result) {\n\t if (isInvalid(rid)) {\n\t return;\n\t }\n\t\n\t if (result.length < bufferSize) {\n\t buffer.bof = true;\n\t // log 'bof is reached'\n\t }\n\t\n\t if (result.length > 0) {\n\t if (buffer.length) {\n\t viewport.clipBottom();\n\t }\n\t buffer.prepend(result);\n\t }\n\t\n\t adjustBufferAfterFetch(rid);\n\t });\n\t }\n\t }\n\t }\n\t\n\t function resizeAndScrollHandler() {\n\t if (!$rootScope.$$phase && !adapter.isLoading && !adapter.disabled) {\n\t\n\t enqueueFetch(ridActual);\n\t\n\t if (pending.length) {\n\t unbindEvents();\n\t } else {\n\t adapter.calculateProperties();\n\t $scope.$apply();\n\t }\n\t }\n\t }\n\t\n\t function wheelHandler(event) {\n\t if (!adapter.disabled) {\n\t var scrollTop = viewport[0].scrollTop;\n\t var yMax = viewport[0].scrollHeight - viewport[0].clientHeight;\n\t\n\t if (scrollTop === 0 && !buffer.bof || scrollTop === yMax && !buffer.eof) {\n\t event.preventDefault();\n\t }\n\t }\n\t }\n\t }\n\t}]);\n\n/***/ },\n/* 1 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _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\t\n\tvar _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\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\t/*!\r\n\t globals: angular, window\r\n\t List of used element methods available in JQuery but not in JQuery Lite\r\n\t element.before(elem)\r\n\t element.height()\r\n\t element.outerHeight(true)\r\n\t element.height(value) = only for Top/Bottom padding elements\r\n\t element.scrollTop()\r\n\t element.scrollTop(value)\r\n\t */\n\t\n\tvar JQLiteExtras = function () {\n\t function JQLiteExtras() {\n\t _classCallCheck(this, JQLiteExtras);\n\t }\n\t\n\t _createClass(JQLiteExtras, [{\n\t key: 'registerFor',\n\t value: function registerFor(element) {\n\t var convertToPx = void 0,\n\t css = void 0,\n\t getStyle = void 0,\n\t isWindow = void 0;\n\t // angular implementation blows up if elem is the window\n\t css = angular.element.prototype.css;\n\t\n\t element.prototype.css = function (name, value) {\n\t var self = this;\n\t var elem = self[0];\n\t if (!(!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style)) {\n\t return css.call(self, name, value);\n\t }\n\t };\n\t\n\t // as defined in angularjs v1.0.5\n\t isWindow = function isWindow(obj) {\n\t return obj && obj.document && obj.location && obj.alert && obj.setInterval;\n\t };\n\t\n\t function scrollTo(self, direction, value) {\n\t var elem = self[0];\n\t\n\t var _top$left$direction = _slicedToArray({\n\t top: ['scrollTop', 'pageYOffset', 'scrollLeft'],\n\t left: ['scrollLeft', 'pageXOffset', 'scrollTop']\n\t }[direction], 3),\n\t method = _top$left$direction[0],\n\t prop = _top$left$direction[1],\n\t preserve = _top$left$direction[2];\n\t\n\t if (isWindow(elem)) {\n\t if (angular.isDefined(value)) {\n\t return elem.scrollTo(self[preserve].call(self), value);\n\t }\n\t return prop in elem ? elem[prop] : elem.document.documentElement[method];\n\t } else {\n\t if (angular.isDefined(value)) {\n\t elem[method] = value;\n\t }\n\t return elem[method];\n\t }\n\t }\n\t\n\t if (window.getComputedStyle) {\n\t getStyle = function getStyle(elem) {\n\t return window.getComputedStyle(elem, null);\n\t };\n\t convertToPx = function convertToPx(elem, value) {\n\t return parseFloat(value);\n\t };\n\t } else {\n\t getStyle = function getStyle(elem) {\n\t return elem.currentStyle;\n\t };\n\t convertToPx = function convertToPx(elem, value) {\n\t var left = void 0,\n\t result = void 0,\n\t rs = void 0,\n\t rsLeft = void 0,\n\t style = void 0;\n\t var core_pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n\t var rnumnonpx = new RegExp('^(' + core_pnum + ')(?!px)[a-z%]+$', 'i');\n\t\n\t if (!rnumnonpx.test(value)) {\n\t return parseFloat(value);\n\t }\n\t\n\t // ported from JQuery\n\t style = elem.style;\n\t left = style.left;\n\t rs = elem.runtimeStyle;\n\t rsLeft = rs && rs.left;\n\t if (rs) {\n\t rs.left = style.left;\n\t }\n\t // put in the new values to get a computed style out\n\t style.left = value;\n\t result = style.pixelLeft;\n\t style.left = left;\n\t if (rsLeft) {\n\t rs.left = rsLeft;\n\t }\n\t return result;\n\t };\n\t }\n\t\n\t function getMeasurements(elem, measure) {\n\t var base = void 0,\n\t borderA = void 0,\n\t borderB = void 0,\n\t computedMarginA = void 0,\n\t computedMarginB = void 0,\n\t computedStyle = void 0,\n\t dirA = void 0,\n\t dirB = void 0,\n\t marginA = void 0,\n\t marginB = void 0,\n\t paddingA = void 0,\n\t paddingB = void 0;\n\t\n\t if (isWindow(elem)) {\n\t base = document.documentElement[{ height: 'clientHeight', width: 'clientWidth' }[measure]];\n\t\n\t return {\n\t base: base,\n\t padding: 0,\n\t border: 0,\n\t margin: 0\n\t };\n\t }\n\t\n\t // Start with offset property\n\t\n\t var _width$height$measure = _slicedToArray({\n\t width: [elem.offsetWidth, 'Left', 'Right'],\n\t height: [elem.offsetHeight, 'Top', 'Bottom']\n\t }[measure], 3);\n\t\n\t base = _width$height$measure[0];\n\t dirA = _width$height$measure[1];\n\t dirB = _width$height$measure[2];\n\t\n\t\n\t computedStyle = getStyle(elem);\n\t paddingA = convertToPx(elem, computedStyle['padding' + dirA]) || 0;\n\t paddingB = convertToPx(elem, computedStyle['padding' + dirB]) || 0;\n\t borderA = convertToPx(elem, computedStyle['border' + dirA + 'Width']) || 0;\n\t borderB = convertToPx(elem, computedStyle['border' + dirB + 'Width']) || 0;\n\t computedMarginA = computedStyle['margin' + dirA];\n\t computedMarginB = computedStyle['margin' + dirB];\n\t\n\t // I do not care for width for now, so this hack is irrelevant\n\t // if ( !supportsPercentMargin )\n\t // computedMarginA = hackPercentMargin( elem, computedStyle, computedMarginA )\n\t // computedMarginB = hackPercentMargin( elem, computedStyle, computedMarginB )\n\t marginA = convertToPx(elem, computedMarginA) || 0;\n\t marginB = convertToPx(elem, computedMarginB) || 0;\n\t\n\t return {\n\t base: base,\n\t padding: paddingA + paddingB,\n\t border: borderA + borderB,\n\t margin: marginA + marginB\n\t };\n\t }\n\t\n\t function getWidthHeight(elem, direction, measure) {\n\t var computedStyle = void 0,\n\t result = void 0;\n\t\n\t var measurements = getMeasurements(elem, direction);\n\t\n\t if (measurements.base > 0) {\n\t return {\n\t base: measurements.base - measurements.padding - measurements.border,\n\t outer: measurements.base,\n\t outerfull: measurements.base + measurements.margin\n\t }[measure];\n\t }\n\t\n\t // Fall back to computed then uncomputed css if necessary\n\t computedStyle = getStyle(elem);\n\t result = computedStyle[direction];\n\t\n\t if (result < 0 || result === null) {\n\t result = elem.style[direction] || 0;\n\t }\n\t\n\t // Normalize \"\", auto, and prepare for extra\n\t result = parseFloat(result) || 0;\n\t\n\t return {\n\t base: result - measurements.padding - measurements.border,\n\t outer: result,\n\t outerfull: result + measurements.padding + measurements.border + measurements.margin\n\t }[measure];\n\t }\n\t\n\t // define missing methods\n\t return angular.forEach({\n\t before: function before(newElem) {\n\t var children, elem, i, j, parent, ref, self;\n\t self = this;\n\t elem = self[0];\n\t parent = self.parent();\n\t children = parent.contents();\n\t if (children[0] === elem) {\n\t return parent.prepend(newElem);\n\t } else {\n\t for (i = j = 1, ref = children.length - 1; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {\n\t if (children[i] === elem) {\n\t angular.element(children[i - 1]).after(newElem);\n\t return;\n\t }\n\t }\n\t throw new Error('invalid DOM structure ' + elem.outerHTML);\n\t }\n\t },\n\t height: function height(value) {\n\t var self;\n\t self = this;\n\t if (angular.isDefined(value)) {\n\t if (angular.isNumber(value)) {\n\t value = value + 'px';\n\t }\n\t return css.call(self, 'height', value);\n\t } else {\n\t return getWidthHeight(this[0], 'height', 'base');\n\t }\n\t },\n\t outerHeight: function outerHeight(option) {\n\t return getWidthHeight(this[0], 'height', option ? 'outerfull' : 'outer');\n\t },\n\t outerWidth: function outerWidth(option) {\n\t return getWidthHeight(this[0], 'width', option ? 'outerfull' : 'outer');\n\t },\n\t\n\t\n\t /*\r\n\t The offset setter method is not implemented\r\n\t */\n\t offset: function offset(value) {\n\t var docElem = void 0,\n\t win = void 0;\n\t var self = this;\n\t var box = {\n\t top: 0,\n\t left: 0\n\t };\n\t var elem = self[0];\n\t var doc = elem && elem.ownerDocument;\n\t\n\t if (arguments.length) {\n\t if (value === undefined) {\n\t return self;\n\t }\n\t // TODO: implement setter\n\t throw new Error('offset setter method is not implemented');\n\t }\n\t\n\t if (!doc) {\n\t return;\n\t }\n\t\n\t docElem = doc.documentElement;\n\t\n\t // TODO: Make sure it's not a disconnected DOM node\n\t\n\t if (elem.getBoundingClientRect != null) {\n\t box = elem.getBoundingClientRect();\n\t }\n\t\n\t win = doc.defaultView || doc.parentWindow;\n\t\n\t return {\n\t top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),\n\t left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0)\n\t };\n\t },\n\t scrollTop: function scrollTop(value) {\n\t return scrollTo(this, 'top', value);\n\t },\n\t scrollLeft: function scrollLeft(value) {\n\t return scrollTo(this, 'left', value);\n\t }\n\t }, function (value, key) {\n\t if (!element.prototype[key]) {\n\t return element.prototype[key] = value;\n\t }\n\t });\n\t }\n\t }]);\n\t\n\t return JQLiteExtras;\n\t}();\n\t\n\texports.default = JQLiteExtras;\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\tvar _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\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tvar ElementRoutines = function () {\n\t function ElementRoutines($injector, $q) {\n\t _classCallCheck(this, ElementRoutines);\n\t\n\t this.$animate = $injector.has && $injector.has('$animate') ? $injector.get('$animate') : null;\n\t this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3;\n\t this.$q = $q;\n\t }\n\t\n\t _createClass(ElementRoutines, [{\n\t key: 'insertElement',\n\t value: function insertElement(newElement, previousElement) {\n\t previousElement.after(newElement);\n\t return [];\n\t }\n\t }, {\n\t key: 'removeElement',\n\t value: function removeElement(wrapper) {\n\t wrapper.element.remove();\n\t wrapper.scope.$destroy();\n\t return [];\n\t }\n\t }, {\n\t key: 'insertElementAnimated',\n\t value: function insertElementAnimated(newElement, previousElement) {\n\t var _this = this;\n\t\n\t if (!this.$animate) {\n\t return this.insertElement(newElement, previousElement);\n\t }\n\t\n\t if (this.isAngularVersionLessThen1_3) {\n\t var _ret = function () {\n\t var deferred = _this.$q.defer();\n\t // no need for parent - previous element is never null\n\t _this.$animate.enter(newElement, null, previousElement, function () {\n\t return deferred.resolve();\n\t });\n\t\n\t return {\n\t v: [deferred.promise]\n\t };\n\t }();\n\t\n\t if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === \"object\") return _ret.v;\n\t }\n\t\n\t // no need for parent - previous element is never null\n\t return [this.$animate.enter(newElement, null, previousElement)];\n\t }\n\t }, {\n\t key: 'removeElementAnimated',\n\t value: function removeElementAnimated(wrapper) {\n\t var _this2 = this;\n\t\n\t if (!this.$animate) {\n\t return this.removeElement(wrapper);\n\t }\n\t\n\t if (this.isAngularVersionLessThen1_3) {\n\t var _ret2 = function () {\n\t var deferred = _this2.$q.defer();\n\t _this2.$animate.leave(wrapper.element, function () {\n\t wrapper.scope.$destroy();\n\t return deferred.resolve();\n\t });\n\t\n\t return {\n\t v: [deferred.promise]\n\t };\n\t }();\n\t\n\t if ((typeof _ret2 === 'undefined' ? 'undefined' : _typeof(_ret2)) === \"object\") return _ret2.v;\n\t }\n\t\n\t return [this.$animate.leave(wrapper.element).then(function () {\n\t return wrapper.scope.$destroy();\n\t })];\n\t }\n\t }]);\n\t\n\t return ElementRoutines;\n\t}();\n\t\n\texports.default = ElementRoutines;\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.default = ScrollBuffer;\n\tfunction ScrollBuffer(elementRoutines, bufferSize) {\n\t var buffer = Object.create(Array.prototype);\n\t\n\t angular.extend(buffer, {\n\t size: bufferSize,\n\t\n\t reset: function reset(startIndex) {\n\t buffer.remove(0, buffer.length);\n\t buffer.eof = false;\n\t buffer.bof = false;\n\t buffer.first = startIndex;\n\t buffer.next = startIndex;\n\t buffer.minIndex = startIndex;\n\t buffer.maxIndex = startIndex;\n\t buffer.minIndexUser = null;\n\t buffer.maxIndexUser = null;\n\t },\n\t append: function append(items) {\n\t items.forEach(function (item) {\n\t ++buffer.next;\n\t buffer.insert('append', item);\n\t });\n\t buffer.maxIndex = buffer.eof ? buffer.next - 1 : Math.max(buffer.next - 1, buffer.maxIndex);\n\t },\n\t prepend: function prepend(items) {\n\t items.reverse().forEach(function (item) {\n\t --buffer.first;\n\t buffer.insert('prepend', item);\n\t });\n\t buffer.minIndex = buffer.bof ? buffer.minIndex = buffer.first : Math.min(buffer.first, buffer.minIndex);\n\t },\n\t\n\t\n\t /**\r\n\t * inserts wrapped element in the buffer\r\n\t * the first argument is either operation keyword (see below) or a number for operation 'insert'\r\n\t * for insert the number is the index for the buffer element the new one have to be inserted after\r\n\t * operations: 'append', 'prepend', 'insert', 'remove', 'update', 'none'\r\n\t */\n\t insert: function insert(operation, item) {\n\t var wrapper = {\n\t item: item\n\t };\n\t\n\t if (operation % 1 === 0) {\n\t // it is an insert\n\t wrapper.op = 'insert';\n\t buffer.splice(operation, 0, wrapper);\n\t } else {\n\t wrapper.op = operation;\n\t switch (operation) {\n\t case 'append':\n\t buffer.push(wrapper);\n\t break;\n\t case 'prepend':\n\t buffer.unshift(wrapper);\n\t break;\n\t }\n\t }\n\t },\n\t\n\t\n\t // removes elements from buffer\n\t remove: function remove(arg1, arg2) {\n\t if (angular.isNumber(arg1)) {\n\t // removes items from arg1 (including) through arg2 (excluding)\n\t for (var i = arg1; i < arg2; i++) {\n\t elementRoutines.removeElement(buffer[i]);\n\t }\n\t\n\t return buffer.splice(arg1, arg2 - arg1);\n\t }\n\t // removes single item(wrapper) from the buffer\n\t buffer.splice(buffer.indexOf(arg1), 1);\n\t\n\t return elementRoutines.removeElementAnimated(arg1);\n\t },\n\t effectiveHeight: function effectiveHeight(elements) {\n\t if (!elements.length) {\n\t return 0;\n\t }\n\t var top = Number.MAX_VALUE;\n\t var bottom = Number.MIN_VALUE;\n\t elements.forEach(function (wrapper) {\n\t if (wrapper.element[0].offsetParent) {\n\t // element style is not display:none\n\t top = Math.min(top, wrapper.element.offset().top);\n\t bottom = Math.max(bottom, wrapper.element.offset().top + wrapper.element.outerHeight(true));\n\t }\n\t });\n\t return Math.max(0, bottom - top);\n\t }\n\t });\n\t\n\t return buffer;\n\t}\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.default = Viewport;\n\t\n\tvar _padding = __webpack_require__(5);\n\t\n\tvar _padding2 = _interopRequireDefault(_padding);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding) {\n\t var topPadding = null;\n\t var bottomPadding = null;\n\t var viewport = viewportController && viewportController.viewport ? viewportController.viewport : angular.element(window);\n\t var container = viewportController && viewportController.container ? viewportController.container : undefined;\n\t var scope = viewportController && viewportController.scope ? viewportController.scope : $rootScope;\n\t\n\t viewport.css({\n\t 'overflow-anchor': 'none',\n\t 'overflow-y': 'auto',\n\t 'display': 'block'\n\t });\n\t\n\t function bufferPadding() {\n\t return viewport.outerHeight() * padding; // some extra space to initiate preload\n\t }\n\t\n\t angular.extend(viewport, {\n\t getScope: function getScope() {\n\t return scope;\n\t },\n\t createPaddingElements: function createPaddingElements(template) {\n\t topPadding = new _padding2.default(template);\n\t bottomPadding = new _padding2.default(template);\n\t element.before(topPadding);\n\t element.after(bottomPadding);\n\t },\n\t applyContainerStyle: function applyContainerStyle() {\n\t if (container && container !== viewport) {\n\t viewport.css('height', window.getComputedStyle(container[0]).height);\n\t }\n\t },\n\t bottomDataPos: function bottomDataPos() {\n\t var scrollHeight = viewport[0].scrollHeight;\n\t scrollHeight = scrollHeight != null ? scrollHeight : viewport[0].document.documentElement.scrollHeight;\n\t return scrollHeight - bottomPadding.height();\n\t },\n\t topDataPos: function topDataPos() {\n\t return topPadding.height();\n\t },\n\t bottomVisiblePos: function bottomVisiblePos() {\n\t return viewport.scrollTop() + viewport.outerHeight();\n\t },\n\t topVisiblePos: function topVisiblePos() {\n\t return viewport.scrollTop();\n\t },\n\t insertElement: function insertElement(e, sibling) {\n\t return elementRoutines.insertElement(e, sibling || topPadding);\n\t },\n\t insertElementAnimated: function insertElementAnimated(e, sibling) {\n\t return elementRoutines.insertElementAnimated(e, sibling || topPadding);\n\t },\n\t shouldLoadBottom: function shouldLoadBottom() {\n\t return !buffer.eof && viewport.bottomDataPos() < viewport.bottomVisiblePos() + bufferPadding();\n\t },\n\t clipBottom: function clipBottom() {\n\t // clip the invisible items off the bottom\n\t var overage = 0;\n\t var overageHeight = 0;\n\t var itemHeight = 0;\n\t var emptySpaceHeight = viewport.bottomDataPos() - viewport.bottomVisiblePos() - bufferPadding();\n\t\n\t for (var i = buffer.length - 1; i >= 0; i--) {\n\t itemHeight = buffer[i].element.outerHeight(true);\n\t if (overageHeight + itemHeight > emptySpaceHeight) {\n\t break;\n\t }\n\t bottomPadding.cache.add(buffer[i]);\n\t overageHeight += itemHeight;\n\t overage++;\n\t }\n\t\n\t if (overage > 0) {\n\t buffer.eof = false;\n\t buffer.remove(buffer.length - overage, buffer.length);\n\t buffer.next -= overage;\n\t viewport.adjustPadding();\n\t }\n\t },\n\t shouldLoadTop: function shouldLoadTop() {\n\t return !buffer.bof && viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding();\n\t },\n\t clipTop: function clipTop() {\n\t // clip the invisible items off the top\n\t var overage = 0;\n\t var overageHeight = 0;\n\t var itemHeight = 0;\n\t var emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\n\t\n\t for (var i = 0; i < buffer.length; i++) {\n\t itemHeight = buffer[i].element.outerHeight(true);\n\t if (overageHeight + itemHeight > emptySpaceHeight) {\n\t break;\n\t }\n\t topPadding.cache.add(buffer[i]);\n\t overageHeight += itemHeight;\n\t overage++;\n\t }\n\t\n\t if (overage > 0) {\n\t // we need to adjust top padding element before items are removed from top\n\t // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\n\t topPadding.height(topPadding.height() + overageHeight);\n\t buffer.bof = false;\n\t buffer.remove(0, overage);\n\t buffer.first += overage;\n\t }\n\t },\n\t adjustPadding: function adjustPadding() {\n\t if (!buffer.length) {\n\t return;\n\t }\n\t\n\t // precise heights calculation, items that were in buffer once\n\t var topPaddingHeight = topPadding.cache.reduce(function (summ, item) {\n\t return summ + (item.index < buffer.first ? item.height : 0);\n\t }, 0);\n\t var bottomPaddingHeight = bottomPadding.cache.reduce(function (summ, item) {\n\t return summ + (item.index >= buffer.next ? item.height : 0);\n\t }, 0);\n\t\n\t // average item height based on buffer data\n\t var visibleItemsHeight = buffer.reduce(function (summ, item) {\n\t return summ + item.element.outerHeight(true);\n\t }, 0);\n\t var averageItemHeight = (visibleItemsHeight + topPaddingHeight + bottomPaddingHeight) / (buffer.maxIndex - buffer.minIndex + 1);\n\t\n\t // average heights calculation, items that have never been reached\n\t var adjustTopPadding = buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser;\n\t var adjustBottomPadding = buffer.maxIndexUser !== null && buffer.maxIndex < buffer.maxIndexUser;\n\t var topPaddingHeightAdd = adjustTopPadding ? (buffer.minIndex - buffer.minIndexUser) * averageItemHeight : 0;\n\t var bottomPaddingHeightAdd = adjustBottomPadding ? (buffer.maxIndexUser - buffer.maxIndex) * averageItemHeight : 0;\n\t\n\t // paddings combine adjustment\n\t topPadding.height(topPaddingHeight + topPaddingHeightAdd);\n\t bottomPadding.height(bottomPaddingHeight + bottomPaddingHeightAdd);\n\t },\n\t adjustScrollTopAfterMinIndexSet: function adjustScrollTopAfterMinIndexSet(topPaddingHeightOld) {\n\t // additional scrollTop adjustment in case of datasource.minIndex external set\n\t if (buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser) {\n\t var diff = topPadding.height() - topPaddingHeightOld;\n\t viewport.scrollTop(viewport.scrollTop() + diff);\n\t }\n\t },\n\t adjustScrollTopAfterPrepend: function adjustScrollTopAfterPrepend(updates) {\n\t if (!updates.prepended.length) return;\n\t var height = buffer.effectiveHeight(updates.prepended);\n\t var paddingHeight = topPadding.height() - height;\n\t if (paddingHeight >= 0) {\n\t topPadding.height(paddingHeight);\n\t } else {\n\t topPadding.height(0);\n\t viewport.scrollTop(viewport.scrollTop() - paddingHeight);\n\t }\n\t },\n\t resetTopPadding: function resetTopPadding() {\n\t topPadding.height(0);\n\t topPadding.cache.clear();\n\t },\n\t resetBottomPadding: function resetBottomPadding() {\n\t bottomPadding.height(0);\n\t bottomPadding.cache.clear();\n\t },\n\t removeItem: function removeItem(item) {\n\t topPadding.cache.remove(item);\n\t bottomPadding.cache.remove(item);\n\t return buffer.remove(item);\n\t }\n\t });\n\t\n\t return viewport;\n\t}\n\n/***/ },\n/* 5 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.default = Padding;\n\tfunction Cache() {\n\t var cache = Object.create(Array.prototype);\n\t\n\t angular.extend(cache, {\n\t add: function add(item) {\n\t for (var i = cache.length - 1; i >= 0; i--) {\n\t if (cache[i].index === item.scope.$index) {\n\t cache[i].height = item.element.outerHeight();\n\t return;\n\t }\n\t }\n\t cache.push({\n\t index: item.scope.$index,\n\t height: item.element.outerHeight()\n\t });\n\t cache.sort(function (a, b) {\n\t return a.index < b.index ? -1 : a.index > b.index ? 1 : 0;\n\t });\n\t },\n\t remove: function remove(item) {\n\t for (var i = cache.length - 1; i >= 0; i--) {\n\t if (cache[i].index === item.scope.$index) {\n\t cache.splice(i, 1);\n\t break;\n\t }\n\t }\n\t for (var _i = cache.length - 1; _i >= 0; _i--) {\n\t if (cache[_i].index > item.scope.$index) {\n\t cache[_i].index--;\n\t }\n\t }\n\t },\n\t clear: function clear() {\n\t cache.length = 0;\n\t }\n\t });\n\t\n\t return cache;\n\t}\n\t\n\tfunction Padding(template) {\n\t var result = void 0;\n\t\n\t switch (template.tagName) {\n\t case 'dl':\n\t throw new Error('ui-scroll directive does not support <' + template.tagName + '> as a repeating tag: ' + template.outerHTML);\n\t case 'tr':\n\t var table = angular.element('
    ');\n\t result = table.find('tr');\n\t break;\n\t case 'li':\n\t result = angular.element('
  • ');\n\t break;\n\t default:\n\t result = angular.element('
    ');\n\t }\n\t\n\t result.cache = new Cache();\n\t\n\t return result;\n\t}\n\n/***/ },\n/* 6 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _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\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tfunction getCtrlOnData(attr, element) {\n\t var onSyntax = attr.match(/^(.+)(\\s+on\\s+)(.+)?/);\n\t if (onSyntax && onSyntax.length === 4) {\n\t window.console.log('Angular ui-scroll adapter assignment warning. \"Controller On\" syntax has been deprecated since ui-scroll v1.6.1.');\n\t var ctrl = onSyntax[3];\n\t var tail = onSyntax[1];\n\t var candidate = element;\n\t while (candidate.length) {\n\t var candidateScope = candidate.scope(); // doesn't work when debugInfoEnabled flag = true\n\t var candidateName = (candidate.attr('ng-controller') || '').match(/(\\w(?:\\w|\\d)*)(?:\\s+as\\s+(\\w(?:\\w|\\d)*))?/);\n\t if (candidateName && candidateName[1] === ctrl) {\n\t return {\n\t target: candidateScope,\n\t source: tail\n\t };\n\t }\n\t candidate = candidate.parent();\n\t }\n\t throw new Error('Angular ui-scroll adapter assignment error. Failed to locate target controller \"' + ctrl + '\" to inject \"' + tail + '\"');\n\t }\n\t}\n\t\n\tvar Adapter = function () {\n\t function Adapter(viewport, buffer, adjustBuffer, reload, $attr, $parse, element, $scope) {\n\t _classCallCheck(this, Adapter);\n\t\n\t this.viewport = viewport;\n\t this.buffer = buffer;\n\t this.adjustBuffer = adjustBuffer;\n\t this.reload = reload;\n\t\n\t this.isLoading = false;\n\t this.disabled = false;\n\t\n\t var viewportScope = viewport.getScope();\n\t this.startScope = viewportScope.$parent ? viewportScope : $scope;\n\t\n\t this.publicContext = {};\n\t this.assignAdapter($attr.adapter, $parse, element);\n\t this.generatePublicContext($attr, $parse);\n\t }\n\t\n\t _createClass(Adapter, [{\n\t key: 'assignAdapter',\n\t value: function assignAdapter(adapterAttr, $parse, element) {\n\t if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\\s+|\\s+$/gm, ''))) {\n\t return;\n\t }\n\t var ctrlOnData = getCtrlOnData(adapterAttr, element);\n\t var adapterOnScope = void 0;\n\t\n\t try {\n\t if (ctrlOnData) {\n\t // \"Controller On\", deprecated since v1.6.1\n\t $parse(ctrlOnData.source).assign(ctrlOnData.target, {});\n\t adapterOnScope = $parse(ctrlOnData.source)(ctrlOnData.target);\n\t } else {\n\t $parse(adapterAttr).assign(this.startScope, {});\n\t adapterOnScope = $parse(adapterAttr)(this.startScope);\n\t }\n\t } catch (error) {\n\t error.message = 'Angular ui-scroll Adapter assignment exception.\\n' + ('Can\\'t parse \"' + adapterAttr + '\" expression.\\n') + error.message;\n\t throw error;\n\t }\n\t\n\t angular.extend(adapterOnScope, this.publicContext);\n\t this.publicContext = adapterOnScope;\n\t }\n\t }, {\n\t key: 'generatePublicContext',\n\t value: function generatePublicContext($attr, $parse) {\n\t var _this = this;\n\t\n\t // these methods will be accessible out of ui-scroll via user defined adapter\n\t var publicMethods = ['reload', 'applyUpdates', 'append', 'prepend', 'isBOF', 'isEOF', 'isEmpty'];\n\t for (var i = publicMethods.length - 1; i >= 0; i--) {\n\t this.publicContext[publicMethods[i]] = this[publicMethods[i]].bind(this);\n\t }\n\t\n\t // these read-only props will be accessible out of ui-scroll via user defined adapter\n\t var publicProps = ['isLoading', 'topVisible', 'topVisibleElement', 'topVisibleScope', 'bottomVisible', 'bottomVisibleElement', 'bottomVisibleScope'];\n\t\n\t var _loop = function _loop(_i) {\n\t var property = void 0,\n\t attr = $attr[publicProps[_i]];\n\t Object.defineProperty(_this, publicProps[_i], {\n\t get: function get() {\n\t return property;\n\t },\n\t set: function set(value) {\n\t property = value;\n\t _this.publicContext[publicProps[_i]] = value;\n\t if (attr) {\n\t $parse(attr).assign(_this.startScope, value);\n\t }\n\t }\n\t });\n\t };\n\t\n\t for (var _i = publicProps.length - 1; _i >= 0; _i--) {\n\t _loop(_i);\n\t }\n\t\n\t // non-read-only public property\n\t Object.defineProperty(this.publicContext, 'disabled', {\n\t get: function get() {\n\t return _this.disabled;\n\t },\n\t set: function set(value) {\n\t return !(_this.disabled = value) ? _this.adjustBuffer() : null;\n\t }\n\t });\n\t }\n\t }, {\n\t key: 'loading',\n\t value: function loading(value) {\n\t this['isLoading'] = value;\n\t }\n\t }, {\n\t key: 'isBOF',\n\t value: function isBOF() {\n\t return this.buffer.bof;\n\t }\n\t }, {\n\t key: 'isEOF',\n\t value: function isEOF() {\n\t return this.buffer.eof;\n\t }\n\t }, {\n\t key: 'isEmpty',\n\t value: function isEmpty() {\n\t return !this.buffer.length;\n\t }\n\t }, {\n\t key: 'applyUpdates',\n\t value: function applyUpdates(arg1, arg2) {\n\t var _this2 = this;\n\t\n\t if (angular.isFunction(arg1)) {\n\t // arg1 is the updater function, arg2 is ignored\n\t this.buffer.slice(0).forEach(function (wrapper) {\n\t // we need to do it on the buffer clone, because buffer content\n\t // may change as we iterate through\n\t _this2.applyUpdate(wrapper, arg1(wrapper.item, wrapper.scope, wrapper.element));\n\t });\n\t } else {\n\t // arg1 is item index, arg2 is the newItems array\n\t if (arg1 % 1 !== 0) {\n\t // checking if it is an integer\n\t throw new Error('applyUpdates - ' + arg1 + ' is not a valid index');\n\t }\n\t\n\t var index = arg1 - this.buffer.first;\n\t if (index >= 0 && index < this.buffer.length) {\n\t this.applyUpdate(this.buffer[index], arg2);\n\t }\n\t }\n\t\n\t this.adjustBuffer();\n\t }\n\t }, {\n\t key: 'append',\n\t value: function append(newItems) {\n\t this.buffer.append(newItems);\n\t this.adjustBuffer();\n\t }\n\t }, {\n\t key: 'prepend',\n\t value: function prepend(newItems) {\n\t this.buffer.prepend(newItems);\n\t this.adjustBuffer();\n\t }\n\t }, {\n\t key: 'calculateProperties',\n\t value: function calculateProperties() {\n\t var rowTop = null,\n\t topHeight = 0;\n\t var topDone = false,\n\t bottomDone = false;\n\t var length = this.buffer.length;\n\t\n\t for (var i = 0; i < length; i++) {\n\t var item = this.buffer[i];\n\t var itemTop = item.element.offset().top;\n\t\n\t if (rowTop !== itemTop) {\n\t // a new row condition\n\t var itemHeight = item.element.outerHeight(true);\n\t var top = this.viewport.topDataPos() + topHeight + itemHeight;\n\t\n\t if (!topDone && top > this.viewport.topVisiblePos()) {\n\t topDone = true;\n\t this['topVisible'] = item.item;\n\t this['topVisibleElement'] = item.element;\n\t this['topVisibleScope'] = item.scope;\n\t }\n\t\n\t if (!bottomDone && (top >= this.viewport.bottomVisiblePos() || i === length - 1 && this.isEOF())) {\n\t bottomDone = true;\n\t this['bottomVisible'] = item.item;\n\t this['bottomVisibleElement'] = item.element;\n\t this['bottomVisibleScope'] = item.scope;\n\t }\n\t topHeight += itemHeight;\n\t }\n\t\n\t rowTop = itemTop;\n\t\n\t if (topDone && bottomDone) {\n\t break;\n\t }\n\t }\n\t }\n\t }, {\n\t key: 'applyUpdate',\n\t value: function applyUpdate(wrapper, newItems) {\n\t var _this3 = this;\n\t\n\t if (!angular.isArray(newItems)) {\n\t return;\n\t }\n\t\n\t var keepIt = void 0;\n\t var pos = this.buffer.indexOf(wrapper) + 1;\n\t\n\t newItems.reverse().forEach(function (newItem) {\n\t if (newItem === wrapper.item) {\n\t keepIt = true;\n\t pos--;\n\t } else {\n\t _this3.buffer.insert(pos, newItem);\n\t }\n\t });\n\t\n\t if (!keepIt) {\n\t wrapper.op = 'remove';\n\t }\n\t }\n\t }]);\n\t\n\t return Adapter;\n\t}();\n\t\n\texports.default = Adapter;\n\n/***/ }\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// ui-scroll.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap ffc9be10331d38078fc3","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 indexStore = {};\n\n function defineProperty(datasource, propName, propUserName) {\n let descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n if (!descriptor || (!descriptor.set && !descriptor.get)) {\n Object.defineProperty(datasource, propName, {\n set: (value) => {\n indexStore[propName] = value;\n $timeout(() => {\n buffer[propUserName] = value;\n if (!pending.length) {\n let topPaddingHeightOld = viewport.topDataPos();\n viewport.adjustPadding();\n if (propName === 'minIndex') {\n viewport.adjustScrollTopAfterMinIndexSet(topPaddingHeightOld);\n }\n }\n });\n },\n get: () => indexStore[propName]\n });\n }\n }\n\n defineProperty(datasource, 'minIndex', 'minIndexUser');\n defineProperty(datasource, 'maxIndex', 'maxIndexUser');\n\n const fetchNext = (datasource.get.length !== 2) ? (success) => datasource.get(buffer.next, bufferSize, success)\n : (success) => {\n datasource.get({\n index: buffer.next,\n append: buffer.length ? buffer[buffer.length - 1].item : void 0,\n count: bufferSize\n }, success);\n };\n\n const fetchPrevious = (datasource.get.length !== 2) ? (success) => datasource.get(buffer.first - bufferSize, bufferSize, success)\n : (success) => {\n datasource.get({\n index: buffer.first - bufferSize,\n prepend: buffer.length ? buffer[0].item : void 0,\n count: bufferSize\n }, success);\n };\n\n /**\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 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 if (adapter.transform)\n adapter.transform(wrapper.scope, wrapper.element);\n return promises;\n }\n\n function updateDOM() {\n let promises = [];\n const toBePrepended = [];\n const toBeRemoved = [];\n const inserted = [];\n\n buffer.forEach((wrapper, i) => {\n switch (wrapper.op) {\n case 'prepend':\n toBePrepended.unshift(wrapper);\n break;\n case 'append':\n insertWrapperContent(wrapper, i);\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'insert':\n promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated));\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'remove':\n toBeRemoved.push(wrapper);\n }\n });\n\n toBeRemoved.forEach((wrapper) => promises = promises.concat(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.adjustPadding();\n adjustBuffer(rid);\n });\n } else {\n viewport.adjustPadding();\n }\n }\n\n function enqueueFetch(rid, updates) {\n if (viewport.shouldLoadBottom()) {\n if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\n // this means that at least one item appended in the last batch has height > 0\n if (pending.push(true) === 1) {\n fetch(rid);\n adapter.loading(true);\n }\n }\n } else if (viewport.shouldLoadTop()) {\n if ((!updates || buffer.effectiveHeight(updates.prepended) > 0) || pending[0]) {\n // this means that at least one item appended in the last batch has height > 0\n // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\n // BTW there will always be at least 1 element in the pending array because bottom is fetched first\n if (pending.push(false) === 1) {\n fetch(rid);\n adapter.loading(true);\n }\n }\n }\n }\n\n function adjustBuffer(rid) {\n if (!rid) { // dismiss pending requests\n pending = [];\n rid = ++ridActual;\n }\n\n let updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustment\n $timeout(() => {\n\n // show elements after data binging has been done\n updates.inserted.forEach(w => w.element.removeClass('ng-hide'));\n updates.prepended.forEach(w => w.element.removeClass('ng-hide'));\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n enqueueFetch(rid);\n\n if (!pending.length) {\n adapter.calculateProperties();\n }\n });\n }\n\n function adjustBufferAfterFetch(rid) {\n let updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustment\n $timeout(() => {\n\n // show elements after data binging has been done\n updates.inserted.forEach(w => w.element.removeClass('ng-hide'));\n updates.prepended.forEach(w => w.element.removeClass('ng-hide'));\n\n viewport.adjustScrollTopAfterPrepend(updates);\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n enqueueFetch(rid, updates);\n pending.shift();\n\n if (pending.length)\n fetch(rid);\n else {\n adapter.loading(false);\n bindEvents();\n adapter.calculateProperties();\n }\n });\n }\n\n function fetch(rid) {\n if (pending[0]) {// scrolling down\n if (buffer.length && !viewport.shouldLoadBottom()) {\n adjustBufferAfterFetch(rid);\n } else {\n fetchNext((result) => {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.eof = true;\n }\n\n if (result.length > 0) {\n viewport.clipTop();\n buffer.append(result);\n }\n\n adjustBufferAfterFetch(rid);\n });\n }\n } else { // scrolling up\n if (buffer.length && !viewport.shouldLoadTop()) {\n adjustBufferAfterFetch(rid);\n } else {\n fetchPrevious((result) => {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.bof = true;\n // log 'bof is reached'\n }\n\n if (result.length > 0) {\n if (buffer.length) {\n viewport.clipBottom();\n }\n buffer.prepend(result);\n }\n\n adjustBufferAfterFetch(rid);\n });\n }\n }\n }\n\n function resizeAndScrollHandler() {\n if (!$rootScope.$$phase && !adapter.isLoading && !adapter.disabled) {\n\n enqueueFetch(ridActual);\n\n if (pending.length) {\n unbindEvents();\n } else {\n adapter.calculateProperties();\n $scope.$apply();\n }\n }\n }\n\n function wheelHandler(event) {\n if (!adapter.disabled) {\n let scrollTop = viewport[0].scrollTop;\n let yMax = viewport[0].scrollHeight - viewport[0].clientHeight;\n\n if ((scrollTop === 0 && !buffer.bof) || (scrollTop === yMax && !buffer.eof)) {\n event.preventDefault();\n }\n }\n }\n }\n\n }\n ]);\n\n\n// WEBPACK FOOTER //\n// ./src/ui-scroll.js","/*!\r\n globals: angular, window\r\n List of used element methods available in JQuery but not in JQuery Lite\r\n element.before(elem)\r\n element.height()\r\n element.outerHeight(true)\r\n element.height(value) = only for Top/Bottom padding elements\r\n element.scrollTop()\r\n element.scrollTop(value)\r\n */\r\n\r\nexport default class JQLiteExtras {\r\n\r\n registerFor(element) {\r\n let convertToPx, css, getStyle, isWindow;\r\n // angular implementation blows up if elem is the window\r\n css = angular.element.prototype.css;\r\n\r\n element.prototype.css = function (name, value) {\r\n let self = this;\r\n let elem = self[0];\r\n if (!(!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style)) {\r\n return css.call(self, name, value);\r\n }\r\n };\r\n\r\n // as defined in angularjs v1.0.5\r\n isWindow = (obj) => obj && obj.document && obj.location && obj.alert && obj.setInterval;\r\n\r\n function scrollTo(self, direction, value) {\r\n let elem = self[0];\r\n let [method, prop, preserve] = {\r\n top: [\r\n 'scrollTop',\r\n 'pageYOffset',\r\n 'scrollLeft'\r\n ],\r\n left: [\r\n 'scrollLeft',\r\n 'pageXOffset',\r\n 'scrollTop'\r\n ]\r\n }[direction];\r\n\r\n if (isWindow(elem)) {\r\n if (angular.isDefined(value)) {\r\n return elem.scrollTo(self[preserve].call(self), value);\r\n }\r\n return (prop in elem) ? elem[prop] : elem.document.documentElement[method];\r\n } else {\r\n if (angular.isDefined(value)) {\r\n elem[method] = value;\r\n }\r\n return elem[method];\r\n }\r\n }\r\n\r\n if (window.getComputedStyle) {\r\n getStyle = (elem) => window.getComputedStyle(elem, null);\r\n convertToPx = (elem, value) => parseFloat(value);\r\n } else {\r\n getStyle = (elem) => elem.currentStyle;\r\n convertToPx = (elem, value) => {\r\n let left, result, rs, rsLeft, style;\r\n let core_pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\r\n let rnumnonpx = new RegExp('^(' + core_pnum + ')(?!px)[a-z%]+$', 'i');\r\n\r\n if (!rnumnonpx.test(value)) {\r\n return parseFloat(value);\r\n }\r\n\r\n // ported from JQuery\r\n style = elem.style;\r\n left = style.left;\r\n rs = elem.runtimeStyle;\r\n rsLeft = rs && rs.left;\r\n if (rs) {\r\n rs.left = style.left;\r\n }\r\n // put in the new values to get a computed style out\r\n style.left = value;\r\n result = style.pixelLeft;\r\n style.left = left;\r\n if (rsLeft) {\r\n rs.left = rsLeft;\r\n }\r\n return result;\r\n };\r\n }\r\n\r\n function getMeasurements(elem, measure) {\r\n let base, borderA, borderB, computedMarginA, computedMarginB, computedStyle, dirA, dirB, marginA, marginB, paddingA, paddingB;\r\n\r\n if (isWindow(elem)) {\r\n base = document.documentElement[{height: 'clientHeight', width: 'clientWidth'}[measure]];\r\n\r\n return {\r\n base: base,\r\n padding: 0,\r\n border: 0,\r\n margin: 0\r\n };\r\n }\r\n\r\n // Start with offset property\r\n [\r\n base,\r\n dirA,\r\n dirB\r\n ] = {\r\n width: [\r\n elem.offsetWidth,\r\n 'Left',\r\n 'Right'\r\n ],\r\n height: [\r\n elem.offsetHeight,\r\n 'Top',\r\n 'Bottom'\r\n ]\r\n }[measure];\r\n\r\n computedStyle = getStyle(elem);\r\n paddingA = convertToPx(elem, computedStyle['padding' + dirA]) || 0;\r\n paddingB = convertToPx(elem, computedStyle['padding' + dirB]) || 0;\r\n borderA = convertToPx(elem, computedStyle['border' + dirA + 'Width']) || 0;\r\n borderB = convertToPx(elem, computedStyle['border' + dirB + 'Width']) || 0;\r\n computedMarginA = computedStyle['margin' + dirA];\r\n computedMarginB = computedStyle['margin' + dirB];\r\n\r\n // I do not care for width for now, so this hack is irrelevant\r\n // if ( !supportsPercentMargin )\r\n // computedMarginA = hackPercentMargin( elem, computedStyle, computedMarginA )\r\n // computedMarginB = hackPercentMargin( elem, computedStyle, computedMarginB )\r\n marginA = convertToPx(elem, computedMarginA) || 0;\r\n marginB = convertToPx(elem, computedMarginB) || 0;\r\n\r\n return {\r\n base: base,\r\n padding: paddingA + paddingB,\r\n border: borderA + borderB,\r\n margin: marginA + marginB\r\n };\r\n }\r\n\r\n function getWidthHeight(elem, direction, measure) {\r\n let computedStyle, result;\r\n\r\n let measurements = getMeasurements(elem, direction);\r\n\r\n if (measurements.base > 0) {\r\n return {\r\n base: measurements.base - measurements.padding - measurements.border,\r\n outer: measurements.base,\r\n outerfull: measurements.base + measurements.margin\r\n }[measure];\r\n }\r\n\r\n // Fall back to computed then uncomputed css if necessary\r\n computedStyle = getStyle(elem);\r\n result = computedStyle[direction];\r\n\r\n if (result < 0 || result === null) {\r\n result = elem.style[direction] || 0;\r\n }\r\n\r\n // Normalize \"\", auto, and prepare for extra\r\n result = parseFloat(result) || 0;\r\n\r\n return {\r\n base: result - measurements.padding - measurements.border,\r\n outer: result,\r\n outerfull: result + measurements.padding + measurements.border + measurements.margin\r\n }[measure];\r\n }\r\n\r\n // define missing methods\r\n return angular.forEach({\r\n before(newElem) {\r\n var children, elem, i, j, parent, ref, self;\r\n self = this;\r\n elem = self[0];\r\n parent = self.parent();\r\n children = parent.contents();\r\n if (children[0] === elem) {\r\n return parent.prepend(newElem);\r\n } else {\r\n for (i = j = 1, ref = children.length - 1; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {\r\n if (children[i] === elem) {\r\n angular.element(children[i - 1]).after(newElem);\r\n return;\r\n }\r\n }\r\n throw new Error('invalid DOM structure ' + elem.outerHTML);\r\n }\r\n },\r\n height (value){\r\n var self;\r\n self = this;\r\n if (angular.isDefined(value)) {\r\n if (angular.isNumber(value)) {\r\n value = value + 'px';\r\n }\r\n return css.call(self, 'height', value);\r\n } else {\r\n return getWidthHeight(this[0], 'height', 'base');\r\n }\r\n },\r\n outerHeight(option) {\r\n return getWidthHeight(this[0], 'height', option ? 'outerfull' : 'outer');\r\n },\r\n outerWidth(option) {\r\n return getWidthHeight(this[0], 'width', option ? 'outerfull' : 'outer');\r\n },\r\n\r\n /*\r\n The offset setter method is not implemented\r\n */\r\n offset(value) {\r\n let docElem, win;\r\n let self = this;\r\n let box = {\r\n top: 0,\r\n left: 0\r\n };\r\n let elem = self[0];\r\n let doc = elem && elem.ownerDocument;\r\n\r\n if (arguments.length) {\r\n if (value === undefined) {\r\n return self;\r\n }\r\n // TODO: implement setter\r\n throw new Error('offset setter method is not implemented');\r\n }\r\n\r\n if (!doc) {\r\n return;\r\n }\r\n\r\n docElem = doc.documentElement;\r\n\r\n // TODO: Make sure it's not a disconnected DOM node\r\n\r\n if (elem.getBoundingClientRect != null) {\r\n box = elem.getBoundingClientRect();\r\n }\r\n\r\n win = doc.defaultView || doc.parentWindow;\r\n\r\n return {\r\n top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),\r\n left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0)\r\n };\r\n },\r\n scrollTop(value) {\r\n return scrollTo(this, 'top', value);\r\n },\r\n scrollLeft(value) {\r\n return scrollTo(this, 'left', value);\r\n }\r\n }, (value, key) => {\r\n if (!element.prototype[key]) {\r\n return element.prototype[key] = value;\r\n }\r\n });\r\n }\r\n\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/jqLiteExtras.js","export default class ElementRoutines {\r\n\r\n constructor($injector, $q) {\r\n this.$animate = ($injector.has && $injector.has('$animate')) ? $injector.get('$animate') : null;\r\n this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3;\r\n this.$q = $q;\r\n }\r\n\r\n insertElement(newElement, previousElement) {\r\n previousElement.after(newElement);\r\n return [];\r\n }\r\n\r\n removeElement(wrapper) {\r\n wrapper.element.remove();\r\n wrapper.scope.$destroy();\r\n return [];\r\n }\r\n\r\n insertElementAnimated(newElement, previousElement) {\r\n if (!this.$animate) {\r\n return this.insertElement(newElement, previousElement);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n // no need for parent - previous element is never null\r\n this.$animate.enter(newElement, null, previousElement, () => deferred.resolve());\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n // no need for parent - previous element is never null\r\n return [this.$animate.enter(newElement, null, previousElement)];\r\n }\r\n\r\n removeElementAnimated(wrapper) {\r\n if (!this.$animate) {\r\n return this.removeElement(wrapper);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n this.$animate.leave(wrapper.element, () => {\r\n wrapper.scope.$destroy();\r\n return deferred.resolve();\r\n });\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n return [(this.$animate.leave(wrapper.element)).then(() => wrapper.scope.$destroy())];\r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/elementRoutines.js","export default function ScrollBuffer(elementRoutines, bufferSize) {\r\n const buffer = Object.create(Array.prototype);\r\n\r\n angular.extend(buffer, {\r\n size: bufferSize,\r\n\r\n reset(startIndex) {\r\n buffer.remove(0, buffer.length);\r\n buffer.eof = false;\r\n buffer.bof = false;\r\n buffer.first = startIndex;\r\n buffer.next = startIndex;\r\n buffer.minIndex = startIndex;\r\n buffer.maxIndex = startIndex;\r\n buffer.minIndexUser = null;\r\n buffer.maxIndexUser = null;\r\n },\r\n\r\n append(items) {\r\n items.forEach((item) => {\r\n ++buffer.next;\r\n buffer.insert('append', item);\r\n });\r\n buffer.maxIndex = buffer.eof ? buffer.next - 1 : Math.max(buffer.next - 1, buffer.maxIndex);\r\n },\r\n\r\n prepend(items) {\r\n items.reverse().forEach((item) => {\r\n --buffer.first;\r\n buffer.insert('prepend', item);\r\n });\r\n buffer.minIndex = buffer.bof ? buffer.minIndex = buffer.first : Math.min(buffer.first, buffer.minIndex);\r\n },\r\n\r\n /**\r\n * inserts wrapped element in the buffer\r\n * the first argument is either operation keyword (see below) or a number for operation 'insert'\r\n * for insert the number is the index for the buffer element the new one have to be inserted after\r\n * operations: 'append', 'prepend', 'insert', 'remove', 'update', 'none'\r\n */\r\n insert(operation, item) {\r\n const wrapper = {\r\n item: item\r\n };\r\n\r\n if (operation % 1 === 0) {// it is an insert\r\n wrapper.op = 'insert';\r\n buffer.splice(operation, 0, wrapper);\r\n } else {\r\n wrapper.op = operation;\r\n switch (operation) {\r\n case 'append':\r\n buffer.push(wrapper);\r\n break;\r\n case 'prepend':\r\n buffer.unshift(wrapper);\r\n break;\r\n }\r\n }\r\n },\r\n\r\n // removes elements from buffer\r\n remove(arg1, arg2) {\r\n if (angular.isNumber(arg1)) {\r\n // removes items from arg1 (including) through arg2 (excluding)\r\n for (let i = arg1; i < arg2; i++) {\r\n elementRoutines.removeElement(buffer[i]);\r\n }\r\n\r\n return buffer.splice(arg1, arg2 - arg1);\r\n }\r\n // removes single item(wrapper) from the buffer\r\n buffer.splice(buffer.indexOf(arg1), 1);\r\n\r\n return elementRoutines.removeElementAnimated(arg1);\r\n },\r\n\r\n effectiveHeight(elements) {\r\n if (!elements.length) {\r\n return 0;\r\n }\r\n let top = Number.MAX_VALUE;\r\n let bottom = Number.MIN_VALUE;\r\n elements.forEach((wrapper) => {\r\n if (wrapper.element[0].offsetParent) {\r\n // element style is not display:none\r\n top = Math.min(top, wrapper.element.offset().top);\r\n bottom = Math.max(bottom, wrapper.element.offset().top + wrapper.element.outerHeight(true));\r\n }\r\n });\r\n return Math.max(0, bottom - top);\r\n }\r\n\r\n });\r\n\r\n return buffer;\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/buffer.js","import Padding from './padding';\r\n\r\nexport default function Viewport(elementRoutines, buffer, element, viewportController, $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.adjustPadding();\r\n }\r\n },\r\n\r\n shouldLoadTop() {\r\n return !buffer.bof && (viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding());\r\n },\r\n\r\n clipTop() {\r\n // clip the invisible items off the top\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\r\n\r\n for (let i = 0; i < buffer.length; i++) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n topPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n // we need to adjust top padding element before items are removed from top\r\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\r\n topPadding.height(topPadding.height() + overageHeight);\r\n buffer.bof = false;\r\n buffer.remove(0, overage);\r\n buffer.first += overage;\r\n }\r\n },\r\n\r\n adjustPadding() {\r\n if (!buffer.length) {\r\n return;\r\n }\r\n\r\n // precise heights calculation, items that were in buffer once\r\n let topPaddingHeight = topPadding.cache.reduce((summ, item) => summ + (item.index < buffer.first ? item.height : 0), 0);\r\n let bottomPaddingHeight = bottomPadding.cache.reduce((summ, item) => summ + (item.index >= buffer.next ? item.height : 0), 0);\r\n\r\n // average item height based on buffer data\r\n let visibleItemsHeight = buffer.reduce((summ, item) => summ + item.element.outerHeight(true), 0);\r\n let averageItemHeight = (visibleItemsHeight + topPaddingHeight + bottomPaddingHeight) / (buffer.maxIndex - buffer.minIndex + 1);\r\n\r\n // average heights calculation, items that have never been reached\r\n let adjustTopPadding = buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser;\r\n let adjustBottomPadding = buffer.maxIndexUser !== null && buffer.maxIndex < buffer.maxIndexUser;\r\n let topPaddingHeightAdd = adjustTopPadding ? (buffer.minIndex - buffer.minIndexUser) * averageItemHeight : 0;\r\n let bottomPaddingHeightAdd = adjustBottomPadding ? (buffer.maxIndexUser - buffer.maxIndex) * averageItemHeight : 0;\r\n\r\n // paddings combine adjustment\r\n topPadding.height(topPaddingHeight + topPaddingHeightAdd);\r\n bottomPadding.height(bottomPaddingHeight + bottomPaddingHeightAdd);\r\n },\r\n\r\n adjustScrollTopAfterMinIndexSet(topPaddingHeightOld) {\r\n // additional scrollTop adjustment in case of datasource.minIndex external set\r\n if (buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser) {\r\n let diff = topPadding.height() - topPaddingHeightOld;\r\n viewport.scrollTop(viewport.scrollTop() + diff);\r\n }\r\n },\r\n\r\n adjustScrollTopAfterPrepend(updates) {\r\n if (!updates.prepended.length)\r\n return;\r\n const height = buffer.effectiveHeight(updates.prepended);\r\n const paddingHeight = topPadding.height() - height;\r\n if (paddingHeight >= 0) {\r\n topPadding.height(paddingHeight);\r\n }\r\n else {\r\n topPadding.height(0);\r\n viewport.scrollTop(viewport.scrollTop() - paddingHeight);\r\n }\r\n },\r\n\r\n resetTopPadding() {\r\n topPadding.height(0);\r\n topPadding.cache.clear();\r\n },\r\n\r\n resetBottomPadding() {\r\n bottomPadding.height(0);\r\n bottomPadding.cache.clear();\r\n },\r\n\r\n 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 switch (template.tagName) {\r\n case 'dl':\r\n throw new Error(`ui-scroll directive does not support <${template.tagName}> as a repeating tag: ${template.outerHTML}`);\r\n case 'tr':\r\n let table = angular.element('
    ');\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","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 }\r\n\r\n prepend(newItems) {\r\n this.buffer.prepend(newItems);\r\n this.adjustBuffer();\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"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":[],"names":[],"mappings":"","file":"ui-scroll.min.js","sourceRoot":""} \ No newline at end of file diff --git a/src/ui-scroll-grid.js b/src/ui-scroll-grid.js index ebddc865..2aef2430 100644 --- a/src/ui-scroll-grid.js +++ b/src/ui-scroll-grid.js @@ -1,5 +1,5 @@ angular.module('ui.scroll.grid', []) - .directive('uiScrollTh', ['$log', '$timeout', function (console, $timeout) { + .directive('uiScrollTh', ['$log', '$timeout', function(console, $timeout) { function GridAdapter(controller) { @@ -9,12 +9,12 @@ angular.module('ui.scroll.grid', []) this.columnFromPoint = (x, y) => controller.columnFromPoint(x, y); - Object.defineProperty(this, 'columns', {get: () => controller.getColumns()}); + Object.defineProperty(this, 'columns', { get: () => controller.getColumns() }); } function ColumnAdapter(controller, column) { - this.css = function (/* attr, value */) { + this.css = function( /* attr, value */ ) { var attr = arguments[0]; var value = arguments[1]; if (arguments.length == 1) { @@ -31,7 +31,7 @@ angular.module('ui.scroll.grid', []) this.exchangeWith = (index) => controller.exchangeWith(column, index); - Object.defineProperty(this, 'columnId', {get: () => column.id}); + Object.defineProperty(this, 'columnId', { get: () => column.id }); } function ColumnController(controller, columns, header) { @@ -43,13 +43,13 @@ angular.module('ui.scroll.grid', []) // controller api methods - this.applyLayout = function (layout) { + this.applyLayout = function(layout) { this.css = angular.extend({}, layout.css); this.mapTo = layout.mapTo; applyCss(this.header, this.css); }; - this.moveBefore = function (target) { + this.moveBefore = function(target) { if (target) { moveBefore(header, target.header); controller.forEachRow((row) => moveBefore(row[this.id], row[target.id])); @@ -59,7 +59,7 @@ angular.module('ui.scroll.grid', []) } }; - this.columnFromPoint = function (x, y) { + this.columnFromPoint = function(x, y) { if (insidePoint(header, x, y)) { return this; } @@ -70,7 +70,7 @@ angular.module('ui.scroll.grid', []) return result; }; - this.applyCss = function (target) { + this.applyCss = function(target) { applyCss(target, this.css); }; @@ -116,11 +116,11 @@ angular.module('ui.scroll.grid', []) scrollViewport.adapter.transform = (scope, item) => transform(rowMap.get(scope), item); }); - this.registerColumn = function (header) { + this.registerColumn = function(header) { columns.push(new ColumnController(this, columns, header)); }; - this.registerCell = function (scope, cell) { + this.registerCell = function(scope, cell) { let row = rowMap.get(scope); if (!row) { row = []; @@ -133,7 +133,7 @@ angular.module('ui.scroll.grid', []) return true; }; - this.unregisterCell = function (scope, cell) { + this.unregisterCell = function(scope, cell) { let row = rowMap.get(scope); let i = row.indexOf(cell); row.splice(i, 1); @@ -142,11 +142,11 @@ angular.module('ui.scroll.grid', []) } }; - this.forEachRow = function (callback) { + this.forEachRow = function(callback) { rowMap.forEach(callback); }; - this.getColumns = function () { + this.getColumns = function() { let result = []; columns.slice() .sort((a, b) => a.mapTo - b.mapTo) @@ -154,18 +154,17 @@ angular.module('ui.scroll.grid', []) return result; }; - this.getLayout = function () { + this.getLayout = function() { let result = []; columns.forEach((column, index) => result.push({ - index: index, - css: angular.extend({}, column.css), - mapTo: column.mapTo - }) - ); + index: index, + css: angular.extend({}, column.css), + mapTo: column.mapTo + })); return result; }; - this.applyLayout = function (layouts) { + this.applyLayout = function(layouts) { if (!layouts || layouts.length != columns.length) { throw new Error('Failed to apply layout - number of layouts should match number of columns'); } @@ -174,7 +173,7 @@ angular.module('ui.scroll.grid', []) rowMap.forEach((row) => transform(row)); }; - this.moveBefore = function (selected, target) { + this.moveBefore = function(selected, target) { let index = target; if (target % 1 !== 0) { @@ -184,7 +183,8 @@ angular.module('ui.scroll.grid', []) return; // throw an error? } - let mapTo = selected.mapTo, next = null; + let mapTo = selected.mapTo, + next = null; index -= mapTo < index ? 1 : 0; columns.forEach(c => { @@ -197,7 +197,7 @@ angular.module('ui.scroll.grid', []) selected.moveBefore(next); }; - this.exchangeWith = function (selected, index) { + this.exchangeWith = function(selected, index) { if (index < 0 || index >= columns.length) { return; } @@ -205,7 +205,7 @@ angular.module('ui.scroll.grid', []) selected.mapTo = index; }; - this.columnFromPoint = function (x, y) { + this.columnFromPoint = function(x, y) { let column = columns.find(col => col.columnFromPoint(x, y)); return column ? new ColumnAdapter(this, column) : undefined; }; @@ -237,17 +237,31 @@ angular.module('ui.scroll.grid', []) }; }]) - .directive('uiScrollTd', function () { - return { - require: ['?^^uiScrollViewport'], - restrict: 'A', - link: ($scope, element, $attr, controllers) => { - if (controllers[0]) { - let gridController = controllers[0].gridController; - if (gridController.registerCell($scope, element)) { - $scope.$on('$destroy', () => gridController.unregisterCell($scope, element)); - } - } +.directive('uiScrollTd', function() { + return { + require: ['?^^uiScrollViewport'], + restrict: 'A', + link: ($scope, element, $attr, controllers) => { + if (!controllers[0]) { + return; } - }; - }); \ No newline at end of file + let scope = $scope; + let tdInitializer = $scope.uiScrollTdInitializer; + if (!tdInitializer) { + tdInitializer = $scope.uiScrollTdInitializer = { + linking: true + }; + } + if (!tdInitializer.linking) { + scope = tdInitializer.scope; + } + let gridController = controllers[0].gridController; + if (gridController.registerCell(scope, element)) { + $scope.$on('$destroy', () => gridController.unregisterCell(scope, element)); + } + if (!tdInitializer.linking) { + tdInitializer.onLink(); + } + } + }; +}); diff --git a/src/ui-scroll.js b/src/ui-scroll.js index 2f797bf6..dcaea99a 100644 --- a/src/ui-scroll.js +++ b/src/ui-scroll.js @@ -230,8 +230,18 @@ angular.module('ui.scroll', []) wrapper.scope = scope; scope[itemName] = wrapper.item; }); - if (adapter.transform) - adapter.transform(wrapper.scope, wrapper.element); + // ui-scroll-grid apply + if (adapter.transform) { + let tdInitializer = wrapper.scope.uiScrollTdInitializer; + if (tdInitializer && tdInitializer.linking) { + adapter.transform(wrapper.scope, wrapper.element); + } else { + wrapper.scope.uiScrollTdInitializer = { + onLink: () => adapter.transform(wrapper.scope, wrapper.element), + scope: wrapper.scope + }; + } + } return promises; } From 9f7b44429fa2021c62ea6ad6946414a34f6193d5 Mon Sep 17 00:00:00 2001 From: dhilt Date: Sun, 2 Jul 2017 07:08:51 +0300 Subject: [PATCH 2/6] item interpolation bindings fix --- src/ui-scroll.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/ui-scroll.js b/src/ui-scroll.js index dcaea99a..4f72040f 100644 --- a/src/ui-scroll.js +++ b/src/ui-scroll.js @@ -208,7 +208,7 @@ angular.module('ui.scroll', []) } }); if (!pending.length) { - adjustBuffer(); + $timeout(() => adjustBuffer()); } } } @@ -333,7 +333,7 @@ angular.module('ui.scroll', []) let updates = updateDOM(); // We need the item bindings to be processed before we can do adjustment - $timeout(() => { + $scope.$apply(() => $timeout(() => { // show elements after data binging has been done updates.inserted.forEach(w => w.element.removeClass('ng-hide')); @@ -349,15 +349,14 @@ angular.module('ui.scroll', []) if (!pending.length) { adapter.calculateProperties(); } - }); + })); } function adjustBufferAfterFetch(rid) { let updates = updateDOM(); // We need the item bindings to be processed before we can do adjustment - $timeout(() => { - + $scope.$apply(() => $timeout(() => { // show elements after data binging has been done updates.inserted.forEach(w => w.element.removeClass('ng-hide')); updates.prepended.forEach(w => w.element.removeClass('ng-hide')); @@ -379,7 +378,7 @@ angular.module('ui.scroll', []) bindEvents(); adapter.calculateProperties(); } - }); + })); } function fetch(rid) { From 450c2d493e762d72468c3b6b5d723bd03339ddf4 Mon Sep 17 00:00:00 2001 From: dhilt Date: Sun, 2 Jul 2017 07:09:17 +0300 Subject: [PATCH 3/6] interpolation tests and demo --- .../differentItemHeights.html | 34 ++++++------ .../differentItemHeights.js | 55 ++++++++++++------- test/BasicTestsSpec.js | 47 ++++++++++++++++ test/VisibilitySwitchingSpec.js | 20 ++++++- 4 files changed, 119 insertions(+), 37 deletions(-) diff --git a/demo/differentItemHeights/differentItemHeights.html b/demo/differentItemHeights/differentItemHeights.html index fde511cd..e66cad75 100644 --- a/demo/differentItemHeights/differentItemHeights.html +++ b/demo/differentItemHeights/differentItemHeights.html @@ -1,28 +1,30 @@ - - Different Item Heights - - - - + + Different Item Heights + + + + -
    +
    - browse other examples + browse other examples -

    Different Item Heights

    +

    Different Item Heights (Interpolation)

    -
    -
    -
    trololo
    -
    {{item.text}}
    -
    -
    +
    +
    +
    +
    + {{"content # " + item.index + ' ' + item.height}} +
    +
    +
    +
    -
    diff --git a/demo/differentItemHeights/differentItemHeights.js b/demo/differentItemHeights/differentItemHeights.js index 2dce2c73..a9e94e61 100644 --- a/demo/differentItemHeights/differentItemHeights.js +++ b/demo/differentItemHeights/differentItemHeights.js @@ -1,29 +1,44 @@ -angular.module('application', ['ui.scroll']).factory('datasource', [ - '$log', '$timeout', function(console, $timeout) { - var get, max, min; - min = -50; - max = 100; +angular.module('application', ['ui.scroll']) - get = function(index, count, success) { - $timeout(function() { +.run(function($rootScope) { + $rootScope.doReload = function () { + $rootScope.$broadcast('DO_RELOAD'); + }; +}) + +.controller('MainCtrl', function($scope) { + $scope.hello = 'Hello Main Controller!'; + var counter = 0; + + var reloadListener = $scope.$on('DO_RELOAD', function() { + if ($scope.adapter) { + counter = 0; + $scope.adapter.reload(); + } + }); + + $scope.$on("$destroy", function() { + reloadListener(); + }); + + var min = -1000, max = 1000, delay = 0; + + $scope.datasource = { + get: function(index, count, success) { + setTimeout(function() { var result = []; var start = Math.max(min, index); var end = Math.min(index + count - 1, max); if (start <= end) { for (var i = start; i <= end; i++) { - var j = i > 0 ? i : (-1) * i; - result.push({ - text: "item #" + i, - height: 20 + (j%2) * 10 - }); + height = 50 + (counter++ * 2); + result.push({ index: i, height: height }); } } - success(result); - }, 50); - }; + console.log('Got ' + result.length + ' items [' + start + '..' + end + ']'); + success(result); + }, delay); + } + }; - return { - get: get - }; - } -]); \ No newline at end of file +}); diff --git a/test/BasicTestsSpec.js b/test/BasicTestsSpec.js index 8afacc8a..0506b908 100644 --- a/test/BasicTestsSpec.js +++ b/test/BasicTestsSpec.js @@ -637,6 +637,9 @@ describe('uiScroll', function () { var topVisibleChangeCount = 0; scope.$watch('container1.adapter.topVisible', function(newValue) { + if(newValue === 'item1') { + return; + } topVisibleChangeCount++; expect(scope.container1.adapter.topVisible).toBe(newValue); @@ -675,6 +678,9 @@ describe('uiScroll', function () { var topVisibleChangeCount = 0; scope.$watch('container1.adapter.topVisible', function(newValue) { + if(newValue === 'item1') { + return; + } topVisibleChangeCount++; expect(scope.container1.adapter.topVisible).toBe(newValue); @@ -839,4 +845,45 @@ describe('uiScroll', function () { }); }); + describe('interpolation', function() { + var myTemplate = '
    {{$index}}: {{item}}
    '; + var scrollSettings = { + datasource: 'myInfiniteDatasource', + template: myTemplate, + topVisible: 'topVisible', + bufferSize: 10 + }; + + it('should keep 1st item at the top after initial auto fetching is done', function() { + runTest(scrollSettings, + function (viewport, scope) { + expect(scope.topVisible).toBe('item1'); + expect(viewport.scrollTop()).toBe(400); // 1 pack (bufferSize * itemHeight) from the top + }, { + scope: { + 'itemHeight': 40 + } + } + ); + }); + + it('should keep (-bufferSize) item at the top after one manual fetching is done', function() { + runTest(scrollSettings, + function (viewport, scope, $timeout) { + + viewport.scrollTop(0); // scroll to the very top + viewport.trigger('scroll'); + $timeout.flush(); + + expect(scope.topVisible).toBe('item-9'); + expect(viewport.scrollTop()).toBe(400); // 1 pack (bufferSize * itemHeight) from the top + }, { + scope: { + 'itemHeight': 40 + } + } + ); + }); + }); + }); \ No newline at end of file diff --git a/test/VisibilitySwitchingSpec.js b/test/VisibilitySwitchingSpec.js index 41e25330..c1b48a83 100644 --- a/test/VisibilitySwitchingSpec.js +++ b/test/VisibilitySwitchingSpec.js @@ -80,6 +80,25 @@ describe('uiScroll', function () { } ); }); + + it('should stay on the 1st item after the visibility is on (infinite list)', function () { + var infititeScrollSettings = scrollSettings; + infititeScrollSettings.datasource = 'myInfiniteDatasource'; + infititeScrollSettings.topVisible = 'topVisible'; + runTest(infititeScrollSettings, + function (viewport, scope, $timeout) { + viewport.css('display','none'); + scope.adapter.reload(); + $timeout.flush(); + + viewport.css('display','block'); + scope.$apply(); + $timeout.flush(); + + expect(scope.topVisible).toBe('item1'); + } + ); + }); }); describe('items visibility changing', function () { @@ -105,7 +124,6 @@ describe('uiScroll', function () { angular.element(viewport.children()[onePackItemsCount - 1]).css('height', 40); expect(angular.element(viewport.children()[onePackItemsCount - 1]).css('height')).toBe('40px'); scope.$apply(); - //$timeout.flush(); $timeout(function() { expect(viewport.children().length).toBe(twoPacksItemsCount); From 45ce2bce64be3f9c72d8a80a430b1763bbe5b868 Mon Sep 17 00:00:00 2001 From: dhilt Date: Sun, 2 Jul 2017 16:01:14 +0300 Subject: [PATCH 4/6] interpolation pre-dist --- dist/ui-scroll.js | 83 +++++++++++++++++++++++-------------------- dist/ui-scroll.js.map | 2 +- 2 files changed, 45 insertions(+), 40 deletions(-) diff --git a/dist/ui-scroll.js b/dist/ui-scroll.js index 8721eb9f..55e42251 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.6.1 -- 2017-06-20T03:26:22.415Z + * Version: 1.6.1 -- 2017-07-02T04:33:05.420Z * License: MIT */ /******/ (function(modules) { // webpackBootstrap @@ -1330,7 +1330,9 @@ angular.module('ui.scroll', []).service('jqLiteExtras', function () { } }); if (!pending.length) { - adjustBuffer(); + $timeout(function () { + return adjustBuffer(); + }); } } } @@ -1462,26 +1464,28 @@ angular.module('ui.scroll', []).service('jqLiteExtras', function () { var updates = updateDOM(); // We need the item bindings to be processed before we can do adjustment - $timeout(function () { + $scope.$apply(function () { + return $timeout(function () { - // show elements after data binging has been done - updates.inserted.forEach(function (w) { - return w.element.removeClass('ng-hide'); - }); - updates.prepended.forEach(function (w) { - return w.element.removeClass('ng-hide'); - }); + // show elements after data binging has been done + updates.inserted.forEach(function (w) { + return w.element.removeClass('ng-hide'); + }); + updates.prepended.forEach(function (w) { + return w.element.removeClass('ng-hide'); + }); - if (isInvalid(rid)) { - return; - } + if (isInvalid(rid)) { + return; + } - updatePaddings(rid, updates); - enqueueFetch(rid); + updatePaddings(rid, updates); + enqueueFetch(rid); - if (!pending.length) { - adapter.calculateProperties(); - } + if (!pending.length) { + adapter.calculateProperties(); + } + }); }); } @@ -1489,31 +1493,32 @@ angular.module('ui.scroll', []).service('jqLiteExtras', function () { var updates = updateDOM(); // We need the item bindings to be processed before we can do adjustment - $timeout(function () { - - // show elements after data binging has been done - updates.inserted.forEach(function (w) { - return w.element.removeClass('ng-hide'); - }); - updates.prepended.forEach(function (w) { - return w.element.removeClass('ng-hide'); - }); + $scope.$apply(function () { + return $timeout(function () { + // show elements after data binging has been done + updates.inserted.forEach(function (w) { + return w.element.removeClass('ng-hide'); + }); + updates.prepended.forEach(function (w) { + return w.element.removeClass('ng-hide'); + }); - viewport.adjustScrollTopAfterPrepend(updates); + viewport.adjustScrollTopAfterPrepend(updates); - if (isInvalid(rid)) { - return; - } + if (isInvalid(rid)) { + return; + } - updatePaddings(rid, updates); - enqueueFetch(rid, updates); - pending.shift(); + updatePaddings(rid, updates); + enqueueFetch(rid, updates); + pending.shift(); - if (pending.length) fetch(rid);else { - adapter.loading(false); - bindEvents(); - adapter.calculateProperties(); - } + if (pending.length) fetch(rid);else { + adapter.loading(false); + bindEvents(); + adapter.calculateProperties(); + } + }); }); } diff --git a/dist/ui-scroll.js.map b/dist/ui-scroll.js.map index c50a7f99..3bdc483b 100644 --- a/dist/ui-scroll.js.map +++ b/dist/ui-scroll.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap 0babc30b0e0c1649fab6","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","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","MIN_VALUE","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","clipBottom","overage","overageHeight","emptySpaceHeight","cache","add","adjustPadding","shouldLoadTop","clipTop","topPaddingHeight","reduce","summ","bottomPaddingHeight","visibleItemsHeight","averageItemHeight","adjustTopPadding","adjustBottomPadding","topPaddingHeightAdd","bottomPaddingHeightAdd","adjustScrollTopAfterMinIndexSet","topPaddingHeightOld","diff","adjustScrollTopAfterPrepend","updates","prepended","paddingHeight","resetTopPadding","clear","resetBottomPadding","removeItem","Padding","Cache","$index","sort","a","b","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","indexStore","propName","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","fetch","loading","w","removeClass","calculateProperties","adjustBufferAfterFetch","shift","$$phase","$apply","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 0babc30b0e0c1649fab6","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 }\r\n\r\n prepend(newItems) {\r\n this.buffer.prepend(newItems);\r\n this.adjustBuffer();\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.MIN_VALUE;\r\n elements.forEach((wrapper) => {\r\n if (wrapper.element[0].offsetParent) {\r\n // element style is not display:none\r\n top = Math.min(top, wrapper.element.offset().top);\r\n bottom = Math.max(bottom, wrapper.element.offset().top + wrapper.element.outerHeight(true));\r\n }\r\n });\r\n return Math.max(0, bottom - top);\r\n }\r\n\r\n });\r\n\r\n return buffer;\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/buffer.js","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.adjustPadding();\r\n }\r\n },\r\n\r\n shouldLoadTop() {\r\n return !buffer.bof && (viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding());\r\n },\r\n\r\n clipTop() {\r\n // clip the invisible items off the top\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\r\n\r\n for (let i = 0; i < buffer.length; i++) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n topPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n // we need to adjust top padding element before items are removed from top\r\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\r\n topPadding.height(topPadding.height() + overageHeight);\r\n buffer.bof = false;\r\n buffer.remove(0, overage);\r\n buffer.first += overage;\r\n }\r\n },\r\n\r\n adjustPadding() {\r\n if (!buffer.length) {\r\n return;\r\n }\r\n\r\n // precise heights calculation, items that were in buffer once\r\n let topPaddingHeight = topPadding.cache.reduce((summ, item) => summ + (item.index < buffer.first ? item.height : 0), 0);\r\n let bottomPaddingHeight = bottomPadding.cache.reduce((summ, item) => summ + (item.index >= buffer.next ? item.height : 0), 0);\r\n\r\n // average item height based on buffer data\r\n let visibleItemsHeight = buffer.reduce((summ, item) => summ + item.element.outerHeight(true), 0);\r\n let averageItemHeight = (visibleItemsHeight + topPaddingHeight + bottomPaddingHeight) / (buffer.maxIndex - buffer.minIndex + 1);\r\n\r\n // average heights calculation, items that have never been reached\r\n let adjustTopPadding = buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser;\r\n let adjustBottomPadding = buffer.maxIndexUser !== null && buffer.maxIndex < buffer.maxIndexUser;\r\n let topPaddingHeightAdd = adjustTopPadding ? (buffer.minIndex - buffer.minIndexUser) * averageItemHeight : 0;\r\n let bottomPaddingHeightAdd = adjustBottomPadding ? (buffer.maxIndexUser - buffer.maxIndex) * averageItemHeight : 0;\r\n\r\n // paddings combine adjustment\r\n topPadding.height(topPaddingHeight + topPaddingHeightAdd);\r\n bottomPadding.height(bottomPaddingHeight + bottomPaddingHeightAdd);\r\n },\r\n\r\n adjustScrollTopAfterMinIndexSet(topPaddingHeightOld) {\r\n // additional scrollTop adjustment in case of datasource.minIndex external set\r\n if (buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser) {\r\n let diff = topPadding.height() - topPaddingHeightOld;\r\n viewport.scrollTop(viewport.scrollTop() + diff);\r\n }\r\n },\r\n\r\n adjustScrollTopAfterPrepend(updates) {\r\n if (!updates.prepended.length)\r\n return;\r\n const height = buffer.effectiveHeight(updates.prepended);\r\n const paddingHeight = topPadding.height() - height;\r\n if (paddingHeight >= 0) {\r\n topPadding.height(paddingHeight);\r\n }\r\n else {\r\n topPadding.height(0);\r\n viewport.scrollTop(viewport.scrollTop() - paddingHeight);\r\n }\r\n },\r\n\r\n resetTopPadding() {\r\n topPadding.height(0);\r\n topPadding.cache.clear();\r\n },\r\n\r\n resetBottomPadding() {\r\n bottomPadding.height(0);\r\n bottomPadding.cache.clear();\r\n },\r\n\r\n 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 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 indexStore = {};\n\n function defineProperty(datasource, propName, propUserName) {\n let descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n if (!descriptor || (!descriptor.set && !descriptor.get)) {\n Object.defineProperty(datasource, propName, {\n set: (value) => {\n indexStore[propName] = value;\n $timeout(() => {\n buffer[propUserName] = value;\n if (!pending.length) {\n let topPaddingHeightOld = viewport.topDataPos();\n viewport.adjustPadding();\n if (propName === 'minIndex') {\n viewport.adjustScrollTopAfterMinIndexSet(topPaddingHeightOld);\n }\n }\n });\n },\n get: () => indexStore[propName]\n });\n }\n }\n\n defineProperty(datasource, 'minIndex', 'minIndexUser');\n defineProperty(datasource, 'maxIndex', 'maxIndexUser');\n\n const fetchNext = (datasource.get.length !== 2) ? (success) => datasource.get(buffer.next, bufferSize, success)\n : (success) => {\n datasource.get({\n index: buffer.next,\n append: buffer.length ? buffer[buffer.length - 1].item : void 0,\n count: bufferSize\n }, success);\n };\n\n const fetchPrevious = (datasource.get.length !== 2) ? (success) => datasource.get(buffer.first - bufferSize, bufferSize, success)\n : (success) => {\n datasource.get({\n index: buffer.first - bufferSize,\n prepend: buffer.length ? buffer[0].item : void 0,\n count: bufferSize\n }, success);\n };\n\n /**\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 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.adjustPadding();\n adjustBuffer(rid);\n });\n } else {\n viewport.adjustPadding();\n }\n }\n\n function enqueueFetch(rid, updates) {\n if (viewport.shouldLoadBottom()) {\n if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\n // this means that at least one item appended in the last batch has height > 0\n if (pending.push(true) === 1) {\n fetch(rid);\n adapter.loading(true);\n }\n }\n } else if (viewport.shouldLoadTop()) {\n if ((!updates || buffer.effectiveHeight(updates.prepended) > 0) || pending[0]) {\n // this means that at least one item appended in the last batch has height > 0\n // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\n // BTW there will always be at least 1 element in the pending array because bottom is fetched first\n if (pending.push(false) === 1) {\n fetch(rid);\n adapter.loading(true);\n }\n }\n }\n }\n\n function adjustBuffer(rid) {\n if (!rid) { // dismiss pending requests\n pending = [];\n rid = ++ridActual;\n }\n\n let updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustment\n $timeout(() => {\n\n // show elements after data binging has been done\n updates.inserted.forEach(w => w.element.removeClass('ng-hide'));\n updates.prepended.forEach(w => w.element.removeClass('ng-hide'));\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n enqueueFetch(rid);\n\n if (!pending.length) {\n adapter.calculateProperties();\n }\n });\n }\n\n function adjustBufferAfterFetch(rid) {\n let updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustment\n $timeout(() => {\n\n // show elements after data binging has been done\n updates.inserted.forEach(w => w.element.removeClass('ng-hide'));\n updates.prepended.forEach(w => w.element.removeClass('ng-hide'));\n\n viewport.adjustScrollTopAfterPrepend(updates);\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n enqueueFetch(rid, updates);\n pending.shift();\n\n if (pending.length)\n fetch(rid);\n else {\n adapter.loading(false);\n bindEvents();\n adapter.calculateProperties();\n }\n });\n }\n\n function fetch(rid) {\n if (pending[0]) {// scrolling down\n if (buffer.length && !viewport.shouldLoadBottom()) {\n adjustBufferAfterFetch(rid);\n } else {\n fetchNext((result) => {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.eof = true;\n }\n\n if (result.length > 0) {\n viewport.clipTop();\n buffer.append(result);\n }\n\n adjustBufferAfterFetch(rid);\n });\n }\n } else { // scrolling up\n if (buffer.length && !viewport.shouldLoadTop()) {\n adjustBufferAfterFetch(rid);\n } else {\n fetchPrevious((result) => {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.bof = true;\n // log 'bof is reached'\n }\n\n if (result.length > 0) {\n if (buffer.length) {\n viewport.clipBottom();\n }\n buffer.prepend(result);\n }\n\n adjustBufferAfterFetch(rid);\n });\n }\n }\n }\n\n function resizeAndScrollHandler() {\n if (!$rootScope.$$phase && !adapter.isLoading && !adapter.disabled) {\n\n enqueueFetch(ridActual);\n\n if (pending.length) {\n unbindEvents();\n } else {\n adapter.calculateProperties();\n $scope.$apply();\n }\n }\n }\n\n function wheelHandler(event) {\n if (!adapter.disabled) {\n let scrollTop = viewport[0].scrollTop;\n let yMax = viewport[0].scrollHeight - viewport[0].clientHeight;\n\n if ((scrollTop === 0 && !buffer.bof) || (scrollTop === yMax && !buffer.eof)) {\n event.preventDefault();\n }\n }\n }\n }\n\n }\n ]);\n\n\n// WEBPACK FOOTER //\n// ./src/ui-scroll.js"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap ffa0d226b3f550a5bff4","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","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","MIN_VALUE","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","clipBottom","overage","overageHeight","emptySpaceHeight","cache","add","adjustPadding","shouldLoadTop","clipTop","topPaddingHeight","reduce","summ","bottomPaddingHeight","visibleItemsHeight","averageItemHeight","adjustTopPadding","adjustBottomPadding","topPaddingHeightAdd","bottomPaddingHeightAdd","adjustScrollTopAfterMinIndexSet","topPaddingHeightOld","diff","adjustScrollTopAfterPrepend","updates","prepended","paddingHeight","resetTopPadding","clear","resetBottomPadding","removeItem","Padding","Cache","$index","sort","a","b","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","indexStore","propName","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","fetch","loading","$apply","w","removeClass","calculateProperties","adjustBufferAfterFetch","shift","$$phase","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 ffa0d226b3f550a5bff4","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 }\r\n\r\n prepend(newItems) {\r\n this.buffer.prepend(newItems);\r\n this.adjustBuffer();\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.MIN_VALUE;\r\n elements.forEach((wrapper) => {\r\n if (wrapper.element[0].offsetParent) {\r\n // element style is not display:none\r\n top = Math.min(top, wrapper.element.offset().top);\r\n bottom = Math.max(bottom, wrapper.element.offset().top + wrapper.element.outerHeight(true));\r\n }\r\n });\r\n return Math.max(0, bottom - top);\r\n }\r\n\r\n });\r\n\r\n return buffer;\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/buffer.js","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.adjustPadding();\r\n }\r\n },\r\n\r\n shouldLoadTop() {\r\n return !buffer.bof && (viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding());\r\n },\r\n\r\n clipTop() {\r\n // clip the invisible items off the top\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\r\n\r\n for (let i = 0; i < buffer.length; i++) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n topPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n // we need to adjust top padding element before items are removed from top\r\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\r\n topPadding.height(topPadding.height() + overageHeight);\r\n buffer.bof = false;\r\n buffer.remove(0, overage);\r\n buffer.first += overage;\r\n }\r\n },\r\n\r\n adjustPadding() {\r\n if (!buffer.length) {\r\n return;\r\n }\r\n\r\n // precise heights calculation, items that were in buffer once\r\n let topPaddingHeight = topPadding.cache.reduce((summ, item) => summ + (item.index < buffer.first ? item.height : 0), 0);\r\n let bottomPaddingHeight = bottomPadding.cache.reduce((summ, item) => summ + (item.index >= buffer.next ? item.height : 0), 0);\r\n\r\n // average item height based on buffer data\r\n let visibleItemsHeight = buffer.reduce((summ, item) => summ + item.element.outerHeight(true), 0);\r\n let averageItemHeight = (visibleItemsHeight + topPaddingHeight + bottomPaddingHeight) / (buffer.maxIndex - buffer.minIndex + 1);\r\n\r\n // average heights calculation, items that have never been reached\r\n let adjustTopPadding = buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser;\r\n let adjustBottomPadding = buffer.maxIndexUser !== null && buffer.maxIndex < buffer.maxIndexUser;\r\n let topPaddingHeightAdd = adjustTopPadding ? (buffer.minIndex - buffer.minIndexUser) * averageItemHeight : 0;\r\n let bottomPaddingHeightAdd = adjustBottomPadding ? (buffer.maxIndexUser - buffer.maxIndex) * averageItemHeight : 0;\r\n\r\n // paddings combine adjustment\r\n topPadding.height(topPaddingHeight + topPaddingHeightAdd);\r\n bottomPadding.height(bottomPaddingHeight + bottomPaddingHeightAdd);\r\n },\r\n\r\n adjustScrollTopAfterMinIndexSet(topPaddingHeightOld) {\r\n // additional scrollTop adjustment in case of datasource.minIndex external set\r\n if (buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser) {\r\n let diff = topPadding.height() - topPaddingHeightOld;\r\n viewport.scrollTop(viewport.scrollTop() + diff);\r\n }\r\n },\r\n\r\n adjustScrollTopAfterPrepend(updates) {\r\n if (!updates.prepended.length)\r\n return;\r\n const height = buffer.effectiveHeight(updates.prepended);\r\n const paddingHeight = topPadding.height() - height;\r\n if (paddingHeight >= 0) {\r\n topPadding.height(paddingHeight);\r\n }\r\n else {\r\n topPadding.height(0);\r\n viewport.scrollTop(viewport.scrollTop() - paddingHeight);\r\n }\r\n },\r\n\r\n resetTopPadding() {\r\n topPadding.height(0);\r\n topPadding.cache.clear();\r\n },\r\n\r\n resetBottomPadding() {\r\n bottomPadding.height(0);\r\n bottomPadding.cache.clear();\r\n },\r\n\r\n 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 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 indexStore = {};\n\n function defineProperty(datasource, propName, propUserName) {\n let descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n if (!descriptor || (!descriptor.set && !descriptor.get)) {\n Object.defineProperty(datasource, propName, {\n set: (value) => {\n indexStore[propName] = value;\n $timeout(() => {\n buffer[propUserName] = value;\n if (!pending.length) {\n let topPaddingHeightOld = viewport.topDataPos();\n viewport.adjustPadding();\n if (propName === 'minIndex') {\n viewport.adjustScrollTopAfterMinIndexSet(topPaddingHeightOld);\n }\n }\n });\n },\n get: () => indexStore[propName]\n });\n }\n }\n\n defineProperty(datasource, 'minIndex', 'minIndexUser');\n defineProperty(datasource, 'maxIndex', 'maxIndexUser');\n\n const fetchNext = (datasource.get.length !== 2) ? (success) => datasource.get(buffer.next, bufferSize, success)\n : (success) => {\n datasource.get({\n index: buffer.next,\n append: buffer.length ? buffer[buffer.length - 1].item : void 0,\n count: bufferSize\n }, success);\n };\n\n const fetchPrevious = (datasource.get.length !== 2) ? (success) => datasource.get(buffer.first - bufferSize, bufferSize, success)\n : (success) => {\n datasource.get({\n index: buffer.first - bufferSize,\n prepend: buffer.length ? buffer[0].item : void 0,\n count: bufferSize\n }, success);\n };\n\n /**\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.adjustPadding();\n adjustBuffer(rid);\n });\n } else {\n viewport.adjustPadding();\n }\n }\n\n function enqueueFetch(rid, updates) {\n if (viewport.shouldLoadBottom()) {\n if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\n // this means that at least one item appended in the last batch has height > 0\n if (pending.push(true) === 1) {\n fetch(rid);\n adapter.loading(true);\n }\n }\n } else if (viewport.shouldLoadTop()) {\n if ((!updates || buffer.effectiveHeight(updates.prepended) > 0) || pending[0]) {\n // this means that at least one item appended in the last batch has height > 0\n // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\n // BTW there will always be at least 1 element in the pending array because bottom is fetched first\n if (pending.push(false) === 1) {\n fetch(rid);\n adapter.loading(true);\n }\n }\n }\n }\n\n function adjustBuffer(rid) {\n if (!rid) { // dismiss pending requests\n pending = [];\n rid = ++ridActual;\n }\n\n let updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustment\n $scope.$apply(() => $timeout(() => {\n\n // show elements after data binging has been done\n updates.inserted.forEach(w => w.element.removeClass('ng-hide'));\n updates.prepended.forEach(w => w.element.removeClass('ng-hide'));\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n enqueueFetch(rid);\n\n if (!pending.length) {\n adapter.calculateProperties();\n }\n }));\n }\n\n function adjustBufferAfterFetch(rid) {\n let updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustment\n $scope.$apply(() => $timeout(() => {\n // show elements after data binging has been done\n updates.inserted.forEach(w => w.element.removeClass('ng-hide'));\n updates.prepended.forEach(w => w.element.removeClass('ng-hide'));\n\n viewport.adjustScrollTopAfterPrepend(updates);\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n enqueueFetch(rid, updates);\n pending.shift();\n\n if (pending.length)\n fetch(rid);\n else {\n adapter.loading(false);\n bindEvents();\n adapter.calculateProperties();\n }\n }));\n }\n\n function fetch(rid) {\n if (pending[0]) {// scrolling down\n if (buffer.length && !viewport.shouldLoadBottom()) {\n adjustBufferAfterFetch(rid);\n } else {\n fetchNext((result) => {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.eof = true;\n }\n\n if (result.length > 0) {\n viewport.clipTop();\n buffer.append(result);\n }\n\n adjustBufferAfterFetch(rid);\n });\n }\n } else { // scrolling up\n if (buffer.length && !viewport.shouldLoadTop()) {\n adjustBufferAfterFetch(rid);\n } else {\n fetchPrevious((result) => {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.bof = true;\n // log 'bof is reached'\n }\n\n if (result.length > 0) {\n if (buffer.length) {\n viewport.clipBottom();\n }\n buffer.prepend(result);\n }\n\n adjustBufferAfterFetch(rid);\n });\n }\n }\n }\n\n function resizeAndScrollHandler() {\n if (!$rootScope.$$phase && !adapter.isLoading && !adapter.disabled) {\n\n enqueueFetch(ridActual);\n\n if (pending.length) {\n unbindEvents();\n } else {\n adapter.calculateProperties();\n $scope.$apply();\n }\n }\n }\n\n function wheelHandler(event) {\n if (!adapter.disabled) {\n let scrollTop = viewport[0].scrollTop;\n let yMax = viewport[0].scrollHeight - viewport[0].clientHeight;\n\n if ((scrollTop === 0 && !buffer.bof) || (scrollTop === yMax && !buffer.eof)) {\n event.preventDefault();\n }\n }\n }\n }\n\n }\n ]);\n\n\n// WEBPACK FOOTER //\n// ./src/ui-scroll.js"],"sourceRoot":""} \ No newline at end of file From c96a4220bec255c529e2a8199d2c1961ba5f87a0 Mon Sep 17 00:00:00 2001 From: dhilt Date: Sun, 2 Jul 2017 19:17:00 +0300 Subject: [PATCH 5/6] update firefox for travis --- .travis.yml | 3 +++ package.json | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 460be952..6385a2c1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,6 +3,9 @@ language: node_js node_js: - '6' +addons: + firefox: latest + before_install: - export DISPLAY=:99.0 - sh -e /etc/init.d/xvfb start diff --git a/package.json b/package.json index 1f42ce5d..65fc81bc 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "jasmine-core": "^2.5.2", "karma": "^1.4.0", "karma-chrome-launcher": "^2.0.0", - "karma-firefox-launcher": "^1.0.0", + "karma-firefox-launcher": "^1.0.1", "karma-ie-launcher": "^1.0.0", "karma-jasmine": "^1.1.0", "webpack": "^2.6.1" From ede4e3fe5d6174eb34088105d2d16ad87cd8021e Mon Sep 17 00:00:00 2001 From: dhilt Date: Sun, 2 Jul 2017 22:11:57 +0300 Subject: [PATCH 6/6] sourcemaps fix + interpolation distributive --- 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 +- dist/ui-scroll.js | 2 +- dist/ui-scroll.min.js | 4 ++-- dist/ui-scroll.min.js.map | 2 +- src/ui-scroll-grid.js | 3 +-- webpack.config.js | 1 + 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/dist/ui-scroll-grid.js b/dist/ui-scroll-grid.js index ff9d3559..df628298 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.6.1 -- 2017-06-20T03:26:22.415Z + * Version: 1.6.1 -- 2017-07-02T19:10:34.898Z * License: MIT */ /******/ (function(modules) { // webpackBootstrap diff --git a/dist/ui-scroll-grid.js.map b/dist/ui-scroll-grid.js.map index 827124f3..b47f9e96 100644 --- a/dist/ui-scroll-grid.js.map +++ b/dist/ui-scroll-grid.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap 0babc30b0e0c1649fab6?8064","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 0babc30b0e0c1649fab6","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 ffa0d226b3f550a5bff4?509c","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 ffa0d226b3f550a5bff4","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, 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 diff --git a/dist/ui-scroll-grid.min.js b/dist/ui-scroll-grid.min.js index 010289a3..e754e044 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.6.1 -- 2017-06-20T03:26:22.462Z + * Version: 1.6.1 -- 2017-07-02T19:10:34.945Z * 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 922c02e2..2ffb4346 100644 --- a/dist/ui-scroll-grid.min.js.map +++ b/dist/ui-scroll-grid.min.js.map @@ -1 +1 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"ui-scroll-grid.min.js","sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///ui-scroll-grid.min.js","webpack:///webpack/bootstrap 8eaadf5435bcaf5f09bb?e589","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.6.1 -- 2017-07-02T19:10:34.898Z\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 8eaadf5435bcaf5f09bb","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, 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 diff --git a/dist/ui-scroll.js b/dist/ui-scroll.js index 55e42251..6c83cd77 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.6.1 -- 2017-07-02T04:33:05.420Z + * Version: 1.6.1 -- 2017-07-02T19:10:34.898Z * License: MIT */ /******/ (function(modules) { // webpackBootstrap diff --git a/dist/ui-scroll.min.js b/dist/ui-scroll.min.js index f05dd52d..bb8ad837 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.6.1 -- 2017-06-20T03:26:22.462Z + * Version: 1.6.1 -- 2017-07-02T19:10:34.945Z * 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.adjustPadding())},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)},adjustPadding: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)}},adjustScrollTopAfterPrepend: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;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),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,l,c,d){function h(t,n){var r=o(t)(e);return isNaN(r)?n:r}function m(e,t,n){var i=Object.getOwnPropertyDescriptor(e,t);i&&(i.set||i.get)||Object.defineProperty(e,t,{set:function(e){X[t]=e,r(function(){if(W[n]=e,!F.length){var r=q.topDataPos();q.adjustPadding(),"minIndex"===t&&q.adjustScrollTopAfterMinIndexSet(r)}})},get:function(){return X[t]}})}function g(t){return t&&t!==D||e.$$destroyed}function v(){q.bind("resize",V),q.bind("scroll",V)}function b(){q.unbind("resize",V),q.unbind("scroll",V)}function x(){q.resetTopPadding(),q.resetBottomPadding(),arguments.length&&(B=arguments[0]),W.reset(B),T()}function y(e){return e.element.height()&&e.element[0].offsetParent}function w(e){y(e)&&(W.forEach(function(e){angular.isFunction(e.unregisterVisibilityWatcher)&&(e.unregisterVisibilityWatcher(),delete e.unregisterVisibilityWatcher)}),F.length||T())}function E(e,t){P(e,t,q.insertElement),y(e)||(e.unregisterVisibilityWatcher=e.scope.$watch(function(){return w(e)})),e.element.addClass("ng-hide")}function P(e,t,n){var r=null,i=t>0?W[t-1].element:void 0;if(d(function(t,o){r=n(t,i),e.element=t,e.scope=o,o[C]=e.item}),z.transform){var o=e.scope.uiScrollTdInitializer;o&&o.linking?z.transform(e.scope,e.element):e.scope.uiScrollTdInitializer={onLink:function(){return z.transform(e.scope,e.element)},scope:e.scope}}return r}function $(){var e=[],t=[],n=[],r=[];return W.forEach(function(i,o){switch(i.op){case"prepend":t.unshift(i);break;case"append":E(i,o),i.op="none",r.push(i);break;case"insert":e=e.concat(P(i,o,q.insertElementAnimated)),i.op="none",r.push(i);break;case"remove":n.push(i)}}),n.forEach(function(t){return e=e.concat(q.removeItem(t))}),t.length&&t.forEach(function(e){E(e),e.op="none"}),W.forEach(function(e,t){return e.scope.$index=W.first+t}),{prepended:t,removed:n,inserted:r,animated:e}}function j(e,t){t.animated.length?i.all(t.animated).then(function(){q.adjustPadding(),T(e)}):q.adjustPadding()}function I(e,t){q.shouldLoadBottom()?(!t||W.effectiveHeight(t.inserted)>0)&&1===F.push(!0)&&(O(e),z.loading(!0)):q.shouldLoadTop()&&(!t||W.effectiveHeight(t.prepended)>0||F[0])&&1===F.push(!1)&&(O(e),z.loading(!0))}function T(e){e||(F=[],e=++D);var t=$();r(function(){t.inserted.forEach(function(e){return e.element.removeClass("ng-hide")}),t.prepended.forEach(function(e){return e.element.removeClass("ng-hide")}),g(e)||(j(e,t),I(e),F.length||z.calculateProperties())})}function S(e){var t=$();r(function(){t.inserted.forEach(function(e){return e.element.removeClass("ng-hide")}),t.prepended.forEach(function(e){return e.element.removeClass("ng-hide")}),q.adjustScrollTopAfterPrepend(t),g(e)||(j(e,t),I(e,t),F.shift(),F.length?O(e):(z.loading(!1),v(),z.calculateProperties()))})}function O(e){F[0]?W.length&&!q.shouldLoadBottom()?S(e):Y(function(t){g(e)||(t.length0&&(q.clipTop(),W.append(t)),S(e))}):W.length&&!q.shouldLoadTop()?S(e):Q(function(t){g(e)||(t.length0&&(W.length&&q.clipBottom(),W.prepend(t)),S(e))})}function V(){n.$$phase||z.isLoading||z.disabled||(I(D),F.length?b():(z.calculateProperties(),e.$apply()))}function k(e){if(!z.disabled){var t=q[0].scrollTop,n=q[0].scrollHeight-q[0].clientHeight;(0===t&&!W.bof||t===n&&!W.eof)&&e.preventDefault()}}var A=l.uiScroll.match(/^\s*(\w+)\s+in\s+([(\w|\$)\.]+)\s*$/);if(!A)throw new Error("Expected uiScroll in form of '_item_ in _datasource_' but got '"+l.uiScroll+"'");var L=null,C=A[1],_=A[2],M=c[0],H=Math.max(3,h(l.bufferSize,10)),U=Math.max(.3,h(l.padding,.5)),B=h(l.startIndex,1),D=0,F=[],N=new u.default(t,i),W=new s.default(N,H),q=new f.default(N,W,a,M,n,U),z=new p.default(q,W,T,x,l,o,a,e);M&&(M.adapter=z);var R=function(){return angular.isObject(L)&&angular.isFunction(L.get)};if(L=o(_)(e),!R()&&(L=t.get(_),!R()))throw new Error(_+" is not a valid datasource");var X={};m(L,"minIndex","minIndexUser"),m(L,"maxIndex","maxIndexUser");var Y=2!==L.get.length?function(e){return L.get(W.next,H,e)}:function(e){L.get({index:W.next,append:W.length?W[W.length-1].item:void 0,count:H},e)},Q=2!==L.get.length?function(e){return L.get(W.first-H,H,e)}:function(e){L.get({index:W.first-H,prepend:W.length?W[0].item:void 0,count:H},e)};d(function(e,t){q.createPaddingElements(e[0]),t.$destroy(),e.remove()}),e.$on("$destroy",function(){b(),q.unbind("mousewheel",k)}),q.bind("mousewheel",k),r(function(){q.applyContainerStyle(),x()})}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&&(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.adjustPadding())},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)},adjustPadding: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)}},adjustScrollTopAfterPrepend: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;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),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,l,c,d){function h(t,n){var r=o(t)(e);return isNaN(r)?n:r}function m(e,t,n){var i=Object.getOwnPropertyDescriptor(e,t);i&&(i.set||i.get)||Object.defineProperty(e,t,{set:function(e){X[t]=e,r(function(){if(W[n]=e,!F.length){var r=q.topDataPos();q.adjustPadding(),"minIndex"===t&&q.adjustScrollTopAfterMinIndexSet(r)}})},get:function(){return X[t]}})}function g(t){return t&&t!==D||e.$$destroyed}function v(){q.bind("resize",V),q.bind("scroll",V)}function b(){q.unbind("resize",V),q.unbind("scroll",V)}function x(){q.resetTopPadding(),q.resetBottomPadding(),arguments.length&&(B=arguments[0]),W.reset(B),T()}function y(e){return e.element.height()&&e.element[0].offsetParent}function w(e){y(e)&&(W.forEach(function(e){angular.isFunction(e.unregisterVisibilityWatcher)&&(e.unregisterVisibilityWatcher(),delete e.unregisterVisibilityWatcher)}),F.length||r(function(){return T()}))}function E(e,t){P(e,t,q.insertElement),y(e)||(e.unregisterVisibilityWatcher=e.scope.$watch(function(){return w(e)})),e.element.addClass("ng-hide")}function P(e,t,n){var r=null,i=t>0?W[t-1].element:void 0;if(d(function(t,o){r=n(t,i),e.element=t,e.scope=o,o[C]=e.item}),z.transform){var o=e.scope.uiScrollTdInitializer;o&&o.linking?z.transform(e.scope,e.element):e.scope.uiScrollTdInitializer={onLink:function(){return z.transform(e.scope,e.element)},scope:e.scope}}return r}function $(){var e=[],t=[],n=[],r=[];return W.forEach(function(i,o){switch(i.op){case"prepend":t.unshift(i);break;case"append":E(i,o),i.op="none",r.push(i);break;case"insert":e=e.concat(P(i,o,q.insertElementAnimated)),i.op="none",r.push(i);break;case"remove":n.push(i)}}),n.forEach(function(t){return e=e.concat(q.removeItem(t))}),t.length&&t.forEach(function(e){E(e),e.op="none"}),W.forEach(function(e,t){return e.scope.$index=W.first+t}),{prepended:t,removed:n,inserted:r,animated:e}}function j(e,t){t.animated.length?i.all(t.animated).then(function(){q.adjustPadding(),T(e)}):q.adjustPadding()}function I(e,t){q.shouldLoadBottom()?(!t||W.effectiveHeight(t.inserted)>0)&&1===F.push(!0)&&(O(e),z.loading(!0)):q.shouldLoadTop()&&(!t||W.effectiveHeight(t.prepended)>0||F[0])&&1===F.push(!1)&&(O(e),z.loading(!0))}function T(t){t||(F=[],t=++D);var n=$();e.$apply(function(){return r(function(){n.inserted.forEach(function(e){return e.element.removeClass("ng-hide")}),n.prepended.forEach(function(e){return e.element.removeClass("ng-hide")}),g(t)||(j(t,n),I(t),F.length||z.calculateProperties())})})}function S(t){var n=$();e.$apply(function(){return r(function(){n.inserted.forEach(function(e){return e.element.removeClass("ng-hide")}),n.prepended.forEach(function(e){return e.element.removeClass("ng-hide")}),q.adjustScrollTopAfterPrepend(n),g(t)||(j(t,n),I(t,n),F.shift(),F.length?O(t):(z.loading(!1),v(),z.calculateProperties()))})})}function O(e){F[0]?W.length&&!q.shouldLoadBottom()?S(e):Y(function(t){g(e)||(t.length0&&(q.clipTop(),W.append(t)),S(e))}):W.length&&!q.shouldLoadTop()?S(e):Q(function(t){g(e)||(t.length0&&(W.length&&q.clipBottom(),W.prepend(t)),S(e))})}function V(){n.$$phase||z.isLoading||z.disabled||(I(D),F.length?b():(z.calculateProperties(),e.$apply()))}function k(e){if(!z.disabled){var t=q[0].scrollTop,n=q[0].scrollHeight-q[0].clientHeight;(0===t&&!W.bof||t===n&&!W.eof)&&e.preventDefault()}}var A=l.uiScroll.match(/^\s*(\w+)\s+in\s+([(\w|\$)\.]+)\s*$/);if(!A)throw new Error("Expected uiScroll in form of '_item_ in _datasource_' but got '"+l.uiScroll+"'");var L=null,C=A[1],_=A[2],M=c[0],H=Math.max(3,h(l.bufferSize,10)),U=Math.max(.3,h(l.padding,.5)),B=h(l.startIndex,1),D=0,F=[],N=new u.default(t,i),W=new s.default(N,H),q=new f.default(N,W,a,M,n,U),z=new p.default(q,W,T,x,l,o,a,e);M&&(M.adapter=z);var R=function(){return angular.isObject(L)&&angular.isFunction(L.get)};if(L=o(_)(e),!R()&&(L=t.get(_),!R()))throw new Error(_+" is not a valid datasource");var X={};m(L,"minIndex","minIndexUser"),m(L,"maxIndex","maxIndexUser");var Y=2!==L.get.length?function(e){return L.get(W.next,H,e)}:function(e){L.get({index:W.next,append:W.length?W[W.length-1].item:void 0,count:H},e)},Q=2!==L.get.length?function(e){return L.get(W.first-H,H,e)}:function(e){L.get({index:W.first-H,prepend:W.length?W[0].item:void 0,count:H},e)};d(function(e,t){q.createPaddingElements(e[0]),t.$destroy(),e.remove()}),e.$on("$destroy",function(){b(),q.unbind("mousewheel",k)}),q.bind("mousewheel",k),r(function(){q.applyContainerStyle(),x()})}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 cd98329d..cdb800b9 100644 --- a/dist/ui-scroll.min.js.map +++ b/dist/ui-scroll.min.js.map @@ -1 +1 @@ -{"version":3,"sources":[],"names":[],"mappings":"","file":"ui-scroll.min.js","sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///ui-scroll.min.js","webpack:///webpack/bootstrap 8eaadf5435bcaf5f09bb","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","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","MIN_VALUE","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","clipBottom","overage","overageHeight","emptySpaceHeight","cache","add","adjustPadding","shouldLoadTop","clipTop","topPaddingHeight","reduce","summ","bottomPaddingHeight","visibleItemsHeight","averageItemHeight","adjustTopPadding","adjustBottomPadding","topPaddingHeightAdd","bottomPaddingHeightAdd","adjustScrollTopAfterMinIndexSet","topPaddingHeightOld","diff","adjustScrollTopAfterPrepend","updates","prepended","paddingHeight","resetTopPadding","clear","resetBottomPadding","removeItem","_padding","Cache","$index","sort","a","b","Padding","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","datasource","propName","propUserName","getOwnPropertyDescriptor","indexStore","pending","isInvalid","rid","ridActual","$$destroyed","bindEvents","resizeAndScrollHandler","unbindEvents","unbind","isElementVisible","visibilityWatcher","unregisterVisibilityWatcher","insertWrapperContent","insertAfter","createElement","$watch","addClass","promises","clone","itemName","transform","tdInitializer","uiScrollTdInitializer","linking","onLink","updateDOM","toBePrepended","toBeRemoved","inserted","concat","removed","animated","updatePaddings","all","enqueueFetch","fetch","loading","$apply","w","removeClass","calculateProperties","adjustBufferAfterFetch","shift","fetchNext","fetchPrevious","$$phase","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.6.1 -- 2017-07-02T19:10:34.898Z\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 }\n }, {\n key: 'prepend',\n value: function prepend(newItems) {\n this.buffer.prepend(newItems);\n this.adjustBuffer();\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.MIN_VALUE;\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.adjustPadding();\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 adjustPadding: function adjustPadding() {\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 adjustScrollTopAfterMinIndexSet: function adjustScrollTopAfterMinIndexSet(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 }\n },\n adjustScrollTopAfterPrepend: function adjustScrollTopAfterPrepend(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 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 indexStore = {};\n\n function defineProperty(datasource, propName, propUserName) {\n var descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n if (!descriptor || !descriptor.set && !descriptor.get) {\n Object.defineProperty(datasource, propName, {\n set: function set(value) {\n indexStore[propName] = value;\n $timeout(function () {\n buffer[propUserName] = value;\n if (!pending.length) {\n var topPaddingHeightOld = viewport.topDataPos();\n viewport.adjustPadding();\n if (propName === 'minIndex') {\n viewport.adjustScrollTopAfterMinIndexSet(topPaddingHeightOld);\n }\n }\n });\n },\n get: function get() {\n return indexStore[propName];\n }\n });\n }\n }\n\n defineProperty(datasource, 'minIndex', 'minIndexUser');\n defineProperty(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.adjustPadding();\n adjustBuffer(rid);\n });\n } else {\n viewport.adjustPadding();\n }\n }\n\n function enqueueFetch(rid, updates) {\n if (viewport.shouldLoadBottom()) {\n if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\n // this means that at least one item appended in the last batch has height > 0\n if (pending.push(true) === 1) {\n fetch(rid);\n adapter.loading(true);\n }\n }\n } else if (viewport.shouldLoadTop()) {\n if (!updates || buffer.effectiveHeight(updates.prepended) > 0 || pending[0]) {\n // this means that at least one item appended in the last batch has height > 0\n // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\n // BTW there will always be at least 1 element in the pending array because bottom is fetched first\n if (pending.push(false) === 1) {\n fetch(rid);\n adapter.loading(true);\n }\n }\n }\n }\n\n function adjustBuffer(rid) {\n if (!rid) {\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.$apply(function () {\n return $timeout(function () {\n\n // show elements after data binging has been done\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 }\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.$apply(function () {\n return $timeout(function () {\n // show elements after data binging has been done\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.adjustScrollTopAfterPrepend(updates);\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n enqueueFetch(rid, updates);\n pending.shift();\n\n if (pending.length) fetch(rid);else {\n adapter.loading(false);\n bindEvents();\n adapter.calculateProperties();\n }\n });\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.$apply();\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 8eaadf5435bcaf5f09bb","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 }\r\n\r\n prepend(newItems) {\r\n this.buffer.prepend(newItems);\r\n this.adjustBuffer();\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.MIN_VALUE;\r\n elements.forEach((wrapper) => {\r\n if (wrapper.element[0].offsetParent) {\r\n // element style is not display:none\r\n top = Math.min(top, wrapper.element.offset().top);\r\n bottom = Math.max(bottom, wrapper.element.offset().top + wrapper.element.outerHeight(true));\r\n }\r\n });\r\n return Math.max(0, bottom - top);\r\n }\r\n\r\n });\r\n\r\n return buffer;\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/buffer.js","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.adjustPadding();\r\n }\r\n },\r\n\r\n shouldLoadTop() {\r\n return !buffer.bof && (viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding());\r\n },\r\n\r\n clipTop() {\r\n // clip the invisible items off the top\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\r\n\r\n for (let i = 0; i < buffer.length; i++) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n topPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n // we need to adjust top padding element before items are removed from top\r\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\r\n topPadding.height(topPadding.height() + overageHeight);\r\n buffer.bof = false;\r\n buffer.remove(0, overage);\r\n buffer.first += overage;\r\n }\r\n },\r\n\r\n adjustPadding() {\r\n if (!buffer.length) {\r\n return;\r\n }\r\n\r\n // precise heights calculation, items that were in buffer once\r\n let topPaddingHeight = topPadding.cache.reduce((summ, item) => summ + (item.index < buffer.first ? item.height : 0), 0);\r\n let bottomPaddingHeight = bottomPadding.cache.reduce((summ, item) => summ + (item.index >= buffer.next ? item.height : 0), 0);\r\n\r\n // average item height based on buffer data\r\n let visibleItemsHeight = buffer.reduce((summ, item) => summ + item.element.outerHeight(true), 0);\r\n let averageItemHeight = (visibleItemsHeight + topPaddingHeight + bottomPaddingHeight) / (buffer.maxIndex - buffer.minIndex + 1);\r\n\r\n // average heights calculation, items that have never been reached\r\n let adjustTopPadding = buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser;\r\n let adjustBottomPadding = buffer.maxIndexUser !== null && buffer.maxIndex < buffer.maxIndexUser;\r\n let topPaddingHeightAdd = adjustTopPadding ? (buffer.minIndex - buffer.minIndexUser) * averageItemHeight : 0;\r\n let bottomPaddingHeightAdd = adjustBottomPadding ? (buffer.maxIndexUser - buffer.maxIndex) * averageItemHeight : 0;\r\n\r\n // paddings combine adjustment\r\n topPadding.height(topPaddingHeight + topPaddingHeightAdd);\r\n bottomPadding.height(bottomPaddingHeight + bottomPaddingHeightAdd);\r\n },\r\n\r\n adjustScrollTopAfterMinIndexSet(topPaddingHeightOld) {\r\n // additional scrollTop adjustment in case of datasource.minIndex external set\r\n if (buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser) {\r\n let diff = topPadding.height() - topPaddingHeightOld;\r\n viewport.scrollTop(viewport.scrollTop() + diff);\r\n }\r\n },\r\n\r\n adjustScrollTopAfterPrepend(updates) {\r\n if (!updates.prepended.length)\r\n return;\r\n const height = buffer.effectiveHeight(updates.prepended);\r\n const paddingHeight = topPadding.height() - height;\r\n if (paddingHeight >= 0) {\r\n topPadding.height(paddingHeight);\r\n }\r\n else {\r\n topPadding.height(0);\r\n viewport.scrollTop(viewport.scrollTop() - paddingHeight);\r\n }\r\n },\r\n\r\n resetTopPadding() {\r\n topPadding.height(0);\r\n topPadding.cache.clear();\r\n },\r\n\r\n resetBottomPadding() {\r\n bottomPadding.height(0);\r\n bottomPadding.cache.clear();\r\n },\r\n\r\n 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 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 indexStore = {};\n\n function defineProperty(datasource, propName, propUserName) {\n let descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n if (!descriptor || (!descriptor.set && !descriptor.get)) {\n Object.defineProperty(datasource, propName, {\n set: (value) => {\n indexStore[propName] = value;\n $timeout(() => {\n buffer[propUserName] = value;\n if (!pending.length) {\n let topPaddingHeightOld = viewport.topDataPos();\n viewport.adjustPadding();\n if (propName === 'minIndex') {\n viewport.adjustScrollTopAfterMinIndexSet(topPaddingHeightOld);\n }\n }\n });\n },\n get: () => indexStore[propName]\n });\n }\n }\n\n defineProperty(datasource, 'minIndex', 'minIndexUser');\n defineProperty(datasource, 'maxIndex', 'maxIndexUser');\n\n const fetchNext = (datasource.get.length !== 2) ? (success) => datasource.get(buffer.next, bufferSize, success)\n : (success) => {\n datasource.get({\n index: buffer.next,\n append: buffer.length ? buffer[buffer.length - 1].item : void 0,\n count: bufferSize\n }, success);\n };\n\n const fetchPrevious = (datasource.get.length !== 2) ? (success) => datasource.get(buffer.first - bufferSize, bufferSize, success)\n : (success) => {\n datasource.get({\n index: buffer.first - bufferSize,\n prepend: buffer.length ? buffer[0].item : void 0,\n count: bufferSize\n }, success);\n };\n\n /**\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.adjustPadding();\n adjustBuffer(rid);\n });\n } else {\n viewport.adjustPadding();\n }\n }\n\n function enqueueFetch(rid, updates) {\n if (viewport.shouldLoadBottom()) {\n if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\n // this means that at least one item appended in the last batch has height > 0\n if (pending.push(true) === 1) {\n fetch(rid);\n adapter.loading(true);\n }\n }\n } else if (viewport.shouldLoadTop()) {\n if ((!updates || buffer.effectiveHeight(updates.prepended) > 0) || pending[0]) {\n // this means that at least one item appended in the last batch has height > 0\n // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\n // BTW there will always be at least 1 element in the pending array because bottom is fetched first\n if (pending.push(false) === 1) {\n fetch(rid);\n adapter.loading(true);\n }\n }\n }\n }\n\n function adjustBuffer(rid) {\n if (!rid) { // dismiss pending requests\n pending = [];\n rid = ++ridActual;\n }\n\n let updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustment\n $scope.$apply(() => $timeout(() => {\n\n // show elements after data binging has been done\n updates.inserted.forEach(w => w.element.removeClass('ng-hide'));\n updates.prepended.forEach(w => w.element.removeClass('ng-hide'));\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n enqueueFetch(rid);\n\n if (!pending.length) {\n adapter.calculateProperties();\n }\n }));\n }\n\n function adjustBufferAfterFetch(rid) {\n let updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustment\n $scope.$apply(() => $timeout(() => {\n // show elements after data binging has been done\n updates.inserted.forEach(w => w.element.removeClass('ng-hide'));\n updates.prepended.forEach(w => w.element.removeClass('ng-hide'));\n\n viewport.adjustScrollTopAfterPrepend(updates);\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n enqueueFetch(rid, updates);\n pending.shift();\n\n if (pending.length)\n fetch(rid);\n else {\n adapter.loading(false);\n bindEvents();\n adapter.calculateProperties();\n }\n }));\n }\n\n function fetch(rid) {\n if (pending[0]) {// scrolling down\n if (buffer.length && !viewport.shouldLoadBottom()) {\n adjustBufferAfterFetch(rid);\n } else {\n fetchNext((result) => {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.eof = true;\n }\n\n if (result.length > 0) {\n viewport.clipTop();\n buffer.append(result);\n }\n\n adjustBufferAfterFetch(rid);\n });\n }\n } else { // scrolling up\n if (buffer.length && !viewport.shouldLoadTop()) {\n adjustBufferAfterFetch(rid);\n } else {\n fetchPrevious((result) => {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.bof = true;\n // log 'bof is reached'\n }\n\n if (result.length > 0) {\n if (buffer.length) {\n viewport.clipBottom();\n }\n buffer.prepend(result);\n }\n\n adjustBufferAfterFetch(rid);\n });\n }\n }\n }\n\n function resizeAndScrollHandler() {\n if (!$rootScope.$$phase && !adapter.isLoading && !adapter.disabled) {\n\n enqueueFetch(ridActual);\n\n if (pending.length) {\n unbindEvents();\n } else {\n adapter.calculateProperties();\n $scope.$apply();\n }\n }\n }\n\n function wheelHandler(event) {\n if (!adapter.disabled) {\n let scrollTop = viewport[0].scrollTop;\n let yMax = viewport[0].scrollHeight - viewport[0].clientHeight;\n\n if ((scrollTop === 0 && !buffer.bof) || (scrollTop === yMax && !buffer.eof)) {\n event.preventDefault();\n }\n }\n }\n }\n\n }\n ]);\n\n\n// WEBPACK FOOTER //\n// ./src/ui-scroll.js"],"sourceRoot":""} \ No newline at end of file diff --git a/src/ui-scroll-grid.js b/src/ui-scroll-grid.js index 2aef2430..8f866be6 100644 --- a/src/ui-scroll-grid.js +++ b/src/ui-scroll-grid.js @@ -183,8 +183,7 @@ angular.module('ui.scroll.grid', []) return; // throw an error? } - let mapTo = selected.mapTo, - next = null; + let mapTo = selected.mapTo, next = null; index -= mapTo < index ? 1 : 0; columns.forEach(c => { diff --git a/webpack.config.js b/webpack.config.js index dfbe48d3..21caae19 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -37,6 +37,7 @@ module.exports.config = { module.exports.compressedPlugins = [ new webpack.optimize.UglifyJsPlugin({ + sourceMap: true, compress: { warnings: true, },