diff --git a/docs/v204/getstart.md b/docs/v204/getstart.md
index 7baad18..1d9236d 100644
--- a/docs/v204/getstart.md
+++ b/docs/v204/getstart.md
@@ -8,7 +8,7 @@
cn.langpy
ko-time
- 2.0.5
+ 2.0.4
```
diff --git a/pom.xml b/pom.xml
index 855d908..15f9bc7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
cn.langpy
ko-time
- 2.0.5
+ 2.0.4
koTime
koTime
diff --git a/src/main/resources/static/metricflow.min.js b/src/main/resources/static/metricflow.min.js
index f92f3bc..4936d5d 100644
--- a/src/main/resources/static/metricflow.min.js
+++ b/src/main/resources/static/metricflow.min.js
@@ -1,3 +1,3 @@
-/*written by Huoyo/Zhang Chang ,please respect copyright*/
+/*writen by Huoyo/Zhang Chang ,please respect copyright*/
/* you can use it freely but can not plagiarize it to pretend that you are the owner*/
;function MetricFlow(domId,options){let defaultOptions={'link-start-offsetx':(undefined!=options&&options.hasOwnProperty('link-start-offsetx'))?2+options['link-start-offsetx']:2,'link-start-offsety':(undefined!=options&&options.hasOwnProperty('link-start-offsety'))?-4+options['link-start-offsety']:-4,'link-end-offsetx':(undefined!=options&&options.hasOwnProperty('link-end-offsetx'))?-20+options['link-end-offsetx']:-20,'link-end-offsety':(undefined!=options&&options.hasOwnProperty('link-end-offsety'))?-4+options['link-end-offsety']:-4,'link-width-offset':(undefined!=options&&options.hasOwnProperty('link-width-offset'))?3+options['link-width-offset']:3,'link-color':(undefined!=options&&options.hasOwnProperty('link-color'))?options['link-color']:'#4b804b','node-distance-x':(undefined!=options&&options.hasOwnProperty('node-distance-offsetx'))?100+options['node-distance-offsetx']:100,'node-distance-y':(undefined!=options&&options.hasOwnProperty('node-distance-offsety'))?300+options['node-distance-offsety']:300};let styleDom=document.getElementsByTagName("style")[0];if(styleDom!=undefined){styleDom.innerHTML+='.ko-node{position:absolute;background-color:#5f665f;border:2px solid #4b804b;border-radius:5px;width:auto;}.ko-node .ko-node-title{padding-left:17px;padding-right:10px;background-color:#4b804b;color:white;}.ko-node .ko-node-body{list-style:none;margin-top:5px;margin-bottom:1px;}.ko-node li{padding-right:10px;margin-left:-23px;color:white;border-bottom:1px solid lightslategray;padding-bottom:2px;font-size:10px;}'}else{let style=document.createElement('style');style.type='text/css';style.rel='stylesheet';style.appendChild(document.createTextNode(".ko-node{position:absolute;background-color:#5f665f;border:2px solid #4b804b;border-radius:5px;width:auto;}.ko-node .ko-node-title{padding-left:17px;padding-right:10px;background-color:#4b804b;color:white;}.ko-node .ko-node-body{list-style:none;margin-top:5px;margin-bottom:1px;}.ko-node li{padding-right:10px;margin-left:-23px;color:white;border-bottom:1px solid lightslategray;padding-bottom:2px;font-size:10px;}"));let head=document.getElementsByTagName('head')[0];head.appendChild(style)};let o=new Object();o.dx=defaultOptions['node-distance-x'];o.dy=defaultOptions['node-distance-y'];o.allNodes=new Map();o.back=document.getElementById(domId);o.back.className='ko-node-back';let backWidth=Number(o.back.getAttribute("width").replace("px","").replace("%",""))*2;let backHeight=Number(o.back.getAttribute("height").replace("px","").replace("%",""))*1.5;o.back.innerHTML='';o.svgBack=document.getElementById("svgBack");o.nodesBack=document.getElementById("methods");o.points=document.getElementById("points");o.relations=document.getElementById("relations");let levelInit;function getXy(nodeData,i,w,h){let rootX=nodeData['x'];let rootY=nodeData['y'];let level=nodeData['level'];let children=nodeData['children'];let dy=o.dy/Math.pow(2,level);let childrenLength=children.length;let childX;let childY;if(childrenLength==1){childX=rootX+w+o.dx;childY=rootY}else if(childrenLength>1){if(i==0){childX=rootX+w+o.dx;childY=rootY-(childrenLength-1)*(h+dy)/2;levelInit.set(level,[childX,childY])}else{childX=levelInit.get(level)[0];childY=levelInit.get(level)[1]+i*(h+dy)}};return[childX,childY]};function recurseNode(nodes,formDataFunc){let rootDom;if(formDataFunc!=null&&formDataFunc!=undefined){rootDom=o.createNode(formDataFunc(nodes))}else{rootDom=o.createNode(nodes)};if(nodes.hasOwnProperty("children")){let children=nodes['children'];if(children==null||children==undefined){return};let rootDomW=Number(rootDom.getAttribute("width"));let rootDomH=Number(rootDom.getAttribute("height"));for(let index in children){let childData=children[index];childData['from']=nodes['id'];if(childData.hasOwnProperty("x")==false){let newXy=getXy(nodes,index,rootDomW,rootDomH);childData['x']=newXy[0];childData['y']=newXy[1]}childData['level']=nodes['level']+1;recurseNode(childData,formDataFunc)}}};o.createNodes=function(nodesData,formDataFunc){if(nodesData instanceof Array){for(let index in nodesData){let createData=nodesData[index];if(formDataFunc!=null&&formDataFunc!=undefined){if(createData.hasOwnProperty("children")){o.createNodes(createData,formDataFunc)}else{o.createNode(formDataFunc(createData))}}else{if(createData.hasOwnProperty("children")){o.createNodes(createData)}else{o.createNode(createData)}}}}else if(nodesData.hasOwnProperty("children")){if(nodesData.hasOwnProperty("x")==false||nodesData.hasOwnProperty("y")==false){console.log("invalid data");return};levelInit=new Map();nodesData['level']=1;recurseNode(nodesData,formDataFunc);levelInit=null}else{if(formDataFunc!=null&&formDataFunc!=undefined){o.createNode(formDataFunc(nodesData))}else{o.createNode(nodesData)}}};o.createNode=function(param,x,y){if(o.allNodes.get(param['id'])!=undefined){let node=document.getElementById(param['id']);return node};let nodeText="";if(param.hasOwnProperty("data")){nodeText=nodeText.replace("liBody","")};let liText='';let liTextTemp='LiText';for(let index in param.data){let liBackColor=param.data[index]['background-color']||'#5f665f';let liOtherStyle=param.data[index]['style']||'';liText+=liTextTemp.replace('LiText',param.data[index]['name']).replace('liBackColor',liBackColor).replace('liOtherStyle',liOtherStyle)};let titleColor=param['title']['color']||'white';let titleBackColor=param['title']['background-color']||'#4b804b';let titleOtherStyle=param['title']['style']||'';let nodeBackgroundColor=param['background-color']||'#5f665f';let nodeBorderColor=param['border-color']||'#4b804b';let otherStyle=param['style']||'';let functionText=getFunctionsText(param);nodeText=nodeText.replace('nodeBorderColor',nodeBorderColor).replace('nodeBackgroundColor',nodeBackgroundColor).replace('titleColor',titleColor).replace('titleBackColor',titleBackColor).replace('dataTitle',param['title']['name']).replace('idValue',param['id']).replace('topValue',(param['y']||y)).replace('leftValue',(param['x']||x)).replace('liBody',liText).replace('otherStyle',otherStyle).replace('titleOtherStyle',titleOtherStyle).replace('funcs',functionText);o.nodesBack.innerHTML+=nodeText;let node=document.getElementById(param['id']);node.setAttribute('x',(param['x']||x));node.setAttribute('y',(param['y']||y));node.setAttribute('width',node.offsetWidth);node.setAttribute('height',node.offsetHeight);let nodeObject=new Map();nodeObject.set("ins",new Array());nodeObject.set("outs",new Array());nodeObject.set("node",node);o.allNodes.set(node.id,nodeObject);if(param.hasOwnProperty("from")){let fromId=param['from'];if(typeof(fromId)=='string'){let from=document.getElementById(fromId);if(from!=undefined){o.createLink(from,node)}}else if(fromId instanceof Array){for(let i in fromId){let from=document.getElementById(fromId[i]);if(from!=undefined){o.createLink(from,node)}}}};return node};function getFunctionsText(param){let text='';if(param.hasOwnProperty("click")){text+=' onclick="'+param['click']+'(event);"'};if(param.hasOwnProperty("dblclick")){text+=' ondblclick="'+param['dblclick']+'(event);"'};if(param.hasOwnProperty("mousedown")){text+=' onmousedown="'+param['mousedown']+'(event);"'};if(param.hasOwnProperty("mouseenter")){text+=' onmouseenter="'+param['mouseenter']+'(event);"'};if(param.hasOwnProperty("mouseleave")){text+=' onmouseleave="'+param['mouseleave']+'(event);"'};if(param.hasOwnProperty("mousemove")){text+=' onmousemove="'+param['mousemove']+'(event);"'};if(param.hasOwnProperty("mouseover")){text+=' onmouseover="'+param['mouseover']+'(event);"'};if(param.hasOwnProperty("mouseout")){text+=' onmouseout="'+param['mouseout']+'(event);"'};if(param.hasOwnProperty("mouseup")){text+=' onmouseup="'+param['mouseup']+'(event);"'};return text};o.createSimLink=function(source,target){let sourceTop=Number(source.getAttribute("y"));let sourceLeft=Number(source.getAttribute("x"));var sourceWidth=Number(source.getAttribute("width"));var sourceHeight=Number(source.getAttribute("height"));let targetTop=Number(target.getAttribute("y"));let targetLeft=Number(target.getAttribute("x"));var targetHeight=Number(target.getAttribute("height"));o.points.innerHTML+="";o.points.innerHTML+="";startX=(sourceLeft+sourceWidth)+defaultOptions['link-start-offsetx'];startY=(sourceTop+sourceHeight/2+defaultOptions['link-start-offsety']);endX=targetLeft+defaultOptions['link-end-offsetx'];endY=targetTop+targetHeight/2+defaultOptions['link-end-offsety'];o.relations.innerHTML+=""};o.createLink=function(source,target){let sourceOuts=o.allNodes.get(source.id).get("outs");let targetIns=o.allNodes.get(target.id).get("ins");if(sourceOuts.indexOf("line"+source.id+target.id)>-1){return};let sourceTop=Number(source.getAttribute("y"));let sourceLeft=Number(source.getAttribute("x"));var sourceWidth=Number(source.getAttribute("width"));var sourceHeight=Number(source.getAttribute("height"));let targetTop=Number(target.getAttribute("y"));let targetLeft=Number(target.getAttribute("x"));var targetHeight=Number(target.getAttribute("height"));o.points.innerHTML+="";o.points.innerHTML+="";startX=sourceLeft+sourceWidth+defaultOptions['link-start-offsetx'];startY=sourceTop+sourceHeight/2+defaultOptions['link-start-offsety'];endX=targetLeft+defaultOptions['link-end-offsetx'];endY=targetTop+targetHeight/2+defaultOptions['link-end-offsety'];o.relations.innerHTML+="";sourceOuts.push('line-'+source.id+'-'+target.id);targetIns.push('line-'+source.id+'-'+target.id)};function getMouseTarget(eventElement){let clssName=eventElement.getAttribute('class');if(clssName=='ko-node'){return eventElement}else if(clssName=='ko-node-li'){return eventElement.parentNode.parentNode}else if(clssName=='ko-node-title'){return eventElement.parentNode}else if(clssName=='ko-node-body'){return eventElement.parentNode}else{return eventElement}};function reDrawNodeLines(node){let objectData=o.allNodes.get(node.id);if(objectData==undefined){return};let inIds=objectData.get("ins");for(let index in inIds){let lineId=inIds[index];let lineIdSplit=lineId.split('-');let sourceId=lineIdSplit[1];let targetId=lineIdSplit[2];if(document.getElementById(lineId)!=undefined){document.getElementById(lineId).remove();document.getElementById('pointstart'+sourceId+targetId).remove();document.getElementById('pointend'+sourceId+targetId).remove();o.createSimLink(document.getElementById(sourceId),node)}};let outIds=o.allNodes.get(node.id).get("outs");for(let index in outIds){let lineId=outIds[index];let lineIdSplit=lineId.split('-');let sourceId=lineIdSplit[1];let targetId=lineIdSplit[2];if(document.getElementById(lineId)!=undefined){document.getElementById(lineId).remove();document.getElementById('pointstart'+sourceId+targetId).remove();document.getElementById('pointend'+sourceId+targetId).remove();o.createSimLink(node,document.getElementById(targetId))}}};o.reDrawLines=function(){o.allNodes.forEach(function(nodeData,nodeId){reDrawNodeLines(document.getElementById(nodeId))})};o.moveNode;o.moveNodeX=0;o.moveNodeY=0;o.back.onmousedown=function(e){let mouseTarget=getMouseTarget(e.target);let clssName=mouseTarget.getAttribute('class');o.moveNodeX=e.clientX;o.moveNodeY=e.clientY;if(clssName=='ko-node'){o.moveNode=mouseTarget;o.moveNode.style.cursor='move';o.moveNode.onmousemove=nodeMove;o.moveNode.onmouseup=nodeMoveClose}};o.svgBack.onmousedown=function(e){let mouseTarget=getMouseTarget(e.target);let clssName=mouseTarget.getAttribute('class');o.moveNodeX=e.clientX;o.moveNodeY=e.clientY;if(clssName=='ko-node'){o.moveNode=mouseTarget;o.moveNode.style.cursor='move';o.moveNode.onmousemove=nodeMove;o.moveNode.onmouseup=nodeMoveClose}else{o.moveNode=mouseTarget;o.moveNode.style.cursor='move';o.moveNode.onmousemove=backMove;o.moveNode.onmouseup=nodeMoveClose}};function nodeMove(e){e=e||window.event;let offsetX=o.moveNodeX-e.clientX;let offsetY=o.moveNodeY-e.clientY;o.moveNodeX=e.clientX;o.moveNodeY=e.clientY;let xOff=(o.moveNode.offsetLeft-offsetX);let yOff=(o.moveNode.offsetTop-offsetY);if(Number.isNaN(xOff)||Number.isNaN(yOff)){return};o.moveNode.style.top=yOff+"px";o.moveNode.style.left=xOff+"px";o.moveNode.setAttribute('x',xOff);o.moveNode.setAttribute('y',yOff);reDrawNodeLines(o.moveNode)};function backMove(e){e=e||window.event;let offsetX=o.moveNodeX-e.clientX;let offsetY=o.moveNodeY-e.clientY;o.moveNodeX=e.clientX;o.moveNodeY=e.clientY;o.allNodes.forEach(function(nodeData,nodeId){let moveNode=document.getElementById(nodeId);moveNode.style.top=(moveNode.offsetTop-offsetY)+"px";moveNode.style.left=(moveNode.offsetLeft-offsetX)+"px";moveNode.setAttribute('x',(moveNode.offsetLeft-offsetX));moveNode.setAttribute('y',(moveNode.offsetTop-offsetY));reDrawNodeLines(moveNode)})};function nodeMoveClose(e){o.moveNode.style.cursor='default';o.moveNode.onmouseup=null;o.moveNode.onmousemove=null;o.moveNodeX=null;o.moveNodeY=null};o.back.onmousemove=function(e){var nx=e.clientX;var ny=e.clientY;var nl=nx-(o.moveNodeX-o.l);var nt=ny-(o.moveNodeY-o.t);if(o.isDragNode==true){o.moveNode.style.left=nl+'px';o.moveNode.style.top=nt+'px';o.reDrawLines(o.moveNode)}else if(o.isDragBack==true){o.allNodes.forEach(function(value,nodeKey){let pmoveNode=document.getElementById(nodeKey);let nl=nx-o.moveNodeX;let nt=ny-o.moveNodeY;if(nl>10){pmoveNode.style.left=Number(pmoveNode.style.left.replace('px',''))+10+'px'}else if(nl<-10){pmoveNode.style.left=Number(pmoveNode.style.left.replace('px',''))-10+'px'};if(nt>6){pmoveNode.style.top=Number(pmoveNode.style.top.replace('px',''))+10+'px'}else if(nt<-6){pmoveNode.style.top=Number(pmoveNode.style.top.replace('px',''))-10+'px'}});o.reDrawLines()}};o.back.onmouseup=function(e){o.isDragNode=false;o.isDragBack=false;if((o.moveNode!=undefined)&&(o.moveNode.hasOwnProperty("style")==true)&&(o.moveNode.style.hasOwnProperty("cursor")==true)){o.moveNode.style.cursor='default'}};return o};
\ No newline at end of file