@everymatrix/stage-mm-verification-report 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/chunk-A3NTIEMP.js +1 -0
  2. package/chunk-CAY35YP7.js +7 -0
  3. package/chunk-H3QHLLCN.js +1 -0
  4. package/chunk-KE4BCZO4.js +851 -0
  5. package/chunk-OHPEWN32.js +1198 -0
  6. package/chunk-WSQOM5HU.js +1 -0
  7. package/component-lib.js +1 -0
  8. package/index.html +12 -0
  9. package/main.js +3264 -0
  10. package/modules/angular/LICENSE.md +21 -0
  11. package/modules/angular/README.md +67 -0
  12. package/modules/angular/angular-csp.css +25 -0
  13. package/modules/angular/angular.js +36600 -0
  14. package/modules/angular/angular.min.js +352 -0
  15. package/modules/angular/angular.min.js.gzip +0 -0
  16. package/modules/angular/angular.min.js.map +8 -0
  17. package/modules/angular/bower.json +9 -0
  18. package/modules/angular/index.js +2 -0
  19. package/modules/angular/package.json +25 -0
  20. package/modules/angular-ui-grid/CHANGELOG.md +1973 -0
  21. package/modules/angular-ui-grid/README.md +59 -0
  22. package/modules/angular-ui-grid/css/ui-grid.cellnav.css +25 -0
  23. package/modules/angular-ui-grid/css/ui-grid.cellnav.min.css +1 -0
  24. package/modules/angular-ui-grid/css/ui-grid.core.css +866 -0
  25. package/modules/angular-ui-grid/css/ui-grid.core.min.css +5 -0
  26. package/modules/angular-ui-grid/css/ui-grid.edit.css +23 -0
  27. package/modules/angular-ui-grid/css/ui-grid.edit.min.css +1 -0
  28. package/modules/angular-ui-grid/css/ui-grid.empty-base-layer.css +6 -0
  29. package/modules/angular-ui-grid/css/ui-grid.empty-base-layer.min.css +1 -0
  30. package/modules/angular-ui-grid/css/ui-grid.expandable.css +16 -0
  31. package/modules/angular-ui-grid/css/ui-grid.expandable.min.css +1 -0
  32. package/modules/angular-ui-grid/css/ui-grid.exporter.css +0 -0
  33. package/modules/angular-ui-grid/css/ui-grid.exporter.min.css +0 -0
  34. package/modules/angular-ui-grid/css/ui-grid.grouping.css +3 -0
  35. package/modules/angular-ui-grid/css/ui-grid.grouping.min.css +1 -0
  36. package/modules/angular-ui-grid/css/ui-grid.importer.css +0 -0
  37. package/modules/angular-ui-grid/css/ui-grid.importer.min.css +0 -0
  38. package/modules/angular-ui-grid/css/ui-grid.move-columns.css +9 -0
  39. package/modules/angular-ui-grid/css/ui-grid.move-columns.min.css +1 -0
  40. package/modules/angular-ui-grid/css/ui-grid.pagination.css +299 -0
  41. package/modules/angular-ui-grid/css/ui-grid.pagination.min.css +1 -0
  42. package/modules/angular-ui-grid/css/ui-grid.pinning.css +67 -0
  43. package/modules/angular-ui-grid/css/ui-grid.pinning.min.css +1 -0
  44. package/modules/angular-ui-grid/css/ui-grid.resize-columns.css +38 -0
  45. package/modules/angular-ui-grid/css/ui-grid.resize-columns.min.css +1 -0
  46. package/modules/angular-ui-grid/css/ui-grid.row-edit.css +9 -0
  47. package/modules/angular-ui-grid/css/ui-grid.row-edit.min.css +1 -0
  48. package/modules/angular-ui-grid/css/ui-grid.selection.css +25 -0
  49. package/modules/angular-ui-grid/css/ui-grid.selection.min.css +1 -0
  50. package/modules/angular-ui-grid/css/ui-grid.tree-base.css +4 -0
  51. package/modules/angular-ui-grid/css/ui-grid.tree-base.min.css +1 -0
  52. package/modules/angular-ui-grid/css/ui-grid.tree-view.css +6 -0
  53. package/modules/angular-ui-grid/css/ui-grid.tree-view.min.css +1 -0
  54. package/modules/angular-ui-grid/css/ui-grid.validate.css +3 -0
  55. package/modules/angular-ui-grid/css/ui-grid.validate.min.css +1 -0
  56. package/modules/angular-ui-grid/fonts/ui-grid.eot +0 -0
  57. package/modules/angular-ui-grid/fonts/ui-grid.svg +56 -0
  58. package/modules/angular-ui-grid/fonts/ui-grid.ttf +0 -0
  59. package/modules/angular-ui-grid/fonts/ui-grid.woff +0 -0
  60. package/modules/angular-ui-grid/less/animation.less +85 -0
  61. package/modules/angular-ui-grid/less/body.less +84 -0
  62. package/modules/angular-ui-grid/less/cell.less +46 -0
  63. package/modules/angular-ui-grid/less/cellnav.less +29 -0
  64. package/modules/angular-ui-grid/less/core.less +11 -0
  65. package/modules/angular-ui-grid/less/edit.less +27 -0
  66. package/modules/angular-ui-grid/less/elements.less +156 -0
  67. package/modules/angular-ui-grid/less/emptyBaseLayer.less +8 -0
  68. package/modules/angular-ui-grid/less/expandable.less +29 -0
  69. package/modules/angular-ui-grid/less/exporter.less +4 -0
  70. package/modules/angular-ui-grid/less/footer.less +76 -0
  71. package/modules/angular-ui-grid/less/grid.less +86 -0
  72. package/modules/angular-ui-grid/less/grouping.less +5 -0
  73. package/modules/angular-ui-grid/less/header.less +250 -0
  74. package/modules/angular-ui-grid/less/icons.less +151 -0
  75. package/modules/angular-ui-grid/less/importer.less +4 -0
  76. package/modules/angular-ui-grid/less/main.less +2 -0
  77. package/modules/angular-ui-grid/less/menu.less +91 -0
  78. package/modules/angular-ui-grid/less/moveColumns.less +12 -0
  79. package/modules/angular-ui-grid/less/pagination.less +297 -0
  80. package/modules/angular-ui-grid/less/pinning.less +86 -0
  81. package/modules/angular-ui-grid/less/resizeColumns.less +53 -0
  82. package/modules/angular-ui-grid/less/rowEdit.less +19 -0
  83. package/modules/angular-ui-grid/less/rtl.less +67 -0
  84. package/modules/angular-ui-grid/less/selection.less +29 -0
  85. package/modules/angular-ui-grid/less/sorting.less +16 -0
  86. package/modules/angular-ui-grid/less/treeBase.less +6 -0
  87. package/modules/angular-ui-grid/less/treeView.less +8 -0
  88. package/modules/angular-ui-grid/less/validate.less +5 -0
  89. package/modules/angular-ui-grid/less/variables.less +90 -0
  90. package/modules/angular-ui-grid/package.json +144 -0
  91. package/modules/angular-ui-grid/ui-grid.auto-resize.js +69 -0
  92. package/modules/angular-ui-grid/ui-grid.auto-resize.min.js +6 -0
  93. package/modules/angular-ui-grid/ui-grid.cellnav.js +1181 -0
  94. package/modules/angular-ui-grid/ui-grid.cellnav.min.js +6 -0
  95. package/modules/angular-ui-grid/ui-grid.core.js +12737 -0
  96. package/modules/angular-ui-grid/ui-grid.core.min.js +6 -0
  97. package/modules/angular-ui-grid/ui-grid.css +3208 -0
  98. package/modules/angular-ui-grid/ui-grid.edit.js +1325 -0
  99. package/modules/angular-ui-grid/ui-grid.edit.min.js +6 -0
  100. package/modules/angular-ui-grid/ui-grid.empty-base-layer.js +178 -0
  101. package/modules/angular-ui-grid/ui-grid.empty-base-layer.min.js +6 -0
  102. package/modules/angular-ui-grid/ui-grid.expandable.js +651 -0
  103. package/modules/angular-ui-grid/ui-grid.expandable.min.js +6 -0
  104. package/modules/angular-ui-grid/ui-grid.exporter.js +1777 -0
  105. package/modules/angular-ui-grid/ui-grid.exporter.min.js +6 -0
  106. package/modules/angular-ui-grid/ui-grid.grouping.js +1291 -0
  107. package/modules/angular-ui-grid/ui-grid.grouping.min.js +6 -0
  108. package/modules/angular-ui-grid/ui-grid.importer.js +791 -0
  109. package/modules/angular-ui-grid/ui-grid.importer.min.js +6 -0
  110. package/modules/angular-ui-grid/ui-grid.infinite-scroll.js +552 -0
  111. package/modules/angular-ui-grid/ui-grid.infinite-scroll.min.js +6 -0
  112. package/modules/angular-ui-grid/ui-grid.js +30867 -0
  113. package/modules/angular-ui-grid/ui-grid.language.all.js +3214 -0
  114. package/modules/angular-ui-grid/ui-grid.language.all.min.js +6 -0
  115. package/modules/angular-ui-grid/ui-grid.language.ar.js +118 -0
  116. package/modules/angular-ui-grid/ui-grid.language.ar.min.js +6 -0
  117. package/modules/angular-ui-grid/ui-grid.language.bg.js +115 -0
  118. package/modules/angular-ui-grid/ui-grid.language.bg.min.js +6 -0
  119. package/modules/angular-ui-grid/ui-grid.language.cs.js +96 -0
  120. package/modules/angular-ui-grid/ui-grid.language.cs.min.js +6 -0
  121. package/modules/angular-ui-grid/ui-grid.language.da.js +90 -0
  122. package/modules/angular-ui-grid/ui-grid.language.da.min.js +6 -0
  123. package/modules/angular-ui-grid/ui-grid.language.de.js +133 -0
  124. package/modules/angular-ui-grid/ui-grid.language.de.min.js +6 -0
  125. package/modules/angular-ui-grid/ui-grid.language.es-ct.js +133 -0
  126. package/modules/angular-ui-grid/ui-grid.language.es-ct.min.js +6 -0
  127. package/modules/angular-ui-grid/ui-grid.language.es.js +106 -0
  128. package/modules/angular-ui-grid/ui-grid.language.es.min.js +6 -0
  129. package/modules/angular-ui-grid/ui-grid.language.fa.js +93 -0
  130. package/modules/angular-ui-grid/ui-grid.language.fa.min.js +6 -0
  131. package/modules/angular-ui-grid/ui-grid.language.fi.js +76 -0
  132. package/modules/angular-ui-grid/ui-grid.language.fi.min.js +6 -0
  133. package/modules/angular-ui-grid/ui-grid.language.fr.js +128 -0
  134. package/modules/angular-ui-grid/ui-grid.language.fr.min.js +6 -0
  135. package/modules/angular-ui-grid/ui-grid.language.he.js +71 -0
  136. package/modules/angular-ui-grid/ui-grid.language.he.min.js +6 -0
  137. package/modules/angular-ui-grid/ui-grid.language.hy.js +76 -0
  138. package/modules/angular-ui-grid/ui-grid.language.hy.min.js +6 -0
  139. package/modules/angular-ui-grid/ui-grid.language.is.js +118 -0
  140. package/modules/angular-ui-grid/ui-grid.language.is.min.js +6 -0
  141. package/modules/angular-ui-grid/ui-grid.language.it.js +112 -0
  142. package/modules/angular-ui-grid/ui-grid.language.it.min.js +6 -0
  143. package/modules/angular-ui-grid/ui-grid.language.ja.js +118 -0
  144. package/modules/angular-ui-grid/ui-grid.language.ja.min.js +6 -0
  145. package/modules/angular-ui-grid/ui-grid.language.ko.js +77 -0
  146. package/modules/angular-ui-grid/ui-grid.language.ko.min.js +6 -0
  147. package/modules/angular-ui-grid/ui-grid.language.nl.js +91 -0
  148. package/modules/angular-ui-grid/ui-grid.language.nl.min.js +6 -0
  149. package/modules/angular-ui-grid/ui-grid.language.no.js +115 -0
  150. package/modules/angular-ui-grid/ui-grid.language.no.min.js +6 -0
  151. package/modules/angular-ui-grid/ui-grid.language.pl.js +126 -0
  152. package/modules/angular-ui-grid/ui-grid.language.pl.min.js +6 -0
  153. package/modules/angular-ui-grid/ui-grid.language.pt-br.js +133 -0
  154. package/modules/angular-ui-grid/ui-grid.language.pt-br.min.js +6 -0
  155. package/modules/angular-ui-grid/ui-grid.language.pt.js +133 -0
  156. package/modules/angular-ui-grid/ui-grid.language.pt.min.js +6 -0
  157. package/modules/angular-ui-grid/ui-grid.language.ro.js +112 -0
  158. package/modules/angular-ui-grid/ui-grid.language.ro.min.js +6 -0
  159. package/modules/angular-ui-grid/ui-grid.language.rs-lat.js +126 -0
  160. package/modules/angular-ui-grid/ui-grid.language.rs-lat.min.js +6 -0
  161. package/modules/angular-ui-grid/ui-grid.language.ru.js +115 -0
  162. package/modules/angular-ui-grid/ui-grid.language.ru.min.js +6 -0
  163. package/modules/angular-ui-grid/ui-grid.language.sk.js +127 -0
  164. package/modules/angular-ui-grid/ui-grid.language.sk.min.js +6 -0
  165. package/modules/angular-ui-grid/ui-grid.language.sv.js +126 -0
  166. package/modules/angular-ui-grid/ui-grid.language.sv.min.js +6 -0
  167. package/modules/angular-ui-grid/ui-grid.language.ta.js +87 -0
  168. package/modules/angular-ui-grid/ui-grid.language.ta.min.js +6 -0
  169. package/modules/angular-ui-grid/ui-grid.language.tr.js +112 -0
  170. package/modules/angular-ui-grid/ui-grid.language.tr.min.js +6 -0
  171. package/modules/angular-ui-grid/ui-grid.language.ua.js +112 -0
  172. package/modules/angular-ui-grid/ui-grid.language.ua.min.js +6 -0
  173. package/modules/angular-ui-grid/ui-grid.language.zh-cn.js +112 -0
  174. package/modules/angular-ui-grid/ui-grid.language.zh-cn.min.js +6 -0
  175. package/modules/angular-ui-grid/ui-grid.language.zh-tw.js +77 -0
  176. package/modules/angular-ui-grid/ui-grid.language.zh-tw.min.js +6 -0
  177. package/modules/angular-ui-grid/ui-grid.min.css +5 -0
  178. package/modules/angular-ui-grid/ui-grid.min.js +6 -0
  179. package/modules/angular-ui-grid/ui-grid.move-columns.js +582 -0
  180. package/modules/angular-ui-grid/ui-grid.move-columns.min.js +6 -0
  181. package/modules/angular-ui-grid/ui-grid.pagination.js +510 -0
  182. package/modules/angular-ui-grid/ui-grid.pagination.min.js +6 -0
  183. package/modules/angular-ui-grid/ui-grid.pinning.js +281 -0
  184. package/modules/angular-ui-grid/ui-grid.pinning.min.js +6 -0
  185. package/modules/angular-ui-grid/ui-grid.resize-columns.js +574 -0
  186. package/modules/angular-ui-grid/ui-grid.resize-columns.min.js +6 -0
  187. package/modules/angular-ui-grid/ui-grid.row-edit.js +717 -0
  188. package/modules/angular-ui-grid/ui-grid.row-edit.min.js +6 -0
  189. package/modules/angular-ui-grid/ui-grid.saveState.js +831 -0
  190. package/modules/angular-ui-grid/ui-grid.saveState.min.js +6 -0
  191. package/modules/angular-ui-grid/ui-grid.selection.js +1196 -0
  192. package/modules/angular-ui-grid/ui-grid.selection.min.js +6 -0
  193. package/modules/angular-ui-grid/ui-grid.tree-base.js +1743 -0
  194. package/modules/angular-ui-grid/ui-grid.tree-base.min.js +6 -0
  195. package/modules/angular-ui-grid/ui-grid.tree-view.js +218 -0
  196. package/modules/angular-ui-grid/ui-grid.tree-view.min.js +6 -0
  197. package/modules/angular-ui-grid/ui-grid.validate.js +589 -0
  198. package/modules/angular-ui-grid/ui-grid.validate.min.js +6 -0
  199. package/package.json +8 -0
  200. package/polyfills.js +2 -0
  201. package/styles.css +1 -0
