浏览代码

add all zero special case: default 5 intervals

tags/1.2.0
pratu16x7 7 年前
父节点
当前提交
cf834fde94
共有 10 个文件被更改,包括 220 次插入143 次删除
  1. +67
    -57
      dist/frappe-charts.min.cjs.js
  2. +67
    -57
      dist/frappe-charts.min.esm.js
  3. +1
    -1
      dist/frappe-charts.min.iife.js
  4. +1
    -1
      docs/assets/js/frappe-charts.min.js
  5. +2
    -1
      docs/assets/js/index.js
  6. +45
    -1
      package-lock.json
  7. +2
    -1
      package.json
  8. +6
    -0
      src/scripts/charts/AxisChart.js
  9. +3
    -0
      src/scripts/charts/BaseChart.js
  10. +26
    -24
      src/scripts/utils/intervals.js

+ 67
- 57
dist/frappe-charts.min.cjs.js 查看文件

@@ -694,12 +694,6 @@ function normalize(x) {
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) {
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 part_size = 1;

// To avoid too many partitions
if (range > 5) {
if (range % 2 !== 0) {
upper_bound++;
@@ -720,11 +715,18 @@ function get_range_intervals(max) {
part_size = 2;
}

// Special case: 1 and 2
if (range <= 2) {
no_of_parts = 4;
part_size = range / no_of_parts;
}

// Special case: 0
if (range === 0) {
no_of_parts = 5;
part_size = 1;
}

var intervals = [];
for (var i = 0; i <= no_of_parts; 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 min_value = Math.min.apply(Math, toConsumableArray(values));

// Exponent to be used for pretty print
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

@@ -779,66 +796,49 @@ function calc_intervals(values) {

// CASE II: Only min_value negative

if (max_value > 0 && min_value < 0) {
// `with_minimum` irrelevant in this case,
// We'll be handling both sides of zero separately
// (both starting from zero)
// Because ceil() and floor() behave differently
// in those two regions
else if (max_value > 0 && min_value < 0) {
// `with_minimum` irrelevant in this case,
// We'll be handling both sides of zero separately
// (both starting from zero)
// Because ceil() and floor() behave differently
// in those two regions

var get_positive_first_intervals = function get_positive_first_intervals(max_value, abs_min_value) {
var intervals = get_intervals(max_value);
var abs_min_value = Math.abs(min_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);
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;
});
}
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
// CASE III: Both non-positive

if (max_value <= 0 && min_value <= 0) {
// Mirrored Case I:
// Work with positives, then reverse the sign and array
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);
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);
}
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.reverse().map(function (d) {
return d * -1;
});
}

intervals = intervals.map(function (value) {
return get_actual_pretty_num(value, exponent);
});
return intervals;
}

@@ -1132,9 +1132,13 @@ var BaseChart = function () {
console.error("No parent element to render on was provided.");
return;
}
this.validate_and_prepare_data();
this.bind_window_events();
this.refresh(true);
}
}, {
key: 'validate_and_prepare_data',
value: function validate_and_prepare_data() {}
}, {
key: 'bind_window_events',
value: function bind_window_events() {
@@ -1436,11 +1440,17 @@ var AxisChart = function (_BaseChart) {
var zero_index = void 0;

if (y_pts.indexOf(0) >= 0) {
// the range has a given zero
// zero-line on the chart
zero_index = y_pts.indexOf(0);
} else if (y_pts[0] > 0) {
// Minimum value is positive
// zero-line is off the chart: below
var min = y_pts[0];
zero_index = -1 * min / interval;
} else {
// Maximum value is negative
// zero-line is off the chart: above
var max = y_pts[y_pts.length - 1];
zero_index = -1 * max / interval + (y_pts.length - 1);
}


+ 67
- 57
dist/frappe-charts.min.esm.js 查看文件

@@ -692,12 +692,6 @@ function normalize(x) {
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) {
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 part_size = 1;

// To avoid too many partitions
if (range > 5) {
if (range % 2 !== 0) {
upper_bound++;
@@ -718,11 +713,18 @@ function get_range_intervals(max) {
part_size = 2;
}

// Special case: 1 and 2
if (range <= 2) {
no_of_parts = 4;
part_size = range / no_of_parts;
}

// Special case: 0
if (range === 0) {
no_of_parts = 5;
part_size = 1;
}

var intervals = [];
for (var i = 0; i <= no_of_parts; 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 min_value = Math.min.apply(Math, toConsumableArray(values));

// Exponent to be used for pretty print
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

@@ -777,66 +794,49 @@ function calc_intervals(values) {

// CASE II: Only min_value negative

if (max_value > 0 && min_value < 0) {
// `with_minimum` irrelevant in this case,
// We'll be handling both sides of zero separately
// (both starting from zero)
// Because ceil() and floor() behave differently
// in those two regions
else if (max_value > 0 && min_value < 0) {
// `with_minimum` irrelevant in this case,
// We'll be handling both sides of zero separately
// (both starting from zero)
// Because ceil() and floor() behave differently
// in those two regions

var get_positive_first_intervals = function get_positive_first_intervals(max_value, abs_min_value) {
var intervals = get_intervals(max_value);
var abs_min_value = Math.abs(min_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);
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;
});
}
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
// CASE III: Both non-positive

if (max_value <= 0 && min_value <= 0) {
// Mirrored Case I:
// Work with positives, then reverse the sign and array
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);
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);
}
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.reverse().map(function (d) {
return d * -1;
});
}

intervals = intervals.map(function (value) {
return get_actual_pretty_num(value, exponent);
});
return intervals;
}

@@ -1130,9 +1130,13 @@ var BaseChart = function () {
console.error("No parent element to render on was provided.");
return;
}
this.validate_and_prepare_data();
this.bind_window_events();
this.refresh(true);
}
}, {
key: 'validate_and_prepare_data',
value: function validate_and_prepare_data() {}
}, {
key: 'bind_window_events',
value: function bind_window_events() {
@@ -1434,11 +1438,17 @@ var AxisChart = function (_BaseChart) {
var zero_index = void 0;

if (y_pts.indexOf(0) >= 0) {
// the range has a given zero
// zero-line on the chart
zero_index = y_pts.indexOf(0);
} else if (y_pts[0] > 0) {
// Minimum value is positive
// zero-line is off the chart: below
var min = y_pts[0];
zero_index = -1 * min / interval;
} else {
// Maximum value is negative
// zero-line is off the chart: above
var max = y_pts[y_pts.length - 1];
zero_index = -1 * max / interval + (y_pts.length - 1);
}


+ 1
- 1
dist/frappe-charts.min.iife.js
文件差异内容过多而无法显示
查看文件


+ 1
- 1
docs/assets/js/frappe-charts.min.js
文件差异内容过多而无法显示
查看文件


+ 2
- 1
docs/assets/js/index.js 查看文件

@@ -26,7 +26,8 @@ let line_composite_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]},
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]},


+ 45
- 1
package-lock.json 查看文件

@@ -1,6 +1,6 @@
{
"name": "frappe-charts",
"version": "0.0.1",
"version": "0.0.5",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -2764,6 +2764,12 @@
"integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
"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": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz",
@@ -5746,6 +5752,37 @@
"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": {
"version": "1.5.2",
"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": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz",


+ 2
- 1
package.json 查看文件

@@ -8,7 +8,7 @@
"directories": {
"doc": "docs"
},
"files":[
"files": [
"dist"
],
"scripts": {
@@ -48,6 +48,7 @@
"rollup-plugin-postcss": "^0.5.5",
"rollup-plugin-replace": "^2.0.0",
"rollup-plugin-uglify": "^2.0.1",
"rollup-plugin-uglify-es": "0.0.1",
"rollup-watch": "^4.3.1"
}
}

+ 6
- 0
src/scripts/charts/AxisChart.js 查看文件

@@ -74,11 +74,17 @@ export default class AxisChart extends BaseChart {
let zero_index;

if(y_pts.indexOf(0) >= 0) {
// the range has a given zero
// zero-line on the chart
zero_index = y_pts.indexOf(0);
} else if(y_pts[0] > 0) {
// Minimum value is positive
// zero-line is off the chart: below
let min = y_pts[0];
zero_index = (-1) * min / interval;
} else {
// Maximum value is negative
// zero-line is off the chart: above
let max = y_pts[y_pts.length - 1];
zero_index = (-1) * max / interval + (y_pts.length - 1);
}


+ 3
- 0
src/scripts/charts/BaseChart.js 查看文件

@@ -92,10 +92,13 @@ export default class BaseChart {
console.error("No parent element to render on was provided.");
return;
}
this.validate_and_prepare_data();
this.bind_window_events();
this.refresh(true);
}

validate_and_prepare_data() {}

bind_window_events() {
window.addEventListener('resize', () => this.refresh());
window.addEventListener('orientationchange', () => this.refresh());


+ 26
- 24
src/scripts/utils/intervals.js 查看文件

@@ -21,12 +21,6 @@ function normalize(x) {
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) {
let upper_bound = Math.ceil(max);
let lower_bound = Math.floor(min);
@@ -35,6 +29,7 @@ function get_range_intervals(max, min=0) {
let no_of_parts = range;
let part_size = 1;

// To avoid too many partitions
if(range > 5) {
if(range % 2 !== 0) {
upper_bound++;
@@ -45,11 +40,18 @@ function get_range_intervals(max, min=0) {
part_size = 2;
}

// Special case: 1 and 2
if(range <= 2) {
no_of_parts = 4;
part_size = range/no_of_parts;
}

// Special case: 0
if(range === 0) {
no_of_parts = 5;
part_size = 1;
}

let intervals = [];
for(var i = 0; i <= no_of_parts; 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 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

@@ -93,27 +110,13 @@ export function calc_intervals(values, with_minimum=false) {

// 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,
// We'll be handling both sides of zero separately
// (both starting from zero)
// Because ceil() and floor() behave differently
// 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);

if(max_value >= abs_min_value) {
@@ -130,7 +133,7 @@ export function calc_intervals(values, with_minimum=false) {

// CASE III: Both non-positive

if(max_value <= 0 && min_value <= 0) {
else if(max_value <= 0 && min_value <= 0) {
// Mirrored Case I:
// 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.map(value => get_actual_pretty_num(value, exponent));
return intervals;
}



正在加载...
取消
保存