summaryrefslogtreecommitdiff
path: root/www/crm/wp-content/plugins/civicrm/civicrm/ang/crmMailingAB/Slider.js
diff options
context:
space:
mode:
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.js60
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._);