diff options
Diffstat (limited to 'www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailingAB/Slider.js')
-rw-r--r-- | www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailingAB/Slider.js | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailingAB/Slider.js b/www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailingAB/Slider.js new file mode 100644 index 00000000..d26e35b1 --- /dev/null +++ b/www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailingAB/Slider.js @@ -0,0 +1,60 @@ +(function(angular, $, _) { + + // example: <div crm-mailing-ab-slider ng-model="abtest.ab.group_percentage"></div> + angular.module('crmMailingAB').directive('crmMailingAbSlider', function() { + return { + require: '?ngModel', + scope: {}, + templateUrl: '~/crmMailingAB/Slider.html', + link: function(scope, element, attrs, ngModel) { + var TEST_MIN = 1, TEST_MAX = 50; + var sliders = $('.slider-test,.slider-win', element); + var sliderTests = $('.slider-test', element); + var sliderWin = $('.slider-win', element); + + scope.ts = CRM.ts(null); + scope.testValue = 0; + scope.winValue = 100; + + // set the base value (following a GUI event) + function setValue(value) { + value = Math.min(TEST_MAX, Math.max(TEST_MIN, value)); + scope.$apply(function() { + ngModel.$setViewValue(value); + scope.testValue = value; + scope.winValue = 100 - (2 * scope.testValue); + sliderTests.slider('value', scope.testValue); + sliderWin.slider('value', scope.winValue); + }); + } + + sliders.slider({ + min: 0, + max: 100, + range: 'min', + step: 1 + }); + sliderTests.slider({ + slide: function slideTest(event, ui) { + event.preventDefault(); + setValue(ui.value); + } + }); + sliderWin.slider({ + slide: function slideWinner(event, ui) { + event.preventDefault(); + setValue(Math.round((100 - ui.value) / 2)); + } + }); + + ngModel.$render = function() { + scope.testValue = ngModel.$viewValue; + scope.winValue = 100 - (2 * scope.testValue); + sliderTests.slider('value', scope.testValue); + sliderWin.slider('value', scope.winValue); + }; + } + }; + }); + +})(angular, CRM.$, CRM._); |