Skip to content

Commit 77a0aeb

Browse files
committed
Merge pull request #266 from rabbitfang/options-expression-binding
feat(rzSliderOptions): Change rzSliderOptions to use expression binding
2 parents f02f74e + 018d93e commit 77a0aeb

File tree

7 files changed

+61
-16
lines changed

7 files changed

+61
-16
lines changed

dist/rzslider.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*! angularjs-slider - v2.8.0 -
22
(c) Rafal Zajac <rzajac@gmail.com>, Valentin Hervieu <valentin@hervieu.me>, Jussi Saarivirta <jusasi@gmail.com>, Angelin Sirbu <angelin.sirbu@gmail.com> -
33
https://github.com/angular-slider/angularjs-slider -
4-
2016-02-09 */
4+
2016-02-16 */
55
rzslider {
66
position: relative;
77
display: inline-block;

dist/rzslider.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*! angularjs-slider - v2.8.0 -
22
(c) Rafal Zajac <rzajac@gmail.com>, Valentin Hervieu <valentin@hervieu.me>, Jussi Saarivirta <jusasi@gmail.com>, Angelin Sirbu <angelin.sirbu@gmail.com> -
33
https://github.com/angular-slider/angularjs-slider -
4-
2016-02-09 */
4+
2016-02-16 */
55
/*jslint unparam: true */
66
/*global angular: false, console: false, define, module */
77
(function(root, factory) {
@@ -330,7 +330,7 @@
330330

331331
// Watchers (order is important because in case of simultaneous change,
332332
// watchers will be called in the same order)
333-
this.scope.$watch('rzSliderOptions', function(newValue, oldValue) {
333+
this.scope.$watch('rzSliderOptions()', function(newValue, oldValue) {
334334
if (newValue === oldValue)
335335
return;
336336
self.applyOptions();
@@ -394,7 +394,13 @@
394394
* Read the user options and apply them to the slider model
395395
*/
396396
applyOptions: function() {
397-
this.options = RzSliderOptions.getOptions(this.scope.rzSliderOptions);
397+
var sliderOptions;
398+
if (this.scope.rzSliderOptions)
399+
sliderOptions = this.scope.rzSliderOptions();
400+
else
401+
sliderOptions = {};
402+
403+
this.options = RzSliderOptions.getOptions(sliderOptions);
398404

399405
if (this.options.step <= 0)
400406
this.options.step = 1;
@@ -1664,7 +1670,7 @@
16641670
scope: {
16651671
rzSliderModel: '=?',
16661672
rzSliderHigh: '=?',
1667-
rzSliderOptions: '=?',
1673+
rzSliderOptions: '&?',
16681674
rzSliderTplUrl: '@'
16691675
},
16701676

dist/rzslider.min.css

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/rzslider.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/rzslider.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@
334334

335335
// Watchers (order is important because in case of simultaneous change,
336336
// watchers will be called in the same order)
337-
this.scope.$watch('rzSliderOptions', function(newValue, oldValue) {
337+
this.scope.$watch('rzSliderOptions()', function(newValue, oldValue) {
338338
if (newValue === oldValue)
339339
return;
340340
self.applyOptions();
@@ -398,7 +398,13 @@
398398
* Read the user options and apply them to the slider model
399399
*/
400400
applyOptions: function() {
401-
this.options = RzSliderOptions.getOptions(this.scope.rzSliderOptions);
401+
var sliderOptions;
402+
if (this.scope.rzSliderOptions)
403+
sliderOptions = this.scope.rzSliderOptions();
404+
else
405+
sliderOptions = {};
406+
407+
this.options = RzSliderOptions.getOptions(sliderOptions);
402408

403409
if (this.options.step <= 0)
404410
this.options.step = 1;
@@ -1668,7 +1674,7 @@
16681674
scope: {
16691675
rzSliderModel: '=?',
16701676
rzSliderHigh: '=?',
1671-
rzSliderOptions: '=?',
1677+
rzSliderOptions: '&?',
16721678
rzSliderTplUrl: '@'
16731679
},
16741680

tests/specs/helper.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,21 @@
1111

1212
h.createSlider = function(sliderObj) {
1313
var template = '';
14-
if (sliderObj.options)
15-
template = '<rzslider rz-slider-model="slider.value" rz-slider-options="slider.options"></rzslider>';
14+
var optionsExpression = sliderObj.optionsExpression || 'slider.options';
15+
if (sliderObj.options || sliderObj.optionsExpression)
16+
template = '<rzslider rz-slider-model="slider.value" rz-slider-options="' +
17+
optionsExpression + '"></rzslider>';
1618
else
1719
template = '<rzslider rz-slider-model="slider.value"></rzslider>';
1820
h.initSlider(sliderObj, template);
1921
};
2022

2123
h.createRangeSlider = function(sliderObj) {
2224
var template = '';
23-
if (sliderObj.options)
25+
var optionsExpression = sliderObj.optionsExpression || 'slider.options';
26+
if (sliderObj.options || sliderObj.optionsExpression)
2427
template = '<rzslider rz-slider-model="slider.min" rz-slider-high="slider.max"' +
25-
'rz-slider-options="slider.options"></rzslider>';
28+
'rz-slider-options="' + optionsExpression + '"></rzslider>';
2629
else
2730
template = '<rzslider rz-slider-model="slider.min" rz-slider-high="slider.max"></rzslider>';
2831
h.initSlider(sliderObj, template);

tests/specs/options-handling-test.js

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,36 @@
481481
expect(helper.scope.slider.max).to.equal(100);
482482
});
483483
});
484+
485+
describe('options expression specific - ', function() {
486+
it('should safely handle null expressions', function() {
487+
var sliderConf = {
488+
value: 10,
489+
optionsExpression: 'thisDoesntExist'
490+
};
491+
492+
helper.createSlider(sliderConf);
493+
helper.scope.$digest();
494+
expect(helper.slider.step).to.equal(1);
495+
});
496+
497+
it('should not cause an infinite $digest loop with an expression that always returns a new object', function() {
498+
var sliderConf = {
499+
value: 10,
500+
options: function() {
501+
return {
502+
floor: 1,
503+
ceil: 1000
504+
};
505+
},
506+
optionsExpression: 'slider.options()'
507+
};
508+
509+
helper.createSlider(sliderConf);
510+
helper.scope.$digest();
511+
expect(helper.slider.minValue).to.equal(1);
512+
expect(helper.slider.maxValue).to.equal(1000);
513+
});
514+
});
484515
});
485516
}());
486-

0 commit comments

Comments
 (0)