@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.
- package/chunk-A3NTIEMP.js +1 -0
- package/chunk-CAY35YP7.js +7 -0
- package/chunk-H3QHLLCN.js +1 -0
- package/chunk-KE4BCZO4.js +851 -0
- package/chunk-OHPEWN32.js +1198 -0
- package/chunk-WSQOM5HU.js +1 -0
- package/component-lib.js +1 -0
- package/index.html +12 -0
- package/main.js +3264 -0
- package/modules/angular/LICENSE.md +21 -0
- package/modules/angular/README.md +67 -0
- package/modules/angular/angular-csp.css +25 -0
- package/modules/angular/angular.js +36600 -0
- package/modules/angular/angular.min.js +352 -0
- package/modules/angular/angular.min.js.gzip +0 -0
- package/modules/angular/angular.min.js.map +8 -0
- package/modules/angular/bower.json +9 -0
- package/modules/angular/index.js +2 -0
- package/modules/angular/package.json +25 -0
- package/modules/angular-ui-grid/CHANGELOG.md +1973 -0
- package/modules/angular-ui-grid/README.md +59 -0
- package/modules/angular-ui-grid/css/ui-grid.cellnav.css +25 -0
- package/modules/angular-ui-grid/css/ui-grid.cellnav.min.css +1 -0
- package/modules/angular-ui-grid/css/ui-grid.core.css +866 -0
- package/modules/angular-ui-grid/css/ui-grid.core.min.css +5 -0
- package/modules/angular-ui-grid/css/ui-grid.edit.css +23 -0
- package/modules/angular-ui-grid/css/ui-grid.edit.min.css +1 -0
- package/modules/angular-ui-grid/css/ui-grid.empty-base-layer.css +6 -0
- package/modules/angular-ui-grid/css/ui-grid.empty-base-layer.min.css +1 -0
- package/modules/angular-ui-grid/css/ui-grid.expandable.css +16 -0
- package/modules/angular-ui-grid/css/ui-grid.expandable.min.css +1 -0
- package/modules/angular-ui-grid/css/ui-grid.exporter.css +0 -0
- package/modules/angular-ui-grid/css/ui-grid.exporter.min.css +0 -0
- package/modules/angular-ui-grid/css/ui-grid.grouping.css +3 -0
- package/modules/angular-ui-grid/css/ui-grid.grouping.min.css +1 -0
- package/modules/angular-ui-grid/css/ui-grid.importer.css +0 -0
- package/modules/angular-ui-grid/css/ui-grid.importer.min.css +0 -0
- package/modules/angular-ui-grid/css/ui-grid.move-columns.css +9 -0
- package/modules/angular-ui-grid/css/ui-grid.move-columns.min.css +1 -0
- package/modules/angular-ui-grid/css/ui-grid.pagination.css +299 -0
- package/modules/angular-ui-grid/css/ui-grid.pagination.min.css +1 -0
- package/modules/angular-ui-grid/css/ui-grid.pinning.css +67 -0
- package/modules/angular-ui-grid/css/ui-grid.pinning.min.css +1 -0
- package/modules/angular-ui-grid/css/ui-grid.resize-columns.css +38 -0
- package/modules/angular-ui-grid/css/ui-grid.resize-columns.min.css +1 -0
- package/modules/angular-ui-grid/css/ui-grid.row-edit.css +9 -0
- package/modules/angular-ui-grid/css/ui-grid.row-edit.min.css +1 -0
- package/modules/angular-ui-grid/css/ui-grid.selection.css +25 -0
- package/modules/angular-ui-grid/css/ui-grid.selection.min.css +1 -0
- package/modules/angular-ui-grid/css/ui-grid.tree-base.css +4 -0
- package/modules/angular-ui-grid/css/ui-grid.tree-base.min.css +1 -0
- package/modules/angular-ui-grid/css/ui-grid.tree-view.css +6 -0
- package/modules/angular-ui-grid/css/ui-grid.tree-view.min.css +1 -0
- package/modules/angular-ui-grid/css/ui-grid.validate.css +3 -0
- package/modules/angular-ui-grid/css/ui-grid.validate.min.css +1 -0
- package/modules/angular-ui-grid/fonts/ui-grid.eot +0 -0
- package/modules/angular-ui-grid/fonts/ui-grid.svg +56 -0
- package/modules/angular-ui-grid/fonts/ui-grid.ttf +0 -0
- package/modules/angular-ui-grid/fonts/ui-grid.woff +0 -0
- package/modules/angular-ui-grid/less/animation.less +85 -0
- package/modules/angular-ui-grid/less/body.less +84 -0
- package/modules/angular-ui-grid/less/cell.less +46 -0
- package/modules/angular-ui-grid/less/cellnav.less +29 -0
- package/modules/angular-ui-grid/less/core.less +11 -0
- package/modules/angular-ui-grid/less/edit.less +27 -0
- package/modules/angular-ui-grid/less/elements.less +156 -0
- package/modules/angular-ui-grid/less/emptyBaseLayer.less +8 -0
- package/modules/angular-ui-grid/less/expandable.less +29 -0
- package/modules/angular-ui-grid/less/exporter.less +4 -0
- package/modules/angular-ui-grid/less/footer.less +76 -0
- package/modules/angular-ui-grid/less/grid.less +86 -0
- package/modules/angular-ui-grid/less/grouping.less +5 -0
- package/modules/angular-ui-grid/less/header.less +250 -0
- package/modules/angular-ui-grid/less/icons.less +151 -0
- package/modules/angular-ui-grid/less/importer.less +4 -0
- package/modules/angular-ui-grid/less/main.less +2 -0
- package/modules/angular-ui-grid/less/menu.less +91 -0
- package/modules/angular-ui-grid/less/moveColumns.less +12 -0
- package/modules/angular-ui-grid/less/pagination.less +297 -0
- package/modules/angular-ui-grid/less/pinning.less +86 -0
- package/modules/angular-ui-grid/less/resizeColumns.less +53 -0
- package/modules/angular-ui-grid/less/rowEdit.less +19 -0
- package/modules/angular-ui-grid/less/rtl.less +67 -0
- package/modules/angular-ui-grid/less/selection.less +29 -0
- package/modules/angular-ui-grid/less/sorting.less +16 -0
- package/modules/angular-ui-grid/less/treeBase.less +6 -0
- package/modules/angular-ui-grid/less/treeView.less +8 -0
- package/modules/angular-ui-grid/less/validate.less +5 -0
- package/modules/angular-ui-grid/less/variables.less +90 -0
- package/modules/angular-ui-grid/package.json +144 -0
- package/modules/angular-ui-grid/ui-grid.auto-resize.js +69 -0
- package/modules/angular-ui-grid/ui-grid.auto-resize.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.cellnav.js +1181 -0
- package/modules/angular-ui-grid/ui-grid.cellnav.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.core.js +12737 -0
- package/modules/angular-ui-grid/ui-grid.core.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.css +3208 -0
- package/modules/angular-ui-grid/ui-grid.edit.js +1325 -0
- package/modules/angular-ui-grid/ui-grid.edit.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.empty-base-layer.js +178 -0
- package/modules/angular-ui-grid/ui-grid.empty-base-layer.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.expandable.js +651 -0
- package/modules/angular-ui-grid/ui-grid.expandable.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.exporter.js +1777 -0
- package/modules/angular-ui-grid/ui-grid.exporter.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.grouping.js +1291 -0
- package/modules/angular-ui-grid/ui-grid.grouping.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.importer.js +791 -0
- package/modules/angular-ui-grid/ui-grid.importer.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.infinite-scroll.js +552 -0
- package/modules/angular-ui-grid/ui-grid.infinite-scroll.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.js +30867 -0
- package/modules/angular-ui-grid/ui-grid.language.all.js +3214 -0
- package/modules/angular-ui-grid/ui-grid.language.all.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.ar.js +118 -0
- package/modules/angular-ui-grid/ui-grid.language.ar.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.bg.js +115 -0
- package/modules/angular-ui-grid/ui-grid.language.bg.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.cs.js +96 -0
- package/modules/angular-ui-grid/ui-grid.language.cs.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.da.js +90 -0
- package/modules/angular-ui-grid/ui-grid.language.da.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.de.js +133 -0
- package/modules/angular-ui-grid/ui-grid.language.de.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.es-ct.js +133 -0
- package/modules/angular-ui-grid/ui-grid.language.es-ct.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.es.js +106 -0
- package/modules/angular-ui-grid/ui-grid.language.es.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.fa.js +93 -0
- package/modules/angular-ui-grid/ui-grid.language.fa.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.fi.js +76 -0
- package/modules/angular-ui-grid/ui-grid.language.fi.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.fr.js +128 -0
- package/modules/angular-ui-grid/ui-grid.language.fr.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.he.js +71 -0
- package/modules/angular-ui-grid/ui-grid.language.he.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.hy.js +76 -0
- package/modules/angular-ui-grid/ui-grid.language.hy.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.is.js +118 -0
- package/modules/angular-ui-grid/ui-grid.language.is.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.it.js +112 -0
- package/modules/angular-ui-grid/ui-grid.language.it.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.ja.js +118 -0
- package/modules/angular-ui-grid/ui-grid.language.ja.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.ko.js +77 -0
- package/modules/angular-ui-grid/ui-grid.language.ko.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.nl.js +91 -0
- package/modules/angular-ui-grid/ui-grid.language.nl.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.no.js +115 -0
- package/modules/angular-ui-grid/ui-grid.language.no.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.pl.js +126 -0
- package/modules/angular-ui-grid/ui-grid.language.pl.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.pt-br.js +133 -0
- package/modules/angular-ui-grid/ui-grid.language.pt-br.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.pt.js +133 -0
- package/modules/angular-ui-grid/ui-grid.language.pt.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.ro.js +112 -0
- package/modules/angular-ui-grid/ui-grid.language.ro.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.rs-lat.js +126 -0
- package/modules/angular-ui-grid/ui-grid.language.rs-lat.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.ru.js +115 -0
- package/modules/angular-ui-grid/ui-grid.language.ru.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.sk.js +127 -0
- package/modules/angular-ui-grid/ui-grid.language.sk.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.sv.js +126 -0
- package/modules/angular-ui-grid/ui-grid.language.sv.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.ta.js +87 -0
- package/modules/angular-ui-grid/ui-grid.language.ta.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.tr.js +112 -0
- package/modules/angular-ui-grid/ui-grid.language.tr.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.ua.js +112 -0
- package/modules/angular-ui-grid/ui-grid.language.ua.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.zh-cn.js +112 -0
- package/modules/angular-ui-grid/ui-grid.language.zh-cn.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.language.zh-tw.js +77 -0
- package/modules/angular-ui-grid/ui-grid.language.zh-tw.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.min.css +5 -0
- package/modules/angular-ui-grid/ui-grid.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.move-columns.js +582 -0
- package/modules/angular-ui-grid/ui-grid.move-columns.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.pagination.js +510 -0
- package/modules/angular-ui-grid/ui-grid.pagination.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.pinning.js +281 -0
- package/modules/angular-ui-grid/ui-grid.pinning.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.resize-columns.js +574 -0
- package/modules/angular-ui-grid/ui-grid.resize-columns.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.row-edit.js +717 -0
- package/modules/angular-ui-grid/ui-grid.row-edit.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.saveState.js +831 -0
- package/modules/angular-ui-grid/ui-grid.saveState.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.selection.js +1196 -0
- package/modules/angular-ui-grid/ui-grid.selection.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.tree-base.js +1743 -0
- package/modules/angular-ui-grid/ui-grid.tree-base.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.tree-view.js +218 -0
- package/modules/angular-ui-grid/ui-grid.tree-view.min.js +6 -0
- package/modules/angular-ui-grid/ui-grid.validate.js +589 -0
- package/modules/angular-ui-grid/ui-grid.validate.min.js +6 -0
- package/package.json +8 -0
- package/polyfills.js +2 -0
- 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){}}}}}])}();
|