-
Notifications
You must be signed in to change notification settings - Fork 62
/
Copy pathscrollbars.js
109 lines (87 loc) · 2.73 KB
/
scrollbars.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/**
* ng-scrollbars 0.0.11
*/
(function () {
'use strict';
function ScrollBarsProvider() {
this.defaults = {
scrollButtons: {
enable: true //enable scrolling buttons by default
},
axis: 'yx' //enable 2 axis scrollbars by default
};
// TODO: can we do this without jquery?
$.mCustomScrollbar.defaults.scrollButtons = this.defaults.scrollButtons;
$.mCustomScrollbar.defaults.axis = this.defaults.axis;
this.$get = function ScrollBarsProvider() {
return {
defaults: this.defaults
}
}
}
function render(defaults, configuredDefaults, elem, scope) {
elem.mCustomScrollbar('destroy');
var config = {};
if (scope.ngScrollbarsConfig) {
config = scope.ngScrollbarsConfig;
}
// apply configured provider defaults only if the scope's config isn't defined (it has priority in that case)
for (var setting in defaults) {
if (defaults.hasOwnProperty(setting)) {
switch (setting) {
case 'scrollButtons':
if (!config.hasOwnProperty(setting)) {
configuredDefaults.scrollButtons = defaults[setting];
}
break;
case 'axis':
if (!config.hasOwnProperty(setting)) {
configuredDefaults.axis = defaults[setting];
}
break;
default:
if (!config.hasOwnProperty(setting)) {
config[setting] = defaults[setting];
}
break;
}
}
}
elem.mCustomScrollbar(config);
}
function ScrollBarsDirective(ScrollBars) {
return {
scope: {
ngScrollbarsConfig: '=?',
ngScrollbarsUpdate: '=?',
ngScrollTo: '=?',
element: '=?'
},
link: function (scope, elem, attrs) {
scope.elem = elem;
var defaults = ScrollBars.defaults;
var configuredDefaults = $.mCustomScrollbar.defaults;
scope.ngScrollbarsUpdate = function () {
elem.mCustomScrollbar.apply(elem, arguments);
};
scope.$watch('ngScrollbarsConfig', function (newVal, oldVal) {
if (newVal !== undefined) {
render(defaults, configuredDefaults, elem, scope);
}
});
scope.$watch('ngScrollTo', function (newVal, oldVal) {
if (newVal !== undefined) {
elem.mCustomScrollbar('scrollTo', newVal);
scope.ngScrollTo = undefined;
}
});
render(defaults, configuredDefaults, elem, scope);
}
};
}
angular.module('ngScrollbars', [])
.provider('ScrollBars', ScrollBarsProvider)
.directive('ngScrollbars', ScrollBarsDirective);
ScrollBarsProvider.$inject = [];
ScrollBarsDirective.$inject = ['ScrollBars'];
})();