Skip to content

Commit 8e13dcd

Browse files
committed
Merge pull request #75 from harmoney-nikr/feature/getter-setter-support
Added support for getterSetter model values
2 parents 37f5064 + 5623d39 commit 8e13dcd

File tree

4 files changed

+331
-169
lines changed

4 files changed

+331
-169
lines changed

angular.rangeSlider.js

Lines changed: 50 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,8 @@
128128
showValues: '@',
129129
pinHandle: '@',
130130
preventEqualMinMax: '@',
131-
attachHandleValues: '@'
131+
attachHandleValues: '@',
132+
getterSetter: '@' // Allow the use of getterSetters for model values
132133
};
133134

134135
if (legacySupport) {
@@ -180,8 +181,8 @@
180181
down = false;
181182

182183
// filtered
183-
scope.filteredModelMin = scope.modelMin;
184-
scope.filteredModelMax = scope.modelMax;
184+
scope.filteredModelMin = modelMin();
185+
scope.filteredModelMax = modelMax();
185186

186187
/**
187188
* FALL BACK TO DEFAULTS FOR SOME ATTRIBUTES
@@ -285,13 +286,34 @@
285286
}
286287
});
287288

289+
// GetterSetters for model values
290+
291+
function modelMin(newValue) {
292+
if(scope.getterSetter) {
293+
return arguments.length ? scope.modelMin(newValue) : scope.modelMin();
294+
} else {
295+
return arguments.length ? (scope.modelMin = newValue) : scope.modelMin;
296+
}
297+
}
298+
299+
function modelMax(newValue) {
300+
if(scope.getterSetter) {
301+
return arguments.length ? scope.modelMax(newValue) : scope.modelMax();
302+
} else {
303+
return arguments.length ? (scope.modelMax = newValue) : scope.modelMax;
304+
}
305+
}
288306

289307
// listen for changes to values
290308
scope.$watch('min', setMinMax);
291309
scope.$watch('max', setMinMax);
292310

293-
scope.$watch('modelMin', setModelMinMax);
294-
scope.$watch('modelMax', setModelMinMax);
311+
scope.$watch(function () {
312+
return modelMin();
313+
}, setModelMinMax);
314+
scope.$watch(function () {
315+
return modelMax();
316+
}, setModelMinMax);
295317

296318
/**
297319
* HANDLE CHANGES
@@ -347,35 +369,35 @@
347369

348370
function setModelMinMax() {
349371

350-
if (scope.modelMin > scope.modelMax) {
372+
if (modelMin() > modelMax()) {
351373
throwWarning('modelMin must be less than or equal to modelMax');
352374
// reset values to correct
353-
scope.modelMin = scope.modelMax;
375+
modelMin(modelMax());
354376
}
355377

356378
// only do stuff when both values are ready
357379
if (
358-
(angular.isDefined(scope.modelMin) || scope.pinHandle === 'min') &&
359-
(angular.isDefined(scope.modelMax) || scope.pinHandle === 'max')
380+
(angular.isDefined(modelMin()) || scope.pinHandle === 'min') &&
381+
(angular.isDefined(modelMax()) || scope.pinHandle === 'max')
360382
) {
361383

362384
// make sure they are numbers
363-
if (!isNumber(scope.modelMin)) {
385+
if (!isNumber(modelMin())) {
364386
if (scope.pinHandle !== 'min') {
365387
throwWarning('modelMin must be a number');
366388
}
367-
scope.modelMin = scope.min;
389+
modelMin(scope.min);
368390
}
369391

370-
if (!isNumber(scope.modelMax)) {
392+
if (!isNumber(modelMax())) {
371393
if (scope.pinHandle !== 'max') {
372394
throwWarning('modelMax must be a number');
373395
}
374-
scope.modelMax = scope.max;
396+
modelMax(scope.max);
375397
}
376398

377-
var handle1pos = restrict(((scope.modelMin - scope.min) / range) * 100),
378-
handle2pos = restrict(((scope.modelMax - scope.min) / range) * 100),
399+
var handle1pos = restrict(((modelMin() - scope.min) / range) * 100),
400+
handle2pos = restrict(((modelMax() - scope.min) / range) * 100),
379401
value1pos,
380402
value2pos;
381403

@@ -385,12 +407,12 @@
385407
}
386408

387409
// make sure the model values are within the allowed range
388-
scope.modelMin = Math.max(scope.min, scope.modelMin);
389-
scope.modelMax = Math.min(scope.max, scope.modelMax);
410+
modelMin(Math.max(scope.min, modelMin()));
411+
modelMax(Math.min(scope.max, modelMax()));
390412

391413
if (scope.filter && scope.filterOptions) {
392-
scope.filteredModelMin = $filter(scope.filter)(scope.modelMin, scope.filterOptions);
393-
scope.filteredModelMax = $filter(scope.filter)(scope.modelMax, scope.filterOptions);
414+
scope.filteredModelMin = $filter(scope.filter)(modelMin(), scope.filterOptions);
415+
scope.filteredModelMax = $filter(scope.filter)(modelMax(), scope.filterOptions);
394416
} else if (scope.filter) {
395417

396418
var filterTokens = scope.filter.split(':'),
@@ -410,18 +432,18 @@
410432

411433
modelMinOptions = filterOptions.slice();
412434
modelMaxOptions = filterOptions.slice();
413-
modelMinOptions.unshift(scope.modelMin);
414-
modelMaxOptions.unshift(scope.modelMax);
435+
modelMinOptions.unshift(modelMin());
436+
modelMaxOptions.unshift(modelMax());
415437

416438
scope.filteredModelMin = $filter(filterName).apply(null, modelMinOptions);
417439
scope.filteredModelMax = $filter(filterName).apply(null, modelMaxOptions);
418440
} else {
419-
scope.filteredModelMin = scope.modelMin;
420-
scope.filteredModelMax = scope.modelMax;
441+
scope.filteredModelMin = modelMin();
442+
scope.filteredModelMax = modelMax();
421443
}
422444

423445
// check for no range
424-
if (scope.min === scope.max && scope.modelMin == scope.modelMax) {
446+
if (scope.min === scope.max && modelMin() == modelMax()) {
425447

426448
// reposition handles
427449
angular.element(handles[0]).css(pos, '0%');
@@ -471,7 +493,7 @@
471493

472494
var handleDownClass = (index === 0 ? 'ngrs-handle-min' : 'ngrs-handle-max') + '-down',
473495
//unbind = $handle.add($document).add('body'),
474-
modelValue = (index === 0 ? scope.modelMin : scope.modelMax) - scope.min,
496+
modelValue = (index === 0 ? modelMin() : modelMax()) - scope.min,
475497
originalPosition = (modelValue / range) * 100,
476498
originalClick = client(event),
477499
previousClick = originalClick,
@@ -510,7 +532,7 @@
510532
proposal,
511533
other,
512534
per = (scope.step / range) * 100,
513-
otherModelPosition = (((index === 0 ? scope.modelMax : scope.modelMin) - scope.min) / range) * 100;
535+
otherModelPosition = (((index === 0 ? modelMax() : modelMin()) - scope.min) / range) * 100;
514536

515537
if (currentClick[0] === "x") {
516538
return;
@@ -569,11 +591,11 @@
569591
if (index === 0) {
570592

571593
// update model as we slide
572-
scope.modelMin = parseFloat(parseFloat((((proposal * range) / 100) + scope.min)).toFixed(scope.decimalPlaces));
594+
modelMin(parseFloat(parseFloat((((proposal * range) / 100) + scope.min)).toFixed(scope.decimalPlaces)));
573595

574596
} else if (index === 1) {
575597

576-
scope.modelMax = parseFloat(parseFloat((((proposal * range) / 100) + scope.min)).toFixed(scope.decimalPlaces));
598+
modelMax(parseFloat(parseFloat((((proposal * range) / 100) + scope.min)).toFixed(scope.decimalPlaces)));
577599
}
578600

579601
// update angular

0 commit comments

Comments
 (0)