1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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._);
|