add all zero special case: default 5 intervals
This commit is contained in:
parent
f09769c125
commit
cf834fde94
132
dist/frappe-charts.min.cjs.js
vendored
132
dist/frappe-charts.min.cjs.js
vendored
@ -694,12 +694,6 @@ function normalize(x) {
|
|||||||
return [sig * man, exp];
|
return [sig * man, exp];
|
||||||
}
|
}
|
||||||
|
|
||||||
// function get_commafied_or_powered_number(number) {}
|
|
||||||
|
|
||||||
function get_actual_pretty_num(number, exponent) {
|
|
||||||
return number;
|
|
||||||
}
|
|
||||||
|
|
||||||
function get_range_intervals(max) {
|
function get_range_intervals(max) {
|
||||||
var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
||||||
|
|
||||||
@ -710,6 +704,7 @@ function get_range_intervals(max) {
|
|||||||
var no_of_parts = range;
|
var no_of_parts = range;
|
||||||
var part_size = 1;
|
var part_size = 1;
|
||||||
|
|
||||||
|
// To avoid too many partitions
|
||||||
if (range > 5) {
|
if (range > 5) {
|
||||||
if (range % 2 !== 0) {
|
if (range % 2 !== 0) {
|
||||||
upper_bound++;
|
upper_bound++;
|
||||||
@ -720,11 +715,18 @@ function get_range_intervals(max) {
|
|||||||
part_size = 2;
|
part_size = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Special case: 1 and 2
|
||||||
if (range <= 2) {
|
if (range <= 2) {
|
||||||
no_of_parts = 4;
|
no_of_parts = 4;
|
||||||
part_size = range / no_of_parts;
|
part_size = range / no_of_parts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Special case: 0
|
||||||
|
if (range === 0) {
|
||||||
|
no_of_parts = 5;
|
||||||
|
part_size = 1;
|
||||||
|
}
|
||||||
|
|
||||||
var intervals = [];
|
var intervals = [];
|
||||||
for (var i = 0; i <= no_of_parts; i++) {
|
for (var i = 0; i <= no_of_parts; i++) {
|
||||||
intervals.push(lower_bound + part_size * i);
|
intervals.push(lower_bound + part_size * i);
|
||||||
@ -763,8 +765,23 @@ function calc_intervals(values) {
|
|||||||
var max_value = Math.max.apply(Math, toConsumableArray(values));
|
var max_value = Math.max.apply(Math, toConsumableArray(values));
|
||||||
var min_value = Math.min.apply(Math, toConsumableArray(values));
|
var min_value = Math.min.apply(Math, toConsumableArray(values));
|
||||||
|
|
||||||
|
// Exponent to be used for pretty print
|
||||||
var exponent = 0,
|
var exponent = 0,
|
||||||
intervals = [];
|
intervals = []; // eslint-disable-line no-unused-vars
|
||||||
|
|
||||||
|
function get_positive_first_intervals(max_value, abs_min_value) {
|
||||||
|
var intervals = get_intervals(max_value);
|
||||||
|
|
||||||
|
var interval_size = intervals[1] - intervals[0];
|
||||||
|
|
||||||
|
// Then unshift the negative values
|
||||||
|
var value = 0;
|
||||||
|
for (var i = 1; value < abs_min_value; i++) {
|
||||||
|
value += interval_size;
|
||||||
|
intervals.unshift(-1 * value);
|
||||||
|
}
|
||||||
|
return intervals;
|
||||||
|
}
|
||||||
|
|
||||||
// CASE I: Both non-negative
|
// CASE I: Both non-negative
|
||||||
|
|
||||||
@ -779,66 +796,49 @@ function calc_intervals(values) {
|
|||||||
|
|
||||||
// CASE II: Only min_value negative
|
// CASE II: Only min_value negative
|
||||||
|
|
||||||
if (max_value > 0 && min_value < 0) {
|
else if (max_value > 0 && min_value < 0) {
|
||||||
// `with_minimum` irrelevant in this case,
|
// `with_minimum` irrelevant in this case,
|
||||||
// We'll be handling both sides of zero separately
|
// We'll be handling both sides of zero separately
|
||||||
// (both starting from zero)
|
// (both starting from zero)
|
||||||
// Because ceil() and floor() behave differently
|
// Because ceil() and floor() behave differently
|
||||||
// in those two regions
|
// in those two regions
|
||||||
|
|
||||||
var get_positive_first_intervals = function get_positive_first_intervals(max_value, abs_min_value) {
|
var abs_min_value = Math.abs(min_value);
|
||||||
var intervals = get_intervals(max_value);
|
|
||||||
|
|
||||||
var interval_size = intervals[1] - intervals[0];
|
if (max_value >= abs_min_value) {
|
||||||
|
exponent = normalize(max_value)[1];
|
||||||
// Then unshift the negative values
|
intervals = get_positive_first_intervals(max_value, abs_min_value);
|
||||||
var value = 0;
|
} else {
|
||||||
for (var i = 1; value < abs_min_value; i++) {
|
// Mirror: max_value => abs_min_value, then change sign
|
||||||
value += interval_size;
|
exponent = normalize(abs_min_value)[1];
|
||||||
intervals.unshift(-1 * value);
|
var pos_intervals = get_positive_first_intervals(abs_min_value, max_value);
|
||||||
|
intervals = pos_intervals.map(function (d) {
|
||||||
|
return d * -1;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
return intervals;
|
|
||||||
};
|
|
||||||
|
|
||||||
var abs_min_value = Math.abs(min_value);
|
|
||||||
|
|
||||||
if (max_value >= abs_min_value) {
|
|
||||||
exponent = normalize(max_value)[1];
|
|
||||||
intervals = get_positive_first_intervals(max_value, abs_min_value);
|
|
||||||
} else {
|
|
||||||
// Mirror: max_value => abs_min_value, then change sign
|
|
||||||
exponent = normalize(abs_min_value)[1];
|
|
||||||
var pos_intervals = get_positive_first_intervals(abs_min_value, max_value);
|
|
||||||
intervals = pos_intervals.map(function (d) {
|
|
||||||
return d * -1;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// CASE III: Both non-positive
|
|
||||||
|
|
||||||
if (max_value <= 0 && min_value <= 0) {
|
|
||||||
// Mirrored Case I:
|
|
||||||
// Work with positives, then reverse the sign and array
|
|
||||||
|
|
||||||
var pseudo_max_value = Math.abs(min_value);
|
|
||||||
var pseudo_min_value = Math.abs(max_value);
|
|
||||||
|
|
||||||
exponent = normalize(pseudo_max_value)[1];
|
|
||||||
if (!with_minimum) {
|
|
||||||
intervals = get_intervals(pseudo_max_value);
|
|
||||||
} else {
|
|
||||||
intervals = get_intervals(pseudo_max_value, pseudo_min_value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
intervals = intervals.reverse().map(function (d) {
|
// CASE III: Both non-positive
|
||||||
return d * -1;
|
|
||||||
});
|
else if (max_value <= 0 && min_value <= 0) {
|
||||||
}
|
// Mirrored Case I:
|
||||||
|
// Work with positives, then reverse the sign and array
|
||||||
|
|
||||||
|
var pseudo_max_value = Math.abs(min_value);
|
||||||
|
var pseudo_min_value = Math.abs(max_value);
|
||||||
|
|
||||||
|
exponent = normalize(pseudo_max_value)[1];
|
||||||
|
if (!with_minimum) {
|
||||||
|
intervals = get_intervals(pseudo_max_value);
|
||||||
|
} else {
|
||||||
|
intervals = get_intervals(pseudo_max_value, pseudo_min_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
intervals = intervals.reverse().map(function (d) {
|
||||||
|
return d * -1;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
intervals = intervals.map(function (value) {
|
|
||||||
return get_actual_pretty_num(value, exponent);
|
|
||||||
});
|
|
||||||
return intervals;
|
return intervals;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1132,9 +1132,13 @@ var BaseChart = function () {
|
|||||||
console.error("No parent element to render on was provided.");
|
console.error("No parent element to render on was provided.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
this.validate_and_prepare_data();
|
||||||
this.bind_window_events();
|
this.bind_window_events();
|
||||||
this.refresh(true);
|
this.refresh(true);
|
||||||
}
|
}
|
||||||
|
}, {
|
||||||
|
key: 'validate_and_prepare_data',
|
||||||
|
value: function validate_and_prepare_data() {}
|
||||||
}, {
|
}, {
|
||||||
key: 'bind_window_events',
|
key: 'bind_window_events',
|
||||||
value: function bind_window_events() {
|
value: function bind_window_events() {
|
||||||
@ -1436,11 +1440,17 @@ var AxisChart = function (_BaseChart) {
|
|||||||
var zero_index = void 0;
|
var zero_index = void 0;
|
||||||
|
|
||||||
if (y_pts.indexOf(0) >= 0) {
|
if (y_pts.indexOf(0) >= 0) {
|
||||||
|
// the range has a given zero
|
||||||
|
// zero-line on the chart
|
||||||
zero_index = y_pts.indexOf(0);
|
zero_index = y_pts.indexOf(0);
|
||||||
} else if (y_pts[0] > 0) {
|
} else if (y_pts[0] > 0) {
|
||||||
|
// Minimum value is positive
|
||||||
|
// zero-line is off the chart: below
|
||||||
var min = y_pts[0];
|
var min = y_pts[0];
|
||||||
zero_index = -1 * min / interval;
|
zero_index = -1 * min / interval;
|
||||||
} else {
|
} else {
|
||||||
|
// Maximum value is negative
|
||||||
|
// zero-line is off the chart: above
|
||||||
var max = y_pts[y_pts.length - 1];
|
var max = y_pts[y_pts.length - 1];
|
||||||
zero_index = -1 * max / interval + (y_pts.length - 1);
|
zero_index = -1 * max / interval + (y_pts.length - 1);
|
||||||
}
|
}
|
||||||
|
|||||||
132
dist/frappe-charts.min.esm.js
vendored
132
dist/frappe-charts.min.esm.js
vendored
@ -692,12 +692,6 @@ function normalize(x) {
|
|||||||
return [sig * man, exp];
|
return [sig * man, exp];
|
||||||
}
|
}
|
||||||
|
|
||||||
// function get_commafied_or_powered_number(number) {}
|
|
||||||
|
|
||||||
function get_actual_pretty_num(number, exponent) {
|
|
||||||
return number;
|
|
||||||
}
|
|
||||||
|
|
||||||
function get_range_intervals(max) {
|
function get_range_intervals(max) {
|
||||||
var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
||||||
|
|
||||||
@ -708,6 +702,7 @@ function get_range_intervals(max) {
|
|||||||
var no_of_parts = range;
|
var no_of_parts = range;
|
||||||
var part_size = 1;
|
var part_size = 1;
|
||||||
|
|
||||||
|
// To avoid too many partitions
|
||||||
if (range > 5) {
|
if (range > 5) {
|
||||||
if (range % 2 !== 0) {
|
if (range % 2 !== 0) {
|
||||||
upper_bound++;
|
upper_bound++;
|
||||||
@ -718,11 +713,18 @@ function get_range_intervals(max) {
|
|||||||
part_size = 2;
|
part_size = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Special case: 1 and 2
|
||||||
if (range <= 2) {
|
if (range <= 2) {
|
||||||
no_of_parts = 4;
|
no_of_parts = 4;
|
||||||
part_size = range / no_of_parts;
|
part_size = range / no_of_parts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Special case: 0
|
||||||
|
if (range === 0) {
|
||||||
|
no_of_parts = 5;
|
||||||
|
part_size = 1;
|
||||||
|
}
|
||||||
|
|
||||||
var intervals = [];
|
var intervals = [];
|
||||||
for (var i = 0; i <= no_of_parts; i++) {
|
for (var i = 0; i <= no_of_parts; i++) {
|
||||||
intervals.push(lower_bound + part_size * i);
|
intervals.push(lower_bound + part_size * i);
|
||||||
@ -761,8 +763,23 @@ function calc_intervals(values) {
|
|||||||
var max_value = Math.max.apply(Math, toConsumableArray(values));
|
var max_value = Math.max.apply(Math, toConsumableArray(values));
|
||||||
var min_value = Math.min.apply(Math, toConsumableArray(values));
|
var min_value = Math.min.apply(Math, toConsumableArray(values));
|
||||||
|
|
||||||
|
// Exponent to be used for pretty print
|
||||||
var exponent = 0,
|
var exponent = 0,
|
||||||
intervals = [];
|
intervals = []; // eslint-disable-line no-unused-vars
|
||||||
|
|
||||||
|
function get_positive_first_intervals(max_value, abs_min_value) {
|
||||||
|
var intervals = get_intervals(max_value);
|
||||||
|
|
||||||
|
var interval_size = intervals[1] - intervals[0];
|
||||||
|
|
||||||
|
// Then unshift the negative values
|
||||||
|
var value = 0;
|
||||||
|
for (var i = 1; value < abs_min_value; i++) {
|
||||||
|
value += interval_size;
|
||||||
|
intervals.unshift(-1 * value);
|
||||||
|
}
|
||||||
|
return intervals;
|
||||||
|
}
|
||||||
|
|
||||||
// CASE I: Both non-negative
|
// CASE I: Both non-negative
|
||||||
|
|
||||||
@ -777,66 +794,49 @@ function calc_intervals(values) {
|
|||||||
|
|
||||||
// CASE II: Only min_value negative
|
// CASE II: Only min_value negative
|
||||||
|
|
||||||
if (max_value > 0 && min_value < 0) {
|
else if (max_value > 0 && min_value < 0) {
|
||||||
// `with_minimum` irrelevant in this case,
|
// `with_minimum` irrelevant in this case,
|
||||||
// We'll be handling both sides of zero separately
|
// We'll be handling both sides of zero separately
|
||||||
// (both starting from zero)
|
// (both starting from zero)
|
||||||
// Because ceil() and floor() behave differently
|
// Because ceil() and floor() behave differently
|
||||||
// in those two regions
|
// in those two regions
|
||||||
|
|
||||||
var get_positive_first_intervals = function get_positive_first_intervals(max_value, abs_min_value) {
|
var abs_min_value = Math.abs(min_value);
|
||||||
var intervals = get_intervals(max_value);
|
|
||||||
|
|
||||||
var interval_size = intervals[1] - intervals[0];
|
if (max_value >= abs_min_value) {
|
||||||
|
exponent = normalize(max_value)[1];
|
||||||
// Then unshift the negative values
|
intervals = get_positive_first_intervals(max_value, abs_min_value);
|
||||||
var value = 0;
|
} else {
|
||||||
for (var i = 1; value < abs_min_value; i++) {
|
// Mirror: max_value => abs_min_value, then change sign
|
||||||
value += interval_size;
|
exponent = normalize(abs_min_value)[1];
|
||||||
intervals.unshift(-1 * value);
|
var pos_intervals = get_positive_first_intervals(abs_min_value, max_value);
|
||||||
|
intervals = pos_intervals.map(function (d) {
|
||||||
|
return d * -1;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
return intervals;
|
|
||||||
};
|
|
||||||
|
|
||||||
var abs_min_value = Math.abs(min_value);
|
|
||||||
|
|
||||||
if (max_value >= abs_min_value) {
|
|
||||||
exponent = normalize(max_value)[1];
|
|
||||||
intervals = get_positive_first_intervals(max_value, abs_min_value);
|
|
||||||
} else {
|
|
||||||
// Mirror: max_value => abs_min_value, then change sign
|
|
||||||
exponent = normalize(abs_min_value)[1];
|
|
||||||
var pos_intervals = get_positive_first_intervals(abs_min_value, max_value);
|
|
||||||
intervals = pos_intervals.map(function (d) {
|
|
||||||
return d * -1;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// CASE III: Both non-positive
|
|
||||||
|
|
||||||
if (max_value <= 0 && min_value <= 0) {
|
|
||||||
// Mirrored Case I:
|
|
||||||
// Work with positives, then reverse the sign and array
|
|
||||||
|
|
||||||
var pseudo_max_value = Math.abs(min_value);
|
|
||||||
var pseudo_min_value = Math.abs(max_value);
|
|
||||||
|
|
||||||
exponent = normalize(pseudo_max_value)[1];
|
|
||||||
if (!with_minimum) {
|
|
||||||
intervals = get_intervals(pseudo_max_value);
|
|
||||||
} else {
|
|
||||||
intervals = get_intervals(pseudo_max_value, pseudo_min_value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
intervals = intervals.reverse().map(function (d) {
|
// CASE III: Both non-positive
|
||||||
return d * -1;
|
|
||||||
});
|
else if (max_value <= 0 && min_value <= 0) {
|
||||||
}
|
// Mirrored Case I:
|
||||||
|
// Work with positives, then reverse the sign and array
|
||||||
|
|
||||||
|
var pseudo_max_value = Math.abs(min_value);
|
||||||
|
var pseudo_min_value = Math.abs(max_value);
|
||||||
|
|
||||||
|
exponent = normalize(pseudo_max_value)[1];
|
||||||
|
if (!with_minimum) {
|
||||||
|
intervals = get_intervals(pseudo_max_value);
|
||||||
|
} else {
|
||||||
|
intervals = get_intervals(pseudo_max_value, pseudo_min_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
intervals = intervals.reverse().map(function (d) {
|
||||||
|
return d * -1;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
intervals = intervals.map(function (value) {
|
|
||||||
return get_actual_pretty_num(value, exponent);
|
|
||||||
});
|
|
||||||
return intervals;
|
return intervals;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1130,9 +1130,13 @@ var BaseChart = function () {
|
|||||||
console.error("No parent element to render on was provided.");
|
console.error("No parent element to render on was provided.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
this.validate_and_prepare_data();
|
||||||
this.bind_window_events();
|
this.bind_window_events();
|
||||||
this.refresh(true);
|
this.refresh(true);
|
||||||
}
|
}
|
||||||
|
}, {
|
||||||
|
key: 'validate_and_prepare_data',
|
||||||
|
value: function validate_and_prepare_data() {}
|
||||||
}, {
|
}, {
|
||||||
key: 'bind_window_events',
|
key: 'bind_window_events',
|
||||||
value: function bind_window_events() {
|
value: function bind_window_events() {
|
||||||
@ -1434,11 +1438,17 @@ var AxisChart = function (_BaseChart) {
|
|||||||
var zero_index = void 0;
|
var zero_index = void 0;
|
||||||
|
|
||||||
if (y_pts.indexOf(0) >= 0) {
|
if (y_pts.indexOf(0) >= 0) {
|
||||||
|
// the range has a given zero
|
||||||
|
// zero-line on the chart
|
||||||
zero_index = y_pts.indexOf(0);
|
zero_index = y_pts.indexOf(0);
|
||||||
} else if (y_pts[0] > 0) {
|
} else if (y_pts[0] > 0) {
|
||||||
|
// Minimum value is positive
|
||||||
|
// zero-line is off the chart: below
|
||||||
var min = y_pts[0];
|
var min = y_pts[0];
|
||||||
zero_index = -1 * min / interval;
|
zero_index = -1 * min / interval;
|
||||||
} else {
|
} else {
|
||||||
|
// Maximum value is negative
|
||||||
|
// zero-line is off the chart: above
|
||||||
var max = y_pts[y_pts.length - 1];
|
var max = y_pts[y_pts.length - 1];
|
||||||
zero_index = -1 * max / interval + (y_pts.length - 1);
|
zero_index = -1 * max / interval + (y_pts.length - 1);
|
||||||
}
|
}
|
||||||
|
|||||||
2
dist/frappe-charts.min.iife.js
vendored
2
dist/frappe-charts.min.iife.js
vendored
File diff suppressed because one or more lines are too long
2
docs/assets/js/frappe-charts.min.js
vendored
2
docs/assets/js/frappe-charts.min.js
vendored
File diff suppressed because one or more lines are too long
@ -26,7 +26,8 @@ let line_composite_data = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let more_line_data = {
|
let more_line_data = {
|
||||||
0: {values: [4, 0, 3, 1, 1, 2, 1, 2, 1, 0, 1, 1]},
|
// 0: {values: [4, 0, 3, 1, 1, 2, 1, 2, 1, 0, 1, 1]},
|
||||||
|
0: {values: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]},
|
||||||
1: {values: [2, 3, 3, 2, 1, 4, 0, 1, 2, 7, 11, 4]},
|
1: {values: [2, 3, 3, 2, 1, 4, 0, 1, 2, 7, 11, 4]},
|
||||||
2: {values: [7, 7, 2, 4, 0, 1, 5, 3, 1, 2, 0, 1]},
|
2: {values: [7, 7, 2, 4, 0, 1, 5, 3, 1, 2, 0, 1]},
|
||||||
3: {values: [0, 2, 6, 2, 2, 1, 2, 3, 6, 3, 7, 10]},
|
3: {values: [0, 2, 6, 2, 2, 1, 2, 3, 6, 3, 7, 10]},
|
||||||
|
|||||||
46
package-lock.json
generated
46
package-lock.json
generated
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "frappe-charts",
|
"name": "frappe-charts",
|
||||||
"version": "0.0.1",
|
"version": "0.0.5",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@ -2764,6 +2764,12 @@
|
|||||||
"integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
|
"integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"graceful-readlink": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"has": {
|
"has": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz",
|
||||||
@ -5746,6 +5752,37 @@
|
|||||||
"uglify-js": "3.1.5"
|
"uglify-js": "3.1.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"rollup-plugin-uglify-es": {
|
||||||
|
"version": "0.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/rollup-plugin-uglify-es/-/rollup-plugin-uglify-es-0.0.1.tgz",
|
||||||
|
"integrity": "sha1-5FZE8raFpZq9uTY0ByB6A6e1qbc=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"uglify-es": "3.0.3"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"commander": {
|
||||||
|
"version": "2.9.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
|
||||||
|
"integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"graceful-readlink": "1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"uglify-es": {
|
||||||
|
"version": "3.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.0.3.tgz",
|
||||||
|
"integrity": "sha1-Y8yEqpRos0lzpIh3h8ZMAaiodXY=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"commander": "2.9.0",
|
||||||
|
"source-map": "0.5.7",
|
||||||
|
"uglify-to-browserify": "1.0.2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"rollup-pluginutils": {
|
"rollup-pluginutils": {
|
||||||
"version": "1.5.2",
|
"version": "1.5.2",
|
||||||
"resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz",
|
"resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz",
|
||||||
@ -6195,6 +6232,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"uglify-to-browserify": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
"ultron": {
|
"ultron": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz",
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
"directories": {
|
"directories": {
|
||||||
"doc": "docs"
|
"doc": "docs"
|
||||||
},
|
},
|
||||||
"files":[
|
"files": [
|
||||||
"dist"
|
"dist"
|
||||||
],
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
@ -48,6 +48,7 @@
|
|||||||
"rollup-plugin-postcss": "^0.5.5",
|
"rollup-plugin-postcss": "^0.5.5",
|
||||||
"rollup-plugin-replace": "^2.0.0",
|
"rollup-plugin-replace": "^2.0.0",
|
||||||
"rollup-plugin-uglify": "^2.0.1",
|
"rollup-plugin-uglify": "^2.0.1",
|
||||||
|
"rollup-plugin-uglify-es": "0.0.1",
|
||||||
"rollup-watch": "^4.3.1"
|
"rollup-watch": "^4.3.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -74,11 +74,17 @@ export default class AxisChart extends BaseChart {
|
|||||||
let zero_index;
|
let zero_index;
|
||||||
|
|
||||||
if(y_pts.indexOf(0) >= 0) {
|
if(y_pts.indexOf(0) >= 0) {
|
||||||
|
// the range has a given zero
|
||||||
|
// zero-line on the chart
|
||||||
zero_index = y_pts.indexOf(0);
|
zero_index = y_pts.indexOf(0);
|
||||||
} else if(y_pts[0] > 0) {
|
} else if(y_pts[0] > 0) {
|
||||||
|
// Minimum value is positive
|
||||||
|
// zero-line is off the chart: below
|
||||||
let min = y_pts[0];
|
let min = y_pts[0];
|
||||||
zero_index = (-1) * min / interval;
|
zero_index = (-1) * min / interval;
|
||||||
} else {
|
} else {
|
||||||
|
// Maximum value is negative
|
||||||
|
// zero-line is off the chart: above
|
||||||
let max = y_pts[y_pts.length - 1];
|
let max = y_pts[y_pts.length - 1];
|
||||||
zero_index = (-1) * max / interval + (y_pts.length - 1);
|
zero_index = (-1) * max / interval + (y_pts.length - 1);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -92,10 +92,13 @@ export default class BaseChart {
|
|||||||
console.error("No parent element to render on was provided.");
|
console.error("No parent element to render on was provided.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
this.validate_and_prepare_data();
|
||||||
this.bind_window_events();
|
this.bind_window_events();
|
||||||
this.refresh(true);
|
this.refresh(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
validate_and_prepare_data() {}
|
||||||
|
|
||||||
bind_window_events() {
|
bind_window_events() {
|
||||||
window.addEventListener('resize', () => this.refresh());
|
window.addEventListener('resize', () => this.refresh());
|
||||||
window.addEventListener('orientationchange', () => this.refresh());
|
window.addEventListener('orientationchange', () => this.refresh());
|
||||||
|
|||||||
@ -21,12 +21,6 @@ function normalize(x) {
|
|||||||
return [sig * man, exp];
|
return [sig * man, exp];
|
||||||
}
|
}
|
||||||
|
|
||||||
// function get_commafied_or_powered_number(number) {}
|
|
||||||
|
|
||||||
function get_actual_pretty_num(number, exponent) {
|
|
||||||
return number;
|
|
||||||
}
|
|
||||||
|
|
||||||
function get_range_intervals(max, min=0) {
|
function get_range_intervals(max, min=0) {
|
||||||
let upper_bound = Math.ceil(max);
|
let upper_bound = Math.ceil(max);
|
||||||
let lower_bound = Math.floor(min);
|
let lower_bound = Math.floor(min);
|
||||||
@ -35,6 +29,7 @@ function get_range_intervals(max, min=0) {
|
|||||||
let no_of_parts = range;
|
let no_of_parts = range;
|
||||||
let part_size = 1;
|
let part_size = 1;
|
||||||
|
|
||||||
|
// To avoid too many partitions
|
||||||
if(range > 5) {
|
if(range > 5) {
|
||||||
if(range % 2 !== 0) {
|
if(range % 2 !== 0) {
|
||||||
upper_bound++;
|
upper_bound++;
|
||||||
@ -45,11 +40,18 @@ function get_range_intervals(max, min=0) {
|
|||||||
part_size = 2;
|
part_size = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Special case: 1 and 2
|
||||||
if(range <= 2) {
|
if(range <= 2) {
|
||||||
no_of_parts = 4;
|
no_of_parts = 4;
|
||||||
part_size = range/no_of_parts;
|
part_size = range/no_of_parts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Special case: 0
|
||||||
|
if(range === 0) {
|
||||||
|
no_of_parts = 5;
|
||||||
|
part_size = 1;
|
||||||
|
}
|
||||||
|
|
||||||
let intervals = [];
|
let intervals = [];
|
||||||
for(var i = 0; i <= no_of_parts; i++){
|
for(var i = 0; i <= no_of_parts; i++){
|
||||||
intervals.push(lower_bound + part_size * i);
|
intervals.push(lower_bound + part_size * i);
|
||||||
@ -78,7 +80,22 @@ export function calc_intervals(values, with_minimum=false) {
|
|||||||
let max_value = Math.max(...values);
|
let max_value = Math.max(...values);
|
||||||
let min_value = Math.min(...values);
|
let min_value = Math.min(...values);
|
||||||
|
|
||||||
let exponent = 0, intervals = [];
|
// Exponent to be used for pretty print
|
||||||
|
let exponent = 0, intervals = []; // eslint-disable-line no-unused-vars
|
||||||
|
|
||||||
|
function get_positive_first_intervals(max_value, abs_min_value) {
|
||||||
|
let intervals = get_intervals(max_value);
|
||||||
|
|
||||||
|
let interval_size = intervals[1] - intervals[0];
|
||||||
|
|
||||||
|
// Then unshift the negative values
|
||||||
|
let value = 0;
|
||||||
|
for(var i = 1; value < abs_min_value; i++) {
|
||||||
|
value += interval_size;
|
||||||
|
intervals.unshift((-1) * value);
|
||||||
|
}
|
||||||
|
return intervals;
|
||||||
|
}
|
||||||
|
|
||||||
// CASE I: Both non-negative
|
// CASE I: Both non-negative
|
||||||
|
|
||||||
@ -93,27 +110,13 @@ export function calc_intervals(values, with_minimum=false) {
|
|||||||
|
|
||||||
// CASE II: Only min_value negative
|
// CASE II: Only min_value negative
|
||||||
|
|
||||||
if(max_value > 0 && min_value < 0) {
|
else if(max_value > 0 && min_value < 0) {
|
||||||
// `with_minimum` irrelevant in this case,
|
// `with_minimum` irrelevant in this case,
|
||||||
// We'll be handling both sides of zero separately
|
// We'll be handling both sides of zero separately
|
||||||
// (both starting from zero)
|
// (both starting from zero)
|
||||||
// Because ceil() and floor() behave differently
|
// Because ceil() and floor() behave differently
|
||||||
// in those two regions
|
// in those two regions
|
||||||
|
|
||||||
function get_positive_first_intervals(max_value, abs_min_value) {
|
|
||||||
let intervals = get_intervals(max_value);
|
|
||||||
|
|
||||||
let interval_size = intervals[1] - intervals[0];
|
|
||||||
|
|
||||||
// Then unshift the negative values
|
|
||||||
let value = 0;
|
|
||||||
for(var i = 1; value < abs_min_value; i++) {
|
|
||||||
value += interval_size;
|
|
||||||
intervals.unshift((-1) * value)
|
|
||||||
}
|
|
||||||
return intervals;
|
|
||||||
}
|
|
||||||
|
|
||||||
let abs_min_value = Math.abs(min_value);
|
let abs_min_value = Math.abs(min_value);
|
||||||
|
|
||||||
if(max_value >= abs_min_value) {
|
if(max_value >= abs_min_value) {
|
||||||
@ -130,7 +133,7 @@ export function calc_intervals(values, with_minimum=false) {
|
|||||||
|
|
||||||
// CASE III: Both non-positive
|
// CASE III: Both non-positive
|
||||||
|
|
||||||
if(max_value <= 0 && min_value <= 0) {
|
else if(max_value <= 0 && min_value <= 0) {
|
||||||
// Mirrored Case I:
|
// Mirrored Case I:
|
||||||
// Work with positives, then reverse the sign and array
|
// Work with positives, then reverse the sign and array
|
||||||
|
|
||||||
@ -147,7 +150,6 @@ export function calc_intervals(values, with_minimum=false) {
|
|||||||
intervals = intervals.reverse().map(d => d * (-1));
|
intervals = intervals.reverse().map(d => d * (-1));
|
||||||
}
|
}
|
||||||
|
|
||||||
intervals = intervals.map(value => get_actual_pretty_num(value, exponent));
|
|
||||||
return intervals;
|
return intervals;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user