1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- app.directive('perfectScrollbar', ['$parse', '$window',
- function($parse, $window) {
- var psOptions = ['wheelSpeed', 'wheelPropagation', 'minScrollbarLength', 'useBothWheelAxes', 'useKeyboard', 'suppressScrollX', 'suppressScrollY', 'scrollXMarginOffset', 'scrollYMarginOffset', 'includePadding'//, 'onScroll', 'scrollDown'
- ];
- return {
- restrict: 'EA',
- transclude: true,
- template: '<div><div ng-transclude></div></div>',
- replace: true,
- link: function($scope, $elem, $attr) {
- var jqWindow = angular.element($window);
- var options = {};
- if(!$scope.app.isMobile) {
- for(var i = 0, l = psOptions.length; i < l; i++) {
- var opt = psOptions[i];
- if($attr[opt] !== undefined) {
- options[opt] = $parse($attr[opt])();
- }
- }
- $scope.$evalAsync(function() {
- $elem.perfectScrollbar(options);
- var onScrollHandler = $parse($attr.onScroll);
- $elem.scroll(function() {
- var scrollTop = $elem.scrollTop();
- var scrollHeight = $elem.prop('scrollHeight') - $elem.height();
- $scope.$apply(function() {
- onScrollHandler($scope, {
- scrollTop: scrollTop,
- scrollHeight: scrollHeight
- });
- });
- });
- });
- function update(event) {
- $scope.$evalAsync(function() {
- if($attr.scrollDown == 'true' && event != 'mouseenter') {
- setTimeout(function() {
- $($elem).scrollTop($($elem).prop("scrollHeight"));
- }, 100);
- }
- $elem.perfectScrollbar('update');
- });
- }
- // This is necessary when you don't watch anything with the scrollbar
- $elem.bind('mousemove', update);
- // Possible future improvement - check the type here and use the appropriate watch for non-arrays
- if($attr.refreshOnChange) {
- $scope.$watchCollection($attr.refreshOnChange, function() {
- update();
- });
- }
- // this is from a pull request - I am not totally sure what the original issue is but seems harmless
- if($attr.refreshOnResize) {
- jqWindow.on('resize', update);
- }
- $elem.bind('$destroy', function() {
- jqWindow.off('resize', update);
- $elem.perfectScrollbar('destroy');
- });
- }
- }
- };
- }]);
|