bastion 1.0.2 → 2.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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/bastion/bastion-bootstrap.js +1 -0
- data/app/assets/javascripts/bastion/bastion.js +1 -0
- data/app/assets/javascripts/bastion/layouts/details-nutupane.html +5 -4
- data/app/assets/javascripts/bastion/layouts/nutupane.html +2 -2
- data/bower.json +4 -0
- data/grunt/karma.js +1 -0
- data/lib/bastion/version.rb +1 -1
- data/vendor/assets/javascripts/bastion/ngInfiniteScroll/ng-infinite-scroll.js +177 -0
- metadata +3 -5
- data/app/assets/javascripts/bastion/components/bst-infinite-scroll.directive.js +0 -76
- data/test/components/bst-infinite-scroll.directive.test.js +0 -127
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 52f906d47279b4f0208c48741f7b64b1fb137ffe
|
4
|
+
data.tar.gz: 0167998c6b06bbaf2feccccf30c0fdc771e87044
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a5593efe6d9ae4e664e8bbc8e93c0b8b2be96fdc914d4eb0d06a621b4b8a66d0c4ee192cbe46d93b461843a8e017bf5e78cba08fb78e228d2f3d8c99567db30
|
7
|
+
data.tar.gz: 7f56299785fee09f780cdf78d72cf341868857fdac3a320a0d94252d3eaa44f0cbcec34ca75a799eb02e146e72e9ff7edb12df4a88a0b0bf85cb0dc61d609150
|
@@ -6,6 +6,7 @@
|
|
6
6
|
//= require "bastion/angular-ui-router/angular-ui-router"
|
7
7
|
//= require "bastion/angular-uuid4/angular-uuid4.js"
|
8
8
|
//= require "bastion/ngUpload/ng-upload"
|
9
|
+
//= require "bastion/ngInfiniteScroll/ng-infinite-scroll.js"
|
9
10
|
//= require "bastion/angular-gettext/angular-gettext"
|
10
11
|
//= require "bastion/angular-blocks/angular-blocks"
|
11
12
|
//= require_tree "../../../../vendor/assets/javascripts/bastion/angular-bootstrap"
|
@@ -50,14 +50,13 @@
|
|
50
50
|
</div>
|
51
51
|
</div>
|
52
52
|
|
53
|
-
<div class="nutupane" bst-table="detailsTable" nutupane-table>
|
53
|
+
<div class="nutupane nutupane-details-table" bst-table="detailsTable" nutupane-table>
|
54
54
|
<div class="loading-mask loading-mask-collapsed" ng-show="detailsTable.refreshing">
|
55
55
|
<i class="fa fa-spinner fa-spin"></i>
|
56
56
|
<span ng-hide="$root.$state.current.collapsed">{{ "Loading..." | translate }}</span>
|
57
57
|
</div>
|
58
58
|
|
59
|
-
<div bst-container-scroll
|
60
|
-
data="detailsTable.rows" skip-initial-load="!detailsTable.initialLoad">
|
59
|
+
<div bst-container-scroll data="detailsTable.rows">
|
61
60
|
|
62
61
|
<div class="nutupane-select-all" ng-show="detailsTable.selectAllResultsEnabled && detailsTable.allSelected() && !detailsTable.allResultsSelected">
|
63
62
|
<span translate>All {{ detailsTable.rows.length }} items on this page are selected.</span>
|
@@ -73,7 +72,9 @@
|
|
73
72
|
<span data-block="no-rows-message"></span>
|
74
73
|
</p>
|
75
74
|
|
76
|
-
<div
|
75
|
+
<div infinite-scroll="detailsTable.nextPage()" infinite-scroll-container="'.nutupane-details-table .container-scroll-wrapper'">
|
76
|
+
<div ng-show="detailsTable.rows.length > 0" data-block="table"></div>
|
77
|
+
</div>
|
77
78
|
</div>
|
78
79
|
</div>
|
79
80
|
|
@@ -61,8 +61,8 @@
|
|
61
61
|
<span data-block="no-rows-message"></span>
|
62
62
|
</p>
|
63
63
|
|
64
|
-
<div ng-show="table.rows.length > 0" bst-container-scroll
|
65
|
-
<div ui-view="table"></div>
|
64
|
+
<div ng-show="table.rows.length > 0" bst-container-scroll data="table.rows">
|
65
|
+
<div infinite-scroll="table.nextPage()" infinite-scroll-container="'.container-scroll-wrapper'" ui-view="table"></div>
|
66
66
|
</div>
|
67
67
|
</div>
|
68
68
|
|
data/bower.json
CHANGED
@@ -16,6 +16,7 @@
|
|
16
16
|
"angular-blocks": "~>0.1.8",
|
17
17
|
"angular-i18n": "1.3.13",
|
18
18
|
"underscore": "=1.5.2",
|
19
|
+
"ngInfiniteScroll": "1.2.0",
|
19
20
|
"ngUpload": "~0.5.5",
|
20
21
|
"bootstrap": "~3.1.1",
|
21
22
|
"font-awesome": "4.2.0",
|
@@ -81,6 +82,9 @@
|
|
81
82
|
"ngUpload": {
|
82
83
|
"javascripts/bastion/ngUpload": "ng-upload.js"
|
83
84
|
},
|
85
|
+
"ngInfiniteScroll": {
|
86
|
+
"javascripts/bastion/ngInfiniteScroll": "build/ng-infinite-scroll.js"
|
87
|
+
},
|
84
88
|
"bootstrap": {
|
85
89
|
"stylesheets/bastion/bootstrap/less": "less/*.less",
|
86
90
|
"fonts/bastion/bootstrap": "dist/fonts/*"
|
data/grunt/karma.js
CHANGED
@@ -28,6 +28,7 @@ module.exports = {
|
|
28
28
|
basePath + 'vendor/assets/javascripts/bastion/angular-ui-router/angular-ui-router.js',
|
29
29
|
basePath + 'vendor/assets/javascripts/bastion/angular-gettext/angular-gettext.js',
|
30
30
|
basePath + 'vendor/assets/javascripts/bastion/ngUpload/ng-upload.js',
|
31
|
+
basePath + 'vendor/assets/javascripts/bastion/ngInfiniteScroll/ng-infinite-scroll.js',
|
31
32
|
basePath + '.tmp/bower_components/angular-mocks/angular-mocks.js',
|
32
33
|
|
33
34
|
basePath + 'app/assets/javascripts/bastion/bastion-bootstrap.js',
|
data/lib/bastion/version.rb
CHANGED
@@ -0,0 +1,177 @@
|
|
1
|
+
/* ng-infinite-scroll - v1.2.0 - 2014-12-02 */
|
2
|
+
var mod;
|
3
|
+
|
4
|
+
mod = angular.module('infinite-scroll', []);
|
5
|
+
|
6
|
+
mod.value('THROTTLE_MILLISECONDS', null);
|
7
|
+
|
8
|
+
mod.directive('infiniteScroll', [
|
9
|
+
'$rootScope', '$window', '$interval', 'THROTTLE_MILLISECONDS', function($rootScope, $window, $interval, THROTTLE_MILLISECONDS) {
|
10
|
+
return {
|
11
|
+
scope: {
|
12
|
+
infiniteScroll: '&',
|
13
|
+
infiniteScrollContainer: '=',
|
14
|
+
infiniteScrollDistance: '=',
|
15
|
+
infiniteScrollDisabled: '=',
|
16
|
+
infiniteScrollUseDocumentBottom: '='
|
17
|
+
},
|
18
|
+
link: function(scope, elem, attrs) {
|
19
|
+
var changeContainer, checkWhenEnabled, container, handleInfiniteScrollContainer, handleInfiniteScrollDisabled, handleInfiniteScrollDistance, handleInfiniteScrollUseDocumentBottom, handler, height, immediateCheck, offsetTop, pageYOffset, scrollDistance, scrollEnabled, throttle, useDocumentBottom, windowElement;
|
20
|
+
windowElement = angular.element($window);
|
21
|
+
scrollDistance = null;
|
22
|
+
scrollEnabled = null;
|
23
|
+
checkWhenEnabled = null;
|
24
|
+
container = null;
|
25
|
+
immediateCheck = true;
|
26
|
+
useDocumentBottom = false;
|
27
|
+
height = function(elem) {
|
28
|
+
elem = elem[0] || elem;
|
29
|
+
if (isNaN(elem.offsetHeight)) {
|
30
|
+
return elem.document.documentElement.clientHeight;
|
31
|
+
} else {
|
32
|
+
return elem.offsetHeight;
|
33
|
+
}
|
34
|
+
};
|
35
|
+
offsetTop = function(elem) {
|
36
|
+
if (!elem[0].getBoundingClientRect || elem.css('none')) {
|
37
|
+
return;
|
38
|
+
}
|
39
|
+
return elem[0].getBoundingClientRect().top + pageYOffset(elem);
|
40
|
+
};
|
41
|
+
pageYOffset = function(elem) {
|
42
|
+
elem = elem[0] || elem;
|
43
|
+
if (isNaN(window.pageYOffset)) {
|
44
|
+
return elem.document.documentElement.scrollTop;
|
45
|
+
} else {
|
46
|
+
return elem.ownerDocument.defaultView.pageYOffset;
|
47
|
+
}
|
48
|
+
};
|
49
|
+
handler = function() {
|
50
|
+
var containerBottom, containerTopOffset, elementBottom, remaining, shouldScroll;
|
51
|
+
if (container === windowElement) {
|
52
|
+
containerBottom = height(container) + pageYOffset(container[0].document.documentElement);
|
53
|
+
elementBottom = offsetTop(elem) + height(elem);
|
54
|
+
} else {
|
55
|
+
containerBottom = height(container);
|
56
|
+
containerTopOffset = 0;
|
57
|
+
if (offsetTop(container) !== void 0) {
|
58
|
+
containerTopOffset = offsetTop(container);
|
59
|
+
}
|
60
|
+
elementBottom = offsetTop(elem) - containerTopOffset + height(elem);
|
61
|
+
}
|
62
|
+
if (useDocumentBottom) {
|
63
|
+
elementBottom = height((elem[0].ownerDocument || elem[0].document).documentElement);
|
64
|
+
}
|
65
|
+
remaining = elementBottom - containerBottom;
|
66
|
+
shouldScroll = remaining <= height(container) * scrollDistance + 1;
|
67
|
+
if (shouldScroll) {
|
68
|
+
checkWhenEnabled = true;
|
69
|
+
if (scrollEnabled) {
|
70
|
+
if (scope.$$phase || $rootScope.$$phase) {
|
71
|
+
return scope.infiniteScroll();
|
72
|
+
} else {
|
73
|
+
return scope.$apply(scope.infiniteScroll);
|
74
|
+
}
|
75
|
+
}
|
76
|
+
} else {
|
77
|
+
return checkWhenEnabled = false;
|
78
|
+
}
|
79
|
+
};
|
80
|
+
throttle = function(func, wait) {
|
81
|
+
var later, previous, timeout;
|
82
|
+
timeout = null;
|
83
|
+
previous = 0;
|
84
|
+
later = function() {
|
85
|
+
var context;
|
86
|
+
previous = new Date().getTime();
|
87
|
+
$interval.cancel(timeout);
|
88
|
+
timeout = null;
|
89
|
+
func.call();
|
90
|
+
return context = null;
|
91
|
+
};
|
92
|
+
return function() {
|
93
|
+
var now, remaining;
|
94
|
+
now = new Date().getTime();
|
95
|
+
remaining = wait - (now - previous);
|
96
|
+
if (remaining <= 0) {
|
97
|
+
clearTimeout(timeout);
|
98
|
+
$interval.cancel(timeout);
|
99
|
+
timeout = null;
|
100
|
+
previous = now;
|
101
|
+
return func.call();
|
102
|
+
} else {
|
103
|
+
if (!timeout) {
|
104
|
+
return timeout = $interval(later, remaining, 1);
|
105
|
+
}
|
106
|
+
}
|
107
|
+
};
|
108
|
+
};
|
109
|
+
if (THROTTLE_MILLISECONDS != null) {
|
110
|
+
handler = throttle(handler, THROTTLE_MILLISECONDS);
|
111
|
+
}
|
112
|
+
scope.$on('$destroy', function() {
|
113
|
+
return container.unbind('scroll', handler);
|
114
|
+
});
|
115
|
+
handleInfiniteScrollDistance = function(v) {
|
116
|
+
return scrollDistance = parseFloat(v) || 0;
|
117
|
+
};
|
118
|
+
scope.$watch('infiniteScrollDistance', handleInfiniteScrollDistance);
|
119
|
+
handleInfiniteScrollDistance(scope.infiniteScrollDistance);
|
120
|
+
handleInfiniteScrollDisabled = function(v) {
|
121
|
+
scrollEnabled = !v;
|
122
|
+
if (scrollEnabled && checkWhenEnabled) {
|
123
|
+
checkWhenEnabled = false;
|
124
|
+
return handler();
|
125
|
+
}
|
126
|
+
};
|
127
|
+
scope.$watch('infiniteScrollDisabled', handleInfiniteScrollDisabled);
|
128
|
+
handleInfiniteScrollDisabled(scope.infiniteScrollDisabled);
|
129
|
+
handleInfiniteScrollUseDocumentBottom = function(v) {
|
130
|
+
return useDocumentBottom = v;
|
131
|
+
};
|
132
|
+
scope.$watch('infiniteScrollUseDocumentBottom', handleInfiniteScrollUseDocumentBottom);
|
133
|
+
handleInfiniteScrollUseDocumentBottom(scope.infiniteScrollUseDocumentBottom);
|
134
|
+
changeContainer = function(newContainer) {
|
135
|
+
if (container != null) {
|
136
|
+
container.unbind('scroll', handler);
|
137
|
+
}
|
138
|
+
container = newContainer;
|
139
|
+
if (newContainer != null) {
|
140
|
+
return container.bind('scroll', handler);
|
141
|
+
}
|
142
|
+
};
|
143
|
+
changeContainer(windowElement);
|
144
|
+
handleInfiniteScrollContainer = function(newContainer) {
|
145
|
+
if ((newContainer == null) || newContainer.length === 0) {
|
146
|
+
return;
|
147
|
+
}
|
148
|
+
if (newContainer instanceof HTMLElement) {
|
149
|
+
newContainer = angular.element(newContainer);
|
150
|
+
} else if (typeof newContainer.append === 'function') {
|
151
|
+
newContainer = angular.element(newContainer[newContainer.length - 1]);
|
152
|
+
} else if (typeof newContainer === 'string') {
|
153
|
+
newContainer = angular.element(document.querySelector(newContainer));
|
154
|
+
}
|
155
|
+
if (newContainer != null) {
|
156
|
+
return changeContainer(newContainer);
|
157
|
+
} else {
|
158
|
+
throw new Exception("invalid infinite-scroll-container attribute.");
|
159
|
+
}
|
160
|
+
};
|
161
|
+
scope.$watch('infiniteScrollContainer', handleInfiniteScrollContainer);
|
162
|
+
handleInfiniteScrollContainer(scope.infiniteScrollContainer || []);
|
163
|
+
if (attrs.infiniteScrollParent != null) {
|
164
|
+
changeContainer(angular.element(elem.parent()));
|
165
|
+
}
|
166
|
+
if (attrs.infiniteScrollImmediateCheck != null) {
|
167
|
+
immediateCheck = scope.$eval(attrs.infiniteScrollImmediateCheck);
|
168
|
+
}
|
169
|
+
return $interval((function() {
|
170
|
+
if (immediateCheck) {
|
171
|
+
return handler();
|
172
|
+
}
|
173
|
+
}), 0, 1);
|
174
|
+
}
|
175
|
+
};
|
176
|
+
}
|
177
|
+
]);
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bastion
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric D Helms
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-06-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: angular-rails-templates
|
@@ -81,7 +81,6 @@ files:
|
|
81
81
|
- app/assets/javascripts/bastion/components/bst-flyout.directive.js
|
82
82
|
- app/assets/javascripts/bastion/components/bst-form-buttons.directive.js
|
83
83
|
- app/assets/javascripts/bastion/components/bst-form-group.directive.js
|
84
|
-
- app/assets/javascripts/bastion/components/bst-infinite-scroll.directive.js
|
85
84
|
- app/assets/javascripts/bastion/components/bst-menu.directive.js
|
86
85
|
- app/assets/javascripts/bastion/components/bst-modal.directive.js
|
87
86
|
- app/assets/javascripts/bastion/components/bst-on-enter.directive.js
|
@@ -183,7 +182,6 @@ files:
|
|
183
182
|
- test/components/bst-flyout.directive.test.js
|
184
183
|
- test/components/bst-form-buttons.directive.test.js
|
185
184
|
- test/components/bst-form-group.directive.test.js
|
186
|
-
- test/components/bst-infinite-scroll.directive.test.js
|
187
185
|
- test/components/bst-menu.directive.test.js
|
188
186
|
- test/components/bst-modal.directive.test.js
|
189
187
|
- test/components/bst-nutupane-table.directive.test.js
|
@@ -1020,6 +1018,7 @@ files:
|
|
1020
1018
|
- vendor/assets/javascripts/bastion/angular/angular.js
|
1021
1019
|
- vendor/assets/javascripts/bastion/es5-shim/es5-shim.js
|
1022
1020
|
- vendor/assets/javascripts/bastion/json3/json3.js
|
1021
|
+
- vendor/assets/javascripts/bastion/ngInfiniteScroll/ng-infinite-scroll.js
|
1023
1022
|
- vendor/assets/javascripts/bastion/ngUpload/ng-upload.js
|
1024
1023
|
- vendor/assets/javascripts/bastion/underscore/underscore.js
|
1025
1024
|
- vendor/assets/stylesheets/bastion/bootstrap/alerts.less
|
@@ -1156,7 +1155,6 @@ test_files:
|
|
1156
1155
|
- test/menu/menu-expander.service.test.js
|
1157
1156
|
- test/components/page-title.directive.test.js
|
1158
1157
|
- test/components/bst-table.directive.test.js
|
1159
|
-
- test/components/bst-infinite-scroll.directive.test.js
|
1160
1158
|
- test/components/bst-container-scroll.directive.test.js
|
1161
1159
|
- test/components/bst-modal.directive.test.js
|
1162
1160
|
- test/components/bst-alert.directive.test.js
|
@@ -1,76 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* @ngdoc directive
|
3
|
-
* @name Bastion.components.directive:bstInfiniteScroll
|
4
|
-
*
|
5
|
-
* @description
|
6
|
-
* The infinite scroll directive should be applied to a wrapping div around another element
|
7
|
-
* and provides automatic loading when a user scrolls to the bottom of the element.
|
8
|
-
*
|
9
|
-
* Note that the element using the bst-infinite-scroll directive should have it's overflow
|
10
|
-
* set properly.
|
11
|
-
*
|
12
|
-
* @requires $window
|
13
|
-
*
|
14
|
-
* @example
|
15
|
-
* <pre>
|
16
|
-
* <div bst-infinite-scroll="loadMore()" style="height: 100px; overflow-y: auto;">
|
17
|
-
* <p style="height: 1000px;">Hello</p>
|
18
|
-
* </div>
|
19
|
-
* </pre>
|
20
|
-
*/
|
21
|
-
angular.module('Bastion.components').directive('bstInfiniteScroll', ['$window', function ($window) {
|
22
|
-
return {
|
23
|
-
scope: {
|
24
|
-
data: '=',
|
25
|
-
loadMoreFunction: '&bstInfiniteScroll',
|
26
|
-
skipInitialLoad: '='
|
27
|
-
},
|
28
|
-
controller: function ($scope, $element) {
|
29
|
-
var result, getScrollHeight, isPromise, loadUntilScroll,
|
30
|
-
raw = $element[0];
|
31
|
-
|
32
|
-
$element.bind('scroll', function () {
|
33
|
-
var sliderPosition = raw.scrollTop + raw.offsetHeight;
|
34
|
-
if (sliderPosition > 0 && sliderPosition >= raw.scrollHeight - 1) {
|
35
|
-
$scope.loadMoreFunction();
|
36
|
-
}
|
37
|
-
});
|
38
|
-
|
39
|
-
getScrollHeight = function () {
|
40
|
-
var scrollHeight = 0;
|
41
|
-
$element.children().each(function () {
|
42
|
-
scrollHeight = scrollHeight + angular.element(this).get(0).scrollHeight;
|
43
|
-
});
|
44
|
-
return scrollHeight;
|
45
|
-
};
|
46
|
-
|
47
|
-
isPromise = function (promise) {
|
48
|
-
return promise && promise.hasOwnProperty('then');
|
49
|
-
};
|
50
|
-
|
51
|
-
loadUntilScroll = function () {
|
52
|
-
var loadResult;
|
53
|
-
|
54
|
-
if (getScrollHeight() < $element.height()) {
|
55
|
-
loadResult = $scope.loadMoreFunction();
|
56
|
-
if (isPromise(loadResult)) {
|
57
|
-
loadResult.then(function () {
|
58
|
-
if (getScrollHeight() < $element.height()) {
|
59
|
-
loadUntilScroll();
|
60
|
-
}
|
61
|
-
});
|
62
|
-
}
|
63
|
-
}
|
64
|
-
};
|
65
|
-
|
66
|
-
angular.element($window).bind('resize', loadUntilScroll);
|
67
|
-
|
68
|
-
if (!$scope.skipInitialLoad && (angular.isUndefined($scope.data) || $scope.data.length === 0)) {
|
69
|
-
result = $scope.loadMoreFunction();
|
70
|
-
if (isPromise(result)) {
|
71
|
-
result.then(loadUntilScroll);
|
72
|
-
}
|
73
|
-
}
|
74
|
-
}
|
75
|
-
};
|
76
|
-
}]);
|
@@ -1,127 +0,0 @@
|
|
1
|
-
describe('Directive: bstInfiniteScroll', function () {
|
2
|
-
var $scope, $compile, $q, element;
|
3
|
-
|
4
|
-
beforeEach(module('Bastion.components'));
|
5
|
-
|
6
|
-
beforeEach(inject(function ($rootScope, _$compile_, _$q_){
|
7
|
-
$scope = $rootScope;
|
8
|
-
$compile = _$compile_;
|
9
|
-
$q = _$q_;
|
10
|
-
|
11
|
-
$scope.scrollHandler = {
|
12
|
-
doIt: function() {
|
13
|
-
var deferred = $q.defer();
|
14
|
-
element.append('<p style="height: 10px;"></p>');
|
15
|
-
deferred.resolve({});
|
16
|
-
return deferred.promise;
|
17
|
-
}
|
18
|
-
};
|
19
|
-
$scope.data = [];
|
20
|
-
element = angular.element('<div data="data" bst-infinite-scroll="scrollHandler.doIt()" style="height: 100px; position: absolute; overflow-y: auto;"></div>');
|
21
|
-
$('body').append(element);
|
22
|
-
}));
|
23
|
-
|
24
|
-
describe("loads more results if scrolling near the bottom", function() {
|
25
|
-
beforeEach(function() {
|
26
|
-
$compile(element)($scope);
|
27
|
-
$scope.$digest();
|
28
|
-
});
|
29
|
-
|
30
|
-
it("calls the provided scroll function when scrolling near the bottom.", function() {
|
31
|
-
spyOn($scope.scrollHandler, "doIt");
|
32
|
-
|
33
|
-
// 95% of the height of the scroll area
|
34
|
-
element.scrollTop(element[0].scrollHeight *.95);
|
35
|
-
element.trigger('scroll');
|
36
|
-
|
37
|
-
expect($scope.scrollHandler.doIt).toHaveBeenCalled();
|
38
|
-
});
|
39
|
-
|
40
|
-
it("does not calls the provided scroll function when not scrolling near the bottom.", function() {
|
41
|
-
spyOn($scope.scrollHandler, "doIt");
|
42
|
-
|
43
|
-
// 10% of the height of the scroll area
|
44
|
-
element.scrollTop(element[0].scrollHeight *.10);
|
45
|
-
element.trigger('scroll');
|
46
|
-
|
47
|
-
expect($scope.scrollHandler.doIt).not.toHaveBeenCalled();
|
48
|
-
});
|
49
|
-
});
|
50
|
-
|
51
|
-
describe("loads more results if there is not a scrollbar", function() {
|
52
|
-
it("on initial load.", function() {
|
53
|
-
spyOn($scope.scrollHandler, "doIt").andCallThrough();
|
54
|
-
$compile(element)($scope);
|
55
|
-
$scope.$digest();
|
56
|
-
expect($scope.scrollHandler.doIt.callCount).toBe(10);
|
57
|
-
});
|
58
|
-
});
|
59
|
-
|
60
|
-
describe("does not load more results if there is already a scrollbar", function() {
|
61
|
-
beforeEach(function() {
|
62
|
-
$compile(element)($scope);
|
63
|
-
$scope.$digest();
|
64
|
-
});
|
65
|
-
|
66
|
-
it("on initial load.", function() {
|
67
|
-
spyOn($scope.scrollHandler, "doIt").andCallThrough();
|
68
|
-
$scope.$digest();
|
69
|
-
expect($scope.scrollHandler.doIt.callCount).toBe(0);
|
70
|
-
});
|
71
|
-
});
|
72
|
-
|
73
|
-
describe("loads more results based on the height of the elements", function() {
|
74
|
-
beforeEach(function() {
|
75
|
-
element.empty();
|
76
|
-
element.append('<p style="height: 10px;"></p>');
|
77
|
-
});
|
78
|
-
|
79
|
-
it("loads more results if the scroll height is less than element height.", function() {
|
80
|
-
spyOn($scope.scrollHandler, "doIt").andCallThrough();
|
81
|
-
element.height("11px");
|
82
|
-
|
83
|
-
$compile(element)($scope);
|
84
|
-
$scope.$digest();
|
85
|
-
$scope.$digest();
|
86
|
-
|
87
|
-
|
88
|
-
expect($scope.scrollHandler.doIt.callCount).toBe(1);
|
89
|
-
});
|
90
|
-
|
91
|
-
it("does not load more results if the scroll height is equal to the element height.", function() {
|
92
|
-
element.height("10px");
|
93
|
-
|
94
|
-
$compile(element)($scope);
|
95
|
-
|
96
|
-
spyOn($scope.scrollHandler, "doIt");
|
97
|
-
$scope.$digest();
|
98
|
-
|
99
|
-
expect($scope.scrollHandler.doIt.callCount).toBe(0);
|
100
|
-
});
|
101
|
-
|
102
|
-
it("does not load more results if the scroll height is greater than the element height.", function() {
|
103
|
-
element.height("9px");
|
104
|
-
element.append('<p style="height: 10px;"></p>');
|
105
|
-
$compile(element)($scope);
|
106
|
-
|
107
|
-
spyOn($scope.scrollHandler, "doIt");
|
108
|
-
$scope.$digest();
|
109
|
-
|
110
|
-
expect($scope.scrollHandler.doIt.callCount).toBe(0);
|
111
|
-
});
|
112
|
-
|
113
|
-
it("on resize", function() {
|
114
|
-
element.height("11px");
|
115
|
-
$compile(element)($scope);
|
116
|
-
$scope.$digest();
|
117
|
-
spyOn($scope.scrollHandler, "doIt").andCallThrough();
|
118
|
-
|
119
|
-
element.height("21px");
|
120
|
-
$(window).trigger('resize');
|
121
|
-
$scope.$digest();
|
122
|
-
|
123
|
-
|
124
|
-
expect($scope.scrollHandler.doIt.callCount).toBe(1);
|
125
|
-
});
|
126
|
-
});
|
127
|
-
});
|