Skip to content
This repository was archived by the owner on Oct 5, 2019. It is now read-only.

Commit 988a418

Browse files
committed
Merge pull request #105 from JulianWielga/patch-3
better formatter
2 parents 96f14c3 + b6d0239 commit 988a418

File tree

3 files changed

+34
-27
lines changed

3 files changed

+34
-27
lines changed

bower.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
"tests"
2323
],
2424
"dependencies": {
25-
"seiyria-bootstrap-slider": "~5.2.6",
26-
"angular": "~1.3.15||~1.4.7"
25+
"seiyria-bootstrap-slider": ">= 5.2 < 6.0",
26+
"angular": ">= 1.3 < 1.5"
2727
}
2828
}

slider.js

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ angular.module('ui.bootstrap-slider', [])
2727
link: function ($scope, element, attrs, ngModelCtrl, $compile) {
2828
var ngModelDeregisterFn, ngDisabledDeregisterFn;
2929

30-
initSlider();
30+
var slider = initSlider();
3131

3232
function initSlider() {
3333
var options = {};
@@ -107,7 +107,11 @@ angular.module('ui.bootstrap-slider', [])
107107
setFloatOption('value', $scope.value, 5);
108108
}
109109

110-
if ($scope.formatter) options.formatter = $scope.$eval($scope.formatter);
110+
if (attrs.formatter) {
111+
options.formatter = function(value) {
112+
return $scope.formatter({value: value});
113+
}
114+
}
111115

112116

113117
// check if slider jQuery plugin exists
@@ -140,19 +144,18 @@ angular.module('ui.bootstrap-slider', [])
140144
}
141145
angular.forEach(updateEvent, function (sliderEvent) {
142146
slider.on(sliderEvent, function (ev) {
143-
ngModelCtrl.$setViewValue(ev);
144147
$timeout(function () {
145-
$scope.$apply();
148+
ngModelCtrl.$setViewValue(ev);
146149
});
147150
});
148151
});
149152
slider.on('change', function (ev) {
150-
ngModelCtrl.$setViewValue(ev.newValue);
151153
$timeout(function () {
152-
$scope.$apply();
154+
ngModelCtrl.$setViewValue(ev.newValue);
153155
});
154156
});
155157

158+
156159
// Event listeners
157160
var sliderEvents = {
158161
slideStart: 'onStartSlide',
@@ -164,15 +167,9 @@ angular.module('ui.bootstrap-slider', [])
164167
slider.on(sliderEvent, function (ev) {
165168
if ($scope[sliderEventAttr]) {
166169

167-
var callback = function () {
170+
$timeout(function () {
168171
fn($scope.$parent, { $event: ev, value: ev });
169-
}
170-
171-
if ($rootScope.$$phase) {
172-
$scope.$evalAsync(callback);
173-
} else {
174-
$scope.$apply(callback);
175-
}
172+
});
176173
}
177174
});
178175
});
@@ -195,21 +192,30 @@ angular.module('ui.bootstrap-slider', [])
195192
// deregister ngModel watcher to prevent memory leaks
196193
if (angular.isFunction(ngModelDeregisterFn)) ngModelDeregisterFn();
197194
ngModelDeregisterFn = $scope.$watch('ngModel', function (value) {
198-
if($scope.range){
199-
slider.setValue(value);
200-
}else{
201-
slider.setValue(parseFloat(value));
202-
}
195+
$timeout(function() {
196+
if($scope.range){
197+
slider.setValue(value);
198+
}else{
199+
slider.setValue(parseFloat(value));
200+
}
201+
slider.relayout();
202+
});
203203
}, true);
204+
205+
return slider;
204206
}
205207

206208

207209
var watchers = ['min', 'max', 'step', 'range', 'scale'];
208210
angular.forEach(watchers, function (prop) {
209211
$scope.$watch(prop, function () {
210-
initSlider();
212+
slider = initSlider();
211213
});
212214
});
215+
216+
$scope.$on('slider:relayout', function() {
217+
slider.relayout();
218+
});
213219
}
214220
};
215221
}])

test.html

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
<input id="sliderId" type="text" ng-model="testOptions.sliderId">
1515

1616
<label for="modelValue">Slider Value in ng-model:</label>
17-
<input id="modelValue" type="range" ng-model="model.first" min="testOptions.min" step="testOptions.step"
18-
max="testOptions.max">
19-
<input type="number" ng-model="model.first" class="form-control">
17+
<input id="modelValue" type="range" ng-model="model.first" min="{{testOptions.min}}" step="{{testOptions.step}}"
18+
max="{{testOptions.max}}">
19+
<input ng-model="model.first" class="form-control">
2020

2121
<label for="value">Value:</label>
2222
<input id="value" type="number" ng-model="value.first" class="form-control">
@@ -71,7 +71,7 @@
7171
max="testOptions.max"
7272
step="testOptions.step"
7373
range="testOptions.range"
74-
precision="testOptions.precision"
74+
precision="{{ testOptions.precision }}"
7575
reversed="{{ testOptions.reversed }}"
7676
orientation="{{ testOptions.orientation }}"
7777
handle="{{ testOptions.handle }}"
@@ -122,14 +122,15 @@
122122

123123
<label for="formatter_sufffix">Formatter suffix:</label>
124124
<input id="formatter_sufffix" type="text" ng-model="suffix" class="form-control">
125+
<button ng-click="$broadcast('slider:relayout')">Relayout</button>
125126
</p>
126127

127128
Slider with configurable tooltip<br>
128129
<slider slider-id="tooltipSlider"
129130
ng-model="model.third"
130131
precision="{{ testOptions.precision }}"
131132
tooltip="{{ testOptions.tooltip }}"
132-
formatter="formatterFn"
133+
formatter="formatterFn(value)"
133134
>
134135
</slider>
135136
Model: {{model.third}}<br>

0 commit comments

Comments
 (0)