Series.js
资源名称:oa.rar [点击查看]
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:4k
源码类别:
OA系统
开发平台:
Java
- /*
- Copyright (c) 2004-2006, The Dojo Foundation
- All Rights Reserved.
- Licensed under the Academic Free License version 2.1 or above OR the
- modified BSD license. For more information on Dojo licensing, see:
- http://dojotoolkit.org/community/licensing.shtml
- */
- dojo.provide("dojo.charting.Series");
- dojo.require("dojo.lang.common");
- dojo.require("dojo.charting.Plotters");
- dojo.charting.Series = function (kwArgs) {
- var args = kwArgs || {length:1};
- this.dataSource = args.dataSource || null;
- this.bindings = {};
- this.color = args.color;
- this.label = args.label;
- if (args.bindings) {
- for (var p in args.bindings) {
- this.addBinding(p, args.bindings[p]);
- }
- }
- };
- dojo.extend(dojo.charting.Series, {bind:function (src, bindings) {
- this.dataSource = src;
- this.bindings = bindings;
- }, addBinding:function (name, binding) {
- this.bindings[name] = binding;
- }, evaluate:function (kwArgs) {
- var ret = [];
- var a = this.dataSource.getData();
- var l = a.length;
- var start = 0;
- var end = l;
- if (kwArgs) {
- if (kwArgs.between) {
- for (var i = 0; i < l; i++) {
- var fld = this.dataSource.getField(a[i], kwArgs.between.field);
- if (fld >= kwArgs.between.low && fld <= kwArgs.between.high) {
- var o = {src:a[i], series:this};
- for (var p in this.bindings) {
- o[p] = this.dataSource.getField(a[i], this.bindings[p]);
- }
- ret.push(o);
- }
- }
- } else {
- if (kwArgs.from || kwArgs.length) {
- if (kwArgs.from) {
- start = Math.max(kwArgs.from, 0);
- if (kwArgs.to) {
- end = Math.min(kwArgs.to, end);
- }
- } else {
- if (kwArgs.length < 0) {
- start = Math.max((end + length), 0);
- } else {
- end = Math.min((start + length), end);
- }
- }
- for (var i = start; i < end; i++) {
- var o = {src:a[i], series:this};
- for (var p in this.bindings) {
- o[p] = this.dataSource.getField(a[i], this.bindings[p]);
- }
- ret.push(o);
- }
- }
- }
- } else {
- for (var i = start; i < end; i++) {
- var o = {src:a[i], series:this};
- for (var p in this.bindings) {
- o[p] = this.dataSource.getField(a[i], this.bindings[p]);
- }
- ret.push(o);
- }
- }
- if (ret.length > 0 && typeof (ret[0].x) != "undefined") {
- ret.sort(function (a, b) {
- if (a.x > b.x) {
- return 1;
- }
- if (a.x < b.x) {
- return -1;
- }
- return 0;
- });
- }
- return ret;
- }, trends:{createRange:function (values, len) {
- var idx = values.length - 1;
- var length = (len || values.length);
- return {"index":idx, "length":length, "start":Math.max(idx - length, 0)};
- }, mean:function (values, len) {
- var range = this.createRange(values, len);
- if (range.index < 0) {
- return 0;
- }
- var total = 0;
- var count = 0;
- for (var i = range.index; i >= range.start; i--) {
- total += values[i].y;
- count++;
- }
- total /= Math.max(count, 1);
- return total;
- }, variance:function (values, len) {
- var range = this.createRange(values, len);
- if (range.index < 0) {
- return 0;
- }
- var total = 0;
- var square = 0;
- var count = 0;
- for (var i = range.index; i >= range.start; i--) {
- total += values[i].y;
- square += Math.pow(values[i].y, 2);
- count++;
- }
- return (square / count) - Math.pow(total / count, 2);
- }, standardDeviation:function (values, len) {
- return Math.sqrt(this.getVariance(values, len));
- }, max:function (values, len) {
- var range = this.createRange(values, len);
- if (range.index < 0) {
- return 0;
- }
- var max = Number.MIN_VALUE;
- for (var i = range.index; i >= range.start; i--) {
- max = Math.max(values[i].y, max);
- }
- return max;
- }, min:function (values, len) {
- var range = this.createRange(values, len);
- if (range.index < 0) {
- return 0;
- }
- var min = Number.MAX_VALUE;
- for (var i = range.index; i >= range.start; i--) {
- min = Math.min(values[i].y, min);
- }
- return min;
- }, median:function (values, len) {
- var range = this.createRange(values, len);
- if (range.index < 0) {
- return 0;
- }
- var a = [];
- for (var i = range.index; i >= range.start; i--) {
- var b = false;
- for (var j = 0; j < a.length; j++) {
- if (values[i].y == a[j]) {
- b = true;
- break;
- }
- }
- if (!b) {
- a.push(values[i].y);
- }
- }
- a.sort();
- if (a.length > 0) {
- return a[Math.ceil(a.length / 2)];
- }
- return 0;
- }, mode:function (values, len) {
- var range = this.createRange(values, len);
- if (range.index < 0) {
- return 0;
- }
- var o = {};
- var ret = 0;
- var median = Number.MIN_VALUE;
- for (var i = range.index; i >= range.start; i--) {
- if (!o[values[i].y]) {
- o[values[i].y] = 1;
- } else {
- o[values[i].y]++;
- }
- }
- for (var p in o) {
- if (median < o[p]) {
- median = o[p];
- ret = p;
- }
- }
- return ret;
- }}});