|
128 | 128 | showValues: '@',
|
129 | 129 | pinHandle: '@',
|
130 | 130 | preventEqualMinMax: '@',
|
131 |
| - attachHandleValues: '@' |
| 131 | + attachHandleValues: '@', |
| 132 | + getterSetter: '@' // Allow the use of getterSetters for model values |
132 | 133 | };
|
133 | 134 |
|
134 | 135 | if (legacySupport) {
|
|
180 | 181 | down = false;
|
181 | 182 |
|
182 | 183 | // filtered
|
183 |
| - scope.filteredModelMin = scope.modelMin; |
184 |
| - scope.filteredModelMax = scope.modelMax; |
| 184 | + scope.filteredModelMin = modelMin(); |
| 185 | + scope.filteredModelMax = modelMax(); |
185 | 186 |
|
186 | 187 | /**
|
187 | 188 | * FALL BACK TO DEFAULTS FOR SOME ATTRIBUTES
|
|
285 | 286 | }
|
286 | 287 | });
|
287 | 288 |
|
| 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 | + } |
288 | 306 |
|
289 | 307 | // listen for changes to values
|
290 | 308 | scope.$watch('min', setMinMax);
|
291 | 309 | scope.$watch('max', setMinMax);
|
292 | 310 |
|
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); |
295 | 317 |
|
296 | 318 | /**
|
297 | 319 | * HANDLE CHANGES
|
|
347 | 369 |
|
348 | 370 | function setModelMinMax() {
|
349 | 371 |
|
350 |
| - if (scope.modelMin > scope.modelMax) { |
| 372 | + if (modelMin() > modelMax()) { |
351 | 373 | throwWarning('modelMin must be less than or equal to modelMax');
|
352 | 374 | // reset values to correct
|
353 |
| - scope.modelMin = scope.modelMax; |
| 375 | + modelMin(modelMax()); |
354 | 376 | }
|
355 | 377 |
|
356 | 378 | // only do stuff when both values are ready
|
357 | 379 | 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') |
360 | 382 | ) {
|
361 | 383 |
|
362 | 384 | // make sure they are numbers
|
363 |
| - if (!isNumber(scope.modelMin)) { |
| 385 | + if (!isNumber(modelMin())) { |
364 | 386 | if (scope.pinHandle !== 'min') {
|
365 | 387 | throwWarning('modelMin must be a number');
|
366 | 388 | }
|
367 |
| - scope.modelMin = scope.min; |
| 389 | + modelMin(scope.min); |
368 | 390 | }
|
369 | 391 |
|
370 |
| - if (!isNumber(scope.modelMax)) { |
| 392 | + if (!isNumber(modelMax())) { |
371 | 393 | if (scope.pinHandle !== 'max') {
|
372 | 394 | throwWarning('modelMax must be a number');
|
373 | 395 | }
|
374 |
| - scope.modelMax = scope.max; |
| 396 | + modelMax(scope.max); |
375 | 397 | }
|
376 | 398 |
|
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), |
379 | 401 | value1pos,
|
380 | 402 | value2pos;
|
381 | 403 |
|
|
385 | 407 | }
|
386 | 408 |
|
387 | 409 | // 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())); |
390 | 412 |
|
391 | 413 | 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); |
394 | 416 | } else if (scope.filter) {
|
395 | 417 |
|
396 | 418 | var filterTokens = scope.filter.split(':'),
|
|
410 | 432 |
|
411 | 433 | modelMinOptions = filterOptions.slice();
|
412 | 434 | modelMaxOptions = filterOptions.slice();
|
413 |
| - modelMinOptions.unshift(scope.modelMin); |
414 |
| - modelMaxOptions.unshift(scope.modelMax); |
| 435 | + modelMinOptions.unshift(modelMin()); |
| 436 | + modelMaxOptions.unshift(modelMax()); |
415 | 437 |
|
416 | 438 | scope.filteredModelMin = $filter(filterName).apply(null, modelMinOptions);
|
417 | 439 | scope.filteredModelMax = $filter(filterName).apply(null, modelMaxOptions);
|
418 | 440 | } else {
|
419 |
| - scope.filteredModelMin = scope.modelMin; |
420 |
| - scope.filteredModelMax = scope.modelMax; |
| 441 | + scope.filteredModelMin = modelMin(); |
| 442 | + scope.filteredModelMax = modelMax(); |
421 | 443 | }
|
422 | 444 |
|
423 | 445 | // check for no range
|
424 |
| - if (scope.min === scope.max && scope.modelMin == scope.modelMax) { |
| 446 | + if (scope.min === scope.max && modelMin() == modelMax()) { |
425 | 447 |
|
426 | 448 | // reposition handles
|
427 | 449 | angular.element(handles[0]).css(pos, '0%');
|
|
471 | 493 |
|
472 | 494 | var handleDownClass = (index === 0 ? 'ngrs-handle-min' : 'ngrs-handle-max') + '-down',
|
473 | 495 | //unbind = $handle.add($document).add('body'),
|
474 |
| - modelValue = (index === 0 ? scope.modelMin : scope.modelMax) - scope.min, |
| 496 | + modelValue = (index === 0 ? modelMin() : modelMax()) - scope.min, |
475 | 497 | originalPosition = (modelValue / range) * 100,
|
476 | 498 | originalClick = client(event),
|
477 | 499 | previousClick = originalClick,
|
|
510 | 532 | proposal,
|
511 | 533 | other,
|
512 | 534 | 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; |
514 | 536 |
|
515 | 537 | if (currentClick[0] === "x") {
|
516 | 538 | return;
|
|
569 | 591 | if (index === 0) {
|
570 | 592 |
|
571 | 593 | // 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))); |
573 | 595 |
|
574 | 596 | } else if (index === 1) {
|
575 | 597 |
|
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))); |
577 | 599 | }
|
578 | 600 |
|
579 | 601 | // update angular
|
|
0 commit comments