@@ -0,0 +1,6 @@
1
+ /*!
2
+ * ui-grid - v4.12.7 - 2024-04-12
3
+ * http://ui-grid.info/
4
+ * Copyright (c) 2024 ; License: MIT
5
+ */
6
+ !function(){"use strict";var e=angular.module("ui.grid.importer",["ui.grid"]);e.constant("uiGridImporterConstants",{featureName:"importer"}),e.service("uiGridImporterService",["$q","uiGridConstants","uiGridImporterConstants","gridUtil","$compile","$interval","i18nService","$window",function(e,i,r,o,t,n,a,l){var s={initializeGrid:function(e,r){r.importer={$scope:e},this.defaultGridOptions(r.options);var e={importer:{}},t={importer:{importFile:function(e){s.importThisFile(r,e)}}};r.api.registerEventsFromObject(e),r.api.registerMethodsFromObject(t),r.options.enableImporter&&r.options.importerShowMenu&&(r.api.core.addToGridMenu?s.addToMenu(r):n(function(){r.api.core.addToGridMenu&&s.addToMenu(r)},100,1))},defaultGridOptions:function(e){e.enableImporter||void 0===e.enableImporter?l.hasOwnProperty("File")&&l.hasOwnProperty("FileReader")&&l.hasOwnProperty("FileList")&&l.hasOwnProperty("Blob")?e.enableImporter=!0:(o.logError("The File APIs are not fully supported in this browser, grid importer cannot be used."),e.enableImporter=!1):e.enableImporter=!1,e.importerProcessHeaders=e.importerProcessHeaders||s.processHeaders,e.importerHeaderFilter=e.importerHeaderFilter||function(e){return e},e.importerErrorCallback&&"function"==typeof e.importerErrorCallback||delete e.importerErrorCallback,!0!==e.enableImporter||e.importerDataAddCallback||(o.logError("You have not set an importerDataAddCallback, importer is disabled"),e.enableImporter=!1),e.importerShowMenu=!1!==e.importerShowMenu,e.importerObjectCallback=e.importerObjectCallback||function(e,r){return r}},addToMenu:function(e){e.api.core.addToGridMenu(e,[{title:a.getSafeText("gridMenu.importerTitle"),order:150},{templateUrl:"ui-grid/importerMenuItemContainer",action:function(){this.grid.api.importer.importAFile(e)},order:151}])},importThisFile:function(e,r){var t;r?(t=new FileReader,"application/json"===r.type?t.onload=s.importJsonClosure(e):t.onload=s.importCsvClosure(e),t.readAsText(r)):o.logError("No file object provided to importThisFile, should be impossible, aborting")},importJsonClosure:function(i){return function(e){var r,t=[],e=s.parseJson(i,e);null!==e&&(e.forEach(function(e){r=s.newObject(i),angular.extend(r,e),r=i.options.importerObjectCallback(i,r),t.push(r)}),s.addObjects(i,t))}},parseJson:function(r,t){var e;try{e=JSON.parse(t.target.result)}catch(e){return void s.alertError(r,"importer.invalidJson","File could not be processed, is it valid json? Content was: ",t.target.result)}return Array.isArray(e)?e:(s.alertError(r,"importer.jsonNotarray","Import failed, file is not an array, file was: ",t.target.result),[])},importCsvClosure:function(t){return function(e){var r=s.parseCsv(e);!r||r.length<1?s.alertError(t,"importer.invalidCsv","File could not be processed, is it valid csv? Content was: ",e.target.result):(r=s.createCsvObjects(t,r))&&0!==r.length?s.addObjects(t,r):s.alertError(t,"importer.noObjects","Objects were not able to be derived, content was: ",e.target.result)}},parseCsv:function(e){e=e.target.result;return CSV.parse(e)},createCsvObjects:function(r,e){var t,i,o=r.options.importerProcessHeaders(r,e.shift());return o&&0!==o.length?(t=[],e.forEach(function(e){i=s.newObject(r),null!==e&&e.forEach(function(e,r){null!==o[r]&&(i[o[r]]=e)}),i=r.options.importerObjectCallback(r,i),t.push(i)}),t):(s.alertError(r,"importer.noHeaders","Column names could not be derived, content was: ",e),[])},processHeaders:function(e,r){var t,i=[];return e.options.columnDefs&&0!==e.options.columnDefs.length?(t=s.flattenColumnDefs(e,e.options.columnDefs),r.forEach(function(e){t[e]?i.push(t[e]):t[e.toLowerCase()]?i.push(t[e.toLowerCase()]):i.push(null)})):r.forEach(function(e){i.push(e.replace(/[^0-9a-zA-Z\-_]/g,"_"))}),i},flattenColumnDefs:function(r,e){var t={};return e.forEach(function(e){e.name&&(t[e.name]=e.field||e.name,t[e.name.toLowerCase()]=e.field||e.name),e.field&&(t[e.field]=e.field||e.name,t[e.field.toLowerCase()]=e.field||e.name),e.displayName&&(t[e.displayName]=e.field||e.name,t[e.displayName.toLowerCase()]=e.field||e.name),e.displayName&&r.options.importerHeaderFilter&&(t[r.options.importerHeaderFilter(e.displayName)]=e.field||e.name,t[r.options.importerHeaderFilter(e.displayName).toLowerCase()]=e.field||e.name)}),t},addObjects:function(e,r){var t;e.api.rowEdit&&(t=e.registerDataChangeCallback(function(){e.api.rowEdit.setRowsDirty(r),t()},[i.dataChange.ROW]),e.importer.$scope.$on("$destroy",t)),e.importer.$scope.$apply(e.options.importerDataAddCallback(e,r))},newObject:function(e){return void 0!==e.options&&void 0!==e.options.importerNewObject?new e.options.importerNewObject:{}},alertError:function(e,r,t,i){e.options.importerErrorCallback?e.options.importerErrorCallback(e,r,t,i):(l.alert(a.getSafeText(r)),o.logError(t+i))}};return s}]),e.directive("uiGridImporter",["uiGridImporterConstants","uiGridImporterService","gridUtil","$compile",function(e,o,r,t){return{replace:!0,priority:0,require:"^uiGrid",scope:!1,link:function(e,r,t,i){o.initializeGrid(e,i.grid)}}}]),e.directive("uiGridImporterMenuItem",["uiGridImporterConstants","uiGridImporterService","gridUtil","$compile",function(e,n,a,r){return{replace:!0,priority:0,require:"?^uiGrid",scope:!1,templateUrl:"ui-grid/importerMenuItem",link:function(e,r,t,i){var o;r=r[0].querySelectorAll(".ui-grid-importer-file-chooser");1!==r.length?a.logError("Found > 1 or < 1 file choosers within the menu item, error, cannot continue"):r[0].addEventListener("change",function(e){var r;(e=e.srcElement||e.target)&&e.files&&1===e.files.length&&(r=e.files[0],void 0!==i&&i?(o=i.grid,n.importThisFile(o,r),e.form.reset()):a.logError("Could not import file because UI Grid was not found."))},!1)}}}])}(),angular.module("ui.grid.importer").run(["$templateCache",function(e){"use strict";e.put("ui-grid/importerMenuItem",'<li class="ui-grid-menu-item"><form><input class="ui-grid-importer-file-chooser" type="file" id="files" name="files[]"></form></li>'),e.put("ui-grid/importerMenuItemContainer","<div ui-grid-importer-menu-item></div>")}]);
@@ -0,0 +1,552 @@
1
+ /*!
2
+ * ui-grid - v4.12.7 - 2024-04-12
3
+ * http://ui-grid.info/
4
+ * Copyright (c) 2024 ; License: MIT
5
+ */
6
+
7
+ (function() {
8
+ 'use strict';
9
+ /**
10
+ * @ngdoc overview
11
+ * @name ui.grid.infiniteScroll
12
+ *
13
+ * @description
14
+ *
15
+ * #ui.grid.infiniteScroll
16
+ *
17
+ * <div class="alert alert-warning" role="alert"><strong>Beta</strong> This feature is ready for testing, but it either hasn't seen a lot of use or has some known bugs.</div>
18
+ *
19
+ * This module provides infinite scroll functionality to ui-grid
20
+ *
21
+ */
22
+ var module = angular.module('ui.grid.infiniteScroll', ['ui.grid']);
23
+ /**
24
+ * @ngdoc service
25
+ * @name ui.grid.infiniteScroll.service:uiGridInfiniteScrollService
26
+ *
27
+ * @description Service for infinite scroll features
28
+ */
29
+ module.service('uiGridInfiniteScrollService', ['gridUtil', '$compile', '$rootScope', 'uiGridConstants', 'ScrollEvent', '$q', function (gridUtil, $compile, $rootScope, uiGridConstants, ScrollEvent, $q) {
30
+ var service = {
31
+
32
+ /**
33
+ * @ngdoc function
34
+ * @name initializeGrid
35
+ * @methodOf ui.grid.infiniteScroll.service:uiGridInfiniteScrollService
36
+ * @description This method register events and methods into grid public API
37
+ */
38
+
39
+ initializeGrid: function(grid, $scope) {
40
+ service.defaultGridOptions(grid.options);
41
+
42
+ if (!grid.options.enableInfiniteScroll) {
43
+ return;
44
+ }
45
+
46
+ grid.infiniteScroll = { dataLoading: false };
47
+ service.setScrollDirections( grid, grid.options.infiniteScrollUp, grid.options.infiniteScrollDown );
48
+ grid.api.core.on.scrollEnd($scope, service.handleScroll);
49
+
50
+ /**
51
+ * @ngdoc object
52
+ * @name ui.grid.infiniteScroll.api:PublicAPI
53
+ *
54
+ * @description Public API for infinite scroll feature
55
+ */
56
+ var publicApi = {
57
+ events: {
58
+ infiniteScroll: {
59
+
60
+ /**
61
+ * @ngdoc event
62
+ * @name needLoadMoreData
63
+ * @eventOf ui.grid.infiniteScroll.api:PublicAPI
64
+ * @description This event fires when scroll reaches bottom percentage of grid
65
+ * and needs to load data
66
+ */
67
+
68
+ needLoadMoreData: function ($scope, fn) {
69
+ },
70
+
71
+ /**
72
+ * @ngdoc event
73
+ * @name needLoadMoreDataTop
74
+ * @eventOf ui.grid.infiniteScroll.api:PublicAPI
75
+ * @description This event fires when scroll reaches top percentage of grid
76
+ * and needs to load data
77
+ */
78
+
79
+ needLoadMoreDataTop: function ($scope, fn) {
80
+ }
81
+ }
82
+ },
83
+ methods: {
84
+ infiniteScroll: {
85
+
86
+ /**
87
+ * @ngdoc function
88
+ * @name dataLoaded
89
+ * @methodOf ui.grid.infiniteScroll.api:PublicAPI
90
+ * @description Call this function when you have loaded the additional data
91
+ * requested. You should set scrollUp and scrollDown to indicate
92
+ * whether there are still more pages in each direction.
93
+ *
94
+ * If you call dataLoaded without first calling `saveScrollPercentage` then we will
95
+ * scroll the user to the start of the newly loaded data, which usually gives a smooth scroll
96
+ * experience, but can give a jumpy experience with large `infiniteScrollRowsFromEnd` values, and
97
+ * on variable speed internet connections. Using `saveScrollPercentage` as demonstrated in the tutorial
98
+ * should give a smoother scrolling experience for users.
99
+ *
100
+ * See infinite_scroll tutorial for example of usage
101
+ * @param {boolean} scrollUp if set to false flags that there are no more pages upwards, so don't fire
102
+ * any more infinite scroll events upward
103
+ * @param {boolean} scrollDown if set to false flags that there are no more pages downwards, so don't
104
+ * fire any more infinite scroll events downward
105
+ * @returns {promise} a promise that is resolved when the grid scrolling is fully adjusted. If you're
106
+ * planning to remove pages, you should wait on this promise first, or you'll break the scroll positioning
107
+ */
108
+ dataLoaded: function( scrollUp, scrollDown ) {
109
+ service.setScrollDirections(grid, scrollUp, scrollDown);
110
+
111
+ return service.adjustScroll(grid).then(function() {
112
+ grid.infiniteScroll.dataLoading = false;
113
+ });
114
+ },
115
+
116
+ /**
117
+ * @ngdoc function
118
+ * @name resetScroll
119
+ * @methodOf ui.grid.infiniteScroll.api:PublicAPI
120
+ * @description Call this function when you have taken some action that makes the current
121
+ * scroll position invalid. For example, if you're using external sorting and you've resorted
122
+ * then you might reset the scroll, or if you've otherwise substantially changed the data, perhaps
123
+ * you've reused an existing grid for a new data set
124
+ *
125
+ * You must tell us whether there is data upwards or downwards after the reset
126
+ *
127
+ * @param {boolean} scrollUp flag that there are pages upwards, fire
128
+ * infinite scroll events upward
129
+ * @param {boolean} scrollDown flag that there are pages downwards, so
130
+ * fire infinite scroll events downward
131
+ */
132
+ resetScroll: function( scrollUp, scrollDown ) {
133
+ service.setScrollDirections( grid, scrollUp, scrollDown);
134
+
135
+ service.adjustInfiniteScrollPosition(grid, 0);
136
+ },
137
+
138
+
139
+ /**
140
+ * @ngdoc function
141
+ * @name saveScrollPercentage
142
+ * @methodOf ui.grid.infiniteScroll.api:PublicAPI
143
+ * @description Saves the scroll percentage and number of visible rows before you adjust the data,
144
+ * used if you're subsequently going to call `dataRemovedTop` or `dataRemovedBottom`
145
+ */
146
+ saveScrollPercentage: function() {
147
+ grid.infiniteScroll.prevScrollTop = grid.renderContainers.body.prevScrollTop;
148
+ grid.infiniteScroll.previousVisibleRows = grid.getVisibleRowCount();
149
+ },
150
+
151
+
152
+ /**
153
+ * @ngdoc function
154
+ * @name dataRemovedTop
155
+ * @methodOf ui.grid.infiniteScroll.api:PublicAPI
156
+ * @description Adjusts the scroll position after you've removed data at the top
157
+ * @param {boolean} scrollUp flag that there are pages upwards, fire
158
+ * infinite scroll events upward
159
+ * @param {boolean} scrollDown flag that there are pages downwards, so
160
+ * fire infinite scroll events downward
161
+ */
162
+ dataRemovedTop: function( scrollUp, scrollDown ) {
163
+ service.dataRemovedTop( grid, scrollUp, scrollDown );
164
+ },
165
+
166
+ /**
167
+ * @ngdoc function
168
+ * @name dataRemovedBottom
169
+ * @methodOf ui.grid.infiniteScroll.api:PublicAPI
170
+ * @description Adjusts the scroll position after you've removed data at the bottom
171
+ * @param {boolean} scrollUp flag that there are pages upwards, fire
172
+ * infinite scroll events upward
173
+ * @param {boolean} scrollDown flag that there are pages downwards, so
174
+ * fire infinite scroll events downward
175
+ */
176
+ dataRemovedBottom: function( scrollUp, scrollDown ) {
177
+ service.dataRemovedBottom( grid, scrollUp, scrollDown );
178
+ },
179
+
180
+ /**
181
+ * @ngdoc function
182
+ * @name setScrollDirections
183
+ * @methodOf ui.grid.infiniteScroll.service:uiGridInfiniteScrollService
184
+ * @description Sets the scrollUp and scrollDown flags, handling nulls and undefined,
185
+ * and also sets the grid.suppressParentScroll
186
+ * @param {boolean} scrollUp whether there are pages available up - defaults to false
187
+ * @param {boolean} scrollDown whether there are pages available down - defaults to true
188
+ */
189
+ setScrollDirections: function ( scrollUp, scrollDown ) {
190
+ service.setScrollDirections( grid, scrollUp, scrollDown );
191
+ }
192
+
193
+ }
194
+ }
195
+ };
196
+ grid.api.registerEventsFromObject(publicApi.events);
197
+ grid.api.registerMethodsFromObject(publicApi.methods);
198
+ },
199
+
200
+
201
+ defaultGridOptions: function (gridOptions) {
202
+ // default option to true unless it was explicitly set to false
203
+ /**
204
+ * @ngdoc object
205
+ * @name ui.grid.infiniteScroll.api:GridOptions
206
+ *
207
+ * @description GridOptions for infinite scroll feature, these are available to be
208
+ * set using the ui-grid {@link ui.grid.class:GridOptions gridOptions}
209
+ */
210
+
211
+ /**
212
+ * @ngdoc object
213
+ * @name enableInfiniteScroll
214
+ * @propertyOf ui.grid.infiniteScroll.api:GridOptions
215
+ * @description Enable infinite scrolling for this grid
216
+ * <br/>Defaults to true
217
+ */
218
+ gridOptions.enableInfiniteScroll = gridOptions.enableInfiniteScroll !== false;
219
+
220
+ /**
221
+ * @ngdoc property
222
+ * @name infiniteScrollRowsFromEnd
223
+ * @propertyOf ui.grid.class:GridOptions
224
+ * @description This setting controls how close to the end of the dataset a user gets before
225
+ * more data is requested by the infinite scroll, whether scrolling up or down. This allows you to
226
+ * 'prefetch' rows before the user actually runs out of scrolling.
227
+ *
228
+ * Note that if you set this value too high it may give jumpy scrolling behaviour, if you're getting
229
+ * this behaviour you could use the `saveScrollPercentageMethod` right before loading your data, and we'll
230
+ * preserve that scroll position
231
+ *
232
+ * <br> Defaults to 20
233
+ */
234
+ gridOptions.infiniteScrollRowsFromEnd = gridOptions.infiniteScrollRowsFromEnd || 20;
235
+
236
+ /**
237
+ * @ngdoc property
238
+ * @name infiniteScrollUp
239
+ * @propertyOf ui.grid.class:GridOptions
240
+ * @description Whether you allow infinite scroll up, implying that the first page of data
241
+ * you have displayed is in the middle of your data set. If set to true then we trigger the
242
+ * needMoreDataTop event when the user hits the top of the scrollbar.
243
+ * <br> Defaults to false
244
+ */
245
+ gridOptions.infiniteScrollUp = gridOptions.infiniteScrollUp === true;
246
+
247
+ /**
248
+ * @ngdoc property
249
+ * @name infiniteScrollDown
250
+ * @propertyOf ui.grid.class:GridOptions
251
+ * @description Whether you allow infinite scroll down, implying that the first page of data
252
+ * you have displayed is in the middle of your data set. If set to true then we trigger the
253
+ * needMoreData event when the user hits the bottom of the scrollbar.
254
+ * <br> Defaults to true
255
+ */
256
+ gridOptions.infiniteScrollDown = gridOptions.infiniteScrollDown !== false;
257
+ },
258
+
259
+
260
+ /**
261
+ * @ngdoc function
262
+ * @name setScrollDirections
263
+ * @methodOf ui.grid.infiniteScroll.service:uiGridInfiniteScrollService
264
+ * @description Sets the scrollUp and scrollDown flags, handling nulls and undefined,
265
+ * and also sets the grid.suppressParentScroll
266
+ * @param {grid} grid the grid we're operating on
267
+ * @param {boolean} scrollUp whether there are pages available up - defaults to false
268
+ * @param {boolean} scrollDown whether there are pages available down - defaults to true
269
+ */
270
+ setScrollDirections: function ( grid, scrollUp, scrollDown ) {
271
+ grid.infiniteScroll.scrollUp = ( scrollUp === true );
272
+ grid.suppressParentScrollUp = ( scrollUp === true );
273
+
274
+ grid.infiniteScroll.scrollDown = ( scrollDown !== false);
275
+ grid.suppressParentScrollDown = ( scrollDown !== false);
276
+ },
277
+
278
+
279
+ /**
280
+ * @ngdoc function
281
+ * @name handleScroll
282
+ * @methodOf ui.grid.infiniteScroll.service:uiGridInfiniteScrollService
283
+ * @description Called whenever the grid scrolls, determines whether the scroll should
284
+ * trigger an infinite scroll request for more data
285
+ * @param {object} args the args from the event
286
+ */
287
+ handleScroll: function (args) {
288
+ // don't request data if already waiting for data, or if source is coming from ui.grid.adjustInfiniteScrollPosition() function
289
+ if ( args.grid.infiniteScroll && args.grid.infiniteScroll.dataLoading || args.source === 'ui.grid.adjustInfiniteScrollPosition' ) {
290
+ return;
291
+ }
292
+
293
+ if (args.y) {
294
+
295
+ // If the user is scrolling very quickly all the way to the top/bottom, the scroll handler can get confused
296
+ // about the direction. First we check if they've gone all the way, and data always is loaded in this case.
297
+ if (args.y.percentage === 0) {
298
+ args.grid.scrollDirection = uiGridConstants.scrollDirection.UP;
299
+ service.loadData(args.grid);
300
+ }
301
+ else if (args.y.percentage === 1) {
302
+ args.grid.scrollDirection = uiGridConstants.scrollDirection.DOWN;
303
+ service.loadData(args.grid);
304
+ }
305
+ else { // Scroll position is somewhere in between top/bottom, so determine whether it's far enough to load more data.
306
+ var percentage,
307
+ targetPercentage = args.grid.options.infiniteScrollRowsFromEnd / args.grid.renderContainers.body.visibleRowCache.length;
308
+
309
+ if (args.grid.scrollDirection === uiGridConstants.scrollDirection.UP ) {
310
+ percentage = args.y.percentage;
311
+ if (percentage <= targetPercentage) {
312
+ service.loadData(args.grid);
313
+ }
314
+ }
315
+ else if (args.grid.scrollDirection === uiGridConstants.scrollDirection.DOWN) {
316
+ percentage = 1 - args.y.percentage;
317
+ if (percentage <= targetPercentage) {
318
+ service.loadData(args.grid);
319
+ }
320
+ }
321
+ }
322
+ }
323
+ },
324
+
325
+
326
+ /**
327
+ * @ngdoc function
328
+ * @name loadData
329
+ * @methodOf ui.grid.infiniteScroll.service:uiGridInfiniteScrollService
330
+ * @description This function fires 'needLoadMoreData' or 'needLoadMoreDataTop' event based on scrollDirection
331
+ * and whether there are more pages upwards or downwards. It also stores the number of rows that we had previously,
332
+ * and clears out any saved scroll position so that we know whether or not the user calls `saveScrollPercentage`
333
+ * @param {Grid} grid the grid we're working on
334
+ */
335
+ loadData: function (grid) {
336
+ // save number of currently visible rows to calculate new scroll position later - we know that we want
337
+ // to be at approximately the row we're currently at
338
+ grid.infiniteScroll.previousVisibleRows = grid.renderContainers.body.visibleRowCache.length;
339
+ grid.infiniteScroll.direction = grid.scrollDirection;
340
+ delete grid.infiniteScroll.prevScrollTop;
341
+
342
+ if (grid.scrollDirection === uiGridConstants.scrollDirection.UP && grid.infiniteScroll.scrollUp) {
343
+ grid.infiniteScroll.dataLoading = true;
344
+ grid.api.infiniteScroll.raise.needLoadMoreDataTop();
345
+ }
346
+ else if (grid.scrollDirection === uiGridConstants.scrollDirection.DOWN && grid.infiniteScroll.scrollDown) {
347
+ if (grid.cellNav && grid.cellNav.lastRowCol && grid.cellNav.lastRowCol.row.index === grid.infiniteScroll.previousVisibleRows - 1) {
348
+ return;
349
+ }
350
+ grid.infiniteScroll.dataLoading = true;
351
+ grid.api.infiniteScroll.raise.needLoadMoreData();
352
+ }
353
+ },
354
+
355
+
356
+ /**
357
+ * @ngdoc function
358
+ * @name adjustScroll
359
+ * @methodOf ui.grid.infiniteScroll.service:uiGridInfiniteScrollService
360
+ * @description Once we are informed that data has been loaded, adjust the scroll position to account for that
361
+ * addition and to make things look clean.
362
+ *
363
+ * If we're scrolling up we scroll to the first row of the old data set -
364
+ * so we're assuming that you would have gotten to the top of the grid (from the 20% need more data trigger) by
365
+ * the time the data comes back. If we're scrolling down we scroll to the last row of the old data set - so we're
366
+ * assuming that you would have gotten to the bottom of the grid (from the 80% need more data trigger) by the time
367
+ * the data comes back.
368
+ *
369
+ * Neither of these are good assumptions, but making this a smoother experience really requires
370
+ * that trigger to not be a percentage, and to be much closer to the end of the data (say, 5 rows off the end). Even then
371
+ * it'd be better still to actually run into the end. But if the data takes a while to come back, they may have scrolled
372
+ * somewhere else in the mean-time, in which case they'll get a jump back to the new data. Anyway, this will do for
373
+ * now, until someone wants to do better.
374
+ * @param {Grid} grid the grid we're working on
375
+ * @returns {promise} a promise that is resolved when scrolling has finished
376
+ */
377
+ adjustScroll: function(grid) {
378
+ var promise = $q.defer();
379
+ $rootScope.$applyAsync(function () {
380
+ var viewportHeight, rowHeight, newVisibleRows, oldTop, newTop;
381
+
382
+ viewportHeight = grid.getViewportHeight() + grid.headerHeight - grid.renderContainers.body.headerHeight - grid.scrollbarHeight;
383
+ rowHeight = grid.options.rowHeight;
384
+
385
+ if ( grid.infiniteScroll.direction === undefined ) {
386
+ // called from initialize, tweak our scroll up a little
387
+ service.adjustInfiniteScrollPosition(grid, 0);
388
+ }
389
+
390
+ newVisibleRows = grid.getVisibleRowCount();
391
+
392
+ // in case not enough data is loaded to enable scroller - load more data
393
+ var canvasHeight = rowHeight * newVisibleRows;
394
+ if (grid.infiniteScroll.scrollDown && (viewportHeight > canvasHeight)) {
395
+ grid.api.infiniteScroll.raise.needLoadMoreData();
396
+ }
397
+
398
+ if ( grid.infiniteScroll.direction === uiGridConstants.scrollDirection.UP ) {
399
+ oldTop = grid.infiniteScroll.prevScrollTop || 0;
400
+ newTop = oldTop + (newVisibleRows - grid.infiniteScroll.previousVisibleRows)*rowHeight;
401
+ service.adjustInfiniteScrollPosition(grid, newTop);
402
+ $rootScope.$applyAsync( function() {
403
+ promise.resolve();
404
+ });
405
+ }
406
+
407
+ if ( grid.infiniteScroll.direction === uiGridConstants.scrollDirection.DOWN ) {
408
+ newTop = grid.infiniteScroll.prevScrollTop || (grid.infiniteScroll.previousVisibleRows*rowHeight - viewportHeight);
409
+ service.adjustInfiniteScrollPosition(grid, newTop);
410
+ $rootScope.$applyAsync( function() {
411
+ promise.resolve();
412
+ });
413
+ }
414
+ }, 0);
415
+
416
+ return promise.promise;
417
+ },
418
+
419
+
420
+ /**
421
+ * @ngdoc function
422
+ * @name adjustInfiniteScrollPosition
423
+ * @methodOf ui.grid.infiniteScroll.service:uiGridInfiniteScrollService
424
+ * @description This function fires 'needLoadMoreData' or 'needLoadMoreDataTop' event based on scrollDirection
425
+ * @param {Grid} grid the grid we're working on
426
+ * @param {number} scrollTop the position through the grid that we want to scroll to
427
+ */
428
+ adjustInfiniteScrollPosition: function (grid, scrollTop) {
429
+ var scrollEvent = new ScrollEvent(grid, null, null, 'ui.grid.adjustInfiniteScrollPosition'),
430
+ visibleRows = grid.getVisibleRowCount(),
431
+ viewportHeight = grid.getViewportHeight() + grid.headerHeight - grid.renderContainers.body.headerHeight - grid.scrollbarHeight,
432
+ rowHeight = grid.options.rowHeight,
433
+ scrollHeight = visibleRows*rowHeight-viewportHeight;
434
+
435
+ // for infinite scroll, if there are pages upwards then never allow it to be at the zero position so the up button can be active
436
+ if (scrollTop === 0 && grid.infiniteScroll.scrollUp) {
437
+ // using pixels results in a relative scroll, hence we have to use percentage
438
+ scrollEvent.y = {pixels: 1};
439
+ }
440
+ else {
441
+ scrollEvent.y = {percentage: scrollTop/scrollHeight};
442
+ }
443
+ grid.scrollContainers('', scrollEvent);
444
+ },
445
+
446
+
447
+ /**
448
+ * @ngdoc function
449
+ * @name dataRemovedTop
450
+ * @methodOf ui.grid.infiniteScroll.api:PublicAPI
451
+ * @description Adjusts the scroll position after you've removed data at the top. You should
452
+ * have called `saveScrollPercentage` before you remove the data, and if you're doing this in
453
+ * response to a `needMoreData` you should wait until the promise from `loadData` has resolved
454
+ * before you start removing data
455
+ * @param {Grid} grid the grid we're working on
456
+ * @param {boolean} scrollUp flag that there are pages upwards, fire
457
+ * infinite scroll events upward
458
+ * @param {boolean} scrollDown flag that there are pages downwards, so
459
+ * fire infinite scroll events downward
460
+ */
461
+ dataRemovedTop: function( grid, scrollUp, scrollDown ) {
462
+ var newVisibleRows, oldTop, newTop, rowHeight;
463
+ service.setScrollDirections( grid, scrollUp, scrollDown );
464
+
465
+ newVisibleRows = grid.renderContainers.body.visibleRowCache.length;
466
+ oldTop = grid.infiniteScroll.prevScrollTop;
467
+ rowHeight = grid.options.rowHeight;
468
+
469
+ // since we removed from the top, our new scroll row will be the old scroll row less the number
470
+ // of rows removed
471
+ newTop = oldTop - ( grid.infiniteScroll.previousVisibleRows - newVisibleRows )*rowHeight;
472
+
473
+ service.adjustInfiniteScrollPosition( grid, newTop );
474
+ },
475
+
476
+ /**
477
+ * @ngdoc function
478
+ * @name dataRemovedBottom
479
+ * @methodOf ui.grid.infiniteScroll.api:PublicAPI
480
+ * @description Adjusts the scroll position after you've removed data at the bottom. You should
481
+ * have called `saveScrollPercentage` before you remove the data, and if you're doing this in
482
+ * response to a `needMoreData` you should wait until the promise from `loadData` has resolved
483
+ * before you start removing data
484
+ * @param {Grid} grid the grid we're working on
485
+ * @param {boolean} scrollUp flag that there are pages upwards, fire
486
+ * infinite scroll events upward
487
+ * @param {boolean} scrollDown flag that there are pages downwards, so
488
+ * fire infinite scroll events downward
489
+ */
490
+ dataRemovedBottom: function( grid, scrollUp, scrollDown ) {
491
+ var newTop;
492
+
493
+ service.setScrollDirections( grid, scrollUp, scrollDown );
494
+
495
+ newTop = grid.infiniteScroll.prevScrollTop;
496
+
497
+ service.adjustInfiniteScrollPosition( grid, newTop );
498
+ }
499
+ };
500
+ return service;
501
+ }]);
502
+ /**
503
+ * @ngdoc directive
504
+ * @name ui.grid.infiniteScroll.directive:uiGridInfiniteScroll
505
+ * @element div
506
+ * @restrict A
507
+ *
508
+ * @description Adds infinite scroll features to grid
509
+ *
510
+ * @example
511
+ <example module="app">
512
+ <file name="app.js">
513
+ var app = angular.module('app', ['ui.grid', 'ui.grid.infiniteScroll']);
514
+
515
+ app.controller('MainCtrl', ['$scope', function ($scope) {
516
+ $scope.data = [
517
+ { name: 'Alex', car: 'Toyota' },
518
+ { name: 'Sam', car: 'Lexus' }
519
+ ];
520
+
521
+ $scope.columnDefs = [
522
+ {name: 'name'},
523
+ {name: 'car'}
524
+ ];
525
+ }]);
526
+ </file>
527
+ <file name="index.html">
528
+ <div ng-controller="MainCtrl">
529
+ <div ui-grid="{ data: data, columnDefs: columnDefs }" ui-grid-infinite-scroll="20"></div>
530
+ </div>
531
+ </file>
532
+ </example>
533
+ */
534
+
535
+ module.directive('uiGridInfiniteScroll', ['uiGridInfiniteScrollService',
536
+ function (uiGridInfiniteScrollService) {
537
+ return {
538
+ priority: -200,
539
+ scope: false,
540
+ require: '^uiGrid',
541
+ compile: function() {
542
+ return {
543
+ pre: function($scope, $elm, $attr, uiGridCtrl) {
544
+ uiGridInfiniteScrollService.initializeGrid(uiGridCtrl.grid, $scope);
545
+ },
546
+ post: function($scope, $elm, $attr) {
547
+ }
548
+ };
549
+ }
550
+ };
551
+ }]);
552
+ })();
@@ -0,0 +1,6 @@
1
+ /*!
2
+ * ui-grid - v4.12.7 - 2024-04-12
3
+ * http://ui-grid.info/
4
+ * Copyright (c) 2024 ; License: MIT
5
+ */
6
+ !function(){"use strict";var i=angular.module("ui.grid.infiniteScroll",["ui.grid"]);i.service("uiGridInfiniteScrollService",["gridUtil","$compile","$rootScope","uiGridConstants","ScrollEvent","$q",function(i,o,t,c,r,n){var s={initializeGrid:function(n,i){s.defaultGridOptions(n.options),n.options.enableInfiniteScroll&&(n.infiniteScroll={dataLoading:!1},s.setScrollDirections(n,n.options.infiniteScrollUp,n.options.infiniteScrollDown),n.api.core.on.scrollEnd(i,s.handleScroll),i={infiniteScroll:{dataLoaded:function(i,o){return s.setScrollDirections(n,i,o),s.adjustScroll(n).then(function(){n.infiniteScroll.dataLoading=!1})},resetScroll:function(i,o){s.setScrollDirections(n,i,o),s.adjustInfiniteScrollPosition(n,0)},saveScrollPercentage:function(){n.infiniteScroll.prevScrollTop=n.renderContainers.body.prevScrollTop,n.infiniteScroll.previousVisibleRows=n.getVisibleRowCount()},dataRemovedTop:function(i,o){s.dataRemovedTop(n,i,o)},dataRemovedBottom:function(i,o){s.dataRemovedBottom(n,i,o)},setScrollDirections:function(i,o){s.setScrollDirections(n,i,o)}}},n.api.registerEventsFromObject({infiniteScroll:{needLoadMoreData:function(i,o){},needLoadMoreDataTop:function(i,o){}}}),n.api.registerMethodsFromObject(i))},defaultGridOptions:function(i){i.enableInfiniteScroll=!1!==i.enableInfiniteScroll,i.infiniteScrollRowsFromEnd=i.infiniteScrollRowsFromEnd||20,i.infiniteScrollUp=!0===i.infiniteScrollUp,i.infiniteScrollDown=!1!==i.infiniteScrollDown},setScrollDirections:function(i,o,n){i.infiniteScroll.scrollUp=!0===o,i.suppressParentScrollUp=!0===o,i.infiniteScroll.scrollDown=!1!==n,i.suppressParentScrollDown=!1!==n},handleScroll:function(i){var o;i.grid.infiniteScroll&&i.grid.infiniteScroll.dataLoading||"ui.grid.adjustInfiniteScrollPosition"===i.source||i.y&&(0===i.y.percentage?(i.grid.scrollDirection=c.scrollDirection.UP,s.loadData(i.grid)):1===i.y.percentage?(i.grid.scrollDirection=c.scrollDirection.DOWN,s.loadData(i.grid)):(o=i.grid.options.infiniteScrollRowsFromEnd/i.grid.renderContainers.body.visibleRowCache.length,i.grid.scrollDirection===c.scrollDirection.UP?i.y.percentage<=o&&s.loadData(i.grid):i.grid.scrollDirection===c.scrollDirection.DOWN&&1-i.y.percentage<=o&&s.loadData(i.grid)))},loadData:function(i){i.infiniteScroll.previousVisibleRows=i.renderContainers.body.visibleRowCache.length,i.infiniteScroll.direction=i.scrollDirection,delete i.infiniteScroll.prevScrollTop,i.scrollDirection===c.scrollDirection.UP&&i.infiniteScroll.scrollUp?(i.infiniteScroll.dataLoading=!0,i.api.infiniteScroll.raise.needLoadMoreDataTop()):i.scrollDirection!==c.scrollDirection.DOWN||!i.infiniteScroll.scrollDown||i.cellNav&&i.cellNav.lastRowCol&&i.cellNav.lastRowCol.row.index===i.infiniteScroll.previousVisibleRows-1||(i.infiniteScroll.dataLoading=!0,i.api.infiniteScroll.raise.needLoadMoreData())},adjustScroll:function(l){var r=n.defer();return t.$applyAsync(function(){var i,o=l.getViewportHeight()+l.headerHeight-l.renderContainers.body.headerHeight-l.scrollbarHeight,n=l.options.rowHeight,e=(void 0===l.infiniteScroll.direction&&s.adjustInfiniteScrollPosition(l,0),l.getVisibleRowCount());l.infiniteScroll.scrollDown&&n*e<o&&l.api.infiniteScroll.raise.needLoadMoreData(),l.infiniteScroll.direction===c.scrollDirection.UP&&(i=(l.infiniteScroll.prevScrollTop||0)+(e-l.infiniteScroll.previousVisibleRows)*n,s.adjustInfiniteScrollPosition(l,i),t.$applyAsync(function(){r.resolve()})),l.infiniteScroll.direction===c.scrollDirection.DOWN&&(i=l.infiniteScroll.prevScrollTop||l.infiniteScroll.previousVisibleRows*n-o,s.adjustInfiniteScrollPosition(l,i),t.$applyAsync(function(){r.resolve()}))},0),r.promise},adjustInfiniteScrollPosition:function(i,o){var n=new r(i,null,null,"ui.grid.adjustInfiniteScrollPosition"),e=i.getVisibleRowCount(),l=i.getViewportHeight()+i.headerHeight-i.renderContainers.body.headerHeight-i.scrollbarHeight,e=e*i.options.rowHeight-l;0===o&&i.infiniteScroll.scrollUp?n.y={pixels:1}:n.y={percentage:o/e},i.scrollContainers("",n)},dataRemovedTop:function(i,o,n){var e;s.setScrollDirections(i,o,n),o=i.renderContainers.body.visibleRowCache.length,n=i.infiniteScroll.prevScrollTop,e=i.options.rowHeight,n=n-(i.infiniteScroll.previousVisibleRows-o)*e,s.adjustInfiniteScrollPosition(i,n)},dataRemovedBottom:function(i,o,n){s.setScrollDirections(i,o,n),o=i.infiniteScroll.prevScrollTop,s.adjustInfiniteScrollPosition(i,o)}};return s}]),i.directive("uiGridInfiniteScroll",["uiGridInfiniteScrollService",function(l){return{priority:-200,scope:!1,require:"^uiGrid",compile:function(){return{pre:function(i,o,n,e){l.initializeGrid(e.grid,i)},post:function(i,o,n){}}}}}])}();