2021-06-08 08:28:56 +02:00
|
|
|
import coreModule from '../core/core_module';
|
2019-07-05 23:43:12 -07:00
|
|
|
import { rangeUtil } from '@grafana/data';
|
2015-09-15 08:17:40 +02:00
|
|
|
|
2017-11-23 14:53:23 +01:00
|
|
|
function ngModelOnBlur() {
|
|
|
|
|
return {
|
2017-12-20 12:33:33 +01:00
|
|
|
restrict: 'A',
|
2017-11-23 14:53:23 +01:00
|
|
|
priority: 1,
|
2017-12-20 12:33:33 +01:00
|
|
|
require: 'ngModel',
|
2019-04-28 09:58:12 +02:00
|
|
|
link: (scope: any, elm: any, attr: any, ngModelCtrl: any) => {
|
2017-12-20 12:33:33 +01:00
|
|
|
if (attr.type === 'radio' || attr.type === 'checkbox') {
|
2017-11-23 14:53:23 +01:00
|
|
|
return;
|
|
|
|
|
}
|
2015-09-15 08:17:40 +02:00
|
|
|
|
2017-12-20 12:33:33 +01:00
|
|
|
elm.off('input keydown change');
|
2018-09-04 17:02:32 +02:00
|
|
|
elm.bind('blur', () => {
|
|
|
|
|
scope.$apply(() => {
|
2017-11-23 14:53:23 +01:00
|
|
|
ngModelCtrl.$setViewValue(elm.val());
|
2015-09-15 08:17:40 +02:00
|
|
|
});
|
2017-11-23 14:53:23 +01:00
|
|
|
});
|
2017-12-20 12:33:33 +01:00
|
|
|
},
|
2017-11-23 14:53:23 +01:00
|
|
|
};
|
2017-11-01 07:51:40 +01:00
|
|
|
}
|
2015-09-15 08:17:40 +02:00
|
|
|
|
2017-11-23 14:53:23 +01:00
|
|
|
function emptyToNull() {
|
|
|
|
|
return {
|
2017-12-20 12:33:33 +01:00
|
|
|
restrict: 'A',
|
|
|
|
|
require: 'ngModel',
|
2019-04-28 09:58:12 +02:00
|
|
|
link: (scope: any, elm: any, attrs: any, ctrl: any) => {
|
|
|
|
|
ctrl.$parsers.push((viewValue: any) => {
|
2017-12-20 12:33:33 +01:00
|
|
|
if (viewValue === '') {
|
2017-12-19 16:06:54 +01:00
|
|
|
return null;
|
|
|
|
|
}
|
2017-11-23 14:53:23 +01:00
|
|
|
return viewValue;
|
|
|
|
|
});
|
2017-12-20 12:33:33 +01:00
|
|
|
},
|
2017-11-23 14:53:23 +01:00
|
|
|
};
|
2017-11-01 07:51:40 +01:00
|
|
|
}
|
2015-09-15 08:17:40 +02:00
|
|
|
|
2017-11-23 14:53:23 +01:00
|
|
|
function validTimeSpan() {
|
|
|
|
|
return {
|
2017-12-20 12:33:33 +01:00
|
|
|
require: 'ngModel',
|
2019-04-28 09:58:12 +02:00
|
|
|
link: (scope: any, elm: any, attrs: any, ctrl: any) => {
|
|
|
|
|
ctrl.$validators.integer = (modelValue: any, viewValue: any) => {
|
2017-11-23 14:53:23 +01:00
|
|
|
if (ctrl.$isEmpty(modelValue)) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
2017-12-20 12:33:33 +01:00
|
|
|
if (viewValue.indexOf('$') === 0 || viewValue.indexOf('+$') === 0) {
|
2017-11-23 14:53:23 +01:00
|
|
|
return true; // allow template variable
|
|
|
|
|
}
|
2018-08-29 14:26:50 +02:00
|
|
|
const info = rangeUtil.describeTextRange(viewValue);
|
2017-11-23 14:53:23 +01:00
|
|
|
return info.invalid !== true;
|
|
|
|
|
};
|
2017-12-20 12:33:33 +01:00
|
|
|
},
|
2017-11-23 14:53:23 +01:00
|
|
|
};
|
2017-11-01 07:51:40 +01:00
|
|
|
}
|
|
|
|
|
|
2017-12-20 12:33:33 +01:00
|
|
|
coreModule.directive('ngModelOnblur', ngModelOnBlur);
|
|
|
|
|
coreModule.directive('emptyToNull', emptyToNull);
|
|
|
|
|
coreModule.directive('validTimeSpan', validTimeSpan);
|