/**
* 深拷贝、合并对象 测试
*/
var utils = require("./dio.js")
var UtilJson = require("./tria.js");
var test = require("./tessera.js");
var opt = require("./pente.js");
//测试
// differrent type
// var des = 1;
// var src = 2;
// var ret = utils.extend(des,src);
// utils.clog(ret,des,src);
// var des = 1;
// var src = "2";
// var ret = utils.extend(des,src);
// utils.clog(ret,des,src);
// var des = 1;
// var src = [2];
// var ret = utils.extend(des,src);
// utils.clog(ret,des,src);
// function function first will be replaced by the second
// var des = function a(){};
// var src = function b(){};
// var ret = utils.extend(des,src);
// utils.clog(ret,des,src);
// function and object
// var des = function a(){};
// var src = {
// code:6,
// versin:"1.1.0",
// getVersion:function(){
// return this.version;
// }
// }
// var ret = utils.extend(des,src);
// utils.clog(ret,des,src);
// utils.printFnInfo(ret);
// two array
// var des = [1,"cn.pheker"];
// var src = ["2","hello",123];
// var ret = utils.extend(des,src);
// utils.clog(ret,des,src);
// two object //TODOS some bugs named Maximum call stack size exceeded
// var des = {
// a:1,
// b:"b",
// children:{
// des_alias:'des_alias',
// name:"des"
// }
// }
// var src = {
// b:"bb",
// c:true,
// children:{
// src_alias:'src_alias',
// name:"src",
// other:"other"
// },
// data:[1,2,3]
// }
// var ret = utils.extend(des,src);
// utils.clog(ret,des,src);
// var formatedJson = UtilJson.formatJson(JSON.stringify(ret))
// console.log(formatedJson);
// var $config = utils.extend(test._config,test.config);
// utils.clog($config,test.config,test._config);
// var formatedJson = UtilJson.formatJson(JSON.stringify($config))
// console.log(formatedJson);
var $opt = utils.extend(opt._options,opt.options,{id:"pheker1111111"});
utils.clog($opt);
var formatedJson = UtilJson.formatJson(JSON.stringify($opt))
console.log(formatedJson);
/**
* 深拷贝、合并对象 实现
*/
function clog(){
var args_num = arguments.length;
var s = "";
for (var i = 0; i < args_num; i++) {
var v = arguments[i];
var type = typeOf(v);
if(type.isFunction()){
s += "["+i+"]: "+v.getName()+"\t"+typeOf(v).name+"\n"+v+"\n";
}else{
s += "["+i+"]: "+JSON.stringify(v)+"\t"+typeOf(v).name+"\n";
}
}
console.log(s);
}
function cdir(value){
var args_num = arguments.length;
var s = "";
for (var i = 0; i < args_num; i++) {
console.dir(arguments[i]);
}
}
Function.prototype.getName = function(){
return this.name || this.toString().match(/function\s*([^(]*)\(/)[1]||'anonymous';
}
// print info of function eg: getInfo(fn0,fn1,...fnn)
function printFnInfo(){
var argLen = arguments.length;
for(var i=0;i<argLen;i++){
console.log("\n-----------------------------\n")
var fn = arguments[i];
console.log("name:\t"+fn.getName());
for(var p in fn){
console.log("property:"+p+"="+fn[p]+",\tprototype:"+JSON.stringify(fn.prototype));//bug:无法显示 原型中的函数
}
}
}
/**
* 判断类型
*/
function typeOf(o){
var type = Object.prototype.toString.call(o);
var name = type.substring(1,type.length-1).split(" ")[1].toLowerCase();
return {
type:type,
name:name,
isNull:function(){
return this.name==="null";
},
isUndefined:function(){
return this.name==="undefined";
},
isNumber:function(){
return this.name==="number";
},
isBoolean:function(){
return this.name==="boolean";
},
isString:function(){
return this.name==="string";
},
isObject:function(){
return this.name==="object";
},
isArray:function(){
return this.name==="array";
},
isFunction:function(){
return this.name==="function";
}
};
}
/**
* 拷贝
*/
function copy(src){
var ret;
if(typeOf(src).isArray()){ //数组
ret = src.slice(0);
}else if(typeOf(src).isObject()){ //对象
ret = {};
for(var p in src){
ret[p] = src[p];
}
}else{ //其它
ret = src;
}
return ret;
}
/**
* 合并
*/
function merge(des,src){
var ret = copy(des);
if(typeOf(des).isArray()&&typeOf(src).isArray()){ // array array
//数组合并
var maxLen = des.length>=src.length?des.length:src.length;
var containObjOrArr = false;
for (var j = 0; j < maxLen; j++) {
if (des[j] && (typeOf(des[j]).isObject() || typeOf(des[j]).isArray()) || src[j] && (typeOf(src[j]).isObject() || typeOf(src[j]).isArray())) {
containObjOrArr = true;
}
}
if (containObjOrArr) {//数组合并
for (var i = 0; i < maxLen; i++) {
ret[i] = merge(des[i], src[i]);
}
} else {//数组替换
ret = src;
}
}else if(typeOf(des).isObject()&&typeOf(src).isObject()){ // object object
for(var p in src){
ret[p] = merge(des[p],src[p]);
}
}else if(typeOf(des).isFunction()&&typeOf(src).isObject()){ // function and object
for(var attr in src){
ret[attr] = merge(des[attr],src[attr]);
}
}else{ // other type or different type
if(!src){
console.log("------empty-------")
ret = src;
}
}
return ret;
}
/**
* 将多个参数合并到第一个参数上码数参数上并返回,且所有参数不变
*/
function extend(){
var argsLen = arguments.length;
var ret = arguments[0];
if(arguments.length<2) return;
for(var i=1;i<argsLen;i++){
ret = merge(ret,arguments[i]);
}
return ret;
}
var utils = {
clog:clog,
cdir:cdir,
printFnInfo:printFnInfo,
extend:extend
}
module.exports = utils;
/**
* 格式化json,
* TODOS:
* 1.ovx数组格式化异常
* 2.不支持转义字符
*/
function formatJson(json){
var len = json.length;
//深度,缩进量
var deep = 0;
//返回值数组
var ret = [];
//平衡组 balanceGroup
var bg = {
isBalance:[],
balanceChar:[],
push:function(isBalance,balanceChar){
this.isBalance.push(isBalance);
this.balanceChar.push(balanceChar);
},
pop:function(isBalance,balanceChar){
this.isBalance.pop(isBalance);
this.balanceChar.pop(balanceChar);
},
getLen:function(){
return this.isBalance.lenght;
},
prev:function(){
var len = this.getLen
return len<2?[]:[this.isBalance[len-1],this.balanceChar[len-1]];
}
}
var inArr = false;
var inObj = 0;
//平衡组 balanceGroup
// var bg = {
// isBalance:[],
// balanceChar:[],
// push:function(isBalance,balanceChar){
// this.isBalance.push(isBalance);
// this.balanceChar.push(balanceChar);
// },
// pop:function(isBalance,balanceChar){
// this.isBalance.pop(isBalance);
// this.balanceChar.pop(balanceChar);
// },
// getLen:function(){
// return this.isBalance.lenght;
// },
// prev:function(){
// var len = this.getLen
// return len<2?[]:[this.isBalance[len-1],this.balanceChar[len-1]];
// }
// }
for(var i=0;i<len;i++){
var v = json[i];
switch(v){
case '{':
if(inArr){
inObj++;
}
deep++;
ret.push(v+'\n'+getSpace(deep));
break;
case '[':
inArr = true;
ret.push(v);
break;
case '}':
if(inArr){
inObj--;
}
deep--;
ret.push('\n'+getSpace(deep)+v);
break;
case ']':
inArr = false;
ret.push(v);
break;
case ',':
if(inArr){//在数组中时,须要特殊处理
if(inObj%2==1){
ret.push(v+'\n'+getSpace(deep));
}else{
ret.push(v);
}
}else{
ret.push(v+'\n'+getSpace(deep));
}
break;
default:
ret.push(v);
break;
}
}
return ret.join('');
}
function getSpace(deep){
var spaces = '';
while(deep-->0){
spaces += ' ';
}
return spaces;
}
exports.formatJson = formatJson;
/**
* just two object
*/
var _config = {
globalConfig:{
style:"background:#1A414B;border:1px solid #0a656c;border-radius:5px;opacity:0.9",
width:300,
height:150,
padding:60,
duration:200
},
title:{
text:"图表的标题",
textAlign:"center",
textColor:"white",
font:"Bold 22px Arial"
},
"type":"bar",//'line','pie'
"x":[2013,2014,2015,2016,2017,2018],
"y":[1500,900,800,2153,1000,523],
"colors":[
"#A67D3D","#9932CD","#FF7F00","#42426F","#5C4033",
"#5C3317","#4A766E","#97694F",
"#6B238E","#9F5F9F","#4F4F2F","#B87333","#871F78",
"#2F4F4F","#B5A642","#D9D919","#A67D3D","#8C7853",
"#00FFFF","#FFFF00","#000000","#70DB93","#2F4F2F",
"#FFFFFF","#FF0000","#00FF00","#0000FF","#FF00FF"
],
"style":{
barWidth:40,
lineWidth:0.8,
color:'black',
barColor:'orange',
textColor:"green",
textAlign:"center",
font:"16px Arial",
animateType:"",
animateDuration:200
},
"aXis":{
height:10
},
"yXis":{
width:10
},
"label":{
show:true,
style:{
color:"black",
font:""
}
},
max:{
color:"#8C7853",
textColor:"#8C7853"
},
min:{
color:"#4A766E",
textColor:"#4A766E"
},
avg:{
color:"white",
textColor:"white"
}
}
///////----------------------我是风骚的分隔线---------------------------////////
var config = {
globalConfig:{
duration:2000
},
title:{
text:"历年赢利(单位:万元)",
color:"white",
font:""
},
"type":"bar",//'line','pie'
"x":[2013,2014,2015,2016,2017,2018],
"y":[1500,900,800,2153,1000,523],
"colors":[
"#A67D3D","#9932CD","#FF7F00","#42426F","#5C4033",
"#5C3317","#4A766E","#97694F",
"#6B238E","#9F5F9F","#4F4F2F","#B87333","#871F78",
"#2F4F4F","#B5A642","#D9D919","#A67D3D","#8C7853",
"#00FFFF","#FFFF00","#000000","#70DB93","#2F4F2F",
"#FFFFFF","#FF0000","#00FF00","#0000FF","#FF00FF"
],
"style":{
barWidth:40,
lineWidth:0.8,
color:'black',
textColor:"green",
textAlign:"left"
},
"aXis":{
height:10
},
"yXis":{
width:10
},
"label":{
show:true,
style:{
// color:"orang",
font:"",
type:""
}
},
max:{
color:"#8C7853"
},
min:{
color:"#4A766E"
},
avg:{
color:"white"
}
}
module.exports = {
_config:_config,
config:config
}
var options = {
id:"radarCanvas",
title:"秋收",
width:450,
height:450,
maxLines:5,
style:"background:#0a656c;border:1px solid #eee;border-radius:5px",
legends:["棉花","玉米"],
names:['1月','2月','3月','4月','5月','6月','7月','8月'],
series:[{
style:{
circle:{
show:true,
solid:true,
radius:6,//半径
color:"blue",
lineWidth:6,
lineColor:"orange"
},
label:{
show:true,
textColor:"orange",
textAlign:"left",
font:"italic bold 12px/20px arial,sans-serif"
}
},
datas:[883,8,22,8,12,19,13,8]
},{
datas:[20,17,18,177,18,14,20,15]
}]
}
var _options = {
title:"雷达图",
width:450,
height:450,
maxLines:5,
style:"background:#0a656c;border:1px solid #eee;border-radius:5px",
radar:{
line:{//雷达线
lineWidth:1,
lineColor:"#999"
},
axis:{//雷达主线
lineWidth:1,
lineColor:"#888"
},
circle:{//雷达点
show:false,
solid:true,
radius:3,//半径
color:"orange",
lineWidth:1,
lineColor:"orange"
},
centerCircle:{//中心点
show:false,
solid:true,
radius:15,//半径
color:"blue",
lineWidth:1,
lineColor:"black"
},
label:{
show:true,
textColor:"white",
textAlign:"center",
font:"italic bold 16px arial,sans-serif"
},
title:{
show:true,
textColor:"orange",
textAlign:"center",
font:"italic bold 20px/30px arial,sans-serif"
},
legends:{
show:true,
width:30,
height:20,
colors:["orange","blue"]
},
padding:50
},
legends:["棉花","玉米"],
names:['1月','2月','3月','4月','5月','6月'],
series:[{
style:{
// line:{
// lineWidth:1,
// lineColor:"orange"
// },
circle:{
show:true,
solid:true,
radius:3,//半径
color:"blue",
lineWidth:1,
lineColor:"orange"
},
label:{
show:true,
textColor:"white",
textAlign:"left",
font:"italic bold 12px/20px arial,sans-serif"
}
},
datas:[13,8,22,8,12,19]
},{
style:{
// line:{
// lineWidth:1,
// lineColor:"blue"
// },
circle:{
show:true,
solid:true,
radius:3,//半径
color:"red",
lineWidth:1,
lineColor:"orange"
},
label:{
show:true,
textColor:"#eee",
textAlign:"left",
font:"italic bold 12px/20px arial,sans-serif"
}
},
datas:[20,17,18,17,18,14]
}]
}
module.exports = {
options:options,
_options:_options
}