diff --git a/.babelrc b/.babelrc new file mode 100644 index 00000000..4d988f7e --- /dev/null +++ b/.babelrc @@ -0,0 +1,9 @@ +{ + "presets": [ + ["env", { + "targets": { + "browsers": ["last 2 versions", "IE >= 9"] + } + }] + ] +} \ No newline at end of file diff --git a/.gitignore b/.gitignore index 2b23aa8e..d714480e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,4 @@ -.idea -public node_modules temp -/nbproject/private/ -*.log \ No newline at end of file +*.log +.idea \ No newline at end of file diff --git a/.jshintrc b/.jshintrc index b3b46156..cd4cfd3c 100644 --- a/.jshintrc +++ b/.jshintrc @@ -1,24 +1,25 @@ { - "boss": true, - "browser": true, - "eqnull": true, - "expr": true, - "esversion": 6, - "immed": true, - "laxbreak": true, - "loopfunc": true, - "newcap": true, - "noarg": true, - "noempty": true, - "nonew": true, - "quotmark": true, - "smarttabs": true, - "strict": true, - "sub": true, - "trailing": true, - "undef": true, - "unused": true, - "globals": { - "angular": false - } + "emitErrors": true, + "boss": true, + "browser": true, + "eqnull": true, + "expr": true, + "esversion": 6, + "immed": true, + "laxbreak": true, + "loopfunc": true, + "newcap": true, + "noarg": true, + "noempty": true, + "nonew": true, + "quotmark": true, + "smarttabs": true, + "strict": false, + "sub": true, + "trailing": true, + "undef": true, + "unused": true, + "globals": { + "angular": false + } } diff --git a/.travis.yml b/.travis.yml index 6385a2c1..a898a3a8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,12 +11,10 @@ before_install: - sh -e /etc/init.d/xvfb start before_script: -- npm install -g grunt-cli -- npm install -g karma - npm install script: -- grunt travis +- npm run build deploy: provider: npm diff --git a/Gruntfile.js b/Gruntfile.js deleted file mode 100644 index 6e34613b..00000000 --- a/Gruntfile.js +++ /dev/null @@ -1,159 +0,0 @@ -module.exports = function (grunt) { - grunt.loadNpmTasks('grunt-karma'); - grunt.loadNpmTasks('grunt-contrib-connect'); - grunt.loadNpmTasks('grunt-contrib-watch'); - grunt.loadNpmTasks('grunt-contrib-jshint'); - grunt.loadNpmTasks('grunt-contrib-copy'); - grunt.loadNpmTasks('grunt-contrib-clean'); - grunt.loadNpmTasks('grunt-webpack'); - - var webpackSettings = require('./webpack.config.js'); - - grunt.initConfig({ - connect: { - app: { - options: { - port: 5005, - base: './demo', - middleware: function (connect, options, middlewares) { - middlewares.unshift(function (req, res, next) { - var files = ['ui-scroll.js', 'ui-scroll-grid.js', 'ui-scroll.js.map', 'ui-scroll-grid.js.map']; - for (var i = 0; i < files.length; i++) { - if (req.url === '/dist/' + files[i]) { - res.end(grunt.file.read('./temp/' + files[i])); - } - } - next(); - }); - return middlewares; - } - } - } - }, - watch: { - options: { - livereload: false, - debounceDelay: 250 - }, - scripts: { - files: [ - 'src/**/*.js' - ], - tasks: 'webpack:default' - } - }, - karma: { - options: { - configFile: './test/config/karma.conf.js', - runnerPort: 9100 - }, - default: {}, - compressed: { - options: { - files: require('./test/config/karma.conf.files.js').compressedFiles, - port: 9876, - autoWatch: false, - keepalive: false, - singleRun: true - } - } - }, - webpack: { - options: webpackSettings.config, - default: {}, - compressed: { - plugins: webpackSettings.compressedPlugins, - output: { - filename: '[name].min.js' - } - } - }, - clean: { - temp: ['temp'] - }, - copy: { - sources: { - files: [ - {expand: true, src: ['*'], cwd: 'temp', dest: 'dist/'}, - ] - }, - jqLiteExtrasFake: { - files: [ - {expand: true, src: ['ui-scroll-jqlite.js'], cwd: 'src', dest: 'dist/'}, - { - expand: true, src: ['ui-scroll-jqlite.js'], cwd: 'src', dest: 'dist/', rename: function (dest, src) { - return dest + src.replace(/\.js$/, ".min.js"); - } - } - ] - } - }, - jshint: { - sources: { - files: { - src: [ - './src/*.js', - './src/modules/*.js' - ] - }, - options: grunt.util._.extend({}, grunt.file.readJSON('.jshintrc'), grunt.file.readJSON('./src/.jshintrc')) - }, - tests: { - files: { - src: ['./test/*Spec.js'] - }, - options: grunt.util._.extend({}, grunt.file.readJSON('.jshintrc'), { - node: true, - globals: { - angular: false, - inject: false, - jQuery: false, - jasmine: false, - afterEach: false, - beforeEach: false, - ddescribe: false, - describe: false, - expect: false, - iit: false, - it: false, - spyOn: false, - xdescribe: false, - xit: false - } - }) - } - } - }); - - grunt.registerTask('server', [ - 'connect', - 'watch' - ]); - - grunt.registerTask('default', [ - 'webpack:default', - 'server' - ]); - - grunt.registerTask('test', [ - 'clean:temp', - 'webpack:default', - 'karma:default' - ]); - - grunt.registerTask('build', [ - 'jshint:tests', - 'jshint:sources', - 'clean:temp', - 'webpack:compressed', - 'karma:compressed', - 'webpack:default', - 'copy:sources', - 'copy:jqLiteExtrasFake' - ]); - - grunt.registerTask('travis', [ - 'webpack:compressed', - 'karma:compressed' - ]); -}; diff --git a/README.md b/README.md index ee6e4cd7..2767b8f3 100644 --- a/README.md +++ b/README.md @@ -136,7 +136,7 @@ Currently we have 2 regular modules which can be added to the angular-app you ar - __ui.scroll__ module which has - [uiScroll directive](#uiscroll-directive) - [uiScrollViewport directive](#uiscrollviewport-directive) - - [jqLiteExtras service](#jqliteextras-service) (with runner) + - [jqLiteExtras constant](#jqliteextras-constant) (with runner) - __ui.scroll.grid__ module which has - [uiScrollTh directive](#uiscrollth-and-uiscrolltd-directives) - [uiScrollTd directive](#uiscrollth-and-uiscrolltd-directives) @@ -349,9 +349,9 @@ the browser window object will be used as viewport. ------------------- -## jqLiteExtras service +## jqLiteExtras constant -This service implements some DOM element methods of jQuery which are currently not implemented in jqLite, namely +This constant is a class that implements some DOM element methods of jQuery which are currently not implemented in jqLite, namely * before(elem) * height() and height(value) @@ -425,8 +425,7 @@ A reference to this object is injected as a property named `gridAdapter`in the s Please feel free to make Pull Requests. Below is the information which could be useful for local developing and contributing. The ui-scroll sources are in [./src](https://github.com/angular-ui/ui-scroll/tree/master/src) folder. They could not be run as is -because of ES6 modules (since v1.6.0), they should be built. Build process includes jshint sources verification, webpack-based -distributive files forming and tests running. +because of ES6 modules (since v1.6.0), they should be built. The build process includes jshint sources verification, distributive files generating and tests running. There are some npm scripts available for developing. @@ -436,10 +435,7 @@ There are some npm scripts available for developing. npm start ``` - This should start development server on 5005 port over the [./demo](https://github.com/angular-ui/ui-scroll/tree/master/demo) folder. - The middleware is configured to provide work with temporary distributive files (./temp) despite the direct links to public distributive - files (./dist). So the dist-folder should stay clear until the development is finished. Dev-server watches for the source codes (./src) - and automatically re-build temporary distributive files. + This should start development server on 5005 port over the [./demo](https://github.com/angular-ui/ui-scroll/tree/master/demo) folder. The dev-server proxy is configured to provide work with temporary distributive files (which are being built in-memory each time the sources from ./src have been changed) despite the direct links to public distributive files form ./dist folder. So the dist-folder should stay clear until the development is finished. __2__. To run tests in keep-alive mode use @@ -447,9 +443,7 @@ npm start npm test ``` - This runs karma testing against temporary distributive files (./temp). We created a number of specifications which consist of more - than 160 tests. They are living at the [./test](https://github.com/angular-ui/ui-scroll/tree/master/test) folder. Karma watches for temp - and test folders changes and automatically re-runs tests. + This runs Karma testing against temporary distributive files that are being built in-memory by the Webpack. We created a number of specifications which consist of more than 200 tests. They are living at the [./test](https://github.com/angular-ui/ui-scroll/tree/master/test) folder. Karma watches both for ./src and ./test folders and automatically re-runs tests after the source code has been changed. __3__. To run both dev-server and tests in keep-alive mode use @@ -457,8 +451,7 @@ npm test npm run dev ``` - This is the combination of first two scripts running in concurrently mode. This allows you to work with the ui-scroll examples on 5005 port - during continuous tests running. + This is the combination of first two scripts running in concurrently mode. This allows you to work with the ui-scroll examples on 5005 port during continuous tests running. __4__. To run full build process use @@ -466,13 +459,12 @@ npm run dev npm run build ``` - After developing and testing complete, the build process should be run to - a) pass through jshint, - b) generate minified versions of distributive, - c) run tests with minified distributive files, - d) obtain all necessary files in the [./dist](https://github.com/angular-ui/ui-scroll/tree/master/dist) folder. + After developing and testing are completed, the build process should be run to + a) pass through jshint (both of ui-scroll and test specifications sources), + b) generate compressed and uncompressed versions of the ui-scroll distributive in the public [./dist](https://github.com/angular-ui/ui-scroll/tree/master/dist) folder, + c) run tests over minified distributive files. -PR should include source code (./scr) changes, may include tests (./test) changes and may not include public distributive (./dist) changes. +Pull Rerquest should include source code (./scr) changes, may include tests (./test) changes and may not include public distributive (./dist) changes. ------------------- @@ -486,7 +478,7 @@ PR should include source code (./scr) changes, may include tests (./test) change * Reconsidered min/max indices processing. * Refactored tests (removed timeouts, added helpers). * Added ~50 new tests. - * Fixed a number of issues. + * Fixed a number of issues and other improvements. ### v1.6.2 * Added bottomVisible, bottomVisibleElement and bottomVisibleScope properties to the Adapter. diff --git a/dist/ui-scroll-grid.js b/dist/ui-scroll-grid.js index 6fd3faa5..e5a46583 100644 --- a/dist/ui-scroll-grid.js +++ b/dist/ui-scroll-grid.js @@ -1,8 +1,8 @@ -/*! - * angular-ui-scroll (uncompressed) - * https://github.com/angular-ui/ui-scroll - * Version: 1.7.0-rc.6 -- 2017-11-17T18:27:05.558Z - * License: MIT +/*! + * angular-ui-scroll + * https://github.com/angular-ui/ui-scroll + * Version: 1.7.0-rc.6 -- 2017-11-19T07:39:04.374Z + * License: MIT */ /******/ (function(modules) { // webpackBootstrap /******/ // The module cache @@ -39,9 +39,6 @@ /******/ // 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)) { @@ -69,12 +66,12 @@ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 6); +/******/ return __webpack_require__(__webpack_require__.s = 7); /******/ }) /************************************************************************/ /******/ ({ -/***/ 6: +/***/ 7: /***/ (function(module, exports, __webpack_require__) { "use strict"; diff --git a/dist/ui-scroll-grid.js.map b/dist/ui-scroll-grid.js.map index 85e91dab..9dee0f57 100644 --- a/dist/ui-scroll-grid.js.map +++ b/dist/ui-scroll-grid.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap af02e5af19248c8e95e9?13bb","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","assign","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 af02e5af19248c8e95e9","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 = Object.assign({}, 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: Object.assign({}, 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 36a3010ad66560b7fc51","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","assign","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// 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 36a3010ad66560b7fc51","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 = Object.assign({}, 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: Object.assign({}, 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 a89f1252..3d8a0149 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.7.0-rc.6 -- 2017-11-17T18:27:05.969Z - * License: MIT +/*! + * angular-ui-scroll + * https://github.com/angular-ui/ui-scroll + * Version: 1.7.0-rc.6 -- 2017-11-19T07:39:04.374Z + * 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:Object.assign({},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()}}}})}}); +!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.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=7)}({7: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:Object.assign({},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 380c5f34..b7bfe497 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 ff58afc7647583ed56f1?4add","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","assign","_this","_this2","result","GridController","scrollViewport","transform","visible","forEach","cell","_this3","rowMap","Map","adapter","publicContext","gridAdapter","scope","item","registerColumn","push","registerCell","set","unregisterCell","indexOf","splice","delete","callback","_this4","slice","sort","a","b","layouts","Error","map","selected","columnId","next","find","col","undefined","require","restrict","link","$scope","$attr","controllers","gridController","tdInitializer","uiScrollTdInitializer","linking","$on","onLink"],"mappings":"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","file":"ui-scroll-grid.min.js","sourcesContent":["/*!\r\n * angular-ui-scroll (uncompressed)\r\n * https://github.com/angular-ui/ui-scroll\r\n * Version: 1.7.0-rc.6 -- 2017-11-17T18:27:05.558Z\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 = Object.assign({}, 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: Object.assign({}, 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 ff58afc7647583ed56f1","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 = Object.assign({}, 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: Object.assign({}, column.css),\n mapTo: column.mapTo\n }));\n return result;\n };\n\n this.applyLayout = function(layouts) {\n if (!layouts || layouts.length != columns.length) {\n throw new Error('Failed to apply layout - number of layouts should match number of columns');\n }\n layouts.forEach((layout, index) => columns[index].applyLayout(layout));\n transform(columns.map((column) => column.header));\n rowMap.forEach((row) => transform(row));\n };\n\n this.moveBefore = function(selected, target) {\n let index = target;\n\n if (target % 1 !== 0) {\n index = target ? columns[target.columnId].mapTo : columns.length;\n }\n if (index < 0 || index > columns.length) {\n return; // throw an error?\n }\n\n let mapTo = selected.mapTo,\n next = null;\n index -= mapTo < index ? 1 : 0;\n\n columns.forEach(c => {\n c.mapTo -= c.mapTo > mapTo ? 1 : 0;\n c.mapTo += c.mapTo >= index ? 1 : 0;\n next = c.mapTo === index + 1 ? c : next;\n });\n\n selected.mapTo = index;\n selected.moveBefore(next);\n };\n\n this.exchangeWith = function(selected, index) {\n if (index < 0 || index >= columns.length) {\n return;\n }\n columns.find(c => c.mapTo === index).mapTo = selected.mapTo;\n selected.mapTo = index;\n };\n\n this.columnFromPoint = function(x, y) {\n let column = columns.find(col => col.columnFromPoint(x, y));\n return column ? new ColumnAdapter(this, column) : undefined;\n };\n\n // function definitions\n\n function transform(row) {\n let parent = row[0].parent();\n let visible = [];\n\n row.forEach((cell, index) => {\n columns[index].applyCss(cell);\n visible[columns[index].mapTo] = row[index];\n row[index].detach();\n });\n\n visible.forEach(cell => parent.append(cell));\n }\n\n }\n\n return {\n require: ['^^uiScrollViewport'],\n restrict: 'A',\n link: ($scope, element, $attr, controllers) => {\n controllers[0].gridController = controllers[0].gridController || new GridController(controllers[0]);\n controllers[0].gridController.registerColumn(element);\n }\n };\n }])\n\n.directive('uiScrollTd', function() {\n return {\n require: ['?^^uiScrollViewport'],\n restrict: 'A',\n link: ($scope, element, $attr, controllers) => {\n if (!controllers[0]) {\n return;\n }\n let scope = $scope;\n let tdInitializer = $scope.uiScrollTdInitializer;\n if (!tdInitializer) {\n tdInitializer = $scope.uiScrollTdInitializer = {\n linking: true\n };\n }\n if (!tdInitializer.linking) {\n scope = tdInitializer.scope;\n }\n let gridController = controllers[0].gridController;\n if (gridController.registerCell(scope, element)) {\n $scope.$on('$destroy', () => gridController.unregisterCell(scope, element));\n }\n if (!tdInitializer.linking) {\n tdInitializer.onLink();\n }\n }\n };\n});\n\n\n\n// WEBPACK FOOTER //\n// ./src/ui-scroll-grid.js"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///ui-scroll-grid.min.js","webpack:///webpack/bootstrap 36a3010ad66560b7fc51","webpack:///./src/ui-scroll-grid.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","7","angular","directive","console","$timeout","GridAdapter","controller","this","getLayout","applyLayout","layout","columnFromPoint","x","y","getColumns","ColumnAdapter","column","css","attr","arguments","value","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","assign","_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":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 7);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 7:\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 = Object.assign({}, 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: Object.assign({}, 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// 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 36a3010ad66560b7fc51","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 = Object.assign({}, 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: Object.assign({}, 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.js b/dist/ui-scroll.js index c4a6bf22..bec5a53b 100644 --- a/dist/ui-scroll.js +++ b/dist/ui-scroll.js @@ -1,8 +1,8 @@ -/*! - * angular-ui-scroll (uncompressed) - * https://github.com/angular-ui/ui-scroll - * Version: 1.7.0-rc.6 -- 2017-11-17T18:27:05.558Z - * License: MIT +/*! + * angular-ui-scroll + * https://github.com/angular-ui/ui-scroll + * Version: 1.7.0-rc.6 -- 2017-11-19T07:39:04.374Z + * License: MIT */ /******/ (function(modules) { // webpackBootstrap /******/ // The module cache @@ -39,9 +39,6 @@ /******/ // 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)) { @@ -69,7 +66,7 @@ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 7); +/******/ return __webpack_require__(__webpack_require__.s = 0); /******/ }) /************************************************************************/ /******/ ([ @@ -79,520 +76,533 @@ "use strict"; -Object.defineProperty(exports, "__esModule", { - value: true -}); +var _jqLiteExtras = __webpack_require__(1); -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; }; }(); +var _jqLiteExtras2 = _interopRequireDefault(_jqLiteExtras); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _elementRoutines = __webpack_require__(2); -var Adapter = function () { - function Adapter($scope, $parse, $attr, viewport, buffer, doAdjust, reload) { - _classCallCheck(this, Adapter); +var _elementRoutines2 = _interopRequireDefault(_elementRoutines); - this.$parse = $parse; - this.$attr = $attr; - this.viewport = viewport; - this.buffer = buffer; +var _buffer = __webpack_require__(3); - this.doAdjust = doAdjust; - this.reload = reload; +var _buffer2 = _interopRequireDefault(_buffer); - this.isLoading = false; - this.disabled = false; +var _viewport = __webpack_require__(4); - var viewportScope = viewport.getScope(); - this.startScope = viewportScope.$parent ? viewportScope : $scope; +var _viewport2 = _interopRequireDefault(_viewport); - this.publicContext = {}; - this.assignAdapter($attr.adapter); - this.generatePublicContext(); - } +var _adapter = __webpack_require__(6); - _createClass(Adapter, [{ - key: 'assignAdapter', - value: function assignAdapter(adapterAttr) { - if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\s+|\s+$/gm, ''))) { - return; - } - var adapterOnScope = void 0; +var _adapter2 = _interopRequireDefault(_adapter); - try { - this.$parse(adapterAttr).assign(this.startScope, {}); - adapterOnScope = this.$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; - } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - Object.assign(adapterOnScope, this.publicContext); - this.publicContext = adapterOnScope; - } - }, { - key: 'generatePublicContext', - value: function generatePublicContext() { +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; - // 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); - } + this.container = element; + this.viewport = element; + this.scope = scope; - // these read-only props will be accessible out of ui-scroll via user defined adapter - var publicProps = ['isLoading', 'topVisible', 'topVisibleElement', 'topVisibleScope', 'bottomVisible', 'bottomVisibleElement', 'bottomVisibleScope']; + angular.forEach(element.children(), function (child) { + if (child.tagName.toLowerCase() === 'tbody') { + _this.viewport = angular.element(child); + } + }); - var _loop = function _loop(_i) { - var property = void 0, - attr = _this.$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) { - _this.$parse(attr).assign(_this.startScope, value); - } - } - }); - }; + return this; + }] + }; +}).directive('uiScroll', ['$log', '$injector', '$rootScope', '$timeout', '$interval', '$q', '$parse', function (console, $injector, $rootScope, $timeout, $interval, $q, $parse) { - for (var _i = publicProps.length - 1; _i >= 0; _i--) { - _loop(_i); - } + return { + require: ['?^uiScrollViewport'], + restrict: 'A', + transclude: 'element', + priority: 1000, + terminal: true, + link: link + }; - // 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.doAdjust() : 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; + 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 + '\''); } - }, { - key: 'append', - value: function append(newItems) { - this.buffer.append(newItems); - this.doAdjust(); - this.viewport.clipTop(); - this.viewport.clipBottom(); + + function parseNumericAttr(value, defaultValue) { + var result = $parse(value)($scope); + return isNaN(result) ? defaultValue : result; } - }, { - key: 'prepend', - value: function prepend(newItems) { - this.buffer.prepend(newItems); - this.doAdjust(); - this.viewport.clipTop(); - this.viewport.clipBottom(); + + var BUFFER_MIN = 3; + var BUFFER_DEFAULT = 10; + var PADDING_MIN = 0.3; + var PADDING_DEFAULT = 0.5; + var MAX_VIEWPORT_DELAY = 500; + var VIEWPORT_POLLING_INTERVAL = 50; + + 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, startIndex); + var viewport = new _viewport2.default(elementRoutines, buffer, element, viewportController, $rootScope, padding); + var adapter = new _adapter2.default($scope, $parse, $attr, viewport, buffer, doAdjust, reload); + + if (viewportController) { + viewportController.adapter = adapter; } - }, { - key: 'applyUpdates', - value: function applyUpdates(arg1, arg2) { - if (typeof arg1 === 'function') { - this.applyUpdatesFunc(arg1); - } else { - this.applyUpdatesIndex(arg1, arg2); + + var isDatasourceValid = function isDatasourceValid() { + return Object.prototype.toString.call(datasource) === '[object Object]' && typeof datasource.get === 'function'; + }; + + 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'); } - this.doAdjust(); } - }, { - key: 'applyUpdatesFunc', - value: function applyUpdatesFunc(cb) { - var _this2 = this; - 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, cb(wrapper.item, wrapper.scope, wrapper.element)); + var onRenderHandlers = []; + function onRenderHandlersRunner() { + onRenderHandlers.forEach(function (handler) { + return handler.run(); }); + onRenderHandlers = []; } - }, { - key: 'applyUpdatesIndex', - value: function applyUpdatesIndex(index, newItems) { - if (index % 1 !== 0) { - throw new Error('applyUpdates - ' + index + ' is not a valid index (should be an integer)'); - } - var _index = index - this.buffer.first; - - // apply updates only within buffer - if (_index >= 0 && _index < this.buffer.length) { - this.applyUpdate(this.buffer[_index], newItems); - } - // out-of-buffer case: deletion may affect Paddings - else if (index >= this.buffer.getAbsMinIndex() && index <= this.buffer.getAbsMaxIndex()) { - if (Array.isArray(newItems) && !newItems.length) { - this.viewport.removeCacheItem(index, index === this.buffer.minIndex); - if (index === this.buffer.getAbsMinIndex()) { - this.buffer.incrementMinIndex(); - } else { - this.buffer.decrementMaxIndex(); + function persistDatasourceIndex(datasource, propName) { + var getter = void 0; + // need to postpone min/maxIndexUser processing if the view is empty + if (Number.isInteger(datasource[propName])) { + getter = datasource[propName]; + if (Number.isInteger(getter)) { + onRenderHandlers = onRenderHandlers.filter(function (handler) { + return handler.id !== propName; + }); + onRenderHandlers.push({ + id: propName, + run: function run() { + return datasource[propName] = getter; } - } + }); } + } } - }, { - key: 'applyUpdate', - value: function applyUpdate(wrapper, newItems) { - var _this3 = this; - if (!Array.isArray(newItems)) { - return; - } - var position = this.buffer.indexOf(wrapper); - if (!newItems.reverse().some(function (newItem) { - return newItem === wrapper.item; - })) { - wrapper.op = 'remove'; - if (position === 0 && !newItems.length) { - wrapper._op = 'isTop'; // to catch "first" edge case on remove - } + function defineDatasourceIndex(datasource, propName, propUserName) { + var descriptor = Object.getOwnPropertyDescriptor(datasource, propName); + if (descriptor && (descriptor.set || descriptor.get)) { + return; } - newItems.forEach(function (newItem) { - if (newItem === wrapper.item) { - position--; - } else { - // 3 parameter (isTop) is to catch "first" edge case on insert - _this3.buffer.insert(position + 1, newItem, position === -1); + var getter = void 0; + persistDatasourceIndex(datasource, propName); + Object.defineProperty(datasource, propName, { + set: function set(value) { + getter = value; + if (pending.length && !buffer.length) { + persistDatasourceIndex(datasource, propName); + return; + } + buffer[propUserName] = value; + var topPaddingHeightOld = viewport.topDataPos(); + viewport.adjustPaddings(); + if (propName === 'minIndex') { + viewport.onAfterMinIndexSet(topPaddingHeightOld); + } + }, + get: function get() { + return getter; } }); } - }, { - 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; + defineDatasourceIndex(datasource, 'minIndex', 'minIndexUser'); + defineDatasourceIndex(datasource, 'maxIndex', 'maxIndexUser'); - if (rowTop !== itemTop) { - // a new row condition - var itemHeight = item.element.outerHeight(true); - var top = this.viewport.topDataPos() + topHeight + itemHeight; + 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); + }; - if (!topDone && top > this.viewport.topVisiblePos()) { - topDone = true; - this['topVisible'] = item.item; - this['topVisibleElement'] = item.element; - this['topVisibleScope'] = item.scope; + 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); + }; + + var initialize = function initialize() { + var tryCount = 0; + if (!viewport.applyContainerStyle()) { + var timer = $interval(function () { + tryCount++; + if (viewport.applyContainerStyle()) { + $interval.cancel(timer); + doAdjust(); } - 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; + if (tryCount * VIEWPORT_POLLING_INTERVAL >= MAX_VIEWPORT_DELAY) { + $interval.cancel(timer); + throw Error('ui-scroll directive requires a viewport with non-zero height in ' + MAX_VIEWPORT_DELAY + 'ms'); } - topHeight += itemHeight; - } - rowTop = itemTop; - - if (topDone && bottomDone) { - break; - } + }, VIEWPORT_POLLING_INTERVAL); + } else { + doAdjust(); } - } - }]); + }; - return Adapter; -}(); + /** + * 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(); + }); -exports.default = Adapter; + $scope.$on('$destroy', function () { + unbindEvents(); + viewport.unbind('mousewheel', wheelHandler); + }); -/***/ }), -/* 1 */ -/***/ (function(module, exports, __webpack_require__) { + viewport.bind('mousewheel', wheelHandler); -"use strict"; + initialize(); + /* Private function definitions */ -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = ScrollBuffer; -function ScrollBuffer(elementRoutines, bufferSize, startIndex) { - var buffer = Object.create(Array.prototype); + function isInvalid(rid) { + return rid && rid !== ridActual || $scope.$$destroyed; + } - Object.assign(buffer, { - size: bufferSize, + function bindEvents() { + viewport.bind('resize', resizeAndScrollHandler); + viewport.bind('scroll', resizeAndScrollHandler); + } - 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); - }, + 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); + persistDatasourceIndex(datasource, 'minIndex'); + persistDatasourceIndex(datasource, 'maxIndex'); + doAdjust(); + } - /** - * 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, isTop) { - var wrapper = { - item: item - }; + function isElementVisible(wrapper) { + return wrapper.element.height() && wrapper.element[0].offsetParent; + } - if (operation % 1 === 0) { - // it is an insert - wrapper.op = 'insert'; - buffer.splice(operation, 0, wrapper); - if (isTop) { - buffer.first--; - } else { - buffer.next++; - } - } else { - wrapper.op = operation; - switch (operation) { - case 'append': - buffer.push(wrapper); - break; - case 'prepend': - buffer.unshift(wrapper); - break; + function visibilityWatcher(wrapper) { + if (isElementVisible(wrapper)) { + buffer.forEach(function (item) { + if (typeof item.unregisterVisibilityWatcher === 'function') { + item.unregisterVisibilityWatcher(); + delete item.unregisterVisibilityWatcher; + } + }); + if (!pending.length) { + $timeout(function () { + return doAdjust(); + }); } } - }, - + } - // removes elements from buffer - remove: function remove(arg1, arg2) { - if (Number.isInteger(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); - if (arg1._op === 'isTop' && buffer.first === this.getAbsMinIndex()) { - this.incrementMinIndex(); - } else { - this.decrementMaxIndex(); - } - if (arg1._op === 'isTop') { - buffer.first++; - } else { - buffer.next--; - } - if (!buffer.length) { - buffer.first = 1; - buffer.next = 1; + function insertWrapperContent(wrapper, insertAfter) { + createElement(wrapper, insertAfter, viewport.insertElement); + if (!isElementVisible(wrapper)) { + wrapper.unregisterVisibilityWatcher = wrapper.scope.$watch(function () { + return visibilityWatcher(wrapper); + }); } + elementRoutines.hideElement(wrapper); // hide inserted elements before data binding + } - return elementRoutines.removeElementAnimated(arg1); - }, - incrementMinIndex: function incrementMinIndex() { - if (buffer.minIndexUser !== null) { - if (buffer.minIndex > buffer.minIndexUser) { - buffer.minIndexUser++; - return; - } - if (buffer.minIndex === buffer.minIndexUser) { - buffer.minIndexUser++; + 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 + }; } } - buffer.minIndex++; - }, - decrementMaxIndex: function decrementMaxIndex() { - if (buffer.maxIndexUser !== null && buffer.maxIndex <= buffer.maxIndexUser) { - buffer.maxIndexUser--; - } - buffer.maxIndex--; - }, - getAbsMinIndex: function getAbsMinIndex() { - if (buffer.minIndexUser !== null) { - return Math.min(buffer.minIndexUser, buffer.minIndex); - } - return buffer.minIndex; - }, - getAbsMaxIndex: function getAbsMaxIndex() { - if (buffer.maxIndexUser !== null) { - return Math.max(buffer.maxIndexUser, buffer.maxIndex); - } - return buffer.maxIndex; - }, - effectiveHeight: function effectiveHeight(elements) { - if (!elements.length) { - return 0; - } - var top = Number.MAX_VALUE; - var bottom = Number.NEGATIVE_INFINITY; - 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 promises; } - }); - - buffer.reset(startIndex); - - return buffer; -} -/***/ }), -/* 2 */ -/***/ (function(module, exports, __webpack_require__) { + function updateDOM() { + var promises = []; + var toBePrepended = []; + var toBeRemoved = []; + var inserted = []; -"use strict"; + 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)); + }); -Object.defineProperty(exports, "__esModule", { - value: true -}); + if (toBePrepended.length) toBePrepended.forEach(function (wrapper) { + insertWrapperContent(wrapper); + wrapper.op = 'none'; + }); -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; }; }(); + buffer.forEach(function (item, i) { + return item.scope.$index = buffer.first + i; + }); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + return { + prepended: toBePrepended, + removed: toBeRemoved, + inserted: inserted, + animated: promises + }; + } -var hideClassToken = 'ng-ui-scroll-hide'; + function updatePaddings(rid, updates) { + // schedule another doAdjust after animation completion + if (updates.animated.length) { + $q.all(updates.animated).then(function () { + viewport.adjustPaddings(); + doAdjust(rid); + }); + } else { + viewport.adjustPaddings(); + } + } -function addCSSRule(sheet, selector, rules, index) { - if ('insertRule' in sheet) { - sheet.insertRule(selector + '{' + rules + '}', index); - } else if ('addRule' in sheet) { - sheet.addRule(selector, rules, index); - } -} + 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) { + adapter.loading(true); + fetch(rid); + } + } + } 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) { + adapter.loading(true); + fetch(rid); + } + } + } + } -var ElementRoutines = function () { - function ElementRoutines($injector, $q) { - _classCallCheck(this, ElementRoutines); + function processUpdates() { + var updates = updateDOM(); - this.$animate = $injector.has && $injector.has('$animate') ? $injector.get('$animate') : null; - this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3; - this.$q = $q; - addCSSRule(document.styleSheets[0], '.' + hideClassToken, 'display: none'); - } + // We need the item bindings to be processed before we can do adjustments + !$scope.$$phase && !$rootScope.$$phase && $scope.$digest(); - _createClass(ElementRoutines, [{ - key: 'hideElement', - value: function hideElement(wrapper) { - wrapper.element.addClass(hideClassToken); - } - }, { - key: 'showElement', - value: function showElement(wrapper) { - wrapper.element.removeClass(hideClassToken); - } - }, { - key: 'insertElement', - value: function insertElement(newElement, previousElement) { - previousElement.after(newElement); - return []; - } - }, { - key: 'removeElement', - value: function removeElement(wrapper) { - wrapper.element.remove(); - wrapper.scope.$destroy(); - return []; + updates.inserted.forEach(function (w) { + return elementRoutines.showElement(w); + }); + updates.prepended.forEach(function (w) { + return elementRoutines.showElement(w); + }); + return updates; } - }, { - key: 'insertElementAnimated', - value: function insertElementAnimated(newElement, previousElement) { - if (!this.$animate) { - return this.insertElement(newElement, previousElement); + + function doAdjust(rid) { + if (!rid) { + // dismiss pending requests + pending = []; + rid = ++ridActual; } - 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(); - }); + var updates = processUpdates(); - return [deferred.promise]; + if (isInvalid(rid)) { + return; } - // 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); + updatePaddings(rid, updates); + enqueueFetch(rid); + + if (!pending.length) { + adapter.calculateProperties(); } + } - if (this.isAngularVersionLessThen1_3) { - var deferred = this.$q.defer(); - this.$animate.leave(wrapper.element, function () { - wrapper.scope.$destroy(); - return deferred.resolve(); - }); + function doAdjustAfterFetch(rid) { + var updates = processUpdates(); - return [deferred.promise]; + viewport.onAfterPrepend(updates); + + if (isInvalid(rid)) { + return; } - return [this.$animate.leave(wrapper.element).then(function () { - return wrapper.scope.$destroy(); - })]; + updatePaddings(rid, updates); + onRenderHandlersRunner(); + enqueueFetch(rid, updates); + pending.shift(); + + if (pending.length) fetch(rid);else { + adapter.loading(false); + bindEvents(); + adapter.calculateProperties(); + } } - }]); - return ElementRoutines; -}(); + function fetch(rid) { + if (pending[0]) { + // scrolling down + if (buffer.length && !viewport.shouldLoadBottom()) { + doAdjustAfterFetch(rid); + } else { + fetchNext(function (result) { + if (isInvalid(rid)) { + return; + } -exports.default = ElementRoutines; + if (result.length < bufferSize) { + buffer.eof = true; + } + + if (result.length > 0) { + viewport.clipTop(); + buffer.append(result); + } + + doAdjustAfterFetch(rid); + }); + } + } else { + // scrolling up + if (buffer.length && !viewport.shouldLoadTop()) { + doAdjustAfterFetch(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); + } + + doAdjustAfterFetch(rid); + }); + } + } + } + + function resizeAndScrollHandler() { + if (!$rootScope.$$phase && !adapter.isLoading && !adapter.disabled) { + + enqueueFetch(ridActual); + + if (pending.length) { + unbindEvents(); + } else { + adapter.calculateProperties(); + !$scope.$$phase && $scope.$digest(); + } + } + } + + 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(); + } + } + } + } +}]); /***/ }), -/* 3 */ +/* 1 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -908,7 +918,7 @@ var JQLiteExtras = function () { exports.default = JQLiteExtras; /***/ }), -/* 4 */ +/* 2 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -917,214 +927,262 @@ exports.default = JQLiteExtras; Object.defineProperty(exports, "__esModule", { value: true }); -exports.default = Viewport; -var _padding = __webpack_require__(5); +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; }; }(); -var _padding2 = _interopRequireDefault(_padding); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +var hideClassToken = 'ng-ui-scroll-hide'; -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; +function addCSSRule(sheet, selector, rules, index) { + if ('insertRule' in sheet) { + sheet.insertRule(selector + '{' + rules + '}', index); + } else if ('addRule' in sheet) { + sheet.addRule(selector, rules, index); + } +} - viewport.css({ - 'overflow-anchor': 'none', - 'overflow-y': 'auto', - 'display': 'block' - }); +var ElementRoutines = function () { + function ElementRoutines($injector, $q) { + _classCallCheck(this, ElementRoutines); - function bufferPadding() { - return viewport.outerHeight() * padding; // some extra space to initiate preload + this.$animate = $injector.has && $injector.has('$animate') ? $injector.get('$animate') : null; + this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3; + this.$q = $q; + addCSSRule(document.styleSheets[0], '.' + hideClassToken, 'display: none'); } - Object.assign(viewport, { - getScope: function getScope() { - return scope; - }, - createPaddingElements: function createPaddingElements(template) { - topPadding = new _padding2.default(template); - bottomPadding = new _padding2.default(template); - element.before(topPadding.element); - element.after(bottomPadding.element); - topPadding.height(0); - bottomPadding.height(0); - }, - applyContainerStyle: function applyContainerStyle() { - if (!container) { - return true; - } - if (container !== viewport) { - viewport.css('height', window.getComputedStyle(container[0]).height); + _createClass(ElementRoutines, [{ + key: 'hideElement', + value: function hideElement(wrapper) { + wrapper.element.addClass(hideClassToken); + } + }, { + key: 'showElement', + value: function showElement(wrapper) { + wrapper.element.removeClass(hideClassToken); + } + }, { + key: 'insertElement', + value: function insertElement(newElement, previousElement) { + previousElement.after(newElement); + 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); } - return viewport.height() > 0; - }, - 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.element); - }, - insertElementAnimated: function insertElementAnimated(e, sibling) { - return elementRoutines.insertElementAnimated(e, sibling || topPadding.element); - }, - 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 (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]; } - if (overage > 0) { - buffer.eof = false; - buffer.remove(buffer.length - overage, buffer.length); - buffer.next -= overage; - viewport.adjustPaddings(); + // 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); } - }, - 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 (this.isAngularVersionLessThen1_3) { + var deferred = this.$q.defer(); + this.$animate.leave(wrapper.element, function () { + wrapper.scope.$destroy(); + return deferred.resolve(); + }); - 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; - } - }, - adjustPaddings: function adjustPaddings() { - if (!buffer.length) { - return; + return [deferred.promise]; } - // precise heights calculation based on items that are in buffer or that were in buffer once - var visibleItemsHeight = buffer.reduce(function (summ, item) { - return summ + item.element.outerHeight(true); - }, 0); + return [this.$animate.leave(wrapper.element).then(function () { + return wrapper.scope.$destroy(); + })]; + } + }]); - var topPaddingHeight = 0, - topCount = 0; - topPadding.cache.forEach(function (item) { - if (item.index < buffer.first) { - topPaddingHeight += item.height; - topCount++; - } - }); + return ElementRoutines; +}(); - var bottomPaddingHeight = 0, - bottomCount = 0; - bottomPadding.cache.forEach(function (item) { - if (item.index >= buffer.next) { - bottomPaddingHeight += item.height; - bottomCount++; - } - }); +exports.default = ElementRoutines; - var totalHeight = visibleItemsHeight + topPaddingHeight + bottomPaddingHeight; - var averageItemHeight = totalHeight / (topCount + bottomCount + buffer.length); +/***/ }), +/* 3 */ +/***/ (function(module, exports, __webpack_require__) { - // 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; +"use strict"; - // paddings combine adjustment - topPadding.height(topPaddingHeight + topPaddingHeightAdd); - bottomPadding.height(bottomPaddingHeight + bottomPaddingHeightAdd); + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = ScrollBuffer; +function ScrollBuffer(elementRoutines, bufferSize, startIndex) { + var buffer = Object.create(Array.prototype); + + Object.assign(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; }, - onAfterMinIndexSet: function onAfterMinIndexSet(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); - while ((diff -= viewport.scrollTop()) > 0) { - bottomPadding.height(bottomPadding.height() + diff); - viewport.scrollTop(viewport.scrollTop() + diff); + 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, isTop) { + var wrapper = { + item: item + }; + + if (operation % 1 === 0) { + // it is an insert + wrapper.op = 'insert'; + buffer.splice(operation, 0, wrapper); + if (isTop) { + buffer.first--; + } else { + buffer.next++; + } + } else { + wrapper.op = operation; + switch (operation) { + case 'append': + buffer.push(wrapper); + break; + case 'prepend': + buffer.unshift(wrapper); + break; } } }, - onAfterPrepend: function onAfterPrepend(updates) { - if (!updates.prepended.length) return; - var height = buffer.effectiveHeight(updates.prepended); - var paddingHeight = topPadding.height() - height; - if (paddingHeight >= 0) { - topPadding.height(paddingHeight); + + + // removes elements from buffer + remove: function remove(arg1, arg2) { + if (Number.isInteger(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); + if (arg1._op === 'isTop' && buffer.first === this.getAbsMinIndex()) { + this.incrementMinIndex(); } else { - topPadding.height(0); - viewport.scrollTop(viewport.scrollTop() - paddingHeight); + this.decrementMaxIndex(); + } + if (arg1._op === 'isTop') { + buffer.first++; + } else { + buffer.next--; + } + if (!buffer.length) { + buffer.first = 1; + buffer.next = 1; } + + return elementRoutines.removeElementAnimated(arg1); }, - resetTopPadding: function resetTopPadding() { - topPadding.height(0); - topPadding.cache.clear(); + incrementMinIndex: function incrementMinIndex() { + if (buffer.minIndexUser !== null) { + if (buffer.minIndex > buffer.minIndexUser) { + buffer.minIndexUser++; + return; + } + if (buffer.minIndex === buffer.minIndexUser) { + buffer.minIndexUser++; + } + } + buffer.minIndex++; }, - resetBottomPadding: function resetBottomPadding() { - bottomPadding.height(0); - bottomPadding.cache.clear(); + decrementMaxIndex: function decrementMaxIndex() { + if (buffer.maxIndexUser !== null && buffer.maxIndex <= buffer.maxIndexUser) { + buffer.maxIndexUser--; + } + buffer.maxIndex--; }, - removeCacheItem: function removeCacheItem(item, isTop) { - topPadding.cache.remove(item, isTop); - bottomPadding.cache.remove(item, isTop); + getAbsMinIndex: function getAbsMinIndex() { + if (buffer.minIndexUser !== null) { + return Math.min(buffer.minIndexUser, buffer.minIndex); + } + return buffer.minIndex; }, - removeItem: function removeItem(item) { - this.removeCacheItem(item); - return buffer.remove(item); + getAbsMaxIndex: function getAbsMaxIndex() { + if (buffer.maxIndexUser !== null) { + return Math.max(buffer.maxIndexUser, buffer.maxIndex); + } + return buffer.maxIndex; + }, + effectiveHeight: function effectiveHeight(elements) { + if (!elements.length) { + return 0; + } + var top = Number.MAX_VALUE; + var bottom = Number.NEGATIVE_INFINITY; + 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 viewport; + buffer.reset(startIndex); + + return buffer; } /***/ }), -/* 5 */ +/* 4 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -1133,648 +1191,586 @@ function Viewport(elementRoutines, buffer, element, viewportController, $rootSco Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = Viewport; -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; }; }(); +var _padding = __webpack_require__(5); -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +var _padding2 = _interopRequireDefault(_padding); -// Can't just extend the Array, due to Babel does not support built-in classes extending -// This solution was taken from https://stackoverflow.com/questions/46897414/es6-class-extends-array-workaround-for-es5-babel-transpile -var CacheProto = function () { - function CacheProto() { - _classCallCheck(this, CacheProto); - } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - _createClass(CacheProto, [{ - key: 'add', - value: function add(item) { - for (var i = this.length - 1; i >= 0; i--) { - if (this[i].index === item.scope.$index) { - this[i].height = item.element.outerHeight(); - return; - } - } - this.push({ - index: item.scope.$index, - height: item.element.outerHeight() - }); - this.sort(function (a, b) { - return a.index < b.index ? -1 : a.index > b.index ? 1 : 0; - }); - } - }, { - key: 'remove', - value: function remove(argument, _isTop) { - var index = argument % 1 === 0 ? argument : argument.scope.$index; - var isTop = argument % 1 === 0 ? _isTop : argument._op === 'isTop'; - for (var i = this.length - 1; i >= 0; i--) { - if (this[i].index === index) { - this.splice(i, 1); - break; - } - } - if (!isTop) { - for (var _i = this.length - 1; _i >= 0; _i--) { - if (this[_i].index > index) { - this[_i].index--; - } - } - } - } - }, { - key: 'clear', - value: function clear() { - this.length = 0; - } - }]); - - return CacheProto; -}(); - -function Cache() { - var instance = []; - instance.push.apply(instance, arguments); - Object.setPrototypeOf(instance, Cache.prototype); - return instance; -} -Cache.prototype = Object.create(Array.prototype); -Object.getOwnPropertyNames(CacheProto.prototype).forEach(function (methodName) { - return Cache.prototype[methodName] = CacheProto.prototype[methodName]; -}); - -function generateElement(template) { - if (template.nodeType !== Node.ELEMENT_NODE) { - throw new Error('ui-scroll directive requires an Element node for templating the view'); - } - var element = 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('
'); - element = table.find('tr'); - break; - case 'li': - element = angular.element('
  • '); - break; - default: - element = angular.element('
    '); - } - return element; -} +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; -var Padding = function () { - function Padding(template) { - _classCallCheck(this, Padding); + viewport.css({ + 'overflow-anchor': 'none', + 'overflow-y': 'auto', + 'display': 'block' + }); - this.element = generateElement(template); - this.cache = new Cache(); + function bufferPadding() { + return viewport.outerHeight() * padding; // some extra space to initiate preload } - _createClass(Padding, [{ - key: 'height', - value: function height() { - return this.element.height.apply(this.element, arguments); - } - }]); - - return Padding; -}(); - -exports.default = Padding; - -/***/ }), -/* 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', '$interval', '$q', '$parse', function (console, $injector, $rootScope, $timeout, $interval, $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 MAX_VIEWPORT_DELAY = 500; - var VIEWPORT_POLLING_INTERVAL = 50; - - 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, startIndex); - var viewport = new _viewport2.default(elementRoutines, buffer, element, viewportController, $rootScope, padding); - var adapter = new _adapter2.default($scope, $parse, $attr, viewport, buffer, doAdjust, reload); - - if (viewportController) { - viewportController.adapter = adapter; - } - - var isDatasourceValid = function isDatasourceValid() { - return Object.prototype.toString.call(datasource) === '[object Object]' && typeof datasource.get === 'function'; - }; - - 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'); + Object.assign(viewport, { + getScope: function getScope() { + return scope; + }, + createPaddingElements: function createPaddingElements(template) { + topPadding = new _padding2.default(template); + bottomPadding = new _padding2.default(template); + element.before(topPadding.element); + element.after(bottomPadding.element); + topPadding.height(0); + bottomPadding.height(0); + }, + applyContainerStyle: function applyContainerStyle() { + if (!container) { + return true; } - } - - var onRenderHandlers = []; - function onRenderHandlersRunner() { - onRenderHandlers.forEach(function (handler) { - return handler.run(); - }); - onRenderHandlers = []; - } - function persistDatasourceIndex(datasource, propName) { - var getter = void 0; - // need to postpone min/maxIndexUser processing if the view is empty - if (Number.isInteger(datasource[propName])) { - getter = datasource[propName]; - if (Number.isInteger(getter)) { - onRenderHandlers = onRenderHandlers.filter(function (handler) { - return handler.id !== propName; - }); - onRenderHandlers.push({ - id: propName, - run: function run() { - return datasource[propName] = getter; - } - }); + if (container !== viewport) { + viewport.css('height', window.getComputedStyle(container[0]).height); + } + return viewport.height() > 0; + }, + 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.element); + }, + insertElementAnimated: function insertElementAnimated(e, sibling) { + return elementRoutines.insertElementAnimated(e, sibling || topPadding.element); + }, + 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++; } - } - function defineDatasourceIndex(datasource, propName, propUserName) { - var descriptor = Object.getOwnPropertyDescriptor(datasource, propName); - if (descriptor && (descriptor.set || descriptor.get)) { - return; + if (overage > 0) { + buffer.eof = false; + buffer.remove(buffer.length - overage, buffer.length); + buffer.next -= overage; + viewport.adjustPaddings(); } - var getter = void 0; - persistDatasourceIndex(datasource, propName); - Object.defineProperty(datasource, propName, { - set: function set(value) { - getter = value; - if (pending.length && !buffer.length) { - persistDatasourceIndex(datasource, propName); - return; - } - buffer[propUserName] = value; - var topPaddingHeightOld = viewport.topDataPos(); - viewport.adjustPaddings(); - if (propName === 'minIndex') { - viewport.onAfterMinIndexSet(topPaddingHeightOld); - } - }, - get: function get() { - return getter; - } - }); - } - - defineDatasourceIndex(datasource, 'minIndex', 'minIndexUser'); - defineDatasourceIndex(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); - }; + }, + 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(); - var initialize = function initialize() { - var tryCount = 0; - if (!viewport.applyContainerStyle()) { - var timer = $interval(function () { - tryCount++; - if (viewport.applyContainerStyle()) { - $interval.cancel(timer); - doAdjust(); - } - if (tryCount * VIEWPORT_POLLING_INTERVAL >= MAX_VIEWPORT_DELAY) { - $interval.cancel(timer); - throw Error('ui-scroll directive requires a viewport with non-zero height in ' + MAX_VIEWPORT_DELAY + 'ms'); - } - }, VIEWPORT_POLLING_INTERVAL); - } else { - doAdjust(); + 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++; } - }; - - /** - * 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); - - initialize(); - /* Private function definitions */ + 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; + } + }, + adjustPaddings: function adjustPaddings() { + if (!buffer.length) { + return; + } - function isInvalid(rid) { - return rid && rid !== ridActual || $scope.$$destroyed; - } + // precise heights calculation based on items that are in buffer or that were in buffer once + var visibleItemsHeight = buffer.reduce(function (summ, item) { + return summ + item.element.outerHeight(true); + }, 0); - function bindEvents() { - viewport.bind('resize', resizeAndScrollHandler); - viewport.bind('scroll', resizeAndScrollHandler); - } + var topPaddingHeight = 0, + topCount = 0; + topPadding.cache.forEach(function (item) { + if (item.index < buffer.first) { + topPaddingHeight += item.height; + topCount++; + } + }); - function unbindEvents() { - viewport.unbind('resize', resizeAndScrollHandler); - viewport.unbind('scroll', resizeAndScrollHandler); - } + var bottomPaddingHeight = 0, + bottomCount = 0; + bottomPadding.cache.forEach(function (item) { + if (item.index >= buffer.next) { + bottomPaddingHeight += item.height; + bottomCount++; + } + }); - function reload() { - viewport.resetTopPadding(); - viewport.resetBottomPadding(); - if (arguments.length) { - startIndex = arguments[0]; - } - buffer.reset(startIndex); - persistDatasourceIndex(datasource, 'minIndex'); - persistDatasourceIndex(datasource, 'maxIndex'); - doAdjust(); - } + var totalHeight = visibleItemsHeight + topPaddingHeight + bottomPaddingHeight; + var averageItemHeight = totalHeight / (topCount + bottomCount + buffer.length); - function isElementVisible(wrapper) { - return wrapper.element.height() && wrapper.element[0].offsetParent; - } + // 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; - function visibilityWatcher(wrapper) { - if (isElementVisible(wrapper)) { - buffer.forEach(function (item) { - if (typeof item.unregisterVisibilityWatcher === 'function') { - item.unregisterVisibilityWatcher(); - delete item.unregisterVisibilityWatcher; - } - }); - if (!pending.length) { - $timeout(function () { - return doAdjust(); - }); + // paddings combine adjustment + topPadding.height(topPaddingHeight + topPaddingHeightAdd); + bottomPadding.height(bottomPaddingHeight + bottomPaddingHeightAdd); + }, + onAfterMinIndexSet: function onAfterMinIndexSet(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); + while ((diff -= viewport.scrollTop()) > 0) { + bottomPadding.height(bottomPadding.height() + diff); + viewport.scrollTop(viewport.scrollTop() + diff); } } - } - - function insertWrapperContent(wrapper, insertAfter) { - createElement(wrapper, insertAfter, viewport.insertElement); - if (!isElementVisible(wrapper)) { - wrapper.unregisterVisibilityWatcher = wrapper.scope.$watch(function () { - return visibilityWatcher(wrapper); - }); - } - elementRoutines.hideElement(wrapper); // 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 - }; - } + }, + onAfterPrepend: function onAfterPrepend(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); } - return promises; + }, + resetTopPadding: function resetTopPadding() { + topPadding.height(0); + topPadding.cache.clear(); + }, + resetBottomPadding: function resetBottomPadding() { + bottomPadding.height(0); + bottomPadding.cache.clear(); + }, + removeCacheItem: function removeCacheItem(item, isTop) { + topPadding.cache.remove(item, isTop); + bottomPadding.cache.remove(item, isTop); + }, + removeItem: function removeItem(item) { + this.removeCacheItem(item); + return buffer.remove(item); } + }); - function updateDOM() { - var promises = []; - var toBePrepended = []; - var toBeRemoved = []; - var inserted = []; + return viewport; +} - 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); - } - }); +/***/ }), +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { - toBeRemoved.forEach(function (wrapper) { - return promises = promises.concat(viewport.removeItem(wrapper)); - }); +"use strict"; - if (toBePrepended.length) toBePrepended.forEach(function (wrapper) { - insertWrapperContent(wrapper); - wrapper.op = 'none'; - }); - buffer.forEach(function (item, i) { - return item.scope.$index = buffer.first + i; - }); +Object.defineProperty(exports, "__esModule", { + value: true +}); - return { - prepended: toBePrepended, - removed: toBeRemoved, - inserted: inserted, - animated: promises - }; - } +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 updatePaddings(rid, updates) { - // schedule another doAdjust after animation completion - if (updates.animated.length) { - $q.all(updates.animated).then(function () { - viewport.adjustPaddings(); - doAdjust(rid); - }); - } else { - viewport.adjustPaddings(); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +// Can't just extend the Array, due to Babel does not support built-in classes extending +// This solution was taken from https://stackoverflow.com/questions/46897414/es6-class-extends-array-workaround-for-es5-babel-transpile +var CacheProto = function () { + function CacheProto() { + _classCallCheck(this, CacheProto); + } + + _createClass(CacheProto, [{ + key: 'add', + value: function add(item) { + for (var i = this.length - 1; i >= 0; i--) { + if (this[i].index === item.scope.$index) { + this[i].height = item.element.outerHeight(); + return; + } } + this.push({ + index: item.scope.$index, + height: item.element.outerHeight() + }); + this.sort(function (a, b) { + return a.index < b.index ? -1 : a.index > b.index ? 1 : 0; + }); } - - 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) { - adapter.loading(true); - fetch(rid); - } + }, { + key: 'remove', + value: function remove(argument, _isTop) { + var index = argument % 1 === 0 ? argument : argument.scope.$index; + var isTop = argument % 1 === 0 ? _isTop : argument._op === 'isTop'; + for (var i = this.length - 1; i >= 0; i--) { + if (this[i].index === index) { + this.splice(i, 1); + break; } - } 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) { - adapter.loading(true); - fetch(rid); + } + if (!isTop) { + for (var _i = this.length - 1; _i >= 0; _i--) { + if (this[_i].index > index) { + this[_i].index--; } } } } + }, { + key: 'clear', + value: function clear() { + this.length = 0; + } + }]); - function processUpdates() { - var updates = updateDOM(); + return CacheProto; +}(); - // We need the item bindings to be processed before we can do adjustments - !$scope.$$phase && !$rootScope.$$phase && $scope.$digest(); +function Cache() { + var instance = []; + instance.push.apply(instance, arguments); + Object.setPrototypeOf(instance, Cache.prototype); + return instance; +} +Cache.prototype = Object.create(Array.prototype); +Object.getOwnPropertyNames(CacheProto.prototype).forEach(function (methodName) { + return Cache.prototype[methodName] = CacheProto.prototype[methodName]; +}); - updates.inserted.forEach(function (w) { - return elementRoutines.showElement(w); - }); - updates.prepended.forEach(function (w) { - return elementRoutines.showElement(w); - }); - return updates; +function generateElement(template) { + if (template.nodeType !== Node.ELEMENT_NODE) { + throw new Error('ui-scroll directive requires an Element node for templating the view'); + } + var element = 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('
    '); + element = table.find('tr'); + break; + case 'li': + element = angular.element('
  • '); + break; + default: + element = angular.element('
    '); + } + return element; +} + +var Padding = function () { + function Padding(template) { + _classCallCheck(this, Padding); + + this.element = generateElement(template); + this.cache = new Cache(); + } + + _createClass(Padding, [{ + key: 'height', + value: function height() { + return this.element.height.apply(this.element, arguments); } + }]); - function doAdjust(rid) { - if (!rid) { - // dismiss pending requests - pending = []; - rid = ++ridActual; - } + return Padding; +}(); - var updates = processUpdates(); +exports.default = Padding; - if (isInvalid(rid)) { - return; - } +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { - updatePaddings(rid, updates); - enqueueFetch(rid); +"use strict"; - if (!pending.length) { - adapter.calculateProperties(); - } - } - function doAdjustAfterFetch(rid) { - var updates = processUpdates(); +Object.defineProperty(exports, "__esModule", { + value: true +}); - viewport.onAfterPrepend(updates); +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 Adapter = function () { + function Adapter($scope, $parse, $attr, viewport, buffer, doAdjust, reload) { + _classCallCheck(this, Adapter); + + this.$parse = $parse; + this.$attr = $attr; + this.viewport = viewport; + this.buffer = buffer; + + this.doAdjust = doAdjust; + 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); + this.generatePublicContext(); + } - if (isInvalid(rid)) { + _createClass(Adapter, [{ + key: 'assignAdapter', + value: function assignAdapter(adapterAttr) { + if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\s+|\s+$/gm, ''))) { return; } + var adapterOnScope = void 0; - updatePaddings(rid, updates); - onRenderHandlersRunner(); - enqueueFetch(rid, updates); - pending.shift(); - - if (pending.length) fetch(rid);else { - adapter.loading(false); - bindEvents(); - adapter.calculateProperties(); + try { + this.$parse(adapterAttr).assign(this.startScope, {}); + adapterOnScope = this.$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; } + + Object.assign(adapterOnScope, this.publicContext); + this.publicContext = adapterOnScope; } + }, { + key: 'generatePublicContext', + value: function generatePublicContext() { + var _this = this; - function fetch(rid) { - if (pending[0]) { - // scrolling down - if (buffer.length && !viewport.shouldLoadBottom()) { - doAdjustAfterFetch(rid); - } else { - fetchNext(function (result) { - if (isInvalid(rid)) { - return; - } + // 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); + } - if (result.length < bufferSize) { - buffer.eof = true; - } + // these read-only props will be accessible out of ui-scroll via user defined adapter + var publicProps = ['isLoading', 'topVisible', 'topVisibleElement', 'topVisibleScope', 'bottomVisible', 'bottomVisibleElement', 'bottomVisibleScope']; - if (result.length > 0) { - viewport.clipTop(); - buffer.append(result); + var _loop = function _loop(_i) { + var property = void 0, + attr = _this.$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) { + _this.$parse(attr).assign(_this.startScope, value); } + } + }); + }; - doAdjustAfterFetch(rid); - }); + 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.doAdjust() : 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: 'append', + value: function append(newItems) { + this.buffer.append(newItems); + this.doAdjust(); + this.viewport.clipTop(); + this.viewport.clipBottom(); + } + }, { + key: 'prepend', + value: function prepend(newItems) { + this.buffer.prepend(newItems); + this.doAdjust(); + this.viewport.clipTop(); + this.viewport.clipBottom(); + } + }, { + key: 'applyUpdates', + value: function applyUpdates(arg1, arg2) { + if (typeof arg1 === 'function') { + this.applyUpdatesFunc(arg1); } else { - // scrolling up - if (buffer.length && !viewport.shouldLoadTop()) { - doAdjustAfterFetch(rid); - } else { - fetchPrevious(function (result) { - if (isInvalid(rid)) { - return; - } + this.applyUpdatesIndex(arg1, arg2); + } + this.doAdjust(); + } + }, { + key: 'applyUpdatesFunc', + value: function applyUpdatesFunc(cb) { + var _this2 = this; - if (result.length < bufferSize) { - buffer.bof = true; - // log 'bof is reached' - } + 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, cb(wrapper.item, wrapper.scope, wrapper.element)); + }); + } + }, { + key: 'applyUpdatesIndex', + value: function applyUpdatesIndex(index, newItems) { + if (index % 1 !== 0) { + throw new Error('applyUpdates - ' + index + ' is not a valid index (should be an integer)'); + } + var _index = index - this.buffer.first; - if (result.length > 0) { - if (buffer.length) { - viewport.clipBottom(); - } - buffer.prepend(result); + // apply updates only within buffer + if (_index >= 0 && _index < this.buffer.length) { + this.applyUpdate(this.buffer[_index], newItems); + } + // out-of-buffer case: deletion may affect Paddings + else if (index >= this.buffer.getAbsMinIndex() && index <= this.buffer.getAbsMaxIndex()) { + if (Array.isArray(newItems) && !newItems.length) { + this.viewport.removeCacheItem(index, index === this.buffer.minIndex); + if (index === this.buffer.getAbsMinIndex()) { + this.buffer.incrementMinIndex(); + } else { + this.buffer.decrementMaxIndex(); } + } + } + } + }, { + key: 'applyUpdate', + value: function applyUpdate(wrapper, newItems) { + var _this3 = this; - doAdjustAfterFetch(rid); - }); + if (!Array.isArray(newItems)) { + return; + } + var position = this.buffer.indexOf(wrapper); + if (!newItems.reverse().some(function (newItem) { + return newItem === wrapper.item; + })) { + wrapper.op = 'remove'; + if (position === 0 && !newItems.length) { + wrapper._op = 'isTop'; // to catch "first" edge case on remove } } + newItems.forEach(function (newItem) { + if (newItem === wrapper.item) { + position--; + } else { + // 3 parameter (isTop) is to catch "first" edge case on insert + _this3.buffer.insert(position + 1, newItem, position === -1); + } + }); } + }, { + key: 'calculateProperties', + value: function calculateProperties() { + var rowTop = null, + topHeight = 0; + var topDone = false, + bottomDone = false; + var length = this.buffer.length; - function resizeAndScrollHandler() { - if (!$rootScope.$$phase && !adapter.isLoading && !adapter.disabled) { + for (var i = 0; i < length; i++) { + var item = this.buffer[i]; + var itemTop = item.element.offset().top; - enqueueFetch(ridActual); + if (rowTop !== itemTop) { + // a new row condition + var itemHeight = item.element.outerHeight(true); + var top = this.viewport.topDataPos() + topHeight + itemHeight; - if (pending.length) { - unbindEvents(); - } else { - adapter.calculateProperties(); - !$scope.$$phase && $scope.$digest(); + 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; } - } - } - - function wheelHandler(event) { - if (!adapter.disabled) { - var scrollTop = viewport[0].scrollTop; - var yMax = viewport[0].scrollHeight - viewport[0].clientHeight; + rowTop = itemTop; - if (scrollTop === 0 && !buffer.bof || scrollTop === yMax && !buffer.eof) { - event.preventDefault(); + if (topDone && bottomDone) { + break; } } } - } -}]); + }]); + + return Adapter; +}(); + +exports.default = Adapter; /***/ }) /******/ ]); diff --git a/dist/ui-scroll.js.map b/dist/ui-scroll.js.map index ce023d95..617f8a6c 100644 --- a/dist/ui-scroll.js.map +++ b/dist/ui-scroll.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap af02e5af19248c8e95e9","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":["Adapter","$scope","$parse","$attr","viewport","buffer","doAdjust","reload","isLoading","disabled","viewportScope","getScope","startScope","$parent","publicContext","assignAdapter","adapter","generatePublicContext","adapterAttr","replace","adapterOnScope","assign","error","message","Object","publicMethods","i","length","bind","publicProps","property","attr","defineProperty","get","set","value","bof","eof","newItems","append","clipTop","clipBottom","prepend","arg1","arg2","applyUpdatesFunc","applyUpdatesIndex","cb","slice","forEach","wrapper","applyUpdate","item","scope","element","index","Error","_index","first","getAbsMinIndex","getAbsMaxIndex","Array","isArray","removeCacheItem","minIndex","incrementMinIndex","decrementMaxIndex","position","indexOf","reverse","some","newItem","op","_op","insert","rowTop","topHeight","topDone","bottomDone","itemTop","offset","top","itemHeight","outerHeight","topDataPos","topVisiblePos","bottomVisiblePos","isEOF","ScrollBuffer","elementRoutines","bufferSize","startIndex","create","prototype","size","reset","remove","next","maxIndex","minIndexUser","maxIndexUser","items","Math","max","min","operation","isTop","splice","push","unshift","Number","isInteger","removeElement","removeElementAnimated","effectiveHeight","elements","MAX_VALUE","bottom","NEGATIVE_INFINITY","offsetParent","hideClassToken","addCSSRule","sheet","selector","rules","insertRule","addRule","ElementRoutines","$injector","$q","$animate","has","isAngularVersionLessThen1_3","angular","version","major","minor","document","styleSheets","addClass","removeClass","newElement","previousElement","after","$destroy","insertElement","deferred","defer","enter","resolve","promise","leave","then","JQLiteExtras","convertToPx","css","getStyle","isWindow","name","self","elem","nodeType","style","call","obj","location","alert","setInterval","scrollTo","direction","left","method","prop","preserve","isValueDefined","documentElement","window","getComputedStyle","parseFloat","currentStyle","result","rs","rsLeft","core_pnum","source","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","parent","ref","contents","outerHTML","option","outerWidth","docElem","win","box","doc","ownerDocument","arguments","undefined","getBoundingClientRect","defaultView","parentWindow","pageYOffset","scrollTop","clientTop","pageXOffset","scrollLeft","clientLeft","key","Viewport","viewportController","$rootScope","topPadding","bottomPadding","container","bufferPadding","createPaddingElements","template","applyContainerStyle","bottomDataPos","scrollHeight","e","sibling","insertElementAnimated","shouldLoadBottom","overage","overageHeight","emptySpaceHeight","cache","add","adjustPaddings","shouldLoadTop","visibleItemsHeight","reduce","summ","topPaddingHeight","topCount","bottomPaddingHeight","bottomCount","totalHeight","averageItemHeight","adjustTopPadding","adjustBottomPadding","topPaddingHeightAdd","bottomPaddingHeightAdd","onAfterMinIndexSet","topPaddingHeightOld","diff","onAfterPrepend","updates","prepended","paddingHeight","resetTopPadding","clear","resetBottomPadding","removeItem","CacheProto","$index","sort","a","b","argument","_isTop","Cache","instance","apply","setPrototypeOf","getOwnPropertyNames","methodName","generateElement","Node","ELEMENT_NODE","tagName","toLowerCase","table","find","Padding","module","service","run","jqLiteExtras","jQuery","registerFor","directive","restrict","controller","child","console","$timeout","$interval","require","transclude","priority","terminal","link","controllers","linker","match","uiScroll","parseNumericAttr","defaultValue","isNaN","BUFFER_MIN","BUFFER_DEFAULT","PADDING_MIN","PADDING_DEFAULT","MAX_VIEWPORT_DELAY","VIEWPORT_POLLING_INTERVAL","datasource","itemName","datasourceName","ridActual","pending","isDatasourceValid","toString","onRenderHandlers","onRenderHandlersRunner","handler","persistDatasourceIndex","propName","getter","filter","id","defineDatasourceIndex","propUserName","descriptor","getOwnPropertyDescriptor","fetchNext","success","count","fetchPrevious","initialize","tryCount","timer","cancel","clone","$on","unbindEvents","unbind","wheelHandler","isInvalid","rid","$$destroyed","bindEvents","resizeAndScrollHandler","isElementVisible","visibilityWatcher","unregisterVisibilityWatcher","insertWrapperContent","insertAfter","createElement","$watch","hideElement","promises","transform","tdInitializer","uiScrollTdInitializer","linking","onLink","updateDOM","toBePrepended","toBeRemoved","inserted","concat","removed","animated","updatePaddings","all","enqueueFetch","loading","fetch","processUpdates","$$phase","$digest","showElement","w","calculateProperties","doAdjustAfterFetch","shift","event","yMax","clientHeight","preventDefault"],"mappings":"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","file":"ui-scroll.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap af02e5af19248c8e95e9","class Adapter {\r\n\r\n constructor($scope, $parse, $attr, viewport, buffer, doAdjust, reload) {\r\n this.$parse = $parse;\r\n this.$attr = $attr;\r\n this.viewport = viewport;\r\n this.buffer = buffer;\r\n\r\n this.doAdjust = doAdjust;\r\n this.reload = reload;\r\n\r\n this.isLoading = false;\r\n this.disabled = false;\r\n\r\n const viewportScope = viewport.getScope();\r\n this.startScope = viewportScope.$parent ? viewportScope : $scope;\r\n\r\n this.publicContext = {};\r\n this.assignAdapter($attr.adapter);\r\n this.generatePublicContext();\r\n }\r\n\r\n assignAdapter(adapterAttr) {\r\n if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\\s+|\\s+$/gm, ''))) {\r\n return;\r\n }\r\n let adapterOnScope;\r\n\r\n try {\r\n this.$parse(adapterAttr).assign(this.startScope, {});\r\n adapterOnScope = this.$parse(adapterAttr)(this.startScope);\r\n }\r\n catch (error) {\r\n error.message = `Angular ui-scroll Adapter assignment exception.\\n` +\r\n `Can't parse \"${adapterAttr}\" expression.\\n` +\r\n error.message;\r\n throw error;\r\n }\r\n\r\n Object.assign(adapterOnScope, this.publicContext);\r\n this.publicContext = adapterOnScope;\r\n }\r\n\r\n generatePublicContext() {\r\n // these methods will be accessible out of ui-scroll via user defined adapter\r\n const publicMethods = ['reload', 'applyUpdates', 'append', 'prepend', 'isBOF', 'isEOF', 'isEmpty'];\r\n for (let i = publicMethods.length - 1; i >= 0; i--) {\r\n this.publicContext[publicMethods[i]] = this[publicMethods[i]].bind(this);\r\n }\r\n\r\n // these read-only props will be accessible out of ui-scroll via user defined adapter\r\n const publicProps = ['isLoading', 'topVisible', 'topVisibleElement', 'topVisibleScope', 'bottomVisible', 'bottomVisibleElement', 'bottomVisibleScope'];\r\n for (let i = publicProps.length - 1; i >= 0; i--) {\r\n let property, attr = this.$attr[publicProps[i]];\r\n Object.defineProperty(this, publicProps[i], {\r\n get: () => property,\r\n set: (value) => {\r\n property = value;\r\n this.publicContext[publicProps[i]] = value;\r\n if (attr) {\r\n this.$parse(attr).assign(this.startScope, value);\r\n }\r\n }\r\n });\r\n }\r\n\r\n // non-read-only public property\r\n Object.defineProperty(this.publicContext, 'disabled', {\r\n get: () => this.disabled,\r\n set: (value) => (!(this.disabled = value)) ? this.doAdjust() : null\r\n });\r\n }\r\n\r\n loading(value) {\r\n this.isLoading = value;\r\n }\r\n\r\n isBOF() {\r\n return this.buffer.bof;\r\n }\r\n\r\n isEOF() {\r\n return this.buffer.eof;\r\n }\r\n\r\n isEmpty() {\r\n return !this.buffer.length;\r\n }\r\n\r\n append(newItems) {\r\n this.buffer.append(newItems);\r\n this.doAdjust();\r\n this.viewport.clipTop();\r\n this.viewport.clipBottom();\r\n }\r\n\r\n prepend(newItems) {\r\n this.buffer.prepend(newItems);\r\n this.doAdjust();\r\n this.viewport.clipTop();\r\n this.viewport.clipBottom();\r\n }\r\n\r\n applyUpdates(arg1, arg2) {\r\n if (typeof arg1 === 'function') {\r\n this.applyUpdatesFunc(arg1);\r\n } else {\r\n this.applyUpdatesIndex(arg1, arg2);\r\n }\r\n this.doAdjust();\r\n }\r\n\r\n applyUpdatesFunc(cb) {\r\n this.buffer.slice(0).forEach((wrapper) => {\r\n // we need to do it on the buffer clone, because buffer content\r\n // may change as we iterate through\r\n this.applyUpdate(wrapper, cb(wrapper.item, wrapper.scope, wrapper.element));\r\n });\r\n }\r\n\r\n applyUpdatesIndex(index, newItems) {\r\n if (index % 1 !== 0) {\r\n throw new Error('applyUpdates - ' + index + ' is not a valid index (should be an integer)');\r\n }\r\n const _index = index - this.buffer.first;\r\n\r\n // apply updates only within buffer\r\n if (_index >= 0 && _index < this.buffer.length) {\r\n this.applyUpdate(this.buffer[_index], newItems);\r\n }\r\n // out-of-buffer case: deletion may affect Paddings\r\n else if(index >= this.buffer.getAbsMinIndex() && index <= this.buffer.getAbsMaxIndex()) {\r\n if(Array.isArray(newItems) && !newItems.length) {\r\n this.viewport.removeCacheItem(index, index === this.buffer.minIndex);\r\n if(index === this.buffer.getAbsMinIndex()) {\r\n this.buffer.incrementMinIndex();\r\n }\r\n else {\r\n this.buffer.decrementMaxIndex();\r\n }\r\n }\r\n }\r\n }\r\n\r\n applyUpdate(wrapper, newItems) {\r\n if (!Array.isArray(newItems)) {\r\n return;\r\n }\r\n let position = this.buffer.indexOf(wrapper);\r\n if (!newItems.reverse().some(newItem => newItem === wrapper.item)) {\r\n wrapper.op = 'remove';\r\n if(position === 0 && !newItems.length) {\r\n wrapper._op = 'isTop'; // to catch \"first\" edge case on remove\r\n }\r\n }\r\n newItems.forEach((newItem) => {\r\n if (newItem === wrapper.item) {\r\n position--;\r\n } else {\r\n // 3 parameter (isTop) is to catch \"first\" edge case on insert\r\n this.buffer.insert(position + 1, newItem, position === -1);\r\n }\r\n });\r\n }\r\n\r\n calculateProperties() {\r\n let rowTop = null, topHeight = 0;\r\n let topDone = false, bottomDone = false;\r\n const length = this.buffer.length;\r\n\r\n for (let i = 0; i < length; i++) {\r\n const item = this.buffer[i];\r\n const itemTop = item.element.offset().top;\r\n\r\n if (rowTop !== itemTop) { // a new row condition\r\n const itemHeight = item.element.outerHeight(true);\r\n const top = this.viewport.topDataPos() + topHeight + itemHeight;\r\n\r\n if (!topDone && top > this.viewport.topVisiblePos()) {\r\n topDone = true;\r\n this['topVisible'] = item.item;\r\n this['topVisibleElement'] = item.element;\r\n this['topVisibleScope'] = item.scope;\r\n }\r\n if (!bottomDone && (top >= this.viewport.bottomVisiblePos() || (i === length - 1 && this.isEOF()))) {\r\n bottomDone = true;\r\n this['bottomVisible'] = item.item;\r\n this['bottomVisibleElement'] = item.element;\r\n this['bottomVisibleScope'] = item.scope;\r\n }\r\n topHeight += itemHeight;\r\n }\r\n rowTop = itemTop;\r\n\r\n if (topDone && bottomDone) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n}\r\n\r\nexport default Adapter;\n\n\n// WEBPACK FOOTER //\n// ./src/modules/adapter.js","export default function ScrollBuffer(elementRoutines, bufferSize, startIndex) {\r\n const buffer = Object.create(Array.prototype);\r\n\r\n Object.assign(buffer, {\r\n size: bufferSize,\r\n\r\n reset(startIndex) {\r\n buffer.remove(0, buffer.length);\r\n buffer.eof = false;\r\n buffer.bof = false;\r\n buffer.first = startIndex;\r\n buffer.next = startIndex;\r\n buffer.minIndex = startIndex;\r\n buffer.maxIndex = startIndex;\r\n buffer.minIndexUser = null;\r\n buffer.maxIndexUser = null;\r\n },\r\n\r\n append(items) {\r\n items.forEach((item) => {\r\n ++buffer.next;\r\n buffer.insert('append', item);\r\n });\r\n buffer.maxIndex = buffer.eof ? buffer.next - 1 : Math.max(buffer.next - 1, buffer.maxIndex);\r\n },\r\n\r\n prepend(items) {\r\n items.reverse().forEach((item) => {\r\n --buffer.first;\r\n buffer.insert('prepend', item);\r\n });\r\n buffer.minIndex = buffer.bof ? buffer.minIndex = buffer.first : Math.min(buffer.first, buffer.minIndex);\r\n },\r\n\r\n /**\r\n * inserts wrapped element in the buffer\r\n * the first argument is either operation keyword (see below) or a number for operation 'insert'\r\n * for insert the number is the index for the buffer element the new one have to be inserted after\r\n * operations: 'append', 'prepend', 'insert', 'remove', 'update', 'none'\r\n */\r\n insert(operation, item, isTop) {\r\n const wrapper = {\r\n item: item\r\n };\r\n\r\n if (operation % 1 === 0) {// it is an insert\r\n wrapper.op = 'insert';\r\n buffer.splice(operation, 0, wrapper);\r\n if(isTop) {\r\n buffer.first--;\r\n }\r\n else {\r\n buffer.next++;\r\n }\r\n } else {\r\n wrapper.op = operation;\r\n switch (operation) {\r\n case 'append':\r\n buffer.push(wrapper);\r\n break;\r\n case 'prepend':\r\n buffer.unshift(wrapper);\r\n break;\r\n }\r\n }\r\n },\r\n\r\n // removes elements from buffer\r\n remove(arg1, arg2) {\r\n if (Number.isInteger(arg1)) {\r\n // removes items from arg1 (including) through arg2 (excluding)\r\n for (let i = arg1; i < arg2; i++) {\r\n elementRoutines.removeElement(buffer[i]);\r\n }\r\n return buffer.splice(arg1, arg2 - arg1);\r\n }\r\n // removes single item(wrapper) from the buffer\r\n buffer.splice(buffer.indexOf(arg1), 1);\r\n if(arg1._op === 'isTop' && buffer.first === this.getAbsMinIndex()) {\r\n this.incrementMinIndex();\r\n }\r\n else {\r\n this.decrementMaxIndex();\r\n }\r\n if(arg1._op === 'isTop') {\r\n buffer.first++;\r\n }\r\n else {\r\n buffer.next--;\r\n }\r\n if(!buffer.length) {\r\n buffer.first = 1;\r\n buffer.next = 1;\r\n }\r\n\r\n return elementRoutines.removeElementAnimated(arg1);\r\n },\r\n\r\n incrementMinIndex() {\r\n if(buffer.minIndexUser !== null) {\r\n if(buffer.minIndex > buffer.minIndexUser) {\r\n buffer.minIndexUser++;\r\n return;\r\n }\r\n if(buffer.minIndex === buffer.minIndexUser) {\r\n buffer.minIndexUser++;\r\n }\r\n }\r\n buffer.minIndex++;\r\n },\r\n\r\n decrementMaxIndex() {\r\n if(buffer.maxIndexUser !== null && buffer.maxIndex <= buffer.maxIndexUser) {\r\n buffer.maxIndexUser--;\r\n }\r\n buffer.maxIndex--;\r\n },\r\n\r\n getAbsMinIndex() {\r\n if(buffer.minIndexUser !== null) {\r\n return Math.min(buffer.minIndexUser, buffer.minIndex);\r\n }\r\n return buffer.minIndex;\r\n },\r\n\r\n getAbsMaxIndex() {\r\n if(buffer.maxIndexUser !== null) {\r\n return Math.max(buffer.maxIndexUser, buffer.maxIndex);\r\n }\r\n return buffer.maxIndex;\r\n },\r\n\r\n effectiveHeight(elements) {\r\n if (!elements.length) {\r\n return 0;\r\n }\r\n let top = Number.MAX_VALUE;\r\n let bottom = Number.NEGATIVE_INFINITY;\r\n elements.forEach((wrapper) => {\r\n if (wrapper.element[0].offsetParent) {\r\n // element style is not display:none\r\n top = Math.min(top, wrapper.element.offset().top);\r\n bottom = Math.max(bottom, wrapper.element.offset().top + wrapper.element.outerHeight(true));\r\n }\r\n });\r\n return Math.max(0, bottom - top);\r\n }\r\n\r\n });\r\n\r\n buffer.reset(startIndex);\r\n\r\n return buffer;\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/buffer.js","const hideClassToken = 'ng-ui-scroll-hide';\r\n\r\nfunction addCSSRule(sheet, selector, rules, index) {\r\n if('insertRule' in sheet) {\r\n sheet.insertRule(selector + '{' + rules + '}', index);\r\n }\r\n else if('addRule' in sheet) {\r\n sheet.addRule(selector, rules, index);\r\n }\r\n}\r\n\r\nexport default class ElementRoutines {\r\n\r\n constructor($injector, $q) {\r\n this.$animate = ($injector.has && $injector.has('$animate')) ? $injector.get('$animate') : null;\r\n this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3;\r\n this.$q = $q;\r\n addCSSRule(document.styleSheets[0], '.' + hideClassToken, 'display: none');\r\n }\r\n\r\n hideElement(wrapper) {\r\n wrapper.element.addClass(hideClassToken);\r\n }\r\n\r\n showElement(wrapper) {\r\n wrapper.element.removeClass(hideClassToken);\r\n }\r\n\r\n insertElement(newElement, previousElement) {\r\n previousElement.after(newElement);\r\n return [];\r\n }\r\n\r\n removeElement(wrapper) {\r\n wrapper.element.remove();\r\n wrapper.scope.$destroy();\r\n return [];\r\n }\r\n\r\n insertElementAnimated(newElement, previousElement) {\r\n if (!this.$animate) {\r\n return this.insertElement(newElement, previousElement);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n // no need for parent - previous element is never null\r\n this.$animate.enter(newElement, null, previousElement, () => deferred.resolve());\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n // no need for parent - previous element is never null\r\n return [this.$animate.enter(newElement, null, previousElement)];\r\n }\r\n\r\n removeElementAnimated(wrapper) {\r\n if (!this.$animate) {\r\n return this.removeElement(wrapper);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n this.$animate.leave(wrapper.element, () => {\r\n wrapper.scope.$destroy();\r\n return deferred.resolve();\r\n });\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n return [(this.$animate.leave(wrapper.element)).then(() => wrapper.scope.$destroy())];\r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/elementRoutines.js","/*!\r\n globals: angular, window\r\n List of used element methods available in JQuery but not in JQuery Lite\r\n element.before(elem)\r\n element.height()\r\n element.outerHeight(true)\r\n element.height(value) = only for Top/Bottom padding elements\r\n element.scrollTop()\r\n element.scrollTop(value)\r\n */\r\n\r\nexport default class JQLiteExtras {\r\n\r\n registerFor(element) {\r\n let convertToPx, css, getStyle, isWindow;\r\n // angular implementation blows up if elem is the window\r\n css = angular.element.prototype.css;\r\n\r\n element.prototype.css = function (name, value) {\r\n let self = this;\r\n let elem = self[0];\r\n if (!(!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style)) {\r\n return css.call(self, name, value);\r\n }\r\n };\r\n\r\n // as defined in angularjs v1.0.5\r\n isWindow = (obj) => obj && obj.document && obj.location && obj.alert && obj.setInterval;\r\n\r\n function scrollTo(self, direction, value) {\r\n let elem = self[0];\r\n let [method, prop, preserve] = {\r\n top: [\r\n 'scrollTop',\r\n 'pageYOffset',\r\n 'scrollLeft'\r\n ],\r\n left: [\r\n 'scrollLeft',\r\n 'pageXOffset',\r\n 'scrollTop'\r\n ]\r\n }[direction];\r\n\r\n const isValueDefined = typeof value !== 'undefined';\r\n if (isWindow(elem)) {\r\n if (isValueDefined) {\r\n return elem.scrollTo(self[preserve].call(self), value);\r\n }\r\n return (prop in elem) ? elem[prop] : elem.document.documentElement[method];\r\n } else {\r\n if (isValueDefined) {\r\n elem[method] = value;\r\n }\r\n return elem[method];\r\n }\r\n }\r\n\r\n if (window.getComputedStyle) {\r\n getStyle = (elem) => window.getComputedStyle(elem, null);\r\n convertToPx = (elem, value) => parseFloat(value);\r\n } else {\r\n getStyle = (elem) => elem.currentStyle;\r\n convertToPx = (elem, value) => {\r\n let left, result, rs, rsLeft, style;\r\n let core_pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\r\n let rnumnonpx = new RegExp('^(' + core_pnum + ')(?!px)[a-z%]+$', 'i');\r\n\r\n if (!rnumnonpx.test(value)) {\r\n return parseFloat(value);\r\n }\r\n\r\n // ported from JQuery\r\n style = elem.style;\r\n left = style.left;\r\n rs = elem.runtimeStyle;\r\n rsLeft = rs && rs.left;\r\n if (rs) {\r\n rs.left = style.left;\r\n }\r\n // put in the new values to get a computed style out\r\n style.left = value;\r\n result = style.pixelLeft;\r\n style.left = left;\r\n if (rsLeft) {\r\n rs.left = rsLeft;\r\n }\r\n return result;\r\n };\r\n }\r\n\r\n function getMeasurements(elem, measure) {\r\n let base, borderA, borderB, computedMarginA, computedMarginB, computedStyle, dirA, dirB, marginA, marginB, paddingA, paddingB;\r\n\r\n if (isWindow(elem)) {\r\n base = document.documentElement[{height: 'clientHeight', width: 'clientWidth'}[measure]];\r\n\r\n return {\r\n base: base,\r\n padding: 0,\r\n border: 0,\r\n margin: 0\r\n };\r\n }\r\n\r\n // Start with offset property\r\n [\r\n base,\r\n dirA,\r\n dirB\r\n ] = {\r\n width: [\r\n elem.offsetWidth,\r\n 'Left',\r\n 'Right'\r\n ],\r\n height: [\r\n elem.offsetHeight,\r\n 'Top',\r\n 'Bottom'\r\n ]\r\n }[measure];\r\n\r\n computedStyle = getStyle(elem);\r\n paddingA = convertToPx(elem, computedStyle['padding' + dirA]) || 0;\r\n paddingB = convertToPx(elem, computedStyle['padding' + dirB]) || 0;\r\n borderA = convertToPx(elem, computedStyle['border' + dirA + 'Width']) || 0;\r\n borderB = convertToPx(elem, computedStyle['border' + dirB + 'Width']) || 0;\r\n computedMarginA = computedStyle['margin' + dirA];\r\n computedMarginB = computedStyle['margin' + dirB];\r\n\r\n // I do not care for width for now, so this hack is irrelevant\r\n // if ( !supportsPercentMargin )\r\n // computedMarginA = hackPercentMargin( elem, computedStyle, computedMarginA )\r\n // computedMarginB = hackPercentMargin( elem, computedStyle, computedMarginB )\r\n marginA = convertToPx(elem, computedMarginA) || 0;\r\n marginB = convertToPx(elem, computedMarginB) || 0;\r\n\r\n return {\r\n base: base,\r\n padding: paddingA + paddingB,\r\n border: borderA + borderB,\r\n margin: marginA + marginB\r\n };\r\n }\r\n\r\n function getWidthHeight(elem, direction, measure) {\r\n let computedStyle, result;\r\n\r\n let measurements = getMeasurements(elem, direction);\r\n\r\n if (measurements.base > 0) {\r\n return {\r\n base: measurements.base - measurements.padding - measurements.border,\r\n outer: measurements.base,\r\n outerfull: measurements.base + measurements.margin\r\n }[measure];\r\n }\r\n\r\n // Fall back to computed then uncomputed css if necessary\r\n computedStyle = getStyle(elem);\r\n result = computedStyle[direction];\r\n\r\n if (result < 0 || result === null) {\r\n result = elem.style[direction] || 0;\r\n }\r\n\r\n // Normalize \"\", auto, and prepare for extra\r\n result = parseFloat(result) || 0;\r\n\r\n return {\r\n base: result - measurements.padding - measurements.border,\r\n outer: result,\r\n outerfull: result + measurements.padding + measurements.border + measurements.margin\r\n }[measure];\r\n }\r\n\r\n // define missing methods\r\n return angular.forEach({\r\n before(newElem) {\r\n var children, elem, i, j, parent, ref, self;\r\n self = this;\r\n elem = self[0];\r\n parent = self.parent();\r\n children = parent.contents();\r\n if (children[0] === elem) {\r\n return parent.prepend(newElem);\r\n } else {\r\n for (i = j = 1, ref = children.length - 1; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {\r\n if (children[i] === elem) {\r\n angular.element(children[i - 1]).after(newElem);\r\n return;\r\n }\r\n }\r\n throw new Error('invalid DOM structure ' + elem.outerHTML);\r\n }\r\n },\r\n height (value){\r\n var self;\r\n self = this;\r\n if (typeof value !== 'undefined') {\r\n if (Number.isInteger(value)) {\r\n value = value + 'px';\r\n }\r\n return css.call(self, 'height', value);\r\n } else {\r\n return getWidthHeight(this[0], 'height', 'base');\r\n }\r\n },\r\n outerHeight(option) {\r\n return getWidthHeight(this[0], 'height', option ? 'outerfull' : 'outer');\r\n },\r\n outerWidth(option) {\r\n return getWidthHeight(this[0], 'width', option ? 'outerfull' : 'outer');\r\n },\r\n\r\n /*\r\n The offset setter method is not implemented\r\n */\r\n offset(value) {\r\n let docElem, win;\r\n let self = this;\r\n let box = {\r\n top: 0,\r\n left: 0\r\n };\r\n let elem = self[0];\r\n let doc = elem && elem.ownerDocument;\r\n\r\n if (arguments.length) {\r\n if (value === undefined) {\r\n return self;\r\n }\r\n // TODO: implement setter\r\n throw new Error('offset setter method is not implemented');\r\n }\r\n\r\n if (!doc) {\r\n return;\r\n }\r\n\r\n docElem = doc.documentElement;\r\n\r\n // TODO: Make sure it's not a disconnected DOM node\r\n\r\n if (elem.getBoundingClientRect != null) {\r\n box = elem.getBoundingClientRect();\r\n }\r\n\r\n win = doc.defaultView || doc.parentWindow;\r\n\r\n return {\r\n top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),\r\n left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0)\r\n };\r\n },\r\n scrollTop(value) {\r\n return scrollTo(this, 'top', value);\r\n },\r\n scrollLeft(value) {\r\n return scrollTo(this, 'left', value);\r\n }\r\n }, (value, key) => {\r\n if (!element.prototype[key]) {\r\n return element.prototype[key] = value;\r\n }\r\n });\r\n }\r\n\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/jqLiteExtras.js","import Padding from './padding';\r\n\r\nexport default function Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding) {\r\n let topPadding = null;\r\n let bottomPadding = null;\r\n const viewport = viewportController && viewportController.viewport ? viewportController.viewport : angular.element(window);\r\n const container = viewportController && viewportController.container ? viewportController.container : undefined;\r\n const scope = viewportController && viewportController.scope ? viewportController.scope : $rootScope;\r\n\r\n viewport.css({\r\n 'overflow-anchor': 'none',\r\n 'overflow-y': 'auto',\r\n 'display': 'block'\r\n });\r\n\r\n function bufferPadding() {\r\n return viewport.outerHeight() * padding; // some extra space to initiate preload\r\n }\r\n\r\n Object.assign(viewport, {\r\n getScope() {\r\n return scope;\r\n },\r\n\r\n createPaddingElements(template) {\r\n topPadding = new Padding(template);\r\n bottomPadding = new Padding(template);\r\n element.before(topPadding.element);\r\n element.after(bottomPadding.element);\r\n topPadding.height(0);\r\n bottomPadding.height(0);\r\n },\r\n\r\n applyContainerStyle() {\r\n if (!container) {\r\n return true;\r\n }\r\n if(container !== viewport) {\r\n viewport.css('height', window.getComputedStyle(container[0]).height);\r\n }\r\n return viewport.height() > 0;\r\n },\r\n\r\n bottomDataPos() {\r\n let scrollHeight = viewport[0].scrollHeight;\r\n scrollHeight = scrollHeight != null ? scrollHeight : viewport[0].document.documentElement.scrollHeight;\r\n return scrollHeight - bottomPadding.height();\r\n },\r\n\r\n topDataPos() {\r\n return topPadding.height();\r\n },\r\n\r\n bottomVisiblePos() {\r\n return viewport.scrollTop() + viewport.outerHeight();\r\n },\r\n\r\n topVisiblePos() {\r\n return viewport.scrollTop();\r\n },\r\n\r\n insertElement(e, sibling) {\r\n return elementRoutines.insertElement(e, sibling || topPadding.element);\r\n },\r\n\r\n insertElementAnimated(e, sibling) {\r\n return elementRoutines.insertElementAnimated(e, sibling || topPadding.element);\r\n },\r\n\r\n shouldLoadBottom() {\r\n return !buffer.eof && viewport.bottomDataPos() < viewport.bottomVisiblePos() + bufferPadding();\r\n },\r\n\r\n clipBottom() {\r\n // clip the invisible items off the bottom\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.bottomDataPos() - viewport.bottomVisiblePos() - bufferPadding();\r\n\r\n for (let i = buffer.length - 1; i >= 0; i--) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n bottomPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n buffer.eof = false;\r\n buffer.remove(buffer.length - overage, buffer.length);\r\n buffer.next -= overage;\r\n viewport.adjustPaddings();\r\n }\r\n },\r\n\r\n shouldLoadTop() {\r\n return !buffer.bof && (viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding());\r\n },\r\n\r\n clipTop() {\r\n // clip the invisible items off the top\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\r\n\r\n for (let i = 0; i < buffer.length; i++) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n topPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n // we need to adjust top padding element before items are removed from top\r\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\r\n topPadding.height(topPadding.height() + overageHeight);\r\n buffer.bof = false;\r\n buffer.remove(0, overage);\r\n buffer.first += overage;\r\n }\r\n },\r\n\r\n adjustPaddings() {\r\n if (!buffer.length) {\r\n return;\r\n }\r\n\r\n // precise heights calculation based on items that are in buffer or that were in buffer once\r\n const visibleItemsHeight = buffer.reduce((summ, item) => summ + item.element.outerHeight(true), 0);\r\n\r\n let topPaddingHeight = 0, topCount = 0;\r\n topPadding.cache.forEach(item => {\r\n if(item.index < buffer.first) {\r\n topPaddingHeight += item.height;\r\n topCount++;\r\n }\r\n });\r\n\r\n let bottomPaddingHeight = 0, bottomCount = 0;\r\n bottomPadding.cache.forEach(item => {\r\n if(item.index >= buffer.next) {\r\n bottomPaddingHeight += item.height;\r\n bottomCount++;\r\n }\r\n });\r\n\r\n const totalHeight = visibleItemsHeight + topPaddingHeight + bottomPaddingHeight;\r\n const averageItemHeight = totalHeight / (topCount + bottomCount + buffer.length);\r\n\r\n // average heights calculation, items that have never been reached\r\n let adjustTopPadding = buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser;\r\n let adjustBottomPadding = buffer.maxIndexUser !== null && buffer.maxIndex < buffer.maxIndexUser;\r\n let topPaddingHeightAdd = adjustTopPadding ? (buffer.minIndex - buffer.minIndexUser) * averageItemHeight : 0;\r\n let bottomPaddingHeightAdd = adjustBottomPadding ? (buffer.maxIndexUser - buffer.maxIndex) * averageItemHeight : 0;\r\n\r\n // paddings combine adjustment\r\n topPadding.height(topPaddingHeight + topPaddingHeightAdd);\r\n bottomPadding.height(bottomPaddingHeight + bottomPaddingHeightAdd);\r\n },\r\n\r\n onAfterMinIndexSet(topPaddingHeightOld) {\r\n // additional scrollTop adjustment in case of datasource.minIndex external set\r\n if (buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser) {\r\n let diff = topPadding.height() - topPaddingHeightOld;\r\n viewport.scrollTop(viewport.scrollTop() + diff);\r\n while((diff -= viewport.scrollTop()) > 0) {\r\n bottomPadding.height(bottomPadding.height() + diff);\r\n viewport.scrollTop(viewport.scrollTop() + diff);\r\n }\r\n }\r\n },\r\n\r\n onAfterPrepend(updates) {\r\n if (!updates.prepended.length)\r\n return;\r\n const height = buffer.effectiveHeight(updates.prepended);\r\n const paddingHeight = topPadding.height() - height;\r\n if (paddingHeight >= 0) {\r\n topPadding.height(paddingHeight);\r\n }\r\n else {\r\n topPadding.height(0);\r\n viewport.scrollTop(viewport.scrollTop() - paddingHeight);\r\n }\r\n },\r\n\r\n resetTopPadding() {\r\n topPadding.height(0);\r\n topPadding.cache.clear();\r\n },\r\n\r\n resetBottomPadding() {\r\n bottomPadding.height(0);\r\n bottomPadding.cache.clear();\r\n },\r\n\r\n removeCacheItem(item, isTop) {\r\n topPadding.cache.remove(item, isTop);\r\n bottomPadding.cache.remove(item, isTop);\r\n },\r\n\r\n removeItem(item) {\r\n this.removeCacheItem(item);\r\n return buffer.remove(item);\r\n }\r\n });\r\n\r\n return viewport;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/viewport.js","// Can't just extend the Array, due to Babel does not support built-in classes extending\r\n// This solution was taken from https://stackoverflow.com/questions/46897414/es6-class-extends-array-workaround-for-es5-babel-transpile\r\nclass CacheProto {\r\n add(item) {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index === item.scope.$index) {\r\n this[i].height = item.element.outerHeight();\r\n return;\r\n }\r\n }\r\n this.push({\r\n index: item.scope.$index,\r\n height: item.element.outerHeight()\r\n });\r\n this.sort((a, b) => ((a.index < b.index) ? -1 : ((a.index > b.index) ? 1 : 0)));\r\n }\r\n\r\n remove(argument, _isTop) {\r\n const index = argument % 1 === 0 ? argument : argument.scope.$index;\r\n const isTop = argument % 1 === 0 ? _isTop : argument._op === 'isTop';\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index === index) {\r\n this.splice(i, 1);\r\n break;\r\n }\r\n }\r\n if(!isTop) {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index > index) {\r\n this[i].index--;\r\n }\r\n }\r\n }\r\n }\r\n\r\n clear() {\r\n this.length = 0;\r\n }\r\n}\r\n\r\nfunction Cache() {\r\n const instance = [];\r\n instance.push.apply(instance, arguments);\r\n Object.setPrototypeOf(instance, Cache.prototype);\r\n return instance;\r\n}\r\nCache.prototype = Object.create(Array.prototype);\r\nObject.getOwnPropertyNames(CacheProto.prototype).forEach(methodName =>\r\n Cache.prototype[methodName] = CacheProto.prototype[methodName]\r\n);\r\n\r\nfunction generateElement(template) {\r\n if(template.nodeType !== Node.ELEMENT_NODE) {\r\n throw new Error('ui-scroll directive requires an Element node for templating the view');\r\n }\r\n let element;\r\n switch (template.tagName.toLowerCase()) {\r\n case 'dl':\r\n throw new Error(`ui-scroll directive does not support <${template.tagName}> as a repeating tag: ${template.outerHTML}`);\r\n case 'tr':\r\n let table = angular.element('
    ');\r\n element = table.find('tr');\r\n break;\r\n case 'li':\r\n element = angular.element('
  • ');\r\n break;\r\n default:\r\n element = angular.element('
    ');\r\n }\r\n return element;\r\n}\r\n\r\nclass Padding {\r\n constructor(template) {\r\n this.element = generateElement(template);\r\n this.cache = new Cache();\r\n }\r\n\r\n height() {\r\n return this.element.height.apply(this.element, arguments);\r\n }\r\n}\r\n\r\nexport default Padding;\n\n\n// WEBPACK FOOTER //\n// ./src/modules/padding.js","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 '$interval',\n '$q',\n '$parse',\n function (console, $injector, $rootScope, $timeout, $interval, $q, $parse) {\n\n return {\n require: ['?^uiScrollViewport'],\n restrict: 'A',\n transclude: 'element',\n priority: 1000,\n terminal: true,\n link: link\n };\n\n function link($scope, element, $attr, controllers, linker) {\n const match = $attr.uiScroll.match(/^\\s*(\\w+)\\s+in\\s+([(\\w|\\$)\\.]+)\\s*$/);\n if (!match) {\n throw new Error('Expected uiScroll in form of \\'_item_ in _datasource_\\' but got \\'' + $attr.uiScroll + '\\'');\n }\n\n function parseNumericAttr(value, defaultValue) {\n const result = $parse(value)($scope);\n return isNaN(result) ? defaultValue : result;\n }\n\n const BUFFER_MIN = 3;\n const BUFFER_DEFAULT = 10;\n const PADDING_MIN = 0.3;\n const PADDING_DEFAULT = 0.5;\n const MAX_VIEWPORT_DELAY = 500;\n const VIEWPORT_POLLING_INTERVAL = 50;\n\n let datasource = null;\n const itemName = match[1];\n const datasourceName = match[2];\n const viewportController = controllers[0];\n const bufferSize = Math.max(BUFFER_MIN, parseNumericAttr($attr.bufferSize, BUFFER_DEFAULT));\n const padding = Math.max(PADDING_MIN, parseNumericAttr($attr.padding, PADDING_DEFAULT));\n let startIndex = parseNumericAttr($attr.startIndex, 1);\n let ridActual = 0; // current data revision id\n let pending = [];\n\n const elementRoutines = new ElementRoutines($injector, $q);\n const buffer = new ScrollBuffer(elementRoutines, bufferSize, startIndex);\n const viewport = new Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding);\n const adapter = new Adapter($scope, $parse, $attr, viewport, buffer, doAdjust, reload);\n\n if (viewportController) {\n viewportController.adapter = adapter;\n }\n\n const isDatasourceValid = () =>\n Object.prototype.toString.call(datasource) === '[object Object]' && typeof datasource.get === 'function';\n\n datasource = $parse(datasourceName)($scope); // try to get datasource on scope\n if (!isDatasourceValid()) {\n datasource = $injector.get(datasourceName); // try to inject datasource as service\n if (!isDatasourceValid()) {\n throw new Error(datasourceName + ' is not a valid datasource');\n }\n }\n\n let onRenderHandlers = [];\n function onRenderHandlersRunner() {\n onRenderHandlers.forEach(handler => handler.run());\n onRenderHandlers = [];\n }\n function persistDatasourceIndex(datasource, propName) {\n let getter;\n // need to postpone min/maxIndexUser processing if the view is empty\n if(Number.isInteger(datasource[propName])) {\n getter = datasource[propName];\n if(Number.isInteger(getter)) {\n onRenderHandlers = onRenderHandlers.filter(handler => handler.id !== propName);\n onRenderHandlers.push({\n id: propName,\n run: () => datasource[propName] = getter\n });\n }\n }\n }\n\n function defineDatasourceIndex(datasource, propName, propUserName) {\n const descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n if (descriptor && (descriptor.set || descriptor.get)) {\n return;\n }\n let getter;\n persistDatasourceIndex(datasource, propName);\n Object.defineProperty(datasource, propName, {\n set: (value) => {\n getter = value;\n if(pending.length && !buffer.length) {\n persistDatasourceIndex(datasource, propName);\n return;\n }\n buffer[propUserName] = value;\n const topPaddingHeightOld = viewport.topDataPos();\n viewport.adjustPaddings();\n if (propName === 'minIndex') {\n viewport.onAfterMinIndexSet(topPaddingHeightOld);\n }\n },\n get: () => getter\n });\n }\n\n defineDatasourceIndex(datasource, 'minIndex', 'minIndexUser');\n defineDatasourceIndex(datasource, 'maxIndex', 'maxIndexUser');\n\n const fetchNext = (datasource.get.length !== 2) ?\n (success) => datasource.get(buffer.next, bufferSize, success) :\n (success) => {\n datasource.get({\n index: buffer.next,\n append: buffer.length ? buffer[buffer.length - 1].item : void 0,\n count: bufferSize\n }, success);\n };\n\n const fetchPrevious = (datasource.get.length !== 2) ?\n (success) => datasource.get(buffer.first - bufferSize, bufferSize, success) :\n (success) => {\n datasource.get({\n index: buffer.first - bufferSize,\n prepend: buffer.length ? buffer[0].item : void 0,\n count: bufferSize\n }, success);\n };\n\n const initialize = () => {\n let tryCount = 0;\n if(!viewport.applyContainerStyle()) {\n const timer = $interval(() => {\n tryCount++;\n if(viewport.applyContainerStyle()) {\n $interval.cancel(timer);\n doAdjust();\n }\n if(tryCount * VIEWPORT_POLLING_INTERVAL >= MAX_VIEWPORT_DELAY) {\n $interval.cancel(timer);\n throw Error(`ui-scroll directive requires a viewport with non-zero height in ${MAX_VIEWPORT_DELAY}ms`);\n }\n }, VIEWPORT_POLLING_INTERVAL);\n }\n else {\n doAdjust();\n }\n };\n\n /**\n * Build padding elements\n *\n * Calling linker is the only way I found to get access to the tag name of the template\n * to prevent the directive scope from pollution a new scope is created and destroyed\n * right after the builder creation is completed\n */\n linker((clone, scope) => {\n viewport.createPaddingElements(clone[0]);\n // we do not include the clone in the DOM. It means that the nested directives will not\n // be able to reach the parent directives, but in this case it is intentional because we\n // created the clone to access the template tag name\n scope.$destroy();\n clone.remove();\n });\n\n $scope.$on('$destroy', () => {\n unbindEvents();\n viewport.unbind('mousewheel', wheelHandler);\n });\n\n viewport.bind('mousewheel', wheelHandler);\n\n initialize();\n\n /* Private function definitions */\n\n function isInvalid(rid) {\n return (rid && rid !== ridActual) || $scope.$$destroyed;\n }\n\n function bindEvents() {\n viewport.bind('resize', resizeAndScrollHandler);\n viewport.bind('scroll', resizeAndScrollHandler);\n }\n\n function unbindEvents() {\n viewport.unbind('resize', resizeAndScrollHandler);\n viewport.unbind('scroll', resizeAndScrollHandler);\n }\n\n function reload() {\n viewport.resetTopPadding();\n viewport.resetBottomPadding();\n if (arguments.length) {\n startIndex = arguments[0];\n }\n buffer.reset(startIndex);\n persistDatasourceIndex(datasource, 'minIndex');\n persistDatasourceIndex(datasource, 'maxIndex');\n doAdjust();\n }\n\n function isElementVisible(wrapper) {\n return wrapper.element.height() && wrapper.element[0].offsetParent;\n }\n\n function visibilityWatcher(wrapper) {\n if (isElementVisible(wrapper)) {\n buffer.forEach((item) => {\n if (typeof item.unregisterVisibilityWatcher === 'function') {\n item.unregisterVisibilityWatcher();\n delete item.unregisterVisibilityWatcher;\n }\n });\n if (!pending.length) {\n $timeout(() => doAdjust());\n }\n }\n }\n\n function insertWrapperContent(wrapper, insertAfter) {\n createElement(wrapper, insertAfter, viewport.insertElement);\n if (!isElementVisible(wrapper)) {\n wrapper.unregisterVisibilityWatcher = wrapper.scope.$watch(() => visibilityWatcher(wrapper));\n }\n elementRoutines.hideElement(wrapper); // hide inserted elements before data binding\n }\n\n function createElement(wrapper, insertAfter, insertElement) {\n let promises = null;\n const sibling = (insertAfter > 0) ? buffer[insertAfter - 1].element : undefined;\n linker((clone, scope) => {\n promises = insertElement(clone, sibling);\n wrapper.element = clone;\n wrapper.scope = scope;\n scope[itemName] = wrapper.item;\n });\n // ui-scroll-grid apply\n if (adapter.transform) {\n const tdInitializer = wrapper.scope.uiScrollTdInitializer;\n if (tdInitializer && tdInitializer.linking) {\n adapter.transform(wrapper.scope, wrapper.element);\n } else {\n wrapper.scope.uiScrollTdInitializer = {\n onLink: () => adapter.transform(wrapper.scope, wrapper.element),\n scope: wrapper.scope\n };\n }\n }\n return promises;\n }\n\n function updateDOM() {\n let promises = [];\n const toBePrepended = [];\n const toBeRemoved = [];\n const inserted = [];\n\n buffer.forEach((wrapper, i) => {\n switch (wrapper.op) {\n case 'prepend':\n toBePrepended.unshift(wrapper);\n break;\n case 'append':\n insertWrapperContent(wrapper, i);\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'insert':\n promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated));\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'remove':\n toBeRemoved.push(wrapper);\n }\n });\n\n toBeRemoved.forEach((wrapper) => promises = promises.concat(viewport.removeItem(wrapper)));\n\n if (toBePrepended.length)\n toBePrepended.forEach((wrapper) => {\n insertWrapperContent(wrapper);\n wrapper.op = 'none';\n });\n\n buffer.forEach((item, i) => item.scope.$index = buffer.first + i);\n\n return {\n prepended: toBePrepended,\n removed: toBeRemoved,\n inserted: inserted,\n animated: promises\n };\n\n }\n\n function updatePaddings(rid, updates) {\n // schedule another doAdjust after animation completion\n if (updates.animated.length) {\n $q.all(updates.animated).then(() => {\n viewport.adjustPaddings();\n doAdjust(rid);\n });\n } else {\n viewport.adjustPaddings();\n }\n }\n\n function enqueueFetch(rid, updates) {\n if (viewport.shouldLoadBottom()) {\n if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\n // this means that at least one item appended in the last batch has height > 0\n if (pending.push(true) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n } else if (viewport.shouldLoadTop()) {\n if ((!updates || buffer.effectiveHeight(updates.prepended) > 0) || pending[0]) {\n // this means that at least one item appended in the last batch has height > 0\n // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\n // BTW there will always be at least 1 element in the pending array because bottom is fetched first\n if (pending.push(false) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n }\n }\n\n function processUpdates() {\n const updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustments\n !$scope.$$phase && !$rootScope.$$phase && $scope.$digest();\n\n updates.inserted.forEach(w => elementRoutines.showElement(w));\n updates.prepended.forEach(w => elementRoutines.showElement(w));\n return updates;\n }\n\n function doAdjust(rid) {\n if (!rid) { // dismiss pending requests\n pending = [];\n rid = ++ridActual;\n }\n\n const updates = processUpdates();\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n enqueueFetch(rid);\n\n if (!pending.length) {\n adapter.calculateProperties();\n }\n }\n\n function doAdjustAfterFetch(rid) {\n const updates = processUpdates();\n\n viewport.onAfterPrepend(updates);\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n onRenderHandlersRunner();\n enqueueFetch(rid, updates);\n pending.shift();\n\n if (pending.length)\n fetch(rid);\n else {\n adapter.loading(false);\n bindEvents();\n adapter.calculateProperties();\n }\n }\n\n function fetch(rid) {\n if (pending[0]) {// scrolling down\n if (buffer.length && !viewport.shouldLoadBottom()) {\n doAdjustAfterFetch(rid);\n } else {\n fetchNext((result) => {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.eof = true;\n }\n\n if (result.length > 0) {\n viewport.clipTop();\n buffer.append(result);\n }\n\n doAdjustAfterFetch(rid);\n });\n }\n } else { // scrolling up\n if (buffer.length && !viewport.shouldLoadTop()) {\n doAdjustAfterFetch(rid);\n } else {\n fetchPrevious((result) => {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.bof = true;\n // log 'bof is reached'\n }\n\n if (result.length > 0) {\n if (buffer.length) {\n viewport.clipBottom();\n }\n buffer.prepend(result);\n }\n\n doAdjustAfterFetch(rid);\n });\n }\n }\n }\n\n function resizeAndScrollHandler() {\n if (!$rootScope.$$phase && !adapter.isLoading && !adapter.disabled) {\n\n enqueueFetch(ridActual);\n\n if (pending.length) {\n unbindEvents();\n } else {\n adapter.calculateProperties();\n !$scope.$$phase && $scope.$digest();\n }\n }\n }\n\n function wheelHandler(event) {\n if (!adapter.disabled) {\n const scrollTop = viewport[0].scrollTop;\n const yMax = viewport[0].scrollHeight - viewport[0].clientHeight;\n\n if ((scrollTop === 0 && !buffer.bof) || (scrollTop === yMax && !buffer.eof)) {\n event.preventDefault();\n }\n }\n }\n }\n\n }\n ]);\n\n\n// WEBPACK FOOTER //\n// ./src/ui-scroll.js"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap 36a3010ad66560b7fc51","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","$interval","$q","$parse","require","transclude","priority","terminal","link","$scope","$attr","controllers","linker","match","uiScroll","Error","parseNumericAttr","value","defaultValue","result","isNaN","BUFFER_MIN","BUFFER_DEFAULT","PADDING_MIN","PADDING_DEFAULT","MAX_VIEWPORT_DELAY","VIEWPORT_POLLING_INTERVAL","datasource","itemName","datasourceName","viewportController","bufferSize","Math","max","padding","startIndex","ridActual","pending","elementRoutines","buffer","adapter","doAdjust","reload","isDatasourceValid","Object","prototype","toString","call","get","onRenderHandlers","onRenderHandlersRunner","handler","persistDatasourceIndex","propName","getter","Number","isInteger","filter","id","push","defineDatasourceIndex","propUserName","descriptor","getOwnPropertyDescriptor","set","defineProperty","length","topPaddingHeightOld","topDataPos","adjustPaddings","onAfterMinIndexSet","fetchNext","success","next","index","append","item","count","fetchPrevious","first","prepend","initialize","tryCount","applyContainerStyle","timer","cancel","clone","createPaddingElements","$destroy","remove","$on","unbindEvents","unbind","wheelHandler","bind","isInvalid","rid","$$destroyed","bindEvents","resizeAndScrollHandler","resetTopPadding","resetBottomPadding","arguments","reset","isElementVisible","wrapper","height","offsetParent","visibilityWatcher","unregisterVisibilityWatcher","insertWrapperContent","insertAfter","createElement","insertElement","$watch","hideElement","promises","sibling","undefined","transform","tdInitializer","uiScrollTdInitializer","linking","onLink","updateDOM","toBePrepended","toBeRemoved","inserted","i","op","unshift","concat","insertElementAnimated","removeItem","$index","prepended","removed","animated","updatePaddings","updates","all","then","enqueueFetch","shouldLoadBottom","effectiveHeight","loading","fetch","shouldLoadTop","processUpdates","$$phase","$digest","showElement","w","calculateProperties","doAdjustAfterFetch","onAfterPrepend","shift","eof","clipTop","bof","clipBottom","isLoading","disabled","event","scrollTop","yMax","scrollHeight","clientHeight","preventDefault","JQLiteExtras","convertToPx","css","getStyle","isWindow","name","self","elem","nodeType","style","obj","document","location","alert","setInterval","scrollTo","direction","top","left","method","prop","preserve","isValueDefined","documentElement","getComputedStyle","parseFloat","currentStyle","rs","rsLeft","core_pnum","source","rnumnonpx","RegExp","test","runtimeStyle","pixelLeft","getMeasurements","measure","base","borderA","borderB","computedMarginA","computedMarginB","computedStyle","dirA","dirB","marginA","marginB","paddingA","paddingB","width","border","margin","offsetWidth","offsetHeight","getWidthHeight","measurements","outer","outerfull","before","newElem","j","parent","ref","contents","after","outerHTML","outerHeight","option","outerWidth","offset","docElem","win","box","doc","ownerDocument","getBoundingClientRect","defaultView","parentWindow","pageYOffset","clientTop","pageXOffset","scrollLeft","clientLeft","key","hideClassToken","addCSSRule","sheet","selector","rules","insertRule","addRule","ElementRoutines","$animate","has","isAngularVersionLessThen1_3","version","major","minor","styleSheets","addClass","removeClass","newElement","previousElement","deferred","defer","enter","resolve","promise","removeElement","leave","ScrollBuffer","create","Array","assign","size","minIndex","maxIndex","minIndexUser","maxIndexUser","items","insert","reverse","min","operation","isTop","splice","arg1","arg2","indexOf","_op","getAbsMinIndex","incrementMinIndex","decrementMaxIndex","removeElementAnimated","getAbsMaxIndex","elements","MAX_VALUE","bottom","NEGATIVE_INFINITY","Viewport","topPadding","bottomPadding","bufferPadding","getScope","template","bottomDataPos","bottomVisiblePos","topVisiblePos","e","overage","overageHeight","itemHeight","emptySpaceHeight","cache","add","visibleItemsHeight","reduce","summ","topPaddingHeight","topCount","bottomPaddingHeight","bottomCount","totalHeight","averageItemHeight","adjustTopPadding","adjustBottomPadding","topPaddingHeightAdd","bottomPaddingHeightAdd","diff","paddingHeight","clear","removeCacheItem","CacheProto","sort","a","b","argument","_isTop","Cache","instance","apply","setPrototypeOf","getOwnPropertyNames","methodName","generateElement","Node","ELEMENT_NODE","table","find","Padding","Adapter","viewportScope","startScope","$parent","publicContext","assignAdapter","generatePublicContext","adapterAttr","replace","adapterOnScope","error","message","publicMethods","publicProps","property","attr","newItems","applyUpdatesFunc","applyUpdatesIndex","cb","slice","applyUpdate","_index","isArray","position","some","newItem","rowTop","topHeight","topDone","bottomDone","itemTop","isEOF"],"mappings":";;;;;;;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;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;;;;;;;;;;AC7DA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;;;AAEAA,QAAQC,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,CAACC,OAAOC,MAAR,GAAiBF,aAAaG,WAAb,CAAyBP,QAAQQ,OAAjC,CAAjB,GAA6D,IADzC;AAAA,CAAjB,CAHP,EAOGC,SAPH,CAOa,kBAPb,EAOiC,YAAY;AACzC,SAAO;AACLC,cAAU,GADL;AAELC,gBAAY,CACV,QADU,EAEV,UAFU,EAGV,UAAUC,KAAV,EAAiBJ,OAAjB,EAA0B;AAAA;;AACxB,WAAKK,SAAL,GAAiBL,OAAjB;AACA,WAAKM,QAAL,GAAgBN,OAAhB;AACA,WAAKI,KAAL,GAAaA,KAAb;;AAEAZ,cAAQe,OAAR,CAAgBP,QAAQQ,QAAR,EAAhB,EAAoC,iBAAS;AAC3C,YAAIC,MAAMC,OAAN,CAAcC,WAAd,OAAgC,OAApC,EAA6C;AAC3C,gBAAKL,QAAL,GAAgBd,QAAQQ,OAAR,CAAgBS,KAAhB,CAAhB;AACD;AACF,OAJD;;AAMA,aAAO,IAAP;AACD,KAfS;AAFP,GAAP;AAoBD,CA5BH,EA8BGR,SA9BH,CA8Ba,UA9Bb,EA8ByB,CACrB,MADqB,EAErB,WAFqB,EAGrB,YAHqB,EAIrB,UAJqB,EAKrB,WALqB,EAMrB,IANqB,EAOrB,QAPqB,EAQrB,UAAUW,OAAV,EAAmBC,SAAnB,EAA8BC,UAA9B,EAA0CC,QAA1C,EAAoDC,SAApD,EAA+DC,EAA/D,EAAmEC,MAAnE,EAA2E;;AAEzE,SAAO;AACLC,aAAS,CAAC,oBAAD,CADJ;AAELjB,cAAU,GAFL;AAGLkB,gBAAY,SAHP;AAILC,cAAU,IAJL;AAKLC,cAAU,IALL;AAMLC,UAAMA;AAND,GAAP;;AASA,WAASA,IAAT,CAAcC,MAAd,EAAsBxB,OAAtB,EAA+ByB,KAA/B,EAAsCC,WAAtC,EAAmDC,MAAnD,EAA2D;AACzD,QAAMC,QAAQH,MAAMI,QAAN,CAAeD,KAAf,CAAqB,qCAArB,CAAd;AACA,QAAI,CAACA,KAAL,EAAY;AACV,YAAM,IAAIE,KAAJ,CAAU,uEAAuEL,MAAMI,QAA7E,GAAwF,IAAlG,CAAN;AACD;;AAED,aAASE,gBAAT,CAA0BC,KAA1B,EAAiCC,YAAjC,EAA+C;AAC7C,UAAMC,SAAShB,OAAOc,KAAP,EAAcR,MAAd,CAAf;AACA,aAAOW,MAAMD,MAAN,IAAgBD,YAAhB,GAA+BC,MAAtC;AACD;;AAED,QAAME,aAAa,CAAnB;AACA,QAAMC,iBAAiB,EAAvB;AACA,QAAMC,cAAc,GAApB;AACA,QAAMC,kBAAkB,GAAxB;AACA,QAAMC,qBAAqB,GAA3B;AACA,QAAMC,4BAA4B,EAAlC;;AAEA,QAAIC,aAAa,IAAjB;AACA,QAAMC,WAAWf,MAAM,CAAN,CAAjB;AACA,QAAMgB,iBAAiBhB,MAAM,CAAN,CAAvB;AACA,QAAMiB,qBAAqBnB,YAAY,CAAZ,CAA3B;AACA,QAAMoB,aAAaC,KAAKC,GAAL,CAASZ,UAAT,EAAqBL,iBAAiBN,MAAMqB,UAAvB,EAAmCT,cAAnC,CAArB,CAAnB;AACA,QAAMY,UAAUF,KAAKC,GAAL,CAASV,WAAT,EAAsBP,iBAAiBN,MAAMwB,OAAvB,EAAgCV,eAAhC,CAAtB,CAAhB;AACA,QAAIW,aAAanB,iBAAiBN,MAAMyB,UAAvB,EAAmC,CAAnC,CAAjB;AACA,QAAIC,YAAY,CAAhB,CAzByD,CAyBtC;AACnB,QAAIC,UAAU,EAAd;;AAEA,QAAMC,kBAAkB,8BAAoBxC,SAApB,EAA+BI,EAA/B,CAAxB;AACA,QAAMqC,SAAS,qBAAiBD,eAAjB,EAAkCP,UAAlC,EAA8CI,UAA9C,CAAf;AACA,QAAM5C,WAAW,uBAAa+C,eAAb,EAA8BC,MAA9B,EAAsCtD,OAAtC,EAA+C6C,kBAA/C,EAAmE/B,UAAnE,EAA+EmC,OAA/E,CAAjB;AACA,QAAMM,UAAU,sBAAY/B,MAAZ,EAAoBN,MAApB,EAA4BO,KAA5B,EAAmCnB,QAAnC,EAA6CgD,MAA7C,EAAqDE,QAArD,EAA+DC,MAA/D,CAAhB;;AAEA,QAAIZ,kBAAJ,EAAwB;AACtBA,yBAAmBU,OAAnB,GAA6BA,OAA7B;AACD;;AAED,QAAMG,oBAAoB,SAApBA,iBAAoB;AAAA,aACxBC,OAAOC,SAAP,CAAiBC,QAAjB,CAA0BC,IAA1B,CAA+BpB,UAA/B,MAA+C,iBAA/C,IAAoE,OAAOA,WAAWqB,GAAlB,KAA0B,UADtE;AAAA,KAA1B;;AAGArB,iBAAaxB,OAAO0B,cAAP,EAAuBpB,MAAvB,CAAb,CAxCyD,CAwCZ;AAC7C,QAAI,CAACkC,mBAAL,EAA0B;AACxBhB,mBAAa7B,UAAUkD,GAAV,CAAcnB,cAAd,CAAb,CADwB,CACoB;AAC5C,UAAI,CAACc,mBAAL,EAA0B;AACxB,cAAM,IAAI5B,KAAJ,CAAUc,iBAAiB,4BAA3B,CAAN;AACD;AACF;;AAED,QAAIoB,mBAAmB,EAAvB;AACA,aAASC,sBAAT,GAAkC;AAChCD,uBAAiBzD,OAAjB,CAAyB;AAAA,eAAW2D,QAAQvE,GAAR,EAAX;AAAA,OAAzB;AACAqE,yBAAmB,EAAnB;AACD;AACD,aAASG,sBAAT,CAAgCzB,UAAhC,EAA4C0B,QAA5C,EAAsD;AACpD,UAAIC,eAAJ;AACA;AACA,UAAGC,OAAOC,SAAP,CAAiB7B,WAAW0B,QAAX,CAAjB,CAAH,EAA2C;AACzCC,iBAAS3B,WAAW0B,QAAX,CAAT;AACA,YAAGE,OAAOC,SAAP,CAAiBF,MAAjB,CAAH,EAA6B;AAC3BL,6BAAmBA,iBAAiBQ,MAAjB,CAAwB;AAAA,mBAAWN,QAAQO,EAAR,KAAeL,QAA1B;AAAA,WAAxB,CAAnB;AACAJ,2BAAiBU,IAAjB,CAAsB;AACpBD,gBAAIL,QADgB;AAEpBzE,iBAAK;AAAA,qBAAM+C,WAAW0B,QAAX,IAAuBC,MAA7B;AAAA;AAFe,WAAtB;AAID;AACF;AACF;;AAED,aAASM,qBAAT,CAA+BjC,UAA/B,EAA2C0B,QAA3C,EAAqDQ,YAArD,EAAmE;AACjE,UAAMC,aAAalB,OAAOmB,wBAAP,CAAgCpC,UAAhC,EAA4C0B,QAA5C,CAAnB;AACA,UAAIS,eAAeA,WAAWE,GAAX,IAAkBF,WAAWd,GAA5C,CAAJ,EAAsD;AACpD;AACD;AACD,UAAIM,eAAJ;AACAF,6BAAuBzB,UAAvB,EAAmC0B,QAAnC;AACAT,aAAOqB,cAAP,CAAsBtC,UAAtB,EAAkC0B,QAAlC,EAA4C;AAC1CW,aAAK,aAAC/C,KAAD,EAAW;AACdqC,mBAASrC,KAAT;AACA,cAAGoB,QAAQ6B,MAAR,IAAkB,CAAC3B,OAAO2B,MAA7B,EAAqC;AACnCd,mCAAuBzB,UAAvB,EAAmC0B,QAAnC;AACA;AACD;AACDd,iBAAOsB,YAAP,IAAuB5C,KAAvB;AACA,cAAMkD,sBAAsB5E,SAAS6E,UAAT,EAA5B;AACA7E,mBAAS8E,cAAT;AACA,cAAIhB,aAAa,UAAjB,EAA6B;AAC3B9D,qBAAS+E,kBAAT,CAA4BH,mBAA5B;AACD;AACF,SAbyC;AAc1CnB,aAAK;AAAA,iBAAMM,MAAN;AAAA;AAdqC,OAA5C;AAgBD;;AAEDM,0BAAsBjC,UAAtB,EAAkC,UAAlC,EAA8C,cAA9C;AACAiC,0BAAsBjC,UAAtB,EAAkC,UAAlC,EAA8C,cAA9C;;AAEA,QAAM4C,YAAa5C,WAAWqB,GAAX,CAAekB,MAAf,KAA0B,CAA3B,GAChB,UAACM,OAAD;AAAA,aAAa7C,WAAWqB,GAAX,CAAeT,OAAOkC,IAAtB,EAA4B1C,UAA5B,EAAwCyC,OAAxC,CAAb;AAAA,KADgB,GAEhB,UAACA,OAAD,EAAa;AACX7C,iBAAWqB,GAAX,CAAe;AACb0B,eAAOnC,OAAOkC,IADD;AAEbE,gBAAQpC,OAAO2B,MAAP,GAAgB3B,OAAOA,OAAO2B,MAAP,GAAgB,CAAvB,EAA0BU,IAA1C,GAAiD,KAAK,CAFjD;AAGbC,eAAO9C;AAHM,OAAf,EAIGyC,OAJH;AAKD,KARH;;AAUA,QAAMM,gBAAiBnD,WAAWqB,GAAX,CAAekB,MAAf,KAA0B,CAA3B,GACpB,UAACM,OAAD;AAAA,aAAa7C,WAAWqB,GAAX,CAAeT,OAAOwC,KAAP,GAAehD,UAA9B,EAA0CA,UAA1C,EAAsDyC,OAAtD,CAAb;AAAA,KADoB,GAEpB,UAACA,OAAD,EAAa;AACX7C,iBAAWqB,GAAX,CAAe;AACb0B,eAAOnC,OAAOwC,KAAP,GAAehD,UADT;AAEbiD,iBAASzC,OAAO2B,MAAP,GAAgB3B,OAAO,CAAP,EAAUqC,IAA1B,GAAiC,KAAK,CAFlC;AAGbC,eAAO9C;AAHM,OAAf,EAIGyC,OAJH;AAKD,KARH;;AAUA,QAAMS,aAAa,SAAbA,UAAa,GAAM;AACvB,UAAIC,WAAW,CAAf;AACA,UAAG,CAAC3F,SAAS4F,mBAAT,EAAJ,EAAoC;AAClC,YAAMC,QAAQnF,UAAU,YAAM;AAC5BiF;AACA,cAAG3F,SAAS4F,mBAAT,EAAH,EAAmC;AACjClF,sBAAUoF,MAAV,CAAiBD,KAAjB;AACA3C;AACD;AACD,cAAGyC,WAAWxD,yBAAX,IAAwCD,kBAA3C,EAA+D;AAC7DxB,sBAAUoF,MAAV,CAAiBD,KAAjB;AACA,kBAAMrE,2EAAyEU,kBAAzE,QAAN;AACD;AACF,SAVa,EAUXC,yBAVW,CAAd;AAWD,OAZD,MAaK;AACHe;AACD;AACF,KAlBD;;AAoBA;;;;;;;AAOA7B,WAAO,UAAC0E,KAAD,EAAQjG,KAAR,EAAkB;AACvBE,eAASgG,qBAAT,CAA+BD,MAAM,CAAN,CAA/B;AACA;AACA;AACA;AACAjG,YAAMmG,QAAN;AACAF,YAAMG,MAAN;AACD,KAPD;;AASAhF,WAAOiF,GAAP,CAAW,UAAX,EAAuB,YAAM;AAC3BC;AACApG,eAASqG,MAAT,CAAgB,YAAhB,EAA8BC,YAA9B;AACD,KAHD;;AAKAtG,aAASuG,IAAT,CAAc,YAAd,EAA4BD,YAA5B;;AAEAZ;;AAEA;;AAEA,aAASc,SAAT,CAAmBC,GAAnB,EAAwB;AACtB,aAAQA,OAAOA,QAAQ5D,SAAhB,IAA8B3B,OAAOwF,WAA5C;AACD;;AAED,aAASC,UAAT,GAAsB;AACpB3G,eAASuG,IAAT,CAAc,QAAd,EAAwBK,sBAAxB;AACA5G,eAASuG,IAAT,CAAc,QAAd,EAAwBK,sBAAxB;AACD;;AAED,aAASR,YAAT,GAAwB;AACtBpG,eAASqG,MAAT,CAAgB,QAAhB,EAA0BO,sBAA1B;AACA5G,eAASqG,MAAT,CAAgB,QAAhB,EAA0BO,sBAA1B;AACD;;AAED,aAASzD,MAAT,GAAkB;AAChBnD,eAAS6G,eAAT;AACA7G,eAAS8G,kBAAT;AACA,UAAIC,UAAUpC,MAAd,EAAsB;AACpB/B,qBAAamE,UAAU,CAAV,CAAb;AACD;AACD/D,aAAOgE,KAAP,CAAapE,UAAb;AACAiB,6BAAuBzB,UAAvB,EAAmC,UAAnC;AACAyB,6BAAuBzB,UAAvB,EAAmC,UAAnC;AACAc;AACD;;AAED,aAAS+D,gBAAT,CAA0BC,OAA1B,EAAmC;AACjC,aAAOA,QAAQxH,OAAR,CAAgByH,MAAhB,MAA4BD,QAAQxH,OAAR,CAAgB,CAAhB,EAAmB0H,YAAtD;AACD;;AAED,aAASC,iBAAT,CAA2BH,OAA3B,EAAoC;AAClC,UAAID,iBAAiBC,OAAjB,CAAJ,EAA+B;AAC7BlE,eAAO/C,OAAP,CAAe,UAACoF,IAAD,EAAU;AACvB,cAAI,OAAOA,KAAKiC,2BAAZ,KAA4C,UAAhD,EAA4D;AAC1DjC,iBAAKiC,2BAAL;AACA,mBAAOjC,KAAKiC,2BAAZ;AACD;AACF,SALD;AAMA,YAAI,CAACxE,QAAQ6B,MAAb,EAAqB;AACnBlE,mBAAS;AAAA,mBAAMyC,UAAN;AAAA,WAAT;AACD;AACF;AACF;;AAED,aAASqE,oBAAT,CAA8BL,OAA9B,EAAuCM,WAAvC,EAAoD;AAClDC,oBAAcP,OAAd,EAAuBM,WAAvB,EAAoCxH,SAAS0H,aAA7C;AACA,UAAI,CAACT,iBAAiBC,OAAjB,CAAL,EAAgC;AAC9BA,gBAAQI,2BAAR,GAAsCJ,QAAQpH,KAAR,CAAc6H,MAAd,CAAqB;AAAA,iBAAMN,kBAAkBH,OAAlB,CAAN;AAAA,SAArB,CAAtC;AACD;AACDnE,sBAAgB6E,WAAhB,CAA4BV,OAA5B,EALkD,CAKZ;AACvC;;AAED,aAASO,aAAT,CAAuBP,OAAvB,EAAgCM,WAAhC,EAA6CE,aAA7C,EAA4D;AAC1D,UAAIG,WAAW,IAAf;AACA,UAAMC,UAAWN,cAAc,CAAf,GAAoBxE,OAAOwE,cAAc,CAArB,EAAwB9H,OAA5C,GAAsDqI,SAAtE;AACA1G,aAAO,UAAC0E,KAAD,EAAQjG,KAAR,EAAkB;AACvB+H,mBAAWH,cAAc3B,KAAd,EAAqB+B,OAArB,CAAX;AACAZ,gBAAQxH,OAAR,GAAkBqG,KAAlB;AACAmB,gBAAQpH,KAAR,GAAgBA,KAAhB;AACAA,cAAMuC,QAAN,IAAkB6E,QAAQ7B,IAA1B;AACD,OALD;AAMA;AACA,UAAIpC,QAAQ+E,SAAZ,EAAuB;AACrB,YAAMC,gBAAgBf,QAAQpH,KAAR,CAAcoI,qBAApC;AACA,YAAID,iBAAiBA,cAAcE,OAAnC,EAA4C;AAC1ClF,kBAAQ+E,SAAR,CAAkBd,QAAQpH,KAA1B,EAAiCoH,QAAQxH,OAAzC;AACD,SAFD,MAEO;AACLwH,kBAAQpH,KAAR,CAAcoI,qBAAd,GAAsC;AACpCE,oBAAQ;AAAA,qBAAMnF,QAAQ+E,SAAR,CAAkBd,QAAQpH,KAA1B,EAAiCoH,QAAQxH,OAAzC,CAAN;AAAA,aAD4B;AAEpCI,mBAAOoH,QAAQpH;AAFqB,WAAtC;AAID;AACF;AACD,aAAO+H,QAAP;AACD;;AAED,aAASQ,SAAT,GAAqB;AACnB,UAAIR,WAAW,EAAf;AACA,UAAMS,gBAAgB,EAAtB;AACA,UAAMC,cAAc,EAApB;AACA,UAAMC,WAAW,EAAjB;;AAEAxF,aAAO/C,OAAP,CAAe,UAACiH,OAAD,EAAUuB,CAAV,EAAgB;AAC7B,gBAAQvB,QAAQwB,EAAhB;AACE,eAAK,SAAL;AACEJ,0BAAcK,OAAd,CAAsBzB,OAAtB;AACA;AACF,eAAK,QAAL;AACEK,iCAAqBL,OAArB,EAA8BuB,CAA9B;AACAvB,oBAAQwB,EAAR,GAAa,MAAb;AACAF,qBAASpE,IAAT,CAAc8C,OAAd;AACA;AACF,eAAK,QAAL;AACEW,uBAAWA,SAASe,MAAT,CAAgBnB,cAAcP,OAAd,EAAuBuB,CAAvB,EAA0BzI,SAAS6I,qBAAnC,CAAhB,CAAX;AACA3B,oBAAQwB,EAAR,GAAa,MAAb;AACAF,qBAASpE,IAAT,CAAc8C,OAAd;AACA;AACF,eAAK,QAAL;AACEqB,wBAAYnE,IAAZ,CAAiB8C,OAAjB;AAfJ;AAiBD,OAlBD;;AAoBAqB,kBAAYtI,OAAZ,CAAoB,UAACiH,OAAD;AAAA,eAAaW,WAAWA,SAASe,MAAT,CAAgB5I,SAAS8I,UAAT,CAAoB5B,OAApB,CAAhB,CAAxB;AAAA,OAApB;;AAEA,UAAIoB,cAAc3D,MAAlB,EACE2D,cAAcrI,OAAd,CAAsB,UAACiH,OAAD,EAAa;AACjCK,6BAAqBL,OAArB;AACAA,gBAAQwB,EAAR,GAAa,MAAb;AACD,OAHD;;AAKF1F,aAAO/C,OAAP,CAAe,UAACoF,IAAD,EAAOoD,CAAP;AAAA,eAAapD,KAAKvF,KAAL,CAAWiJ,MAAX,GAAoB/F,OAAOwC,KAAP,GAAeiD,CAAhD;AAAA,OAAf;;AAEA,aAAO;AACLO,mBAAWV,aADN;AAELW,iBAASV,WAFJ;AAGLC,kBAAUA,QAHL;AAILU,kBAAUrB;AAJL,OAAP;AAOD;;AAED,aAASsB,cAAT,CAAwB1C,GAAxB,EAA6B2C,OAA7B,EAAsC;AACpC;AACA,UAAIA,QAAQF,QAAR,CAAiBvE,MAArB,EAA6B;AAC3BhE,WAAG0I,GAAH,CAAOD,QAAQF,QAAf,EAAyBI,IAAzB,CAA8B,YAAM;AAClCtJ,mBAAS8E,cAAT;AACA5B,mBAASuD,GAAT;AACD,SAHD;AAID,OALD,MAKO;AACLzG,iBAAS8E,cAAT;AACD;AACF;;AAED,aAASyE,YAAT,CAAsB9C,GAAtB,EAA2B2C,OAA3B,EAAoC;AAClC,UAAIpJ,SAASwJ,gBAAT,EAAJ,EAAiC;AAC/B,YAAI,CAACJ,OAAD,IAAYpG,OAAOyG,eAAP,CAAuBL,QAAQZ,QAA/B,IAA2C,CAA3D,EAA8D;AAC5D;AACA,cAAI1F,QAAQsB,IAAR,CAAa,IAAb,MAAuB,CAA3B,EAA8B;AAC5BnB,oBAAQyG,OAAR,CAAgB,IAAhB;AACAC,kBAAMlD,GAAN;AACD;AACF;AACF,OARD,MAQO,IAAIzG,SAAS4J,aAAT,EAAJ,EAA8B;AACnC,YAAK,CAACR,OAAD,IAAYpG,OAAOyG,eAAP,CAAuBL,QAAQJ,SAA/B,IAA4C,CAAzD,IAA+DlG,QAAQ,CAAR,CAAnE,EAA+E;AAC7E;AACA;AACA;AACA,cAAIA,QAAQsB,IAAR,CAAa,KAAb,MAAwB,CAA5B,EAA+B;AAC7BnB,oBAAQyG,OAAR,CAAgB,IAAhB;AACAC,kBAAMlD,GAAN;AACD;AACF;AACF;AACF;;AAED,aAASoD,cAAT,GAA0B;AACxB,UAAMT,UAAUf,WAAhB;;AAEA;AACA,OAACnH,OAAO4I,OAAR,IAAmB,CAACtJ,WAAWsJ,OAA/B,IAA0C5I,OAAO6I,OAAP,EAA1C;;AAEAX,cAAQZ,QAAR,CAAiBvI,OAAjB,CAAyB;AAAA,eAAK8C,gBAAgBiH,WAAhB,CAA4BC,CAA5B,CAAL;AAAA,OAAzB;AACAb,cAAQJ,SAAR,CAAkB/I,OAAlB,CAA0B;AAAA,eAAK8C,gBAAgBiH,WAAhB,CAA4BC,CAA5B,CAAL;AAAA,OAA1B;AACA,aAAOb,OAAP;AACD;;AAED,aAASlG,QAAT,CAAkBuD,GAAlB,EAAuB;AACrB,UAAI,CAACA,GAAL,EAAU;AAAE;AACV3D,kBAAU,EAAV;AACA2D,cAAM,EAAE5D,SAAR;AACD;;AAED,UAAMuG,UAAUS,gBAAhB;;AAEA,UAAIrD,UAAUC,GAAV,CAAJ,EAAoB;AAClB;AACD;;AAED0C,qBAAe1C,GAAf,EAAoB2C,OAApB;AACAG,mBAAa9C,GAAb;;AAEA,UAAI,CAAC3D,QAAQ6B,MAAb,EAAqB;AACnB1B,gBAAQiH,mBAAR;AACD;AACF;;AAED,aAASC,kBAAT,CAA4B1D,GAA5B,EAAiC;AAC/B,UAAM2C,UAAUS,gBAAhB;;AAEA7J,eAASoK,cAAT,CAAwBhB,OAAxB;;AAEA,UAAI5C,UAAUC,GAAV,CAAJ,EAAoB;AAClB;AACD;;AAED0C,qBAAe1C,GAAf,EAAoB2C,OAApB;AACAzF;AACA4F,mBAAa9C,GAAb,EAAkB2C,OAAlB;AACAtG,cAAQuH,KAAR;;AAEA,UAAIvH,QAAQ6B,MAAZ,EACEgF,MAAMlD,GAAN,EADF,KAEK;AACHxD,gBAAQyG,OAAR,CAAgB,KAAhB;AACA/C;AACA1D,gBAAQiH,mBAAR;AACD;AACF;;AAED,aAASP,KAAT,CAAelD,GAAf,EAAoB;AAClB,UAAI3D,QAAQ,CAAR,CAAJ,EAAgB;AAAC;AACf,YAAIE,OAAO2B,MAAP,IAAiB,CAAC3E,SAASwJ,gBAAT,EAAtB,EAAmD;AACjDW,6BAAmB1D,GAAnB;AACD,SAFD,MAEO;AACLzB,oBAAU,UAACpD,MAAD,EAAY;AACpB,gBAAI4E,UAAUC,GAAV,CAAJ,EAAoB;AAClB;AACD;;AAED,gBAAI7E,OAAO+C,MAAP,GAAgBnC,UAApB,EAAgC;AAC9BQ,qBAAOsH,GAAP,GAAa,IAAb;AACD;;AAED,gBAAI1I,OAAO+C,MAAP,GAAgB,CAApB,EAAuB;AACrB3E,uBAASuK,OAAT;AACAvH,qBAAOoC,MAAP,CAAcxD,MAAd;AACD;;AAEDuI,+BAAmB1D,GAAnB;AACD,WAfD;AAgBD;AACF,OArBD,MAqBO;AAAG;AACR,YAAIzD,OAAO2B,MAAP,IAAiB,CAAC3E,SAAS4J,aAAT,EAAtB,EAAgD;AAC9CO,6BAAmB1D,GAAnB;AACD,SAFD,MAEO;AACLlB,wBAAc,UAAC3D,MAAD,EAAY;AACxB,gBAAI4E,UAAUC,GAAV,CAAJ,EAAoB;AAClB;AACD;;AAED,gBAAI7E,OAAO+C,MAAP,GAAgBnC,UAApB,EAAgC;AAC9BQ,qBAAOwH,GAAP,GAAa,IAAb;AACA;AACD;;AAED,gBAAI5I,OAAO+C,MAAP,GAAgB,CAApB,EAAuB;AACrB,kBAAI3B,OAAO2B,MAAX,EAAmB;AACjB3E,yBAASyK,UAAT;AACD;AACDzH,qBAAOyC,OAAP,CAAe7D,MAAf;AACD;;AAEDuI,+BAAmB1D,GAAnB;AACD,WAlBD;AAmBD;AACF;AACF;;AAED,aAASG,sBAAT,GAAkC;AAChC,UAAI,CAACpG,WAAWsJ,OAAZ,IAAuB,CAAC7G,QAAQyH,SAAhC,IAA6C,CAACzH,QAAQ0H,QAA1D,EAAoE;;AAElEpB,qBAAa1G,SAAb;;AAEA,YAAIC,QAAQ6B,MAAZ,EAAoB;AAClByB;AACD,SAFD,MAEO;AACLnD,kBAAQiH,mBAAR;AACA,WAAChJ,OAAO4I,OAAR,IAAmB5I,OAAO6I,OAAP,EAAnB;AACD;AACF;AACF;;AAED,aAASzD,YAAT,CAAsBsE,KAAtB,EAA6B;AAC3B,UAAI,CAAC3H,QAAQ0H,QAAb,EAAuB;AACrB,YAAME,YAAY7K,SAAS,CAAT,EAAY6K,SAA9B;AACA,YAAMC,OAAO9K,SAAS,CAAT,EAAY+K,YAAZ,GAA2B/K,SAAS,CAAT,EAAYgL,YAApD;;AAEA,YAAKH,cAAc,CAAd,IAAmB,CAAC7H,OAAOwH,GAA5B,IAAqCK,cAAcC,IAAd,IAAsB,CAAC9H,OAAOsH,GAAvE,EAA6E;AAC3EM,gBAAMK,cAAN;AACD;AACF;AACF;AACF;AAEF,CAldoB,CA9BzB,E;;;;;;;;;;;;;;;;;;;ACNA;;;;;;;;;;;IAWqBC,Y;;;;;;;gCAEPxL,O,EAAS;AACnB,UAAIyL,oBAAJ;AAAA,UAAiBC,YAAjB;AAAA,UAAsBC,iBAAtB;AAAA,UAAgCC,iBAAhC;AACA;AACAF,YAAMlM,QAAQQ,OAAR,CAAgB4D,SAAhB,CAA0B8H,GAAhC;;AAEA1L,cAAQ4D,SAAR,CAAkB8H,GAAlB,GAAwB,UAAUG,IAAV,EAAgB7J,KAAhB,EAAuB;AAC7C,YAAI8J,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,IAAI5H,IAAJ,CAASgI,IAAT,EAAeD,IAAf,EAAqB7J,KAArB,CAAP;AACD;AACF,OAND;;AAQA;AACA4J,iBAAW,kBAACM,GAAD;AAAA,eAASA,OAAOA,IAAIC,QAAX,IAAuBD,IAAIE,QAA3B,IAAuCF,IAAIG,KAA3C,IAAoDH,IAAII,WAAjE;AAAA,OAAX;;AAEA,eAASC,QAAT,CAAkBT,IAAlB,EAAwBU,SAAxB,EAAmCxK,KAAnC,EAA0C;AACxC,YAAI+J,OAAOD,KAAK,CAAL,CAAX;;AADwC,iDAET;AAC7BW,eAAK,CACH,WADG,EAEH,aAFG,EAGH,YAHG,CADwB;AAM7BC,gBAAM,CACJ,YADI,EAEJ,aAFI,EAGJ,WAHI;AANuB,UAW7BF,SAX6B,CAFS;AAAA,YAEnCG,MAFmC;AAAA,YAE3BC,IAF2B;AAAA,YAErBC,QAFqB;;AAexC,YAAMC,iBAAiB,OAAO9K,KAAP,KAAiB,WAAxC;AACA,YAAI4J,SAASG,IAAT,CAAJ,EAAoB;AAClB,cAAIe,cAAJ,EAAoB;AAClB,mBAAOf,KAAKQ,QAAL,CAAcT,KAAKe,QAAL,EAAe/I,IAAf,CAAoBgI,IAApB,CAAd,EAAyC9J,KAAzC,CAAP;AACD;AACD,iBAAQ4K,QAAQb,IAAT,GAAiBA,KAAKa,IAAL,CAAjB,GAA8Bb,KAAKI,QAAL,CAAcY,eAAd,CAA8BJ,MAA9B,CAArC;AACD,SALD,MAKO;AACL,cAAIG,cAAJ,EAAoB;AAClBf,iBAAKY,MAAL,IAAe3K,KAAf;AACD;AACD,iBAAO+J,KAAKY,MAAL,CAAP;AACD;AACF;;AAED,UAAI9M,OAAOmN,gBAAX,EAA6B;AAC3BrB,mBAAW,kBAACI,IAAD;AAAA,iBAAUlM,OAAOmN,gBAAP,CAAwBjB,IAAxB,EAA8B,IAA9B,CAAV;AAAA,SAAX;AACAN,sBAAc,qBAACM,IAAD,EAAO/J,KAAP;AAAA,iBAAiBiL,WAAWjL,KAAX,CAAjB;AAAA,SAAd;AACD,OAHD,MAGO;AACL2J,mBAAW,kBAACI,IAAD;AAAA,iBAAUA,KAAKmB,YAAf;AAAA,SAAX;AACAzB,sBAAc,qBAACM,IAAD,EAAO/J,KAAP,EAAiB;AAC7B,cAAI0K,aAAJ;AAAA,cAAUxK,eAAV;AAAA,cAAkBiL,WAAlB;AAAA,cAAsBC,eAAtB;AAAA,cAA8BnB,cAA9B;AACA,cAAIoB,YAAY,sCAAsCC,MAAtD;AACA,cAAIC,YAAY,IAAIC,MAAJ,CAAW,OAAOH,SAAP,GAAmB,iBAA9B,EAAiD,GAAjD,CAAhB;;AAEA,cAAI,CAACE,UAAUE,IAAV,CAAezL,KAAf,CAAL,EAA4B;AAC1B,mBAAOiL,WAAWjL,KAAX,CAAP;AACD;;AAED;AACAiK,kBAAQF,KAAKE,KAAb;AACAS,iBAAOT,MAAMS,IAAb;AACAS,eAAKpB,KAAK2B,YAAV;AACAN,mBAASD,MAAMA,GAAGT,IAAlB;AACA,cAAIS,EAAJ,EAAQ;AACNA,eAAGT,IAAH,GAAUT,MAAMS,IAAhB;AACD;AACD;AACAT,gBAAMS,IAAN,GAAa1K,KAAb;AACAE,mBAAS+J,MAAM0B,SAAf;AACA1B,gBAAMS,IAAN,GAAaA,IAAb;AACA,cAAIU,MAAJ,EAAY;AACVD,eAAGT,IAAH,GAAUU,MAAV;AACD;AACD,iBAAOlL,MAAP;AACD,SAzBD;AA0BD;;AAED,eAAS0L,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,iBAAO3B,SAASY,eAAT,CAAyB,EAACtF,QAAQ,cAAT,EAAyBiH,OAAO,aAAhC,GAA+Cb,OAA/C,CAAzB,CAAP;;AAEA,iBAAO;AACLC,kBAAMA,IADD;AAEL7K,qBAAS,CAFJ;AAGL0L,oBAAQ,CAHH;AAILC,oBAAQ;AAJH,WAAP;AAMD;;AAED;;AAdsC,mDAmBlC;AACFF,iBAAO,CACL3C,KAAK8C,WADA,EAEL,MAFK,EAGL,OAHK,CADL;AAMFpH,kBAAQ,CACNsE,KAAK+C,YADC,EAEN,KAFM,EAGN,QAHM;AANN,UAWFjB,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;AAEL7K,mBAASuL,WAAWC,QAFf;AAGLE,kBAAQZ,UAAUC,OAHb;AAILY,kBAAQN,UAAUC;AAJb,SAAP;AAMD;;AAED,eAASQ,cAAT,CAAwBhD,IAAxB,EAA8BS,SAA9B,EAAyCqB,OAAzC,EAAkD;AAChD,YAAIM,sBAAJ;AAAA,YAAmBjM,eAAnB;;AAEA,YAAI8M,eAAepB,gBAAgB7B,IAAhB,EAAsBS,SAAtB,CAAnB;;AAEA,YAAIwC,aAAalB,IAAb,GAAoB,CAAxB,EAA2B;AACzB,iBAAO;AACLA,kBAAMkB,aAAalB,IAAb,GAAoBkB,aAAa/L,OAAjC,GAA2C+L,aAAaL,MADzD;AAELM,mBAAOD,aAAalB,IAFf;AAGLoB,uBAAWF,aAAalB,IAAb,GAAoBkB,aAAaJ;AAHvC,YAILf,OAJK,CAAP;AAKD;;AAED;AACAM,wBAAgBxC,SAASI,IAAT,CAAhB;AACA7J,iBAASiM,cAAc3B,SAAd,CAAT;;AAEA,YAAItK,SAAS,CAAT,IAAcA,WAAW,IAA7B,EAAmC;AACjCA,mBAAS6J,KAAKE,KAAL,CAAWO,SAAX,KAAyB,CAAlC;AACD;;AAED;AACAtK,iBAAS+K,WAAW/K,MAAX,KAAsB,CAA/B;;AAEA,eAAO;AACL4L,gBAAM5L,SAAS8M,aAAa/L,OAAtB,GAAgC+L,aAAaL,MAD9C;AAELM,iBAAO/M,MAFF;AAGLgN,qBAAWhN,SAAS8M,aAAa/L,OAAtB,GAAgC+L,aAAaL,MAA7C,GAAsDK,aAAaJ;AAHzE,UAILf,OAJK,CAAP;AAKD;;AAED;AACA,aAAOrO,QAAQe,OAAR,CAAgB;AACrB4O,cADqB,kBACdC,OADc,EACL;AACd,cAAI5O,QAAJ,EAAcuL,IAAd,EAAoBhD,CAApB,EAAuBsG,CAAvB,EAA0BC,MAA1B,EAAkCC,GAAlC,EAAuCzD,IAAvC;AACAA,iBAAO,IAAP;AACAC,iBAAOD,KAAK,CAAL,CAAP;AACAwD,mBAASxD,KAAKwD,MAAL,EAAT;AACA9O,qBAAW8O,OAAOE,QAAP,EAAX;AACA,cAAIhP,SAAS,CAAT,MAAgBuL,IAApB,EAA0B;AACxB,mBAAOuD,OAAOvJ,OAAP,CAAeqJ,OAAf,CAAP;AACD,WAFD,MAEO;AACL,iBAAKrG,IAAIsG,IAAI,CAAR,EAAWE,MAAM/O,SAASyE,MAAT,GAAkB,CAAxC,EAA2C,KAAKsK,GAAL,GAAWF,KAAKE,GAAhB,GAAsBF,KAAKE,GAAtE,EAA2ExG,IAAI,KAAKwG,GAAL,GAAW,EAAEF,CAAb,GAAiB,EAAEA,CAAlG,EAAqG;AACnG,kBAAI7O,SAASuI,CAAT,MAAgBgD,IAApB,EAA0B;AACxBvM,wBAAQQ,OAAR,CAAgBQ,SAASuI,IAAI,CAAb,CAAhB,EAAiC0G,KAAjC,CAAuCL,OAAvC;AACA;AACD;AACF;AACD,kBAAM,IAAItN,KAAJ,CAAU,2BAA2BiK,KAAK2D,SAA1C,CAAN;AACD;AACF,SAlBoB;AAmBrBjI,cAnBqB,kBAmBbzF,KAnBa,EAmBP;AACZ,cAAI8J,IAAJ;AACAA,iBAAO,IAAP;AACA,cAAI,OAAO9J,KAAP,KAAiB,WAArB,EAAkC;AAChC,gBAAIsC,OAAOC,SAAP,CAAiBvC,KAAjB,CAAJ,EAA6B;AAC3BA,sBAAQA,QAAQ,IAAhB;AACD;AACD,mBAAO0J,IAAI5H,IAAJ,CAASgI,IAAT,EAAe,QAAf,EAAyB9J,KAAzB,CAAP;AACD,WALD,MAKO;AACL,mBAAO+M,eAAe,KAAK,CAAL,CAAf,EAAwB,QAAxB,EAAkC,MAAlC,CAAP;AACD;AACF,SA9BoB;AA+BrBY,mBA/BqB,uBA+BTC,MA/BS,EA+BD;AAClB,iBAAOb,eAAe,KAAK,CAAL,CAAf,EAAwB,QAAxB,EAAkCa,SAAS,WAAT,GAAuB,OAAzD,CAAP;AACD,SAjCoB;AAkCrBC,kBAlCqB,sBAkCVD,MAlCU,EAkCF;AACjB,iBAAOb,eAAe,KAAK,CAAL,CAAf,EAAwB,OAAxB,EAAiCa,SAAS,WAAT,GAAuB,OAAxD,CAAP;AACD,SApCoB;;;AAsCrB;;;AAGAE,cAzCqB,kBAyCd9N,KAzCc,EAyCP;AACZ,cAAI+N,gBAAJ;AAAA,cAAaC,YAAb;AACA,cAAIlE,OAAO,IAAX;AACA,cAAImE,MAAM;AACRxD,iBAAK,CADG;AAERC,kBAAM;AAFE,WAAV;AAIA,cAAIX,OAAOD,KAAK,CAAL,CAAX;AACA,cAAIoE,MAAMnE,QAAQA,KAAKoE,aAAvB;;AAEA,cAAI9I,UAAUpC,MAAd,EAAsB;AACpB,gBAAIjD,UAAUqG,SAAd,EAAyB;AACvB,qBAAOyD,IAAP;AACD;AACD;AACA,kBAAM,IAAIhK,KAAJ,CAAU,yCAAV,CAAN;AACD;;AAED,cAAI,CAACoO,GAAL,EAAU;AACR;AACD;;AAEDH,oBAAUG,IAAInD,eAAd;;AAEA;;AAEA,cAAIhB,KAAKqE,qBAAL,IAA8B,IAAlC,EAAwC;AACtCH,kBAAMlE,KAAKqE,qBAAL,EAAN;AACD;;AAEDJ,gBAAME,IAAIG,WAAJ,IAAmBH,IAAII,YAA7B;;AAEA,iBAAO;AACL7D,iBAAKwD,IAAIxD,GAAJ,IAAWuD,IAAIO,WAAJ,IAAmBR,QAAQ5E,SAAtC,KAAoD4E,QAAQS,SAAR,IAAqB,CAAzE,CADA;AAEL9D,kBAAMuD,IAAIvD,IAAJ,IAAYsD,IAAIS,WAAJ,IAAmBV,QAAQW,UAAvC,KAAsDX,QAAQY,UAAR,IAAsB,CAA5E;AAFD,WAAP;AAID,SA7EoB;AA8ErBxF,iBA9EqB,qBA8EXnJ,KA9EW,EA8EJ;AACf,iBAAOuK,SAAS,IAAT,EAAe,KAAf,EAAsBvK,KAAtB,CAAP;AACD,SAhFoB;AAiFrB0O,kBAjFqB,sBAiFV1O,KAjFU,EAiFH;AAChB,iBAAOuK,SAAS,IAAT,EAAe,MAAf,EAAuBvK,KAAvB,CAAP;AACD;AAnFoB,OAAhB,EAoFJ,UAACA,KAAD,EAAQ4O,GAAR,EAAgB;AACjB,YAAI,CAAC5Q,QAAQ4D,SAAR,CAAkBgN,GAAlB,CAAL,EAA6B;AAC3B,iBAAO5Q,QAAQ4D,SAAR,CAAkBgN,GAAlB,IAAyB5O,KAAhC;AACD;AACF,OAxFM,CAAP;AAyFD;;;;;;kBAhQkBwJ,Y;;;;;;;;;;;;;;;;;ACXrB,IAAMqF,iBAAiB,mBAAvB;;AAEA,SAASC,UAAT,CAAoBC,KAApB,EAA2BC,QAA3B,EAAqCC,KAArC,EAA4CxL,KAA5C,EAAmD;AACjD,MAAG,gBAAgBsL,KAAnB,EAA0B;AACxBA,UAAMG,UAAN,CAAiBF,WAAW,GAAX,GAAiBC,KAAjB,GAAyB,GAA1C,EAA+CxL,KAA/C;AACD,GAFD,MAGK,IAAG,aAAasL,KAAhB,EAAuB;AAC1BA,UAAMI,OAAN,CAAcH,QAAd,EAAwBC,KAAxB,EAA+BxL,KAA/B;AACD;AACF;;IAEoB2L,e;AAEnB,2BAAYvQ,SAAZ,EAAuBI,EAAvB,EAA2B;AAAA;;AACzB,SAAKoQ,QAAL,GAAiBxQ,UAAUyQ,GAAV,IAAiBzQ,UAAUyQ,GAAV,CAAc,UAAd,CAAlB,GAA+CzQ,UAAUkD,GAAV,CAAc,UAAd,CAA/C,GAA2E,IAA3F;AACA,SAAKwN,2BAAL,GAAmC/R,QAAQgS,OAAR,CAAgBC,KAAhB,KAA0B,CAA1B,IAA+BjS,QAAQgS,OAAR,CAAgBE,KAAhB,GAAwB,CAA1F;AACA,SAAKzQ,EAAL,GAAUA,EAAV;AACA6P,eAAW3E,SAASwF,WAAT,CAAqB,CAArB,CAAX,EAAoC,MAAMd,cAA1C,EAA0D,eAA1D;AACD;;;;gCAEWrJ,O,EAAS;AACnBA,cAAQxH,OAAR,CAAgB4R,QAAhB,CAAyBf,cAAzB;AACD;;;gCAEWrJ,O,EAAS;AACnBA,cAAQxH,OAAR,CAAgB6R,WAAhB,CAA4BhB,cAA5B;AACD;;;kCAEaiB,U,EAAYC,e,EAAiB;AACzCA,sBAAgBtC,KAAhB,CAAsBqC,UAAtB;AACA,aAAO,EAAP;AACD;;;kCAEatK,O,EAAS;AACrBA,cAAQxH,OAAR,CAAgBwG,MAAhB;AACAgB,cAAQpH,KAAR,CAAcmG,QAAd;AACA,aAAO,EAAP;AACD;;;0CAEqBuL,U,EAAYC,e,EAAiB;AACjD,UAAI,CAAC,KAAKV,QAAV,EAAoB;AAClB,eAAO,KAAKrJ,aAAL,CAAmB8J,UAAnB,EAA+BC,eAA/B,CAAP;AACD;;AAED,UAAI,KAAKR,2BAAT,EAAsC;AACpC,YAAMS,WAAW,KAAK/Q,EAAL,CAAQgR,KAAR,EAAjB;AACA;AACA,aAAKZ,QAAL,CAAca,KAAd,CAAoBJ,UAApB,EAAgC,IAAhC,EAAsCC,eAAtC,EAAuD;AAAA,iBAAMC,SAASG,OAAT,EAAN;AAAA,SAAvD;;AAEA,eAAO,CAACH,SAASI,OAAV,CAAP;AACD;;AAED;AACA,aAAO,CAAC,KAAKf,QAAL,CAAca,KAAd,CAAoBJ,UAApB,EAAgC,IAAhC,EAAsCC,eAAtC,CAAD,CAAP;AACD;;;0CAEqBvK,O,EAAS;AAC7B,UAAI,CAAC,KAAK6J,QAAV,EAAoB;AAClB,eAAO,KAAKgB,aAAL,CAAmB7K,OAAnB,CAAP;AACD;;AAED,UAAI,KAAK+J,2BAAT,EAAsC;AACpC,YAAMS,WAAW,KAAK/Q,EAAL,CAAQgR,KAAR,EAAjB;AACA,aAAKZ,QAAL,CAAciB,KAAd,CAAoB9K,QAAQxH,OAA5B,EAAqC,YAAM;AACzCwH,kBAAQpH,KAAR,CAAcmG,QAAd;AACA,iBAAOyL,SAASG,OAAT,EAAP;AACD,SAHD;;AAKA,eAAO,CAACH,SAASI,OAAV,CAAP;AACD;;AAED,aAAO,CAAE,KAAKf,QAAL,CAAciB,KAAd,CAAoB9K,QAAQxH,OAA5B,CAAD,CAAuC4J,IAAvC,CAA4C;AAAA,eAAMpC,QAAQpH,KAAR,CAAcmG,QAAd,EAAN;AAAA,OAA5C,CAAD,CAAP;AACD;;;;;;kBA7DkB6K,e;;;;;;;;;;;;kBCXGmB,Y;AAAT,SAASA,YAAT,CAAsBlP,eAAtB,EAAuCP,UAAvC,EAAmDI,UAAnD,EAA+D;AAC5E,MAAMI,SAASK,OAAO6O,MAAP,CAAcC,MAAM7O,SAApB,CAAf;;AAEAD,SAAO+O,MAAP,CAAcpP,MAAd,EAAsB;AACpBqP,UAAM7P,UADc;;AAGpBwE,SAHoB,iBAGdpE,UAHc,EAGF;AAChBI,aAAOkD,MAAP,CAAc,CAAd,EAAiBlD,OAAO2B,MAAxB;AACA3B,aAAOsH,GAAP,GAAa,KAAb;AACAtH,aAAOwH,GAAP,GAAa,KAAb;AACAxH,aAAOwC,KAAP,GAAe5C,UAAf;AACAI,aAAOkC,IAAP,GAActC,UAAd;AACAI,aAAOsP,QAAP,GAAkB1P,UAAlB;AACAI,aAAOuP,QAAP,GAAkB3P,UAAlB;AACAI,aAAOwP,YAAP,GAAsB,IAAtB;AACAxP,aAAOyP,YAAP,GAAsB,IAAtB;AACD,KAbmB;AAepBrN,UAfoB,kBAebsN,KAfa,EAeN;AACZA,YAAMzS,OAAN,CAAc,UAACoF,IAAD,EAAU;AACtB,UAAErC,OAAOkC,IAAT;AACAlC,eAAO2P,MAAP,CAAc,QAAd,EAAwBtN,IAAxB;AACD,OAHD;AAIArC,aAAOuP,QAAP,GAAkBvP,OAAOsH,GAAP,GAAatH,OAAOkC,IAAP,GAAc,CAA3B,GAA+BzC,KAAKC,GAAL,CAASM,OAAOkC,IAAP,GAAc,CAAvB,EAA0BlC,OAAOuP,QAAjC,CAAjD;AACD,KArBmB;AAuBpB9M,WAvBoB,mBAuBZiN,KAvBY,EAuBL;AACbA,YAAME,OAAN,GAAgB3S,OAAhB,CAAwB,UAACoF,IAAD,EAAU;AAChC,UAAErC,OAAOwC,KAAT;AACAxC,eAAO2P,MAAP,CAAc,SAAd,EAAyBtN,IAAzB;AACD,OAHD;AAIArC,aAAOsP,QAAP,GAAkBtP,OAAOwH,GAAP,GAAaxH,OAAOsP,QAAP,GAAkBtP,OAAOwC,KAAtC,GAA8C/C,KAAKoQ,GAAL,CAAS7P,OAAOwC,KAAhB,EAAuBxC,OAAOsP,QAA9B,CAAhE;AACD,KA7BmB;;;AA+BpB;;;;;;AAMAK,UArCoB,kBAqCbG,SArCa,EAqCFzN,IArCE,EAqCI0N,KArCJ,EAqCW;AAC7B,UAAM7L,UAAU;AACd7B,cAAMA;AADQ,OAAhB;;AAIA,UAAIyN,YAAY,CAAZ,KAAkB,CAAtB,EAAyB;AAAC;AACxB5L,gBAAQwB,EAAR,GAAa,QAAb;AACA1F,eAAOgQ,MAAP,CAAcF,SAAd,EAAyB,CAAzB,EAA4B5L,OAA5B;AACA,YAAG6L,KAAH,EAAU;AACR/P,iBAAOwC,KAAP;AACD,SAFD,MAGK;AACHxC,iBAAOkC,IAAP;AACD;AACF,OATD,MASO;AACLgC,gBAAQwB,EAAR,GAAaoK,SAAb;AACA,gBAAQA,SAAR;AACE,eAAK,QAAL;AACE9P,mBAAOoB,IAAP,CAAY8C,OAAZ;AACA;AACF,eAAK,SAAL;AACElE,mBAAO2F,OAAP,CAAezB,OAAf;AACA;AANJ;AAQD;AACF,KA9DmB;;;AAgEpB;AACAhB,UAjEoB,kBAiEb+M,IAjEa,EAiEPC,IAjEO,EAiED;AACjB,UAAIlP,OAAOC,SAAP,CAAiBgP,IAAjB,CAAJ,EAA4B;AAC1B;AACA,aAAK,IAAIxK,IAAIwK,IAAb,EAAmBxK,IAAIyK,IAAvB,EAA6BzK,GAA7B,EAAkC;AAChC1F,0BAAgBgP,aAAhB,CAA8B/O,OAAOyF,CAAP,CAA9B;AACD;AACD,eAAOzF,OAAOgQ,MAAP,CAAcC,IAAd,EAAoBC,OAAOD,IAA3B,CAAP;AACD;AACD;AACAjQ,aAAOgQ,MAAP,CAAchQ,OAAOmQ,OAAP,CAAeF,IAAf,CAAd,EAAoC,CAApC;AACA,UAAGA,KAAKG,GAAL,KAAa,OAAb,IAAwBpQ,OAAOwC,KAAP,KAAiB,KAAK6N,cAAL,EAA5C,EAAmE;AACjE,aAAKC,iBAAL;AACD,OAFD,MAGK;AACH,aAAKC,iBAAL;AACD;AACD,UAAGN,KAAKG,GAAL,KAAa,OAAhB,EAAyB;AACvBpQ,eAAOwC,KAAP;AACD,OAFD,MAGK;AACHxC,eAAOkC,IAAP;AACD;AACD,UAAG,CAAClC,OAAO2B,MAAX,EAAmB;AACjB3B,eAAOwC,KAAP,GAAe,CAAf;AACAxC,eAAOkC,IAAP,GAAc,CAAd;AACD;;AAED,aAAOnC,gBAAgByQ,qBAAhB,CAAsCP,IAAtC,CAAP;AACD,KA7FmB;AA+FpBK,qBA/FoB,+BA+FA;AAClB,UAAGtQ,OAAOwP,YAAP,KAAwB,IAA3B,EAAiC;AAC/B,YAAGxP,OAAOsP,QAAP,GAAkBtP,OAAOwP,YAA5B,EAA0C;AACxCxP,iBAAOwP,YAAP;AACA;AACD;AACD,YAAGxP,OAAOsP,QAAP,KAAoBtP,OAAOwP,YAA9B,EAA4C;AAC1CxP,iBAAOwP,YAAP;AACD;AACF;AACDxP,aAAOsP,QAAP;AACD,KA1GmB;AA4GpBiB,qBA5GoB,+BA4GA;AAClB,UAAGvQ,OAAOyP,YAAP,KAAwB,IAAxB,IAAgCzP,OAAOuP,QAAP,IAAmBvP,OAAOyP,YAA7D,EAA2E;AACzEzP,eAAOyP,YAAP;AACD;AACDzP,aAAOuP,QAAP;AACD,KAjHmB;AAmHpBc,kBAnHoB,4BAmHH;AACf,UAAGrQ,OAAOwP,YAAP,KAAwB,IAA3B,EAAiC;AAC/B,eAAO/P,KAAKoQ,GAAL,CAAS7P,OAAOwP,YAAhB,EAA8BxP,OAAOsP,QAArC,CAAP;AACD;AACD,aAAOtP,OAAOsP,QAAd;AACD,KAxHmB;AA0HpBmB,kBA1HoB,4BA0HH;AACf,UAAGzQ,OAAOyP,YAAP,KAAwB,IAA3B,EAAiC;AAC/B,eAAOhQ,KAAKC,GAAL,CAASM,OAAOyP,YAAhB,EAA8BzP,OAAOuP,QAArC,CAAP;AACD;AACD,aAAOvP,OAAOuP,QAAd;AACD,KA/HmB;AAiIpB9I,mBAjIoB,2BAiIJiK,QAjII,EAiIM;AACxB,UAAI,CAACA,SAAS/O,MAAd,EAAsB;AACpB,eAAO,CAAP;AACD;AACD,UAAIwH,MAAMnI,OAAO2P,SAAjB;AACA,UAAIC,SAAS5P,OAAO6P,iBAApB;AACAH,eAASzT,OAAT,CAAiB,UAACiH,OAAD,EAAa;AAC5B,YAAIA,QAAQxH,OAAR,CAAgB,CAAhB,EAAmB0H,YAAvB,EAAqC;AACnC;AACA+E,gBAAM1J,KAAKoQ,GAAL,CAAS1G,GAAT,EAAcjF,QAAQxH,OAAR,CAAgB8P,MAAhB,GAAyBrD,GAAvC,CAAN;AACAyH,mBAASnR,KAAKC,GAAL,CAASkR,MAAT,EAAiB1M,QAAQxH,OAAR,CAAgB8P,MAAhB,GAAyBrD,GAAzB,GAA+BjF,QAAQxH,OAAR,CAAgB2P,WAAhB,CAA4B,IAA5B,CAAhD,CAAT;AACD;AACF,OAND;AAOA,aAAO5M,KAAKC,GAAL,CAAS,CAAT,EAAYkR,SAASzH,GAArB,CAAP;AACD;AA/ImB,GAAtB;;AAmJAnJ,SAAOgE,KAAP,CAAapE,UAAb;;AAEA,SAAOI,MAAP;AACD,C;;;;;;;;;;;;kBCvJuB8Q,Q;;AAFxB;;;;;;AAEe,SAASA,QAAT,CAAkB/Q,eAAlB,EAAmCC,MAAnC,EAA2CtD,OAA3C,EAAoD6C,kBAApD,EAAwE/B,UAAxE,EAAoFmC,OAApF,EAA6F;AAC1G,MAAIoR,aAAa,IAAjB;AACA,MAAIC,gBAAgB,IAApB;AACA,MAAMhU,WAAWuC,sBAAsBA,mBAAmBvC,QAAzC,GAAoDuC,mBAAmBvC,QAAvE,GAAkFd,QAAQQ,OAAR,CAAgBH,MAAhB,CAAnG;AACA,MAAMQ,YAAYwC,sBAAsBA,mBAAmBxC,SAAzC,GAAqDwC,mBAAmBxC,SAAxE,GAAoFgI,SAAtG;AACA,MAAMjI,QAAQyC,sBAAsBA,mBAAmBzC,KAAzC,GAAiDyC,mBAAmBzC,KAApE,GAA4EU,UAA1F;;AAEAR,WAASoL,GAAT,CAAa;AACX,uBAAmB,MADR;AAEX,kBAAc,MAFH;AAGX,eAAW;AAHA,GAAb;;AAMA,WAAS6I,aAAT,GAAyB;AACvB,WAAOjU,SAASqP,WAAT,KAAyB1M,OAAhC,CADuB,CACkB;AAC1C;;AAEDU,SAAO+O,MAAP,CAAcpS,QAAd,EAAwB;AACtBkU,YADsB,sBACX;AACT,aAAOpU,KAAP;AACD,KAHqB;AAKtBkG,yBALsB,iCAKAmO,QALA,EAKU;AAC9BJ,mBAAa,sBAAYI,QAAZ,CAAb;AACAH,sBAAgB,sBAAYG,QAAZ,CAAhB;AACAzU,cAAQmP,MAAR,CAAekF,WAAWrU,OAA1B;AACAA,cAAQyP,KAAR,CAAc6E,cAActU,OAA5B;AACAqU,iBAAW5M,MAAX,CAAkB,CAAlB;AACA6M,oBAAc7M,MAAd,CAAqB,CAArB;AACD,KAZqB;AActBvB,uBAdsB,iCAcA;AACpB,UAAI,CAAC7F,SAAL,EAAgB;AACd,eAAO,IAAP;AACD;AACD,UAAGA,cAAcC,QAAjB,EAA2B;AACzBA,iBAASoL,GAAT,CAAa,QAAb,EAAuB7L,OAAOmN,gBAAP,CAAwB3M,UAAU,CAAV,CAAxB,EAAsCoH,MAA7D;AACD;AACD,aAAOnH,SAASmH,MAAT,KAAoB,CAA3B;AACD,KAtBqB;AAwBtBiN,iBAxBsB,2BAwBN;AACd,UAAIrJ,eAAe/K,SAAS,CAAT,EAAY+K,YAA/B;AACAA,qBAAeA,gBAAgB,IAAhB,GAAuBA,YAAvB,GAAsC/K,SAAS,CAAT,EAAY6L,QAAZ,CAAqBY,eAArB,CAAqC1B,YAA1F;AACA,aAAOA,eAAeiJ,cAAc7M,MAAd,EAAtB;AACD,KA5BqB;AA8BtBtC,cA9BsB,wBA8BT;AACX,aAAOkP,WAAW5M,MAAX,EAAP;AACD,KAhCqB;AAkCtBkN,oBAlCsB,8BAkCH;AACjB,aAAOrU,SAAS6K,SAAT,KAAuB7K,SAASqP,WAAT,EAA9B;AACD,KApCqB;AAsCtBiF,iBAtCsB,2BAsCN;AACd,aAAOtU,SAAS6K,SAAT,EAAP;AACD,KAxCqB;AA0CtBnD,iBA1CsB,yBA0CR6M,CA1CQ,EA0CLzM,OA1CK,EA0CI;AACxB,aAAO/E,gBAAgB2E,aAAhB,CAA8B6M,CAA9B,EAAiCzM,WAAWiM,WAAWrU,OAAvD,CAAP;AACD,KA5CqB;AA8CtBmJ,yBA9CsB,iCA8CA0L,CA9CA,EA8CGzM,OA9CH,EA8CY;AAChC,aAAO/E,gBAAgB8F,qBAAhB,CAAsC0L,CAAtC,EAAyCzM,WAAWiM,WAAWrU,OAA/D,CAAP;AACD,KAhDqB;AAkDtB8J,oBAlDsB,8BAkDH;AACjB,aAAO,CAACxG,OAAOsH,GAAR,IAAetK,SAASoU,aAAT,KAA2BpU,SAASqU,gBAAT,KAA8BJ,eAA/E;AACD,KApDqB;AAsDtBxJ,cAtDsB,wBAsDT;AACX;AACA,UAAI+J,UAAU,CAAd;AACA,UAAIC,gBAAgB,CAApB;AACA,UAAIC,aAAa,CAAjB;AACA,UAAIC,mBAAmB3U,SAASoU,aAAT,KAA2BpU,SAASqU,gBAAT,EAA3B,GAAyDJ,eAAhF;;AAEA,WAAK,IAAIxL,IAAIzF,OAAO2B,MAAP,GAAgB,CAA7B,EAAgC8D,KAAK,CAArC,EAAwCA,GAAxC,EAA6C;AAC3CiM,qBAAa1R,OAAOyF,CAAP,EAAU/I,OAAV,CAAkB2P,WAAlB,CAA8B,IAA9B,CAAb;AACA,YAAIoF,gBAAgBC,UAAhB,GAA6BC,gBAAjC,EAAmD;AACjD;AACD;AACDX,sBAAcY,KAAd,CAAoBC,GAApB,CAAwB7R,OAAOyF,CAAP,CAAxB;AACAgM,yBAAiBC,UAAjB;AACAF;AACD;;AAED,UAAIA,UAAU,CAAd,EAAiB;AACfxR,eAAOsH,GAAP,GAAa,KAAb;AACAtH,eAAOkD,MAAP,CAAclD,OAAO2B,MAAP,GAAgB6P,OAA9B,EAAuCxR,OAAO2B,MAA9C;AACA3B,eAAOkC,IAAP,IAAesP,OAAf;AACAxU,iBAAS8E,cAAT;AACD;AACF,KA7EqB;AA+EtB8E,iBA/EsB,2BA+EN;AACd,aAAO,CAAC5G,OAAOwH,GAAR,IAAgBxK,SAAS6E,UAAT,KAAwB7E,SAASsU,aAAT,KAA2BL,eAA1E;AACD,KAjFqB;AAmFtB1J,WAnFsB,qBAmFZ;AACR;AACA,UAAIiK,UAAU,CAAd;AACA,UAAIC,gBAAgB,CAApB;AACA,UAAIC,aAAa,CAAjB;AACA,UAAIC,mBAAmB3U,SAASsU,aAAT,KAA2BtU,SAAS6E,UAAT,EAA3B,GAAmDoP,eAA1E;;AAEA,WAAK,IAAIxL,IAAI,CAAb,EAAgBA,IAAIzF,OAAO2B,MAA3B,EAAmC8D,GAAnC,EAAwC;AACtCiM,qBAAa1R,OAAOyF,CAAP,EAAU/I,OAAV,CAAkB2P,WAAlB,CAA8B,IAA9B,CAAb;AACA,YAAIoF,gBAAgBC,UAAhB,GAA6BC,gBAAjC,EAAmD;AACjD;AACD;AACDZ,mBAAWa,KAAX,CAAiBC,GAAjB,CAAqB7R,OAAOyF,CAAP,CAArB;AACAgM,yBAAiBC,UAAjB;AACAF;AACD;;AAED,UAAIA,UAAU,CAAd,EAAiB;AACf;AACA;AACAT,mBAAW5M,MAAX,CAAkB4M,WAAW5M,MAAX,KAAsBsN,aAAxC;AACAzR,eAAOwH,GAAP,GAAa,KAAb;AACAxH,eAAOkD,MAAP,CAAc,CAAd,EAAiBsO,OAAjB;AACAxR,eAAOwC,KAAP,IAAgBgP,OAAhB;AACD;AACF,KA5GqB;AA8GtB1P,kBA9GsB,4BA8GL;AACf,UAAI,CAAC9B,OAAO2B,MAAZ,EAAoB;AAClB;AACD;;AAED;AACA,UAAMmQ,qBAAqB9R,OAAO+R,MAAP,CAAc,UAACC,IAAD,EAAO3P,IAAP;AAAA,eAAgB2P,OAAO3P,KAAK3F,OAAL,CAAa2P,WAAb,CAAyB,IAAzB,CAAvB;AAAA,OAAd,EAAqE,CAArE,CAA3B;;AAEA,UAAI4F,mBAAmB,CAAvB;AAAA,UAA0BC,WAAW,CAArC;AACAnB,iBAAWa,KAAX,CAAiB3U,OAAjB,CAAyB,gBAAQ;AAC/B,YAAGoF,KAAKF,KAAL,GAAanC,OAAOwC,KAAvB,EAA8B;AAC5ByP,8BAAoB5P,KAAK8B,MAAzB;AACA+N;AACD;AACF,OALD;;AAOA,UAAIC,sBAAsB,CAA1B;AAAA,UAA6BC,cAAc,CAA3C;AACApB,oBAAcY,KAAd,CAAoB3U,OAApB,CAA4B,gBAAQ;AAClC,YAAGoF,KAAKF,KAAL,IAAcnC,OAAOkC,IAAxB,EAA8B;AAC5BiQ,iCAAuB9P,KAAK8B,MAA5B;AACAiO;AACD;AACF,OALD;;AAOA,UAAMC,cAAcP,qBAAqBG,gBAArB,GAAwCE,mBAA5D;AACA,UAAMG,oBAAoBD,eAAeH,WAAWE,WAAX,GAAyBpS,OAAO2B,MAA/C,CAA1B;;AAEA;AACA,UAAI4Q,mBAAmBvS,OAAOwP,YAAP,KAAwB,IAAxB,IAAgCxP,OAAOsP,QAAP,GAAkBtP,OAAOwP,YAAhF;AACA,UAAIgD,sBAAsBxS,OAAOyP,YAAP,KAAwB,IAAxB,IAAgCzP,OAAOuP,QAAP,GAAkBvP,OAAOyP,YAAnF;AACA,UAAIgD,sBAAsBF,mBAAmB,CAACvS,OAAOsP,QAAP,GAAkBtP,OAAOwP,YAA1B,IAA0C8C,iBAA7D,GAAiF,CAA3G;AACA,UAAII,yBAAyBF,sBAAsB,CAACxS,OAAOyP,YAAP,GAAsBzP,OAAOuP,QAA9B,IAA0C+C,iBAAhE,GAAoF,CAAjH;;AAEA;AACAvB,iBAAW5M,MAAX,CAAkB8N,mBAAmBQ,mBAArC;AACAzB,oBAAc7M,MAAd,CAAqBgO,sBAAsBO,sBAA3C;AACD,KAlJqB;AAoJtB3Q,sBApJsB,8BAoJHH,mBApJG,EAoJkB;AACtC;AACA,UAAI5B,OAAOwP,YAAP,KAAwB,IAAxB,IAAgCxP,OAAOsP,QAAP,GAAkBtP,OAAOwP,YAA7D,EAA2E;AACzE,YAAImD,OAAO5B,WAAW5M,MAAX,KAAsBvC,mBAAjC;AACA5E,iBAAS6K,SAAT,CAAmB7K,SAAS6K,SAAT,KAAuB8K,IAA1C;AACA,eAAM,CAACA,QAAQ3V,SAAS6K,SAAT,EAAT,IAAiC,CAAvC,EAA0C;AACxCmJ,wBAAc7M,MAAd,CAAqB6M,cAAc7M,MAAd,KAAyBwO,IAA9C;AACA3V,mBAAS6K,SAAT,CAAmB7K,SAAS6K,SAAT,KAAuB8K,IAA1C;AACD;AACF;AACF,KA9JqB;AAgKtBvL,kBAhKsB,0BAgKPhB,OAhKO,EAgKE;AACtB,UAAI,CAACA,QAAQJ,SAAR,CAAkBrE,MAAvB,EACE;AACF,UAAMwC,SAASnE,OAAOyG,eAAP,CAAuBL,QAAQJ,SAA/B,CAAf;AACA,UAAM4M,gBAAgB7B,WAAW5M,MAAX,KAAsBA,MAA5C;AACA,UAAIyO,iBAAiB,CAArB,EAAwB;AACtB7B,mBAAW5M,MAAX,CAAkByO,aAAlB;AACD,OAFD,MAGK;AACH7B,mBAAW5M,MAAX,CAAkB,CAAlB;AACAnH,iBAAS6K,SAAT,CAAmB7K,SAAS6K,SAAT,KAAuB+K,aAA1C;AACD;AACF,KA5KqB;AA8KtB/O,mBA9KsB,6BA8KJ;AAChBkN,iBAAW5M,MAAX,CAAkB,CAAlB;AACA4M,iBAAWa,KAAX,CAAiBiB,KAAjB;AACD,KAjLqB;AAmLtB/O,sBAnLsB,gCAmLD;AACnBkN,oBAAc7M,MAAd,CAAqB,CAArB;AACA6M,oBAAcY,KAAd,CAAoBiB,KAApB;AACD,KAtLqB;AAwLtBC,mBAxLsB,2BAwLNzQ,IAxLM,EAwLA0N,KAxLA,EAwLO;AAC3BgB,iBAAWa,KAAX,CAAiB1O,MAAjB,CAAwBb,IAAxB,EAA8B0N,KAA9B;AACAiB,oBAAcY,KAAd,CAAoB1O,MAApB,CAA2Bb,IAA3B,EAAiC0N,KAAjC;AACD,KA3LqB;AA6LtBjK,cA7LsB,sBA6LXzD,IA7LW,EA6LL;AACf,WAAKyQ,eAAL,CAAqBzQ,IAArB;AACA,aAAOrC,OAAOkD,MAAP,CAAcb,IAAd,CAAP;AACD;AAhMqB,GAAxB;;AAmMA,SAAOrF,QAAP;AACD,C;;;;;;;;;;;;;;;;;ACvND;AACA;IACM+V,U;;;;;;;wBACA1Q,I,EAAM;AACR,WAAK,IAAIoD,IAAI,KAAK9D,MAAL,GAAc,CAA3B,EAA8B8D,KAAK,CAAnC,EAAsCA,GAAtC,EAA2C;AACzC,YAAI,KAAKA,CAAL,EAAQtD,KAAR,KAAkBE,KAAKvF,KAAL,CAAWiJ,MAAjC,EAAyC;AACvC,eAAKN,CAAL,EAAQtB,MAAR,GAAiB9B,KAAK3F,OAAL,CAAa2P,WAAb,EAAjB;AACA;AACD;AACF;AACD,WAAKjL,IAAL,CAAU;AACRe,eAAOE,KAAKvF,KAAL,CAAWiJ,MADV;AAER5B,gBAAQ9B,KAAK3F,OAAL,CAAa2P,WAAb;AAFA,OAAV;AAIA,WAAK2G,IAAL,CAAU,UAACC,CAAD,EAAIC,CAAJ;AAAA,eAAYD,EAAE9Q,KAAF,GAAU+Q,EAAE/Q,KAAb,GAAsB,CAAC,CAAvB,GAA6B8Q,EAAE9Q,KAAF,GAAU+Q,EAAE/Q,KAAb,GAAsB,CAAtB,GAA0B,CAAjE;AAAA,OAAV;AACD;;;2BAEMgR,Q,EAAUC,M,EAAQ;AACvB,UAAMjR,QAAQgR,WAAW,CAAX,KAAiB,CAAjB,GAAqBA,QAArB,GAAgCA,SAASrW,KAAT,CAAeiJ,MAA7D;AACA,UAAMgK,QAAQoD,WAAW,CAAX,KAAiB,CAAjB,GAAqBC,MAArB,GAA8BD,SAAS/C,GAAT,KAAiB,OAA7D;AACA,WAAK,IAAI3K,IAAI,KAAK9D,MAAL,GAAc,CAA3B,EAA8B8D,KAAK,CAAnC,EAAsCA,GAAtC,EAA2C;AACzC,YAAI,KAAKA,CAAL,EAAQtD,KAAR,KAAkBA,KAAtB,EAA6B;AAC3B,eAAK6N,MAAL,CAAYvK,CAAZ,EAAe,CAAf;AACA;AACD;AACF;AACD,UAAG,CAACsK,KAAJ,EAAW;AACT,aAAK,IAAItK,KAAI,KAAK9D,MAAL,GAAc,CAA3B,EAA8B8D,MAAK,CAAnC,EAAsCA,IAAtC,EAA2C;AACzC,cAAI,KAAKA,EAAL,EAAQtD,KAAR,GAAgBA,KAApB,EAA2B;AACzB,iBAAKsD,EAAL,EAAQtD,KAAR;AACD;AACF;AACF;AACF;;;4BAEO;AACN,WAAKR,MAAL,GAAc,CAAd;AACD;;;;;;AAGH,SAAS0R,KAAT,GAAiB;AACf,MAAMC,WAAW,EAAjB;AACAA,WAASlS,IAAT,CAAcmS,KAAd,CAAoBD,QAApB,EAA8BvP,SAA9B;AACA1D,SAAOmT,cAAP,CAAsBF,QAAtB,EAAgCD,MAAM/S,SAAtC;AACA,SAAOgT,QAAP;AACD;AACDD,MAAM/S,SAAN,GAAkBD,OAAO6O,MAAP,CAAcC,MAAM7O,SAApB,CAAlB;AACAD,OAAOoT,mBAAP,CAA2BV,WAAWzS,SAAtC,EAAiDrD,OAAjD,CAAyD;AAAA,SACvDoW,MAAM/S,SAAN,CAAgBoT,UAAhB,IAA8BX,WAAWzS,SAAX,CAAqBoT,UAArB,CADyB;AAAA,CAAzD;;AAIA,SAASC,eAAT,CAAyBxC,QAAzB,EAAmC;AACjC,MAAGA,SAASzI,QAAT,KAAsBkL,KAAKC,YAA9B,EAA4C;AAC1C,UAAM,IAAIrV,KAAJ,CAAU,sEAAV,CAAN;AACD;AACD,MAAI9B,gBAAJ;AACA,UAAQyU,SAAS/T,OAAT,CAAiBC,WAAjB,EAAR;AACE,SAAK,IAAL;AACE,YAAM,IAAImB,KAAJ,4CAAmD2S,SAAS/T,OAA5D,8BAA4F+T,SAAS/E,SAArG,CAAN;AACF,SAAK,IAAL;AACE,UAAI0H,QAAQ5X,QAAQQ,OAAR,CAAgB,8CAAhB,CAAZ;AACAA,gBAAUoX,MAAMC,IAAN,CAAW,IAAX,CAAV;AACA;AACF,SAAK,IAAL;AACErX,gBAAUR,QAAQQ,OAAR,CAAgB,WAAhB,CAAV;AACA;AACF;AACEA,gBAAUR,QAAQQ,OAAR,CAAgB,aAAhB,CAAV;AAXJ;AAaA,SAAOA,OAAP;AACD;;IAEKsX,O;AACJ,mBAAY7C,QAAZ,EAAsB;AAAA;;AACpB,SAAKzU,OAAL,GAAeiX,gBAAgBxC,QAAhB,CAAf;AACA,SAAKS,KAAL,GAAa,IAAIyB,KAAJ,EAAb;AACD;;;;6BAEQ;AACP,aAAO,KAAK3W,OAAL,CAAayH,MAAb,CAAoBoP,KAApB,CAA0B,KAAK7W,OAA/B,EAAwCqH,SAAxC,CAAP;AACD;;;;;;kBAGYiQ,O;;;;;;;;;;;;;;;;;ICnFTC,O;AAEJ,mBAAY/V,MAAZ,EAAoBN,MAApB,EAA4BO,KAA5B,EAAmCnB,QAAnC,EAA6CgD,MAA7C,EAAqDE,QAArD,EAA+DC,MAA/D,EAAuE;AAAA;;AACrE,SAAKvC,MAAL,GAAcA,MAAd;AACA,SAAKO,KAAL,GAAaA,KAAb;AACA,SAAKnB,QAAL,GAAgBA,QAAhB;AACA,SAAKgD,MAAL,GAAcA,MAAd;;AAEA,SAAKE,QAAL,GAAgBA,QAAhB;AACA,SAAKC,MAAL,GAAcA,MAAd;;AAEA,SAAKuH,SAAL,GAAiB,KAAjB;AACA,SAAKC,QAAL,GAAgB,KAAhB;;AAEA,QAAMuM,gBAAgBlX,SAASkU,QAAT,EAAtB;AACA,SAAKiD,UAAL,GAAkBD,cAAcE,OAAd,GAAwBF,aAAxB,GAAwChW,MAA1D;;AAEA,SAAKmW,aAAL,GAAqB,EAArB;AACA,SAAKC,aAAL,CAAmBnW,MAAM8B,OAAzB;AACA,SAAKsU,qBAAL;AACD;;;;kCAEaC,W,EAAa;AACzB,UAAI,CAACA,WAAD,IAAgB,EAAEA,cAAcA,YAAYC,OAAZ,CAAoB,aAApB,EAAmC,EAAnC,CAAhB,CAApB,EAA6E;AAC3E;AACD;AACD,UAAIC,uBAAJ;;AAEA,UAAI;AACF,aAAK9W,MAAL,CAAY4W,WAAZ,EAAyBpF,MAAzB,CAAgC,KAAK+E,UAArC,EAAiD,EAAjD;AACAO,yBAAiB,KAAK9W,MAAL,CAAY4W,WAAZ,EAAyB,KAAKL,UAA9B,CAAjB;AACD,OAHD,CAIA,OAAOQ,KAAP,EAAc;AACZA,cAAMC,OAAN,GAAgB,0EACEJ,WADF,wBAEdG,MAAMC,OAFR;AAGA,cAAMD,KAAN;AACD;;AAEDtU,aAAO+O,MAAP,CAAcsF,cAAd,EAA8B,KAAKL,aAAnC;AACA,WAAKA,aAAL,GAAqBK,cAArB;AACD;;;4CAEuB;AAAA;;AACtB;AACA,UAAMG,gBAAgB,CAAC,QAAD,EAAW,cAAX,EAA2B,QAA3B,EAAqC,SAArC,EAAgD,OAAhD,EAAyD,OAAzD,EAAkE,SAAlE,CAAtB;AACA,WAAK,IAAIpP,IAAIoP,cAAclT,MAAd,GAAuB,CAApC,EAAuC8D,KAAK,CAA5C,EAA+CA,GAA/C,EAAoD;AAClD,aAAK4O,aAAL,CAAmBQ,cAAcpP,CAAd,CAAnB,IAAuC,KAAKoP,cAAcpP,CAAd,CAAL,EAAuBlC,IAAvB,CAA4B,IAA5B,CAAvC;AACD;;AAED;AACA,UAAMuR,cAAc,CAAC,WAAD,EAAc,YAAd,EAA4B,mBAA5B,EAAiD,iBAAjD,EAAoE,eAApE,EAAqF,sBAArF,EAA6G,oBAA7G,CAApB;;AARsB,iCASbrP,EATa;AAUpB,YAAIsP,iBAAJ;AAAA,YAAcC,OAAO,MAAK7W,KAAL,CAAW2W,YAAYrP,EAAZ,CAAX,CAArB;AACApF,eAAOqB,cAAP,QAA4BoT,YAAYrP,EAAZ,CAA5B,EAA4C;AAC1ChF,eAAK;AAAA,mBAAMsU,QAAN;AAAA,WADqC;AAE1CtT,eAAK,aAAC/C,KAAD,EAAW;AACdqW,uBAAWrW,KAAX;AACA,kBAAK2V,aAAL,CAAmBS,YAAYrP,EAAZ,CAAnB,IAAqC/G,KAArC;AACA,gBAAIsW,IAAJ,EAAU;AACR,oBAAKpX,MAAL,CAAYoX,IAAZ,EAAkB5F,MAAlB,CAAyB,MAAK+E,UAA9B,EAA0CzV,KAA1C;AACD;AACF;AARyC,SAA5C;AAXoB;;AAStB,WAAK,IAAI+G,KAAIqP,YAAYnT,MAAZ,GAAqB,CAAlC,EAAqC8D,MAAK,CAA1C,EAA6CA,IAA7C,EAAkD;AAAA,cAAzCA,EAAyC;AAYjD;;AAED;AACApF,aAAOqB,cAAP,CAAsB,KAAK2S,aAA3B,EAA0C,UAA1C,EAAsD;AACpD5T,aAAK;AAAA,iBAAM,MAAKkH,QAAX;AAAA,SAD+C;AAEpDlG,aAAK,aAAC/C,KAAD;AAAA,iBAAY,EAAE,MAAKiJ,QAAL,GAAgBjJ,KAAlB,CAAD,GAA6B,MAAKwB,QAAL,EAA7B,GAA+C,IAA1D;AAAA;AAF+C,OAAtD;AAID;;;4BAEOxB,K,EAAO;AACb,WAAKgJ,SAAL,GAAiBhJ,KAAjB;AACD;;;4BAEO;AACN,aAAO,KAAKsB,MAAL,CAAYwH,GAAnB;AACD;;;4BAEO;AACN,aAAO,KAAKxH,MAAL,CAAYsH,GAAnB;AACD;;;8BAES;AACR,aAAO,CAAC,KAAKtH,MAAL,CAAY2B,MAApB;AACD;;;2BAEMsT,Q,EAAU;AACf,WAAKjV,MAAL,CAAYoC,MAAZ,CAAmB6S,QAAnB;AACA,WAAK/U,QAAL;AACA,WAAKlD,QAAL,CAAcuK,OAAd;AACA,WAAKvK,QAAL,CAAcyK,UAAd;AACD;;;4BAEOwN,Q,EAAU;AAChB,WAAKjV,MAAL,CAAYyC,OAAZ,CAAoBwS,QAApB;AACA,WAAK/U,QAAL;AACA,WAAKlD,QAAL,CAAcuK,OAAd;AACA,WAAKvK,QAAL,CAAcyK,UAAd;AACD;;;iCAEYwI,I,EAAMC,I,EAAM;AACvB,UAAI,OAAOD,IAAP,KAAgB,UAApB,EAAgC;AAC9B,aAAKiF,gBAAL,CAAsBjF,IAAtB;AACD,OAFD,MAEO;AACL,aAAKkF,iBAAL,CAAuBlF,IAAvB,EAA6BC,IAA7B;AACD;AACD,WAAKhQ,QAAL;AACD;;;qCAEgBkV,E,EAAI;AAAA;;AACnB,WAAKpV,MAAL,CAAYqV,KAAZ,CAAkB,CAAlB,EAAqBpY,OAArB,CAA6B,UAACiH,OAAD,EAAa;AACxC;AACA;AACA,eAAKoR,WAAL,CAAiBpR,OAAjB,EAA0BkR,GAAGlR,QAAQ7B,IAAX,EAAiB6B,QAAQpH,KAAzB,EAAgCoH,QAAQxH,OAAxC,CAA1B;AACD,OAJD;AAKD;;;sCAEiByF,K,EAAO8S,Q,EAAU;AACjC,UAAI9S,QAAQ,CAAR,KAAc,CAAlB,EAAqB;AACnB,cAAM,IAAI3D,KAAJ,CAAU,oBAAoB2D,KAApB,GAA4B,8CAAtC,CAAN;AACD;AACD,UAAMoT,SAASpT,QAAQ,KAAKnC,MAAL,CAAYwC,KAAnC;;AAEA;AACA,UAAI+S,UAAU,CAAV,IAAeA,SAAS,KAAKvV,MAAL,CAAY2B,MAAxC,EAAgD;AAC9C,aAAK2T,WAAL,CAAiB,KAAKtV,MAAL,CAAYuV,MAAZ,CAAjB,EAAsCN,QAAtC;AACD;AACD;AAHA,WAIK,IAAG9S,SAAS,KAAKnC,MAAL,CAAYqQ,cAAZ,EAAT,IAAyClO,SAAS,KAAKnC,MAAL,CAAYyQ,cAAZ,EAArD,EAAmF;AACtF,cAAGtB,MAAMqG,OAAN,CAAcP,QAAd,KAA2B,CAACA,SAAStT,MAAxC,EAAgD;AAC9C,iBAAK3E,QAAL,CAAc8V,eAAd,CAA8B3Q,KAA9B,EAAqCA,UAAU,KAAKnC,MAAL,CAAYsP,QAA3D;AACA,gBAAGnN,UAAU,KAAKnC,MAAL,CAAYqQ,cAAZ,EAAb,EAA2C;AACzC,mBAAKrQ,MAAL,CAAYsQ,iBAAZ;AACD,aAFD,MAGK;AACH,mBAAKtQ,MAAL,CAAYuQ,iBAAZ;AACD;AACF;AACF;AACF;;;gCAEWrM,O,EAAS+Q,Q,EAAU;AAAA;;AAC7B,UAAI,CAAC9F,MAAMqG,OAAN,CAAcP,QAAd,CAAL,EAA8B;AAC5B;AACD;AACD,UAAIQ,WAAW,KAAKzV,MAAL,CAAYmQ,OAAZ,CAAoBjM,OAApB,CAAf;AACA,UAAI,CAAC+Q,SAASrF,OAAT,GAAmB8F,IAAnB,CAAwB;AAAA,eAAWC,YAAYzR,QAAQ7B,IAA/B;AAAA,OAAxB,CAAL,EAAmE;AACjE6B,gBAAQwB,EAAR,GAAa,QAAb;AACA,YAAG+P,aAAa,CAAb,IAAkB,CAACR,SAAStT,MAA/B,EAAuC;AACrCuC,kBAAQkM,GAAR,GAAc,OAAd,CADqC,CACd;AACxB;AACF;AACD6E,eAAShY,OAAT,CAAiB,UAAC0Y,OAAD,EAAa;AAC5B,YAAIA,YAAYzR,QAAQ7B,IAAxB,EAA8B;AAC5BoT;AACD,SAFD,MAEO;AACL;AACA,iBAAKzV,MAAL,CAAY2P,MAAZ,CAAmB8F,WAAW,CAA9B,EAAiCE,OAAjC,EAA0CF,aAAa,CAAC,CAAxD;AACD;AACF,OAPD;AAQD;;;0CAEqB;AACpB,UAAIG,SAAS,IAAb;AAAA,UAAmBC,YAAY,CAA/B;AACA,UAAIC,UAAU,KAAd;AAAA,UAAqBC,aAAa,KAAlC;AACA,UAAMpU,SAAS,KAAK3B,MAAL,CAAY2B,MAA3B;;AAEA,WAAK,IAAI8D,IAAI,CAAb,EAAgBA,IAAI9D,MAApB,EAA4B8D,GAA5B,EAAiC;AAC/B,YAAMpD,OAAO,KAAKrC,MAAL,CAAYyF,CAAZ,CAAb;AACA,YAAMuQ,UAAU3T,KAAK3F,OAAL,CAAa8P,MAAb,GAAsBrD,GAAtC;;AAEA,YAAIyM,WAAWI,OAAf,EAAwB;AAAE;AACxB,cAAMtE,aAAarP,KAAK3F,OAAL,CAAa2P,WAAb,CAAyB,IAAzB,CAAnB;AACA,cAAMlD,MAAM,KAAKnM,QAAL,CAAc6E,UAAd,KAA6BgU,SAA7B,GAAyCnE,UAArD;;AAEA,cAAI,CAACoE,OAAD,IAAY3M,MAAM,KAAKnM,QAAL,CAAcsU,aAAd,EAAtB,EAAqD;AACnDwE,sBAAU,IAAV;AACA,iBAAK,YAAL,IAAqBzT,KAAKA,IAA1B;AACA,iBAAK,mBAAL,IAA4BA,KAAK3F,OAAjC;AACA,iBAAK,iBAAL,IAA0B2F,KAAKvF,KAA/B;AACD;AACD,cAAI,CAACiZ,UAAD,KAAgB5M,OAAO,KAAKnM,QAAL,CAAcqU,gBAAd,EAAP,IAA4C5L,MAAM9D,SAAS,CAAf,IAAoB,KAAKsU,KAAL,EAAhF,CAAJ,EAAoG;AAClGF,yBAAa,IAAb;AACA,iBAAK,eAAL,IAAwB1T,KAAKA,IAA7B;AACA,iBAAK,sBAAL,IAA+BA,KAAK3F,OAApC;AACA,iBAAK,oBAAL,IAA6B2F,KAAKvF,KAAlC;AACD;AACD+Y,uBAAanE,UAAb;AACD;AACDkE,iBAASI,OAAT;;AAEA,YAAIF,WAAWC,UAAf,EAA2B;AACzB;AACD;AACF;AACF;;;;;;kBAIY9B,O","file":"ui-scroll.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 36a3010ad66560b7fc51","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 '$interval',\n '$q',\n '$parse',\n function (console, $injector, $rootScope, $timeout, $interval, $q, $parse) {\n\n return {\n require: ['?^uiScrollViewport'],\n restrict: 'A',\n transclude: 'element',\n priority: 1000,\n terminal: true,\n link: link\n };\n\n function link($scope, element, $attr, controllers, linker) {\n const match = $attr.uiScroll.match(/^\\s*(\\w+)\\s+in\\s+([(\\w|\\$)\\.]+)\\s*$/);\n if (!match) {\n throw new Error('Expected uiScroll in form of \\'_item_ in _datasource_\\' but got \\'' + $attr.uiScroll + '\\'');\n }\n\n function parseNumericAttr(value, defaultValue) {\n const result = $parse(value)($scope);\n return isNaN(result) ? defaultValue : result;\n }\n\n const BUFFER_MIN = 3;\n const BUFFER_DEFAULT = 10;\n const PADDING_MIN = 0.3;\n const PADDING_DEFAULT = 0.5;\n const MAX_VIEWPORT_DELAY = 500;\n const VIEWPORT_POLLING_INTERVAL = 50;\n\n let datasource = null;\n const itemName = match[1];\n const datasourceName = match[2];\n const viewportController = controllers[0];\n const bufferSize = Math.max(BUFFER_MIN, parseNumericAttr($attr.bufferSize, BUFFER_DEFAULT));\n const padding = Math.max(PADDING_MIN, parseNumericAttr($attr.padding, PADDING_DEFAULT));\n let startIndex = parseNumericAttr($attr.startIndex, 1);\n let ridActual = 0; // current data revision id\n let pending = [];\n\n const elementRoutines = new ElementRoutines($injector, $q);\n const buffer = new ScrollBuffer(elementRoutines, bufferSize, startIndex);\n const viewport = new Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding);\n const adapter = new Adapter($scope, $parse, $attr, viewport, buffer, doAdjust, reload);\n\n if (viewportController) {\n viewportController.adapter = adapter;\n }\n\n const isDatasourceValid = () =>\n Object.prototype.toString.call(datasource) === '[object Object]' && typeof datasource.get === 'function';\n\n datasource = $parse(datasourceName)($scope); // try to get datasource on scope\n if (!isDatasourceValid()) {\n datasource = $injector.get(datasourceName); // try to inject datasource as service\n if (!isDatasourceValid()) {\n throw new Error(datasourceName + ' is not a valid datasource');\n }\n }\n\n let onRenderHandlers = [];\n function onRenderHandlersRunner() {\n onRenderHandlers.forEach(handler => handler.run());\n onRenderHandlers = [];\n }\n function persistDatasourceIndex(datasource, propName) {\n let getter;\n // need to postpone min/maxIndexUser processing if the view is empty\n if(Number.isInteger(datasource[propName])) {\n getter = datasource[propName];\n if(Number.isInteger(getter)) {\n onRenderHandlers = onRenderHandlers.filter(handler => handler.id !== propName);\n onRenderHandlers.push({\n id: propName,\n run: () => datasource[propName] = getter\n });\n }\n }\n }\n\n function defineDatasourceIndex(datasource, propName, propUserName) {\n const descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n if (descriptor && (descriptor.set || descriptor.get)) {\n return;\n }\n let getter;\n persistDatasourceIndex(datasource, propName);\n Object.defineProperty(datasource, propName, {\n set: (value) => {\n getter = value;\n if(pending.length && !buffer.length) {\n persistDatasourceIndex(datasource, propName);\n return;\n }\n buffer[propUserName] = value;\n const topPaddingHeightOld = viewport.topDataPos();\n viewport.adjustPaddings();\n if (propName === 'minIndex') {\n viewport.onAfterMinIndexSet(topPaddingHeightOld);\n }\n },\n get: () => getter\n });\n }\n\n defineDatasourceIndex(datasource, 'minIndex', 'minIndexUser');\n defineDatasourceIndex(datasource, 'maxIndex', 'maxIndexUser');\n\n const fetchNext = (datasource.get.length !== 2) ?\n (success) => datasource.get(buffer.next, bufferSize, success) :\n (success) => {\n datasource.get({\n index: buffer.next,\n append: buffer.length ? buffer[buffer.length - 1].item : void 0,\n count: bufferSize\n }, success);\n };\n\n const fetchPrevious = (datasource.get.length !== 2) ?\n (success) => datasource.get(buffer.first - bufferSize, bufferSize, success) :\n (success) => {\n datasource.get({\n index: buffer.first - bufferSize,\n prepend: buffer.length ? buffer[0].item : void 0,\n count: bufferSize\n }, success);\n };\n\n const initialize = () => {\n let tryCount = 0;\n if(!viewport.applyContainerStyle()) {\n const timer = $interval(() => {\n tryCount++;\n if(viewport.applyContainerStyle()) {\n $interval.cancel(timer);\n doAdjust();\n }\n if(tryCount * VIEWPORT_POLLING_INTERVAL >= MAX_VIEWPORT_DELAY) {\n $interval.cancel(timer);\n throw Error(`ui-scroll directive requires a viewport with non-zero height in ${MAX_VIEWPORT_DELAY}ms`);\n }\n }, VIEWPORT_POLLING_INTERVAL);\n }\n else {\n doAdjust();\n }\n };\n\n /**\n * Build padding elements\n *\n * Calling linker is the only way I found to get access to the tag name of the template\n * to prevent the directive scope from pollution a new scope is created and destroyed\n * right after the builder creation is completed\n */\n linker((clone, scope) => {\n viewport.createPaddingElements(clone[0]);\n // we do not include the clone in the DOM. It means that the nested directives will not\n // be able to reach the parent directives, but in this case it is intentional because we\n // created the clone to access the template tag name\n scope.$destroy();\n clone.remove();\n });\n\n $scope.$on('$destroy', () => {\n unbindEvents();\n viewport.unbind('mousewheel', wheelHandler);\n });\n\n viewport.bind('mousewheel', wheelHandler);\n\n initialize();\n\n /* Private function definitions */\n\n function isInvalid(rid) {\n return (rid && rid !== ridActual) || $scope.$$destroyed;\n }\n\n function bindEvents() {\n viewport.bind('resize', resizeAndScrollHandler);\n viewport.bind('scroll', resizeAndScrollHandler);\n }\n\n function unbindEvents() {\n viewport.unbind('resize', resizeAndScrollHandler);\n viewport.unbind('scroll', resizeAndScrollHandler);\n }\n\n function reload() {\n viewport.resetTopPadding();\n viewport.resetBottomPadding();\n if (arguments.length) {\n startIndex = arguments[0];\n }\n buffer.reset(startIndex);\n persistDatasourceIndex(datasource, 'minIndex');\n persistDatasourceIndex(datasource, 'maxIndex');\n doAdjust();\n }\n\n function isElementVisible(wrapper) {\n return wrapper.element.height() && wrapper.element[0].offsetParent;\n }\n\n function visibilityWatcher(wrapper) {\n if (isElementVisible(wrapper)) {\n buffer.forEach((item) => {\n if (typeof item.unregisterVisibilityWatcher === 'function') {\n item.unregisterVisibilityWatcher();\n delete item.unregisterVisibilityWatcher;\n }\n });\n if (!pending.length) {\n $timeout(() => doAdjust());\n }\n }\n }\n\n function insertWrapperContent(wrapper, insertAfter) {\n createElement(wrapper, insertAfter, viewport.insertElement);\n if (!isElementVisible(wrapper)) {\n wrapper.unregisterVisibilityWatcher = wrapper.scope.$watch(() => visibilityWatcher(wrapper));\n }\n elementRoutines.hideElement(wrapper); // hide inserted elements before data binding\n }\n\n function createElement(wrapper, insertAfter, insertElement) {\n let promises = null;\n const sibling = (insertAfter > 0) ? buffer[insertAfter - 1].element : undefined;\n linker((clone, scope) => {\n promises = insertElement(clone, sibling);\n wrapper.element = clone;\n wrapper.scope = scope;\n scope[itemName] = wrapper.item;\n });\n // ui-scroll-grid apply\n if (adapter.transform) {\n const tdInitializer = wrapper.scope.uiScrollTdInitializer;\n if (tdInitializer && tdInitializer.linking) {\n adapter.transform(wrapper.scope, wrapper.element);\n } else {\n wrapper.scope.uiScrollTdInitializer = {\n onLink: () => adapter.transform(wrapper.scope, wrapper.element),\n scope: wrapper.scope\n };\n }\n }\n return promises;\n }\n\n function updateDOM() {\n let promises = [];\n const toBePrepended = [];\n const toBeRemoved = [];\n const inserted = [];\n\n buffer.forEach((wrapper, i) => {\n switch (wrapper.op) {\n case 'prepend':\n toBePrepended.unshift(wrapper);\n break;\n case 'append':\n insertWrapperContent(wrapper, i);\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'insert':\n promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated));\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'remove':\n toBeRemoved.push(wrapper);\n }\n });\n\n toBeRemoved.forEach((wrapper) => promises = promises.concat(viewport.removeItem(wrapper)));\n\n if (toBePrepended.length)\n toBePrepended.forEach((wrapper) => {\n insertWrapperContent(wrapper);\n wrapper.op = 'none';\n });\n\n buffer.forEach((item, i) => item.scope.$index = buffer.first + i);\n\n return {\n prepended: toBePrepended,\n removed: toBeRemoved,\n inserted: inserted,\n animated: promises\n };\n\n }\n\n function updatePaddings(rid, updates) {\n // schedule another doAdjust after animation completion\n if (updates.animated.length) {\n $q.all(updates.animated).then(() => {\n viewport.adjustPaddings();\n doAdjust(rid);\n });\n } else {\n viewport.adjustPaddings();\n }\n }\n\n function enqueueFetch(rid, updates) {\n if (viewport.shouldLoadBottom()) {\n if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\n // this means that at least one item appended in the last batch has height > 0\n if (pending.push(true) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n } else if (viewport.shouldLoadTop()) {\n if ((!updates || buffer.effectiveHeight(updates.prepended) > 0) || pending[0]) {\n // this means that at least one item appended in the last batch has height > 0\n // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\n // BTW there will always be at least 1 element in the pending array because bottom is fetched first\n if (pending.push(false) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n }\n }\n\n function processUpdates() {\n const updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustments\n !$scope.$$phase && !$rootScope.$$phase && $scope.$digest();\n\n updates.inserted.forEach(w => elementRoutines.showElement(w));\n updates.prepended.forEach(w => elementRoutines.showElement(w));\n return updates;\n }\n\n function doAdjust(rid) {\n if (!rid) { // dismiss pending requests\n pending = [];\n rid = ++ridActual;\n }\n\n const updates = processUpdates();\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n enqueueFetch(rid);\n\n if (!pending.length) {\n adapter.calculateProperties();\n }\n }\n\n function doAdjustAfterFetch(rid) {\n const updates = processUpdates();\n\n viewport.onAfterPrepend(updates);\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n onRenderHandlersRunner();\n enqueueFetch(rid, updates);\n pending.shift();\n\n if (pending.length)\n fetch(rid);\n else {\n adapter.loading(false);\n bindEvents();\n adapter.calculateProperties();\n }\n }\n\n function fetch(rid) {\n if (pending[0]) {// scrolling down\n if (buffer.length && !viewport.shouldLoadBottom()) {\n doAdjustAfterFetch(rid);\n } else {\n fetchNext((result) => {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.eof = true;\n }\n\n if (result.length > 0) {\n viewport.clipTop();\n buffer.append(result);\n }\n\n doAdjustAfterFetch(rid);\n });\n }\n } else { // scrolling up\n if (buffer.length && !viewport.shouldLoadTop()) {\n doAdjustAfterFetch(rid);\n } else {\n fetchPrevious((result) => {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.bof = true;\n // log 'bof is reached'\n }\n\n if (result.length > 0) {\n if (buffer.length) {\n viewport.clipBottom();\n }\n buffer.prepend(result);\n }\n\n doAdjustAfterFetch(rid);\n });\n }\n }\n }\n\n function resizeAndScrollHandler() {\n if (!$rootScope.$$phase && !adapter.isLoading && !adapter.disabled) {\n\n enqueueFetch(ridActual);\n\n if (pending.length) {\n unbindEvents();\n } else {\n adapter.calculateProperties();\n !$scope.$$phase && $scope.$digest();\n }\n }\n }\n\n function wheelHandler(event) {\n if (!adapter.disabled) {\n const scrollTop = viewport[0].scrollTop;\n const yMax = viewport[0].scrollHeight - viewport[0].clientHeight;\n\n if ((scrollTop === 0 && !buffer.bof) || (scrollTop === yMax && !buffer.eof)) {\n event.preventDefault();\n }\n }\n }\n }\n\n }\n ]);\n\n\n// WEBPACK FOOTER //\n// ./src/ui-scroll.js","/*!\r\n globals: angular, window\r\n List of used element methods available in JQuery but not in JQuery Lite\r\n element.before(elem)\r\n element.height()\r\n element.outerHeight(true)\r\n element.height(value) = only for Top/Bottom padding elements\r\n element.scrollTop()\r\n element.scrollTop(value)\r\n */\r\n\r\nexport default class JQLiteExtras {\r\n\r\n registerFor(element) {\r\n let convertToPx, css, getStyle, isWindow;\r\n // angular implementation blows up if elem is the window\r\n css = angular.element.prototype.css;\r\n\r\n element.prototype.css = function (name, value) {\r\n let self = this;\r\n let elem = self[0];\r\n if (!(!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style)) {\r\n return css.call(self, name, value);\r\n }\r\n };\r\n\r\n // as defined in angularjs v1.0.5\r\n isWindow = (obj) => obj && obj.document && obj.location && obj.alert && obj.setInterval;\r\n\r\n function scrollTo(self, direction, value) {\r\n let elem = self[0];\r\n let [method, prop, preserve] = {\r\n top: [\r\n 'scrollTop',\r\n 'pageYOffset',\r\n 'scrollLeft'\r\n ],\r\n left: [\r\n 'scrollLeft',\r\n 'pageXOffset',\r\n 'scrollTop'\r\n ]\r\n }[direction];\r\n\r\n const isValueDefined = typeof value !== 'undefined';\r\n if (isWindow(elem)) {\r\n if (isValueDefined) {\r\n return elem.scrollTo(self[preserve].call(self), value);\r\n }\r\n return (prop in elem) ? elem[prop] : elem.document.documentElement[method];\r\n } else {\r\n if (isValueDefined) {\r\n elem[method] = value;\r\n }\r\n return elem[method];\r\n }\r\n }\r\n\r\n if (window.getComputedStyle) {\r\n getStyle = (elem) => window.getComputedStyle(elem, null);\r\n convertToPx = (elem, value) => parseFloat(value);\r\n } else {\r\n getStyle = (elem) => elem.currentStyle;\r\n convertToPx = (elem, value) => {\r\n let left, result, rs, rsLeft, style;\r\n let core_pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\r\n let rnumnonpx = new RegExp('^(' + core_pnum + ')(?!px)[a-z%]+$', 'i');\r\n\r\n if (!rnumnonpx.test(value)) {\r\n return parseFloat(value);\r\n }\r\n\r\n // ported from JQuery\r\n style = elem.style;\r\n left = style.left;\r\n rs = elem.runtimeStyle;\r\n rsLeft = rs && rs.left;\r\n if (rs) {\r\n rs.left = style.left;\r\n }\r\n // put in the new values to get a computed style out\r\n style.left = value;\r\n result = style.pixelLeft;\r\n style.left = left;\r\n if (rsLeft) {\r\n rs.left = rsLeft;\r\n }\r\n return result;\r\n };\r\n }\r\n\r\n function getMeasurements(elem, measure) {\r\n let base, borderA, borderB, computedMarginA, computedMarginB, computedStyle, dirA, dirB, marginA, marginB, paddingA, paddingB;\r\n\r\n if (isWindow(elem)) {\r\n base = document.documentElement[{height: 'clientHeight', width: 'clientWidth'}[measure]];\r\n\r\n return {\r\n base: base,\r\n padding: 0,\r\n border: 0,\r\n margin: 0\r\n };\r\n }\r\n\r\n // Start with offset property\r\n [\r\n base,\r\n dirA,\r\n dirB\r\n ] = {\r\n width: [\r\n elem.offsetWidth,\r\n 'Left',\r\n 'Right'\r\n ],\r\n height: [\r\n elem.offsetHeight,\r\n 'Top',\r\n 'Bottom'\r\n ]\r\n }[measure];\r\n\r\n computedStyle = getStyle(elem);\r\n paddingA = convertToPx(elem, computedStyle['padding' + dirA]) || 0;\r\n paddingB = convertToPx(elem, computedStyle['padding' + dirB]) || 0;\r\n borderA = convertToPx(elem, computedStyle['border' + dirA + 'Width']) || 0;\r\n borderB = convertToPx(elem, computedStyle['border' + dirB + 'Width']) || 0;\r\n computedMarginA = computedStyle['margin' + dirA];\r\n computedMarginB = computedStyle['margin' + dirB];\r\n\r\n // I do not care for width for now, so this hack is irrelevant\r\n // if ( !supportsPercentMargin )\r\n // computedMarginA = hackPercentMargin( elem, computedStyle, computedMarginA )\r\n // computedMarginB = hackPercentMargin( elem, computedStyle, computedMarginB )\r\n marginA = convertToPx(elem, computedMarginA) || 0;\r\n marginB = convertToPx(elem, computedMarginB) || 0;\r\n\r\n return {\r\n base: base,\r\n padding: paddingA + paddingB,\r\n border: borderA + borderB,\r\n margin: marginA + marginB\r\n };\r\n }\r\n\r\n function getWidthHeight(elem, direction, measure) {\r\n let computedStyle, result;\r\n\r\n let measurements = getMeasurements(elem, direction);\r\n\r\n if (measurements.base > 0) {\r\n return {\r\n base: measurements.base - measurements.padding - measurements.border,\r\n outer: measurements.base,\r\n outerfull: measurements.base + measurements.margin\r\n }[measure];\r\n }\r\n\r\n // Fall back to computed then uncomputed css if necessary\r\n computedStyle = getStyle(elem);\r\n result = computedStyle[direction];\r\n\r\n if (result < 0 || result === null) {\r\n result = elem.style[direction] || 0;\r\n }\r\n\r\n // Normalize \"\", auto, and prepare for extra\r\n result = parseFloat(result) || 0;\r\n\r\n return {\r\n base: result - measurements.padding - measurements.border,\r\n outer: result,\r\n outerfull: result + measurements.padding + measurements.border + measurements.margin\r\n }[measure];\r\n }\r\n\r\n // define missing methods\r\n return angular.forEach({\r\n before(newElem) {\r\n var children, elem, i, j, parent, ref, self;\r\n self = this;\r\n elem = self[0];\r\n parent = self.parent();\r\n children = parent.contents();\r\n if (children[0] === elem) {\r\n return parent.prepend(newElem);\r\n } else {\r\n for (i = j = 1, ref = children.length - 1; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {\r\n if (children[i] === elem) {\r\n angular.element(children[i - 1]).after(newElem);\r\n return;\r\n }\r\n }\r\n throw new Error('invalid DOM structure ' + elem.outerHTML);\r\n }\r\n },\r\n height (value){\r\n var self;\r\n self = this;\r\n if (typeof value !== 'undefined') {\r\n if (Number.isInteger(value)) {\r\n value = value + 'px';\r\n }\r\n return css.call(self, 'height', value);\r\n } else {\r\n return getWidthHeight(this[0], 'height', 'base');\r\n }\r\n },\r\n outerHeight(option) {\r\n return getWidthHeight(this[0], 'height', option ? 'outerfull' : 'outer');\r\n },\r\n outerWidth(option) {\r\n return getWidthHeight(this[0], 'width', option ? 'outerfull' : 'outer');\r\n },\r\n\r\n /*\r\n The offset setter method is not implemented\r\n */\r\n offset(value) {\r\n let docElem, win;\r\n let self = this;\r\n let box = {\r\n top: 0,\r\n left: 0\r\n };\r\n let elem = self[0];\r\n let doc = elem && elem.ownerDocument;\r\n\r\n if (arguments.length) {\r\n if (value === undefined) {\r\n return self;\r\n }\r\n // TODO: implement setter\r\n throw new Error('offset setter method is not implemented');\r\n }\r\n\r\n if (!doc) {\r\n return;\r\n }\r\n\r\n docElem = doc.documentElement;\r\n\r\n // TODO: Make sure it's not a disconnected DOM node\r\n\r\n if (elem.getBoundingClientRect != null) {\r\n box = elem.getBoundingClientRect();\r\n }\r\n\r\n win = doc.defaultView || doc.parentWindow;\r\n\r\n return {\r\n top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),\r\n left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0)\r\n };\r\n },\r\n scrollTop(value) {\r\n return scrollTo(this, 'top', value);\r\n },\r\n scrollLeft(value) {\r\n return scrollTo(this, 'left', value);\r\n }\r\n }, (value, key) => {\r\n if (!element.prototype[key]) {\r\n return element.prototype[key] = value;\r\n }\r\n });\r\n }\r\n\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/jqLiteExtras.js","const hideClassToken = 'ng-ui-scroll-hide';\r\n\r\nfunction addCSSRule(sheet, selector, rules, index) {\r\n if('insertRule' in sheet) {\r\n sheet.insertRule(selector + '{' + rules + '}', index);\r\n }\r\n else if('addRule' in sheet) {\r\n sheet.addRule(selector, rules, index);\r\n }\r\n}\r\n\r\nexport default class ElementRoutines {\r\n\r\n constructor($injector, $q) {\r\n this.$animate = ($injector.has && $injector.has('$animate')) ? $injector.get('$animate') : null;\r\n this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3;\r\n this.$q = $q;\r\n addCSSRule(document.styleSheets[0], '.' + hideClassToken, 'display: none');\r\n }\r\n\r\n hideElement(wrapper) {\r\n wrapper.element.addClass(hideClassToken);\r\n }\r\n\r\n showElement(wrapper) {\r\n wrapper.element.removeClass(hideClassToken);\r\n }\r\n\r\n insertElement(newElement, previousElement) {\r\n previousElement.after(newElement);\r\n return [];\r\n }\r\n\r\n removeElement(wrapper) {\r\n wrapper.element.remove();\r\n wrapper.scope.$destroy();\r\n return [];\r\n }\r\n\r\n insertElementAnimated(newElement, previousElement) {\r\n if (!this.$animate) {\r\n return this.insertElement(newElement, previousElement);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n // no need for parent - previous element is never null\r\n this.$animate.enter(newElement, null, previousElement, () => deferred.resolve());\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n // no need for parent - previous element is never null\r\n return [this.$animate.enter(newElement, null, previousElement)];\r\n }\r\n\r\n removeElementAnimated(wrapper) {\r\n if (!this.$animate) {\r\n return this.removeElement(wrapper);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n this.$animate.leave(wrapper.element, () => {\r\n wrapper.scope.$destroy();\r\n return deferred.resolve();\r\n });\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n return [(this.$animate.leave(wrapper.element)).then(() => wrapper.scope.$destroy())];\r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/elementRoutines.js","export default function ScrollBuffer(elementRoutines, bufferSize, startIndex) {\r\n const buffer = Object.create(Array.prototype);\r\n\r\n Object.assign(buffer, {\r\n size: bufferSize,\r\n\r\n reset(startIndex) {\r\n buffer.remove(0, buffer.length);\r\n buffer.eof = false;\r\n buffer.bof = false;\r\n buffer.first = startIndex;\r\n buffer.next = startIndex;\r\n buffer.minIndex = startIndex;\r\n buffer.maxIndex = startIndex;\r\n buffer.minIndexUser = null;\r\n buffer.maxIndexUser = null;\r\n },\r\n\r\n append(items) {\r\n items.forEach((item) => {\r\n ++buffer.next;\r\n buffer.insert('append', item);\r\n });\r\n buffer.maxIndex = buffer.eof ? buffer.next - 1 : Math.max(buffer.next - 1, buffer.maxIndex);\r\n },\r\n\r\n prepend(items) {\r\n items.reverse().forEach((item) => {\r\n --buffer.first;\r\n buffer.insert('prepend', item);\r\n });\r\n buffer.minIndex = buffer.bof ? buffer.minIndex = buffer.first : Math.min(buffer.first, buffer.minIndex);\r\n },\r\n\r\n /**\r\n * inserts wrapped element in the buffer\r\n * the first argument is either operation keyword (see below) or a number for operation 'insert'\r\n * for insert the number is the index for the buffer element the new one have to be inserted after\r\n * operations: 'append', 'prepend', 'insert', 'remove', 'update', 'none'\r\n */\r\n insert(operation, item, isTop) {\r\n const wrapper = {\r\n item: item\r\n };\r\n\r\n if (operation % 1 === 0) {// it is an insert\r\n wrapper.op = 'insert';\r\n buffer.splice(operation, 0, wrapper);\r\n if(isTop) {\r\n buffer.first--;\r\n }\r\n else {\r\n buffer.next++;\r\n }\r\n } else {\r\n wrapper.op = operation;\r\n switch (operation) {\r\n case 'append':\r\n buffer.push(wrapper);\r\n break;\r\n case 'prepend':\r\n buffer.unshift(wrapper);\r\n break;\r\n }\r\n }\r\n },\r\n\r\n // removes elements from buffer\r\n remove(arg1, arg2) {\r\n if (Number.isInteger(arg1)) {\r\n // removes items from arg1 (including) through arg2 (excluding)\r\n for (let i = arg1; i < arg2; i++) {\r\n elementRoutines.removeElement(buffer[i]);\r\n }\r\n return buffer.splice(arg1, arg2 - arg1);\r\n }\r\n // removes single item(wrapper) from the buffer\r\n buffer.splice(buffer.indexOf(arg1), 1);\r\n if(arg1._op === 'isTop' && buffer.first === this.getAbsMinIndex()) {\r\n this.incrementMinIndex();\r\n }\r\n else {\r\n this.decrementMaxIndex();\r\n }\r\n if(arg1._op === 'isTop') {\r\n buffer.first++;\r\n }\r\n else {\r\n buffer.next--;\r\n }\r\n if(!buffer.length) {\r\n buffer.first = 1;\r\n buffer.next = 1;\r\n }\r\n\r\n return elementRoutines.removeElementAnimated(arg1);\r\n },\r\n\r\n incrementMinIndex() {\r\n if(buffer.minIndexUser !== null) {\r\n if(buffer.minIndex > buffer.minIndexUser) {\r\n buffer.minIndexUser++;\r\n return;\r\n }\r\n if(buffer.minIndex === buffer.minIndexUser) {\r\n buffer.minIndexUser++;\r\n }\r\n }\r\n buffer.minIndex++;\r\n },\r\n\r\n decrementMaxIndex() {\r\n if(buffer.maxIndexUser !== null && buffer.maxIndex <= buffer.maxIndexUser) {\r\n buffer.maxIndexUser--;\r\n }\r\n buffer.maxIndex--;\r\n },\r\n\r\n getAbsMinIndex() {\r\n if(buffer.minIndexUser !== null) {\r\n return Math.min(buffer.minIndexUser, buffer.minIndex);\r\n }\r\n return buffer.minIndex;\r\n },\r\n\r\n getAbsMaxIndex() {\r\n if(buffer.maxIndexUser !== null) {\r\n return Math.max(buffer.maxIndexUser, buffer.maxIndex);\r\n }\r\n return buffer.maxIndex;\r\n },\r\n\r\n effectiveHeight(elements) {\r\n if (!elements.length) {\r\n return 0;\r\n }\r\n let top = Number.MAX_VALUE;\r\n let bottom = Number.NEGATIVE_INFINITY;\r\n elements.forEach((wrapper) => {\r\n if (wrapper.element[0].offsetParent) {\r\n // element style is not display:none\r\n top = Math.min(top, wrapper.element.offset().top);\r\n bottom = Math.max(bottom, wrapper.element.offset().top + wrapper.element.outerHeight(true));\r\n }\r\n });\r\n return Math.max(0, bottom - top);\r\n }\r\n\r\n });\r\n\r\n buffer.reset(startIndex);\r\n\r\n return buffer;\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/buffer.js","import Padding from './padding';\r\n\r\nexport default function Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding) {\r\n let topPadding = null;\r\n let bottomPadding = null;\r\n const viewport = viewportController && viewportController.viewport ? viewportController.viewport : angular.element(window);\r\n const container = viewportController && viewportController.container ? viewportController.container : undefined;\r\n const scope = viewportController && viewportController.scope ? viewportController.scope : $rootScope;\r\n\r\n viewport.css({\r\n 'overflow-anchor': 'none',\r\n 'overflow-y': 'auto',\r\n 'display': 'block'\r\n });\r\n\r\n function bufferPadding() {\r\n return viewport.outerHeight() * padding; // some extra space to initiate preload\r\n }\r\n\r\n Object.assign(viewport, {\r\n getScope() {\r\n return scope;\r\n },\r\n\r\n createPaddingElements(template) {\r\n topPadding = new Padding(template);\r\n bottomPadding = new Padding(template);\r\n element.before(topPadding.element);\r\n element.after(bottomPadding.element);\r\n topPadding.height(0);\r\n bottomPadding.height(0);\r\n },\r\n\r\n applyContainerStyle() {\r\n if (!container) {\r\n return true;\r\n }\r\n if(container !== viewport) {\r\n viewport.css('height', window.getComputedStyle(container[0]).height);\r\n }\r\n return viewport.height() > 0;\r\n },\r\n\r\n bottomDataPos() {\r\n let scrollHeight = viewport[0].scrollHeight;\r\n scrollHeight = scrollHeight != null ? scrollHeight : viewport[0].document.documentElement.scrollHeight;\r\n return scrollHeight - bottomPadding.height();\r\n },\r\n\r\n topDataPos() {\r\n return topPadding.height();\r\n },\r\n\r\n bottomVisiblePos() {\r\n return viewport.scrollTop() + viewport.outerHeight();\r\n },\r\n\r\n topVisiblePos() {\r\n return viewport.scrollTop();\r\n },\r\n\r\n insertElement(e, sibling) {\r\n return elementRoutines.insertElement(e, sibling || topPadding.element);\r\n },\r\n\r\n insertElementAnimated(e, sibling) {\r\n return elementRoutines.insertElementAnimated(e, sibling || topPadding.element);\r\n },\r\n\r\n shouldLoadBottom() {\r\n return !buffer.eof && viewport.bottomDataPos() < viewport.bottomVisiblePos() + bufferPadding();\r\n },\r\n\r\n clipBottom() {\r\n // clip the invisible items off the bottom\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.bottomDataPos() - viewport.bottomVisiblePos() - bufferPadding();\r\n\r\n for (let i = buffer.length - 1; i >= 0; i--) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n bottomPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n buffer.eof = false;\r\n buffer.remove(buffer.length - overage, buffer.length);\r\n buffer.next -= overage;\r\n viewport.adjustPaddings();\r\n }\r\n },\r\n\r\n shouldLoadTop() {\r\n return !buffer.bof && (viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding());\r\n },\r\n\r\n clipTop() {\r\n // clip the invisible items off the top\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\r\n\r\n for (let i = 0; i < buffer.length; i++) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n topPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n // we need to adjust top padding element before items are removed from top\r\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\r\n topPadding.height(topPadding.height() + overageHeight);\r\n buffer.bof = false;\r\n buffer.remove(0, overage);\r\n buffer.first += overage;\r\n }\r\n },\r\n\r\n adjustPaddings() {\r\n if (!buffer.length) {\r\n return;\r\n }\r\n\r\n // precise heights calculation based on items that are in buffer or that were in buffer once\r\n const visibleItemsHeight = buffer.reduce((summ, item) => summ + item.element.outerHeight(true), 0);\r\n\r\n let topPaddingHeight = 0, topCount = 0;\r\n topPadding.cache.forEach(item => {\r\n if(item.index < buffer.first) {\r\n topPaddingHeight += item.height;\r\n topCount++;\r\n }\r\n });\r\n\r\n let bottomPaddingHeight = 0, bottomCount = 0;\r\n bottomPadding.cache.forEach(item => {\r\n if(item.index >= buffer.next) {\r\n bottomPaddingHeight += item.height;\r\n bottomCount++;\r\n }\r\n });\r\n\r\n const totalHeight = visibleItemsHeight + topPaddingHeight + bottomPaddingHeight;\r\n const averageItemHeight = totalHeight / (topCount + bottomCount + buffer.length);\r\n\r\n // average heights calculation, items that have never been reached\r\n let adjustTopPadding = buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser;\r\n let adjustBottomPadding = buffer.maxIndexUser !== null && buffer.maxIndex < buffer.maxIndexUser;\r\n let topPaddingHeightAdd = adjustTopPadding ? (buffer.minIndex - buffer.minIndexUser) * averageItemHeight : 0;\r\n let bottomPaddingHeightAdd = adjustBottomPadding ? (buffer.maxIndexUser - buffer.maxIndex) * averageItemHeight : 0;\r\n\r\n // paddings combine adjustment\r\n topPadding.height(topPaddingHeight + topPaddingHeightAdd);\r\n bottomPadding.height(bottomPaddingHeight + bottomPaddingHeightAdd);\r\n },\r\n\r\n onAfterMinIndexSet(topPaddingHeightOld) {\r\n // additional scrollTop adjustment in case of datasource.minIndex external set\r\n if (buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser) {\r\n let diff = topPadding.height() - topPaddingHeightOld;\r\n viewport.scrollTop(viewport.scrollTop() + diff);\r\n while((diff -= viewport.scrollTop()) > 0) {\r\n bottomPadding.height(bottomPadding.height() + diff);\r\n viewport.scrollTop(viewport.scrollTop() + diff);\r\n }\r\n }\r\n },\r\n\r\n onAfterPrepend(updates) {\r\n if (!updates.prepended.length)\r\n return;\r\n const height = buffer.effectiveHeight(updates.prepended);\r\n const paddingHeight = topPadding.height() - height;\r\n if (paddingHeight >= 0) {\r\n topPadding.height(paddingHeight);\r\n }\r\n else {\r\n topPadding.height(0);\r\n viewport.scrollTop(viewport.scrollTop() - paddingHeight);\r\n }\r\n },\r\n\r\n resetTopPadding() {\r\n topPadding.height(0);\r\n topPadding.cache.clear();\r\n },\r\n\r\n resetBottomPadding() {\r\n bottomPadding.height(0);\r\n bottomPadding.cache.clear();\r\n },\r\n\r\n removeCacheItem(item, isTop) {\r\n topPadding.cache.remove(item, isTop);\r\n bottomPadding.cache.remove(item, isTop);\r\n },\r\n\r\n removeItem(item) {\r\n this.removeCacheItem(item);\r\n return buffer.remove(item);\r\n }\r\n });\r\n\r\n return viewport;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/viewport.js","// Can't just extend the Array, due to Babel does not support built-in classes extending\r\n// This solution was taken from https://stackoverflow.com/questions/46897414/es6-class-extends-array-workaround-for-es5-babel-transpile\r\nclass CacheProto {\r\n add(item) {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index === item.scope.$index) {\r\n this[i].height = item.element.outerHeight();\r\n return;\r\n }\r\n }\r\n this.push({\r\n index: item.scope.$index,\r\n height: item.element.outerHeight()\r\n });\r\n this.sort((a, b) => ((a.index < b.index) ? -1 : ((a.index > b.index) ? 1 : 0)));\r\n }\r\n\r\n remove(argument, _isTop) {\r\n const index = argument % 1 === 0 ? argument : argument.scope.$index;\r\n const isTop = argument % 1 === 0 ? _isTop : argument._op === 'isTop';\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index === index) {\r\n this.splice(i, 1);\r\n break;\r\n }\r\n }\r\n if(!isTop) {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index > index) {\r\n this[i].index--;\r\n }\r\n }\r\n }\r\n }\r\n\r\n clear() {\r\n this.length = 0;\r\n }\r\n}\r\n\r\nfunction Cache() {\r\n const instance = [];\r\n instance.push.apply(instance, arguments);\r\n Object.setPrototypeOf(instance, Cache.prototype);\r\n return instance;\r\n}\r\nCache.prototype = Object.create(Array.prototype);\r\nObject.getOwnPropertyNames(CacheProto.prototype).forEach(methodName =>\r\n Cache.prototype[methodName] = CacheProto.prototype[methodName]\r\n);\r\n\r\nfunction generateElement(template) {\r\n if(template.nodeType !== Node.ELEMENT_NODE) {\r\n throw new Error('ui-scroll directive requires an Element node for templating the view');\r\n }\r\n let element;\r\n switch (template.tagName.toLowerCase()) {\r\n case 'dl':\r\n throw new Error(`ui-scroll directive does not support <${template.tagName}> as a repeating tag: ${template.outerHTML}`);\r\n case 'tr':\r\n let table = angular.element('
    ');\r\n element = table.find('tr');\r\n break;\r\n case 'li':\r\n element = angular.element('
  • ');\r\n break;\r\n default:\r\n element = angular.element('
    ');\r\n }\r\n return element;\r\n}\r\n\r\nclass Padding {\r\n constructor(template) {\r\n this.element = generateElement(template);\r\n this.cache = new Cache();\r\n }\r\n\r\n height() {\r\n return this.element.height.apply(this.element, arguments);\r\n }\r\n}\r\n\r\nexport default Padding;\n\n\n// WEBPACK FOOTER //\n// ./src/modules/padding.js","class Adapter {\r\n\r\n constructor($scope, $parse, $attr, viewport, buffer, doAdjust, reload) {\r\n this.$parse = $parse;\r\n this.$attr = $attr;\r\n this.viewport = viewport;\r\n this.buffer = buffer;\r\n\r\n this.doAdjust = doAdjust;\r\n this.reload = reload;\r\n\r\n this.isLoading = false;\r\n this.disabled = false;\r\n\r\n const viewportScope = viewport.getScope();\r\n this.startScope = viewportScope.$parent ? viewportScope : $scope;\r\n\r\n this.publicContext = {};\r\n this.assignAdapter($attr.adapter);\r\n this.generatePublicContext();\r\n }\r\n\r\n assignAdapter(adapterAttr) {\r\n if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\\s+|\\s+$/gm, ''))) {\r\n return;\r\n }\r\n let adapterOnScope;\r\n\r\n try {\r\n this.$parse(adapterAttr).assign(this.startScope, {});\r\n adapterOnScope = this.$parse(adapterAttr)(this.startScope);\r\n }\r\n catch (error) {\r\n error.message = `Angular ui-scroll Adapter assignment exception.\\n` +\r\n `Can't parse \"${adapterAttr}\" expression.\\n` +\r\n error.message;\r\n throw error;\r\n }\r\n\r\n Object.assign(adapterOnScope, this.publicContext);\r\n this.publicContext = adapterOnScope;\r\n }\r\n\r\n generatePublicContext() {\r\n // these methods will be accessible out of ui-scroll via user defined adapter\r\n const publicMethods = ['reload', 'applyUpdates', 'append', 'prepend', 'isBOF', 'isEOF', 'isEmpty'];\r\n for (let i = publicMethods.length - 1; i >= 0; i--) {\r\n this.publicContext[publicMethods[i]] = this[publicMethods[i]].bind(this);\r\n }\r\n\r\n // these read-only props will be accessible out of ui-scroll via user defined adapter\r\n const publicProps = ['isLoading', 'topVisible', 'topVisibleElement', 'topVisibleScope', 'bottomVisible', 'bottomVisibleElement', 'bottomVisibleScope'];\r\n for (let i = publicProps.length - 1; i >= 0; i--) {\r\n let property, attr = this.$attr[publicProps[i]];\r\n Object.defineProperty(this, publicProps[i], {\r\n get: () => property,\r\n set: (value) => {\r\n property = value;\r\n this.publicContext[publicProps[i]] = value;\r\n if (attr) {\r\n this.$parse(attr).assign(this.startScope, value);\r\n }\r\n }\r\n });\r\n }\r\n\r\n // non-read-only public property\r\n Object.defineProperty(this.publicContext, 'disabled', {\r\n get: () => this.disabled,\r\n set: (value) => (!(this.disabled = value)) ? this.doAdjust() : null\r\n });\r\n }\r\n\r\n loading(value) {\r\n this.isLoading = value;\r\n }\r\n\r\n isBOF() {\r\n return this.buffer.bof;\r\n }\r\n\r\n isEOF() {\r\n return this.buffer.eof;\r\n }\r\n\r\n isEmpty() {\r\n return !this.buffer.length;\r\n }\r\n\r\n append(newItems) {\r\n this.buffer.append(newItems);\r\n this.doAdjust();\r\n this.viewport.clipTop();\r\n this.viewport.clipBottom();\r\n }\r\n\r\n prepend(newItems) {\r\n this.buffer.prepend(newItems);\r\n this.doAdjust();\r\n this.viewport.clipTop();\r\n this.viewport.clipBottom();\r\n }\r\n\r\n applyUpdates(arg1, arg2) {\r\n if (typeof arg1 === 'function') {\r\n this.applyUpdatesFunc(arg1);\r\n } else {\r\n this.applyUpdatesIndex(arg1, arg2);\r\n }\r\n this.doAdjust();\r\n }\r\n\r\n applyUpdatesFunc(cb) {\r\n this.buffer.slice(0).forEach((wrapper) => {\r\n // we need to do it on the buffer clone, because buffer content\r\n // may change as we iterate through\r\n this.applyUpdate(wrapper, cb(wrapper.item, wrapper.scope, wrapper.element));\r\n });\r\n }\r\n\r\n applyUpdatesIndex(index, newItems) {\r\n if (index % 1 !== 0) {\r\n throw new Error('applyUpdates - ' + index + ' is not a valid index (should be an integer)');\r\n }\r\n const _index = index - this.buffer.first;\r\n\r\n // apply updates only within buffer\r\n if (_index >= 0 && _index < this.buffer.length) {\r\n this.applyUpdate(this.buffer[_index], newItems);\r\n }\r\n // out-of-buffer case: deletion may affect Paddings\r\n else if(index >= this.buffer.getAbsMinIndex() && index <= this.buffer.getAbsMaxIndex()) {\r\n if(Array.isArray(newItems) && !newItems.length) {\r\n this.viewport.removeCacheItem(index, index === this.buffer.minIndex);\r\n if(index === this.buffer.getAbsMinIndex()) {\r\n this.buffer.incrementMinIndex();\r\n }\r\n else {\r\n this.buffer.decrementMaxIndex();\r\n }\r\n }\r\n }\r\n }\r\n\r\n applyUpdate(wrapper, newItems) {\r\n if (!Array.isArray(newItems)) {\r\n return;\r\n }\r\n let position = this.buffer.indexOf(wrapper);\r\n if (!newItems.reverse().some(newItem => newItem === wrapper.item)) {\r\n wrapper.op = 'remove';\r\n if(position === 0 && !newItems.length) {\r\n wrapper._op = 'isTop'; // to catch \"first\" edge case on remove\r\n }\r\n }\r\n newItems.forEach((newItem) => {\r\n if (newItem === wrapper.item) {\r\n position--;\r\n } else {\r\n // 3 parameter (isTop) is to catch \"first\" edge case on insert\r\n this.buffer.insert(position + 1, newItem, position === -1);\r\n }\r\n });\r\n }\r\n\r\n calculateProperties() {\r\n let rowTop = null, topHeight = 0;\r\n let topDone = false, bottomDone = false;\r\n const length = this.buffer.length;\r\n\r\n for (let i = 0; i < length; i++) {\r\n const item = this.buffer[i];\r\n const itemTop = item.element.offset().top;\r\n\r\n if (rowTop !== itemTop) { // a new row condition\r\n const itemHeight = item.element.outerHeight(true);\r\n const top = this.viewport.topDataPos() + topHeight + itemHeight;\r\n\r\n if (!topDone && top > this.viewport.topVisiblePos()) {\r\n topDone = true;\r\n this['topVisible'] = item.item;\r\n this['topVisibleElement'] = item.element;\r\n this['topVisibleScope'] = item.scope;\r\n }\r\n if (!bottomDone && (top >= this.viewport.bottomVisiblePos() || (i === length - 1 && this.isEOF()))) {\r\n bottomDone = true;\r\n this['bottomVisible'] = item.item;\r\n this['bottomVisibleElement'] = item.element;\r\n this['bottomVisibleScope'] = item.scope;\r\n }\r\n topHeight += itemHeight;\r\n }\r\n rowTop = itemTop;\r\n\r\n if (topDone && bottomDone) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n}\r\n\r\nexport default Adapter;\n\n\n// WEBPACK FOOTER //\n// ./src/modules/adapter.js"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/ui-scroll.min.js b/dist/ui-scroll.min.js index e227a8ee..7d0d9f39 100644 --- a/dist/ui-scroll.min.js +++ b/dist/ui-scroll.min.js @@ -1,8 +1,8 @@ -/*! - * angular-ui-scroll (compressed) - * https://github.com/angular-ui/ui-scroll - * Version: 1.7.0-rc.6 -- 2017-11-17T18:27:05.969Z - * License: MIT +/*! + * angular-ui-scroll + * https://github.com/angular-ui/ui-scroll + * Version: 1.7.0-rc.6 -- 2017-11-19T07:39:04.374Z + * License: MIT */ -!function(e){function t(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=7)}([function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n=0;n--)this.publicContext[t[n]]=this[t[n]].bind(this);for(var i=["isLoading","topVisible","topVisibleElement","topVisibleScope","bottomVisible","bottomVisibleElement","bottomVisibleScope"],r=i.length-1;r>=0;r--)!function(t){var n=void 0,r=e.$attr[i[t]];Object.defineProperty(e,i[t],{get:function(){return n},set:function(o){n=o,e.publicContext[i[t]]=o,r&&e.$parse(r).assign(e.startScope,o)}})}(r);Object.defineProperty(this.publicContext,"disabled",{get:function(){return e.disabled},set:function(t){return(e.disabled=t)?null:e.doAdjust()}})}},{key:"loading",value:function(e){this.isLoading=e}},{key:"isBOF",value:function(){return this.buffer.bof}},{key:"isEOF",value:function(){return this.buffer.eof}},{key:"isEmpty",value:function(){return!this.buffer.length}},{key:"append",value:function(e){this.buffer.append(e),this.doAdjust(),this.viewport.clipTop(),this.viewport.clipBottom()}},{key:"prepend",value:function(e){this.buffer.prepend(e),this.doAdjust(),this.viewport.clipTop(),this.viewport.clipBottom()}},{key:"applyUpdates",value:function(e,t){"function"==typeof e?this.applyUpdatesFunc(e):this.applyUpdatesIndex(e,t),this.doAdjust()}},{key:"applyUpdatesFunc",value:function(e){var t=this;this.buffer.slice(0).forEach(function(n){t.applyUpdate(n,e(n.item,n.scope,n.element))})}},{key:"applyUpdatesIndex",value:function(e,t){if(e%1!=0)throw new Error("applyUpdates - "+e+" is not a valid index (should be an integer)");var n=e-this.buffer.first;n>=0&&n=this.buffer.getAbsMinIndex()&&e<=this.buffer.getAbsMaxIndex()&&Array.isArray(t)&&!t.length&&(this.viewport.removeCacheItem(e,e===this.buffer.minIndex),e===this.buffer.getAbsMinIndex()?this.buffer.incrementMinIndex():this.buffer.decrementMaxIndex())}},{key:"applyUpdate",value:function(e,t){var n=this;if(Array.isArray(t)){var i=this.buffer.indexOf(e);t.reverse().some(function(t){return t===e.item})||(e.op="remove",0!==i||t.length||(e._op="isTop")),t.forEach(function(t){t===e.item?i--:n.buffer.insert(i+1,t,-1===i)})}}},{key:"calculateProperties",value:function(){for(var e=null,t=0,n=!1,i=!1,r=this.buffer.length,o=0;othis.viewport.topVisiblePos()&&(n=!0,this.topVisible=a.item,this.topVisibleElement=a.element,this.topVisibleScope=a.scope),!i&&(l>=this.viewport.bottomVisiblePos()||o===r-1&&this.isEOF())&&(i=!0,this.bottomVisible=a.item,this.bottomVisibleElement=a.element,this.bottomVisibleScope=a.scope),t+=s}if(e=u,n&&i)break}}}]),e}();t.default=o},function(e,t,n){"use strict";function i(e,t,n){var i=Object.create(Array.prototype);return Object.assign(i,{size:t,reset:function(e){i.remove(0,i.length),i.eof=!1,i.bof=!1,i.first=e,i.next=e,i.minIndex=e,i.maxIndex=e,i.minIndexUser=null,i.maxIndexUser=null},append:function(e){e.forEach(function(e){++i.next,i.insert("append",e)}),i.maxIndex=i.eof?i.next-1:Math.max(i.next-1,i.maxIndex)},prepend:function(e){e.reverse().forEach(function(e){--i.first,i.insert("prepend",e)}),i.minIndex=i.bof?i.minIndex=i.first:Math.min(i.first,i.minIndex)},insert:function(e,t,n){var r={item:t};if(e%1==0)r.op="insert",i.splice(e,0,r),n?i.first--:i.next++;else switch(r.op=e,e){case"append":i.push(r);break;case"prepend":i.unshift(r)}},remove:function(t,n){if(Number.isInteger(t)){for(var r=t;ri.minIndexUser)return void i.minIndexUser++;i.minIndex===i.minIndexUser&&i.minIndexUser++}i.minIndex++},decrementMaxIndex:function(){null!==i.maxIndexUser&&i.maxIndex<=i.maxIndexUser&&i.maxIndexUser--,i.maxIndex--},getAbsMinIndex:function(){return null!==i.minIndexUser?Math.min(i.minIndexUser,i.minIndex):i.minIndex},getAbsMaxIndex:function(){return null!==i.maxIndexUser?Math.max(i.maxIndexUser,i.maxIndex):i.maxIndex},effectiveHeight:function(e){if(!e.length)return 0;var t=Number.MAX_VALUE,n=Number.NEGATIVE_INFINITY;return e.forEach(function(e){e.element[0].offsetParent&&(t=Math.min(t,e.element.offset().top),n=Math.max(n,e.element.offset().top+e.element.outerHeight(!0)))}),Math.max(0,n-t)}}),i.reset(n),i}Object.defineProperty(t,"__esModule",{value:!0}),t.default=i},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t,n,i){"insertRule"in e?e.insertRule(t+"{"+n+"}",i):"addRule"in e&&e.addRule(t,n,i)}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0?{base:a.base-a.padding-a.border,outer:a.base,outerfull:a.base+a.margin}[i]:(r=u(e),o=r[t],(o<0||null===o)&&(o=e.style[t]||0),o=parseFloat(o)||0,{base:o-a.padding-a.border,outer:o,outerfull:o+a.padding+a.border+a.margin}[i])}var o=void 0,a=void 0,u=void 0,s=void 0;return a=angular.element.prototype.css,e.prototype.css=function(e,t){var n=this,i=n[0];if(i&&3!==i.nodeType&&8!==i.nodeType&&i.style)return a.call(n,e,t)},s=function(e){return e&&e.document&&e.location&&e.alert&&e.setInterval},window.getComputedStyle?(u=function(e){return window.getComputedStyle(e,null)},o=function(e,t){return parseFloat(t)}):(u=function(e){return e.currentStyle},o=function(e,t){var n=void 0,i=void 0,r=void 0,o=void 0,a=void 0,u=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source;return new RegExp("^("+u+")(?!px)[a-z%]+$","i").test(t)?(a=e.style,n=a.left,r=e.runtimeStyle,o=r&&r.left,r&&(r.left=a.left),a.left=t,i=a.pixelLeft,a.left=n,o&&(r.left=o),i):parseFloat(t)}),angular.forEach({before:function(e){var t,n,i,r,o,a,u;if(u=this,n=u[0],o=u.parent(),t=o.contents(),t[0]===n)return o.prepend(e);for(i=r=1,a=t.length-1;1<=a?r<=a:r>=a;i=1<=a?++r:--r)if(t[i]===n)return void angular.element(t[i-1]).after(e);throw new Error("invalid DOM structure "+n.outerHTML)},height:function(e){var t;return t=this,void 0!==e?(Number.isInteger(e)&&(e+="px"),a.call(t,"height",e)):i(this[0],"height","base")},outerHeight:function(e){return i(this[0],"height",e?"outerfull":"outer")},outerWidth:function(e){return i(this[0],"width",e?"outerfull":"outer")},offset:function(e){var t=void 0,n=void 0,i=this,r={top:0,left:0},o=i[0],a=o&&o.ownerDocument;if(arguments.length){if(void 0===e)return i;throw new Error("offset setter method is not implemented")}if(a)return t=a.documentElement,null!=o.getBoundingClientRect&&(r=o.getBoundingClientRect()),n=a.defaultView||a.parentWindow,{top:r.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0),left:r.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)}},scrollTop:function(e){return t(this,"top",e)},scrollLeft:function(e){return t(this,"left",e)}},function(t,n){if(!e.prototype[n])return e.prototype[n]=t})}}]),e}();t.default=a},function(e,t,n){"use strict";function i(e,t,n,i,r,a){function u(){return c.outerHeight()*a}var s=null,l=null,c=i&&i.viewport?i.viewport:angular.element(window),f=i&&i.container?i.container:void 0,d=i&&i.scope?i.scope:r;return c.css({"overflow-anchor":"none","overflow-y":"auto",display:"block"}),Object.assign(c,{getScope:function(){return d},createPaddingElements:function(e){s=new o.default(e),l=new o.default(e),n.before(s.element),n.after(l.element),s.height(0),l.height(0)},applyContainerStyle:function(){return!f||(f!==c&&c.css("height",window.getComputedStyle(f[0]).height),c.height()>0)},bottomDataPos:function(){var e=c[0].scrollHeight;return(e=null!=e?e:c[0].document.documentElement.scrollHeight)-l.height()},topDataPos:function(){return s.height()},bottomVisiblePos:function(){return c.scrollTop()+c.outerHeight()},topVisiblePos:function(){return c.scrollTop()},insertElement:function(t,n){return e.insertElement(t,n||s.element)},insertElementAnimated:function(t,n){return e.insertElementAnimated(t,n||s.element)},shouldLoadBottom:function(){return!t.eof&&c.bottomDataPos()=0&&(i=t[o].element.outerHeight(!0),!(n+i>r));o--)l.cache.add(t[o]),n+=i,e++;e>0&&(t.eof=!1,t.remove(t.length-e,t.length),t.next-=e,c.adjustPaddings())},shouldLoadTop:function(){return!t.bof&&c.topDataPos()>c.topVisiblePos()-u()},clipTop:function(){for(var e=0,n=0,i=0,r=c.topVisiblePos()-c.topDataPos()-u(),o=0;or));o++)s.cache.add(t[o]),n+=i,e++;e>0&&(s.height(s.height()+n),t.bof=!1,t.remove(0,e),t.first+=e)},adjustPaddings:function(){if(t.length){var e=t.reduce(function(e,t){return e+t.element.outerHeight(!0)},0),n=0,i=0;s.cache.forEach(function(e){e.index=t.next&&(r+=e.height,o++)});var a=e+n+r,u=a/(i+o+t.length),c=null!==t.minIndexUser&&t.minIndex>t.minIndexUser,f=null!==t.maxIndexUser&&t.maxIndext.minIndexUser){var n=s.height()-e;for(c.scrollTop(c.scrollTop()+n);(n-=c.scrollTop())>0;)l.height(l.height()+n),c.scrollTop(c.scrollTop()+n)}},onAfterPrepend:function(e){if(e.prepended.length){var n=t.effectiveHeight(e.prepended),i=s.height()-n;i>=0?s.height(i):(s.height(0),c.scrollTop(c.scrollTop()-i))}},resetTopPadding:function(){s.height(0),s.cache.clear()},resetBottomPadding:function(){l.height(0),l.cache.clear()},removeCacheItem:function(e,t){s.cache.remove(e,t),l.cache.remove(e,t)},removeItem:function(e){return this.removeCacheItem(e),t.remove(e)}}),c}Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(5),o=function(e){return e&&e.__esModule?e:{default:e}}(r)},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(){var e=[];return e.push.apply(e,arguments),Object.setPrototypeOf(e,r.prototype),e}function o(e){if(e.nodeType!==Node.ELEMENT_NODE)throw new Error("ui-scroll directive requires an Element node for templating the view");var t=void 0;switch(e.tagName.toLowerCase()){case"dl":throw new Error("ui-scroll directive does not support <"+e.tagName+"> as a repeating tag: "+e.outerHTML);case"tr":t=angular.element("
    ").find("tr");break;case"li":t=angular.element("
  • ");break;default:t=angular.element("
    ")}return t}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n=0;t--)if(this[t].index===e.scope.$index)return void(this[t].height=e.element.outerHeight());this.push({index:e.scope.$index,height:e.element.outerHeight()}),this.sort(function(e,t){return e.indext.index?1:0})}},{key:"remove",value:function(e,t){for(var n=e%1==0?e:e.scope.$index,i=e%1==0?t:"isTop"===e._op,r=this.length-1;r>=0;r--)if(this[r].index===n){this.splice(r,1);break}if(!i)for(var o=this.length-1;o>=0;o--)this[o].index>n&&this[o].index--}},{key:"clear",value:function(){this.length=0}}]),e}();r.prototype=Object.create(Array.prototype),Object.getOwnPropertyNames(u.prototype).forEach(function(e){return r.prototype[e]=u.prototype[e]});var s=function(){function e(t){i(this,e),this.element=o(t),this.cache=new r}return a(e,[{key:"height",value:function(){return this.element.height.apply(this.element,arguments)}}]),e}();t.default=s},,function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}var r=n(3),o=i(r),a=n(2),u=i(a),s=n(1),l=i(s),c=n(4),f=i(c),d=n(0),h=i(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","$interval","$q","$parse",function(e,t,n,i,r,o,a){function s(e,s,c,d,p){function m(t,n){var i=a(t)(e);return isNaN(i)?n:i}function g(){J.forEach(function(e){return e.run()}),J=[]}function v(e,t){var n=void 0;Number.isInteger(e[t])&&(n=e[t],Number.isInteger(n)&&(J=J.filter(function(e){return e.id!==t}),J.push({id:t,run:function(){return e[t]=n}})))}function b(e,t,n){var i=Object.getOwnPropertyDescriptor(e,t);if(!i||!i.set&&!i.get){var r=void 0;v(e,t),Object.defineProperty(e,t,{set:function(i){if(r=i,z.length&&!X.length)return void v(e,t);X[n]=i;var o=Y.topDataPos();Y.adjustPaddings(),"minIndex"===t&&Y.onAfterMinIndexSet(o)},get:function(){return r}})}}function x(t){return t&&t!==q||e.$$destroyed}function y(){Y.bind("resize",V),Y.bind("scroll",V)}function w(){Y.unbind("resize",V),Y.unbind("scroll",V)}function I(){Y.resetTopPadding(),Y.resetBottomPadding(),arguments.length&&(W=arguments[0]),X.reset(W),v(C,"minIndex"),v(C,"maxIndex"),M()}function E(e){return e.element.height()&&e.element[0].offsetParent}function P(e){E(e)&&(X.forEach(function(e){"function"==typeof e.unregisterVisibilityWatcher&&(e.unregisterVisibilityWatcher(),delete e.unregisterVisibilityWatcher)}),z.length||i(function(){return M()}))}function $(e,t){T(e,t,Y.insertElement),E(e)||(e.unregisterVisibilityWatcher=e.scope.$watch(function(){return P(e)})),R.hideElement(e)}function T(e,t,n){var i=null,r=t>0?X[t-1].element:void 0;if(p(function(t,o){i=n(t,r),e.element=t,e.scope=o,o[H]=e.item}),G.transform){var o=e.scope.uiScrollTdInitializer;o&&o.linking?G.transform(e.scope,e.element):e.scope.uiScrollTdInitializer={onLink:function(){return G.transform(e.scope,e.element)},scope:e.scope}}return i}function O(){var e=[],t=[],n=[],i=[];return X.forEach(function(r,o){switch(r.op){case"prepend":t.unshift(r);break;case"append":$(r,o),r.op="none",i.push(r);break;case"insert":e=e.concat(T(r,o,Y.insertElementAnimated)),r.op="none",i.push(r);break;case"remove":n.push(r)}}),n.forEach(function(t){return e=e.concat(Y.removeItem(t))}),t.length&&t.forEach(function(e){$(e),e.op="none"}),X.forEach(function(e,t){return e.scope.$index=X.first+t}),{prepended:t,removed:n,inserted:i,animated:e}}function j(e,t){t.animated.length?o.all(t.animated).then(function(){Y.adjustPaddings(),M(e)}):Y.adjustPaddings()}function A(e,t){Y.shouldLoadBottom()?(!t||X.effectiveHeight(t.inserted)>0)&&1===z.push(!0)&&(G.loading(!0),S(e)):Y.shouldLoadTop()&&(!t||X.effectiveHeight(t.prepended)>0||z[0])&&1===z.push(!1)&&(G.loading(!0),S(e))}function k(){var t=O();return!e.$$phase&&!n.$$phase&&e.$digest(),t.inserted.forEach(function(e){return R.showElement(e)}),t.prepended.forEach(function(e){return R.showElement(e)}),t}function M(e){e||(z=[],e=++q);var t=k();x(e)||(j(e,t),A(e),z.length||G.calculateProperties())}function U(e){var t=k();Y.onAfterPrepend(t),x(e)||(j(e,t),g(),A(e,t),z.shift(),z.length?S(e):(G.loading(!1),y(),G.calculateProperties()))}function S(e){z[0]?X.length&&!Y.shouldLoadBottom()?U(e):K(function(t){x(e)||(t.length0&&(Y.clipTop(),X.append(t)),U(e))}):X.length&&!Y.shouldLoadTop()?U(e):Z(function(t){x(e)||(t.length0&&(X.length&&Y.clipBottom(),X.prepend(t)),U(e))})}function V(){n.$$phase||G.isLoading||G.disabled||(A(q),z.length?w():(G.calculateProperties(),!e.$$phase&&e.$digest()))}function _(e){if(!G.disabled){var t=Y[0].scrollTop,n=Y[0].scrollHeight-Y[0].clientHeight;(0===t&&!X.bof||t===n&&!X.eof)&&e.preventDefault()}}var L=c.uiScroll.match(/^\s*(\w+)\s+in\s+([(\w|\$)\.]+)\s*$/);if(!L)throw new Error("Expected uiScroll in form of '_item_ in _datasource_' but got '"+c.uiScroll+"'");var C=null,H=L[1],N=L[2],B=d[0],D=Math.max(3,m(c.bufferSize,10)),F=Math.max(.3,m(c.padding,.5)),W=m(c.startIndex,1),q=0,z=[],R=new u.default(t,o),X=new l.default(R,D,W),Y=new f.default(R,X,s,B,n,F),G=new h.default(e,a,c,Y,X,M,I);B&&(B.adapter=G);var Q=function(){return"[object Object]"===Object.prototype.toString.call(C)&&"function"==typeof C.get};if(C=a(N)(e),!Q()&&(C=t.get(N),!Q()))throw new Error(N+" is not a valid datasource");var J=[];b(C,"minIndex","minIndexUser"),b(C,"maxIndex","maxIndexUser");var K=2!==C.get.length?function(e){return C.get(X.next,D,e)}:function(e){C.get({index:X.next,append:X.length?X[X.length-1].item:void 0,count:D},e)},Z=2!==C.get.length?function(e){return C.get(X.first-D,D,e)}:function(e){C.get({index:X.first-D,prepend:X.length?X[0].item:void 0,count:D},e)};p(function(e,t){Y.createPaddingElements(e[0]),t.$destroy(),e.remove()}),e.$on("$destroy",function(){w(),Y.unbind("mousewheel",_)}),Y.bind("mousewheel",_),function(){var e=0;if(Y.applyContainerStyle())M();else var t=r(function(){if(e++,Y.applyContainerStyle()&&(r.cancel(t),M()),50*e>=500)throw r.cancel(t),Error("ui-scroll directive requires a viewport with non-zero height in 500ms")},50)}()}return{require:["?^uiScrollViewport"],restrict:"A",transclude:"element",priority:1e3,terminal:!0,link:s}}])}]); +!function(e){function t(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};t.m=e,t.c=n,t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=0)}([function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}var r=n(1),o=i(r),a=n(2),u=i(a),s=n(3),l=i(s),c=n(4),f=i(c),d=n(6),h=i(d);angular.module("ui.scroll",[]).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","$interval","$q","$parse",function(e,t,n,i,r,o,a){function s(e,s,c,d,p){function m(t,n){var i=a(t)(e);return isNaN(i)?n:i}function g(){J.forEach(function(e){return e.run()}),J=[]}function v(e,t){var n=void 0;Number.isInteger(e[t])&&(n=e[t],Number.isInteger(n)&&(J=J.filter(function(e){return e.id!==t}),J.push({id:t,run:function(){return e[t]=n}})))}function b(e,t,n){var i=Object.getOwnPropertyDescriptor(e,t);if(!i||!i.set&&!i.get){var r=void 0;v(e,t),Object.defineProperty(e,t,{set:function(i){if(r=i,z.length&&!X.length)return void v(e,t);X[n]=i;var o=Y.topDataPos();Y.adjustPaddings(),"minIndex"===t&&Y.onAfterMinIndexSet(o)},get:function(){return r}})}}function x(t){return t&&t!==q||e.$$destroyed}function y(){Y.bind("resize",V),Y.bind("scroll",V)}function w(){Y.unbind("resize",V),Y.unbind("scroll",V)}function I(){Y.resetTopPadding(),Y.resetBottomPadding(),arguments.length&&(W=arguments[0]),X.reset(W),v(C,"minIndex"),v(C,"maxIndex"),M()}function E(e){return e.element.height()&&e.element[0].offsetParent}function P(e){E(e)&&(X.forEach(function(e){"function"==typeof e.unregisterVisibilityWatcher&&(e.unregisterVisibilityWatcher(),delete e.unregisterVisibilityWatcher)}),z.length||i(function(){return M()}))}function $(e,t){T(e,t,Y.insertElement),E(e)||(e.unregisterVisibilityWatcher=e.scope.$watch(function(){return P(e)})),R.hideElement(e)}function T(e,t,n){var i=null,r=t>0?X[t-1].element:void 0;if(p(function(t,o){i=n(t,r),e.element=t,e.scope=o,o[H]=e.item}),G.transform){var o=e.scope.uiScrollTdInitializer;o&&o.linking?G.transform(e.scope,e.element):e.scope.uiScrollTdInitializer={onLink:function(){return G.transform(e.scope,e.element)},scope:e.scope}}return i}function O(){var e=[],t=[],n=[],i=[];return X.forEach(function(r,o){switch(r.op){case"prepend":t.unshift(r);break;case"append":$(r,o),r.op="none",i.push(r);break;case"insert":e=e.concat(T(r,o,Y.insertElementAnimated)),r.op="none",i.push(r);break;case"remove":n.push(r)}}),n.forEach(function(t){return e=e.concat(Y.removeItem(t))}),t.length&&t.forEach(function(e){$(e),e.op="none"}),X.forEach(function(e,t){return e.scope.$index=X.first+t}),{prepended:t,removed:n,inserted:i,animated:e}}function j(e,t){t.animated.length?o.all(t.animated).then(function(){Y.adjustPaddings(),M(e)}):Y.adjustPaddings()}function A(e,t){Y.shouldLoadBottom()?(!t||X.effectiveHeight(t.inserted)>0)&&1===z.push(!0)&&(G.loading(!0),S(e)):Y.shouldLoadTop()&&(!t||X.effectiveHeight(t.prepended)>0||z[0])&&1===z.push(!1)&&(G.loading(!0),S(e))}function k(){var t=O();return!e.$$phase&&!n.$$phase&&e.$digest(),t.inserted.forEach(function(e){return R.showElement(e)}),t.prepended.forEach(function(e){return R.showElement(e)}),t}function M(e){e||(z=[],e=++q);var t=k();x(e)||(j(e,t),A(e),z.length||G.calculateProperties())}function U(e){var t=k();Y.onAfterPrepend(t),x(e)||(j(e,t),g(),A(e,t),z.shift(),z.length?S(e):(G.loading(!1),y(),G.calculateProperties()))}function S(e){z[0]?X.length&&!Y.shouldLoadBottom()?U(e):K(function(t){x(e)||(t.length0&&(Y.clipTop(),X.append(t)),U(e))}):X.length&&!Y.shouldLoadTop()?U(e):Z(function(t){x(e)||(t.length0&&(X.length&&Y.clipBottom(),X.prepend(t)),U(e))})}function V(){n.$$phase||G.isLoading||G.disabled||(A(q),z.length?w():(G.calculateProperties(),!e.$$phase&&e.$digest()))}function _(e){if(!G.disabled){var t=Y[0].scrollTop,n=Y[0].scrollHeight-Y[0].clientHeight;(0===t&&!X.bof||t===n&&!X.eof)&&e.preventDefault()}}var L=c.uiScroll.match(/^\s*(\w+)\s+in\s+([(\w|\$)\.]+)\s*$/);if(!L)throw new Error("Expected uiScroll in form of '_item_ in _datasource_' but got '"+c.uiScroll+"'");var C=null,H=L[1],N=L[2],B=d[0],D=Math.max(3,m(c.bufferSize,10)),F=Math.max(.3,m(c.padding,.5)),W=m(c.startIndex,1),q=0,z=[],R=new u.default(t,o),X=new l.default(R,D,W),Y=new f.default(R,X,s,B,n,F),G=new h.default(e,a,c,Y,X,M,I);B&&(B.adapter=G);var Q=function(){return"[object Object]"===Object.prototype.toString.call(C)&&"function"==typeof C.get};if(C=a(N)(e),!Q()&&(C=t.get(N),!Q()))throw new Error(N+" is not a valid datasource");var J=[];b(C,"minIndex","minIndexUser"),b(C,"maxIndex","maxIndexUser");var K=2!==C.get.length?function(e){return C.get(X.next,D,e)}:function(e){C.get({index:X.next,append:X.length?X[X.length-1].item:void 0,count:D},e)},Z=2!==C.get.length?function(e){return C.get(X.first-D,D,e)}:function(e){C.get({index:X.first-D,prepend:X.length?X[0].item:void 0,count:D},e)};p(function(e,t){Y.createPaddingElements(e[0]),t.$destroy(),e.remove()}),e.$on("$destroy",function(){w(),Y.unbind("mousewheel",_)}),Y.bind("mousewheel",_),function(){var e=0;if(Y.applyContainerStyle())M();else var t=r(function(){if(e++,Y.applyContainerStyle()&&(r.cancel(t),M()),50*e>=500)throw r.cancel(t),Error("ui-scroll directive requires a viewport with non-zero height in 500ms")},50)}()}return{require:["?^uiScrollViewport"],restrict:"A",transclude:"element",priority:1e3,terminal:!0,link:s}}])},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){var n=[],i=!0,r=!1,o=void 0;try{for(var a,u=e[Symbol.iterator]();!(i=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);i=!0);}catch(e){r=!0,o=e}finally{try{!i&&u.return&&u.return()}finally{if(r)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),o=function(){function e(e,t){for(var n=0;n0?{base:a.base-a.padding-a.border,outer:a.base,outerfull:a.base+a.margin}[i]:(r=u(e),o=r[t],(o<0||null===o)&&(o=e.style[t]||0),o=parseFloat(o)||0,{base:o-a.padding-a.border,outer:o,outerfull:o+a.padding+a.border+a.margin}[i])}var o=void 0,a=void 0,u=void 0,s=void 0;return a=angular.element.prototype.css,e.prototype.css=function(e,t){var n=this,i=n[0];if(i&&3!==i.nodeType&&8!==i.nodeType&&i.style)return a.call(n,e,t)},s=function(e){return e&&e.document&&e.location&&e.alert&&e.setInterval},window.getComputedStyle?(u=function(e){return window.getComputedStyle(e,null)},o=function(e,t){return parseFloat(t)}):(u=function(e){return e.currentStyle},o=function(e,t){var n=void 0,i=void 0,r=void 0,o=void 0,a=void 0,u=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source;return new RegExp("^("+u+")(?!px)[a-z%]+$","i").test(t)?(a=e.style,n=a.left,r=e.runtimeStyle,o=r&&r.left,r&&(r.left=a.left),a.left=t,i=a.pixelLeft,a.left=n,o&&(r.left=o),i):parseFloat(t)}),angular.forEach({before:function(e){var t,n,i,r,o,a,u;if(u=this,n=u[0],o=u.parent(),t=o.contents(),t[0]===n)return o.prepend(e);for(i=r=1,a=t.length-1;1<=a?r<=a:r>=a;i=1<=a?++r:--r)if(t[i]===n)return void angular.element(t[i-1]).after(e);throw new Error("invalid DOM structure "+n.outerHTML)},height:function(e){var t;return t=this,void 0!==e?(Number.isInteger(e)&&(e+="px"),a.call(t,"height",e)):i(this[0],"height","base")},outerHeight:function(e){return i(this[0],"height",e?"outerfull":"outer")},outerWidth:function(e){return i(this[0],"width",e?"outerfull":"outer")},offset:function(e){var t=void 0,n=void 0,i=this,r={top:0,left:0},o=i[0],a=o&&o.ownerDocument;if(arguments.length){if(void 0===e)return i;throw new Error("offset setter method is not implemented")}if(a)return t=a.documentElement,null!=o.getBoundingClientRect&&(r=o.getBoundingClientRect()),n=a.defaultView||a.parentWindow,{top:r.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0),left:r.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)}},scrollTop:function(e){return t(this,"top",e)},scrollLeft:function(e){return t(this,"left",e)}},function(t,n){if(!e.prototype[n])return e.prototype[n]=t})}}]),e}();t.default=a},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t,n,i){"insertRule"in e?e.insertRule(t+"{"+n+"}",i):"addRule"in e&&e.addRule(t,n,i)}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;ni.minIndexUser)return void i.minIndexUser++;i.minIndex===i.minIndexUser&&i.minIndexUser++}i.minIndex++},decrementMaxIndex:function(){null!==i.maxIndexUser&&i.maxIndex<=i.maxIndexUser&&i.maxIndexUser--,i.maxIndex--},getAbsMinIndex:function(){return null!==i.minIndexUser?Math.min(i.minIndexUser,i.minIndex):i.minIndex},getAbsMaxIndex:function(){return null!==i.maxIndexUser?Math.max(i.maxIndexUser,i.maxIndex):i.maxIndex},effectiveHeight:function(e){if(!e.length)return 0;var t=Number.MAX_VALUE,n=Number.NEGATIVE_INFINITY;return e.forEach(function(e){e.element[0].offsetParent&&(t=Math.min(t,e.element.offset().top),n=Math.max(n,e.element.offset().top+e.element.outerHeight(!0)))}),Math.max(0,n-t)}}),i.reset(n),i}Object.defineProperty(t,"__esModule",{value:!0}),t.default=i},function(e,t,n){"use strict";function i(e,t,n,i,r,a){function u(){return c.outerHeight()*a}var s=null,l=null,c=i&&i.viewport?i.viewport:angular.element(window),f=i&&i.container?i.container:void 0,d=i&&i.scope?i.scope:r;return c.css({"overflow-anchor":"none","overflow-y":"auto",display:"block"}),Object.assign(c,{getScope:function(){return d},createPaddingElements:function(e){s=new o.default(e),l=new o.default(e),n.before(s.element),n.after(l.element),s.height(0),l.height(0)},applyContainerStyle:function(){return!f||(f!==c&&c.css("height",window.getComputedStyle(f[0]).height),c.height()>0)},bottomDataPos:function(){var e=c[0].scrollHeight;return(e=null!=e?e:c[0].document.documentElement.scrollHeight)-l.height()},topDataPos:function(){return s.height()},bottomVisiblePos:function(){return c.scrollTop()+c.outerHeight()},topVisiblePos:function(){return c.scrollTop()},insertElement:function(t,n){return e.insertElement(t,n||s.element)},insertElementAnimated:function(t,n){return e.insertElementAnimated(t,n||s.element)},shouldLoadBottom:function(){return!t.eof&&c.bottomDataPos()=0&&(i=t[o].element.outerHeight(!0),!(n+i>r));o--)l.cache.add(t[o]),n+=i,e++;e>0&&(t.eof=!1,t.remove(t.length-e,t.length),t.next-=e,c.adjustPaddings())},shouldLoadTop:function(){return!t.bof&&c.topDataPos()>c.topVisiblePos()-u()},clipTop:function(){for(var e=0,n=0,i=0,r=c.topVisiblePos()-c.topDataPos()-u(),o=0;or));o++)s.cache.add(t[o]),n+=i,e++;e>0&&(s.height(s.height()+n),t.bof=!1,t.remove(0,e),t.first+=e)},adjustPaddings:function(){if(t.length){var e=t.reduce(function(e,t){return e+t.element.outerHeight(!0)},0),n=0,i=0;s.cache.forEach(function(e){e.index=t.next&&(r+=e.height,o++)});var a=e+n+r,u=a/(i+o+t.length),c=null!==t.minIndexUser&&t.minIndex>t.minIndexUser,f=null!==t.maxIndexUser&&t.maxIndext.minIndexUser){var n=s.height()-e;for(c.scrollTop(c.scrollTop()+n);(n-=c.scrollTop())>0;)l.height(l.height()+n),c.scrollTop(c.scrollTop()+n)}},onAfterPrepend:function(e){if(e.prepended.length){var n=t.effectiveHeight(e.prepended),i=s.height()-n;i>=0?s.height(i):(s.height(0),c.scrollTop(c.scrollTop()-i))}},resetTopPadding:function(){s.height(0),s.cache.clear()},resetBottomPadding:function(){l.height(0),l.cache.clear()},removeCacheItem:function(e,t){s.cache.remove(e,t),l.cache.remove(e,t)},removeItem:function(e){return this.removeCacheItem(e),t.remove(e)}}),c}Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var r=n(5),o=function(e){return e&&e.__esModule?e:{default:e}}(r)},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(){var e=[];return e.push.apply(e,arguments),Object.setPrototypeOf(e,r.prototype),e}function o(e){if(e.nodeType!==Node.ELEMENT_NODE)throw new Error("ui-scroll directive requires an Element node for templating the view");var t=void 0;switch(e.tagName.toLowerCase()){case"dl":throw new Error("ui-scroll directive does not support <"+e.tagName+"> as a repeating tag: "+e.outerHTML);case"tr":t=angular.element("
    ").find("tr");break;case"li":t=angular.element("
  • ");break;default:t=angular.element("
    ")}return t}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n=0;t--)if(this[t].index===e.scope.$index)return void(this[t].height=e.element.outerHeight());this.push({index:e.scope.$index,height:e.element.outerHeight()}),this.sort(function(e,t){return e.indext.index?1:0})}},{key:"remove",value:function(e,t){for(var n=e%1==0?e:e.scope.$index,i=e%1==0?t:"isTop"===e._op,r=this.length-1;r>=0;r--)if(this[r].index===n){this.splice(r,1);break}if(!i)for(var o=this.length-1;o>=0;o--)this[o].index>n&&this[o].index--}},{key:"clear",value:function(){this.length=0}}]),e}();r.prototype=Object.create(Array.prototype),Object.getOwnPropertyNames(u.prototype).forEach(function(e){return r.prototype[e]=u.prototype[e]});var s=function(){function e(t){i(this,e),this.element=o(t),this.cache=new r}return a(e,[{key:"height",value:function(){return this.element.height.apply(this.element,arguments)}}]),e}();t.default=s},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n=0;n--)this.publicContext[t[n]]=this[t[n]].bind(this);for(var i=["isLoading","topVisible","topVisibleElement","topVisibleScope","bottomVisible","bottomVisibleElement","bottomVisibleScope"],r=i.length-1;r>=0;r--)!function(t){var n=void 0,r=e.$attr[i[t]];Object.defineProperty(e,i[t],{get:function(){return n},set:function(o){n=o,e.publicContext[i[t]]=o,r&&e.$parse(r).assign(e.startScope,o)}})}(r);Object.defineProperty(this.publicContext,"disabled",{get:function(){return e.disabled},set:function(t){return(e.disabled=t)?null:e.doAdjust()}})}},{key:"loading",value:function(e){this.isLoading=e}},{key:"isBOF",value:function(){return this.buffer.bof}},{key:"isEOF",value:function(){return this.buffer.eof}},{key:"isEmpty",value:function(){return!this.buffer.length}},{key:"append",value:function(e){this.buffer.append(e),this.doAdjust(),this.viewport.clipTop(),this.viewport.clipBottom()}},{key:"prepend",value:function(e){this.buffer.prepend(e),this.doAdjust(),this.viewport.clipTop(),this.viewport.clipBottom()}},{key:"applyUpdates",value:function(e,t){"function"==typeof e?this.applyUpdatesFunc(e):this.applyUpdatesIndex(e,t),this.doAdjust()}},{key:"applyUpdatesFunc",value:function(e){var t=this;this.buffer.slice(0).forEach(function(n){t.applyUpdate(n,e(n.item,n.scope,n.element))})}},{key:"applyUpdatesIndex",value:function(e,t){if(e%1!=0)throw new Error("applyUpdates - "+e+" is not a valid index (should be an integer)");var n=e-this.buffer.first;n>=0&&n=this.buffer.getAbsMinIndex()&&e<=this.buffer.getAbsMaxIndex()&&Array.isArray(t)&&!t.length&&(this.viewport.removeCacheItem(e,e===this.buffer.minIndex),e===this.buffer.getAbsMinIndex()?this.buffer.incrementMinIndex():this.buffer.decrementMaxIndex())}},{key:"applyUpdate",value:function(e,t){var n=this;if(Array.isArray(t)){var i=this.buffer.indexOf(e);t.reverse().some(function(t){return t===e.item})||(e.op="remove",0!==i||t.length||(e._op="isTop")),t.forEach(function(t){t===e.item?i--:n.buffer.insert(i+1,t,-1===i)})}}},{key:"calculateProperties",value:function(){for(var e=null,t=0,n=!1,i=!1,r=this.buffer.length,o=0;othis.viewport.topVisiblePos()&&(n=!0,this.topVisible=a.item,this.topVisibleElement=a.element,this.topVisibleScope=a.scope),!i&&(l>=this.viewport.bottomVisiblePos()||o===r-1&&this.isEOF())&&(i=!0,this.bottomVisible=a.item,this.bottomVisibleElement=a.element,this.bottomVisibleScope=a.scope),t+=s}if(e=u,n&&i)break}}}]),e}();t.default=o}]); //# 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 eda280b4..81dc3c79 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 ff58afc7647583ed56f1","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","_createClass","defineProperties","target","props","length","descriptor","writable","key","protoProps","staticProps","Adapter","$scope","$parse","$attr","viewport","buffer","doAdjust","reload","this","isLoading","disabled","viewportScope","getScope","startScope","$parent","publicContext","assignAdapter","adapter","generatePublicContext","adapterAttr","replace","adapterOnScope","assign","error","message","_this","publicMethods","bind","publicProps","attr","set","bof","eof","newItems","append","clipTop","clipBottom","prepend","arg1","arg2","applyUpdatesFunc","applyUpdatesIndex","cb","_this2","slice","forEach","wrapper","applyUpdate","item","scope","element","index","Error","_index","first","getAbsMinIndex","getAbsMaxIndex","Array","isArray","removeCacheItem","minIndex","incrementMinIndex","decrementMaxIndex","_this3","position","indexOf","reverse","some","newItem","op","_op","insert","rowTop","topHeight","topDone","bottomDone","itemTop","offset","top","itemHeight","outerHeight","topDataPos","topVisiblePos","bottomVisiblePos","isEOF","default","ScrollBuffer","elementRoutines","bufferSize","startIndex","create","size","reset","remove","next","maxIndex","minIndexUser","maxIndexUser","items","Math","max","min","operation","isTop","splice","push","unshift","Number","isInteger","removeElement","removeElementAnimated","effectiveHeight","elements","MAX_VALUE","bottom","NEGATIVE_INFINITY","offsetParent","addCSSRule","sheet","selector","rules","insertRule","addRule","hideClassToken","ElementRoutines","$injector","$q","$animate","has","isAngularVersionLessThen1_3","angular","version","major","minor","document","styleSheets","addClass","removeClass","newElement","previousElement","after","$destroy","insertElement","deferred","defer","enter","resolve","promise","leave","then","_slicedToArray","sliceIterator","arr","_arr","_n","_d","_e","undefined","_s","_i","Symbol","iterator","done","err","JQLiteExtras","scrollTo","self","direction","elem","_top$left$direction","left","method","prop","preserve","isValueDefined","isWindow","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","window","getComputedStyle","currentStyle","rs","rsLeft","core_pnum","source","RegExp","test","runtimeStyle","pixelLeft","before","newElem","children","j","parent","ref","contents","outerHTML","option","outerWidth","docElem","win","box","doc","ownerDocument","arguments","getBoundingClientRect","defaultView","parentWindow","pageYOffset","scrollTop","clientTop","pageXOffset","scrollLeft","clientLeft","Viewport","viewportController","$rootScope","bufferPadding","topPadding","bottomPadding","container","overflow-anchor","overflow-y","display","createPaddingElements","template","_padding2","applyContainerStyle","bottomDataPos","scrollHeight","e","sibling","insertElementAnimated","shouldLoadBottom","overage","overageHeight","emptySpaceHeight","cache","add","adjustPaddings","shouldLoadTop","visibleItemsHeight","reduce","summ","topPaddingHeight","topCount","bottomPaddingHeight","bottomCount","totalHeight","averageItemHeight","adjustTopPadding","adjustBottomPadding","topPaddingHeightAdd","bottomPaddingHeightAdd","onAfterMinIndexSet","topPaddingHeightOld","diff","onAfterPrepend","updates","prepended","paddingHeight","resetTopPadding","clear","resetBottomPadding","removeItem","_padding","Cache","apply","setPrototypeOf","generateElement","Node","ELEMENT_NODE","tagName","toLowerCase","find","CacheProto","$index","sort","a","b","argument","_isTop","getOwnPropertyNames","methodName","Padding","_interopRequireDefault","_jqLiteExtras","_jqLiteExtras2","_elementRoutines","_elementRoutines2","_buffer","_buffer2","_viewport","_viewport2","_adapter","_adapter2","service","run","jqLiteExtras","jQuery","registerFor","directive","restrict","controller","child","console","$timeout","$interval","link","controllers","linker","parseNumericAttr","defaultValue","isNaN","onRenderHandlersRunner","onRenderHandlers","handler","persistDatasourceIndex","datasource","propName","filter","id","defineDatasourceIndex","propUserName","getOwnPropertyDescriptor","pending","isInvalid","rid","ridActual","$$destroyed","bindEvents","resizeAndScrollHandler","unbindEvents","unbind","isElementVisible","visibilityWatcher","unregisterVisibilityWatcher","insertWrapperContent","insertAfter","createElement","$watch","hideElement","promises","clone","itemName","transform","tdInitializer","uiScrollTdInitializer","linking","onLink","updateDOM","toBePrepended","toBeRemoved","inserted","concat","removed","animated","updatePaddings","all","enqueueFetch","loading","fetch","processUpdates","$$phase","$digest","w","showElement","calculateProperties","doAdjustAfterFetch","shift","fetchNext","fetchPrevious","wheelHandler","event","yMax","clientHeight","preventDefault","match","uiScroll","datasourceName","isDatasourceValid","toString","success","count","$on","tryCount","timer","cancel","require","transclude","priority","terminal"],"mappings":"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","file":"ui-scroll.min.js","sourcesContent":["/*!\r\n * angular-ui-scroll (uncompressed)\r\n * https://github.com/angular-ui/ui-scroll\r\n * Version: 1.7.0-rc.6 -- 2017-11-17T18:27:05.558Z\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\nvar Adapter = function () {\n function Adapter($scope, $parse, $attr, viewport, buffer, doAdjust, reload) {\n _classCallCheck(this, Adapter);\n\n this.$parse = $parse;\n this.$attr = $attr;\n this.viewport = viewport;\n this.buffer = buffer;\n\n this.doAdjust = doAdjust;\n this.reload = reload;\n\n this.isLoading = false;\n this.disabled = false;\n\n var viewportScope = viewport.getScope();\n this.startScope = viewportScope.$parent ? viewportScope : $scope;\n\n this.publicContext = {};\n this.assignAdapter($attr.adapter);\n this.generatePublicContext();\n }\n\n _createClass(Adapter, [{\n key: 'assignAdapter',\n value: function assignAdapter(adapterAttr) {\n if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\\s+|\\s+$/gm, ''))) {\n return;\n }\n var adapterOnScope = void 0;\n\n try {\n this.$parse(adapterAttr).assign(this.startScope, {});\n adapterOnScope = this.$parse(adapterAttr)(this.startScope);\n } catch (error) {\n error.message = 'Angular ui-scroll Adapter assignment exception.\\n' + ('Can\\'t parse \"' + adapterAttr + '\" expression.\\n') + error.message;\n throw error;\n }\n\n Object.assign(adapterOnScope, this.publicContext);\n this.publicContext = adapterOnScope;\n }\n }, {\n key: 'generatePublicContext',\n value: function generatePublicContext() {\n var _this = this;\n\n // these methods will be accessible out of ui-scroll via user defined adapter\n var publicMethods = ['reload', 'applyUpdates', 'append', 'prepend', 'isBOF', 'isEOF', 'isEmpty'];\n for (var i = publicMethods.length - 1; i >= 0; i--) {\n this.publicContext[publicMethods[i]] = this[publicMethods[i]].bind(this);\n }\n\n // these read-only props will be accessible out of ui-scroll via user defined adapter\n var publicProps = ['isLoading', 'topVisible', 'topVisibleElement', 'topVisibleScope', 'bottomVisible', 'bottomVisibleElement', 'bottomVisibleScope'];\n\n var _loop = function _loop(_i) {\n var property = void 0,\n attr = _this.$attr[publicProps[_i]];\n Object.defineProperty(_this, publicProps[_i], {\n get: function get() {\n return property;\n },\n set: function set(value) {\n property = value;\n _this.publicContext[publicProps[_i]] = value;\n if (attr) {\n _this.$parse(attr).assign(_this.startScope, value);\n }\n }\n });\n };\n\n for (var _i = publicProps.length - 1; _i >= 0; _i--) {\n _loop(_i);\n }\n\n // non-read-only public property\n Object.defineProperty(this.publicContext, 'disabled', {\n get: function get() {\n return _this.disabled;\n },\n set: function set(value) {\n return !(_this.disabled = value) ? _this.doAdjust() : null;\n }\n });\n }\n }, {\n key: 'loading',\n value: function loading(value) {\n this.isLoading = value;\n }\n }, {\n key: 'isBOF',\n value: function isBOF() {\n return this.buffer.bof;\n }\n }, {\n key: 'isEOF',\n value: function isEOF() {\n return this.buffer.eof;\n }\n }, {\n key: 'isEmpty',\n value: function isEmpty() {\n return !this.buffer.length;\n }\n }, {\n key: 'append',\n value: function append(newItems) {\n this.buffer.append(newItems);\n this.doAdjust();\n this.viewport.clipTop();\n this.viewport.clipBottom();\n }\n }, {\n key: 'prepend',\n value: function prepend(newItems) {\n this.buffer.prepend(newItems);\n this.doAdjust();\n this.viewport.clipTop();\n this.viewport.clipBottom();\n }\n }, {\n key: 'applyUpdates',\n value: function applyUpdates(arg1, arg2) {\n if (typeof arg1 === 'function') {\n this.applyUpdatesFunc(arg1);\n } else {\n this.applyUpdatesIndex(arg1, arg2);\n }\n this.doAdjust();\n }\n }, {\n key: 'applyUpdatesFunc',\n value: function applyUpdatesFunc(cb) {\n var _this2 = this;\n\n this.buffer.slice(0).forEach(function (wrapper) {\n // we need to do it on the buffer clone, because buffer content\n // may change as we iterate through\n _this2.applyUpdate(wrapper, cb(wrapper.item, wrapper.scope, wrapper.element));\n });\n }\n }, {\n key: 'applyUpdatesIndex',\n value: function applyUpdatesIndex(index, newItems) {\n if (index % 1 !== 0) {\n throw new Error('applyUpdates - ' + index + ' is not a valid index (should be an integer)');\n }\n var _index = index - this.buffer.first;\n\n // apply updates only within buffer\n if (_index >= 0 && _index < this.buffer.length) {\n this.applyUpdate(this.buffer[_index], newItems);\n }\n // out-of-buffer case: deletion may affect Paddings\n else if (index >= this.buffer.getAbsMinIndex() && index <= this.buffer.getAbsMaxIndex()) {\n if (Array.isArray(newItems) && !newItems.length) {\n this.viewport.removeCacheItem(index, index === this.buffer.minIndex);\n if (index === this.buffer.getAbsMinIndex()) {\n this.buffer.incrementMinIndex();\n } else {\n this.buffer.decrementMaxIndex();\n }\n }\n }\n }\n }, {\n key: 'applyUpdate',\n value: function applyUpdate(wrapper, newItems) {\n var _this3 = this;\n\n if (!Array.isArray(newItems)) {\n return;\n }\n var position = this.buffer.indexOf(wrapper);\n if (!newItems.reverse().some(function (newItem) {\n return newItem === wrapper.item;\n })) {\n wrapper.op = 'remove';\n if (position === 0 && !newItems.length) {\n wrapper._op = 'isTop'; // to catch \"first\" edge case on remove\n }\n }\n newItems.forEach(function (newItem) {\n if (newItem === wrapper.item) {\n position--;\n } else {\n // 3 parameter (isTop) is to catch \"first\" edge case on insert\n _this3.buffer.insert(position + 1, newItem, position === -1);\n }\n });\n }\n }, {\n key: 'calculateProperties',\n value: function calculateProperties() {\n var rowTop = null,\n topHeight = 0;\n var topDone = false,\n bottomDone = false;\n var length = this.buffer.length;\n\n for (var i = 0; i < length; i++) {\n var item = this.buffer[i];\n var itemTop = item.element.offset().top;\n\n if (rowTop !== itemTop) {\n // a new row condition\n var itemHeight = item.element.outerHeight(true);\n var top = this.viewport.topDataPos() + topHeight + itemHeight;\n\n if (!topDone && top > this.viewport.topVisiblePos()) {\n topDone = true;\n this['topVisible'] = item.item;\n this['topVisibleElement'] = item.element;\n this['topVisibleScope'] = item.scope;\n }\n if (!bottomDone && (top >= this.viewport.bottomVisiblePos() || i === length - 1 && this.isEOF())) {\n bottomDone = true;\n this['bottomVisible'] = item.item;\n this['bottomVisibleElement'] = item.element;\n this['bottomVisibleScope'] = item.scope;\n }\n topHeight += itemHeight;\n }\n rowTop = itemTop;\n\n if (topDone && bottomDone) {\n break;\n }\n }\n }\n }]);\n\n return Adapter;\n}();\n\nexports.default = Adapter;\n\n/***/ }),\n/* 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, startIndex) {\n var buffer = Object.create(Array.prototype);\n\n Object.assign(buffer, {\n size: bufferSize,\n\n reset: function reset(startIndex) {\n buffer.remove(0, buffer.length);\n buffer.eof = false;\n buffer.bof = false;\n buffer.first = startIndex;\n buffer.next = startIndex;\n buffer.minIndex = startIndex;\n buffer.maxIndex = startIndex;\n buffer.minIndexUser = null;\n buffer.maxIndexUser = null;\n },\n append: function append(items) {\n items.forEach(function (item) {\n ++buffer.next;\n buffer.insert('append', item);\n });\n buffer.maxIndex = buffer.eof ? buffer.next - 1 : Math.max(buffer.next - 1, buffer.maxIndex);\n },\n prepend: function prepend(items) {\n items.reverse().forEach(function (item) {\n --buffer.first;\n buffer.insert('prepend', item);\n });\n buffer.minIndex = buffer.bof ? buffer.minIndex = buffer.first : Math.min(buffer.first, buffer.minIndex);\n },\n\n\n /**\r\n * inserts wrapped element in the buffer\r\n * the first argument is either operation keyword (see below) or a number for operation 'insert'\r\n * for insert the number is the index for the buffer element the new one have to be inserted after\r\n * operations: 'append', 'prepend', 'insert', 'remove', 'update', 'none'\r\n */\n insert: function insert(operation, item, isTop) {\n var wrapper = {\n item: item\n };\n\n if (operation % 1 === 0) {\n // it is an insert\n wrapper.op = 'insert';\n buffer.splice(operation, 0, wrapper);\n if (isTop) {\n buffer.first--;\n } else {\n buffer.next++;\n }\n } else {\n wrapper.op = operation;\n switch (operation) {\n case 'append':\n buffer.push(wrapper);\n break;\n case 'prepend':\n buffer.unshift(wrapper);\n break;\n }\n }\n },\n\n\n // removes elements from buffer\n remove: function remove(arg1, arg2) {\n if (Number.isInteger(arg1)) {\n // removes items from arg1 (including) through arg2 (excluding)\n for (var i = arg1; i < arg2; i++) {\n elementRoutines.removeElement(buffer[i]);\n }\n return buffer.splice(arg1, arg2 - arg1);\n }\n // removes single item(wrapper) from the buffer\n buffer.splice(buffer.indexOf(arg1), 1);\n if (arg1._op === 'isTop' && buffer.first === this.getAbsMinIndex()) {\n this.incrementMinIndex();\n } else {\n this.decrementMaxIndex();\n }\n if (arg1._op === 'isTop') {\n buffer.first++;\n } else {\n buffer.next--;\n }\n if (!buffer.length) {\n buffer.first = 1;\n buffer.next = 1;\n }\n\n return elementRoutines.removeElementAnimated(arg1);\n },\n incrementMinIndex: function incrementMinIndex() {\n if (buffer.minIndexUser !== null) {\n if (buffer.minIndex > buffer.minIndexUser) {\n buffer.minIndexUser++;\n return;\n }\n if (buffer.minIndex === buffer.minIndexUser) {\n buffer.minIndexUser++;\n }\n }\n buffer.minIndex++;\n },\n decrementMaxIndex: function decrementMaxIndex() {\n if (buffer.maxIndexUser !== null && buffer.maxIndex <= buffer.maxIndexUser) {\n buffer.maxIndexUser--;\n }\n buffer.maxIndex--;\n },\n getAbsMinIndex: function getAbsMinIndex() {\n if (buffer.minIndexUser !== null) {\n return Math.min(buffer.minIndexUser, buffer.minIndex);\n }\n return buffer.minIndex;\n },\n getAbsMaxIndex: function getAbsMaxIndex() {\n if (buffer.maxIndexUser !== null) {\n return Math.max(buffer.maxIndexUser, buffer.maxIndex);\n }\n return buffer.maxIndex;\n },\n effectiveHeight: function effectiveHeight(elements) {\n if (!elements.length) {\n return 0;\n }\n var top = Number.MAX_VALUE;\n var bottom = Number.NEGATIVE_INFINITY;\n elements.forEach(function (wrapper) {\n if (wrapper.element[0].offsetParent) {\n // element style is not display:none\n top = Math.min(top, wrapper.element.offset().top);\n bottom = Math.max(bottom, wrapper.element.offset().top + wrapper.element.outerHeight(true));\n }\n });\n return Math.max(0, bottom - top);\n }\n });\n\n buffer.reset(startIndex);\n\n return buffer;\n}\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar hideClassToken = 'ng-ui-scroll-hide';\n\nfunction addCSSRule(sheet, selector, rules, index) {\n if ('insertRule' in sheet) {\n sheet.insertRule(selector + '{' + rules + '}', index);\n } else if ('addRule' in sheet) {\n sheet.addRule(selector, rules, index);\n }\n}\n\nvar ElementRoutines = function () {\n function ElementRoutines($injector, $q) {\n _classCallCheck(this, ElementRoutines);\n\n this.$animate = $injector.has && $injector.has('$animate') ? $injector.get('$animate') : null;\n this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3;\n this.$q = $q;\n addCSSRule(document.styleSheets[0], '.' + hideClassToken, 'display: none');\n }\n\n _createClass(ElementRoutines, [{\n key: 'hideElement',\n value: function hideElement(wrapper) {\n wrapper.element.addClass(hideClassToken);\n }\n }, {\n key: 'showElement',\n value: function showElement(wrapper) {\n wrapper.element.removeClass(hideClassToken);\n }\n }, {\n key: 'insertElement',\n value: function insertElement(newElement, previousElement) {\n previousElement.after(newElement);\n return [];\n }\n }, {\n key: 'removeElement',\n value: function removeElement(wrapper) {\n wrapper.element.remove();\n wrapper.scope.$destroy();\n return [];\n }\n }, {\n key: 'insertElementAnimated',\n value: function insertElementAnimated(newElement, previousElement) {\n if (!this.$animate) {\n return this.insertElement(newElement, previousElement);\n }\n\n if (this.isAngularVersionLessThen1_3) {\n var deferred = this.$q.defer();\n // no need for parent - previous element is never null\n this.$animate.enter(newElement, null, previousElement, function () {\n return deferred.resolve();\n });\n\n return [deferred.promise];\n }\n\n // no need for parent - previous element is never null\n return [this.$animate.enter(newElement, null, previousElement)];\n }\n }, {\n key: 'removeElementAnimated',\n value: function removeElementAnimated(wrapper) {\n if (!this.$animate) {\n return this.removeElement(wrapper);\n }\n\n if (this.isAngularVersionLessThen1_3) {\n var deferred = this.$q.defer();\n this.$animate.leave(wrapper.element, function () {\n wrapper.scope.$destroy();\n return deferred.resolve();\n });\n\n return [deferred.promise];\n }\n\n return [this.$animate.leave(wrapper.element).then(function () {\n return wrapper.scope.$destroy();\n })];\n }\n }]);\n\n return ElementRoutines;\n}();\n\nexports.default = ElementRoutines;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*!\r\n globals: angular, window\r\n List of used element methods available in JQuery but not in JQuery Lite\r\n element.before(elem)\r\n element.height()\r\n element.outerHeight(true)\r\n element.height(value) = only for Top/Bottom padding elements\r\n element.scrollTop()\r\n element.scrollTop(value)\r\n */\n\nvar JQLiteExtras = function () {\n function JQLiteExtras() {\n _classCallCheck(this, JQLiteExtras);\n }\n\n _createClass(JQLiteExtras, [{\n key: 'registerFor',\n value: function registerFor(element) {\n var convertToPx = void 0,\n css = void 0,\n getStyle = void 0,\n isWindow = void 0;\n // angular implementation blows up if elem is the window\n css = angular.element.prototype.css;\n\n element.prototype.css = function (name, value) {\n var self = this;\n var elem = self[0];\n if (!(!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style)) {\n return css.call(self, name, value);\n }\n };\n\n // as defined in angularjs v1.0.5\n isWindow = function isWindow(obj) {\n return obj && obj.document && obj.location && obj.alert && obj.setInterval;\n };\n\n function scrollTo(self, direction, value) {\n var elem = self[0];\n\n var _top$left$direction = _slicedToArray({\n top: ['scrollTop', 'pageYOffset', 'scrollLeft'],\n left: ['scrollLeft', 'pageXOffset', 'scrollTop']\n }[direction], 3),\n method = _top$left$direction[0],\n prop = _top$left$direction[1],\n preserve = _top$left$direction[2];\n\n var isValueDefined = typeof value !== 'undefined';\n if (isWindow(elem)) {\n if (isValueDefined) {\n return elem.scrollTo(self[preserve].call(self), value);\n }\n return prop in elem ? elem[prop] : elem.document.documentElement[method];\n } else {\n if (isValueDefined) {\n elem[method] = value;\n }\n return elem[method];\n }\n }\n\n if (window.getComputedStyle) {\n getStyle = function getStyle(elem) {\n return window.getComputedStyle(elem, null);\n };\n convertToPx = function convertToPx(elem, value) {\n return parseFloat(value);\n };\n } else {\n getStyle = function getStyle(elem) {\n return elem.currentStyle;\n };\n convertToPx = function convertToPx(elem, value) {\n var left = void 0,\n result = void 0,\n rs = void 0,\n rsLeft = void 0,\n style = void 0;\n var core_pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n var rnumnonpx = new RegExp('^(' + core_pnum + ')(?!px)[a-z%]+$', 'i');\n\n if (!rnumnonpx.test(value)) {\n return parseFloat(value);\n }\n\n // ported from JQuery\n style = elem.style;\n left = style.left;\n rs = elem.runtimeStyle;\n rsLeft = rs && rs.left;\n if (rs) {\n rs.left = style.left;\n }\n // put in the new values to get a computed style out\n style.left = value;\n result = style.pixelLeft;\n style.left = left;\n if (rsLeft) {\n rs.left = rsLeft;\n }\n return result;\n };\n }\n\n function getMeasurements(elem, measure) {\n var base = void 0,\n borderA = void 0,\n borderB = void 0,\n computedMarginA = void 0,\n computedMarginB = void 0,\n computedStyle = void 0,\n dirA = void 0,\n dirB = void 0,\n marginA = void 0,\n marginB = void 0,\n paddingA = void 0,\n paddingB = void 0;\n\n if (isWindow(elem)) {\n base = document.documentElement[{ height: 'clientHeight', width: 'clientWidth' }[measure]];\n\n return {\n base: base,\n padding: 0,\n border: 0,\n margin: 0\n };\n }\n\n // Start with offset property\n\n var _width$height$measure = _slicedToArray({\n width: [elem.offsetWidth, 'Left', 'Right'],\n height: [elem.offsetHeight, 'Top', 'Bottom']\n }[measure], 3);\n\n base = _width$height$measure[0];\n dirA = _width$height$measure[1];\n dirB = _width$height$measure[2];\n\n\n computedStyle = getStyle(elem);\n paddingA = convertToPx(elem, computedStyle['padding' + dirA]) || 0;\n paddingB = convertToPx(elem, computedStyle['padding' + dirB]) || 0;\n borderA = convertToPx(elem, computedStyle['border' + dirA + 'Width']) || 0;\n borderB = convertToPx(elem, computedStyle['border' + dirB + 'Width']) || 0;\n computedMarginA = computedStyle['margin' + dirA];\n computedMarginB = computedStyle['margin' + dirB];\n\n // I do not care for width for now, so this hack is irrelevant\n // if ( !supportsPercentMargin )\n // computedMarginA = hackPercentMargin( elem, computedStyle, computedMarginA )\n // computedMarginB = hackPercentMargin( elem, computedStyle, computedMarginB )\n marginA = convertToPx(elem, computedMarginA) || 0;\n marginB = convertToPx(elem, computedMarginB) || 0;\n\n return {\n base: base,\n padding: paddingA + paddingB,\n border: borderA + borderB,\n margin: marginA + marginB\n };\n }\n\n function getWidthHeight(elem, direction, measure) {\n var computedStyle = void 0,\n result = void 0;\n\n var measurements = getMeasurements(elem, direction);\n\n if (measurements.base > 0) {\n return {\n base: measurements.base - measurements.padding - measurements.border,\n outer: measurements.base,\n outerfull: measurements.base + measurements.margin\n }[measure];\n }\n\n // Fall back to computed then uncomputed css if necessary\n computedStyle = getStyle(elem);\n result = computedStyle[direction];\n\n if (result < 0 || result === null) {\n result = elem.style[direction] || 0;\n }\n\n // Normalize \"\", auto, and prepare for extra\n result = parseFloat(result) || 0;\n\n return {\n base: result - measurements.padding - measurements.border,\n outer: result,\n outerfull: result + measurements.padding + measurements.border + measurements.margin\n }[measure];\n }\n\n // define missing methods\n return angular.forEach({\n before: function before(newElem) {\n var children, elem, i, j, parent, ref, self;\n self = this;\n elem = self[0];\n parent = self.parent();\n children = parent.contents();\n if (children[0] === elem) {\n return parent.prepend(newElem);\n } else {\n for (i = j = 1, ref = children.length - 1; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {\n if (children[i] === elem) {\n angular.element(children[i - 1]).after(newElem);\n return;\n }\n }\n throw new Error('invalid DOM structure ' + elem.outerHTML);\n }\n },\n height: function height(value) {\n var self;\n self = this;\n if (typeof value !== 'undefined') {\n if (Number.isInteger(value)) {\n value = value + 'px';\n }\n return css.call(self, 'height', value);\n } else {\n return getWidthHeight(this[0], 'height', 'base');\n }\n },\n outerHeight: function outerHeight(option) {\n return getWidthHeight(this[0], 'height', option ? 'outerfull' : 'outer');\n },\n outerWidth: function outerWidth(option) {\n return getWidthHeight(this[0], 'width', option ? 'outerfull' : 'outer');\n },\n\n\n /*\r\n The offset setter method is not implemented\r\n */\n offset: function offset(value) {\n var docElem = void 0,\n win = void 0;\n var self = this;\n var box = {\n top: 0,\n left: 0\n };\n var elem = self[0];\n var doc = elem && elem.ownerDocument;\n\n if (arguments.length) {\n if (value === undefined) {\n return self;\n }\n // TODO: implement setter\n throw new Error('offset setter method is not implemented');\n }\n\n if (!doc) {\n return;\n }\n\n docElem = doc.documentElement;\n\n // TODO: Make sure it's not a disconnected DOM node\n\n if (elem.getBoundingClientRect != null) {\n box = elem.getBoundingClientRect();\n }\n\n win = doc.defaultView || doc.parentWindow;\n\n return {\n top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),\n left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0)\n };\n },\n scrollTop: function scrollTop(value) {\n return scrollTo(this, 'top', value);\n },\n scrollLeft: function scrollLeft(value) {\n return scrollTo(this, 'left', value);\n }\n }, function (value, key) {\n if (!element.prototype[key]) {\n return element.prototype[key] = value;\n }\n });\n }\n }]);\n\n return JQLiteExtras;\n}();\n\nexports.default = JQLiteExtras;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = Viewport;\n\nvar _padding = __webpack_require__(5);\n\nvar _padding2 = _interopRequireDefault(_padding);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding) {\n var topPadding = null;\n var bottomPadding = null;\n var viewport = viewportController && viewportController.viewport ? viewportController.viewport : angular.element(window);\n var container = viewportController && viewportController.container ? viewportController.container : undefined;\n var scope = viewportController && viewportController.scope ? viewportController.scope : $rootScope;\n\n viewport.css({\n 'overflow-anchor': 'none',\n 'overflow-y': 'auto',\n 'display': 'block'\n });\n\n function bufferPadding() {\n return viewport.outerHeight() * padding; // some extra space to initiate preload\n }\n\n Object.assign(viewport, {\n getScope: function getScope() {\n return scope;\n },\n createPaddingElements: function createPaddingElements(template) {\n topPadding = new _padding2.default(template);\n bottomPadding = new _padding2.default(template);\n element.before(topPadding.element);\n element.after(bottomPadding.element);\n topPadding.height(0);\n bottomPadding.height(0);\n },\n applyContainerStyle: function applyContainerStyle() {\n if (!container) {\n return true;\n }\n if (container !== viewport) {\n viewport.css('height', window.getComputedStyle(container[0]).height);\n }\n return viewport.height() > 0;\n },\n bottomDataPos: function bottomDataPos() {\n var scrollHeight = viewport[0].scrollHeight;\n scrollHeight = scrollHeight != null ? scrollHeight : viewport[0].document.documentElement.scrollHeight;\n return scrollHeight - bottomPadding.height();\n },\n topDataPos: function topDataPos() {\n return topPadding.height();\n },\n bottomVisiblePos: function bottomVisiblePos() {\n return viewport.scrollTop() + viewport.outerHeight();\n },\n topVisiblePos: function topVisiblePos() {\n return viewport.scrollTop();\n },\n insertElement: function insertElement(e, sibling) {\n return elementRoutines.insertElement(e, sibling || topPadding.element);\n },\n insertElementAnimated: function insertElementAnimated(e, sibling) {\n return elementRoutines.insertElementAnimated(e, sibling || topPadding.element);\n },\n shouldLoadBottom: function shouldLoadBottom() {\n return !buffer.eof && viewport.bottomDataPos() < viewport.bottomVisiblePos() + bufferPadding();\n },\n clipBottom: function clipBottom() {\n // clip the invisible items off the bottom\n var overage = 0;\n var overageHeight = 0;\n var itemHeight = 0;\n var emptySpaceHeight = viewport.bottomDataPos() - viewport.bottomVisiblePos() - bufferPadding();\n\n for (var i = buffer.length - 1; i >= 0; i--) {\n itemHeight = buffer[i].element.outerHeight(true);\n if (overageHeight + itemHeight > emptySpaceHeight) {\n break;\n }\n bottomPadding.cache.add(buffer[i]);\n overageHeight += itemHeight;\n overage++;\n }\n\n if (overage > 0) {\n buffer.eof = false;\n buffer.remove(buffer.length - overage, buffer.length);\n buffer.next -= overage;\n viewport.adjustPaddings();\n }\n },\n shouldLoadTop: function shouldLoadTop() {\n return !buffer.bof && viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding();\n },\n clipTop: function clipTop() {\n // clip the invisible items off the top\n var overage = 0;\n var overageHeight = 0;\n var itemHeight = 0;\n var emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\n\n for (var i = 0; i < buffer.length; i++) {\n itemHeight = buffer[i].element.outerHeight(true);\n if (overageHeight + itemHeight > emptySpaceHeight) {\n break;\n }\n topPadding.cache.add(buffer[i]);\n overageHeight += itemHeight;\n overage++;\n }\n\n if (overage > 0) {\n // we need to adjust top padding element before items are removed from top\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\n topPadding.height(topPadding.height() + overageHeight);\n buffer.bof = false;\n buffer.remove(0, overage);\n buffer.first += overage;\n }\n },\n adjustPaddings: function adjustPaddings() {\n if (!buffer.length) {\n return;\n }\n\n // precise heights calculation based on items that are in buffer or that were in buffer once\n var visibleItemsHeight = buffer.reduce(function (summ, item) {\n return summ + item.element.outerHeight(true);\n }, 0);\n\n var topPaddingHeight = 0,\n topCount = 0;\n topPadding.cache.forEach(function (item) {\n if (item.index < buffer.first) {\n topPaddingHeight += item.height;\n topCount++;\n }\n });\n\n var bottomPaddingHeight = 0,\n bottomCount = 0;\n bottomPadding.cache.forEach(function (item) {\n if (item.index >= buffer.next) {\n bottomPaddingHeight += item.height;\n bottomCount++;\n }\n });\n\n var totalHeight = visibleItemsHeight + topPaddingHeight + bottomPaddingHeight;\n var averageItemHeight = totalHeight / (topCount + bottomCount + buffer.length);\n\n // average heights calculation, items that have never been reached\n var adjustTopPadding = buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser;\n var adjustBottomPadding = buffer.maxIndexUser !== null && buffer.maxIndex < buffer.maxIndexUser;\n var topPaddingHeightAdd = adjustTopPadding ? (buffer.minIndex - buffer.minIndexUser) * averageItemHeight : 0;\n var bottomPaddingHeightAdd = adjustBottomPadding ? (buffer.maxIndexUser - buffer.maxIndex) * averageItemHeight : 0;\n\n // paddings combine adjustment\n topPadding.height(topPaddingHeight + topPaddingHeightAdd);\n bottomPadding.height(bottomPaddingHeight + bottomPaddingHeightAdd);\n },\n onAfterMinIndexSet: function onAfterMinIndexSet(topPaddingHeightOld) {\n // additional scrollTop adjustment in case of datasource.minIndex external set\n if (buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser) {\n var diff = topPadding.height() - topPaddingHeightOld;\n viewport.scrollTop(viewport.scrollTop() + diff);\n while ((diff -= viewport.scrollTop()) > 0) {\n bottomPadding.height(bottomPadding.height() + diff);\n viewport.scrollTop(viewport.scrollTop() + diff);\n }\n }\n },\n onAfterPrepend: function onAfterPrepend(updates) {\n if (!updates.prepended.length) return;\n var height = buffer.effectiveHeight(updates.prepended);\n var paddingHeight = topPadding.height() - height;\n if (paddingHeight >= 0) {\n topPadding.height(paddingHeight);\n } else {\n topPadding.height(0);\n viewport.scrollTop(viewport.scrollTop() - paddingHeight);\n }\n },\n resetTopPadding: function resetTopPadding() {\n topPadding.height(0);\n topPadding.cache.clear();\n },\n resetBottomPadding: function resetBottomPadding() {\n bottomPadding.height(0);\n bottomPadding.cache.clear();\n },\n removeCacheItem: function removeCacheItem(item, isTop) {\n topPadding.cache.remove(item, isTop);\n bottomPadding.cache.remove(item, isTop);\n },\n removeItem: function removeItem(item) {\n this.removeCacheItem(item);\n return buffer.remove(item);\n }\n });\n\n return viewport;\n}\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// Can't just extend the Array, due to Babel does not support built-in classes extending\n// This solution was taken from https://stackoverflow.com/questions/46897414/es6-class-extends-array-workaround-for-es5-babel-transpile\nvar CacheProto = function () {\n function CacheProto() {\n _classCallCheck(this, CacheProto);\n }\n\n _createClass(CacheProto, [{\n key: 'add',\n value: function add(item) {\n for (var i = this.length - 1; i >= 0; i--) {\n if (this[i].index === item.scope.$index) {\n this[i].height = item.element.outerHeight();\n return;\n }\n }\n this.push({\n index: item.scope.$index,\n height: item.element.outerHeight()\n });\n this.sort(function (a, b) {\n return a.index < b.index ? -1 : a.index > b.index ? 1 : 0;\n });\n }\n }, {\n key: 'remove',\n value: function remove(argument, _isTop) {\n var index = argument % 1 === 0 ? argument : argument.scope.$index;\n var isTop = argument % 1 === 0 ? _isTop : argument._op === 'isTop';\n for (var i = this.length - 1; i >= 0; i--) {\n if (this[i].index === index) {\n this.splice(i, 1);\n break;\n }\n }\n if (!isTop) {\n for (var _i = this.length - 1; _i >= 0; _i--) {\n if (this[_i].index > index) {\n this[_i].index--;\n }\n }\n }\n }\n }, {\n key: 'clear',\n value: function clear() {\n this.length = 0;\n }\n }]);\n\n return CacheProto;\n}();\n\nfunction Cache() {\n var instance = [];\n instance.push.apply(instance, arguments);\n Object.setPrototypeOf(instance, Cache.prototype);\n return instance;\n}\nCache.prototype = Object.create(Array.prototype);\nObject.getOwnPropertyNames(CacheProto.prototype).forEach(function (methodName) {\n return Cache.prototype[methodName] = CacheProto.prototype[methodName];\n});\n\nfunction generateElement(template) {\n if (template.nodeType !== Node.ELEMENT_NODE) {\n throw new Error('ui-scroll directive requires an Element node for templating the view');\n }\n var element = void 0;\n switch (template.tagName.toLowerCase()) {\n case 'dl':\n throw new Error('ui-scroll directive does not support <' + template.tagName + '> as a repeating tag: ' + template.outerHTML);\n case 'tr':\n var table = angular.element('
    ');\n element = table.find('tr');\n break;\n case 'li':\n element = angular.element('
  • ');\n break;\n default:\n element = angular.element('
    ');\n }\n return element;\n}\n\nvar Padding = function () {\n function Padding(template) {\n _classCallCheck(this, Padding);\n\n this.element = generateElement(template);\n this.cache = new Cache();\n }\n\n _createClass(Padding, [{\n key: 'height',\n value: function height() {\n return this.element.height.apply(this.element, arguments);\n }\n }]);\n\n return Padding;\n}();\n\nexports.default = Padding;\n\n/***/ }),\n/* 6 */,\n/* 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', '$interval', '$q', '$parse', function (console, $injector, $rootScope, $timeout, $interval, $q, $parse) {\n\n return {\n require: ['?^uiScrollViewport'],\n restrict: 'A',\n transclude: 'element',\n priority: 1000,\n terminal: true,\n link: link\n };\n\n function link($scope, element, $attr, controllers, linker) {\n var match = $attr.uiScroll.match(/^\\s*(\\w+)\\s+in\\s+([(\\w|\\$)\\.]+)\\s*$/);\n if (!match) {\n throw new Error('Expected uiScroll in form of \\'_item_ in _datasource_\\' but got \\'' + $attr.uiScroll + '\\'');\n }\n\n function parseNumericAttr(value, defaultValue) {\n var result = $parse(value)($scope);\n return isNaN(result) ? defaultValue : result;\n }\n\n var BUFFER_MIN = 3;\n var BUFFER_DEFAULT = 10;\n var PADDING_MIN = 0.3;\n var PADDING_DEFAULT = 0.5;\n var MAX_VIEWPORT_DELAY = 500;\n var VIEWPORT_POLLING_INTERVAL = 50;\n\n var datasource = null;\n var itemName = match[1];\n var datasourceName = match[2];\n var viewportController = controllers[0];\n var bufferSize = Math.max(BUFFER_MIN, parseNumericAttr($attr.bufferSize, BUFFER_DEFAULT));\n var padding = Math.max(PADDING_MIN, parseNumericAttr($attr.padding, PADDING_DEFAULT));\n var startIndex = parseNumericAttr($attr.startIndex, 1);\n var ridActual = 0; // current data revision id\n var pending = [];\n\n var elementRoutines = new _elementRoutines2.default($injector, $q);\n var buffer = new _buffer2.default(elementRoutines, bufferSize, startIndex);\n var viewport = new _viewport2.default(elementRoutines, buffer, element, viewportController, $rootScope, padding);\n var adapter = new _adapter2.default($scope, $parse, $attr, viewport, buffer, doAdjust, reload);\n\n if (viewportController) {\n viewportController.adapter = adapter;\n }\n\n var isDatasourceValid = function isDatasourceValid() {\n return Object.prototype.toString.call(datasource) === '[object Object]' && typeof datasource.get === 'function';\n };\n\n datasource = $parse(datasourceName)($scope); // try to get datasource on scope\n if (!isDatasourceValid()) {\n datasource = $injector.get(datasourceName); // try to inject datasource as service\n if (!isDatasourceValid()) {\n throw new Error(datasourceName + ' is not a valid datasource');\n }\n }\n\n var onRenderHandlers = [];\n function onRenderHandlersRunner() {\n onRenderHandlers.forEach(function (handler) {\n return handler.run();\n });\n onRenderHandlers = [];\n }\n function persistDatasourceIndex(datasource, propName) {\n var getter = void 0;\n // need to postpone min/maxIndexUser processing if the view is empty\n if (Number.isInteger(datasource[propName])) {\n getter = datasource[propName];\n if (Number.isInteger(getter)) {\n onRenderHandlers = onRenderHandlers.filter(function (handler) {\n return handler.id !== propName;\n });\n onRenderHandlers.push({\n id: propName,\n run: function run() {\n return datasource[propName] = getter;\n }\n });\n }\n }\n }\n\n function defineDatasourceIndex(datasource, propName, propUserName) {\n var descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n if (descriptor && (descriptor.set || descriptor.get)) {\n return;\n }\n var getter = void 0;\n persistDatasourceIndex(datasource, propName);\n Object.defineProperty(datasource, propName, {\n set: function set(value) {\n getter = value;\n if (pending.length && !buffer.length) {\n persistDatasourceIndex(datasource, propName);\n return;\n }\n buffer[propUserName] = value;\n var topPaddingHeightOld = viewport.topDataPos();\n viewport.adjustPaddings();\n if (propName === 'minIndex') {\n viewport.onAfterMinIndexSet(topPaddingHeightOld);\n }\n },\n get: function get() {\n return getter;\n }\n });\n }\n\n defineDatasourceIndex(datasource, 'minIndex', 'minIndexUser');\n defineDatasourceIndex(datasource, 'maxIndex', 'maxIndexUser');\n\n var fetchNext = datasource.get.length !== 2 ? function (success) {\n return datasource.get(buffer.next, bufferSize, success);\n } : function (success) {\n datasource.get({\n index: buffer.next,\n append: buffer.length ? buffer[buffer.length - 1].item : void 0,\n count: bufferSize\n }, success);\n };\n\n var fetchPrevious = datasource.get.length !== 2 ? function (success) {\n return datasource.get(buffer.first - bufferSize, bufferSize, success);\n } : function (success) {\n datasource.get({\n index: buffer.first - bufferSize,\n prepend: buffer.length ? buffer[0].item : void 0,\n count: bufferSize\n }, success);\n };\n\n var initialize = function initialize() {\n var tryCount = 0;\n if (!viewport.applyContainerStyle()) {\n var timer = $interval(function () {\n tryCount++;\n if (viewport.applyContainerStyle()) {\n $interval.cancel(timer);\n doAdjust();\n }\n if (tryCount * VIEWPORT_POLLING_INTERVAL >= MAX_VIEWPORT_DELAY) {\n $interval.cancel(timer);\n throw Error('ui-scroll directive requires a viewport with non-zero height in ' + MAX_VIEWPORT_DELAY + 'ms');\n }\n }, VIEWPORT_POLLING_INTERVAL);\n } else {\n doAdjust();\n }\n };\n\n /**\n * Build padding elements\n *\n * Calling linker is the only way I found to get access to the tag name of the template\n * to prevent the directive scope from pollution a new scope is created and destroyed\n * right after the builder creation is completed\n */\n linker(function (clone, scope) {\n viewport.createPaddingElements(clone[0]);\n // we do not include the clone in the DOM. It means that the nested directives will not\n // be able to reach the parent directives, but in this case it is intentional because we\n // created the clone to access the template tag name\n scope.$destroy();\n clone.remove();\n });\n\n $scope.$on('$destroy', function () {\n unbindEvents();\n viewport.unbind('mousewheel', wheelHandler);\n });\n\n viewport.bind('mousewheel', wheelHandler);\n\n initialize();\n\n /* Private function definitions */\n\n function isInvalid(rid) {\n return rid && rid !== ridActual || $scope.$$destroyed;\n }\n\n function bindEvents() {\n viewport.bind('resize', resizeAndScrollHandler);\n viewport.bind('scroll', resizeAndScrollHandler);\n }\n\n function unbindEvents() {\n viewport.unbind('resize', resizeAndScrollHandler);\n viewport.unbind('scroll', resizeAndScrollHandler);\n }\n\n function reload() {\n viewport.resetTopPadding();\n viewport.resetBottomPadding();\n if (arguments.length) {\n startIndex = arguments[0];\n }\n buffer.reset(startIndex);\n persistDatasourceIndex(datasource, 'minIndex');\n persistDatasourceIndex(datasource, 'maxIndex');\n doAdjust();\n }\n\n function isElementVisible(wrapper) {\n return wrapper.element.height() && wrapper.element[0].offsetParent;\n }\n\n function visibilityWatcher(wrapper) {\n if (isElementVisible(wrapper)) {\n buffer.forEach(function (item) {\n if (typeof item.unregisterVisibilityWatcher === 'function') {\n item.unregisterVisibilityWatcher();\n delete item.unregisterVisibilityWatcher;\n }\n });\n if (!pending.length) {\n $timeout(function () {\n return doAdjust();\n });\n }\n }\n }\n\n function insertWrapperContent(wrapper, insertAfter) {\n createElement(wrapper, insertAfter, viewport.insertElement);\n if (!isElementVisible(wrapper)) {\n wrapper.unregisterVisibilityWatcher = wrapper.scope.$watch(function () {\n return visibilityWatcher(wrapper);\n });\n }\n elementRoutines.hideElement(wrapper); // hide inserted elements before data binding\n }\n\n function createElement(wrapper, insertAfter, insertElement) {\n var promises = null;\n var sibling = insertAfter > 0 ? buffer[insertAfter - 1].element : undefined;\n linker(function (clone, scope) {\n promises = insertElement(clone, sibling);\n wrapper.element = clone;\n wrapper.scope = scope;\n scope[itemName] = wrapper.item;\n });\n // ui-scroll-grid apply\n if (adapter.transform) {\n var tdInitializer = wrapper.scope.uiScrollTdInitializer;\n if (tdInitializer && tdInitializer.linking) {\n adapter.transform(wrapper.scope, wrapper.element);\n } else {\n wrapper.scope.uiScrollTdInitializer = {\n onLink: function onLink() {\n return adapter.transform(wrapper.scope, wrapper.element);\n },\n scope: wrapper.scope\n };\n }\n }\n return promises;\n }\n\n function updateDOM() {\n var promises = [];\n var toBePrepended = [];\n var toBeRemoved = [];\n var inserted = [];\n\n buffer.forEach(function (wrapper, i) {\n switch (wrapper.op) {\n case 'prepend':\n toBePrepended.unshift(wrapper);\n break;\n case 'append':\n insertWrapperContent(wrapper, i);\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'insert':\n promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated));\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'remove':\n toBeRemoved.push(wrapper);\n }\n });\n\n toBeRemoved.forEach(function (wrapper) {\n return promises = promises.concat(viewport.removeItem(wrapper));\n });\n\n if (toBePrepended.length) toBePrepended.forEach(function (wrapper) {\n insertWrapperContent(wrapper);\n wrapper.op = 'none';\n });\n\n buffer.forEach(function (item, i) {\n return item.scope.$index = buffer.first + i;\n });\n\n return {\n prepended: toBePrepended,\n removed: toBeRemoved,\n inserted: inserted,\n animated: promises\n };\n }\n\n function updatePaddings(rid, updates) {\n // schedule another doAdjust after animation completion\n if (updates.animated.length) {\n $q.all(updates.animated).then(function () {\n viewport.adjustPaddings();\n doAdjust(rid);\n });\n } else {\n viewport.adjustPaddings();\n }\n }\n\n function enqueueFetch(rid, updates) {\n if (viewport.shouldLoadBottom()) {\n if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\n // this means that at least one item appended in the last batch has height > 0\n if (pending.push(true) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n } else if (viewport.shouldLoadTop()) {\n if (!updates || buffer.effectiveHeight(updates.prepended) > 0 || pending[0]) {\n // this means that at least one item appended in the last batch has height > 0\n // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\n // BTW there will always be at least 1 element in the pending array because bottom is fetched first\n if (pending.push(false) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n }\n }\n\n function processUpdates() {\n var updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustments\n !$scope.$$phase && !$rootScope.$$phase && $scope.$digest();\n\n updates.inserted.forEach(function (w) {\n return elementRoutines.showElement(w);\n });\n updates.prepended.forEach(function (w) {\n return elementRoutines.showElement(w);\n });\n return updates;\n }\n\n function doAdjust(rid) {\n if (!rid) {\n // dismiss pending requests\n pending = [];\n rid = ++ridActual;\n }\n\n var updates = processUpdates();\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n enqueueFetch(rid);\n\n if (!pending.length) {\n adapter.calculateProperties();\n }\n }\n\n function doAdjustAfterFetch(rid) {\n var updates = processUpdates();\n\n viewport.onAfterPrepend(updates);\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n onRenderHandlersRunner();\n enqueueFetch(rid, updates);\n pending.shift();\n\n if (pending.length) fetch(rid);else {\n adapter.loading(false);\n bindEvents();\n adapter.calculateProperties();\n }\n }\n\n function fetch(rid) {\n if (pending[0]) {\n // scrolling down\n if (buffer.length && !viewport.shouldLoadBottom()) {\n doAdjustAfterFetch(rid);\n } else {\n fetchNext(function (result) {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.eof = true;\n }\n\n if (result.length > 0) {\n viewport.clipTop();\n buffer.append(result);\n }\n\n doAdjustAfterFetch(rid);\n });\n }\n } else {\n // scrolling up\n if (buffer.length && !viewport.shouldLoadTop()) {\n doAdjustAfterFetch(rid);\n } else {\n fetchPrevious(function (result) {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.bof = true;\n // log 'bof is reached'\n }\n\n if (result.length > 0) {\n if (buffer.length) {\n viewport.clipBottom();\n }\n buffer.prepend(result);\n }\n\n doAdjustAfterFetch(rid);\n });\n }\n }\n }\n\n function resizeAndScrollHandler() {\n if (!$rootScope.$$phase && !adapter.isLoading && !adapter.disabled) {\n\n enqueueFetch(ridActual);\n\n if (pending.length) {\n unbindEvents();\n } else {\n adapter.calculateProperties();\n !$scope.$$phase && $scope.$digest();\n }\n }\n }\n\n function wheelHandler(event) {\n if (!adapter.disabled) {\n var scrollTop = viewport[0].scrollTop;\n var yMax = viewport[0].scrollHeight - viewport[0].clientHeight;\n\n if (scrollTop === 0 && !buffer.bof || scrollTop === yMax && !buffer.eof) {\n event.preventDefault();\n }\n }\n }\n }\n}]);\n\n/***/ })\n/******/ ]);\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 ff58afc7647583ed56f1","class Adapter {\r\n\r\n constructor($scope, $parse, $attr, viewport, buffer, doAdjust, reload) {\r\n this.$parse = $parse;\r\n this.$attr = $attr;\r\n this.viewport = viewport;\r\n this.buffer = buffer;\r\n\r\n this.doAdjust = doAdjust;\r\n this.reload = reload;\r\n\r\n this.isLoading = false;\r\n this.disabled = false;\r\n\r\n const viewportScope = viewport.getScope();\r\n this.startScope = viewportScope.$parent ? viewportScope : $scope;\r\n\r\n this.publicContext = {};\r\n this.assignAdapter($attr.adapter);\r\n this.generatePublicContext();\r\n }\r\n\r\n assignAdapter(adapterAttr) {\r\n if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\\s+|\\s+$/gm, ''))) {\r\n return;\r\n }\r\n let adapterOnScope;\r\n\r\n try {\r\n this.$parse(adapterAttr).assign(this.startScope, {});\r\n adapterOnScope = this.$parse(adapterAttr)(this.startScope);\r\n }\r\n catch (error) {\r\n error.message = `Angular ui-scroll Adapter assignment exception.\\n` +\r\n `Can't parse \"${adapterAttr}\" expression.\\n` +\r\n error.message;\r\n throw error;\r\n }\r\n\r\n Object.assign(adapterOnScope, this.publicContext);\r\n this.publicContext = adapterOnScope;\r\n }\r\n\r\n generatePublicContext() {\r\n // these methods will be accessible out of ui-scroll via user defined adapter\r\n const publicMethods = ['reload', 'applyUpdates', 'append', 'prepend', 'isBOF', 'isEOF', 'isEmpty'];\r\n for (let i = publicMethods.length - 1; i >= 0; i--) {\r\n this.publicContext[publicMethods[i]] = this[publicMethods[i]].bind(this);\r\n }\r\n\r\n // these read-only props will be accessible out of ui-scroll via user defined adapter\r\n const publicProps = ['isLoading', 'topVisible', 'topVisibleElement', 'topVisibleScope', 'bottomVisible', 'bottomVisibleElement', 'bottomVisibleScope'];\r\n for (let i = publicProps.length - 1; i >= 0; i--) {\r\n let property, attr = this.$attr[publicProps[i]];\r\n Object.defineProperty(this, publicProps[i], {\r\n get: () => property,\r\n set: (value) => {\r\n property = value;\r\n this.publicContext[publicProps[i]] = value;\r\n if (attr) {\r\n this.$parse(attr).assign(this.startScope, value);\r\n }\r\n }\r\n });\r\n }\r\n\r\n // non-read-only public property\r\n Object.defineProperty(this.publicContext, 'disabled', {\r\n get: () => this.disabled,\r\n set: (value) => (!(this.disabled = value)) ? this.doAdjust() : null\r\n });\r\n }\r\n\r\n loading(value) {\r\n this.isLoading = value;\r\n }\r\n\r\n isBOF() {\r\n return this.buffer.bof;\r\n }\r\n\r\n isEOF() {\r\n return this.buffer.eof;\r\n }\r\n\r\n isEmpty() {\r\n return !this.buffer.length;\r\n }\r\n\r\n append(newItems) {\r\n this.buffer.append(newItems);\r\n this.doAdjust();\r\n this.viewport.clipTop();\r\n this.viewport.clipBottom();\r\n }\r\n\r\n prepend(newItems) {\r\n this.buffer.prepend(newItems);\r\n this.doAdjust();\r\n this.viewport.clipTop();\r\n this.viewport.clipBottom();\r\n }\r\n\r\n applyUpdates(arg1, arg2) {\r\n if (typeof arg1 === 'function') {\r\n this.applyUpdatesFunc(arg1);\r\n } else {\r\n this.applyUpdatesIndex(arg1, arg2);\r\n }\r\n this.doAdjust();\r\n }\r\n\r\n applyUpdatesFunc(cb) {\r\n this.buffer.slice(0).forEach((wrapper) => {\r\n // we need to do it on the buffer clone, because buffer content\r\n // may change as we iterate through\r\n this.applyUpdate(wrapper, cb(wrapper.item, wrapper.scope, wrapper.element));\r\n });\r\n }\r\n\r\n applyUpdatesIndex(index, newItems) {\r\n if (index % 1 !== 0) {\r\n throw new Error('applyUpdates - ' + index + ' is not a valid index (should be an integer)');\r\n }\r\n const _index = index - this.buffer.first;\r\n\r\n // apply updates only within buffer\r\n if (_index >= 0 && _index < this.buffer.length) {\r\n this.applyUpdate(this.buffer[_index], newItems);\r\n }\r\n // out-of-buffer case: deletion may affect Paddings\r\n else if(index >= this.buffer.getAbsMinIndex() && index <= this.buffer.getAbsMaxIndex()) {\r\n if(Array.isArray(newItems) && !newItems.length) {\r\n this.viewport.removeCacheItem(index, index === this.buffer.minIndex);\r\n if(index === this.buffer.getAbsMinIndex()) {\r\n this.buffer.incrementMinIndex();\r\n }\r\n else {\r\n this.buffer.decrementMaxIndex();\r\n }\r\n }\r\n }\r\n }\r\n\r\n applyUpdate(wrapper, newItems) {\r\n if (!Array.isArray(newItems)) {\r\n return;\r\n }\r\n let position = this.buffer.indexOf(wrapper);\r\n if (!newItems.reverse().some(newItem => newItem === wrapper.item)) {\r\n wrapper.op = 'remove';\r\n if(position === 0 && !newItems.length) {\r\n wrapper._op = 'isTop'; // to catch \"first\" edge case on remove\r\n }\r\n }\r\n newItems.forEach((newItem) => {\r\n if (newItem === wrapper.item) {\r\n position--;\r\n } else {\r\n // 3 parameter (isTop) is to catch \"first\" edge case on insert\r\n this.buffer.insert(position + 1, newItem, position === -1);\r\n }\r\n });\r\n }\r\n\r\n calculateProperties() {\r\n let rowTop = null, topHeight = 0;\r\n let topDone = false, bottomDone = false;\r\n const length = this.buffer.length;\r\n\r\n for (let i = 0; i < length; i++) {\r\n const item = this.buffer[i];\r\n const itemTop = item.element.offset().top;\r\n\r\n if (rowTop !== itemTop) { // a new row condition\r\n const itemHeight = item.element.outerHeight(true);\r\n const top = this.viewport.topDataPos() + topHeight + itemHeight;\r\n\r\n if (!topDone && top > this.viewport.topVisiblePos()) {\r\n topDone = true;\r\n this['topVisible'] = item.item;\r\n this['topVisibleElement'] = item.element;\r\n this['topVisibleScope'] = item.scope;\r\n }\r\n if (!bottomDone && (top >= this.viewport.bottomVisiblePos() || (i === length - 1 && this.isEOF()))) {\r\n bottomDone = true;\r\n this['bottomVisible'] = item.item;\r\n this['bottomVisibleElement'] = item.element;\r\n this['bottomVisibleScope'] = item.scope;\r\n }\r\n topHeight += itemHeight;\r\n }\r\n rowTop = itemTop;\r\n\r\n if (topDone && bottomDone) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n}\r\n\r\nexport default Adapter;\n\n\n// WEBPACK FOOTER //\n// ./src/modules/adapter.js","export default function ScrollBuffer(elementRoutines, bufferSize, startIndex) {\r\n const buffer = Object.create(Array.prototype);\r\n\r\n Object.assign(buffer, {\r\n size: bufferSize,\r\n\r\n reset(startIndex) {\r\n buffer.remove(0, buffer.length);\r\n buffer.eof = false;\r\n buffer.bof = false;\r\n buffer.first = startIndex;\r\n buffer.next = startIndex;\r\n buffer.minIndex = startIndex;\r\n buffer.maxIndex = startIndex;\r\n buffer.minIndexUser = null;\r\n buffer.maxIndexUser = null;\r\n },\r\n\r\n append(items) {\r\n items.forEach((item) => {\r\n ++buffer.next;\r\n buffer.insert('append', item);\r\n });\r\n buffer.maxIndex = buffer.eof ? buffer.next - 1 : Math.max(buffer.next - 1, buffer.maxIndex);\r\n },\r\n\r\n prepend(items) {\r\n items.reverse().forEach((item) => {\r\n --buffer.first;\r\n buffer.insert('prepend', item);\r\n });\r\n buffer.minIndex = buffer.bof ? buffer.minIndex = buffer.first : Math.min(buffer.first, buffer.minIndex);\r\n },\r\n\r\n /**\r\n * inserts wrapped element in the buffer\r\n * the first argument is either operation keyword (see below) or a number for operation 'insert'\r\n * for insert the number is the index for the buffer element the new one have to be inserted after\r\n * operations: 'append', 'prepend', 'insert', 'remove', 'update', 'none'\r\n */\r\n insert(operation, item, isTop) {\r\n const wrapper = {\r\n item: item\r\n };\r\n\r\n if (operation % 1 === 0) {// it is an insert\r\n wrapper.op = 'insert';\r\n buffer.splice(operation, 0, wrapper);\r\n if(isTop) {\r\n buffer.first--;\r\n }\r\n else {\r\n buffer.next++;\r\n }\r\n } else {\r\n wrapper.op = operation;\r\n switch (operation) {\r\n case 'append':\r\n buffer.push(wrapper);\r\n break;\r\n case 'prepend':\r\n buffer.unshift(wrapper);\r\n break;\r\n }\r\n }\r\n },\r\n\r\n // removes elements from buffer\r\n remove(arg1, arg2) {\r\n if (Number.isInteger(arg1)) {\r\n // removes items from arg1 (including) through arg2 (excluding)\r\n for (let i = arg1; i < arg2; i++) {\r\n elementRoutines.removeElement(buffer[i]);\r\n }\r\n return buffer.splice(arg1, arg2 - arg1);\r\n }\r\n // removes single item(wrapper) from the buffer\r\n buffer.splice(buffer.indexOf(arg1), 1);\r\n if(arg1._op === 'isTop' && buffer.first === this.getAbsMinIndex()) {\r\n this.incrementMinIndex();\r\n }\r\n else {\r\n this.decrementMaxIndex();\r\n }\r\n if(arg1._op === 'isTop') {\r\n buffer.first++;\r\n }\r\n else {\r\n buffer.next--;\r\n }\r\n if(!buffer.length) {\r\n buffer.first = 1;\r\n buffer.next = 1;\r\n }\r\n\r\n return elementRoutines.removeElementAnimated(arg1);\r\n },\r\n\r\n incrementMinIndex() {\r\n if(buffer.minIndexUser !== null) {\r\n if(buffer.minIndex > buffer.minIndexUser) {\r\n buffer.minIndexUser++;\r\n return;\r\n }\r\n if(buffer.minIndex === buffer.minIndexUser) {\r\n buffer.minIndexUser++;\r\n }\r\n }\r\n buffer.minIndex++;\r\n },\r\n\r\n decrementMaxIndex() {\r\n if(buffer.maxIndexUser !== null && buffer.maxIndex <= buffer.maxIndexUser) {\r\n buffer.maxIndexUser--;\r\n }\r\n buffer.maxIndex--;\r\n },\r\n\r\n getAbsMinIndex() {\r\n if(buffer.minIndexUser !== null) {\r\n return Math.min(buffer.minIndexUser, buffer.minIndex);\r\n }\r\n return buffer.minIndex;\r\n },\r\n\r\n getAbsMaxIndex() {\r\n if(buffer.maxIndexUser !== null) {\r\n return Math.max(buffer.maxIndexUser, buffer.maxIndex);\r\n }\r\n return buffer.maxIndex;\r\n },\r\n\r\n effectiveHeight(elements) {\r\n if (!elements.length) {\r\n return 0;\r\n }\r\n let top = Number.MAX_VALUE;\r\n let bottom = Number.NEGATIVE_INFINITY;\r\n elements.forEach((wrapper) => {\r\n if (wrapper.element[0].offsetParent) {\r\n // element style is not display:none\r\n top = Math.min(top, wrapper.element.offset().top);\r\n bottom = Math.max(bottom, wrapper.element.offset().top + wrapper.element.outerHeight(true));\r\n }\r\n });\r\n return Math.max(0, bottom - top);\r\n }\r\n\r\n });\r\n\r\n buffer.reset(startIndex);\r\n\r\n return buffer;\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/buffer.js","const hideClassToken = 'ng-ui-scroll-hide';\r\n\r\nfunction addCSSRule(sheet, selector, rules, index) {\r\n if('insertRule' in sheet) {\r\n sheet.insertRule(selector + '{' + rules + '}', index);\r\n }\r\n else if('addRule' in sheet) {\r\n sheet.addRule(selector, rules, index);\r\n }\r\n}\r\n\r\nexport default class ElementRoutines {\r\n\r\n constructor($injector, $q) {\r\n this.$animate = ($injector.has && $injector.has('$animate')) ? $injector.get('$animate') : null;\r\n this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3;\r\n this.$q = $q;\r\n addCSSRule(document.styleSheets[0], '.' + hideClassToken, 'display: none');\r\n }\r\n\r\n hideElement(wrapper) {\r\n wrapper.element.addClass(hideClassToken);\r\n }\r\n\r\n showElement(wrapper) {\r\n wrapper.element.removeClass(hideClassToken);\r\n }\r\n\r\n insertElement(newElement, previousElement) {\r\n previousElement.after(newElement);\r\n return [];\r\n }\r\n\r\n removeElement(wrapper) {\r\n wrapper.element.remove();\r\n wrapper.scope.$destroy();\r\n return [];\r\n }\r\n\r\n insertElementAnimated(newElement, previousElement) {\r\n if (!this.$animate) {\r\n return this.insertElement(newElement, previousElement);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n // no need for parent - previous element is never null\r\n this.$animate.enter(newElement, null, previousElement, () => deferred.resolve());\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n // no need for parent - previous element is never null\r\n return [this.$animate.enter(newElement, null, previousElement)];\r\n }\r\n\r\n removeElementAnimated(wrapper) {\r\n if (!this.$animate) {\r\n return this.removeElement(wrapper);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n this.$animate.leave(wrapper.element, () => {\r\n wrapper.scope.$destroy();\r\n return deferred.resolve();\r\n });\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n return [(this.$animate.leave(wrapper.element)).then(() => wrapper.scope.$destroy())];\r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/elementRoutines.js","/*!\r\n globals: angular, window\r\n List of used element methods available in JQuery but not in JQuery Lite\r\n element.before(elem)\r\n element.height()\r\n element.outerHeight(true)\r\n element.height(value) = only for Top/Bottom padding elements\r\n element.scrollTop()\r\n element.scrollTop(value)\r\n */\r\n\r\nexport default class JQLiteExtras {\r\n\r\n registerFor(element) {\r\n let convertToPx, css, getStyle, isWindow;\r\n // angular implementation blows up if elem is the window\r\n css = angular.element.prototype.css;\r\n\r\n element.prototype.css = function (name, value) {\r\n let self = this;\r\n let elem = self[0];\r\n if (!(!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style)) {\r\n return css.call(self, name, value);\r\n }\r\n };\r\n\r\n // as defined in angularjs v1.0.5\r\n isWindow = (obj) => obj && obj.document && obj.location && obj.alert && obj.setInterval;\r\n\r\n function scrollTo(self, direction, value) {\r\n let elem = self[0];\r\n let [method, prop, preserve] = {\r\n top: [\r\n 'scrollTop',\r\n 'pageYOffset',\r\n 'scrollLeft'\r\n ],\r\n left: [\r\n 'scrollLeft',\r\n 'pageXOffset',\r\n 'scrollTop'\r\n ]\r\n }[direction];\r\n\r\n const isValueDefined = typeof value !== 'undefined';\r\n if (isWindow(elem)) {\r\n if (isValueDefined) {\r\n return elem.scrollTo(self[preserve].call(self), value);\r\n }\r\n return (prop in elem) ? elem[prop] : elem.document.documentElement[method];\r\n } else {\r\n if (isValueDefined) {\r\n elem[method] = value;\r\n }\r\n return elem[method];\r\n }\r\n }\r\n\r\n if (window.getComputedStyle) {\r\n getStyle = (elem) => window.getComputedStyle(elem, null);\r\n convertToPx = (elem, value) => parseFloat(value);\r\n } else {\r\n getStyle = (elem) => elem.currentStyle;\r\n convertToPx = (elem, value) => {\r\n let left, result, rs, rsLeft, style;\r\n let core_pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\r\n let rnumnonpx = new RegExp('^(' + core_pnum + ')(?!px)[a-z%]+$', 'i');\r\n\r\n if (!rnumnonpx.test(value)) {\r\n return parseFloat(value);\r\n }\r\n\r\n // ported from JQuery\r\n style = elem.style;\r\n left = style.left;\r\n rs = elem.runtimeStyle;\r\n rsLeft = rs && rs.left;\r\n if (rs) {\r\n rs.left = style.left;\r\n }\r\n // put in the new values to get a computed style out\r\n style.left = value;\r\n result = style.pixelLeft;\r\n style.left = left;\r\n if (rsLeft) {\r\n rs.left = rsLeft;\r\n }\r\n return result;\r\n };\r\n }\r\n\r\n function getMeasurements(elem, measure) {\r\n let base, borderA, borderB, computedMarginA, computedMarginB, computedStyle, dirA, dirB, marginA, marginB, paddingA, paddingB;\r\n\r\n if (isWindow(elem)) {\r\n base = document.documentElement[{height: 'clientHeight', width: 'clientWidth'}[measure]];\r\n\r\n return {\r\n base: base,\r\n padding: 0,\r\n border: 0,\r\n margin: 0\r\n };\r\n }\r\n\r\n // Start with offset property\r\n [\r\n base,\r\n dirA,\r\n dirB\r\n ] = {\r\n width: [\r\n elem.offsetWidth,\r\n 'Left',\r\n 'Right'\r\n ],\r\n height: [\r\n elem.offsetHeight,\r\n 'Top',\r\n 'Bottom'\r\n ]\r\n }[measure];\r\n\r\n computedStyle = getStyle(elem);\r\n paddingA = convertToPx(elem, computedStyle['padding' + dirA]) || 0;\r\n paddingB = convertToPx(elem, computedStyle['padding' + dirB]) || 0;\r\n borderA = convertToPx(elem, computedStyle['border' + dirA + 'Width']) || 0;\r\n borderB = convertToPx(elem, computedStyle['border' + dirB + 'Width']) || 0;\r\n computedMarginA = computedStyle['margin' + dirA];\r\n computedMarginB = computedStyle['margin' + dirB];\r\n\r\n // I do not care for width for now, so this hack is irrelevant\r\n // if ( !supportsPercentMargin )\r\n // computedMarginA = hackPercentMargin( elem, computedStyle, computedMarginA )\r\n // computedMarginB = hackPercentMargin( elem, computedStyle, computedMarginB )\r\n marginA = convertToPx(elem, computedMarginA) || 0;\r\n marginB = convertToPx(elem, computedMarginB) || 0;\r\n\r\n return {\r\n base: base,\r\n padding: paddingA + paddingB,\r\n border: borderA + borderB,\r\n margin: marginA + marginB\r\n };\r\n }\r\n\r\n function getWidthHeight(elem, direction, measure) {\r\n let computedStyle, result;\r\n\r\n let measurements = getMeasurements(elem, direction);\r\n\r\n if (measurements.base > 0) {\r\n return {\r\n base: measurements.base - measurements.padding - measurements.border,\r\n outer: measurements.base,\r\n outerfull: measurements.base + measurements.margin\r\n }[measure];\r\n }\r\n\r\n // Fall back to computed then uncomputed css if necessary\r\n computedStyle = getStyle(elem);\r\n result = computedStyle[direction];\r\n\r\n if (result < 0 || result === null) {\r\n result = elem.style[direction] || 0;\r\n }\r\n\r\n // Normalize \"\", auto, and prepare for extra\r\n result = parseFloat(result) || 0;\r\n\r\n return {\r\n base: result - measurements.padding - measurements.border,\r\n outer: result,\r\n outerfull: result + measurements.padding + measurements.border + measurements.margin\r\n }[measure];\r\n }\r\n\r\n // define missing methods\r\n return angular.forEach({\r\n before(newElem) {\r\n var children, elem, i, j, parent, ref, self;\r\n self = this;\r\n elem = self[0];\r\n parent = self.parent();\r\n children = parent.contents();\r\n if (children[0] === elem) {\r\n return parent.prepend(newElem);\r\n } else {\r\n for (i = j = 1, ref = children.length - 1; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {\r\n if (children[i] === elem) {\r\n angular.element(children[i - 1]).after(newElem);\r\n return;\r\n }\r\n }\r\n throw new Error('invalid DOM structure ' + elem.outerHTML);\r\n }\r\n },\r\n height (value){\r\n var self;\r\n self = this;\r\n if (typeof value !== 'undefined') {\r\n if (Number.isInteger(value)) {\r\n value = value + 'px';\r\n }\r\n return css.call(self, 'height', value);\r\n } else {\r\n return getWidthHeight(this[0], 'height', 'base');\r\n }\r\n },\r\n outerHeight(option) {\r\n return getWidthHeight(this[0], 'height', option ? 'outerfull' : 'outer');\r\n },\r\n outerWidth(option) {\r\n return getWidthHeight(this[0], 'width', option ? 'outerfull' : 'outer');\r\n },\r\n\r\n /*\r\n The offset setter method is not implemented\r\n */\r\n offset(value) {\r\n let docElem, win;\r\n let self = this;\r\n let box = {\r\n top: 0,\r\n left: 0\r\n };\r\n let elem = self[0];\r\n let doc = elem && elem.ownerDocument;\r\n\r\n if (arguments.length) {\r\n if (value === undefined) {\r\n return self;\r\n }\r\n // TODO: implement setter\r\n throw new Error('offset setter method is not implemented');\r\n }\r\n\r\n if (!doc) {\r\n return;\r\n }\r\n\r\n docElem = doc.documentElement;\r\n\r\n // TODO: Make sure it's not a disconnected DOM node\r\n\r\n if (elem.getBoundingClientRect != null) {\r\n box = elem.getBoundingClientRect();\r\n }\r\n\r\n win = doc.defaultView || doc.parentWindow;\r\n\r\n return {\r\n top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),\r\n left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0)\r\n };\r\n },\r\n scrollTop(value) {\r\n return scrollTo(this, 'top', value);\r\n },\r\n scrollLeft(value) {\r\n return scrollTo(this, 'left', value);\r\n }\r\n }, (value, key) => {\r\n if (!element.prototype[key]) {\r\n return element.prototype[key] = value;\r\n }\r\n });\r\n }\r\n\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/jqLiteExtras.js","import Padding from './padding';\r\n\r\nexport default function Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding) {\r\n let topPadding = null;\r\n let bottomPadding = null;\r\n const viewport = viewportController && viewportController.viewport ? viewportController.viewport : angular.element(window);\r\n const container = viewportController && viewportController.container ? viewportController.container : undefined;\r\n const scope = viewportController && viewportController.scope ? viewportController.scope : $rootScope;\r\n\r\n viewport.css({\r\n 'overflow-anchor': 'none',\r\n 'overflow-y': 'auto',\r\n 'display': 'block'\r\n });\r\n\r\n function bufferPadding() {\r\n return viewport.outerHeight() * padding; // some extra space to initiate preload\r\n }\r\n\r\n Object.assign(viewport, {\r\n getScope() {\r\n return scope;\r\n },\r\n\r\n createPaddingElements(template) {\r\n topPadding = new Padding(template);\r\n bottomPadding = new Padding(template);\r\n element.before(topPadding.element);\r\n element.after(bottomPadding.element);\r\n topPadding.height(0);\r\n bottomPadding.height(0);\r\n },\r\n\r\n applyContainerStyle() {\r\n if (!container) {\r\n return true;\r\n }\r\n if(container !== viewport) {\r\n viewport.css('height', window.getComputedStyle(container[0]).height);\r\n }\r\n return viewport.height() > 0;\r\n },\r\n\r\n bottomDataPos() {\r\n let scrollHeight = viewport[0].scrollHeight;\r\n scrollHeight = scrollHeight != null ? scrollHeight : viewport[0].document.documentElement.scrollHeight;\r\n return scrollHeight - bottomPadding.height();\r\n },\r\n\r\n topDataPos() {\r\n return topPadding.height();\r\n },\r\n\r\n bottomVisiblePos() {\r\n return viewport.scrollTop() + viewport.outerHeight();\r\n },\r\n\r\n topVisiblePos() {\r\n return viewport.scrollTop();\r\n },\r\n\r\n insertElement(e, sibling) {\r\n return elementRoutines.insertElement(e, sibling || topPadding.element);\r\n },\r\n\r\n insertElementAnimated(e, sibling) {\r\n return elementRoutines.insertElementAnimated(e, sibling || topPadding.element);\r\n },\r\n\r\n shouldLoadBottom() {\r\n return !buffer.eof && viewport.bottomDataPos() < viewport.bottomVisiblePos() + bufferPadding();\r\n },\r\n\r\n clipBottom() {\r\n // clip the invisible items off the bottom\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.bottomDataPos() - viewport.bottomVisiblePos() - bufferPadding();\r\n\r\n for (let i = buffer.length - 1; i >= 0; i--) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n bottomPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n buffer.eof = false;\r\n buffer.remove(buffer.length - overage, buffer.length);\r\n buffer.next -= overage;\r\n viewport.adjustPaddings();\r\n }\r\n },\r\n\r\n shouldLoadTop() {\r\n return !buffer.bof && (viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding());\r\n },\r\n\r\n clipTop() {\r\n // clip the invisible items off the top\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\r\n\r\n for (let i = 0; i < buffer.length; i++) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n topPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n // we need to adjust top padding element before items are removed from top\r\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\r\n topPadding.height(topPadding.height() + overageHeight);\r\n buffer.bof = false;\r\n buffer.remove(0, overage);\r\n buffer.first += overage;\r\n }\r\n },\r\n\r\n adjustPaddings() {\r\n if (!buffer.length) {\r\n return;\r\n }\r\n\r\n // precise heights calculation based on items that are in buffer or that were in buffer once\r\n const visibleItemsHeight = buffer.reduce((summ, item) => summ + item.element.outerHeight(true), 0);\r\n\r\n let topPaddingHeight = 0, topCount = 0;\r\n topPadding.cache.forEach(item => {\r\n if(item.index < buffer.first) {\r\n topPaddingHeight += item.height;\r\n topCount++;\r\n }\r\n });\r\n\r\n let bottomPaddingHeight = 0, bottomCount = 0;\r\n bottomPadding.cache.forEach(item => {\r\n if(item.index >= buffer.next) {\r\n bottomPaddingHeight += item.height;\r\n bottomCount++;\r\n }\r\n });\r\n\r\n const totalHeight = visibleItemsHeight + topPaddingHeight + bottomPaddingHeight;\r\n const averageItemHeight = totalHeight / (topCount + bottomCount + buffer.length);\r\n\r\n // average heights calculation, items that have never been reached\r\n let adjustTopPadding = buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser;\r\n let adjustBottomPadding = buffer.maxIndexUser !== null && buffer.maxIndex < buffer.maxIndexUser;\r\n let topPaddingHeightAdd = adjustTopPadding ? (buffer.minIndex - buffer.minIndexUser) * averageItemHeight : 0;\r\n let bottomPaddingHeightAdd = adjustBottomPadding ? (buffer.maxIndexUser - buffer.maxIndex) * averageItemHeight : 0;\r\n\r\n // paddings combine adjustment\r\n topPadding.height(topPaddingHeight + topPaddingHeightAdd);\r\n bottomPadding.height(bottomPaddingHeight + bottomPaddingHeightAdd);\r\n },\r\n\r\n onAfterMinIndexSet(topPaddingHeightOld) {\r\n // additional scrollTop adjustment in case of datasource.minIndex external set\r\n if (buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser) {\r\n let diff = topPadding.height() - topPaddingHeightOld;\r\n viewport.scrollTop(viewport.scrollTop() + diff);\r\n while((diff -= viewport.scrollTop()) > 0) {\r\n bottomPadding.height(bottomPadding.height() + diff);\r\n viewport.scrollTop(viewport.scrollTop() + diff);\r\n }\r\n }\r\n },\r\n\r\n onAfterPrepend(updates) {\r\n if (!updates.prepended.length)\r\n return;\r\n const height = buffer.effectiveHeight(updates.prepended);\r\n const paddingHeight = topPadding.height() - height;\r\n if (paddingHeight >= 0) {\r\n topPadding.height(paddingHeight);\r\n }\r\n else {\r\n topPadding.height(0);\r\n viewport.scrollTop(viewport.scrollTop() - paddingHeight);\r\n }\r\n },\r\n\r\n resetTopPadding() {\r\n topPadding.height(0);\r\n topPadding.cache.clear();\r\n },\r\n\r\n resetBottomPadding() {\r\n bottomPadding.height(0);\r\n bottomPadding.cache.clear();\r\n },\r\n\r\n removeCacheItem(item, isTop) {\r\n topPadding.cache.remove(item, isTop);\r\n bottomPadding.cache.remove(item, isTop);\r\n },\r\n\r\n removeItem(item) {\r\n this.removeCacheItem(item);\r\n return buffer.remove(item);\r\n }\r\n });\r\n\r\n return viewport;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/viewport.js","// Can't just extend the Array, due to Babel does not support built-in classes extending\r\n// This solution was taken from https://stackoverflow.com/questions/46897414/es6-class-extends-array-workaround-for-es5-babel-transpile\r\nclass CacheProto {\r\n add(item) {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index === item.scope.$index) {\r\n this[i].height = item.element.outerHeight();\r\n return;\r\n }\r\n }\r\n this.push({\r\n index: item.scope.$index,\r\n height: item.element.outerHeight()\r\n });\r\n this.sort((a, b) => ((a.index < b.index) ? -1 : ((a.index > b.index) ? 1 : 0)));\r\n }\r\n\r\n remove(argument, _isTop) {\r\n const index = argument % 1 === 0 ? argument : argument.scope.$index;\r\n const isTop = argument % 1 === 0 ? _isTop : argument._op === 'isTop';\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index === index) {\r\n this.splice(i, 1);\r\n break;\r\n }\r\n }\r\n if(!isTop) {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index > index) {\r\n this[i].index--;\r\n }\r\n }\r\n }\r\n }\r\n\r\n clear() {\r\n this.length = 0;\r\n }\r\n}\r\n\r\nfunction Cache() {\r\n const instance = [];\r\n instance.push.apply(instance, arguments);\r\n Object.setPrototypeOf(instance, Cache.prototype);\r\n return instance;\r\n}\r\nCache.prototype = Object.create(Array.prototype);\r\nObject.getOwnPropertyNames(CacheProto.prototype).forEach(methodName =>\r\n Cache.prototype[methodName] = CacheProto.prototype[methodName]\r\n);\r\n\r\nfunction generateElement(template) {\r\n if(template.nodeType !== Node.ELEMENT_NODE) {\r\n throw new Error('ui-scroll directive requires an Element node for templating the view');\r\n }\r\n let element;\r\n switch (template.tagName.toLowerCase()) {\r\n case 'dl':\r\n throw new Error(`ui-scroll directive does not support <${template.tagName}> as a repeating tag: ${template.outerHTML}`);\r\n case 'tr':\r\n let table = angular.element('
    ');\r\n element = table.find('tr');\r\n break;\r\n case 'li':\r\n element = angular.element('
  • ');\r\n break;\r\n default:\r\n element = angular.element('
    ');\r\n }\r\n return element;\r\n}\r\n\r\nclass Padding {\r\n constructor(template) {\r\n this.element = generateElement(template);\r\n this.cache = new Cache();\r\n }\r\n\r\n height() {\r\n return this.element.height.apply(this.element, arguments);\r\n }\r\n}\r\n\r\nexport default Padding;\n\n\n// WEBPACK FOOTER //\n// ./src/modules/padding.js","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 '$interval',\n '$q',\n '$parse',\n function (console, $injector, $rootScope, $timeout, $interval, $q, $parse) {\n\n return {\n require: ['?^uiScrollViewport'],\n restrict: 'A',\n transclude: 'element',\n priority: 1000,\n terminal: true,\n link: link\n };\n\n function link($scope, element, $attr, controllers, linker) {\n const match = $attr.uiScroll.match(/^\\s*(\\w+)\\s+in\\s+([(\\w|\\$)\\.]+)\\s*$/);\n if (!match) {\n throw new Error('Expected uiScroll in form of \\'_item_ in _datasource_\\' but got \\'' + $attr.uiScroll + '\\'');\n }\n\n function parseNumericAttr(value, defaultValue) {\n const result = $parse(value)($scope);\n return isNaN(result) ? defaultValue : result;\n }\n\n const BUFFER_MIN = 3;\n const BUFFER_DEFAULT = 10;\n const PADDING_MIN = 0.3;\n const PADDING_DEFAULT = 0.5;\n const MAX_VIEWPORT_DELAY = 500;\n const VIEWPORT_POLLING_INTERVAL = 50;\n\n let datasource = null;\n const itemName = match[1];\n const datasourceName = match[2];\n const viewportController = controllers[0];\n const bufferSize = Math.max(BUFFER_MIN, parseNumericAttr($attr.bufferSize, BUFFER_DEFAULT));\n const padding = Math.max(PADDING_MIN, parseNumericAttr($attr.padding, PADDING_DEFAULT));\n let startIndex = parseNumericAttr($attr.startIndex, 1);\n let ridActual = 0; // current data revision id\n let pending = [];\n\n const elementRoutines = new ElementRoutines($injector, $q);\n const buffer = new ScrollBuffer(elementRoutines, bufferSize, startIndex);\n const viewport = new Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding);\n const adapter = new Adapter($scope, $parse, $attr, viewport, buffer, doAdjust, reload);\n\n if (viewportController) {\n viewportController.adapter = adapter;\n }\n\n const isDatasourceValid = () =>\n Object.prototype.toString.call(datasource) === '[object Object]' && typeof datasource.get === 'function';\n\n datasource = $parse(datasourceName)($scope); // try to get datasource on scope\n if (!isDatasourceValid()) {\n datasource = $injector.get(datasourceName); // try to inject datasource as service\n if (!isDatasourceValid()) {\n throw new Error(datasourceName + ' is not a valid datasource');\n }\n }\n\n let onRenderHandlers = [];\n function onRenderHandlersRunner() {\n onRenderHandlers.forEach(handler => handler.run());\n onRenderHandlers = [];\n }\n function persistDatasourceIndex(datasource, propName) {\n let getter;\n // need to postpone min/maxIndexUser processing if the view is empty\n if(Number.isInteger(datasource[propName])) {\n getter = datasource[propName];\n if(Number.isInteger(getter)) {\n onRenderHandlers = onRenderHandlers.filter(handler => handler.id !== propName);\n onRenderHandlers.push({\n id: propName,\n run: () => datasource[propName] = getter\n });\n }\n }\n }\n\n function defineDatasourceIndex(datasource, propName, propUserName) {\n const descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n if (descriptor && (descriptor.set || descriptor.get)) {\n return;\n }\n let getter;\n persistDatasourceIndex(datasource, propName);\n Object.defineProperty(datasource, propName, {\n set: (value) => {\n getter = value;\n if(pending.length && !buffer.length) {\n persistDatasourceIndex(datasource, propName);\n return;\n }\n buffer[propUserName] = value;\n const topPaddingHeightOld = viewport.topDataPos();\n viewport.adjustPaddings();\n if (propName === 'minIndex') {\n viewport.onAfterMinIndexSet(topPaddingHeightOld);\n }\n },\n get: () => getter\n });\n }\n\n defineDatasourceIndex(datasource, 'minIndex', 'minIndexUser');\n defineDatasourceIndex(datasource, 'maxIndex', 'maxIndexUser');\n\n const fetchNext = (datasource.get.length !== 2) ?\n (success) => datasource.get(buffer.next, bufferSize, success) :\n (success) => {\n datasource.get({\n index: buffer.next,\n append: buffer.length ? buffer[buffer.length - 1].item : void 0,\n count: bufferSize\n }, success);\n };\n\n const fetchPrevious = (datasource.get.length !== 2) ?\n (success) => datasource.get(buffer.first - bufferSize, bufferSize, success) :\n (success) => {\n datasource.get({\n index: buffer.first - bufferSize,\n prepend: buffer.length ? buffer[0].item : void 0,\n count: bufferSize\n }, success);\n };\n\n const initialize = () => {\n let tryCount = 0;\n if(!viewport.applyContainerStyle()) {\n const timer = $interval(() => {\n tryCount++;\n if(viewport.applyContainerStyle()) {\n $interval.cancel(timer);\n doAdjust();\n }\n if(tryCount * VIEWPORT_POLLING_INTERVAL >= MAX_VIEWPORT_DELAY) {\n $interval.cancel(timer);\n throw Error(`ui-scroll directive requires a viewport with non-zero height in ${MAX_VIEWPORT_DELAY}ms`);\n }\n }, VIEWPORT_POLLING_INTERVAL);\n }\n else {\n doAdjust();\n }\n };\n\n /**\n * Build padding elements\n *\n * Calling linker is the only way I found to get access to the tag name of the template\n * to prevent the directive scope from pollution a new scope is created and destroyed\n * right after the builder creation is completed\n */\n linker((clone, scope) => {\n viewport.createPaddingElements(clone[0]);\n // we do not include the clone in the DOM. It means that the nested directives will not\n // be able to reach the parent directives, but in this case it is intentional because we\n // created the clone to access the template tag name\n scope.$destroy();\n clone.remove();\n });\n\n $scope.$on('$destroy', () => {\n unbindEvents();\n viewport.unbind('mousewheel', wheelHandler);\n });\n\n viewport.bind('mousewheel', wheelHandler);\n\n initialize();\n\n /* Private function definitions */\n\n function isInvalid(rid) {\n return (rid && rid !== ridActual) || $scope.$$destroyed;\n }\n\n function bindEvents() {\n viewport.bind('resize', resizeAndScrollHandler);\n viewport.bind('scroll', resizeAndScrollHandler);\n }\n\n function unbindEvents() {\n viewport.unbind('resize', resizeAndScrollHandler);\n viewport.unbind('scroll', resizeAndScrollHandler);\n }\n\n function reload() {\n viewport.resetTopPadding();\n viewport.resetBottomPadding();\n if (arguments.length) {\n startIndex = arguments[0];\n }\n buffer.reset(startIndex);\n persistDatasourceIndex(datasource, 'minIndex');\n persistDatasourceIndex(datasource, 'maxIndex');\n doAdjust();\n }\n\n function isElementVisible(wrapper) {\n return wrapper.element.height() && wrapper.element[0].offsetParent;\n }\n\n function visibilityWatcher(wrapper) {\n if (isElementVisible(wrapper)) {\n buffer.forEach((item) => {\n if (typeof item.unregisterVisibilityWatcher === 'function') {\n item.unregisterVisibilityWatcher();\n delete item.unregisterVisibilityWatcher;\n }\n });\n if (!pending.length) {\n $timeout(() => doAdjust());\n }\n }\n }\n\n function insertWrapperContent(wrapper, insertAfter) {\n createElement(wrapper, insertAfter, viewport.insertElement);\n if (!isElementVisible(wrapper)) {\n wrapper.unregisterVisibilityWatcher = wrapper.scope.$watch(() => visibilityWatcher(wrapper));\n }\n elementRoutines.hideElement(wrapper); // hide inserted elements before data binding\n }\n\n function createElement(wrapper, insertAfter, insertElement) {\n let promises = null;\n const sibling = (insertAfter > 0) ? buffer[insertAfter - 1].element : undefined;\n linker((clone, scope) => {\n promises = insertElement(clone, sibling);\n wrapper.element = clone;\n wrapper.scope = scope;\n scope[itemName] = wrapper.item;\n });\n // ui-scroll-grid apply\n if (adapter.transform) {\n const tdInitializer = wrapper.scope.uiScrollTdInitializer;\n if (tdInitializer && tdInitializer.linking) {\n adapter.transform(wrapper.scope, wrapper.element);\n } else {\n wrapper.scope.uiScrollTdInitializer = {\n onLink: () => adapter.transform(wrapper.scope, wrapper.element),\n scope: wrapper.scope\n };\n }\n }\n return promises;\n }\n\n function updateDOM() {\n let promises = [];\n const toBePrepended = [];\n const toBeRemoved = [];\n const inserted = [];\n\n buffer.forEach((wrapper, i) => {\n switch (wrapper.op) {\n case 'prepend':\n toBePrepended.unshift(wrapper);\n break;\n case 'append':\n insertWrapperContent(wrapper, i);\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'insert':\n promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated));\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'remove':\n toBeRemoved.push(wrapper);\n }\n });\n\n toBeRemoved.forEach((wrapper) => promises = promises.concat(viewport.removeItem(wrapper)));\n\n if (toBePrepended.length)\n toBePrepended.forEach((wrapper) => {\n insertWrapperContent(wrapper);\n wrapper.op = 'none';\n });\n\n buffer.forEach((item, i) => item.scope.$index = buffer.first + i);\n\n return {\n prepended: toBePrepended,\n removed: toBeRemoved,\n inserted: inserted,\n animated: promises\n };\n\n }\n\n function updatePaddings(rid, updates) {\n // schedule another doAdjust after animation completion\n if (updates.animated.length) {\n $q.all(updates.animated).then(() => {\n viewport.adjustPaddings();\n doAdjust(rid);\n });\n } else {\n viewport.adjustPaddings();\n }\n }\n\n function enqueueFetch(rid, updates) {\n if (viewport.shouldLoadBottom()) {\n if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\n // this means that at least one item appended in the last batch has height > 0\n if (pending.push(true) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n } else if (viewport.shouldLoadTop()) {\n if ((!updates || buffer.effectiveHeight(updates.prepended) > 0) || pending[0]) {\n // this means that at least one item appended in the last batch has height > 0\n // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\n // BTW there will always be at least 1 element in the pending array because bottom is fetched first\n if (pending.push(false) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n }\n }\n\n function processUpdates() {\n const updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustments\n !$scope.$$phase && !$rootScope.$$phase && $scope.$digest();\n\n updates.inserted.forEach(w => elementRoutines.showElement(w));\n updates.prepended.forEach(w => elementRoutines.showElement(w));\n return updates;\n }\n\n function doAdjust(rid) {\n if (!rid) { // dismiss pending requests\n pending = [];\n rid = ++ridActual;\n }\n\n const updates = processUpdates();\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n enqueueFetch(rid);\n\n if (!pending.length) {\n adapter.calculateProperties();\n }\n }\n\n function doAdjustAfterFetch(rid) {\n const updates = processUpdates();\n\n viewport.onAfterPrepend(updates);\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n onRenderHandlersRunner();\n enqueueFetch(rid, updates);\n pending.shift();\n\n if (pending.length)\n fetch(rid);\n else {\n adapter.loading(false);\n bindEvents();\n adapter.calculateProperties();\n }\n }\n\n function fetch(rid) {\n if (pending[0]) {// scrolling down\n if (buffer.length && !viewport.shouldLoadBottom()) {\n doAdjustAfterFetch(rid);\n } else {\n fetchNext((result) => {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.eof = true;\n }\n\n if (result.length > 0) {\n viewport.clipTop();\n buffer.append(result);\n }\n\n doAdjustAfterFetch(rid);\n });\n }\n } else { // scrolling up\n if (buffer.length && !viewport.shouldLoadTop()) {\n doAdjustAfterFetch(rid);\n } else {\n fetchPrevious((result) => {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.bof = true;\n // log 'bof is reached'\n }\n\n if (result.length > 0) {\n if (buffer.length) {\n viewport.clipBottom();\n }\n buffer.prepend(result);\n }\n\n doAdjustAfterFetch(rid);\n });\n }\n }\n }\n\n function resizeAndScrollHandler() {\n if (!$rootScope.$$phase && !adapter.isLoading && !adapter.disabled) {\n\n enqueueFetch(ridActual);\n\n if (pending.length) {\n unbindEvents();\n } else {\n adapter.calculateProperties();\n !$scope.$$phase && $scope.$digest();\n }\n }\n }\n\n function wheelHandler(event) {\n if (!adapter.disabled) {\n const scrollTop = viewport[0].scrollTop;\n const yMax = viewport[0].scrollHeight - viewport[0].clientHeight;\n\n if ((scrollTop === 0 && !buffer.bof) || (scrollTop === yMax && !buffer.eof)) {\n event.preventDefault();\n }\n }\n }\n }\n\n }\n ]);\n\n\n// WEBPACK FOOTER //\n// ./src/ui-scroll.js"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///ui-scroll.min.js","webpack:///webpack/bootstrap 36a3010ad66560b7fc51","webpack:///./src/ui-scroll.js","webpack:///./src/modules/jqLiteExtras.js","webpack:///./src/modules/elementRoutines.js","webpack:///./src/modules/buffer.js","webpack:///./src/modules/viewport.js","webpack:///./src/modules/padding.js","webpack:///./src/modules/adapter.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","_interopRequireDefault","obj","default","_jqLiteExtras","_jqLiteExtras2","_elementRoutines","_elementRoutines2","_buffer","_buffer2","_viewport","_viewport2","_adapter","_adapter2","angular","service","run","jqLiteExtras","window","jQuery","registerFor","element","directive","restrict","controller","scope","_this","this","container","viewport","forEach","children","child","tagName","toLowerCase","console","$injector","$rootScope","$timeout","$interval","$q","$parse","link","$scope","$attr","controllers","linker","parseNumericAttr","value","defaultValue","result","isNaN","onRenderHandlersRunner","onRenderHandlers","handler","persistDatasourceIndex","datasource","propName","Number","isInteger","filter","id","push","defineDatasourceIndex","propUserName","descriptor","getOwnPropertyDescriptor","set","pending","length","buffer","topPaddingHeightOld","topDataPos","adjustPaddings","onAfterMinIndexSet","isInvalid","rid","ridActual","$$destroyed","bindEvents","bind","resizeAndScrollHandler","unbindEvents","unbind","reload","resetTopPadding","resetBottomPadding","arguments","startIndex","reset","doAdjust","isElementVisible","wrapper","height","offsetParent","visibilityWatcher","item","unregisterVisibilityWatcher","insertWrapperContent","insertAfter","createElement","insertElement","$watch","elementRoutines","hideElement","promises","sibling","undefined","clone","itemName","adapter","transform","tdInitializer","uiScrollTdInitializer","linking","onLink","updateDOM","toBePrepended","toBeRemoved","inserted","op","unshift","concat","insertElementAnimated","removeItem","$index","first","prepended","removed","animated","updatePaddings","updates","all","then","enqueueFetch","shouldLoadBottom","effectiveHeight","loading","fetch","shouldLoadTop","processUpdates","$$phase","$digest","w","showElement","calculateProperties","doAdjustAfterFetch","onAfterPrepend","shift","fetchNext","bufferSize","eof","clipTop","append","fetchPrevious","bof","clipBottom","prepend","isLoading","disabled","wheelHandler","event","scrollTop","yMax","scrollHeight","clientHeight","preventDefault","match","uiScroll","Error","datasourceName","viewportController","Math","max","padding","isDatasourceValid","toString","success","next","index","count","createPaddingElements","$destroy","remove","$on","tryCount","applyContainerStyle","timer","cancel","require","transclude","priority","terminal","_classCallCheck","instance","Constructor","TypeError","_slicedToArray","sliceIterator","arr","_arr","_n","_d","_e","_s","_i","Symbol","iterator","done","err","Array","isArray","_createClass","defineProperties","target","props","writable","key","protoProps","staticProps","JQLiteExtras","scrollTo","self","direction","elem","_top$left$direction","top","left","method","prop","preserve","isValueDefined","isWindow","document","documentElement","getMeasurements","measure","base","borderA","borderB","computedMarginA","computedMarginB","computedStyle","dirA","dirB","marginA","marginB","paddingA","paddingB","width","border","margin","_width$height$measure","offsetWidth","offsetHeight","getStyle","convertToPx","getWidthHeight","measurements","outer","outerfull","style","parseFloat","css","nodeType","location","alert","setInterval","getComputedStyle","currentStyle","rs","rsLeft","core_pnum","source","RegExp","test","runtimeStyle","pixelLeft","before","newElem","j","parent","ref","contents","after","outerHTML","outerHeight","option","outerWidth","offset","docElem","win","box","doc","ownerDocument","getBoundingClientRect","defaultView","parentWindow","pageYOffset","clientTop","pageXOffset","scrollLeft","clientLeft","addCSSRule","sheet","selector","rules","insertRule","addRule","hideClassToken","ElementRoutines","$animate","has","isAngularVersionLessThen1_3","version","major","minor","styleSheets","addClass","removeClass","newElement","previousElement","deferred","defer","enter","resolve","promise","removeElement","leave","ScrollBuffer","create","assign","size","minIndex","maxIndex","minIndexUser","maxIndexUser","items","insert","reverse","min","operation","isTop","splice","arg1","arg2","indexOf","_op","getAbsMinIndex","incrementMinIndex","decrementMaxIndex","removeElementAnimated","getAbsMaxIndex","elements","MAX_VALUE","bottom","NEGATIVE_INFINITY","Viewport","bufferPadding","topPadding","bottomPadding","overflow-anchor","overflow-y","display","getScope","template","_padding2","bottomDataPos","bottomVisiblePos","topVisiblePos","e","overage","overageHeight","itemHeight","emptySpaceHeight","cache","add","visibleItemsHeight","reduce","summ","topPaddingHeight","topCount","bottomPaddingHeight","bottomCount","totalHeight","averageItemHeight","adjustTopPadding","adjustBottomPadding","topPaddingHeightAdd","bottomPaddingHeightAdd","diff","paddingHeight","clear","removeCacheItem","_padding","Cache","apply","setPrototypeOf","generateElement","Node","ELEMENT_NODE","find","CacheProto","sort","a","b","argument","_isTop","getOwnPropertyNames","methodName","Padding","Adapter","viewportScope","startScope","$parent","publicContext","assignAdapter","generatePublicContext","adapterAttr","replace","adapterOnScope","error","message","publicMethods","publicProps","attr","newItems","applyUpdatesFunc","applyUpdatesIndex","cb","_this2","slice","applyUpdate","_index","_this3","position","some","newItem","rowTop","topHeight","topDone","bottomDone","itemTop","isEOF"],"mappings":"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","file":"ui-scroll.min.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _jqLiteExtras = __webpack_require__(1);\n\nvar _jqLiteExtras2 = _interopRequireDefault(_jqLiteExtras);\n\nvar _elementRoutines = __webpack_require__(2);\n\nvar _elementRoutines2 = _interopRequireDefault(_elementRoutines);\n\nvar _buffer = __webpack_require__(3);\n\nvar _buffer2 = _interopRequireDefault(_buffer);\n\nvar _viewport = __webpack_require__(4);\n\nvar _viewport2 = _interopRequireDefault(_viewport);\n\nvar _adapter = __webpack_require__(6);\n\nvar _adapter2 = _interopRequireDefault(_adapter);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nangular.module('ui.scroll', []).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', '$interval', '$q', '$parse', function (console, $injector, $rootScope, $timeout, $interval, $q, $parse) {\n\n return {\n require: ['?^uiScrollViewport'],\n restrict: 'A',\n transclude: 'element',\n priority: 1000,\n terminal: true,\n link: link\n };\n\n function link($scope, element, $attr, controllers, linker) {\n var match = $attr.uiScroll.match(/^\\s*(\\w+)\\s+in\\s+([(\\w|\\$)\\.]+)\\s*$/);\n if (!match) {\n throw new Error('Expected uiScroll in form of \\'_item_ in _datasource_\\' but got \\'' + $attr.uiScroll + '\\'');\n }\n\n function parseNumericAttr(value, defaultValue) {\n var result = $parse(value)($scope);\n return isNaN(result) ? defaultValue : result;\n }\n\n var BUFFER_MIN = 3;\n var BUFFER_DEFAULT = 10;\n var PADDING_MIN = 0.3;\n var PADDING_DEFAULT = 0.5;\n var MAX_VIEWPORT_DELAY = 500;\n var VIEWPORT_POLLING_INTERVAL = 50;\n\n var datasource = null;\n var itemName = match[1];\n var datasourceName = match[2];\n var viewportController = controllers[0];\n var bufferSize = Math.max(BUFFER_MIN, parseNumericAttr($attr.bufferSize, BUFFER_DEFAULT));\n var padding = Math.max(PADDING_MIN, parseNumericAttr($attr.padding, PADDING_DEFAULT));\n var startIndex = parseNumericAttr($attr.startIndex, 1);\n var ridActual = 0; // current data revision id\n var pending = [];\n\n var elementRoutines = new _elementRoutines2.default($injector, $q);\n var buffer = new _buffer2.default(elementRoutines, bufferSize, startIndex);\n var viewport = new _viewport2.default(elementRoutines, buffer, element, viewportController, $rootScope, padding);\n var adapter = new _adapter2.default($scope, $parse, $attr, viewport, buffer, doAdjust, reload);\n\n if (viewportController) {\n viewportController.adapter = adapter;\n }\n\n var isDatasourceValid = function isDatasourceValid() {\n return Object.prototype.toString.call(datasource) === '[object Object]' && typeof datasource.get === 'function';\n };\n\n datasource = $parse(datasourceName)($scope); // try to get datasource on scope\n if (!isDatasourceValid()) {\n datasource = $injector.get(datasourceName); // try to inject datasource as service\n if (!isDatasourceValid()) {\n throw new Error(datasourceName + ' is not a valid datasource');\n }\n }\n\n var onRenderHandlers = [];\n function onRenderHandlersRunner() {\n onRenderHandlers.forEach(function (handler) {\n return handler.run();\n });\n onRenderHandlers = [];\n }\n function persistDatasourceIndex(datasource, propName) {\n var getter = void 0;\n // need to postpone min/maxIndexUser processing if the view is empty\n if (Number.isInteger(datasource[propName])) {\n getter = datasource[propName];\n if (Number.isInteger(getter)) {\n onRenderHandlers = onRenderHandlers.filter(function (handler) {\n return handler.id !== propName;\n });\n onRenderHandlers.push({\n id: propName,\n run: function run() {\n return datasource[propName] = getter;\n }\n });\n }\n }\n }\n\n function defineDatasourceIndex(datasource, propName, propUserName) {\n var descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n if (descriptor && (descriptor.set || descriptor.get)) {\n return;\n }\n var getter = void 0;\n persistDatasourceIndex(datasource, propName);\n Object.defineProperty(datasource, propName, {\n set: function set(value) {\n getter = value;\n if (pending.length && !buffer.length) {\n persistDatasourceIndex(datasource, propName);\n return;\n }\n buffer[propUserName] = value;\n var topPaddingHeightOld = viewport.topDataPos();\n viewport.adjustPaddings();\n if (propName === 'minIndex') {\n viewport.onAfterMinIndexSet(topPaddingHeightOld);\n }\n },\n get: function get() {\n return getter;\n }\n });\n }\n\n defineDatasourceIndex(datasource, 'minIndex', 'minIndexUser');\n defineDatasourceIndex(datasource, 'maxIndex', 'maxIndexUser');\n\n var fetchNext = datasource.get.length !== 2 ? function (success) {\n return datasource.get(buffer.next, bufferSize, success);\n } : function (success) {\n datasource.get({\n index: buffer.next,\n append: buffer.length ? buffer[buffer.length - 1].item : void 0,\n count: bufferSize\n }, success);\n };\n\n var fetchPrevious = datasource.get.length !== 2 ? function (success) {\n return datasource.get(buffer.first - bufferSize, bufferSize, success);\n } : function (success) {\n datasource.get({\n index: buffer.first - bufferSize,\n prepend: buffer.length ? buffer[0].item : void 0,\n count: bufferSize\n }, success);\n };\n\n var initialize = function initialize() {\n var tryCount = 0;\n if (!viewport.applyContainerStyle()) {\n var timer = $interval(function () {\n tryCount++;\n if (viewport.applyContainerStyle()) {\n $interval.cancel(timer);\n doAdjust();\n }\n if (tryCount * VIEWPORT_POLLING_INTERVAL >= MAX_VIEWPORT_DELAY) {\n $interval.cancel(timer);\n throw Error('ui-scroll directive requires a viewport with non-zero height in ' + MAX_VIEWPORT_DELAY + 'ms');\n }\n }, VIEWPORT_POLLING_INTERVAL);\n } else {\n doAdjust();\n }\n };\n\n /**\n * Build padding elements\n *\n * Calling linker is the only way I found to get access to the tag name of the template\n * to prevent the directive scope from pollution a new scope is created and destroyed\n * right after the builder creation is completed\n */\n linker(function (clone, scope) {\n viewport.createPaddingElements(clone[0]);\n // we do not include the clone in the DOM. It means that the nested directives will not\n // be able to reach the parent directives, but in this case it is intentional because we\n // created the clone to access the template tag name\n scope.$destroy();\n clone.remove();\n });\n\n $scope.$on('$destroy', function () {\n unbindEvents();\n viewport.unbind('mousewheel', wheelHandler);\n });\n\n viewport.bind('mousewheel', wheelHandler);\n\n initialize();\n\n /* Private function definitions */\n\n function isInvalid(rid) {\n return rid && rid !== ridActual || $scope.$$destroyed;\n }\n\n function bindEvents() {\n viewport.bind('resize', resizeAndScrollHandler);\n viewport.bind('scroll', resizeAndScrollHandler);\n }\n\n function unbindEvents() {\n viewport.unbind('resize', resizeAndScrollHandler);\n viewport.unbind('scroll', resizeAndScrollHandler);\n }\n\n function reload() {\n viewport.resetTopPadding();\n viewport.resetBottomPadding();\n if (arguments.length) {\n startIndex = arguments[0];\n }\n buffer.reset(startIndex);\n persistDatasourceIndex(datasource, 'minIndex');\n persistDatasourceIndex(datasource, 'maxIndex');\n doAdjust();\n }\n\n function isElementVisible(wrapper) {\n return wrapper.element.height() && wrapper.element[0].offsetParent;\n }\n\n function visibilityWatcher(wrapper) {\n if (isElementVisible(wrapper)) {\n buffer.forEach(function (item) {\n if (typeof item.unregisterVisibilityWatcher === 'function') {\n item.unregisterVisibilityWatcher();\n delete item.unregisterVisibilityWatcher;\n }\n });\n if (!pending.length) {\n $timeout(function () {\n return doAdjust();\n });\n }\n }\n }\n\n function insertWrapperContent(wrapper, insertAfter) {\n createElement(wrapper, insertAfter, viewport.insertElement);\n if (!isElementVisible(wrapper)) {\n wrapper.unregisterVisibilityWatcher = wrapper.scope.$watch(function () {\n return visibilityWatcher(wrapper);\n });\n }\n elementRoutines.hideElement(wrapper); // hide inserted elements before data binding\n }\n\n function createElement(wrapper, insertAfter, insertElement) {\n var promises = null;\n var sibling = insertAfter > 0 ? buffer[insertAfter - 1].element : undefined;\n linker(function (clone, scope) {\n promises = insertElement(clone, sibling);\n wrapper.element = clone;\n wrapper.scope = scope;\n scope[itemName] = wrapper.item;\n });\n // ui-scroll-grid apply\n if (adapter.transform) {\n var tdInitializer = wrapper.scope.uiScrollTdInitializer;\n if (tdInitializer && tdInitializer.linking) {\n adapter.transform(wrapper.scope, wrapper.element);\n } else {\n wrapper.scope.uiScrollTdInitializer = {\n onLink: function onLink() {\n return adapter.transform(wrapper.scope, wrapper.element);\n },\n scope: wrapper.scope\n };\n }\n }\n return promises;\n }\n\n function updateDOM() {\n var promises = [];\n var toBePrepended = [];\n var toBeRemoved = [];\n var inserted = [];\n\n buffer.forEach(function (wrapper, i) {\n switch (wrapper.op) {\n case 'prepend':\n toBePrepended.unshift(wrapper);\n break;\n case 'append':\n insertWrapperContent(wrapper, i);\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'insert':\n promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated));\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'remove':\n toBeRemoved.push(wrapper);\n }\n });\n\n toBeRemoved.forEach(function (wrapper) {\n return promises = promises.concat(viewport.removeItem(wrapper));\n });\n\n if (toBePrepended.length) toBePrepended.forEach(function (wrapper) {\n insertWrapperContent(wrapper);\n wrapper.op = 'none';\n });\n\n buffer.forEach(function (item, i) {\n return item.scope.$index = buffer.first + i;\n });\n\n return {\n prepended: toBePrepended,\n removed: toBeRemoved,\n inserted: inserted,\n animated: promises\n };\n }\n\n function updatePaddings(rid, updates) {\n // schedule another doAdjust after animation completion\n if (updates.animated.length) {\n $q.all(updates.animated).then(function () {\n viewport.adjustPaddings();\n doAdjust(rid);\n });\n } else {\n viewport.adjustPaddings();\n }\n }\n\n function enqueueFetch(rid, updates) {\n if (viewport.shouldLoadBottom()) {\n if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\n // this means that at least one item appended in the last batch has height > 0\n if (pending.push(true) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n } else if (viewport.shouldLoadTop()) {\n if (!updates || buffer.effectiveHeight(updates.prepended) > 0 || pending[0]) {\n // this means that at least one item appended in the last batch has height > 0\n // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\n // BTW there will always be at least 1 element in the pending array because bottom is fetched first\n if (pending.push(false) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n }\n }\n\n function processUpdates() {\n var updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustments\n !$scope.$$phase && !$rootScope.$$phase && $scope.$digest();\n\n updates.inserted.forEach(function (w) {\n return elementRoutines.showElement(w);\n });\n updates.prepended.forEach(function (w) {\n return elementRoutines.showElement(w);\n });\n return updates;\n }\n\n function doAdjust(rid) {\n if (!rid) {\n // dismiss pending requests\n pending = [];\n rid = ++ridActual;\n }\n\n var updates = processUpdates();\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n enqueueFetch(rid);\n\n if (!pending.length) {\n adapter.calculateProperties();\n }\n }\n\n function doAdjustAfterFetch(rid) {\n var updates = processUpdates();\n\n viewport.onAfterPrepend(updates);\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n onRenderHandlersRunner();\n enqueueFetch(rid, updates);\n pending.shift();\n\n if (pending.length) fetch(rid);else {\n adapter.loading(false);\n bindEvents();\n adapter.calculateProperties();\n }\n }\n\n function fetch(rid) {\n if (pending[0]) {\n // scrolling down\n if (buffer.length && !viewport.shouldLoadBottom()) {\n doAdjustAfterFetch(rid);\n } else {\n fetchNext(function (result) {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.eof = true;\n }\n\n if (result.length > 0) {\n viewport.clipTop();\n buffer.append(result);\n }\n\n doAdjustAfterFetch(rid);\n });\n }\n } else {\n // scrolling up\n if (buffer.length && !viewport.shouldLoadTop()) {\n doAdjustAfterFetch(rid);\n } else {\n fetchPrevious(function (result) {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.bof = true;\n // log 'bof is reached'\n }\n\n if (result.length > 0) {\n if (buffer.length) {\n viewport.clipBottom();\n }\n buffer.prepend(result);\n }\n\n doAdjustAfterFetch(rid);\n });\n }\n }\n }\n\n function resizeAndScrollHandler() {\n if (!$rootScope.$$phase && !adapter.isLoading && !adapter.disabled) {\n\n enqueueFetch(ridActual);\n\n if (pending.length) {\n unbindEvents();\n } else {\n adapter.calculateProperties();\n !$scope.$$phase && $scope.$digest();\n }\n }\n }\n\n function wheelHandler(event) {\n if (!adapter.disabled) {\n var scrollTop = viewport[0].scrollTop;\n var yMax = viewport[0].scrollHeight - viewport[0].clientHeight;\n\n if (scrollTop === 0 && !buffer.bof || scrollTop === yMax && !buffer.eof) {\n event.preventDefault();\n }\n }\n }\n }\n}]);\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*!\r\n globals: angular, window\r\n List of used element methods available in JQuery but not in JQuery Lite\r\n element.before(elem)\r\n element.height()\r\n element.outerHeight(true)\r\n element.height(value) = only for Top/Bottom padding elements\r\n element.scrollTop()\r\n element.scrollTop(value)\r\n */\n\nvar JQLiteExtras = function () {\n function JQLiteExtras() {\n _classCallCheck(this, JQLiteExtras);\n }\n\n _createClass(JQLiteExtras, [{\n key: 'registerFor',\n value: function registerFor(element) {\n var convertToPx = void 0,\n css = void 0,\n getStyle = void 0,\n isWindow = void 0;\n // angular implementation blows up if elem is the window\n css = angular.element.prototype.css;\n\n element.prototype.css = function (name, value) {\n var self = this;\n var elem = self[0];\n if (!(!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style)) {\n return css.call(self, name, value);\n }\n };\n\n // as defined in angularjs v1.0.5\n isWindow = function isWindow(obj) {\n return obj && obj.document && obj.location && obj.alert && obj.setInterval;\n };\n\n function scrollTo(self, direction, value) {\n var elem = self[0];\n\n var _top$left$direction = _slicedToArray({\n top: ['scrollTop', 'pageYOffset', 'scrollLeft'],\n left: ['scrollLeft', 'pageXOffset', 'scrollTop']\n }[direction], 3),\n method = _top$left$direction[0],\n prop = _top$left$direction[1],\n preserve = _top$left$direction[2];\n\n var isValueDefined = typeof value !== 'undefined';\n if (isWindow(elem)) {\n if (isValueDefined) {\n return elem.scrollTo(self[preserve].call(self), value);\n }\n return prop in elem ? elem[prop] : elem.document.documentElement[method];\n } else {\n if (isValueDefined) {\n elem[method] = value;\n }\n return elem[method];\n }\n }\n\n if (window.getComputedStyle) {\n getStyle = function getStyle(elem) {\n return window.getComputedStyle(elem, null);\n };\n convertToPx = function convertToPx(elem, value) {\n return parseFloat(value);\n };\n } else {\n getStyle = function getStyle(elem) {\n return elem.currentStyle;\n };\n convertToPx = function convertToPx(elem, value) {\n var left = void 0,\n result = void 0,\n rs = void 0,\n rsLeft = void 0,\n style = void 0;\n var core_pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n var rnumnonpx = new RegExp('^(' + core_pnum + ')(?!px)[a-z%]+$', 'i');\n\n if (!rnumnonpx.test(value)) {\n return parseFloat(value);\n }\n\n // ported from JQuery\n style = elem.style;\n left = style.left;\n rs = elem.runtimeStyle;\n rsLeft = rs && rs.left;\n if (rs) {\n rs.left = style.left;\n }\n // put in the new values to get a computed style out\n style.left = value;\n result = style.pixelLeft;\n style.left = left;\n if (rsLeft) {\n rs.left = rsLeft;\n }\n return result;\n };\n }\n\n function getMeasurements(elem, measure) {\n var base = void 0,\n borderA = void 0,\n borderB = void 0,\n computedMarginA = void 0,\n computedMarginB = void 0,\n computedStyle = void 0,\n dirA = void 0,\n dirB = void 0,\n marginA = void 0,\n marginB = void 0,\n paddingA = void 0,\n paddingB = void 0;\n\n if (isWindow(elem)) {\n base = document.documentElement[{ height: 'clientHeight', width: 'clientWidth' }[measure]];\n\n return {\n base: base,\n padding: 0,\n border: 0,\n margin: 0\n };\n }\n\n // Start with offset property\n\n var _width$height$measure = _slicedToArray({\n width: [elem.offsetWidth, 'Left', 'Right'],\n height: [elem.offsetHeight, 'Top', 'Bottom']\n }[measure], 3);\n\n base = _width$height$measure[0];\n dirA = _width$height$measure[1];\n dirB = _width$height$measure[2];\n\n\n computedStyle = getStyle(elem);\n paddingA = convertToPx(elem, computedStyle['padding' + dirA]) || 0;\n paddingB = convertToPx(elem, computedStyle['padding' + dirB]) || 0;\n borderA = convertToPx(elem, computedStyle['border' + dirA + 'Width']) || 0;\n borderB = convertToPx(elem, computedStyle['border' + dirB + 'Width']) || 0;\n computedMarginA = computedStyle['margin' + dirA];\n computedMarginB = computedStyle['margin' + dirB];\n\n // I do not care for width for now, so this hack is irrelevant\n // if ( !supportsPercentMargin )\n // computedMarginA = hackPercentMargin( elem, computedStyle, computedMarginA )\n // computedMarginB = hackPercentMargin( elem, computedStyle, computedMarginB )\n marginA = convertToPx(elem, computedMarginA) || 0;\n marginB = convertToPx(elem, computedMarginB) || 0;\n\n return {\n base: base,\n padding: paddingA + paddingB,\n border: borderA + borderB,\n margin: marginA + marginB\n };\n }\n\n function getWidthHeight(elem, direction, measure) {\n var computedStyle = void 0,\n result = void 0;\n\n var measurements = getMeasurements(elem, direction);\n\n if (measurements.base > 0) {\n return {\n base: measurements.base - measurements.padding - measurements.border,\n outer: measurements.base,\n outerfull: measurements.base + measurements.margin\n }[measure];\n }\n\n // Fall back to computed then uncomputed css if necessary\n computedStyle = getStyle(elem);\n result = computedStyle[direction];\n\n if (result < 0 || result === null) {\n result = elem.style[direction] || 0;\n }\n\n // Normalize \"\", auto, and prepare for extra\n result = parseFloat(result) || 0;\n\n return {\n base: result - measurements.padding - measurements.border,\n outer: result,\n outerfull: result + measurements.padding + measurements.border + measurements.margin\n }[measure];\n }\n\n // define missing methods\n return angular.forEach({\n before: function before(newElem) {\n var children, elem, i, j, parent, ref, self;\n self = this;\n elem = self[0];\n parent = self.parent();\n children = parent.contents();\n if (children[0] === elem) {\n return parent.prepend(newElem);\n } else {\n for (i = j = 1, ref = children.length - 1; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {\n if (children[i] === elem) {\n angular.element(children[i - 1]).after(newElem);\n return;\n }\n }\n throw new Error('invalid DOM structure ' + elem.outerHTML);\n }\n },\n height: function height(value) {\n var self;\n self = this;\n if (typeof value !== 'undefined') {\n if (Number.isInteger(value)) {\n value = value + 'px';\n }\n return css.call(self, 'height', value);\n } else {\n return getWidthHeight(this[0], 'height', 'base');\n }\n },\n outerHeight: function outerHeight(option) {\n return getWidthHeight(this[0], 'height', option ? 'outerfull' : 'outer');\n },\n outerWidth: function outerWidth(option) {\n return getWidthHeight(this[0], 'width', option ? 'outerfull' : 'outer');\n },\n\n\n /*\r\n The offset setter method is not implemented\r\n */\n offset: function offset(value) {\n var docElem = void 0,\n win = void 0;\n var self = this;\n var box = {\n top: 0,\n left: 0\n };\n var elem = self[0];\n var doc = elem && elem.ownerDocument;\n\n if (arguments.length) {\n if (value === undefined) {\n return self;\n }\n // TODO: implement setter\n throw new Error('offset setter method is not implemented');\n }\n\n if (!doc) {\n return;\n }\n\n docElem = doc.documentElement;\n\n // TODO: Make sure it's not a disconnected DOM node\n\n if (elem.getBoundingClientRect != null) {\n box = elem.getBoundingClientRect();\n }\n\n win = doc.defaultView || doc.parentWindow;\n\n return {\n top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),\n left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0)\n };\n },\n scrollTop: function scrollTop(value) {\n return scrollTo(this, 'top', value);\n },\n scrollLeft: function scrollLeft(value) {\n return scrollTo(this, 'left', value);\n }\n }, function (value, key) {\n if (!element.prototype[key]) {\n return element.prototype[key] = value;\n }\n });\n }\n }]);\n\n return JQLiteExtras;\n}();\n\nexports.default = JQLiteExtras;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar hideClassToken = 'ng-ui-scroll-hide';\n\nfunction addCSSRule(sheet, selector, rules, index) {\n if ('insertRule' in sheet) {\n sheet.insertRule(selector + '{' + rules + '}', index);\n } else if ('addRule' in sheet) {\n sheet.addRule(selector, rules, index);\n }\n}\n\nvar ElementRoutines = function () {\n function ElementRoutines($injector, $q) {\n _classCallCheck(this, ElementRoutines);\n\n this.$animate = $injector.has && $injector.has('$animate') ? $injector.get('$animate') : null;\n this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3;\n this.$q = $q;\n addCSSRule(document.styleSheets[0], '.' + hideClassToken, 'display: none');\n }\n\n _createClass(ElementRoutines, [{\n key: 'hideElement',\n value: function hideElement(wrapper) {\n wrapper.element.addClass(hideClassToken);\n }\n }, {\n key: 'showElement',\n value: function showElement(wrapper) {\n wrapper.element.removeClass(hideClassToken);\n }\n }, {\n key: 'insertElement',\n value: function insertElement(newElement, previousElement) {\n previousElement.after(newElement);\n return [];\n }\n }, {\n key: 'removeElement',\n value: function removeElement(wrapper) {\n wrapper.element.remove();\n wrapper.scope.$destroy();\n return [];\n }\n }, {\n key: 'insertElementAnimated',\n value: function insertElementAnimated(newElement, previousElement) {\n if (!this.$animate) {\n return this.insertElement(newElement, previousElement);\n }\n\n if (this.isAngularVersionLessThen1_3) {\n var deferred = this.$q.defer();\n // no need for parent - previous element is never null\n this.$animate.enter(newElement, null, previousElement, function () {\n return deferred.resolve();\n });\n\n return [deferred.promise];\n }\n\n // no need for parent - previous element is never null\n return [this.$animate.enter(newElement, null, previousElement)];\n }\n }, {\n key: 'removeElementAnimated',\n value: function removeElementAnimated(wrapper) {\n if (!this.$animate) {\n return this.removeElement(wrapper);\n }\n\n if (this.isAngularVersionLessThen1_3) {\n var deferred = this.$q.defer();\n this.$animate.leave(wrapper.element, function () {\n wrapper.scope.$destroy();\n return deferred.resolve();\n });\n\n return [deferred.promise];\n }\n\n return [this.$animate.leave(wrapper.element).then(function () {\n return wrapper.scope.$destroy();\n })];\n }\n }]);\n\n return ElementRoutines;\n}();\n\nexports.default = ElementRoutines;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = ScrollBuffer;\nfunction ScrollBuffer(elementRoutines, bufferSize, startIndex) {\n var buffer = Object.create(Array.prototype);\n\n Object.assign(buffer, {\n size: bufferSize,\n\n reset: function reset(startIndex) {\n buffer.remove(0, buffer.length);\n buffer.eof = false;\n buffer.bof = false;\n buffer.first = startIndex;\n buffer.next = startIndex;\n buffer.minIndex = startIndex;\n buffer.maxIndex = startIndex;\n buffer.minIndexUser = null;\n buffer.maxIndexUser = null;\n },\n append: function append(items) {\n items.forEach(function (item) {\n ++buffer.next;\n buffer.insert('append', item);\n });\n buffer.maxIndex = buffer.eof ? buffer.next - 1 : Math.max(buffer.next - 1, buffer.maxIndex);\n },\n prepend: function prepend(items) {\n items.reverse().forEach(function (item) {\n --buffer.first;\n buffer.insert('prepend', item);\n });\n buffer.minIndex = buffer.bof ? buffer.minIndex = buffer.first : Math.min(buffer.first, buffer.minIndex);\n },\n\n\n /**\r\n * inserts wrapped element in the buffer\r\n * the first argument is either operation keyword (see below) or a number for operation 'insert'\r\n * for insert the number is the index for the buffer element the new one have to be inserted after\r\n * operations: 'append', 'prepend', 'insert', 'remove', 'update', 'none'\r\n */\n insert: function insert(operation, item, isTop) {\n var wrapper = {\n item: item\n };\n\n if (operation % 1 === 0) {\n // it is an insert\n wrapper.op = 'insert';\n buffer.splice(operation, 0, wrapper);\n if (isTop) {\n buffer.first--;\n } else {\n buffer.next++;\n }\n } else {\n wrapper.op = operation;\n switch (operation) {\n case 'append':\n buffer.push(wrapper);\n break;\n case 'prepend':\n buffer.unshift(wrapper);\n break;\n }\n }\n },\n\n\n // removes elements from buffer\n remove: function remove(arg1, arg2) {\n if (Number.isInteger(arg1)) {\n // removes items from arg1 (including) through arg2 (excluding)\n for (var i = arg1; i < arg2; i++) {\n elementRoutines.removeElement(buffer[i]);\n }\n return buffer.splice(arg1, arg2 - arg1);\n }\n // removes single item(wrapper) from the buffer\n buffer.splice(buffer.indexOf(arg1), 1);\n if (arg1._op === 'isTop' && buffer.first === this.getAbsMinIndex()) {\n this.incrementMinIndex();\n } else {\n this.decrementMaxIndex();\n }\n if (arg1._op === 'isTop') {\n buffer.first++;\n } else {\n buffer.next--;\n }\n if (!buffer.length) {\n buffer.first = 1;\n buffer.next = 1;\n }\n\n return elementRoutines.removeElementAnimated(arg1);\n },\n incrementMinIndex: function incrementMinIndex() {\n if (buffer.minIndexUser !== null) {\n if (buffer.minIndex > buffer.minIndexUser) {\n buffer.minIndexUser++;\n return;\n }\n if (buffer.minIndex === buffer.minIndexUser) {\n buffer.minIndexUser++;\n }\n }\n buffer.minIndex++;\n },\n decrementMaxIndex: function decrementMaxIndex() {\n if (buffer.maxIndexUser !== null && buffer.maxIndex <= buffer.maxIndexUser) {\n buffer.maxIndexUser--;\n }\n buffer.maxIndex--;\n },\n getAbsMinIndex: function getAbsMinIndex() {\n if (buffer.minIndexUser !== null) {\n return Math.min(buffer.minIndexUser, buffer.minIndex);\n }\n return buffer.minIndex;\n },\n getAbsMaxIndex: function getAbsMaxIndex() {\n if (buffer.maxIndexUser !== null) {\n return Math.max(buffer.maxIndexUser, buffer.maxIndex);\n }\n return buffer.maxIndex;\n },\n effectiveHeight: function effectiveHeight(elements) {\n if (!elements.length) {\n return 0;\n }\n var top = Number.MAX_VALUE;\n var bottom = Number.NEGATIVE_INFINITY;\n elements.forEach(function (wrapper) {\n if (wrapper.element[0].offsetParent) {\n // element style is not display:none\n top = Math.min(top, wrapper.element.offset().top);\n bottom = Math.max(bottom, wrapper.element.offset().top + wrapper.element.outerHeight(true));\n }\n });\n return Math.max(0, bottom - top);\n }\n });\n\n buffer.reset(startIndex);\n\n return buffer;\n}\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = Viewport;\n\nvar _padding = __webpack_require__(5);\n\nvar _padding2 = _interopRequireDefault(_padding);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding) {\n var topPadding = null;\n var bottomPadding = null;\n var viewport = viewportController && viewportController.viewport ? viewportController.viewport : angular.element(window);\n var container = viewportController && viewportController.container ? viewportController.container : undefined;\n var scope = viewportController && viewportController.scope ? viewportController.scope : $rootScope;\n\n viewport.css({\n 'overflow-anchor': 'none',\n 'overflow-y': 'auto',\n 'display': 'block'\n });\n\n function bufferPadding() {\n return viewport.outerHeight() * padding; // some extra space to initiate preload\n }\n\n Object.assign(viewport, {\n getScope: function getScope() {\n return scope;\n },\n createPaddingElements: function createPaddingElements(template) {\n topPadding = new _padding2.default(template);\n bottomPadding = new _padding2.default(template);\n element.before(topPadding.element);\n element.after(bottomPadding.element);\n topPadding.height(0);\n bottomPadding.height(0);\n },\n applyContainerStyle: function applyContainerStyle() {\n if (!container) {\n return true;\n }\n if (container !== viewport) {\n viewport.css('height', window.getComputedStyle(container[0]).height);\n }\n return viewport.height() > 0;\n },\n bottomDataPos: function bottomDataPos() {\n var scrollHeight = viewport[0].scrollHeight;\n scrollHeight = scrollHeight != null ? scrollHeight : viewport[0].document.documentElement.scrollHeight;\n return scrollHeight - bottomPadding.height();\n },\n topDataPos: function topDataPos() {\n return topPadding.height();\n },\n bottomVisiblePos: function bottomVisiblePos() {\n return viewport.scrollTop() + viewport.outerHeight();\n },\n topVisiblePos: function topVisiblePos() {\n return viewport.scrollTop();\n },\n insertElement: function insertElement(e, sibling) {\n return elementRoutines.insertElement(e, sibling || topPadding.element);\n },\n insertElementAnimated: function insertElementAnimated(e, sibling) {\n return elementRoutines.insertElementAnimated(e, sibling || topPadding.element);\n },\n shouldLoadBottom: function shouldLoadBottom() {\n return !buffer.eof && viewport.bottomDataPos() < viewport.bottomVisiblePos() + bufferPadding();\n },\n clipBottom: function clipBottom() {\n // clip the invisible items off the bottom\n var overage = 0;\n var overageHeight = 0;\n var itemHeight = 0;\n var emptySpaceHeight = viewport.bottomDataPos() - viewport.bottomVisiblePos() - bufferPadding();\n\n for (var i = buffer.length - 1; i >= 0; i--) {\n itemHeight = buffer[i].element.outerHeight(true);\n if (overageHeight + itemHeight > emptySpaceHeight) {\n break;\n }\n bottomPadding.cache.add(buffer[i]);\n overageHeight += itemHeight;\n overage++;\n }\n\n if (overage > 0) {\n buffer.eof = false;\n buffer.remove(buffer.length - overage, buffer.length);\n buffer.next -= overage;\n viewport.adjustPaddings();\n }\n },\n shouldLoadTop: function shouldLoadTop() {\n return !buffer.bof && viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding();\n },\n clipTop: function clipTop() {\n // clip the invisible items off the top\n var overage = 0;\n var overageHeight = 0;\n var itemHeight = 0;\n var emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\n\n for (var i = 0; i < buffer.length; i++) {\n itemHeight = buffer[i].element.outerHeight(true);\n if (overageHeight + itemHeight > emptySpaceHeight) {\n break;\n }\n topPadding.cache.add(buffer[i]);\n overageHeight += itemHeight;\n overage++;\n }\n\n if (overage > 0) {\n // we need to adjust top padding element before items are removed from top\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\n topPadding.height(topPadding.height() + overageHeight);\n buffer.bof = false;\n buffer.remove(0, overage);\n buffer.first += overage;\n }\n },\n adjustPaddings: function adjustPaddings() {\n if (!buffer.length) {\n return;\n }\n\n // precise heights calculation based on items that are in buffer or that were in buffer once\n var visibleItemsHeight = buffer.reduce(function (summ, item) {\n return summ + item.element.outerHeight(true);\n }, 0);\n\n var topPaddingHeight = 0,\n topCount = 0;\n topPadding.cache.forEach(function (item) {\n if (item.index < buffer.first) {\n topPaddingHeight += item.height;\n topCount++;\n }\n });\n\n var bottomPaddingHeight = 0,\n bottomCount = 0;\n bottomPadding.cache.forEach(function (item) {\n if (item.index >= buffer.next) {\n bottomPaddingHeight += item.height;\n bottomCount++;\n }\n });\n\n var totalHeight = visibleItemsHeight + topPaddingHeight + bottomPaddingHeight;\n var averageItemHeight = totalHeight / (topCount + bottomCount + buffer.length);\n\n // average heights calculation, items that have never been reached\n var adjustTopPadding = buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser;\n var adjustBottomPadding = buffer.maxIndexUser !== null && buffer.maxIndex < buffer.maxIndexUser;\n var topPaddingHeightAdd = adjustTopPadding ? (buffer.minIndex - buffer.minIndexUser) * averageItemHeight : 0;\n var bottomPaddingHeightAdd = adjustBottomPadding ? (buffer.maxIndexUser - buffer.maxIndex) * averageItemHeight : 0;\n\n // paddings combine adjustment\n topPadding.height(topPaddingHeight + topPaddingHeightAdd);\n bottomPadding.height(bottomPaddingHeight + bottomPaddingHeightAdd);\n },\n onAfterMinIndexSet: function onAfterMinIndexSet(topPaddingHeightOld) {\n // additional scrollTop adjustment in case of datasource.minIndex external set\n if (buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser) {\n var diff = topPadding.height() - topPaddingHeightOld;\n viewport.scrollTop(viewport.scrollTop() + diff);\n while ((diff -= viewport.scrollTop()) > 0) {\n bottomPadding.height(bottomPadding.height() + diff);\n viewport.scrollTop(viewport.scrollTop() + diff);\n }\n }\n },\n onAfterPrepend: function onAfterPrepend(updates) {\n if (!updates.prepended.length) return;\n var height = buffer.effectiveHeight(updates.prepended);\n var paddingHeight = topPadding.height() - height;\n if (paddingHeight >= 0) {\n topPadding.height(paddingHeight);\n } else {\n topPadding.height(0);\n viewport.scrollTop(viewport.scrollTop() - paddingHeight);\n }\n },\n resetTopPadding: function resetTopPadding() {\n topPadding.height(0);\n topPadding.cache.clear();\n },\n resetBottomPadding: function resetBottomPadding() {\n bottomPadding.height(0);\n bottomPadding.cache.clear();\n },\n removeCacheItem: function removeCacheItem(item, isTop) {\n topPadding.cache.remove(item, isTop);\n bottomPadding.cache.remove(item, isTop);\n },\n removeItem: function removeItem(item) {\n this.removeCacheItem(item);\n return buffer.remove(item);\n }\n });\n\n return viewport;\n}\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// Can't just extend the Array, due to Babel does not support built-in classes extending\n// This solution was taken from https://stackoverflow.com/questions/46897414/es6-class-extends-array-workaround-for-es5-babel-transpile\nvar CacheProto = function () {\n function CacheProto() {\n _classCallCheck(this, CacheProto);\n }\n\n _createClass(CacheProto, [{\n key: 'add',\n value: function add(item) {\n for (var i = this.length - 1; i >= 0; i--) {\n if (this[i].index === item.scope.$index) {\n this[i].height = item.element.outerHeight();\n return;\n }\n }\n this.push({\n index: item.scope.$index,\n height: item.element.outerHeight()\n });\n this.sort(function (a, b) {\n return a.index < b.index ? -1 : a.index > b.index ? 1 : 0;\n });\n }\n }, {\n key: 'remove',\n value: function remove(argument, _isTop) {\n var index = argument % 1 === 0 ? argument : argument.scope.$index;\n var isTop = argument % 1 === 0 ? _isTop : argument._op === 'isTop';\n for (var i = this.length - 1; i >= 0; i--) {\n if (this[i].index === index) {\n this.splice(i, 1);\n break;\n }\n }\n if (!isTop) {\n for (var _i = this.length - 1; _i >= 0; _i--) {\n if (this[_i].index > index) {\n this[_i].index--;\n }\n }\n }\n }\n }, {\n key: 'clear',\n value: function clear() {\n this.length = 0;\n }\n }]);\n\n return CacheProto;\n}();\n\nfunction Cache() {\n var instance = [];\n instance.push.apply(instance, arguments);\n Object.setPrototypeOf(instance, Cache.prototype);\n return instance;\n}\nCache.prototype = Object.create(Array.prototype);\nObject.getOwnPropertyNames(CacheProto.prototype).forEach(function (methodName) {\n return Cache.prototype[methodName] = CacheProto.prototype[methodName];\n});\n\nfunction generateElement(template) {\n if (template.nodeType !== Node.ELEMENT_NODE) {\n throw new Error('ui-scroll directive requires an Element node for templating the view');\n }\n var element = void 0;\n switch (template.tagName.toLowerCase()) {\n case 'dl':\n throw new Error('ui-scroll directive does not support <' + template.tagName + '> as a repeating tag: ' + template.outerHTML);\n case 'tr':\n var table = angular.element('
    ');\n element = table.find('tr');\n break;\n case 'li':\n element = angular.element('
  • ');\n break;\n default:\n element = angular.element('
    ');\n }\n return element;\n}\n\nvar Padding = function () {\n function Padding(template) {\n _classCallCheck(this, Padding);\n\n this.element = generateElement(template);\n this.cache = new Cache();\n }\n\n _createClass(Padding, [{\n key: 'height',\n value: function height() {\n return this.element.height.apply(this.element, arguments);\n }\n }]);\n\n return Padding;\n}();\n\nexports.default = Padding;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Adapter = function () {\n function Adapter($scope, $parse, $attr, viewport, buffer, doAdjust, reload) {\n _classCallCheck(this, Adapter);\n\n this.$parse = $parse;\n this.$attr = $attr;\n this.viewport = viewport;\n this.buffer = buffer;\n\n this.doAdjust = doAdjust;\n this.reload = reload;\n\n this.isLoading = false;\n this.disabled = false;\n\n var viewportScope = viewport.getScope();\n this.startScope = viewportScope.$parent ? viewportScope : $scope;\n\n this.publicContext = {};\n this.assignAdapter($attr.adapter);\n this.generatePublicContext();\n }\n\n _createClass(Adapter, [{\n key: 'assignAdapter',\n value: function assignAdapter(adapterAttr) {\n if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\\s+|\\s+$/gm, ''))) {\n return;\n }\n var adapterOnScope = void 0;\n\n try {\n this.$parse(adapterAttr).assign(this.startScope, {});\n adapterOnScope = this.$parse(adapterAttr)(this.startScope);\n } catch (error) {\n error.message = 'Angular ui-scroll Adapter assignment exception.\\n' + ('Can\\'t parse \"' + adapterAttr + '\" expression.\\n') + error.message;\n throw error;\n }\n\n Object.assign(adapterOnScope, this.publicContext);\n this.publicContext = adapterOnScope;\n }\n }, {\n key: 'generatePublicContext',\n value: function generatePublicContext() {\n var _this = this;\n\n // these methods will be accessible out of ui-scroll via user defined adapter\n var publicMethods = ['reload', 'applyUpdates', 'append', 'prepend', 'isBOF', 'isEOF', 'isEmpty'];\n for (var i = publicMethods.length - 1; i >= 0; i--) {\n this.publicContext[publicMethods[i]] = this[publicMethods[i]].bind(this);\n }\n\n // these read-only props will be accessible out of ui-scroll via user defined adapter\n var publicProps = ['isLoading', 'topVisible', 'topVisibleElement', 'topVisibleScope', 'bottomVisible', 'bottomVisibleElement', 'bottomVisibleScope'];\n\n var _loop = function _loop(_i) {\n var property = void 0,\n attr = _this.$attr[publicProps[_i]];\n Object.defineProperty(_this, publicProps[_i], {\n get: function get() {\n return property;\n },\n set: function set(value) {\n property = value;\n _this.publicContext[publicProps[_i]] = value;\n if (attr) {\n _this.$parse(attr).assign(_this.startScope, value);\n }\n }\n });\n };\n\n for (var _i = publicProps.length - 1; _i >= 0; _i--) {\n _loop(_i);\n }\n\n // non-read-only public property\n Object.defineProperty(this.publicContext, 'disabled', {\n get: function get() {\n return _this.disabled;\n },\n set: function set(value) {\n return !(_this.disabled = value) ? _this.doAdjust() : null;\n }\n });\n }\n }, {\n key: 'loading',\n value: function loading(value) {\n this.isLoading = value;\n }\n }, {\n key: 'isBOF',\n value: function isBOF() {\n return this.buffer.bof;\n }\n }, {\n key: 'isEOF',\n value: function isEOF() {\n return this.buffer.eof;\n }\n }, {\n key: 'isEmpty',\n value: function isEmpty() {\n return !this.buffer.length;\n }\n }, {\n key: 'append',\n value: function append(newItems) {\n this.buffer.append(newItems);\n this.doAdjust();\n this.viewport.clipTop();\n this.viewport.clipBottom();\n }\n }, {\n key: 'prepend',\n value: function prepend(newItems) {\n this.buffer.prepend(newItems);\n this.doAdjust();\n this.viewport.clipTop();\n this.viewport.clipBottom();\n }\n }, {\n key: 'applyUpdates',\n value: function applyUpdates(arg1, arg2) {\n if (typeof arg1 === 'function') {\n this.applyUpdatesFunc(arg1);\n } else {\n this.applyUpdatesIndex(arg1, arg2);\n }\n this.doAdjust();\n }\n }, {\n key: 'applyUpdatesFunc',\n value: function applyUpdatesFunc(cb) {\n var _this2 = this;\n\n this.buffer.slice(0).forEach(function (wrapper) {\n // we need to do it on the buffer clone, because buffer content\n // may change as we iterate through\n _this2.applyUpdate(wrapper, cb(wrapper.item, wrapper.scope, wrapper.element));\n });\n }\n }, {\n key: 'applyUpdatesIndex',\n value: function applyUpdatesIndex(index, newItems) {\n if (index % 1 !== 0) {\n throw new Error('applyUpdates - ' + index + ' is not a valid index (should be an integer)');\n }\n var _index = index - this.buffer.first;\n\n // apply updates only within buffer\n if (_index >= 0 && _index < this.buffer.length) {\n this.applyUpdate(this.buffer[_index], newItems);\n }\n // out-of-buffer case: deletion may affect Paddings\n else if (index >= this.buffer.getAbsMinIndex() && index <= this.buffer.getAbsMaxIndex()) {\n if (Array.isArray(newItems) && !newItems.length) {\n this.viewport.removeCacheItem(index, index === this.buffer.minIndex);\n if (index === this.buffer.getAbsMinIndex()) {\n this.buffer.incrementMinIndex();\n } else {\n this.buffer.decrementMaxIndex();\n }\n }\n }\n }\n }, {\n key: 'applyUpdate',\n value: function applyUpdate(wrapper, newItems) {\n var _this3 = this;\n\n if (!Array.isArray(newItems)) {\n return;\n }\n var position = this.buffer.indexOf(wrapper);\n if (!newItems.reverse().some(function (newItem) {\n return newItem === wrapper.item;\n })) {\n wrapper.op = 'remove';\n if (position === 0 && !newItems.length) {\n wrapper._op = 'isTop'; // to catch \"first\" edge case on remove\n }\n }\n newItems.forEach(function (newItem) {\n if (newItem === wrapper.item) {\n position--;\n } else {\n // 3 parameter (isTop) is to catch \"first\" edge case on insert\n _this3.buffer.insert(position + 1, newItem, position === -1);\n }\n });\n }\n }, {\n key: 'calculateProperties',\n value: function calculateProperties() {\n var rowTop = null,\n topHeight = 0;\n var topDone = false,\n bottomDone = false;\n var length = this.buffer.length;\n\n for (var i = 0; i < length; i++) {\n var item = this.buffer[i];\n var itemTop = item.element.offset().top;\n\n if (rowTop !== itemTop) {\n // a new row condition\n var itemHeight = item.element.outerHeight(true);\n var top = this.viewport.topDataPos() + topHeight + itemHeight;\n\n if (!topDone && top > this.viewport.topVisiblePos()) {\n topDone = true;\n this['topVisible'] = item.item;\n this['topVisibleElement'] = item.element;\n this['topVisibleScope'] = item.scope;\n }\n if (!bottomDone && (top >= this.viewport.bottomVisiblePos() || i === length - 1 && this.isEOF())) {\n bottomDone = true;\n this['bottomVisible'] = item.item;\n this['bottomVisibleElement'] = item.element;\n this['bottomVisibleScope'] = item.scope;\n }\n topHeight += itemHeight;\n }\n rowTop = itemTop;\n\n if (topDone && bottomDone) {\n break;\n }\n }\n }\n }]);\n\n return Adapter;\n}();\n\nexports.default = Adapter;\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// ui-scroll.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 36a3010ad66560b7fc51","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 '$interval',\n '$q',\n '$parse',\n function (console, $injector, $rootScope, $timeout, $interval, $q, $parse) {\n\n return {\n require: ['?^uiScrollViewport'],\n restrict: 'A',\n transclude: 'element',\n priority: 1000,\n terminal: true,\n link: link\n };\n\n function link($scope, element, $attr, controllers, linker) {\n const match = $attr.uiScroll.match(/^\\s*(\\w+)\\s+in\\s+([(\\w|\\$)\\.]+)\\s*$/);\n if (!match) {\n throw new Error('Expected uiScroll in form of \\'_item_ in _datasource_\\' but got \\'' + $attr.uiScroll + '\\'');\n }\n\n function parseNumericAttr(value, defaultValue) {\n const result = $parse(value)($scope);\n return isNaN(result) ? defaultValue : result;\n }\n\n const BUFFER_MIN = 3;\n const BUFFER_DEFAULT = 10;\n const PADDING_MIN = 0.3;\n const PADDING_DEFAULT = 0.5;\n const MAX_VIEWPORT_DELAY = 500;\n const VIEWPORT_POLLING_INTERVAL = 50;\n\n let datasource = null;\n const itemName = match[1];\n const datasourceName = match[2];\n const viewportController = controllers[0];\n const bufferSize = Math.max(BUFFER_MIN, parseNumericAttr($attr.bufferSize, BUFFER_DEFAULT));\n const padding = Math.max(PADDING_MIN, parseNumericAttr($attr.padding, PADDING_DEFAULT));\n let startIndex = parseNumericAttr($attr.startIndex, 1);\n let ridActual = 0; // current data revision id\n let pending = [];\n\n const elementRoutines = new ElementRoutines($injector, $q);\n const buffer = new ScrollBuffer(elementRoutines, bufferSize, startIndex);\n const viewport = new Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding);\n const adapter = new Adapter($scope, $parse, $attr, viewport, buffer, doAdjust, reload);\n\n if (viewportController) {\n viewportController.adapter = adapter;\n }\n\n const isDatasourceValid = () =>\n Object.prototype.toString.call(datasource) === '[object Object]' && typeof datasource.get === 'function';\n\n datasource = $parse(datasourceName)($scope); // try to get datasource on scope\n if (!isDatasourceValid()) {\n datasource = $injector.get(datasourceName); // try to inject datasource as service\n if (!isDatasourceValid()) {\n throw new Error(datasourceName + ' is not a valid datasource');\n }\n }\n\n let onRenderHandlers = [];\n function onRenderHandlersRunner() {\n onRenderHandlers.forEach(handler => handler.run());\n onRenderHandlers = [];\n }\n function persistDatasourceIndex(datasource, propName) {\n let getter;\n // need to postpone min/maxIndexUser processing if the view is empty\n if(Number.isInteger(datasource[propName])) {\n getter = datasource[propName];\n if(Number.isInteger(getter)) {\n onRenderHandlers = onRenderHandlers.filter(handler => handler.id !== propName);\n onRenderHandlers.push({\n id: propName,\n run: () => datasource[propName] = getter\n });\n }\n }\n }\n\n function defineDatasourceIndex(datasource, propName, propUserName) {\n const descriptor = Object.getOwnPropertyDescriptor(datasource, propName);\n if (descriptor && (descriptor.set || descriptor.get)) {\n return;\n }\n let getter;\n persistDatasourceIndex(datasource, propName);\n Object.defineProperty(datasource, propName, {\n set: (value) => {\n getter = value;\n if(pending.length && !buffer.length) {\n persistDatasourceIndex(datasource, propName);\n return;\n }\n buffer[propUserName] = value;\n const topPaddingHeightOld = viewport.topDataPos();\n viewport.adjustPaddings();\n if (propName === 'minIndex') {\n viewport.onAfterMinIndexSet(topPaddingHeightOld);\n }\n },\n get: () => getter\n });\n }\n\n defineDatasourceIndex(datasource, 'minIndex', 'minIndexUser');\n defineDatasourceIndex(datasource, 'maxIndex', 'maxIndexUser');\n\n const fetchNext = (datasource.get.length !== 2) ?\n (success) => datasource.get(buffer.next, bufferSize, success) :\n (success) => {\n datasource.get({\n index: buffer.next,\n append: buffer.length ? buffer[buffer.length - 1].item : void 0,\n count: bufferSize\n }, success);\n };\n\n const fetchPrevious = (datasource.get.length !== 2) ?\n (success) => datasource.get(buffer.first - bufferSize, bufferSize, success) :\n (success) => {\n datasource.get({\n index: buffer.first - bufferSize,\n prepend: buffer.length ? buffer[0].item : void 0,\n count: bufferSize\n }, success);\n };\n\n const initialize = () => {\n let tryCount = 0;\n if(!viewport.applyContainerStyle()) {\n const timer = $interval(() => {\n tryCount++;\n if(viewport.applyContainerStyle()) {\n $interval.cancel(timer);\n doAdjust();\n }\n if(tryCount * VIEWPORT_POLLING_INTERVAL >= MAX_VIEWPORT_DELAY) {\n $interval.cancel(timer);\n throw Error(`ui-scroll directive requires a viewport with non-zero height in ${MAX_VIEWPORT_DELAY}ms`);\n }\n }, VIEWPORT_POLLING_INTERVAL);\n }\n else {\n doAdjust();\n }\n };\n\n /**\n * Build padding elements\n *\n * Calling linker is the only way I found to get access to the tag name of the template\n * to prevent the directive scope from pollution a new scope is created and destroyed\n * right after the builder creation is completed\n */\n linker((clone, scope) => {\n viewport.createPaddingElements(clone[0]);\n // we do not include the clone in the DOM. It means that the nested directives will not\n // be able to reach the parent directives, but in this case it is intentional because we\n // created the clone to access the template tag name\n scope.$destroy();\n clone.remove();\n });\n\n $scope.$on('$destroy', () => {\n unbindEvents();\n viewport.unbind('mousewheel', wheelHandler);\n });\n\n viewport.bind('mousewheel', wheelHandler);\n\n initialize();\n\n /* Private function definitions */\n\n function isInvalid(rid) {\n return (rid && rid !== ridActual) || $scope.$$destroyed;\n }\n\n function bindEvents() {\n viewport.bind('resize', resizeAndScrollHandler);\n viewport.bind('scroll', resizeAndScrollHandler);\n }\n\n function unbindEvents() {\n viewport.unbind('resize', resizeAndScrollHandler);\n viewport.unbind('scroll', resizeAndScrollHandler);\n }\n\n function reload() {\n viewport.resetTopPadding();\n viewport.resetBottomPadding();\n if (arguments.length) {\n startIndex = arguments[0];\n }\n buffer.reset(startIndex);\n persistDatasourceIndex(datasource, 'minIndex');\n persistDatasourceIndex(datasource, 'maxIndex');\n doAdjust();\n }\n\n function isElementVisible(wrapper) {\n return wrapper.element.height() && wrapper.element[0].offsetParent;\n }\n\n function visibilityWatcher(wrapper) {\n if (isElementVisible(wrapper)) {\n buffer.forEach((item) => {\n if (typeof item.unregisterVisibilityWatcher === 'function') {\n item.unregisterVisibilityWatcher();\n delete item.unregisterVisibilityWatcher;\n }\n });\n if (!pending.length) {\n $timeout(() => doAdjust());\n }\n }\n }\n\n function insertWrapperContent(wrapper, insertAfter) {\n createElement(wrapper, insertAfter, viewport.insertElement);\n if (!isElementVisible(wrapper)) {\n wrapper.unregisterVisibilityWatcher = wrapper.scope.$watch(() => visibilityWatcher(wrapper));\n }\n elementRoutines.hideElement(wrapper); // hide inserted elements before data binding\n }\n\n function createElement(wrapper, insertAfter, insertElement) {\n let promises = null;\n const sibling = (insertAfter > 0) ? buffer[insertAfter - 1].element : undefined;\n linker((clone, scope) => {\n promises = insertElement(clone, sibling);\n wrapper.element = clone;\n wrapper.scope = scope;\n scope[itemName] = wrapper.item;\n });\n // ui-scroll-grid apply\n if (adapter.transform) {\n const tdInitializer = wrapper.scope.uiScrollTdInitializer;\n if (tdInitializer && tdInitializer.linking) {\n adapter.transform(wrapper.scope, wrapper.element);\n } else {\n wrapper.scope.uiScrollTdInitializer = {\n onLink: () => adapter.transform(wrapper.scope, wrapper.element),\n scope: wrapper.scope\n };\n }\n }\n return promises;\n }\n\n function updateDOM() {\n let promises = [];\n const toBePrepended = [];\n const toBeRemoved = [];\n const inserted = [];\n\n buffer.forEach((wrapper, i) => {\n switch (wrapper.op) {\n case 'prepend':\n toBePrepended.unshift(wrapper);\n break;\n case 'append':\n insertWrapperContent(wrapper, i);\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'insert':\n promises = promises.concat(createElement(wrapper, i, viewport.insertElementAnimated));\n wrapper.op = 'none';\n inserted.push(wrapper);\n break;\n case 'remove':\n toBeRemoved.push(wrapper);\n }\n });\n\n toBeRemoved.forEach((wrapper) => promises = promises.concat(viewport.removeItem(wrapper)));\n\n if (toBePrepended.length)\n toBePrepended.forEach((wrapper) => {\n insertWrapperContent(wrapper);\n wrapper.op = 'none';\n });\n\n buffer.forEach((item, i) => item.scope.$index = buffer.first + i);\n\n return {\n prepended: toBePrepended,\n removed: toBeRemoved,\n inserted: inserted,\n animated: promises\n };\n\n }\n\n function updatePaddings(rid, updates) {\n // schedule another doAdjust after animation completion\n if (updates.animated.length) {\n $q.all(updates.animated).then(() => {\n viewport.adjustPaddings();\n doAdjust(rid);\n });\n } else {\n viewport.adjustPaddings();\n }\n }\n\n function enqueueFetch(rid, updates) {\n if (viewport.shouldLoadBottom()) {\n if (!updates || buffer.effectiveHeight(updates.inserted) > 0) {\n // this means that at least one item appended in the last batch has height > 0\n if (pending.push(true) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n } else if (viewport.shouldLoadTop()) {\n if ((!updates || buffer.effectiveHeight(updates.prepended) > 0) || pending[0]) {\n // this means that at least one item appended in the last batch has height > 0\n // pending[0] = true means that previous fetch was appending. We need to force at least one prepend\n // BTW there will always be at least 1 element in the pending array because bottom is fetched first\n if (pending.push(false) === 1) {\n adapter.loading(true);\n fetch(rid);\n }\n }\n }\n }\n\n function processUpdates() {\n const updates = updateDOM();\n\n // We need the item bindings to be processed before we can do adjustments\n !$scope.$$phase && !$rootScope.$$phase && $scope.$digest();\n\n updates.inserted.forEach(w => elementRoutines.showElement(w));\n updates.prepended.forEach(w => elementRoutines.showElement(w));\n return updates;\n }\n\n function doAdjust(rid) {\n if (!rid) { // dismiss pending requests\n pending = [];\n rid = ++ridActual;\n }\n\n const updates = processUpdates();\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n enqueueFetch(rid);\n\n if (!pending.length) {\n adapter.calculateProperties();\n }\n }\n\n function doAdjustAfterFetch(rid) {\n const updates = processUpdates();\n\n viewport.onAfterPrepend(updates);\n\n if (isInvalid(rid)) {\n return;\n }\n\n updatePaddings(rid, updates);\n onRenderHandlersRunner();\n enqueueFetch(rid, updates);\n pending.shift();\n\n if (pending.length)\n fetch(rid);\n else {\n adapter.loading(false);\n bindEvents();\n adapter.calculateProperties();\n }\n }\n\n function fetch(rid) {\n if (pending[0]) {// scrolling down\n if (buffer.length && !viewport.shouldLoadBottom()) {\n doAdjustAfterFetch(rid);\n } else {\n fetchNext((result) => {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.eof = true;\n }\n\n if (result.length > 0) {\n viewport.clipTop();\n buffer.append(result);\n }\n\n doAdjustAfterFetch(rid);\n });\n }\n } else { // scrolling up\n if (buffer.length && !viewport.shouldLoadTop()) {\n doAdjustAfterFetch(rid);\n } else {\n fetchPrevious((result) => {\n if (isInvalid(rid)) {\n return;\n }\n\n if (result.length < bufferSize) {\n buffer.bof = true;\n // log 'bof is reached'\n }\n\n if (result.length > 0) {\n if (buffer.length) {\n viewport.clipBottom();\n }\n buffer.prepend(result);\n }\n\n doAdjustAfterFetch(rid);\n });\n }\n }\n }\n\n function resizeAndScrollHandler() {\n if (!$rootScope.$$phase && !adapter.isLoading && !adapter.disabled) {\n\n enqueueFetch(ridActual);\n\n if (pending.length) {\n unbindEvents();\n } else {\n adapter.calculateProperties();\n !$scope.$$phase && $scope.$digest();\n }\n }\n }\n\n function wheelHandler(event) {\n if (!adapter.disabled) {\n const scrollTop = viewport[0].scrollTop;\n const yMax = viewport[0].scrollHeight - viewport[0].clientHeight;\n\n if ((scrollTop === 0 && !buffer.bof) || (scrollTop === yMax && !buffer.eof)) {\n event.preventDefault();\n }\n }\n }\n }\n\n }\n ]);\n\n\n// WEBPACK FOOTER //\n// ./src/ui-scroll.js","/*!\r\n globals: angular, window\r\n List of used element methods available in JQuery but not in JQuery Lite\r\n element.before(elem)\r\n element.height()\r\n element.outerHeight(true)\r\n element.height(value) = only for Top/Bottom padding elements\r\n element.scrollTop()\r\n element.scrollTop(value)\r\n */\r\n\r\nexport default class JQLiteExtras {\r\n\r\n registerFor(element) {\r\n let convertToPx, css, getStyle, isWindow;\r\n // angular implementation blows up if elem is the window\r\n css = angular.element.prototype.css;\r\n\r\n element.prototype.css = function (name, value) {\r\n let self = this;\r\n let elem = self[0];\r\n if (!(!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style)) {\r\n return css.call(self, name, value);\r\n }\r\n };\r\n\r\n // as defined in angularjs v1.0.5\r\n isWindow = (obj) => obj && obj.document && obj.location && obj.alert && obj.setInterval;\r\n\r\n function scrollTo(self, direction, value) {\r\n let elem = self[0];\r\n let [method, prop, preserve] = {\r\n top: [\r\n 'scrollTop',\r\n 'pageYOffset',\r\n 'scrollLeft'\r\n ],\r\n left: [\r\n 'scrollLeft',\r\n 'pageXOffset',\r\n 'scrollTop'\r\n ]\r\n }[direction];\r\n\r\n const isValueDefined = typeof value !== 'undefined';\r\n if (isWindow(elem)) {\r\n if (isValueDefined) {\r\n return elem.scrollTo(self[preserve].call(self), value);\r\n }\r\n return (prop in elem) ? elem[prop] : elem.document.documentElement[method];\r\n } else {\r\n if (isValueDefined) {\r\n elem[method] = value;\r\n }\r\n return elem[method];\r\n }\r\n }\r\n\r\n if (window.getComputedStyle) {\r\n getStyle = (elem) => window.getComputedStyle(elem, null);\r\n convertToPx = (elem, value) => parseFloat(value);\r\n } else {\r\n getStyle = (elem) => elem.currentStyle;\r\n convertToPx = (elem, value) => {\r\n let left, result, rs, rsLeft, style;\r\n let core_pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\r\n let rnumnonpx = new RegExp('^(' + core_pnum + ')(?!px)[a-z%]+$', 'i');\r\n\r\n if (!rnumnonpx.test(value)) {\r\n return parseFloat(value);\r\n }\r\n\r\n // ported from JQuery\r\n style = elem.style;\r\n left = style.left;\r\n rs = elem.runtimeStyle;\r\n rsLeft = rs && rs.left;\r\n if (rs) {\r\n rs.left = style.left;\r\n }\r\n // put in the new values to get a computed style out\r\n style.left = value;\r\n result = style.pixelLeft;\r\n style.left = left;\r\n if (rsLeft) {\r\n rs.left = rsLeft;\r\n }\r\n return result;\r\n };\r\n }\r\n\r\n function getMeasurements(elem, measure) {\r\n let base, borderA, borderB, computedMarginA, computedMarginB, computedStyle, dirA, dirB, marginA, marginB, paddingA, paddingB;\r\n\r\n if (isWindow(elem)) {\r\n base = document.documentElement[{height: 'clientHeight', width: 'clientWidth'}[measure]];\r\n\r\n return {\r\n base: base,\r\n padding: 0,\r\n border: 0,\r\n margin: 0\r\n };\r\n }\r\n\r\n // Start with offset property\r\n [\r\n base,\r\n dirA,\r\n dirB\r\n ] = {\r\n width: [\r\n elem.offsetWidth,\r\n 'Left',\r\n 'Right'\r\n ],\r\n height: [\r\n elem.offsetHeight,\r\n 'Top',\r\n 'Bottom'\r\n ]\r\n }[measure];\r\n\r\n computedStyle = getStyle(elem);\r\n paddingA = convertToPx(elem, computedStyle['padding' + dirA]) || 0;\r\n paddingB = convertToPx(elem, computedStyle['padding' + dirB]) || 0;\r\n borderA = convertToPx(elem, computedStyle['border' + dirA + 'Width']) || 0;\r\n borderB = convertToPx(elem, computedStyle['border' + dirB + 'Width']) || 0;\r\n computedMarginA = computedStyle['margin' + dirA];\r\n computedMarginB = computedStyle['margin' + dirB];\r\n\r\n // I do not care for width for now, so this hack is irrelevant\r\n // if ( !supportsPercentMargin )\r\n // computedMarginA = hackPercentMargin( elem, computedStyle, computedMarginA )\r\n // computedMarginB = hackPercentMargin( elem, computedStyle, computedMarginB )\r\n marginA = convertToPx(elem, computedMarginA) || 0;\r\n marginB = convertToPx(elem, computedMarginB) || 0;\r\n\r\n return {\r\n base: base,\r\n padding: paddingA + paddingB,\r\n border: borderA + borderB,\r\n margin: marginA + marginB\r\n };\r\n }\r\n\r\n function getWidthHeight(elem, direction, measure) {\r\n let computedStyle, result;\r\n\r\n let measurements = getMeasurements(elem, direction);\r\n\r\n if (measurements.base > 0) {\r\n return {\r\n base: measurements.base - measurements.padding - measurements.border,\r\n outer: measurements.base,\r\n outerfull: measurements.base + measurements.margin\r\n }[measure];\r\n }\r\n\r\n // Fall back to computed then uncomputed css if necessary\r\n computedStyle = getStyle(elem);\r\n result = computedStyle[direction];\r\n\r\n if (result < 0 || result === null) {\r\n result = elem.style[direction] || 0;\r\n }\r\n\r\n // Normalize \"\", auto, and prepare for extra\r\n result = parseFloat(result) || 0;\r\n\r\n return {\r\n base: result - measurements.padding - measurements.border,\r\n outer: result,\r\n outerfull: result + measurements.padding + measurements.border + measurements.margin\r\n }[measure];\r\n }\r\n\r\n // define missing methods\r\n return angular.forEach({\r\n before(newElem) {\r\n var children, elem, i, j, parent, ref, self;\r\n self = this;\r\n elem = self[0];\r\n parent = self.parent();\r\n children = parent.contents();\r\n if (children[0] === elem) {\r\n return parent.prepend(newElem);\r\n } else {\r\n for (i = j = 1, ref = children.length - 1; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {\r\n if (children[i] === elem) {\r\n angular.element(children[i - 1]).after(newElem);\r\n return;\r\n }\r\n }\r\n throw new Error('invalid DOM structure ' + elem.outerHTML);\r\n }\r\n },\r\n height (value){\r\n var self;\r\n self = this;\r\n if (typeof value !== 'undefined') {\r\n if (Number.isInteger(value)) {\r\n value = value + 'px';\r\n }\r\n return css.call(self, 'height', value);\r\n } else {\r\n return getWidthHeight(this[0], 'height', 'base');\r\n }\r\n },\r\n outerHeight(option) {\r\n return getWidthHeight(this[0], 'height', option ? 'outerfull' : 'outer');\r\n },\r\n outerWidth(option) {\r\n return getWidthHeight(this[0], 'width', option ? 'outerfull' : 'outer');\r\n },\r\n\r\n /*\r\n The offset setter method is not implemented\r\n */\r\n offset(value) {\r\n let docElem, win;\r\n let self = this;\r\n let box = {\r\n top: 0,\r\n left: 0\r\n };\r\n let elem = self[0];\r\n let doc = elem && elem.ownerDocument;\r\n\r\n if (arguments.length) {\r\n if (value === undefined) {\r\n return self;\r\n }\r\n // TODO: implement setter\r\n throw new Error('offset setter method is not implemented');\r\n }\r\n\r\n if (!doc) {\r\n return;\r\n }\r\n\r\n docElem = doc.documentElement;\r\n\r\n // TODO: Make sure it's not a disconnected DOM node\r\n\r\n if (elem.getBoundingClientRect != null) {\r\n box = elem.getBoundingClientRect();\r\n }\r\n\r\n win = doc.defaultView || doc.parentWindow;\r\n\r\n return {\r\n top: box.top + (win.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),\r\n left: box.left + (win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0)\r\n };\r\n },\r\n scrollTop(value) {\r\n return scrollTo(this, 'top', value);\r\n },\r\n scrollLeft(value) {\r\n return scrollTo(this, 'left', value);\r\n }\r\n }, (value, key) => {\r\n if (!element.prototype[key]) {\r\n return element.prototype[key] = value;\r\n }\r\n });\r\n }\r\n\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/jqLiteExtras.js","const hideClassToken = 'ng-ui-scroll-hide';\r\n\r\nfunction addCSSRule(sheet, selector, rules, index) {\r\n if('insertRule' in sheet) {\r\n sheet.insertRule(selector + '{' + rules + '}', index);\r\n }\r\n else if('addRule' in sheet) {\r\n sheet.addRule(selector, rules, index);\r\n }\r\n}\r\n\r\nexport default class ElementRoutines {\r\n\r\n constructor($injector, $q) {\r\n this.$animate = ($injector.has && $injector.has('$animate')) ? $injector.get('$animate') : null;\r\n this.isAngularVersionLessThen1_3 = angular.version.major === 1 && angular.version.minor < 3;\r\n this.$q = $q;\r\n addCSSRule(document.styleSheets[0], '.' + hideClassToken, 'display: none');\r\n }\r\n\r\n hideElement(wrapper) {\r\n wrapper.element.addClass(hideClassToken);\r\n }\r\n\r\n showElement(wrapper) {\r\n wrapper.element.removeClass(hideClassToken);\r\n }\r\n\r\n insertElement(newElement, previousElement) {\r\n previousElement.after(newElement);\r\n return [];\r\n }\r\n\r\n removeElement(wrapper) {\r\n wrapper.element.remove();\r\n wrapper.scope.$destroy();\r\n return [];\r\n }\r\n\r\n insertElementAnimated(newElement, previousElement) {\r\n if (!this.$animate) {\r\n return this.insertElement(newElement, previousElement);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n // no need for parent - previous element is never null\r\n this.$animate.enter(newElement, null, previousElement, () => deferred.resolve());\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n // no need for parent - previous element is never null\r\n return [this.$animate.enter(newElement, null, previousElement)];\r\n }\r\n\r\n removeElementAnimated(wrapper) {\r\n if (!this.$animate) {\r\n return this.removeElement(wrapper);\r\n }\r\n\r\n if (this.isAngularVersionLessThen1_3) {\r\n const deferred = this.$q.defer();\r\n this.$animate.leave(wrapper.element, () => {\r\n wrapper.scope.$destroy();\r\n return deferred.resolve();\r\n });\r\n\r\n return [deferred.promise];\r\n }\r\n\r\n return [(this.$animate.leave(wrapper.element)).then(() => wrapper.scope.$destroy())];\r\n }\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/elementRoutines.js","export default function ScrollBuffer(elementRoutines, bufferSize, startIndex) {\r\n const buffer = Object.create(Array.prototype);\r\n\r\n Object.assign(buffer, {\r\n size: bufferSize,\r\n\r\n reset(startIndex) {\r\n buffer.remove(0, buffer.length);\r\n buffer.eof = false;\r\n buffer.bof = false;\r\n buffer.first = startIndex;\r\n buffer.next = startIndex;\r\n buffer.minIndex = startIndex;\r\n buffer.maxIndex = startIndex;\r\n buffer.minIndexUser = null;\r\n buffer.maxIndexUser = null;\r\n },\r\n\r\n append(items) {\r\n items.forEach((item) => {\r\n ++buffer.next;\r\n buffer.insert('append', item);\r\n });\r\n buffer.maxIndex = buffer.eof ? buffer.next - 1 : Math.max(buffer.next - 1, buffer.maxIndex);\r\n },\r\n\r\n prepend(items) {\r\n items.reverse().forEach((item) => {\r\n --buffer.first;\r\n buffer.insert('prepend', item);\r\n });\r\n buffer.minIndex = buffer.bof ? buffer.minIndex = buffer.first : Math.min(buffer.first, buffer.minIndex);\r\n },\r\n\r\n /**\r\n * inserts wrapped element in the buffer\r\n * the first argument is either operation keyword (see below) or a number for operation 'insert'\r\n * for insert the number is the index for the buffer element the new one have to be inserted after\r\n * operations: 'append', 'prepend', 'insert', 'remove', 'update', 'none'\r\n */\r\n insert(operation, item, isTop) {\r\n const wrapper = {\r\n item: item\r\n };\r\n\r\n if (operation % 1 === 0) {// it is an insert\r\n wrapper.op = 'insert';\r\n buffer.splice(operation, 0, wrapper);\r\n if(isTop) {\r\n buffer.first--;\r\n }\r\n else {\r\n buffer.next++;\r\n }\r\n } else {\r\n wrapper.op = operation;\r\n switch (operation) {\r\n case 'append':\r\n buffer.push(wrapper);\r\n break;\r\n case 'prepend':\r\n buffer.unshift(wrapper);\r\n break;\r\n }\r\n }\r\n },\r\n\r\n // removes elements from buffer\r\n remove(arg1, arg2) {\r\n if (Number.isInteger(arg1)) {\r\n // removes items from arg1 (including) through arg2 (excluding)\r\n for (let i = arg1; i < arg2; i++) {\r\n elementRoutines.removeElement(buffer[i]);\r\n }\r\n return buffer.splice(arg1, arg2 - arg1);\r\n }\r\n // removes single item(wrapper) from the buffer\r\n buffer.splice(buffer.indexOf(arg1), 1);\r\n if(arg1._op === 'isTop' && buffer.first === this.getAbsMinIndex()) {\r\n this.incrementMinIndex();\r\n }\r\n else {\r\n this.decrementMaxIndex();\r\n }\r\n if(arg1._op === 'isTop') {\r\n buffer.first++;\r\n }\r\n else {\r\n buffer.next--;\r\n }\r\n if(!buffer.length) {\r\n buffer.first = 1;\r\n buffer.next = 1;\r\n }\r\n\r\n return elementRoutines.removeElementAnimated(arg1);\r\n },\r\n\r\n incrementMinIndex() {\r\n if(buffer.minIndexUser !== null) {\r\n if(buffer.minIndex > buffer.minIndexUser) {\r\n buffer.minIndexUser++;\r\n return;\r\n }\r\n if(buffer.minIndex === buffer.minIndexUser) {\r\n buffer.minIndexUser++;\r\n }\r\n }\r\n buffer.minIndex++;\r\n },\r\n\r\n decrementMaxIndex() {\r\n if(buffer.maxIndexUser !== null && buffer.maxIndex <= buffer.maxIndexUser) {\r\n buffer.maxIndexUser--;\r\n }\r\n buffer.maxIndex--;\r\n },\r\n\r\n getAbsMinIndex() {\r\n if(buffer.minIndexUser !== null) {\r\n return Math.min(buffer.minIndexUser, buffer.minIndex);\r\n }\r\n return buffer.minIndex;\r\n },\r\n\r\n getAbsMaxIndex() {\r\n if(buffer.maxIndexUser !== null) {\r\n return Math.max(buffer.maxIndexUser, buffer.maxIndex);\r\n }\r\n return buffer.maxIndex;\r\n },\r\n\r\n effectiveHeight(elements) {\r\n if (!elements.length) {\r\n return 0;\r\n }\r\n let top = Number.MAX_VALUE;\r\n let bottom = Number.NEGATIVE_INFINITY;\r\n elements.forEach((wrapper) => {\r\n if (wrapper.element[0].offsetParent) {\r\n // element style is not display:none\r\n top = Math.min(top, wrapper.element.offset().top);\r\n bottom = Math.max(bottom, wrapper.element.offset().top + wrapper.element.outerHeight(true));\r\n }\r\n });\r\n return Math.max(0, bottom - top);\r\n }\r\n\r\n });\r\n\r\n buffer.reset(startIndex);\r\n\r\n return buffer;\r\n}\n\n\n// WEBPACK FOOTER //\n// ./src/modules/buffer.js","import Padding from './padding';\r\n\r\nexport default function Viewport(elementRoutines, buffer, element, viewportController, $rootScope, padding) {\r\n let topPadding = null;\r\n let bottomPadding = null;\r\n const viewport = viewportController && viewportController.viewport ? viewportController.viewport : angular.element(window);\r\n const container = viewportController && viewportController.container ? viewportController.container : undefined;\r\n const scope = viewportController && viewportController.scope ? viewportController.scope : $rootScope;\r\n\r\n viewport.css({\r\n 'overflow-anchor': 'none',\r\n 'overflow-y': 'auto',\r\n 'display': 'block'\r\n });\r\n\r\n function bufferPadding() {\r\n return viewport.outerHeight() * padding; // some extra space to initiate preload\r\n }\r\n\r\n Object.assign(viewport, {\r\n getScope() {\r\n return scope;\r\n },\r\n\r\n createPaddingElements(template) {\r\n topPadding = new Padding(template);\r\n bottomPadding = new Padding(template);\r\n element.before(topPadding.element);\r\n element.after(bottomPadding.element);\r\n topPadding.height(0);\r\n bottomPadding.height(0);\r\n },\r\n\r\n applyContainerStyle() {\r\n if (!container) {\r\n return true;\r\n }\r\n if(container !== viewport) {\r\n viewport.css('height', window.getComputedStyle(container[0]).height);\r\n }\r\n return viewport.height() > 0;\r\n },\r\n\r\n bottomDataPos() {\r\n let scrollHeight = viewport[0].scrollHeight;\r\n scrollHeight = scrollHeight != null ? scrollHeight : viewport[0].document.documentElement.scrollHeight;\r\n return scrollHeight - bottomPadding.height();\r\n },\r\n\r\n topDataPos() {\r\n return topPadding.height();\r\n },\r\n\r\n bottomVisiblePos() {\r\n return viewport.scrollTop() + viewport.outerHeight();\r\n },\r\n\r\n topVisiblePos() {\r\n return viewport.scrollTop();\r\n },\r\n\r\n insertElement(e, sibling) {\r\n return elementRoutines.insertElement(e, sibling || topPadding.element);\r\n },\r\n\r\n insertElementAnimated(e, sibling) {\r\n return elementRoutines.insertElementAnimated(e, sibling || topPadding.element);\r\n },\r\n\r\n shouldLoadBottom() {\r\n return !buffer.eof && viewport.bottomDataPos() < viewport.bottomVisiblePos() + bufferPadding();\r\n },\r\n\r\n clipBottom() {\r\n // clip the invisible items off the bottom\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.bottomDataPos() - viewport.bottomVisiblePos() - bufferPadding();\r\n\r\n for (let i = buffer.length - 1; i >= 0; i--) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n bottomPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n buffer.eof = false;\r\n buffer.remove(buffer.length - overage, buffer.length);\r\n buffer.next -= overage;\r\n viewport.adjustPaddings();\r\n }\r\n },\r\n\r\n shouldLoadTop() {\r\n return !buffer.bof && (viewport.topDataPos() > viewport.topVisiblePos() - bufferPadding());\r\n },\r\n\r\n clipTop() {\r\n // clip the invisible items off the top\r\n let overage = 0;\r\n let overageHeight = 0;\r\n let itemHeight = 0;\r\n let emptySpaceHeight = viewport.topVisiblePos() - viewport.topDataPos() - bufferPadding();\r\n\r\n for (let i = 0; i < buffer.length; i++) {\r\n itemHeight = buffer[i].element.outerHeight(true);\r\n if (overageHeight + itemHeight > emptySpaceHeight) {\r\n break;\r\n }\r\n topPadding.cache.add(buffer[i]);\r\n overageHeight += itemHeight;\r\n overage++;\r\n }\r\n\r\n if (overage > 0) {\r\n // we need to adjust top padding element before items are removed from top\r\n // to avoid strange behaviour of scroll bar during remove top items when we are at the very bottom\r\n topPadding.height(topPadding.height() + overageHeight);\r\n buffer.bof = false;\r\n buffer.remove(0, overage);\r\n buffer.first += overage;\r\n }\r\n },\r\n\r\n adjustPaddings() {\r\n if (!buffer.length) {\r\n return;\r\n }\r\n\r\n // precise heights calculation based on items that are in buffer or that were in buffer once\r\n const visibleItemsHeight = buffer.reduce((summ, item) => summ + item.element.outerHeight(true), 0);\r\n\r\n let topPaddingHeight = 0, topCount = 0;\r\n topPadding.cache.forEach(item => {\r\n if(item.index < buffer.first) {\r\n topPaddingHeight += item.height;\r\n topCount++;\r\n }\r\n });\r\n\r\n let bottomPaddingHeight = 0, bottomCount = 0;\r\n bottomPadding.cache.forEach(item => {\r\n if(item.index >= buffer.next) {\r\n bottomPaddingHeight += item.height;\r\n bottomCount++;\r\n }\r\n });\r\n\r\n const totalHeight = visibleItemsHeight + topPaddingHeight + bottomPaddingHeight;\r\n const averageItemHeight = totalHeight / (topCount + bottomCount + buffer.length);\r\n\r\n // average heights calculation, items that have never been reached\r\n let adjustTopPadding = buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser;\r\n let adjustBottomPadding = buffer.maxIndexUser !== null && buffer.maxIndex < buffer.maxIndexUser;\r\n let topPaddingHeightAdd = adjustTopPadding ? (buffer.minIndex - buffer.minIndexUser) * averageItemHeight : 0;\r\n let bottomPaddingHeightAdd = adjustBottomPadding ? (buffer.maxIndexUser - buffer.maxIndex) * averageItemHeight : 0;\r\n\r\n // paddings combine adjustment\r\n topPadding.height(topPaddingHeight + topPaddingHeightAdd);\r\n bottomPadding.height(bottomPaddingHeight + bottomPaddingHeightAdd);\r\n },\r\n\r\n onAfterMinIndexSet(topPaddingHeightOld) {\r\n // additional scrollTop adjustment in case of datasource.minIndex external set\r\n if (buffer.minIndexUser !== null && buffer.minIndex > buffer.minIndexUser) {\r\n let diff = topPadding.height() - topPaddingHeightOld;\r\n viewport.scrollTop(viewport.scrollTop() + diff);\r\n while((diff -= viewport.scrollTop()) > 0) {\r\n bottomPadding.height(bottomPadding.height() + diff);\r\n viewport.scrollTop(viewport.scrollTop() + diff);\r\n }\r\n }\r\n },\r\n\r\n onAfterPrepend(updates) {\r\n if (!updates.prepended.length)\r\n return;\r\n const height = buffer.effectiveHeight(updates.prepended);\r\n const paddingHeight = topPadding.height() - height;\r\n if (paddingHeight >= 0) {\r\n topPadding.height(paddingHeight);\r\n }\r\n else {\r\n topPadding.height(0);\r\n viewport.scrollTop(viewport.scrollTop() - paddingHeight);\r\n }\r\n },\r\n\r\n resetTopPadding() {\r\n topPadding.height(0);\r\n topPadding.cache.clear();\r\n },\r\n\r\n resetBottomPadding() {\r\n bottomPadding.height(0);\r\n bottomPadding.cache.clear();\r\n },\r\n\r\n removeCacheItem(item, isTop) {\r\n topPadding.cache.remove(item, isTop);\r\n bottomPadding.cache.remove(item, isTop);\r\n },\r\n\r\n removeItem(item) {\r\n this.removeCacheItem(item);\r\n return buffer.remove(item);\r\n }\r\n });\r\n\r\n return viewport;\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/modules/viewport.js","// Can't just extend the Array, due to Babel does not support built-in classes extending\r\n// This solution was taken from https://stackoverflow.com/questions/46897414/es6-class-extends-array-workaround-for-es5-babel-transpile\r\nclass CacheProto {\r\n add(item) {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index === item.scope.$index) {\r\n this[i].height = item.element.outerHeight();\r\n return;\r\n }\r\n }\r\n this.push({\r\n index: item.scope.$index,\r\n height: item.element.outerHeight()\r\n });\r\n this.sort((a, b) => ((a.index < b.index) ? -1 : ((a.index > b.index) ? 1 : 0)));\r\n }\r\n\r\n remove(argument, _isTop) {\r\n const index = argument % 1 === 0 ? argument : argument.scope.$index;\r\n const isTop = argument % 1 === 0 ? _isTop : argument._op === 'isTop';\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index === index) {\r\n this.splice(i, 1);\r\n break;\r\n }\r\n }\r\n if(!isTop) {\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (this[i].index > index) {\r\n this[i].index--;\r\n }\r\n }\r\n }\r\n }\r\n\r\n clear() {\r\n this.length = 0;\r\n }\r\n}\r\n\r\nfunction Cache() {\r\n const instance = [];\r\n instance.push.apply(instance, arguments);\r\n Object.setPrototypeOf(instance, Cache.prototype);\r\n return instance;\r\n}\r\nCache.prototype = Object.create(Array.prototype);\r\nObject.getOwnPropertyNames(CacheProto.prototype).forEach(methodName =>\r\n Cache.prototype[methodName] = CacheProto.prototype[methodName]\r\n);\r\n\r\nfunction generateElement(template) {\r\n if(template.nodeType !== Node.ELEMENT_NODE) {\r\n throw new Error('ui-scroll directive requires an Element node for templating the view');\r\n }\r\n let element;\r\n switch (template.tagName.toLowerCase()) {\r\n case 'dl':\r\n throw new Error(`ui-scroll directive does not support <${template.tagName}> as a repeating tag: ${template.outerHTML}`);\r\n case 'tr':\r\n let table = angular.element('
    ');\r\n element = table.find('tr');\r\n break;\r\n case 'li':\r\n element = angular.element('
  • ');\r\n break;\r\n default:\r\n element = angular.element('
    ');\r\n }\r\n return element;\r\n}\r\n\r\nclass Padding {\r\n constructor(template) {\r\n this.element = generateElement(template);\r\n this.cache = new Cache();\r\n }\r\n\r\n height() {\r\n return this.element.height.apply(this.element, arguments);\r\n }\r\n}\r\n\r\nexport default Padding;\n\n\n// WEBPACK FOOTER //\n// ./src/modules/padding.js","class Adapter {\r\n\r\n constructor($scope, $parse, $attr, viewport, buffer, doAdjust, reload) {\r\n this.$parse = $parse;\r\n this.$attr = $attr;\r\n this.viewport = viewport;\r\n this.buffer = buffer;\r\n\r\n this.doAdjust = doAdjust;\r\n this.reload = reload;\r\n\r\n this.isLoading = false;\r\n this.disabled = false;\r\n\r\n const viewportScope = viewport.getScope();\r\n this.startScope = viewportScope.$parent ? viewportScope : $scope;\r\n\r\n this.publicContext = {};\r\n this.assignAdapter($attr.adapter);\r\n this.generatePublicContext();\r\n }\r\n\r\n assignAdapter(adapterAttr) {\r\n if (!adapterAttr || !(adapterAttr = adapterAttr.replace(/^\\s+|\\s+$/gm, ''))) {\r\n return;\r\n }\r\n let adapterOnScope;\r\n\r\n try {\r\n this.$parse(adapterAttr).assign(this.startScope, {});\r\n adapterOnScope = this.$parse(adapterAttr)(this.startScope);\r\n }\r\n catch (error) {\r\n error.message = `Angular ui-scroll Adapter assignment exception.\\n` +\r\n `Can't parse \"${adapterAttr}\" expression.\\n` +\r\n error.message;\r\n throw error;\r\n }\r\n\r\n Object.assign(adapterOnScope, this.publicContext);\r\n this.publicContext = adapterOnScope;\r\n }\r\n\r\n generatePublicContext() {\r\n // these methods will be accessible out of ui-scroll via user defined adapter\r\n const publicMethods = ['reload', 'applyUpdates', 'append', 'prepend', 'isBOF', 'isEOF', 'isEmpty'];\r\n for (let i = publicMethods.length - 1; i >= 0; i--) {\r\n this.publicContext[publicMethods[i]] = this[publicMethods[i]].bind(this);\r\n }\r\n\r\n // these read-only props will be accessible out of ui-scroll via user defined adapter\r\n const publicProps = ['isLoading', 'topVisible', 'topVisibleElement', 'topVisibleScope', 'bottomVisible', 'bottomVisibleElement', 'bottomVisibleScope'];\r\n for (let i = publicProps.length - 1; i >= 0; i--) {\r\n let property, attr = this.$attr[publicProps[i]];\r\n Object.defineProperty(this, publicProps[i], {\r\n get: () => property,\r\n set: (value) => {\r\n property = value;\r\n this.publicContext[publicProps[i]] = value;\r\n if (attr) {\r\n this.$parse(attr).assign(this.startScope, value);\r\n }\r\n }\r\n });\r\n }\r\n\r\n // non-read-only public property\r\n Object.defineProperty(this.publicContext, 'disabled', {\r\n get: () => this.disabled,\r\n set: (value) => (!(this.disabled = value)) ? this.doAdjust() : null\r\n });\r\n }\r\n\r\n loading(value) {\r\n this.isLoading = value;\r\n }\r\n\r\n isBOF() {\r\n return this.buffer.bof;\r\n }\r\n\r\n isEOF() {\r\n return this.buffer.eof;\r\n }\r\n\r\n isEmpty() {\r\n return !this.buffer.length;\r\n }\r\n\r\n append(newItems) {\r\n this.buffer.append(newItems);\r\n this.doAdjust();\r\n this.viewport.clipTop();\r\n this.viewport.clipBottom();\r\n }\r\n\r\n prepend(newItems) {\r\n this.buffer.prepend(newItems);\r\n this.doAdjust();\r\n this.viewport.clipTop();\r\n this.viewport.clipBottom();\r\n }\r\n\r\n applyUpdates(arg1, arg2) {\r\n if (typeof arg1 === 'function') {\r\n this.applyUpdatesFunc(arg1);\r\n } else {\r\n this.applyUpdatesIndex(arg1, arg2);\r\n }\r\n this.doAdjust();\r\n }\r\n\r\n applyUpdatesFunc(cb) {\r\n this.buffer.slice(0).forEach((wrapper) => {\r\n // we need to do it on the buffer clone, because buffer content\r\n // may change as we iterate through\r\n this.applyUpdate(wrapper, cb(wrapper.item, wrapper.scope, wrapper.element));\r\n });\r\n }\r\n\r\n applyUpdatesIndex(index, newItems) {\r\n if (index % 1 !== 0) {\r\n throw new Error('applyUpdates - ' + index + ' is not a valid index (should be an integer)');\r\n }\r\n const _index = index - this.buffer.first;\r\n\r\n // apply updates only within buffer\r\n if (_index >= 0 && _index < this.buffer.length) {\r\n this.applyUpdate(this.buffer[_index], newItems);\r\n }\r\n // out-of-buffer case: deletion may affect Paddings\r\n else if(index >= this.buffer.getAbsMinIndex() && index <= this.buffer.getAbsMaxIndex()) {\r\n if(Array.isArray(newItems) && !newItems.length) {\r\n this.viewport.removeCacheItem(index, index === this.buffer.minIndex);\r\n if(index === this.buffer.getAbsMinIndex()) {\r\n this.buffer.incrementMinIndex();\r\n }\r\n else {\r\n this.buffer.decrementMaxIndex();\r\n }\r\n }\r\n }\r\n }\r\n\r\n applyUpdate(wrapper, newItems) {\r\n if (!Array.isArray(newItems)) {\r\n return;\r\n }\r\n let position = this.buffer.indexOf(wrapper);\r\n if (!newItems.reverse().some(newItem => newItem === wrapper.item)) {\r\n wrapper.op = 'remove';\r\n if(position === 0 && !newItems.length) {\r\n wrapper._op = 'isTop'; // to catch \"first\" edge case on remove\r\n }\r\n }\r\n newItems.forEach((newItem) => {\r\n if (newItem === wrapper.item) {\r\n position--;\r\n } else {\r\n // 3 parameter (isTop) is to catch \"first\" edge case on insert\r\n this.buffer.insert(position + 1, newItem, position === -1);\r\n }\r\n });\r\n }\r\n\r\n calculateProperties() {\r\n let rowTop = null, topHeight = 0;\r\n let topDone = false, bottomDone = false;\r\n const length = this.buffer.length;\r\n\r\n for (let i = 0; i < length; i++) {\r\n const item = this.buffer[i];\r\n const itemTop = item.element.offset().top;\r\n\r\n if (rowTop !== itemTop) { // a new row condition\r\n const itemHeight = item.element.outerHeight(true);\r\n const top = this.viewport.topDataPos() + topHeight + itemHeight;\r\n\r\n if (!topDone && top > this.viewport.topVisiblePos()) {\r\n topDone = true;\r\n this['topVisible'] = item.item;\r\n this['topVisibleElement'] = item.element;\r\n this['topVisibleScope'] = item.scope;\r\n }\r\n if (!bottomDone && (top >= this.viewport.bottomVisiblePos() || (i === length - 1 && this.isEOF()))) {\r\n bottomDone = true;\r\n this['bottomVisible'] = item.item;\r\n this['bottomVisibleElement'] = item.element;\r\n this['bottomVisibleScope'] = item.scope;\r\n }\r\n topHeight += itemHeight;\r\n }\r\n rowTop = itemTop;\r\n\r\n if (topDone && bottomDone) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n}\r\n\r\nexport default Adapter;\n\n\n// WEBPACK FOOTER //\n// ./src/modules/adapter.js"],"sourceRoot":""} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 1cea8dd1..e37e12a3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,29 +1,18 @@ { "name": "angular-ui-scroll", - "version": "1.7.0-rc.2", + "version": "1.7.0-rc.6", "lockfileVersion": 1, - "requires": true, "dependencies": { - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, "accepts": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", - "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", - "dev": true, - "requires": { - "mime-types": "2.1.17", - "negotiator": "0.6.1" - } + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "dev": true }, "acorn": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.2.tgz", - "integrity": "sha512-o96FZLJBPY1lvTuJylGA9Bk3t/GKPPJG8H0ydQQl01crzwJgspa4AEIq/pVTXigmK0PHVQhiAtn8WMBLL9D2WA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz", + "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==", "dev": true }, "acorn-dynamic-import": { @@ -31,9 +20,6 @@ "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", "dev": true, - "requires": { - "acorn": "4.0.13" - }, "dependencies": { "acorn": { "version": "4.0.13", @@ -50,31 +36,28 @@ "dev": true }, "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.4.0.tgz", + "integrity": "sha1-MtHPCNvIDEMvQm8S4QslEfa0ZHQ=", + "dev": true }, "ajv-keywords": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", "dev": true }, "align-text": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, - "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" - } + "dev": true + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true }, "ansi-regex": { "version": "2.1.1", @@ -92,29 +75,13 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dev": true, - "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" - } - }, - "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true, - "requires": { - "sprintf-js": "1.0.3" - } + "dev": true }, "arr-diff": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "1.1.0" - } + "dev": true }, "arr-flatten": { "version": "1.1.0", @@ -122,6 +89,12 @@ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "dev": true }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", + "dev": true + }, "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", @@ -129,9 +102,27 @@ "dev": true }, "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz", + "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=", + "dev": true + }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "dev": true + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", + "dev": true + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", "dev": true }, "array-slice": { @@ -140,6 +131,18 @@ "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", "dev": true }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, "array-unique": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", @@ -153,29 +156,21 @@ "dev": true }, "asn1.js": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.1.tgz", - "integrity": "sha1-SLokC0WpKA6UdImQull9IWYX/UA=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" - } + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz", + "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==", + "dev": true }, "assert": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dev": true, - "requires": { - "util": "0.10.3" - } + "dev": true }, "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", "dev": true }, "async-each": { @@ -188,539 +183,319 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - } + "dev": true }, "babel-core": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.0", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.5.0", - "debug": "2.6.9", - "json5": "0.5.1", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.8", - "slash": "1.0.0", - "source-map": "0.5.7" - } + "dev": true }, "babel-generator": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", - "dev": true, - "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.4", - "source-map": "0.5.7", - "trim-right": "1.0.1" - } + "dev": true + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "dev": true }, "babel-helper-call-delegate": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } + "dev": true }, "babel-helper-define-map": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" - } + "dev": true + }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true }, "babel-helper-function-name": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true, - "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } + "dev": true }, "babel-helper-get-function-arity": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } + "dev": true }, "babel-helper-hoist-variables": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } + "dev": true }, "babel-helper-optimise-call-expression": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } + "dev": true }, "babel-helper-regex": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" - } + "dev": true + }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "dev": true }, "babel-helper-replace-supers": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "dev": true, - "requires": { - "babel-helper-optimise-call-expression": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } + "dev": true }, "babel-helpers": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } + "dev": true }, "babel-loader": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-6.4.1.tgz", - "integrity": "sha1-CzQRLVsHSKjc2/Uaz2+b1C1QuMo=", - "dev": true, - "requires": { - "find-cache-dir": "0.1.1", - "loader-utils": "0.2.17", - "mkdirp": "0.5.1", - "object-assign": "4.1.1" - } + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.2.tgz", + "integrity": "sha512-jRwlFbINAeyDStqK6Dd5YuY0k5YuzQUvlz2ZamuXrXmxav3pNqe9vfJ402+2G+OmlJSXxCOpB6Uz0INM7RQe2A==", + "dev": true }, "babel-messages": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } + "dev": true }, "babel-plugin-check-es2015-constants": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } + "dev": true + }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", + "dev": true + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", + "dev": true + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "dev": true }, "babel-plugin-transform-es2015-arrow-functions": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } + "dev": true }, "babel-plugin-transform-es2015-block-scoped-functions": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } + "dev": true }, "babel-plugin-transform-es2015-block-scoping": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" - } + "dev": true }, "babel-plugin-transform-es2015-classes": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "dev": true, - "requires": { - "babel-helper-define-map": "6.26.0", - "babel-helper-function-name": "6.24.1", - "babel-helper-optimise-call-expression": "6.24.1", - "babel-helper-replace-supers": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } + "dev": true }, "babel-plugin-transform-es2015-computed-properties": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } + "dev": true }, "babel-plugin-transform-es2015-destructuring": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } + "dev": true }, "babel-plugin-transform-es2015-duplicate-keys": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } + "dev": true }, "babel-plugin-transform-es2015-for-of": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } + "dev": true }, "babel-plugin-transform-es2015-function-name": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } + "dev": true }, "babel-plugin-transform-es2015-literals": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } + "dev": true }, "babel-plugin-transform-es2015-modules-amd": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } + "dev": true }, "babel-plugin-transform-es2015-modules-commonjs": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", - "dev": true, - "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" - } + "dev": true }, "babel-plugin-transform-es2015-modules-systemjs": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } + "dev": true }, "babel-plugin-transform-es2015-modules-umd": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } + "dev": true }, "babel-plugin-transform-es2015-object-super": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "dev": true, - "requires": { - "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.26.0" - } + "dev": true }, "babel-plugin-transform-es2015-parameters": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "dev": true, - "requires": { - "babel-helper-call-delegate": "6.24.1", - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } + "dev": true }, "babel-plugin-transform-es2015-shorthand-properties": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } + "dev": true }, "babel-plugin-transform-es2015-spread": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } + "dev": true }, "babel-plugin-transform-es2015-sticky-regex": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "dev": true, - "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } + "dev": true }, "babel-plugin-transform-es2015-template-literals": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } + "dev": true }, "babel-plugin-transform-es2015-typeof-symbol": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } + "dev": true }, "babel-plugin-transform-es2015-unicode-regex": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "dev": true, - "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "regexpu-core": "2.0.0" - } + "dev": true + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "dev": true }, "babel-plugin-transform-regenerator": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", - "dev": true, - "requires": { - "regenerator-transform": "0.10.1" - } + "dev": true }, "babel-plugin-transform-strict-mode": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } + "dev": true }, - "babel-preset-es2015": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", - "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", - "dev": true, - "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-regenerator": "6.26.0" - } + "babel-preset-env": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz", + "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==", + "dev": true }, "babel-register": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true, - "requires": { - "babel-core": "6.26.0", - "babel-runtime": "6.26.0", - "core-js": "2.5.1", - "home-or-tmp": "2.0.0", - "lodash": "4.17.4", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18" - } + "dev": true }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "2.5.1", - "regenerator-runtime": "0.11.0" - } + "dev": true }, "babel-template": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.4" - } + "dev": true }, "babel-traverse": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" - } + "dev": true }, "babel-types": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" - } + "dev": true }, "babylon": { "version": "6.18.0", @@ -758,15 +533,6 @@ "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", "dev": true }, - "basic-auth": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.0.tgz", - "integrity": "sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, "batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", @@ -777,10 +543,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dev": true, - "requires": { - "callsite": "1.0.0" - } + "dev": true }, "big.js": { "version": "3.2.0", @@ -789,9 +552,9 @@ "dev": true }, "binary-extensions": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz", - "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", "dev": true }, "blob": { @@ -816,40 +579,25 @@ "version": "1.18.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", - "dev": true, - "requires": { - "bytes": "3.0.0", - "content-type": "1.0.4", - "debug": "2.6.9", - "depd": "1.1.1", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "on-finished": "2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "1.6.15" - } + "dev": true + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true }, "brace-expansion": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true, - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } + "dev": true }, "braces": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" - } + "dev": true }, "brorand": { "version": "1.1.0", @@ -861,82 +609,49 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", - "dev": true, - "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } + "dev": true }, "browserify-cipher": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", - "dev": true, - "requires": { - "browserify-aes": "1.1.1", - "browserify-des": "1.0.0", - "evp_bytestokey": "1.0.3" - } + "dev": true }, "browserify-des": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", - "dev": true, - "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3" - } + "dev": true }, "browserify-rsa": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.5" - } + "dev": true }, "browserify-sign": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "elliptic": "6.4.0", - "inherits": "2.0.3", - "parse-asn1": "5.1.0" - } + "dev": true }, "browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", - "dev": true, - "requires": { - "pako": "0.2.9" - } + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true + }, + "browserslist": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.9.0.tgz", + "integrity": "sha512-vJEBcDTANoDhSHL46NeOEW5hvQw7It9uCqzeFPQhpawXfnOwnpvW5C97vn1eGJ7iCkSg8wWU0nYObE7d/N95Iw==", + "dev": true }, "buffer": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, - "requires": { - "base64-js": "1.2.1", - "ieee754": "1.1.8", - "isarray": "1.0.0" - }, "dependencies": { "isarray": { "version": "1.0.0", @@ -946,6 +661,12 @@ } } }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", @@ -977,9 +698,9 @@ "dev": true }, "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", "dev": true }, "camelcase-keys": { @@ -987,89 +708,76 @@ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, - "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + } } }, + "caniuse-lite": { + "version": "1.0.30000766", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000766.tgz", + "integrity": "sha1-iglcxeuZI8JwCM5NDbI+ZaPiiEM=", + "dev": true + }, "center-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" - } + "dev": true }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } + "dev": true }, "chokidar": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", "dev": true, - "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true + } } }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } + "dev": true }, "clean-webpack-plugin": { "version": "0.1.17", "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-0.1.17.tgz", "integrity": "sha512-Bts/V725v8Ijosp4K1cqppQXgXcrohxoMsg0CV2xL4y/vua1G5pAfHEW/eJIiKF+GNNG72mdjbipxMRFEms7yg==", - "dev": true, - "requires": { - "rimraf": "2.6.2" - } + "dev": true }, "cli": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", - "dev": true, - "requires": { - "exit": "0.1.2", - "glob": "7.1.2" - } + "dev": true }, "cliui": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "dev": true, - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - }, "dependencies": { "wordwrap": { "version": "0.0.2", @@ -1091,10 +799,16 @@ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, - "coffee-script": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.10.0.tgz", - "integrity": "sha1-EpOLz5vhlI+gBvkuDEyegXBRCMA=", + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "dev": true + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "colors": { @@ -1107,15 +821,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", - "dev": true, - "requires": { - "lodash": "4.17.4" - } - }, - "commander": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", - "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0=", "dev": true }, "commondir": { @@ -1142,133 +847,49 @@ "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", "dev": true }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "compressible": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.12.tgz", + "integrity": "sha1-xZpcmdt2dn6YdlAOJx72OzSTvWY=", "dev": true }, - "concurrently": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-3.5.0.tgz", - "integrity": "sha1-jPG3cHppFqeKT/W3e7BN7FSzebI=", + "compression": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.1.tgz", + "integrity": "sha1-7/JgPvwuIs+G810uuTWJ+YdTc9s=", "dev": true, - "requires": { - "chalk": "0.5.1", - "commander": "2.6.0", - "date-fns": "1.29.0", - "lodash": "4.17.4", - "rx": "2.3.24", - "spawn-command": "0.0.2-1", - "supports-color": "3.2.3", - "tree-kill": "1.2.0" - }, "dependencies": { - "ansi-regex": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", - "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=", - "dev": true - }, - "ansi-styles": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", - "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=", + "accepts": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", + "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", "dev": true - }, - "chalk": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", - "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", - "dev": true, - "requires": { - "ansi-styles": "1.1.0", - "escape-string-regexp": "1.0.5", - "has-ansi": "0.1.0", - "strip-ansi": "0.3.0", - "supports-color": "0.2.0" - }, - "dependencies": { - "supports-color": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", - "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=", - "dev": true - } - } - }, - "has-ansi": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", - "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", - "dev": true, - "requires": { - "ansi-regex": "0.2.1" - } - }, - "strip-ansi": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", - "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", - "dev": true, - "requires": { - "ansi-regex": "0.2.1" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } } } }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, "connect": { "version": "3.6.5", "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.5.tgz", "integrity": "sha1-+43ee6B2OHfQ7J352sC0tA5yx9o=", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.0.6", - "parseurl": "1.3.2", - "utils-merge": "1.0.1" - }, - "dependencies": { - "finalhandler": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz", - "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" - } - } - } + "dev": true }, - "connect-livereload": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/connect-livereload/-/connect-livereload-0.5.4.tgz", - "integrity": "sha1-gBV9E3HJ83zBQDmrGJWXDRGdw7w=", + "connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", "dev": true }, "console-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "0.1.4" - } + "dev": true }, "constants-browserify": { "version": "1.0.0", @@ -1306,6 +927,20 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", "dev": true }, + "copy-webpack-plugin": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.2.1.tgz", + "integrity": "sha512-wZIe7EAcOrCQrZF2w6/bqloylIxeuPIope3Qt7ygJMFp4TqT0OZJoYwm/Uu36QMs9U+j6rOGrY8RupGiahE+Rg==", + "dev": true, + "dependencies": { + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true + } + } + }, "core-js": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", @@ -1322,64 +957,45 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" - } + "dev": true }, "create-hash": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", - "dev": true, - "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "sha.js": "2.4.9" - } + "dev": true }, "create-hmac": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "dev": true + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, - "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.9" + "dependencies": { + "lru-cache": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "dev": true + } } }, "crypto-browserify": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.1.tgz", - "integrity": "sha512-Na7ZlwCOqoaW5RwUK1WpXws2kv8mNhWdTlzob0UXulk6G9BDbyiJaGTYBIX61Ozn9l1EPPJpICZb4DaOpT9NlQ==", - "dev": true, - "requires": { - "browserify-cipher": "1.0.0", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.0", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "diffie-hellman": "5.0.2", - "inherits": "2.0.3", - "pbkdf2": "3.0.14", - "public-encrypt": "4.0.0", - "randombytes": "2.0.5" - } + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true }, "currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "1.0.2" - } + "dev": true }, "custom-event": { "version": "1.0.1", @@ -1387,10 +1003,10 @@ "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", "dev": true }, - "date-fns": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz", - "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==", + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "dev": true }, "date-now": { @@ -1399,24 +1015,11 @@ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", "dev": true }, - "dateformat": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", - "dev": true, - "requires": { - "get-stdin": "4.0.1", - "meow": "3.7.0" - } - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } + "dev": true }, "decamelize": { "version": "1.2.0", @@ -1424,6 +1027,24 @@ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + }, + "define-properties": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "dev": true + }, + "del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "dev": true + }, "depd": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", @@ -1434,11 +1055,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" - } + "dev": true }, "destroy": { "version": "1.0.4", @@ -1450,10 +1067,13 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } + "dev": true + }, + "detect-node": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz", + "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=", + "dev": true }, "di": { "version": "0.0.1", @@ -1465,34 +1085,37 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.5" - } + "dev": true + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.2.2.tgz", + "integrity": "sha512-kN+DjfGF7dJGUL7nWRktL9Z18t1rWP3aQlyZdY8XlpvU3Nc6GeFTQApftcjtWKxAZfiggZSGrCEoszNgvnpwDg==", + "dev": true + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true }, "dom-serialize": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", - "dev": true, - "requires": { - "custom-event": "1.0.1", - "ent": "2.2.0", - "extend": "3.0.1", - "void-elements": "2.0.1" - } + "dev": true }, "dom-serializer": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "dev": true, - "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.1" - }, "dependencies": { "domelementtype": { "version": "1.1.3", @@ -1524,20 +1147,19 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", - "dev": true, - "requires": { - "domelementtype": "1.3.0" - } + "dev": true }, "domutils": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" - } + "dev": true + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true }, "ee-first": { "version": "1.1.1", @@ -1545,20 +1167,17 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, + "electron-to-chromium": { + "version": "1.3.27", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz", + "integrity": "sha1-eOy4o5kGYYe7N07t412ccFZagD0=", + "dev": true + }, "elliptic": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" - } + "dev": true }, "emojis-list": { "version": "2.1.0", @@ -1577,33 +1196,12 @@ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", "dev": true, - "requires": { - "accepts": "1.3.3", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "ws": "1.1.2" - }, "dependencies": { - "accepts": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", - "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", - "dev": true, - "requires": { - "mime-types": "2.1.17", - "negotiator": "0.6.1" - } - }, "debug": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } + "dev": true }, "ms": { "version": "0.7.2", @@ -1618,20 +1216,6 @@ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", "dev": true, - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parsejson": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "1.1.2", - "xmlhttprequest-ssl": "1.5.3", - "yeast": "0.1.2" - }, "dependencies": { "component-emitter": { "version": "1.2.1", @@ -1643,10 +1227,7 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } + "dev": true }, "ms": { "version": "0.7.2", @@ -1660,27 +1241,13 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", - "dev": true, - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "0.0.6", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.4", - "has-binary": "0.1.7", - "wtf-8": "1.0.0" - } + "dev": true }, "enhanced-resolve": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "object-assign": "4.1.1", - "tapable": "0.2.8" - } + "dev": true }, "ent": { "version": "2.2.0", @@ -1698,19 +1265,61 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", - "dev": true, - "requires": { - "prr": "0.0.0" - } + "dev": true }, "error-ex": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "dev": true, - "requires": { - "is-arrayish": "0.2.1" - } + "dev": true + }, + "es-abstract": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.9.0.tgz", + "integrity": "sha512-kk3IJoKo7A3pWJc0OV8yZ/VEX2oSUytfekrJiqoxBlKJMFAJVJVpGdHClCCTdv+Fn2zHfpDHHIelMFhZVfef3Q==", + "dev": true + }, + "es-to-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", + "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "dev": true + }, + "es5-ext": { + "version": "0.10.35", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.35.tgz", + "integrity": "sha1-GO6FjOajxFx9eekcFfzKnsVoSU8=", + "dev": true + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true + }, + "es6-weak-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "dev": true }, "escape-html": { "version": "1.0.3", @@ -1724,10 +1333,22 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true + }, + "esrecurse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", + "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "dev": true + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", "dev": true }, "esutils": { @@ -1742,10 +1363,16 @@ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", "dev": true }, - "eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true + }, + "event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", "dev": true }, "eventemitter3": { @@ -1760,15 +1387,23 @@ "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", "dev": true }, + "eventsource": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", + "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "dev": true + }, "evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "1.3.4", - "safe-buffer": "5.1.1" - } + "dev": true + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true }, "exit": { "version": "0.1.2", @@ -1781,30 +1416,18 @@ "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", "dev": true, - "requires": { - "array-slice": "0.2.3", - "array-unique": "0.2.1", - "braces": "0.1.5" - }, "dependencies": { "braces": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", - "dev": true, - "requires": { - "expand-range": "0.1.1" - } + "dev": true }, "expand-range": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", - "dev": true, - "requires": { - "is-number": "0.1.1", - "repeat-string": "0.2.2" - } + "dev": true }, "is-number": { "version": "0.1.1", @@ -1824,86 +1447,88 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "0.1.1" - } + "dev": true }, "expand-range": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "2.2.3" - } + "dev": true }, "express": { "version": "4.16.2", "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", "dev": true, - "requires": { - "accepts": "1.3.4", - "array-flatten": "1.1.1", - "body-parser": "1.18.2", - "content-disposition": "0.5.2", - "content-type": "1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "1.1.1", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.0", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.2", - "qs": "6.5.1", - "range-parser": "1.2.0", - "safe-buffer": "5.1.1", - "send": "0.16.1", - "serve-static": "1.13.1", - "setprototypeof": "1.1.0", - "statuses": "1.3.1", - "type-is": "1.6.15", - "utils-merge": "1.0.1", - "vary": "1.1.2" - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dependencies": { + "accepts": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", + "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + } + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, - "requires": { - "websocket-driver": "0.7.0" + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + } } }, - "file-sync-cmp": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz", - "integrity": "sha1-peeo/7+kk7Q7kju9TKiaU7Y7YSs=", + "fast-deep-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", + "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dev": true }, "filename-regex": { @@ -1916,126 +1541,754 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "dev": true, - "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" - } + "dev": true }, "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz", + "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=", "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" + "dependencies": { + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + } } }, "find-cache-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", - "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", - "dev": true, - "requires": { - "commondir": "1.0.1", - "mkdirp": "0.5.1", - "pkg-dir": "1.0.0" - } + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "dev": true }, "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true }, - "findup-sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", + "dev": true + }, + "fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true + }, + "fs-extra": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz", + "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", + "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", "dev": true, - "requires": { - "glob": "5.0.15" - }, + "optional": true, "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true, + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "dev": true + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "dev": true + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "dev": true, + "optional": true + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "dev": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "dev": true, + "optional": true + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "dev": true + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "version": "7.1.2", + "bundled": true, + "dev": true + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true, + "dev": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "dev": true, + "optional": true + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "dev": true + }, + "hoek": { + "version": "2.16.3", + "bundled": true, + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true, + "dev": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.39", + "bundled": true, + "dev": true, + "optional": true + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "optional": true + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true, + "dev": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "dev": true + }, + "request": { + "version": "2.81.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "dev": true + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "dev": true + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "dev": true + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "dev": true, + "optional": true + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, "dev": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } + "optional": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true } } }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "fs-access": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", - "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", - "dev": true, - "requires": { - "null-check": "1.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "gaze": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", - "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", - "dev": true, - "requires": { - "globule": "1.2.0" - } - }, "get-caller-file": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", @@ -2048,34 +2301,36 @@ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", "dev": true }, - "getobject": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", - "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } + "dev": true }, "glob-base": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, - "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true + } } }, "glob-parent": { @@ -2083,8 +2338,19 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, - "requires": { - "is-glob": "2.0.1" + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true + } } }, "globals": { @@ -2093,15 +2359,18 @@ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", "dev": true }, - "globule": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz", - "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=", + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, - "requires": { - "glob": "7.1.2", - "lodash": "4.17.4", - "minimatch": "3.0.4" + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } } }, "graceful-fs": { @@ -2110,243 +2379,29 @@ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", "dev": true }, - "grunt": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.1.tgz", - "integrity": "sha1-6HeHZOlEsY8yuw8QuQeEdcnftWs=", - "dev": true, - "requires": { - "coffee-script": "1.10.0", - "dateformat": "1.0.12", - "eventemitter2": "0.4.14", - "exit": "0.1.2", - "findup-sync": "0.3.0", - "glob": "7.0.6", - "grunt-cli": "1.2.0", - "grunt-known-options": "1.1.0", - "grunt-legacy-log": "1.0.0", - "grunt-legacy-util": "1.0.0", - "iconv-lite": "0.4.19", - "js-yaml": "3.5.5", - "minimatch": "3.0.4", - "nopt": "3.0.6", - "path-is-absolute": "1.0.1", - "rimraf": "2.2.8" - }, - "dependencies": { - "glob": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", - "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "grunt-cli": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz", - "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=", - "dev": true, - "requires": { - "findup-sync": "0.3.0", - "grunt-known-options": "1.1.0", - "nopt": "3.0.6", - "resolve": "1.1.7" - } - }, - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", - "dev": true - } - } - }, - "grunt-contrib-clean": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-1.1.0.tgz", - "integrity": "sha1-Vkq/LQN4qYOhW54/MO51tzjEBjg=", - "dev": true, - "requires": { - "async": "1.5.2", - "rimraf": "2.6.2" - } - }, - "grunt-contrib-connect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/grunt-contrib-connect/-/grunt-contrib-connect-1.0.2.tgz", - "integrity": "sha1-XPkzuRpnOGBEJzwLJERgPNmIebo=", - "dev": true, - "requires": { - "async": "1.5.2", - "connect": "3.6.5", - "connect-livereload": "0.5.4", - "http2": "3.3.7", - "morgan": "1.9.0", - "opn": "4.0.2", - "portscanner": "1.2.0", - "serve-index": "1.9.1", - "serve-static": "1.13.1" - } - }, - "grunt-contrib-copy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz", - "integrity": "sha1-cGDGWB6QS4qw0A8HbgqPbj58NXM=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "file-sync-cmp": "0.1.1" - } - }, - "grunt-contrib-jshint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-1.1.0.tgz", - "integrity": "sha1-Np2QmyWTxA6L55lAshNAhQx5Oaw=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "hooker": "0.2.3", - "jshint": "2.9.5" - } - }, - "grunt-contrib-watch": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.0.0.tgz", - "integrity": "sha1-hKGnodar0m7VaEE0lscxM+mQAY8=", - "dev": true, - "requires": { - "async": "1.5.2", - "gaze": "1.1.2", - "lodash": "3.10.1", - "tiny-lr": "0.2.1" - }, - "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - } - } - }, - "grunt-karma": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/grunt-karma/-/grunt-karma-2.0.0.tgz", - "integrity": "sha1-dTWD0RXf3AVf5X5Y+W1rPH5hIRg=", - "dev": true, - "requires": { - "lodash": "3.10.1" - }, - "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - } - } - }, - "grunt-known-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.0.tgz", - "integrity": "sha1-pCdO6zL6dl2lp6OxcSYXzjsUQUk=", + "handle-thing": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", + "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", "dev": true }, - "grunt-legacy-log": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-1.0.0.tgz", - "integrity": "sha1-+4bxgJhHvAfcR4Q/ns1srLYt8tU=", - "dev": true, - "requires": { - "colors": "1.1.2", - "grunt-legacy-log-utils": "1.0.0", - "hooker": "0.2.3", - "lodash": "3.10.1", - "underscore.string": "3.2.3" - }, - "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - } - } - }, - "grunt-legacy-log-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-1.0.0.tgz", - "integrity": "sha1-p7ji0Ps1taUPSvmG/BEnSevJbz0=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "lodash": "4.3.0" - }, - "dependencies": { - "lodash": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz", - "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=", - "dev": true - } - } - }, - "grunt-legacy-util": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.0.0.tgz", - "integrity": "sha1-OGqnjcbtUJhsKxiVcmWxtIq7m4Y=", - "dev": true, - "requires": { - "async": "1.5.2", - "exit": "0.1.2", - "getobject": "0.1.0", - "hooker": "0.2.3", - "lodash": "4.3.0", - "underscore.string": "3.2.3", - "which": "1.2.14" - }, - "dependencies": { - "lodash": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz", - "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=", - "dev": true - } - } - }, - "grunt-webpack": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/grunt-webpack/-/grunt-webpack-2.0.1.tgz", - "integrity": "sha1-hMXZNzreiEaChd54cCHEKpfVMGw=", - "dev": true, - "requires": { - "lodash": "4.17.4" - } + "has": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "dev": true }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } + "dev": true }, "has-binary": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", - "dev": true, - "requires": { - "isarray": "0.0.1" - } + "dev": true }, "has-cors": { "version": "1.1.0", @@ -2355,55 +2410,33 @@ "dev": true }, "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", "dev": true }, "hash-base": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", - "dev": true, - "requires": { - "inherits": "2.0.3" - } + "dev": true }, "hash.js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "dev": true, - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" - } + "dev": true }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" - } + "dev": true }, "home-or-tmp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", - "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", "dev": true }, "hosted-git-info": { @@ -2412,38 +2445,55 @@ "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", "dev": true }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true + } + } + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "dev": true + }, "htmlparser2": { "version": "3.8.3", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", - "dev": true, - "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.3.0", - "domutils": "1.5.1", - "entities": "1.0.0", - "readable-stream": "1.1.14" - } + "dev": true + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true }, "http-errors": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", - "dev": true, - "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.3.1" - }, - "dependencies": { - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", - "dev": true - } - } + "dev": true }, "http-parser-js": { "version": "0.4.9", @@ -2455,22 +2505,26 @@ "version": "1.16.2", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", + "dev": true + }, + "http-proxy-middleware": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", + "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", "dev": true, - "requires": { - "eventemitter3": "1.2.0", - "requires-port": "1.0.0" + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true + } } }, - "http2": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/http2/-/http2-3.3.7.tgz", - "integrity": "sha512-puSi8M8WNlFJm9Pk4c/Mbz9Gwparuj3gO9/RRO5zv6piQ0FY+9Qywp0PdWshYgsMJSalixFY7eC6oPu0zRxLAQ==", - "dev": true - }, "https-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", - "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "dev": true }, "iconv-lite": { @@ -2485,14 +2539,17 @@ "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", "dev": true }, + "import-local": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-0.1.1.tgz", + "integrity": "sha1-sReVcqrNwRxqkQCftDDbyrX2aKg=", + "dev": true + }, "indent-string": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } + "dev": true }, "indexof": { "version": "0.0.1", @@ -2504,11 +2561,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } + "dev": true }, "inherits": { "version": "2.0.3", @@ -2516,6 +2569,12 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, + "internal-ip": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz", + "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", + "dev": true + }, "interpret": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.4.tgz", @@ -2526,10 +2585,7 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", - "dev": true, - "requires": { - "loose-envify": "1.3.1" - } + "dev": true }, "invert-kv": { "version": "1.0.0", @@ -2537,6 +2593,12 @@ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", "dev": true }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, "ipaddr.js": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz", @@ -2553,25 +2615,31 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "1.10.0" - } + "dev": true }, "is-buffer": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", - "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true + }, + "is-callable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", + "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", "dev": true }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "1.1.1" - } + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true }, "is-dotfile": { "version": "1.0.3", @@ -2583,10 +2651,7 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "2.0.0" - } + "dev": true }, "is-extendable": { "version": "0.1.1", @@ -2595,46 +2660,52 @@ "dev": true }, "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, "is-finite": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } + "dev": true }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } + "dev": true }, "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true }, "is-number": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } + "dev": true + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "dev": true + }, + "is-path-inside": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", + "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", + "dev": true }, "is-posix-bracket": { "version": "0.1.1", @@ -2648,12 +2719,36 @@ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", "dev": true }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", + "dev": true + }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", @@ -2677,9 +2772,6 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dev": true, - "requires": { - "isarray": "1.0.0" - }, "dependencies": { "isarray": { "version": "1.0.0", @@ -2701,16 +2793,6 @@ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", "dev": true }, - "js-yaml": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.5.5.tgz", - "integrity": "sha1-A3fDgBfKvHMisNH7zSWkkWQfL74=", - "dev": true, - "requires": { - "argparse": "1.0.9", - "esprima": "2.7.3" - } - }, "jsesc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", @@ -2722,16 +2804,6 @@ "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.9.5.tgz", "integrity": "sha1-HnJSkVzmgbQIJ+4UJIxG006apiw=", "dev": true, - "requires": { - "cli": "1.0.1", - "console-browserify": "1.1.0", - "exit": "0.1.2", - "htmlparser2": "3.8.3", - "lodash": "3.7.0", - "minimatch": "3.0.4", - "shelljs": "0.3.0", - "strip-json-comments": "1.0.4" - }, "dependencies": { "lodash": { "version": "3.7.0", @@ -2741,20 +2813,37 @@ } } }, + "jshint-loader": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/jshint-loader/-/jshint-loader-0.8.4.tgz", + "integrity": "sha1-tD7kXRN3adVliUChH479mg7c1Hs=", + "dev": true, + "dependencies": { + "strip-json-comments": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-0.1.3.tgz", + "integrity": "sha1-Fkxk43Coo8wAyeAbU55WmCPw7lQ=", + "dev": true + } + } + }, "json-loader": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", "dev": true }, - "json-stable-stringify": { + "json-parse-better-errors": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "0.0.0" - } + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz", + "integrity": "sha512-xyQpxeWWMKyJps9CuGJYeng6ssI5bpqS9ltQpdVQ90t4ql6NdnxFKh95JcRt2cun/DjMVNrdjniLPuMA69xmCw==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true }, "json3": { "version": "3.3.2", @@ -2768,6 +2857,12 @@ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", "dev": true }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true + }, "jsonify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", @@ -2779,35 +2874,6 @@ "resolved": "https://registry.npmjs.org/karma/-/karma-1.7.1.tgz", "integrity": "sha512-k5pBjHDhmkdaUccnC7gE3mBzZjcxyxYsYVaqiL2G5AqlfLyBO5nw2VdNK+O16cveEPd/gIOWULH7gkiYYwVNHg==", "dev": true, - "requires": { - "bluebird": "3.5.1", - "body-parser": "1.18.2", - "chokidar": "1.7.0", - "colors": "1.1.2", - "combine-lists": "1.0.1", - "connect": "3.6.5", - "core-js": "2.5.1", - "di": "0.0.1", - "dom-serialize": "2.2.1", - "expand-braces": "0.1.2", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "http-proxy": "1.16.2", - "isbinaryfile": "3.0.2", - "lodash": "3.10.1", - "log4js": "0.6.38", - "mime": "1.4.1", - "minimatch": "3.0.4", - "optimist": "0.6.1", - "qjobs": "1.1.5", - "range-parser": "1.2.0", - "rimraf": "2.6.2", - "safe-buffer": "5.1.1", - "socket.io": "1.7.3", - "source-map": "0.5.7", - "tmp": "0.0.31", - "useragent": "2.2.1" - }, "dependencies": { "lodash": { "version": "3.10.1", @@ -2821,11 +2887,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", - "dev": true, - "requires": { - "fs-access": "1.0.1", - "which": "1.2.14" - } + "dev": true }, "karma-firefox-launcher": { "version": "1.0.1", @@ -2833,29 +2895,49 @@ "integrity": "sha1-zlj0fCATqIFW1VpdYTN8CZz1u1E=", "dev": true }, - "karma-ie-launcher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/karma-ie-launcher/-/karma-ie-launcher-1.0.0.tgz", - "integrity": "sha1-SXmGhCxJAZA0bNifVJTKmDDG1Zw=", - "dev": true, - "requires": { - "lodash": "4.17.4" - } - }, "karma-jasmine": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.0.tgz", "integrity": "sha1-IuTAa/mhguUpTR9wXjczgRuBCs8=", "dev": true }, + "karma-sourcemap-loader": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz", + "integrity": "sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg=", + "dev": true + }, + "karma-webpack": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-2.0.6.tgz", + "integrity": "sha512-dcKvtiW00caWrceCKwIvlKwHQu8zI+e3zWZYDLk7kr7nl1lYSp8uP+8fQoBvRCnZiPUGuwU5Psm20NbEIn7KlA==", + "dev": true, + "dependencies": { + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "killable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.0.tgz", + "integrity": "sha1-2ouEvUfeU5WHj5XWTQLyRJ/gXms=", + "dev": true + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } + "dev": true }, "lazy-cache": { "version": "1.0.4", @@ -2867,29 +2949,13 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "1.0.0" - } - }, - "livereload-js": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.2.2.tgz", - "integrity": "sha1-bIclfmSKtHW8JOoldFftzB+NC8I=", "dev": true }, "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true }, "loader-runner": { "version": "2.3.0", @@ -2898,16 +2964,16 @@ "dev": true }, "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "dev": true + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true }, "lodash": { "version": "4.17.4", @@ -2915,27 +2981,23 @@ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", "dev": true }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, "log4js": { "version": "0.6.38", "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", "dev": true, - "requires": { - "readable-stream": "1.0.34", - "semver": "4.3.6" - }, "dependencies": { "readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } + "dev": true }, "semver": { "version": "4.3.6", @@ -2945,6 +3007,12 @@ } } }, + "loglevel": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.0.tgz", + "integrity": "sha1-rgyqVhERSYxboTcj1vtjHSQAOTQ=", + "dev": true + }, "longest": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", @@ -2955,20 +3023,13 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "dev": true, - "requires": { - "js-tokens": "3.0.2" - } + "dev": true }, "loud-rejection": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" - } + "dev": true }, "lru-cache": { "version": "2.2.4", @@ -2976,31 +3037,35 @@ "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", "dev": true }, + "make-dir": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz", + "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==", + "dev": true + }, "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "dev": true }, + "map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", + "dev": true + }, "md5.js": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", "dev": true, - "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" - }, "dependencies": { "hash-base": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } + "dev": true } } }, @@ -3010,15 +3075,17 @@ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true + }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, - "requires": { - "errno": "0.1.4", - "readable-stream": "2.3.3" - }, "dependencies": { "isarray": { "version": "1.0.0", @@ -3030,51 +3097,87 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } + "dev": true }, "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } + "dev": true } } }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", + "dev": true + }, "meow": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, - "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.4.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" - }, "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true + }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true } } }, @@ -3095,31 +3198,26 @@ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true + } } }, "miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" - } + "dev": true }, "mime": { "version": "1.4.1", @@ -3137,10 +3235,13 @@ "version": "2.1.17", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", - "dev": true, - "requires": { - "mime-db": "1.30.0" - } + "dev": true + }, + "mimic-fn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", + "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", + "dev": true }, "minimalistic-assert": { "version": "1.0.0", @@ -3158,10 +3259,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } + "dev": true }, "minimist": { "version": "0.0.8", @@ -3173,23 +3271,7 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "morgan": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.0.tgz", - "integrity": "sha1-0B+mxlhZt2/PMbPLU6OCGjEdgFE=", - "dev": true, - "requires": { - "basic-auth": "2.0.0", - "debug": "2.6.9", - "depd": "1.1.1", - "on-finished": "2.3.0", - "on-headers": "1.0.1" - } + "dev": true }, "ms": { "version": "2.0.0", @@ -3197,42 +3279,48 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "multicast-dns": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.0.tgz", + "integrity": "sha512-tnQqWkuWYHCOVRveiWQf+5KjHUnEmtxUycTy1esL4prQjXoT4qpndIS4fH63zObmHNxIHke3YHRnQrXYpXHf2A==", + "dev": true + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "nan": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", + "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=", + "dev": true, + "optional": true + }, "negotiator": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", "dev": true }, + "node-dir": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "integrity": "sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=", + "dev": true + }, + "node-forge": { + "version": "0.6.33", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.6.33.tgz", + "integrity": "sha1-RjgRh59XPUUVWtap9D3ClujoXrw=", + "dev": true + }, "node-libs-browser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.0.0.tgz", - "integrity": "sha1-o6WeyXAkmFtG6Vg3lkb5bEthZkY=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", + "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", "dev": true, - "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.1.4", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.11.1", - "domain-browser": "1.1.7", - "events": "1.1.1", - "https-browserify": "0.0.1", - "os-browserify": "0.2.1", - "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.3", - "stream-browserify": "2.0.1", - "stream-http": "2.7.2", - "string_decoder": "0.10.31", - "timers-browserify": "2.0.4", - "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.3", - "vm-browserify": "0.0.4" - }, "dependencies": { "isarray": { "version": "1.0.0", @@ -3244,60 +3332,60 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - }, - "dependencies": { - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - } - } + "dev": true + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true } } }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1.1.1" - } - }, "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true, - "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "5.4.1", - "validate-npm-package-license": "3.0.1" - } + "dev": true }, "normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true + }, + "npm-run-all": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.2.tgz", + "integrity": "sha512-Z2aRlajMK4SQ8u19ZA75NZZu7wupfCNQWdYosIi8S6FgBdGf/8Y6Hgyjdc8zU2cYmIRVCx1nM80tJPkdEd+UYg==", "dev": true, - "requires": { - "remove-trailing-separator": "1.1.0" + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true + }, + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "dev": true + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true + } } }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true + }, "null-check": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", @@ -3322,24 +3410,29 @@ "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", "dev": true }, + "object-keys": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", + "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", + "dev": true + }, "object.omit": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" - } + "dev": true + }, + "obuf": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.1.tgz", + "integrity": "sha1-EEEktsYCxnlogaBCVB0220OlJk4=", + "dev": true }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } + "dev": true }, "on-headers": { "version": "1.0.1", @@ -3351,30 +3444,19 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1.0.2" - } + "dev": true }, "opn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", - "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=", - "dev": true, - "requires": { - "object-assign": "4.1.1", - "pinkie-promise": "2.0.1" - } + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.1.0.tgz", + "integrity": "sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg==", + "dev": true }, "optimist": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "0.0.8", - "wordwrap": "0.0.3" - } + "dev": true }, "options": { "version": "0.0.6", @@ -3382,10 +3464,24 @@ "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", "dev": true }, + "original": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.0.tgz", + "integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=", + "dev": true, + "dependencies": { + "url-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz", + "integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=", + "dev": true + } + } + }, "os-browserify": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz", - "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, "os-homedir": { @@ -3395,13 +3491,10 @@ "dev": true }, "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "1.0.0" - } + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true }, "os-tmpdir": { "version": "1.0.2", @@ -3409,72 +3502,85 @@ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", + "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", + "dev": true + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true + }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "dev": true + }, "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", "dev": true }, "parse-asn1": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", - "dev": true, - "requires": { - "asn1.js": "4.9.1", - "browserify-aes": "1.1.1", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.14" - } + "dev": true }, "parse-glob": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, - "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true + } } }, "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "1.3.1" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true }, "parsejson": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", - "dev": true, - "requires": { - "better-assert": "1.0.2" - } + "dev": true }, "parseqs": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "dev": true, - "requires": { - "better-assert": "1.0.2" - } + "dev": true }, "parseuri": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "dev": true, - "requires": { - "better-assert": "1.0.2" - } + "dev": true }, "parseurl": { "version": "1.3.2", @@ -3489,13 +3595,10 @@ "dev": true }, "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true }, "path-is-absolute": { "version": "1.0.1", @@ -3503,6 +3606,18 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -3510,33 +3625,27 @@ "dev": true }, "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true + }, + "pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "dev": true }, "pbkdf2": { "version": "3.0.14", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", - "dev": true, - "requires": { - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.9" - } + "dev": true }, "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, "pinkie": { @@ -3549,27 +3658,26 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "2.0.4" - } + "dev": true }, "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, - "requires": { - "find-up": "1.1.2" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true }, - "portscanner": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-1.2.0.tgz", - "integrity": "sha1-sUu9olfRTDEPqcwJaCrwLUCWGAI=", + "portfinder": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", + "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", "dev": true, - "requires": { - "async": "1.5.2" + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + } } }, "preserve": { @@ -3600,11 +3708,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", - "dev": true, - "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.5.2" - } + "dev": true }, "prr": { "version": "0.0.0", @@ -3612,18 +3716,23 @@ "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", "dev": true }, + "ps-tree": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz", + "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, "public-encrypt": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "parse-asn1": "5.1.0", - "randombytes": "2.0.5" - } + "dev": true }, "punycode": { "version": "1.4.1", @@ -3655,33 +3764,29 @@ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", "dev": true }, + "querystringify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-0.0.4.tgz", + "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw=", + "dev": true + }, "randomatic": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", "dev": true, - "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" - }, "dependencies": { "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, - "requires": { - "kind-of": "3.2.2" - }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } + "dev": true } } }, @@ -3689,10 +3794,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } + "dev": true } } }, @@ -3700,10 +3802,13 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } + "dev": true + }, + "randomfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz", + "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==", + "dev": true }, "range-parser": { "version": "1.2.0", @@ -3715,58 +3820,83 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "dev": true + }, + "rcfinder": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/rcfinder/-/rcfinder-0.1.9.tgz", + "integrity": "sha1-8+gPOH3fmugK4wpBADKWQuroERU=", + "dev": true + }, + "rcloader": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/rcloader/-/rcloader-0.1.2.tgz", + "integrity": "sha1-oJY6ZDfQnvjLktky0trUl7DRc2w=", "dev": true, - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "unpipe": "1.0.0" + "dependencies": { + "lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true + } } }, "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true }, "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "dev": true, - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" + "dependencies": { + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true + } } }, "readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } + "dev": true }, "readdirp": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.3", - "set-immediate-shim": "1.0.1" - }, "dependencies": { "isarray": { "version": "1.0.0", @@ -3778,25 +3908,13 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } + "dev": true }, "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } + "dev": true } } }, @@ -3804,11 +3922,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" - } + "dev": true }, "regenerate": { "version": "1.3.3", @@ -3826,32 +3940,19 @@ "version": "0.10.1", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "private": "0.1.8" - } + "dev": true }, "regex-cache": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "requires": { - "is-equal-shallow": "0.1.3" - } + "dev": true }, "regexpu-core": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "dev": true, - "requires": { - "regenerate": "1.3.3", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" - } + "dev": true }, "regjsgen": { "version": "0.2.0", @@ -3864,9 +3965,6 @@ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, - "requires": { - "jsesc": "0.5.0" - }, "dependencies": { "jsesc": { "version": "0.5.0", @@ -3898,10 +3996,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "1.0.2" - } + "dev": true }, "require-directory": { "version": "2.1.1", @@ -3921,44 +4016,34 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", "dev": true }, - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", "dev": true }, "right-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "requires": { - "align-text": "0.1.4" - } + "dev": true }, "rimraf": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "7.1.2" - } + "dev": true }, "ripemd160": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", - "dev": true, - "requires": { - "hash-base": "2.0.2", - "inherits": "2.0.3" - } - }, - "rx": { - "version": "2.3.24", - "resolved": "https://registry.npmjs.org/rx/-/rx-2.3.24.tgz", - "integrity": "sha1-FPlQpCF9fjXapxu8vljv9o6ksrc=", "dev": true }, "safe-buffer": { @@ -3967,6 +4052,18 @@ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", "dev": true }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.1.tgz", + "integrity": "sha1-v4y3uDJWxFUeMTR8YxF3jbme7FI=", + "dev": true + }, "semver": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", @@ -3978,20 +4075,13 @@ "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "1.1.1", - "destroy": "1.0.4", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.2", - "http-errors": "1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.3.1" + "dependencies": { + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + } } }, "serve-index": { @@ -3999,27 +4089,20 @@ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dev": true, - "requires": { - "accepts": "1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "1.0.3", - "http-errors": "1.6.2", - "mime-types": "2.1.17", - "parseurl": "1.3.2" + "dependencies": { + "accepts": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", + "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", + "dev": true + } } }, "serve-static": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", - "dev": true, - "requires": { - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.16.1" - } + "dev": true }, "set-blocking": { "version": "2.0.0", @@ -4040,20 +4123,34 @@ "dev": true }, "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", "dev": true }, "sha.js": { "version": "2.4.9", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz", "integrity": "sha512-G8zektVqbiPHrylgew9Zg1VRB1L/DtXNUVAM6q4QLy8NE3qtHlFXTf8VLL4k1Yl6c7NMjtZUTdXV+X44nFaT6A==", - "dev": true, - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "dev": true }, "shelljs": { "version": "0.3.0", @@ -4078,24 +4175,12 @@ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=", "dev": true, - "requires": { - "debug": "2.3.3", - "engine.io": "1.8.3", - "has-binary": "0.1.7", - "object-assign": "4.1.0", - "socket.io-adapter": "0.5.0", - "socket.io-client": "1.7.3", - "socket.io-parser": "2.3.1" - }, "dependencies": { "debug": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } + "dev": true }, "ms": { "version": "0.7.2", @@ -4116,19 +4201,12 @@ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", "dev": true, - "requires": { - "debug": "2.3.3", - "socket.io-parser": "2.3.1" - }, "dependencies": { "debug": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } + "dev": true }, "ms": { "version": "0.7.2", @@ -4143,19 +4221,6 @@ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", "dev": true, - "requires": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "2.3.3", - "engine.io-client": "1.8.3", - "has-binary": "0.1.7", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseuri": "0.0.5", - "socket.io-parser": "2.3.1", - "to-array": "0.1.4" - }, "dependencies": { "component-emitter": { "version": "1.2.1", @@ -4167,10 +4232,7 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } + "dev": true }, "ms": { "version": "0.7.2", @@ -4185,21 +4247,12 @@ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", "dev": true, - "requires": { - "component-emitter": "1.1.2", - "debug": "2.2.0", - "isarray": "0.0.1", - "json3": "3.3.2" - }, "dependencies": { "debug": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true, - "requires": { - "ms": "0.7.1" - } + "dev": true }, "ms": { "version": "0.7.1", @@ -4209,6 +4262,26 @@ } } }, + "sockjs": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.18.tgz", + "integrity": "sha1-2bKJMWyn33dZXvKZ4HXw+TfrQgc=", + "dev": true + }, + "sockjs-client": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", + "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", + "dev": true, + "dependencies": { + "faye-websocket": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", + "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "dev": true + } + } + }, "source-list-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", @@ -4225,25 +4298,13 @@ "version": "0.4.18", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "requires": { - "source-map": "0.5.7" - } - }, - "spawn-command": { - "version": "0.0.2-1", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", - "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", "dev": true }, "spdx-correct": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", - "dev": true, - "requires": { - "spdx-license-ids": "1.2.2" - } + "dev": true }, "spdx-expression-parse": { "version": "1.0.4", @@ -4257,16 +4318,48 @@ "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", "dev": true }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "spdy": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", + "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", + "dev": true + }, + "spdy-transport": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz", + "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=", + "dev": true, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true + } + } + }, + "split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", "dev": true }, "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", "dev": true }, "stream-browserify": { @@ -4274,10 +4367,6 @@ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" - }, "dependencies": { "isarray": { "version": "1.0.0", @@ -4289,40 +4378,27 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } + "dev": true }, "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } + "dev": true } } }, + "stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "dev": true + }, "stream-http": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", "dev": true, - "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" - }, "dependencies": { "isarray": { "version": "1.0.0", @@ -4334,25 +4410,13 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } + "dev": true }, "string_decoder": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } + "dev": true } } }, @@ -4363,42 +4427,60 @@ "dev": true }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true + } } }, + "string.prototype.padend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz", + "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=", + "dev": true + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } + "dev": true }, "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true }, "strip-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "4.0.1" - } + "dev": true }, "strip-json-comments": { "version": "1.0.4", @@ -4418,127 +4500,35 @@ "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", "dev": true }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "thunky": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-0.1.0.tgz", + "integrity": "sha1-vzAUaCTituZ7Dy16Ssi+smkIaE4=", + "dev": true + }, + "time-stamp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz", + "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=", + "dev": true + }, "timers-browserify": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz", "integrity": "sha512-uZYhyU3EX8O7HQP+J9fTVYwsq90Vr68xPEFo7yrVImIxYvHgukBEgOB/SgGoorWVTzGM/3Z+wUNnboA4M8jWrg==", - "dev": true, - "requires": { - "setimmediate": "1.0.5" - } - }, - "tiny-lr": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-0.2.1.tgz", - "integrity": "sha1-s/26gC5dVqM8L28QeUsy5Hescp0=", - "dev": true, - "requires": { - "body-parser": "1.14.2", - "debug": "2.2.0", - "faye-websocket": "0.10.0", - "livereload-js": "2.2.2", - "parseurl": "1.3.2", - "qs": "5.1.0" - }, - "dependencies": { - "body-parser": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.14.2.tgz", - "integrity": "sha1-EBXLH+LEQ4WCWVgdtTMy+NDPUPk=", - "dev": true, - "requires": { - "bytes": "2.2.0", - "content-type": "1.0.4", - "debug": "2.2.0", - "depd": "1.1.1", - "http-errors": "1.3.1", - "iconv-lite": "0.4.13", - "on-finished": "2.3.0", - "qs": "5.2.0", - "raw-body": "2.1.7", - "type-is": "1.6.15" - }, - "dependencies": { - "qs": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.0.tgz", - "integrity": "sha1-qfMRQq9GjLcrJbMBNrokVoNJFr4=", - "dev": true - } - } - }, - "bytes": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.2.0.tgz", - "integrity": "sha1-/TVGSkA/b5EXwt42Cez/nK4ABYg=", - "dev": true - }, - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true, - "requires": { - "ms": "0.7.1" - } - }, - "http-errors": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", - "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "statuses": "1.3.1" - } - }, - "iconv-lite": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", - "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=", - "dev": true - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true - }, - "qs": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-5.1.0.tgz", - "integrity": "sha1-TZMuXH6kEcynajEtOaYGIA/VDNk=", - "dev": true - }, - "raw-body": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz", - "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=", - "dev": true, - "requires": { - "bytes": "2.4.0", - "iconv-lite": "0.4.13", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", - "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=", - "dev": true - } - } - } - } + "dev": true }, "tmp": { "version": "0.0.31", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2" - } + "dev": true }, "to-array": { "version": "0.1.4", @@ -4558,12 +4548,6 @@ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", "dev": true }, - "tree-kill": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.0.tgz", - "integrity": "sha512-DlX6dR0lOIRDFxI0mjL9IYg6OTncLm/Zt+JiBhE5OlFcAR8yc9S7FFXU9so0oda47frdM/JFsk7UjNt9vscKcg==", - "dev": true - }, "trim-newlines": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", @@ -4586,40 +4570,19 @@ "version": "1.6.15", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.17" - } + "dev": true }, "uglify-js": { "version": "2.8.29", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", "dev": true, - "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - }, "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true - }, "yargs": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - } + "dev": true } } }, @@ -4630,16 +4593,22 @@ "dev": true, "optional": true }, + "uglifyjs-webpack-plugin": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", + "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "dev": true + }, "ultron": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", "dev": true }, - "underscore.string": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.2.3.tgz", - "integrity": "sha1-gGmSYzZl1eX8tNsfs6hi62jp5to=", + "universalify": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", + "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=", "dev": true }, "unpipe": { @@ -4653,10 +4622,6 @@ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, "dependencies": { "punycode": { "version": "1.3.2", @@ -4666,24 +4631,31 @@ } } }, + "url-parse": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz", + "integrity": "sha512-DT1XbYAfmQP65M/mE6OALxmXzZ/z1+e5zk2TcSKe/KiYbNGZxgtttzC0mR/sjopbpOXcbniq7eIKmocJnUWlEw==", + "dev": true, + "dependencies": { + "querystringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz", + "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=", + "dev": true + } + } + }, "useragent": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz", "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", - "dev": true, - "requires": { - "lru-cache": "2.2.4", - "tmp": "0.0.31" - } + "dev": true }, "util": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, - "requires": { - "inherits": "2.0.1" - }, "dependencies": { "inherits": { "version": "2.0.1", @@ -4705,15 +4677,17 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", "dev": true }, + "uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", + "dev": true + }, "validate-npm-package-license": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", - "dev": true, - "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" - } + "dev": true }, "vary": { "version": "1.1.2", @@ -4725,10 +4699,7 @@ "version": "0.0.4", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, - "requires": { - "indexof": "0.0.1" - } + "dev": true }, "void-elements": { "version": "2.0.1", @@ -4741,111 +4712,199 @@ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz", "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=", "dev": true, - "requires": { - "async": "2.5.0", - "chokidar": "1.7.0", - "graceful-fs": "4.1.11" - }, "dependencies": { "async": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", - "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", - "dev": true, - "requires": { - "lodash": "4.17.4" - } + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "dev": true } } }, + "wbuf": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.2.tgz", + "integrity": "sha1-1pe5nx9ZUS3ydRvkJ2nBWAtYAf4=", + "dev": true + }, "webpack": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-2.7.0.tgz", - "integrity": "sha512-MjAA0ZqO1ba7ZQJRnoCdbM56mmFpipOPUv/vQpwwfSI42p5PVDdoiuK2AL2FwFUVgT859Jr43bFZXRg/LNsqvg==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.8.1.tgz", + "integrity": "sha512-5ZXLWWsMqHKFr5y0N3Eo5IIisxeEeRAajNq4mELb/WELOR7srdbQk2N5XiyNy2A/AgvlR3AmeBCZJW8lHrolbw==", "dev": true, - "requires": { - "acorn": "5.1.2", - "acorn-dynamic-import": "2.0.2", - "ajv": "4.11.8", - "ajv-keywords": "1.5.1", - "async": "2.5.0", - "enhanced-resolve": "3.4.1", - "interpret": "1.0.4", - "json-loader": "0.5.7", - "json5": "0.5.1", - "loader-runner": "2.3.0", - "loader-utils": "0.2.17", - "memory-fs": "0.4.1", - "mkdirp": "0.5.1", - "node-libs-browser": "2.0.0", - "source-map": "0.5.7", - "supports-color": "3.2.3", - "tapable": "0.2.8", - "uglify-js": "2.8.29", - "watchpack": "1.4.0", - "webpack-sources": "1.0.1", - "yargs": "6.6.0" - }, "dependencies": { "async": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", - "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", - "dev": true, - "requires": { - "lodash": "4.17.4" - } + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "dev": true }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true + } + } + }, + "webpack-dev-middleware": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.0.tgz", + "integrity": "sha1-007++y7dp+HTtdvgcolRMhllFwk=", + "dev": true + }, + "webpack-dev-server": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.9.4.tgz", + "integrity": "sha512-thrqC0EQEoSjXeYgP6pUXcUCZ+LNrKsDPn+mItLnn5VyyNZOJKd06hUP5vqkYwL8nWWXsii0loSF9NHNccT6ow==", + "dev": true, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "yargs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "dev": true + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true } } }, "webpack-sources": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.1.tgz", - "integrity": "sha512-05tMxipUCwHqYaVS8xc7sYPTly8PzXayRCB4dTxLhWTqlKUiwH6ezmEe0OSreL1c30LAuA3Zqmc+uEBUGFJDjw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.2.tgz", + "integrity": "sha512-Y7UddMCv6dGjy81nBv6nuQeFFIt5aalHm7uyDsAsW86nZwfOVPGRr3XMjEQLaT+WKo8rlzhC9qtbJvYKLtAwaw==", "dev": true, - "requires": { - "source-list-map": "2.0.0", - "source-map": "0.5.7" + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "websocket-driver": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", - "dev": true, - "requires": { - "http-parser-js": "0.4.9", - "websocket-extensions": "0.1.2" - } + "dev": true }, "websocket-extensions": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.2.tgz", - "integrity": "sha1-Dhh4HeYpoYMIzhSBZQ9n/6JpOl0=", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", "dev": true }, "which": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", - "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", - "dev": true, - "requires": { - "isexe": "2.0.0" - } + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "dev": true }, "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, "window-size": { @@ -4865,9 +4924,13 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true + } } }, "wrappy": { @@ -4880,11 +4943,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", - "dev": true, - "requires": { - "options": "0.0.6", - "ultron": "1.0.2" - } + "dev": true }, "wtf-8": { "version": "1.0.0", @@ -4910,31 +4969,22 @@ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", "dev": true }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, "yargs": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", - "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", "dev": true, - "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "4.2.1" - }, "dependencies": { "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true }, "cliui": { @@ -4942,27 +4992,27 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" + "dependencies": { + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true + } } } } }, "yargs-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", - "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", "dev": true, - "requires": { - "camelcase": "3.0.0" - }, "dependencies": { "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true } } diff --git a/package.json b/package.json index 0a6d903b..8bdff3e8 100644 --- a/package.json +++ b/package.json @@ -19,33 +19,34 @@ }, "license": "MIT", "scripts": { - "start": "grunt", - "test": "grunt test", - "dev": "concurrently --kill-others --raw \"grunt server\" \"grunt test\"", - "build": "grunt build" + "prod-build": "webpack --color", + "prod-test": "karma start test/config/karma.conf.js", + "dev-server": "webpack-dev-server --color", + "dev-test": "karma start test/config/karma.conf.js", + "hint-tests": "jshint --verbose test", + "build": "npm run hint-tests && npm run prod-build && npm run prod-test", + "dev": "npm-run-all --parallel dev-server dev-test", + "test": "npm run dev-test", + "start": "npm run dev-server" }, "devDependencies": { - "babel-core": "^6.22.1", - "babel-loader": "^6.2.10", - "babel-preset-es2015": "^6.22.0", - "clean-webpack-plugin": "^0.1.15", - "concurrently": "^3.4.0", - "express": "^4.14.0", - "grunt": "^1.0.1", - "grunt-contrib-clean": "^1.0.0", - "grunt-contrib-connect": "^1.0.2", - "grunt-contrib-copy": "^1.0.0", - "grunt-contrib-jshint": "^1.1.0", - "grunt-contrib-watch": "^1.0.0", - "grunt-karma": "^2.0.0", - "grunt-webpack": "^2.0.1", - "jasmine-core": "^2.5.2", - "karma": "^1.4.0", - "karma-chrome-launcher": "^2.0.0", + "babel-core": "^6.26.0", + "babel-loader": "^7.1.2", + "babel-preset-env": "^1.6.1", + "clean-webpack-plugin": "^0.1.17", + "copy-webpack-plugin": "^4.2.0", + "jasmine-core": "^2.8.0", + "jshint": "^2.9.2", + "jshint-loader": "^0.8.4", + "karma": "^1.7.1", + "karma-chrome-launcher": "^2.2.0", "karma-firefox-launcher": "^1.0.1", - "karma-ie-launcher": "^1.0.0", "karma-jasmine": "^1.1.0", - "webpack": "^2.6.1" + "karma-sourcemap-loader": "^0.3.7", + "karma-webpack": "^2.0.6", + "npm-run-all": "^4.1.2", + "webpack": "^3.8.1", + "webpack-dev-server": "^2.9.4" }, "keywords": [ "angular", diff --git a/src/.jshintrc b/src/.jshintrc deleted file mode 100644 index da64ed08..00000000 --- a/src/.jshintrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "esversion": 6, - "expr": true, - "strict": false -} diff --git a/src/ui-scroll-jqlite.js b/src/ui-scroll-jqlite.js index 31ceb635..c542a1a4 100644 --- a/src/ui-scroll-jqlite.js +++ b/src/ui-scroll-jqlite.js @@ -9,4 +9,4 @@ angular.module('ui.scroll.jqlite', []); -}()); \ No newline at end of file +})(); \ No newline at end of file diff --git a/src/ui-scroll.js b/src/ui-scroll.js index 5f03fd61..3f70a02e 100644 --- a/src/ui-scroll.js +++ b/src/ui-scroll.js @@ -6,9 +6,9 @@ import Adapter from './modules/adapter.js'; angular.module('ui.scroll', []) - .service('jqLiteExtras', () => new JQLiteExtras()) - .run(['jqLiteExtras', (jqLiteExtras) => - !window.jQuery ? jqLiteExtras.registerFor(angular.element) : null + .constant('JQLiteExtras', JQLiteExtras) + .run(['JQLiteExtras', (JQLiteExtras) => + !window.jQuery ? (new JQLiteExtras()).registerFor(angular.element) : null ]) .directive('uiScrollViewport', function () { diff --git a/test/.jshintrc b/test/.jshintrc new file mode 100644 index 00000000..70cbca97 --- /dev/null +++ b/test/.jshintrc @@ -0,0 +1,33 @@ +{ + "bitwise": true, + "curly": true, + "browser": true, + "eqeqeq": true, + "expr": true, + "esversion": 6, + "forin": true, + "freeze": true, + "futurehostile": true, + "iterator": true, + "jasmine": true, + "jquery": true, + "latedef": true, + "noarg": true, + "nocomma": true, + "node": true, + "nonbsp": true, + "nonew": true, + "smarttabs": true, + "strict": true, + "sub": true, + "trailing": true, + "undef": true, + "unused": true, + "globals": { + "angular": false, + "inject": false, + "runTest": true, + "runGridTest": false, + "Helper": true + } +} diff --git a/test/AdapterTestsSpec.js b/test/AdapterTestsSpec.js index ec3e1392..aefb5ec8 100644 --- a/test/AdapterTestsSpec.js +++ b/test/AdapterTestsSpec.js @@ -1,4 +1,3 @@ -/*global describe, beforeEach, module, it, expect, runTest */ describe('uiScroll', function () { 'use strict'; @@ -37,7 +36,7 @@ describe('uiScroll', function () { function (viewport, scope) { scope.adapter.applyUpdates( - function (item, scope) { + function(item, scope){ return [item + ' *' + scope.$index]; } ); @@ -68,8 +67,9 @@ describe('uiScroll', function () { scope.adapter.applyUpdates( function (item, scope) { - if (item === 'one') + if (item === 'one') { return [item + ' *' + scope.$index]; + } } ); @@ -100,8 +100,9 @@ describe('uiScroll', function () { scope.adapter.applyUpdates( function (item, scope) { - if (item === 'two') + if (item === 'two') { return [item + ' *' + scope.$index]; + } } ); @@ -132,8 +133,9 @@ describe('uiScroll', function () { scope.adapter.applyUpdates( function (item, scope) { - if (item === 'three') + if (item === 'three') { return [item + ' *' + scope.$index]; + } } ); @@ -164,8 +166,9 @@ describe('uiScroll', function () { scope.adapter.applyUpdates( function (item) { - if (item === 'one') + if (item === 'one') { return []; + } } ); @@ -192,8 +195,9 @@ describe('uiScroll', function () { scope.adapter.applyUpdates( function (item) { - if (item === 'two') + if (item === 'two') { return []; + } } ); @@ -220,8 +224,9 @@ describe('uiScroll', function () { scope.adapter.applyUpdates( function (item) { - if (item === 'three') + if (item === 'three') { return []; + } } ); @@ -248,8 +253,9 @@ describe('uiScroll', function () { scope.adapter.applyUpdates( function (item) { - if (item === 'one') + if (item === 'one') { return ['before one', item]; + } } ); @@ -285,8 +291,9 @@ describe('uiScroll', function () { scope.adapter.applyUpdates( function (item) { - if (item.text === 'one') + if (item.text === 'one') { return [item, {text: 'after one'}]; + } } ); @@ -321,8 +328,9 @@ describe('uiScroll', function () { scope.adapter.applyUpdates( function (item) { - if (item === 'two') + if (item === 'two') { return ['before two', item]; + } } ); @@ -357,8 +365,9 @@ describe('uiScroll', function () { scope.adapter.applyUpdates( function (item) { - if (item === 'three') + if (item === 'three') { return [item, 'after three']; + } } ); @@ -799,7 +808,7 @@ describe('uiScroll', function () { scope.adapter.applyUpdates( function (item, scope) { - if (scope.$index == 1) { + if (scope.$index === 1) { item.text += ' *' + scope.$index; return [ {text: item.text + ' before 1'}, @@ -856,7 +865,7 @@ describe('uiScroll', function () { scope.adapter.applyUpdates( function (item, scope) { - if (scope.$index == 2) { + if (scope.$index === 2) { item.text += ' *' + scope.$index; return [ {text: item.text + ' before 1'}, @@ -1252,4 +1261,4 @@ describe('uiScroll', function () { }); -}); \ No newline at end of file +}); diff --git a/test/AssigningSpec.js b/test/AssigningSpec.js index 12c2edce..9f08b778 100644 --- a/test/AssigningSpec.js +++ b/test/AssigningSpec.js @@ -1,4 +1,3 @@ -/*global describe, beforeEach, module, it, expect */ describe('uiScroll', function () { 'use strict'; diff --git a/test/BasicSetupSpec.js b/test/BasicSetupSpec.js index d732b31d..ffceaeb1 100644 --- a/test/BasicSetupSpec.js +++ b/test/BasicSetupSpec.js @@ -1,4 +1,3 @@ -/*global describe, beforeEach, module, inject, it, spyOn, expect, $, runTest, Helper */ describe('uiScroll', function() { 'use strict'; @@ -108,4 +107,4 @@ describe('uiScroll', function() { ); }); }); -}); \ No newline at end of file +}); diff --git a/test/BasicTestsSpec.js b/test/BasicTestsSpec.js index 01789725..af792169 100644 --- a/test/BasicTestsSpec.js +++ b/test/BasicTestsSpec.js @@ -1,4 +1,3 @@ -/*global describe, beforeEach, module, inject, it, spyOn, expect, runTest, Helper */ describe('uiScroll', function () { 'use strict'; @@ -799,4 +798,4 @@ describe('uiScroll', function () { }); }); -}); \ No newline at end of file +}); diff --git a/test/GridTestsSpec.js b/test/GridTestsSpec.js index 2aeb76a9..e57212e9 100644 --- a/test/GridTestsSpec.js +++ b/test/GridTestsSpec.js @@ -1,4 +1,3 @@ -/*global describe, beforeEach, module, it, expect, runGridTest */ describe('uiScroll', function () { 'use strict'; @@ -421,4 +420,4 @@ describe('uiScroll', function () { }); }); -}); \ No newline at end of file +}); diff --git a/test/PaddingsSpec.js b/test/PaddingsSpec.js index 5cb241eb..df80b4b1 100644 --- a/test/PaddingsSpec.js +++ b/test/PaddingsSpec.js @@ -1,4 +1,3 @@ -/*global describe, beforeEach, module, it, expect, runTest, Helper */ describe('uiScroll Paddings spec.', () => { 'use strict'; @@ -56,7 +55,7 @@ describe('uiScroll Paddings spec.', () => { } else { datasource.max--; - } + } } } } @@ -402,4 +401,4 @@ describe('uiScroll Paddings spec.', () => { ); }); -}); \ No newline at end of file +}); diff --git a/test/VisibilitySwitchingSpec.js b/test/VisibilitySwitchingSpec.js index 5cee1876..5774052a 100644 --- a/test/VisibilitySwitchingSpec.js +++ b/test/VisibilitySwitchingSpec.js @@ -1,4 +1,3 @@ -/*global describe, beforeEach, module, it, expect, runTest */ describe('uiScroll visibility.', () => { 'use strict'; diff --git a/test/config/karma.conf.files.js b/test/config/karma.conf.files.js index e89da37c..3570fb61 100644 --- a/test/config/karma.conf.files.js +++ b/test/config/karma.conf.files.js @@ -1,26 +1,31 @@ -var scrollerPath = '../../temp/' - -var files = [ - 'http://code.jquery.com/jquery-1.9.1.js', - 'https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.js', - 'https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular-mocks.js', +const files = [ + 'https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js', + 'https://ajax.googleapis.com/ajax/libs/angularjs/1.6.5/angular.js', + 'https://ajax.googleapis.com/ajax/libs/angularjs/1.6.5/angular-mocks.js', '../misc/test.css', '../misc/datasources.js', '../misc/scaffolding*.js', '../misc/helpers.js', - '../*Spec.js', { - pattern: scrollerPath + '*.js.map', - included: false + pattern: '../*Spec.js', + watched: false, + served: true, + included: true } ]; -module.exports.defaultFiles = files.concat([ - scrollerPath + 'ui-scroll.js', - scrollerPath + 'ui-scroll-grid.js' -]); +module.exports.development = [ + ...files, + '../../src/ui-scroll.js', + '../../src/ui-scroll-grid.js' +]; -module.exports.compressedFiles = files.concat([ - scrollerPath + 'ui-scroll.min.js', - scrollerPath + 'ui-scroll-grid.min.js' -]); +module.exports.production = [ + ...files, + '../../dist/ui-scroll.min.js', + '../../dist/ui-scroll-grid.min.js', + { + pattern: '../../dist/*.js.map', + included: false + } +]; diff --git a/test/config/karma.conf.js b/test/config/karma.conf.js index 01af418f..76ede4b8 100644 --- a/test/config/karma.conf.js +++ b/test/config/karma.conf.js @@ -1,73 +1,48 @@ -// Karma configuration -// Generated on Sat Aug 10 2013 19:47:03 GMT-0500 (Central Daylight Time) +const chrome = process.platform === 'linux' ? 'Chromium' : 'Chrome'; -module.exports = function (config) { - config.set({ +const ENV = (process.env.npm_lifecycle_event.indexOf('dev') === 0) ? 'development' : 'production'; - // base path, that will be used to resolve files and exclude - basePath: '', +const webpackSettings = ENV === 'development' ? { + preprocessors: { + '../../src/ui-scroll*.js': ['webpack', 'sourcemap'] + }, + webpack: require('../../webpack.config.js') +} : {}; +module.exports = function (config) { + 'use strict'; - // frameworks to use - frameworks: ['jasmine'], + config.set(Object.assign({ + basePath: '', - // list of files / patterns to load in the browser - files: require('./karma.conf.files.js').defaultFiles, + frameworks: ['jasmine'], + files: [ + ...require('./karma.conf.files.js')[ENV] + ], - // list of files to exclude exclude: [], - - // test results reporter to use - // possible values: 'dots', 'progress', 'junit', 'growl', 'coverage' reporters: ['dots'], + port: ENV === 'development' ? 9100 : 8082, - // web server port - port: 8082, - - - // enable / disable colors in the output (reporters and logs) colors: true, - - // level of logging - // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG logLevel: config.LOG_INFO, + autoWatch: ENV === 'development', - // enable / disable watching file and executing tests whenever any file changes - autoWatch: true, - + keepalive: ENV === 'development', - keepalive: true, - - - // Start these browsers, currently available: - // - Chrome - // - ChromeCanary - // - Firefox - // - Opera - // - Safari (only Mac) - // - PhantomJS - // - IE (only Windows) browsers: process.env.TRAVIS ? ['Firefox'] : - //['Chrome', 'IE', 'Firefox'], - ['Chrome'], - //browsers: ['Firefox'], - //browsers = ['Chrome']; - //browsers = ['IE']; - + [chrome], - // If browser does not capture in given timeout [ms], kill it captureTimeout: 60000, + singleRun: ENV !== 'development' - // Continuous Integration mode - // if true, it capture browsers, run tests and exit - singleRun: false - }); + }, webpackSettings)); }; diff --git a/test/jqliteExtrasSpec.js b/test/jqliteExtrasSpec.js index 45045cdb..9359538f 100644 --- a/test/jqliteExtrasSpec.js +++ b/test/jqliteExtrasSpec.js @@ -2,15 +2,14 @@ describe('\njqLite: testing against jQuery\n', function () { 'use strict'; var sandbox = angular.element('
    '); - var extras; beforeEach(module('ui.scroll')); beforeEach(function(){ angular.element(document).find('body').append(sandbox = angular.element('
    ')); - inject(function(jqLiteExtras) { + inject(function(JQLiteExtras) { extras = function(){}; - jqLiteExtras.registerFor(extras); + (new JQLiteExtras()).registerFor(extras); }); }); @@ -89,16 +88,12 @@ describe('\njqLite: testing against jQuery\n', function () { '
    some text w padding
    ', '
    some text w margin
    ', '
    some text w margin
    ', - '
    some text w margin
    ', - '
    some text w line height
    ' + '
    some text w margin
    ' ], function(element) { - /*function validateHeight(element) { - expect(extras.prototype.height.call(element)).toBe(element.height()); - var h = element.height(); - extras.prototype.height.call(element, h*2); - expect(extras.prototype.height.call(element)).toBe(h*2); - }*/ + // Since jQuery v3 the .hegth() results don't being rounded (https://github.com/jquery/jquery/pull/2454). + // So the element '
    some text w line height
    ' will cause the error -- + // Expected 18 to be 17.6 it('height(value) for ' + element, function() { (function (element) { diff --git a/test/misc/datasources.js b/test/misc/datasources.js index 4330d17e..d983fa6e 100644 --- a/test/misc/datasources.js +++ b/test/misc/datasources.js @@ -1,220 +1,228 @@ -angular.module('ui.scroll.test.datasources', []) - - .factory('myEmptyDatasource', [ - '$log', '$timeout', '$rootScope', - function() { - return { - get: function(index, count, success) { - success([]); - } - }; - } - ]) - - .factory('myDescriptoEmptyDatasource', [ - '$log', '$timeout', '$rootScope', - function() { - return { - get: function(descriptor, success) { - success([]); - } - }; - } - ]) - - .factory('myOnePageDatasource', [ - '$log', '$timeout', '$rootScope', - function() { - return { - get: function(index, count, success) { - if (index === 1) { - success(['one', 'two', 'three']); - } else { +(function() { + 'use strict'; + + angular.module('ui.scroll.test.datasources', []) + + .factory('myEmptyDatasource', [ + '$log', '$timeout', '$rootScope', + function() { + return { + get: function(index, count, success) { success([]); } - } - }; - } - ]) - - .factory('myOneBigPageDatasource', [ - '$log', '$timeout', '$rootScope', - function() { - return { - get: function(index, count, success) { - if (index === 1) { - var resultList = []; - for (var i = 1; i < 100; i++) { - resultList.push('item' + i); - } - success(resultList); - } else { + }; + } + ]) + + .factory('myDescriptoEmptyDatasource', [ + '$log', '$timeout', '$rootScope', + function() { + return { + get: function(descriptor, success) { success([]); } - } - }; - } - ]) - - .factory('myDescriptorOnePageDatasource', [ - '$log', '$timeout', '$rootScope', - function() { - return { - get: function(descriptor, success) { - if (descriptor.index === 1) { - success(['one', 'two', 'three']); - } else { - success([]); + }; + } + ]) + + .factory('myOnePageDatasource', [ + '$log', '$timeout', '$rootScope', + function() { + return { + get: function(index, count, success) { + if (index === 1) { + success(['one', 'two', 'three']); + } else { + success([]); + } } - } + }; } - } - ]) - - .factory('myObjectDatasource', [ - '$log', '$timeout', '$rootScope', - function() { - return { - get: function(index, count, success) { - if (index === 1) { - success([{ text: 'one' }, { text: 'two' }, { text: 'three' }]); - } else { - success([]); + ]) + + .factory('myOneBigPageDatasource', [ + '$log', '$timeout', '$rootScope', + function() { + return { + get: function(index, count, success) { + if (index === 1) { + var resultList = []; + for (var i = 1; i < 100; i++) { + resultList.push('item' + i); + } + success(resultList); + } else { + success([]); + } } - } - }; - } - ]) - - .factory('myMultipageDatasource', [ - '$log', '$timeout', '$rootScope', - function() { - return { - get: function(index, count, success) { - var result = []; - for (var i = index; i < index + count; i++) { - if (i > 0 && i <= 20) - result.push('item' + i); + }; + } + ]) + + .factory('myDescriptorOnePageDatasource', [ + '$log', '$timeout', '$rootScope', + function() { + return { + get: function(descriptor, success) { + if (descriptor.index === 1) { + success(['one', 'two', 'three']); + } else { + success([]); + } } - success(result); - } - }; - } - ]) - - .factory('anotherDatasource', [ - '$log', '$timeout', '$rootScope', - function() { - return { - get: function(index, count, success) { - var result = []; - for (var i = index; i < index + count; i++) { - if (i > -3 && i < 1) - result.push('item' + i); + }; + } + ]) + + .factory('myObjectDatasource', [ + '$log', '$timeout', '$rootScope', + function() { + return { + get: function(index, count, success) { + if (index === 1) { + success([{ text: 'one' }, { text: 'two' }, { text: 'three' }]); + } else { + success([]); + } } - success(result); - } - }; - } - ]) - - .factory('myEdgeDatasource', [ - '$log', '$timeout', '$rootScope', - function() { - return { - get: function(index, count, success) { - var result = []; - for (var i = index; i < index + count; i++) { - if (i > -6 && i <= 6) - result.push('item' + i); + }; + } + ]) + + .factory('myMultipageDatasource', [ + '$log', '$timeout', '$rootScope', + function() { + return { + get: function(index, count, success) { + var result = []; + for (var i = index; i < index + count; i++) { + if (i > 0 && i <= 20) { + result.push('item' + i); + } + } + success(result); } - success(result); - } - }; - } - ]) - - .factory('myDatasourceToPreventScrollBubbling', [ - '$log', '$timeout', '$rootScope', - function() { - return { - get: function(index, count, success) { - var result = []; - for (var i = index; i < index + count; i++) { - if (i < -6 || i > 20) { - break; + }; + } + ]) + + .factory('anotherDatasource', [ + '$log', '$timeout', '$rootScope', + function() { + return { + get: function(index, count, success) { + var result = []; + for (var i = index; i < index + count; i++) { + if (i > -3 && i < 1) { + result.push('item' + i); + } } - result.push('item' + i); + success(result); } - success(result); - } - }; - } - ]) - - .factory('myInfiniteDatasource', [ - '$log', '$timeout', '$rootScope', - function() { - return { - get: function(index, count, success) { - var result = []; - for (var i = index; i < index + count; i++) { - result.push('item' + i); + }; + } + ]) + + .factory('myEdgeDatasource', [ + '$log', '$timeout', '$rootScope', + function() { + return { + get: function(index, count, success) { + var result = []; + for (var i = index; i < index + count; i++) { + if (i > -6 && i <= 6) { + result.push('item' + i); + } + } + success(result); } - success(result); - } - }; - } - ]) - - .factory('myGridDatasource', [ - '$log', '$timeout', '$rootScope', - function() { - return { - get: function(index, count, success) { - var result = []; - for (var i = index; i < index + count; i++) { - result.push({ - col0: 'col0', - col1: 'col1', - col2: 'col2', - col3: 'col3' - }); + }; + } + ]) + + .factory('myDatasourceToPreventScrollBubbling', [ + '$log', '$timeout', '$rootScope', + function() { + return { + get: function(index, count, success) { + var result = []; + for (var i = index; i < index + count; i++) { + if (i < -6 || i > 20) { + break; + } + result.push('item' + i); + } + success(result); } - success(result); - } - }; - } - ]) - - - .factory('myResponsiveDatasource', function() { - var datasource = { - data: [], - min: 1, - max: 30, - init: function() { - this.data = []; - for (var i = this.min; i <= this.max; i++) { - this.data.push('item' + i); + }; + } + ]) + + .factory('myInfiniteDatasource', [ + '$log', '$timeout', '$rootScope', + function() { + return { + get: function(index, count, success) { + var result = []; + for (var i = index; i < index + count; i++) { + result.push('item' + i); + } + success(result); } - }, - getItem: function(index) { - return this.data[index - this.min]; - }, - get: function(index, count, success) { - var result = []; - var start = Math.max(this.min, index); - var end = Math.min(index + count - 1, this.max); - if (start <= end) { - for (var i = start; i <= end; i++) { - result.push(this.getItem(i)); + }; + } + ]) + + .factory('myGridDatasource', [ + '$log', '$timeout', '$rootScope', + function() { + return { + get: function(index, count, success) { + var result = []; + for (var i = index; i < index + count; i++) { + result.push({ + col0: 'col0', + col1: 'col1', + col2: 'col2', + col3: 'col3' + }); } + success(result); } - success(result); - } - }; - datasource.init(); - return datasource; - } - ); \ No newline at end of file + }; + } + ]) + + + .factory('myResponsiveDatasource', function() { + var datasource = { + data: [], + min: 1, + max: 30, + init: function() { + this.data = []; + for (var i = this.min; i <= this.max; i++) { + this.data.push('item' + i); + } + }, + getItem: function(index) { + return this.data[index - this.min]; + }, + get: function(index, count, success) { + var result = []; + var start = Math.max(this.min, index); + var end = Math.min(index + count - 1, this.max); + if (start <= end) { + for (var i = start; i <= end; i++) { + result.push(this.getItem(i)); + } + } + success(result); + } + }; + datasource.init(); + return datasource; + } + ); + +})(); \ No newline at end of file diff --git a/test/misc/helpers.js b/test/misc/helpers.js index c2380cd5..cf272a17 100644 --- a/test/misc/helpers.js +++ b/test/misc/helpers.js @@ -1,15 +1,24 @@ -const Helper = { - getTopPadding(viewport) { - const viewportChildren = viewport.children(); - const topPadding = viewportChildren[0]; - return parseInt(topPadding.style.height, 10); - }, - getBottomPadding: (viewport) => { - const viewportChildren = viewport.children(); - const bottomPadding = viewportChildren[viewportChildren.length - 1]; - return parseInt(bottomPadding.style.height, 10); - } +let Helper; -}; \ No newline at end of file +(function() { + 'use strict'; + + Helper = { + + getTopPadding: (viewport) => { + const viewportChildren = viewport.children(); + const topPadding = viewportChildren[0]; + return parseInt(topPadding.style.height, 10); + }, + + getBottomPadding: (viewport) => { + const viewportChildren = viewport.children(); + const bottomPadding = viewportChildren[viewportChildren.length - 1]; + return parseInt(bottomPadding.style.height, 10); + } + + }; + +})(); diff --git a/test/misc/scaffolding.js b/test/misc/scaffolding.js index a63d00cf..a4e426a9 100644 --- a/test/misc/scaffolding.js +++ b/test/misc/scaffolding.js @@ -1,4 +1,7 @@ +/* exported runTest */ + function createHtml(settings) { + 'use strict'; var viewportStyle = ' style="height:' + (settings.viewportHeight || 200) + 'px"'; var itemStyle = settings.itemHeight ? ' style="height:' + settings.itemHeight + 'px"' : ''; var bufferSize = settings.bufferSize ? ' buffer-size="' + settings.bufferSize + '"' : ''; @@ -21,7 +24,9 @@ function createHtml(settings) { '
    '; } -function finalize(scroller, options = {}, scope, $timeout) { +function finalize(scroller, options, scope, $timeout) { + 'use strict'; + options = options || {}; scroller.remove(); if (typeof options.cleanupTest === 'function') { @@ -29,7 +34,9 @@ function finalize(scroller, options = {}, scope, $timeout) { } } -function runTest(scrollSettings, run, options = {}) { +function runTest(scrollSettings, run, options) { + 'use strict'; + options = options || {}; inject(function($rootScope, $compile, $window, $timeout) { var scroller = angular.element(createHtml(scrollSettings)); var scope = $rootScope.$new(); diff --git a/test/misc/scaffoldingGrid.js b/test/misc/scaffoldingGrid.js index fd32b7ee..5f9a3408 100644 --- a/test/misc/scaffoldingGrid.js +++ b/test/misc/scaffoldingGrid.js @@ -1,4 +1,7 @@ +/* exported runGridTest */ + function createGridHtml (settings) { + 'use strict'; var viewportStyle = ' style="height:' + (settings.viewportHeight || 200) + 'px"'; var columns = ['col0', 'col1', 'col2', 'col3']; @@ -26,7 +29,9 @@ function createGridHtml (settings) { return html; } -function finalize(scroller, options = {}, scope, $timeout) { +function finalize(scroller, options, scope, $timeout) { + 'use strict'; + options = options || {}; scroller.remove(); if (typeof options.cleanupTest === 'function') { @@ -34,7 +39,9 @@ function finalize(scroller, options = {}, scope, $timeout) { } } -function runGridTest(scrollSettings, run, options = {}) { +function runGridTest(scrollSettings, run, options) { + 'use strict'; + options = options || {}; inject(function($rootScope, $compile, $window, $timeout) { var scroller = angular.element(createGridHtml(scrollSettings)); var scope = $rootScope.$new(); diff --git a/webpack.config.js b/webpack.config.js index 21caae19..4e3cef98 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,49 +1,165 @@ -var path = require('path'); -var webpack = require('webpack'); - -var packageJSON = require('./package.json'); - -var getBanner = function (compressed) { - return packageJSON.name + (compressed ? ' (compressed)' : ' (uncompressed)') + '\n' + - packageJSON.homepage + '\n' + - 'Version: ' + packageJSON.version + ' -- ' + (new Date()).toISOString() + '\n' + - 'License: ' + packageJSON.license; -}; - -module.exports.config = { - entry: { - 'ui-scroll': './src/ui-scroll.js', - 'ui-scroll-grid': './src/ui-scroll-grid.js' - }, - output: { - path: path.join(__dirname, 'temp'), - filename: '[name].js' - }, - cache: false, - devtool: 'source-map', - module: { - loaders: [ - { - test: /\.js$/, - exclude: /node_modules/, - loader: 'babel-loader?presets[]=es2015' - } - ] - }, - plugins: [ - new webpack.BannerPlugin(getBanner(false)) - ] -}; - -module.exports.compressedPlugins = [ - new webpack.optimize.UglifyJsPlugin({ - sourceMap: true, - compress: { - warnings: true, - }, - output: { - comments: false, - }, - }), - new webpack.BannerPlugin(getBanner(true)) -]; +'use strict'; + +const path = require('path'); +const fs = require('fs'); +const glob = require('glob'); +const webpack = require('webpack'); +const CleanWebpackPlugin = require('clean-webpack-plugin'); +const CopyWebpackPlugin = require('copy-webpack-plugin'); + +const packageJSON = require('./package.json'); + +const getBanner = () => + packageJSON.name + '\n' + + packageJSON.homepage + '\n' + + 'Version: ' + packageJSON.version + ' -- ' + (new Date()).toISOString() + '\n' + + 'License: ' + packageJSON.license; + +const scriptName = process.env.npm_lifecycle_event; +const ENV = scriptName.indexOf('dev') === 0 ? 'development' : 'production'; +const isTest = scriptName.indexOf('test') >= 0 ? true : false; +console.log('***** webpack runs in ' + ENV + (isTest ? ' (test)' : '') + ' environment\n'); + +const devServerPort = 5005; +const devServerHost = 'localhost'; +let configEnv; + +if (ENV === 'development') { + configEnv = { + entry: isTest ? ({ + 'test': glob.sync(path.resolve(__dirname, 'test/*.js')) + }) : ({}), + + output: { + filename: '[name].js', + publicPath: '/' + }, + + rules: [ + isTest ? ({ + enforce: 'pre', + test: /\.js$/, + exclude: /node_modules/, + include: path.resolve(__dirname, 'test'), + use: [{ + loader: 'jshint-loader' + }] + }) : ({}) + ], + + devtool: 'inline-source-map', + + plugins: [], + + devServer: !isTest ? { + historyApiFallback: { + rewrites: [ + { from: /\/*\/*\.html$/, to: (context) => '/demo' + context.parsedUrl.pathname }, + { from: /\/*\/*\.css$/, to: (context) => '/demo' + context.parsedUrl.pathname }, + { from: /\/*\/*\.js$/, to: (context) => '/demo' + context.parsedUrl.pathname }, + { from: /\/ui-scroll-demo\.gif$/, to: '/demo/ui-scroll-demo.gif' }, + { from: /^\/$/, to: '/demo/index.html' } + ] + }, + proxy: { + '/dist': { + target: 'http://' + devServerHost + ':' + devServerPort, + pathRewrite: { '^/dist': '' } + } + }, + inline: true, + quiet: false, + stats: { + modules: false, + errors: true, + warnings: true + }, + port: devServerPort, + host: devServerHost, + publicPath: '/' + } : {}, + + watch: true + } +} + +if (ENV === 'production') { + configEnv = { + entry: { + 'ui-scroll.min': path.resolve(__dirname, 'src/ui-scroll.js'), + 'ui-scroll-grid.min': path.resolve(__dirname, 'src/ui-scroll-grid.js') + }, + + output: { + path: path.join(__dirname, 'dist'), + filename: '[name].js' + }, + + rules: [], + + devtool: 'source-map', + + plugins: [ + new CleanWebpackPlugin('dist', { + root: __dirname + }), + new webpack.optimize.UglifyJsPlugin({ + sourceMap: true, + compress: { + warnings: true, + }, + output: { + comments: false, + }, + include: /\.min\.js$/ + }), + new CopyWebpackPlugin([ + { from: 'src/ui-scroll-jqlite.js', to: 'ui-scroll-jqlite.min.js' }, + { from: 'src/ui-scroll-jqlite.js', to: 'ui-scroll-jqlite.js' } + ], { copyUnmodified: true }), + new webpack.BannerPlugin(getBanner()) + ], + + devServer: {}, + + watch: false + } +} + +module.exports = { + entry: Object.assign({ + 'ui-scroll': path.resolve(__dirname, 'src/ui-scroll.js'), + 'ui-scroll-grid': path.resolve(__dirname, 'src/ui-scroll-grid.js') + }, configEnv.entry), + + output: configEnv.output, + + cache: false, + + devtool: configEnv.devtool, + + module: { + rules: [...configEnv.rules, + { + test: /\.js$/, + exclude: /node_modules/, + loader: 'babel-loader' + }, + { + enforce: 'pre', + test: /\.js$/, + exclude: /node_modules/, + include: path.resolve(__dirname, 'src'), + use: [{ + loader: 'jshint-loader' + }] + } + ] + }, + + plugins: configEnv.plugins, + + devServer: configEnv.devServer, + + watch: configEnv.watch +}; \ No newline at end of file