diff --git a/src/ui/public/agg_types/__tests__/buckets/_histogram.js b/src/ui/public/agg_types/__tests__/buckets/_histogram.js
index 906872e8d3bc..cf6f8d6ac86f 100644
--- a/src/ui/public/agg_types/__tests__/buckets/_histogram.js
+++ b/src/ui/public/agg_types/__tests__/buckets/_histogram.js
@@ -35,12 +35,22 @@ describe('Histogram Agg', function () {
describe('interval', function () {
// reads aggConfig.params.interval, writes to dsl.interval
- it('accepts a number', function () {
+ it('accepts a whole number', function () {
let output = paramWriter.write({ interval: 100 });
expect(output.params).to.have.property('interval', 100);
});
- it('accepts a string', function () {
+ it('accepts a decimal number', function () {
+ let output = paramWriter.write({ interval: 0.1 });
+ expect(output.params).to.have.property('interval', 0.1);
+ });
+
+ it('accepts a decimal number string', function () {
+ let output = paramWriter.write({ interval: '0.1' });
+ expect(output.params).to.have.property('interval', 0.1);
+ });
+
+ it('accepts a whole number string', function () {
let output = paramWriter.write({ interval: '10' });
expect(output.params).to.have.property('interval', 10);
});
diff --git a/src/ui/public/agg_types/buckets/_interval_options.js b/src/ui/public/agg_types/buckets/_interval_options.js
index f1a8f151898d..344b7fa30b2c 100644
--- a/src/ui/public/agg_types/buckets/_interval_options.js
+++ b/src/ui/public/agg_types/buckets/_interval_options.js
@@ -1,5 +1,5 @@
import moment from 'moment';
-import 'ui/directives/input_whole_number';
+
export default function IntervalOptionsService(Private) {
// shorthand
diff --git a/src/ui/public/agg_types/buckets/histogram.js b/src/ui/public/agg_types/buckets/histogram.js
index 38ce8b43eb99..866f4f946297 100644
--- a/src/ui/public/agg_types/buckets/histogram.js
+++ b/src/ui/public/agg_types/buckets/histogram.js
@@ -29,7 +29,7 @@ export default function HistogramAggDefinition(Private) {
name: 'interval',
editor: intervalTemplate,
write: function (aggConfig, output) {
- output.params.interval = parseInt(aggConfig.params.interval, 10);
+ output.params.interval = parseFloat(aggConfig.params.interval);
}
},
diff --git a/src/ui/public/agg_types/controls/interval.html b/src/ui/public/agg_types/controls/interval.html
index 829f831ae34e..858b87150dfd 100644
--- a/src/ui/public/agg_types/controls/interval.html
+++ b/src/ui/public/agg_types/controls/interval.html
@@ -35,6 +35,6 @@
class="form-control"
name="interval"
min="0"
- input-whole-number
+ input-number
>
diff --git a/src/ui/public/directives/__tests__/input_whole_number.js b/src/ui/public/directives/__tests__/input_number.js
similarity index 70%
rename from src/ui/public/directives/__tests__/input_whole_number.js
rename to src/ui/public/directives/__tests__/input_number.js
index 0d97c28dfd76..6592ab76174a 100644
--- a/src/ui/public/directives/__tests__/input_whole_number.js
+++ b/src/ui/public/directives/__tests__/input_number.js
@@ -1,12 +1,12 @@
import angular from 'angular';
import expect from 'expect.js';
import ngMock from 'ng_mock';
-import 'ui/directives/input_whole_number';
+import 'ui/directives/input_number';
-describe('Whole number input directive', function () {
+describe('Number input directive', function () {
let $compile;
let $rootScope;
- let html = '';
+ let html = '';
beforeEach(ngMock.module('kibana'));
@@ -22,16 +22,16 @@ describe('Whole number input directive', function () {
$rootScope.$digest();
expect(element.hasClass('ng-valid')).to.be.ok();
- $rootScope.value = '1.0';
+ $rootScope.value = '1';
$rootScope.$digest();
expect(element.hasClass('ng-valid')).to.be.ok();
- $rootScope.value = '-5.0';
+ $rootScope.value = '-5';
$rootScope.$digest();
expect(element.hasClass('ng-valid')).to.be.ok();
});
- it('should disallow numbers with decimals', function () {
+ it('should allow numbers with decimals', function () {
let element = $compile(html)($rootScope);
$rootScope.value = '123.0';
@@ -40,10 +40,10 @@ describe('Whole number input directive', function () {
$rootScope.value = '1.2';
$rootScope.$digest();
- expect(element.hasClass('ng-invalid')).to.be.ok();
+ expect(element.hasClass('ng-valid')).to.be.ok();
$rootScope.value = '-5.5';
$rootScope.$digest();
- expect(element.hasClass('ng-invalid')).to.be.ok();
+ expect(element.hasClass('ng-valid')).to.be.ok();
});
});
diff --git a/src/ui/public/directives/input_number.js b/src/ui/public/directives/input_number.js
new file mode 100644
index 000000000000..51b11f0b9b44
--- /dev/null
+++ b/src/ui/public/directives/input_number.js
@@ -0,0 +1,18 @@
+import uiModules from 'ui/modules';
+let module = uiModules.get('kibana');
+
+module.directive('inputNumber', function () {
+ return {
+ restrict: 'A',
+ require: 'ngModel',
+ link: function ($scope, $elem, attrs, ngModel) {
+ ngModel.$parsers.push(checkNumber);
+ ngModel.$formatters.push(checkNumber);
+
+ function checkNumber(value) {
+ ngModel.$setValidity('number', !isNaN(parseFloat(value)));
+ return value;
+ }
+ }
+ };
+});
diff --git a/src/ui/public/directives/input_whole_number.js b/src/ui/public/directives/input_whole_number.js
deleted file mode 100644
index 5a4f406ea5a9..000000000000
--- a/src/ui/public/directives/input_whole_number.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import uiModules from 'ui/modules';
-let module = uiModules.get('kibana');
-
-module.directive('inputWholeNumber', function () {
- return {
- restrict: 'A',
- require: 'ngModel',
- link: function ($scope, $elem, attrs, ngModel) {
- ngModel.$parsers.push(checkWholeNumber);
- ngModel.$formatters.push(checkWholeNumber);
-
- function checkWholeNumber(value) {
- ngModel.$setValidity('whole', value % 1 === 0);
- return value;
- }
- }
- };
-});